iam-floyd 0.770.0 → 0.771.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.
@@ -1735,6 +1735,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
1735
1735
  AmazonSageMakerCanvasSMDataScienceAssistantAccess() {
1736
1736
  return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonSageMakerCanvasSMDataScienceAssistantAccess);
1737
1737
  }
1738
+ /** This policy grants permissions to Amazon SageMaker Capacity Reservations to publish CloudWatch metrics into customer accounts for utilization visibility. */
1739
+ AmazonSageMakerCapacityReservationServiceRolePolicy() {
1740
+ return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonSageMakerCapacityReservationServiceRolePolicy);
1741
+ }
1738
1742
  /** This policy grants permissions commonly needed to use Amazon SageMaker Cluster. */
1739
1743
  AmazonSageMakerClusterInstanceRolePolicy() {
1740
1744
  return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonSageMakerClusterInstanceRolePolicy);
@@ -5933,4 +5937,4 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
5933
5937
  }
5934
5938
  }
5935
5939
  exports.AwsManagedPolicy = AwsManagedPolicy;
5936
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWlhbS1mbG95ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1pYW0tZmxveWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXNDO0FBQ3RDLDJDQUF5RTtBQUV6RTs7Ozs7O0dBTUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLDRCQUFzQjtJQUN4RCx5REFBeUQ7SUFDbEQsK0JBQStCO1FBQ2xDLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRUQseU1BQXlNO0lBQ2xNLDJCQUEyQjtRQUM5QixPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELDBEQUEwRDtJQUNuRCxtQkFBbUI7UUFDdEIsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCxxSUFBcUk7SUFDOUgsMEJBQTBCO1FBQzdCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRUQsMkxBQTJMO0lBQ3BMLHNDQUFzQztRQUN6QyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDekgsQ0FBQztJQUVELHNJQUFzSTtJQUMvSCx5QkFBeUI7UUFDNUIsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCxpRkFBaUY7SUFDMUUsdUJBQXVCO1FBQzFCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdC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QUFDO0lBRUQsdUZBQXVGO0lBQ2hGLGdDQUFnQztRQUNuQyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUVELDRGQUE0RjtJQUNyRixvQ0FBb0M7UUFDdkMsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQ3ZILENBQUM7SUFFRCxzRkFBc0Y7SUFDL0UseUJBQXlCO1FBQzVCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM1RyxDQUFDO0NBQ0o7QUF4dU9ELDRDQXd1T0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NfaWFtIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXdzTWFuYWdlZFBvbGljeSBhcyBBd3NNYW5hZ2VkUG9saWN5U3RhdGljIH0gZnJvbSAnLi9pYW0tZmxveWQnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGFsbCBBV1MgbWFuYWdlZCBwb2xpY2llcy5cbiAqXG4gKiBUbyBnZXQgdGhlIG5hbWUsIGFjY2VzcyB0aGUgc3RhdGljIHByb3BlcnRpZXMgb2YgdGhpcyBjbGFzcywgZS5nLiBgQXdzTWFuYWdlZFBvbGljeS5SZWFkT25seUFjY2Vzc2AuXG4gKlxuICogIFRvIGdldCBhbiBgYXdzX2lhbS5JTWFuYWdlZFBvbGljeWAgb2JqZWN0LCBjYWxsIHRoZSBtZXRob2RzIG9uIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcywgZS5nLiBgbmV3IEF3c01hbmFnZWRQb2xpY3koKS5SZWFkT25seUFjY2VzcygpYC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF3c01hbmFnZWRQb2xpY3kgZXh0ZW5kcyBBd3NNYW5hZ2VkUG9saWN5U3RhdGljIHtcbiAgICAvKiogQWxsb3cgQWNjZXNzIEFuYWx5emVyIHRvIGFuYWx5emUgcmVzb3VyY2UgbWV0YWRhdGEgKi9cbiAgICBwdWJsaWMgQWNjZXNzQW5hbHl6ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BY2Nlc3NBbmFseXplclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRm9yIHVzZSB3aXRoIGFjY291bnRzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgVmVyY2VsIE1hcmtldHBsYWNlIGludGVncmF0aW9uIHdpdGggQVdTLiBQcm92aWRlcyBhY2Nlc3MgdG8gYWNjb3VudCBtYW5hZ2VtZW50LCBub3RpZmljYXRpb24sIGNvc3QgYW5kIHVzYWdlIGFuYWx5c2lzLCBhbmQgaWRlbnRpdHkgcHJvdmlkZXIgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQWNjb3VudE1hbmFnZW1lbnRGcm9tVmVyY2VsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFjY291bnRNYW5hZ2VtZW50RnJvbVZlcmNlbCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBZG1pbmlzdHJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFkbWluaXN0cmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWNjb3VudCBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB3aGlsZSBleHBsaWNpdGx5IGFsbG93aW5nIGRpcmVjdCBhY2Nlc3MgdG8gcmVzb3VyY2VzIG5lZWRlZCBieSBBbXBsaWZ5IGFwcGxpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgQWRtaW5pc3RyYXRvckFjY2Vzc0FtcGxpZnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWRtaW5pc3RyYXRvckFjY2Vzc0FtcGxpZnkpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWNjb3VudCBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucy4gRXhwbGljaXRseSBhbGxvd3MgZGV2ZWxvcGVycyBhbmQgYWRtaW5pc3RyYXRvcnMgdG8gZ2FpbiBkaXJlY3QgYWNjZXNzIHRvIHJlc291cmNlcyB0aGV5IG5lZWQgdG8gbWFuYWdlIEFXUyBFbGFzdGljIEJlYW5zdGFsayBhcHBsaWNhdGlvbnMgKi9cbiAgICBwdWJsaWMgQWRtaW5pc3RyYXRvckFjY2Vzc0FXU0VsYXN0aWNCZWFuc3RhbGsoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWRtaW5pc3RyYXRvckFjY2Vzc0FXU0VsYXN0aWNCZWFuc3RhbGspO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSB0aGUgQVdTIERldk9wcyBBZ2VudCB0byBjb25kdWN0IGludmVzdGlnYXRpb25zIGFuZCBwZXJmb3JtIGFuYWx5c2lzIG9uIGN1c3RvbWVyIEFXUyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFJRGV2T3BzQWdlbnRBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlEZXZPcHNBZ2VudEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEZXZPcHMgQWdlbnQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFJRGV2T3BzQWdlbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJRGV2T3BzQWdlbnRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRGV2T3BzIEFnZW50IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBSURldk9wc0FnZW50UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlEZXZPcHNBZ2VudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHVzZSB0aGUgQVdTIERldk9wcyBvcGVyYXRvciB3ZWIgYXBwIGZvciBhbiBBZ2VudCBTcGFjZS4gKi9cbiAgICBwdWJsaWMgQUlEZXZPcHNPcGVyYXRvckFwcEFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSURldk9wc09wZXJhdG9yQXBwQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEFtYXpvbiBBSSBPcGVyYXRpb25zIEFzc2lzdGFudCB0byBnZW5lcmF0ZSBpbmNpZGVudCByZXBvcnQgb2YgdGhlIGludmVzdGlnYXRpb24uICovXG4gICAgcHVibGljIEFJT3BzQXNzaXN0YW50SW5jaWRlbnRSZXBvcnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlPcHNBc3Npc3RhbnRJbmNpZGVudFJlcG9ydFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIFJlYWRPbmx5IHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IHRoZSBBbWF6b24gQUkgT3BlcmF0aW9ucyBBc3Npc3RhbnQgdG8gZG8gYW5hbHlzaXMgb24gY3VzdG9tZXIgQVdTIHJlc291cmNlcyBkdXJpbmcgaW52ZXN0aWdhdGlvbnMuICovXG4gICAgcHVibGljIEFJT3BzQXNzaXN0YW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzQXNzaXN0YW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBSSBPcGVyYXRpb25zIHNlcnZpY2UgYW5kIGl0cyByZXF1aXJlZCBwZXJtaXNzaW9ucyB2aWEgQVdTIGNvbnNvbGUuIEl0IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gdXNlIGlkZW50aXR5LWF3YXJlIGNvbnNvbGUgc2Vzc2lvbnMuICovXG4gICAgcHVibGljIEFJT3BzQ29uc29sZUFkbWluUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzQ29uc29sZUFkbWluUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY2VzcyB0byB0aGUgQW1hem9uIEFJIE9wZXJhdGlvbnMgQVBJcyBmb3IgY3JlYXRpbmcsIHVwZGF0aW5nLCBhbmQgZGVsZXRpbmcgaW52ZXN0aWdhdGlvbnMsIGludmVzdGlnYXRpb24gZXZlbnRzLCBhbmQgaW52ZXN0aWdhdGlvbiByZXNvdXJjZXMuIEl0IGFsc28gaW5jbHVkZXMgUmVhZE9ubHkgYWNjZXNzIHRvIGFsbCBBSSBPcGVyYXRpb25zIEFQSXMgYW5kIHRvIHVzZSBpZGVudGl0eS1hd2FyZSBzZXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQUlPcHNPcGVyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc09wZXJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIFJlYWRPbmx5IHBlcm1pc3Npb25zIHRvIHRoZSBBbWF6b24gQUkgT3BlcmF0aW9ucyBzZXJ2aWNlIGFuZCBpdHMgcmVxdWlyZWQgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBSU9wc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGRldmljZSBzZXR1cCBhY2Nlc3MgdG8gQWxleGFGb3JCdXNpbmVzcyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzRGV2aWNlU2V0dXAoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc0RldmljZVNldHVwKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFsZXhhRm9yQnVzaW5lc3MgcmVzb3VyY2VzIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgU2VydmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGdhdGV3YXkgZXhlY3V0aW9uIGFjY2VzcyB0byBBbGV4YUZvckJ1c2luZXNzIHNlcnZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NHYXRld2F5RXhlY3V0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NHYXRld2F5RXhlY3V0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBhY2Nlc3MgdG8gTGlmZXNpemUgQVZTIGRldmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc0xpZmVzaXplRGVsZWdhdGVkQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NMaWZlc2l6ZURlbGVnYXRlZEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGVuYWJsZXMgQWxleGEgZm9yIEJ1c2luZXNzIHRvIHBlcmZvcm0gYXV0b21hdGVkIHRhc2tzIHNjaGVkdWxlZCBieSB5b3VyIG5ldHdvcmsgcHJvZmlsZXMuICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NOZXR3b3JrUHJvZmlsZVNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc05ldHdvcmtQcm9maWxlU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgYWNjZXNzIHRvIFBvbHkgQVZTIGRldmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc1BvbHlEZWxlZ2F0ZWRBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc1BvbHlEZWxlZ2F0ZWRBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWQgb25seSBhY2Nlc3MgdG8gQWxleGFGb3JCdXNpbmVzcyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gY3JlYXRlL2VkaXQvZGVsZXRlIEFQSXMgaW4gQW1hem9uIEFQSSBHYXRld2F5IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQVBJR2F0ZXdheUFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQVBJR2F0ZXdheUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBpbnZva2UgQVBJcyBpbiBBbWF6b24gQVBJIEdhdGV3YXkuICovXG4gICAgcHVibGljIEFtYXpvbkFQSUdhdGV3YXlJbnZva2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFQSUdhdGV3YXlJbnZva2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFQSSBHYXRld2F5IHRvIHB1c2ggbG9ncyB0byB1c2VyJ3MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQVBJR2F0ZXdheVB1c2hUb0Nsb3VkV2F0Y2hMb2dzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFQSUdhdGV3YXlQdXNoVG9DbG91ZFdhdGNoTG9ncyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBcHBGbG93IGFuZCBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIHN1cHBvcnRlZCBhcyBmbG93IHNvdXJjZSBvciBkZXN0aW5hdGlvbiAoUzMgYW5kIFJlZHNoaWZ0KS4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gS01TIGZvciBlbmNyeXB0aW9uICovXG4gICAgcHVibGljIEFtYXpvbkFwcEZsb3dGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcEZsb3dGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQXBwZmxvdyBmbG93cyAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBGbG93UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwRmxvd1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFSQyBSZWdpb24gc3dpdGNoIGZvciBwbGFuIGV4ZWN1dGlvbiBhbmQgcGxhbiBldmFsdWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBsaWNhdGlvblJlY292ZXJ5Q29udHJvbGxlclJlZ2lvblN3aXRjaFBsYW5FeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwbGljYXRpb25SZWNvdmVyeUNvbnRyb2xsZXJSZWdpb25Td2l0Y2hQbGFuRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEFwcFN0cmVhbSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFwcFN0cmVhbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBBcHBTdHJlYW0gMi4wIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENBIGluIGN1c3RvbWVyIGFjY291bnRzIGZvciBjZXJ0aWZpY2F0ZS1iYXNlZCBhdXRoZW50aWNhdGlvbiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBTdHJlYW1QQ0FBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtUENBQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQXBwU3RyZWFtIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwU3RyZWFtUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQW1hem9uIEFwcFN0cmVhbSBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFwcFN0cmVhbVNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtU2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEF0aGVuYSBhbmQgc2NvcGVkIGFjY2VzcyB0byB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCB0byBlbmFibGUgcXVlcnlpbmcsIHdyaXRpbmcgcmVzdWx0cywgYW5kIGRhdGEgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXRoZW5hRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdGhlbmFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcnVuIEFtYXpvbiBBdGhlbmEgKi9cbiAgICBwdWJsaWMgQW1hem9uQXRoZW5hU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXRoZW5hU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcGVyZm9ybSBhbGwgb3BlcmF0aW9ucyBBbWF6b24gQXVnbWVudGVkIEFJIHJlc291cmNlcywgaW5jbHVkaW5nIEZsb3dEZWZpbml0aW9ucywgSHVtYW5UYXNrVWlzIGFuZCBIdW1hbkxvb3BzLiBEb2VzIG5vdCBhbGxvdyBhY2Nlc3MgZm9yIGNyZWF0aW5nIEZsb3dEZWZpbml0aW9ucyBhZ2FpbnN0IHRoZSBwdWJsaWMtY3Jvd2QgV29ya3RlYW0uICovXG4gICAgcHVibGljIEFtYXpvbkF1Z21lbnRlZEFJRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdWdtZW50ZWRBSUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcGVyZm9ybSBhbGwgb3BlcmF0aW9ucyBvbiBIdW1hbkxvb3BzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BdWdtZW50ZWRBSUh1bWFuTG9vcEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXVnbWVudGVkQUlIdW1hbkxvb3BGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHBlcmZvcm0gYWxsIG9wZXJhdGlvbnMgQW1hem9uIEF1Z21lbnRlZCBBSSByZXNvdXJjZXMsIGluY2x1ZGluZyBGbG93RGVmaW5pdGlvbnMsIEh1bWFuVGFza1VpcyBhbmQgSHVtYW5Mb29wcy4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhvc2Ugb3BlcmF0aW9ucyBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBpbnRlZ3JhdGVkIHdpdGggQW1hem9uIEF1Z21lbnRlZCBBSS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXVnbWVudGVkQUlJbnRlZ3JhdGVkQVBJQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1Z21lbnRlZEFJSW50ZWdyYXRlZEFQSUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNvbnNvbGUgZnVsbCBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQXVyb3JhIERTUUwgKi9cbiAgICBwdWJsaWMgQW1hem9uQXVyb3JhRFNRTENvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1cm9yYURTUUxDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEF1cm9yYSBEU1FMICovXG4gICAgcHVibGljIEFtYXpvbkF1cm9yYURTUUxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1cm9yYURTUUxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBdXJvcmEgRFNRTCAqL1xuICAgIHB1YmxpYyBBbWF6b25BdXJvcmFEU1FMUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXVyb3JhRFNRTFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQmVkcm9jayBNb2RlbCBpbmZlcmVuY2UgcGVybWlzc2lvbiB0byBCZWRyb2NrIGFnZW50IGNvcmUgbWVtb3J5ICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tBZ2VudENvcmVNZW1vcnlCZWRyb2NrTW9kZWxJbmZlcmVuY2VFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tBZ2VudENvcmVNZW1vcnlCZWRyb2NrTW9kZWxJbmZlcmVuY2VFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgYXMgd2VsbCBhcyBsaW1pdGVkIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGl0ICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgYXMgd2VsbCBhcyB0byByZWxhdGVkIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGl0ICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tMaW1pdGVkQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tMaW1pdGVkQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgTWFudGxlIGFzIHdlbGwgYXMgbGltaXRlZCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBieSBpdCAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrTWFudGxlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrTWFudGxlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYW5kIGluZmVyZW5jZSBjcmVhdGlvbiBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgTWFudGxlICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tNYW50bGVJbmZlcmVuY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja01hbnRsZUluZmVyZW5jZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgTWFudGxlICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tNYW50bGVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrTWFudGxlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byBBbWF6b24gQmVkcm9jayBNYXJrZXRwbGFjZSBhcyB3ZWxsIGFzIHRvIHJlbGF0ZWQgc2VydmljZXMgdGhhdCBhcmUgcmVxdWlyZWQgYnkgaXQgKi9cbiAgICBwdWJsaWMgQW1hem9uQmVkcm9ja01hcmtldHBsYWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tNYXJrZXRwbGFjZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgKi9cbiAgICBwdWJsaWMgQW1hem9uQmVkcm9ja1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmluZXMgdGhlIG1heGltdW0gcGVybWlzc2lvbnMgb2YgSUFNIHJvbGVzIHRoYXQgQW1hem9uIEJlZHJvY2sgU3R1ZGlvIGNyZWF0ZXMgZm9yIG9wZXJhdGluZyBBbWF6b24gQmVkcm9jayBTdHVkaW8gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrU3R1ZGlvUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrU3R1ZGlvUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBCcmFrZXQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBsb2dzKS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQnJha2V0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CcmFrZXRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIHJlc291cmNlcyBuZWNlc3NhcnkgZm9yIGV4ZWN1dGluZyBhbiBBbWF6b24gQnJha2V0IEpvYiBpbmNsdWRpbmcgUzMsIENsb3Vkd2F0Y2gsIElBTSBhbmQgQnJha2V0ICovXG4gICAgcHVibGljIEFtYXpvbkJyYWtldEpvYnNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQnJha2V0Sm9ic0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQnJha2V0IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uQnJha2V0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQnJha2V0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2hpbWUgQWRtaW4gQ29uc29sZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDaGltZSBBZG1pbiBDb25zb2xlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBDaGltZSBTREsgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVNESygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVNESyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgUG9saWN5IEZvciBBbWF6b24gQ2hpbWUgU0RLIE1lZGlhUGlwZWxpbmVzIFNlcnZpY2UgTGlua2VkIFJvbGUgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVTREtNZWRpYVBpcGVsaW5lc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lU0RLTWVkaWFQaXBlbGluZXNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ2hpbWUgU0RLIE1lc3NhZ2luZyB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyBhbmQgZW5hYmxlIG1lc3NhZ2luZyBmdW5jdGlvbmFsaXR5ICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lU0RLTWVzc2FnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVTREtNZXNzYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBDaGltZSAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENoaW1lIHRvIGFjY2VzcyBBbWF6b24gVHJhbnNjcmliZSBhbmQgQW1hem9uIFRyYW5zY3JpYmUgTWVkaWNhbCBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVRyYW5zY3JpcHRpb25TZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVRyYW5zY3JpcHRpb25TZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgbWFuYWdlbWVudCBhY2Nlc3MgdG8gQW1hem9uIENoaW1lIEFkbWluIENvbnNvbGUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVVzZXJNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lVXNlck1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQW1hem9uIENoaW1lIFZvaWNlQ29ubmVjdG9yICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lVm9pY2VDb25uZWN0b3JTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVZvaWNlQ29ubmVjdG9yU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2xvdWQgRGlyZWN0b3J5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkRGlyZWN0b3J5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZERpcmVjdG9yeUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZCBEaXJlY3RvcnkgU2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWREaXJlY3RvcnlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZERpcmVjdG9yeVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmlkZW50bHkuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIHJlbGF0ZWQgQW1hem9uIFMzLCBBbWF6b24gU05TLCBBbWF6b24gQ2xvdWRXYXRjaCwgYW5kIG90aGVyIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmlkZW50bHkgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZFdhdGNoIEV2aWRlbnRseSBTZXJ2aWNlIHRvIG1hbmFnZSBhc3NvY2lhdGVkIEFXUyBSZXNvdXJjZXMgb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lciAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoRXZpZGVudGx5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIGZvciB0aGUgQW1hem9uIENsb3VkV2F0Y2ggUlVNIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaFJVTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaFJVTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZCBvbmx5IHBlcm1pc3Npb25zIGZvciB0aGUgQW1hem9uIENsb3VkV2F0Y2ggUlVNIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaFJVTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hSVU1SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9uIHRvIEFtYXpvbiBDbG91ZFdhdGNoIFJVTSBTZXJ2aWNlIHRvIHB1Ymxpc2ggbW9uaXRvcmluZyBkYXRhIHRvIG90aGVyIHJlbGV2YW50IEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoUlVNU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaFJVTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvZGVDYXRhbHlzdCAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlQ2F0YWx5c3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVDYXRhbHlzdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDb2RlQ2F0YWx5c3QgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUNhdGFseXN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUNhdGFseXN0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvZGVDYXRhbHlzdCB0byBjcmVhdGUsIHVwZGF0ZSwgYW5kIHJlc29sdmUgQVdTIFN1cHBvcnQgY2FzZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVDYXRhbHlzdFN1cHBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUNhdGFseXN0U3VwcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCBieSBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIgYWdlbnQuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJBZ2VudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVByb2ZpbGVyQWdlbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVByb2ZpbGVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvZGVHdXJ1IFJldmlld2VyIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVSZXZpZXdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVSZXZpZXdlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDb2RlR3VydSBSZXZpZXdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVSZXZpZXdlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UmV2aWV3ZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIENvZGVHdXJ1IFJldmlld2VyIHRvIGFjY2VzcyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UmV2aWV3ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVJldmlld2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgU2VjdXJpdHkuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1U2VjdXJpdHlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1U2VjdXJpdHlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIGZvciB3b3JraW5nIHdpdGggQW1hem9uIENvZGVHdXJ1IFNlY3VyaXR5IHNjYW5zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVNlY3VyaXR5U2NhbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVNlY3VyaXR5U2NhbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gQ29nbml0byBBUElzIHRvIHN1cHBvcnQgZGV2ZWxvcGVyIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdGllcyBmcm9tIHlvdXIgYXV0aGVudGljYXRpb24gYmFja2VuZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b0RldmVsb3BlckF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9EZXZlbG9wZXJBdXRoZW50aWNhdGVkSWRlbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ29nbml0byBVc2VyIFBvb2xzIHNlcnZpY2UgdG8gdXNlIHlvdXIgU0VTIGlkZW50aXRpZXMgZm9yIGVtYWlsIHNlbmRpbmcgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b0lkcEVtYWlsU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b0lkcEVtYWlsU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIENvZ25pdG8gVXNlciBQb29scyAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvSWRwU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b0lkcFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGV4aXN0aW5nIEFtYXpvbiBDb2duaXRvIHJlc291cmNlcy4gWW91IHdpbGwgbmVlZCBBV1MgYWNjb3VudCBhZG1pbiBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBuZXcgQ29nbml0byByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9Qb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b1Bvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENvZ25pdG8gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZGVmaW5lcyB0aGUgc2V0IG9mIHBlcm1pc3Npb25zIGFsbG93ZWQgZm9yIHVuYXV0aGVudGljYXRlZCBpZGVudGl0aWVzIGZvciBDb2duaXRvIElkZW50aXR5IFBvb2xzLiBUaGlzIHBvbGljeSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIHN0YW5kIGFsb25lIHBlcm1pc3Npb24gcG9saWN5LiBJdCBpcyB1c2VkIGFzIGEgZ3VhcmRyYWlsIGFnYWluc3Qgb3Zlcmx5IHBlcm1pc3NpdmUgcG9saWNpZXMgYXR0YWNoZWQgZm9yIHJvbGVzIGluIGFuIGlkZW50aXR5IHBvb2wuIERvIG5vdCBhdHRhY2ggdGhpcyBwb2xpY3kgdG8gYW55IHJvbGVzLCBhcyBDb2duaXRvIElkZW50aXR5IFNlcnZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGluY2x1ZGUgaXQgYXMgYSBzY29wZWQgZG93biBwb2xpY3kgd2hlbiBjcmVhdGluZyBjcmVkZW50aWFscy4gVGhlIHByaXZpbGVnZXMgdG8gdGVtcG9yYXJpbHkgYWNjZXNzIG90aGVyIEFXUyByZXNvdXJjZXMgdGhyb3VnaCB0aGUgZW5oYW5jZWQgZmxvdyB3aWxsIG5vdyBiZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpZGVudGl0eSBvZiB0aGUgdW5hdXRoZW50aWNhdGVkIHVzZXIgcHJvdmlkZWQgYnkgYSBzZXJ2aWNlLCBhbmQgdGhlIHByaXZpbGVnZXMgZ2l2ZW4gaW4gdGhpcyBtYW5hZ2VkIHBvbGljeSB0aGF0IGlzIG93bmVkIGJ5IENvZ25pdG8uICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9VbkF1dGhlZElkZW50aXRpZXNTZXNzaW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9VbkF1dGhlZElkZW50aXRpZXNTZXNzaW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZGVmaW5lcyB0aGUgc2V0IG9mIHBlcm1pc3Npb25zIGFsbG93ZWQgZm9yIHVuYXV0aGVudGljYXRlZCBpZGVudGl0aWVzIGZvciBDb2duaXRvIElkZW50aXR5IFBvb2xzLiBUaGlzIGRvZXMgbm90IG5lZWQgdG8gYmUgYXR0YWNoZWQgdG8geW91ciB1bmF1dGggcm9sZSwgYXMgQ29nbml0byBJZGVudGl0eSBTZXJ2aWNlIHdpbGwgYXV0b21hdGljYWxseSBpbmNsdWRlIGl0IGFzIGEgc2NvcGVkIGRvd24gcG9saWN5IHdoZW4gY3JlYXRpbmcgY3JlZGVudGlhbHMuIFRoZSBwcml2aWxlZ2VzIHRvIHRlbXBvcmFyaWx5IGFjY2VzcyBvdGhlciBBV1MgcmVzb3VyY2VzIHRocm91Z2ggdGhlIGVuaGFuY2VkIGZsb3cgd2lsbCBub3cgYmUgZGVmaW5lZCBieSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSByb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaWRlbnRpdHkgb2YgdGhlIHVuYXV0aGVudGljYXRlZCB1c2VyIHByb3ZpZGVkIGJ5IGEgc2VydmljZSwgYW5kIHRoZSBwcml2aWxlZ2VzIGdpdmVuIGluIHRoaXMgbWFuYWdlZCBwb2xpY3kgdGhhdCBpcyBvd25lZCBieSBDb2duaXRvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvVW5hdXRoZW50aWNhdGVkSWRlbnRpdGllcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvVW5hdXRoZW50aWNhdGVkSWRlbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBwdXJwb3NlIG9mIHRoaXMgcG9saWN5IGlzIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvIEFXUyBDb25uZWN0IHVzZXJzIHJlcXVpcmVkIHRvIHVzZSBDb25uZWN0IHJlc291cmNlcy4gVGhpcyBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvbm5lY3QgcmVzb3VyY2VzIHZpYSB0aGUgQ29ubmVjdCBDb25zb2xlIGFuZCBwdWJsaWMgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQW1hem9uIENvbm5lY3QgQ2FtcGFpZ25zIHNlcnZpY2UgbGlua2VkIHJvbGUgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdENhbXBhaWduc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RDYW1wYWlnbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgdGhlIEFtYXpvbiBDb25uZWN0IGluc3RhbmNlcyBpbiB5b3VyIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29ubmVjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDb25uZWN0IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0U2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvbm5lY3QgdG8gc3luY2hyb25pemUgQVdTIHJlc291cmNlcyBhY3Jvc3MgcmVnaW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdFN5bmNocm9uaXphdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RTeW5jaHJvbml6YXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDb25uZWN0IFZvaWNlIElEICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RWb2ljZUlERnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0Vm9pY2VJREZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBjb25zdW1lIEFtYXpvbiBCZWRyb2NrIG1vZGVscywgaW5jbHVkaW5nIGludm9raW5nIEFtYXpvbiBCZWRyb2NrIGFwcGxpY2F0aW9uIGluZmVyZW5jZSBwcm9maWxlIGNyZWF0ZWQgZm9yIHBhcnRpY3VsYXIgQW1hem9uIERhdGFab25lIGRvbWFpbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVCZWRyb2NrTW9kZWxDb25zdW1wdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUJlZHJvY2tNb2RlbENvbnN1bXB0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIEFtYXpvbiBCZWRyb2NrIG1vZGVsIGFjY2VzcywgaW5jbHVkaW5nIGNyZWF0aW5nLCB0YWdnaW5nIGFuZCBkZWxldGluZyBhcHBsaWNhdGlvbiBpbmZlcmVuY2UgcHJvZmlsZXMuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lQmVkcm9ja01vZGVsTWFuYWdlbWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUJlZHJvY2tNb2RlbE1hbmFnZW1lbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBEYXRhWm9uZSdzIERvbWFpbkV4ZWN1dGlvblJvbGUgc2VydmljZSByb2xlLiBUaGlzIHJvbGUgaXMgdXNlZCBieSBBbWF6b24gRGF0YVpvbmUgdG8gY2F0YWxvZywgZGlzY292ZXIsIGdvdmVybiwgc2hhcmUsIGFuZCBhbmFseXplIGRhdGEgaW4gdGhlIEFtYXpvbiBEYXRhWm9uZSBkb21haW4uICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lRG9tYWluRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZURvbWFpbkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gRGF0YVpvbmUgY3JlYXRlcyBJQU0gcm9sZXMgZm9yIEVudmlyb25tZW50cyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVFbnZpcm9ubWVudFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lRW52aXJvbm1lbnRSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEYXRhWm9uZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYXMgd2VsbCBhcyBsaW1pdGVkIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGl0LiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERhdGFab25lLCBidXQgZG9lcyBub3QgYWxsb3cgdGhlIG1hbmFnZW1lbnQgb2YgZG9tYWlucywgdXNlcnMsIG9yIGFzc29jaWF0ZWQgYWNjb3VudHMuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lRnVsbFVzZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVGdWxsVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGFsbG93IEFtYXpvbiBEYXRhWm9uZSB0byBlbmFibGUgcHVibGlzaGluZyBhbmQgYWNjZXNzIGdyYW50cyB0byBkYXRhLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUdsdWVNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lR2x1ZU1hbmFnZUFjY2Vzc1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gRGF0YVpvbmUgaXMgYSBkYXRhIG1hbmFnZW1lbnQgc2VydmljZSB0aGF0IGVuYWJsZXMgeW91IHRvIGNhdGFsb2csIGRpc2NvdmVyLCBnb3Zlcm4sIHNoYXJlLCBhbmQgYW5hbHl6ZSB5b3VyIGRhdGEuIFdpdGggQW1hem9uIERhdGFab25lLCB5b3UgY2FuIHNoYXJlIGFuZCBhY2Nlc3MgeW91ciBkYXRhIGFjcm9zcyBhY2NvdW50cyBhbmQgc3VwcG9ydGVkIHJlZ2lvbnMuIEFtYXpvbiBEYXRhWm9uZSBzaW1wbGlmaWVzIHlvdXIgZXhwZXJpZW5jZSBhY3Jvc3MgQVdTIHNlcnZpY2VzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgQW1hem9uIFJlZHNoaWZ0LCBBbWF6b24gQXRoZW5hLCBBV1MgR2x1ZSwgYW5kIEFXUyBMYWtlIEZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVSZWRzaGlmdEdsdWVQcm92aXNpb25pbmdQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVSZWRzaGlmdEdsdWVQcm92aXNpb25pbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBBbWF6b24gRGF0YVpvbmUgcGVybWlzc2lvbnMgdG8gcHVibGlzaCBBbWF6b24gUmVkc2hpZnQgZGF0YSB0byB0aGUgY2F0YWxvZy4gSXQgYWxzbyBnaXZlcyBBbWF6b24gRGF0YVpvbmUgcGVybWlzc2lvbnMgdG8gZ3JhbnQgYWNjZXNzIG9yIHJldm9rZSBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IG9yIEFtYXpvbiBSZWRzaGlmdCBTZXJ2ZXJsZXNzIHB1Ymxpc2hlZCBhc3NldHMgaW4gdGhlIGNhdGFsb2cuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lUmVkc2hpZnRNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lUmVkc2hpZnRNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyRW52aXJvbm1lbnRSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSBwb2xpY3kgaXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIG9uIGFuIGV4ZWN1dGlvbiByb2xlIGNyZWF0ZWQgaW4gYSBTYWdlTWFrZXIgZW52aXJvbm1lbnQgcHJvdmlzaW9uZWQgYnkgQW1hem9uIERhdGFab25lLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZVNhZ2VNYWtlckVudmlyb25tZW50Um9sZVBlcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJFbnZpcm9ubWVudFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyTWFuYWdlQWNjZXNzUm9sZVBvbGljeSBwb2xpY3kgZ3JhbnRzIEFtYXpvbiBEYXRhWm9uZSB0aGUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gZ3JhbnQgdXNlciBhY2Nlc3MgdG8gdmFyaW91cyByZXNvdXJjZXMgaW4gdGhlIFNhZ2VNYWtlciBlbnZpcm9ubWVudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lU2FnZU1ha2VyTWFuYWdlQWNjZXNzUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBbWF6b25EYXRhWm9uZVNhZ2VNYWtlclByb3Zpc2lvbmluZ1JvbGVQb2xpY3kgcG9saWN5IGdyYW50cyBBbWF6b24gRGF0YVpvbmUgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGludGVyb3BlcmF0ZSB3aXRoIEFtYXpvbiBTYWdlTWFrZXIuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyUHJvdmlzaW9uaW5nUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZVNhZ2VNYWtlclByb3Zpc2lvbmluZ1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiAgUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERldGVjdGl2ZSBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBjb25zb2xlIFVJIGRlcGVuZGVuY2llcyAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXRlY3RpdmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBpbnZlc3RpZ2F0b3IgYWNjZXNzIHRvIEFtYXpvbiBEZXRlY3RpdmUgc2VydmljZSBhbmQgc2NvcGVkIGFjY2VzcyB0byB0aGUgY29uc29sZSBVSSBkZXBlbmRlbmNpZXMuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIGRpdmUgaW50byBEZXRlY3RpdmUgZm9yIGludmVzdGlnYXRpb24gcHVycG9zZXMgYW5kIGxpbWl0ZWQgd3JpdGUgYWNjZXNzIHRvIEd1YXJkZHV0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV0ZWN0aXZlSW52ZXN0aWdhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZUludmVzdGlnYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1lbWJlciBhY2Nlc3MgdG8gQW1hem9uIERldGVjdGl2ZSBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBjb25zb2xlIFVJIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV0ZWN0aXZlTWVtYmVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZU1lbWJlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIE9yZ2FuaXphdGlvbnMgYWNjZXNzIHRvIG1hbmFnZSBEZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBmb3IgQW1hem9uIERldGVjdGl2ZSBhbmQgc2NvcGVkIGFjY2VzcyB0byB0aGUgY29uc29sZSBVSSBkZXBlbmRlbmNpZXMuIFRoaXMgYWxzbyBncmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIGZvciBEZXRlY3RpdmUuICovXG4gICAgcHVibGljIEFtYXpvbkRldGVjdGl2ZU9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV0ZWN0aXZlT3JnYW5pemF0aW9uc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gRGV0ZWN0aXZlIHRvIG1ha2Ugc2VydmljZSBjYWxscyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXRlY3RpdmVTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXRlY3RpdmVTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBwb2xpY3kgZ3JhbnRzIGZ1bGwtYWNjZXNzIHRvIHRoZSBEZXZPcHMgR3VydSBjb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1Q29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV2T3BzR3VydUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERldk9wcyBHdXJ1LiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgYWNjZXNzIHRvIGVuYWJsZSBhbmQgbWFuYWdlIEFtYXpvbiBEZXZPcHMgR3VydSB3aXRoaW4gYW4gb3JnYW5pemF0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1T3JnYW5pemF0aW9uc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1T3JnYW5pemF0aW9uc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIERldk9wcyBHdXJ1IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkRldk9wc0d1cnVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFtYXpvbiBEZXZPcHNHdXJ1IHRvIGFjY2VzcyB5b3VyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV2T3BzR3VydVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldk9wc0d1cnVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB1cGxvYWQgRE1TIHJlcGxpY2F0aW9uIGxvZ3MgdG8gY2xvdWR3YXRjaCBsb2dzIGluIGN1c3RvbWVyIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvbkRNU0Nsb3VkV2F0Y2hMb2dzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25ETVNDbG91ZFdhdGNoTG9nc1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIFMzIHNldHRpbmdzIGZvciBSZWRzaGlmdCBlbmRwb2ludHMgZm9yIERNUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRE1TUmVkc2hpZnRTM1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRE1TUmVkc2hpZnRTM1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIFZQQyBzZXR0aW5ncyBmb3IgQVdTIG1hbmFnZWQgY3VzdG9tZXIgY29uZmlndXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uRE1TVlBDTWFuYWdlbWVudFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRE1TVlBDTWFuYWdlbWVudFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIERvY3VtZW50REItRWxhc3RpYyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJFbGFzdGljU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJFbGFzdGljU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIERvY3VtZW50REIgd2l0aCBNb25nb0RCIGNvbXBhdGliaWxpdHkgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgZnVsbCBhY2Nlc3MgdG8gcHVibGlzaCBvbiBhbGwgU05TIHRvcGljcyB3aXRoaW4gdGhlIGFjY291bnQsIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgZWRpdCBBbWF6b24gRUMyIGluc3RhbmNlcyBhbmQgVlBDIGNvbmZpZ3VyYXRpb25zLCBwZXJtaXNzaW9ucyB0byB2aWV3IGFuZCBsaXN0IGtleXMgb24gQW1hem9uIEtNUywgYW5kIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSRFMgYW5kIEFtYXpvbiBOZXB0dW5lLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Eb2NEQkNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRvY0RCQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRG9jdW1lbnREQiBFbGFzdGljIENsdXN0ZXJzIGFuZCBvdGhlciByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgaXRzIGRlcGVuZGVuY2llcyBpbmNsdWRpbmcgRUMyLCBLTVMsIFNlY3JldHNNYW5hZ2VyLCBDbG91ZFdhdGNoIGFuZCBJQU0uICovXG4gICAgcHVibGljIEFtYXpvbkRvY0RCRWxhc3RpY0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJFbGFzdGljRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIERvY0RCLUVsYXN0aWMgYW5kIENsb3VkV2F0Y2ggbWV0cmljcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJFbGFzdGljUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJFbGFzdGljUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRG9jdW1lbnREQiB3aXRoIE1vbmdvREIgY29tcGF0aWJpbGl0eS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUyBhbmQgQW1hem9uIE5lcHR1bmUuICovXG4gICAgcHVibGljIEFtYXpvbkRvY0RCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBEb2N1bWVudERCIHdpdGggTW9uZ29EQiBjb21wYXRpYmlsaXR5LiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBSRFMgYW5kIEFtYXpvbiBOZXB0dW5lIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBWUEMgc2V0dGluZ3MgZm9yIEFtYXpvbiBtYW5hZ2VkIGN1c3RvbWVyIGNvbmZpZ3VyYXRpb25zICovXG4gICAgcHVibGljIEFtYXpvbkRSU1ZQQ01hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRFJTVlBDTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEeW5hbW9EQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkR5bmFtb0RCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EeW5hbW9EQkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRHluYW1vREIgKi9cbiAgICBwdWJsaWMgQW1hem9uRHluYW1vREJGdWxsQWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRHluYW1vREJGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBvbiBhIGRlcHJlY2F0aW9uIHBhdGguIFNlZSBkb2N1bWVudGF0aW9uIGZvciBndWlkYW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9EeW5hbW9EQlBpcGVsaW5lLmh0bWwuIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEeW5hbW9EQiBpbmNsdWRpbmcgRXhwb3J0L0ltcG9ydCB1c2luZyBBV1MgRGF0YSBQaXBlbGluZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkR5bmFtb0RCRnVsbEFjY2Vzc3dpdGhEYXRhUGlwZWxpbmUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRHluYW1vREJGdWxsQWNjZXNzd2l0aERhdGFQaXBlbGluZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIER5bmFtb0RCIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRHluYW1vREJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EeW5hbW9EQlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogSUFNIFBvbGljeSB0aGF0IGFsbG93cyB0aGUgQ1NJIGRyaXZlciBzZXJ2aWNlIGFjY291bnQgdG8gbWFrZSBjYWxscyB0byByZWxhdGVkIHNlcnZpY2VzIHN1Y2ggYXMgRUMyIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQlNDU0lEcml2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUJTQ1NJRHJpdmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFtYXpvbiBFQ1IgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJSZWdpc3RyeUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRUMyIENvbnRhaW5lciBSZWdpc3RyeSByZXBvc2l0b3JpZXMsIGJ1dCBkb2VzIG5vdCBhbGxvdyByZXBvc2l0b3J5IGRlbGV0aW9uIG9yIHBvbGljeSBjaGFuZ2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVBvd2VyVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVBvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBwdWxsIGltYWdlcyBmcm9tIEFtYXpvbiBFQzIgQ29udGFpbmVyIFJlZ2lzdHJ5IHJlcG9zaXRvcmllcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlQdWxsT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVB1bGxPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRUMyIENvbnRhaW5lciBSZWdpc3RyeSByZXBvc2l0b3JpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqICAgUG9saWN5IHRvIGVuYWJsZSBUYXNrIEF1dG9zY2FsaW5nIGZvciBBbWF6b24gRUMyIENvbnRhaW5lciBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VBdXRvc2NhbGVSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VBdXRvc2NhbGVSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBDbG91ZFdhdGNoIEV2ZW50cyBmb3IgRUMyIENvbnRhaW5lciBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VFdmVudHNSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VFdmVudHNSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRUMyIFJvbGUgZm9yIEFtYXpvbiBFQzIgQ29udGFpbmVyIFNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2Vmb3JFQzJSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2Vmb3JFQzJSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFtYXpvbiBFQ1Mgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFQzIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHNjYW4gYWxsIHN1cHBvcnRlZCByZXNvdXJjZSB0eXBlcyBmb3IgcmVsZXZhbnQgZGF0YSB3aGVuIHVzaW5nIERlc2NyaWJlSW1hZ2VSZWZlcmVuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJJbWFnZVJlZmVyZW5jZXNBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMySW1hZ2VSZWZlcmVuY2VzQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRUMyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBFQzIgYWNjZXNzIHRvIFMzIGJ1Y2tldCB0byBkb3dubG9hZCByZXZpc2lvbi4gVGhpcyByb2xlIGlzIG5lZWRlZCBieSB0aGUgQ29kZURlcGxveSBhZ2VudCBvbiBFQzIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlZm9yQVdTQ29kZURlcGxveSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSb2xlZm9yQVdTQ29kZURlcGxveSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEVDMiBsaW1pdGVkIGFjY2VzcyB0byBTMyBidWNrZXQgdG8gZG93bmxvYWQgcmV2aXNpb24uIFRoaXMgcm9sZSBpcyBuZWVkZWQgYnkgdGhlIENvZGVEZXBsb3kgYWdlbnQgb24gRUMyIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUm9sZWZvckFXU0NvZGVEZXBsb3lMaW1pdGVkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJvbGVmb3JBV1NDb2RlRGVwbG95TGltaXRlZCk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIEVDMiBSb2xlIGZvciBEYXRhIFBpcGVsaW5lIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUm9sZWZvckRhdGFQaXBlbGluZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUm9sZWZvckRhdGFQaXBlbGluZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSB3aWxsIHNvb24gYmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlIHBvbGljeSB0byBlbmFibGUgQVdTIFN5c3RlbXMgTWFuYWdlciBzZXJ2aWNlIGNvcmUgZnVuY3Rpb25hbGl0eSBvbiBFQzIgaW5zdGFuY2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N5c3RlbXMtbWFuYWdlci9sYXRlc3QvdXNlcmd1aWRlL3NldHVwLWluc3RhbmNlLXByb2ZpbGUuaHRtbCAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlZm9yU1NNKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJvbGVmb3JTU00pO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgdGhlIEFtYXpvbiBMYXVuY2hXaXphcmQgc2VydmljZSByb2xlIGZvciBFQzIgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUm9sZVBvbGljeUZvckxhdW5jaFdpemFyZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSb2xlUG9saWN5Rm9yTGF1bmNoV2l6YXJkKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBdXRvc2NhbGluZyBmb3IgQW1hem9uIEVDMiBTcG90IEZsZWV0ICovXG4gICAgcHVibGljIEFtYXpvbkVDMlNwb3RGbGVldEF1dG9zY2FsZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyU3BvdEZsZWV0QXV0b3NjYWxlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgU3BvdCBGbGVldCB0byByZXF1ZXN0LCB0ZXJtaW5hdGUgYW5kIHRhZyBTcG90IEluc3RhbmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyU3BvdEZsZWV0VGFnZ2luZ1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyU3BvdEZsZWV0VGFnZ2luZ1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQW1hem9uIEVDUyByZXNvdXJjZXMgYW5kIGVuYWJsZXMgRUNTIGZlYXR1cmVzIHRocm91Z2ggYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcywgaW5jbHVkaW5nIFZQQ3MsIEF1dG8gU2NhbGluZyBncm91cHMsIGFuZCBDbG91ZEZvcm1hdGlvbiBzdGFja3MuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQW1hem9uIEVDUyBDb21wdXRlIHRvIG1hbmFnZSB5b3VyIEVDMiBpbnN0YW5jZXMgYW5kIHJlbGF0ZWQgcmVzb3VyY2VzIGFzIHBhcnQgb2YgRUNTIG1hbmFnZWQgaW5zdGFuY2VzICovXG4gICAgcHVibGljIEFtYXpvbkVDU0NvbXB1dGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NDb21wdXRlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGVzZSBwZXJtaXNzaW9ucyBlbmFibGUgQW1hem9uIEVDUyB0byBhdXRvbWF0aWNhbGx5IHByb3Zpc2lvbiBhbmQgbWFuYWdlIHRoZSBpbmZyYXN0cnVjdHVyZSBjb21wb25lbnRzIHJlcXVpcmVkIGZvciBFeHByZXNzIEdhdGV3YXkgU2VydmljZXMsIGluY2x1ZGluZyBsb2FkIGJhbGFuY2luZywgc2VjdXJpdHkgZ3JvdXBzLCBTU0wgY2VydGlmaWNhdGVzLCBhbmQgYXV0byBzY2FsaW5nIGNvbmZpZ3VyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVmb3JFeHByZXNzR2F0ZXdheVNlcnZpY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZWZvckV4cHJlc3NHYXRld2F5U2VydmljZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIG1hbmFnZSBsb2FkIGJhbGFuY2VycyBhc3NvY2lhdGVkIHdpdGggRUNTIHdvcmtsb2FkcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yTG9hZEJhbGFuY2VycygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JMb2FkQmFsYW5jZXJzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgRUNTIGFjY2VzcyB0byBjcmVhdGUgYW5kIG1hbmFnZSBFQzIgbWFuYWdlZCByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yTWFuYWdlZEluc3RhbmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JNYW5hZ2VkSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5LCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFuZCBvdGhlciBBV1MgU2VydmljZXMgcmVxdWlyZWQgdG8gbWFuYWdlIEVDUyBTZXJ2aWNlIENvbm5lY3QgVExTIGZlYXR1cmVzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JTZXJ2aWNlQ29ubmVjdFRyYW5zcG9ydExheWVyU2VjdXJpdHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yU2VydmljZUNvbm5lY3RUcmFuc3BvcnRMYXllclNlY3VyaXR5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyByZXF1aXJlZCB0byBtYW5hZ2Ugdm9sdW1lcyBhc3NvY2lhdGVkIHdpdGggRUNTIHdvcmtsb2FkcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVm9sdW1lcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWb2x1bWVzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyByZXF1aXJlZCB0byBtYW5hZ2UgVlBDIExhdHRpY2UgZmVhdHVyZSBpbiBFQ1Mgd29ya2xvYWRzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWcGNMYXR0aWNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZwY0xhdHRpY2UpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFQ1MgSW5zdGFuY2UgUm9sZSBmb3IgQW1hem9uIEVDUyBNYW5hZ2VkIEluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5zdGFuY2VSb2xlUG9saWN5Rm9yTWFuYWdlZEluc3RhbmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbnN0YW5jZVJvbGVQb2xpY3lGb3JNYW5hZ2VkSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBbWF6b24gRUNTIHRvIG1hbmFnZSB5b3VyIGNsdXN0ZXIuICovXG4gICAgcHVibGljIEFtYXpvbkVDU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEVDUyB0YXNrcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1hbmFnZW1lbnQgYWNjZXNzIHRvIEVGUyByZXNvdXJjZXMgYW5kIHJlYWQgYWNjZXNzIHRvIEVDMiAqL1xuICAgIHB1YmxpYyBBbWF6b25FRlNDU0lEcml2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUZTQ1NJRHJpdmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgdGhlIEFtYXpvbiBWUEMgQ05JIFBsdWdpbiAoYW1hem9uLXZwYy1jbmktazhzKSB0aGUgcGVybWlzc2lvbnMgaXQgcmVxdWlyZXMgdG8gbW9kaWZ5IHRoZSBJUCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24gb24geW91ciBFS1Mgd29ya2VyIG5vZGVzLiBUaGlzIHBlcm1pc3Npb24gc2V0IGFsbG93cyB0aGUgQ05JIHRvIGxpc3QsIGRlc2NyaWJlLCBhbmQgbW9kaWZ5IEVsYXN0aWMgTmV0d29yayBJbnRlcmZhY2VzIG9uIHlvdXIgYmVoYWxmLiBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBV1MgVlBDIENOSSBQbHVnaW4gaXMgYXZhaWxhYmxlIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYW1hem9uLXZwYy1jbmktazhzICovXG4gICAgcHVibGljIEFtYXpvbkVLU0NOSVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NDTklQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgYXR0YWNoZWQgdG8gdGhlIEVLUyBDbHVzdGVyIFJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjbHVzdGVyJ3MgYmxvY2sgc3RvcmFnZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0Jsb2NrU3RvcmFnZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NCbG9ja1N0b3JhZ2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBLdWJlcm5ldGVzIHRoZSBwZXJtaXNzaW9ucyBpdCByZXF1aXJlcyB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiBLdWJlcm5ldGVzIHJlcXVpcmVzIEVjMjpDcmVhdGVUYWdzIHBlcm1pc3Npb25zIHRvIHBsYWNlIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIG9uIEVDMiByZXNvdXJjZXMgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBJbnN0YW5jZXMsIFNlY3VyaXR5IEdyb3VwcywgYW5kIEVsYXN0aWMgTmV0d29yayBJbnRlcmZhY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0NsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgYXR0YWNoZWQgdG8gdGhlIEVLUyBDbHVzdGVyIFJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjbHVzdGVyJ3MgY29tcHV0ZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0NvbXB1dGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTQ29tcHV0ZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBbWF6b24gRUtTIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIGZvciBFS1MgY29ubmVjdG9yICovXG4gICAgcHVibGljIEFtYXpvbkVLU0Nvbm5lY3RvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0Nvbm5lY3RvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB2aWV3IHRoZSBkYXNoYm9hcmQgaW4gdGhlIEFtYXpvbiBFS1MgY29uc29sZS4gVGhlIGRhc2hib2FyZCBhZ2dyZWdhdGVzIGluZm9ybWF0aW9uIGFib3V0IG11bHRpcGxlIGNsdXN0ZXJzIGFuZCByZWxhdGVkIHJlc291cmNlcyB1c2luZyBBV1MgT3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTRGFzaGJvYXJkQ29uc29sZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0Rhc2hib2FyZENvbnNvbGVSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGVuYWJsZXMgdGhlIEFtYXpvbiBFS1MgRGFzaGJvYXJkIHRvIGFjY2VzcyBhbmQgZGlzcGxheSBvcmdhbml6YXRpb24td2lkZSBpbmZvcm1hdGlvbi4gVGhlIHBvbGljeSBhbGxvd3MgdGhlIEVLUyBEYXNoYm9hcmQgc2VydmljZSB0byBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBBV1MgT3JnYW5pemF0aW9ucyBzdHJ1Y3R1cmUgYW5kIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NEYXNoYm9hcmRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NEYXNoYm9hcmRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcnVuIEFtYXpvbiBFS1MgcG9kcyBvbiBBV1MgRmFyZ2F0ZSAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NGYXJnYXRlUG9kRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NGYXJnYXRlUG9kRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBuZWNlc3NhcnkgcGVybWlzc2lvbnMgdG8gQW1hem9uIEVLUyB0byBydW4gZmFyZ2F0ZSB0YXNrcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NGb3JGYXJnYXRlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTRm9yRmFyZ2F0ZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGF0dGFjaGVkIHRvIHRoZSBFS1MgQ2x1c3RlciBSb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY2x1c3RlcidzIGxvYWQgYmFsYW5jaW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTTG9hZEJhbGFuY2luZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NMb2FkQmFsYW5jaW5nUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gRUtTIGxvY2FsIGNsdXN0ZXIncyBjb250cm9sLXBsYW5lIGluc3RhbmNlcyBydW5uaW5nIGluIHlvdXIgYWNjb3VudCB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NMb2NhbE91dHBvc3RDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0xvY2FsT3V0cG9zdENsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEVLUyBMb2NhbCB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTTG9jYWxPdXRwb3N0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTTG9jYWxPdXRwb3N0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gRUtTIE1DUCBzZXJ2aWNlLiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdXNlIG9ubHkgcmVhZC1vbmx5IHRvb2xzIGluIHRoZSBFS1MgTUNQIHNlcnZpY2UgbWVhbnQgZm9yIG9ic2VydmFiaWxpdHksIHRyb3VibGVzaG9vdGluZywgcmV0cmlldmluZyBFS1MgcmVzb3VyY2UgaW5mb3JtYXRpb24sIGFuZCBnZXR0aW5nIEVLUy1vcHRpbWl6ZWQgc3VnZ2VzdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU01DUFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU01DUFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGF0dGFjaGVkIHRvIHRoZSBFS1MgQ2x1c3RlciBSb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY2x1c3RlcidzIG5ldHdvcmtpbmcgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NOZXR3b3JraW5nUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU05ldHdvcmtpbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgZm9yIEt1YmVybmV0ZXMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMgdG8gb3BlcmF0ZSBFS1MgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1NlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEEgU2VydmljZS1MaW5rZWQgUm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIEVLUyB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdXNlZCBieSBWUEMgUmVzb3VyY2UgQ29udHJvbGxlciB0byBtYW5hZ2UgRU5JIGFuZCBJUHMgZm9yIHdvcmtlciBub2Rlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTVlBDUmVzb3VyY2VDb250cm9sbGVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1ZQQ1Jlc291cmNlQ29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBbWF6b24gRUtTIHdvcmtlciBub2RlcyB0byBjb25uZWN0IHRvIEFtYXpvbiBFS1MgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1dvcmtlck5vZGVNaW5pbWFsUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1dvcmtlck5vZGVNaW5pbWFsUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFtYXpvbiBFS1Mgd29ya2VyIG5vZGVzIHRvIGNvbm5lY3QgdG8gQW1hem9uIEVLUyBDbHVzdGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTV29ya2VyTm9kZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NXb3JrZXJOb2RlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aUNhY2hlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpQ2FjaGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aUNhY2hlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aUNhY2hlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpQ2FjaGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGlDYWNoZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFtYXpvbiBFQ1IgUHVibGljIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRUNSIFB1YmxpYyByZXBvc2l0b3JpZXMsIGJ1dCBkb2VzIG5vdCBhbGxvdyByZXBvc2l0b3J5IGRlbGV0aW9uIG9yIHBvbGljeSBjaGFuZ2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNQb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljUG93ZXJVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRUNSIFB1YmxpYyByZXBvc2l0b3JpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcm9vdCBjbGllbnQgYWNjZXNzIHRvIGFuIEFtYXpvbiBFRlMgZmlsZSBzeXN0ZW0gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1DbGllbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBjbGllbnQgYWNjZXNzIHRvIGFuIEFtYXpvbiBFRlMgZmlsZSBzeXN0ZW0gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1DbGllbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhbmQgd3JpdGUgY2xpZW50IGFjY2VzcyB0byBhbiBBbWF6b24gRUZTIGZpbGUgc3lzdGVtICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50UmVhZFdyaXRlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50UmVhZFdyaXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVGUyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFRlMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljRmlsZVN5c3RlbVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEVsYXN0aWMgRmlsZSBTeXN0ZW0gdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGN1c3RvbWVycyB0byB1c2UgQVdTIFN5c3RlbXMgTWFuYWdlciB0byBhdXRvbWF0aWNhbGx5IG1hbmFnZSBBbWF6b24gRUZTIHV0aWxpdGllcyAoYW1hem9uLWVmcy11dGlscykgcGFja2FnZSBvbiB0aGVpciBFQzIgaW5zdGFuY2VzLCBhbmQgdXNlIENsb3VkV2F0Y2hMb2cgdG8gZ2V0IEVGUyBmaWxlIHN5c3RlbSBtb3VudCBzdWNjZXNzL2ZhaWx1cmUgbm90aWZpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1zVXRpbHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1zVXRpbHMpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBFZGl0b3JzIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZUVkaXRvcnNSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VFZGl0b3JzUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBmb3IgQXV0byBTY2FsaW5nLiBSb2xlIHRvIGFsbG93IEF1dG8gU2NhbGluZyB0byBhZGQgYW5kIHJlbW92ZSBpbnN0YW5jZXMgZnJvbSB5b3VyIEVNUiBjbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljTWFwUmVkdWNlZm9yQXV0b1NjYWxpbmdSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2Vmb3JBdXRvU2NhbGluZ1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBmb3IgRUMyIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZWZvckVDMlJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY01hcFJlZHVjZWZvckVDMlJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBvbiBhIGRlcHJlY2F0aW9uIHBhdGguIFNlZSBkb2N1bWVudGF0aW9uIGZvciBndWlkYW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vtci9sYXRlc3QvTWFuYWdlbWVudEd1aWRlL2Vtci1tYW5hZ2VkLWlhbS1wb2xpY2llcy5odG1sLiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgYW5kIHVuZGVybHlpbmcgc2VydmljZXMgdGhhdCBpdCByZXF1aXJlcyBzdWNoIGFzIEVDMiBhbmQgUzMgKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY01hcFJlZHVjZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gYWxsb3cgRU1SIHRvIGNyZWF0ZSwgZGVzY3JpYmUgYW5kIGRlbGV0ZSBFQzIgcGxhY2VtZW50IGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZVBsYWNlbWVudEdyb3VwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VQbGFjZW1lbnRHcm91cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aWMgTWFwUmVkdWNlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIG9uIGEgZGVwcmVjYXRpb24gcGF0aC4gU2VlIGRvY3VtZW50YXRpb24gZm9yIGd1aWRhbmNlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW1yL2xhdGVzdC9NYW5hZ2VtZW50R3VpZGUvZW1yLW1hbmFnZWQtaWFtLXBvbGljaWVzLmh0bWwuICBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQW1hem9uIEVsYXN0aWNzZWFyY2ggU2VydmljZSB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgRUMyIE5ldHdvcmtpbmcgQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY3NlYXJjaFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNzZWFyY2hTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBmdWxsIGFjY2VzcyB0byBFbGFzdGljIFRyYW5zY29kZXIgYW5kIHRoZSBhY2Nlc3MgdG8gYXNzb2NpYXRlZCBzZXJ2aWNlcyB0aGF0IGlzIHJlcXVpcmVkIGZvciBmdWxsIEVsYXN0aWMgVHJhbnNjb2RlciBmdW5jdGlvbmFsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHBlcm1pc3Npb24gdG8gY2hhbmdlIHByZXNldHMsIHN1Ym1pdCBqb2JzLCBhbmQgdmlldyBFbGFzdGljIFRyYW5zY29kZXIgc2V0dGluZ3MuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIHNvbWUgcmVhZC1vbmx5IGFjY2VzcyB0byBzb21lIG90aGVyIHNlcnZpY2VzIHJlcXVpcmVkIHRvIHVzZSB0aGUgRWxhc3RpYyBUcmFuc2NvZGUgY29uc29sZSwgaW5jbHVkaW5nIFMzLCBJQU0sIGFuZCBTTlMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNUcmFuc2NvZGVySm9ic1N1Ym1pdHRlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljVHJhbnNjb2RlckpvYnNTdWJtaXR0ZXIpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgcmVhZC1vbmx5IGFjY2VzcyB0byBFbGFzdGljIFRyYW5zY29kZXIgYW5kIGxpc3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIEVsYXN0aWMgVHJhbnNjb2RlciBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljVHJhbnNjb2RlclJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGFjdGlvbnMgdGhhdCBFTVIgcmVxdWlyZXMgdG8gdGVybWluYXRlIGFuZCBkZWxldGUgQVdTIEVDMiByZXNvdXJjZXMgaWYgdGhlIEVNUiBTZXJ2aWNlIHJvbGUgaGFzIGxvc3QgdGhhdCBhYmlsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJDbGVhbnVwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUkNsZWFudXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEVNUiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJDb250YWluZXJzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SQ29udGFpbmVyc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVNUiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJGdWxsQWNjZXNzUG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SRnVsbEFjY2Vzc1BvbGljeVYyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRU1SIGFuZCB0aGUgYXNzb2NpYXRlZCBDbG91ZFdhdGNoIE1ldHJpY3MuICovXG4gICAgcHVibGljIEFtYXpvbkVNUlJlYWRPbmx5QWNjZXNzUG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SUmVhZE9ubHlBY2Nlc3NQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gRU1SU2VydmVybGVzcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgdXNlZCBmb3IgdGhlIEFtYXpvbiBFTVIgU2VydmljZSBSb2xlIGFuZCBzaG91bGQgTk9UIGJlIHVzZWQgZm9yIGFueSBvdGhlciBJQU0gdXNlcnMgb3Igcm9sZXMgaW4geW91ciBhY2NvdW50LiBUaGUgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIG1hbmFnZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIEVNUiBhbmQgcmVsYXRlZCBzZXJ2aWNlcyBuZWNlc3NhcnkgZm9yIHRoZSBvcGVyYXRpb24gb2YgeW91ciBFTVIgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SU2VydmljZVBvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUlNlcnZpY2VQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpbWl0ZWQgYWNjZXNzIHRvIHRoZSBBbWF6b24gQ29nbml0byBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkVTQ29nbml0b0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FU0NvZ25pdG9BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQW1hem9uIEVTIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRVNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBFUyBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkVTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRVNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFdmVudEJyaWRnZSB0byBhY2Nlc3MgU2VjcmV0IE1hbmFnZXIgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZUFwaURlc3RpbmF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlQXBpRGVzdGluYXRpb25zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UgUGlwZXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlUGlwZXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlUGlwZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFuZCBvcGVyYXRvciAoYWJpbGl0eSB0byBTdG9wIGFuZCBTdGFydCBydW5uaW5nIFBpcGVzKSBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFBpcGVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVBpcGVzT3BlcmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VQaXBlc09wZXJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UgUGlwZXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlUGlwZXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVBpcGVzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFdmVudEJyaWRnZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkV2ZW50QnJpZGdlU2NoZWR1bGVyRnVsbEFjY2VzcyBtYW5hZ2VkIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdXNlIGFsbCBFdmVudEJyaWRnZSBTY2hlZHVsZXIgYWN0aW9ucyBmb3Igc2NoZWR1bGVzLCBhbmQgc2NoZWR1bGUgZ3JvdXBzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VTY2hlZHVsZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkV2ZW50QnJpZGdlU2NoZWR1bGVyUmVhZE9ubHlBY2Nlc3MgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0byB2aWV3IGRldGFpbHMgYWJvdXQgeW91ciBzY2hlZHVsZXMgYW5kIHNjaGVkdWxlIGdyb3VwcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlU2NoZWR1bGVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UgU2NoZW1hcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVNjaGVtYXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UgU2NoZW1hcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gTWFuYWdlZCBSdWxlcyBjcmVhdGVkIGJ5IEFtYXpvbiBFdmVudEJyaWRnZSBzY2hlbWFzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVNjaGVtYXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVNjaGVtYXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBFVlMgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25FVlNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FVlNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIEZJUyB0byBtYW5hZ2UgbW9uaXRvcmluZyBhbmQgcmVzb3VyY2Ugc2VsZWN0aW9uIGZvciBleHBlcmltZW50cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRklTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRklTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBhY2Nlc3MgdG8gYWxsIGFjdGlvbnMgZm9yIEFtYXpvbiBGb3JlY2FzdCAqL1xuICAgIHB1YmxpYyBBbWF6b25Gb3JlY2FzdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRm9yZWNhc3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR2l2ZXMgYWNjZXNzIHRvIGFsbCBhY3Rpb25zIGZvciBBbWF6b24gRnJhdWQgRGV0ZWN0b3IgKi9cbiAgICBwdWJsaWMgQW1hem9uRnJhdWREZXRlY3RvckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRnJhdWREZXRlY3RvckZ1bGxBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIEFjY2VzcyBQb2xpY3kgZm9yIEFtYXpvbiBGcmVlUlRPUyAqL1xuICAgIHB1YmxpYyBBbWF6b25GcmVlUlRPU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRnJlZVJUT1NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHVzZXIgdG8gYWNjZXNzIEFtYXpvbiBGcmVlUlRPUyBPVEEgVXBkYXRlICovXG4gICAgcHVibGljIEFtYXpvbkZyZWVSVE9TT1RBVXBkYXRlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZyZWVSVE9TT1RBVXBkYXRlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEZTeCBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIHNlcnZpY2VzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRlN4Q29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4Q29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBGU3ggYW5kIGFjY2VzcyB0byByZWxhdGVkIEFXUyBzZXJ2aWNlcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkZTeENvbnNvbGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GU3hDb25zb2xlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRlN4IGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbkZTeEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEZTeC4gKi9cbiAgICBwdWJsaWMgQW1hem9uRlN4UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEZTeCB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25GU3hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GU3hTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBHbGFjaWVyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR2xhY2llckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR2xhY2llckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBHbGFjaWVyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR2xhY2llclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdsYWNpZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIEF0aGVuYSBhbmQgdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gZW5hYmxlIHF1ZXJ5aW5nIGFuZCB3cml0aW5nIHJlc3VsdHMgdG8gczMgZnJvbSB0aGUgQW1hem9uIEF0aGVuYSBwbHVnaW4gaW4gQW1hem9uIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFtYXpvbkdyYWZhbmFBdGhlbmFBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3JhZmFuYUF0aGVuYUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggYW5kIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHVzZSBDbG91ZFdhdGNoIGFzIGEgZGF0YXNvdXJjZSB3aXRoaW4gQW1hem9uIE1hbmFnZWQgR3JhZmFuYS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR3JhZmFuYUNsb3VkV2F0Y2hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3JhZmFuYUNsb3VkV2F0Y2hBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgc2NvcGVkIGFjY2VzcyB0byBBbWF6b24gUmVkc2hpZnQgYW5kIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHVzZSB0aGUgQW1hem9uIFJlZHNoaWZ0IHBsdWdpbiBpbiBBbWF6b24gR3JhZmFuYS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR3JhZmFuYVJlZHNoaWZ0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdyYWZhbmFSZWRzaGlmdEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBbWF6b24gR3JhZmFuYS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR3JhZmFuYVNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdyYWZhbmFTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHVzZSBBbWF6b24gR3VhcmREdXR5ICovXG4gICAgcHVibGljIEFtYXpvbkd1YXJkRHV0eUZ1bGxBY2Nlc3NWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HdWFyZER1dHlGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBHdWFyZER1dHkgbWFsd2FyZSBwcm90ZWN0aW9uIHVzZXMgdGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgKFNMUikgbmFtZWQgQVdTU2VydmljZVJvbGVGb3JBbWF6b25HdWFyZER1dHlNYWx3YXJlUHJvdGVjdGlvbi4gVGhpcyBzZXJ2aWNlLWxpbmtlZCByb2xlIGFsbG93cyBHdWFyZER1dHkgbWFsd2FyZSBwcm90ZWN0aW9uIHRvIHBlcmZvcm0gYWdlbnQtbGVzcyBzY2FucyB0byBkZXRlY3QgbWFsd2FyZS4gSXQgYWxsb3dzIEd1YXJkRHV0eSB0byBjcmVhdGUgc25hcHNob3RzIGluIHlvdXIgYWNjb3VudCwgYW5kIHNoYXJlIHRoZSBzbmFwc2hvdHMgd2l0aCB0aGUgR3VhcmREdXR5IHNlcnZpY2UgYWNjb3VudCB0byBzY2FuIGZvciBtYWx3YXJlLiBJdCBldmFsdWF0ZXMgdGhlc2Ugc2hhcmVkIHNuYXBzaG90cyBhbmQgaW5jbHVkZXMgdGhlIHJldHJpZXZlZCBFQzIgaW5zdGFuY2UgbWV0YWRhdGEgaW4gdGhlIEd1YXJkRHV0eSBNYWx3YXJlIFByb3RlY3Rpb24gZmluZGluZ3MuIFRoZSBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvbkd1YXJkRHV0eU1hbHdhcmVQcm90ZWN0aW9uIHNlcnZpY2UtbGlua2VkIHJvbGUgdHJ1c3RzIHRoZSBtYWx3YXJlLXByb3RlY3Rpb24uZ3VhcmRkdXR5LmFtYXpvbmF3cy5jb20gc2VydmljZSB0byBhc3N1bWUgdGhlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkd1YXJkRHV0eU1hbHdhcmVQcm90ZWN0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3VhcmREdXR5TWFsd2FyZVByb3RlY3Rpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEd1YXJkRHV0eSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uR3VhcmREdXR5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3VhcmREdXR5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGUgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBHdWFyZCBEdXR5ICovXG4gICAgcHVibGljIEFtYXpvbkd1YXJkRHV0eVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkd1YXJkRHV0eVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEhlYWx0aExha2Ugc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uSGVhbHRoTGFrZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSGVhbHRoTGFrZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBIZWFsdGhMYWtlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkhlYWx0aExha2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25IZWFsdGhMYWtlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBIb25leWNvZGUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEhvbmV5Y29kZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIHRoZSBTREsuICovXG4gICAgcHVibGljIEFtYXpvbkhvbmV5Y29kZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlLWxpbmtlZCByb2xlIHJlcXVpcmVkIGZvciBBbWF6b24gSG9uZXljb2RlIHRvIGFjY2VzcyB5b3VyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBIb25leWNvZGUgVGVhbSBBc3NvY2lhdGlvbiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIHRoZSBTREsuICovXG4gICAgcHVibGljIEFtYXpvbkhvbmV5Y29kZVRlYW1Bc3NvY2lhdGlvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlVGVhbUFzc29jaWF0aW9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gSG9uZXljb2RlIFRlYW0gQXNzb2NpYXRpb24gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVUZWFtQXNzb2NpYXRpb25SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVUZWFtQXNzb2NpYXRpb25SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEhvbmV5Y29kZSBXb3JrYm9vayB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIHRoZSBTREsuICovXG4gICAgcHVibGljIEFtYXpvbkhvbmV5Y29kZVdvcmtib29rRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVXb3JrYm9va0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEhvbmV5Y29kZSBXb3JrYm9vayB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIHRoZSBTREsuICovXG4gICAgcHVibGljIEFtYXpvbkhvbmV5Y29kZVdvcmtib29rUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlV29ya2Jvb2tSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBbWF6b24gSW5zcGVjdG9yIGFjY2VzcyB0byBBV1MgU2VydmljZXMgbmVlZGVkIHRvIHBlcmZvcm0gYWdlbnQtbGVzcyBzZWN1cml0eSBhc3Nlc3NtZW50cyAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyQWdlbnRsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMkFnZW50bGVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEluc3BlY3RvciBhbmQgYWNjZXNzIHRvIG90aGVyIHJlbGF0ZWQgc2VydmljZXMgc3VjaCBhcyBvcmdhbml6YXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBJbnNwZWN0b3IgYW5kIGFjY2VzcyB0byBvdGhlciByZWxhdGVkIHNlcnZpY2VzIHN1Y2ggYXMgb3JnYW5pemF0aW9ucyB3aXRoIHJlc3RyaWN0aXZlIG9yZ2FuaXphdGlvbmFsIGFjY2Vzcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMkZ1bGxBY2Nlc3NWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyRnVsbEFjY2Vzc1YyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBpcyBhIG1hbmFnZWQgcG9saWN5IHRoYXQgY3VzdG9tZXIgc2hvdWxkIGF0dGFjaCB0byB0aGVpciByb2xlcyB0byBjb21tdW5pY2F0ZSB3aXRoIGluc3BlY3RvciBzZXJ2aWNlIGZvciBDSVMgc2NhbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMk1hbmFnZWRDaXNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMk1hbmFnZWRDaXNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gY29tbXVuaWNhdGUgd2l0aCBJbnNwZWN0b3IyIFRlbGVtZXRyeSBDaGFubmVsICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJNYW5hZ2VkVGVsZW1ldHJ5UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJNYW5hZ2VkVGVsZW1ldHJ5UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIGluc3BlY3RvcjIgc2VydmljZSBhbmQgcmVsZXZhbnQgc3VwcG9ydCBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFtYXpvbiBJbnNwZWN0b3IgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBuZWVkZWQgdG8gcGVyZm9ybSBzZWN1cml0eSBhc3Nlc3NtZW50cyAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEluc3BlY3Rvci4gKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gSW5zcGVjdG9yLiAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3JSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3JSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBbWF6b24gSW5zcGVjdG9yIGFjY2VzcyB0byBBV1MgU2VydmljZXMgbmVlZGVkIHRvIHBlcmZvcm0gc2VjdXJpdHkgYXNzZXNzbWVudHMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gS2VuZHJhIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2VuZHJhRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LZW5kcmFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gS2VuZHJhIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2VuZHJhUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2VuZHJhUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBLZXlzcGFjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uS2V5c3BhY2VzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LZXlzcGFjZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBLZXlzcGFjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uS2V5c3BhY2VzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2V5c3BhY2VzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEtleXNwYWNlcyBhbmQgcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2V5c3BhY2VzUmVhZE9ubHlBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBLaW5lc2lzIEFuYWx5dGljcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNBbmFseXRpY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNBbmFseXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gS2luZXNpcyBBbmFseXRpY3MgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzQW5hbHl0aWNzUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc0FuYWx5dGljc1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBLaW5lc2lzIEZpcmVob3NlIERlbGl2ZXJ5IFN0cmVhbXMuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNGaXJlaG9zZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc0ZpcmVob3NlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBLaW5lc2lzIEZpcmVob3NlIERlbGl2ZXJ5IFN0cmVhbXMuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNGaXJlaG9zZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNGaXJlaG9zZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIHN0cmVhbXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIHN0cmVhbXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEtpbmVzaXMgVmlkZW8gU3RyZWFtcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgS2luZXNpcyBWaWRlbyBTdHJlYW1zIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc1ZpZGVvU3RyZWFtc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIEFXUyBMYXVuY2ggd2l6YXJkIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGF1bmNoV2l6YXJkRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxhdW5jaFdpemFyZEZ1bGxBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBjdXN0b21lcnMgdG8gY2FsbCBMZXggcnVudGltZSBmcm9tIGNoYW5uZWxzICovXG4gICAgcHVibGljIEFtYXpvbkxleENoYW5uZWxzQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxleENoYW5uZWxzQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIExleCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICBBbHNvIHByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgTGV4IFNlcnZpY2UgTGlua2VkIFJvbGVzIGFuZCBncmFudCBMZXggcGVybWlzc2lvbnMgdG8gaW52b2tlIGEgbGltaXRlZCBzZXQgb2YgTGFtYmRhIGZ1bmN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gTGV4LiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gTGV4IHRvIHJlcGxpY2F0ZSBMZXggcmVzb3VyY2VzIGFjcm9zcyByZWdpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhSZXBsaWNhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhSZXBsaWNhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gTGV4IGNvbnZlcnNhdGlvbmFsIEFQSXMuICovXG4gICAgcHVibGljIEFtYXpvbkxleFJ1bkJvdHNPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxleFJ1bkJvdHNPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgTGV4IFYyIGJvdHMgYWNjZXNzIHRvIGNhbGwgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhWMkJvdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhWMkJvdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBFcXVpcG1lbnQgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0RXF1aXBtZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0RXF1aXBtZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIExvb2tvdXQgZm9yIEVxdWlwbWVudHMgKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dEVxdWlwbWVudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRFcXVpcG1lbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIGFjY2VzcyB0byBhbGwgYWN0aW9ucyBmb3IgQW1hem9uIExvb2tvdXQgZm9yIE1ldHJpY3MgKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dE1ldHJpY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRNZXRyaWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIGFjY2VzcyB0byBhbGwgcmVhZC1vbmx5IGFjdGlvbnMgZm9yIEFtYXpvbiBMb29rb3V0IGZvciBNZXRyaWNzICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRNZXRyaWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dE1ldHJpY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgc2VydmljZSBhbmQgY29uc29sZSBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRWaXNpb25Db25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0VmlzaW9uQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgc2VydmljZSBhbmQgY29uc29sZSBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRWaXNpb25Db25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvbkNvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0VmlzaW9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIExvb2tvdXQgZm9yIFZpc2lvbiBhbmQgc2NvcGVkIGFjY2VzcyB0byByZXF1aXJlZCBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRWaXNpb25SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0VmlzaW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgcGVybWlzc2lvbiB0byByZXF1ZXN0IEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIGJhdGNoIHByZWRpY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdCYXRjaFByZWRpY3Rpb25zQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2hpbmVMZWFybmluZ0JhdGNoUHJlZGljdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjcmVhdGUgYWNjZXNzIGZvciBub24tcHJlZGljdGlvbiBBbWF6b24gTWFjaGluZSBMZWFybmluZyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2hpbmVMZWFybmluZ0NyZWF0ZU9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nQ3JlYXRlT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuZCBkZWxldGUgdGhlIHJlYWwtdGltZSBlbmRwb2ludCBmb3IgQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgbW9kZWxzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdNYW5hZ2VSZWFsVGltZUVuZHBvaW50T25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdNYW5hZ2VSZWFsVGltZUVuZHBvaW50T25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBwZXJtaXNzaW9uIHRvIHJlcXVlc3QgQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgcmVhbC10aW1lIHByZWRpY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFsVGltZVByZWRpY3Rpb25Pbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2hpbmVMZWFybmluZ1JlYWxUaW1lUHJlZGljdGlvbk9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTWFjaGluZSBMZWFybmluZyB0byBjb25maWd1cmUgYW5kIHVzZSB5b3VyIFJlZHNoaWZ0IENsdXN0ZXJzIGFuZCBTMyBTdGFnaW5nIExvY2F0aW9ucyBmb3IgUmVkc2hpZnQgRGF0YSBTb3VyY2UuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2hpbmVMZWFybmluZ1JvbGVmb3JSZWRzaGlmdERhdGFTb3VyY2VWMygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdSb2xlZm9yUmVkc2hpZnREYXRhU291cmNlVjMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFjaWUuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNpZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgdGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgb2YgQW1hem9uIE1hY2llLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNpZUhhbmRzaGFrZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVIYW5kc2hha2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNYWNpZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaWVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNpZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIE1hY2llIHJlYWQtb25seSBhY2Nlc3MgdG8gcmVzb3VyY2UgZGVwZW5kZW5jaWVzIGluIHlvdXIgYWNjb3VudCBpbiBvcmRlciB0byBlbmFibGUgZGF0YSBhbmFseXNpcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaWVTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNpZVNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBsaW5rZWQgcm9sZSBmb3IgQW1hem9uIE1hY2llICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEJsb2NrY2hhaW4gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5Db25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEJsb2NrY2hhaW4uICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYW5hZ2VkQmxvY2tjaGFpbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEJsb2NrY2hhaW4uICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE1hbmFnZWQgQXBhY2hlIENhc3NhbmRyYSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbk1DU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTUNTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBBcGFjaGUgQ2Fzc2FuZHJhIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uTUNTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTUNTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQVBJcyBpbiBBbWF6b24gTWVjaGFuaWNhbCBUdXJrLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZWNoYW5pY2FsVHVya0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVjaGFuaWNhbFR1cmtGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHJlYWQgb25seSBBUElzIGluIEFtYXpvbiBNZWNoYW5pY2FsIFR1cmsuICovXG4gICAgcHVibGljIEFtYXpvbk1lY2hhbmljYWxUdXJrUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVjaGFuaWNhbFR1cmtSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNZW1vcnlEQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbk1lbW9yeURCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NZW1vcnlEQkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNZW1vcnlEQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbk1lbW9yeURCUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVtb3J5REJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIHJlcG9ydHMgaW5jbHVkaW5nIGZpbmFuY2lhbCBkYXRhIGZvciBhbGwgYXBwbGljYXRpb24gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb2JpbGVBbmFseXRpY3NGaW5hbmNpYWxSZXBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzRmluYW5jaWFsUmVwb3J0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGFwcGxpY2F0aW9uIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTW9iaWxlQW5hbHl0aWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb2JpbGVBbmFseXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBub24gZmluYW5jaWFsIHJlcG9ydHMgZm9yIGFsbCBhcHBsaWNhdGlvbiByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1vYmlsZUFuYWx5dGljc05vbkZpbmFuY2lhbFJlcG9ydEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb2JpbGVBbmFseXRpY3NOb25GaW5hbmNpYWxSZXBvcnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBvbmx5IGFjY2VzcyB0byBwdXQgZXZlbnQgZGF0YSBmb3IgYWxsIGFwcGxpY2F0aW9uIHJlc291cmNlcy4gKFJlY29tbWVuZGVkIGZvciBTREsgaW50ZWdyYXRpb24pICovXG4gICAgcHVibGljIEFtYXpvbk1vYmlsZUFuYWx5dGljc1dyaXRlT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb2JpbGVBbmFseXRpY3NXcml0ZU9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIE1vbml0cm9uICovXG4gICAgcHVibGljIEFtYXpvbk1vbml0cm9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb25pdHJvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b25NUSB2aWEgb3VyIEFQSS9TREsuICovXG4gICAgcHVibGljIEFtYXpvbk1RQXBpRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NUUFwaUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbk1RIHZpYSBvdXIgQVBJL1NESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVFBcGlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NUUFwaVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uTVEgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NUUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b25NUSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbk1RUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBBV1MgQW1hem9uIE1RICovXG4gICAgcHVibGljIEFtYXpvbk1RU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNU0sgQ29ubmVjdCAqL1xuICAgIHB1YmxpYyBBbWF6b25NU0tDb25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVNLQ29ubmVjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBmdWxsIGFjY2VzcyB0byBBbWF6b24gTVNLIGFuZCBvdGhlciByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgaXRzIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVNLRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NU0tGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkb25seSBhY2Nlc3MgdG8gQW1hem9uIE1TSyAqL1xuICAgIHB1YmxpYyBBbWF6b25NU0tSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NU0tSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gQWlyZmxvdyBTZXJ2ZXJsZXNzIFNlcnZpY2UgdG8gbWFuYWdlIG5ldHdvcmtpbmcgZm9yIHlvdXIgd29ya2Zsb3dzIGFuZCBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbk1XQUFTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVdBQVNlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBTZXJ2aWNlIExpbmtlZCBSb2xlIHVzZWQgYnkgQW1hem9uIE1hbmFnZWQgV29ya2Zsb3dzIGZvciBBcGFjaGUgQWlyZmxvdy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVdBQVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1XQUFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gcmVzb3VyY2VzIG5lZWRlZCBieSBOaW1ibGUgU3R1ZGlvIExhdW5jaCBQcm9maWxlIHdvcmtlcnMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byBFQzIgaW5zdGFuY2VzIGNyZWF0ZWQgYnkgTmltYmxlIFN0dWRpbyBCdWlsZGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25OaW1ibGVTdHVkaW9MYXVuY2hQcm9maWxlV29ya2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk5pbWJsZVN0dWRpb0xhdW5jaFByb2ZpbGVXb3JrZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBOaW1ibGUgU3R1ZGlvIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN0dWRpbyBhZG1pbiBhbmQgcmVsYXRlZCBzdHVkaW8gcmVzb3VyY2VzIGluIG90aGVyIHNlcnZpY2VzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gdGhlIEFkbWluIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9BZG1pbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9BZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIE5pbWJsZSBTdHVkaW8gcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3R1ZGlvIHVzZXIgYW5kIHJlbGF0ZWQgc3R1ZGlvIHJlc291cmNlcyBpbiBvdGhlciBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSBVc2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9Vc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk5pbWJsZVN0dWRpb1N0dWRpb1VzZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgT3JhY2xlIERhdGFiYXNlQEFXUyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT0RCU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT0RCU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gT21pY3MgYW5kIG90aGVyIHJlcXVpcmVkIEFXUyBTZXJ2aWNlcy4gVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSB1c2VyIHRvIHZpZXcgYW5kIGFjY2VwdCBSQU0gc2hhcmUgaW52aXRhdGlvbnMgdG8gYWNjZXNzIHJlc291cmNlcyBvdXRzaWRlIG9mIHRoZSB1c2VyJ3MgQVdTIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvbk9taWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PbWljc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE9taWNzICovXG4gICAgcHVibGljIEFtYXpvbk9taWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT21pY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IGFjY2VzcyB0byBhbGwgQW1hem9uIE9uZSBFbnRlcnByaXNlIHJlc291cmNlcyBhbmQgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uT25lRW50ZXJwcmlzZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT25lRW50ZXJwcmlzZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgbGltaXRlZCByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IGRldmljZSBpbnN0YWxsYXRpb24gYW5kIGFjdGl2YXRpb24uICovXG4gICAgcHVibGljIEFtYXpvbk9uZUVudGVycHJpc2VJbnN0YWxsZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT25lRW50ZXJwcmlzZUluc3RhbGxlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyByZWFkIG9ubHkgcGVybWlzc2lvbnMgdG8gYWxsIEFtYXpvbiBPbmUgRW50ZXJwcmlzZSByZXNvdXJjZXMgYW5kIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbk9uZUVudGVycHJpc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PbmVFbnRlcnByaXNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIE9wZW5TZWFyY2ggRGFzaGJvYXJkcyBTZXJ2aWNlIHRvIGFjY2VzcyBvdGhlciBBV1Mgc2VydmljZXMgc3VjaCBhcyBDbG91ZFdhdGNoIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hEYXNoYm9hcmRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaERhc2hib2FyZHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBPcGVuU2VhcmNoIERpcmVjdFF1ZXJ5IFNlcnZpY2UgdG8gYWNjZXNzIEFXUyBHbHVlIEFQSXMgZm9yIGNyZWF0aW5nIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaERpcmVjdFF1ZXJ5R2x1ZUNyZWF0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoRGlyZWN0UXVlcnlHbHVlQ3JlYXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBPcGVuU2VhcmNoIEluZ2VzdGlvbiB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBPcGVuU2VhcmNoIEluZ2VzdGlvbiBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIE9wZW5TZWFyY2ggSW5nZXN0aW9uIFNlcnZpY2UgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZlcmxlc3MgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIENsb3VkV2F0Y2ggQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaFNlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBBbWF6b24gQ29nbml0byBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlQ29nbml0b0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoU2VydmljZUNvZ25pdG9BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQW1hem9uIE9wZW5TZWFyY2ggU2VydmljZSBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoU2VydmljZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaFNlcnZpY2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoU2VydmljZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQW1hem9uIE9wZW5TZWFyY2ggU2VydmljZSB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgRUMyIE5ldHdvcmtpbmcgQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBQZXJzb25hbGl6ZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBDbG91ZFdhdGNoKS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUGVyc29uYWxpemVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblBlcnNvbmFsaXplRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUG9sbHkgc2VydmljZSBhbmQgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Qb2xseUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUG9sbHlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIFBvbGx5IHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUG9sbHlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qb2xseVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNYW5hZ2VkIFByb21ldGhldXMgcmVzb3VyY2VzIGluIHRoZSBBV1MgY29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25Qcm9tZXRoZXVzQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUHJvbWV0aGV1c0NvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNYW5hZ2VkIFByb21ldGhldXMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvblByb21ldGhldXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblByb21ldGhldXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY2VzcyB0byBydW4gcXVlcmllcyBhZ2FpbnN0IEFXUyBNYW5hZ2VkIFByb21ldGhldXMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvblByb21ldGhldXNRdWVyeUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qcm9tZXRoZXVzUXVlcnlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgd3JpdGUgb25seSBhY2Nlc3MgdG8gQVdTIE1hbmFnZWQgUHJvbWV0aGV1cyB3b3Jrc3BhY2VzICovXG4gICAgcHVibGljIEFtYXpvblByb21ldGhldXNSZW1vdGVXcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qcm9tZXRoZXVzUmVtb3RlV3JpdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyBtYW5hZ2VkIG9yIHVzZWQgYnkgQW1hem9uIE1hbmFnZWQgU2VydmljZSBmb3IgUHJvbWV0aGV1cyBDb2xsZWN0b3IgKi9cbiAgICBwdWJsaWMgQW1hem9uUHJvbWV0aGV1c1NjcmFwZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qcm9tZXRoZXVzU2NyYXBlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZGV2ZWxvcGVyIGFjY2VzcyB0byBlbmFibGUgaW50ZXJhY3Rpb25zIHdpdGggQW1hem9uIFEgKi9cbiAgICBwdWJsaWMgQW1hem9uUURldmVsb3BlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25RRGV2ZWxvcGVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gZW5hYmxlIGludGVyYWN0aW9ucyB3aXRoIEFtYXpvbiBRICovXG4gICAgcHVibGljIEFtYXpvblFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFFMREIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25RTERCQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUUxEQkNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFFMREIgdmlhIHRoZSBzZXJ2aWNlIEFQSS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUUxEQkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUUxEQkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBRTERCLiAqL1xuICAgIHB1YmxpYyBBbWF6b25RTERCUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUUxEQlJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBSRFMgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvblJEU0JldGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNCZXRhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFJEUyBDdXN0b20gdG8gcGVyZm9ybSB2YXJpb3VzIGF1dG9tYXRpb24gYWN0aW9ucyBhbmQgZGF0YWJhc2UgbWFuYWdlbWVudCB0YXNrcyB0aHJvdWdoIGFuIEVDMiBpbnN0YW5jZSBwcm9maWxlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNDdXN0b21JbnN0YW5jZVByb2ZpbGVSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0N1c3RvbUluc3RhbmNlUHJvZmlsZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gUkRTIEN1c3RvbSBQcmV2aWV3IFNlcnZpY2UgUm9sZSBQb2xpY3kgKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTQ3VzdG9tUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0N1c3RvbVByZXZpZXdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gUkRTIEN1c3RvbSB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTQ3VzdG9tU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTQ3VzdG9tU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhY2Nlc3MgdG8gdXNlIHRoZSBSRFMgZGF0YSBBUElzLCBzZWNyZXQgc3RvcmUgQVBJcyBmb3IgUkRTIGRhdGFiYXNlIGNyZWRlbnRpYWxzLCBhbmQgREIgY29uc29sZSBxdWVyeSBtYW5hZ2VtZW50IEFQSXMgdG8gZXhlY3V0ZSBTUUwgc3RhdGVtZW50cyBvbiBBdXJvcmEgU2VydmVybGVzcyBjbHVzdGVycyBpbiB0aGUgQVdTIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvblJEU0RhdGFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0RhdGFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgUkRTIHRvIGFjY2VzcyBEaXJlY3RvcnkgU2VydmljZSBNYW5hZ2VkIEFEIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIgZm9yIGRvbWFpbi1qb2luZWQgU1FMIFNlcnZlciBEQiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFtYXpvblJEU0RpcmVjdG9yeVNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTRGlyZWN0b3J5U2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBDbG91ZHdhdGNoIGZvciBSRFMgRW5oYW5jZWQgTW9uaXRvcmluZyAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNFbmhhbmNlZE1vbml0b3JpbmdSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0VuaGFuY2VkTW9uaXRvcmluZ1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUkRTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gUkRTIFBlcmZvcm1hbmNlIEluc2lnaHRzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNQZXJmb3JtYW5jZUluc2lnaHRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNQZXJmb3JtYW5jZUluc2lnaHRzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQtT25seSBwb2xpY3kgZm9yIFJEUyBQZXJmb3JtYW5jZSBJbnNpZ2h0cyAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNQZXJmb3JtYW5jZUluc2lnaHRzUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTUGVyZm9ybWFuY2VJbnNpZ2h0c1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFJEUyBQcmV2aWV3IFNlcnZpY2UgUm9sZSBQb2xpY3kgKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU1ByZXZpZXdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFJEUyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJEU1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBSRFMgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvblJEU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gcnVuIFNRTCBjb21tYW5kcyB0byBjb3B5LCBsb2FkLCB1bmxvYWQsIHF1ZXJ5LCBhbmQgYW5hbHl6ZSBkYXRhIG9uIEFtYXpvbiBSZWRzaGlmdC4gVGhlIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyB0byBydW4gc2VsZWN0IHN0YXRlbWVudHMgZm9yIHJlbGF0ZWQgc2VydmljZXMsIHN1Y2ggYXMgQW1hem9uIFMzLCBBbWF6b24gQ2xvdWRXYXRjaCBsb2dzLCBBbWF6b24gU2FnZU1ha2VyLCBvciBBV1MgR2x1ZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRBbGxDb21tYW5kc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRBbGxDb21tYW5kc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUmVkc2hpZnQgRGF0YSBBUElzLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBzY29wZWQgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdERhdGFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0RGF0YUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGlzIGFuIGVhc2Utb2YtdXNlIHBvbGljeSBmb3IgcnVubmluZyBxdWVyaWVzIHdpdGggQW1hem9uIFJlZHNoaWZ0IEZlZGVyYXRlZCBBdXRob3JpemF0aW9uICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0RmVkZXJhdGVkQXV0aG9yaXphdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdEZlZGVyYXRlZEF1dGhvcml6YXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUmVkc2hpZnQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBSZWRzaGlmdCBRdWVyeSBFZGl0b3IgYW5kIHRvIHNhdmVkIHF1ZXJpZXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBSZWRzaGlmdCBRdWVyeSBFZGl0b3IgVjIgb3BlcmF0aW9ucyBhbmQgcmVzb3VyY2VzLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbGlzdCB0aGUgQW1hem9uIFJlZHNoaWZ0IGNsdXN0ZXJzLCByZWFkIGtleXMgYW5kIGFsaWFzZXMgaW4gQVdTIEtNUyBhbmQgbWFuYWdlIHRoZSBRdWVyeSBFZGl0b3IgVjIgc2VjcmV0cyBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIGFiaWxpdHkgdG8gd29yayB3aXRoIEFtYXpvbiBSZWRzaGlmdCBRdWVyeSBFZGl0b3IgVjIgd2l0aG91dCBzaGFyaW5nIHJlc291cmNlcy4gVGhlIGdyYW50ZWQgcHJpbmNpcGFsIGNhbiBvbmx5IHJlYWQsIHVwZGF0ZSBhbmQgZGVsZXRlIGl0cyBvd24gcmVzb3VyY2VzIGJ1dCBjYW5ub3Qgc2hhcmUgdGhlbS4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgdGhlIEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVycyBhbmQgbWFuYWdlIHRoZSBRdWVyeSBFZGl0b3IgVjIgc2VjcmV0cyBvZiB0aGUgcHJpbmNpcGFsIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMk5vU2hhcmluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJOb1NoYXJpbmcpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIGFiaWxpdHkgdG8gd29yayB3aXRoIEFtYXpvbiBSZWRzaGlmdCBRdWVyeSBFZGl0b3IgVjIgd2l0aCBsaW1pdGVkIHNoYXJpbmcgb2YgcmVzb3VyY2VzLiBUaGUgZ3JhbnRlZCBwcmluY2lwYWwgY2FuIHJlYWQsIHdyaXRlIGFuZCBzaGFyZSBpdHMgb3duIHJlc291cmNlcy4gVGhlIGdyYW50ZWQgcHJpbmNpcGFsIGNhbiByZWFkIHRoZSByZXNvdXJjZXMgc2hhcmVkIHdpdGggaXRzIHRlYW0gYnV0IGNhbm5vdCB1cGRhdGUgdGhlbS4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgdGhlIEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVycyBhbmQgbWFuYWdlIHRoZSBRdWVyeSBFZGl0b3IgVjIgc2VjcmV0cyBvZiB0aGUgcHJpbmNpcGFsIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMlJlYWRTaGFyaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMlJlYWRTaGFyaW5nKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSBhYmlsaXR5IHRvIHdvcmsgd2l0aCBBbWF6b24gUmVkc2hpZnQgUXVlcnkgRWRpdG9yIFYyIHdpdGggc2hhcmluZyBvZiByZXNvdXJjZXMuIFRoZSBncmFudGVkIHByaW5jaXBhbCBjYW4gcmVhZCwgd3JpdGUgYW5kIHNoYXJlIGl0cyBvd24gcmVzb3VyY2VzLiBUaGUgZ3JhbnRlZCBwcmluY2lwYWwgY2FuIHJlYWQgYW5kIHVwZGF0ZSB0aGUgcmVzb3VyY2VzIHNoYXJlZCB3aXRoIGl0cyB0ZWFtLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbGlzdCB0aGUgQW1hem9uIFJlZHNoaWZ0IGNsdXN0ZXJzIGFuZCBtYW5hZ2UgdGhlIFF1ZXJ5IEVkaXRvciBWMiBzZWNyZXRzIG9mIHRoZSBwcmluY2lwYWwgaW4gQVdTIFNlY3JldHMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyUmVhZFdyaXRlU2hhcmluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJSZWFkV3JpdGVTaGFyaW5nKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUmVkc2hpZnQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFJlZHNoaWZ0IHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0U2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHNwZWNpZmllcyByZWtvZ25pdGlvbiBhbmQgczMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgQW1hem9uIFJla29nbml0aW9uIEN1c3RvbSBMYWJlbHMgZmVhdHVyZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVrb2duaXRpb25DdXN0b21MYWJlbHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJla29nbml0aW9uQ3VzdG9tTGFiZWxzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyB0byBhbGwgQW1hem9uIFJla29nbml0aW9uIEFQSXMgKi9cbiAgICBwdWJsaWMgQW1hem9uUmVrb2duaXRpb25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJla29nbml0aW9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyB0byBhbGwgUmVhZCByZWtvZ25pdGlvbiBBUElzICovXG4gICAgcHVibGljIEFtYXpvblJla29nbml0aW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVrb2duaXRpb25SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBSZWtvZ25pdGlvbiB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVrb2duaXRpb25TZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWtvZ25pdGlvblNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIFJvdXRlIDUzIEF1dG8gTmFtaW5nIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNBdXRvTmFtaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzQXV0b05hbWluZ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIGFsbCBSb3V0ZSA1MyBBdXRvIE5hbWluZyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzQXV0b05hbWluZ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNBdXRvTmFtaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWdpc3RyYW50IGxldmVsIGFjY2VzcyB0byBSb3V0ZSA1MyBBdXRvIE5hbWluZyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzQXV0b05hbWluZ1JlZ2lzdHJhbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0F1dG9OYW1pbmdSZWdpc3RyYW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIFJvdXRlNTMgRG9tYWlucyBhY3Rpb25zIGFuZCBDcmVhdGUgSG9zdGVkIFpvbmUgdG8gYWxsb3cgSG9zdGVkIFpvbmUgY3JlYXRpb24gYXMgcGFydCBvZiBkb21haW4gcmVnaXN0cmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0RvbWFpbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNEb21haW5zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBSb3V0ZTUzIERvbWFpbnMgbGlzdCBhbmQgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0RvbWFpbnNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzRG9tYWluc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBSb3V0ZSA1MyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gcmV0cmlldmUsIGxpc3QsIGNyZWF0ZSwgdXBkYXRlLCBhbmQgZGVsZXRlIGFsbCBBbWF6b24gUm91dGUgNTMgR2xvYmFsIFJlc29sdmVyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0dsb2JhbFJlc29sdmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzR2xvYmFsUmVzb2x2ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byByZXRyaWV2ZSBhbmQgbGlzdCBhbGwgQW1hem9uIFJvdXRlIDUzIEdsb2JhbCBSZXNvbHZlciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNHbG9iYWxSZXNvbHZlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNHbG9iYWxSZXNvbHZlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBQcm9maWxlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1Byb2ZpbGVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUHJvZmlsZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFByb2ZpbGUgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUHJvZmlsZXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUHJvZmlsZXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBSb3V0ZSA1MyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgQ2x1c3RlciAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDbHVzdGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDbHVzdGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IENsdXN0ZXIgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5Q2x1c3RlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeUNsdXN0ZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBDb250cm9sIENvbmZpZyAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDb250cm9sQ29uZmlnRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDb250cm9sQ29uZmlnRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IENvbnRyb2wgQ29uZmlnICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeUNvbnRyb2xDb25maWdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDb250cm9sQ29uZmlnUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgUmVhZGluZXNzICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IFJlYWRpbmVzcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHBvbGljeSBmb3IgUm91dGUgNTMgUmVzb2x2ZXIgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1Jlc29sdmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVzb2x2ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZCBvbmx5IHBvbGljeSBmb3IgUm91dGUgNTMgUmVzb2x2ZXIgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1Jlc29sdmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1Jlc29sdmVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgUzMgZGlyZWN0b3J5IGJ1Y2tldHMuICovXG4gICAgcHVibGljIEFtYXpvblMzRXhwcmVzc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNFeHByZXNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gUzNFeHByZXNzIG9wZXJhdGlvbnMgZm9yIFMzIGRpcmVjdG9yeSBidWNrZXRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0V4cHJlc3NSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0V4cHJlc3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJvb3QgY2xpZW50IGFjY2VzcyB0byBhbiBTMyBGaWxlcyBmaWxlIHN5c3RlbS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNGaWxlc0NsaWVudEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNGaWxlc0NsaWVudEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgY2xpZW50IGFjY2VzcyB0byBhbiBTMyBGaWxlcyBmaWxlIHN5c3RlbS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNGaWxlc0NsaWVudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRmlsZXNDbGllbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYW5kIHdyaXRlIGNsaWVudCBhY2Nlc3MgdG8gYW4gUzMgRmlsZXMgZmlsZSBzeXN0ZW0uICovXG4gICAgcHVibGljIEFtYXpvblMzRmlsZXNDbGllbnRSZWFkV3JpdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNGaWxlc0NsaWVudFJlYWRXcml0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1hbmFnZW1lbnQgYWNjZXNzIHRvIEFtYXpvbiBTMyBGaWxlcyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uUzNGaWxlc0NTSURyaXZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0ZpbGVzQ1NJRHJpdmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIFMzIEZpbGVzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNGaWxlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNGaWxlc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBTMyBGaWxlcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblMzRmlsZXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0ZpbGVzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgYnVja2V0cyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblMzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgTGFtYmRhIGZ1bmN0aW9ucyBwZXJtaXNzaW9ucyB0byBpbnRlcmFjdCB3aXRoIEFtYXpvbiBTMyBPYmplY3QgTGFtYmRhLiBBbHNvIGdyYW50cyBMYW1iZGEgcGVybWlzc2lvbnMgdG8gd3JpdGUgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM09iamVjdExhbWJkYUV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNPYmplY3RMYW1iZGFFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFMzIG9uIE91dHBvc3RzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNPdXRwb3N0c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNPdXRwb3N0c0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBTMyBvbiBPdXRwb3N0cyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblMzT3V0cG9zdHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM091dHBvc3RzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBidWNrZXRzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIFMzIHRhYmxlIGJ1Y2tldHMuICovXG4gICAgcHVibGljIEFtYXpvblMzVGFibGVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM1RhYmxlc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IGdyYW50cyBBV1MgTGFrZSBGb3JtYXRpb24gcGVybWlzc2lvbnMgdG8gYWN0IG9uIGFsbCB0YWJsZSBidWNrZXRzLCBuYW1lc3BhY2VzLCBhbmQgdGFibGVzIHdpdGhpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNUYWJsZXNMYWtlRm9ybWF0aW9uU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNUYWJsZXNMYWtlRm9ybWF0aW9uU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBTMyB0YWJsZSBidWNrZXRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM1RhYmxlc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzVGFibGVzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgcG9saWN5IHVzZWQgYnkgdGhlIEFXUyBTZXJ2aWNlIENhdGFsb2cgc2VydmljZSB0byBwcm92aXNpb24gcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENvZGVQaXBlbGluZSwgQ29kZUJ1aWxkLCBDb2RlQ29tbWl0LCBHbHVlLCBDbG91ZEZvcm1hdGlvbiwgZXRjLC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQWRtaW5TZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQWRtaW5TZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgdG8gdXNlIEFJIHNlcnZpY2VzIHRvIHN1cHBvcnQgcmVhZHkgdG8gdXNlIEFJIHNvbHV0aW9ucy4gVGhpcyBwb2xpY3kgd2lsbCBhZGQgbW9yZSBtdXRhdGluZyBwZXJtaXNzaW9ucyBmb3Igc2VydmljZXMgYXMgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgYWRkcyBzdXBwb3J0LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNBSVNlcnZpY2VzQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0FJU2VydmljZXNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdXNlIEFtYXpvbiBCZWRyb2NrIGluIFNhZ2VNYWtlciBDYW52YXMgYnkgcHJvdmlkaW5nIGFjY2VzcyB0byBkb3duc3RyZWFtIHNlcnZpY2VzIHN1Y2ggYXMgUzMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0JlZHJvY2tBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzQmVkcm9ja0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgcmVzb3VyY2VzIGFuZCBvcGVyYXRpb25zIGZvciBkYXRhIHByZXBhcmF0aW9uIGluIENhbnZhcy4gVGhlIHBvbGljeSBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIElBTSwgS01TLCBSRFMsIENsb3VkV2F0Y2ggTG9ncywgUmVkc2hpZnQsIEF0aGVuYSwgR2x1ZSwgRXZlbnRCcmlkZ2UsIFNlY3JldHMgTWFuYWdlcikuIFRoaXMgcG9saWN5IHNob3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgQW1hem9uIFNhZ2VNYWtlciBEb21haW4vVXNlciBQcm9maWxlIGV4ZWN1dGlvbiByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNEYXRhUHJlcEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzRGF0YVByZXBGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIHRvIGNyZWF0ZSwgbWFuYWdlIGFuZCB2aWV3IGVuZHBvaW50IGRldGFpbHMgZm9yIGVuZHBvaW50cyBjcmVhdGVkIHRocm91Z2ggQ2FudmFzLiBBbGxvd3MgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgdG8gcmV0cmlldmUgZW5kcG9pbnQgaW52b2NhdGlvbiBtZXRyaWNzIGZyb20gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzRGlyZWN0RGVwbG95QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0RpcmVjdERlcGxveUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBBbWF6b24gRU1SIFNlcnZlcmxlc3MgZm9yIHNlcnZpY2VzIHN1Y2ggYXMgUzMsIHVzZWQgYnkgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgZm9yIGxhcmdlIGRhdGEgcHJvY2Vzc2luZy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzRU1SU2VydmVybGVzc0V4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzRU1SU2VydmVybGVzc0V4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgY29tbW9ubHkgbmVlZGVkIHRvIHVzZSBTYWdlTWFrZXIgQ2FudmFzIHdpdGggQW1hem9uIEZvcmVjYXN0LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNGb3JlY2FzdEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNGb3JlY2FzdEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIHJlc291cmNlcyBhbmQgb3BlcmF0aW9ucy4gVGhlIHBvbGljeSBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIElBTSwgVlBDLCBFQ1IsIENsb3VkV2F0Y2ggTG9ncywgUmVkc2hpZnQsIFNlY3JldHMgTWFuYWdlciwgYW5kIEZvcmVjYXN0KS4gVGhpcyBwb2xpY3kgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIHRoZSBBbWF6b24gU2FnZU1ha2VyIERvbWFpbi9Vc2VyIFByb2ZpbGUgZXhlY3V0aW9uIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyB0byB1c2UgdGhlIFNhZ2VNYWtlciBEYXRhIFNjaWVuY2UgQXNzaXN0YW50IHNlcnZpY2UuIFRoZSBEYXRhIFNjaWVuY2UgQXNzaXN0YW50IGN1cnJlbnRseSB1c2VzIGJvdGggQW1hem9uIFNhZ2VNYWtlciBhbmQgQW1hem9uIFEgRGV2ZWxvcGVyIHRvIHByb2Nlc3MgdXNlciBwcm9tcHRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNTTURhdGFTY2llbmNlQXNzaXN0YW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc1NNRGF0YVNjaWVuY2VBc3Npc3RhbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgY29tbW9ubHkgbmVlZGVkIHRvIHVzZSBBbWF6b24gU2FnZU1ha2VyIENsdXN0ZXIuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNsdXN0ZXJJbnN0YW5jZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2x1c3Rlckluc3RhbmNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBbWF6b24gU2FnZU1ha2VyIENvcmUgU2VydmljZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ29yZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNvcmVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgU2FnZU1ha2VyIEVkZ2UgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYSBkZXZpY2UgZmxlZXQgZm9yIHRoZSBjdXN0b21lciB1c2luZyB0aGUgZGVmYXVsdCBjbG91ZCBjb25uZWN0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJFZGdlRGV2aWNlRmxlZXRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyRWRnZURldmljZUZsZWV0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZSBvZmZsaW5lIHN0b3JlIGZvciBhbiBBbWF6b24gU2FnZU1ha2VyIEZlYXR1cmVTdG9yZSBmZWF0dXJlIGdyb3VwLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJGZWF0dXJlU3RvcmVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyRmVhdHVyZVN0b3JlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBFQ1IsIENsb3VkV2F0Y2ggTG9ncykuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGUgYWNjZXNzIHRvIHNlcnZpY2VzIHRoYXQgYXJlIGNvbW1vbmx5IG5lZWRlZCB0byB1c2UgU2FnZU1ha2VyIGdlb3NwYXRpYWwuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciBHZW9zcGF0aWFsIHRocm91Z2ggdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyR2Vvc3BhdGlhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyR2Vvc3BhdGlhbEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBTYWdlTWFrZXIgR3JvdW5kVHJ1dGggTGFiZWxpbmcgam9iICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckdyb3VuZFRydXRoRXhlY3V0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckdyb3VuZFRydXRoRXhlY3V0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBBbWF6b24gTWFuYWdlZCBQb2xpY3kgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3IgU2FnZU1ha2VyIEh5cGVyUG9kIHRvIGFjY2VzcyBnYXRlZCBtb2RlbHMgaW4gU2FnZU1ha2VyIEp1bXBzdGFydC4gSXQgYWxsb3dzIGNyZWF0aW5nIHByZXNpZ25lZCBVUkxzIGZvciBodWIgY29udGVudCBpbiB0aGUgU2FnZU1ha2VyIFB1YmxpYyBIdWIuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kR2F0ZWRNb2RlbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJIeXBlclBvZEdhdGVkTW9kZWxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzIHJlcXVpcmVkIGZvciBzZXR0aW5nIHVwIHRoZSBTYWdlTWFrZXIgSHlwZXJQb2QgaW5mZXJlbmNlIG9wZXJhdG9yLiBJdCBlbmFibGVzIHRoZSBpbmZlcmVuY2Ugb3BlcmF0b3IgdG8gYWNjZXNzIEFXUyBuZXR3b3JraW5nIHJlc291cmNlcywgQW1hem9uIFMzLCBBbWF6b24gRUNSLCBBbWF6b24gQ2xvdWRXYXRjaCwgQVdTIENlcnRpZmljYXRlIE1hbmFnZXIsIGFuZCBTYWdlTWFrZXIgcmVzb3VyY2VzIG5lY2Vzc2FyeSB0byBkZXBsb3kgYW5kIG1hbmFnZSBpbmZlcmVuY2Ugd29ya2xvYWRzIG9uIEh5cGVyUG9kIGNsdXN0ZXJzICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kSW5mZXJlbmNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckh5cGVyUG9kSW5mZXJlbmNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlcyByZXF1aXJlZCBmb3Igc2V0dGluZyB1cCBTYWdlTWFrZXIgSHlwZXJQb2Qgb2JzZXJ2YWJpbGl0eS4gSXQgZW5hYmxlcyBhY2Nlc3MgdG8gQW1hem9uIE1hbmFnZWQgUHJvbWV0aGV1cywgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBhbmQgRUtTIEFkZG9ucy4gVGhlIHBvbGljeSBhbHNvIGluY2x1ZGVzIGJyb2FkIGFjY2VzcyB0byBHcmFmYW5hIEhUVFAgQVBJcyB0aHJvdWdoIFNlcnZpY2VBY2NvdW50VG9rZW5zIGFjcm9zcyBhbGwgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB3b3Jrc3BhY2VzIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VySHlwZXJQb2RPYnNlcnZhYmlsaXR5QWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySHlwZXJQb2RPYnNlcnZhYmlsaXR5QWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gQW1hem9uIFNhZ2VNYWtlciBIeXBlclBvZCB0byByZWxhdGVkIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIEFtYXpvbiBFS1MsIEFtYXpvbiBDbG91ZFdhdGNoIGV0Yy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VySHlwZXJQb2RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJIeXBlclBvZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gc2V0IHVwIHRoZSBTYWdlTWFrZXIgSHlwZXJQb2QgdHJhaW5pbmcgb3BlcmF0b3IuIEl0IGVuYWJsZXMgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgSHlwZXJQb2QgYW5kIEVLUyBhZGQtb25zLiBUaGUgcG9saWN5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIHRoZSBTYWdlTWFrZXIgSHlwZXJQb2QgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VySHlwZXJQb2RUcmFpbmluZ09wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckh5cGVyUG9kVHJhaW5pbmdPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgQW1hem9uIEF1Z21lbnRlZCBBSSBGbG93RGVmaW5pdGlvbiByZXNvdXJjZXMgYWdhaW5zdCBhbnkgV29ya3RlYW0uICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlck1lY2hhbmljYWxUdXJrQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlck1lY2hhbmljYWxUdXJrQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBBV1MgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIG5lZWRlZCB0byB1c2UgYWxsIEFtYXpvbiBTYWdlTWFrZXIgR292ZXJuYW5jZSBmZWF0dXJlcy4gVGhlIHBvbGljeSBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIEtNUykuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlck1vZGVsR292ZXJuYW5jZVVzZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbEdvdmVybmFuY2VVc2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGlzIGEgbmV3IG1hbmFnZWQgcG9saWN5IGZvciBNb2RlbCBSZWdpc3RyeSBpbiBTYWdlbWFrZXIuIFRoaXMgcG9saWN5IGlzIGEgc3RhbmRhbG9uZSBwb2xpY3kgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIHVzZXIgcm9sZSB0byBhY2Nlc3MgTW9kZWwgUmVnaXN0cnkgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMgaW4gU2FnZW1ha2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJNb2RlbFJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbFJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBbWF6b24gU2FnZU1ha2VyIE5vdGVib29rcyAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJOb3RlYm9va3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJOb3RlYm9va3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgQW1hem9uIFNhZ2VNYWtlciBwYXJ0bmVyIGFwcCB1c2VycyB0byBhY2Nlc3MgYXBwbGljYXRpb25zLCBsaXN0IGF2YWlsYWJsZSBhcHBsaWNhdGlvbnMsIGxhdW5jaCBhcHBsaWNhdGlvbiB3ZWIgVUlzLCBhbmQgY29ubmVjdCB2aWEgdGhlIGFwcGxpY2F0aW9uIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGFydG5lckFwcHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBhcnRuZXJBcHBzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEFQSUdhdGV3YXkgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIExhbWJkYSBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0FwaUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0FwaUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBMYW1iZGEsIEFQSUdhdGV3YXkgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZEZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ2xvdWRGb3JtYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIExhbWJkYSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgU2VjcmV0cyBNYW5hZ2VyIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgQW1hem9uIE1hbmFnZWQgUG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBjb21tb25seSBuZWVkZWQgZm9yIHVzZSB3aXRoIENhbGxiYWNrIHN0ZXBzIGFuZCBMYW1iZGEgc3RlcHMgaW4gU2FnZU1ha2VyIE1vZGVsIEJ1aWxkaW5nIFBpcGVsaW5lcy4gSXQgaXMgYWRkZWQgdG8gdGhlIEFtYXpvblNhZ2VNYWtlci1FeGVjdXRpb25Sb2xlIHRoYXQgY2FuIGJlIGNyZWF0ZWQgd2hlbiBzZXR0aW5nIHVwIFNhZ2VNYWtlciBTdHVkaW8uIEl0IGNhbiBhbHNvIGJlIGF0dGFjaGVkIHRvIGFueSBvdGhlciByb2xlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhdXRob3Jpbmcgb3IgZXhlY3V0aW5nIHBpcGVsaW5lcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGlwZWxpbmVzSW50ZWdyYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBpcGVsaW5lc0ludGVncmF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHdpbGwgYmUgdXNlZCBCeSBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW9zIHRvIGNyZWF0ZSBWUEMgcmVsYXRlZCByZXNvdXJjZXMgZm9yIFF1aWNrU2lnaHQgKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUXVpY2tTaWdodFZQQ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJRdWlja1NpZ2h0VlBDUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEFQSUdhdGV3YXkgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENsb3VkV2F0Y2ggTG9ncyBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQXBpR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNBcGlHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgcG9saWN5IHVzZWQgYnkgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzdWJzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgU2FnZU1ha2VyIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZGZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZGZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ29kZUJ1aWxkIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ29kZUJ1aWxkU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVCdWlsZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ29kZVBpcGVsaW5lIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ29kZVBpcGVsaW5lU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVQaXBlbGluZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ2xvdWRXYXRjaCBFdmVudHMgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc3Vic2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENvZGVQaXBlbGluZSBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0V2ZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgRmlyZWhvc2Ugd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIEZpcmVob3NlIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNGaXJlaG9zZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNGaXJlaG9zZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgR2x1ZSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgR2x1ZSwgUzMgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0dsdWVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzR2x1ZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgTGFtYmRhIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBFQ1IsIFMzIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgU3lzdGVtcyBNYW5hZ2VyIGFjdGl2YXRpb24sIHNlc3Npb24gbWFuYWdlbWVudCwgYW5kIEtNUyBrZXkgb3BlcmF0aW9ucyBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgdGhlIFNhZ2VNYWtlciBTcGFjZXMgQWRkb24gdG8gZW5hYmxlIHNlY3VyZSByZW1vdGUgYWNjZXNzIHRvIEVLUyBTYWdlTWFrZXIgU3BhY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTcGFjZXNDb250cm9sbGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNwYWNlc0NvbnRyb2xsZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgU3lzdGVtcyBLTVMga2V5IG9wZXJhdGlvbnMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIHRoZSBTYWdlTWFrZXIgU3BhY2VzIFJvdXRlciB0byBlbmFibGUgc2VjdXJlIHJlbW90ZSBhY2Nlc3MgdG8gRUtTIFNhZ2VNYWtlciBTcGFjZXMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNwYWNlc1JvdXRlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTcGFjZXNSb3V0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIEFtYXpvbiBNYW5hZ2VkIFBvbGljeSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIFNhZ2VNYWtlciBUcmFpbmluZyBQbGFucy4gSXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBUcmFpbmluZyBQbGFucyBhbmQgUmVzZXJ2ZWQgQ2FwYWNpdGllcywgZGVzY3JpYmUgZXhpc3RpbmcgVHJhaW5pbmcgUGxhbnMsIGFuZCBwZXJmb3JtIHNlYXJjaCBhbmQgbGlzdGluZyBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJUcmFpbmluZ1BsYW5DcmVhdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyVHJhaW5pbmdQbGFuQ3JlYXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNlY3VyaXR5IExha2UgYW5kIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIGFkbWluaXN0ZXIgU2VjdXJpdHkgTGFrZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2VjdXJpdHlMYWtlQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TZWN1cml0eUxha2VBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBbWF6b24gU2VjdXJpdHlMYWtlIG1ldGEgc3RvcmUgbWFuYWdlciBsYW1iZGEgd2hpY2ggYWxsb3dzIHRoZSBhY2Nlc3MgdG8gY2xvdWR3YXRjaCwgUzMsIEdsdWUgYW5kIFNRUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2VjdXJpdHlMYWtlTWV0YXN0b3JlTWFuYWdlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TZWN1cml0eUxha2VNZXRhc3RvcmVNYW5hZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNlY3VyaXR5IExha2UgY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHRoaXJkLXBhcnR5IGN1c3RvbSBzb3VyY2VzIHRvIHdyaXRlIGRhdGEgdG8gYSBkYXRhIGxha2UgYW5kIGZvciB0aGlyZC1wYXJ0eSBzdWJzY3JpYmVycyB0byBjb25zdW1lIGRhdGEgZnJvbSBhIGRhdGEgbGFrZSwgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TZWN1cml0eUxha2VQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNlY3VyaXR5TGFrZVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU0VTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TRVNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU0VTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU0VTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgU0VTIHRvIHB1Ymxpc2ggQW1hem9uIENsb3VkV2F0Y2ggYmFzaWMgbW9uaXRvcmluZyBtZXRyaWNzIG9uIGJlaGFsZiBvZiB5b3VyIFNFUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU0VTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU05TIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU05TRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TTlNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU05TIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU05TUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU05TUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQW1hem9uIFNOUyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNOU1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU05TUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTUVMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TUVNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNRU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBTUVMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TUVNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TUVNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB2aWV3IGF1dG9tYXRpb24gZXhlY3V0aW9ucyBhbmQgc2VuZCBhcHByb3ZhbCBkZWNpc2lvbnMgdG8gYXV0b21hdGlvbiB3YWl0aW5nIGZvciBhcHByb3ZhbCAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01BdXRvbWF0aW9uQXBwcm92ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNQXV0b21hdGlvbkFwcHJvdmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEVDMiBBdXRvbWF0aW9uIHNlcnZpY2UgdG8gZXhlY3V0ZSBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gZG9jdW1lbnRzICovXG4gICAgcHVibGljIEFtYXpvblNTTUF1dG9tYXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTUF1dG9tYXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIFNTTSBBZ2VudCB0byBhY2Nlc3MgRGlyZWN0b3J5IFNlcnZpY2Ugb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lciBmb3IgZG9tYWluLWpvaW4gdGhlIG1hbmFnZWQgaW5zdGFuY2UuICovXG4gICAgcHVibGljIEFtYXpvblNTTURpcmVjdG9yeVNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNRGlyZWN0b3J5U2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTU00uICovXG4gICAgcHVibGljIEFtYXpvblNTTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqICBTZXJ2aWNlIFJvbGUgdG8gYmUgdXNlZCBmb3IgRUMyIE1haW50ZW5hbmNlIFdpbmRvdyAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01NYWludGVuYW5jZVdpbmRvd1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNTWFpbnRlbmFuY2VXaW5kb3dSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZW5hYmxlcyBBV1MgU3lzdGVtcyBNYW5hZ2VyIGZ1bmN0aW9uYWxpdHkgb24gRUMyIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNTWFuYWdlZEVDMkluc3RhbmNlRGVmYXVsdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01NYW5hZ2VkRUMySW5zdGFuY2VEZWZhdWx0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBmb3IgQW1hem9uIEVDMiBSb2xlIHRvIGVuYWJsZSBBV1MgU3lzdGVtcyBNYW5hZ2VyIHNlcnZpY2UgY29yZSBmdW5jdGlvbmFsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGFjY2VzcyB0byBjaGlsZCBpbnN0YW5jZXMgZm9yIHBhdGNoIGFzc29jaWF0aW9uIG9wZXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNUGF0Y2hBc3NvY2lhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01QYXRjaEFzc29jaWF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU1NNLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBbWF6b24gU1NNICovXG4gICAgcHVibGljIEFtYXpvblNTTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIGFsbCBBbWF6b24gVGV4dHJhY3QgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25UZXh0cmFjdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGV4dHJhY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFRleHRyYWN0IHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UZXh0cmFjdFNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRleHRyYWN0U2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIFRpbWVzdHJlYW0gdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgY2VydGFpbiBLTVMgb3BlcmF0aW9ucywgYW5kIG9wZXJhdGlvbnMgdG8gbWFuYWdlIHlvdXIgc2F2ZWQgcXVlcmllcy4gSWYgdXNpbmcgQ3VzdG9tZXIgbWFuYWdlZCBDTUssIHBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRpbWVzdHJlYW1Db25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBUaW1lc3RyZWFtLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgY2VydGFpbiBLTVMgb3BlcmF0aW9uIGFjY2Vzcy4gSWYgdXNpbmcgQ3VzdG9tZXIgbWFuYWdlZCBDTUssIHBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBjcmVhdGUsIHVwZGF0ZSwgZGVsZXRlIGFuZCBsaXN0IEFtYXpvbiBUaW1lc3RyZWFtIEluZmx1eERCIGluc3RhbmNlcyBhbmQgY3JlYXRlIGFuZCBsaXN0IHBhcmFtZXRlciBncm91cHMuIFBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUluZmx1eERCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UaW1lc3RyZWFtSW5mbHV4REJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIG1hbmFnZSBBbWF6b24gVGltZXN0cmVhbSBJbmZsdXhEQiBpbnN0YW5jZXMgYW5kIHBhcmFtZXRlciBncm91cHMgZXhjZXB0IG1hcmtldHBsYWNlIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblRpbWVzdHJlYW1JbmZsdXhEQkZ1bGxBY2Nlc3NXaXRob3V0TWFya2V0cGxhY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUluZmx1eERCRnVsbEFjY2Vzc1dpdGhvdXRNYXJrZXRwbGFjZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUgYW5kIGxpc3QgQW1hem9uIFRpbWVzdHJlYW0gSW5mbHV4REIgaW5zdGFuY2VzIGFuZCBjcmVhdGUgYW5kIGxpc3QgcGFyYW1ldGVyIGdyb3Vwcy4gUGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbmVlZGVkLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UaW1lc3RyZWFtSW5mbHV4REJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UaW1lc3RyZWFtSW5mbHV4REJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFRpbWVzdHJlYW0uIFBvbGljeSBhbHNvIHByb3ZpZGVzIHBlcm1pc3Npb24gdG8gY2FuY2VsIGFueSBydW5uaW5nIHF1ZXJ5LiBJZiB1c2luZyBDdXN0b21lciBtYW5hZ2VkIENNSywgcGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbmVlZGVkLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UaW1lc3RyZWFtUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFRyYW5zY3JpYmUgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25UcmFuc2NyaWJlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UcmFuc2NyaWJlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWFkIG9ubHkgb3BlcmF0aW9uIGZvciBBbWF6b24gVHJhbnNjcmliZSAqL1xuICAgIHB1YmxpYyBBbWF6b25UcmFuc2NyaWJlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVHJhbnNjcmliZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gVmVyaWZpZWQgUGVybWlzc2lvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBWZXJpZmllZCBQZXJtaXNzaW9ucyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WZXJpZmllZFBlcm1pc3Npb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGF0dGFjaCB0aGVtIHRvIGNyb3NzLWFjY291bnQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvblZQQ0Nyb3NzQWNjb3VudE5ldHdvcmtJbnRlcmZhY2VPcGVyYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ0Nyb3NzQWNjb3VudE5ldHdvcmtJbnRlcmZhY2VPcGVyYXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFZQQyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIEFXUyByZXNvdXJjZXMsIHJ1biBOZXR3b3JrIEFjY2VzcyBBbmFseXplciwgYW5kIGNyZWF0ZSBvciBkZWxldGUgdGFncyBvbiBOZXR3b3JrIEluc2lnaHRzIEFjY2VzcyBTY29wZSBhbmQgTmV0d29yayBJbnNpZ2h0cyBBY2Nlc3MgU2NvcGUgQW5hbHlzaXMuICovXG4gICAgcHVibGljIEFtYXpvblZQQ05ldHdvcmtBY2Nlc3NBbmFseXplckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDTmV0d29ya0FjY2Vzc0FuYWx5emVyRnVsbEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIEFXUyByZXNvdXJjZXMsIHJ1biBSZWFjaGFiaWxpdHkgQW5hbHl6ZXIsIGFuZCBjcmVhdGUgb3IgZGVsZXRlIHRhZ3Mgb24gTmV0d29yayBJbnNpZ2h0cyBQYXRoIGFuZCBOZXR3b3JrIEluc2lnaHRzIEFuYWx5c2lzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WUENSZWFjaGFiaWxpdHlBbmFseXplckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDUmVhY2hhYmlsaXR5QW5hbHl6ZXJGdWxsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIHJvbGUgSUFNUm9sZUZvclJlYWNoYWJpbGl0eUFuYWx5emVyQ3Jvc3NBY2NvdW50UmVzb3VyY2VBY2Nlc3MuIFRoaXMgcm9sZSBpcyBkZXBsb3llZCB0byB0aGUgbWVtYmVyIGFjY291bnRzIGluIGFuIG9yZ2FuaXphdGlvbiB3aGVuIHRoZSBtYW5hZ2VtZW50IGFjY291bnQgZW5hYmxlcyB0cnVzdGVkIGFjY2VzcyBmb3IgUmVhY2hhYmlsaXR5IEFuYWx5emVyLiBJdCBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byB2aWV3IHJlc291cmNlcyBmcm9tIGFjcm9zcyB5b3VyIG9yZ2FuaXphdGlvbiB1c2luZyB0aGUgUmVhY2hhYmlsaXR5IEFuYWx5emVyIGNvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ1JlYWNoYWJpbGl0eUFuYWx5emVyUGF0aENvbXBvbmVudFJlYWRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDUmVhY2hhYmlsaXR5QW5hbHl6ZXJQYXRoQ29tcG9uZW50UmVhZFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFZQQyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFdvcmtEb2NzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrRG9jc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya0RvY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya0RvY3MgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvbldvcmtEb2NzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya0RvY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya01haWwgRXZlbnRzICovXG4gICAgcHVibGljIEFtYXpvbldvcmtNYWlsRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya01haWxFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFdvcmtNYWlsLCBEaXJlY3RvcnkgU2VydmljZSwgU0VTLCBFQzIgYW5kIHJlYWQgYWNjZXNzIHRvIEtNUyBtZXRhZGF0YS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtNYWlsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIHRoZSBXb3JrTWFpbCBNZXNzYWdlIEZsb3cgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrTWFpbE1lc3NhZ2VGbG93RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbE1lc3NhZ2VGbG93RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQgb25seSBhY2Nlc3MgdG8gV29ya01haWwgbWVzc2FnZXMgZm9yIHRoZSBHZXRSYXdNZXNzYWdlQ29udGVudCBBUEkgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxNZXNzYWdlRmxvd1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtNYWlsTWVzc2FnZUZsb3dSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gV29ya01haWwgYW5kIFNFUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBXb3JrU3BhY2VzIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgdmlhIEFXUyBTREsgYW5kIENMSS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc0FkbWluKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNBZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0b3IgYWNjZXNzIGZvciBwYWNrYWdpbmcgYW4gYXBwbGljYXRpb24gaW4gQW1hem9uIFdvcmtTcGFjZXMgQXBwbGljYXRpb24gTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc0FwcGxpY2F0aW9uTWFuYWdlckFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNBcHBsaWNhdGlvbk1hbmFnZXJBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgbWFuYWdlZCBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDQSByZXNvdXJjZXMgaW4geW91ciBBV1MgYWNjb3VudCBmb3IgY2VydGlmaWNhdGUtYmFzZWQgYXV0aGVudGljYXRpb24uICovXG4gICAgcHVibGljIEFtYXpvbldvcmtzcGFjZXNQQ0FBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya3NwYWNlc1BDQUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIEFXUyBXb3JrU3BhY2VzIHNlcnZpY2UgYWNjZXNzIHRvIHJlcXVpcmVkIGN1c3RvbWVyIGFjY291bnQgcmVzb3VyY2VzIGZvciBsYXVuY2hpbmcgV29ya3NwYWNlcyBQb29scyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzUG9vbFNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1Bvb2xTZXJ2aWNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBTZWN1cmUgQnJvd3NlciBhbmQgaXRzIGRlcGVuZGVuY2llcyB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBTREssIGFuZCBDTEkuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNTZWN1cmVCcm93c2VyUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1NlY3VyZUJyb3dzZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBiYWNrZW5kIHNlcnZpY2UgdG8gcGVyZm9ybSBXb3Jrc3BhY2UgU2VsZiBTZXJ2aWNlIGFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1NlbGZTZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNTZWxmU2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGN1c3RvbWVyIGFjY291bnQgYWNjZXNzIHRvIEFXUyBXb3JrU3BhY2VzIHNlcnZpY2UgZm9yIGxhdW5jaGluZyBhIFdvcmtzcGFjZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1NlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1NlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlcXVpcmVkIHJlbGF0ZWQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1RoaW5DbGllbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBNb25pdG9yaW5nICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50TW9uaXRvcmluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50TW9uaXRvcmluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBhbmQgaXRzIGRlcGVuZGVuY2llcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzVGhpbkNsaWVudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBXb3JrU3BhY2VzIFdlYiBhbmQgaXRzIGRlcGVuZGVuY2llcyB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBTREssIGFuZCBDTEkuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNXZWJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzV2ViUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFdvcmtTcGFjZXMgV2ViICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNXZWJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzV2ViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gWm9jYWxvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25ab2NhbG9GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblpvY2Fsb0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBab2NhbG8gKi9cbiAgICBwdWJsaWMgQW1hem9uWm9jYWxvUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uWm9jYWxvUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBbXBsaWZ5IGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIGRlcGxveSBBbXBsaWZ5IGJhY2tlbmQgcmVzb3VyY2VzIChBV1MgQXBwU3luYywgQW1hem9uIENvZ25pdG8sIEFtYXpvbiBTMyBhbmQgb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcykgdmlhIHRoZSBBV1MgQ2xvdWQgRGV2ZWxvcG1lbnQgS2l0IChBV1MgQ0RLKSAqL1xuICAgIHB1YmxpYyBBbXBsaWZ5QmFja2VuZERlcGxveUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1wbGlmeUJhY2tlbmREZXBsb3lGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xhdWRlIFBsYXRmb3JtIG9uIEFXUyAqL1xuICAgIHB1YmxpYyBBbnRocm9waWNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFudGhyb3BpY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIGFuZCBpbmZlcmVuY2UgYWNjZXNzIHRvIENsYXVkZSBQbGF0Zm9ybSBvbiBBV1MgKi9cbiAgICBwdWJsaWMgQW50aHJvcGljSW5mZXJlbmNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFudGhyb3BpY0luZmVyZW5jZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpbWl0ZWQgYWNjZXNzIHRvIENsYXVkZSBQbGF0Zm9ybSBvbiBBV1MgKi9cbiAgICBwdWJsaWMgQW50aHJvcGljTGltaXRlZEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbnRocm9waWNMaW1pdGVkQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbGF1ZGUgUGxhdGZvcm0gb24gQVdTICovXG4gICAgcHVibGljIEFudGhyb3BpY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFudGhyb3BpY1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFQSSBHYXRld2F5IHRvIG1hbmFnZSBhc3NvY2lhdGVkIEFXUyBSZXNvdXJjZXMgb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVBJR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFQSUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBcHBJbnRlZ3JhdGlvbnMgdG8gbWFuYWdlIEFwcEZsb3cgcmVzb3VyY2VzIGFuZCBwdWJsaXNoIENsb3VkV2F0Y2ggbWV0cmljIGRhdGEgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFwcEludGVncmF0aW9uc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcEludGVncmF0aW9uc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBcHBsaWNhdGlvbiBBdXRvc2NhbGluZyBmb3IgQW1hem9uIEFwcFN0cmVhbSAqL1xuICAgIHB1YmxpYyBBcHBsaWNhdGlvbkF1dG9TY2FsaW5nRm9yQW1hem9uQXBwU3RyZWFtQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcGxpY2F0aW9uQXV0b1NjYWxpbmdGb3JBbWF6b25BcHBTdHJlYW1BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UgQ29udGludW91cyBFeHBvcnQgZmVhdHVyZSAqL1xuICAgIHB1YmxpYyBBcHBsaWNhdGlvbkRpc2NvdmVyeVNlcnZpY2VDb250aW51b3VzRXhwb3J0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXBwbGljYXRpb25EaXNjb3ZlcnlTZXJ2aWNlQ29udGludW91c0V4cG9ydFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBBcHBSdW5uZXIgTmV0d29ya2luZyB0byBtYW5hZ2UgcmVsYXRlZCBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBcHBSdW5uZXJOZXR3b3JraW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXBwUnVubmVyTmV0d29ya2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBBcHBSdW5uZXIgdG8gbWFuYWdlIHJlbGF0ZWQgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQXBwUnVubmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXBwUnVubmVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwU3R1ZGlvIHRvIG1hbmFnZSBhc3NvY2lhdGVkIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFwcFN0dWRpb1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcFN0dWRpb1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBbWF6b24gQXVyb3JhIERTUUwgU2VydmljZSBMaW5rZWQgUm9sZSAqL1xuICAgIHB1YmxpYyBBdXJvcmFEc3FsU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXVyb3JhRHNxbFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQXV0byBTY2FsaW5nIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ0NvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBdXRvIFNjYWxpbmcgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ0NvbnNvbGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ0NvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEF1dG8gU2NhbGluZy4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQXV0b1NjYWxpbmcgTm90aWZpY2F0aW9uIEFjY2VzcyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEF1dG9TY2FsaW5nTm90aWZpY2F0aW9uQWNjZXNzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ05vdGlmaWNhdGlvbkFjY2Vzc1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEF1dG8gU2NhbGluZy4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEF1dG8gU2NhbGluZyAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQVdTIENvbmZpZyBzZXJ2aWNlIHJvbGUuIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBBV1MgQ29uZmlnIHRvIHRyYWNrIGNoYW5nZXMgdG8geW91ciBBV1MgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgdGhlIFNTTSBEaWFnbm9zaXMgUzMgYnVja2V0IGZvciBkaWFnbm9zaXMgYW5kIHJlbWVkaWF0aW9uIG9mIGlzc3Vlcy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNQXV0b21hdGlvbkRpYWdub3Npc0J1Y2tldFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01BdXRvbWF0aW9uRGlhZ25vc2lzQnVja2V0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBwZXJtaXNzaW9uIGZvciBEaWFnbm9zaW5nIGlzc3VlcyB3aXRoIFNTTSBzZXJ2aWNlcyBieSBleGVjdXRpbmcgYWN0aXZpdGllcyBkZWZpbmVkIHdpdGhpbiBBdXRvbWF0aW9uIERvY3VtZW50cywgcHJpbWFyaWx5IHVzZWQgZm9yIHJ1bm5pbmcgdGhlIEF1dG9tYXRpb24gZG9jdW1lbnRzIGluIGEgY3Jvc3MtYWNjb3VudCBjcm9zcy1yZWdpb24gc2V0dXAgYnkgdHJpZ2dlcmluZyBjaGlsZCBhdXRvbWF0aW9ucyB3aXRoaW4gbWVtYmVyIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uQWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTURpYWdub3Npc0F1dG9tYXRpb25BZG1pbmlzdHJhdGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHBlcm1pc3Npb24gZm9yIERpYWdub3NpbmcgaXNzdWVzIHdpdGggU1NNIHNlcnZpY2VzIGJ5IGV4ZWN1dGluZyBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gRG9jdW1lbnRzLCBwcmltYXJpbHkgdXNlZCBmb3IgcnVubmluZyB0aGUgQXV0b21hdGlvbiBkb2N1bWVudHMgaW4gYSB0YXJnZXQgYWNjb3VudC9yZWdpb24gc2V0dXAgYnkgZGlhZ25vc2luZyBTU00gc2VydmljZSBoZWFsdGggYWNyb3NzIGFsbCBub2Rlcy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3Igb3BlcmF0aW9uYWwgYWNjb3VudHMgdG8gZGlhZ25vc2UgdW5tYW5hZ2VkIG5vZGVzIGJ5IHByb3ZpZGluZyBPcmdhbmlzYXRpb24gc3BlY2lmaWMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgU1NNIGF1dG9tYXRpb24gdG8gcHVsbCB0aGUgbGlzdCBvZiBtZW1iZXIgYWNjb3VudHMgd2l0aGluIGEgcm9vdCBvZiBhbiBPcmdhbmlzYXRpb24gdG8gdHJpZ2dlciBjcm9zcy1hY2NvdW50IGNyb3NzLXJlZ2lvbiBleGVjdXRpb24gYnkgYWxsb3dpbmcgYXNzdW1pbmcgRXhlY3V0aW9uIHJvbGVzIGluIHRhcmdldCBhY2NvdW50L3JlZ2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbk9wZXJhdGlvbmFsQWNjb3VudEFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uT3BlcmF0aW9uYWxBY2NvdW50QWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBwZXJtaXNzaW9uIGZvciBSZW1lZGlhdGluZyBpc3N1ZXMgd2l0aCBTU00gc2VydmljZXMgYnkgZXhlY3V0aW5nIGFjdGl2aXRpZXMgZGVmaW5lZCB3aXRoaW4gQXV0b21hdGlvbiBEb2N1bWVudHMsIHByaW1hcmlseSB1c2VkIGZvciBydW5uaW5nIHRoZSBBdXRvbWF0aW9uIGRvY3VtZW50cyBpbiBhIGNyb3NzLWFjY291bnQgY3Jvc3MtcmVnaW9uIHNldHVwIGJ5IHRyaWdnZXJpbmcgY2hpbGQgYXV0b21hdGlvbnMgd2l0aGluIG1lbWJlciBhY2NvdW50cy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uQWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbkFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBSZW1lZGlhdGluZyBpc3N1ZXMgd2l0aCBTU00gc2VydmljZXMgYnkgZXhlY3V0aW5nIGFjdGl2aXRpZXMgZGVmaW5lZCB3aXRoaW4gQXV0b21hdGlvbiBEb2N1bWVudHMsIHByaW1hcmlseSB1c2VkIGZvciBydW5uaW5nIHRoZSBBdXRvbWF0aW9uIGRvY3VtZW50cyBpbiBhIHRhcmdldCBhY2NvdW50L3JlZ2lvbiBzZXR1cCBieSByZW1lZGlhdGluZyBTU00gc2VydmljZXMgaGVhbHRoIGFjcm9zcyBhbGwgbm9kZXMuICovXG4gICAgcHVibGljIEFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBvcGVyYXRpb25hbCBhY2NvdW50cyB0byBSZW1lZGlhdGUgdW5tYW5hZ2VkIG5vZGVzIGJ5IHByb3ZpZGluZyBPcmdhbmlzYXRpb24gc3BlY2lmaWMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgU1NNIGF1dG9tYXRpb24gdG8gcHVsbCB0aGUgbGlzdCBvZiBtZW1iZXIgYWNjb3VudHMgd2l0aGluIGEgcm9vdCBvZiBhbiBPcmdhbmlzYXRpb24gdG8gdHJpZ2dlciBjcm9zcy1hY2NvdW50IGNyb3NzLXJlZ2lvbiBleGVjdXRpb24gYnkgYWxsb3dpbmcgYXNzdW1pbmcgRXhlY3V0aW9uIHJvbGVzIGluIHRhcmdldCBhY2NvdW50L3JlZ2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uT3BlcmF0aW9uYWxBY2NvdW50QWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbk9wZXJhdGlvbmFsQWNjb3VudEFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VycyB0byBhY2Nlc3MgdGhlIEFjY291bnQgQWN0aXZpdHkgcGFnZS4gKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudEFjdGl2aXR5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRBY3Rpdml0eUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBBY2NvdW50IE1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU0FjY291bnRNYW5hZ2VtZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBY2NvdW50TWFuYWdlbWVudEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBBY2NvdW50IE1hbmFnZW1lbnQgKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudE1hbmFnZW1lbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBY2NvdW50TWFuYWdlbWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gbWFuYWdlIGFuIGFjY291bnQgZm9yIEFXUyBhcHBsaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFXU0FjY291bnRTZXR0aW5nc01hbmFnZW1lbnRSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRTZXR0aW5nc01hbmFnZW1lbnRSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHVzZXJzIHRvIGFjY2VzcyB0aGUgQWNjb3VudCBVc2FnZSBSZXBvcnQgcGFnZS4gKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudFVzYWdlUmVwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRVc2FnZVJlcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgdGhlIERpc2NvdmVyeSBBZ2VudGxlc3MgQ29ubmVjdG9yIHRvIHJlZ2lzdGVyIHdpdGggQVdTIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NBZ2VudGxlc3NEaXNjb3ZlcnlTZXJ2aWNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FnZW50bGVzc0Rpc2NvdmVyeVNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEFwcEZhYnJpYyBzZXJ2aWNlIGFuZCByZWFkIG9ubHkgYWNjZXNzIHRvIGRlcGVuZGVudCBzZXJ2aWNlcyBzdWNoIGFzIFMzLCBLaW5lc2lzLCBLTVMuICovXG4gICAgcHVibGljIEFXU0FwcEZhYnJpY0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwRmFicmljRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFXUyBBcHBGYWJyaWMgKi9cbiAgICBwdWJsaWMgQVdTQXBwRmFicmljUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwRmFicmljUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBcHBGYWJyaWMgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTQXBwRmFicmljU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwRmFicmljU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBcHBTdHJlYW0gYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdBcHBTdHJlYW1GbGVldFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQXBwU3RyZWFtRmxlZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBDYXNzYW5kcmEgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdDYXNzYW5kcmFUYWJsZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ2Fzc2FuZHJhVGFibGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBDb21wcmVoZW5kIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ29tcHJlaGVuZEVuZHBvaW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdDb21wcmVoZW5kRW5kcG9pbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBUElHYXRld2F5IGFuZCBDbG91ZFdhdGNoIGZvciBjdXN0b20gcmVzb3VyY2Ugc2NhbGluZyAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9TY2FsaW5nQ3VzdG9tUmVzb3VyY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvU2NhbGluZ0N1c3RvbVJlc291cmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRHluYW1vREIgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdEeW5hbW9EQlRhYmxlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdEeW5hbW9EQlRhYmxlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRUMyIFNwb3QgRmxlZXQgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFQzJTcG90RmxlZXRSZXF1ZXN0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFQzJTcG90RmxlZXRSZXF1ZXN0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRUMyIENvbnRhaW5lciBTZXJ2aWNlIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUNTU2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUNTU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEFtYXpvbiBFbGFzdGlDYWNoZSBhbmQgQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFbGFzdGlDYWNoZVJHUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFbGFzdGlDYWNoZVJHUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRWxhc3RpYyBNYXAgUmVkdWNlIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRU1SSW5zdGFuY2VHcm91cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRU1SSW5zdGFuY2VHcm91cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIE1hbmFnZWQgU3RyZWFtaW5nIGZvciBBcGFjaGUgS2Fma2EgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdLYWZrYUNsdXN0ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0thZmthQ2x1c3RlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIExhbWJkYSBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0xhbWJkYUNvbmN1cnJlbmN5UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdMYW1iZGFDb25jdXJyZW5jeVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEFtYXpvbiBOZXB0dW5lIGFuZCBBbWF6b24gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ05lcHR1bmVDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdOZXB0dW5lQ2x1c3RlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIFJEUyBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1JEU0NsdXN0ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1JEU0NsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBTYWdlTWFrZXIgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdTYWdlTWFrZXJFbmRwb2ludFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nU2FnZU1ha2VyRW5kcG9pbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBbWF6b24gV29ya1NwYWNlcyBhbmQgQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdXb3JrU3BhY2VzUG9vbFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nV29ya1NwYWNlc1Bvb2xQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIHRoZSBEaXNjb3ZlcnkgQWdlbnQgdG8gcmVnaXN0ZXIgd2l0aCBBV1MgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25EaXNjb3ZlcnlBZ2VudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSBBZ2VudGxlc3MgQ29sbGVjdG9ycyB0byBhdXRvIHVwZGF0ZSwgcmVnaXN0ZXIsIGFuZCBjb21tdW5pY2F0ZSB3aXRoIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRsZXNzQ29sbGVjdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRsZXNzQ29sbGVjdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdmlldyBhbmQgdGFnIENvbmZpZ3VyYXRpb24gSXRlbXMgbWFpbnRhaW5lZCBieSB0aGUgQVdTIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5U2VydmljZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25EaXNjb3ZlcnlTZXJ2aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgd2l0aCBBV1MgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgdG8gbWlncmF0ZSBleHRlcm5hbCBzZXJ2ZXJzIHRvIEFXUy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzIHdob3NlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIHdoZW4gaW5zdGFsbGluZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50SW5zdGFsbGF0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRJbnN0YWxsYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyBhbmQgdXNpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBtaWdyYXRlIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMgd2hvc2UgY3JlZGVudGlhbHMgeW91IHByb3ZpZGUgd2hlbiBpbnN0YWxsaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIG1pZ3JhdGUgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50UG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudFBvbGljeVYyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSBDb252ZXJzaW9uIFNlcnZlciwgd2hpY2ggYXJlIEVDMiBpbnN0YW5jZXMgbGF1bmNoZWQgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UsIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIE1HTiBzZXJ2aWNlLiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgTUdOIHRvIHRoZSBNR04gQ29udmVyc2lvbiBTZXJ2ZXJzLCB3aGljaCBhcmUgYXV0b21hdGljYWxseSBsYXVuY2hlZCBhbmQgdGVybWluYXRlZCBieSBNR04sIHdoZW4gbmVlZGVkLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gTUdOIENvbnZlcnNpb24gU2VydmVycyBhcmUgdXNlZCBieSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSB3aGVuIHVzZXJzIGNob29zZSB0byBsYXVuY2ggVGVzdCBvciBDdXRvdmVyIGluc3RhbmNlcyB1c2luZyB0aGUgTUdOIGNvbnNvbGUsIENMSSwgb3IgQVBJLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkNvbnZlcnNpb25TZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25Db252ZXJzaW9uU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgQW1hem9uIEVDMiBvcGVyYXRpb25zIHJlcXVpcmVkIHRvIHVzZSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBsYXVuY2ggdGhlIG1pZ3JhdGVkIHNlcnZlcnMgYXMgRUMyIGluc3RhbmNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkVDMkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkVDMkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbCBwdWJsaWMgQVBJcyBvZiBBV1MgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTiksIGFzIHdlbGwgYXMgcGVybWlzc2lvbnMgdG8gcmVhZCBLTVMga2V5IGluZm9ybWF0aW9uLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIHNlbmQgbWV0YS1kYXRhIGFib3V0IHRoZSBwcm9ncmVzcyBvZiBzZXJ2ZXJzIGJlaW5nIG1pZ3JhdGVkIHVzaW5nIE1HTiB0byBBV1MgTWlncmF0aW9uIEh1YiAoTUdIKS4gTUdOIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGF0dGFjaGVkLCBhbmQgYXNzdW1lcyB0aGlzIHJvbGUuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbk1HSEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbk1HSEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBOZXR3b3JrIE1pZ3JhdGlvbiBjdXN0b20gcmVzb3VyY2UgKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25OZXR3b3JrTWlncmF0aW9uQ3VzdG9tUmVzb3VyY2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25OZXR3b3JrTWlncmF0aW9uQ3VzdG9tUmVzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhdXRvbWF0ZSBWTXdhcmUgdG8gQVdTIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgbWlncmF0aW9uIHRocm91Z2ggQ2xvdWRGb3JtYXRpb24gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25OZXR3b3JrTWlncmF0aW9uTXVsdGlBY2NvdW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbk11bHRpQWNjb3VudCk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbCByZWFkLW9ubHkgcHVibGljIEFQSXMgb2YgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTiksIGFzIHdlbGwgYXMgc29tZSByZWFkLW9ubHkgQVBJcyBvZiBvdGhlciBBV1Mgc2VydmljZXMgdGhhdCBhcmUgcmVxdWlyZWQgaW4gb3JkZXIgdG8gbWFrZSBmdWxsIHJlYWQtb25seSB1c2Ugb2YgdGhlIE1HTiBjb25zb2xlLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgUmVwbGljYXRpb24gU2VydmVycywgd2hpY2ggYXJlIEVDMiBpbnN0YW5jZXMgbGF1bmNoZWQgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgLSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBNR04gc2VydmljZSwgYW5kIHRvIGNyZWF0ZSBFQlMgc25hcHNob3RzIGluIHlvdXIgQVdTIGFjY291bnQuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSBieSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSB0byB0aGUgTUdOIFJlcGxpY2F0aW9uIFNlcnZlcnMgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgbGF1bmNoZWQgYW5kIHRlcm1pbmF0ZWQgYnkgTUdOLCBhcyBuZWVkZWQuIE1HTiBSZXBsaWNhdGlvbiBTZXJ2ZXJzIGFyZSB1c2VkIHRvIGZhY2lsaXRhdGUgZGF0YSByZXBsaWNhdGlvbiBmcm9tIHlvdXIgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MsIGFzIHBhcnQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIG1hbmFnZWQgdXNpbmcgTUdOLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25SZXBsaWNhdGlvblNlcnZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblJlcGxpY2F0aW9uU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgYW5kIHVzaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgYnkgQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChBV1MgTUdOKSB0byBtaWdyYXRlIHNvdXJjZSBzZXJ2ZXJzIHRoYXQgcnVuIG9uIEVDMiAoY3Jvc3MtUmVnaW9uIG9yIGNyb3NzLUFaKS4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBzaG91bGQgYmUgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSB0byB0aGUgRUMyIEluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25TZXJ2aWNlRWMySW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25TZXJ2aWNlRWMySW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIGFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gU1NNIG9wZXJhdGlvbnMgcmVxdWlyZWQgdG8gdXNlIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIGV4ZWN1dGUgY3VzdG9tIHBvc3QgbWlncmF0aW9uIGNvbW1hbmQgU1NNIGRvY3VtZW50cy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblNTTUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblNTTUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIGFuZCB1c2luZyB0aGUgQVdTIFZDZW50ZXIgQ2xpZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIG1pZ3JhdGUgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcyB3aG9zZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZSB3aGVuIGluc3RhbGxpbmcgdGhlIEFXUyBWQ2VudGVyIENsaWVudC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25WQ2VudGVyQ2xpZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uVkNlbnRlckNsaWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFwcCBNZXNoIEVudm95IHBvbGljeSBmb3IgYWNjZXNzaW5nIFZpcnR1YWwgTm9kZSBjb25maWd1cmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoRW52b3lBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaEVudm95QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBBcHAgTWVzaCBBUElzIGFuZCBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0FwcE1lc2hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQXBwIE1lc2ggUHJldmlldyBFbnZveSBwb2xpY3kgZm9yIGFjY2Vzc2luZyBWaXJ0dWFsIE5vZGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaFByZXZpZXdFbnZveUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoUHJldmlld0Vudm95QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBBcHAgTWVzaCAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hQcmV2aWV3U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgQXBwIE1lc2ggQVBJcyBhbmQgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaFJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBBcHBNZXNoICovXG4gICAgcHVibGljIEFXU0FwcE1lc2hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYWxsIEFwcCBSdW5uZXIgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwUnVubmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBSdW5uZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIHZpZXcgZGV0YWlscyBhYm91dCBBcHAgUnVubmVyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwUnVubmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwUnVubmVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgQXBwIFJ1bm5lciBzZXJ2aWNlIHBvbGljeSB0aGF0IGdyYW50cyByZWFkIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBFQ1IgcmVzb3VyY2VzIGluIHRoZSBjdXN0b21lcidzIGFjY291bnQuIFVzZSBpdCBpbiBhIHJvbGUgdGhhdCBpcyBwYXNzZWQgdG8gQXBwIFJ1bm5lciB3aGVuIGNyZWF0aW5nIG9yIHVwZGF0aW5nIGFuIEFwcCBSdW5uZXIgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwUnVubmVyU2VydmljZVBvbGljeUZvckVDUkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBSdW5uZXJTZXJ2aWNlUG9saWN5Rm9yRUNSQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIHRoZSBBcHBTeW5jIHNlcnZpY2UsIHRob3VnaCBub3QgZW5vdWdoIHRvIGFjY2VzcyB2aWEgdGhlIGNvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0FwcFN5bmNBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFN5bmNBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBpbnZva2luZyBhY2Nlc3MgdG8gdGhlIEFwcFN5bmMgc2VydmljZSAtIGJvdGggdGhyb3VnaCB0aGUgY29uc29sZSBhbmQgaW5kZXBlbmRlbnRseSAqL1xuICAgIHB1YmxpYyBBV1NBcHBTeW5jSW52b2tlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jSW52b2tlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBcHBTeW5jIHRvIHB1c2ggbG9ncyB0byB1c2VyJ3MgQ2xvdWRXYXRjaCBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NBcHBTeW5jUHVzaFRvQ2xvdWRXYXRjaExvZ3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwU3luY1B1c2hUb0Nsb3VkV2F0Y2hMb2dzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSwgdXBkYXRlLCBhbmQgcXVlcnkgdGhlIHNjaGVtYS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY1NjaGVtYUF1dGhvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jU2NoZW1hQXV0aG9yKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFwcFN5bmMgKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXJ0aWZhY3QgcmVhZC1vbmx5IGFjY2VzcyB0byBvcGVyYXRpb25zIGluIEFXUyBPcmdhbml6YXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NBcnRpZmFjdEFjY291bnRTeW5jKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FydGlmYWN0QWNjb3VudFN5bmMpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgZnVsbCBwZXJtaXNzaW9ucyB0byBsaXN0LCBkb3dubG9hZCwgYWNjZXB0LCBhbmQgdGVybWluYXRlIEFXUyBBcnRpZmFjdCBhZ3JlZW1lbnRzLiBJdCBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIGVuYWJsZSBBV1Mgc2VydmljZSBhY2Nlc3MgaW4gdGhlIE9yZ2FuaXphdGlvbiBzZXJ2aWNlLCBhcyB3ZWxsIGFzIGRlc2NyaWJlIHRoZSBvcmdhbml6YXRpb24gZGV0YWlscy4gQWRkaXRpb25hbGx5LCB0aGUgcG9saWN5IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrIGlmIHRoZSByZXF1aXJlZCBzZXJ2aWNlLWxpbmtlZCByb2xlIGV4aXN0cyBhbmQgY3JlYXRlcyBvbmUgaWYgaXQgZG9lc24ndCAqL1xuICAgIHB1YmxpYyBBV1NBcnRpZmFjdEFncmVlbWVudHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FydGlmYWN0QWdyZWVtZW50c0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IGFjY2VzcyB0byBsaXN0IHRoZSBBV1MgQXJ0aWZhY3Qgc2VydmljZSBhZ3JlZW1lbnRzIGFuZCB0byBkb3dubG9hZCB0aGUgYWNjZXB0ZWQgYWdyZWVtZW50cy4uIEl0IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbGlzdCBhcyB3ZWxsIGFzIGRlc2NyaWJlIHRoZSBvcmdhbml6YXRpb24gZGV0YWlscy4gQWRkaXRpb25hbGx5LCB0aGUgcG9saWN5IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrIGlmIHRoZSByZXF1aXJlZCBzZXJ2aWNlLWxpbmtlZCByb2xlIGV4aXN0cy4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RBZ3JlZW1lbnRzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXJ0aWZhY3RBZ3JlZW1lbnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgQXJ0aWZhY3Qgc2VydmljZSByZXBvcnRzLiAqL1xuICAgIHB1YmxpYyBBV1NBcnRpZmFjdFJlcG9ydHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdFJlcG9ydHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXJ0aWZhY3QgdG8gZ2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IGFuIG9yZ2FuaXphdGlvbiB2aWEgQVdTIE9yZ2FuaXphdGlvbnMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGVuYWJsZSBvciBkaXNhYmxlIEFXUyBBdWRpdCBNYW5hZ2VyLCB1cGRhdGUgc2V0dGluZ3MsIGFuZCBtYW5hZ2UgYXNzZXNzbWVudHMsIGNvbnRyb2xzLCBhbmQgZnJhbWV3b3JrcyAqL1xuICAgIHB1YmxpYyBBV1NBdWRpdE1hbmFnZXJBZG1pbmlzdHJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0F1ZGl0TWFuYWdlckFkbWluaXN0cmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIEF1ZGl0IE1hbmFnZXIgKi9cbiAgICBwdWJsaWMgQVdTQXVkaXRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXVkaXRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQVdTIEF1dG8gU2NhbGluZyB0byBwZXJpb2RpY2FsbHkgZm9yZWNhc3QgY2FwYWNpdHkgYW5kIGdlbmVyYXRlIHNjaGVkdWxlZCBzY2FsaW5nIGFjdGlvbnMgZm9yIEF1dG8gU2NhbGluZyBncm91cHMgaW4gYSBzY2FsaW5nIHBsYW4gKi9cbiAgICBwdWJsaWMgQVdTQXV0b1NjYWxpbmdQbGFuc0VDMkF1dG9TY2FsaW5nUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0F1dG9TY2FsaW5nUGxhbnNFQzJBdXRvU2NhbGluZ1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgdG8gY3JlYXRlIGNvbnRyb2xzIGFuZCBmcmFtZXdvcmtzIHRoYXQgZGVmaW5lIHRoZWlyIGV4cGVjdGF0aW9ucyBmb3IgQVdTIEJhY2t1cCByZXNvdXJjZXMgYW5kIGFjdGl2aXRpZXMsIGFuZCB0byBhdWRpdCBBV1MgQmFja3VwIHJlc291cmNlcyBhbmQgYWN0aXZpdGllcyBhZ2FpbnN0IHRoZWlyIGRlZmluZWQgY29udHJvbHMgYW5kIGZyYW1ld29ya3MuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgQ29uZmlnIGFuZCBzaW1pbGFyIHNlcnZpY2VzIHRvIGRlc2NyaWJlIHVzZXIgZXhwZWN0YXRpb25zIHBlcmZvcm0gdGhlIGF1ZGl0cy4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgdG8gZGVsaXZlciBhdWRpdCByZXBvcnRzIHRvIFMzIGFuZCBzaW1pbGFyIHNlcnZpY2VzLCBhbmQgZW5hYmxlcyB1c2VycyB0byBmaW5kIGFuZCBvcGVuIHRoZWlyIGF1ZGl0IHJlcG9ydHMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cEF1ZGl0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cEF1ZGl0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBBV1MgQmFja2ludCBhZ2VudCB0byBjb21wbGV0ZSBiYWNrdXAgZGF0YSB0cmFuc2ZlciB3aXRoIEFXUyBCYWNrdXAgU3RvcmFnZSBwbGFuZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHJvbGVzIGFzc3VtZWQgYnkgRUMyIEluc3RhbmNlcyBydW5uaW5nIFNBUCBIQU5BIHdpdGggdGhlIEJhY2tpbnQgYWdlbnQuICovXG4gICAgcHVibGljIEFXU0JhY2t1cERhdGFUcmFuc2ZlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBEYXRhVHJhbnNmZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBmb3IgYmFja3VwIGFkbWluaXN0cmF0b3JzLCBncmFudGluZyBmdWxsIGFjY2VzcyB0byBBV1MgQmFja3VwIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBjcmVhdGluZyBvciBlZGl0aW5nIGJhY2t1cCBwbGFucywgYXNzaWduaW5nIEFXUyByZXNvdXJjZXMgdG8gYmFja3VwIHBsYW5zLCBkZWxldGluZyBiYWNrdXBzLCBhbmQgcmVzdG9yaW5nIGJhY2t1cHMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXBHYXRld2F5IHBlcm1pc3Npb24gdG8gc3luYyB0aGUgbWV0YWRhdGEgb2YgVmlydHVhbCBNYWNoaW5lcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBHYXRld2F5U2VydmljZVJvbGVQb2xpY3lGb3JWaXJ0dWFsTWFjaGluZU1ldGFkYXRhU3luYygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBHYXRld2F5U2VydmljZVJvbGVQb2xpY3lGb3JWaXJ0dWFsTWFjaGluZU1ldGFkYXRhU3luYyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEd1YXJkRHV0eSBwZXJtaXNzaW9uIHRvIHJlYWQgeW91ciBBV1MgQmFja3VwIFJlY292ZXJ5IFBvaW50cyBmb3IgbWFsd2FyZSBzY2FucyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBHdWFyZER1dHlSb2xlUG9saWN5Rm9yU2NhbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwR3VhcmREdXR5Um9sZVBvbGljeUZvclNjYW5zKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHVzZXJzIHBlcm1pc3Npb25zIHRvIGFzc2lnbiBBV1MgcmVzb3VyY2VzIHRvIGJhY2t1cCBwbGFucywgY3JlYXRlIG9uLWRlbWFuZCBiYWNrdXBzLCBhbmQgcmVzdG9yZSBiYWNrdXBzLiBUaGlzIHBvbGljeSBkb2VzIG5vdCBhbGxvdyB0aGUgdXNlciB0byBjcmVhdGUgb3IgZWRpdCBiYWNrdXAgcGxhbnMgb3IgdG8gZGVsZXRlIHNjaGVkdWxlZCBiYWNrdXBzIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQuICovXG4gICAgcHVibGljIEFXU0JhY2t1cE9wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cE9wZXJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgZm9yIGJhY2t1cCBhZG1pbmlzdGF0b3JzIHdobyB1c2UgY3Jvc3MtYWNjb3VudCBiYWNrdXAgbWFuYWdlbWVudCB0byBtYW5hZ2UgYmFja3VwcyBmb3IgdGhlIG9yZ2FuaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwT3JnYW5pemF0aW9uQWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwT3JnYW5pemF0aW9uQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gcmVzdG9yZSBhIGJhY2t1cCBvZiBTQVAgSEFOQSBvbiBBbWF6b24gRUMyICovXG4gICAgcHVibGljIEFXU0JhY2t1cFJlc3RvcmVBY2Nlc3NGb3JTQVBIQU5BKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFJlc3RvcmVBY2Nlc3NGb3JTQVBIQU5BKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHNlYXJjaCBvcGVyYXRvciByb2xlIGhhcyBhY2Nlc3MgdG8gY3JlYXRlIGJhY2t1cCBpbmRleGVzLCBjcmVhdGUgc2VhcmNoZXMgb2YgYmFja3VwIG1ldGFkYXRhIHRoYXQgaGFzIGJlZW4gaW5kZXhlZC4gVGhpcyBwb2xpY3kgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3IgdGhlc2Ugc2VhcmNoIG9wZXJhdG9yIGZ1bmN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VhcmNoT3BlcmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VhcmNoT3BlcmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gY3JlYXRlIGJhY2t1cHMgb24geW91ciBiZWhhbGYgYWNyb3NzIEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeUZvckJhY2t1cCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeUZvckJhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbiB0byBjcmVhdGUgYmFja3VwcyBvbiB5b3VyIGJlaGFsZiBhY3Jvc3MgQVdTIHNlcnZpY2VzICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5Rm9yQmFja3VwVGVzdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeUZvckJhY2t1cFRlc3QpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gY3JlYXRlIGJhY2t1cHMgb24geW91ciBiZWhhbGYgYWNyb3NzIEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgQVdTIEJhY2t1cCB0byBpbmRleCByZWNvdmVyeSBwb2ludHMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9ySW5kZXhpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JJbmRleGluZyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgQVdTIEJhY2t1cCB0byByZXN0b3JlIGluZGl2aWR1YWwgaXRlbXMgaW4gYSByZWNvdmVyeSBwb2ludCAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckl0ZW1SZXN0b3JlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckl0ZW1SZXN0b3Jlcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbiB0byBwZXJmb3JtIHJlc3RvcmVzIG9uIHlvdXIgYmVoYWxmIGFjcm9zcyBBV1Mgc2VydmljZXMuIFRoaXMgcG9saWN5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgZGVsZXRlIEFXUyByZXNvdXJjZXMsIHN1Y2ggYXMgRUJTIHZvbHVtZXMsIFJEUyBpbnN0YW5jZXMsIGFuZCBFRlMgZmlsZSBzeXN0ZW1zLCB3aGljaCBhcmUgcGFydCBvZiB0aGUgcmVzdG9yZSBwcm9jZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclJlc3RvcmVzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUmVzdG9yZXMpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgY29udGFpbmluZyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIEFXUyBCYWNrdXAgdG8gYmFja3VwIGRhdGEgaW4gYW55IFMzIGJ1Y2tldC4gVGhpcyBpbmNsdWRlcyByZWFkIGFjY2VzcyB0byBhbGwgUzMgb2JqZWN0cyBhbmQgYW55IGRlY3J5cHQgYWNjZXNzIGZvciBhbGwgS01TIGtleXMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNCYWNrdXAoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JTM0JhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgQVdTIEJhY2t1cCB0byByZXN0b3JlIGEgUzMgYmFja3VwIHRvIGEgYnVja2V0LiBUaGlzIGluY2x1ZGVzIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMgdG8gYWxsIFMzIGJ1Y2tldHMsIGFuZCBwZXJtaXNzaW9ucyB0byBHZW5lcmF0ZURhdGFLZXkgYW5kIERlc2NyaWJlS2V5IGZvciBhbGwgS01TIGtleXMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNSZXN0b3JlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNSZXN0b3JlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gbWFsd2FyZSBzY2FucyBvbiB5b3VyIEFXUyBCYWNrdXAgUmVjb3ZlcnkgUG9pbnRzICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yU2NhbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JTY2Fucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIGZvciBBV1MgQmF0Y2ggcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NCYXRjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmF0Y2hGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBDbG91ZFdhdGNoIEV2ZW50IFRhcmdldCBmb3IgQVdTIEJhdGNoIEpvYiBTdWJtaXNzaW9uICovXG4gICAgcHVibGljIEFXU0JhdGNoU2VydmljZUV2ZW50VGFyZ2V0Um9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYXRjaFNlcnZpY2VFdmVudFRhcmdldFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBCYXRjaCBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBFQzIsIEF1dG9zY2FsaW5nLCBFQzIgQ29udGFpbmVyIHNlcnZpY2UgYW5kIENsb3Vkd2F0Y2ggTG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTQmF0Y2hTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYXRjaFNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciBBV1MgQmF0Y2ggdG8gcXVldWUgYW5kIG1hbmFnZSBBbWF6b24gU2FnZU1ha2VyIHdvcmtsb2FkcyAqL1xuICAgIHB1YmxpYyBBV1NCYXRjaFNlcnZpY2VSb2xlUG9saWN5Rm9yU2FnZU1ha2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhdGNoU2VydmljZVJvbGVQb2xpY3lGb3JTYWdlTWFrZXIpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UgbGlua2VkIHJvbGUgdG8gcHJvdmlkZSBCaWxsaW5nIGFuZCBDb3N0IE1hbmFnZW1lbnQgRGF0YSBFeHBvcnRzIGFjY2VzcyB0byBBV1Mgc2VydmljZSBkYXRhIGZvciBleHBvcnRpbmcgdGhlIGRhdGEgdG8gYSB0YXJnZXQgbG9jYXRpb24sIHN1Y2ggYXMgQW1hem9uIFMzLCBvbiBiZWhhbGYgb2YgYSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVdTQkNNRGF0YUV4cG9ydHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCQ01EYXRhRXhwb3J0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEJlZHJvY2sgQWdlbnRDb3JlIEdhdGV3YXkgdG8gbWFuYWdlZCBWUEMgTGF0dGljZSByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTQmVkcm9ja0FnZW50Q29yZUdhdGV3YXlOZXR3b3JrU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmVkcm9ja0FnZW50Q29yZUdhdGV3YXlOZXR3b3JrU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBVc2UgdGhlIEFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzIG1hbmFnZWQgcG9saWN5IHRvIGFsbG93IGNvbXBsZXRlIGFjY2VzcyB0byBBV1MgQmlsbGluZyBDb25kdWN0b3IgKEFCQykgY29uc29sZSBhbmQgQVBJcy4gVGhpcyBwb2xpY3kgYWxsb3dzIHVzZXJzIHRvIGxpc3QsIGNyZWF0ZSBhbmQgZGVsZXRlIEFCQyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVXNlIHRoZSBBV1NCaWxsaW5nQ29uZHVjdG9yUmVhZE9ubHlBY2Nlc3MgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQmlsbGluZyBDb25kdWN0b3IgKEFCQykgY29uc29sZSBhbmQgQVBJcy4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBhbmQgbGlzdCBhbGwgQUJDIHJlc291cmNlcy4gSXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgYWJpbGl0eSB0byBjcmVhdGUgb3IgZGVsZXRlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQmlsbGluZ0NvbmR1Y3RvclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JpbGxpbmdDb25kdWN0b3JSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VycyB0byB2aWV3IGJpbGxzIG9uIHRoZSBCaWxsaW5nIENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCaWxsaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYmlsbGluZyBzZXJ2aWNlIHRvIHZhbGlkYXRlIGFjY2VzcyB0byBiaWxsaW5nIHZpZXcgZGF0YSBmb3IgZGVyaXZlZCBiaWxsaW5nIHZpZXdzICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCaWxsaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBwZXJtaXNzaW9ucyB0byBjb250cm9sIEFXUyByZXNvdXJjZXMuIEZvciBleGFtcGxlLCB0byBzdGFydCBhbmQgc3RvcCBFQzIgb3IgUkRTIGluc3RhbmNlcyBieSBleGVjdXRpbmcgQVdTIFN5c3RlbXMgTWFuYWdlciAoU1NNKSBzY3JpcHRzLiAqL1xuICAgIHB1YmxpYyBBV1NCdWRnZXRzQWN0aW9uc1JvbGVQb2xpY3lGb3JSZXNvdXJjZUFkbWluaXN0cmF0aW9uV2l0aFNTTSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWRnZXRzQWN0aW9uc1JvbGVQb2xpY3lGb3JSZXNvdXJjZUFkbWluaXN0cmF0aW9uV2l0aFNTTSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBCdWRnZXRzIEFjdGlvbnMgaW5jbHVkaW5nIHVzaW5nIEJ1ZGdldHMgQWN0aW9ucyB0byBjb250cm9sIHN0YXRlcyBvZiBydW5uaW5nIEFXUyByZXNvdXJjZXMgdmlhIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTQnVkZ2V0c0FjdGlvbnNXaXRoQVdTUmVzb3VyY2VDb250cm9sQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1ZGdldHNBY3Rpb25zV2l0aEFXU1Jlc291cmNlQ29udHJvbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEJ1ZGdldHMgQ29uc29sZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0J1ZGdldHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWRnZXRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIElBTSBwb2xpY3kgZ3JhbnRzIHVzZXJzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgQnVnQnVzdCBjb25zb2xlICovXG4gICAgcHVibGljIEFXU0J1Z0J1c3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1Z0J1c3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBJQU0gcG9saWN5IGdyYW50cyB1c2VycyBhY2Nlc3MgdG8gcGFydGljaXBhdGUgaW4gQVdTIEJ1Z0J1c3QgZXZlbnRzICovXG4gICAgcHVibGljIEFXU0J1Z0J1c3RQbGF5ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQnVnQnVzdFBsYXllckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgQnVnQnVzdCB0byBhY2Nlc3MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0J1Z0J1c3RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWdCdXN0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciAoQUNNKSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhdWRpdG9yIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FBdWRpdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQUF1ZGl0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwcml2aWxlZ2VkIGNlcnRpZmljYXRlIHVzZXIgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQVByaXZpbGVnZWRVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQVByaXZpbGVnZWRVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNlcnRpZmljYXRlIHVzZXIgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQVVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgKEFDTSkuICovXG4gICAgcHVibGljIEFXU0NlcnRpZmljYXRlTWFuYWdlclJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIFNlcnZpY2UgTGlua2VkIFJvbGUgdXNlZCBieSBBV1MgQ2hhdGJvdC4gKi9cbiAgICBwdWJsaWMgQVdTQ2hhdGJvdFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NoYXRib3RTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byBBV1MgQ2xlYW4gUm9vbXMgcmVzb3VyY2VzIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgU2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDbGVhbiBSb29tcyByZXNvdXJjZXMgZXhjZXB0IGZvciBxdWVyeWluZyBpbiBhIGNvbGxhYm9yYXRpb24gYW5kIGFjY2VzcyB0byByZWxhdGVkIEFXUyBTZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xlYW5Sb29tc0Z1bGxBY2Nlc3NOb1F1ZXJ5aW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNGdWxsQWNjZXNzTm9RdWVyeWluZyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byBBV1MgQ2xlYW4gUm9vbXMgTUwgcmVzb3VyY2VzIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgU2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNNTEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xlYW5Sb29tc01MRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBDbGVhbiBSb29tcyBNTCByZXNvdXJjZXMgYW5kIHJlYWQtb25seSBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgQ2xlYW4gUm9vbXMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNNTFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNNTFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIENsZWFuIFJvb21zIHJlc291cmNlcyBhbmQgcmVhZC1vbmx5IGFjY2VzcyB0byByZWxhdGVkIEFXUyBHbHVlIGFuZCBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xlYW5Sb29tc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEFXUyBDbGVhbiBSb29tcyB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQ2xvdWRXYXRjaCBBUElzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xlYW5Sb29tc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRvciBhY2Nlc3MgdG8gQVdTIENsb3VkOS4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWQ5QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZDlBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gYmUgaW52aXRlZCBpbnRvIEFXUyBDbG91ZDkgc2hhcmVkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWQ5RW52aXJvbm1lbnRNZW1iZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5RW52aXJvbm1lbnRNZW1iZXIpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIENsb3VkOSAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZDlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZDlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHdpbGwgYmUgdXNlZCB0byBhdHRhY2ggYSByb2xlIG9uIGEgSW5zdGFuY2VQcm9maWxlIHdoaWNoIHdpbGwgYWxsb3cgQ2xvdWQ5IHRvIHVzZSB0aGUgU1NNIFNlc3Npb24gTWFuYWdlciB0byBjb25uZWN0IHRvIHRoZSBpbnN0YW5jZSAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZDlTU01JbnN0YW5jZVByb2ZpbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5U1NNSW5zdGFuY2VQcm9maWxlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgQVdTIENsb3VkOSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgYW5kIHRvIG1hbmFnZSBvd25lZCBlbnZpcm9ubWVudHMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkOVVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5VXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRGb3JtYXRpb25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkRm9ybWF0aW9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgQ2xvdWRGb3JtYXRpb24gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEZvcm1hdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkRm9ybWF0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQ2xvdWRGcm9udCBMb2dnZXIgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEZyb250TG9nZ2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkRnJvbnRMb2dnZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRGcm9udCB0byBtYW5hZ2UgRUMyIEVsYXN0aWMgTmV0d29yayBJbnRlcmZhY2VzIGFuZCBTZWN1cml0eSBHcm91cHMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0Nsb3VkRnJvbnRWUENPcmlnaW5TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEZyb250VlBDT3JpZ2luU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQ2xvdWRIU00gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEhTTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRIU01GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgQ2xvdWRIU00gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEhTTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkSFNNUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFXUyBDbG91ZEhTTSBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFXU0Nsb3VkSFNNUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEhTTVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIENsb3VkIE1hcCBkaXNjb3ZlcnkgQVBJLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZE1hcERpc2NvdmVySW5zdGFuY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRNYXBEaXNjb3Zlckluc3RhbmNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBDbG91ZCBNYXAgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRNYXBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkTWFwRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gYWxsIEFXUyBDbG91ZCBNYXAgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRNYXBSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZE1hcFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVnaXN0cmFudCBsZXZlbCBhY2Nlc3MgdG8gQVdTIENsb3VkIE1hcCBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZE1hcFJlZ2lzdGVySW5zdGFuY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRNYXBSZWdpc3Rlckluc3RhbmNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzaW5nIEFXUyBDbG91ZFNoZWxsIHdpdGggYWxsIGZlYXR1cmVzICovXG4gICAgcHVibGljIEFXU0Nsb3VkU2hlbGxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkU2hlbGxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENsb3VkVHJhaWwuICovXG4gICAgcHVibGljIEFXU0Nsb3VkVHJhaWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkVHJhaWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ2xvdWRUcmFpbC4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRUcmFpbFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkVHJhaWxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIHVzZWQgYnkgdGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgbmFtZWQgQVdTU2VydmljZVJvbGVGb3JDbG91ZFdhdGNoQWxhcm1zX0FjdGlvblNTTUluY2lkZW50cy4gQ2xvdWRXYXRjaCB1c2VzIHRoaXMgc2VydmljZS1saW5rZWQgcm9sZSB0byBwZXJmb3JtIEFXUyBTeXN0ZW0gTWFuYWdlciBJbmNpZGVudCBNYW5hZ2VyIGFjdGlvbnMgd2hlbiBhIENsb3VkV2F0Y2ggYWxhcm0gZ29lcyBpbiB0byBBTEFSTSBzdGF0ZS4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgaW5jaWRlbnRzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZFdhdGNoQWxhcm1zQWN0aW9uU1NNSW5jaWRlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRXYXRjaEFsYXJtc0FjdGlvblNTTUluY2lkZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvZGVBcnRpZmFjdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVBcnRpZmFjdEFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVBcnRpZmFjdEFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ29kZUFydGlmYWN0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUFydGlmYWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUFydGlmYWN0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29kZUJ1aWxkIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gQWxzbyBhdHRhY2ggQW1hem9uUzNSZWFkT25seUFjY2VzcyB0byBwcm92aWRlIGFjY2VzcyB0byBkb3dubG9hZCBidWlsZCBhcnRpZmFjdHMsIGFuZCBhdHRhY2ggSUFNRnVsbEFjY2VzcyB0byBjcmVhdGUgYW5kIG1hbmFnZSB0aGUgc2VydmljZSByb2xlIGZvciBDb2RlQnVpbGQuICovXG4gICAgcHVibGljIEFXU0NvZGVCdWlsZEFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVCdWlsZEFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBDb2RlQnVpbGQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBidXQgZG9lcyBub3QgYWxsb3cgQ29kZUJ1aWxkIHByb2plY3QgYWRtaW5pc3RyYXRpb24uIEFsc28gYXR0YWNoIEFtYXpvblMzUmVhZE9ubHlBY2Nlc3MgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gZG93bmxvYWQgYnVpbGQgYXJ0aWZhY3RzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQnVpbGREZXZlbG9wZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUJ1aWxkRGV2ZWxvcGVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ29kZUJ1aWxkIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gQWxzbyBhdHRhY2ggQW1hem9uUzNSZWFkT25seUFjY2VzcyB0byBwcm92aWRlIGFjY2VzcyB0byBkb3dubG9hZCBidWlsZCBhcnRpZmFjdHMuICovXG4gICAgcHVibGljIEFXU0NvZGVCdWlsZFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVCdWlsZFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvZGVDb21taXQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQ29tbWl0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQ29tbWl0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlQ29tbWl0IHJlcG9zaXRvcmllcywgYnV0IGRvZXMgbm90IGFsbG93IHJlcG9zaXRvcnkgZGVsZXRpb24uICovXG4gICAgcHVibGljIEFXU0NvZGVDb21taXRQb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUNvbW1pdFBvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENvZGVDb21taXQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQ29tbWl0UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUNvbW1pdFJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHJlZ2lzdGVyIGFuZCBkZXBsb3kgYSByZXZpc2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveURlcGxveWVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lEZXBsb3llckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIENvZGVEZXBsb3kgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQ29kZURlcGxveSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2UgYWNjZXNzIHRvIGV4cGFuZCB0YWdzIGFuZCBpbnRlcmFjdCB3aXRoIEF1dG8gU2NhbGluZyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2UgYWNjZXNzIHRvIGludm9rZSBMYW1iZGEgZnVuY3Rpb24gb24geW91ciBiZWhhbGYgdG8gcGVyZm9ybSBibHVlL2dyZWVuIGRlcGxveW1lbnQgdGhyb3VnaCBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGVGb3JDbG91ZEZvcm1hdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZUZvckNsb3VkRm9ybWF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIHdpZGUgYWNjZXNzIHRvIHBlcmZvcm0gYW4gRUNTIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBvbiB5b3VyIGJlaGFsZi4gR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHN1cHBvcnQgc2VydmljZXMsIHN1Y2ggYXMgIGZ1bGwgYWNjZXNzIHRvIHJlYWQgYWxsIFMzIG9iamVjdHMsIGludm9rZSBhbGwgTGFtYmRhIGZ1bmN0aW9ucywgcHVibGlzaCB0byBhbGwgU05TIHRvcGljcyB3aXRoaW4gdGhlIGFjY291bnQgYW5kIHVwZGF0ZSBhbGwgRUNTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95Um9sZUZvckVDUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZUZvckVDUyk7XG4gICAgfVxuXG4gICAgLyoqICBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2UgbGltaXRlZCBhY2Nlc3MgdG8gcGVyZm9ybSBhbiBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95Um9sZUZvckVDU0xpbWl0ZWQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGVGb3JFQ1NMaW1pdGVkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGFjY2VzcyB0byBwZXJmb3JtIGEgTGFtYmRhIGRlcGxveW1lbnQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSb2xlRm9yTGFtYmRhKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlRm9yTGFtYmRhKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGxpbWl0ZWQgYWNjZXNzIHRvIHBlcmZvcm0gYSBMYW1iZGEgZGVwbG95bWVudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGVGb3JMYW1iZGFMaW1pdGVkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlRm9yTGFtYmRhTGltaXRlZCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlUGlwZWxpbmUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlUGlwZWxpbmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVQaXBlbGluZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDb2RlUGlwZWxpbmUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlUGlwZWxpbmVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlUGlwZWxpbmVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB2aWV3IGFuZCBhcHByb3ZlIG1hbnVhbCBjaGFuZ2VzIGZvciBhbGwgcGlwZWxpbmVzICovXG4gICAgcHVibGljIEFXU0NvZGVQaXBlbGluZUFwcHJvdmVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVQaXBlbGluZUFwcHJvdmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciBjdXN0b20gYWN0aW9ucyB0byBwb2xsIGZvciBqb2JzIGRldGFpbHMgKGluY2x1ZGluZyB0ZW1wb3JhcnkgY3JlZGVudGlhbHMpIGFuZCByZXBvcnQgc3RhdHVzIHVwZGF0ZXMgdG8gQVdTIENvZGVQaXBlbGluZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZVBpcGVsaW5lQ3VzdG9tQWN0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVQaXBlbGluZUN1c3RvbUFjdGlvbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlU3RhciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVTdGFyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlU3RhckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIENvZGVTdGFyIE5vdGlmaWNhdGlvbnMgdG8gYWNjZXNzIEFtYXpvbiBDbG91ZFdhdGNoIEV2ZW50cyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlU3Rhck5vdGlmaWNhdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlU3Rhck5vdGlmaWNhdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERPIE5PVCBVU0UgLSAgQVdTIENvZGVTdGFyIFNlcnZpY2UgUm9sZSBQb2xpY3kgd2hpY2ggZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIENvZGVTdGFyIHRvIG1hbmFnZSBJQU0gYW5kIG90aGVyIHNlcnZpY2UgcmVzb3VyY2VzIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIuICovXG4gICAgcHVibGljIEFXU0NvZGVTdGFyU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVN0YXJTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIERlbmllcyBhY2Nlc3MgdG8gY2VydGFpbiBhY3Rpb25zLCBhcHBsaWVkIGJ5IHRoZSBBV1MgdGVhbSBpbiB0aGUgZXZlbnQgdGhhdCBhbiBJQU0gdXNlcidzIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBjb21wcm9taXNlZCBvciBleHBvc2VkIHB1YmxpY2x5LiAgRG8gTk9UIHJlbW92ZSB0aGlzIHBvbGljeS4gIEluc3RlYWQsIHBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIGVtYWlsIHNlbnQgdG8geW91IHJlZ2FyZGluZyB0aGlzIGV2ZW50LiAqL1xuICAgIHB1YmxpYyBBV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29tcHJvbWlzZWRLZXlRdWFyYW50aW5lKTtcbiAgICB9XG5cbiAgICAvKiogRGVuaWVzIGFjY2VzcyB0byBjZXJ0YWluIGFjdGlvbnMsIGFwcGxpZWQgYnkgdGhlIEFXUyB0ZWFtIGluIHRoZSBldmVudCB0aGF0IGFuIElBTSB1c2VyJ3MgY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNvbXByb21pc2VkIG9yIGV4cG9zZWQgcHVibGljbHkuIERvIE5PVCByZW1vdmUgdGhpcyBwb2xpY3kuIEluc3RlYWQsIHBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIHN1cHBvcnQgY2FzZSBjcmVhdGVkIGZvciB5b3UgcmVnYXJkaW5nIHRoaXMgZXZlbnQuICovXG4gICAgcHVibGljIEFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYyKTtcbiAgICB9XG5cbiAgICAvKiogRGVuaWVzIGFjY2VzcyB0byBjZXJ0YWluIGFjdGlvbnMsIGFwcGxpZWQgYnkgQVdTIGluIHRoZSBldmVudCB0aGF0IGFuIElBTSB1c2VyJ3MgY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNvbXByb21pc2VkIG9yIGV4cG9zZWQgcHVibGljbHkuIFRoZSBwb2xpY3kgYWltcyB0byBsaW1pdCB0aGUgcG90ZW50aWFsIGRhbWFnZSB0aGF0IG1heSBiZSBjYXVzZWQgYnkgZnJhdWQtcmVsYXRlZCBhY3Rpdml0eSBsZWFkaW5nIHRvIHVuYXV0aG9yaXplZCBjaGFyZ2VzLCB3aGlsZSBub3QgaW1wYWN0aW5nIHRoZSBleGlzdGluZyByZXNvdXJjZXMuIERvIE5PVCByZW1vdmUgdGhpcyBwb2xpY3kuIEluc3RlYWQsIHBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIHN1cHBvcnQgY2FzZSBjcmVhdGVkIGZvciB5b3UgcmVnYXJkaW5nIHRoaXMgZXZlbnQuICovXG4gICAgcHVibGljIEFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvbmZpZyB0byBjYWxsIEFXUyBzZXJ2aWNlcyBhbmQgZGVwbG95IGNvbmZpZyByZXNvdXJjZXMgYWNyb3NzIG9yZ2FuaXphdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdNdWx0aUFjY291bnRTZXR1cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdNdWx0aUFjY291bnRTZXR1cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQ29uZmlnIHRvIHJlbWVkaWF0ZSBub25jb21wbGlhbnQgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdSZW1lZGlhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1JlbWVkaWF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIENvbmZpZyB0byBjYWxsIHJlYWQtb25seSBBV1MgT3JnYW5pemF0aW9ucyBBUElzICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1JvbGVGb3JPcmdhbml6YXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1JvbGVGb3JPcmdhbml6YXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFuIEFXUyBMYW1iZGEgZnVuY3Rpb24gdG8gYWNjZXNzIHRoZSBBV1MgQ29uZmlnIEFQSSBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc25hcHNob3RzIHRoYXQgQVdTIENvbmZpZyBkZWxpdmVycyBwZXJpb2RpY2FsbHkgdG8gQW1hem9uIFMzLiBUaGlzIGFjY2VzcyBpcyByZXF1aXJlZCBieSBmdW5jdGlvbnMgdGhhdCBldmFsdWF0ZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZm9yIGN1c3RvbSBDb25maWcgcnVsZXMuICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1J1bGVzRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdSdWxlc0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ29uZmlnIHRvIGNhbGwgQVdTIHNlcnZpY2VzIGFuZCBjb2xsZWN0IHJlc291cmNlIGNvbmZpZ3VyYXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB1c2UgQVdTIENvbmZpZywgaW5jbHVkaW5nIHNlYXJjaGluZyBieSB0YWdzIG9uIHJlc291cmNlcywgYW5kIHJlYWRpbmcgYWxsIHRhZ3MuIFRoaXMgZG9lcyBub3QgcHJvdmlkZSBwZXJtaXNzaW9uIHRvIGNvbmZpZ3VyZSBBV1MgQ29uZmlnLCB3aGljaCByZXF1aXJlcyBhZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdVc2VyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1VzZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGJyb2FkIHJlYWQvd3JpdGUgYWNjZXNzIHRvIEFMTCBFQzIgb2JqZWN0cywgcmVhZC93cml0ZSBhY2Nlc3MgdG8gUzMgYnVja2V0cyBzdGFydGluZyB3aXRoICdpbXBvcnQtdG8tZWMyLScsIGFuZCB0aGUgYWJpbGl0eSB0byBsaXN0IGFsbCBTMyBidWNrZXRzLCBmb3IgdGhlIEFXUyBDb25uZWN0b3IgdG8gaW1wb3J0IFZNcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29ubmVjdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nvbm5lY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQ29udHJvbCBUb3dlciB0byBjYWxsIEFXUyBzZXJ2aWNlcyB0aGF0IHByb3ZpZGUgYXV0b21hdGVkIGFjY291bnQgY29uZmlndXJhdGlvbiBhbmQgY2VudHJhbGl6ZWQgZ292ZXJuYW5jZSBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29udHJvbFRvd2VyQWNjb3VudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbnRyb2xUb3dlckFjY291bnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBDb250cm9sIFRvd2VyIGVuYWJsZXMgQVdTIENsb3VkVHJhaWwgYXMgYSBiZXN0IHByYWN0aWNlIGFuZCBwcm92aWRlcyB0aGlzIHJvbGUgdG8gQVdTIENsb3VkVHJhaWwuIEFXUyBDbG91ZFRyYWlsIGFzc3VtZXMgdGhpcyByb2xlIHRvIGNyZWF0ZSBhbmQgcHVibGlzaCBDbG91ZFRyYWlsIGxvZ3MgKi9cbiAgICBwdWJsaWMgQVdTQ29udHJvbFRvd2VyQ2xvdWRUcmFpbFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29udHJvbFRvd2VyQ2xvdWRUcmFpbFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIElBTSBJZGVudGl0eSBDZW50ZXIgKElkQykgcmVzb3VyY2VzIGluIHRoZSBtZW1iZXIgYWNjb3VudHMgZW5yb2xsZWQgd2l0aCBBV1MgQ29udHJvbCBUb3dlci4gVGhlIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgQVdTQ29udHJvbFRvd2VyQWRtaW4gcm9sZSBvbmx5IGlmIHRoZSBjdXN0b21lciBoYXMgb3B0ZWQtaW50byBJQU0gSWRDIGludGVncmF0aW9uIGluIHRoZWlyIEFXUyBDb250cm9sIFRvd2VyIExhbmRpbmcgWm9uZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29udHJvbFRvd2VySWRlbnRpdHlDZW50ZXJNYW5hZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbnRyb2xUb3dlcklkZW50aXR5Q2VudGVyTWFuYWdlbWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBV1MgQ29udHJvbCBUb3dlciAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb250cm9sVG93ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byB0byBkZXNjcmliZSB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZSBhY2NvdW50LCBjcmVhdGUgUzMgYnVja2V0cyBmb3IgdGhlIE1BUCBwcm9ncmFtIGFuZCBhcHBseSB0YWdzIHRvIGl0LCBjcmVhdGUgYSBDb3N0IGFuZCBVc2FnZSBSZXBvcnQsIGFuZCBkZXNjcmliZSBDb3N0IGFuZCBVc2FnZSBSZXBvcnQgZGVmaW5pdGlvbnMuICovXG4gICAgcHVibGljIEFXU0Nvc3RBbmRVc2FnZVJlcG9ydEF1dG9tYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29zdEFuZFVzYWdlUmVwb3J0QXV0b21hdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIERhdGEgR3JhbnQgb3duZXJzIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZURhdGFHcmFudE93bmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VEYXRhR3JhbnRPd25lckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBEYXRhIEdyYW50IHJlY2VpdmVyIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZURhdGFHcmFudFJlY2VpdmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VEYXRhR3JhbnRSZWNlaXZlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIERhdGEgRXhjaGFuZ2UgYW5kIEFXUyBNYXJrZXRwbGFjZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEl0IGFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIG5lZWRlZCB0byB0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIEFXUyBEYXRhIEV4Y2hhbmdlLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZGF0YSBwcm92aWRlciBhY2Nlc3MgdG8gQVdTIERhdGEgRXhjaGFuZ2UgYW5kIEFXUyBNYXJrZXRwbGFjZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEl0IGFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIG5lZWRlZCB0byB0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIEFXUyBEYXRhIEV4Y2hhbmdlLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VQcm92aWRlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlUHJvdmlkZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIERhdGEgRXhjaGFuZ2UgYW5kIEFXUyBNYXJrZXRwbGFjZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBEYXRhIEV4Y2hhbmdlIHRvIGFjY2VzcyBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIERhdGEgRXhjaGFuZ2UgZm9yIGxpY2Vuc2UgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlU2VydmljZVJvbGVQb2xpY3lGb3JMaWNlbnNlTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvckxpY2Vuc2VNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBEYXRhIEV4Y2hhbmdlIHRvIHJlYWQgZGF0YSBhYm91dCB5b3VyIEFXUyBPcmdhbml6YXRpb24gdG8gZGV0ZXJtaW5lIGVsaWdpYmlsaXR5IGZvciBBV1MgRGF0YSBFeGNoYW5nZSBkYXRhIGdyYW50cyBsaWNlbnNlIGRpc3RyaWJ1dGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlU2VydmljZVJvbGVQb2xpY3lGb3JPcmdhbml6YXRpb25EaXNjb3ZlcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlU2VydmljZVJvbGVQb2xpY3lGb3JPcmdhbml6YXRpb25EaXNjb3ZlcnkpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZGF0YSBzdWJzY3JpYmVyIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gSXQgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgQVdTIERhdGEgRXhjaGFuZ2UuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZVN1YnNjcmliZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZVN1YnNjcmliZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMgdG8gQVdTIERhdGEgTGlmZWN5Y2xlIE1hbmFnZXIgdG8gdGFrZSBhY3Rpb25zIG9uIEFXUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMgdG8gQVdTIERhdGEgTGlmZWN5Y2xlIE1hbmFnZXIgdG8gdGFrZSBhY3Rpb25zIG9uIEFXUyByZXNvdXJjZXMgZm9yIEFNSSBNYW5hZ2VtZW50ICovXG4gICAgcHVibGljIEFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU2VydmljZVJvbGVGb3JBTUlNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU2VydmljZVJvbGVGb3JBTUlNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQW1hem9uIERhdGEgTGlmZWN5Y2xlIE1hbmFnZXIgcGVybWlzc2lvbiB0byBwZXJmb3JtIHRoZSBTeXN0ZW1zIE1hbmFnZXIgYWN0aW9ucyByZXF1aXJlZCB0byBydW4gcHJlIGFuZCBwb3N0IHNjcmlwdHMgb24gYWxsIEFtYXpvbiBFQzIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNTTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTU01GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gRGF0YSBQaXBlbGluZSwgbGlzdCBhY2Nlc3MgZm9yIFMzLCBEeW5hbW9EQiwgUmVkc2hpZnQsIFJEUywgU05TLCBhbmQgSUFNIHJvbGVzLCBhbmQgcGFzc1JvbGUgYWNjZXNzIGZvciBkZWZhdWx0IFJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhUGlwZWxpbmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFQaXBlbGluZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBEYXRhIFBpcGVsaW5lLCBsaXN0IGFjY2VzcyBmb3IgUzMsIER5bmFtb0RCLCBSZWRzaGlmdCwgUkRTLCBTTlMsIGFuZCBJQU0gcm9sZXMsIGFuZCBwYXNzUm9sZSBhY2Nlc3MgZm9yIGRlZmF1bHQgUm9sZXMuICovXG4gICAgcHVibGljIEFXU0RhdGFQaXBlbGluZVBvd2VyVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhUGlwZWxpbmVQb3dlclVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRGF0YVN5bmMgRGlzY292ZXJ5IHRvIGludGVncmF0ZSB3aXRoIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YVN5bmNEaXNjb3ZlcnlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhU3luY0Rpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIERhdGFTeW5jIGFuZCBtaW5pbWFsIGFjY2VzcyB0byBpdHMgZGVwZW5kZW5jaWVzICovXG4gICAgcHVibGljIEFXU0RhdGFTeW5jRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhU3luY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBEYXRhU3luYyAqL1xuICAgIHB1YmxpYyBBV1NEYXRhU3luY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFTeW5jUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRGF0YVN5bmMgdG8gaW50ZWdyYXRlIHdpdGggb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBEZWFkbGluZSBDbG91ZCB3b3JrZXJzIHdpdGggYWNjZXNzIHRvIHJ1biB0YXNrcyBvbiBhIGZhcm0uICovXG4gICAgcHVibGljIEFXU0RlYWRsaW5lQ2xvdWRGbGVldFdvcmtlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkRmxlZXRXb3JrZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgZmFybXMgd2l0aCBsaW1pdGVkIFJlYWQtT25seSBwZXJtaXNzaW9ucyB0byBjYWxsIG90aGVyIG5lY2Vzc2FyeSBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSB1c2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0Zhcm1zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzRmFybXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgZmxlZXRzIHdpdGggbGltaXRlZCBSZWFkLU9ubHkgcGVybWlzc2lvbnMgdG8gY2FsbCBvdGhlciBuZWNlc3Nhcnkgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgdXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NGbGVldHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NGbGVldHMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgam9icyB3aXRoIGxpbWl0ZWQgUmVhZC1Pbmx5IHBlcm1pc3Npb25zIHRvIGNhbGwgb3RoZXIgbmVjZXNzYXJ5IHNlcnZpY2VzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gdGhlIHVzZXIgcm9sZSBhc3NvY2lhdGVkIHdpdGggeW91ciBzdHVkaW8uICovXG4gICAgcHVibGljIEFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzSm9icygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0pvYnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgcXVldWVzIHdpdGggbGltaXRlZCBSZWFkLU9ubHkgcGVybWlzc2lvbnMgdG8gY2FsbCBvdGhlciBuZWNlc3Nhcnkgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgdXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NRdWV1ZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NRdWV1ZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIEFXUyBEZWFkbGluZSBDbG91ZCB3b3JrZXIgaG9zdHMgdG8gam9pbiBhIGZsZWV0IGluIGEgZmFybS4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFdvcmtlckhvc3QoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFdvcmtlckhvc3QpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBzcGVjaWZpZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgRGVlcExlbnMgQWRtaW5pc3RyYXRpdmUgbGFtYmRhIGZ1bmN0aW9ucyB0aGF0IHJ1biBvbiBhIERlZXBMZW5zIGRldmljZSAqL1xuICAgIHB1YmxpYyBBV1NEZWVwTGVuc0xhbWJkYUZ1bmN0aW9uQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBMZW5zTGFtYmRhRnVuY3Rpb25BY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQVdTIERlZXBMZW5zIGFjY2VzcyB0byBBV1MgU2VydmljZXMsIHJlc291cmNlcyBhbmQgcm9sZXMgbmVlZGVkIGJ5IERlZXBMZW5zIGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluY2x1ZGluZyBJb1QsIFMzLCBHcmVlbkdyYXNzIGFuZCBBV1MgTGFtYmRhLiAqL1xuICAgIHB1YmxpYyBBV1NEZWVwTGVuc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBMZW5zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWVwUmFjZXIgYWRtaW4gYWNjZXNzIHRvIGFsbCBhY3Rpb25zIGluY2x1ZGluZyB0b2dnbGluZyBiZXR3ZWVuIG11bHRpdXNlciBhbmQgc2luZ2xlIHVzZXIgbW9kZS4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyQWNjb3VudEFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlckFjY291bnRBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZEZvcm1hdGlvbiB0byBjcmVhdGUgYW5kIG1hbmFnZSBBV1Mgc3RhY2tzIGFuZCByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlckNsb3VkRm9ybWF0aW9uQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlckNsb3VkRm9ybWF0aW9uQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGVlcFJhY2VyIE11bHRpVXNlciBEZWZhdWx0IHVzZXIgYWNjZXNzIHRvIHVzZSBkZWVwcmFjZXIgaW4gbXVsdGktdXNlciBtb2RlICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlckRlZmF1bHRNdWx0aVVzZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyRGVmYXVsdE11bHRpVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBEZWVwUmFjZXIuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMykuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBSb2JvTWFrZXIgdG8gY3JlYXRlIHJlcXVpcmVkIHJlc291cmNlcyBhbmQgY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlclJvYm9NYWtlckFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJSb2JvTWFrZXJBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRGVlcFJhY2VyIHRvIGNyZWF0ZSByZXF1aXJlZCByZXNvdXJjZXMgYW5kIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NEZWVwUmFjZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERlbnkgYWxsIGFjY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTRGVueUFsbCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZW55QWxsKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBEZXZpY2UgRmFybSBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NEZXZpY2VGYXJtRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZXZpY2VGYXJtRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50IHBlcm1pc3Npb25zIHRvIEFXUyBEZXZpY2UgRmFybSB0byBjYWxsIEVDMiBOZXR3b3JrIEFQSXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RldmljZUZhcm1TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZXZpY2VGYXJtU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudCBwZXJtaXNzaW9ucyB0byBBV1MgRGV2aWNlIEZhcm0gdG8gY2FsbCBFQzIgQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGV2aWNlRmFybVRlc3RHcmlkU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGV2aWNlRmFybVRlc3RHcmlkU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGlyZWN0IENvbm5lY3QgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RDb25uZWN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RDb25uZWN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIERpcmVjdCBDb25uZWN0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0Q29ubmVjdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdENvbm5lY3RSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBEaXJlY3QgQ29ubmVjdCBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RpcmVjdENvbm5lY3RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RDb25uZWN0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UgRGF0YS4gKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0b3J5U2VydmljZURhdGFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdG9yeVNlcnZpY2VEYXRhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIERpcmVjdG9yeSBTZXJ2aWNlIERhdGEgKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0b3J5U2VydmljZURhdGFSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlRGF0YVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIERpcmVjdG9yeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIERpcmVjdG9yeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0b3J5U2VydmljZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciB0aGUgRGlyZWN0b3J5IFNlcnZpY2UgU2VydmljZSBMaW5rZWQgUm9sZSAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0b3J5U2VydmljZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgcmVxdWlyZWQgZm9yIEFXUyBEaXNjb3ZlcnkgQ29udGludW91cyBFeHBvcnQgKi9cbiAgICBwdWJsaWMgQVdTRGlzY292ZXJ5Q29udGludW91c0V4cG9ydEZpcmVob3NlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Rpc2NvdmVyeUNvbnRpbnVvdXNFeHBvcnRGaXJlaG9zZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBETVMgRmxlZXQgQWR2aXNvciB0byBtYW5hZ2UgQ2xvdWRXYXRjaCBtZXRyaWNzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NETVNGbGVldEFkdmlzb3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NETVNGbGVldEFkdmlzb3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgRE1TIFNlcnZlcmxlc3MgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgRE1TIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTRE1TU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RNU1NlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgQ2FwYWNpdHkgTWFuYWdlciB0byBtYW5hZ2UgY2FwYWNpdHkgcmVzb3VyY2VzIGFuZCBpbnRlZ3JhdGUgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRUMyQ2FwYWNpdHlNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyQ2FwYWNpdHlNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIENhcGFjaXR5UmVzZXJ2YXRpb24gRmxlZXQgc2VydmljZSB0byBtYW5hZ2UgQ2FwYWNpdHkgUmVzZXJ2YXRpb25zICovXG4gICAgcHVibGljIEFXU0VDMkNhcGFjaXR5UmVzZXJ2YXRpb25GbGVldFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyQ2FwYWNpdHlSZXNlcnZhdGlvbkZsZWV0Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgRmxlZXQgdG8gbGF1bmNoIGFuZCBtYW5hZ2UgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJGbGVldFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMkZsZWV0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIFNwb3QgRmxlZXQgdG8gbGF1bmNoIGFuZCBtYW5hZ2Ugc3BvdCBmbGVldCBpbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQVdTRUMyU3BvdEZsZWV0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyU3BvdEZsZWV0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIFNwb3QgdG8gbGF1bmNoIGFuZCBtYW5hZ2Ugc3BvdCBpbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQVdTRUMyU3BvdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlNwb3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBFQzIgaW5zdGFuY2UgcGVybWlzc2lvbnMgdG8gYWxsb3cgRUMyIFNRTCBIaWdoIEF2YWlsYWJpbGl0eSBzZXJ2aWNlIHRvIGRldGVjdCBpbnN0YW5jZSBoaWdoIGF2YWlsYWJpbGl0eSBzdGF0ZSB0aHJvdWdoIEVDMiBpbnN0YW5jZSBwcm9maWxlLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcWxIYUluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlNxbEhhSW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFQzIgU1FMIEhpZ2ggQXZhaWxhYmlsaXR5IHNlcnZpY2UgcGVybWlzc2lvbnMgdG8gZGV0ZWN0IHN0YW5kYnkvcGFzc2l2ZSBpbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQVdTRUMyU3FsSGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJTcWxIYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFtYXpvbiBFQzIgYW5kIEFXUyBTU00gcGVybWlzc2lvbnMgdG8gcmVzdG9yZSBTUUwgU2VydmVyIGRhdGFiYXNlIGZyb20gYXBwbGljYXRpb24gY29uc2lzdGVudCBzbmFwc2hvdHMgY3JlYXRlZCBieSBBV1MgVlNTLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJWc3NSZXN0b3JlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlZzc1Jlc3RvcmVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgSUFNIHJvbGUgdGhhdCdzIGF0dGFjaGVkIHRvIHlvdXIgQW1hem9uIEVDMiBXaW5kb3dzIEluc3RhbmNlcyB0byBlbmFibGUgdGhlIEFtYXpvbiBFQzIgVlNTIHNvbHV0aW9uIHRvIGNyZWF0ZSBhbmQgYWRkIHRhZ3MgdG8gQW1hem9uIE1hY2hpbmUgSW1hZ2VzIChBTUkpIGFuZCBFQlMgU25hcHNob3RzLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJWc3NTbmFwc2hvdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJWc3NTbmFwc2hvdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgRUNSIHB1bGwgdGhyb3VnaCBjYWNoZSAqL1xuICAgIHB1YmxpYyBBV1NFQ1JQdWxsVGhyb3VnaENhY2hlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUNSUHVsbFRocm91Z2hDYWNoZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSB0aGUgaW5zdGFuY2UgaW4geW91ciBjdXN0b20gcGxhdGZvcm0gYnVpbGRlciBlbnZpcm9ubWVudCBwZXJtaXNzaW9uIHRvIGxhdW5jaCBFQzIgaW5zdGFuY2UsIGNyZWF0ZSBFQlMgc25hcHNob3QgYW5kIEFNSSwgc3RyZWFtIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggTG9ncywgYW5kIHN0b3JlIGFydGlmYWN0cyBpbiBBbWF6b24gUzMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtDdXN0b21QbGF0Zm9ybWZvckVDMlJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa0N1c3RvbVBsYXRmb3JtZm9yRUMyUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBFbGFzdGljIEJlYW5zdGFsayBTZXJ2aWNlIHBvbGljeSBmb3IgSGVhbHRoIE1vbml0b3Jpbmcgc3lzdGVtICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtFbmhhbmNlZEhlYWx0aCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrRW5oYW5jZWRIZWFsdGgpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSBSb2xlIHBvbGljeSB0aGF0IGdyYW50cyBsaW1pdGVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSB5b3VyIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiBmb3IgbWFpbnRlbmFuY2UgcHVycG9zZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtNYWludGVuYW5jZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrTWFpbnRlbmFuY2UpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBmb3IgdGhlIEFXUyBFbGFzdGljIEJlYW5zdGFsayBzZXJ2aWNlIHJvbGUgdXNlZCB0byBwZXJmb3JtIG1hbmFnZWQgdXBkYXRlcyBvZiBFbGFzdGljIEJlYW5zdGFsayBlbnZpcm9ubWVudHMuIFRoaXMgcG9saWN5IHNob3VsZCBub3QgYmUgYXR0YWNoZWQgdG8gb3RoZXIgdXNlcnMgb3Igcm9sZXMuIFRoZSBwb2xpY3kgZ3JhbnRzIGJyb2FkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHJlc291cmNlcyBhY3Jvc3MgYSBudW1iZXIgb2YgQVdTIHNlcnZpY2VzIGluY2x1ZGluZyBBdXRvU2NhbGluZywgRUMyLCBFQ1MsIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgYW5kIENsb3VkRm9ybWF0aW9uLiAgVGhpcyBwb2xpY3kgYWxzbyBhbGxvd3MgcGFzc2luZyBvZiBhbnkgSUFNIHJvbGUgdXNhYmxlIHdpdGggdGhvc2Ugc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtNYW5hZ2VkVXBkYXRlc0N1c3RvbWVyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrTWFuYWdlZFVwZGF0ZXNDdXN0b21lclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSBSb2xlIHBvbGljeSB0aGF0IGdyYW50cyBsaW1pdGVkIHBlcm1pc3Npb25zIHRvIG1hbmFnZWQgdXBkYXRlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa01hbmFnZWRVcGRhdGVzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa01hbmFnZWRVcGRhdGVzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHRoZSBpbnN0YW5jZXMgaW4geW91ciBtdWx0aWNvbnRhaW5lciBEb2NrZXIgZW52aXJvbm1lbnQgYWNjZXNzIHRvIHVzZSB0aGUgQW1hem9uIEVDMiBDb250YWluZXIgU2VydmljZSB0byBtYW5hZ2UgY29udGFpbmVyIGRlcGxveW1lbnQgdGFza3MuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtNdWx0aWNvbnRhaW5lckRvY2tlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrTXVsdGljb250YWluZXJEb2NrZXIpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zLiBFeHBsaWNpdGx5IGFsbG93cyBvcGVyYXRvcnMgdG8gZ2FpbiBkaXJlY3QgYWNjZXNzIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHJlc291cmNlcyByZWxhdGVkIHRvIEFXUyBFbGFzdGljIEJlYW5zdGFsayBhcHBsaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZUNvcmUgKEVsYXN0aWMgQmVhbnN0YWxrIG9wZXJhdGlvbnMgcm9sZSkgQWxsb3dzIGNvcmUgb3BlcmF0aW9uIG9mIGEgd2ViIHNlcnZpY2UgZW52aXJvbm1lbnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlQ29yZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZUNvcmUpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYW4gZW52aXJvbm1lbnQgdG8gbWFuYWdlIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MgbG9nIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVDV0woKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVDV0wpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYSBtdWx0aWNvbnRhaW5lciBEb2NrZXIgZW52aXJvbm1lbnQgdG8gbWFuYWdlIEFtYXpvbiBFQ1MgY2x1c3RlcnMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlRUNTKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlRUNTKTtcbiAgICB9XG5cbiAgICAvKiogKEVsYXN0aWMgQmVhbnN0YWxrIG9wZXJhdGlvbnMgcm9sZSkgQWxsb3dzIGFuIGVudmlyb25tZW50IHRvIGludGVncmF0ZSBhbiBBbWF6b24gUkRTIGluc3RhbmNlLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZVJEUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZVJEUyk7XG4gICAgfVxuXG4gICAgLyoqIChFbGFzdGljIEJlYW5zdGFsayBvcGVyYXRpb25zIHJvbGUpIEFsbG93cyBhbiBlbnZpcm9ubWVudCB0byBlbmFibGUgQW1hem9uIFNOUyB0b3BpYyBpbnRlZ3JhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVTTlMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVTTlMpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYSB3b3JrZXIgZW52aXJvbm1lbnQgdGllciB0byBjcmVhdGUgYW4gQW1hem9uIER5bmFtb0RCIHRhYmxlIGFuZCBhbiBBbWF6b24gU1FTIHF1ZXVlLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZVdvcmtlclRpZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVXb3JrZXJUaWVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgb24gYSBkZXByZWNhdGlvbiBwYXRoLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZ3VpZGFuY2U6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljYmVhbnN0YWxrL2xhdGVzdC9kZy9pYW0tc2VydmljZXJvbGUuaHRtbC4gQVdTIEVsYXN0aWMgQmVhbnN0YWxrIFNlcnZpY2Ugcm9sZSBwb2xpY3kgd2hpY2ggZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSAmIG1hbmFnZSByZXNvdXJjZXMgKGkuZS46IEF1dG9TY2FsaW5nLCBFQzIsIFMzLCBDbG91ZEZvcm1hdGlvbiwgRUxCLCBldGMuKSBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1NlcnZpY2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1NlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSBMaW5rZWQgUm9sZSBwb2xpY3kgd2hpY2ggZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSAmIG1hbmFnZSByZXNvdXJjZXMgKGkuZS46IEF1dG9TY2FsaW5nLCBFQzIsIFMzLCBDbG91ZEZvcm1hdGlvbiwgRUxCLCBldGMuKSBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgdGhlIGluc3RhbmNlcyBpbiB5b3VyIHdlYiBzZXJ2ZXIgZW52aXJvbm1lbnQgYWNjZXNzIHRvIHVwbG9hZCBsb2cgZmlsZXMgdG8gQW1hem9uIFMzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrV2ViVGllcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrV2ViVGllcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgdGhlIGluc3RhbmNlcyBpbiB5b3VyIHdvcmtlciBlbnZpcm9ubWVudCBhY2Nlc3MgdG8gdXBsb2FkIGxvZyBmaWxlcyB0byBBbWF6b24gUzMsIHRvIHVzZSBBbWF6b24gU1FTIHRvIG1vbml0b3IgeW91ciBhcHBsaWNhdGlvbidzIGpvYiBxdWV1ZSwgdG8gdXNlIEFtYXpvbiBEeW5hbW9EQiB0byBwZXJmb3JtIGxlYWRlciBlbGVjdGlvbiwgYW5kIHRvIEFtYXpvbiBDbG91ZFdhdGNoIHRvIHB1Ymxpc2ggbWV0cmljcyBmb3IgaGVhbHRoIG1vbml0b3JpbmcuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtXb3JrZXJUaWVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtXb3JrZXJUaWVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHJlY292ZXIgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcyB3aG9zZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBzdGVwIG9mIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5QWdlbnRJbnN0YWxsYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlBZ2VudEluc3RhbGxhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gcmVjb3ZlciBzb3VyY2Ugc2VydmVycyB0byBBV1MuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUFnZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5QWdlbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgcHVibGljIEFQSXMgb2YgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUyksIGFzIHdlbGwgYXMgcGVybWlzc2lvbnMgdG8gcmVhZCBLTVMga2V5LCBMaWNlbnNlIE1hbmFnZXIsIFJlc291cmNlIEdyb3VwcywgRWxhc3RpYyBMb2FkIEJhbGFuY2luZywgSUFNLCBhbmQgRUMyIGluZm9ybWF0aW9uLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBwdWJsaWMgQVBJcyBvZiBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoQVdTIERSUyksIGFzIHdlbGwgYXMgYWxsIHB1YmxpYyBBUElzIGluIG90aGVyIEFXUyBzZXJ2aWNlcyB1c2VkIGJ5IEFXUyBEUlMgQ29uc29sZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29uc29sZUZ1bGxBY2Nlc3NWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNvbnNvbGVGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgQ29udmVyc2lvbiBzZXJ2ZXIncyBpbnN0YW5jZSByb2xlLiBUaGlzIHBvbGljeSBhbGxvd3MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSBDb252ZXJzaW9uIFNlcnZlcnMsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnksIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIERSUyBzZXJ2aWNlLiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgRFJTIHRvIHRoZSBEUlMgQ29udmVyc2lvbiBTZXJ2ZXJzLCB3aGljaCBhcmUgYXV0b21hdGljYWxseSBsYXVuY2hlZCBhbmQgdGVybWluYXRlZCBieSBEUlMsIHdoZW4gbmVlZGVkLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gRFJTIENvbnZlcnNpb24gU2VydmVycyBhcmUgdXNlZCBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IHdoZW4gdXNlcnMgY2hvb3NlIHRvIHJlY292ZXIgc291cmNlIHNlcnZlcnMgdXNpbmcgdGhlIERSUyBjb25zb2xlLCBDTEksIG9yIEFQSS4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb252ZXJzaW9uU2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29udmVyc2lvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSB0byBzdXBwb3J0IGNyb3NzLWFjY291bnQgcmVwbGljYXRpb24gYW5kIGNyb3NzLWFjY291bnQgZmFpbGJhY2suICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q3Jvc3NBY2NvdW50UmVwbGljYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDcm9zc0FjY291bnRSZXBsaWNhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIGFuZCB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIGJ5IEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHJlY292ZXIgc291cmNlIHNlcnZlcnMgdGhhdCBydW4gb24gRUMyIChjcm9zcy1yZWdpb24gb3IgY3Jvc3MtQVopLiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IHNob3VsZCBiZSBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIHRvIHRoZSBFQzIgSW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUVjMkluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RWMySW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIGF0dGFjaCB0aGUgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlGYWlsYmFja0luc3RhbGxhdGlvblBvbGljeSBwb2xpY3kgdG8geW91ciBJQU0gaWRlbnRpdGllcy4gIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IEZhaWxiYWNrIENsaWVudCwgd2hpY2ggaXMgdXNlZCB0byBmYWlsYmFjayBSZWNvdmVyeSBJbnN0YW5jZXMgYmFjayB0byB5b3VyIG9yaWdpbmFsIHNvdXJjZSBpbmZyYXN0cnVjdHVyZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzIHdob3NlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIHdoZW4gcnVubmluZyB0aGUgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSBGYWlsYmFjayBDbGllbnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RmFpbGJhY2tJbnN0YWxsYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlGYWlsYmFja0luc3RhbGxhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB1c2luZyB0aGUgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSBGYWlsYmFjayBDbGllbnQsIHdoaWNoIGlzIHVzZWQgdG8gZmFpbGJhY2sgUmVjb3ZlcnkgSW5zdGFuY2VzIGJhY2sgdG8geW91ciBvcmlnaW5hbCBzb3VyY2UgaW5mcmFzdHJ1Y3R1cmUuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUZhaWxiYWNrUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RmFpbGJhY2tQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgeW91IHRvIHVzZSBBbWF6b24gU1NNIGFuZCBhZGRpdGlvbmFsIHNlcnZpY2VzIHJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHJ1biBwb3N0LWxhdW5jaCBhY3Rpb25zIGluIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChBV1MgRFJTKS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHJvbGVzIG9yIHVzZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUxhdW5jaEFjdGlvbnNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlMYXVuY2hBY3Rpb25zUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHN1cHBvcnQgbmV0d29yayByZXBsaWNhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlOZXR3b3JrUmVwbGljYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlOZXR3b3JrUmVwbGljYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIGF0dGFjaCB0aGUgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZWFkT25seUFjY2VzcyBwb2xpY3kgdG8geW91ciBJQU0gaWRlbnRpdGllcy4gIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbCByZWFkLW9ubHkgcHVibGljIEFQSXMgb2YgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSwgYXMgd2VsbCBhcyBzb21lIHJlYWQtb25seSBBUElzIG9mIG90aGVyIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBpbiBvcmRlciB0byBtYWtlIGZ1bGwgcmVhZC1vbmx5IHVzZSBvZiB0aGUgRFJTIGNvbnNvbGUuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIGluc3RhbmNlIHJvbGUgb2YgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSdzIFJlY292ZXJ5IEluc3RhbmNlLiAgVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIFJlY292ZXJ5IEluc3RhbmNlLCB3aGljaCBhcmUgRUMyIGluc3RhbmNlcyBsYXVuY2hlZCBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IC0gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgRFJTIHNlcnZpY2UsIGFuZCB0byBiZSBhYmxlIHRvIGZhaWxiYWNrIHRvIHRoZWlyIG9yaWdpbmFsIHNvdXJjZSBpbmZyYXN0cnVjdHVyZS4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBpcyBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgdG8gdGhlIERSUyBSZWNvdmVyeSBJbnN0YW5jZXMuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlY292ZXJ5SW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZWNvdmVyeUluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgUmVwbGljYXRpb24gc2VydmVyJ3MgaW5zdGFuY2Ugcm9sZS4gVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIFJlcGxpY2F0aW9uIFNlcnZlcnMsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgLSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBEUlMgc2VydmljZSwgYW5kIHRvIGNyZWF0ZSBFQlMgc25hcHNob3RzIGluIHlvdXIgQVdTIGFjY291bnQuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IHRvIHRoZSBEUlMgUmVwbGljYXRpb24gU2VydmVycyB3aGljaCBhcmUgYXV0b21hdGljYWxseSBsYXVuY2hlZCBhbmQgdGVybWluYXRlZCBieSBEUlMsIGFzIG5lZWRlZC4gRFJTIFJlcGxpY2F0aW9uIFNlcnZlcnMgYXJlIHVzZWQgdG8gZmFjaWxpdGF0ZSBkYXRhIHJlcGxpY2F0aW9uIGZyb20geW91ciBleHRlcm5hbCBzZXJ2ZXJzIHRvIEFXUywgYXMgcGFydCBvZiB0aGUgcmVjb3ZlcnkgcHJvY2VzcyBtYW5hZ2VkIGJ5IERSUy4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5UmVwbGljYXRpb25TZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZXBsaWNhdGlvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSByZXNvdXJjZXMgc3VjaCBhcyBzb3VyY2Ugc2VydmVycyBhbmQgam9icy4gSXQgYWxzbyBhbGxvd3MgY3JlYXRpbmcgYSBjb252ZXJ0ZWQgc25hcHNob3QgYW5kIHNoYXJpbmcgdGhhdCBFQlMgc25hcHNob3Qgd2l0aCBhIHNwZWNpZmljIGFjY291bnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U3RhZ2luZ0FjY291bnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlTdGFnaW5nQWNjb3VudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIHVzZWQgYnkgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gcmVjb3ZlciBzb3VyY2Ugc2VydmVycyBpbnRvIGEgc2VwYXJhdGUgdGFyZ2V0IGFjY291bnQgYW5kIHRvIGFsbG93IGZhaWxpbmcgYmFjay4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U3RhZ2luZ0FjY291bnRQb2xpY3lWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVN0YWdpbmdBY2NvdW50UG9saWN5VjIpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgQ29udHJvbCBQbGFuZSAtIENsYXNzaWMgKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0xvYWRCYWxhbmNpbmdDbGFzc2ljU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0xvYWRCYWxhbmNpbmdDbGFzc2ljU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgQ29udHJvbCBQbGFuZSAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljTG9hZEJhbGFuY2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNMb2FkQmFsYW5jaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBjcmVhdGUgTWVkaWFDb25uZWN0IEdhdGV3YXkgQnJpZGdlcyBhbmQgYWxsIGl0cyBhc3NvY2lhdGVkIHN1Yi1yZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdENyZWF0ZUJyaWRnZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RDcmVhdGVCcmlkZ2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBjcmVhdGUgTWVkaWFDb25uZWN0IEZsb3dzIGFuZCBhbGwgaXRzIGFzc29jaWF0ZWQgc3ViLXJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0Q3JlYXRlRmxvdygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RDcmVhdGVGbG93KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gZGVsZXRlIE1lZGlhQ29ubmVjdCBHYXRld2F5IEJyaWRnZXMgYW5kIGFsbCBpdHMgYXNzb2NpYXRlZCBzdWItcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUNvbm5lY3REZWxldGVCcmlkZ2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0RGVsZXRlQnJpZGdlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gZGVsZXRlIE1lZGlhQ29ubmVjdCBGbG93cyBhbmQgYWxsIGl0cyBhc3NvY2lhdGVkIHN1Yi1yZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdERlbGV0ZUZsb3coKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0RGVsZXRlRmxvdyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFDb25uZWN0IHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhQ29ubmVjdCByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUNvbnZlcnQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29udmVydEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb252ZXJ0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUNvbnZlcnQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29udmVydFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29udmVydFJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUxpdmUgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhTGl2ZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFMaXZlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUxpdmUgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhTGl2ZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhTGl2ZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2VWMiByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVYyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VWMkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFQYWNrYWdlVjIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VWMlJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVYyUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byBhbGwgTWVkaWFTdG9yZSBBUElzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhU3RvcmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhU3RvcmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIGZvciBNZWRpYVN0b3JlIEFQSXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFTdG9yZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhU3RvcmVSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFUYWlsb3IgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhVGFpbG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVRhaWxvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFUYWlsb3IgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhVGFpbG9yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFUYWlsb3JSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgZW5oYW5jZWQgY2xhc3NpYyBuZXR3b3JraW5nIG1hbmFnZW1lbnQgZmVhdHVyZS4gKi9cbiAgICBwdWJsaWMgQVdTRW5oYW5jZWRDbGFzc2ljTmV0d29ya2luZ01hbmdlbWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbmhhbmNlZENsYXNzaWNOZXR3b3JraW5nTWFuZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgY29uc29sZSBmdWxsIGFjY2VzcyB0byBBV1MgRW50aXR5IFJlc29sdXRpb24gYW5kIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0VudGl0eVJlc29sdXRpb25Db25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbnRpdHlSZXNvbHV0aW9uQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBFbnRpdHkgUmVzb2x1dGlvbiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0VudGl0eVJlc29sdXRpb25Db25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRW50aXR5UmVzb2x1dGlvbkNvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gRUMyIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVDMkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVDMkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gRUNTIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVDU0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVDU0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gRUtTIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVLU0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVLU0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gRUMyIG5ldHdvcmtpbmcgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yTmV0d29ya0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvck5ldHdvcmtBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIEZhdWx0IEluamVjdGlvbiBTaW11bGF0b3IgU2VydmljZSBwZXJtaXNzaW9uIGluIFJEUyBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgdG8gcGVyZm9ybSBGSVMgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JSRFNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JSRFNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIEZhdWx0IEluamVjdGlvbiBTaW11bGF0b3IgU2VydmljZSBwZXJtaXNzaW9uIGluIFNTTSBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgdG8gcGVyZm9ybSBGSVMgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JTU01BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JTU01BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIGFjY2VzcyB0byBBV1MgU2VydmljZSBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gRmluU3BhY2UgKi9cbiAgICBwdWJsaWMgQVdTRmluU3BhY2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGaW5TcGFjZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBhY2Nlc3MgZm9yIEFXUyBGTSBBZG1pbmlzdHJhdG9yICovXG4gICAgcHVibGljIEFXU0ZNQWRtaW5GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZNQWRtaW5GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZCBvbmx5IGFjY2VzcyBmb3IgQVdTIEZNIEFkbWluaXN0cmF0b3IgdGhhdCBhbGxvd3MgbW9uaXRvcmluZyBBV1MgRk0gb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NGTUFkbWluUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRk1BZG1pblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgV0FGIGFjdGlvbnMgZm9yIEFXUyBGaXJld2FsbCBNYW5hZ2VyIG1lbWJlciBhY2NvdW50cyAqL1xuICAgIHB1YmxpYyBBV1NGTU1lbWJlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZNTWVtYmVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgQVdTIEZvciBXb3JkcHJlc3MgUGx1Z2luICovXG4gICAgcHVibGljIEFXU0ZvcldvcmRQcmVzc1BsdWdpblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGb3JXb3JkUHJlc3NQbHVnaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgd2hpY2ggYWxsb3dzIEFXUyBDb2RlIENvbm5lY3Rpb25zIHRvIHN5bmMgY29udGVudCBmcm9tIHlvdXIgZ2l0IHJlcG9zaXRvcnkgKi9cbiAgICBwdWJsaWMgQVdTR2l0U3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dpdFN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBV1MgR2xvYmFsIEFjY2VsZXJhdG9yIHRvIG1hbmFnZSBFQzIgRWxhc3RpYyBOZXR3b3JrIEludGVyZmFjZXMgYW5kIFNlY3VyaXR5IEdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQVdTR2xvYmFsQWNjZWxlcmF0b3JTTFJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2xvYmFsQWNjZWxlcmF0b3JTTFJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgR2x1ZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTR2x1ZUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBHbHVlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgYWNjZXNzIHRvIHNhZ2VtYWtlciBub3RlYm9vayBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0dsdWVDb25zb2xlU2FnZU1ha2VyTm90ZWJvb2tGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVDb25zb2xlU2FnZU1ha2VyTm90ZWJvb2tGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEdsdWUgRGF0YUJyZXcgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBBbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIEtNUywgR2x1ZSkuICovXG4gICAgcHVibGljIEF3c0dsdWVEYXRhQnJld0Z1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXdzR2x1ZURhdGFCcmV3RnVsbEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIGdsdWUgdG8gcGVyZm9ybSBhY3Rpb24gb24gdXNlcidzIGdsdWUgZGF0YSBjYXRhbG9nLCB0aGlzIHBvbGljeSBhbHNvIHByb3ZpZGVzIHBlcm1pc3Npb24gdG8gZWMyIGFjdGlvbnMgdG8gYWxsb3cgZ2x1ZSB0byBjcmVhdGUgRU5JIHRvIGNvbm5lY3QgdG8gcmVzb3VyY2VzIGluIHRoZSBWUEMsIGFsc28gYWxsb3cgZ2x1ZSB0byBhY2Nlc3MgcmVnaXN0ZXJlZCBkYXRhIGluIGxha2Vmb3JtYXRpb24gYW5kIHBlcm1pc3Npb24gdG8gYWNjZXNzIHVzZXIncyBjbG91ZHdhdGNoICovXG4gICAgcHVibGljIEFXU0dsdWVEYXRhQnJld1NlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVEYXRhQnJld1NlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBHbHVlIFNjaGVtYSBSZWdpc3RyeSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0dsdWVTY2hlbWFSZWdpc3RyeUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZVNjaGVtYVJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byB0aGUgQVdTIEdsdWUgU2NoZW1hIFJlZ2lzdHJ5IFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTR2x1ZVNjaGVtYVJlZ2lzdHJ5UmVhZG9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZVNjaGVtYVJlZ2lzdHJ5UmVhZG9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBHbHVlIHNlcnZpY2Ugcm9sZSB3aGljaCBhbGxvd3MgY3VzdG9tZXIgdG8gbWFuYWdlIG5vdGVib29rIHNlcnZlciAqL1xuICAgIHB1YmxpYyBBV1NHbHVlU2VydmljZU5vdGVib29rUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlU2VydmljZU5vdGVib29rUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIEdsdWUgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgRUMyLCBTMywgYW5kIENsb3Vkd2F0Y2ggTG9ncyAqL1xuICAgIHB1YmxpYyBBV1NHbHVlU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZVNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdGhhdCBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlIGFuZCB1c2Ugb25seSB0aGUgbm90ZWJvb2sgc2Vzc2lvbnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLiBUaGlzIHBvbGljeSBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGV4cGxpY2l0bHkgYWxsb3cgdXNlcnMgdG8gcGFzcyBhIHJlc3RyaWN0ZWQgR2x1ZSBzZXNzaW9uIHJvbGUuICovXG4gICAgcHVibGljIEF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWROb3RlYm9va1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkTm90ZWJvb2tQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQVdTIEdsdWUgcmVzb3VyY2VzIGV4Y2VwdCBmb3Igc2Vzc2lvbnMuIEFsbG93cyB1c2VycyB0byBjcmVhdGUgYW5kIHVzZSBvbmx5IHRoZSBub3RlYm9vayBzZXNzaW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgb3RoZXIgcGVybWlzc2lvbnMgbmVlZGVkIGJ5IEFXUyBHbHVlIHRvIG1hbmFnZSBHbHVlIHJlc291cmNlcyBpbiBvdGhlciBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWROb3RlYm9va1NlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWROb3RlYm9va1NlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdGhhdCBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlIGFuZCB1c2Ugb25seSB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLiBUaGlzIHBvbGljeSBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGV4cGxpY2l0bHkgYWxsb3cgdXNlcnMgdG8gcGFzcyBhIHJlc3RyaWN0ZWQgR2x1ZSBzZXNzaW9uIHJvbGUuICovXG4gICAgcHVibGljIEF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBV1MgR2x1ZSByZXNvdXJjZXMgZXhjZXB0IGZvciBzZXNzaW9ucy4gQWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBhbmQgdXNlIG9ubHkgdGhlIGludGVyYWN0aXZlIHNlc3Npb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXNlci4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyBvdGhlciBwZXJtaXNzaW9ucyBuZWVkZWQgYnkgQVdTIEdsdWUgdG8gbWFuYWdlIEdsdWUgcmVzb3VyY2VzIGluIG90aGVyIEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZFNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHdpdGhpbiBBbWF6b24gR3JhZmFuYSB0byBjcmVhdGUgYW5kIG1hbmFnZSB3b3Jrc3BhY2VzIGZvciB0aGUgZW50aXJlIG9yZ2FuaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTR3JhZmFuYUFjY291bnRBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyYWZhbmFBY2NvdW50QWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyB0byByZWFkIG9ubHkgb3BlcmF0aW9ucyBpbiBBbWF6b24gR3JhZmFuYS4gKi9cbiAgICBwdWJsaWMgQVdTR3JhZmFuYUNvbnNvbGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmFmYW5hQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgb25seSB0aGUgYWJpbGl0eSB0byB1cGRhdGUgdXNlciBhbmQgZ3JvdXAgcGVybWlzc2lvbnMgZm9yIEFXUyBHcmFmYW5hIHdvcmtzcGFjZXMuICovXG4gICAgcHVibGljIEFXU0dyYWZhbmFXb3Jrc3BhY2VQZXJtaXNzaW9uTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmFmYW5hV29ya3NwYWNlUGVybWlzc2lvbk1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhYmlsaXR5IHRvIHVwZGF0ZSBJQU0gSWRlbnRpdHkgQ2VudGVyIChJZEMpIHVzZXIgYW5kIGdyb3VwIHBlcm1pc3Npb25zIGZvciBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHdvcmtzcGFjZXMuICovXG4gICAgcHVibGljIEFXU0dyYWZhbmFXb3Jrc3BhY2VQZXJtaXNzaW9uTWFuYWdlbWVudFYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyYWZhbmFXb3Jrc3BhY2VQZXJtaXNzaW9uTWFuYWdlbWVudFYyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBHcmVlbmdyYXNzIGNvbmZpZ3VyYXRpb24sIG1hbmFnZW1lbnQgYW5kIGRlcGxveW1lbnQgYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NHcmVlbmdyYXNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmVlbmdyYXNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFXUyBHcmVlbmdyYXNzIGNvbmZpZ3VyYXRpb24sIG1hbmFnZW1lbnQgYW5kIGRlcGxveW1lbnQgYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NHcmVlbmdyYXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JlZW5ncmFzc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgR3JlZW5ncmFzcyBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBBV1MgTGFtYmRhIGFuZCBBV1MgSW9UIHRoaW5nIHNoYWRvd3MuICovXG4gICAgcHVibGljIEFXU0dyZWVuZ3Jhc3NSZXNvdXJjZUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JlZW5ncmFzc1Jlc291cmNlQWNjZXNzUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBEYXRhZmxvdyBFbmRwb2ludCBJbnN0YW5jZSBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIEFXUyBHcm91bmQgU3RhdGlvbiBBZ2VudCAqL1xuICAgIHB1YmxpYyBBV1NHcm91bmRTdGF0aW9uQWdlbnRJbnN0YW5jZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcm91bmRTdGF0aW9uQWdlbnRJbnN0YW5jZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSGVhbHRoIHRvIGVuYWJsZSB0aGUgSGVhbHRoIGV2ZW50IHByb2Nlc3NvciBmZWF0dXJlLiAqL1xuICAgIHB1YmxpYyBBV1NIZWFsdGhFdmVudFByb2Nlc3NvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0hlYWx0aEV2ZW50UHJvY2Vzc29yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBIZWFsdGggQXBpcyBhbmQgTm90aWZpY2F0aW9ucyBhbmQgdGhlIFBlcnNvbmFsIEhlYWx0aCBEYXNoYm9hcmQgKi9cbiAgICBwdWJsaWMgQVdTSGVhbHRoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NIZWFsdGhGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEhlYWx0aCBJbWFnaW5nIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0hlYWx0aEltYWdpbmdGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0hlYWx0aEltYWdpbmdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgSGVhbHRoIEltYWdpbmcgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTSGVhbHRoSW1hZ2luZ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0hlYWx0aEltYWdpbmdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBBV1MgSGVhbHRoSW1hZ2luZyB0byBtYW5hZ2Ugc2VydmljZSBvcGVyYXRpb25zIGFuZCBwdWJsaXNoIHNlcnZpY2UgbWV0cmljcyAqL1xuICAgIHB1YmxpYyBBV1NIZWFsdGhJbWFnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoSW1hZ2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogTWFuYWdlZCBQb2xpY3kgRm9yIEFtYXpvbiBIZWFsdGhPbWljcyBTZXJ2aWNlIExpbmtlZCBSb2xlICovXG4gICAgcHVibGljIEFXU0hlYWx0aE9taWNzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoT21pY3NTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBsaXN0IG9mIGFjdGlvbnMgdGhhdCBhcmUgYWxsb3dlZCBmb3Igcm9sZXMgYXNzdW1lZCB3aXRoIHRoZSBJQU0gSWRlbnRpdHkgQ2VudGVyIGlkZW50aXR5IGNvbnRleHQuIEFXUyBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChBV1MgU1RTKSBhdXRvbWF0aWNhbGx5IGF0dGFjaGVzIHRoaXMgcG9saWN5IHRvIGFzc3VtZWQgcm9sZXMuIFRoZSBpZGVudGl0eSBjb250ZXh0IGlzIHBhc3NlZCBhcyBQcm92aWRlZENvbnRleHQuICovXG4gICAgcHVibGljIEFXU0lBTUlkZW50aXR5Q2VudGVyQWxsb3dMaXN0Rm9ySWRlbnRpdHlDb250ZXh0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lBTUlkZW50aXR5Q2VudGVyQWxsb3dMaXN0Rm9ySWRlbnRpdHlDb250ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBJQU0gSWRlbnRpdHkgQ2VudGVyIHVzZXJzIGZyb20gYW4gZXh0ZXJuYWwgcHJvdmlkZXIuICovXG4gICAgcHVibGljIEFXU0lkZW50aXR5Q2VudGVyRXh0ZXJuYWxNYW5hZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lkZW50aXR5Q2VudGVyRXh0ZXJuYWxNYW5hZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHRoZSBJZGVudGl0eSBTeW5jIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTSWRlbnRpdHlTeW5jRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJZGVudGl0eVN5bmNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgSWRlbnRpdHkgU3luYyBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0lkZW50aXR5U3luY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lkZW50aXR5U3luY1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBJbWFnZSBCdWlsZGVyIGFjdGlvbnMgYW5kIHJlc291cmNlIHNjb3BlZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0ltYWdlQnVpbGRlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW1hZ2VCdWlsZGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIEFXUyBJbWFnZSBCdWlsZGVyIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ltYWdlQnVpbGRlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ltYWdlQnVpbGRlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRoZSBqb2JzIGNyZWF0ZWQgdW5kZXIgdGhlIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NJbXBvcnRFeHBvcnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ltcG9ydEV4cG9ydEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBqb2JzIGNyZWF0ZWQgdW5kZXIgdGhlIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NJbXBvcnRFeHBvcnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbXBvcnRFeHBvcnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBJbmNpZGVudCBNYW5hZ2VyIHBlcm1pc3Npb25zIHRvIGNhbGwgb3RoZXIgQVdTIHNlcnZpY2VzIGFzIGEgcGFydCBvZiBtYW5hZ2luZyBhbiBpbmNpZGVudC4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VySW5jaWRlbnRBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbmNpZGVudE1hbmFnZXJJbmNpZGVudEFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHN0YXJ0LCB2aWV3LCBhbmQgdXBkYXRlIGluY2lkZW50cyB3aXRoIGZ1bGwgYWNjZXNzIHRvIGN1c3RvbSB0aW1lbGluZSBldmVudHMgJiByZWxhdGVkIGl0ZW1zLiBBc3NpZ24gdGhpcyBwb2xpY3kgdG8gdXNlcnMgd2hvIHdpbGwgY3JlYXRlIGFuZCByZXNvbHZlIGluY2lkZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VyUmVzb2x2ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW5jaWRlbnRNYW5hZ2VyUmVzb2x2ZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgSW5jaWRlbnQgTWFuYWdlciBwZXJtaXNzaW9uIHRvIG1hbmFnZSBpbmNpZGVudCByZWNvcmRzIGFuZCByZWxhdGVkIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW5jaWRlbnRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBJb1QgQW5hbHl0aWNzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RBbmFseXRpY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEFuYWx5dGljc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElvVCBBbmFseXRpY3MuICovXG4gICAgcHVibGljIEFXU0lvVEFuYWx5dGljc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEFuYWx5dGljc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBJb1QgY29uZmlndXJhdGlvbiBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVENvbmZpZ0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RDb25maWdBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIGNvbmZpZ3VyYXRpb24gYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RDb25maWdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RDb25maWdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIG1lc3NhZ2luZyBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVERhdGFBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGF0YUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIGFjY2VzcyB0byBJb1QgdGhpbmcgZ3JvdXBzIGFuZCByZWFkIGFjY2VzcyB0byBJb1QgQ2VydGlmaWNhdGVzIGZvciBleGVjdXRpb24gb2YgQUREX1RISU5HU19UT19USElOR19HUk9VUCBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlckFkZFRoaW5nc1RvVGhpbmdHcm91cE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJBZGRUaGluZ3NUb1RoaW5nR3JvdXBNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhY2Nlc3MgZm9yIElvVCBhbmQgcmVsYXRlZCByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlRGVmZW5kZXJBdWRpdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlckF1ZGl0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciBlbmFibGluZyBJb1QgbG9nZ2luZyBmb3IgZXhlY3V0aW9uIG9mIEVOQUJMRV9JT1RfTE9HR0lORyBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlckVuYWJsZUlvVExvZ2dpbmdNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyRW5hYmxlSW9UTG9nZ2luZ01pdGlnYXRpb25BY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBtZXNzYWdlcyBwdWJsaXNoIGFjY2VzcyB0byBTTlMgdG9waWMgZm9yIGV4ZWN1dGlvbiBvZiBQVUJMSVNIX0ZJTkRJTkdfVE9fU05TIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyUHVibGlzaEZpbmRpbmdzVG9TTlNNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyUHVibGlzaEZpbmRpbmdzVG9TTlNNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIElvVCBwb2xpY2llcyBmb3IgZXhlY3V0aW9uIG9mIFJFUExBQ0VfREVGQVVMVF9QT0xJQ1lfVkVSU0lPTiBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlclJlcGxhY2VEZWZhdWx0UG9saWN5TWl0aWdhdGlvbkFjdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlclJlcGxhY2VEZWZhdWx0UG9saWN5TWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIGFjY2VzcyB0byBJb1QgQ0EgY2VydGlmaWNhdGVzIGZvciBleGVjdXRpb24gb2YgIFVQREFURV9DQV9DRVJUSUZJQ0FURSBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlclVwZGF0ZUNBQ2VydE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJVcGRhdGVDQUNlcnRNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIElvVCBjZXJ0aWZpY2F0ZXMgZm9yIGV4ZWN1dGlvbiBvZiBVUERBVEVfREVWSUNFX0NFUlRJRklDQVRFIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyVXBkYXRlRGV2aWNlQ2VydE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJVcGRhdGVEZXZpY2VDZXJ0TWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSW9UIERldmljZSBUZXN0ZXIgdG8gcnVuIHRoZSBGcmVlUlRPUyBxdWFsaWZpY2F0aW9uIHN1aXRlIGJ5IGFsbG93aW5nIGFjY2VzcyB0byBzZXJ2aWNlcyBpbmNsdWRpbmcgSW9ULCBTMywgYW5kIElBTSAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VUZXN0ZXJGb3JGcmVlUlRPU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlVGVzdGVyRm9yRnJlZVJUT1NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBJb1QgRGV2aWNlIFRlc3RlciB0byBydW4gdGhlIEFXUyBHcmVlbmdyYXNzIHF1YWxpZmljYXRpb24gc3VpdGUgYnkgYWxsb3dpbmcgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIExhbWJkYSwgSW9ULCBBUEkgR2F0ZXdheSwgSUFNICovXG4gICAgcHVibGljIEFXU0lvVERldmljZVRlc3RlckZvckdyZWVuZ3Jhc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZVRlc3RlckZvckdyZWVuZ3Jhc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW9UIEV2ZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTSW9URXZlbnRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RFdmVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJb1QgRXZlbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RFdmVudHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RFdmVudHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZlZGVyYXRpb24gYWNjZXNzIGZvciBJb1QgRmxlZXQgSHViIGFwcGxpY2F0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RGbGVldEh1YkZlZGVyYXRpb25BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URmxlZXRIdWJGZWRlcmF0aW9uQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFXUyBSZXNvdXJjZXMgYW5kIG1ldGFEYXRhIHVzZWQgb3IgbWFuYWdlZCBieSBBV1NJb1RGbGVldHdpc2UgZm9yIGF1eGlsaWFyeSBmZWF0dXJlcyAqL1xuICAgIHB1YmxpYyBBV1NJb1RGbGVldHdpc2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RGbGVldHdpc2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIGNvbmZpZ3VyYXRpb24gYW5kIG1lc3NhZ2luZyBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBjcmVhdGlvbiBvZiBBbWF6b24gQ2xvdWRXYXRjaCBMb2cgZ3JvdXBzIGFuZCBzdHJlYW1pbmcgbG9ncyB0byB0aGUgZ3JvdXBzICovXG4gICAgcHVibGljIEFXU0lvVExvZ2dpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UTG9nZ2luZyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZWQgaW50ZWdyYXRpb25zIGZvciBBV1MgSW9UIERldmljZSBNYW5hZ2VtZW50IGFuZCByZWxhdGVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1hbmFnZWQgaW50ZWdyYXRpb25zIGZvciBBV1MgSW9UIERldmljZSBNYW5hZ2VtZW50IHBlcm1pc3Npb24gdG8gcHVibGlzaCBsb2dzIGFuZCBtZXRyaWNzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gY3JlYXRlIEFXUyBJb1QgSm9iIGFuZCBkZXNjcmliZSB0aGUgQVdTIGNvZGUgc2lnbmVyIGpvYiAqL1xuICAgIHB1YmxpYyBBV1NJb1RPVEFVcGRhdGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UT1RBVXBkYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBhbGwgQVdTIHNlcnZpY2VzIHN1cHBvcnRlZCBpbiBBV1MgSW9UIFJ1bGUgQWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RSdWxlQWN0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RSdWxlQWN0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZSBBV1MgSW9UIFNpdGVXaXNlIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBjcmVhdGUgYW5kIGxpc3QgZGF0YSBzdG9yZXMgdXNlZCB3aXRoIEFXUyBJb1QgU2l0ZVdpc2UgKGUuZy4gQVdTIElvVCBBbmFseXRpY3MpLCBhY2Nlc3MgdG8gbGlzdCBhbmQgdmlldyBBV1MgSW9UIEdyZWVuZ3Jhc3MgcmVzb3VyY2VzLCBsaXN0IGFuZCBtb2RpZnkgQVdTIFNlY3JldHMgTWFuYWdlciBzZWNyZXRzLCByZXRyaWV2ZSBBV1MgSW9UIHRoaW5nIHNoYWRvd3MsIGxpc3QgcmVzb3VyY2VzIHdpdGggc3BlY2lmaWMgdGFncywgYW5kIGNyZWF0ZSBhbmQgdXNlIGEgc2VydmljZS1saW5rZWQgcm9sZSBmb3IgQVdTIElvVCBTaXRlV2lzZS4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW9UIFNpdGVXaXNlLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RTaXRlV2lzZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UU2l0ZVdpc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGFjY2VzcyBBV1MgSW9UIFNpdGVXaXNlIGFzc2V0cyBhbmQgYXNzZXQgZGF0YSwgY3JlYXRlIEFXUyBJb1QgU2l0ZVdpc2UgTW9uaXRvciByZXNvdXJjZXMsIGFuZCBsaXN0IEFXUyBTU08gdXNlcnMuICovXG4gICAgcHVibGljIEFXU0lvVFNpdGVXaXNlTW9uaXRvclBvcnRhbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZU1vbml0b3JQb3J0YWxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHJvbGUgZ3JhbnRzIEFXUyBJb1QgU2l0ZVdpc2UgbW9uaXRvciBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgeW91ciBBV1MgSW9UIFNpdGVXaXNlIGFzc2V0cyAmIGFzc2V0IHByb3BlcnRpZXMsIGFuZCBjcmVhdGUgQVdTIElvVCBTaXRld2lzZSBwcm9qZWN0cywgZGFzaGJvYXJkcyAmIGFjY2VzcyBwb2xpY2llcyB0aHJvdWdoIEFXUyBJb1QgU2l0ZVdpc2UgcG9ydGFscy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VNb25pdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UU2l0ZVdpc2VNb25pdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElvVCBTaXRlV2lzZS4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHVzZXJzIHRvIHJlZ2lzdGVyIHRoaW5ncyBhdCBidWxrIHVzaW5nIEFXUyBJb1QgU3RhcnRUaGluZ1JlZ2lzdHJhdGlvblRhc2sgQVBJICovXG4gICAgcHVibGljIEFXU0lvVFRoaW5nc1JlZ2lzdHJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RUaGluZ3NSZWdpc3RyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElvVCBUd2luTWFrZXIgdG8gY2FsbCBvdGhlciBBV1Mgc2VydmljZXMgYW5kIHRvIHN5bmMgdGhlaXIgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RUd2luTWFrZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RUd2luTWFrZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSBkYXRhIGFjY2VzcyB0byBBV1MgSW9UIFdpcmVsZXNzIGRldmljZXMuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzRGF0YUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RXaXJlbGVzc0RhdGFBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGFzc29jaWF0ZWQgaWRlbnRpdHkgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBJb1QgV2lyZWxlc3Mgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIElvVCBXaXJlbGVzcyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIHRvIElvVCBSdWxlcyBFbmdpbmUgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzRnVsbFB1Ymxpc2hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NGdWxsUHVibGlzaEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSBhY2Nlc3MgdG8gY3JlYXRlLCBsaXN0IGFuZCBkZXNjcmliZSBJb1QgQ2VydGlmaWNhdGVzICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzR2F0ZXdheUNlcnRNYW5hZ2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzR2F0ZXdheUNlcnRNYW5hZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBhc3NvY2lhdGVkIGlkZW50aXR5IHRvIGNyZWF0ZSBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzIGdyb3VwcyBhbmQgc3RyZWFtIGxvZ3MgdG8gdGhlIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NMb2dnaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzTG9nZ2luZyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBJb1Qgd2lyZWxlc3MuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgSVAgQWRkcmVzcyBNYW5hZ2VyIHRvIGFjY2VzcyBWUEMgcmVzb3VyY2VzIGFuZCBpbnRlZ3JhdGUgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSVBBTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lQQU1TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFVzZWQgYnkgQVdTIElRIHRvIGV4ZWN1dGUgcGF5bWVudCByZXF1ZXN0cyBvbiBiZWhhbGYgb2YgYSBjdXN0b21lciAqL1xuICAgIHB1YmxpYyBBV1NJUUNvbnRyYWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSVFDb250cmFjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIElRICovXG4gICAgcHVibGljIEFXU0lRRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJUUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElRIHRvIG1hbmFnZSB0aGUgcm9sZSBhc3N1bWVkIGJ5IEFXUyBJUSBleHBlcnRzLiAqL1xuICAgIHB1YmxpYyBBV1NJUVBlcm1pc3Npb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJUVBlcm1pc3Npb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBBV1MgS01TIGN1c3RvbSBrZXkgc3RvcmVzICovXG4gICAgcHVibGljIEFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlQ3VzdG9tS2V5U3RvcmVzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VDdXN0b21LZXlTdG9yZXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgQVdTIEtNUyB0byBzeW5jaHJvbml6ZSB0aGUgc2hhcmVkIHByb3BlcnRpZXMgb2YgbXVsdGktUmVnaW9uIGtleXMuICovXG4gICAgcHVibGljIEFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlTXVsdGlSZWdpb25LZXlzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VNdWx0aVJlZ2lvbktleXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKS4gKi9cbiAgICBwdWJsaWMgQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VQb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VQb3dlclVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjcm9zcyBhY2NvdW50IGFjY2VzcyB0byBHbHVlIHJlc291cmNlcyB2aWEgTGFrZSBGb3JtYXRpb24uIEFsc28gZ3JhbnRzIHJlYWQgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHN1Y2ggYXMgb3JnYW5pemF0aW9ucyBhbmQgcmVzb3VyY2UgYWNjZXNzIG1hbmFnZXIgKi9cbiAgICBwdWJsaWMgQVdTTGFrZUZvcm1hdGlvbkNyb3NzQWNjb3VudE1hbmFnZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFrZUZvcm1hdGlvbkNyb3NzQWNjb3VudE1hbmFnZXIpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFXUyBMYWtlIEZvcm1hdGlvbiBhbmQgcmVsYXRlZCBzZXJ2aWNlcywgc3VjaCBhcyBBV1MgR2x1ZSwgdG8gbWFuYWdlIGRhdGEgbGFrZXMgKi9cbiAgICBwdWJsaWMgQVdTTGFrZUZvcm1hdGlvbkRhdGFBZG1pbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYWtlRm9ybWF0aW9uRGF0YUFkbWluKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBMYW1iZGEgc2VydmljZSwgQVdTIExhbWJkYSBjb25zb2xlIGZlYXR1cmVzLCBhbmQgb3RoZXIgcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBMYW1iZGEgc2VydmljZSwgQVdTIExhbWJkYSBjb25zb2xlIGZlYXR1cmVzLCBhbmQgb3RoZXIgcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzIGFuZCByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHRvIGR1cmFibGUgZXhlY3V0aW9uIEFQSXMgdXNlZCBieSBMYW1iZGEgZHVyYWJsZSBmdW5jdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhQmFzaWNEdXJhYmxlRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGlzdCBhbmQgcmVhZCBhY2Nlc3MgdG8gRHluYW1vREIgc3RyZWFtcyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBsb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFEeW5hbW9EQkV4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRHluYW1vREJFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWluaW11bSBwZXJtaXNzaW9ucyBmb3IgYSBMYW1iZGEgZnVuY3Rpb24gdG8gbWFuYWdlIEVOSXMgKGNyZWF0ZSwgZGVzY3JpYmUsIGRlbGV0ZSkgdXNlZCBieSBhIFZQQy1lbmFibGVkIExhbWJkYSBGdW5jdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhRU5JTWFuYWdlbWVudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFFTklNYW5hZ2VtZW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgUHV0LCBHZXQgYWNjZXNzIHRvIFMzIGFuZCBmdWxsIGFjY2VzcyB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUV4ZWN1dGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRXhlY3V0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIHRvIER5bmFtb0RCIFN0cmVhbXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUludm9jYXRpb25EeW5hbW9EQigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFJbnZvY2F0aW9uRHluYW1vREIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaXN0IGFuZCByZWFkIGFjY2VzcyB0byBLaW5lc2lzIHN0cmVhbXMgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggbG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhS2luZXNpc0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhS2luZXNpc0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdG8gY3JlYXRlIGFuZCBhZG1pbmlzdGVyIEVDMiByZXNvdXJjZXMgbWFuYWdlZCBieSB0aGUgTGFtYmRhIE1hbmFnZWQgSW5zdGFuY2VzLCBhbmQgZGVzY3JpcHRpdmUgcGVybWlzc2lvbnMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYU1hbmFnZWRFQzJSZXNvdXJjZU9wZXJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYU1hbmFnZWRFQzJSZXNvdXJjZU9wZXJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gYWNjZXNzIE1TSyBDbHVzdGVyIHdpdGhpbiBhIFZQQywgbWFuYWdlIEVOSXMgKGNyZWF0ZSwgZGVzY3JpYmUsIGRlbGV0ZSkgaW4gdGhlIFZQQyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFNU0tFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYU1TS0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgTGFtYmRhIFJlcGxpY2F0b3IgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIHJlcGxpY2F0ZSBmdW5jdGlvbnMgYWNyb3NzIHJlZ2lvbnMgKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhUmVwbGljYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFSZXBsaWNhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFXUyBMYW1iZGEgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTGFtYmRhIHRvIGRlc2NyaWJlIGFuZCB0ZXJtaW5hdGUgbWFuYWdlZCBpbnN0YW5jZXMgZnJvbSBFQzIgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVjZWl2ZSBtZXNzYWdlLCBkZWxldGUgbWVzc2FnZSwgYW5kIHJlYWQgYXR0cmlidXRlIGFjY2VzcyB0byBTUVMgcXVldWVzLCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBsb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFTUVNRdWV1ZUV4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhU1FTUXVldWVFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWluaW11bSBwZXJtaXNzaW9ucyBmb3IgYSBMYW1iZGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGlsZSBhY2Nlc3NpbmcgYSByZXNvdXJjZSB3aXRoaW4gYSBWUEMgLSBjcmVhdGUsIGRlc2NyaWJlLCBkZWxldGUgbmV0d29yayBpbnRlcmZhY2VzIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhVlBDQWNjZXNzRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbG93IGFjY2VzcyB0byB0aGUgQVdTIExpY2Vuc2UgTWFuYWdlciBBUEkgYWN0aW9ucyByZXF1aXJlZCB0byBjb25zdW1lIHVwb24gbGljZW5zZXMgdGhhdCB0aGUgdXNlciBoYXMgZW50aXRsZW1lbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlckNvbnN1bXB0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyQ29uc3VtcHRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExpY2Vuc2UgTWFuYWdlciBMaW51eCBTdWJzY3JpcHRpb25zIFNlcnZpY2UgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTGljZW5zZU1hbmFnZXJMaW51eFN1YnNjcmlwdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMaWNlbnNlTWFuYWdlckxpbnV4U3Vic2NyaXB0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIExpY2Vuc2UgTWFuYWdlciBzZXJ2aWNlIG1hc3RlciBhY2NvdW50IHJvbGUgcG9saWN5ICovXG4gICAgcHVibGljIEFXU0xpY2Vuc2VNYW5hZ2VyTWFzdGVyQWNjb3VudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGljZW5zZU1hbmFnZXJNYXN0ZXJBY2NvdW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBMaWNlbnNlIE1hbmFnZXIgc2VydmljZSBtZW1iZXIgYWNjb3VudCByb2xlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlck1lbWJlckFjY291bnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyTWVtYmVyQWNjb3VudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTGljZW5zZSBNYW5hZ2VyIHNlcnZpY2UgZGVmYXVsdCByb2xlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExpY2Vuc2UgTWFuYWdlciBVc2VyIFN1YnNjcmlwdGlvbnMgU2VydmljZSB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlclVzZXJTdWJzY3JpcHRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGljZW5zZU1hbmFnZXJVc2VyU3Vic2NyaXB0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNMiB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTTJTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU00yU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFuYWdlZCBTZXJ2aWNlcyB0byByZWFkIHRoZSB2YWx1ZXMgb2YgdGhlIHRhZ3Mgb24gQVdTIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNDb250YWN0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRTZXJ2aWNlc0NvbnRhY3RzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTWFuYWdlZCBTZXJ2aWNlcyAtIHBvbGljeSB0byBtYW5hZ2UgZGV0ZWN0aXZlIGNvbnRyb2xzIGluZnJhc3RydWN0dXJlICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXJ2aWNlc0RldGVjdGl2ZUNvbnRyb2xzQ29uZmlnU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZFNlcnZpY2VzRGV0ZWN0aXZlQ29udHJvbHNDb25maWdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBNYW5hZ2VkIFNlcnZpY2VzIHBvbGljeSB0byBlbmFibGUgQU1TIGV2ZW50IHByb2Nlc3NvciBmZWF0dXJlLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24ncyBBV1MgTWFuYWdlZCBTZXJ2aWNlJ3MgU2VsZiBTZXJ2aWNlIFJlcG9ydGluZyBmZWF0dXJlIHRvIHJlYWQgQVdTIE9yZ2FuaXphdGlvbiBkYXRhIG9uIHlvdXIgYmVoYWxmIHRvIGVuYWJsZSBvcmdhbml6YXRpb24gbGV2ZWwgYWdncmVnYXRlZCByZXBvcnRpbmcgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZFNlcnZpY2VzU2VsZlNlcnZpY2VSZXBvcnRpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNTZWxmU2VydmljZVJlcG9ydGluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNYW5hZ2VkIFNlcnZpY2VzIHRvIG1hbmFnZSBkZXBsb3ltZW50IHRvb2xraXQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXJ2aWNlc0RlcGxveW1lbnRUb29sa2l0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRTZXJ2aWNlc0RlcGxveW1lbnRUb29sa2l0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gY29uZmlndXJlIGFuZCBjdXN0b21pemUgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlbWVudENvbnNvbGVBZG1pbmlzdHJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZW1lbnRDb25zb2xlQWRtaW5pc3RyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2Nlc3MgdG8gZXNzZW50aWFsIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgZmVhdHVyZXMgYW5kIHVzZXIgZXhwZXJpZW5jZSAoVVgpIGNhcGFiaWxpdGllcyBmb3Igbm9uLWFkbWluaXN0cmF0aXZlIHVzZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VtZW50Q29uc29sZUJhc2ljVXNlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VtZW50Q29uc29sZUJhc2ljVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFya2V0cGxhY2UgdG8gY29weSB5b3VyIEFtYXpvbiBNYWNoaW5lIEltYWdlcyAoQU1JcykgaW4gb3JkZXIgdG8gbGlzdCB0aGVtIG9uIEFXUyBNYXJrZXRwbGFjZSAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZUFtaUluZ2VzdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZUFtaUluZ2VzdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFya2V0cGxhY2UgdG8gY3JlYXRlIGFuZCBtYW5hZ2Ugc2VsbGVyIGRlcGxveW1lbnQgcGFyYW1ldGVycyBmb3IgdGhlIHByb2R1Y3RzIHRoYXQgeW91IHN1YnNjcmliZSB0byBvbiBBV1MgTWFya2V0cGxhY2UuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlRGVwbG95bWVudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlRGVwbG95bWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gc3Vic2NyaWJlIGFuZCB1bnN1YnNjcmliZSB0byBBV1MgTWFya2V0cGxhY2Ugc29mdHdhcmUsIGFsbG93cyB1c2VycyB0byBtYW5hZ2UgTWFya2V0cGxhY2Ugc29mdHdhcmUgaW5zdGFuY2VzIGZyb20gdGhlIE1hcmtldHBsYWNlICdZb3VyIFNvZnR3YXJlJyBwYWdlLCBhbmQgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEVDMi4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIHRvIEFXUyBNYXJrZXRwbGFjZSBFbnRpdGxlbWVudHMgKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VHZXRFbnRpdGxlbWVudHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VHZXRFbnRpdGxlbWVudHMpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1hcmtldHBsYWNlIGZvciBsaWNlbnNlIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlTGljZW5zZU1hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZUxpY2Vuc2VNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzdWJzY3JpYmUgYW5kIHVuc3Vic2NyaWJlIHRvIEFXUyBNYXJrZXRwbGFjZSBzb2Z0d2FyZSAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZU1hbmFnZVN1YnNjcmlwdGlvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VNYW5hZ2VTdWJzY3JpcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1ldGVyaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZU1ldGVyaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZU1ldGVyaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIHJlZ2lzdGVyIGEgcmVzb3VyY2UgYW5kIHRyYWNrIHVzYWdlIHRocm91Z2ggQVdTIE1hcmtldHBsYWNlIE1ldGVyaW5nIFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlTWV0ZXJpbmdSZWdpc3RlclVzYWdlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlTWV0ZXJpbmdSZWdpc3RlclVzYWdlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgZm9yIGFuIEFXUyBNYXJrZXRwbGFjZSBlUHJvY3VyZW1lbnQgaW50ZWdyYXRpb24uICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlUHJvY3VyZW1lbnRTeXN0ZW1BZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VQcm9jdXJlbWVudFN5c3RlbUFkbWluRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIGZvciBBV1MgTWFya2V0cGxhY2Ugc2VydmljZXMgdG8gcHVyY2hhc2Ugb3JkZXIgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VQdXJjaGFzZU9yZGVyc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUHVyY2hhc2VPcmRlcnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHJldmlldyBBV1MgTWFya2V0cGxhY2Ugc3Vic2NyaXB0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1hcmtldHBsYWNlIGZvciBSZXNhbGUgQXV0aG9yaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VSZXNhbGVBdXRob3JpemF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VSZXNhbGVBdXRob3JpemF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgc2VsbGVyIG9wZXJhdGlvbnMgb24gdGhlIEFXUyBNYXJrZXRwbGFjZSBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQU1JIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlU2VsbGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBzZWxsZXJzIGFjY2VzcyB0byBPZmZlcnMgYW5kIEFncmVlbWVudHMgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVNlbGxlck9mZmVyTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlck9mZmVyTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHNlbGxlcnMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1hbmFnZW1lbnQgUHJvZHVjdHMgcGFnZSBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQU1JIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBzZWxsZXJzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1hbmFnZW1lbnQgUHJvZHVjdHMgcGFnZS4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VTZWxsZXJQcm9kdWN0c1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBNQ1Agc2VydmljZSBhY3Rpb25zLiBUaGlzIHBvbGljeSBkb2VzIG5vdCBncmFudCBhY2Nlc3MgdG8gdGhlIGFjdGlvbnMgdGFrZW4gYnkgdGhlIE1DUCwgb25seSB0aGUgTUNQIGFjdGlvbnMgdGhlbXNlbHZlcy4gKi9cbiAgICBwdWJsaWMgQVdTTWNwU2VydmljZUFjdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01jcFNlcnZpY2VBY3Rpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBkZWZhdWx0IHBvbGljeSB0aGF0IGVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBNZWRpYUNvbm5lY3QuICovXG4gICAgcHVibGljIEFXU01lZGlhQ29ubmVjdFNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWVkaWFDb25uZWN0U2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBNZWRpYUxpdmUgQW55d2hlcmUgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTWVkaWFMaXZlQW55d2hlcmVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNZWRpYUxpdmVBbnl3aGVyZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBNZWRpYVRhaWxvciAqL1xuICAgIHB1YmxpYyBBV1NNZWRpYVRhaWxvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01lZGlhVGFpbG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgYWxsb3dzIEFXU01pZ3JhdGlvbkh1YlNlcnZpY2UgdG8gY2FsbCBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeVNlcnZpY2Ugb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViRGlzY292ZXJ5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YkRpc2NvdmVyeUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgRGF0YWJhc2UgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJETVNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViRE1TQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogTWFuYWdlZCBwb2xpY3kgdG8gcHJvdmlkZSB0aGUgY3VzdG9tZXIgYWNjZXNzIHRvIHRoZSBNaWdyYXRpb24gSHViIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gQVdTIE1pZ3JhdGlvbiBIdWIsIEFXUyBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSwgQW1hem9uIFNpbXBsZSBTdG9yYWdlIFNlcnZpY2UgYW5kIEFXUyBTZWNyZXRzIE1hbmFnZXIuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNaWdyYXRpb24gSHViIE9yY2hlc3RyYXRvciBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IG5lZWRzIHRvIGJlIGF0dGFjaGVkIGZvciBTQVAgYW5kIE1HTiBtaWdyYXRlZCBpbnN0YW5jZSBmb3Igb3VyIHNlcnZpY2UgdG8gb3JjaGVzdHJhdGUgaW5zdGFuY2VzIGJ5IGRvd25sb2FkaW5nIHNjcmlwdHMgZnJvbSBTMyBhbmQgdG8gZmV0Y2ggc2VjcmV0IHZhbHVlcyBpbnNpZGUgRUMyIGluc3RhbmNlLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JJbnN0YW5jZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9ySW5zdGFuY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gQW1hem9uIFNpbXBsZSBTdG9yYWdlIFNlcnZpY2UsIEFXUyBTZWNyZXRzIE1hbmFnZXIgYW5kIFBsdWdpbiByZWxhdGVkIGFjdGlvbnMgZm9yIEFXUyBNaWdyYXRpb24gSHViIE9yY2hlc3RyYXRvci4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9yUGx1Z2luKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvclBsdWdpbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgTWlncmF0aW9uIEh1YiBPcmNoZXN0cmF0b3IgdG8gbWlncmF0ZSBhbmQgbW9kZXJuaXplIHlvdXIgb24tcHJlbWlzZXMgd29ya2xvYWRzICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNaWdyYXRpb24gSHViIFJlZmFjdG9yIFNwYWNlcyBhbmQgb3RoZXIgQVdTIHJlbGF0ZWQgc2VydmljZXMgZXhjZXB0IEFXUyBUcmFuc2l0IEdhdGV3YXkgYW5kIEVDMiBzZWN1cml0eSBncm91cHMgbm90IHJlcXVpcmVkIHdoZW4gdXNpbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgYSBuZXR3b3JrIGJyaWRnZS4gVGhpcyBwb2xpY3kgYWxzbyBleGNsdWRlcyBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgQVdTIExhbWJkYSBhbmQgQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyIGFzIHRoZXkgY2FuIGJlIHNjb3BlZCBkb3duIGJhc2VkIG9uIHRhZ3MuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzRW52aXJvbm1lbnRzV2l0aG91dEJyaWRnZXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzRW52aXJvbm1lbnRzV2l0aG91dEJyaWRnZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVXNlIGluIHRoZSBJQU0gc2VydmljZSByb2xlIHBhc3NlZCB0byB0aGUgU1NNIEF1dG9tYXRpb24gZG9jdW1lbnQgQVdTUmVmYWN0b3JTcGFjZXMtQ3JlYXRlUmVzb3VyY2VzIHRvIGdyYW50IHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHJ1biB0aGUgYXV0b21hdGlvbi4gVGhlIHBvbGljeSBncmFudHMgcmVhZC93cml0ZSBhY2Nlc3MgdG8gRUMyIHRhZ3MgaW4gb3JkZXIgdG8gdHJhY2sgYXV0b21hdGlvbiBwcm9ncmVzcy4gV2hlbiB0aGUgUmVmYWN0b3IgU3BhY2VzIGVudmlyb25tZW50J3MgbmV0d29yayBicmlkZ2UgaXMgZW5hYmxlZCwgdGhlIGF1dG9tYXRpb24gYWxzbyBhZGRzIHRoZSBlbnZpcm9ubWVudCdzIHNlY3VyaXR5IGdyb3VwIHRvIHRoZSBFQzIgaW5zdGFuY2UgdG8gcGVybWl0IHRyYWZmaWMgZnJvbSBvdGhlciBSZWZhY3RvciBTcGFjZXMgc2VydmljZXMgaW4gdGhlIGVudmlyb25tZW50LiBUaGUgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byB0aGUgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UncyBwb3N0IGxhdW5jaCBhY3Rpb25zIFNTTSBwYXJhbWV0ZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc1NTTUF1dG9tYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNTU01BdXRvbWF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNaWdyYXRpb25IdWIgUmVmYWN0b3IgU3BhY2VzLCBBV1MgTWlncmF0aW9uSHViIFJlZmFjdG9yIFNwYWNlcyBjb25zb2xlIGZlYXR1cmVzIGFuZCBvdGhlciByZWxhdGVkIEFXUyBzZXJ2aWNlcyBleGNlcHQgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIEFXUyBMYW1iZGEgYW5kIEFXUyBSZXNvdXJjZSBBY2Nlc3MgTWFuYWdlciBhcyB0aGV5IGNhbiBiZSBzY29wZWQgZG93biBiYXNlZCBvbiB0YWdzLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IEFXUyBNaWdyYXRpb24gSHViIFJlZmFjdG9yIFNwYWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJTTVNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViU01TQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIGFsbG93IGNvbW11bmljYXRpb24gd2l0aCB0aGUgQVdTIE1pZ3JhdGlvbiBIdWIgU3RyYXRlZ3kgUmVjb21tZW5kYXRpb25zIHNlcnZpY2UsIHJlYWQvd3JpdGUgYWNjZXNzIHRvIFMzIGJ1Y2tldHMgcmVsYXRlZCB0byB0aGUgc2VydmljZSwgQW1hem9uIEFQSSBHYXRld2F5IGFjY2VzcyB0byB1cGxvYWQgbG9ncyBhbmQgbWV0cmljcyB0byBBV1MsIEFXUyBTZWNyZXRzIE1hbmFnZXIgYWNjZXNzIHRvIGZldGNoIGNyZWRlbnRpYWxzLCBhbmQgYW55IHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5Q29sbGVjdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5Q29sbGVjdG9yKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgTWlncmF0aW9uIEh1YiBTdHJhdGVneSBSZWNvbW1lbmRhdGlvbnMgc2VydmljZSBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIHNlcnZpY2VzIHRocm91Z2ggdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5Q29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZSBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1pZ3JhdGlvbiBIdWIgU3RyYXRlZ3kgUmVjb21tZW5kYXRpb25zIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBbWF6b24gTVNLIFJlcGxpY2F0b3IgdG8gcmVwbGljYXRlIGRhdGEgYmV0d2VlbiBNU0sgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFXU01TS1JlcGxpY2F0b3JFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01TS1JlcGxpY2F0b3JFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIFZQQyByZXNvdXJjZXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIE5BVCBHYXRld2F5cy4gKi9cbiAgICBwdWJsaWMgQVdTTkFUR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05BVEdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgTmV0d29yayBGaXJld2FsbCBzZXJ2aWNlLCBpbmNsdWRpbmcgcGVybWlzc2lvbnMgdG8gY3JlYXRlLCBjb25maWd1cmUsIG1hbmFnZSwgYW5kIGRlbGV0ZSBmaXJld2FsbCByZXNvdXJjZXMsIHBvbGljaWVzLCBhbmQgcnVsZSBncm91cHMuIEFkZGl0aW9uYWxseSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBtb2RpZnkgVlBDIGVuZHBvaW50cywgUzMgYnVja2V0IHBvbGljaWVzLCBDbG91ZFdhdGNoIExvZ3MgY29uZmlndXJhdGlvbnMsIGFuZCBjcmVhdGUgc2VydmljZS1saW5rZWQgcm9sZXMgZm9yIE5ldHdvcmsgRmlyZXdhbGwgYW5kIGxvZyBkZWxpdmVyeSBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrRmlyZXdhbGxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtGaXJld2FsbEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBOZXR3b3JrIEZpcmV3YWxsIHJlc291cmNlcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUsIENMSSwgYW5kIFNES3MuIFRoaXMgcG9saWN5IGFsbG93cyB1c2VycyB0byB2aWV3IGFuZCBtb25pdG9yIGZpcmV3YWxsIGNvbmZpZ3VyYXRpb25zLCBwb2xpY2llcywgcnVsZSBncm91cHMsIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcywgd2l0aG91dCB0aGUgYWJpbGl0eSB0byBtYWtlIGNoYW5nZXMuICovXG4gICAgcHVibGljIEFXU05ldHdvcmtGaXJld2FsbFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtGaXJld2FsbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQVdTTmV0d29ya0ZpcmV3YWxsIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIG5lY2Vzc2FyeSByZXNvdXJjZXMgZm9yIHlvdXIgRmlyZXdhbGxzLiAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrRmlyZXdhbGxTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrRmlyZXdhbGxTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IE5ldHdvcmtNYW5hZ2VyIHRvIGFjY2VzcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHlvdXIgQ29yZSBOZXR3b3JrICovXG4gICAgcHVibGljIEFXU05ldHdvcmtNYW5hZ2VyQ2xvdWRXQU5TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrTWFuYWdlckNsb3VkV0FOU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTmV0d29ya01hbmFnZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrTWFuYWdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya01hbmFnZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTmV0d29ya01hbmFnZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrTWFuYWdlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtNYW5hZ2VyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBOZXR3b3JrTWFuYWdlciB0byBhY2Nlc3MgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB5b3VyIEdsb2JhbCBOZXR3b3JrcyAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlLWxpbmtlZCByb2xlIHBlcm1pc3Npb25zIGZvciBDbG91ZFdhdGNoIExvZ3MgY2VudHJhbGl6YXRpb24gKi9cbiAgICBwdWJsaWMgQVdTT2JzZXJ2YWJpbGl0eUFkbWluTG9nc0NlbnRyYWxpemF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT2JzZXJ2YWJpbGl0eUFkbWluTG9nc0NlbnRyYWxpemF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIEFXUyBDb25maWcgQ29uZmlndXJhdGlvbiBSZWNvcmRlciwgbWFuYWdlIEFXUyBDb25maWcgQ29uZmlndXJhdGlvbiBBZ2dyZWdhdG9yLCBjcmVhdGUgQVdTIENvbmZpZyBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBDb25maWd1cmF0aW9uIFJlY29yZGVyIGZ1bmN0aW9uYWxpdHksIGNvbnN1bWUgcmVjb3JkZXIgY29uZmlndXJhdGlvbiBkYXRhLCBhbmQgcmVhZCBBV1MgT3JnYW5pemF0aW9ucyBkYXRhIGZvciBvcmdhbml6YXRpb25hbCBmZWF0dXJlcy4gKi9cbiAgICBwdWJsaWMgQVdTT2JzZXJ2YWJpbGl0eUFkbWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT2JzZXJ2YWJpbGl0eUFkbWluU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIEFXUyBDb25maWcgcmVjb3JkZXIgcmVzb3VyY2UgYW5kIHRlbGVtZXRyeSBzZXR0aW5ncyBvbiBBV1MgcmVzb3VyY2VzIGluY2x1ZGluZyBsb2dzLCBtZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBBV1NPYnNlcnZhYmlsaXR5QWRtaW5UZWxlbWV0cnlFbmFibGVtZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT2JzZXJ2YWJpbGl0eUFkbWluVGVsZW1ldHJ5RW5hYmxlbWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIE9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFXU09yZ2FuaXphdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09yZ2FuaXphdGlvbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgT3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTT3JnYW5pemF0aW9uc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09yZ2FuaXphdGlvbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgcG9saWN5IHRvIGFsbG93IEFXUyBPcmdhbml6YXRpb25zIHRvIHNoYXJlIHRydXN0IHdpdGggb3RoZXIgYXBwcm92ZWQgQVdTIFNlcnZpY2VzIGZvciB0aGUgcHVycG9zZSBvZiBzaW1wbGlmeWluZyBjdXN0b21lciBjb25maWd1cmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NPcmdhbml6YXRpb25zU2VydmljZVRydXN0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09yZ2FuaXphdGlvbnNTZXJ2aWNlVHJ1c3RQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyB5b3UgdG8gaW5zdGFsbCBhbiBPdXRwb3N0IHNlcnZlciBvbiB5b3VyIG9uLXByZW1pc2VzIG5ldHdvcmsuICovXG4gICAgcHVibGljIEFXU091dHBvc3RzQXV0aG9yaXplU2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU091dHBvc3RzQXV0aG9yaXplU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBMaW5rZWQgUm9sZSBwb2xpY3kgdG8gZW5hYmxlIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG1hbmFnZWQgYnkgQVdTIE91dHBvc3RzICovXG4gICAgcHVibGljIEFXU091dHBvc3RzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT3V0cG9zdHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSW9UIHNvZnR3YXJlIG9uIGFuIEFXUyBQYW5vcmFtYSBBcHBsaWFuY2UgdG8gdXBsb2FkIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hQXBwbGlhbmNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYUFwcGxpYW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYW4gQVdTIFBhbm9yYW1hIEFwcGxpYW5jZSB0byB1cGxvYWQgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCwgYW5kIHRvIGdldCBvYmplY3RzIGZyb20gQW1hem9uIFMzIGFjY2VzcyBwb2ludHMgY3JlYXRlZCBmb3IgdXNlIHdpdGggQVdTIFBhbm9yYW1hLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYUFwcGxpYW5jZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hQXBwbGlhbmNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUGFub3JhbWEgKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIG9uIGFuIEFXUyBQYW5vcmFtYSBBcHBsaWFuY2UgdG8gbWFuYWdlIHJlc291cmNlcyBpbiBQYW5vcmFtYSwgdXBsb2FkIGxvZ3MgYW5kIG1ldHJpY3MgdG8gQW1hem9uIENsb3VkV2F0Y2gsIGFuZCB0byBtYW5hZ2Ugb2JqZWN0cyBpbiBidWNrZXRzIGNyZWF0ZWQgZm9yIHVzZSB3aXRoIFBhbm9yYW1hLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYUdyZWVuZ3Jhc3NHcm91cFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFHcmVlbmdyYXNzR3JvdXBSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBTYWdlTWFrZXIgdG8gbWFuYWdlIG9iamVjdHMgaW4gYnVja2V0cyBjcmVhdGVkIGZvciB1c2Ugd2l0aCBBV1MgUGFub3JhbWEuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hU2FnZU1ha2VyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYVNhZ2VNYWtlclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFBhbm9yYW1hIHRvIG1hbmFnZSByZXNvdXJjZXMgaW4gQVdTIElvVCwgQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgQVdTIFBhbm9yYW1hLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYVNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFBhbm9yYW1hIHRvIG1hbmFnZSByZXNvdXJjZXMgaW4gQW1hem9uIFMzLCBBV1MgSW9ULCBBV1MgSW9UIEdyZWVuR3Jhc3MsIEFXUyBMYW1iZGEsIEFtYXpvbiBTYWdlTWFrZXIsIGFuZCBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzLCBhbmQgdG8gcGFzcyBzZXJ2aWNlIHJvbGVzIHRvIEFXUyBJb1QsIEFXUyBJb1QgR3JlZW5HcmFzcywgYW5kIEFtYXpvbiBTYWdlTWFrZXIuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG5lY2Vzc2FyeSBhY2Nlc3MgZm9yIGNoYW5uZWwgaGFuZHNoYWtlIGFwcHJvdmFsIG1hbmFnZW1lbnQgYWN0aXZpdGllcy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lckNlbnRyYWxDaGFubmVsSGFuZHNoYWtlQXBwcm92YWxNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsQ2hhbm5lbEhhbmRzaGFrZUFwcHJvdmFsTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG5lY2Vzc2FyeSBhY2Nlc3MgZm9yIGNoYW5uZWwgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbENoYW5uZWxNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsQ2hhbm5lbE1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUGFydG5lciBDZW50cmFsIGFuZCByZWxhdGVkIEFXUyBTZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lckNlbnRyYWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG5lY2Vzc2FyeSBhY2Nlc3MgZm9yIG1hcmtldGluZyBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbE1hcmtldGluZ01hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxNYXJrZXRpbmdNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbmVjZXNzYXJ5IGFjY2VzcyBmb3Igb3Bwb3J0dW5pdHkgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbE9wcG9ydHVuaXR5TWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYXJ0bmVyQ2VudHJhbE9wcG9ydHVuaXR5TWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG5lY2Vzc2FyeSBhY2Nlc3MgZm9yIGRldmVsb3BlciB0ZXN0aW5nIGluIHRoZSBTYW5kYm94IGNhdGFsb2cuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsU2FuZGJveEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxTYW5kYm94RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgUmVzb3VyY2VTbmFwc2hvdEpvYiB0byByZWFkIGEgcmVzb3VyY2UgYW5kIHNuYXBzaG90IGl0IGluIHRoZSB0YXJnZXQgZW5nYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lckNlbnRyYWxTZWxsaW5nUmVzb3VyY2VTbmFwc2hvdEpvYkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxTZWxsaW5nUmVzb3VyY2VTbmFwc2hvdEpvYkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBjYW4gYmUgdXNlZCB0byBncmFudCByZWFkLW9ubHkgYWNjZXNzIHRvIEFQSXMgdGhhdCBjYW4gcmVhZCBzZXJ2aWNlIG1ldGFkYXRhIGZvciBzZXJ2aWNlcyBpbiB5b3VyIEFXUyBhY2NvdW50LiBZb3UgY2FuIHVzZSB0aGlzIHBvbGljeSB0byBwcm92aWRlIHlvdXIgcGFydG5lcnMgaW4gdGhlIFBhcnRuZXItTGVkIFN1cHBvcnQgUHJvZ3JhbSB3aXRoIGFjY2VzcyB0byB0aGUgc2VydmljZXMgc3BlY2lmaWVkIGluIHRoZSBwZXJtaXNzaW9ucyBkZXRhaWxzIHNlY3Rpb24gYmVsb3cuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJMZWRTdXBwb3J0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckxlZFN1cHBvcnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFByb1NlcnZlIHRvb2xzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyUHJvU2VydmVUb29sc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lclByb1NlcnZlVG9vbHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIG93biBhc3Nlc3NtZW50cyBpbiBQcm9TZXJ2ZSB0b29scy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lclByb1NlcnZlVG9vbHNJbmRpdmlkdWFsQ29udHJpYnV0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lclByb1NlcnZlVG9vbHNJbmRpdmlkdWFsQ29udHJpYnV0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIGFjY2VzcyB0byBvcmdhbml6YXRpb25hbCBhc3Nlc3NtZW50cyB3aXRoIGFiaWxpdHkgdG8gbWFuYWdlIG93biBhc3Nlc3NtZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lclByb1NlcnZlVG9vbHNPcmdhbml6YXRpb25SZWFkZXJJbmRpdmlkdWFsQ29udHJpYnV0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lclByb1NlcnZlVG9vbHNPcmdhbml6YXRpb25SZWFkZXJJbmRpdmlkdWFsQ29udHJpYnV0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbiB0byBBV1MgUENTIGNvbXB1dGUgbm9kZXMgdG8gY29ubmVjdCB0byBBV1MgUENTIGNsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NQQ1NDb21wdXRlTm9kZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQQ1NDb21wdXRlTm9kZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBQQ1MgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUENTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUENTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUHJpY2UgTGlzdCBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NQcmljZUxpc3RTZXJ2aWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcmljZUxpc3RTZXJ2aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGF1ZGl0b3IgYWNjZXNzIHRvIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FBdWRpdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQUF1ZGl0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZXNzZW50aWFsIHBlcm1pc3Npb25zIGZvciB0aGUgQVdTIFByaXZhdGUgQ0EgQ29ubmVjdG9yIGZvciBLdWJlcm5ldGVzLiAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FDb25uZWN0b3JGb3JLdWJlcm5ldGVzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQUNvbm5lY3RvckZvckt1YmVybmV0ZXNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcHJpdmlsZWdlZCBjZXJ0aWZpY2F0ZSB1c2VyIGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBUHJpdmlsZWdlZFVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZUNBUHJpdmlsZWdlZFVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNlcnRpZmljYXRlIHVzZXIgYWNjZXNzIHRvIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQVVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgYWRtaW5pc3RyYXRpdmUgYWN0aW9ucyBmb3IgYW4gQVdTIFByaXZhdGUgTWFya2V0cGxhY2UuICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVNYXJrZXRwbGFjZUFkbWluRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlTWFya2V0cGxhY2VBZG1pbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gY3JlYXRpbmcgcmVxdWVzdHMgaW4gYW4gQVdTIFByaXZhdGUgTWFya2V0cGxhY2UuICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVNYXJrZXRwbGFjZVJlcXVlc3RzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVNYXJrZXRwbGFjZVJlcXVlc3RzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBQcml2YXRlIE5ldHdvcmtzIFNlcnZpY2UgdG8gbWFuYWdlIHJlc291cmNlcyBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyLiAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlTmV0d29ya3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlTmV0d29ya3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIENvZGVCdWlsZCBuZWVkcyB0byBydW4gYSBidWlsZCBmb3IgQVdTIFByb3RvbiBDb2RlQnVpbGQgUHJvdmlzaW9uaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdCYXNpY0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdCYXNpY0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgUHJvdG9uIHRvIG1hbmFnZSBQcm90b24gcmVzb3VyY2UgcHJvdmlzaW9uaW5nIHVzaW5nIENvZGVCdWlsZCBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgQVdTIFByb3RvbiBBUElzIGFuZCBNYW5hZ2VtZW50IENvbnNvbGUsIGJ1dCBkb2VzIG5vdCBhbGxvdyBhZG1pbmlzdHJhdGlvbiBvZiBQcm90b24gdGVtcGxhdGVzIG9yIGVudmlyb25tZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uRGV2ZWxvcGVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvbkRldmVsb3BlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgUHJvdG9uIEFQSXMgYW5kIE1hbmFnZW1lbnQgQ29uc29sZS4gSW4gYWRkaXRpb24gdG8gdGhlc2UgcGVybWlzc2lvbnMsIGFjY2VzcyB0byBBbWF6b24gUzMgaXMgYWxzbyBuZWVkZWQgdG8gcmVnaXN0ZXIgdGVtcGxhdGUgYnVuZGxlcyBmcm9tIHlvdXIgUzMgYnVja2V0cywgYXMgd2VsbCBhcyBhY2Nlc3MgdG8gQW1hem9uIElBTSB0byBjcmVhdGUgYW5kIG1hbmFnZSB0aGUgc2VydmljZSByb2xlcyBmb3IgUHJvdG9uLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgUHJvdG9uIEFQSXMgYW5kIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgd2hpY2ggYWxsb3dzIEFXUyBQcm90b24gdG8gc3luYyB5b3VyIHNlcnZpY2UsIGVudmlyb25tZW50IGFuZCBjb21wb25lbnQgZGVmaW5pdGlvbnMgZnJvbSB5b3VyIGdpdCByZXBvc2l0b3J5IHRvIEFXUyBQcm90b24uICovXG4gICAgcHVibGljIEFXU1Byb3RvblNlcnZpY2VHaXRTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uU2VydmljZUdpdFN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB3aGljaCBhbGxvd3MgQVdTIFByb3RvbiB0byBzeW5jIHlvdXIgZ2l0IHJlcG9zaXRvcnkgY29udGVudHMgdG8gUHJvdG9uIG9yIHN5bmMgUHJvdG9uIGNvbnRlbnRzIHRvIHlvdXIgZ2l0IHJlcG9zaXRvcmllcy4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uU3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvblN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byB2aWV3IGFuZCBtb2RpZnkgcHVyY2hhc2Ugb3JkZXJzIG9uIGJpbGxpbmcgY29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NQdXJjaGFzZU9yZGVyc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1B1cmNoYXNlT3JkZXJzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQVdTUXVpY2tTZXR1cENGR0NQYWNrc1Blcm1pc3Npb25zQm91bmRhcnkgcG9saWN5IGRlZmluZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGluIGFuIElBTSByb2xlIGNyZWF0ZWQgYnkgUXVpY2sgU2V0dXAuIFF1aWNrIFNldHVwIHVzZXMgYSByb2xlIGNyZWF0ZWQgd2l0aCB0aGlzIHBvbGljeSB0byBkZXBsb3kgQVdTIENvbmZpZyBjb25mb3JtYW5jZSBwYWNrcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cENGR0NQYWNrc1Blcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cENGR0NQYWNrc1Blcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgQVdTIFN5c3RlbXMgTWFuYWdlciBRdWljayBTZXR1cCB0byBkZXBsb3kgbXVsdGlwbGUgY29uZmlndXJhdGlvbiB0eXBlcy4gVGhlc2UgY29uZmlndXJhdGlvbiB0eXBlcyBjcmVhdGUgSUFNIHJvbGVzIGFuZCBhdXRvbWF0aW9ucyB0aGF0IGNvbmZpZ3VyZSBmcmVxdWVudGx5IHVzZWQgQW1hem9uIFdlYiBTZXJ2aWNlcyBzZXJ2aWNlcyBhbmQgZmVhdHVyZXMgd2l0aCByZWNvbW1lbmRlZCBiZXN0IHByYWN0aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cERlcGxveW1lbnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBEZXBsb3ltZW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBV1NRdWlja1NldHVwRGV2T3BzR3VydVBlcm1pc3Npb25zQm91bmRhcnkgcG9saWN5IGRlZmluZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGluIGFuIElBTSByb2xlIGNyZWF0ZWQgYnkgUXVpY2sgU2V0dXAuIFF1aWNrIFNldHVwIHVzZXMgYSByb2xlIGNyZWF0ZWQgd2l0aCB0aGlzIHBvbGljeSB0byBlbmFibGUgYW5kIGNvbmZpZ3VyZSBBbWF6b24gRGV2T3BzIEd1cnUuIFRoaXMgcG9saWN5IGFsc28gcHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gZW5hYmxlIFN5c3RlbXMgTWFuYWdlciBFeHBsb3Jlci4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cERldk9wc0d1cnVQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBEZXZPcHNHdXJ1UGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFF1aWNrU2V0dXAgY3JlYXRlcyBJQU0gcm9sZXMgd2hpY2ggZW5hYmxlIGl0IHRvIGNvbmZpZ3VyZSB0aGUgU3lzdGVtcyBNYW5hZ2VyIERpc3RyaWJ1dG9yIGZlYXR1cmUgb24geW91ciBiZWhhbGYsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgc3VjaCByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwRGlzdHJpYnV0b3JQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBEaXN0cmlidXRvclBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBTeXN0ZW1zIE1hbmFnZXIgdG8gcnVuIHRoZSBBV1NRdWlja1NldHVwVHlwZS1FbmFibGVBUkVYIEF1dG9tYXRpb24gcnVuYm9vaywgd2hpY2ggZW5hYmxlcyBBV1MgUmVzb3VyY2UgRXhwbG9yZXIgZm9yIHVzZSB3aXRoIFN5c3RlbXMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cEVuYWJsZUFSRVhFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cEVuYWJsZUFSRVhFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBwcmluY2lwYWxzIHRvIHJ1biB0aGUgQVdTUXVpY2tTZXR1cFR5cGUtRW5hYmxlREhNQyBBdXRvbWF0aW9uIHJ1bmJvb2ssIHdoaWNoIGVuYWJsZXMgRGVmYXVsdCBIb3N0IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cEVuYWJsZURITUNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cEVuYWJsZURITUNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgUXVpY2sgU2V0dXAgdG8gZGVwbG95IHRoZSBjb25maWd1cmF0aW9uIHR5cGUgcmVxdWlyZWQgdG8gc2V0IHVwIGp1c3QtaW4tdGltZSBub2RlIGFjY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cEpJVE5BRGVwbG95bWVudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cEpJVE5BRGVwbG95bWVudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBTeXN0ZW1zIE1hbmFnZXIgdG8gY3JlYXRlIGEgZGVmYXVsdCBJQU0gaW5zdGFuY2UgcHJvZmlsZSBmb3IgdGhlIFF1aWNrIFNldHVwIGNhcGFiaWxpdHkgYW5kIGF0dGFjaCBpdCB0byBBbWF6b24gRUMyIGluc3RhbmNlcyB0aGF0IGRvbid0IGFscmVhZHkgaGF2ZSBhbiBpbnN0YW5jZS4gcHJvZmlsZSBhdHRhY2hlZC4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cE1hbmFnZWRJbnN0YW5jZVByb2ZpbGVFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cE1hbmFnZWRJbnN0YW5jZVByb2ZpbGVFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBlbmFibGUganVzdC1pbi10aW1lIG5vZGUgYWNjZXNzIGZvciBTeXN0ZW1zIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBNYW5hZ2VKSVROQVJlc291cmNlc0V4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwTWFuYWdlSklUTkFSZXNvdXJjZXNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHBhdGNoIGJhc2VsaW5lcyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIGJ5IGFuIGFkbWluaXN0cmF0b3IgaW4gdGhlIGN1cnJlbnQgQVdTIGFjY291bnQgb3Igb3JnYW5pemF0aW9uIHVzaW5nIFF1aWNrIFNldHVwLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lCYXNlbGluZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lCYXNlbGluZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgUXVpY2sgU2V0dXAgdG8gY3JlYXRlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBwYXRjaCBwb2xpY3kgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5RGVwbG95bWVudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5RGVwbG95bWVudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBRdWlja1NldHVwIGNyZWF0ZXMgSUFNIHJvbGVzIHdoaWNoIGVuYWJsZSBpdCB0byBjb25maWd1cmUgdGhlIFN5c3RlbXMgTWFuYWdlciBQYXRjaCBNYW5hZ2VyIGZlYXR1cmUgb24geW91ciBiZWhhbGYsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgc3VjaCByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQVdTUXVpY2tTZXR1cFNjaGVkdWxlclBlcm1pc3Npb25zQm91bmRhcnkgcG9saWN5IGRlZmluZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGluIGFuIElBTSByb2xlIGNyZWF0ZWQgYnkgUXVpY2sgU2V0dXAuIFF1aWNrIFNldHVwIHVzZXMgYSByb2xlIGNyZWF0ZWQgd2l0aCB0aGlzIHBvbGljeSB0byBlbmFibGUgYW5kIGNvbmZpZ3VyZSBzY2hlZHVsZWQgb3BlcmF0aW9ucyBvbiBBbWF6b24gRUMyIGluc3RhbmNlcyBhbmQgb3RoZXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU2NoZWR1bGVyUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU2NoZWR1bGVyUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtc3Npb25zIHRoYXQgYWxsb3cgUXVpY2sgU2V0dXAgdG8gY3JlYXRlIHJlc291cmNlcyB0aGF0IGFyZSB1c2VkIGR1cmluZyB0aGUgU3lzdGVtcyBNYW5hZ2VyIG9uYm9hcmRpbmcgcHJvY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFNTTURlcGxveW1lbnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01EZXBsb3ltZW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgbGlzdGluZyBhbGwgUzMgYnVja2V0cyBpbiBhbiBhY2NvdW50OyBhbmQgZm9yIG1hbmFnaW5nIGFuZCByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGFib3V0IHNwZWNpZmljIGJ1Y2tldHMgaW4gdGhlIHByaW5jaXBhbCBhY2NvdW50IHRoYXQgYXJlIG1hbmFnZWQgdGhyb3VnaCBBV1MgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNRGVwbG95bWVudFMzQnVja2V0Um9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU1NNRGVwbG95bWVudFMzQnVja2V0Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFF1aWNrIFNldHVwIGNyZWF0ZXMgSUFNIHJvbGVzIHdoaWNoIGVuYWJsZSBpdCB0byBjb25maWd1cmUgdGhlIEhvc3QgTWFuYWdlciBRdWljayBTZXR1cCB0eXBlIG9uIHlvdXIgYmVoYWxmLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHN1Y2ggcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFNTTUhvc3RNZ210UGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU1NNSG9zdE1nbXRQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBncmFudHMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBRdWljayBTZXR1cCB0byBydW4gdGhlIGEgQVdTIENsb3VkRm9ybWF0aW9uIGN1c3RvbSByZXNvdXJjZSBvbiBsaWZlY3ljbGUgZXZlbnRzIGR1cmluZyBRdWljayBTZXR1cCBkZXBsb3ltZW50IGluIFN5c3RlbXMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFNTTUxpZmVjeWNsZU1hbmFnZW1lbnRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFNTTUxpZmVjeWNsZU1hbmFnZW1lbnRFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBTeXN0ZW1zIE1hbmFnZXIgdG8gY3JlYXRlIHByZXJlcXVpc2l0ZXMgc3VjaCBhcyBJQU0gcm9sZXMgcmVxdWlyZWQgZm9yIFN5c3RlbXMgTWFuYWdlciBvbmJvYXJkaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNTWFuYWdlUmVzb3VyY2VzRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01NYW5hZ2VSZXNvdXJjZXNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBwcmluY2lwYWxzIHRvIHJ1biB0aGUgQVdTUXVpY2tTZXR1cFR5cGUtU3RhcnRTU01Bc3NvY2lhdGlvbnMgQXV0b21hdGlvbiBydW5ib29rLCB3aGljaCBzdGFydHMgU3RhdGUgTWFuYWdlciBBc3NvY2lhdGlvbnMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTdGFydFNTTUFzc29jaWF0aW9uc0V4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU3RhcnRTU01Bc3NvY2lhdGlvbnNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbWFuYWdlZCBwb2xpY3kgQVdTUXVpY2tTZXR1cFN0YXJ0U3RvcEluc3RhbmNlc0V4ZWN1dGlvblBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgUXVpY2sgU2V0dXAgdG8gc3RhcnQgYW5kIHN0b3AgQW1hem9uIEVDMiBpbnN0YW5jZXMgb24gYSBzY2hlZHVsZS4gVGhpcyBwb2xpY3kgaXMgdXNlZCB3aXRoIHRoZSBRdWljayBTZXR1cCBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiB0eXBlLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU3RhcnRTdG9wSW5zdGFuY2VzRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTdGFydFN0b3BJbnN0YW5jZXNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgc2V0IG9mIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHBlcmZvcm0gUXVpY2tTaWdodCBBc3NldCBCdW5kbGUgRXhwb3J0IE9wZXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodEFzc2V0QnVuZGxlRXhwb3J0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRBc3NldEJ1bmRsZUV4cG9ydFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gcGVyZm9ybSBRdWlja1NpZ2h0IEFzc2V0IEJ1bmRsZSBJbXBvcnQgT3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0QXNzZXRCdW5kbGVJbXBvcnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodEFzc2V0QnVuZGxlSW1wb3J0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUXVpY2tzaWdodCBhY2Nlc3MgdG8gQXRoZW5hIEFQSSBhbmQgUzMgYnVja2V0cyB1c2VkIGZvciBBdGhlbmEgcXVlcnkgcmVzdWx0cyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja3NpZ2h0QXRoZW5hQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrc2lnaHRBdGhlbmFBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBRdWlja1NpZ2h0IHRvIGRlc2NyaWJlIHRoZSBSRFMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHREZXNjcmliZVJEUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0RGVzY3JpYmVSRFMpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBRdWlja1NpZ2h0IHRvIGRlc2NyaWJlIFJlZHNoaWZ0IHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0RGVzY3JpYmVSZWRzaGlmdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0RGVzY3JpYmVSZWRzaGlmdCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gRWxhc3RpY3NlYXJjaCByZXNvdXJjZXMgZnJvbSBBbWF6b24gUXVpY2tTaWdodCAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0RWxhc3RpY3NlYXJjaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0RWxhc3RpY3NlYXJjaFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmUgUXVpY2tTaWdodCByZWFkLW9ubHkgYWNjZXNzIHRvIElvVCBBbmFseXRpY3MgZGF0YXNldHMgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodElvVEFuYWx5dGljc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0SW9UQW5hbHl0aWNzQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgUXVpY2tTaWdodCB0byBsaXN0IElBTSBlbnRpdGllcyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0TGlzdElBTSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0TGlzdElBTSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gT3BlblNlYXJjaCByZXNvdXJjZXMgZnJvbSBBbWF6b24gUXVpY2tTaWdodCAqL1xuICAgIHB1YmxpYyBBV1NRdWlja3NpZ2h0T3BlblNlYXJjaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja3NpZ2h0T3BlblNlYXJjaFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIHJlc291cmNlcyBmcm9tIEFtYXpvbiBRdWlja1NpZ2h0ICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRTYWdlTWFrZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodFNhZ2VNYWtlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB1c2VkIGJ5IFF1aWNrU2lnaHQgdG8gY3JlYXRlIHNlY3JldHMgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgdG8gYXR0YWNoIHJlc291cmNlIHBvbGljaWVzIG9uIGV4aXN0aW5nIFF1aWNrU2lnaHQgc2VjcmV0cy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdXNlZCBieSBRdWlja1NpZ2h0IHRvIGNyZWF0ZSBzZWNyZXRzIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgYW5kIHRvIGF0dGFjaCByZXNvdXJjZSBwb2xpY2llcyBvbiBleGlzdGluZyBRdWlja1NpZ2h0IHNlY3JldHMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRTZWNyZXRzTWFuYWdlcldyaXRlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRTZWNyZXRzTWFuYWdlcldyaXRlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIFF1aWNrU2lnaHQgYWNjZXNzIHRvIEFXUyBUaW1lc3RyZWFtIEFQSXMuIEN1c3RvbWVycyBjYW4gYXR0YWNoIHRoaXMgcG9saWN5IHRvIEFXUyBRdWlja1NpZ2h0IHJvbGUgdG8gYWxsb3cgcmV0cmlldmFsIG9mIGRhdGEgYW5kIG1ldGFkYXRhLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0VGltZXN0cmVhbVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0VGltZXN0cmVhbVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgUmVhY2hhYmlsaXR5IEFuYWx5emVyIHRvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGFuZCBpbnRlZ3JhdGUgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUmVhY2hhYmlsaXR5QW5hbHl6ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZWFjaGFiaWxpdHlBbmFseXplclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gdXNlIEFXUyBzZXJ2aWNlcyB3aXRoIHRoZSBBV1MgVG9vbGtpdCBmb3IgLk5FVCBSZWZhY3RvcmluZyBleHRlbnNpb24gZm9yIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBJdCBpcyBpbnRlbmRlZCB0byBiZSBhdHRhY2hlZCB0byBhIGxvY2FsIEFXUyBwcm9maWxlLiBUaGUgcG9saWN5IGFsbG93cyB1cGxvYWRpbmcgYXBwbGljYXRpb24gYXJ0aWZhY3RzIGFuZCBkb3dubG9hZGluZyB0aGUgcmVzdWx0aW5nIGFydGlmYWN0cyBmcm9tIEFtYXpvbiBTMy4gSXQgYWxsb3dzIGJ1aWxkaW5nIGFwcGxpY2F0aW9ucyBpbnRvIGEgY29udGFpbmVyIGltYWdlIHVzaW5nIEFXUyBDb2RlQnVpbGQgYW5kIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgdGhlIGltYWdlcyBmcm9tIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBSZWdpc3RyeSAoQW1hem9uIEVDUikuIEFuZCBpdCBhbGxvd3MgZGVwbG95bWVudCBvZiB0aGUgYXBwbGljYXRpb24gdG8gY29udGFpbmVyIHNlcnZpY2VzIG9uIEFXUyBzdWNoIGFzIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIChBbWF6b24gRUNTKSwgb3B0aW9uYWwgY3JlYXRpb24gb2YgVlBDIHJlc291cmNlcywgb3B0aW9uYWwgY29ubmVjdGlvbiB0byBleGlzdGluZyBpbmZyYXN0cnVjdHVyZSBzdWNoIGFzIEFXUyBEaXJlY3RvcnkgU2VydmljZSwgYW5kIG90aGVyIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1JlZmFjdG9yaW5nVG9vbGtpdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVmYWN0b3JpbmdUb29sa2l0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgQW1hem9uIEVDUyBUYXNrcyBjcmVhdGVkIGZvciB0ZXN0aW5nIGFwcGxpY2F0aW9ucyBpbiBBV1MgdXNpbmcgdGhlIEFXUyBUb29sa2l0IGZvciAuTkVUIFJlZmFjdG9yaW5nIGV4dGVuc2lvbiBmb3IgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uIFRoZSBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byBkb3dubG9hZCBhcHBsaWNhdGlvbiBhcnRpZmFjdHMgZnJvbSBBbWF6b24gUzMsIGNvbW11bmljYXRlIHRoZSBzdGF0dXMgb2YgdGhlIFRhc2sgdXNpbmcgQVdTIFN5c3RlbXMgTWFuYWdlciwgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NSZWZhY3RvcmluZ1Rvb2xraXRTaWRlY2FyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JlZmFjdG9yaW5nVG9vbGtpdFNpZGVjYXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZTpQb3N0IFByaXZhdGUgYWNjZXNzIHRvIHB1Ymxpc2ggQ2xvdWRXYXRjaCBtZXRyaWNzIGRhdGEgKi9cbiAgICBwdWJsaWMgQVdTcmVQb3N0UHJpdmF0ZUNsb3VkV2F0Y2hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTcmVQb3N0UHJpdmF0ZUNsb3VkV2F0Y2hBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIHJlOlBvc3QgU3BhY2Ugc2VydmljZSB0byBjcmVhdGUsIG1hbmFnZSwgYW5kIHJlc29sdmUgU3VwcG9ydCBjYXNlcyB0aGF0IGFyZSBjcmVhdGVkIHRocm91Z2ggdGhlIFNwYWNlIGFwcGxpY2F0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NSZXBvc3RTcGFjZVN1cHBvcnRPcGVyYXRpb25zUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JlcG9zdFNwYWNlU3VwcG9ydE9wZXJhdGlvbnNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBSZXNpbGllbmNlIEh1YiBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZXMgaW4gb3JkZXIgdG8gZXhlY3V0ZSBhc3Nlc3NtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NSZXNpbGllbmNlSHViQXNzc2Vzc21lbnRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzaWxpZW5jZUh1YkFzc3Nlc3NtZW50RXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIEFXU1Jlc291cmNlQWNjZXNzTWFuYWdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgQVBJcyBuZWVkZWQgYnkgYSByZXNvdXJjZSBzaGFyZSBwYXJ0aWNpcGFudC4gKi9cbiAgICBwdWJsaWMgQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyUmVzb3VyY2VTaGFyZVBhcnRpY2lwYW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlQWNjZXNzTWFuYWdlclJlc291cmNlU2hhcmVQYXJ0aWNpcGFudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIFJlYWQtb25seSBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgYWNjZXNzIHRvIGN1c3RvbWVycycgT3JnYW5pemF0aW9ucyBzdHJ1Y3R1cmUuIEl0IGFsc28gY29udGFpbnMgSUFNIHBlcm1pc3Npb25zIHRvIHNlbGYtZGVsZXRlIHRoZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgUmVzb3VyY2UgRXhwbG9yZXIgcmVzb3VyY2VzIGFuZCBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB0byBzdXBwb3J0IHRoaXMgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUV4cGxvcmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byBSZXNvdXJjZSBFeHBsb3JlciBhbmQgZ3JhbnRzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0byBvdGhlciBBV1Mgc2VydmljZXMgdG8gc3VwcG9ydCB0aGlzIGFjY2Vzcy4gVGhlIEFXUyBPcmdhbml6YXRpb25zIGFkbWluaXN0cmF0b3IgbmVlZHMgdGhlc2UgcGVybWlzc2lvbnMgdG8gc2V0dXAgYW5kIG1hbmFnZSBtdWx0aS1hY2NvdW50IHNlYXJjaCBpbiB0aGUgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTUmVzb3VyY2VFeHBsb3Jlck9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3Jlck9yZ2FuaXphdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIHNlYXJjaCBmb3IgYW5kIHZpZXcgUmVzb3VyY2UgRXhwbG9yZXIgcmVzb3VyY2VzIGFuZCBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB0byBzdXBwb3J0IHRoaXMgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3JlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJlc291cmNlIEV4cGxvcmVyIHRvIHZpZXcgcmVzb3VyY2VzIGFuZCBDbG91ZFRyYWlsIGV2ZW50cyBvbiB5b3VyIGJlaGFsZiB0byBpbmRleCB5b3VyIHJlc291cmNlcyBmb3Igc2VhcmNoLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3JlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBpcyB0aGUgcmVhZCBvbmx5IHBvbGljeSBmb3IgQVdTIFJlc291cmNlIEdyb3VwcyAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUdyb3Vwc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlR3JvdXBzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUm9ib01ha2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBBbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIElBTSkuICovXG4gICAgcHVibGljIEFXU1JvYm9NYWtlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9ib01ha2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFJvYm9NYWtlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESyAqL1xuICAgIHB1YmxpYyBBV1NSb2JvTWFrZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2JvTWFrZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJvYm9NYWtlciBzZXJ2aWNlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NSb2JvTWFrZXJTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvYm9NYWtlclNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBSb2JvTWFrZXIgc2VydmljZSBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTUm9ib01ha2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9ib01ha2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhbGwgcGVybWlzc2lvbnMgdG8gSUFNIFJvbGVzIEFueXdoZXJlIHJlc291cmNlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogQ3JlYXRlUHJvZmlsZSwgRGVsZXRlVHJ1c3RBbmNob3IsIERpc2FibGVDUkwsIFJlc2V0Tm90aWZpY2F0aW9uU2V0dGluZ3MuICovXG4gICAgcHVibGljIEFXU1JvbGVzQW55d2hlcmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvbGVzQW55d2hlcmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIElBTSBSb2xlcyBBbnl3aGVyZSByZXNvdXJjZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IEdldFRydXN0QW5jaG9yLCBMaXN0UHJvZmlsZXMsIEdldENSTC4gVGhlcmUgd2lsbCBiZSBubyBvdGhlciBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgc2VydmljZXMgaW5jbHVkZWQgaW4gdGhpcyBwb2xpY3kuICovXG4gICAgcHVibGljIEFXU1JvbGVzQW55d2hlcmVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2xlc0FueXdoZXJlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgSUFNIFJvbGVzIEFueXdoZXJlIHRvIHB1Ymxpc2ggc2VydmljZS91c2FnZSBtZXRyaWNzIHRvIENsb3VkV2F0Y2ggYW5kIGNoZWNrIHRoZSBzdGF0dXMgb2YgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdGllcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUm9sZXNBbnl3aGVyZVNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9sZXNBbnl3aGVyZVNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBbWF6b24gUzMgb24gT3V0cG9zdHMgc2VydmljZSB0byBtYW5hZ2UgRUMyIG5ldHdvcmsgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTM09uT3V0cG9zdHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTM09uT3V0cG9zdHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFNhdmluZ3MgUGxhbnMgc2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NTYXZpbmdzUGxhbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NhdmluZ3NQbGFuc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIFNhdmluZ3MgUGxhbnMgc2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NTYXZpbmdzUGxhbnNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTYXZpbmdzUGxhbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZXRyaWV2ZSBhbmQgZGVzY3JpYmUgc2VjcmV0cyBmcm9tIFNlY3JldHMgTWFuYWdlci4gVGhpcyBwb2xpY3kgYWxzbyBhbGxvd3MgZGVjcnlwdGluZyBLTVMga2V5cyBmb3IgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldHMuICovXG4gICAgcHVibGljIEFXU1NlY3JldHNNYW5hZ2VyQ2xpZW50UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjcmV0c01hbmFnZXJDbGllbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBhdXRoZW50aWNhdGVkIHVzZXJzIHRvIGFjY2VzcyB0aGUgU2VjdXJpdHkgQWdlbnQgV2ViIEFwcGxpY2F0aW9uIGZvciBjb25maWd1cmluZyBhbmQgZXhlY3V0aW5nIGF1dG9tYXRlZCBzZWN1cml0eSBwZW5ldHJhdGlvbiB0ZXN0cy4gVGhpcyBwb2xpY3kgZW5hYmxlcyB1c2VycyB0byBtYW5hZ2UgcGVudGVzdHMsIHZpZXcgZmluZGluZ3MsIG1vbml0b3IgdGVzdCBleGVjdXRpb24sIGFuZCBpbnRlcmFjdCB3aXRoIEFXUyByZXNvdXJjZXMgcmVxdWlyZWQgZm9yIHNlY3VyaXR5IHRlc3Rpbmcgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlBZ2VudFdlYkFwcFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUFnZW50V2ViQXBwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdXNlIEFXUyBTZWN1cml0eSBIdWIuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SHViRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUh1YkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbiB0byBlbmFibGUgYW5kIG1hbmFnZSBBV1MgU2VjdXJpdHkgSHViIHdpdGhpbiBhbiBvcmdhbml6YXRpb24uIEluY2x1ZGVzIGVuYWJsaW5nIHRoZSBzZXJ2aWNlIGFjcm9zcyB0aGUgb3JnYW5pemF0aW9uLCBhbmQgZGV0ZXJtaW5pbmcgdGhlIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQgZm9yIHRoZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1Yk9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlIdWJPcmdhbml6YXRpb25zQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgU2VjdXJpdHkgSHViIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1YlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFXUyBTZWN1cml0eSBIdWIgdG8gYWNjZXNzIHlvdXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1YlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgU2VjdXJpdHkgSHViIHRvIG1hbmFnZSBBV1MgQ29uZmlnIHJ1bGVzIGFuZCBTZWN1cml0eSBIdWIgcmVzb3VyY2VzIGluIHlvdXIgb3JnYW5pemF0aW9uIGFuZCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlIdWJWMlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViVjJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBwcm92aWRlcyBjdXN0b21lcnMgd2l0aCBSZWFkIGFuZCBXcml0ZSBwZXJtaXNzaW9ucyB0byBjYXNlIHJlc291cmNlcyB0aGF0IGFyZSBjcmVhdGVkIHRocm91Z2ggdGhlIFNlY3VyaXR5IEluY2lkZW50IFJlc3BvbnNlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZUNhc2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZUNhc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHByb3ZpZGVzIGN1c3RvbWVycyB3aXRoIFJlYWQgYW5kIFdyaXRlIHBlcm1pc3Npb25zIHRvIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB0byB0aGUgU2VjdXJpdHkgSW5jaWRlbnQgUmVzcG9uc2Ugc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHByb3ZpZGVzIGN1c3RvbWVycyB3aXRoIFJlYWQtb25seSBwZXJtaXNzaW9ucyB0byBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gdGhlIFNlY3VyaXR5IEluY2lkZW50IFJlc3BvbnNlIHNlcnZpY2UuIFBlcm1pc3Npb24gaW5jbHVkZXMgYWNjZXNzIHRvIEdldENhc2VBdHRhY2htZW50RG93bmxvYWRVcmwgYXMgd2VsbCBmb3IgdGhlIGFiaWxpdHkgdG8gZ2V0IGNhc2UgYXR0YWNobWVudCBkb3dubG9hZCBVUkxzLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBTZWN1cml0eSBJbmNpZGVudCBSZXNwb25zZSAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgU2VjdXJpdHkgSW5jaWRlbnQgUmVzcG9uc2UgdG8gY29udGludW91c2x5IG1vbml0b3IgeW91ciBlbnZpcm9ubWVudCBmb3Igc2VjdXJpdHkgdGhyZWF0cywgdHVuZSBzZWN1cml0eSBzZXJ2aWNlcyB0byByZWR1Y2UgYWxlcnQgbm9pc2UsIGFuZCBnYXRoZXIgaW5mb3JtYXRpb24gdG8gaW52ZXN0aWdhdGUgcG90ZW50aWFsIGluY2lkZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlVHJpYWdlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlVHJpYWdlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBzZXJ2aWNlIGNhdGFsb2cgYWRtaW4gY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQWRtaW5GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nQWRtaW5GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBTZXJ2aWNlIENhdGFsb2cgYWRtaW4gY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQWRtaW5SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FkbWluUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBTZXJ2aWNlIENhdGFsb2cgQXBwIFJlZ2lzdHJ5IGNhcGFiaWxpdGllcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gU2VydmljZSBDYXRhbG9nIEFwcCBSZWdpc3RyeSBjYXBhYmlsaXRlcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dBcHBSZWdpc3RyeVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFNlcnZpY2UgQ2F0YWxvZyBBcHBSZWdpc3RyeSB0byBtYW5hZ2UgUmVzb3VyY2UgR3JvdXBzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBzZXJ2aWNlIGNhdGFsb2cgZW5kdXNlciBjYXBhYmlsaXRpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dFbmRVc2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0VuZFVzZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBTZXJ2aWNlIENhdGFsb2cgZW5kLXVzZXIgY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nRW5kVXNlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nRW5kVXNlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQSBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIFNlcnZpY2VDYXRhbG9nIHRvIHN5bmMgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvcmdhbml6YXRpb24gc3RydWN0dXJlICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nT3Jnc0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dPcmdzRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEEgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQVdTIFNlcnZpY2VDYXRhbG9nIHRvIHN5bmMgUHJvdmlzaW9uaW5nIEFydGlmYWN0cyBmcm9tIHNvdXJjZSByZXBvc2l0b3JpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIFNlcnZpY2UgTGlua2VkIFJvbGUgcHJvdmlkZXMgQUlEZXZPcHMgYWJpbGl0eSB0byBwcm92aWRlIHVzYWdlIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckFJRGV2T3BzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQUlEZXZPcHNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgbWFuYWdpbmcgbm9kZWdyb3VwcyBpbiB0aGUgY3VzdG9tZXIncyBhY2NvdW50LiBUaGVzZSBwb2xpY2llcyByZWxhdGVkIHRvIG1hbmFnZW1lbnQgb2YgdGhlIGZvbGxvd2luZyByZXNvdXJjZXM6IEF1dG9zY2FsaW5nR3JvdXBzLCBTZWN1cml0eUdyb3VwcywgTGF1bmNoVGVtcGxhdGVzIGFuZCBJbnN0YW5jZVByb2ZpbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvbkVLU05vZGVncm91cCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckFtYXpvbkVLU05vZGVncm91cCk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgU2VydmljZSBMaW5rZWQgUm9sZSBwcm92aWRlcyBBbWF6b24gUSBEZXZlbG9wZXIgYWJpbGl0eSB0byBwcm92aWRlIHVzYWdlIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvblFEZXZlbG9wZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JBbWF6b25RRGV2ZWxvcGVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBTZXJ2aWNlLUxpbmtlZCBSb2xlIHByb3ZpZGVzIEFXUyBUcmFuc2Zvcm0gd2l0aCB0aGUgYWJpbGl0eSB0byBwcm92aWRlIHVzYWdlIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckFXU1RyYW5zZm9ybSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckFXU1RyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgVHJhbnNmb3JtIEN1c3RvbSB0byBwdWJsaXNoIENsb3VkV2F0Y2ggbWV0cmljcyB0byB5b3VyIGFjY291bnQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQVdTVHJhbnNmb3JtQ3VzdG9tKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQVdTVHJhbnNmb3JtQ3VzdG9tKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIFN5c3RlbXMgTWFuYWdlciByZXNvdXJjZXMgdXNlZCBieSBDbG91ZFdhdGNoIEFsYXJtcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckNsb3VkV2F0Y2hBbGFybXNBY3Rpb25TU01TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckNsb3VkV2F0Y2hBbGFybXNBY3Rpb25TU01TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZFdhdGNoIHRvIGFjY2VzcyBSRFMgUGVyZm9ybWFuY2UgSW5zaWdodHMgbWV0cmljcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckNsb3VkV2F0Y2hNZXRyaWNzRGJQZXJmSW5zaWdodHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckNsb3VkV2F0Y2hNZXRyaWNzRGJQZXJmSW5zaWdodHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIENvZGVHdXJ1IFByb2ZpbGVyIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JDb2RlR3VydVByb2ZpbGVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQ29kZUd1cnVQcm9maWxlcik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcm9sZSBncmFudHMgcGVybWlzc2lvbnMgdG8gQ29kZVdoaXNwZXJlciB0byBhY2Nlc3MgZGF0YSBpbiB5b3VyIGFjY291bnQgdG8gY2FsY3VsYXRlIGJpbGxpbmcsIHByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgYW5kIGFjY2VzcyBzZWN1cml0eSByZXBvcnRzIGluIEFtYXpvbiBDb2RlR3VydSwgYW5kIGVtaXQgZGF0YSB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckNvZGVXaGlzcGVyZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JDb2RlV2hpc3BlcmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMiBTY2hlZHVsZWQgSW5zdGFuY2VzIHRvIGxhdW5jaCBhbmQgbWFuYWdlIHNwb3QgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckVDMlNjaGVkdWxlZEluc3RhbmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckVDMlNjaGVkdWxlZEluc3RhbmNlcyk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBHcm91bmRTdGF0aW9uIHVzZXMgdGhpcyBzZXJ2aWNlLWxpbmtlZCByb2xlIHRvIGludm9rZSBFQzIgdG8gZmluZCBwdWJsaWMgSVB2NCBhZGRyZXNzZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JHcm91bmRTdGF0aW9uRGF0YWZsb3dFbmRwb2ludEdyb3VwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yR3JvdW5kU3RhdGlvbkRhdGFmbG93RW5kcG9pbnRHcm91cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzJJbWFnZUJ1aWxkZXIgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9ySW1hZ2VCdWlsZGVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9ySW1hZ2VCdWlsZGVyKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBJb1QgU2l0ZVdpc2UgdG8gcHJvdmlzaW9uIGFuZCBtYW5hZ2UgZ2F0ZXdheXMgYXMgd2VsbCBhcyBxdWVyeSBkYXRhLiBUaGUgcG9saWN5IGluY2x1ZGVzIHJlcXVpcmVkIEFXUyBHcmVlbmdyYXNzIHBlcm1pc3Npb25zIGZvciBkZXBsb3lpbmcgdG8gZ3JvdXBzLCBBV1MgTGFtYmRhIHBlcm1pc3Npb25zIGZvciBjcmVhdGluZyBhbmQgdXBkYXRpbmcgc2VydmljZS1wcmVmaXhlZCBmdW5jdGlvbnMsIGFuZCBBV1MgSW9UIEFuYWx5dGljcyBwZXJtaXNzaW9ucyBmb3IgcXVlcnlpbmcgZGF0YSBmcm9tIGRhdGFzdG9yZXMuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9ySW9UU2l0ZVdpc2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JJb1RTaXRlV2lzZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBMb2cgRGVsaXZlcnkgc2VydmljZSB0byBkZWxpdmVyIGxvZ3MgYnkgY2FsbGluZyBsb2cgZGVzdGluYXRpb24gb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yTG9nRGVsaXZlcnlQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JMb2dEZWxpdmVyeVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBbWF6b24gTW9uaXRyb24gcGVybWlzc2lvbnMgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMsIGluY2x1ZGluZyBBV1MgU1NPIHVzZXIgYXNzaWdubWVudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JNb25pdHJvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvck1vbml0cm9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ2xvdWR3YXRjaCBhY2Nlc3MgdG8gcHVibGlzaCBvcGVyYXRpb25hbCBhbmQgdXNhZ2UgbWV0cmljcyBhbmQgbG9ncyBmb3IgQW1hem9uIE5lcHR1bmUgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JOZXB0dW5lR3JhcGhQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JOZXB0dW5lR3JhcGhQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBkZXNjcmliZSBhbmQgdXBkYXRlIFByaXZhdGUgTWFya2V0cGxhY2UgcmVzb3VyY2VzIGFuZCBkZXNjcmliZSBBV1MgT3JnYW5pemF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvclByaXZhdGVNYXJrZXRwbGFjZUFkbWluUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yUHJpdmF0ZU1hcmtldHBsYWNlQWRtaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIFByb2N1cmVtZW50IEluc2lnaHRzIHRvIG9idGFpbiBPcmdhbml6YXRpb24gQWNjb3VudCBkZXRhaWxzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yUHJvY3VyZW1lbnRJbnNpZ2h0c1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvclByb2N1cmVtZW50SW5zaWdodHNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMgbmVjZXNzYXJ5IHRvIG1pZ3JhdGUgc2VydmljZSBpbnN0YW5jZXMgaW50byBBV1MgaW5jbHVkaW5nIEVDMiwgUzMgYW5kIENsb3VkZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvclNNUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvclNNUyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgVXNlciBTdWJzY3JpcHRpb25zIHNlcnZpY2UgdG8geW91ciBJZGVudGl0eSBDZW50ZXIgcmVzb3VyY2VzIHRvIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHlvdXIgc3Vic2NyaXB0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JVc2VyU3Vic2NyaXB0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvclVzZXJTdWJzY3JpcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgY29tcGxpYW5jZSByZXBvcnRzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwUmVwb3J0cygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cFJlcG9ydHMpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBjb250YWlucyBwZXJtaXNzaW9ucyBmb3IgdGVzdGluZyByZXN0b3JlcyBhbmQgZm9yIGNsZWFuaW5nIHVwIHJlc291cmNlcyBjcmVhdGVkIGR1cmluZyB0ZXN0cy4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXBSZXN0b3JlVGVzdGluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cFJlc3RvcmVUZXN0aW5nKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBwcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQW1hem9uIFdvcmtTcGFjZXMgdG8gbWFuYWdlIEVDMiBpbnN0YW5jZXMgaW4geW91ciBBV1MgYWNjb3VudCAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZVBvbGljeUZvcldvcmtzcGFjZXNJbnN0YW5jZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVQb2xpY3lGb3JXb3Jrc3BhY2VzSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIEFXUyBERG9TIFJlc3BvbnNlIFRlYW0gd2l0aCBsaW1pdGVkIGFjY2VzcyB0byB5b3VyIEFXUyBhY2NvdW50IHRvIGFzc2lzdCB3aXRoIEREb1MgYXR0YWNrIG1pdGlnYXRpb24gZHVyaW5nIGEgaGlnaC1zZXZlcml0eSBldmVudC4gKi9cbiAgICBwdWJsaWMgQVdTU2hpZWxkRFJUQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NoaWVsZERSVEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgU2hpZWxkIHRvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmIHRvIHByb3ZpZGUgRERvUyBwcm90ZWN0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTaGllbGRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTaGllbGRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBwdWJsaXNoIG1ldHJpY3MgYW5kIHByb3ZpZGUgaW5zaWdodHMgZm9yIHlvdXIgc29jaWFsIG1lc3NhZ2Ugc2VuZGluZy4gKi9cbiAgICBwdWJsaWMgQVdTU29jaWFsTWVzc2FnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU29jaWFsTWVzc2FnaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgU3lzdGVtcyBNYW5hZ2VyIGZvciBTQVAgd2l0aCB0aGUgcGVybWlzc2lvbnMgbmVlZGVkIHRvIG1hbmFnZSBhbmQgaW50ZWdyYXRlIFNBUCBzb2Z0d2FyZSB3aXRoIEFXUy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNRm9yU0FQU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNRm9yU0FQU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIFNlcnZpY2UgTGlua2VkIFJvbGUgQVdTU2VydmljZVJvbGVGb3JBbWF6b25TU01fT3BzSW5zaWdodHMgKi9cbiAgICBwdWJsaWMgQVdTU1NNT3BzSW5zaWdodHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01PcHNJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWRtaW5pc3RyYXRvciBhY2Nlc3MgZm9yIFNTTyBEaXJlY3RvcnkgKi9cbiAgICBwdWJsaWMgQVdTU1NPRGlyZWN0b3J5QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09EaXJlY3RvcnlBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZE9ubHkgYWNjZXNzIGZvciBTU08gRGlyZWN0b3J5ICovXG4gICAgcHVibGljIEFXU1NTT0RpcmVjdG9yeVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTT0RpcmVjdG9yeVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHdpdGhpbiBBV1MgU1NPIHRvIG1hbmFnZSBBV1MgT3JnYW5pemF0aW9ucyBtYXN0ZXIgYW5kIG1lbWJlciBhY2NvdW50cyBhbmQgY2xvdWQgYXBwbGljYXRpb24gKi9cbiAgICBwdWJsaWMgQVdTU1NPTWFzdGVyQWNjb3VudEFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPTWFzdGVyQWNjb3VudEFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3Mgd2l0aGluIEFXUyBTU08gdG8gbWFuYWdlIEFXUyBPcmdhbml6YXRpb25zIG1lbWJlciBhY2NvdW50cyBhbmQgY2xvdWQgYXBwbGljYXRpb24gKi9cbiAgICBwdWJsaWMgQVdTU1NPTWVtYmVyQWNjb3VudEFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPTWVtYmVyQWNjb3VudEFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBTU08gY29uZmlndXJhdGlvbnMuICovXG4gICAgcHVibGljIEFXU1NTT1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTT1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFXUyBTU08gcGVybWlzc2lvbnMgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMsIGluY2x1ZGluZyBJQU0gcm9sZXMsIHBvbGljaWVzIGFuZCBTQU1MIElkUCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU1NPU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbiBhY2Nlc3MgcG9saWN5IGZvciBwcm92aWRpbmcgYSB1c2VyL3JvbGUvZXRjIGFjY2VzcyB0byB0aGUgQVdTIFN0ZXBGdW5jdGlvbnMgY29uc29sZS4gRm9yIGEgZnVsbCBjb25zb2xlIGV4cGVyaWVuY2UsIGluIGFkZGl0aW9uIHRvIHRoaXMgcG9saWN5LCBhIHVzZXIgbWF5IG5lZWQgaWFtOlBhc3NSb2xlIHBlcm1pc3Npb24gb24gb3RoZXIgSUFNIHJvbGVzIHRoYXQgY2FuIGJlIGFzc3VtZWQgYnkgdGhlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1N0ZXBGdW5jdGlvbnNDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdGVwRnVuY3Rpb25zQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbiBhY2Nlc3MgcG9saWN5IGZvciBwcm92aWRpbmcgYSB1c2VyL3JvbGUvZXRjIGFjY2VzcyB0byB0aGUgQVdTIFN0ZXBGdW5jdGlvbnMgQVBJLiBGb3IgZnVsbCBhY2Nlc3MsIGluIGFkZGl0aW9uIHRvIHRoaXMgcG9saWN5LCBhIHVzZXIgTVVTVCBoYXZlIGlhbTpQYXNzUm9sZSBwZXJtaXNzaW9uIG9uIGF0IGxlYXN0IG9uZSBJQU0gcm9sZSB0aGF0IGNhbiBiZSBhc3N1bWVkIGJ5IHRoZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTdGVwRnVuY3Rpb25zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdGVwRnVuY3Rpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFuIGFjY2VzcyBwb2xpY3kgZm9yIHByb3ZpZGluZyBhIHVzZXIvcm9sZS9ldGMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQVdTIFN0ZXBGdW5jdGlvbnMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU3RlcEZ1bmN0aW9uc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0ZXBGdW5jdGlvbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBTdG9yYWdlIEdhdGV3YXkgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NTdG9yYWdlR2F0ZXdheUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RvcmFnZUdhdGV3YXlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBTdG9yYWdlIEdhdGV3YXkgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NTdG9yYWdlR2F0ZXdheVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0b3JhZ2VHYXRld2F5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlLWxpbmtlZCByb2xlIHVzZWQgYnkgQVdTIFN0b3JhZ2UgR2F0ZXdheSB0byBlbmFibGUgaW50ZWdyYXRpb24gb2Ygb3RoZXIgQVdTIHNlcnZpY2VzIHdpdGggU3RvcmFnZSBHYXRld2F5LiAqL1xuICAgIHB1YmxpYyBBV1NTdG9yYWdlR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0b3JhZ2VHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1NTdXBwbHlDaGFpbkZlZGVyYXRpb25BZG1pbkFjY2VzcyBwcm92aWRlcyBBV1MgU3VwcGx5IENoYWluIGZlZGVyYXRlZCB1c2VycyBhY2Nlc3MgdG8gdGhlIEFXUyBTdXBwbHkgQ2hhaW4gYXBwbGljYXRpb24sIGluY2x1ZGluZyB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gcGVyZm9ybSBhY3Rpb25zIHdpdGhpbiB0aGUgQVdTIFN1cHBseSBDaGFpbiBhcHBsaWNhdGlvbi4gVGhlIHBvbGljeSBwcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyBvdmVyIElBTSBJZGVudGl0eSBDZW50ZXIgdXNlcnMgYW5kIGdyb3VwcyBhbmQgaXMgYXR0YWNoZWQgdG8gYSByb2xlIGNyZWF0ZWQgYnkgQVdTIFN1cHBseSBDaGFpbiBvbiB5b3VyIGJlaGFsZi4gWW91IHNob3VsZG4ndCBhdHRhY2ggQVdTU3VwcGx5Q2hhaW5GZWRlcmF0aW9uQWRtaW5BY2Nlc3MgcG9saWN5IHRvIGFueSBvdGhlciBJQU0gZW50aXRpZXMuICovXG4gICAgcHVibGljIEFXU1N1cHBseUNoYWluRmVkZXJhdGlvbkFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBseUNoYWluRmVkZXJhdGlvbkFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHVzZXJzIHRvIGFjY2VzcyB0aGUgQVdTIFN1cHBvcnQgQ2VudGVyLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIFN1cHBvcnQgQXBwIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcywgc3VjaCBhcyBBV1MgU3VwcG9ydCBhbmQgU2VydmljZSBRdW90YXMuIFRoaXMgcG9saWN5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgc3VwcG9ydGluZyBzZXJ2aWNlcyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250YWN0IEFXUyBTdXBwb3J0IGZvciBzdXBwb3J0IGNhc2VzLCBjaGFuZ2Ugc2VydmljZSBxdW90YXMsIGFuZCBjcmVhdGUgdGhlIHJlbGV2YW50IHNlcnZpY2UtbGlua2VkIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0QXBwRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdXBwb3J0QXBwRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIEFXUyBTdXBwb3J0IEFwcC4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydEFwcFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRBcHBSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHN1cHBvcnRwbGFucy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydFBsYW5zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdXBwb3J0UGxhbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBzdXBwb3J0cGxhbnMuICovXG4gICAgcHVibGljIEFXU1N1cHBvcnRQbGFuc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRQbGFuc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBTdXBwb3J0IHRvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIHRvIHByb3ZpZGUgYmlsbGluZywgYWRtaW5pc3RyYXRpdmUsIGFuZCBzdXBwb3J0IHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFXUyBTeXN0ZW1zIE1hbmFnZXIgKFNTTSkgcGVybWlzc2lvbiB0byBkaXNjb3ZlciBBV1MgYWNjb3VudCBpbmZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJBY2NvdW50RGlzY292ZXJ5U2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckFjY291bnREaXNjb3ZlcnlTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IHRoZSBBV1MgU3lzdGVtcyBNYW5hZ2VyIGNoYW5nZSBtYW5hZ2VtZW50IGZyYW1ld29yay4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJDaGFuZ2VNYW5hZ2VtZW50U2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckNoYW5nZU1hbmFnZW1lbnRTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFXUyBTeXN0ZW1zIE1hbmFnZXIgUXVpY2sgU2V0dXAgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUgQVdTIENvbmZpZyBjb25maWd1cmF0aW9uIHJlY29yZGluZy4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJFbmFibGVDb25maWdSZWNvcmRpbmdFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJFbmFibGVDb25maWdSZWNvcmRpbmdFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgZm9yIGVuYWJsaW5nIEV4cGxvcmVyLCBhIGNhcGFiaWxpdHkgb2YgQVdTIFN5c3RlbXMgTWFuYWdlci4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byB1cGRhdGUgcmVsYXRlZCBTeXN0ZW1zIE1hbmFnZXIgc2VydmljZSBzZXR0aW5ncywgYW5kIHRvIGNyZWF0ZSBhIHNlcnZpY2UtbGlua2VkIHJvbGUgZm9yIFN5c3RlbXMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJFbmFibGVFeHBsb3JlckV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckVuYWJsZUV4cGxvcmVyRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFN5c3RlbXMgTWFuYWdlciBmb3IgU0FQIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJGb3JTQVBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyRm9yU0FQRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFN5c3RlbXMgTWFuYWdlciBmb3IgU0FQIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJGb3JTQVBSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckZvclNBUFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IHRoZSBBV1MgU3lzdGVtcyBNYW5hZ2VyIGp1c3QgaW4gdGltZSBhY2Nlc3MgZnJhbWV3b3JrLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1NlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbWFuYWdlZCBwb2xpY3kgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5Qb2xpY3kgYWxsb3dzIFN5c3RlbXMgTWFuYWdlciB0byBnZW5lcmF0ZSBhY2Nlc3MgdG9rZW5zIHVzZWQgZm9yIGp1c3QtaW4tdGltZSBub2RlIGFjY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbWFuYWdlZCBwb2xpY3kgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5TZXNzaW9uUG9saWN5IGFsbG93cyBTeXN0ZW1zIE1hbmFnZXIgdG8gYXBwbHkgc2NvcGVkIGRvd24gcGVybWlzc2lvbnMgdG8gYSBqdXN0LWluLXRpbWUgbm9kZSBhY2Nlc3Mgc2Vzc2lvbiBvbmNlIGl0IGlzIHN0YXJ0ZWQuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuU2Vzc2lvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NUb2tlblNlc3Npb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgU3lzdGVtcyBNYW5hZ2VyIHRvIHNoYXJlIGEgZGVueS1hY2Nlc3MgcG9saWN5IGZvciBqdXN0LWluLXRpbWUgbm9kZSBhY2Nlc3MgZnJvbSB0aGUgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudCB0byBtZW1iZXIgYWNjb3VudHMsIGFuZCByZXBsaWNhdGUgdGhlIHBvbGljeSB0byBtdWx0aXBsZSBSZWdpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVOb2RlQWNjZXNzUm9sZVByb3BhZ2F0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZU5vZGVBY2Nlc3NSb2xlUHJvcGFnYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCB0byBjb2xsZWN0IGluZm9ybWF0aW9uIGFib3V0IGEgdXNlciBmb3IgSnVzdC1Jbi1UaW1lLU5vZGUtQWNjZXNzIG5vdGlmaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyTm90aWZpY2F0aW9uc1NlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJOb3RpZmljYXRpb25zU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIElBTSByb2xlIGZvciBTU00gRXhwbG9yZXIgdG8gbWFuYWdlIE9wc0RhdGEgcmVsYXRlZCBvcGVyYXRpb25zICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyT3BzRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlck9wc0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIEFXUyBQb3J0YWwgQXNzZXQgU2VydmVyIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94QXNzZXRTZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hBc3NldFNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBBV1MgVGhpbmtib3gncyBEZWFkbGluZSBzb2Z0d2FyZSBmdWxsIGFjY2VzcyB0byBtdWx0aXBsZSBBV1Mgc2VydmljZXMgYXMgcmVxdWlyZWQgZm9yIEFXUyBQb3J0YWwgYWRtaW5pc3RyYXRpb24uIFRoaXMgaW5jbHVkZXMgYWNjZXNzIHRvIGNyZWF0ZSBhcmJpdHJhcnkgdGFncyBvbiBzZXZlcmFsIEVDMiByZXNvdXJjZSB0eXBlcy4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hBV1NQb3J0YWxBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUaGlua2JveEFXU1BvcnRhbEFkbWluUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBBV1MgUG9ydGFsIEdhdGV3YXkgbWFjaGluZSB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveEFXU1BvcnRhbEdhdGV3YXlQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hBV1NQb3J0YWxHYXRld2F5UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBEZWFkbGluZSBXb3JrZXJzIGluIEFXUyBQb3J0YWwgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hBV1NQb3J0YWxXb3JrZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hBV1NQb3J0YWxXb3JrZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIHRoZSBvcGVyYXRpb24gb2YgQVdTIFRoaW5rYm94J3MgRGVhZGxpbmUgUmVzb3VyY2UgVHJhY2tlci4gIFRoaXMgaW5jbHVkZXMgZnVsbCBhY2Nlc3MgdG8gc29tZSBFQzIgYWN0aW9ucywgaW5jbHVkaW5nIERlbGV0ZUZsZWV0cyBhbmQgQ2FuY2VsU3BvdEZsZWV0UmVxdWVzdHMuICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94RGVhZGxpbmVSZXNvdXJjZVRyYWNrZXJBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hEZWFkbGluZVJlc291cmNlVHJhY2tlckFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBjcmVhdGUsIGRlc3Ryb3ksIGFuZCBhZG1pbmlzdGVyIEFXUyBUaGlua2JveCdzIERlYWRsaW5lIFJlc291cmNlIFRyYWNrZXIuICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94RGVhZGxpbmVSZXNvdXJjZVRyYWNrZXJBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUaGlua2JveERlYWRsaW5lUmVzb3VyY2VUcmFja2VyQWRtaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIEFXUyBUaGlua2JveCdzIERlYWRsaW5lIFNwb3QgRXZlbnQgUGx1Z2luLiAgVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9uIHRvIHJlcXVlc3QsIG1vZGlmeSwgYW5kIGNhbmNlbCBhIHNwb3QgZmxlZXQsIGFzIHdlbGwgYXMgbGltaXRlZCBQYXNzUm9sZSBwZXJtaXNzaW9uLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveERlYWRsaW5lU3BvdEV2ZW50UGx1Z2luQWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hEZWFkbGluZVNwb3RFdmVudFBsdWdpbkFkbWluUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnQgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIGFuIEVDMiBpbnN0YW5jZSBydW5uaW5nIEFXUyBUaGlua2JveCBEZWFkbGluZSBTcG90IEV2ZW50IFBsdWdpbiBXb3JrZXIgc29mdHdhcmUuICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94RGVhZGxpbmVTcG90RXZlbnRQbHVnaW5Xb3JrZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hEZWFkbGluZVNwb3RFdmVudFBsdWdpbldvcmtlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBUcmFuc2ZlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmZXJDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2ZlckNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFRyYW5zZmVyIFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1RyYW5zZmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2ZlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFRyYW5zZmVyIGZ1bGwgYWNjZXNzIHRvIGNyZWF0ZSBsb2cgc3RyZWFtcyBhbmQgZ3JvdXBzIGFuZCBwdXQgbG9nIGV2ZW50cyB0byB5b3VyIGFjY291bnQgKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmZXJMb2dnaW5nQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZmVyTG9nZ2luZ0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZG9ubHkgYWNjZXNzIHRvIEFXUyBUcmFuc2ZlciBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2ZlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyB0aGUgQVdTIFRyYW5zZm9ybSBzZXJ2aWNlIHRvIGRlcGxveSB0cmFuc2Zvcm1lZCAuTkVUIGFwcGxpY2F0aW9ucyBieSBjcmVhdGluZyBhbmQgbWFuYWdpbmcgQVdTIHJlc291cmNlcy4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHByb3Zpc2lvbiBpbmZyYXN0cnVjdHVyZSwgbWFuYWdlIGNvbXB1dGUgcmVzb3VyY2VzLCBhbmQgY29uZmlndXJlIGRlcGxveW1lbnQgc2V0dGluZ3MgYWNyb3NzIHZhcmlvdXMgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1BcHBsaWNhdGlvbkRlcGxveW1lbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtQXBwbGljYXRpb25EZXBsb3ltZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyB0aGUgQVdTIFRyYW5zZm9ybSB0byBkZXBsb3kgYXBwbGljYXRpb25zIHRvIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIChFQ1MpIHdpdGggRmFyZ2F0ZS4gSXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHByb3Zpc2lvbiwgY29uZmlndXJlLCBhbmQgbWFuYWdlIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIHJlcXVpcmVkIHRvIHJ1biBhcHBsaWNhdGlvbnMgb24gRUNTLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1BcHBsaWNhdGlvbkVDU0RlcGxveW1lbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtQXBwbGljYXRpb25FQ1NEZXBsb3ltZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGV4ZWN1dGUgdHJhbnNmb3JtYXRpb25zIGluIEFXUyBUcmFuc2Zvcm0gY3VzdG9tLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1DdXN0b21FeGVjdXRlVHJhbnNmb3JtYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUN1c3RvbUV4ZWN1dGVUcmFuc2Zvcm1hdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgVHJhbnNmb3JtIGN1c3RvbS4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtQ3VzdG9tRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2Zvcm1DdXN0b21GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyB0aGUgbWFuYWdlbWVudCBvZiB0cmFuc2Zvcm1hdGlvbiByZXNvdXJjZXMgYW5kIGV4ZWN1dGlvbiBvZiB0cmFuc2Zvcm1hdGlvbnMgaW4gQVdTIFRyYW5zZm9ybSBjdXN0b20uICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybUN1c3RvbU1hbmFnZVRyYW5zZm9ybWF0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2Zvcm1DdXN0b21NYW5hZ2VUcmFuc2Zvcm1hdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIHRoZSBBV1MgVHJhbnNmb3JtIHNlcnZpY2UgdG8gcmVhZCBhIHNwZWNpZmllZCBTZWNyZXRzTWFuYWdlciBTZWNyZXQgaW4gY29ubmVjdGlvbiB0byBzcGVjaWZpZWQgS01TIGtleS4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHJlYWQgdGhlIHNwZWNpZmllZCBzZWNyZXQgdmFsdWUgYW5kIGRlY3J5cHQgaXQgaXMgdGhlIHNlY3JldCBpcyBlbmNyeXB0ZWQgKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtU2VjcmV0c01hbmFnZXJDb25uZWN0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtU2VjcmV0c01hbmFnZXJDb25uZWN0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgVHJ1c3RlZCBBZHZpc29yIFByaW9yaXR5LiBUaGlzIHBvbGljeSBhbHNvIGVuYWJsZXMgdGhlIHVzZXIgdG8gYWRkIFRydXN0ZWQgQWR2aXNvciBhcyBhIHRydXN0ZWQgc2VydmljZSB3aXRoIEFXUyBPcmdhbml6YXRpb25zIGFuZCB0byBzcGVjaWZ5IGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnRzIGZvciBUcnVzdGVkIEFkdmlzb3IgUHJpb3JpdHkuICovXG4gICAgcHVibGljIEFXU1RydXN0ZWRBZHZpc29yUHJpb3JpdHlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RydXN0ZWRBZHZpc29yUHJpb3JpdHlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgVHJ1c3RlZCBBZHZpc29yIFByaW9yaXR5LiBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb24gdG8gdmlldyB0aGUgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudHMuICovXG4gICAgcHVibGljIEFXU1RydXN0ZWRBZHZpc29yUHJpb3JpdHlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcnVzdGVkQWR2aXNvclByaW9yaXR5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIFBvbGljeSBmb3IgVHJ1c3RlZCBBZHZpc29yIE11bHRpLWFjY291bnQgUmVwb3J0aW5nICovXG4gICAgcHVibGljIEFXU1RydXN0ZWRBZHZpc29yUmVwb3J0aW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJ1c3RlZEFkdmlzb3JSZXBvcnRpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyBmb3IgdGhlIEFXUyBUcnVzdGVkIEFkdmlzb3IgU2VydmljZSB0byBoZWxwIHJlZHVjZSBjb3N0LCBpbmNyZWFzZSBwZXJmb3JtYW5jZSwgYW5kIGltcHJvdmUgc2VjdXJpdHkgb2YgeW91ciBBV1MgZW52aXJvbm1lbnQuICovXG4gICAgcHVibGljIEFXU1RydXN0ZWRBZHZpc29yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJ1c3RlZEFkdmlzb3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdXNlciBhdHRyaWJ1dGVzIGZyb20gQVdTIElBTSBJZGVudGl0eSBDZW50ZXIgZm9yIHRoZSB1c2VyIGF0dHJpYnV0ZXMgdGhhdCB0aGUgY3VzdG9tZXIgaGFzIG9wdGVkIGluIHRvLiAqL1xuICAgIHB1YmxpYyBBV1NVc2VyQXR0cmlidXRlQ29zdEFsbG9jYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVXNlckF0dHJpYnV0ZUNvc3RBbGxvY2F0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBVc2VyIE5vdGlmaWNhdGlvbnMgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1VzZXJOb3RpZmljYXRpb25zU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVXNlck5vdGlmaWNhdGlvbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIGZvciB2aWV3aW5nIGVudGl0bGVkIFZlbmRvciBJbnNpZ2h0cyByZXNvdXJjZXMgYW5kIG1hbmFnaW5nIFZlbmRvciBJbnNpZ2h0cyBzdWJzY3JpcHRpb25zICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyBmb3Igdmlld2luZyBlbnRpdGxlZCBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWZW5kb3JJbnNpZ2h0c0Fzc2Vzc29yUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHRoZSBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzVmVuZG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWZW5kb3JJbnNpZ2h0c1ZlbmRvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIGZvciB2aWV3aW5nIHRoZSBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzVmVuZG9yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVmVuZG9ySW5zaWdodHNWZW5kb3JSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgTGF0dGljZSB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTVnBjTGF0dGljZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZwY0xhdHRpY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFNpdGUtdG8tU2l0ZSBWUE4gdG8gY3JlYXRlIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIHJlbGF0ZWQgdG8geW91ciBWUE4gQ29ubmVjdGlvbnMuICovXG4gICAgcHVibGljIEFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgVlBDIFRyYW5zaXQgR2F0ZXdheSB0byBjcmVhdGUgYW5kIG1hbmFnZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGZvciB5b3VyIFRyYW5zaXQgR2F0ZXdheSBWUEMgQXR0YWNobWVudHMuICovXG4gICAgcHVibGljIEFXU1ZQQ1RyYW5zaXRHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVlBDVHJhbnNpdEdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIFZlcmlmaWVkIEFjY2VzcyBzZXJ2aWNlIHRvIHByb3Zpc2lvbiBlbmRwb2ludHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTVlBDVmVyaWZpZWRBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWUENWZXJpZmllZEFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCB1cGRhdGUgQW1hem9uIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9ucywgcGVybWlzc2lvbnMgdG8gdmlldyBsb2FkIGJhbGFuY2VycyBvbiBBV1MgRWxhc3RpYyBMb2FkIEJhbGFuY2luZywgcGVybWlzc2lvbnMgdG8gdmlldyBBbWF6b24gQVBJIEdhdGV3YXkgUkVTVCBBUElzIGFuZCBzdGFnZXMsIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIHZpZXcgQW1hem9uIENsb3VkV2F0Y2ggbWV0cmljcywgYW5kIHBlcm1pc3Npb25zIHRvIHZpZXcgcmVnaW9ucyBlbmFibGVkIHdpdGhpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgdG8gbGlzdCBBbWF6b24gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25zLCBwZXJtaXNzaW9ucyB0byB2aWV3IGxvYWQgYmFsYW5jZXJzIG9uIEFXUyBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBwZXJtaXNzaW9ucyB0byB2aWV3IEFtYXpvbiBBUEkgR2F0ZXdheSBSRVNUIEFQSXMgYW5kIHN0YWdlcywgcGVybWlzc2lvbnMgdG8gbGlzdCBhbmQgdmlldyBBbWF6b24gQ2xvdWRXYXRjaCBtZXRyaWNzLCBhbmQgcGVybWlzc2lvbnMgdG8gdmlldyByZWdpb25zIGVuYWJsZWQgd2l0aGluIHRoZSBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NXQUZDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NXQUZGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dBRkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTV0FGUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgV2VsbEFyY2hpdGVjdGVkIHRvIGFjY2VzcyBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcyB0aGF0IHJlbGF0ZSB0byBXZWxsQXJjaGl0ZWN0ZWQgcmVzb3VyY2VzIG9uIGJlaGFsZiBvZiBjdXN0b21lcnMuICovXG4gICAgcHVibGljIEFXU1dlbGxBcmNoaXRlY3RlZERpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dlbGxBcmNoaXRlY3RlZERpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFdlbGwtQXJjaGl0ZWN0ZWQgdG8gYWNjZXNzIE9yZ2FuaXphdGlvbnMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1dlbGxBcmNoaXRlY3RlZE9yZ2FuaXphdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NXZWxsQXJjaGl0ZWN0ZWRPcmdhbml6YXRpb25zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgZnVsbCBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byB0aGUgV2lja3Igc2VydmljZSwgaW5jbHVkaW5nIHRoZSBXaWNrciBhZG1pbmlzdHJhdGl2ZSBmdW5jdGlvbnMgdW5kZXIgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1dpY2tyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NXaWNrckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIFgtUmF5IHRyYWNlcyAqL1xuICAgIHB1YmxpYyBBV1NYcmF5Q3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWHJheUNyb3NzQWNjb3VudFNoYXJpbmdDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgdGhlIEFXUyBYLVJheSBEYWVtb24gdG8gcmVsYXkgcmF3IHRyYWNlIHNlZ21lbnRzIGRhdGEgdG8gdGhlIHNlcnZpY2UncyBBUEkgYW5kIHJldHJpZXZlIHNhbXBsaW5nIGRhdGEgKHJ1bGVzLCB0YXJnZXRzLCBldGMuKSB0byBiZSB1c2VkIGJ5IHRoZSBYLVJheSBTREsuICovXG4gICAgcHVibGljIEFXU1hSYXlEYWVtb25Xcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYUmF5RGFlbW9uV3JpdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgZnVsbCBhY2Nlc3MgbWFuYWdlZCBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTWHJheUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWHJheUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgcmVhZCBvbmx5IG1hbmFnZWQgcG9saWN5ICovXG4gICAgcHVibGljIEFXU1hyYXlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYcmF5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgd3JpdGUgb25seSBtYW5hZ2VkIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NYcmF5V3JpdGVPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1hyYXlXcml0ZU9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgZm9yIEFSQyB6b25hbCBzaGlmdCBwcmFjdGljZSBydW5zLCBhbmQgYWNjZXNzIHRvIENsb3VkV2F0Y2ggYWxhcm0gc3RhdHVzZXMgdG8gbW9uaXRvciBwcmFjdGljZSBydW5zLiAqL1xuICAgIHB1YmxpYyBBV1Nab25hbEF1dG9zaGlmdFByYWN0aWNlUnVuU0xSUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1pvbmFsQXV0b3NoaWZ0UHJhY3RpY2VSdW5TTFJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBUElzIG5lZWRlZCB0byBzdXBwb3J0IHpvbmUtZ3JvdXAgYWNjZXNzLW1hbmFnZW1lbnQgZm9yIG9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFXU1pvbmVHcm91cEFjY2Vzc01hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1Nab25lR3JvdXBBY2Nlc3NNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIHRoZSBBV1MgQmF0Y2ggc2VydmljZSB0byBtYW5hZ2UgdGhlIHJlcXVpcmVkIHJlc291cmNlcywgaW5jbHVkaW5nIEFtYXpvbiBFQzIgYW5kIEFtYXpvbiBFQ1MgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBCYXRjaFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkJhdGNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBCZWRyb2NrIEFnZW50Q29yZSBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEJlZHJvY2sgQWdlbnRDb3JlIGluIFZQQyBtb2RlICovXG4gICAgcHVibGljIEJlZHJvY2tBZ2VudENvcmVOZXR3b3JrU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZU5ldHdvcmtTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gaWRlbnRpdHkgYW5kIHRva2VuIG1hbmFnZW1lbnQgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciBBbWF6b24gQmVkcm9jayBBZ2VudENvcmUgUnVudGltZSBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVJZGVudGl0eVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkJlZHJvY2tBZ2VudENvcmVSdW50aW1lSWRlbnRpdHlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyBmb3IgYmlsbGluZyBhbmQgY29zdCBtYW5hZ2VtZW50LiBUaGlzIGluY2x1ZGVzIHZpZXdpbmcgYWNjb3VudCB1c2FnZSBhbmQgdmlld2luZyBhbmQgbW9kaWZ5aW5nIGJ1ZGdldHMgYW5kIHBheW1lbnQgbWV0aG9kcy4gKi9cbiAgICBwdWJsaWMgQmlsbGluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5CaWxsaW5nKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEJ1ZGdldHMgdG8gdmVyaWZ5IGFjY2VzcyB0byBCaWxsaW5nIFZpZXdzIHNoYXJlZCBhY3Jvc3MgYWNjb3VudCBib3VuZGFyaWVzLiAqL1xuICAgIHB1YmxpYyBCdWRnZXRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQnVkZ2V0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIENlcnRpZmljYXRlIE1hbmFnZXIgU2VydmljZSBSb2xlIFBvbGljeSAqL1xuICAgIHB1YmxpYyBDZXJ0aWZpY2F0ZU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DZXJ0aWZpY2F0ZU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIENsaWVudCBWUE4gdG8gbWFuYWdlIHlvdXIgQ2xpZW50IFZQTiBlbmRwb2ludCBjb25uZWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQ2xpZW50VlBOU2VydmljZUNvbm5lY3Rpb25zUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbGllbnRWUE5TZXJ2aWNlQ29ubmVjdGlvbnNSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBV1MgQ2xpZW50IFZQTiB0byBtYW5hZ2UgeW91ciBDbGllbnQgVlBOIGVuZHBvaW50cy4gKi9cbiAgICBwdWJsaWMgQ2xpZW50VlBOU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xpZW50VlBOU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIFJvbGUgZm9yIENsb3VkRm9ybWF0aW9uIFN0YWNrU2V0cyAoT3JnYW5pemF0aW9uIE1hc3RlciBBY2NvdW50KSAqL1xuICAgIHB1YmxpYyBDbG91ZEZvcm1hdGlvblN0YWNrU2V0c09yZ0FkbWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdBZG1pblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBSb2xlIGZvciBDbG91ZEZvcm1hdGlvbiBTdGFja1NldHMgKE9yZ2FuaXphdGlvbiBNZW1iZXIgQWNjb3VudCkgKi9cbiAgICBwdWJsaWMgQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdNZW1iZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEZvcm1hdGlvblN0YWNrU2V0c09yZ01lbWJlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIENsb3VkRnJvbnQgY29uc29sZSBwbHVzIHRoZSBhYmlsaXR5IHRvIGxpc3QgQW1hem9uIFMzIGJ1Y2tldHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBDbG91ZEZyb250RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEZyb250RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBsaXN0IGRpc3RyaWJ1dGlvbnMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBDbG91ZEZyb250UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGcm9udFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIHJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQ2xvdWRIU00gKi9cbiAgICBwdWJsaWMgQ2xvdWRIU01TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEhTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBDbG91ZFNlYXJjaCBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIENsb3VkU2VhcmNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFNlYXJjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gQ2xvdWRTZWFyY2ggY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBDbG91ZFNlYXJjaFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkU2VhcmNoUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHNlcnZpY2UgbGlua2VkIHJvbGUgYWxsb3dzIENsb3VkVHJhaWwgdG8gZ2V0IGFuZCBhZGQgcmVzb3VyY2UgdGFncyB0byB0aGUgcmVzb3VyY2Ugb3duZXIncyBDbG91ZFRyYWlsIGV2ZW50cy4gKi9cbiAgICBwdWJsaWMgQ2xvdWRUcmFpbEV2ZW50Q29udGV4dCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFRyYWlsRXZlbnRDb250ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbiBwb2xpY3kgZm9yIENsb3VkVHJhaWwgU2VydmljZUxpbmtlZFJvbGUgKi9cbiAgICBwdWJsaWMgQ2xvdWRUcmFpbFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkVHJhaWxTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZFdhdGNoIHRvIGFzc3VtZSBDbG91ZFdhdGNoLUNyb3NzQWNjb3VudFNoYXJpbmcgcm9sZXMgaW4gcmVtb3RlIGFjY291bnRzIG9uIGJlaGFsZiBvZiB0aGUgY3VycmVudCBhY2NvdW50IGluIG9yZGVyIHRvIGRpc3BsYXkgZGF0YSBjcm9zcy1hY2NvdW50LCBjcm9zcy1yZWdpb24gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaENyb3NzQWNjb3VudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQ3Jvc3NBY2NvdW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIGFsYXJtcyBhbmQgbWV0cmljcyBhcyB3ZWxsIGFzIEVDMiBtZXRhZGF0YS4gUHJvdmlkZXMgYWNjZXNzIHRvIFN0b3AsIFRlcm1pbmF0ZSBhbmQgUmVib290IEVDMiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hBY3Rpb25zRUMyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBY3Rpb25zRUMyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byB1c2UgQW1hem9uQ2xvdWRXYXRjaEFnZW50LiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQWdlbnRBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQWdlbnRBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHVzZSBBbWF6b25DbG91ZFdhdGNoQWdlbnQgb24gc2VydmVycyAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQWdlbnRTZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFnZW50U2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBJbnNpZ2h0cyBhbmQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uSW5zaWdodHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBDbG91ZHdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5ICovXG4gICAgcHVibGljIENsb3Vkd2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWR3YXRjaEFwcGxpY2F0aW9uSW5zaWdodHNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBTaWduYWxzIHNlcnZpY2UgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gdXNlIGFuZCBvcGVyYXRlIHRoaXMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIFNpZ25hbHMgdG8gY29sbGVjdCBtb25pdG9yaW5nIGFuZCB0YWdnaW5nIGRhdGEgZnJvbSBvdGhlciByZWxldmFudCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQXBwbGljYXRpb25TaWduYWxzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG5vbi1DbG91ZFdhdGNoIEFQSXMgdXNlZCB0byBkaXNwbGF5IENsb3VkV2F0Y2ggQXV0b21hdGljIERhc2hib2FyZHMsIGluY2x1ZGluZyB0aGUgY29udGVudHMgb2Ygb2JqZWN0cyBzdWNoIGFzIExhbWJkYSBmdW5jdGlvbnMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggcmVzb3VyY2VzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQ3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYnVpbHQtaW4gdGFyZ2V0cyBpbiBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMgdG8gcGVyZm9ybSBFQzIgYWN0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDbG91ZFdhdGNoIEV2ZW50cyB0byByZWxheSBldmVudHMgdG8gdGhlIHN0cmVhbXMgaW4gQVdTIEtpbmVzaXMgU3RyZWFtcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoRXZlbnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBV1MgQ2xvdWRXYXRjaCB0byBleGVjdXRlIGFjdGlvbnMgb24geW91ciBiZWhhbGYgY29uZmlndXJlZCB0aHJvdWdoIGFsYXJtcyBhbmQgZXZlbnRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhY3Rpb25zIGZvciB3b3JraW5nIHdpdGggQW1hem9uIENsb3VkV2F0Y2ggSW50ZXJuZXQgTW9uaXRvci4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgc2VydmljZXMsIHN1Y2ggYXMgQW1hem9uIENsb3VkV2F0Y2gsIEFtYXpvbiBFQzIsIEFtYXpvbiBDbG91ZEZyb250LCBBbWF6b24gV29ya1NwYWNlcywgYW5kIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWN0aW9ucyBmb3Igd29ya2luZyB3aXRoIEFtYXpvbiBDbG91ZFdhdGNoIEludGVybmV0IE1vbml0b3IuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIHNlcnZpY2VzIGluIEFtYXpvbiBDbG91ZFdhdGNoLCBpbmNsdWRpbmcgcG9saWNpZXMgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gQ2xvdWRXYXRjaCBtZXRyaWNzIGFuZCB0byBtYW5hZ2UgbG9nIHF1ZXJpZXMsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEludGVybmV0TW9uaXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEludGVybmV0IE1vbml0b3IgdG8gYWNjZXNzIEVDMiwgV29ya3NwYWNlcywgYW5kIENsb3VkRnJvbnQgcmVzb3VyY2VzLCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hJbnRlcm5ldE1vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gWC1SYXkgYW5kIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBsb2cgZ3JvdXAuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHJlcXVpcmVkIGZvciB0aGUgTGFtYmRhIEluc2lnaHRzIEV4dGVuc2lvbiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTGFtYmRhSW5zaWdodHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFJbnNpZ2h0c0V4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gY2FsbCBDbG91ZFdhdGNoIExvZ3MgdXNpbmcgQVBJIGtleSBhdXRoZW50aWNhdGlvbi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaExvZ3NBUElLZXlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaExvZ3NBUElLZXlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggTG9ncyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaExvZ3NDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Nyb3NzQWNjb3VudFNoYXJpbmdDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBMb2dzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMb2dzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggTG9ncyAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTG9nc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMb2dzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIHVzZSB0aGlzIHBvbGljeSBpbiBJQU0gcm9sZXMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gQW1hem9uIEVDMiBhbmQgQW1hem9uIEVLUyBpbnN0YW5jZSByZXNvdXJjZXMgdG8gc2VuZCB0ZWxlbWV0cnkgcmVwb3J0cyAobWV0cmljcykgdG8gYSBOZXR3b3JrIEZsb3cgTW9uaXRvciBlbmRwb2ludC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvckFnZW50UHVibGlzaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yQWdlbnRQdWJsaXNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3kgdG8geW91ciBJQU0gZW50aXRpZXMuIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSBuYW1lZCBBV1NTZXJ2aWNlUm9sZUZvck5ldHdvcmtGbG93TW9uaXRvciwgd2hpY2ggcHVibGlzaGVzIG5ldHdvcmsgdGVsZW1ldHJ5IGFnZ3JlZ2F0aW9uIHJlc3VsdHMsIGNvbGxlY3RlZCBieSBOZXR3b3JrIEZsb3cgTW9uaXRvciBhZ2VudHMsIHRvIENsb3VkV2F0Y2guIEl0IGFsc28gYWxsb3dzIHRoZSBzZXJ2aWNlIHRvIHVzZSBBV1MgT3JnYW5pemF0aW9ucyB0byBnZXQgaW5mb3JtYXRpb24gZm9yIG11bHRpLWFjY291bnQgc2NlbmFyaW9zLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yVG9wb2xvZ3lTZXJ2aWNlUm9sZVBvbGljeSB0byB5b3VyIElBTSBlbnRpdGllcy4gVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gYSBzZXJ2aWNlLWxpbmtlZCByb2xlIG5hbWVkIEFXU1NlcnZpY2VSb2xlRm9yTmV0d29ya0Zsb3dNb25pdG9yX1RvcG9sb2d5LCB3aGljaCBnZW5lcmF0ZXMgdG9wb2xvZ3kgc25hcHNob3RzIG9mIHJlc291cmNlcyB1c2VkIGJ5IE5ldHdvcmsgRmxvdyBNb25pdG9yIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRXYXRjaCBOZXR3b3JrIE1vbml0b3IgdG8gYWNjZXNzIGFuZCBtYW5hZ2UgRUMyIGFuZCBWUEMgcmVzb3VyY2VzLCBwdWJsaXNoIGRhdGEgdG8gQ2xvdWRXYXRjaCBhbmQgYWNjZXNzIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHVzZXIgYWNjZXNzIHRvIHZpZXcgT3BlblNlYXJjaCBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyB1c2VyIGFjY2VzcyB0byBjcmVhdGUgaW50ZWdyYXRpb24gd2l0aCBPcGVuU2VhcmNoIHRvIGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUgb3IgdmlldyBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoT3BlblNlYXJjaERhc2hib2FyZHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBTeW50aGV0aWNzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoU3ludGhldGljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIFN5bnRoZXRpY3MuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hTeW50aGV0aWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIENvbXByZWhlbmQgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gUzMgcmVzb3VyY2VzIGZvciBkYXRhIGFjY2VzcyAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kRGF0YUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZERhdGFBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQuICovXG4gICAgcHVibGljIENvbXByZWhlbmRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQgTWVkaWNhbCAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kTWVkaWNhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZE1lZGljYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gQ29tcHJlaGVuZC4gKi9cbiAgICBwdWJsaWMgQ29tcHJlaGVuZFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBDb21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5IG1hbmFnZWQgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSB0aGF0IGFsbG93cyBDb21wdXRlIE9wdGltaXplciB0byBwZXJmb3JtIGFjdGlvbnMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplckF1dG9tYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDb21wdXRlT3B0aW1pemVyLiAqL1xuICAgIHB1YmxpYyBDb21wdXRlT3B0aW1pemVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHV0ZU9wdGltaXplclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvbXB1dGVPcHRpbWl6ZXIgdG8gY2FsbCBBV1Mgc2VydmljZXMgYW5kIGNvbGxlY3Qgd29ya2xvYWQgZGV0YWlscyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXB1dGVPcHRpbWl6ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBuZWVkZWQgZm9yIEFXU0NvbmZpZyB0byBjcmVhdGUgY29uZm9ybWFuY2UgcGFja3MgKi9cbiAgICBwdWJsaWMgQ29uZmlnQ29uZm9ybXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db25maWdDb25mb3Jtc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRm9yIHVzZSB3aXRoIGFjY291bnRzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgVmVyY2VsIE1hcmtldHBsYWNlIGludGVncmF0aW9uIHdpdGggQVdTLiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIGFsbCByZXNvdXJjZXMgZm9yIHRoZSBzZXJ2aWNlcyB0aGF0IGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIFZlcmNlbCBNYXJrZXRwbGFjZS4gKi9cbiAgICBwdWJsaWMgQ29uc29sZUZ1bGxBY2Nlc3NGcm9tVmVyY2VsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbnNvbGVGdWxsQWNjZXNzRnJvbVZlcmNlbCk7XG4gICAgfVxuXG4gICAgLyoqIEZvciB1c2Ugd2l0aCBhY2NvdW50cyBjcmVhdGVkIHRocm91Z2ggdGhlIFZlcmNlbCBNYXJrZXRwbGFjZSBpbnRlZ3JhdGlvbiB3aXRoIEFXUy4gUHJvdmlkZXMgYWNjZXNzIHRvIHZpZXcgYWxsIHJlc291cmNlcyBmb3IgdGhlIHNlcnZpY2VzIHRoYXQgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgVmVyY2VsIE1hcmtldHBsYWNlLiAqL1xuICAgIHB1YmxpYyBDb25zb2xlVmlld09ubHlBY2Nlc3NGcm9tVmVyY2VsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbnNvbGVWaWV3T25seUFjY2Vzc0Zyb21WZXJjZWwpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIGFkbWluIGFjY2VzcyB0byBDb3N0IE9wdGltaXphdGlvbiBIdWIuICovXG4gICAgcHVibGljIENvc3RPcHRpbWl6YXRpb25IdWJBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db3N0T3B0aW1pemF0aW9uSHViQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQ29zdCBPcHRpbWl6YXRpb24gSHViLiAqL1xuICAgIHB1YmxpYyBDb3N0T3B0aW1pemF0aW9uSHViUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29zdE9wdGltaXphdGlvbkh1YlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvc3QgT3B0aW1pemF0aW9uIEh1YiB0byByZXRyaWV2ZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gYW5kIGNvbGxlY3Qgb3B0aW1pemF0aW9uLXJlbGF0ZWQgZGF0YSBhbmQgbWV0YWRhdGEuICovXG4gICAgcHVibGljIENvc3RPcHRpbWl6YXRpb25IdWJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db3N0T3B0aW1pemF0aW9uSHViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvbm5lY3QgQ3VzdG9tZXIgUHJvZmlsZXMgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBDdXN0b21lclByb2ZpbGVzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ3VzdG9tZXJQcm9maWxlc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIEFXUyBzZXJ2aWNlcyBhbmQgYWN0aW9ucyByZXF1aXJlZCB0byBzZXQgdXAgYW5kIGNvbmZpZ3VyZSBBV1MgZGF0YWJhc2Ugc2VydmljZXMuICovXG4gICAgcHVibGljIERhdGFiYXNlQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EYXRhYmFzZUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIGRhdGEgYW5hbHl0aWNzIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBEYXRhU2NpZW50aXN0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRhdGFTY2llbnRpc3QpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgREFYIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIE5ldHdvcmsgaW50ZXJmYWNlLCBTZWN1cml0eSBncm91cCwgU3VibmV0IGFuZCBWcGMgb24gYmVoYWxmIG9mIGN1c3RvbWVyICovXG4gICAgcHVibGljIERBWFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRBWFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGlzY292ZXJ5IGFuZCBBc3Nlc3NtZW50IHBlcm1pc3Npb25zIGZvciBkYXRhYmFzZSBjb25uZWN0b3IgdXNlZCBpbiBkYXRhYmFzZSBtb2Rlcm5pemF0aW9uICovXG4gICAgcHVibGljIERCTW9kRGlzY292ZXJ5QW5kQXNzZXNzbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EQk1vZERpc2NvdmVyeUFuZEFzc2Vzc21lbnQpO1xuICAgIH1cblxuICAgIC8qKiBSZXNvdXJjZSBwcm92aXNpb25pbmcgYW5kIGRhdGEgbWlncmF0aW9uIHBlcm1pc3Npb25zIGZvciBkYXRhYmFzZSBjb25uZWN0b3IgdXNlZCBpbiBkYXRhYmFzZSBtb2Rlcm5pemF0aW9uICovXG4gICAgcHVibGljIERCTW9kUHJvdmlzaW9uaW5nQW5kTWlncmF0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRCTW9kUHJvdmlzaW9uaW5nQW5kTWlncmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHJlYWQtb25seSBBUElzIG5lZWRlZCB0byBydW4gRUMyIERlY2xhcmF0aXZlIFBvbGljaWVzIEFjY291bnQgU3RhdHVzIFJlcG9ydC4gKi9cbiAgICBwdWJsaWMgRGVjbGFyYXRpdmVQb2xpY2llc0VDMlJlcG9ydCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EZWNsYXJhdGl2ZVBvbGljaWVzRUMyUmVwb3J0KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gc3VwcG9ydCBBbWF6b24gQ2xvdWRXYXRjaCBDb250cmlidXRvciBJbnNpZ2h0cyBmb3IgQW1hem9uIER5bmFtb0RCLiAqL1xuICAgIHB1YmxpYyBEeW5hbW9EQkNsb3VkV2F0Y2hDb250cmlidXRvckluc2lnaHRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRHluYW1vREJDbG91ZFdhdGNoQ29udHJpYnV0b3JJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgRHluYW1vREIgdG8gbWFuYWdlIGdsb2JhbCB0YWJsZSByZXBsaWNhIHNldHRpbmdzICovXG4gICAgcHVibGljIER5bmFtb0RCR2xvYmFsVGFibGVTZXR0aW5nc01hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EeW5hbW9EQkdsb2JhbFRhYmxlU2V0dGluZ3NNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIEFXUyBEeW5hbW9EQiBhY2Nlc3MgdG8gS2luZXNpc0RhdGFTdHJlYW1zICovXG4gICAgcHVibGljIER5bmFtb0RCS2luZXNpc1JlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRHluYW1vREJLaW5lc2lzUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IER5bmFtb0RCIGZvciBjcm9zcy1yZWdpb24gZGF0YSByZXBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBEeW5hbW9EQlJlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRHluYW1vREJSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEVDMiBGYXN0IExhdW5jaCBhY3Rpb25zICovXG4gICAgcHVibGljIEVDMkZhc3RMYXVuY2hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkZhc3RMYXVuY2hGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50cyBlYzJmYXN0bGF1bmNoIHRvIHByZXBhcmUgYW5kIG1hbmFnZSBwcmVwcm92aXNpb25lZCBzbmFwc2hvdHMgaW4gY3VzdG9tZXIncyBhY2NvdW50ICYgcHVibGlzaCByZWxhdGVkIG1ldHJpY3MuICovXG4gICAgcHVibGljIEVDMkZhc3RMYXVuY2hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJGYXN0TGF1bmNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gRUMyIEZsZWV0IHRvIGxhdW5jaCBpbnN0YW5jZXMgaW4gdGhlIGZ1dHVyZS4gKi9cbiAgICBwdWJsaWMgRUMyRmxlZXRUaW1lU2hpZnRhYmxlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMyRmxlZXRUaW1lU2hpZnRhYmxlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyBuZWVkIGJ5IEVDMiBJbWFnZSBCdWlsZGVyIHRvIHBlcmZvcm0gYSBjcm9zcyBhY2NvdW50IGRpc3RyaWJ1dGlvbi4gKi9cbiAgICBwdWJsaWMgRWMySW1hZ2VCdWlsZGVyQ3Jvc3NBY2NvdW50RGlzdHJpYnV0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVjMkltYWdlQnVpbGRlckNyb3NzQWNjb3VudERpc3RyaWJ1dGlvbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBFQzJJbWFnZUJ1aWxkZXJMaWZlY3ljbGVFeGVjdXRpb25Qb2xpY3kgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgSW1hZ2UgQnVpbGRlciB0byBwZXJmb3JtIGFjdGlvbnMgc3VjaCBhcyBkZXByZWNhdGUgb3IgZGVsZXRlIEltYWdlIEJ1aWxkZXIgaW1hZ2UgcmVzb3VyY2VzIGFuZCB0aGVpciB1bmRlcmx5aW5nIHJlc291cmNlcyAoQU1Jcywgc25hcHNob3RzKSB0byBzdXBwb3J0IGF1dG9tYXRlZCBydWxlcyBmb3IgaW1hZ2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgdGFza3MuICovXG4gICAgcHVibGljIEVDMkltYWdlQnVpbGRlckxpZmVjeWNsZUV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJJbWFnZUJ1aWxkZXJMaWZlY3ljbGVFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgY3VzdG9tZXJzIHRvIGNhbGwgRUMyIEluc3RhbmNlIENvbm5lY3QgdG8gcHVibGlzaCBlcGhlbWVyYWwga2V5cyB0byB0aGVpciBFQzIgaW5zdGFuY2VzIGFuZCBjb25uZWN0IHZpYSBzc2ggb3IgdGhlIEVDMiBJbnN0YW5jZSBDb25uZWN0IENMSS4gKi9cbiAgICBwdWJsaWMgRUMySW5zdGFuY2VDb25uZWN0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkluc3RhbmNlQ29ubmVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEVDMiBJbnN0YW5jZSBDb25uZWN0IGVuZHBvaW50IHBvbGljeSB0byBtYW5hZ2UgRUMyIEluc3RhbmNlIENvbm5lY3QgZW5kcG9pbnRzIGNyZWF0ZWQgYnkgdGhlIGN1c3RvbWVyICovXG4gICAgcHVibGljIEVjMkluc3RhbmNlQ29ubmVjdEVuZHBvaW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVjMkluc3RhbmNlQ29ubmVjdEVuZHBvaW50KTtcbiAgICB9XG5cbiAgICAvKiogRUMyIEluc3RhbmNlIHByb2ZpbGUgZm9yIEltYWdlIEJ1aWxkZXIgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgRUMySW5zdGFuY2VQcm9maWxlRm9ySW1hZ2VCdWlsZGVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkluc3RhbmNlUHJvZmlsZUZvckltYWdlQnVpbGRlcik7XG4gICAgfVxuXG4gICAgLyoqIEVDMiBJbnN0YW5jZSBwcm9maWxlIGZvciBidWlsZGluZyBjb250YWluZXIgaW1hZ2VzIHdpdGggRUMyIEltYWdlIEJ1aWxkZXIuIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgdXNlciBicm9hZCBwZXJtaXNzaW9ucyB0byB1cGxvYWQgRUNSIGltYWdlcy4gKi9cbiAgICBwdWJsaWMgRUMySW5zdGFuY2VQcm9maWxlRm9ySW1hZ2VCdWlsZGVyRUNSQ29udGFpbmVyQnVpbGRzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkluc3RhbmNlUHJvZmlsZUZvckltYWdlQnVpbGRlckVDUkNvbnRhaW5lckJ1aWxkcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBFQ1IgUmVwbGljYXRpb24gKi9cbiAgICBwdWJsaWMgRUNSUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQ1JSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjdGlvbnMgdG8gYmUgcGVyZm9ybWVkIHdoZW4gdXNpbmcgQVdTIEVDUiByZXBvc2l0b3J5IGNyZWF0aW9uIHRlbXBsYXRlcyAqL1xuICAgIHB1YmxpYyBFQ1JUZW1wbGF0ZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDUlRlbXBsYXRlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgRWxhc3RpQ2FjaGUgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgYXMgbmVjZXNzYXJ5IGZvciBtYW5hZ2luZyB5b3VyIGNhY2hlICovXG4gICAgcHVibGljIEVsYXN0aUNhY2hlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxhc3RpQ2FjaGVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGljTG9hZEJhbGFuY2luZywgYW5kIGxpbWl0ZWQgYWNjZXNzIHRvIG90aGVyIHNlcnZpY2VzIG5lY2Vzc2FyeSB0byBwcm92aWRlIEVsYXN0aWNMb2FkQmFsYW5jaW5nIGZlYXR1cmVzLiAqL1xuICAgIHB1YmxpYyBFbGFzdGljTG9hZEJhbGFuY2luZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxhc3RpY0xvYWRCYWxhbmNpbmdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRWxhc3RpY0xvYWRCYWxhbmNpbmcgYW5kIGRlcGVuZGVudCBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBFbGFzdGljTG9hZEJhbGFuY2luZ1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsYXN0aWNMb2FkQmFsYW5jaW5nUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc3MgdG8gdmlldyBwdXJjaGFzZWQgYXNzZXRzIGFuZCBkb3dubG9hZCByZWxhdGVkIHNvZnR3YXJlIGFuZCBraWNrc3RhcnQgZmlsZXMgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQWN0aXZhdGlvbnNEb3dubG9hZFNvZnR3YXJlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFjdGl2YXRpb25zRG93bmxvYWRTb2Z0d2FyZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIHZpZXcgYW5kIHRha2UgYWN0aW9uIG9uIEVsZW1lbnRhbCBBcHBsaWFuY2VzIGFuZCBTb2Z0d2FyZSBwdXJjaGFzZWQgYXNzZXRzICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFjdGl2YXRpb25zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBY3RpdmF0aW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc3MgdG8gdmlldyBwdXJjaGFzZWQgYXNzZXRzIGFuZCBnZW5lcmF0ZSBzb2Z0d2FyZSBsaWNlbnNlcyBmb3IgcGVuZGluZyBhY3RpdmF0aW9ucyAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBY3RpdmF0aW9uc0dlbmVyYXRlTGljZW5zZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQWN0aXZhdGlvbnNHZW5lcmF0ZUxpY2Vuc2VzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgZGV0YWlsZWQgbGlzdCBvZiBwdXJjaGFzZWQgYXNzZXRzIGFzc29jaWF0ZWQgdG8gdGhlIEFXUyBhY2NvdW50IG9mIHRoZSB1c2VyICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFjdGl2YXRpb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQWN0aXZhdGlvbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIHZpZXcgYW5kIHRha2UgYWN0aW9uIG9uIEVsZW1lbnRhbCBBcHBsaWFuY2VzIGFuZCBTb2Z0d2FyZSBxdW90ZXMgYW5kIG9yZGVycyAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBcHBsaWFuY2VzU29mdHdhcmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFwcGxpYW5jZXNTb2Z0d2FyZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkLW9ubHkgYWNjZXNzIHRvIHZpZXcgRWxlbWVudGFsIEFwcGxpYW5jZXMgYW5kIFNvZnR3YXJlIHF1b3RlcyBhbmQgb3JkZXJzICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFwcGxpYW5jZXNTb2Z0d2FyZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFwcGxpYW5jZXNTb2Z0d2FyZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBhY2Nlc3MgdG8gdmlldyBhbmQgdGFrZSBhY3Rpb24gb24gRWxlbWVudGFsIEFwcGxpYW5jZSBhbmQgU29mdHdhcmUgc3VwcG9ydCBjYXNlcyBhbmQgcHJvZHVjdCBzdXBwb3J0IGNvbnRlbnQgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsU3VwcG9ydENlbnRlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsU3VwcG9ydENlbnRlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgdGhlIFdBTCBzZXJ2aWNlIGZvciBBbWF6b24gRU1SIHRvIGZpbmQgYW5kIHJldHVybiB0aGUgc3RhdHVzIG9mIGEgY2x1c3RlciAqL1xuICAgIHB1YmxpYyBFTVJEZXNjcmliZUNsdXN0ZXJQb2xpY3lGb3JFTVJXQUwoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRU1SRGVzY3JpYmVDbHVzdGVyUG9saWN5Rm9yRU1SV0FMKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHBvbGljeSB0byBhbGxvdyBGTSBzZXJ2aWNlIGxpbmtlZCByb2xlIHRvIHBlcmZvcm0gRk0tcmVsYXRlZCBhY3Rpb25zIG9uIEZNLW1hbmFnZWQgcmVzb3VyY2VzIHdpdGhpbiBhIGN1c3RvbWVyIEFXUyBPcmdhbml6YXRpb24gYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgRk1TU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRk1TU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEZTeCB0byBkZWxldGUgaXRzIFNlcnZpY2UgTGlua2VkIFJvbGVzIGZvciBBbWF6b24gUzMgYWNjZXNzICovXG4gICAgcHVibGljIEZTeERlbGV0ZVNlcnZpY2VMaW5rZWRSb2xlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkZTeERlbGV0ZVNlcnZpY2VMaW5rZWRSb2xlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgY29tcHV0ZSBhY3Rpb25zIGluIGFuIEFtYXpvbiBHYW1lTGlmdCBjb250YWluZXIgZmxlZXQsIGluY2x1ZGluZyBhY2Nlc3MgdG8gZGVwZW5kZW5jaWVzIHN1Y2ggYXMgQW1hem9uIFMzLiAqL1xuICAgIHB1YmxpYyBHYW1lTGlmdENvbnRhaW5lckZsZWV0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdhbWVMaWZ0Q29udGFpbmVyRmxlZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gYWxsb3cgR2FtZWxpZnQgR2FtZVNlcnZlckdyb3VwcyB0byBtYW5hZ2UgY3VzdG9tZXIgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEdhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBjb25uZWN0IHdpdGggQW1hem9uIFEgYW5kIHV0aWxpemUgdGhlIGZlYXR1cmVzIGluIHRoZSBHaXRMYWIgRHVvIHdpdGggQW1hem9uIFEgaW50ZWdyYXRpb24uICovXG4gICAgcHVibGljIEdpdExhYkR1b1dpdGhBbWF6b25RUGVybWlzc2lvbnNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR2l0TGFiRHVvV2l0aEFtYXpvblFQZXJtaXNzaW9uc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEdsb2JhbEFjY2VsZXJhdG9yIFVzZXJzIGZ1bGwgQWNjZXNzIHRvIGFsbCBBUElzICovXG4gICAgcHVibGljIEdsb2JhbEFjY2VsZXJhdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HbG9iYWxBY2NlbGVyYXRvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBHbG9iYWxBY2NlbGVyYXRvciBVc2VycyBBY2Nlc3MgdG8gUmVhZCBPbmx5IEFQSXMgKi9cbiAgICBwdWJsaWMgR2xvYmFsQWNjZWxlcmF0b3JSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HbG9iYWxBY2NlbGVyYXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhY2Nlc3MgdG8gdGhlIEdyZWVuZ3Jhc3MgT1RBIFVwZGF0ZSBhcnRpZmFjdHMgaW4gYWxsIEdyZWVuZ3Jhc3MgcmVnaW9ucyAqL1xuICAgIHB1YmxpYyBHcmVlbmdyYXNzT1RBVXBkYXRlQXJ0aWZhY3RBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR3JlZW5ncmFzc09UQVVwZGF0ZUFydGlmYWN0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEhlYWx0aCBwb2xpY3kgdG8gZW5hYmxlIE9yZ2FuaXphdGlvbmFsIFZpZXcgZmVhdHVyZSAqL1xuICAgIHB1YmxpYyBIZWFsdGhPcmdhbml6YXRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSGVhbHRoT3JnYW5pemF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byByZWFkIGFsbCBhY2Nlc3MgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgSUFNIGFjY2VzcyBhZHZpc29yIHN1Y2ggYXMgc2VydmljZSBsYXN0IGFjY2Vzc2VkIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBZHZpc29yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNQWNjZXNzQWR2aXNvclJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSUFNIEFjY2VzcyBBbmFseXplciAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBbmFseXplckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNQWNjZXNzQW5hbHl6ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJQU0gQWNjZXNzIEFuYWx5emVyIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBbmFseXplclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUFjY2Vzc0FuYWx5emVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgdG8gY2hlY2sgdGhlIHByZXNlbmNlIG9mIHJvb3QgdXNlciBjcmVkZW50aWFscyBzdWNoIGFzIHJvb3QgdXNlciBwYXNzd29yZCBhbmQgcm9vdCB1c2VyIGFjY2VzcyBrZXlzIHVzaW5nIHRoZSBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChTVFMpIEFzc3VtZVJvb3QgQVBJLiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNQXVkaXRSb290VXNlckNyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUF1ZGl0Um9vdFVzZXJDcmVkZW50aWFscyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCB0byBjcmVhdGUgYSByb290IHVzZXIgcGFzc3dvcmQgdXNpbmcgdGhlIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKFNUUykgQXNzdW1lUm9vdCBBUEkuICBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNQ3JlYXRlUm9vdFVzZXJQYXNzd29yZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1DcmVhdGVSb290VXNlclBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIHRvIGRlbGV0ZSBhbGwgcm9vdCB1c2VyIGNyZWRlbnRpYWxzIHN1Y2ggYXMgcm9vdCBwYXNzd29yZCBhbmQgcm9vdCBhY2Nlc3Mga2V5cyB1c2luZyB0aGUgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAoU1RTKSBBc3N1bWVSb290IEFQSS4gIFVzZSB0aGlzIG1hbmFnZWQgcG9saWN5IG9ubHkgd2l0aCB0aGUgU1RTIEFzc3VtZVJvb3QgYWN0aW9uLiAqL1xuICAgIHB1YmxpYyBJQU1EZWxldGVSb290VXNlckNyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTURlbGV0ZVJvb3RVc2VyQ3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBJQU0gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBJQU1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElBTSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIElBTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFuIElBTSB1c2VyIHRvIG1hbmFnZSB0aGVpciBvd24gU2VydmljZSBTcGVjaWZpYyBDcmVkZW50aWFscy4gKi9cbiAgICBwdWJsaWMgSUFNU2VsZk1hbmFnZVNlcnZpY2VTcGVjaWZpY0NyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVNlbGZNYW5hZ2VTZXJ2aWNlU3BlY2lmaWNDcmVkZW50aWFscyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IGZvciBhbiBJQU0gdXNlciB0byBjaGFuZ2UgdGhlaXIgb3duIHBhc3N3b3JkLiAqL1xuICAgIHB1YmxpYyBJQU1Vc2VyQ2hhbmdlUGFzc3dvcmQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNVXNlckNoYW5nZVBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgZm9yIGFuIElBTSB1c2VyIHRvIG1hbmFnZSB0aGVpciBvd24gU1NIIGtleXMuICovXG4gICAgcHVibGljIElBTVVzZXJTU0hLZXlzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVVzZXJTU0hLZXlzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW50ZXJhY3RpdmUgVmlkZW8gU2VydmljZSAoSVZTKSwgQWxzbyBpbmNsdWRlZCBwZXJtaXNzaW9ucyBmb3IgZGVwZW5kZW50IHNlcnZpY2VzLCBuZWVkZWQgZm9yIGZ1bGwgYWNjZXNzIHRvIHRoZSBpdnMgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgSVZTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBJVlMgTG93LUxhdGVuY3kgYW5kIFJlYWwtVGltZSBzdHJlYW1pbmcgQVBJcyAqL1xuICAgIHB1YmxpYyBJVlNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgdG8gcGVyZm9ybSBTMyBQdXRPYmplY3QgdG8gcmVjb3JkaW5nIElWUyBsaXZlIHN0cmVhbXMgKi9cbiAgICBwdWJsaWMgSVZTUmVjb3JkVG9TMygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNSZWNvcmRUb1MzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIEthZmthIENvbm5lY3QgcGVybWlzc2lvbiB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgS2Fma2FDb25uZWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2Fma2FDb25uZWN0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBJQU0gc2VydmljZSBsaW5rZWQgcm9sZSBwb2xpY3kgZm9yIEthZmthLiAqL1xuICAgIHB1YmxpYyBLYWZrYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkthZmthU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBLZXlzcGFjZXMgZm9yIENoYW5nZSBEYXRhIENhcHR1cmUgKi9cbiAgICBwdWJsaWMgS2V5c3BhY2VzQ0RDU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2V5c3BhY2VzQ0RDU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCBieSBLZXlzcGFjZXMgZm9yIGNyb3NzLXJlZ2lvbiBkYXRhIHJlcGxpY2F0aW9uICovXG4gICAgcHVibGljIEtleXNwYWNlc1JlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2V5c3BhY2VzUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBncmFudCB0ZW1wb3JhcnkgZGF0YSBhY2Nlc3MgdG8gTGFrZSBGb3JtYXRpb24gcmVzb3VyY2VzICovXG4gICAgcHVibGljIExha2VGb3JtYXRpb25EYXRhQWNjZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTGFrZUZvcm1hdGlvbkRhdGFBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIExleCBCb3QgdXNlIGNhc2UgKi9cbiAgICBwdWJsaWMgTGV4Qm90UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxleEJvdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIExleCBDaGFubmVsIHVzZSBjYXNlICovXG4gICAgcHVibGljIExleENoYW5uZWxQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTGV4Q2hhbm5lbFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBMaWdodHNhaWwgc2VydmljZSBsaW5rZWQgcm9sZSBwb2xpY3kgd2hpY2ggZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGV4cG9ydCByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgTGlnaHRzYWlsRXhwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxpZ2h0c2FpbEV4cG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIHJlZ2lzdGVyIE1lZGlhQ29ubmVjdCBHYXRld2F5IEluc3RhbmNlcyB0byBhIE1lZGlhQ29ubmVjdCBHYXRld2F5LiAqL1xuICAgIHB1YmxpYyBNZWRpYUNvbm5lY3RHYXRld2F5SW5zdGFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1lZGlhQ29ubmVjdEdhdGV3YXlJbnN0YW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTWVkaWFQYWNrYWdlIHRvIHB1Ymxpc2ggbG9ncyB0byBDbG91ZFdhdGNoICovXG4gICAgcHVibGljIE1lZGlhUGFja2FnZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1lZGlhUGFja2FnZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIE1lbW9yeURCIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmIGFzIG5lY2Vzc2FyeSBmb3IgbWFuYWdpbmcgeW91ciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIE1lbW9yeURCU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTWVtb3J5REJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgRGF0YWJhc2UgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBNaWdyYXRpb25IdWJETVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NaWdyYXRpb25IdWJETVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBNaWdyYXRpb24gSHViIHRvIGNhbGwgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2Ugb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgTWlncmF0aW9uSHViU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTWlncmF0aW9uSHViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIFNlcnZlciBNaWdyYXRpb24gU2VydmljZSB0byBhc3N1bWUgcm9sZSBpbiBjdXN0b21lcidzIGFjY291bnQgdG8gY2FsbCBNaWdyYXRpb24gSHViICovXG4gICAgcHVibGljIE1pZ3JhdGlvbkh1YlNNU0FjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1pZ3JhdGlvbkh1YlNNU0FjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgTW9uaXRyb24gc2VydmljZSBsaW5rZWQgcm9sZSBncmFudGluZyBhY2Nlc3MgdG8gcmVxdWlyZWQgY3VzdG9tZXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBNb25pdHJvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1vbml0cm9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBNdWx0aS1wYXJ0eSBhcHByb3ZhbC4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyByZWxhdGVkIHBlcm1pc3Npb25zIHRvIEFXUyBPcmdhbml6YXRpb25zIGFuZCBBV1MgSUFNIElkZW50aXR5IGZvciBtYW5hZ2luZyBhcHByb3ZhbCB0ZWFtcyBhbmQgaWRlbnRpdHkgc291cmNlcy4gKi9cbiAgICBwdWJsaWMgTXVsdGlQYXJ0eUFwcHJvdmFsRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NdWx0aVBhcnR5QXBwcm92YWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBNdWx0aS1wYXJ0eSBhcHByb3ZhbC4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyByZWxhdGVkIHJlYWQgcGVybWlzc2lvbiB0byBBV1MgT3JnYW5pemF0aW9ucyBhbmQgQVdTIElBTSBJZGVudGl0eSBmb3IgYXBwcm92YWwgdGVhbXMgYW5kIGlkZW50aXR5IHNvdXJjZXMuICovXG4gICAgcHVibGljIE11bHRpUGFydHlBcHByb3ZhbFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk11bHRpUGFydHlBcHByb3ZhbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gbWFuYWdlIEFtYXpvbiBOZXB0dW5lIHVzaW5nIHRoZSBBV1MgQ29uc29sZS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCwgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBlZGl0IEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFuZCBWUEMgY29uZmlndXJhdGlvbnMsIHBlcm1pc3Npb25zIHRvIHZpZXcgYW5kIGxpc3Qga2V5cyBvbiBBbWF6b24gS01TLCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL25lcHR1bmUvZmFxcy8uICovXG4gICAgcHVibGljIE5lcHR1bmVDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXB0dW5lQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTmVwdHVuZS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL25lcHR1bmUvZmFxcy8uICovXG4gICAgcHVibGljIE5lcHR1bmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk5lcHR1bmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgQW1hem9uIE5lcHR1bmUgQW5hbHl0aWNzIHJlc291cmNlcyBhbG9uZyB3aXRoIHJlYWQgb25seSBwZXJtaXNzaW9ucyBmb3IgZGVwZW5kZW50IHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lR3JhcGhSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXB0dW5lR3JhcGhSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE5lcHR1bmUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIFJEUyByZXNvdXJjZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9uZXB0dW5lL2ZhcXMvLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmVwdHVuZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIEFXUyBzZXJ2aWNlcyBhbmQgYWN0aW9ucyByZXF1aXJlZCB0byBzZXQgdXAgYW5kIGNvbmZpZ3VyZSBBV1MgbmV0d29yayByZXNvdXJjZXMuICovXG4gICAgcHVibGljIE5ldHdvcmtBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk5ldHdvcmtBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBBV1MgU2hpZWxkIG5ldHdvcmsgc2VjdXJpdHkgZGlyZWN0b3Igc2VydmljZSBsaW5rZWQgcm9sZSB0byBhc3Nlc3Mgc3BlY2lmaWVkIGVudmlyb25tZW50cy4gKi9cbiAgICBwdWJsaWMgTmV0d29ya1NlY3VyaXR5RGlyZWN0b3JTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXR3b3JrU2VjdXJpdHlEaXJlY3RvclNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIE5vdmFBY3QgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMgdG8gb3BlcmF0ZSB0aGUgTm92YSBBY3QgYWdlbnRzLiAqL1xuICAgIHB1YmxpYyBOb3ZhQWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTm92YUFjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBPYnNlcnZhYmlsaXR5IEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIE9BTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuT0FNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIFJlYWQgT25seSBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBPYnNlcnZhYmlsaXR5IEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIE9BTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk9BTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBPcGVuU2VhcmNoIEluZ2VzdGlvbiB0byBkZXNjcmliZSBuZXR3b3JrIHJlc291cmNlcyBhbmQgd3JpdGUgc2VydmljZSBtZXRyaWNzIHRvIGNsb3Vkd2F0Y2ggKi9cbiAgICBwdWJsaWMgT3BlbnNlYXJjaEluZ2VzdGlvblNlbGZNYW5hZ2VkVnBjZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5PcGVuc2VhcmNoSW5nZXN0aW9uU2VsZk1hbmFnZWRWcGNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGFzc29jaWF0ZSBhbmQgZGlzc29jaWF0ZSBwYXJ0bmVyIGNlbnRyYWwgdXNlcnMgd2l0aCBJQU0gcm9sZXMgKi9cbiAgICBwdWJsaWMgUGFydG5lckNlbnRyYWxBY2NvdW50TWFuYWdlbWVudFVzZXJSb2xlQXNzb2NpYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUGFydG5lckNlbnRyYWxBY2NvdW50TWFuYWdlbWVudFVzZXJSb2xlQXNzb2NpYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgcHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBhbGwgdGhlIGluY2VudGl2ZSBiZW5lZml0cyBpbiBBV1MgUGFydG5lciBDZW50cmFsLiAqL1xuICAgIHB1YmxpYyBQYXJ0bmVyQ2VudHJhbEluY2VudGl2ZUJlbmVmaXRNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlBhcnRuZXJDZW50cmFsSW5jZW50aXZlQmVuZWZpdE1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcywgYnV0IGRvZXMgbm90IGFsbG93IG1hbmFnZW1lbnQgb2YgVXNlcnMgYW5kIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgUG93ZXJVc2VyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlBvd2VyVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFEgQXBwcy4gKi9cbiAgICBwdWJsaWMgUUFwcHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5RQXBwc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIFFCdXNpbmVzcyB0byBjYWxsIFF1aWNrU2lnaHQgQVBJcyBmb3IgdGhlIFF1aWNrU2lnaHQgcGx1Z2luICovXG4gICAgcHVibGljIFFCdXNpbmVzc1F1aWNrc2lnaHRQbHVnaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUUJ1c2luZXNzUXVpY2tzaWdodFBsdWdpblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFEgKi9cbiAgICBwdWJsaWMgUUJ1c2luZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUUJ1c2luZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdXNlZCBieSBRdWlja1NpZ2h0IHRlYW0gdG8gYWNjZXNzIGN1c3RvbWVyIGRhdGEgcHJvZHVjZWQgYnkgUzMgU3RvcmFnZSBNYW5hZ2VtZW50IEFuYWx5dGljcy4gKi9cbiAgICBwdWJsaWMgUXVpY2tTaWdodEFjY2Vzc0ZvclMzU3RvcmFnZU1hbmFnZW1lbnRBbmFseXRpY3NSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5RdWlja1NpZ2h0QWNjZXNzRm9yUzNTdG9yYWdlTWFuYWdlbWVudEFuYWx5dGljc1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gUkRTIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgUkRTQ2xvdWRIc21BdXRob3JpemF0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SRFNDbG91ZEhzbUF1dGhvcml6YXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBSZXNvdXJjZSBHcm91cHMgYW5kIFRhZyBFZGl0b3IuICovXG4gICAgcHVibGljIFJlc291cmNlR3JvdXBzYW5kVGFnRWRpdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SZXNvdXJjZUdyb3Vwc2FuZFRhZ0VkaXRvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdXNlIFJlc291cmNlIEdyb3VwcyBhbmQgVGFnIEVkaXRvciwgYnV0IGRvZXMgbm90IGFsbG93IGVkaXRpbmcgb2YgdGFncyB2aWEgdGhlIFRhZyBFZGl0b3IuICovXG4gICAgcHVibGljIFJlc291cmNlR3JvdXBzYW5kVGFnRWRpdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVzb3VyY2VHcm91cHNhbmRUYWdFZGl0b3JSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgUmVzb3VyY2UgR3JvdXBzIHRvIHF1ZXJ5IHRoZSBBV1Mgc2VydmljZXMgdGhhdCBvd24geW91ciByZXNvdXJjZXMgdG8ga2VlcCB0aGUgZ3JvdXAgdXAtdG8tZGF0ZSAqL1xuICAgIHB1YmxpYyBSZXNvdXJjZUdyb3Vwc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJlc291cmNlR3JvdXBzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byB0YWcgYW5kIHVudGFnIGFsbCB0aGUgcmVzb3VyY2VzIHN1cHBvcnRlZCBieSBSZXNvdXJjZSBHcm91cHMgVGFnZ2luZyBBUEkuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byByZXRyaWV2ZSBhbGwgdGFnZ2VkLCBvciBwcmV2aW91c2x5IHRhZ2dlZCwgcmVzb3VyY2VzIHRocm91Z2ggdGhlIFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSS4gKi9cbiAgICBwdWJsaWMgUmVzb3VyY2VHcm91cHNUYWdnaW5nQVBJVGFnVW50YWdTdXBwb3J0ZWRSZXNvdXJjZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVzb3VyY2VHcm91cHNUYWdnaW5nQVBJVGFnVW50YWdTdXBwb3J0ZWRSZXNvdXJjZXMpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIE9wZW5TaGlmdCBBbWF6b24gRUJTIENvbnRhaW5lciBTdG9yYWdlIEludGVyZmFjZSAoQ1NJKSBEcml2ZXIgT3BlcmF0b3IgdG8gaW5zdGFsbCBhbmQgbWFpbnRhaW4gdGhlIEFtYXpvbiBFQlMgQ1NJIGRyaXZlciBvbiBhIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBjbHVzdGVyLiBUaGUgQW1hem9uIEVCUyBDU0kgZHJpdmVyIGFsbG93cyBST1NBIGNsdXN0ZXJzIHRvIG1hbmFnZSB0aGUgbGlmZWN5Y2xlIG9mIEFtYXpvbiBFQlMgdm9sdW1lcyBmb3IgcGVyc2lzdGVudCB2b2x1bWVzLiAqL1xuICAgIHB1YmxpYyBST1NBQW1hem9uRUJTQ1NJRHJpdmVyT3BlcmF0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUFtYXpvbkVCU0NTSURyaXZlck9wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBPcGVuU2hpZnQgQ2xvdWQgTmV0d29yayBDb25maWcgQ29udHJvbGxlciBPcGVyYXRvciB0byBwcm92aXNpb24gYW5kIG1hbmFnZSBuZXR3b3JraW5nIHJlc291cmNlcyBmb3IgdXNlIGJ5IHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgY2x1c3RlciBuZXR3b3JraW5nIG92ZXJsYXkuIFRoZSBPcGVuU2hpZnQgQ2xvdWQgTmV0d29yayBPcGVyYXRvciBpbnRlcmZhY2VzIHdpdGggQVdTIEFQSXMgb24gYmVoYWxmIG9mIHRoZSBuZXR3b3JrIHBsdWdpbnMgdmlhIEN1c3RvbVJlc291cmNlRGVmaW5pdGlvbnMuIFRoZSBvcGVyYXRvciB1c2VzIHRoZXNlIHBvbGljeSBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgcHJpdmF0ZSBJUCBhZGRyZXNzZXMgZm9yIEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFzIHBhcnQgb2YgdGhlIFJPU0EgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgUk9TQUNsb3VkTmV0d29ya0NvbmZpZ09wZXJhdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FDbG91ZE5ldHdvcmtDb25maWdPcGVyYXRvclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgY29udHJvbCBwbGFuZSB0byBtYW5hZ2UgUk9TQSBjbHVzdGVyIEFtYXpvbiBFQzIgYW5kIEFtYXpvbiBSb3V0ZSA1MyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIFJPU0FDb250cm9sUGxhbmVPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBQ29udHJvbFBsYW5lT3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIE9wZW5TaGlmdCBJbWFnZSBSZWdpc3RyeSBPcGVyYXRvciB0byBwcm92aXNpb24gYW5kIG1hbmFnZSBBbWF6b24gUzMgYnVja2V0cyBhbmQgb2JqZWN0cyBmb3IgdXNlIGJ5IHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgaW4tY2x1c3RlciBpbWFnZSByZWdpc3RyeSB0byBzYXRpc2Z5IFJPU0Egc3RvcmFnZSByZXF1aXJlbWVudHMuIFRoZSBPcGVuU2hpZnQgSW1hZ2UgUmVnaXN0cnkgT3BlcmF0b3IgaW5zdGFsbHMgYW5kIG1haW50YWlucyB0aGUgaW50ZXJuYWwgcmVnaXN0cnkgb2YgYSBSZWQgSGF0IE9wZW5TaGlmdCBjbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBST1NBSW1hZ2VSZWdpc3RyeU9wZXJhdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FJbWFnZVJlZ2lzdHJ5T3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIE9wZW5TaGlmdCBJbmdyZXNzIE9wZXJhdG9yIHRvIHByb3Zpc2lvbiBhbmQgbWFuYWdlIGxvYWQgYmFsYW5jZXJzIGFuZCBkb21haW4gbmFtZSBzeXN0ZW0gKEROUykgY29uZmlndXJhdGlvbnMgZm9yIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBjbHVzdGVycy4gVGhlIHBvbGljeSBhbGxvd3MgcmVhZCBhY2Nlc3MgdG8gdGFnIHZhbHVlcywgd2hpY2ggdGhlIG9wZXJhdG9yIGZpbHRlcnMgZm9yIFJvdXRlIDUzIHJlc291cmNlcyB0byBkaXNjb3ZlciBob3N0ZWQgem9uZXMuICovXG4gICAgcHVibGljIFJPU0FJbmdyZXNzT3BlcmF0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUluZ3Jlc3NPcGVyYXRvclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGluc3RhbGxlciB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyB0aGF0IHN1cHBvcnQgUk9TQSBjbHVzdGVyIGluc3RhbGxhdGlvbi4gVGhpcyBpbmNsdWRlcyBtYW5hZ2luZyBpbnN0YW5jZSBwcm9maWxlcyBmb3IgUk9TQSB3b3JrZXIgbm9kZXMuICovXG4gICAgcHVibGljIFJPU0FJbnN0YWxsZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUluc3RhbGxlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYnVpbHQtaW4gUk9TQSBBV1MgRW5jcnlwdGlvbiBQcm92aWRlciB0byBtYW5hZ2UgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykga2V5cyB0byBzdXBwb3J0IGV0Y2QgZGF0YSBlbmNyeXB0aW9uIHVzaW5nIGEgY3VzdG9tZXIgcHJvdmlkZWQgQVdTIEtNUyBrZXkuIFRoZSBwb2xpY3kgYWxsb3dzIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb2YgZGF0YSB1c2luZyBLTVMga2V5cy4gKi9cbiAgICBwdWJsaWMgUk9TQUtNU1Byb3ZpZGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FLTVNQcm92aWRlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgUk9TQSBLdWJlcm5ldGVzIGNvbnRyb2xsZXIgdG8gbWFuYWdlIEFtYXpvbiBFQzIsIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgKEVMQiksIGFuZCBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSByZXNvdXJjZXMgZm9yIGEgUk9TQSBjbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBST1NBS3ViZUNvbnRyb2xsZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUt1YmVDb250cm9sbGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIG1hbmFnZSB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIHN1YnNjcmlwdGlvbi4gKi9cbiAgICBwdWJsaWMgUk9TQU1hbmFnZVN1YnNjcmlwdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBTWFuYWdlU3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSB0byBtYW5hZ2UgY2x1c3RlciBFQzIgaW5zdGFuY2VzIGFzIHdvcmtlciBub2RlcywgaW5jbHVkaW5nIHBlcm1pc3Npb24gdG8gY29uZmlndXJlIHNlY3VyaXR5IGdyb3VwcyBhbmQgdGFnIGluc3RhbmNlcyBhbmQgdm9sdW1lcy4gVGhpcyBwb2xpY3kgYWxzbyBhbGxvd3MgZm9yIHRoZSB1c2Ugb2YgRUMyIGluc3RhbmNlcyB3aXRoIGRpc2sgZW5jcnlwdGlvbiBwcm92aWRlZCBieSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSBrZXlzLiAqL1xuICAgIHB1YmxpYyBST1NBTm9kZVBvb2xNYW5hZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FOb2RlUG9vbE1hbmFnZW1lbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBpbnN0YWxsZXIgdG8gY29uZmlndXJlIFZQQyBFbmRwb2ludHMgYW5kIFNlY3VyaXR5IEdyb3Vwcy4gSW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHNoYXJlZCBWUEMuICovXG4gICAgcHVibGljIFJPU0FTaGFyZWRWUENFbmRwb2ludFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBU2hhcmVkVlBDRW5kcG9pbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBpbnN0YWxsZXIgdG8gY29uZmlndXJlIFJvdXRlNTMgcmVjb3Jkcy4gSW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHNoYXJlZCBWUEMuICovXG4gICAgcHVibGljIFJPU0FTaGFyZWRWUENSb3V0ZTUzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FTaGFyZWRWUENSb3V0ZTUzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgUk9TQSBzaXRlIHJlbGlhYmlsaXR5IGVuZ2luZWVyaW5nIChTUkUpIHRoZSBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gaW5pdGlhbGx5IG9ic2VydmUsIGRpYWdub3NlLCBhbmQgc3VwcG9ydCBBV1MgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgY2x1c3RlcnMsIGluY2x1ZGluZyB0aGUgYWJpbGl0eSB0byBjaGFuZ2UgUk9TQSBjbHVzdGVyIG5vZGUgc3RhdGUuICovXG4gICAgcHVibGljIFJPU0FTUkVTdXBwb3J0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FTUkVTdXBwb3J0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSB3b3JrZXIgbm9kZXMgaW4geW91ciBhY2NvdW50IHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEVDMiBpbnN0YW5jZXMgYW5kIEFXUyBSZWdpb25zIGZvciBjb21wdXRlIG5vZGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIFJPU0FXb3JrZXJJbnN0YW5jZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBV29ya2VySW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgUm91dGUgNTMgUmVjb3ZlcnkgUmVhZGluZXNzICovXG4gICAgcHVibGljIFJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IFJvdXRlNTMgUmVzb2x2ZXIgKi9cbiAgICBwdWJsaWMgUm91dGU1M1Jlc29sdmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUm91dGU1M1Jlc29sdmVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFXUyBSVEJGYWJyaWMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgeW91ciBuZXR3b3JrIGludGVyZmFjZSByZXNvdXJjZXMgYW5kIGRlbGl2ZXIgbWV0cmljcy4gKi9cbiAgICBwdWJsaWMgUlRCRmFicmljU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUlRCRmFicmljU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgUzMgU3RvcmFnZSBMZW5zICovXG4gICAgcHVibGljIFMzU3RvcmFnZUxlbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TM1N0b3JhZ2VMZW5zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgdG8gdW5sb2NrIGEgUzMgYnVja2V0IHBvbGljeSB1c2luZyB0aGUgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAoU1RTKSBBc3N1bWVSb290IEFQSS4gVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgb25seSB3aXRoIHRoZSBTVFMgQXNzdW1lUm9vdCBhY3Rpb24uICovXG4gICAgcHVibGljIFMzVW5sb2NrQnVja2V0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlMzVW5sb2NrQnVja2V0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgaW5pdGlhbCBhZG1pbmlzdHJhdGl2ZSBhbmQgaW5kaXZpZHVhbCBzZXR1cCBwcml2aWxlZ2VzIGZvciBBbWF6b24gU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBBbGxvd3MgbGF1bmNoaW5nIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpbyBQb3J0YWwuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0FkbWluSUFNQ29uc29sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9BZG1pbklBTUNvbnNvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBZG1pbmlzdHJhdGl2ZSBleGVjdXRpb24gcG9saWN5IGZvciB1c2luZyBJQU0gcm9sZXMgd2l0aCBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uIEFsbG93cyBhZG1pbnMgdG8gcHJvdmlzaW9uLCBtYW5hZ2UgYW5kIGFjY2VzcyByZXNvdXJjZXMgaW4geW91ciBhY2NvdW50IChleGNsdWRpbmcgYWNjZXNzIHRvIGRhdGEgcmVzb3VyY2VzKSBmb3IgSUFNLWJhc2VkIHVzYWdlIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1EZWZhdWx0RXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0FkbWluSUFNRGVmYXVsdEV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFkbWluaXN0cmF0aXZlIGV4ZWN1dGlvbiBwb2xpY3kgZm9yIHVzaW5nIElBTSByb2xlcyB3aXRoIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gQWxsb3dzIGFkbWlucyB0byBwcm92aXNpb24sIG1hbmFnZSBhbmQgYWNjZXNzIHJlc291cmNlcyBpbiB0aGUgbG9jYWwgYWNjb3VudCAoaW5jbHVkaW5nIGJyb2FkIGFjY2VzcyB0byBhbGwgQVBJcyBpbiBkYXRhIHNlcnZpY2VzIGxpa2UgUzMsIEdsdWUsIENsb3VkV2F0Y2ggTG9ncywgYW5kIG90aGVycykgZm9yIElBTS1iYXNlZCB1c2FnZSBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0FkbWluSUFNUGVybWlzc2l2ZUV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9BZG1pbklBTVBlcm1pc3NpdmVFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIElBTSBwb2xpY3kgZ3JhbnRzIGFuIElBTSByb2xlIGZ1bGwgYWNjZXNzIHRvIEFXUyBHbHVlIERhdGEgQ2F0YWxvZyAobWV0YWRhdGEpIGFuZCBBbWF6b24gUzMgKGFjdHVhbCBkYXRhKSBmb3IgZGF0YSBsYWtlIG9wZXJhdGlvbnMsIHdpdGggYWNjZXNzIHNjb3BlZCBieSBhY2NvdW50LCBhbmQgcm9sZSB0YWdzLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9BZG1pblByb2plY3RVc2VyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9BZG1pblByb2plY3RVc2VyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQmVkcm9jayBBZ2VudHMgdG8gYWNjZXNzIEFtYXpvbiBCZWRyb2NrIG1vZGVscyBhbmQgb3RoZXIgcmVzb3VyY2VzIGF0dGFjaGVkIHRvIGFuIGFnZW50IGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tBZ2VudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tBZ2VudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGFuIEFtYXpvbiBCZWRyb2NrIGNoYXQgYWdlbnQgYXBwJ3MgY29uZmlndXJhdGlvbiBhbmQgQW1hem9uIEJlZHJvY2sgYWdlbnQgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0NoYXRBZ2VudFVzZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tDaGF0QWdlbnRVc2VyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQmVkcm9jayB0byBhY2Nlc3MgQW1hem9uIEJlZHJvY2sgbW9kZWxzIGFuZCBkYXRhc2V0cyBmb3IgZXZhbHVhdGlvbiBqb2JzIGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tFdmFsdWF0aW9uSm9iU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0V2YWx1YXRpb25Kb2JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQmVkcm9jayBGbG93cyB0byBhY2Nlc3MgQW1hem9uIEJlZHJvY2sgbW9kZWxzIGFuZCBvdGhlciByZXNvdXJjZXMgYXR0YWNoZWQgdG8gYSBmbG93IGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tGbG93U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0Zsb3dTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTGFtYmRhIHRvIGFjY2VzcyBhbiBBbWF6b24gQmVkcm9jayBmdW5jdGlvbiBjb21wb25lbnQncyBjb25maWd1cmF0aW9uIGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tGdW5jdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0Z1bmN0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjb25maWd1cmUgdmVjdG9yIHN0b3JlcyBhbmQgQW1hem9uIEJlZHJvY2sga25vd2xlZGdlIGJhc2VzIGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tLbm93bGVkZ2VCYXNlQ3VzdG9tUmVzb3VyY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0tub3dsZWRnZUJhc2VDdXN0b21SZXNvdXJjZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQmVkcm9jayBLbm93bGVkZ2UgQmFzZXMgdG8gYWNjZXNzIEFtYXpvbiBCZWRyb2NrIG1vZGVscyBhbmQgZGF0YSBzb3VyY2VzIGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tLbm93bGVkZ2VCYXNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0tub3dsZWRnZUJhc2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBhbiBBbWF6b24gQmVkcm9jayBwcm9tcHQgYW5kIGl0cyBjb25maWd1cmF0aW9uIGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tQcm9tcHRVc2VyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrUHJvbXB0VXNlclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyB1c2VkIGJ5IEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIHRvIGNhdGFsb2csIGRpc2NvdmVyLCBnb3Zlcm4sIHNoYXJlLCBhbmQgYW5hbHl6ZSBkYXRhIGluIHRoZSBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBkb21haW4uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0RvbWFpbkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRG9tYWluRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBmb3IgZG9tYWluIGxldmVsIGFjdGlvbnMgaW4gdGhlIHBvcnRhbCB0aGF0IGFyZSBwZXJmb3JtZWQgYnkgQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0RvbWFpblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0RvbWFpblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgcGVybWlzc2lvbnMgcmVsYXRlZCB0byBFTVIuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0VNUkNvbnRhaW5lcnNTeXN0ZW1OYW1lc3BhY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0VNUkNvbnRhaW5lcnNTeXN0ZW1OYW1lc3BhY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgcGVybWlzc2lvbnMgcmVsYXRlZCB0byBFTVIuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0VNUkluc3RhbmNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9FTVJJbnN0YW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBjcmVhdGVzIElBTSByb2xlcyBmb3IgcHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIEVNUi4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRU1SU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRU1SU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvIHZpYSB0aGUgQW1hem9uIFNhZ2VNYWtlciBtYW5hZ2VtZW50IGNvbnNvbGUuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIHVzZXMgdGhpcyBwb2xpY3kgdG8gcHJvdmlzaW9uIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFByb3Zpc2lvbmluZ1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFByb3Zpc2lvbmluZ1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBjcmVhdGVzIElBTSByb2xlcyBmb3IgcHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIFNhZ2VNYWtlci4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFJvbGVNYWNoaW5lTGVhcm5pbmdQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFJvbGVNYWNoaW5lTGVhcm5pbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBQcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Qcm9qZWN0VXNlclJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1Byb2plY3RVc2VyUm9sZVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBjcmVhdGVzIElBTSByb2xlcyBmb3IgcHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFVzZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1Byb2plY3RVc2VyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBydW5uaW5nIHF1ZXJ5IGV4ZWN1dGlvbnMgb24gZmVkZXJhdGVkIGNvbm5lY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9RdWVyeUV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvUXVlcnlFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgaW5kaXZpZHVhbCBzZXR1cCBwcml2aWxlZ2VzIGZvciBBbWF6b24gU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBBbGxvd3MgbGF1bmNoaW5nIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpbyBQb3J0YWwuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1VzZXJJQU1Db25zb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1VzZXJJQU1Db25zb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRXhlY3V0aW9uIHBvbGljeSBmb3IgdXNpbmcgSUFNIHJvbGVzIHdpdGggU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiBBbGxvd3MgdXNlcnMgdG8gYWNjZXNzIHJlc291cmNlcyBpbiB0aGUgbG9jYWwgYWNjb3VudCAoZXhjbHVkaW5nIGFjY2VzcyB0byBkYXRhIHJlc291cmNlcykgZm9yIElBTS1iYXNlZCB1c2FnZSBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1VzZXJJQU1EZWZhdWx0RXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1VzZXJJQU1EZWZhdWx0RXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRXhlY3V0aW9uIHBvbGljeSBmb3IgdXNpbmcgSUFNIHJvbGVzIHdpdGggU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiBBbGxvd3MgdXNlcnMgdG8gYWNjZXNzIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQgKGluY2x1ZGluZyBicm9hZCBhY2Nlc3MgdG8gYWxsIEFQSXMgaW4gZGF0YSBzZXJ2aWNlcyBsaWtlIFMzLCBHbHVlLCBDbG91ZFdhdGNoIExvZ3MsIGFuZCBvdGhlcnMpIGZvciBJQU0tYmFzZWQgdXNhZ2Ugb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Vc2VySUFNUGVybWlzc2l2ZUV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Vc2VySUFNUGVybWlzc2l2ZUV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQvd3JpdGUgYWNjZXNzIHRvIEFXUyBTZWNyZXRzIE1hbmFnZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlOiB0aGlzIGV4bHVkZXMgSUFNIGFjdGlvbnMsIHNvIGNvbWJpbmUgd2l0aCBJQU1GdWxsQWNjZXNzIGlmIHJvdGF0aW9uIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQuICovXG4gICAgcHVibGljIFNlY3JldHNNYW5hZ2VyUmVhZFdyaXRlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3JldHNNYW5hZ2VyUmVhZFdyaXRlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlcnMgdG8gYWNjZXNzIHRoZSBTZWN1cml0eSBBZ2VudCBXZWIgQXBwbGljYXRpb24gZm9yIGNvbmZpZ3VyaW5nIGFuZCBleGVjdXRpbmcgYXV0b21hdGVkIHNlY3VyaXR5IHBlbmV0cmF0aW9uIHRlc3RzLiBUaGlzIHBvbGljeSBlbmFibGVzIHVzZXJzIHRvIG1hbmFnZSBwZW50ZXN0cywgdmlldyBmaW5kaW5ncywgbW9uaXRvciB0ZXN0IGV4ZWN1dGlvbiwgYW5kIGludGVyYWN0IHdpdGggQVdTIHJlc291cmNlcyByZXF1aXJlZCBmb3Igc2VjdXJpdHkgdGVzdGluZyBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBTZWN1cml0eUFnZW50V2ViQXBwQVBJUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3VyaXR5QWdlbnRXZWJBcHBBUElQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgYXV0aGVudGljYXRlZCB1c2VycyB0byBhY2Nlc3MgdGhlIFNlY3VyaXR5IEFnZW50IFdlYiBBcHBsaWNhdGlvbiBmb3IgY29uZmlndXJpbmcgYW5kIGV4ZWN1dGluZyBhdXRvbWF0ZWQgc2VjdXJpdHkgcGVuZXRyYXRpb24gdGVzdHMuIFRoaXMgcG9saWN5IGVuYWJsZXMgdXNlcnMgdG8gbWFuYWdlIHBlbnRlc3RzLCB2aWV3IGZpbmRpbmdzLCBtb25pdG9yIHRlc3QgZXhlY3V0aW9uLCBhbmQgaW50ZXJhY3Qgd2l0aCBBV1MgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBzZWN1cml0eSB0ZXN0aW5nIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIFNlY3VyaXR5QWdlbnRXZWJBcHBQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VjdXJpdHlBZ2VudFdlYkFwcFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBzZWN1cml0eSBhdWRpdCB0ZW1wbGF0ZSBncmFudHMgYWNjZXNzIHRvIHJlYWQgc2VjdXJpdHkgY29uZmlndXJhdGlvbiBtZXRhZGF0YS4gSXQgaXMgdXNlZnVsIGZvciBzb2Z0d2FyZSB0aGF0IGF1ZGl0cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbiBBV1MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgU2VjdXJpdHlBdWRpdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZWN1cml0eUF1ZGl0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSByZXNvdXJjZXMgY3JlYXRlZCBieSBTZWN1cml0eSBMYWtlLiAqL1xuICAgIHB1YmxpYyBTZWN1cml0eUxha2VSZXNvdXJjZU1hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZWN1cml0eUxha2VSZXNvdXJjZU1hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBvcGVyYXRlIHRoZSBBbWF6b24gU2VjdXJpdHkgTGFrZSBzZXJ2aWNlIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIFNlY3VyaXR5TGFrZVNlcnZpY2VMaW5rZWRSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3VyaXR5TGFrZVNlcnZpY2VMaW5rZWRSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgdG8gYWxsb3cgdGhlIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIENvbm5lY3RvciB0byBtaWdyYXRlIFZNcyB0byBFQzIuIEFsbG93cyBjb21tdW5pY2F0aW9uIHdpdGggdGhlIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UsIHJlYWQvd3JpdGUgYWNjZXNzIHRvIFMzIGJ1Y2tldHMgc3RhcnRpbmcgd2l0aCAnc21zLWItJyBhbmQgJ2ltcG9ydC10by1lYzItJyBhcyB3ZWxsIGFzIHRoZSBidWNrZXRzIHVzZWQgZm9yIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIENvbm5lY3RvciB1cGdyYWRlLCBBV1MgU2VydmVyIE1pZ3JhdGlvbiBDb25uZWN0b3IgcmVnaXN0cmF0aW9uIHdpdGggQVdTLCBhbmQgbWV0cmljcyB1cGxvYWQgdG8gQVdTLiAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25Db25uZWN0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uQ29ubmVjdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIGFsbCBmZWF0dXJlcyBvZiB0aGUgU2VydmVyIE1pZ3JhdGlvbiBTZXJ2aWNlIENvbnNvbGUgKi9cbiAgICBwdWJsaWMgU2VydmVyTWlncmF0aW9uU2VydmljZUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlcnZlck1pZ3JhdGlvblNlcnZpY2VDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHRvIGFsbG93IHRoZSBBV1MgU2VydmVyIE1pZ3JhdGlvbiBTZXJ2aWNlIHRvIGNyZWF0ZSBhbmQgdXBkYXRlIHJlbGV2YW50IEFXUyByZXNvdXJjZXMgaW50byB0aGUgY3VzdG9tZXIncyBBV1MgYWNjb3VudCBmb3IgbGF1bmNoaW5nIG1pZ3JhdGVkIHNlcnZlcnMgYW5kIGFwcGxpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgU2VydmVyTWlncmF0aW9uU2VydmljZUxhdW5jaFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uU2VydmljZUxhdW5jaFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyB0byBhbGxvdyB0aGUgQVdTIFNNUyB0byBydW4gdXNlZCBkYXRhIHZhbGlkYXRpb24gc2NyaXB0IGFuZCBzZW5kIHNjcmlwdCBzdWNjZXNzL2ZhaWx1cmUgYmFjayB0byBTTVMgKi9cbiAgICBwdWJsaWMgU2VydmVyTWlncmF0aW9uU2VydmljZVJvbGVGb3JJbnN0YW5jZVZhbGlkYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uU2VydmljZVJvbGVGb3JJbnN0YW5jZVZhbGlkYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBTZXJ2aWNlIFF1b3RhcyAqL1xuICAgIHB1YmxpYyBTZXJ2aWNlUXVvdGFzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2aWNlUXVvdGFzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gU2VydmljZSBRdW90YXMgKi9cbiAgICBwdWJsaWMgU2VydmljZVF1b3Rhc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlcnZpY2VRdW90YXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBTZXJ2aWNlIFF1b3RhcyB0byBjcmVhdGUgc3VwcG9ydCBjYXNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBTZXJ2aWNlUXVvdGFzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmljZVF1b3Rhc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHByb2dyYW1tYXRpYyBhY2Nlc3MgdG8gQVdTIHRocm91Z2ggdGhlIEFXUyBTaWduLWluIHNlcnZpY2UsIGluY2x1ZGluZyBPQXV0aDIgdG9rZW4gY3JlYXRpb24gZm9yIGRldmVsb3BlciB0b29scyBhbmQgYXBwbGljYXRpb25zLiAqL1xuICAgIHB1YmxpYyBTaWduSW5Mb2NhbERldmVsb3BtZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNpZ25JbkxvY2FsRGV2ZWxvcG1lbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgU2ltcGxlIFdvcmtmbG93IGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgU2ltcGxlV29ya2Zsb3dGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNpbXBsZVdvcmtmbG93RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBTTVNWb2ljZSB0byBwdWJsaXNoIG1ldHJpY3MgdG8gQ2xvdWRXYXRjaCBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBTTVNWb2ljZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNNU1ZvaWNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3Mgc3BsaXQgY29zdCBhbGxvY2F0aW9uIGRhdGEgdG8gcmV0cmlldmUgQVdTIE9yZ2FuaXphdGlvbnMgaW5mb3JtYXRpb24sIGlmIGFwcGxpY2FibGUsIGFuZCBjb2xsZWN0IHRlbGVtZXRyeSBkYXRhIGZvciB0aGUgc3BsaXQgY29zdCBhbGxvY2F0aW9uIGRhdGEgc2VydmljZXMgdGhhdCB0aGUgY3VzdG9tZXIgaGFzIG9wdGVkIGluIHRvLiAqL1xuICAgIHB1YmxpYyBTcGxpdENvc3RBbGxvY2F0aW9uRGF0YVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNwbGl0Q29zdEFsbG9jYXRpb25EYXRhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgdG8gdW5sb2NrIGEgU1FTIHF1ZXVlIHBvbGljeSB1c2luZyB0aGUgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAoU1RTKSBBc3N1bWVSb290IEFQSS4gVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgb25seSB3aXRoIHRoZSBTVFMgQXNzdW1lUm9vdCBhY3Rpb24uICovXG4gICAgcHVibGljIFNRU1VubG9ja1F1ZXVlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNRU1VubG9ja1F1ZXVlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gY2hlY2sgUXVpY2sgU2V0dXAgY29uZmlndXJhdGlvbiBoZWFsdGgsIGVuc3VyZSBjb25zaXN0ZW50IHVzZSBvZiBwYXJhbWV0ZXJzIGFuZCBwcm92aXNpb25lZCByZXNvdXJjZXMsIGFuZCByZW1lZGlhdGUgcmVzb3VyY2VzIHdoZW4gZHJpZnQgaXMgZGV0ZWN0ZWQuICovXG4gICAgcHVibGljIFNTTVF1aWNrU2V0dXBSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNTTVF1aWNrU2V0dXBSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHRyb3VibGVzaG9vdCBhbmQgcmVzb2x2ZSBpc3N1ZXMgaW4gYW4gQVdTIGFjY291bnQuIFRoaXMgcG9saWN5IGFsc28gZW5hYmxlcyB0aGUgdXNlciB0byBjb250YWN0IEFXUyBzdXBwb3J0IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIGNhc2VzLiAqL1xuICAgIHB1YmxpYyBTdXBwb3J0VXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TdXBwb3J0VXNlcik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIHJlc291cmNlcyByZXF1aXJlZCBmb3IgYXBwbGljYXRpb24gYW5kIGRldmVsb3BtZW50IG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIFN5c3RlbUFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU3lzdGVtQWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBUcmFuc2xhdGUuICovXG4gICAgcHVibGljIFRyYW5zbGF0ZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVHJhbnNsYXRlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIFRyYW5zbGF0ZS4gKi9cbiAgICBwdWJsaWMgVHJhbnNsYXRlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVHJhbnNsYXRlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdmlldyByZXNvdXJjZXMgYW5kIGJhc2ljIG1ldGFkYXRhIGFjcm9zcyBhbGwgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBWaWV3T25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WaWV3T25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgVk0gSW1wb3J0L0V4cG9ydCBzZXJ2aWNlIHJvbGUsIGZvciBjdXN0b21lcnMgdXNpbmcgdGhlIEFXUyBDb25uZWN0b3IuIFRoZSBWTSBJbXBvcnQvRXhwb3J0IHNlcnZpY2UgYXNzdW1lcyBhIHJvbGUgd2l0aCB0aGlzIHBvbGljeSB0byBmdWxmaWxsIHZpcnR1YWwgbWFjaGluZSBtaWdyYXRpb24gcmVxdWVzdHMgZnJvbSB0aGUgQVdTIENvbm5lY3RvciB2aXJ0dWFsIGFwcGxpYW5jZS4gKE5vdGUgdGhhdCB0aGUgQVdTIENvbm5lY3RvciB1c2VzIHRoZSBcIkFXU0Nvbm5lY3RvclwiIG1hbmFnZWQgcG9saWN5IHRvIGlzc3VlIHJlcXVlc3RzIG9uIHRoZSBjdXN0b21lcidzIGJlaGFsZiB0byB0aGUgVk0gSW1wb3J0L0V4cG9ydCBzZXJ2aWNlLikgUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIEFNSXMgYW5kIEVCUyBzbmFwc2hvdHMsIG1vZGlmeSBFQlMgc25hcHNob3QgYXR0cmlidXRlcywgbWFrZSBcIkRlc2NyaWJlKlwiIGNhbGxzIG9uIEVDMiBvYmplY3RzLCBhbmQgcmVhZCBmcm9tIFMzIGJ1Y2tldHMgc3RhcnRpbmcgd2l0aCAnaW1wb3J0LXRvLWVjMi0nLiAqL1xuICAgIHB1YmxpYyBWTUltcG9ydEV4cG9ydFJvbGVGb3JBV1NDb25uZWN0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVk1JbXBvcnRFeHBvcnRSb2xlRm9yQVdTQ29ubmVjdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFZQQyBMYXR0aWNlIGFuZCBhY2Nlc3MgdG8gZGVwZW5kZW5jeSBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgVlBDTGF0dGljZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVlBDTGF0dGljZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBWUEMgTGF0dGljZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUsIGFuZCBsaW1pdGVkIGFjY2VzcyB0byBkZXBlbmRlbmN5IHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBWUENMYXR0aWNlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVlBDTGF0dGljZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGludm9raW5nIEFtYXpvbiBWUEMgTGF0dGljZSBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgVlBDTGF0dGljZVNlcnZpY2VzSW52b2tlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlZQQ0xhdHRpY2VTZXJ2aWNlc0ludm9rZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0aW5nIFNMUiB0byB3cml0ZSBjdXN0b21lcidzIGxvZ3MgdG8gYSBmaXJlaG9zZSBzdHJlYW0gKi9cbiAgICBwdWJsaWMgV0FGTG9nZ2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLldBRkxvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0aW5nIFNMUiB0byB3cml0ZSBjdXN0b21lcidzIGxvZ3MgdG8gYSBmaXJlaG9zZSBzdHJlYW0gKi9cbiAgICBwdWJsaWMgV0FGUmVnaW9uYWxMb2dnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuV0FGUmVnaW9uYWxMb2dnaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBjcmVhdGVzIGEgc2VydmljZS1saW5rZWQgcm9sZSB0aGF0IGFsbG93cyBBV1MgV0FGIHRvIHdyaXRlIGxvZ3MgdG8gQW1hem9uIEtpbmVzaXMgRGF0YSBGaXJlaG9zZS4gKi9cbiAgICBwdWJsaWMgV0FGVjJMb2dnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuV0FGVjJMb2dnaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgV2VsbC1BcmNoaXRlY3RlZCBUb29sIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBXZWxsQXJjaGl0ZWN0ZWRDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XZWxsQXJjaGl0ZWN0ZWRDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIFdlbGwtQXJjaGl0ZWN0ZWQgVG9vbCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgV2VsbEFyY2hpdGVjdGVkQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLldlbGxBcmNoaXRlY3RlZENvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya0xpbmsgKi9cbiAgICBwdWJsaWMgV29ya0xpbmtTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Xb3JrTGlua1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG59XG4iXX0=
5940
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWlhbS1mbG95ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1pYW0tZmxveWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXNDO0FBQ3RDLDJDQUF5RTtBQUV6RTs7Ozs7O0dBTUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLDRCQUFzQjtJQUN4RCx5REFBeUQ7SUFDbEQsK0JBQStCO1FBQ2xDLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRUQseU1BQXlNO0lBQ2xNLDJCQUEyQjtRQUM5QixPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELDBEQUEwRDtJQUNuRCxtQkFBbUI7UUFDdEIsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCxxSUFBcUk7SUFDOUgsMEJBQTBCO1FBQzdCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRUQsMkxBQTJMO0lBQ3BMLHNDQUFzQztRQUN6QyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDekgsQ0FBQztJQUVELHNJQUFzSTtJQUMvSCx5QkFBeUI7UUFDNUIsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCxpRkFBaUY7SUFDMUUsdUJBQXVCO1FBQzFCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdC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QUFDO0lBRUQsbUhBQW1IO0lBQzVHLDZCQUE2QjtRQUNoQyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUVELHVGQUF1RjtJQUNoRixnQ0FBZ0M7UUFDbkMsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFFRCw0RkFBNEY7SUFDckYsb0NBQW9DO1FBQ3ZDLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUN2SCxDQUFDO0lBRUQsc0ZBQXNGO0lBQy9FLHlCQUF5QjtRQUM1QixPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDNUcsQ0FBQztDQUNKO0FBN3VPRCw0Q0E2dU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzX2lhbSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEF3c01hbmFnZWRQb2xpY3kgYXMgQXdzTWFuYWdlZFBvbGljeVN0YXRpYyB9IGZyb20gJy4vaWFtLWZsb3lkJztcblxuLyoqXG4gKiBQcm92aWRlcyBhbGwgQVdTIG1hbmFnZWQgcG9saWNpZXMuXG4gKlxuICogVG8gZ2V0IHRoZSBuYW1lLCBhY2Nlc3MgdGhlIHN0YXRpYyBwcm9wZXJ0aWVzIG9mIHRoaXMgY2xhc3MsIGUuZy4gYEF3c01hbmFnZWRQb2xpY3kuUmVhZE9ubHlBY2Nlc3NgLlxuICpcbiAqICBUbyBnZXQgYW4gYGF3c19pYW0uSU1hbmFnZWRQb2xpY3lgIG9iamVjdCwgY2FsbCB0aGUgbWV0aG9kcyBvbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MsIGUuZy4gYG5ldyBBd3NNYW5hZ2VkUG9saWN5KCkuUmVhZE9ubHlBY2Nlc3MoKWAuXG4gKi9cbmV4cG9ydCBjbGFzcyBBd3NNYW5hZ2VkUG9saWN5IGV4dGVuZHMgQXdzTWFuYWdlZFBvbGljeVN0YXRpYyB7XG4gICAgLyoqIEFsbG93IEFjY2VzcyBBbmFseXplciB0byBhbmFseXplIHJlc291cmNlIG1ldGFkYXRhICovXG4gICAgcHVibGljIEFjY2Vzc0FuYWx5emVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWNjZXNzQW5hbHl6ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEZvciB1c2Ugd2l0aCBhY2NvdW50cyBjcmVhdGVkIHRocm91Z2ggdGhlIFZlcmNlbCBNYXJrZXRwbGFjZSBpbnRlZ3JhdGlvbiB3aXRoIEFXUy4gUHJvdmlkZXMgYWNjZXNzIHRvIGFjY291bnQgbWFuYWdlbWVudCwgbm90aWZpY2F0aW9uLCBjb3N0IGFuZCB1c2FnZSBhbmFseXNpcywgYW5kIGlkZW50aXR5IHByb3ZpZGVyIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFjY291bnRNYW5hZ2VtZW50RnJvbVZlcmNlbCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BY2NvdW50TWFuYWdlbWVudEZyb21WZXJjZWwpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQWRtaW5pc3RyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BZG1pbmlzdHJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY291bnQgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgd2hpbGUgZXhwbGljaXRseSBhbGxvd2luZyBkaXJlY3QgYWNjZXNzIHRvIHJlc291cmNlcyBuZWVkZWQgYnkgQW1wbGlmeSBhcHBsaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFkbWluaXN0cmF0b3JBY2Nlc3NBbXBsaWZ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFkbWluaXN0cmF0b3JBY2Nlc3NBbXBsaWZ5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY291bnQgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMuIEV4cGxpY2l0bHkgYWxsb3dzIGRldmVsb3BlcnMgYW5kIGFkbWluaXN0cmF0b3JzIHRvIGdhaW4gZGlyZWN0IGFjY2VzcyB0byByZXNvdXJjZXMgdGhleSBuZWVkIHRvIG1hbmFnZSBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgYXBwbGljYXRpb25zICovXG4gICAgcHVibGljIEFkbWluaXN0cmF0b3JBY2Nlc3NBV1NFbGFzdGljQmVhbnN0YWxrKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFkbWluaXN0cmF0b3JBY2Nlc3NBV1NFbGFzdGljQmVhbnN0YWxrKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEFXUyBEZXZPcHMgQWdlbnQgdG8gY29uZHVjdCBpbnZlc3RpZ2F0aW9ucyBhbmQgcGVyZm9ybSBhbmFseXNpcyBvbiBjdXN0b21lciBBV1MgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBSURldk9wc0FnZW50QWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJRGV2T3BzQWdlbnRBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRGV2T3BzIEFnZW50IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBSURldk9wc0FnZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSURldk9wc0FnZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIERldk9wcyBBZ2VudCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQUlEZXZPcHNBZ2VudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJRGV2T3BzQWdlbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB1c2UgdGhlIEFXUyBEZXZPcHMgb3BlcmF0b3Igd2ViIGFwcCBmb3IgYW4gQWdlbnQgU3BhY2UuICovXG4gICAgcHVibGljIEFJRGV2T3BzT3BlcmF0b3JBcHBBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlEZXZPcHNPcGVyYXRvckFwcEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IHRoZSBBbWF6b24gQUkgT3BlcmF0aW9ucyBBc3Npc3RhbnQgdG8gZ2VuZXJhdGUgaW5jaWRlbnQgcmVwb3J0IG9mIHRoZSBpbnZlc3RpZ2F0aW9uLiAqL1xuICAgIHB1YmxpYyBBSU9wc0Fzc2lzdGFudEluY2lkZW50UmVwb3J0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzQXNzaXN0YW50SW5jaWRlbnRSZXBvcnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBSZWFkT25seSBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSB0aGUgQW1hem9uIEFJIE9wZXJhdGlvbnMgQXNzaXN0YW50IHRvIGRvIGFuYWx5c2lzIG9uIGN1c3RvbWVyIEFXUyByZXNvdXJjZXMgZHVyaW5nIGludmVzdGlnYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBSU9wc0Fzc2lzdGFudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc0Fzc2lzdGFudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQUkgT3BlcmF0aW9ucyBzZXJ2aWNlIGFuZCBpdHMgcmVxdWlyZWQgcGVybWlzc2lvbnMgdmlhIEFXUyBjb25zb2xlLiBJdCBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIHVzZSBpZGVudGl0eS1hd2FyZSBjb25zb2xlIHNlc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBSU9wc0NvbnNvbGVBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc0NvbnNvbGVBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBBSSBPcGVyYXRpb25zIEFQSXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgYW5kIGRlbGV0aW5nIGludmVzdGlnYXRpb25zLCBpbnZlc3RpZ2F0aW9uIGV2ZW50cywgYW5kIGludmVzdGlnYXRpb24gcmVzb3VyY2VzLiBJdCBhbHNvIGluY2x1ZGVzIFJlYWRPbmx5IGFjY2VzcyB0byBhbGwgQUkgT3BlcmF0aW9ucyBBUElzIGFuZCB0byB1c2UgaWRlbnRpdHktYXdhcmUgc2Vzc2lvbnMuICovXG4gICAgcHVibGljIEFJT3BzT3BlcmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlPcHNPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBSZWFkT25seSBwZXJtaXNzaW9ucyB0byB0aGUgQW1hem9uIEFJIE9wZXJhdGlvbnMgc2VydmljZSBhbmQgaXRzIHJlcXVpcmVkIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQUlPcHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBkZXZpY2Ugc2V0dXAgYWNjZXNzIHRvIEFsZXhhRm9yQnVzaW5lc3Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc0RldmljZVNldHVwKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NEZXZpY2VTZXR1cCk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBbGV4YUZvckJ1c2luZXNzIHJlc291cmNlcyBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIFNlcnZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBnYXRld2F5IGV4ZWN1dGlvbiBhY2Nlc3MgdG8gQWxleGFGb3JCdXNpbmVzcyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzR2F0ZXdheUV4ZWN1dGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbGV4YUZvckJ1c2luZXNzR2F0ZXdheUV4ZWN1dGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgYWNjZXNzIHRvIExpZmVzaXplIEFWUyBkZXZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NMaWZlc2l6ZURlbGVnYXRlZEFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbGV4YUZvckJ1c2luZXNzTGlmZXNpemVEZWxlZ2F0ZWRBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBlbmFibGVzIEFsZXhhIGZvciBCdXNpbmVzcyB0byBwZXJmb3JtIGF1dG9tYXRlZCB0YXNrcyBzY2hlZHVsZWQgYnkgeW91ciBuZXR3b3JrIHByb2ZpbGVzLiAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzTmV0d29ya1Byb2ZpbGVTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NOZXR3b3JrUHJvZmlsZVNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGFjY2VzcyB0byBQb2x5IEFWUyBkZXZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NQb2x5RGVsZWdhdGVkQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NQb2x5RGVsZWdhdGVkQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkIG9ubHkgYWNjZXNzIHRvIEFsZXhhRm9yQnVzaW5lc3Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGNyZWF0ZS9lZGl0L2RlbGV0ZSBBUElzIGluIEFtYXpvbiBBUEkgR2F0ZXdheSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFQSUdhdGV3YXlBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFQSUdhdGV3YXlBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gaW52b2tlIEFQSXMgaW4gQW1hem9uIEFQSSBHYXRld2F5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25BUElHYXRld2F5SW52b2tlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BUElHYXRld2F5SW52b2tlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBUEkgR2F0ZXdheSB0byBwdXNoIGxvZ3MgdG8gdXNlcidzIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvbkFQSUdhdGV3YXlQdXNoVG9DbG91ZFdhdGNoTG9ncygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BUElHYXRld2F5UHVzaFRvQ2xvdWRXYXRjaExvZ3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQXBwRmxvdyBhbmQgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBzdXBwb3J0ZWQgYXMgZmxvdyBzb3VyY2Ugb3IgZGVzdGluYXRpb24gKFMzIGFuZCBSZWRzaGlmdCkuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIEtNUyBmb3IgZW5jcnlwdGlvbiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBGbG93RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BcHBGbG93RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEFwcGZsb3cgZmxvd3MgKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwRmxvd1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcEZsb3dSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBUkMgUmVnaW9uIHN3aXRjaCBmb3IgcGxhbiBleGVjdXRpb24gYW5kIHBsYW4gZXZhbHVhdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwbGljYXRpb25SZWNvdmVyeUNvbnRyb2xsZXJSZWdpb25Td2l0Y2hQbGFuRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcGxpY2F0aW9uUmVjb3ZlcnlDb250cm9sbGVyUmVnaW9uU3dpdGNoUGxhbkV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBcHBTdHJlYW0gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBTdHJlYW1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gQXBwU3RyZWFtIDIuMCBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDQSBpbiBjdXN0b21lciBhY2NvdW50cyBmb3IgY2VydGlmaWNhdGUtYmFzZWQgYXV0aGVudGljYXRpb24gKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwU3RyZWFtUENBQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbVBDQUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEFwcFN0cmVhbSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFwcFN0cmVhbVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFtYXpvbiBBcHBTdHJlYW0gc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBTdHJlYW1TZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbVNlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBdGhlbmEgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gZW5hYmxlIHF1ZXJ5aW5nLCB3cml0aW5nIHJlc3VsdHMsIGFuZCBkYXRhIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFtYXpvbkF0aGVuYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXRoZW5hRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gQXRoZW5hICovXG4gICAgcHVibGljIEFtYXpvbkF0aGVuYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF0aGVuYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHBlcmZvcm0gYWxsIG9wZXJhdGlvbnMgQW1hem9uIEF1Z21lbnRlZCBBSSByZXNvdXJjZXMsIGluY2x1ZGluZyBGbG93RGVmaW5pdGlvbnMsIEh1bWFuVGFza1VpcyBhbmQgSHVtYW5Mb29wcy4gRG9lcyBub3QgYWxsb3cgYWNjZXNzIGZvciBjcmVhdGluZyBGbG93RGVmaW5pdGlvbnMgYWdhaW5zdCB0aGUgcHVibGljLWNyb3dkIFdvcmt0ZWFtLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BdWdtZW50ZWRBSUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXVnbWVudGVkQUlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHBlcmZvcm0gYWxsIG9wZXJhdGlvbnMgb24gSHVtYW5Mb29wcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXVnbWVudGVkQUlIdW1hbkxvb3BGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1Z21lbnRlZEFJSHVtYW5Mb29wRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBwZXJmb3JtIGFsbCBvcGVyYXRpb25zIEFtYXpvbiBBdWdtZW50ZWQgQUkgcmVzb3VyY2VzLCBpbmNsdWRpbmcgRmxvd0RlZmluaXRpb25zLCBIdW1hblRhc2tVaXMgYW5kIEh1bWFuTG9vcHMuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIHRob3NlIG9wZXJhdGlvbnMgb2Ygc2VydmljZXMgdGhhdCBhcmUgaW50ZWdyYXRlZCB3aXRoIEFtYXpvbiBBdWdtZW50ZWQgQUkuICovXG4gICAgcHVibGljIEFtYXpvbkF1Z21lbnRlZEFJSW50ZWdyYXRlZEFQSUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdWdtZW50ZWRBSUludGVncmF0ZWRBUElBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjb25zb2xlIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEF1cm9yYSBEU1FMICovXG4gICAgcHVibGljIEFtYXpvbkF1cm9yYURTUUxDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdXJvcmFEU1FMQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBdXJvcmEgRFNRTCAqL1xuICAgIHB1YmxpYyBBbWF6b25BdXJvcmFEU1FMRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdXJvcmFEU1FMRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQXVyb3JhIERTUUwgKi9cbiAgICBwdWJsaWMgQW1hem9uQXVyb3JhRFNRTFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1cm9yYURTUUxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEJlZHJvY2sgTW9kZWwgaW5mZXJlbmNlIHBlcm1pc3Npb24gdG8gQmVkcm9jayBhZ2VudCBjb3JlIG1lbW9yeSAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrQWdlbnRDb3JlTWVtb3J5QmVkcm9ja01vZGVsSW5mZXJlbmNlRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrQWdlbnRDb3JlTWVtb3J5QmVkcm9ja01vZGVsSW5mZXJlbmNlRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIGFzIHdlbGwgYXMgbGltaXRlZCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBieSBpdCAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpbWl0ZWQgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIGFzIHdlbGwgYXMgdG8gcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBieSBpdCAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrTGltaXRlZEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrTGltaXRlZEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIE1hbnRsZSBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgdGhhdCBhcmUgcmVxdWlyZWQgYnkgaXQgKi9cbiAgICBwdWJsaWMgQW1hem9uQmVkcm9ja01hbnRsZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja01hbnRsZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIGFuZCBpbmZlcmVuY2UgY3JlYXRpb24gYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIE1hbnRsZSAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrTWFudGxlSW5mZXJlbmNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tNYW50bGVJbmZlcmVuY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIE1hbnRsZSAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrTWFudGxlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja01hbnRsZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgTWFya2V0cGxhY2UgYXMgd2VsbCBhcyB0byByZWxhdGVkIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGl0ICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tNYXJrZXRwbGFjZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrTWFya2V0cGxhY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBEZWZpbmVzIHRoZSBtYXhpbXVtIHBlcm1pc3Npb25zIG9mIElBTSByb2xlcyB0aGF0IEFtYXpvbiBCZWRyb2NrIFN0dWRpbyBjcmVhdGVzIGZvciBvcGVyYXRpbmcgQW1hem9uIEJlZHJvY2sgU3R1ZGlvIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQmVkcm9ja1N0dWRpb1Blcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja1N0dWRpb1Blcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQnJha2V0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBBbHNvIHByb3ZpZGVzIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgbG9ncykuICovXG4gICAgcHVibGljIEFtYXpvbkJyYWtldEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQnJha2V0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCByZXNvdXJjZXMgbmVjZXNzYXJ5IGZvciBleGVjdXRpbmcgYW4gQW1hem9uIEJyYWtldCBKb2IgaW5jbHVkaW5nIFMzLCBDbG91ZHdhdGNoLCBJQU0gYW5kIEJyYWtldCAqL1xuICAgIHB1YmxpYyBBbWF6b25CcmFrZXRKb2JzRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJyYWtldEpvYnNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEJyYWtldCB0byBjcmVhdGUgYW5kIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbkJyYWtldFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJyYWtldFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENoaW1lIEFkbWluIENvbnNvbGUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2hpbWUgQWRtaW4gQ29uc29sZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gQ2hpbWUgU0RLIG9wZXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVTREsoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVTREspO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIFBvbGljeSBGb3IgQW1hem9uIENoaW1lIFNESyBNZWRpYVBpcGVsaW5lcyBTZXJ2aWNlIExpbmtlZCBSb2xlICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lU0RLTWVkaWFQaXBlbGluZXNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVNES01lZGlhUGlwZWxpbmVzU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENoaW1lIFNESyBNZXNzYWdpbmcgdG8gYWNjZXNzIEFXUyByZXNvdXJjZXMgYW5kIGVuYWJsZSBtZXNzYWdpbmcgZnVuY3Rpb25hbGl0eSAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVNES01lc3NhZ2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lU0RLTWVzc2FnaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gQ2hpbWUgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDaGltZSB0byBhY2Nlc3MgQW1hem9uIFRyYW5zY3JpYmUgYW5kIEFtYXpvbiBUcmFuc2NyaWJlIE1lZGljYWwgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVUcmFuc2NyaXB0aW9uU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVUcmFuc2NyaXB0aW9uU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIG1hbmFnZW1lbnQgYWNjZXNzIHRvIEFtYXpvbiBDaGltZSBBZG1pbiBDb25zb2xlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVVc2VyTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVVzZXJNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogTWFuYWdlZCBwb2xpY3kgZm9yIFNlcnZpY2UgTGlua2VkIFJvbGUgZm9yIEFtYXpvbiBDaGltZSBWb2ljZUNvbm5lY3RvciAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVZvaWNlQ29ubmVjdG9yU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVWb2ljZUNvbm5lY3RvclNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENsb3VkIERpcmVjdG9yeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZERpcmVjdG9yeUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWREaXJlY3RvcnlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWQgRGlyZWN0b3J5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkRGlyZWN0b3J5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWREaXJlY3RvcnlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgb25seSBhY2Nlc3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggRXZpZGVudGx5LiBBbHNvIHByb3ZpZGVzIGFjY2VzcyB0byByZWxhdGVkIEFtYXpvbiBTMywgQW1hem9uIFNOUywgQW1hem9uIENsb3VkV2F0Y2gsIGFuZCBvdGhlciByZWxhdGVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoRXZpZGVudGx5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZFdhdGNoRXZpZGVudGx5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggRXZpZGVudGx5ICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZFdhdGNoRXZpZGVudGx5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRXYXRjaCBFdmlkZW50bHkgU2VydmljZSB0byBtYW5hZ2UgYXNzb2NpYXRlZCBBV1MgUmVzb3VyY2VzIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyBwZXJtaXNzaW9ucyBmb3IgdGhlIEFtYXpvbiBDbG91ZFdhdGNoIFJVTSBzZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkV2F0Y2hSVU1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hSVU1GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHJlYWQgb25seSBwZXJtaXNzaW9ucyBmb3IgdGhlIEFtYXpvbiBDbG91ZFdhdGNoIFJVTSBzZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkV2F0Y2hSVU1SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZFdhdGNoUlVNUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbiB0byBBbWF6b24gQ2xvdWRXYXRjaCBSVU0gU2VydmljZSB0byBwdWJsaXNoIG1vbml0b3JpbmcgZGF0YSB0byBvdGhlciByZWxldmFudCBBV1Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaFJVTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hSVU1TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDb2RlQ2F0YWx5c3QgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUNhdGFseXN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlQ2F0YWx5c3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ29kZUNhdGFseXN0ICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVDYXRhbHlzdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVDYXRhbHlzdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDb2RlQ2F0YWx5c3QgdG8gY3JlYXRlLCB1cGRhdGUsIGFuZCByZXNvbHZlIEFXUyBTdXBwb3J0IGNhc2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlQ2F0YWx5c3RTdXBwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVDYXRhbHlzdFN1cHBvcnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgYnkgQW1hem9uIENvZGVHdXJ1IFByb2ZpbGVyIGFnZW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVByb2ZpbGVyQWdlbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVQcm9maWxlckFnZW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvZGVHdXJ1IFByb2ZpbGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVByb2ZpbGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVByb2ZpbGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENvZGVHdXJ1IFByb2ZpbGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVByb2ZpbGVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVQcm9maWxlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDb2RlR3VydSBSZXZpZXdlciBhbmQgc2NvcGVkIGFjY2VzcyB0byByZXF1aXJlZCBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UmV2aWV3ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UmV2aWV3ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgUmV2aWV3ZXIuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UmV2aWV3ZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVJldmlld2VyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFtYXpvbiBDb2RlR3VydSBSZXZpZXdlciB0byBhY2Nlc3MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVJldmlld2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVSZXZpZXdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvZGVHdXJ1IFNlY3VyaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVNlY3VyaXR5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVNlY3VyaXR5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCBmb3Igd29ya2luZyB3aXRoIEFtYXpvbiBDb2RlR3VydSBTZWN1cml0eSBzY2Fucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVTZWN1cml0eVNjYW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVTZWN1cml0eVNjYW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIENvZ25pdG8gQVBJcyB0byBzdXBwb3J0IGRldmVsb3BlciBhdXRoZW50aWNhdGVkIGlkZW50aXRpZXMgZnJvbSB5b3VyIGF1dGhlbnRpY2F0aW9uIGJhY2tlbmQuICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9EZXZlbG9wZXJBdXRoZW50aWNhdGVkSWRlbnRpdGllcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvRGV2ZWxvcGVyQXV0aGVudGljYXRlZElkZW50aXRpZXMpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvZ25pdG8gVXNlciBQb29scyBzZXJ2aWNlIHRvIHVzZSB5b3VyIFNFUyBpZGVudGl0aWVzIGZvciBlbWFpbCBzZW5kaW5nICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9JZHBFbWFpbFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9JZHBFbWFpbFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBDb2duaXRvIFVzZXIgUG9vbHMgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b0lkcFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9JZHBTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBleGlzdGluZyBBbWF6b24gQ29nbml0byByZXNvdXJjZXMuIFlvdSB3aWxsIG5lZWQgQVdTIGFjY291bnQgYWRtaW4gcHJpdmlsZWdlcyB0byBjcmVhdGUgbmV3IENvZ25pdG8gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvUG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9Qb3dlclVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDb2duaXRvIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9SZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGRlZmluZXMgdGhlIHNldCBvZiBwZXJtaXNzaW9ucyBhbGxvd2VkIGZvciB1bmF1dGhlbnRpY2F0ZWQgaWRlbnRpdGllcyBmb3IgQ29nbml0byBJZGVudGl0eSBQb29scy4gVGhpcyBwb2xpY3kgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBzdGFuZCBhbG9uZSBwZXJtaXNzaW9uIHBvbGljeS4gSXQgaXMgdXNlZCBhcyBhIGd1YXJkcmFpbCBhZ2FpbnN0IG92ZXJseSBwZXJtaXNzaXZlIHBvbGljaWVzIGF0dGFjaGVkIGZvciByb2xlcyBpbiBhbiBpZGVudGl0eSBwb29sLiBEbyBub3QgYXR0YWNoIHRoaXMgcG9saWN5IHRvIGFueSByb2xlcywgYXMgQ29nbml0byBJZGVudGl0eSBTZXJ2aWNlIHdpbGwgYXV0b21hdGljYWxseSBpbmNsdWRlIGl0IGFzIGEgc2NvcGVkIGRvd24gcG9saWN5IHdoZW4gY3JlYXRpbmcgY3JlZGVudGlhbHMuIFRoZSBwcml2aWxlZ2VzIHRvIHRlbXBvcmFyaWx5IGFjY2VzcyBvdGhlciBBV1MgcmVzb3VyY2VzIHRocm91Z2ggdGhlIGVuaGFuY2VkIGZsb3cgd2lsbCBub3cgYmUgZGVmaW5lZCBieSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSByb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaWRlbnRpdHkgb2YgdGhlIHVuYXV0aGVudGljYXRlZCB1c2VyIHByb3ZpZGVkIGJ5IGEgc2VydmljZSwgYW5kIHRoZSBwcml2aWxlZ2VzIGdpdmVuIGluIHRoaXMgbWFuYWdlZCBwb2xpY3kgdGhhdCBpcyBvd25lZCBieSBDb2duaXRvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvVW5BdXRoZWRJZGVudGl0aWVzU2Vzc2lvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvVW5BdXRoZWRJZGVudGl0aWVzU2Vzc2lvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGRlZmluZXMgdGhlIHNldCBvZiBwZXJtaXNzaW9ucyBhbGxvd2VkIGZvciB1bmF1dGhlbnRpY2F0ZWQgaWRlbnRpdGllcyBmb3IgQ29nbml0byBJZGVudGl0eSBQb29scy4gVGhpcyBkb2VzIG5vdCBuZWVkIHRvIGJlIGF0dGFjaGVkIHRvIHlvdXIgdW5hdXRoIHJvbGUsIGFzIENvZ25pdG8gSWRlbnRpdHkgU2VydmljZSB3aWxsIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBpdCBhcyBhIHNjb3BlZCBkb3duIHBvbGljeSB3aGVuIGNyZWF0aW5nIGNyZWRlbnRpYWxzLiBUaGUgcHJpdmlsZWdlcyB0byB0ZW1wb3JhcmlseSBhY2Nlc3Mgb3RoZXIgQVdTIHJlc291cmNlcyB0aHJvdWdoIHRoZSBlbmhhbmNlZCBmbG93IHdpbGwgbm93IGJlIGRlZmluZWQgYnkgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgcm9sZSBhc3NvY2lhdGVkIHdpdGggdGhlIGlkZW50aXR5IG9mIHRoZSB1bmF1dGhlbnRpY2F0ZWQgdXNlciBwcm92aWRlZCBieSBhIHNlcnZpY2UsIGFuZCB0aGUgcHJpdmlsZWdlcyBnaXZlbiBpbiB0aGlzIG1hbmFnZWQgcG9saWN5IHRoYXQgaXMgb3duZWQgYnkgQ29nbml0by4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b1VuYXV0aGVudGljYXRlZElkZW50aXRpZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b1VuYXV0aGVudGljYXRlZElkZW50aXRpZXMpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgcHVycG9zZSBvZiB0aGlzIHBvbGljeSBpcyB0byBncmFudCBwZXJtaXNzaW9ucyB0byBBV1MgQ29ubmVjdCB1c2VycyByZXF1aXJlZCB0byB1c2UgQ29ubmVjdCByZXNvdXJjZXMuIFRoaXMgcG9saWN5IHByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb25uZWN0IHJlc291cmNlcyB2aWEgdGhlIENvbm5lY3QgQ29uc29sZSBhbmQgcHVibGljIEFQSXMgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29ubmVjdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFtYXpvbiBDb25uZWN0IENhbXBhaWducyBzZXJ2aWNlIGxpbmtlZCByb2xlICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RDYW1wYWlnbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0Q2FtcGFpZ25zU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IHRoZSBBbWF6b24gQ29ubmVjdCBpbnN0YW5jZXMgaW4geW91ciBBV1MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ29ubmVjdCB0byBjcmVhdGUgYW5kIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0U2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29ubmVjdFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDb25uZWN0IHRvIHN5bmNocm9uaXplIEFXUyByZXNvdXJjZXMgYWNyb3NzIHJlZ2lvbnMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RTeW5jaHJvbml6YXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0U3luY2hyb25pemF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ29ubmVjdCBWb2ljZSBJRCAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0Vm9pY2VJREZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29ubmVjdFZvaWNlSURGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gY29uc3VtZSBBbWF6b24gQmVkcm9jayBtb2RlbHMsIGluY2x1ZGluZyBpbnZva2luZyBBbWF6b24gQmVkcm9jayBhcHBsaWNhdGlvbiBpbmZlcmVuY2UgcHJvZmlsZSBjcmVhdGVkIGZvciBwYXJ0aWN1bGFyIEFtYXpvbiBEYXRhWm9uZSBkb21haW4uICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lQmVkcm9ja01vZGVsQ29uc3VtcHRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVCZWRyb2NrTW9kZWxDb25zdW1wdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSBBbWF6b24gQmVkcm9jayBtb2RlbCBhY2Nlc3MsIGluY2x1ZGluZyBjcmVhdGluZywgdGFnZ2luZyBhbmQgZGVsZXRpbmcgYXBwbGljYXRpb24gaW5mZXJlbmNlIHByb2ZpbGVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUJlZHJvY2tNb2RlbE1hbmFnZW1lbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVCZWRyb2NrTW9kZWxNYW5hZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRGF0YVpvbmUncyBEb21haW5FeGVjdXRpb25Sb2xlIHNlcnZpY2Ugcm9sZS4gVGhpcyByb2xlIGlzIHVzZWQgYnkgQW1hem9uIERhdGFab25lIHRvIGNhdGFsb2csIGRpc2NvdmVyLCBnb3Zlcm4sIHNoYXJlLCBhbmQgYW5hbHl6ZSBkYXRhIGluIHRoZSBBbWF6b24gRGF0YVpvbmUgZG9tYWluLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZURvbWFpbkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVEb21haW5FeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIERhdGFab25lIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBFbnZpcm9ubWVudHMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgYm91bmRhcnkgb2YgdGhlaXIgcGVybWlzc2lvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lRW52aXJvbm1lbnRSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUVudmlyb25tZW50Um9sZVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRGF0YVpvbmUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFzIHdlbGwgYXMgbGltaXRlZCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBieSBpdC4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEYXRhWm9uZSwgYnV0IGRvZXMgbm90IGFsbG93IHRoZSBtYW5hZ2VtZW50IG9mIGRvbWFpbnMsIHVzZXJzLCBvciBhc3NvY2lhdGVkIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUZ1bGxVc2VyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lRnVsbFVzZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBhbGxvdyBBbWF6b24gRGF0YVpvbmUgdG8gZW5hYmxlIHB1Ymxpc2hpbmcgYW5kIGFjY2VzcyBncmFudHMgdG8gZGF0YS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVHbHVlTWFuYWdlQWNjZXNzUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUdsdWVNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIERhdGFab25lIGlzIGEgZGF0YSBtYW5hZ2VtZW50IHNlcnZpY2UgdGhhdCBlbmFibGVzIHlvdSB0byBjYXRhbG9nLCBkaXNjb3ZlciwgZ292ZXJuLCBzaGFyZSwgYW5kIGFuYWx5emUgeW91ciBkYXRhLiBXaXRoIEFtYXpvbiBEYXRhWm9uZSwgeW91IGNhbiBzaGFyZSBhbmQgYWNjZXNzIHlvdXIgZGF0YSBhY3Jvc3MgYWNjb3VudHMgYW5kIHN1cHBvcnRlZCByZWdpb25zLiBBbWF6b24gRGF0YVpvbmUgc2ltcGxpZmllcyB5b3VyIGV4cGVyaWVuY2UgYWNyb3NzIEFXUyBzZXJ2aWNlcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIEFtYXpvbiBSZWRzaGlmdCwgQW1hem9uIEF0aGVuYSwgQVdTIEdsdWUsIGFuZCBBV1MgTGFrZSBGb3JtYXRpb24uICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lUmVkc2hpZnRHbHVlUHJvdmlzaW9uaW5nUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lUmVkc2hpZnRHbHVlUHJvdmlzaW9uaW5nUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgQW1hem9uIERhdGFab25lIHBlcm1pc3Npb25zIHRvIHB1Ymxpc2ggQW1hem9uIFJlZHNoaWZ0IGRhdGEgdG8gdGhlIGNhdGFsb2cuIEl0IGFsc28gZ2l2ZXMgQW1hem9uIERhdGFab25lIHBlcm1pc3Npb25zIHRvIGdyYW50IGFjY2VzcyBvciByZXZva2UgYWNjZXNzIHRvIEFtYXpvbiBSZWRzaGlmdCBvciBBbWF6b24gUmVkc2hpZnQgU2VydmVybGVzcyBwdWJsaXNoZWQgYXNzZXRzIGluIHRoZSBjYXRhbG9nLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZVJlZHNoaWZ0TWFuYWdlQWNjZXNzUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZVJlZHNoaWZ0TWFuYWdlQWNjZXNzUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBbWF6b25EYXRhWm9uZVNhZ2VNYWtlckVudmlyb25tZW50Um9sZVBlcm1pc3Npb25zQm91bmRhcnkgcG9saWN5IGlzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHRoYXQgYXJlIHBlcm1pdHRlZCBvbiBhbiBleGVjdXRpb24gcm9sZSBjcmVhdGVkIGluIGEgU2FnZU1ha2VyIGVudmlyb25tZW50IHByb3Zpc2lvbmVkIGJ5IEFtYXpvbiBEYXRhWm9uZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJFbnZpcm9ubWVudFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lU2FnZU1ha2VyRW52aXJvbm1lbnRSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBbWF6b25EYXRhWm9uZVNhZ2VNYWtlck1hbmFnZUFjY2Vzc1JvbGVQb2xpY3kgcG9saWN5IGdyYW50cyBBbWF6b24gRGF0YVpvbmUgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGdyYW50IHVzZXIgYWNjZXNzIHRvIHZhcmlvdXMgcmVzb3VyY2VzIGluIHRoZSBTYWdlTWFrZXIgZW52aXJvbm1lbnQuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyTWFuYWdlQWNjZXNzUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZVNhZ2VNYWtlck1hbmFnZUFjY2Vzc1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJQcm92aXNpb25pbmdSb2xlUG9saWN5IHBvbGljeSBncmFudHMgQW1hem9uIERhdGFab25lIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBpbnRlcm9wZXJhdGUgd2l0aCBBbWF6b24gU2FnZU1ha2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZVNhZ2VNYWtlclByb3Zpc2lvbmluZ1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJQcm92aXNpb25pbmdSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEZXRlY3RpdmUgc2VydmljZSBhbmQgc2NvcGVkIGFjY2VzcyB0byB0aGUgY29uc29sZSBVSSBkZXBlbmRlbmNpZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uRGV0ZWN0aXZlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXRlY3RpdmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgaW52ZXN0aWdhdG9yIGFjY2VzcyB0byBBbWF6b24gRGV0ZWN0aXZlIHNlcnZpY2UgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgVUkgZGVwZW5kZW5jaWVzLiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBkaXZlIGludG8gRGV0ZWN0aXZlIGZvciBpbnZlc3RpZ2F0aW9uIHB1cnBvc2VzIGFuZCBsaW1pdGVkIHdyaXRlIGFjY2VzcyB0byBHdWFyZGR1dHkuICovXG4gICAgcHVibGljIEFtYXpvbkRldGVjdGl2ZUludmVzdGlnYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXRlY3RpdmVJbnZlc3RpZ2F0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBtZW1iZXIgYWNjZXNzIHRvIEFtYXpvbiBEZXRlY3RpdmUgc2VydmljZSBhbmQgc2NvcGVkIGFjY2VzcyB0byB0aGUgY29uc29sZSBVSSBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkRldGVjdGl2ZU1lbWJlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXRlY3RpdmVNZW1iZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBPcmdhbml6YXRpb25zIGFjY2VzcyB0byBtYW5hZ2UgRGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgZm9yIEFtYXpvbiBEZXRlY3RpdmUgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgVUkgZGVwZW5kZW5jaWVzLiBUaGlzIGFsc28gZ3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgc2VydmljZS1saW5rZWQgcm9sZSBmb3IgRGV0ZWN0aXZlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXRlY3RpdmVPcmdhbml6YXRpb25zQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZU9yZ2FuaXphdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIERldGVjdGl2ZSB0byBtYWtlIHNlcnZpY2UgY2FsbHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uRGV0ZWN0aXZlU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV0ZWN0aXZlU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgcG9saWN5IGdyYW50cyBmdWxsLWFjY2VzcyB0byB0aGUgRGV2T3BzIEd1cnUgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV2T3BzR3VydUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldk9wc0d1cnVDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEZXZPcHMgR3VydS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV2T3BzR3VydUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV2T3BzR3VydUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGFjY2VzcyB0byBlbmFibGUgYW5kIG1hbmFnZSBBbWF6b24gRGV2T3BzIEd1cnUgd2l0aGluIGFuIG9yZ2FuaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV2T3BzR3VydU9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV2T3BzR3VydU9yZ2FuaXphdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBEZXZPcHMgR3VydSBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV2T3BzR3VydVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlLWxpbmtlZCByb2xlIHJlcXVpcmVkIGZvciBBbWF6b24gRGV2T3BzR3VydSB0byBhY2Nlc3MgeW91ciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkRldk9wc0d1cnVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdXBsb2FkIERNUyByZXBsaWNhdGlvbiBsb2dzIHRvIGNsb3Vkd2F0Y2ggbG9ncyBpbiBjdXN0b21lciBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25ETVNDbG91ZFdhdGNoTG9nc1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRE1TQ2xvdWRXYXRjaExvZ3NSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBTMyBzZXR0aW5ncyBmb3IgUmVkc2hpZnQgZW5kcG9pbnRzIGZvciBETVMuICovXG4gICAgcHVibGljIEFtYXpvbkRNU1JlZHNoaWZ0UzNSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRNU1JlZHNoaWZ0UzNSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBWUEMgc2V0dGluZ3MgZm9yIEFXUyBtYW5hZ2VkIGN1c3RvbWVyIGNvbmZpZ3VyYXRpb25zICovXG4gICAgcHVibGljIEFtYXpvbkRNU1ZQQ01hbmFnZW1lbnRSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRNU1ZQQ01hbmFnZW1lbnRSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBEb2N1bWVudERCLUVsYXN0aWMgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkRvY0RCRWxhc3RpY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRvY0RCRWxhc3RpY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gbWFuYWdlIEFtYXpvbiBEb2N1bWVudERCIHdpdGggTW9uZ29EQiBjb21wYXRpYmlsaXR5IHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHB1Ymxpc2ggb24gYWxsIFNOUyB0b3BpY3Mgd2l0aGluIHRoZSBhY2NvdW50LCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIGVkaXQgQW1hem9uIEVDMiBpbnN0YW5jZXMgYW5kIFZQQyBjb25maWd1cmF0aW9ucywgcGVybWlzc2lvbnMgdG8gdmlldyBhbmQgbGlzdCBrZXlzIG9uIEFtYXpvbiBLTVMsIGFuZCBmdWxsIGFjY2VzcyB0byBBbWF6b24gUkRTIGFuZCBBbWF6b24gTmVwdHVuZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQkNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERvY3VtZW50REIgRWxhc3RpYyBDbHVzdGVycyBhbmQgb3RoZXIgcmVxdWlyZWQgcGVybWlzc2lvbnMgZm9yIGl0cyBkZXBlbmRlbmNpZXMgaW5jbHVkaW5nIEVDMiwgS01TLCBTZWNyZXRzTWFuYWdlciwgQ2xvdWRXYXRjaCBhbmQgSUFNLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Eb2NEQkVsYXN0aWNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRvY0RCRWxhc3RpY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBEb2NEQi1FbGFzdGljIGFuZCBDbG91ZFdhdGNoIG1ldHJpY3MuICovXG4gICAgcHVibGljIEFtYXpvbkRvY0RCRWxhc3RpY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRvY0RCRWxhc3RpY1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERvY3VtZW50REIgd2l0aCBNb25nb0RCIGNvbXBhdGliaWxpdHkuIE5vdGUgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgZnVsbCBhY2Nlc3MgdG8gcHVibGlzaCBvbiBhbGwgU05TIHRvcGljcyB3aXRoaW4gdGhlIGFjY291bnQgYW5kIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSRFMgYW5kIEFtYXpvbiBOZXB0dW5lLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Eb2NEQkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRG9jdW1lbnREQiB3aXRoIE1vbmdvREIgY29tcGF0aWJpbGl0eS4gTm90ZSB0aGF0IHRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBBbWF6b24gUkRTIGFuZCBBbWF6b24gTmVwdHVuZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkRvY0RCUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBtYW5hZ2UgVlBDIHNldHRpbmdzIGZvciBBbWF6b24gbWFuYWdlZCBjdXN0b21lciBjb25maWd1cmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25EUlNWUENNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRSU1ZQQ01hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRHluYW1vREIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EeW5hbW9EQkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRHluYW1vREJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIER5bmFtb0RCICovXG4gICAgcHVibGljIEFtYXpvbkR5bmFtb0RCRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkR5bmFtb0RCRnVsbEFjY2Vzc1YyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgb24gYSBkZXByZWNhdGlvbiBwYXRoLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZ3VpZGFuY2U6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvRHluYW1vREJQaXBlbGluZS5odG1sLiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRHluYW1vREIgaW5jbHVkaW5nIEV4cG9ydC9JbXBvcnQgdXNpbmcgQVdTIERhdGEgUGlwZWxpbmUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EeW5hbW9EQkZ1bGxBY2Nlc3N3aXRoRGF0YVBpcGVsaW5lKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkR5bmFtb0RCRnVsbEFjY2Vzc3dpdGhEYXRhUGlwZWxpbmUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBEeW5hbW9EQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkR5bmFtb0RCUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRHluYW1vREJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIElBTSBQb2xpY3kgdGhhdCBhbGxvd3MgdGhlIENTSSBkcml2ZXIgc2VydmljZSBhY2NvdW50IHRvIG1ha2UgY2FsbHMgdG8gcmVsYXRlZCBzZXJ2aWNlcyBzdWNoIGFzIEVDMiBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUJTQ1NJRHJpdmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVCU0NTSURyaXZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBbWF6b24gRUNSIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJSZWdpc3RyeUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVDMiBDb250YWluZXIgUmVnaXN0cnkgcmVwb3NpdG9yaWVzLCBidXQgZG9lcyBub3QgYWxsb3cgcmVwb3NpdG9yeSBkZWxldGlvbiBvciBwb2xpY3kgY2hhbmdlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlQb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlQb3dlclVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcHVsbCBpbWFnZXMgZnJvbSBBbWF6b24gRUMyIENvbnRhaW5lciBSZWdpc3RyeSByZXBvc2l0b3JpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5UHVsbE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlQdWxsT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEVDMiBDb250YWluZXIgUmVnaXN0cnkgcmVwb3NpdG9yaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5UmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiAgIFBvbGljeSB0byBlbmFibGUgVGFzayBBdXRvc2NhbGluZyBmb3IgQW1hem9uIEVDMiBDb250YWluZXIgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJTZXJ2aWNlQXV0b3NjYWxlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJTZXJ2aWNlQXV0b3NjYWxlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQ2xvdWRXYXRjaCBFdmVudHMgZm9yIEVDMiBDb250YWluZXIgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJTZXJ2aWNlRXZlbnRzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJTZXJ2aWNlRXZlbnRzUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIEVDMiBSb2xlIGZvciBBbWF6b24gRUMyIENvbnRhaW5lciBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJTZXJ2aWNlZm9yRUMyUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJTZXJ2aWNlZm9yRUMyUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciBBbWF6b24gRUNTIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRUMyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBzY2FuIGFsbCBzdXBwb3J0ZWQgcmVzb3VyY2UgdHlwZXMgZm9yIHJlbGV2YW50IGRhdGEgd2hlbiB1c2luZyBEZXNjcmliZUltYWdlUmVmZXJlbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMySW1hZ2VSZWZlcmVuY2VzQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkltYWdlUmVmZXJlbmNlc0FjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVDMiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVDMlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgRUMyIGFjY2VzcyB0byBTMyBidWNrZXQgdG8gZG93bmxvYWQgcmV2aXNpb24uIFRoaXMgcm9sZSBpcyBuZWVkZWQgYnkgdGhlIENvZGVEZXBsb3kgYWdlbnQgb24gRUMyIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUm9sZWZvckFXU0NvZGVEZXBsb3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUm9sZWZvckFXU0NvZGVEZXBsb3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBFQzIgbGltaXRlZCBhY2Nlc3MgdG8gUzMgYnVja2V0IHRvIGRvd25sb2FkIHJldmlzaW9uLiBUaGlzIHJvbGUgaXMgbmVlZGVkIGJ5IHRoZSBDb2RlRGVwbG95IGFnZW50IG9uIEVDMiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDMlJvbGVmb3JBV1NDb2RlRGVwbG95TGltaXRlZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSb2xlZm9yQVdTQ29kZURlcGxveUxpbWl0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFQzIgUm9sZSBmb3IgRGF0YSBQaXBlbGluZSBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVDMlJvbGVmb3JEYXRhUGlwZWxpbmVSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJvbGVmb3JEYXRhUGlwZWxpbmVSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgd2lsbCBzb29uIGJlIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgQW1hem9uU1NNTWFuYWdlZEluc3RhbmNlQ29yZSBwb2xpY3kgdG8gZW5hYmxlIEFXUyBTeXN0ZW1zIE1hbmFnZXIgc2VydmljZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb24gRUMyIGluc3RhbmNlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zeXN0ZW1zLW1hbmFnZXIvbGF0ZXN0L3VzZXJndWlkZS9zZXR1cC1pbnN0YW5jZS1wcm9maWxlLmh0bWwgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUm9sZWZvclNTTSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSb2xlZm9yU1NNKTtcbiAgICB9XG5cbiAgICAvKiogTWFuYWdlZCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gTGF1bmNoV2l6YXJkIHNlcnZpY2Ugcm9sZSBmb3IgRUMyICovXG4gICAgcHVibGljIEFtYXpvbkVDMlJvbGVQb2xpY3lGb3JMYXVuY2hXaXphcmQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUm9sZVBvbGljeUZvckxhdW5jaFdpemFyZCk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQXV0b3NjYWxpbmcgZm9yIEFtYXpvbiBFQzIgU3BvdCBGbGVldCAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJTcG90RmxlZXRBdXRvc2NhbGVSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlNwb3RGbGVldEF1dG9zY2FsZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIFNwb3QgRmxlZXQgdG8gcmVxdWVzdCwgdGVybWluYXRlIGFuZCB0YWcgU3BvdCBJbnN0YW5jZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVDMlNwb3RGbGVldFRhZ2dpbmdSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlNwb3RGbGVldFRhZ2dpbmdSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFtYXpvbiBFQ1MgcmVzb3VyY2VzIGFuZCBlbmFibGVzIEVDUyBmZWF0dXJlcyB0aHJvdWdoIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMsIGluY2x1ZGluZyBWUENzLCBBdXRvIFNjYWxpbmcgZ3JvdXBzLCBhbmQgQ2xvdWRGb3JtYXRpb24gc3RhY2tzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIEFtYXpvbiBFQ1MgQ29tcHV0ZSB0byBtYW5hZ2UgeW91ciBFQzIgaW5zdGFuY2VzIGFuZCByZWxhdGVkIHJlc291cmNlcyBhcyBwYXJ0IG9mIEVDUyBtYW5hZ2VkIGluc3RhbmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NDb21wdXRlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTQ29tcHV0ZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlc2UgcGVybWlzc2lvbnMgZW5hYmxlIEFtYXpvbiBFQ1MgdG8gYXV0b21hdGljYWxseSBwcm92aXNpb24gYW5kIG1hbmFnZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgY29tcG9uZW50cyByZXF1aXJlZCBmb3IgRXhwcmVzcyBHYXRld2F5IFNlcnZpY2VzLCBpbmNsdWRpbmcgbG9hZCBiYWxhbmNpbmcsIHNlY3VyaXR5IGdyb3VwcywgU1NMIGNlcnRpZmljYXRlcywgYW5kIGF1dG8gc2NhbGluZyBjb25maWd1cmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlZm9yRXhwcmVzc0dhdGV3YXlTZXJ2aWNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVmb3JFeHByZXNzR2F0ZXdheVNlcnZpY2VzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyByZXF1aXJlZCB0byBtYW5hZ2UgbG9hZCBiYWxhbmNlcnMgYXNzb2NpYXRlZCB3aXRoIEVDUyB3b3JrbG9hZHMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvckxvYWRCYWxhbmNlcnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yTG9hZEJhbGFuY2Vycyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEVDUyBhY2Nlc3MgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgRUMyIG1hbmFnZWQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvck1hbmFnZWRJbnN0YW5jZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yTWFuYWdlZEluc3RhbmNlcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSwgQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgb3RoZXIgQVdTIFNlcnZpY2VzIHJlcXVpcmVkIHRvIG1hbmFnZSBFQ1MgU2VydmljZSBDb25uZWN0IFRMUyBmZWF0dXJlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yU2VydmljZUNvbm5lY3RUcmFuc3BvcnRMYXllclNlY3VyaXR5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclNlcnZpY2VDb25uZWN0VHJhbnNwb3J0TGF5ZXJTZWN1cml0eSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgcmVxdWlyZWQgdG8gbWFuYWdlIHZvbHVtZXMgYXNzb2NpYXRlZCB3aXRoIEVDUyB3b3JrbG9hZHMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZvbHVtZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVm9sdW1lcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgcmVxdWlyZWQgdG8gbWFuYWdlIFZQQyBMYXR0aWNlIGZlYXR1cmUgaW4gRUNTIHdvcmtsb2FkcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVnBjTGF0dGljZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWcGNMYXR0aWNlKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRUNTIEluc3RhbmNlIFJvbGUgZm9yIEFtYXpvbiBFQ1MgTWFuYWdlZCBJbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0luc3RhbmNlUm9sZVBvbGljeUZvck1hbmFnZWRJbnN0YW5jZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTSW5zdGFuY2VSb2xlUG9saWN5Rm9yTWFuYWdlZEluc3RhbmNlcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQW1hem9uIEVDUyB0byBtYW5hZ2UgeW91ciBjbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcnVuIEFtYXpvbiBFQ1MgdGFza3MgKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTVGFza0V4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTVGFza0V4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBtYW5hZ2VtZW50IGFjY2VzcyB0byBFRlMgcmVzb3VyY2VzIGFuZCByZWFkIGFjY2VzcyB0byBFQzIgKi9cbiAgICBwdWJsaWMgQW1hem9uRUZTQ1NJRHJpdmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVGU0NTSURyaXZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHRoZSBBbWF6b24gVlBDIENOSSBQbHVnaW4gKGFtYXpvbi12cGMtY25pLWs4cykgdGhlIHBlcm1pc3Npb25zIGl0IHJlcXVpcmVzIHRvIG1vZGlmeSB0aGUgSVAgYWRkcmVzcyBjb25maWd1cmF0aW9uIG9uIHlvdXIgRUtTIHdvcmtlciBub2Rlcy4gVGhpcyBwZXJtaXNzaW9uIHNldCBhbGxvd3MgdGhlIENOSSB0byBsaXN0LCBkZXNjcmliZSwgYW5kIG1vZGlmeSBFbGFzdGljIE5ldHdvcmsgSW50ZXJmYWNlcyBvbiB5b3VyIGJlaGFsZi4gTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQVdTIFZQQyBDTkkgUGx1Z2luIGlzIGF2YWlsYWJsZSBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2FtYXpvbi12cGMtY25pLWs4cyAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NDTklQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTQ05JUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGF0dGFjaGVkIHRvIHRoZSBFS1MgQ2x1c3RlciBSb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY2x1c3RlcidzIGJsb2NrIHN0b3JhZ2UgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NCbG9ja1N0b3JhZ2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTQmxvY2tTdG9yYWdlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgS3ViZXJuZXRlcyB0aGUgcGVybWlzc2lvbnMgaXQgcmVxdWlyZXMgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gS3ViZXJuZXRlcyByZXF1aXJlcyBFYzI6Q3JlYXRlVGFncyBwZXJtaXNzaW9ucyB0byBwbGFjZSBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiBvbiBFQzIgcmVzb3VyY2VzIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gSW5zdGFuY2VzLCBTZWN1cml0eSBHcm91cHMsIGFuZCBFbGFzdGljIE5ldHdvcmsgSW50ZXJmYWNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTQ2x1c3RlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NDbHVzdGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGF0dGFjaGVkIHRvIHRoZSBFS1MgQ2x1c3RlciBSb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY2x1c3RlcidzIGNvbXB1dGUgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NDb21wdXRlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0NvbXB1dGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQW1hem9uIEVLUyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBmb3IgRUtTIGNvbm5lY3RvciAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NDb25uZWN0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NDb25uZWN0b3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdmlldyB0aGUgZGFzaGJvYXJkIGluIHRoZSBBbWF6b24gRUtTIGNvbnNvbGUuIFRoZSBkYXNoYm9hcmQgYWdncmVnYXRlcyBpbmZvcm1hdGlvbiBhYm91dCBtdWx0aXBsZSBjbHVzdGVycyBhbmQgcmVsYXRlZCByZXNvdXJjZXMgdXNpbmcgQVdTIE9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0Rhc2hib2FyZENvbnNvbGVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NEYXNoYm9hcmRDb25zb2xlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBlbmFibGVzIHRoZSBBbWF6b24gRUtTIERhc2hib2FyZCB0byBhY2Nlc3MgYW5kIGRpc3BsYXkgb3JnYW5pemF0aW9uLXdpZGUgaW5mb3JtYXRpb24uIFRoZSBwb2xpY3kgYWxsb3dzIHRoZSBFS1MgRGFzaGJvYXJkIHNlcnZpY2UgdG8gZ2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgQVdTIE9yZ2FuaXphdGlvbnMgc3RydWN0dXJlIGFuZCBhY2NvdW50cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTRGFzaGJvYXJkU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTRGFzaGJvYXJkU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gRUtTIHBvZHMgb24gQVdTIEZhcmdhdGUgKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTRmFyZ2F0ZVBvZEV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTRmFyZ2F0ZVBvZEV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIEFtYXpvbiBFS1MgdG8gcnVuIGZhcmdhdGUgdGFza3MgKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTRm9yRmFyZ2F0ZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0ZvckZhcmdhdGVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBhdHRhY2hlZCB0byB0aGUgRUtTIENsdXN0ZXIgUm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIGNsdXN0ZXIncyBsb2FkIGJhbGFuY2luZyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0xvYWRCYWxhbmNpbmdQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTTG9hZEJhbGFuY2luZ1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIEVLUyBsb2NhbCBjbHVzdGVyJ3MgY29udHJvbC1wbGFuZSBpbnN0YW5jZXMgcnVubmluZyBpbiB5b3VyIGFjY291bnQgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTTG9jYWxPdXRwb3N0Q2x1c3RlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NMb2NhbE91dHBvc3RDbHVzdGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBFS1MgTG9jYWwgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0xvY2FsT3V0cG9zdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0xvY2FsT3V0cG9zdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIEVLUyBNQ1Agc2VydmljZS4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHVzZSBvbmx5IHJlYWQtb25seSB0b29scyBpbiB0aGUgRUtTIE1DUCBzZXJ2aWNlIG1lYW50IGZvciBvYnNlcnZhYmlsaXR5LCB0cm91Ymxlc2hvb3RpbmcsIHJldHJpZXZpbmcgRUtTIHJlc291cmNlIGluZm9ybWF0aW9uLCBhbmQgZ2V0dGluZyBFS1Mtb3B0aW1pemVkIHN1Z2dlc3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NNQ1BSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NNQ1BSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBhdHRhY2hlZCB0byB0aGUgRUtTIENsdXN0ZXIgUm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIGNsdXN0ZXIncyBuZXR3b3JraW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTTmV0d29ya2luZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NOZXR3b3JraW5nUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIGZvciBLdWJlcm5ldGVzIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzIHRvIG9wZXJhdGUgRUtTIENsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1NlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBIFNlcnZpY2UtTGlua2VkIFJvbGUgcmVxdWlyZWQgZm9yIEFtYXpvbiBFS1MgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHVzZWQgYnkgVlBDIFJlc291cmNlIENvbnRyb2xsZXIgdG8gbWFuYWdlIEVOSSBhbmQgSVBzIGZvciB3b3JrZXIgbm9kZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1ZQQ1Jlc291cmNlQ29udHJvbGxlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NWUENSZXNvdXJjZUNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQW1hem9uIEVLUyB3b3JrZXIgbm9kZXMgdG8gY29ubmVjdCB0byBBbWF6b24gRUtTIENsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NXb3JrZXJOb2RlTWluaW1hbFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NXb3JrZXJOb2RlTWluaW1hbFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBbWF6b24gRUtTIHdvcmtlciBub2RlcyB0byBjb25uZWN0IHRvIEFtYXpvbiBFS1MgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1dvcmtlck5vZGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTV29ya2VyTm9kZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGlDYWNoZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aUNhY2hlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGlDYWNoZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGlDYWNoZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aUNhY2hlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpQ2FjaGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBbWF6b24gRUNSIFB1YmxpYyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVDUiBQdWJsaWMgcmVwb3NpdG9yaWVzLCBidXQgZG9lcyBub3QgYWxsb3cgcmVwb3NpdG9yeSBkZWxldGlvbiBvciBwb2xpY3kgY2hhbmdlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljUG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY1Bvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEVDUiBQdWJsaWMgcmVwb3NpdG9yaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJvb3QgY2xpZW50IGFjY2VzcyB0byBhbiBBbWF6b24gRUZTIGZpbGUgc3lzdGVtICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgY2xpZW50IGFjY2VzcyB0byBhbiBBbWF6b24gRUZTIGZpbGUgc3lzdGVtICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1DbGllbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYW5kIHdyaXRlIGNsaWVudCBhY2Nlc3MgdG8gYW4gQW1hem9uIEVGUyBmaWxlIHN5c3RlbSAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudFJlYWRXcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudFJlYWRXcml0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFRlMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljRmlsZVN5c3RlbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRUZTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBFbGFzdGljIEZpbGUgU3lzdGVtIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBjdXN0b21lcnMgdG8gdXNlIEFXUyBTeXN0ZW1zIE1hbmFnZXIgdG8gYXV0b21hdGljYWxseSBtYW5hZ2UgQW1hem9uIEVGUyB1dGlsaXRpZXMgKGFtYXpvbi1lZnMtdXRpbHMpIHBhY2thZ2Ugb24gdGhlaXIgRUMyIGluc3RhbmNlcywgYW5kIHVzZSBDbG91ZFdhdGNoTG9nIHRvIGdldCBFRlMgZmlsZSBzeXN0ZW0gbW91bnQgc3VjY2Vzcy9mYWlsdXJlIG5vdGlmaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtc1V0aWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtc1V0aWxzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgRWRpdG9ycyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VFZGl0b3JzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlRWRpdG9yc1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgZm9yIEF1dG8gU2NhbGluZy4gUm9sZSB0byBhbGxvdyBBdXRvIFNjYWxpbmcgdG8gYWRkIGFuZCByZW1vdmUgaW5zdGFuY2VzIGZyb20geW91ciBFTVIgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZWZvckF1dG9TY2FsaW5nUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlZm9yQXV0b1NjYWxpbmdSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgZm9yIEVDMiBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2Vmb3JFQzJSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2Vmb3JFQzJSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgb24gYSBkZXByZWNhdGlvbiBwYXRoLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZ3VpZGFuY2U6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbXIvbGF0ZXN0L01hbmFnZW1lbnRHdWlkZS9lbXItbWFuYWdlZC1pYW0tcG9saWNpZXMuaHRtbC4gUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aWMgTWFwUmVkdWNlIGFuZCB1bmRlcmx5aW5nIHNlcnZpY2VzIHRoYXQgaXQgcmVxdWlyZXMgc3VjaCBhcyBFQzIgYW5kIFMzICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGFsbG93IEVNUiB0byBjcmVhdGUsIGRlc2NyaWJlIGFuZCBkZWxldGUgRUMyIHBsYWNlbWVudCBncm91cHMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VQbGFjZW1lbnRHcm91cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlUGxhY2VtZW50R3JvdXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBvbiBhIGRlcHJlY2F0aW9uIHBhdGguIFNlZSBkb2N1bWVudGF0aW9uIGZvciBndWlkYW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vtci9sYXRlc3QvTWFuYWdlbWVudEd1aWRlL2Vtci1tYW5hZ2VkLWlhbS1wb2xpY2llcy5odG1sLiAgRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2Ugc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljTWFwUmVkdWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEFtYXpvbiBFbGFzdGljc2VhcmNoIFNlcnZpY2UgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIEVDMiBOZXR3b3JraW5nIEFQSXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNzZWFyY2hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljc2VhcmNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgZnVsbCBhY2Nlc3MgdG8gRWxhc3RpYyBUcmFuc2NvZGVyIGFuZCB0aGUgYWNjZXNzIHRvIGFzc29jaWF0ZWQgc2VydmljZXMgdGhhdCBpcyByZXF1aXJlZCBmb3IgZnVsbCBFbGFzdGljIFRyYW5zY29kZXIgZnVuY3Rpb25hbGl0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY1RyYW5zY29kZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBwZXJtaXNzaW9uIHRvIGNoYW5nZSBwcmVzZXRzLCBzdWJtaXQgam9icywgYW5kIHZpZXcgRWxhc3RpYyBUcmFuc2NvZGVyIHNldHRpbmdzLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBzb21lIHJlYWQtb25seSBhY2Nlc3MgdG8gc29tZSBvdGhlciBzZXJ2aWNlcyByZXF1aXJlZCB0byB1c2UgdGhlIEVsYXN0aWMgVHJhbnNjb2RlIGNvbnNvbGUsIGluY2x1ZGluZyBTMywgSUFNLCBhbmQgU05TLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlckpvYnNTdWJtaXR0ZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJKb2JzU3VibWl0dGVyKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHJlYWQtb25seSBhY2Nlc3MgdG8gRWxhc3RpYyBUcmFuc2NvZGVyIGFuZCBsaXN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIFRyYW5zY29kZXIgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlclJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBhY3Rpb25zIHRoYXQgRU1SIHJlcXVpcmVzIHRvIHRlcm1pbmF0ZSBhbmQgZGVsZXRlIEFXUyBFQzIgcmVzb3VyY2VzIGlmIHRoZSBFTVIgU2VydmljZSByb2xlIGhhcyBsb3N0IHRoYXQgYWJpbGl0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SQ2xlYW51cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FTVJDbGVhbnVwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcnVuIEFtYXpvbiBFTVIgKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SQ29udGFpbmVyc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUkNvbnRhaW5lcnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFTVIgKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SRnVsbEFjY2Vzc1BvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUkZ1bGxBY2Nlc3NQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVNUiBhbmQgdGhlIGFzc29jaWF0ZWQgQ2xvdWRXYXRjaCBNZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJSZWFkT25seUFjY2Vzc1BvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUlJlYWRPbmx5QWNjZXNzUG9saWN5VjIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEVNUlNlcnZlcmxlc3MgKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUlNlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIHVzZWQgZm9yIHRoZSBBbWF6b24gRU1SIFNlcnZpY2UgUm9sZSBhbmQgc2hvdWxkIE5PVCBiZSB1c2VkIGZvciBhbnkgb3RoZXIgSUFNIHVzZXJzIG9yIHJvbGVzIGluIHlvdXIgYWNjb3VudC4gVGhlIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBFTVIgYW5kIHJlbGF0ZWQgc2VydmljZXMgbmVjZXNzYXJ5IGZvciB0aGUgb3BlcmF0aW9uIG9mIHlvdXIgRU1SIGNsdXN0ZXIuICovXG4gICAgcHVibGljIEFtYXpvbkVNUlNlcnZpY2VQb2xpY3lWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FTVJTZXJ2aWNlUG9saWN5VjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byB0aGUgQW1hem9uIENvZ25pdG8gY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FU0NvZ25pdG9BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRVNDb2duaXRvQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBFUyBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkVTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gRVMgY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FU1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRXZlbnRCcmlkZ2UgdG8gYWNjZXNzIFNlY3JldCBNYW5hZ2VyIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VBcGlEZXN0aW5hdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZUFwaURlc3RpbmF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFBpcGVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVBpcGVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVBpcGVzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhbmQgb3BlcmF0b3IgKGFiaWxpdHkgdG8gU3RvcCBhbmQgU3RhcnQgcnVubmluZyBQaXBlcykgYWNjZXNzIHRvIEFtYXpvbiBFdmVudEJyaWRnZSBQaXBlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VQaXBlc09wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlUGlwZXNPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFBpcGVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVBpcGVzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VQaXBlc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlckZ1bGxBY2Nlc3MgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHVzZSBhbGwgRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIGFjdGlvbnMgZm9yIHNjaGVkdWxlcywgYW5kIHNjaGVkdWxlIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlZHVsZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlU2NoZWR1bGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlclJlYWRPbmx5QWNjZXNzIG1hbmFnZWQgcG9saWN5IGdyYW50cyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdG8gdmlldyBkZXRhaWxzIGFib3V0IHlvdXIgc2NoZWR1bGVzIGFuZCBzY2hlZHVsZSBncm91cHMgKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlZHVsZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFNjaGVtYXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFNjaGVtYXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIE1hbmFnZWQgUnVsZXMgY3JlYXRlZCBieSBBbWF6b24gRXZlbnRCcmlkZ2Ugc2NoZW1hcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gRVZTIHRvIG1hbmFnZSByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uRVZTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRVZTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIEFXUyBGSVMgdG8gbWFuYWdlIG1vbml0b3JpbmcgYW5kIHJlc291cmNlIHNlbGVjdGlvbiBmb3IgZXhwZXJpbWVudHMuICovXG4gICAgcHVibGljIEFtYXpvbkZJU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZJU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR2l2ZXMgYWNjZXNzIHRvIGFsbCBhY3Rpb25zIGZvciBBbWF6b24gRm9yZWNhc3QgKi9cbiAgICBwdWJsaWMgQW1hem9uRm9yZWNhc3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZvcmVjYXN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIGFjY2VzcyB0byBhbGwgYWN0aW9ucyBmb3IgQW1hem9uIEZyYXVkIERldGVjdG9yICovXG4gICAgcHVibGljIEFtYXpvbkZyYXVkRGV0ZWN0b3JGdWxsQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZyYXVkRGV0ZWN0b3JGdWxsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBBY2Nlc3MgUG9saWN5IGZvciBBbWF6b24gRnJlZVJUT1MgKi9cbiAgICBwdWJsaWMgQW1hem9uRnJlZVJUT1NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZyZWVSVE9TRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VyIHRvIGFjY2VzcyBBbWF6b24gRnJlZVJUT1MgT1RBIFVwZGF0ZSAqL1xuICAgIHB1YmxpYyBBbWF6b25GcmVlUlRPU09UQVVwZGF0ZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GcmVlUlRPU09UQVVwZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBGU3ggYW5kIGFjY2VzcyB0byByZWxhdGVkIEFXUyBzZXJ2aWNlcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkZTeENvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZTeENvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRlN4IGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25GU3hDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4Q29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEZTeCBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25GU3hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZTeEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBGU3guICovXG4gICAgcHVibGljIEFtYXpvbkZTeFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZTeFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBGU3ggdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uRlN4U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gR2xhY2llciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkdsYWNpZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdsYWNpZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gR2xhY2llciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkdsYWNpZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HbGFjaWVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBBdGhlbmEgYW5kIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIGVuYWJsZSBxdWVyeWluZyBhbmQgd3JpdGluZyByZXN1bHRzIHRvIHMzIGZyb20gdGhlIEFtYXpvbiBBdGhlbmEgcGx1Z2luIGluIEFtYXpvbiBHcmFmYW5hLiAqL1xuICAgIHB1YmxpYyBBbWF6b25HcmFmYW5hQXRoZW5hQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdyYWZhbmFBdGhlbmFBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIGFuZCB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCB0byB1c2UgQ2xvdWRXYXRjaCBhcyBhIGRhdGFzb3VyY2Ugd2l0aGluIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFtYXpvbkdyYWZhbmFDbG91ZFdhdGNoQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdyYWZhbmFDbG91ZFdhdGNoQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHNjb3BlZCBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IGFuZCB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCB0byB1c2UgdGhlIEFtYXpvbiBSZWRzaGlmdCBwbHVnaW4gaW4gQW1hem9uIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFtYXpvbkdyYWZhbmFSZWRzaGlmdEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HcmFmYW5hUmVkc2hpZnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyBtYW5hZ2VkIG9yIHVzZWQgYnkgQW1hem9uIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFtYXpvbkdyYWZhbmFTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HcmFmYW5hU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB1c2UgQW1hem9uIEd1YXJkRHV0eSAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlGdWxsQWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3VhcmREdXR5RnVsbEFjY2Vzc1YyKTtcbiAgICB9XG5cbiAgICAvKiogR3VhcmREdXR5IG1hbHdhcmUgcHJvdGVjdGlvbiB1c2VzIHRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIChTTFIpIG5hbWVkIEFXU1NlcnZpY2VSb2xlRm9yQW1hem9uR3VhcmREdXR5TWFsd2FyZVByb3RlY3Rpb24uIFRoaXMgc2VydmljZS1saW5rZWQgcm9sZSBhbGxvd3MgR3VhcmREdXR5IG1hbHdhcmUgcHJvdGVjdGlvbiB0byBwZXJmb3JtIGFnZW50LWxlc3Mgc2NhbnMgdG8gZGV0ZWN0IG1hbHdhcmUuIEl0IGFsbG93cyBHdWFyZER1dHkgdG8gY3JlYXRlIHNuYXBzaG90cyBpbiB5b3VyIGFjY291bnQsIGFuZCBzaGFyZSB0aGUgc25hcHNob3RzIHdpdGggdGhlIEd1YXJkRHV0eSBzZXJ2aWNlIGFjY291bnQgdG8gc2NhbiBmb3IgbWFsd2FyZS4gSXQgZXZhbHVhdGVzIHRoZXNlIHNoYXJlZCBzbmFwc2hvdHMgYW5kIGluY2x1ZGVzIHRoZSByZXRyaWV2ZWQgRUMyIGluc3RhbmNlIG1ldGFkYXRhIGluIHRoZSBHdWFyZER1dHkgTWFsd2FyZSBQcm90ZWN0aW9uIGZpbmRpbmdzLiBUaGUgQVdTU2VydmljZVJvbGVGb3JBbWF6b25HdWFyZER1dHlNYWx3YXJlUHJvdGVjdGlvbiBzZXJ2aWNlLWxpbmtlZCByb2xlIHRydXN0cyB0aGUgbWFsd2FyZS1wcm90ZWN0aW9uLmd1YXJkZHV0eS5hbWF6b25hd3MuY29tIHNlcnZpY2UgdG8gYXNzdW1lIHRoZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlNYWx3YXJlUHJvdGVjdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkd1YXJkRHV0eU1hbHdhcmVQcm90ZWN0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBHdWFyZER1dHkgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvbkd1YXJkRHV0eVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkd1YXJkRHV0eVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gR3VhcmQgRHV0eSAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HdWFyZER1dHlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBIZWFsdGhMYWtlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkhlYWx0aExha2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhlYWx0aExha2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gSGVhbHRoTGFrZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25IZWFsdGhMYWtlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSGVhbHRoTGFrZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSG9uZXljb2RlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBIb25leWNvZGUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIEhvbmV5Y29kZSB0byBhY2Nlc3MgeW91ciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkhvbmV5Y29kZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSG9uZXljb2RlIFRlYW0gQXNzb2NpYXRpb24gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVUZWFtQXNzb2NpYXRpb25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVRlYW1Bc3NvY2lhdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEhvbmV5Y29kZSBUZWFtIEFzc29jaWF0aW9uIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlVGVhbUFzc29jaWF0aW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlVGVhbUFzc29jaWF0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBIb25leWNvZGUgV29ya2Jvb2sgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVXb3JrYm9va0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlV29ya2Jvb2tGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBIb25leWNvZGUgV29ya2Jvb2sgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVXb3JrYm9va1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVdvcmtib29rUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQW1hem9uIEluc3BlY3RvciBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIG5lZWRlZCB0byBwZXJmb3JtIGFnZW50LWxlc3Mgc2VjdXJpdHkgYXNzZXNzbWVudHMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMkFnZW50bGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJBZ2VudGxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBJbnNwZWN0b3IgYW5kIGFjY2VzcyB0byBvdGhlciByZWxhdGVkIHNlcnZpY2VzIHN1Y2ggYXMgb3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gSW5zcGVjdG9yIGFuZCBhY2Nlc3MgdG8gb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcyBzdWNoIGFzIG9yZ2FuaXphdGlvbnMgd2l0aCByZXN0cmljdGl2ZSBvcmdhbml6YXRpb25hbCBhY2Nlc3MuICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJGdWxsQWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMkZ1bGxBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgaXMgYSBtYW5hZ2VkIHBvbGljeSB0aGF0IGN1c3RvbWVyIHNob3VsZCBhdHRhY2ggdG8gdGhlaXIgcm9sZXMgdG8gY29tbXVuaWNhdGUgd2l0aCBpbnNwZWN0b3Igc2VydmljZSBmb3IgQ0lTIHNjYW5zICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJNYW5hZ2VkQ2lzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJNYW5hZ2VkQ2lzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIGNvbW11bmljYXRlIHdpdGggSW5zcGVjdG9yMiBUZWxlbWV0cnkgQ2hhbm5lbCAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyTWFuYWdlZFRlbGVtZXRyeVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyTWFuYWdlZFRlbGVtZXRyeVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBpbnNwZWN0b3IyIHNlcnZpY2UgYW5kIHJlbGV2YW50IHN1cHBvcnQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBbWF6b24gSW5zcGVjdG9yIGFjY2VzcyB0byBBV1MgU2VydmljZXMgbmVlZGVkIHRvIHBlcmZvcm0gc2VjdXJpdHkgYXNzZXNzbWVudHMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBJbnNwZWN0b3IuICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEluc3BlY3Rvci4gKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQW1hem9uIEluc3BlY3RvciBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIG5lZWRlZCB0byBwZXJmb3JtIHNlY3VyaXR5IGFzc2Vzc21lbnRzICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEtlbmRyYSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktlbmRyYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2VuZHJhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEtlbmRyYSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktlbmRyYVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktlbmRyYVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBmdWxsIGFjY2VzcyB0byBBbWF6b24gS2V5c3BhY2VzICovXG4gICAgcHVibGljIEFtYXpvbktleXNwYWNlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2V5c3BhY2VzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gS2V5c3BhY2VzICovXG4gICAgcHVibGljIEFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBLZXlzcGFjZXMgYW5kIHJlbGF0ZWQgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LZXlzcGFjZXNSZWFkT25seUFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gS2luZXNpcyBBbmFseXRpY3MgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzQW5hbHl0aWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzQW5hbHl0aWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEtpbmVzaXMgQW5hbHl0aWNzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc0FuYWx5dGljc1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNBbmFseXRpY3NSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBbWF6b24gS2luZXNpcyBGaXJlaG9zZSBEZWxpdmVyeSBTdHJlYW1zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzRmlyZWhvc2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNGaXJlaG9zZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBBbWF6b24gS2luZXNpcyBGaXJlaG9zZSBEZWxpdmVyeSBTdHJlYW1zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzRmlyZWhvc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzRmlyZWhvc2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBzdHJlYW1zIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBzdHJlYW1zIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBLaW5lc2lzIFZpZGVvIFN0cmVhbXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzVmlkZW9TdHJlYW1zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzVmlkZW9TdHJlYW1zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEtpbmVzaXMgVmlkZW8gU3RyZWFtcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzVmlkZW9TdHJlYW1zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyB0byBBV1MgTGF1bmNoIHdpemFyZCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxhdW5jaFdpemFyZEZ1bGxBY2Nlc3NWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MYXVuY2hXaXphcmRGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgY3VzdG9tZXJzIHRvIGNhbGwgTGV4IHJ1bnRpbWUgZnJvbSBjaGFubmVscyAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhDaGFubmVsc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhDaGFubmVsc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMZXggdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAgQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gY3JlYXRlIExleCBTZXJ2aWNlIExpbmtlZCBSb2xlcyBhbmQgZ3JhbnQgTGV4IHBlcm1pc3Npb25zIHRvIGludm9rZSBhIGxpbWl0ZWQgc2V0IG9mIExhbWJkYSBmdW5jdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkxleEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIExleC4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4UmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIExleCB0byByZXBsaWNhdGUgTGV4IHJlc291cmNlcyBhY3Jvc3MgcmVnaW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4UmVwbGljYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4UmVwbGljYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIExleCBjb252ZXJzYXRpb25hbCBBUElzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhSdW5Cb3RzT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhSdW5Cb3RzT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIExleCBWMiBib3RzIGFjY2VzcyB0byBjYWxsIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4VjJCb3RQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4VjJCb3RQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgRXF1aXBtZW50IG9wZXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dEVxdWlwbWVudEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dEVxdWlwbWVudEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBFcXVpcG1lbnRzICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRFcXVpcG1lbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0RXF1aXBtZW50UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBhY2Nlc3MgdG8gYWxsIGFjdGlvbnMgZm9yIEFtYXpvbiBMb29rb3V0IGZvciBNZXRyaWNzICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRNZXRyaWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0TWV0cmljc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBhY2Nlc3MgdG8gYWxsIHJlYWQtb25seSBhY3Rpb25zIGZvciBBbWF6b24gTG9va291dCBmb3IgTWV0cmljcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0TWV0cmljc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRNZXRyaWNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgVmlzaW9uIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIHNlcnZpY2UgYW5kIGNvbnNvbGUgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvbkNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgVmlzaW9uIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIHNlcnZpY2UgYW5kIGNvbnNvbGUgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRWaXNpb25Db25zb2xlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgVmlzaW9uIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dFZpc2lvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHBlcm1pc3Npb24gdG8gcmVxdWVzdCBBbWF6b24gTWFjaGluZSBMZWFybmluZyBiYXRjaCBwcmVkaWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nQmF0Y2hQcmVkaWN0aW9uc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdCYXRjaFByZWRpY3Rpb25zQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgY3JlYXRlIGFjY2VzcyBmb3Igbm9uLXByZWRpY3Rpb24gQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdDcmVhdGVPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2hpbmVMZWFybmluZ0NyZWF0ZU9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFjaGluZSBMZWFybmluZyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2hpbmVMZWFybmluZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhbmQgZGVsZXRlIHRoZSByZWFsLXRpbWUgZW5kcG9pbnQgZm9yIEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIG1vZGVscy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nTWFuYWdlUmVhbFRpbWVFbmRwb2ludE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nTWFuYWdlUmVhbFRpbWVFbmRwb2ludE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgcGVybWlzc2lvbiB0byByZXF1ZXN0IEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIHJlYWwtdGltZSBwcmVkaWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nUmVhbFRpbWVQcmVkaWN0aW9uT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFsVGltZVByZWRpY3Rpb25Pbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIE1hY2hpbmUgTGVhcm5pbmcgdG8gY29uZmlndXJlIGFuZCB1c2UgeW91ciBSZWRzaGlmdCBDbHVzdGVycyBhbmQgUzMgU3RhZ2luZyBMb2NhdGlvbnMgZm9yIFJlZHNoaWZ0IERhdGEgU291cmNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdSb2xlZm9yUmVkc2hpZnREYXRhU291cmNlVjMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nUm9sZWZvclJlZHNoaWZ0RGF0YVNvdXJjZVYzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE1hY2llLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNpZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIHRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIG9mIEFtYXpvbiBNYWNpZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaWVIYW5kc2hha2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2llSGFuZHNoYWtlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBBbWF6b24gTWFjaWUuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBNYWNpZSByZWFkLW9ubHkgYWNjZXNzIHRvIHJlc291cmNlIGRlcGVuZGVuY2llcyBpbiB5b3VyIGFjY291bnQgaW4gb3JkZXIgdG8gZW5hYmxlIGRhdGEgYW5hbHlzaXMuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgbGlua2VkIHJvbGUgZm9yIEFtYXpvbiBNYWNpZSAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNpZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2llU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpbkNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hbmFnZWRCbG9ja2NoYWluQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hbmFnZWRCbG9ja2NoYWluUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIE1hbmFnZWQgQmxvY2tjaGFpbiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hbmFnZWRCbG9ja2NoYWluU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEFwYWNoZSBDYXNzYW5kcmEgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBbWF6b25NQ1NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1DU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE1hbmFnZWQgQXBhY2hlIENhc3NhbmRyYSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbk1DU1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1DU1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFQSXMgaW4gQW1hem9uIE1lY2hhbmljYWwgVHVyay4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWVjaGFuaWNhbFR1cmtGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1lY2hhbmljYWxUdXJrRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWFkIG9ubHkgQVBJcyBpbiBBbWF6b24gTWVjaGFuaWNhbCBUdXJrLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZWNoYW5pY2FsVHVya1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1lY2hhbmljYWxUdXJrUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWVtb3J5REIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZW1vcnlEQkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVtb3J5REJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTWVtb3J5REIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZW1vcnlEQlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1lbW9yeURCUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCByZXBvcnRzIGluY2x1ZGluZyBmaW5hbmNpYWwgZGF0YSBmb3IgYWxsIGFwcGxpY2F0aW9uIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTW9iaWxlQW5hbHl0aWNzRmluYW5jaWFsUmVwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1vYmlsZUFuYWx5dGljc0ZpbmFuY2lhbFJlcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBhcHBsaWNhdGlvbiByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1vYmlsZUFuYWx5dGljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gbm9uIGZpbmFuY2lhbCByZXBvcnRzIGZvciBhbGwgYXBwbGljYXRpb24gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb2JpbGVBbmFseXRpY3NOb25GaW5hbmNpYWxSZXBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzTm9uRmluYW5jaWFsUmVwb3J0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgb25seSBhY2Nlc3MgdG8gcHV0IGV2ZW50IGRhdGEgZm9yIGFsbCBhcHBsaWNhdGlvbiByZXNvdXJjZXMuIChSZWNvbW1lbmRlZCBmb3IgU0RLIGludGVncmF0aW9uKSAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb2JpbGVBbmFseXRpY3NXcml0ZU9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzV3JpdGVPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gbWFuYWdlIEFtYXpvbiBNb25pdHJvbiAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb25pdHJvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9uaXRyb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uTVEgdmlhIG91ciBBUEkvU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NUUFwaUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFBcGlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b25NUSB2aWEgb3VyIEFQSS9TREsuICovXG4gICAgcHVibGljIEFtYXpvbk1RQXBpUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFBcGlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbk1RIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1RRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uTVEgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NUVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1RUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIEFtYXpvbiBNUSAqL1xuICAgIHB1YmxpYyBBbWF6b25NUVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1RU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWRvbmx5IGFjY2VzcyB0byBBbWF6b24gTVNLIENvbm5lY3QgKi9cbiAgICBwdWJsaWMgQW1hem9uTVNLQ29ubmVjdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1TS0Nvbm5lY3RSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE1TSyBhbmQgb3RoZXIgcmVxdWlyZWQgcGVybWlzc2lvbnMgZm9yIGl0cyBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1TS0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVNLRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNU0sgKi9cbiAgICBwdWJsaWMgQW1hem9uTVNLUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVNLUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIEFpcmZsb3cgU2VydmVybGVzcyBTZXJ2aWNlIHRvIG1hbmFnZSBuZXR3b3JraW5nIGZvciB5b3VyIHdvcmtmbG93cyBhbmQgYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25NV0FBU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1XQUFTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgU2VydmljZSBMaW5rZWQgUm9sZSB1c2VkIGJ5IEFtYXpvbiBNYW5hZ2VkIFdvcmtmbG93cyBmb3IgQXBhY2hlIEFpcmZsb3cuICovXG4gICAgcHVibGljIEFtYXpvbk1XQUFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NV0FBU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIHJlc291cmNlcyBuZWVkZWQgYnkgTmltYmxlIFN0dWRpbyBMYXVuY2ggUHJvZmlsZSB3b3JrZXJzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gRUMyIGluc3RhbmNlcyBjcmVhdGVkIGJ5IE5pbWJsZSBTdHVkaW8gQnVpbGRlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uTmltYmxlU3R1ZGlvTGF1bmNoUHJvZmlsZVdvcmtlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25OaW1ibGVTdHVkaW9MYXVuY2hQcm9maWxlV29ya2VyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byBBbWF6b24gTmltYmxlIFN0dWRpbyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHVkaW8gYWRtaW4gYW5kIHJlbGF0ZWQgc3R1ZGlvIHJlc291cmNlcyBpbiBvdGhlciBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSBBZG1pbiByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQW1hem9uTmltYmxlU3R1ZGlvU3R1ZGlvQWRtaW4oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTmltYmxlU3R1ZGlvU3R1ZGlvQWRtaW4pO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBOaW1ibGUgU3R1ZGlvIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN0dWRpbyB1c2VyIGFuZCByZWxhdGVkIHN0dWRpbyByZXNvdXJjZXMgaW4gb3RoZXIgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgVXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQW1hem9uTmltYmxlU3R1ZGlvU3R1ZGlvVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9Vc2VyKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIE9yYWNsZSBEYXRhYmFzZUBBV1MgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9EQlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9EQlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE9taWNzIGFuZCBvdGhlciByZXF1aXJlZCBBV1MgU2VydmljZXMuIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgdXNlciB0byB2aWV3IGFuZCBhY2NlcHQgUkFNIHNoYXJlIGludml0YXRpb25zIHRvIGFjY2VzcyByZXNvdXJjZXMgb3V0c2lkZSBvZiB0aGUgdXNlcidzIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25PbWljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT21pY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBPbWljcyAqL1xuICAgIHB1YmxpYyBBbWF6b25PbWljc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9taWNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBPbmUgRW50ZXJwcmlzZSByZXNvdXJjZXMgYW5kIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbk9uZUVudGVycHJpc2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9uZUVudGVycHJpc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGxpbWl0ZWQgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBkZXZpY2UgaW5zdGFsbGF0aW9uIGFuZCBhY3RpdmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PbmVFbnRlcnByaXNlSW5zdGFsbGVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9uZUVudGVycHJpc2VJbnN0YWxsZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZCBvbmx5IHBlcm1pc3Npb25zIHRvIGFsbCBBbWF6b24gT25lIEVudGVycHJpc2UgcmVzb3VyY2VzIGFuZCBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PbmVFbnRlcnByaXNlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT25lRW50ZXJwcmlzZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIERhc2hib2FyZHMgU2VydmljZSB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQ2xvdWRXYXRjaCBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoRGFzaGJvYXJkc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hEYXNoYm9hcmRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgT3BlblNlYXJjaCBEaXJlY3RRdWVyeSBTZXJ2aWNlIHRvIGFjY2VzcyBBV1MgR2x1ZSBBUElzIGZvciBjcmVhdGluZyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hEaXJlY3RRdWVyeUdsdWVDcmVhdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaERpcmVjdFF1ZXJ5R2x1ZUNyZWF0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gT3BlblNlYXJjaCBJbmdlc3Rpb24gdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gT3BlblNlYXJjaCBJbmdlc3Rpb24gU2VydmljZSAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBPcGVuU2VhcmNoIEluZ2VzdGlvbiBTZXJ2aWNlIHRvIGFjY2VzcyBvdGhlciBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBbWF6b24gT3BlblNlYXJjaCBTZXJ2ZXJsZXNzIHRvIGFjY2VzcyBvdGhlciBBV1Mgc2VydmljZXMgc3VjaCBhcyBDbG91ZFdhdGNoIEFQSXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaFNlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgQW1hem9uIENvZ25pdG8gY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoU2VydmljZUNvZ25pdG9BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaFNlcnZpY2VDb2duaXRvQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UgY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoU2VydmljZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaFNlcnZpY2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIE9wZW5TZWFyY2ggU2VydmljZSBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaFNlcnZpY2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIEVDMiBOZXR3b3JraW5nIEFQSXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUGVyc29uYWxpemUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgQ2xvdWRXYXRjaCkuICovXG4gICAgcHVibGljIEFtYXpvblBlcnNvbmFsaXplRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25QZXJzb25hbGl6ZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFBvbGx5IHNlcnZpY2UgYW5kIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUG9sbHlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblBvbGx5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBQb2xseSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvblBvbGx5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUG9sbHlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgTWFuYWdlZCBQcm9tZXRoZXVzIHJlc291cmNlcyBpbiB0aGUgQVdTIGNvbnNvbGUgKi9cbiAgICBwdWJsaWMgQW1hem9uUHJvbWV0aGV1c0NvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblByb21ldGhldXNDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgTWFuYWdlZCBQcm9tZXRoZXVzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Qcm9tZXRoZXVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qcm9tZXRoZXVzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2Nlc3MgdG8gcnVuIHF1ZXJpZXMgYWdhaW5zdCBBV1MgTWFuYWdlZCBQcm9tZXRoZXVzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Qcm9tZXRoZXVzUXVlcnlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUHJvbWV0aGV1c1F1ZXJ5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHdyaXRlIG9ubHkgYWNjZXNzIHRvIEFXUyBNYW5hZ2VkIFByb21ldGhldXMgd29ya3NwYWNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Qcm9tZXRoZXVzUmVtb3RlV3JpdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUHJvbWV0aGV1c1JlbW90ZVdyaXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IEFtYXpvbiBNYW5hZ2VkIFNlcnZpY2UgZm9yIFByb21ldGhldXMgQ29sbGVjdG9yICovXG4gICAgcHVibGljIEFtYXpvblByb21ldGhldXNTY3JhcGVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUHJvbWV0aGV1c1NjcmFwZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGRldmVsb3BlciBhY2Nlc3MgdG8gZW5hYmxlIGludGVyYWN0aW9ucyB3aXRoIEFtYXpvbiBRICovXG4gICAgcHVibGljIEFtYXpvblFEZXZlbG9wZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUURldmVsb3BlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGVuYWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBBbWF6b24gUSAqL1xuICAgIHB1YmxpYyBBbWF6b25RRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25RRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBRTERCIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUUxEQkNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblFMREJDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBRTERCIHZpYSB0aGUgc2VydmljZSBBUEkuICovXG4gICAgcHVibGljIEFtYXpvblFMREJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblFMREJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUUxEQi4gKi9cbiAgICBwdWJsaWMgQW1hem9uUUxEQlJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblFMREJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gUkRTIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNCZXRhU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTQmV0YVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBSRFMgQ3VzdG9tIHRvIHBlcmZvcm0gdmFyaW91cyBhdXRvbWF0aW9uIGFjdGlvbnMgYW5kIGRhdGFiYXNlIG1hbmFnZW1lbnQgdGFza3MgdGhyb3VnaCBhbiBFQzIgaW5zdGFuY2UgcHJvZmlsZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTQ3VzdG9tSW5zdGFuY2VQcm9maWxlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNDdXN0b21JbnN0YW5jZVByb2ZpbGVSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFJEUyBDdXN0b20gUHJldmlldyBTZXJ2aWNlIFJvbGUgUG9saWN5ICovXG4gICAgcHVibGljIEFtYXpvblJEU0N1c3RvbVByZXZpZXdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNDdXN0b21QcmV2aWV3U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFJEUyBDdXN0b20gdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvblJEU0N1c3RvbVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0N1c3RvbVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGZ1bGwgYWNjZXNzIHRvIHVzZSB0aGUgUkRTIGRhdGEgQVBJcywgc2VjcmV0IHN0b3JlIEFQSXMgZm9yIFJEUyBkYXRhYmFzZSBjcmVkZW50aWFscywgYW5kIERCIGNvbnNvbGUgcXVlcnkgbWFuYWdlbWVudCBBUElzIHRvIGV4ZWN1dGUgU1FMIHN0YXRlbWVudHMgb24gQXVyb3JhIFNlcnZlcmxlc3MgY2x1c3RlcnMgaW4gdGhlIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNEYXRhRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNEYXRhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFJEUyB0byBhY2Nlc3MgRGlyZWN0b3J5IFNlcnZpY2UgTWFuYWdlZCBBRCBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyIGZvciBkb21haW4tam9pbmVkIFNRTCBTZXJ2ZXIgREIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNEaXJlY3RvcnlTZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0RpcmVjdG9yeVNlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQ2xvdWR3YXRjaCBmb3IgUkRTIEVuaGFuY2VkIE1vbml0b3JpbmcgKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTRW5oYW5jZWRNb25pdG9yaW5nUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNFbmhhbmNlZE1vbml0b3JpbmdSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJEU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFJEUyBQZXJmb3JtYW5jZSBJbnNpZ2h0cyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTUGVyZm9ybWFuY2VJbnNpZ2h0c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTUGVyZm9ybWFuY2VJbnNpZ2h0c0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkLU9ubHkgcG9saWN5IGZvciBSRFMgUGVyZm9ybWFuY2UgSW5zaWdodHMgKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTUGVyZm9ybWFuY2VJbnNpZ2h0c1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU1BlcmZvcm1hbmNlSW5zaWdodHNSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBSRFMgUHJldmlldyBTZXJ2aWNlIFJvbGUgUG9saWN5ICovXG4gICAgcHVibGljIEFtYXpvblJEU1ByZXZpZXdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNQcmV2aWV3U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSRFMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gUkRTIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIHJ1biBTUUwgY29tbWFuZHMgdG8gY29weSwgbG9hZCwgdW5sb2FkLCBxdWVyeSwgYW5kIGFuYWx5emUgZGF0YSBvbiBBbWF6b24gUmVkc2hpZnQuIFRoZSBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgdG8gcnVuIHNlbGVjdCBzdGF0ZW1lbnRzIGZvciByZWxhdGVkIHNlcnZpY2VzLCBzdWNoIGFzIEFtYXpvbiBTMywgQW1hem9uIENsb3VkV2F0Y2ggbG9ncywgQW1hem9uIFNhZ2VNYWtlciwgb3IgQVdTIEdsdWUuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0QWxsQ29tbWFuZHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0QWxsQ29tbWFuZHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IERhdGEgQVBJcy4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgc2NvcGVkIGFjY2VzcyB0byBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnREYXRhRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdERhdGFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBpcyBhbiBlYXNlLW9mLXVzZSBwb2xpY3kgZm9yIHJ1bm5pbmcgcXVlcmllcyB3aXRoIEFtYXpvbiBSZWRzaGlmdCBGZWRlcmF0ZWQgQXV0aG9yaXphdGlvbiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdEZlZGVyYXRlZEF1dGhvcml6YXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRGZWRlcmF0ZWRBdXRob3JpemF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBbWF6b24gUmVkc2hpZnQgUXVlcnkgRWRpdG9yIGFuZCB0byBzYXZlZCBxdWVyaWVzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBbWF6b24gUmVkc2hpZnQgUXVlcnkgRWRpdG9yIFYyIG9wZXJhdGlvbnMgYW5kIHJlc291cmNlcy4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgdGhlIEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVycywgcmVhZCBrZXlzIGFuZCBhbGlhc2VzIGluIEFXUyBLTVMgYW5kIG1hbmFnZSB0aGUgUXVlcnkgRWRpdG9yIFYyIHNlY3JldHMgaW4gQVdTIFNlY3JldHMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSBhYmlsaXR5IHRvIHdvcmsgd2l0aCBBbWF6b24gUmVkc2hpZnQgUXVlcnkgRWRpdG9yIFYyIHdpdGhvdXQgc2hhcmluZyByZXNvdXJjZXMuIFRoZSBncmFudGVkIHByaW5jaXBhbCBjYW4gb25seSByZWFkLCB1cGRhdGUgYW5kIGRlbGV0ZSBpdHMgb3duIHJlc291cmNlcyBidXQgY2Fubm90IHNoYXJlIHRoZW0uIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0IHRoZSBBbWF6b24gUmVkc2hpZnQgY2x1c3RlcnMgYW5kIG1hbmFnZSB0aGUgUXVlcnkgRWRpdG9yIFYyIHNlY3JldHMgb2YgdGhlIHByaW5jaXBhbCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJOb1NoYXJpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyTm9TaGFyaW5nKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSBhYmlsaXR5IHRvIHdvcmsgd2l0aCBBbWF6b24gUmVkc2hpZnQgUXVlcnkgRWRpdG9yIFYyIHdpdGggbGltaXRlZCBzaGFyaW5nIG9mIHJlc291cmNlcy4gVGhlIGdyYW50ZWQgcHJpbmNpcGFsIGNhbiByZWFkLCB3cml0ZSBhbmQgc2hhcmUgaXRzIG93biByZXNvdXJjZXMuIFRoZSBncmFudGVkIHByaW5jaXBhbCBjYW4gcmVhZCB0aGUgcmVzb3VyY2VzIHNoYXJlZCB3aXRoIGl0cyB0ZWFtIGJ1dCBjYW5ub3QgdXBkYXRlIHRoZW0uIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0IHRoZSBBbWF6b24gUmVkc2hpZnQgY2x1c3RlcnMgYW5kIG1hbmFnZSB0aGUgUXVlcnkgRWRpdG9yIFYyIHNlY3JldHMgb2YgdGhlIHByaW5jaXBhbCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJSZWFkU2hhcmluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJSZWFkU2hhcmluZyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0aGUgYWJpbGl0eSB0byB3b3JrIHdpdGggQW1hem9uIFJlZHNoaWZ0IFF1ZXJ5IEVkaXRvciBWMiB3aXRoIHNoYXJpbmcgb2YgcmVzb3VyY2VzLiBUaGUgZ3JhbnRlZCBwcmluY2lwYWwgY2FuIHJlYWQsIHdyaXRlIGFuZCBzaGFyZSBpdHMgb3duIHJlc291cmNlcy4gVGhlIGdyYW50ZWQgcHJpbmNpcGFsIGNhbiByZWFkIGFuZCB1cGRhdGUgdGhlIHJlc291cmNlcyBzaGFyZWQgd2l0aCBpdHMgdGVhbS4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgdGhlIEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVycyBhbmQgbWFuYWdlIHRoZSBRdWVyeSBFZGl0b3IgVjIgc2VjcmV0cyBvZiB0aGUgcHJpbmNpcGFsIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMlJlYWRXcml0ZVNoYXJpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyUmVhZFdyaXRlU2hhcmluZyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBSZWRzaGlmdCB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0U2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBzcGVjaWZpZXMgcmVrb2duaXRpb24gYW5kIHMzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IEFtYXpvbiBSZWtvZ25pdGlvbiBDdXN0b20gTGFiZWxzIGZlYXR1cmUuICovXG4gICAgcHVibGljIEFtYXpvblJla29nbml0aW9uQ3VzdG9tTGFiZWxzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWtvZ25pdGlvbkN1c3RvbUxhYmVsc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc3MgdG8gYWxsIEFtYXpvbiBSZWtvZ25pdGlvbiBBUElzICovXG4gICAgcHVibGljIEFtYXpvblJla29nbml0aW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWtvZ25pdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc3MgdG8gYWxsIFJlYWQgcmVrb2duaXRpb24gQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWtvZ25pdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJla29nbml0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgUmVrb2duaXRpb24gdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvblJla29nbml0aW9uU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVrb2duaXRpb25TZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBSb3V0ZSA1MyBBdXRvIE5hbWluZyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzQXV0b05hbWluZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0F1dG9OYW1pbmdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBhbGwgUm91dGUgNTMgQXV0byBOYW1pbmcgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0F1dG9OYW1pbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzQXV0b05hbWluZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVnaXN0cmFudCBsZXZlbCBhY2Nlc3MgdG8gUm91dGUgNTMgQXV0byBOYW1pbmcgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0F1dG9OYW1pbmdSZWdpc3RyYW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNBdXRvTmFtaW5nUmVnaXN0cmFudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBSb3V0ZTUzIERvbWFpbnMgYWN0aW9ucyBhbmQgQ3JlYXRlIEhvc3RlZCBab25lIHRvIGFsbG93IEhvc3RlZCBab25lIGNyZWF0aW9uIGFzIHBhcnQgb2YgZG9tYWluIHJlZ2lzdHJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNEb21haW5zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzRG9tYWluc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gUm91dGU1MyBEb21haW5zIGxpc3QgYW5kIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNEb21haW5zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0RvbWFpbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBbWF6b24gUm91dGUgNTMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHJldHJpZXZlLCBsaXN0LCBjcmVhdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSBhbGwgQW1hem9uIFJvdXRlIDUzIEdsb2JhbCBSZXNvbHZlciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNHbG9iYWxSZXNvbHZlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0dsb2JhbFJlc29sdmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gcmV0cmlldmUgYW5kIGxpc3QgYWxsIEFtYXpvbiBSb3V0ZSA1MyBHbG9iYWwgUmVzb2x2ZXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzR2xvYmFsUmVzb2x2ZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzR2xvYmFsUmVzb2x2ZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUHJvZmlsZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNQcm9maWxlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1Byb2ZpbGVzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBQcm9maWxlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1Byb2ZpbGVzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1Byb2ZpbGVzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBBbWF6b24gUm91dGUgNTMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IENsdXN0ZXIgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5Q2x1c3RlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5Q2x1c3RlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBDbHVzdGVyICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeUNsdXN0ZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDbHVzdGVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgQ29udHJvbCBDb25maWcgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5Q29udHJvbENvbmZpZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5Q29udHJvbENvbmZpZ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBDb250cm9sIENvbmZpZyAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDb250cm9sQ29uZmlnUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5Q29udHJvbENvbmZpZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IFJlYWRpbmVzcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBSZWFkaW5lc3MgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyBwb2xpY3kgZm9yIFJvdXRlIDUzIFJlc29sdmVyICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZXNvbHZlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1Jlc29sdmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQgb25seSBwb2xpY3kgZm9yIFJvdXRlIDUzIFJlc29sdmVyICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZXNvbHZlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZXNvbHZlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIFMzIGRpcmVjdG9yeSBidWNrZXRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0V4cHJlc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRXhwcmVzc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIFMzRXhwcmVzcyBvcGVyYXRpb25zIGZvciBTMyBkaXJlY3RvcnkgYnVja2V0cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNFeHByZXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNFeHByZXNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByb290IGNsaWVudCBhY2Nlc3MgdG8gYW4gUzMgRmlsZXMgZmlsZSBzeXN0ZW0uICovXG4gICAgcHVibGljIEFtYXpvblMzRmlsZXNDbGllbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRmlsZXNDbGllbnRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGNsaWVudCBhY2Nlc3MgdG8gYW4gUzMgRmlsZXMgZmlsZSBzeXN0ZW0uICovXG4gICAgcHVibGljIEFtYXpvblMzRmlsZXNDbGllbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0ZpbGVzQ2xpZW50UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIGFuZCB3cml0ZSBjbGllbnQgYWNjZXNzIHRvIGFuIFMzIEZpbGVzIGZpbGUgc3lzdGVtLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0ZpbGVzQ2xpZW50UmVhZFdyaXRlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRmlsZXNDbGllbnRSZWFkV3JpdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBtYW5hZ2VtZW50IGFjY2VzcyB0byBBbWF6b24gUzMgRmlsZXMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvblMzRmlsZXNDU0lEcml2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNGaWxlc0NTSURyaXZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBTMyBGaWxlcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblMzRmlsZXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRmlsZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgUzMgRmlsZXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0ZpbGVzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNGaWxlc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGJ1Y2tldHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIExhbWJkYSBmdW5jdGlvbnMgcGVybWlzc2lvbnMgdG8gaW50ZXJhY3Qgd2l0aCBBbWF6b24gUzMgT2JqZWN0IExhbWJkYS4gQWxzbyBncmFudHMgTGFtYmRhIHBlcm1pc3Npb25zIHRvIHdyaXRlIHRvIENsb3VkV2F0Y2ggTG9ncy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNPYmplY3RMYW1iZGFFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzT2JqZWN0TGFtYmRhRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTMyBvbiBPdXRwb3N0cyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblMzT3V0cG9zdHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzT3V0cG9zdHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUzMgb24gT3V0cG9zdHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM091dHBvc3RzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNPdXRwb3N0c1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgYnVja2V0cyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblMzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBTMyB0YWJsZSBidWNrZXRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM1RhYmxlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNUYWJsZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBncmFudHMgQVdTIExha2UgRm9ybWF0aW9uIHBlcm1pc3Npb25zIHRvIGFjdCBvbiBhbGwgdGFibGUgYnVja2V0cywgbmFtZXNwYWNlcywgYW5kIHRhYmxlcyB3aXRoaW4gdGhlIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvblMzVGFibGVzTGFrZUZvcm1hdGlvblNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzVGFibGVzTGFrZUZvcm1hdGlvblNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgUzMgdGFibGUgYnVja2V0cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNUYWJsZXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM1RhYmxlc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgU2VydmljZSBDYXRhbG9nIHNlcnZpY2UgdG8gcHJvdmlzaW9uIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCwgQ29kZUNvbW1pdCwgR2x1ZSwgQ2xvdWRGb3JtYXRpb24sIGV0YywuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckFkbWluU2VydmljZUNhdGFsb2dQcm9kdWN0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckFkbWluU2VydmljZUNhdGFsb2dQcm9kdWN0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIHRvIHVzZSBBSSBzZXJ2aWNlcyB0byBzdXBwb3J0IHJlYWR5IHRvIHVzZSBBSSBzb2x1dGlvbnMuIFRoaXMgcG9saWN5IHdpbGwgYWRkIG1vcmUgbXV0YXRpbmcgcGVybWlzc2lvbnMgZm9yIHNlcnZpY2VzIGFzIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIGFkZHMgc3VwcG9ydC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzQUlTZXJ2aWNlc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNBSVNlcnZpY2VzQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHVzZSBBbWF6b24gQmVkcm9jayBpbiBTYWdlTWFrZXIgQ2FudmFzIGJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gZG93bnN0cmVhbSBzZXJ2aWNlcyBzdWNoIGFzIFMzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNCZWRyb2NrQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0JlZHJvY2tBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIHJlc291cmNlcyBhbmQgb3BlcmF0aW9ucyBmb3IgZGF0YSBwcmVwYXJhdGlvbiBpbiBDYW52YXMuIFRoZSBwb2xpY3kgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBJQU0sIEtNUywgUkRTLCBDbG91ZFdhdGNoIExvZ3MsIFJlZHNoaWZ0LCBBdGhlbmEsIEdsdWUsIEV2ZW50QnJpZGdlLCBTZWNyZXRzIE1hbmFnZXIpLiBUaGlzIHBvbGljeSBzaG91bGQgYmUgYXR0YWNoZWQgdG8gdGhlIEFtYXpvbiBTYWdlTWFrZXIgRG9tYWluL1VzZXIgUHJvZmlsZSBleGVjdXRpb24gcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzRGF0YVByZXBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0RhdGFQcmVwRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyB0byBjcmVhdGUsIG1hbmFnZSBhbmQgdmlldyBlbmRwb2ludCBkZXRhaWxzIGZvciBlbmRwb2ludHMgY3JlYXRlZCB0aHJvdWdoIENhbnZhcy4gQWxsb3dzIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIHRvIHJldHJpZXZlIGVuZHBvaW50IGludm9jYXRpb24gbWV0cmljcyBmcm9tIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0RpcmVjdERlcGxveUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNEaXJlY3REZXBsb3lBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gQW1hem9uIEVNUiBTZXJ2ZXJsZXNzIGZvciBzZXJ2aWNlcyBzdWNoIGFzIFMzLCB1c2VkIGJ5IEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIGZvciBsYXJnZSBkYXRhIHByb2Nlc3NpbmcuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0VNUlNlcnZlcmxlc3NFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0VNUlNlcnZlcmxlc3NFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIGNvbW1vbmx5IG5lZWRlZCB0byB1c2UgU2FnZU1ha2VyIENhbnZhcyB3aXRoIEFtYXpvbiBGb3JlY2FzdC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzRm9yZWNhc3RBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzRm9yZWNhc3RBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyByZXNvdXJjZXMgYW5kIG9wZXJhdGlvbnMuIFRoZSBwb2xpY3kgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBJQU0sIFZQQywgRUNSLCBDbG91ZFdhdGNoIExvZ3MsIFJlZHNoaWZ0LCBTZWNyZXRzIE1hbmFnZXIsIGFuZCBGb3JlY2FzdCkuIFRoaXMgcG9saWN5IHNob3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgQW1hem9uIFNhZ2VNYWtlciBEb21haW4vVXNlciBQcm9maWxlIGV4ZWN1dGlvbiByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgdG8gdXNlIHRoZSBTYWdlTWFrZXIgRGF0YSBTY2llbmNlIEFzc2lzdGFudCBzZXJ2aWNlLiBUaGUgRGF0YSBTY2llbmNlIEFzc2lzdGFudCBjdXJyZW50bHkgdXNlcyBib3RoIEFtYXpvbiBTYWdlTWFrZXIgYW5kIEFtYXpvbiBRIERldmVsb3BlciB0byBwcm9jZXNzIHVzZXIgcHJvbXB0cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzU01EYXRhU2NpZW5jZUFzc2lzdGFudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNTTURhdGFTY2llbmNlQXNzaXN0YW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBTYWdlTWFrZXIgQ2FwYWNpdHkgUmVzZXJ2YXRpb25zIHRvIHB1Ymxpc2ggQ2xvdWRXYXRjaCBtZXRyaWNzIGludG8gY3VzdG9tZXIgYWNjb3VudHMgZm9yIHV0aWxpemF0aW9uIHZpc2liaWxpdHkuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhcGFjaXR5UmVzZXJ2YXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYXBhY2l0eVJlc2VydmF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgY29tbW9ubHkgbmVlZGVkIHRvIHVzZSBBbWF6b24gU2FnZU1ha2VyIENsdXN0ZXIuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNsdXN0ZXJJbnN0YW5jZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2x1c3Rlckluc3RhbmNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBbWF6b24gU2FnZU1ha2VyIENvcmUgU2VydmljZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ29yZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNvcmVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgU2FnZU1ha2VyIEVkZ2UgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYSBkZXZpY2UgZmxlZXQgZm9yIHRoZSBjdXN0b21lciB1c2luZyB0aGUgZGVmYXVsdCBjbG91ZCBjb25uZWN0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJFZGdlRGV2aWNlRmxlZXRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyRWRnZURldmljZUZsZWV0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZSBvZmZsaW5lIHN0b3JlIGZvciBhbiBBbWF6b24gU2FnZU1ha2VyIEZlYXR1cmVTdG9yZSBmZWF0dXJlIGdyb3VwLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJGZWF0dXJlU3RvcmVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyRmVhdHVyZVN0b3JlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBFQ1IsIENsb3VkV2F0Y2ggTG9ncykuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGUgYWNjZXNzIHRvIHNlcnZpY2VzIHRoYXQgYXJlIGNvbW1vbmx5IG5lZWRlZCB0byB1c2UgU2FnZU1ha2VyIGdlb3NwYXRpYWwuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciBHZW9zcGF0aWFsIHRocm91Z2ggdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyR2Vvc3BhdGlhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyR2Vvc3BhdGlhbEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBTYWdlTWFrZXIgR3JvdW5kVHJ1dGggTGFiZWxpbmcgam9iICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckdyb3VuZFRydXRoRXhlY3V0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckdyb3VuZFRydXRoRXhlY3V0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBBbWF6b24gTWFuYWdlZCBQb2xpY3kgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3IgU2FnZU1ha2VyIEh5cGVyUG9kIHRvIGFjY2VzcyBnYXRlZCBtb2RlbHMgaW4gU2FnZU1ha2VyIEp1bXBzdGFydC4gSXQgYWxsb3dzIGNyZWF0aW5nIHByZXNpZ25lZCBVUkxzIGZvciBodWIgY29udGVudCBpbiB0aGUgU2FnZU1ha2VyIFB1YmxpYyBIdWIuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kR2F0ZWRNb2RlbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJIeXBlclBvZEdhdGVkTW9kZWxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzIHJlcXVpcmVkIGZvciBzZXR0aW5nIHVwIHRoZSBTYWdlTWFrZXIgSHlwZXJQb2QgaW5mZXJlbmNlIG9wZXJhdG9yLiBJdCBlbmFibGVzIHRoZSBpbmZlcmVuY2Ugb3BlcmF0b3IgdG8gYWNjZXNzIEFXUyBuZXR3b3JraW5nIHJlc291cmNlcywgQW1hem9uIFMzLCBBbWF6b24gRUNSLCBBbWF6b24gQ2xvdWRXYXRjaCwgQVdTIENlcnRpZmljYXRlIE1hbmFnZXIsIGFuZCBTYWdlTWFrZXIgcmVzb3VyY2VzIG5lY2Vzc2FyeSB0byBkZXBsb3kgYW5kIG1hbmFnZSBpbmZlcmVuY2Ugd29ya2xvYWRzIG9uIEh5cGVyUG9kIGNsdXN0ZXJzICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kSW5mZXJlbmNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckh5cGVyUG9kSW5mZXJlbmNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlcyByZXF1aXJlZCBmb3Igc2V0dGluZyB1cCBTYWdlTWFrZXIgSHlwZXJQb2Qgb2JzZXJ2YWJpbGl0eS4gSXQgZW5hYmxlcyBhY2Nlc3MgdG8gQW1hem9uIE1hbmFnZWQgUHJvbWV0aGV1cywgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBhbmQgRUtTIEFkZG9ucy4gVGhlIHBvbGljeSBhbHNvIGluY2x1ZGVzIGJyb2FkIGFjY2VzcyB0byBHcmFmYW5hIEhUVFAgQVBJcyB0aHJvdWdoIFNlcnZpY2VBY2NvdW50VG9rZW5zIGFjcm9zcyBhbGwgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB3b3Jrc3BhY2VzIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VySHlwZXJQb2RPYnNlcnZhYmlsaXR5QWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySHlwZXJQb2RPYnNlcnZhYmlsaXR5QWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gQW1hem9uIFNhZ2VNYWtlciBIeXBlclBvZCB0byByZWxhdGVkIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIEFtYXpvbiBFS1MsIEFtYXpvbiBDbG91ZFdhdGNoIGV0Yy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VySHlwZXJQb2RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJIeXBlclBvZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gc2V0IHVwIHRoZSBTYWdlTWFrZXIgSHlwZXJQb2QgdHJhaW5pbmcgb3BlcmF0b3IuIEl0IGVuYWJsZXMgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgSHlwZXJQb2QgYW5kIEVLUyBhZGQtb25zLiBUaGUgcG9saWN5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIHRoZSBTYWdlTWFrZXIgSHlwZXJQb2QgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VySHlwZXJQb2RUcmFpbmluZ09wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckh5cGVyUG9kVHJhaW5pbmdPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgQW1hem9uIEF1Z21lbnRlZCBBSSBGbG93RGVmaW5pdGlvbiByZXNvdXJjZXMgYWdhaW5zdCBhbnkgV29ya3RlYW0uICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlck1lY2hhbmljYWxUdXJrQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlck1lY2hhbmljYWxUdXJrQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBBV1MgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIG5lZWRlZCB0byB1c2UgYWxsIEFtYXpvbiBTYWdlTWFrZXIgR292ZXJuYW5jZSBmZWF0dXJlcy4gVGhlIHBvbGljeSBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIEtNUykuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlck1vZGVsR292ZXJuYW5jZVVzZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbEdvdmVybmFuY2VVc2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGlzIGEgbmV3IG1hbmFnZWQgcG9saWN5IGZvciBNb2RlbCBSZWdpc3RyeSBpbiBTYWdlbWFrZXIuIFRoaXMgcG9saWN5IGlzIGEgc3RhbmRhbG9uZSBwb2xpY3kgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIHVzZXIgcm9sZSB0byBhY2Nlc3MgTW9kZWwgUmVnaXN0cnkgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMgaW4gU2FnZW1ha2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJNb2RlbFJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbFJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBbWF6b24gU2FnZU1ha2VyIE5vdGVib29rcyAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJOb3RlYm9va3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJOb3RlYm9va3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgQW1hem9uIFNhZ2VNYWtlciBwYXJ0bmVyIGFwcCB1c2VycyB0byBhY2Nlc3MgYXBwbGljYXRpb25zLCBsaXN0IGF2YWlsYWJsZSBhcHBsaWNhdGlvbnMsIGxhdW5jaCBhcHBsaWNhdGlvbiB3ZWIgVUlzLCBhbmQgY29ubmVjdCB2aWEgdGhlIGFwcGxpY2F0aW9uIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGFydG5lckFwcHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBhcnRuZXJBcHBzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEFQSUdhdGV3YXkgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIExhbWJkYSBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0FwaUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0FwaUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBMYW1iZGEsIEFQSUdhdGV3YXkgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZEZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ2xvdWRGb3JtYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIExhbWJkYSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgU2VjcmV0cyBNYW5hZ2VyIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgQW1hem9uIE1hbmFnZWQgUG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBjb21tb25seSBuZWVkZWQgZm9yIHVzZSB3aXRoIENhbGxiYWNrIHN0ZXBzIGFuZCBMYW1iZGEgc3RlcHMgaW4gU2FnZU1ha2VyIE1vZGVsIEJ1aWxkaW5nIFBpcGVsaW5lcy4gSXQgaXMgYWRkZWQgdG8gdGhlIEFtYXpvblNhZ2VNYWtlci1FeGVjdXRpb25Sb2xlIHRoYXQgY2FuIGJlIGNyZWF0ZWQgd2hlbiBzZXR0aW5nIHVwIFNhZ2VNYWtlciBTdHVkaW8uIEl0IGNhbiBhbHNvIGJlIGF0dGFjaGVkIHRvIGFueSBvdGhlciByb2xlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhdXRob3Jpbmcgb3IgZXhlY3V0aW5nIHBpcGVsaW5lcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGlwZWxpbmVzSW50ZWdyYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBpcGVsaW5lc0ludGVncmF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHdpbGwgYmUgdXNlZCBCeSBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW9zIHRvIGNyZWF0ZSBWUEMgcmVsYXRlZCByZXNvdXJjZXMgZm9yIFF1aWNrU2lnaHQgKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUXVpY2tTaWdodFZQQ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJRdWlja1NpZ2h0VlBDUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEFQSUdhdGV3YXkgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENsb3VkV2F0Y2ggTG9ncyBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQXBpR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNBcGlHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgcG9saWN5IHVzZWQgYnkgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzdWJzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgU2FnZU1ha2VyIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZGZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZGZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ29kZUJ1aWxkIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ29kZUJ1aWxkU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVCdWlsZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ29kZVBpcGVsaW5lIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ29kZVBpcGVsaW5lU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVQaXBlbGluZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ2xvdWRXYXRjaCBFdmVudHMgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc3Vic2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENvZGVQaXBlbGluZSBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0V2ZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgRmlyZWhvc2Ugd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIEZpcmVob3NlIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNGaXJlaG9zZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNGaXJlaG9zZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgR2x1ZSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgR2x1ZSwgUzMgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0dsdWVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzR2x1ZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgTGFtYmRhIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBFQ1IsIFMzIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgU3lzdGVtcyBNYW5hZ2VyIGFjdGl2YXRpb24sIHNlc3Npb24gbWFuYWdlbWVudCwgYW5kIEtNUyBrZXkgb3BlcmF0aW9ucyBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgdGhlIFNhZ2VNYWtlciBTcGFjZXMgQWRkb24gdG8gZW5hYmxlIHNlY3VyZSByZW1vdGUgYWNjZXNzIHRvIEVLUyBTYWdlTWFrZXIgU3BhY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTcGFjZXNDb250cm9sbGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNwYWNlc0NvbnRyb2xsZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgU3lzdGVtcyBLTVMga2V5IG9wZXJhdGlvbnMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIHRoZSBTYWdlTWFrZXIgU3BhY2VzIFJvdXRlciB0byBlbmFibGUgc2VjdXJlIHJlbW90ZSBhY2Nlc3MgdG8gRUtTIFNhZ2VNYWtlciBTcGFjZXMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNwYWNlc1JvdXRlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTcGFjZXNSb3V0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIEFtYXpvbiBNYW5hZ2VkIFBvbGljeSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIFNhZ2VNYWtlciBUcmFpbmluZyBQbGFucy4gSXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBUcmFpbmluZyBQbGFucyBhbmQgUmVzZXJ2ZWQgQ2FwYWNpdGllcywgZGVzY3JpYmUgZXhpc3RpbmcgVHJhaW5pbmcgUGxhbnMsIGFuZCBwZXJmb3JtIHNlYXJjaCBhbmQgbGlzdGluZyBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJUcmFpbmluZ1BsYW5DcmVhdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyVHJhaW5pbmdQbGFuQ3JlYXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNlY3VyaXR5IExha2UgYW5kIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIGFkbWluaXN0ZXIgU2VjdXJpdHkgTGFrZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2VjdXJpdHlMYWtlQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TZWN1cml0eUxha2VBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBbWF6b24gU2VjdXJpdHlMYWtlIG1ldGEgc3RvcmUgbWFuYWdlciBsYW1iZGEgd2hpY2ggYWxsb3dzIHRoZSBhY2Nlc3MgdG8gY2xvdWR3YXRjaCwgUzMsIEdsdWUgYW5kIFNRUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2VjdXJpdHlMYWtlTWV0YXN0b3JlTWFuYWdlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TZWN1cml0eUxha2VNZXRhc3RvcmVNYW5hZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNlY3VyaXR5IExha2UgY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHRoaXJkLXBhcnR5IGN1c3RvbSBzb3VyY2VzIHRvIHdyaXRlIGRhdGEgdG8gYSBkYXRhIGxha2UgYW5kIGZvciB0aGlyZC1wYXJ0eSBzdWJzY3JpYmVycyB0byBjb25zdW1lIGRhdGEgZnJvbSBhIGRhdGEgbGFrZSwgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TZWN1cml0eUxha2VQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNlY3VyaXR5TGFrZVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU0VTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TRVNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU0VTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU0VTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgU0VTIHRvIHB1Ymxpc2ggQW1hem9uIENsb3VkV2F0Y2ggYmFzaWMgbW9uaXRvcmluZyBtZXRyaWNzIG9uIGJlaGFsZiBvZiB5b3VyIFNFUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU0VTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU05TIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU05TRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TTlNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU05TIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU05TUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU05TUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQW1hem9uIFNOUyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNOU1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU05TUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTUVMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TUVNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNRU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBTUVMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TUVNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TUVNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB2aWV3IGF1dG9tYXRpb24gZXhlY3V0aW9ucyBhbmQgc2VuZCBhcHByb3ZhbCBkZWNpc2lvbnMgdG8gYXV0b21hdGlvbiB3YWl0aW5nIGZvciBhcHByb3ZhbCAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01BdXRvbWF0aW9uQXBwcm92ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNQXV0b21hdGlvbkFwcHJvdmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEVDMiBBdXRvbWF0aW9uIHNlcnZpY2UgdG8gZXhlY3V0ZSBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gZG9jdW1lbnRzICovXG4gICAgcHVibGljIEFtYXpvblNTTUF1dG9tYXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTUF1dG9tYXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIFNTTSBBZ2VudCB0byBhY2Nlc3MgRGlyZWN0b3J5IFNlcnZpY2Ugb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lciBmb3IgZG9tYWluLWpvaW4gdGhlIG1hbmFnZWQgaW5zdGFuY2UuICovXG4gICAgcHVibGljIEFtYXpvblNTTURpcmVjdG9yeVNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNRGlyZWN0b3J5U2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTU00uICovXG4gICAgcHVibGljIEFtYXpvblNTTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqICBTZXJ2aWNlIFJvbGUgdG8gYmUgdXNlZCBmb3IgRUMyIE1haW50ZW5hbmNlIFdpbmRvdyAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01NYWludGVuYW5jZVdpbmRvd1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNTWFpbnRlbmFuY2VXaW5kb3dSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZW5hYmxlcyBBV1MgU3lzdGVtcyBNYW5hZ2VyIGZ1bmN0aW9uYWxpdHkgb24gRUMyIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNTWFuYWdlZEVDMkluc3RhbmNlRGVmYXVsdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01NYW5hZ2VkRUMySW5zdGFuY2VEZWZhdWx0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBmb3IgQW1hem9uIEVDMiBSb2xlIHRvIGVuYWJsZSBBV1MgU3lzdGVtcyBNYW5hZ2VyIHNlcnZpY2UgY29yZSBmdW5jdGlvbmFsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGFjY2VzcyB0byBjaGlsZCBpbnN0YW5jZXMgZm9yIHBhdGNoIGFzc29jaWF0aW9uIG9wZXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNUGF0Y2hBc3NvY2lhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01QYXRjaEFzc29jaWF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU1NNLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBbWF6b24gU1NNICovXG4gICAgcHVibGljIEFtYXpvblNTTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIGFsbCBBbWF6b24gVGV4dHJhY3QgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25UZXh0cmFjdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGV4dHJhY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFRleHRyYWN0IHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UZXh0cmFjdFNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRleHRyYWN0U2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIFRpbWVzdHJlYW0gdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgY2VydGFpbiBLTVMgb3BlcmF0aW9ucywgYW5kIG9wZXJhdGlvbnMgdG8gbWFuYWdlIHlvdXIgc2F2ZWQgcXVlcmllcy4gSWYgdXNpbmcgQ3VzdG9tZXIgbWFuYWdlZCBDTUssIHBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRpbWVzdHJlYW1Db25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBUaW1lc3RyZWFtLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgY2VydGFpbiBLTVMgb3BlcmF0aW9uIGFjY2Vzcy4gSWYgdXNpbmcgQ3VzdG9tZXIgbWFuYWdlZCBDTUssIHBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBjcmVhdGUsIHVwZGF0ZSwgZGVsZXRlIGFuZCBsaXN0IEFtYXpvbiBUaW1lc3RyZWFtIEluZmx1eERCIGluc3RhbmNlcyBhbmQgY3JlYXRlIGFuZCBsaXN0IHBhcmFtZXRlciBncm91cHMuIFBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUluZmx1eERCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UaW1lc3RyZWFtSW5mbHV4REJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIG1hbmFnZSBBbWF6b24gVGltZXN0cmVhbSBJbmZsdXhEQiBpbnN0YW5jZXMgYW5kIHBhcmFtZXRlciBncm91cHMgZXhjZXB0IG1hcmtldHBsYWNlIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblRpbWVzdHJlYW1JbmZsdXhEQkZ1bGxBY2Nlc3NXaXRob3V0TWFya2V0cGxhY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUluZmx1eERCRnVsbEFjY2Vzc1dpdGhvdXRNYXJrZXRwbGFjZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUgYW5kIGxpc3QgQW1hem9uIFRpbWVzdHJlYW0gSW5mbHV4REIgaW5zdGFuY2VzIGFuZCBjcmVhdGUgYW5kIGxpc3QgcGFyYW1ldGVyIGdyb3Vwcy4gUGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbmVlZGVkLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UaW1lc3RyZWFtSW5mbHV4REJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UaW1lc3RyZWFtSW5mbHV4REJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFRpbWVzdHJlYW0uIFBvbGljeSBhbHNvIHByb3ZpZGVzIHBlcm1pc3Npb24gdG8gY2FuY2VsIGFueSBydW5uaW5nIHF1ZXJ5LiBJZiB1c2luZyBDdXN0b21lciBtYW5hZ2VkIENNSywgcGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbmVlZGVkLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UaW1lc3RyZWFtUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFRyYW5zY3JpYmUgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25UcmFuc2NyaWJlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UcmFuc2NyaWJlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWFkIG9ubHkgb3BlcmF0aW9uIGZvciBBbWF6b24gVHJhbnNjcmliZSAqL1xuICAgIHB1YmxpYyBBbWF6b25UcmFuc2NyaWJlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVHJhbnNjcmliZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gVmVyaWZpZWQgUGVybWlzc2lvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBWZXJpZmllZCBQZXJtaXNzaW9ucyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WZXJpZmllZFBlcm1pc3Npb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGF0dGFjaCB0aGVtIHRvIGNyb3NzLWFjY291bnQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvblZQQ0Nyb3NzQWNjb3VudE5ldHdvcmtJbnRlcmZhY2VPcGVyYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ0Nyb3NzQWNjb3VudE5ldHdvcmtJbnRlcmZhY2VPcGVyYXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFZQQyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIEFXUyByZXNvdXJjZXMsIHJ1biBOZXR3b3JrIEFjY2VzcyBBbmFseXplciwgYW5kIGNyZWF0ZSBvciBkZWxldGUgdGFncyBvbiBOZXR3b3JrIEluc2lnaHRzIEFjY2VzcyBTY29wZSBhbmQgTmV0d29yayBJbnNpZ2h0cyBBY2Nlc3MgU2NvcGUgQW5hbHlzaXMuICovXG4gICAgcHVibGljIEFtYXpvblZQQ05ldHdvcmtBY2Nlc3NBbmFseXplckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDTmV0d29ya0FjY2Vzc0FuYWx5emVyRnVsbEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIEFXUyByZXNvdXJjZXMsIHJ1biBSZWFjaGFiaWxpdHkgQW5hbHl6ZXIsIGFuZCBjcmVhdGUgb3IgZGVsZXRlIHRhZ3Mgb24gTmV0d29yayBJbnNpZ2h0cyBQYXRoIGFuZCBOZXR3b3JrIEluc2lnaHRzIEFuYWx5c2lzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WUENSZWFjaGFiaWxpdHlBbmFseXplckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDUmVhY2hhYmlsaXR5QW5hbHl6ZXJGdWxsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIHJvbGUgSUFNUm9sZUZvclJlYWNoYWJpbGl0eUFuYWx5emVyQ3Jvc3NBY2NvdW50UmVzb3VyY2VBY2Nlc3MuIFRoaXMgcm9sZSBpcyBkZXBsb3llZCB0byB0aGUgbWVtYmVyIGFjY291bnRzIGluIGFuIG9yZ2FuaXphdGlvbiB3aGVuIHRoZSBtYW5hZ2VtZW50IGFjY291bnQgZW5hYmxlcyB0cnVzdGVkIGFjY2VzcyBmb3IgUmVhY2hhYmlsaXR5IEFuYWx5emVyLiBJdCBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byB2aWV3IHJlc291cmNlcyBmcm9tIGFjcm9zcyB5b3VyIG9yZ2FuaXphdGlvbiB1c2luZyB0aGUgUmVhY2hhYmlsaXR5IEFuYWx5emVyIGNvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ1JlYWNoYWJpbGl0eUFuYWx5emVyUGF0aENvbXBvbmVudFJlYWRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDUmVhY2hhYmlsaXR5QW5hbHl6ZXJQYXRoQ29tcG9uZW50UmVhZFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFZQQyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFdvcmtEb2NzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrRG9jc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya0RvY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya0RvY3MgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvbldvcmtEb2NzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya0RvY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya01haWwgRXZlbnRzICovXG4gICAgcHVibGljIEFtYXpvbldvcmtNYWlsRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya01haWxFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFdvcmtNYWlsLCBEaXJlY3RvcnkgU2VydmljZSwgU0VTLCBFQzIgYW5kIHJlYWQgYWNjZXNzIHRvIEtNUyBtZXRhZGF0YS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtNYWlsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIHRoZSBXb3JrTWFpbCBNZXNzYWdlIEZsb3cgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrTWFpbE1lc3NhZ2VGbG93RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbE1lc3NhZ2VGbG93RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQgb25seSBhY2Nlc3MgdG8gV29ya01haWwgbWVzc2FnZXMgZm9yIHRoZSBHZXRSYXdNZXNzYWdlQ29udGVudCBBUEkgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxNZXNzYWdlRmxvd1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtNYWlsTWVzc2FnZUZsb3dSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gV29ya01haWwgYW5kIFNFUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBXb3JrU3BhY2VzIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgdmlhIEFXUyBTREsgYW5kIENMSS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc0FkbWluKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNBZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0b3IgYWNjZXNzIGZvciBwYWNrYWdpbmcgYW4gYXBwbGljYXRpb24gaW4gQW1hem9uIFdvcmtTcGFjZXMgQXBwbGljYXRpb24gTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc0FwcGxpY2F0aW9uTWFuYWdlckFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNBcHBsaWNhdGlvbk1hbmFnZXJBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgbWFuYWdlZCBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDQSByZXNvdXJjZXMgaW4geW91ciBBV1MgYWNjb3VudCBmb3IgY2VydGlmaWNhdGUtYmFzZWQgYXV0aGVudGljYXRpb24uICovXG4gICAgcHVibGljIEFtYXpvbldvcmtzcGFjZXNQQ0FBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya3NwYWNlc1BDQUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIEFXUyBXb3JrU3BhY2VzIHNlcnZpY2UgYWNjZXNzIHRvIHJlcXVpcmVkIGN1c3RvbWVyIGFjY291bnQgcmVzb3VyY2VzIGZvciBsYXVuY2hpbmcgV29ya3NwYWNlcyBQb29scyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzUG9vbFNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1Bvb2xTZXJ2aWNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBTZWN1cmUgQnJvd3NlciBhbmQgaXRzIGRlcGVuZGVuY2llcyB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBTREssIGFuZCBDTEkuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNTZWN1cmVCcm93c2VyUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1NlY3VyZUJyb3dzZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBiYWNrZW5kIHNlcnZpY2UgdG8gcGVyZm9ybSBXb3Jrc3BhY2UgU2VsZiBTZXJ2aWNlIGFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1NlbGZTZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNTZWxmU2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGN1c3RvbWVyIGFjY291bnQgYWNjZXNzIHRvIEFXUyBXb3JrU3BhY2VzIHNlcnZpY2UgZm9yIGxhdW5jaGluZyBhIFdvcmtzcGFjZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1NlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1NlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlcXVpcmVkIHJlbGF0ZWQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1RoaW5DbGllbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBNb25pdG9yaW5nICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50TW9uaXRvcmluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50TW9uaXRvcmluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBhbmQgaXRzIGRlcGVuZGVuY2llcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzVGhpbkNsaWVudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBXb3JrU3BhY2VzIFdlYiBhbmQgaXRzIGRlcGVuZGVuY2llcyB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBTREssIGFuZCBDTEkuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNXZWJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzV2ViUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFdvcmtTcGFjZXMgV2ViICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNXZWJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzV2ViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gWm9jYWxvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25ab2NhbG9GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblpvY2Fsb0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBab2NhbG8gKi9cbiAgICBwdWJsaWMgQW1hem9uWm9jYWxvUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uWm9jYWxvUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBbXBsaWZ5IGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIGRlcGxveSBBbXBsaWZ5IGJhY2tlbmQgcmVzb3VyY2VzIChBV1MgQXBwU3luYywgQW1hem9uIENvZ25pdG8sIEFtYXpvbiBTMyBhbmQgb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcykgdmlhIHRoZSBBV1MgQ2xvdWQgRGV2ZWxvcG1lbnQgS2l0IChBV1MgQ0RLKSAqL1xuICAgIHB1YmxpYyBBbXBsaWZ5QmFja2VuZERlcGxveUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1wbGlmeUJhY2tlbmREZXBsb3lGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xhdWRlIFBsYXRmb3JtIG9uIEFXUyAqL1xuICAgIHB1YmxpYyBBbnRocm9waWNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFudGhyb3BpY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIGFuZCBpbmZlcmVuY2UgYWNjZXNzIHRvIENsYXVkZSBQbGF0Zm9ybSBvbiBBV1MgKi9cbiAgICBwdWJsaWMgQW50aHJvcGljSW5mZXJlbmNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFudGhyb3BpY0luZmVyZW5jZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpbWl0ZWQgYWNjZXNzIHRvIENsYXVkZSBQbGF0Zm9ybSBvbiBBV1MgKi9cbiAgICBwdWJsaWMgQW50aHJvcGljTGltaXRlZEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbnRocm9waWNMaW1pdGVkQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbGF1ZGUgUGxhdGZvcm0gb24gQVdTICovXG4gICAgcHVibGljIEFudGhyb3BpY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFudGhyb3BpY1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFQSSBHYXRld2F5IHRvIG1hbmFnZSBhc3NvY2lhdGVkIEFXUyBSZXNvdXJjZXMgb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVBJR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFQSUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBcHBJbnRlZ3JhdGlvbnMgdG8gbWFuYWdlIEFwcEZsb3cgcmVzb3VyY2VzIGFuZCBwdWJsaXNoIENsb3VkV2F0Y2ggbWV0cmljIGRhdGEgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFwcEludGVncmF0aW9uc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcEludGVncmF0aW9uc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBcHBsaWNhdGlvbiBBdXRvc2NhbGluZyBmb3IgQW1hem9uIEFwcFN0cmVhbSAqL1xuICAgIHB1YmxpYyBBcHBsaWNhdGlvbkF1dG9TY2FsaW5nRm9yQW1hem9uQXBwU3RyZWFtQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcGxpY2F0aW9uQXV0b1NjYWxpbmdGb3JBbWF6b25BcHBTdHJlYW1BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UgQ29udGludW91cyBFeHBvcnQgZmVhdHVyZSAqL1xuICAgIHB1YmxpYyBBcHBsaWNhdGlvbkRpc2NvdmVyeVNlcnZpY2VDb250aW51b3VzRXhwb3J0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXBwbGljYXRpb25EaXNjb3ZlcnlTZXJ2aWNlQ29udGludW91c0V4cG9ydFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBBcHBSdW5uZXIgTmV0d29ya2luZyB0byBtYW5hZ2UgcmVsYXRlZCBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBcHBSdW5uZXJOZXR3b3JraW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXBwUnVubmVyTmV0d29ya2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBBcHBSdW5uZXIgdG8gbWFuYWdlIHJlbGF0ZWQgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQXBwUnVubmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXBwUnVubmVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwU3R1ZGlvIHRvIG1hbmFnZSBhc3NvY2lhdGVkIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFwcFN0dWRpb1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcFN0dWRpb1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBbWF6b24gQXVyb3JhIERTUUwgU2VydmljZSBMaW5rZWQgUm9sZSAqL1xuICAgIHB1YmxpYyBBdXJvcmFEc3FsU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXVyb3JhRHNxbFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQXV0byBTY2FsaW5nIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ0NvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBdXRvIFNjYWxpbmcgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ0NvbnNvbGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ0NvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEF1dG8gU2NhbGluZy4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQXV0b1NjYWxpbmcgTm90aWZpY2F0aW9uIEFjY2VzcyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEF1dG9TY2FsaW5nTm90aWZpY2F0aW9uQWNjZXNzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ05vdGlmaWNhdGlvbkFjY2Vzc1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEF1dG8gU2NhbGluZy4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEF1dG8gU2NhbGluZyAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQVdTIENvbmZpZyBzZXJ2aWNlIHJvbGUuIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBBV1MgQ29uZmlnIHRvIHRyYWNrIGNoYW5nZXMgdG8geW91ciBBV1MgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgdGhlIFNTTSBEaWFnbm9zaXMgUzMgYnVja2V0IGZvciBkaWFnbm9zaXMgYW5kIHJlbWVkaWF0aW9uIG9mIGlzc3Vlcy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNQXV0b21hdGlvbkRpYWdub3Npc0J1Y2tldFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01BdXRvbWF0aW9uRGlhZ25vc2lzQnVja2V0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBwZXJtaXNzaW9uIGZvciBEaWFnbm9zaW5nIGlzc3VlcyB3aXRoIFNTTSBzZXJ2aWNlcyBieSBleGVjdXRpbmcgYWN0aXZpdGllcyBkZWZpbmVkIHdpdGhpbiBBdXRvbWF0aW9uIERvY3VtZW50cywgcHJpbWFyaWx5IHVzZWQgZm9yIHJ1bm5pbmcgdGhlIEF1dG9tYXRpb24gZG9jdW1lbnRzIGluIGEgY3Jvc3MtYWNjb3VudCBjcm9zcy1yZWdpb24gc2V0dXAgYnkgdHJpZ2dlcmluZyBjaGlsZCBhdXRvbWF0aW9ucyB3aXRoaW4gbWVtYmVyIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uQWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTURpYWdub3Npc0F1dG9tYXRpb25BZG1pbmlzdHJhdGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHBlcm1pc3Npb24gZm9yIERpYWdub3NpbmcgaXNzdWVzIHdpdGggU1NNIHNlcnZpY2VzIGJ5IGV4ZWN1dGluZyBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gRG9jdW1lbnRzLCBwcmltYXJpbHkgdXNlZCBmb3IgcnVubmluZyB0aGUgQXV0b21hdGlvbiBkb2N1bWVudHMgaW4gYSB0YXJnZXQgYWNjb3VudC9yZWdpb24gc2V0dXAgYnkgZGlhZ25vc2luZyBTU00gc2VydmljZSBoZWFsdGggYWNyb3NzIGFsbCBub2Rlcy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3Igb3BlcmF0aW9uYWwgYWNjb3VudHMgdG8gZGlhZ25vc2UgdW5tYW5hZ2VkIG5vZGVzIGJ5IHByb3ZpZGluZyBPcmdhbmlzYXRpb24gc3BlY2lmaWMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgU1NNIGF1dG9tYXRpb24gdG8gcHVsbCB0aGUgbGlzdCBvZiBtZW1iZXIgYWNjb3VudHMgd2l0aGluIGEgcm9vdCBvZiBhbiBPcmdhbmlzYXRpb24gdG8gdHJpZ2dlciBjcm9zcy1hY2NvdW50IGNyb3NzLXJlZ2lvbiBleGVjdXRpb24gYnkgYWxsb3dpbmcgYXNzdW1pbmcgRXhlY3V0aW9uIHJvbGVzIGluIHRhcmdldCBhY2NvdW50L3JlZ2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbk9wZXJhdGlvbmFsQWNjb3VudEFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uT3BlcmF0aW9uYWxBY2NvdW50QWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBwZXJtaXNzaW9uIGZvciBSZW1lZGlhdGluZyBpc3N1ZXMgd2l0aCBTU00gc2VydmljZXMgYnkgZXhlY3V0aW5nIGFjdGl2aXRpZXMgZGVmaW5lZCB3aXRoaW4gQXV0b21hdGlvbiBEb2N1bWVudHMsIHByaW1hcmlseSB1c2VkIGZvciBydW5uaW5nIHRoZSBBdXRvbWF0aW9uIGRvY3VtZW50cyBpbiBhIGNyb3NzLWFjY291bnQgY3Jvc3MtcmVnaW9uIHNldHVwIGJ5IHRyaWdnZXJpbmcgY2hpbGQgYXV0b21hdGlvbnMgd2l0aGluIG1lbWJlciBhY2NvdW50cy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uQWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbkFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBSZW1lZGlhdGluZyBpc3N1ZXMgd2l0aCBTU00gc2VydmljZXMgYnkgZXhlY3V0aW5nIGFjdGl2aXRpZXMgZGVmaW5lZCB3aXRoaW4gQXV0b21hdGlvbiBEb2N1bWVudHMsIHByaW1hcmlseSB1c2VkIGZvciBydW5uaW5nIHRoZSBBdXRvbWF0aW9uIGRvY3VtZW50cyBpbiBhIHRhcmdldCBhY2NvdW50L3JlZ2lvbiBzZXR1cCBieSByZW1lZGlhdGluZyBTU00gc2VydmljZXMgaGVhbHRoIGFjcm9zcyBhbGwgbm9kZXMuICovXG4gICAgcHVibGljIEFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBvcGVyYXRpb25hbCBhY2NvdW50cyB0byBSZW1lZGlhdGUgdW5tYW5hZ2VkIG5vZGVzIGJ5IHByb3ZpZGluZyBPcmdhbmlzYXRpb24gc3BlY2lmaWMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgU1NNIGF1dG9tYXRpb24gdG8gcHVsbCB0aGUgbGlzdCBvZiBtZW1iZXIgYWNjb3VudHMgd2l0aGluIGEgcm9vdCBvZiBhbiBPcmdhbmlzYXRpb24gdG8gdHJpZ2dlciBjcm9zcy1hY2NvdW50IGNyb3NzLXJlZ2lvbiBleGVjdXRpb24gYnkgYWxsb3dpbmcgYXNzdW1pbmcgRXhlY3V0aW9uIHJvbGVzIGluIHRhcmdldCBhY2NvdW50L3JlZ2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uT3BlcmF0aW9uYWxBY2NvdW50QWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbk9wZXJhdGlvbmFsQWNjb3VudEFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VycyB0byBhY2Nlc3MgdGhlIEFjY291bnQgQWN0aXZpdHkgcGFnZS4gKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudEFjdGl2aXR5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRBY3Rpdml0eUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBBY2NvdW50IE1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU0FjY291bnRNYW5hZ2VtZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBY2NvdW50TWFuYWdlbWVudEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBBY2NvdW50IE1hbmFnZW1lbnQgKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudE1hbmFnZW1lbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBY2NvdW50TWFuYWdlbWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gbWFuYWdlIGFuIGFjY291bnQgZm9yIEFXUyBhcHBsaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFXU0FjY291bnRTZXR0aW5nc01hbmFnZW1lbnRSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRTZXR0aW5nc01hbmFnZW1lbnRSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHVzZXJzIHRvIGFjY2VzcyB0aGUgQWNjb3VudCBVc2FnZSBSZXBvcnQgcGFnZS4gKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudFVzYWdlUmVwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRVc2FnZVJlcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgdGhlIERpc2NvdmVyeSBBZ2VudGxlc3MgQ29ubmVjdG9yIHRvIHJlZ2lzdGVyIHdpdGggQVdTIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NBZ2VudGxlc3NEaXNjb3ZlcnlTZXJ2aWNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FnZW50bGVzc0Rpc2NvdmVyeVNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEFwcEZhYnJpYyBzZXJ2aWNlIGFuZCByZWFkIG9ubHkgYWNjZXNzIHRvIGRlcGVuZGVudCBzZXJ2aWNlcyBzdWNoIGFzIFMzLCBLaW5lc2lzLCBLTVMuICovXG4gICAgcHVibGljIEFXU0FwcEZhYnJpY0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwRmFicmljRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFXUyBBcHBGYWJyaWMgKi9cbiAgICBwdWJsaWMgQVdTQXBwRmFicmljUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwRmFicmljUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBcHBGYWJyaWMgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTQXBwRmFicmljU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwRmFicmljU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBcHBTdHJlYW0gYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdBcHBTdHJlYW1GbGVldFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQXBwU3RyZWFtRmxlZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBDYXNzYW5kcmEgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdDYXNzYW5kcmFUYWJsZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ2Fzc2FuZHJhVGFibGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBDb21wcmVoZW5kIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ29tcHJlaGVuZEVuZHBvaW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdDb21wcmVoZW5kRW5kcG9pbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBUElHYXRld2F5IGFuZCBDbG91ZFdhdGNoIGZvciBjdXN0b20gcmVzb3VyY2Ugc2NhbGluZyAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9TY2FsaW5nQ3VzdG9tUmVzb3VyY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvU2NhbGluZ0N1c3RvbVJlc291cmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRHluYW1vREIgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdEeW5hbW9EQlRhYmxlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdEeW5hbW9EQlRhYmxlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRUMyIFNwb3QgRmxlZXQgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFQzJTcG90RmxlZXRSZXF1ZXN0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFQzJTcG90RmxlZXRSZXF1ZXN0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRUMyIENvbnRhaW5lciBTZXJ2aWNlIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUNTU2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUNTU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEFtYXpvbiBFbGFzdGlDYWNoZSBhbmQgQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFbGFzdGlDYWNoZVJHUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFbGFzdGlDYWNoZVJHUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRWxhc3RpYyBNYXAgUmVkdWNlIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRU1SSW5zdGFuY2VHcm91cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRU1SSW5zdGFuY2VHcm91cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIE1hbmFnZWQgU3RyZWFtaW5nIGZvciBBcGFjaGUgS2Fma2EgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdLYWZrYUNsdXN0ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0thZmthQ2x1c3RlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIExhbWJkYSBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0xhbWJkYUNvbmN1cnJlbmN5UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdMYW1iZGFDb25jdXJyZW5jeVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEFtYXpvbiBOZXB0dW5lIGFuZCBBbWF6b24gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ05lcHR1bmVDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdOZXB0dW5lQ2x1c3RlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIFJEUyBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1JEU0NsdXN0ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1JEU0NsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBTYWdlTWFrZXIgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdTYWdlTWFrZXJFbmRwb2ludFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nU2FnZU1ha2VyRW5kcG9pbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBbWF6b24gV29ya1NwYWNlcyBhbmQgQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdXb3JrU3BhY2VzUG9vbFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nV29ya1NwYWNlc1Bvb2xQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIHRoZSBEaXNjb3ZlcnkgQWdlbnQgdG8gcmVnaXN0ZXIgd2l0aCBBV1MgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25EaXNjb3ZlcnlBZ2VudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSBBZ2VudGxlc3MgQ29sbGVjdG9ycyB0byBhdXRvIHVwZGF0ZSwgcmVnaXN0ZXIsIGFuZCBjb21tdW5pY2F0ZSB3aXRoIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRsZXNzQ29sbGVjdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRsZXNzQ29sbGVjdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdmlldyBhbmQgdGFnIENvbmZpZ3VyYXRpb24gSXRlbXMgbWFpbnRhaW5lZCBieSB0aGUgQVdTIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5U2VydmljZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25EaXNjb3ZlcnlTZXJ2aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgd2l0aCBBV1MgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgdG8gbWlncmF0ZSBleHRlcm5hbCBzZXJ2ZXJzIHRvIEFXUy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzIHdob3NlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIHdoZW4gaW5zdGFsbGluZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50SW5zdGFsbGF0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRJbnN0YWxsYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyBhbmQgdXNpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBtaWdyYXRlIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMgd2hvc2UgY3JlZGVudGlhbHMgeW91IHByb3ZpZGUgd2hlbiBpbnN0YWxsaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIG1pZ3JhdGUgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50UG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudFBvbGljeVYyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSBDb252ZXJzaW9uIFNlcnZlciwgd2hpY2ggYXJlIEVDMiBpbnN0YW5jZXMgbGF1bmNoZWQgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UsIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIE1HTiBzZXJ2aWNlLiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgTUdOIHRvIHRoZSBNR04gQ29udmVyc2lvbiBTZXJ2ZXJzLCB3aGljaCBhcmUgYXV0b21hdGljYWxseSBsYXVuY2hlZCBhbmQgdGVybWluYXRlZCBieSBNR04sIHdoZW4gbmVlZGVkLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gTUdOIENvbnZlcnNpb24gU2VydmVycyBhcmUgdXNlZCBieSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSB3aGVuIHVzZXJzIGNob29zZSB0byBsYXVuY2ggVGVzdCBvciBDdXRvdmVyIGluc3RhbmNlcyB1c2luZyB0aGUgTUdOIGNvbnNvbGUsIENMSSwgb3IgQVBJLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkNvbnZlcnNpb25TZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25Db252ZXJzaW9uU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgQW1hem9uIEVDMiBvcGVyYXRpb25zIHJlcXVpcmVkIHRvIHVzZSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBsYXVuY2ggdGhlIG1pZ3JhdGVkIHNlcnZlcnMgYXMgRUMyIGluc3RhbmNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkVDMkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkVDMkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbCBwdWJsaWMgQVBJcyBvZiBBV1MgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTiksIGFzIHdlbGwgYXMgcGVybWlzc2lvbnMgdG8gcmVhZCBLTVMga2V5IGluZm9ybWF0aW9uLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIHNlbmQgbWV0YS1kYXRhIGFib3V0IHRoZSBwcm9ncmVzcyBvZiBzZXJ2ZXJzIGJlaW5nIG1pZ3JhdGVkIHVzaW5nIE1HTiB0byBBV1MgTWlncmF0aW9uIEh1YiAoTUdIKS4gTUdOIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGF0dGFjaGVkLCBhbmQgYXNzdW1lcyB0aGlzIHJvbGUuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbk1HSEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbk1HSEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBOZXR3b3JrIE1pZ3JhdGlvbiBjdXN0b20gcmVzb3VyY2UgKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25OZXR3b3JrTWlncmF0aW9uQ3VzdG9tUmVzb3VyY2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25OZXR3b3JrTWlncmF0aW9uQ3VzdG9tUmVzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhdXRvbWF0ZSBWTXdhcmUgdG8gQVdTIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgbWlncmF0aW9uIHRocm91Z2ggQ2xvdWRGb3JtYXRpb24gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25OZXR3b3JrTWlncmF0aW9uTXVsdGlBY2NvdW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbk11bHRpQWNjb3VudCk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbCByZWFkLW9ubHkgcHVibGljIEFQSXMgb2YgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTiksIGFzIHdlbGwgYXMgc29tZSByZWFkLW9ubHkgQVBJcyBvZiBvdGhlciBBV1Mgc2VydmljZXMgdGhhdCBhcmUgcmVxdWlyZWQgaW4gb3JkZXIgdG8gbWFrZSBmdWxsIHJlYWQtb25seSB1c2Ugb2YgdGhlIE1HTiBjb25zb2xlLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgUmVwbGljYXRpb24gU2VydmVycywgd2hpY2ggYXJlIEVDMiBpbnN0YW5jZXMgbGF1bmNoZWQgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgLSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBNR04gc2VydmljZSwgYW5kIHRvIGNyZWF0ZSBFQlMgc25hcHNob3RzIGluIHlvdXIgQVdTIGFjY291bnQuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSBieSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSB0byB0aGUgTUdOIFJlcGxpY2F0aW9uIFNlcnZlcnMgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgbGF1bmNoZWQgYW5kIHRlcm1pbmF0ZWQgYnkgTUdOLCBhcyBuZWVkZWQuIE1HTiBSZXBsaWNhdGlvbiBTZXJ2ZXJzIGFyZSB1c2VkIHRvIGZhY2lsaXRhdGUgZGF0YSByZXBsaWNhdGlvbiBmcm9tIHlvdXIgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MsIGFzIHBhcnQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIG1hbmFnZWQgdXNpbmcgTUdOLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25SZXBsaWNhdGlvblNlcnZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblJlcGxpY2F0aW9uU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgYW5kIHVzaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgYnkgQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChBV1MgTUdOKSB0byBtaWdyYXRlIHNvdXJjZSBzZXJ2ZXJzIHRoYXQgcnVuIG9uIEVDMiAoY3Jvc3MtUmVnaW9uIG9yIGNyb3NzLUFaKS4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBzaG91bGQgYmUgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSB0byB0aGUgRUMyIEluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25TZXJ2aWNlRWMySW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25TZXJ2aWNlRWMySW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIGFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gU1NNIG9wZXJhdGlvbnMgcmVxdWlyZWQgdG8gdXNlIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIGV4ZWN1dGUgY3VzdG9tIHBvc3QgbWlncmF0aW9uIGNvbW1hbmQgU1NNIGRvY3VtZW50cy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblNTTUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblNTTUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIGFuZCB1c2luZyB0aGUgQVdTIFZDZW50ZXIgQ2xpZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIG1pZ3JhdGUgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcyB3aG9zZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZSB3aGVuIGluc3RhbGxpbmcgdGhlIEFXUyBWQ2VudGVyIENsaWVudC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25WQ2VudGVyQ2xpZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uVkNlbnRlckNsaWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFwcCBNZXNoIEVudm95IHBvbGljeSBmb3IgYWNjZXNzaW5nIFZpcnR1YWwgTm9kZSBjb25maWd1cmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoRW52b3lBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaEVudm95QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBBcHAgTWVzaCBBUElzIGFuZCBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0FwcE1lc2hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQXBwIE1lc2ggUHJldmlldyBFbnZveSBwb2xpY3kgZm9yIGFjY2Vzc2luZyBWaXJ0dWFsIE5vZGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaFByZXZpZXdFbnZveUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoUHJldmlld0Vudm95QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBBcHAgTWVzaCAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hQcmV2aWV3U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgQXBwIE1lc2ggQVBJcyBhbmQgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaFJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBBcHBNZXNoICovXG4gICAgcHVibGljIEFXU0FwcE1lc2hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYWxsIEFwcCBSdW5uZXIgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwUnVubmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBSdW5uZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIHZpZXcgZGV0YWlscyBhYm91dCBBcHAgUnVubmVyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwUnVubmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwUnVubmVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgQXBwIFJ1bm5lciBzZXJ2aWNlIHBvbGljeSB0aGF0IGdyYW50cyByZWFkIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBFQ1IgcmVzb3VyY2VzIGluIHRoZSBjdXN0b21lcidzIGFjY291bnQuIFVzZSBpdCBpbiBhIHJvbGUgdGhhdCBpcyBwYXNzZWQgdG8gQXBwIFJ1bm5lciB3aGVuIGNyZWF0aW5nIG9yIHVwZGF0aW5nIGFuIEFwcCBSdW5uZXIgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwUnVubmVyU2VydmljZVBvbGljeUZvckVDUkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBSdW5uZXJTZXJ2aWNlUG9saWN5Rm9yRUNSQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIHRoZSBBcHBTeW5jIHNlcnZpY2UsIHRob3VnaCBub3QgZW5vdWdoIHRvIGFjY2VzcyB2aWEgdGhlIGNvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0FwcFN5bmNBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFN5bmNBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBpbnZva2luZyBhY2Nlc3MgdG8gdGhlIEFwcFN5bmMgc2VydmljZSAtIGJvdGggdGhyb3VnaCB0aGUgY29uc29sZSBhbmQgaW5kZXBlbmRlbnRseSAqL1xuICAgIHB1YmxpYyBBV1NBcHBTeW5jSW52b2tlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jSW52b2tlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBcHBTeW5jIHRvIHB1c2ggbG9ncyB0byB1c2VyJ3MgQ2xvdWRXYXRjaCBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NBcHBTeW5jUHVzaFRvQ2xvdWRXYXRjaExvZ3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwU3luY1B1c2hUb0Nsb3VkV2F0Y2hMb2dzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSwgdXBkYXRlLCBhbmQgcXVlcnkgdGhlIHNjaGVtYS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY1NjaGVtYUF1dGhvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jU2NoZW1hQXV0aG9yKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFwcFN5bmMgKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXJ0aWZhY3QgcmVhZC1vbmx5IGFjY2VzcyB0byBvcGVyYXRpb25zIGluIEFXUyBPcmdhbml6YXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NBcnRpZmFjdEFjY291bnRTeW5jKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FydGlmYWN0QWNjb3VudFN5bmMpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgZnVsbCBwZXJtaXNzaW9ucyB0byBsaXN0LCBkb3dubG9hZCwgYWNjZXB0LCBhbmQgdGVybWluYXRlIEFXUyBBcnRpZmFjdCBhZ3JlZW1lbnRzLiBJdCBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIGVuYWJsZSBBV1Mgc2VydmljZSBhY2Nlc3MgaW4gdGhlIE9yZ2FuaXphdGlvbiBzZXJ2aWNlLCBhcyB3ZWxsIGFzIGRlc2NyaWJlIHRoZSBvcmdhbml6YXRpb24gZGV0YWlscy4gQWRkaXRpb25hbGx5LCB0aGUgcG9saWN5IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrIGlmIHRoZSByZXF1aXJlZCBzZXJ2aWNlLWxpbmtlZCByb2xlIGV4aXN0cyBhbmQgY3JlYXRlcyBvbmUgaWYgaXQgZG9lc24ndCAqL1xuICAgIHB1YmxpYyBBV1NBcnRpZmFjdEFncmVlbWVudHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FydGlmYWN0QWdyZWVtZW50c0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IGFjY2VzcyB0byBsaXN0IHRoZSBBV1MgQXJ0aWZhY3Qgc2VydmljZSBhZ3JlZW1lbnRzIGFuZCB0byBkb3dubG9hZCB0aGUgYWNjZXB0ZWQgYWdyZWVtZW50cy4uIEl0IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbGlzdCBhcyB3ZWxsIGFzIGRlc2NyaWJlIHRoZSBvcmdhbml6YXRpb24gZGV0YWlscy4gQWRkaXRpb25hbGx5LCB0aGUgcG9saWN5IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrIGlmIHRoZSByZXF1aXJlZCBzZXJ2aWNlLWxpbmtlZCByb2xlIGV4aXN0cy4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RBZ3JlZW1lbnRzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXJ0aWZhY3RBZ3JlZW1lbnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgQXJ0aWZhY3Qgc2VydmljZSByZXBvcnRzLiAqL1xuICAgIHB1YmxpYyBBV1NBcnRpZmFjdFJlcG9ydHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdFJlcG9ydHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXJ0aWZhY3QgdG8gZ2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IGFuIG9yZ2FuaXphdGlvbiB2aWEgQVdTIE9yZ2FuaXphdGlvbnMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGVuYWJsZSBvciBkaXNhYmxlIEFXUyBBdWRpdCBNYW5hZ2VyLCB1cGRhdGUgc2V0dGluZ3MsIGFuZCBtYW5hZ2UgYXNzZXNzbWVudHMsIGNvbnRyb2xzLCBhbmQgZnJhbWV3b3JrcyAqL1xuICAgIHB1YmxpYyBBV1NBdWRpdE1hbmFnZXJBZG1pbmlzdHJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0F1ZGl0TWFuYWdlckFkbWluaXN0cmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIEF1ZGl0IE1hbmFnZXIgKi9cbiAgICBwdWJsaWMgQVdTQXVkaXRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXVkaXRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQVdTIEF1dG8gU2NhbGluZyB0byBwZXJpb2RpY2FsbHkgZm9yZWNhc3QgY2FwYWNpdHkgYW5kIGdlbmVyYXRlIHNjaGVkdWxlZCBzY2FsaW5nIGFjdGlvbnMgZm9yIEF1dG8gU2NhbGluZyBncm91cHMgaW4gYSBzY2FsaW5nIHBsYW4gKi9cbiAgICBwdWJsaWMgQVdTQXV0b1NjYWxpbmdQbGFuc0VDMkF1dG9TY2FsaW5nUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0F1dG9TY2FsaW5nUGxhbnNFQzJBdXRvU2NhbGluZ1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgdG8gY3JlYXRlIGNvbnRyb2xzIGFuZCBmcmFtZXdvcmtzIHRoYXQgZGVmaW5lIHRoZWlyIGV4cGVjdGF0aW9ucyBmb3IgQVdTIEJhY2t1cCByZXNvdXJjZXMgYW5kIGFjdGl2aXRpZXMsIGFuZCB0byBhdWRpdCBBV1MgQmFja3VwIHJlc291cmNlcyBhbmQgYWN0aXZpdGllcyBhZ2FpbnN0IHRoZWlyIGRlZmluZWQgY29udHJvbHMgYW5kIGZyYW1ld29ya3MuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgQ29uZmlnIGFuZCBzaW1pbGFyIHNlcnZpY2VzIHRvIGRlc2NyaWJlIHVzZXIgZXhwZWN0YXRpb25zIHBlcmZvcm0gdGhlIGF1ZGl0cy4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgdG8gZGVsaXZlciBhdWRpdCByZXBvcnRzIHRvIFMzIGFuZCBzaW1pbGFyIHNlcnZpY2VzLCBhbmQgZW5hYmxlcyB1c2VycyB0byBmaW5kIGFuZCBvcGVuIHRoZWlyIGF1ZGl0IHJlcG9ydHMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cEF1ZGl0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cEF1ZGl0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBBV1MgQmFja2ludCBhZ2VudCB0byBjb21wbGV0ZSBiYWNrdXAgZGF0YSB0cmFuc2ZlciB3aXRoIEFXUyBCYWNrdXAgU3RvcmFnZSBwbGFuZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHJvbGVzIGFzc3VtZWQgYnkgRUMyIEluc3RhbmNlcyBydW5uaW5nIFNBUCBIQU5BIHdpdGggdGhlIEJhY2tpbnQgYWdlbnQuICovXG4gICAgcHVibGljIEFXU0JhY2t1cERhdGFUcmFuc2ZlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBEYXRhVHJhbnNmZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBmb3IgYmFja3VwIGFkbWluaXN0cmF0b3JzLCBncmFudGluZyBmdWxsIGFjY2VzcyB0byBBV1MgQmFja3VwIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBjcmVhdGluZyBvciBlZGl0aW5nIGJhY2t1cCBwbGFucywgYXNzaWduaW5nIEFXUyByZXNvdXJjZXMgdG8gYmFja3VwIHBsYW5zLCBkZWxldGluZyBiYWNrdXBzLCBhbmQgcmVzdG9yaW5nIGJhY2t1cHMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXBHYXRld2F5IHBlcm1pc3Npb24gdG8gc3luYyB0aGUgbWV0YWRhdGEgb2YgVmlydHVhbCBNYWNoaW5lcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBHYXRld2F5U2VydmljZVJvbGVQb2xpY3lGb3JWaXJ0dWFsTWFjaGluZU1ldGFkYXRhU3luYygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBHYXRld2F5U2VydmljZVJvbGVQb2xpY3lGb3JWaXJ0dWFsTWFjaGluZU1ldGFkYXRhU3luYyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEd1YXJkRHV0eSBwZXJtaXNzaW9uIHRvIHJlYWQgeW91ciBBV1MgQmFja3VwIFJlY292ZXJ5IFBvaW50cyBmb3IgbWFsd2FyZSBzY2FucyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBHdWFyZER1dHlSb2xlUG9saWN5Rm9yU2NhbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwR3VhcmREdXR5Um9sZVBvbGljeUZvclNjYW5zKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHVzZXJzIHBlcm1pc3Npb25zIHRvIGFzc2lnbiBBV1MgcmVzb3VyY2VzIHRvIGJhY2t1cCBwbGFucywgY3JlYXRlIG9uLWRlbWFuZCBiYWNrdXBzLCBhbmQgcmVzdG9yZSBiYWNrdXBzLiBUaGlzIHBvbGljeSBkb2VzIG5vdCBhbGxvdyB0aGUgdXNlciB0byBjcmVhdGUgb3IgZWRpdCBiYWNrdXAgcGxhbnMgb3IgdG8gZGVsZXRlIHNjaGVkdWxlZCBiYWNrdXBzIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQuICovXG4gICAgcHVibGljIEFXU0JhY2t1cE9wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cE9wZXJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgZm9yIGJhY2t1cCBhZG1pbmlzdGF0b3JzIHdobyB1c2UgY3Jvc3MtYWNjb3VudCBiYWNrdXAgbWFuYWdlbWVudCB0byBtYW5hZ2UgYmFja3VwcyBmb3IgdGhlIG9yZ2FuaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwT3JnYW5pemF0aW9uQWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwT3JnYW5pemF0aW9uQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gcmVzdG9yZSBhIGJhY2t1cCBvZiBTQVAgSEFOQSBvbiBBbWF6b24gRUMyICovXG4gICAgcHVibGljIEFXU0JhY2t1cFJlc3RvcmVBY2Nlc3NGb3JTQVBIQU5BKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFJlc3RvcmVBY2Nlc3NGb3JTQVBIQU5BKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHNlYXJjaCBvcGVyYXRvciByb2xlIGhhcyBhY2Nlc3MgdG8gY3JlYXRlIGJhY2t1cCBpbmRleGVzLCBjcmVhdGUgc2VhcmNoZXMgb2YgYmFja3VwIG1ldGFkYXRhIHRoYXQgaGFzIGJlZW4gaW5kZXhlZC4gVGhpcyBwb2xpY3kgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3IgdGhlc2Ugc2VhcmNoIG9wZXJhdG9yIGZ1bmN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VhcmNoT3BlcmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VhcmNoT3BlcmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gY3JlYXRlIGJhY2t1cHMgb24geW91ciBiZWhhbGYgYWNyb3NzIEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeUZvckJhY2t1cCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeUZvckJhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbiB0byBjcmVhdGUgYmFja3VwcyBvbiB5b3VyIGJlaGFsZiBhY3Jvc3MgQVdTIHNlcnZpY2VzICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5Rm9yQmFja3VwVGVzdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeUZvckJhY2t1cFRlc3QpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gY3JlYXRlIGJhY2t1cHMgb24geW91ciBiZWhhbGYgYWNyb3NzIEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgQVdTIEJhY2t1cCB0byBpbmRleCByZWNvdmVyeSBwb2ludHMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9ySW5kZXhpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JJbmRleGluZyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgQVdTIEJhY2t1cCB0byByZXN0b3JlIGluZGl2aWR1YWwgaXRlbXMgaW4gYSByZWNvdmVyeSBwb2ludCAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckl0ZW1SZXN0b3JlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckl0ZW1SZXN0b3Jlcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbiB0byBwZXJmb3JtIHJlc3RvcmVzIG9uIHlvdXIgYmVoYWxmIGFjcm9zcyBBV1Mgc2VydmljZXMuIFRoaXMgcG9saWN5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgZGVsZXRlIEFXUyByZXNvdXJjZXMsIHN1Y2ggYXMgRUJTIHZvbHVtZXMsIFJEUyBpbnN0YW5jZXMsIGFuZCBFRlMgZmlsZSBzeXN0ZW1zLCB3aGljaCBhcmUgcGFydCBvZiB0aGUgcmVzdG9yZSBwcm9jZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclJlc3RvcmVzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUmVzdG9yZXMpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgY29udGFpbmluZyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIEFXUyBCYWNrdXAgdG8gYmFja3VwIGRhdGEgaW4gYW55IFMzIGJ1Y2tldC4gVGhpcyBpbmNsdWRlcyByZWFkIGFjY2VzcyB0byBhbGwgUzMgb2JqZWN0cyBhbmQgYW55IGRlY3J5cHQgYWNjZXNzIGZvciBhbGwgS01TIGtleXMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNCYWNrdXAoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JTM0JhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgQVdTIEJhY2t1cCB0byByZXN0b3JlIGEgUzMgYmFja3VwIHRvIGEgYnVja2V0LiBUaGlzIGluY2x1ZGVzIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMgdG8gYWxsIFMzIGJ1Y2tldHMsIGFuZCBwZXJtaXNzaW9ucyB0byBHZW5lcmF0ZURhdGFLZXkgYW5kIERlc2NyaWJlS2V5IGZvciBhbGwgS01TIGtleXMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNSZXN0b3JlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNSZXN0b3JlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gbWFsd2FyZSBzY2FucyBvbiB5b3VyIEFXUyBCYWNrdXAgUmVjb3ZlcnkgUG9pbnRzICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yU2NhbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JTY2Fucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIGZvciBBV1MgQmF0Y2ggcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NCYXRjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmF0Y2hGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBDbG91ZFdhdGNoIEV2ZW50IFRhcmdldCBmb3IgQVdTIEJhdGNoIEpvYiBTdWJtaXNzaW9uICovXG4gICAgcHVibGljIEFXU0JhdGNoU2VydmljZUV2ZW50VGFyZ2V0Um9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYXRjaFNlcnZpY2VFdmVudFRhcmdldFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBCYXRjaCBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBFQzIsIEF1dG9zY2FsaW5nLCBFQzIgQ29udGFpbmVyIHNlcnZpY2UgYW5kIENsb3Vkd2F0Y2ggTG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTQmF0Y2hTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYXRjaFNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciBBV1MgQmF0Y2ggdG8gcXVldWUgYW5kIG1hbmFnZSBBbWF6b24gU2FnZU1ha2VyIHdvcmtsb2FkcyAqL1xuICAgIHB1YmxpYyBBV1NCYXRjaFNlcnZpY2VSb2xlUG9saWN5Rm9yU2FnZU1ha2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhdGNoU2VydmljZVJvbGVQb2xpY3lGb3JTYWdlTWFrZXIpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UgbGlua2VkIHJvbGUgdG8gcHJvdmlkZSBCaWxsaW5nIGFuZCBDb3N0IE1hbmFnZW1lbnQgRGF0YSBFeHBvcnRzIGFjY2VzcyB0byBBV1Mgc2VydmljZSBkYXRhIGZvciBleHBvcnRpbmcgdGhlIGRhdGEgdG8gYSB0YXJnZXQgbG9jYXRpb24sIHN1Y2ggYXMgQW1hem9uIFMzLCBvbiBiZWhhbGYgb2YgYSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVdTQkNNRGF0YUV4cG9ydHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCQ01EYXRhRXhwb3J0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEJlZHJvY2sgQWdlbnRDb3JlIEdhdGV3YXkgdG8gbWFuYWdlZCBWUEMgTGF0dGljZSByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTQmVkcm9ja0FnZW50Q29yZUdhdGV3YXlOZXR3b3JrU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmVkcm9ja0FnZW50Q29yZUdhdGV3YXlOZXR3b3JrU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBVc2UgdGhlIEFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzIG1hbmFnZWQgcG9saWN5IHRvIGFsbG93IGNvbXBsZXRlIGFjY2VzcyB0byBBV1MgQmlsbGluZyBDb25kdWN0b3IgKEFCQykgY29uc29sZSBhbmQgQVBJcy4gVGhpcyBwb2xpY3kgYWxsb3dzIHVzZXJzIHRvIGxpc3QsIGNyZWF0ZSBhbmQgZGVsZXRlIEFCQyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVXNlIHRoZSBBV1NCaWxsaW5nQ29uZHVjdG9yUmVhZE9ubHlBY2Nlc3MgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQmlsbGluZyBDb25kdWN0b3IgKEFCQykgY29uc29sZSBhbmQgQVBJcy4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBhbmQgbGlzdCBhbGwgQUJDIHJlc291cmNlcy4gSXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgYWJpbGl0eSB0byBjcmVhdGUgb3IgZGVsZXRlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQmlsbGluZ0NvbmR1Y3RvclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JpbGxpbmdDb25kdWN0b3JSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VycyB0byB2aWV3IGJpbGxzIG9uIHRoZSBCaWxsaW5nIENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCaWxsaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYmlsbGluZyBzZXJ2aWNlIHRvIHZhbGlkYXRlIGFjY2VzcyB0byBiaWxsaW5nIHZpZXcgZGF0YSBmb3IgZGVyaXZlZCBiaWxsaW5nIHZpZXdzICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCaWxsaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBwZXJtaXNzaW9ucyB0byBjb250cm9sIEFXUyByZXNvdXJjZXMuIEZvciBleGFtcGxlLCB0byBzdGFydCBhbmQgc3RvcCBFQzIgb3IgUkRTIGluc3RhbmNlcyBieSBleGVjdXRpbmcgQVdTIFN5c3RlbXMgTWFuYWdlciAoU1NNKSBzY3JpcHRzLiAqL1xuICAgIHB1YmxpYyBBV1NCdWRnZXRzQWN0aW9uc1JvbGVQb2xpY3lGb3JSZXNvdXJjZUFkbWluaXN0cmF0aW9uV2l0aFNTTSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWRnZXRzQWN0aW9uc1JvbGVQb2xpY3lGb3JSZXNvdXJjZUFkbWluaXN0cmF0aW9uV2l0aFNTTSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBCdWRnZXRzIEFjdGlvbnMgaW5jbHVkaW5nIHVzaW5nIEJ1ZGdldHMgQWN0aW9ucyB0byBjb250cm9sIHN0YXRlcyBvZiBydW5uaW5nIEFXUyByZXNvdXJjZXMgdmlhIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTQnVkZ2V0c0FjdGlvbnNXaXRoQVdTUmVzb3VyY2VDb250cm9sQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1ZGdldHNBY3Rpb25zV2l0aEFXU1Jlc291cmNlQ29udHJvbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEJ1ZGdldHMgQ29uc29sZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0J1ZGdldHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWRnZXRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIElBTSBwb2xpY3kgZ3JhbnRzIHVzZXJzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgQnVnQnVzdCBjb25zb2xlICovXG4gICAgcHVibGljIEFXU0J1Z0J1c3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1Z0J1c3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBJQU0gcG9saWN5IGdyYW50cyB1c2VycyBhY2Nlc3MgdG8gcGFydGljaXBhdGUgaW4gQVdTIEJ1Z0J1c3QgZXZlbnRzICovXG4gICAgcHVibGljIEFXU0J1Z0J1c3RQbGF5ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQnVnQnVzdFBsYXllckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgQnVnQnVzdCB0byBhY2Nlc3MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0J1Z0J1c3RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWdCdXN0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciAoQUNNKSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhdWRpdG9yIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FBdWRpdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQUF1ZGl0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwcml2aWxlZ2VkIGNlcnRpZmljYXRlIHVzZXIgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQVByaXZpbGVnZWRVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQVByaXZpbGVnZWRVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNlcnRpZmljYXRlIHVzZXIgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQVVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgKEFDTSkuICovXG4gICAgcHVibGljIEFXU0NlcnRpZmljYXRlTWFuYWdlclJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIFNlcnZpY2UgTGlua2VkIFJvbGUgdXNlZCBieSBBV1MgQ2hhdGJvdC4gKi9cbiAgICBwdWJsaWMgQVdTQ2hhdGJvdFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NoYXRib3RTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byBBV1MgQ2xlYW4gUm9vbXMgcmVzb3VyY2VzIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgU2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDbGVhbiBSb29tcyByZXNvdXJjZXMgZXhjZXB0IGZvciBxdWVyeWluZyBpbiBhIGNvbGxhYm9yYXRpb24gYW5kIGFjY2VzcyB0byByZWxhdGVkIEFXUyBTZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xlYW5Sb29tc0Z1bGxBY2Nlc3NOb1F1ZXJ5aW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNGdWxsQWNjZXNzTm9RdWVyeWluZyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byBBV1MgQ2xlYW4gUm9vbXMgTUwgcmVzb3VyY2VzIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgU2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNNTEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xlYW5Sb29tc01MRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBDbGVhbiBSb29tcyBNTCByZXNvdXJjZXMgYW5kIHJlYWQtb25seSBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgQ2xlYW4gUm9vbXMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNNTFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNNTFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIENsZWFuIFJvb21zIHJlc291cmNlcyBhbmQgcmVhZC1vbmx5IGFjY2VzcyB0byByZWxhdGVkIEFXUyBHbHVlIGFuZCBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xlYW5Sb29tc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEFXUyBDbGVhbiBSb29tcyB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQ2xvdWRXYXRjaCBBUElzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xlYW5Sb29tc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRvciBhY2Nlc3MgdG8gQVdTIENsb3VkOS4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWQ5QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZDlBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gYmUgaW52aXRlZCBpbnRvIEFXUyBDbG91ZDkgc2hhcmVkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWQ5RW52aXJvbm1lbnRNZW1iZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5RW52aXJvbm1lbnRNZW1iZXIpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIENsb3VkOSAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZDlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZDlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHdpbGwgYmUgdXNlZCB0byBhdHRhY2ggYSByb2xlIG9uIGEgSW5zdGFuY2VQcm9maWxlIHdoaWNoIHdpbGwgYWxsb3cgQ2xvdWQ5IHRvIHVzZSB0aGUgU1NNIFNlc3Npb24gTWFuYWdlciB0byBjb25uZWN0IHRvIHRoZSBpbnN0YW5jZSAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZDlTU01JbnN0YW5jZVByb2ZpbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5U1NNSW5zdGFuY2VQcm9maWxlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgQVdTIENsb3VkOSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgYW5kIHRvIG1hbmFnZSBvd25lZCBlbnZpcm9ubWVudHMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkOVVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5VXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRGb3JtYXRpb25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkRm9ybWF0aW9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgQ2xvdWRGb3JtYXRpb24gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEZvcm1hdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkRm9ybWF0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQ2xvdWRGcm9udCBMb2dnZXIgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEZyb250TG9nZ2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkRnJvbnRMb2dnZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRGcm9udCB0byBtYW5hZ2UgRUMyIEVsYXN0aWMgTmV0d29yayBJbnRlcmZhY2VzIGFuZCBTZWN1cml0eSBHcm91cHMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0Nsb3VkRnJvbnRWUENPcmlnaW5TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEZyb250VlBDT3JpZ2luU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQ2xvdWRIU00gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEhTTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRIU01GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgQ2xvdWRIU00gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEhTTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkSFNNUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFXUyBDbG91ZEhTTSBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFXU0Nsb3VkSFNNUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEhTTVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIENsb3VkIE1hcCBkaXNjb3ZlcnkgQVBJLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZE1hcERpc2NvdmVySW5zdGFuY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRNYXBEaXNjb3Zlckluc3RhbmNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBDbG91ZCBNYXAgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRNYXBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkTWFwRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gYWxsIEFXUyBDbG91ZCBNYXAgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRNYXBSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZE1hcFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVnaXN0cmFudCBsZXZlbCBhY2Nlc3MgdG8gQVdTIENsb3VkIE1hcCBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZE1hcFJlZ2lzdGVySW5zdGFuY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRNYXBSZWdpc3Rlckluc3RhbmNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzaW5nIEFXUyBDbG91ZFNoZWxsIHdpdGggYWxsIGZlYXR1cmVzICovXG4gICAgcHVibGljIEFXU0Nsb3VkU2hlbGxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkU2hlbGxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENsb3VkVHJhaWwuICovXG4gICAgcHVibGljIEFXU0Nsb3VkVHJhaWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkVHJhaWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ2xvdWRUcmFpbC4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRUcmFpbFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkVHJhaWxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIHVzZWQgYnkgdGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgbmFtZWQgQVdTU2VydmljZVJvbGVGb3JDbG91ZFdhdGNoQWxhcm1zX0FjdGlvblNTTUluY2lkZW50cy4gQ2xvdWRXYXRjaCB1c2VzIHRoaXMgc2VydmljZS1saW5rZWQgcm9sZSB0byBwZXJmb3JtIEFXUyBTeXN0ZW0gTWFuYWdlciBJbmNpZGVudCBNYW5hZ2VyIGFjdGlvbnMgd2hlbiBhIENsb3VkV2F0Y2ggYWxhcm0gZ29lcyBpbiB0byBBTEFSTSBzdGF0ZS4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgaW5jaWRlbnRzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZFdhdGNoQWxhcm1zQWN0aW9uU1NNSW5jaWRlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRXYXRjaEFsYXJtc0FjdGlvblNTTUluY2lkZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvZGVBcnRpZmFjdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVBcnRpZmFjdEFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVBcnRpZmFjdEFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ29kZUFydGlmYWN0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUFydGlmYWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUFydGlmYWN0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29kZUJ1aWxkIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gQWxzbyBhdHRhY2ggQW1hem9uUzNSZWFkT25seUFjY2VzcyB0byBwcm92aWRlIGFjY2VzcyB0byBkb3dubG9hZCBidWlsZCBhcnRpZmFjdHMsIGFuZCBhdHRhY2ggSUFNRnVsbEFjY2VzcyB0byBjcmVhdGUgYW5kIG1hbmFnZSB0aGUgc2VydmljZSByb2xlIGZvciBDb2RlQnVpbGQuICovXG4gICAgcHVibGljIEFXU0NvZGVCdWlsZEFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVCdWlsZEFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBDb2RlQnVpbGQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBidXQgZG9lcyBub3QgYWxsb3cgQ29kZUJ1aWxkIHByb2plY3QgYWRtaW5pc3RyYXRpb24uIEFsc28gYXR0YWNoIEFtYXpvblMzUmVhZE9ubHlBY2Nlc3MgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gZG93bmxvYWQgYnVpbGQgYXJ0aWZhY3RzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQnVpbGREZXZlbG9wZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUJ1aWxkRGV2ZWxvcGVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ29kZUJ1aWxkIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gQWxzbyBhdHRhY2ggQW1hem9uUzNSZWFkT25seUFjY2VzcyB0byBwcm92aWRlIGFjY2VzcyB0byBkb3dubG9hZCBidWlsZCBhcnRpZmFjdHMuICovXG4gICAgcHVibGljIEFXU0NvZGVCdWlsZFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVCdWlsZFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvZGVDb21taXQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQ29tbWl0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQ29tbWl0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlQ29tbWl0IHJlcG9zaXRvcmllcywgYnV0IGRvZXMgbm90IGFsbG93IHJlcG9zaXRvcnkgZGVsZXRpb24uICovXG4gICAgcHVibGljIEFXU0NvZGVDb21taXRQb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUNvbW1pdFBvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENvZGVDb21taXQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQ29tbWl0UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUNvbW1pdFJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHJlZ2lzdGVyIGFuZCBkZXBsb3kgYSByZXZpc2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveURlcGxveWVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lEZXBsb3llckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIENvZGVEZXBsb3kgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQ29kZURlcGxveSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2UgYWNjZXNzIHRvIGV4cGFuZCB0YWdzIGFuZCBpbnRlcmFjdCB3aXRoIEF1dG8gU2NhbGluZyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2UgYWNjZXNzIHRvIGludm9rZSBMYW1iZGEgZnVuY3Rpb24gb24geW91ciBiZWhhbGYgdG8gcGVyZm9ybSBibHVlL2dyZWVuIGRlcGxveW1lbnQgdGhyb3VnaCBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGVGb3JDbG91ZEZvcm1hdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZUZvckNsb3VkRm9ybWF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIHdpZGUgYWNjZXNzIHRvIHBlcmZvcm0gYW4gRUNTIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBvbiB5b3VyIGJlaGFsZi4gR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHN1cHBvcnQgc2VydmljZXMsIHN1Y2ggYXMgIGZ1bGwgYWNjZXNzIHRvIHJlYWQgYWxsIFMzIG9iamVjdHMsIGludm9rZSBhbGwgTGFtYmRhIGZ1bmN0aW9ucywgcHVibGlzaCB0byBhbGwgU05TIHRvcGljcyB3aXRoaW4gdGhlIGFjY291bnQgYW5kIHVwZGF0ZSBhbGwgRUNTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95Um9sZUZvckVDUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZUZvckVDUyk7XG4gICAgfVxuXG4gICAgLyoqICBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2UgbGltaXRlZCBhY2Nlc3MgdG8gcGVyZm9ybSBhbiBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95Um9sZUZvckVDU0xpbWl0ZWQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGVGb3JFQ1NMaW1pdGVkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGFjY2VzcyB0byBwZXJmb3JtIGEgTGFtYmRhIGRlcGxveW1lbnQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSb2xlRm9yTGFtYmRhKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlRm9yTGFtYmRhKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGxpbWl0ZWQgYWNjZXNzIHRvIHBlcmZvcm0gYSBMYW1iZGEgZGVwbG95bWVudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGVGb3JMYW1iZGFMaW1pdGVkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlRm9yTGFtYmRhTGltaXRlZCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlUGlwZWxpbmUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlUGlwZWxpbmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVQaXBlbGluZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDb2RlUGlwZWxpbmUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlUGlwZWxpbmVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlUGlwZWxpbmVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB2aWV3IGFuZCBhcHByb3ZlIG1hbnVhbCBjaGFuZ2VzIGZvciBhbGwgcGlwZWxpbmVzICovXG4gICAgcHVibGljIEFXU0NvZGVQaXBlbGluZUFwcHJvdmVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVQaXBlbGluZUFwcHJvdmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciBjdXN0b20gYWN0aW9ucyB0byBwb2xsIGZvciBqb2JzIGRldGFpbHMgKGluY2x1ZGluZyB0ZW1wb3JhcnkgY3JlZGVudGlhbHMpIGFuZCByZXBvcnQgc3RhdHVzIHVwZGF0ZXMgdG8gQVdTIENvZGVQaXBlbGluZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZVBpcGVsaW5lQ3VzdG9tQWN0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVQaXBlbGluZUN1c3RvbUFjdGlvbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlU3RhciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVTdGFyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlU3RhckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIENvZGVTdGFyIE5vdGlmaWNhdGlvbnMgdG8gYWNjZXNzIEFtYXpvbiBDbG91ZFdhdGNoIEV2ZW50cyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlU3Rhck5vdGlmaWNhdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlU3Rhck5vdGlmaWNhdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERPIE5PVCBVU0UgLSAgQVdTIENvZGVTdGFyIFNlcnZpY2UgUm9sZSBQb2xpY3kgd2hpY2ggZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIENvZGVTdGFyIHRvIG1hbmFnZSBJQU0gYW5kIG90aGVyIHNlcnZpY2UgcmVzb3VyY2VzIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIuICovXG4gICAgcHVibGljIEFXU0NvZGVTdGFyU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVN0YXJTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIERlbmllcyBhY2Nlc3MgdG8gY2VydGFpbiBhY3Rpb25zLCBhcHBsaWVkIGJ5IHRoZSBBV1MgdGVhbSBpbiB0aGUgZXZlbnQgdGhhdCBhbiBJQU0gdXNlcidzIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBjb21wcm9taXNlZCBvciBleHBvc2VkIHB1YmxpY2x5LiAgRG8gTk9UIHJlbW92ZSB0aGlzIHBvbGljeS4gIEluc3RlYWQsIHBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIGVtYWlsIHNlbnQgdG8geW91IHJlZ2FyZGluZyB0aGlzIGV2ZW50LiAqL1xuICAgIHB1YmxpYyBBV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29tcHJvbWlzZWRLZXlRdWFyYW50aW5lKTtcbiAgICB9XG5cbiAgICAvKiogRGVuaWVzIGFjY2VzcyB0byBjZXJ0YWluIGFjdGlvbnMsIGFwcGxpZWQgYnkgdGhlIEFXUyB0ZWFtIGluIHRoZSBldmVudCB0aGF0IGFuIElBTSB1c2VyJ3MgY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNvbXByb21pc2VkIG9yIGV4cG9zZWQgcHVibGljbHkuIERvIE5PVCByZW1vdmUgdGhpcyBwb2xpY3kuIEluc3RlYWQsIHBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIHN1cHBvcnQgY2FzZSBjcmVhdGVkIGZvciB5b3UgcmVnYXJkaW5nIHRoaXMgZXZlbnQuICovXG4gICAgcHVibGljIEFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYyKTtcbiAgICB9XG5cbiAgICAvKiogRGVuaWVzIGFjY2VzcyB0byBjZXJ0YWluIGFjdGlvbnMsIGFwcGxpZWQgYnkgQVdTIGluIHRoZSBldmVudCB0aGF0IGFuIElBTSB1c2VyJ3MgY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNvbXByb21pc2VkIG9yIGV4cG9zZWQgcHVibGljbHkuIFRoZSBwb2xpY3kgYWltcyB0byBsaW1pdCB0aGUgcG90ZW50aWFsIGRhbWFnZSB0aGF0IG1heSBiZSBjYXVzZWQgYnkgZnJhdWQtcmVsYXRlZCBhY3Rpdml0eSBsZWFkaW5nIHRvIHVuYXV0aG9yaXplZCBjaGFyZ2VzLCB3aGlsZSBub3QgaW1wYWN0aW5nIHRoZSBleGlzdGluZyByZXNvdXJjZXMuIERvIE5PVCByZW1vdmUgdGhpcyBwb2xpY3kuIEluc3RlYWQsIHBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIHN1cHBvcnQgY2FzZSBjcmVhdGVkIGZvciB5b3UgcmVnYXJkaW5nIHRoaXMgZXZlbnQuICovXG4gICAgcHVibGljIEFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvbmZpZyB0byBjYWxsIEFXUyBzZXJ2aWNlcyBhbmQgZGVwbG95IGNvbmZpZyByZXNvdXJjZXMgYWNyb3NzIG9yZ2FuaXphdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdNdWx0aUFjY291bnRTZXR1cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdNdWx0aUFjY291bnRTZXR1cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQ29uZmlnIHRvIHJlbWVkaWF0ZSBub25jb21wbGlhbnQgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdSZW1lZGlhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1JlbWVkaWF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIENvbmZpZyB0byBjYWxsIHJlYWQtb25seSBBV1MgT3JnYW5pemF0aW9ucyBBUElzICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1JvbGVGb3JPcmdhbml6YXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1JvbGVGb3JPcmdhbml6YXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFuIEFXUyBMYW1iZGEgZnVuY3Rpb24gdG8gYWNjZXNzIHRoZSBBV1MgQ29uZmlnIEFQSSBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc25hcHNob3RzIHRoYXQgQVdTIENvbmZpZyBkZWxpdmVycyBwZXJpb2RpY2FsbHkgdG8gQW1hem9uIFMzLiBUaGlzIGFjY2VzcyBpcyByZXF1aXJlZCBieSBmdW5jdGlvbnMgdGhhdCBldmFsdWF0ZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZm9yIGN1c3RvbSBDb25maWcgcnVsZXMuICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1J1bGVzRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdSdWxlc0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ29uZmlnIHRvIGNhbGwgQVdTIHNlcnZpY2VzIGFuZCBjb2xsZWN0IHJlc291cmNlIGNvbmZpZ3VyYXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB1c2UgQVdTIENvbmZpZywgaW5jbHVkaW5nIHNlYXJjaGluZyBieSB0YWdzIG9uIHJlc291cmNlcywgYW5kIHJlYWRpbmcgYWxsIHRhZ3MuIFRoaXMgZG9lcyBub3QgcHJvdmlkZSBwZXJtaXNzaW9uIHRvIGNvbmZpZ3VyZSBBV1MgQ29uZmlnLCB3aGljaCByZXF1aXJlcyBhZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdVc2VyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1VzZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGJyb2FkIHJlYWQvd3JpdGUgYWNjZXNzIHRvIEFMTCBFQzIgb2JqZWN0cywgcmVhZC93cml0ZSBhY2Nlc3MgdG8gUzMgYnVja2V0cyBzdGFydGluZyB3aXRoICdpbXBvcnQtdG8tZWMyLScsIGFuZCB0aGUgYWJpbGl0eSB0byBsaXN0IGFsbCBTMyBidWNrZXRzLCBmb3IgdGhlIEFXUyBDb25uZWN0b3IgdG8gaW1wb3J0IFZNcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29ubmVjdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nvbm5lY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQ29udHJvbCBUb3dlciB0byBjYWxsIEFXUyBzZXJ2aWNlcyB0aGF0IHByb3ZpZGUgYXV0b21hdGVkIGFjY291bnQgY29uZmlndXJhdGlvbiBhbmQgY2VudHJhbGl6ZWQgZ292ZXJuYW5jZSBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29udHJvbFRvd2VyQWNjb3VudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbnRyb2xUb3dlckFjY291bnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBDb250cm9sIFRvd2VyIGVuYWJsZXMgQVdTIENsb3VkVHJhaWwgYXMgYSBiZXN0IHByYWN0aWNlIGFuZCBwcm92aWRlcyB0aGlzIHJvbGUgdG8gQVdTIENsb3VkVHJhaWwuIEFXUyBDbG91ZFRyYWlsIGFzc3VtZXMgdGhpcyByb2xlIHRvIGNyZWF0ZSBhbmQgcHVibGlzaCBDbG91ZFRyYWlsIGxvZ3MgKi9cbiAgICBwdWJsaWMgQVdTQ29udHJvbFRvd2VyQ2xvdWRUcmFpbFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29udHJvbFRvd2VyQ2xvdWRUcmFpbFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIElBTSBJZGVudGl0eSBDZW50ZXIgKElkQykgcmVzb3VyY2VzIGluIHRoZSBtZW1iZXIgYWNjb3VudHMgZW5yb2xsZWQgd2l0aCBBV1MgQ29udHJvbCBUb3dlci4gVGhlIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgQVdTQ29udHJvbFRvd2VyQWRtaW4gcm9sZSBvbmx5IGlmIHRoZSBjdXN0b21lciBoYXMgb3B0ZWQtaW50byBJQU0gSWRDIGludGVncmF0aW9uIGluIHRoZWlyIEFXUyBDb250cm9sIFRvd2VyIExhbmRpbmcgWm9uZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29udHJvbFRvd2VySWRlbnRpdHlDZW50ZXJNYW5hZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbnRyb2xUb3dlcklkZW50aXR5Q2VudGVyTWFuYWdlbWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBV1MgQ29udHJvbCBUb3dlciAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb250cm9sVG93ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byB0byBkZXNjcmliZSB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZSBhY2NvdW50LCBjcmVhdGUgUzMgYnVja2V0cyBmb3IgdGhlIE1BUCBwcm9ncmFtIGFuZCBhcHBseSB0YWdzIHRvIGl0LCBjcmVhdGUgYSBDb3N0IGFuZCBVc2FnZSBSZXBvcnQsIGFuZCBkZXNjcmliZSBDb3N0IGFuZCBVc2FnZSBSZXBvcnQgZGVmaW5pdGlvbnMuICovXG4gICAgcHVibGljIEFXU0Nvc3RBbmRVc2FnZVJlcG9ydEF1dG9tYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29zdEFuZFVzYWdlUmVwb3J0QXV0b21hdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIERhdGEgR3JhbnQgb3duZXJzIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZURhdGFHcmFudE93bmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VEYXRhR3JhbnRPd25lckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBEYXRhIEdyYW50IHJlY2VpdmVyIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZURhdGFHcmFudFJlY2VpdmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VEYXRhR3JhbnRSZWNlaXZlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIERhdGEgRXhjaGFuZ2UgYW5kIEFXUyBNYXJrZXRwbGFjZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEl0IGFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIG5lZWRlZCB0byB0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIEFXUyBEYXRhIEV4Y2hhbmdlLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZGF0YSBwcm92aWRlciBhY2Nlc3MgdG8gQVdTIERhdGEgRXhjaGFuZ2UgYW5kIEFXUyBNYXJrZXRwbGFjZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEl0IGFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIG5lZWRlZCB0byB0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIEFXUyBEYXRhIEV4Y2hhbmdlLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VQcm92aWRlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlUHJvdmlkZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIERhdGEgRXhjaGFuZ2UgYW5kIEFXUyBNYXJrZXRwbGFjZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBEYXRhIEV4Y2hhbmdlIHRvIGFjY2VzcyBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIERhdGEgRXhjaGFuZ2UgZm9yIGxpY2Vuc2UgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlU2VydmljZVJvbGVQb2xpY3lGb3JMaWNlbnNlTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvckxpY2Vuc2VNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBEYXRhIEV4Y2hhbmdlIHRvIHJlYWQgZGF0YSBhYm91dCB5b3VyIEFXUyBPcmdhbml6YXRpb24gdG8gZGV0ZXJtaW5lIGVsaWdpYmlsaXR5IGZvciBBV1MgRGF0YSBFeGNoYW5nZSBkYXRhIGdyYW50cyBsaWNlbnNlIGRpc3RyaWJ1dGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlU2VydmljZVJvbGVQb2xpY3lGb3JPcmdhbml6YXRpb25EaXNjb3ZlcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlU2VydmljZVJvbGVQb2xpY3lGb3JPcmdhbml6YXRpb25EaXNjb3ZlcnkpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZGF0YSBzdWJzY3JpYmVyIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gSXQgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgQVdTIERhdGEgRXhjaGFuZ2UuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZVN1YnNjcmliZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZVN1YnNjcmliZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMgdG8gQVdTIERhdGEgTGlmZWN5Y2xlIE1hbmFnZXIgdG8gdGFrZSBhY3Rpb25zIG9uIEFXUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMgdG8gQVdTIERhdGEgTGlmZWN5Y2xlIE1hbmFnZXIgdG8gdGFrZSBhY3Rpb25zIG9uIEFXUyByZXNvdXJjZXMgZm9yIEFNSSBNYW5hZ2VtZW50ICovXG4gICAgcHVibGljIEFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU2VydmljZVJvbGVGb3JBTUlNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU2VydmljZVJvbGVGb3JBTUlNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQW1hem9uIERhdGEgTGlmZWN5Y2xlIE1hbmFnZXIgcGVybWlzc2lvbiB0byBwZXJmb3JtIHRoZSBTeXN0ZW1zIE1hbmFnZXIgYWN0aW9ucyByZXF1aXJlZCB0byBydW4gcHJlIGFuZCBwb3N0IHNjcmlwdHMgb24gYWxsIEFtYXpvbiBFQzIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNTTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTU01GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gRGF0YSBQaXBlbGluZSwgbGlzdCBhY2Nlc3MgZm9yIFMzLCBEeW5hbW9EQiwgUmVkc2hpZnQsIFJEUywgU05TLCBhbmQgSUFNIHJvbGVzLCBhbmQgcGFzc1JvbGUgYWNjZXNzIGZvciBkZWZhdWx0IFJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhUGlwZWxpbmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFQaXBlbGluZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBEYXRhIFBpcGVsaW5lLCBsaXN0IGFjY2VzcyBmb3IgUzMsIER5bmFtb0RCLCBSZWRzaGlmdCwgUkRTLCBTTlMsIGFuZCBJQU0gcm9sZXMsIGFuZCBwYXNzUm9sZSBhY2Nlc3MgZm9yIGRlZmF1bHQgUm9sZXMuICovXG4gICAgcHVibGljIEFXU0RhdGFQaXBlbGluZVBvd2VyVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhUGlwZWxpbmVQb3dlclVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRGF0YVN5bmMgRGlzY292ZXJ5IHRvIGludGVncmF0ZSB3aXRoIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YVN5bmNEaXNjb3ZlcnlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhU3luY0Rpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIERhdGFTeW5jIGFuZCBtaW5pbWFsIGFjY2VzcyB0byBpdHMgZGVwZW5kZW5jaWVzICovXG4gICAgcHVibGljIEFXU0RhdGFTeW5jRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhU3luY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBEYXRhU3luYyAqL1xuICAgIHB1YmxpYyBBV1NEYXRhU3luY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFTeW5jUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRGF0YVN5bmMgdG8gaW50ZWdyYXRlIHdpdGggb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBEZWFkbGluZSBDbG91ZCB3b3JrZXJzIHdpdGggYWNjZXNzIHRvIHJ1biB0YXNrcyBvbiBhIGZhcm0uICovXG4gICAgcHVibGljIEFXU0RlYWRsaW5lQ2xvdWRGbGVldFdvcmtlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkRmxlZXRXb3JrZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgZmFybXMgd2l0aCBsaW1pdGVkIFJlYWQtT25seSBwZXJtaXNzaW9ucyB0byBjYWxsIG90aGVyIG5lY2Vzc2FyeSBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSB1c2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0Zhcm1zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzRmFybXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgZmxlZXRzIHdpdGggbGltaXRlZCBSZWFkLU9ubHkgcGVybWlzc2lvbnMgdG8gY2FsbCBvdGhlciBuZWNlc3Nhcnkgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgdXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NGbGVldHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NGbGVldHMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgam9icyB3aXRoIGxpbWl0ZWQgUmVhZC1Pbmx5IHBlcm1pc3Npb25zIHRvIGNhbGwgb3RoZXIgbmVjZXNzYXJ5IHNlcnZpY2VzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gdGhlIHVzZXIgcm9sZSBhc3NvY2lhdGVkIHdpdGggeW91ciBzdHVkaW8uICovXG4gICAgcHVibGljIEFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzSm9icygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0pvYnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgcXVldWVzIHdpdGggbGltaXRlZCBSZWFkLU9ubHkgcGVybWlzc2lvbnMgdG8gY2FsbCBvdGhlciBuZWNlc3Nhcnkgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgdXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NRdWV1ZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NRdWV1ZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIEFXUyBEZWFkbGluZSBDbG91ZCB3b3JrZXIgaG9zdHMgdG8gam9pbiBhIGZsZWV0IGluIGEgZmFybS4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFdvcmtlckhvc3QoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFdvcmtlckhvc3QpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBzcGVjaWZpZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgRGVlcExlbnMgQWRtaW5pc3RyYXRpdmUgbGFtYmRhIGZ1bmN0aW9ucyB0aGF0IHJ1biBvbiBhIERlZXBMZW5zIGRldmljZSAqL1xuICAgIHB1YmxpYyBBV1NEZWVwTGVuc0xhbWJkYUZ1bmN0aW9uQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBMZW5zTGFtYmRhRnVuY3Rpb25BY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQVdTIERlZXBMZW5zIGFjY2VzcyB0byBBV1MgU2VydmljZXMsIHJlc291cmNlcyBhbmQgcm9sZXMgbmVlZGVkIGJ5IERlZXBMZW5zIGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluY2x1ZGluZyBJb1QsIFMzLCBHcmVlbkdyYXNzIGFuZCBBV1MgTGFtYmRhLiAqL1xuICAgIHB1YmxpYyBBV1NEZWVwTGVuc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBMZW5zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWVwUmFjZXIgYWRtaW4gYWNjZXNzIHRvIGFsbCBhY3Rpb25zIGluY2x1ZGluZyB0b2dnbGluZyBiZXR3ZWVuIG11bHRpdXNlciBhbmQgc2luZ2xlIHVzZXIgbW9kZS4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyQWNjb3VudEFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlckFjY291bnRBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZEZvcm1hdGlvbiB0byBjcmVhdGUgYW5kIG1hbmFnZSBBV1Mgc3RhY2tzIGFuZCByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlckNsb3VkRm9ybWF0aW9uQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlckNsb3VkRm9ybWF0aW9uQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGVlcFJhY2VyIE11bHRpVXNlciBEZWZhdWx0IHVzZXIgYWNjZXNzIHRvIHVzZSBkZWVwcmFjZXIgaW4gbXVsdGktdXNlciBtb2RlICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlckRlZmF1bHRNdWx0aVVzZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyRGVmYXVsdE11bHRpVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBEZWVwUmFjZXIuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMykuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBSb2JvTWFrZXIgdG8gY3JlYXRlIHJlcXVpcmVkIHJlc291cmNlcyBhbmQgY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlclJvYm9NYWtlckFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJSb2JvTWFrZXJBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRGVlcFJhY2VyIHRvIGNyZWF0ZSByZXF1aXJlZCByZXNvdXJjZXMgYW5kIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NEZWVwUmFjZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERlbnkgYWxsIGFjY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTRGVueUFsbCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZW55QWxsKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBEZXZpY2UgRmFybSBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NEZXZpY2VGYXJtRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZXZpY2VGYXJtRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50IHBlcm1pc3Npb25zIHRvIEFXUyBEZXZpY2UgRmFybSB0byBjYWxsIEVDMiBOZXR3b3JrIEFQSXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RldmljZUZhcm1TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZXZpY2VGYXJtU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudCBwZXJtaXNzaW9ucyB0byBBV1MgRGV2aWNlIEZhcm0gdG8gY2FsbCBFQzIgQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGV2aWNlRmFybVRlc3RHcmlkU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGV2aWNlRmFybVRlc3RHcmlkU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGlyZWN0IENvbm5lY3QgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RDb25uZWN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RDb25uZWN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIERpcmVjdCBDb25uZWN0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0Q29ubmVjdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdENvbm5lY3RSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBEaXJlY3QgQ29ubmVjdCBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RpcmVjdENvbm5lY3RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RDb25uZWN0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UgRGF0YS4gKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0b3J5U2VydmljZURhdGFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdG9yeVNlcnZpY2VEYXRhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIERpcmVjdG9yeSBTZXJ2aWNlIERhdGEgKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0b3J5U2VydmljZURhdGFSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlRGF0YVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIERpcmVjdG9yeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIERpcmVjdG9yeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0b3J5U2VydmljZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciB0aGUgRGlyZWN0b3J5IFNlcnZpY2UgU2VydmljZSBMaW5rZWQgUm9sZSAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0b3J5U2VydmljZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgcmVxdWlyZWQgZm9yIEFXUyBEaXNjb3ZlcnkgQ29udGludW91cyBFeHBvcnQgKi9cbiAgICBwdWJsaWMgQVdTRGlzY292ZXJ5Q29udGludW91c0V4cG9ydEZpcmVob3NlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Rpc2NvdmVyeUNvbnRpbnVvdXNFeHBvcnRGaXJlaG9zZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBETVMgRmxlZXQgQWR2aXNvciB0byBtYW5hZ2UgQ2xvdWRXYXRjaCBtZXRyaWNzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NETVNGbGVldEFkdmlzb3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NETVNGbGVldEFkdmlzb3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgRE1TIFNlcnZlcmxlc3MgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgRE1TIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTRE1TU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RNU1NlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgQ2FwYWNpdHkgTWFuYWdlciB0byBtYW5hZ2UgY2FwYWNpdHkgcmVzb3VyY2VzIGFuZCBpbnRlZ3JhdGUgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRUMyQ2FwYWNpdHlNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyQ2FwYWNpdHlNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIENhcGFjaXR5UmVzZXJ2YXRpb24gRmxlZXQgc2VydmljZSB0byBtYW5hZ2UgQ2FwYWNpdHkgUmVzZXJ2YXRpb25zICovXG4gICAgcHVibGljIEFXU0VDMkNhcGFjaXR5UmVzZXJ2YXRpb25GbGVldFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyQ2FwYWNpdHlSZXNlcnZhdGlvbkZsZWV0Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgRmxlZXQgdG8gbGF1bmNoIGFuZCBtYW5hZ2UgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJGbGVldFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMkZsZWV0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIFNwb3QgRmxlZXQgdG8gbGF1bmNoIGFuZCBtYW5hZ2Ugc3BvdCBmbGVldCBpbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQVdTRUMyU3BvdEZsZWV0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyU3BvdEZsZWV0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIFNwb3QgdG8gbGF1bmNoIGFuZCBtYW5hZ2Ugc3BvdCBpbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQVdTRUMyU3BvdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlNwb3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBFQzIgaW5zdGFuY2UgcGVybWlzc2lvbnMgdG8gYWxsb3cgRUMyIFNRTCBIaWdoIEF2YWlsYWJpbGl0eSBzZXJ2aWNlIHRvIGRldGVjdCBpbnN0YW5jZSBoaWdoIGF2YWlsYWJpbGl0eSBzdGF0ZSB0aHJvdWdoIEVDMiBpbnN0YW5jZSBwcm9maWxlLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcWxIYUluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlNxbEhhSW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFQzIgU1FMIEhpZ2ggQXZhaWxhYmlsaXR5IHNlcnZpY2UgcGVybWlzc2lvbnMgdG8gZGV0ZWN0IHN0YW5kYnkvcGFzc2l2ZSBpbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQVdTRUMyU3FsSGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJTcWxIYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFtYXpvbiBFQzIgYW5kIEFXUyBTU00gcGVybWlzc2lvbnMgdG8gcmVzdG9yZSBTUUwgU2VydmVyIGRhdGFiYXNlIGZyb20gYXBwbGljYXRpb24gY29uc2lzdGVudCBzbmFwc2hvdHMgY3JlYXRlZCBieSBBV1MgVlNTLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJWc3NSZXN0b3JlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlZzc1Jlc3RvcmVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgSUFNIHJvbGUgdGhhdCdzIGF0dGFjaGVkIHRvIHlvdXIgQW1hem9uIEVDMiBXaW5kb3dzIEluc3RhbmNlcyB0byBlbmFibGUgdGhlIEFtYXpvbiBFQzIgVlNTIHNvbHV0aW9uIHRvIGNyZWF0ZSBhbmQgYWRkIHRhZ3MgdG8gQW1hem9uIE1hY2hpbmUgSW1hZ2VzIChBTUkpIGFuZCBFQlMgU25hcHNob3RzLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJWc3NTbmFwc2hvdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJWc3NTbmFwc2hvdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgRUNSIHB1bGwgdGhyb3VnaCBjYWNoZSAqL1xuICAgIHB1YmxpYyBBV1NFQ1JQdWxsVGhyb3VnaENhY2hlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUNSUHVsbFRocm91Z2hDYWNoZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSB0aGUgaW5zdGFuY2UgaW4geW91ciBjdXN0b20gcGxhdGZvcm0gYnVpbGRlciBlbnZpcm9ubWVudCBwZXJtaXNzaW9uIHRvIGxhdW5jaCBFQzIgaW5zdGFuY2UsIGNyZWF0ZSBFQlMgc25hcHNob3QgYW5kIEFNSSwgc3RyZWFtIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggTG9ncywgYW5kIHN0b3JlIGFydGlmYWN0cyBpbiBBbWF6b24gUzMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtDdXN0b21QbGF0Zm9ybWZvckVDMlJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa0N1c3RvbVBsYXRmb3JtZm9yRUMyUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBFbGFzdGljIEJlYW5zdGFsayBTZXJ2aWNlIHBvbGljeSBmb3IgSGVhbHRoIE1vbml0b3Jpbmcgc3lzdGVtICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtFbmhhbmNlZEhlYWx0aCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrRW5oYW5jZWRIZWFsdGgpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSBSb2xlIHBvbGljeSB0aGF0IGdyYW50cyBsaW1pdGVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSB5b3VyIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiBmb3IgbWFpbnRlbmFuY2UgcHVycG9zZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtNYWludGVuYW5jZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrTWFpbnRlbmFuY2UpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBmb3IgdGhlIEFXUyBFbGFzdGljIEJlYW5zdGFsayBzZXJ2aWNlIHJvbGUgdXNlZCB0byBwZXJmb3JtIG1hbmFnZWQgdXBkYXRlcyBvZiBFbGFzdGljIEJlYW5zdGFsayBlbnZpcm9ubWVudHMuIFRoaXMgcG9saWN5IHNob3VsZCBub3QgYmUgYXR0YWNoZWQgdG8gb3RoZXIgdXNlcnMgb3Igcm9sZXMuIFRoZSBwb2xpY3kgZ3JhbnRzIGJyb2FkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHJlc291cmNlcyBhY3Jvc3MgYSBudW1iZXIgb2YgQVdTIHNlcnZpY2VzIGluY2x1ZGluZyBBdXRvU2NhbGluZywgRUMyLCBFQ1MsIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgYW5kIENsb3VkRm9ybWF0aW9uLiAgVGhpcyBwb2xpY3kgYWxzbyBhbGxvd3MgcGFzc2luZyBvZiBhbnkgSUFNIHJvbGUgdXNhYmxlIHdpdGggdGhvc2Ugc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtNYW5hZ2VkVXBkYXRlc0N1c3RvbWVyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrTWFuYWdlZFVwZGF0ZXNDdXN0b21lclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSBSb2xlIHBvbGljeSB0aGF0IGdyYW50cyBsaW1pdGVkIHBlcm1pc3Npb25zIHRvIG1hbmFnZWQgdXBkYXRlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa01hbmFnZWRVcGRhdGVzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa01hbmFnZWRVcGRhdGVzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHRoZSBpbnN0YW5jZXMgaW4geW91ciBtdWx0aWNvbnRhaW5lciBEb2NrZXIgZW52aXJvbm1lbnQgYWNjZXNzIHRvIHVzZSB0aGUgQW1hem9uIEVDMiBDb250YWluZXIgU2VydmljZSB0byBtYW5hZ2UgY29udGFpbmVyIGRlcGxveW1lbnQgdGFza3MuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtNdWx0aWNvbnRhaW5lckRvY2tlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrTXVsdGljb250YWluZXJEb2NrZXIpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zLiBFeHBsaWNpdGx5IGFsbG93cyBvcGVyYXRvcnMgdG8gZ2FpbiBkaXJlY3QgYWNjZXNzIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHJlc291cmNlcyByZWxhdGVkIHRvIEFXUyBFbGFzdGljIEJlYW5zdGFsayBhcHBsaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZUNvcmUgKEVsYXN0aWMgQmVhbnN0YWxrIG9wZXJhdGlvbnMgcm9sZSkgQWxsb3dzIGNvcmUgb3BlcmF0aW9uIG9mIGEgd2ViIHNlcnZpY2UgZW52aXJvbm1lbnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlQ29yZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZUNvcmUpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYW4gZW52aXJvbm1lbnQgdG8gbWFuYWdlIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MgbG9nIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVDV0woKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVDV0wpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYSBtdWx0aWNvbnRhaW5lciBEb2NrZXIgZW52aXJvbm1lbnQgdG8gbWFuYWdlIEFtYXpvbiBFQ1MgY2x1c3RlcnMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlRUNTKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlRUNTKTtcbiAgICB9XG5cbiAgICAvKiogKEVsYXN0aWMgQmVhbnN0YWxrIG9wZXJhdGlvbnMgcm9sZSkgQWxsb3dzIGFuIGVudmlyb25tZW50IHRvIGludGVncmF0ZSBhbiBBbWF6b24gUkRTIGluc3RhbmNlLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZVJEUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZVJEUyk7XG4gICAgfVxuXG4gICAgLyoqIChFbGFzdGljIEJlYW5zdGFsayBvcGVyYXRpb25zIHJvbGUpIEFsbG93cyBhbiBlbnZpcm9ubWVudCB0byBlbmFibGUgQW1hem9uIFNOUyB0b3BpYyBpbnRlZ3JhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVTTlMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVTTlMpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYSB3b3JrZXIgZW52aXJvbm1lbnQgdGllciB0byBjcmVhdGUgYW4gQW1hem9uIER5bmFtb0RCIHRhYmxlIGFuZCBhbiBBbWF6b24gU1FTIHF1ZXVlLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZVdvcmtlclRpZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVXb3JrZXJUaWVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgb24gYSBkZXByZWNhdGlvbiBwYXRoLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZ3VpZGFuY2U6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljYmVhbnN0YWxrL2xhdGVzdC9kZy9pYW0tc2VydmljZXJvbGUuaHRtbC4gQVdTIEVsYXN0aWMgQmVhbnN0YWxrIFNlcnZpY2Ugcm9sZSBwb2xpY3kgd2hpY2ggZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSAmIG1hbmFnZSByZXNvdXJjZXMgKGkuZS46IEF1dG9TY2FsaW5nLCBFQzIsIFMzLCBDbG91ZEZvcm1hdGlvbiwgRUxCLCBldGMuKSBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1NlcnZpY2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1NlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSBMaW5rZWQgUm9sZSBwb2xpY3kgd2hpY2ggZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSAmIG1hbmFnZSByZXNvdXJjZXMgKGkuZS46IEF1dG9TY2FsaW5nLCBFQzIsIFMzLCBDbG91ZEZvcm1hdGlvbiwgRUxCLCBldGMuKSBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgdGhlIGluc3RhbmNlcyBpbiB5b3VyIHdlYiBzZXJ2ZXIgZW52aXJvbm1lbnQgYWNjZXNzIHRvIHVwbG9hZCBsb2cgZmlsZXMgdG8gQW1hem9uIFMzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrV2ViVGllcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrV2ViVGllcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgdGhlIGluc3RhbmNlcyBpbiB5b3VyIHdvcmtlciBlbnZpcm9ubWVudCBhY2Nlc3MgdG8gdXBsb2FkIGxvZyBmaWxlcyB0byBBbWF6b24gUzMsIHRvIHVzZSBBbWF6b24gU1FTIHRvIG1vbml0b3IgeW91ciBhcHBsaWNhdGlvbidzIGpvYiBxdWV1ZSwgdG8gdXNlIEFtYXpvbiBEeW5hbW9EQiB0byBwZXJmb3JtIGxlYWRlciBlbGVjdGlvbiwgYW5kIHRvIEFtYXpvbiBDbG91ZFdhdGNoIHRvIHB1Ymxpc2ggbWV0cmljcyBmb3IgaGVhbHRoIG1vbml0b3JpbmcuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtXb3JrZXJUaWVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtXb3JrZXJUaWVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHJlY292ZXIgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcyB3aG9zZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBzdGVwIG9mIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5QWdlbnRJbnN0YWxsYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlBZ2VudEluc3RhbGxhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gcmVjb3ZlciBzb3VyY2Ugc2VydmVycyB0byBBV1MuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUFnZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5QWdlbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgcHVibGljIEFQSXMgb2YgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUyksIGFzIHdlbGwgYXMgcGVybWlzc2lvbnMgdG8gcmVhZCBLTVMga2V5LCBMaWNlbnNlIE1hbmFnZXIsIFJlc291cmNlIEdyb3VwcywgRWxhc3RpYyBMb2FkIEJhbGFuY2luZywgSUFNLCBhbmQgRUMyIGluZm9ybWF0aW9uLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBwdWJsaWMgQVBJcyBvZiBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoQVdTIERSUyksIGFzIHdlbGwgYXMgYWxsIHB1YmxpYyBBUElzIGluIG90aGVyIEFXUyBzZXJ2aWNlcyB1c2VkIGJ5IEFXUyBEUlMgQ29uc29sZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29uc29sZUZ1bGxBY2Nlc3NWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNvbnNvbGVGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgQ29udmVyc2lvbiBzZXJ2ZXIncyBpbnN0YW5jZSByb2xlLiBUaGlzIHBvbGljeSBhbGxvd3MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSBDb252ZXJzaW9uIFNlcnZlcnMsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnksIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIERSUyBzZXJ2aWNlLiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgRFJTIHRvIHRoZSBEUlMgQ29udmVyc2lvbiBTZXJ2ZXJzLCB3aGljaCBhcmUgYXV0b21hdGljYWxseSBsYXVuY2hlZCBhbmQgdGVybWluYXRlZCBieSBEUlMsIHdoZW4gbmVlZGVkLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gRFJTIENvbnZlcnNpb24gU2VydmVycyBhcmUgdXNlZCBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IHdoZW4gdXNlcnMgY2hvb3NlIHRvIHJlY292ZXIgc291cmNlIHNlcnZlcnMgdXNpbmcgdGhlIERSUyBjb25zb2xlLCBDTEksIG9yIEFQSS4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb252ZXJzaW9uU2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29udmVyc2lvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSB0byBzdXBwb3J0IGNyb3NzLWFjY291bnQgcmVwbGljYXRpb24gYW5kIGNyb3NzLWFjY291bnQgZmFpbGJhY2suICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q3Jvc3NBY2NvdW50UmVwbGljYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDcm9zc0FjY291bnRSZXBsaWNhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIGFuZCB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIGJ5IEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHJlY292ZXIgc291cmNlIHNlcnZlcnMgdGhhdCBydW4gb24gRUMyIChjcm9zcy1yZWdpb24gb3IgY3Jvc3MtQVopLiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IHNob3VsZCBiZSBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIHRvIHRoZSBFQzIgSW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUVjMkluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RWMySW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIGF0dGFjaCB0aGUgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlGYWlsYmFja0luc3RhbGxhdGlvblBvbGljeSBwb2xpY3kgdG8geW91ciBJQU0gaWRlbnRpdGllcy4gIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IEZhaWxiYWNrIENsaWVudCwgd2hpY2ggaXMgdXNlZCB0byBmYWlsYmFjayBSZWNvdmVyeSBJbnN0YW5jZXMgYmFjayB0byB5b3VyIG9yaWdpbmFsIHNvdXJjZSBpbmZyYXN0cnVjdHVyZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzIHdob3NlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIHdoZW4gcnVubmluZyB0aGUgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSBGYWlsYmFjayBDbGllbnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RmFpbGJhY2tJbnN0YWxsYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlGYWlsYmFja0luc3RhbGxhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB1c2luZyB0aGUgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSBGYWlsYmFjayBDbGllbnQsIHdoaWNoIGlzIHVzZWQgdG8gZmFpbGJhY2sgUmVjb3ZlcnkgSW5zdGFuY2VzIGJhY2sgdG8geW91ciBvcmlnaW5hbCBzb3VyY2UgaW5mcmFzdHJ1Y3R1cmUuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUZhaWxiYWNrUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RmFpbGJhY2tQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgeW91IHRvIHVzZSBBbWF6b24gU1NNIGFuZCBhZGRpdGlvbmFsIHNlcnZpY2VzIHJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHJ1biBwb3N0LWxhdW5jaCBhY3Rpb25zIGluIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChBV1MgRFJTKS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHJvbGVzIG9yIHVzZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUxhdW5jaEFjdGlvbnNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlMYXVuY2hBY3Rpb25zUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHN1cHBvcnQgbmV0d29yayByZXBsaWNhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlOZXR3b3JrUmVwbGljYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlOZXR3b3JrUmVwbGljYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIGF0dGFjaCB0aGUgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZWFkT25seUFjY2VzcyBwb2xpY3kgdG8geW91ciBJQU0gaWRlbnRpdGllcy4gIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbCByZWFkLW9ubHkgcHVibGljIEFQSXMgb2YgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSwgYXMgd2VsbCBhcyBzb21lIHJlYWQtb25seSBBUElzIG9mIG90aGVyIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBpbiBvcmRlciB0byBtYWtlIGZ1bGwgcmVhZC1vbmx5IHVzZSBvZiB0aGUgRFJTIGNvbnNvbGUuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIGluc3RhbmNlIHJvbGUgb2YgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSdzIFJlY292ZXJ5IEluc3RhbmNlLiAgVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIFJlY292ZXJ5IEluc3RhbmNlLCB3aGljaCBhcmUgRUMyIGluc3RhbmNlcyBsYXVuY2hlZCBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IC0gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgRFJTIHNlcnZpY2UsIGFuZCB0byBiZSBhYmxlIHRvIGZhaWxiYWNrIHRvIHRoZWlyIG9yaWdpbmFsIHNvdXJjZSBpbmZyYXN0cnVjdHVyZS4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBpcyBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgdG8gdGhlIERSUyBSZWNvdmVyeSBJbnN0YW5jZXMuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlY292ZXJ5SW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZWNvdmVyeUluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgUmVwbGljYXRpb24gc2VydmVyJ3MgaW5zdGFuY2Ugcm9sZS4gVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIFJlcGxpY2F0aW9uIFNlcnZlcnMsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgLSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBEUlMgc2VydmljZSwgYW5kIHRvIGNyZWF0ZSBFQlMgc25hcHNob3RzIGluIHlvdXIgQVdTIGFjY291bnQuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IHRvIHRoZSBEUlMgUmVwbGljYXRpb24gU2VydmVycyB3aGljaCBhcmUgYXV0b21hdGljYWxseSBsYXVuY2hlZCBhbmQgdGVybWluYXRlZCBieSBEUlMsIGFzIG5lZWRlZC4gRFJTIFJlcGxpY2F0aW9uIFNlcnZlcnMgYXJlIHVzZWQgdG8gZmFjaWxpdGF0ZSBkYXRhIHJlcGxpY2F0aW9uIGZyb20geW91ciBleHRlcm5hbCBzZXJ2ZXJzIHRvIEFXUywgYXMgcGFydCBvZiB0aGUgcmVjb3ZlcnkgcHJvY2VzcyBtYW5hZ2VkIGJ5IERSUy4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5UmVwbGljYXRpb25TZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZXBsaWNhdGlvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSByZXNvdXJjZXMgc3VjaCBhcyBzb3VyY2Ugc2VydmVycyBhbmQgam9icy4gSXQgYWxzbyBhbGxvd3MgY3JlYXRpbmcgYSBjb252ZXJ0ZWQgc25hcHNob3QgYW5kIHNoYXJpbmcgdGhhdCBFQlMgc25hcHNob3Qgd2l0aCBhIHNwZWNpZmljIGFjY291bnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U3RhZ2luZ0FjY291bnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlTdGFnaW5nQWNjb3VudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIHVzZWQgYnkgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gcmVjb3ZlciBzb3VyY2Ugc2VydmVycyBpbnRvIGEgc2VwYXJhdGUgdGFyZ2V0IGFjY291bnQgYW5kIHRvIGFsbG93IGZhaWxpbmcgYmFjay4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U3RhZ2luZ0FjY291bnRQb2xpY3lWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVN0YWdpbmdBY2NvdW50UG9saWN5VjIpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgQ29udHJvbCBQbGFuZSAtIENsYXNzaWMgKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0xvYWRCYWxhbmNpbmdDbGFzc2ljU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0xvYWRCYWxhbmNpbmdDbGFzc2ljU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgQ29udHJvbCBQbGFuZSAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljTG9hZEJhbGFuY2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNMb2FkQmFsYW5jaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBjcmVhdGUgTWVkaWFDb25uZWN0IEdhdGV3YXkgQnJpZGdlcyBhbmQgYWxsIGl0cyBhc3NvY2lhdGVkIHN1Yi1yZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdENyZWF0ZUJyaWRnZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RDcmVhdGVCcmlkZ2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBjcmVhdGUgTWVkaWFDb25uZWN0IEZsb3dzIGFuZCBhbGwgaXRzIGFzc29jaWF0ZWQgc3ViLXJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0Q3JlYXRlRmxvdygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RDcmVhdGVGbG93KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gZGVsZXRlIE1lZGlhQ29ubmVjdCBHYXRld2F5IEJyaWRnZXMgYW5kIGFsbCBpdHMgYXNzb2NpYXRlZCBzdWItcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUNvbm5lY3REZWxldGVCcmlkZ2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0RGVsZXRlQnJpZGdlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gZGVsZXRlIE1lZGlhQ29ubmVjdCBGbG93cyBhbmQgYWxsIGl0cyBhc3NvY2lhdGVkIHN1Yi1yZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdERlbGV0ZUZsb3coKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0RGVsZXRlRmxvdyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFDb25uZWN0IHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhQ29ubmVjdCByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUNvbnZlcnQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29udmVydEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb252ZXJ0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUNvbnZlcnQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29udmVydFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29udmVydFJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUxpdmUgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhTGl2ZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFMaXZlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUxpdmUgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhTGl2ZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhTGl2ZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2VWMiByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVYyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VWMkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFQYWNrYWdlVjIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VWMlJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVYyUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byBhbGwgTWVkaWFTdG9yZSBBUElzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhU3RvcmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhU3RvcmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIGZvciBNZWRpYVN0b3JlIEFQSXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFTdG9yZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhU3RvcmVSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFUYWlsb3IgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhVGFpbG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVRhaWxvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFUYWlsb3IgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhVGFpbG9yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFUYWlsb3JSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgZW5oYW5jZWQgY2xhc3NpYyBuZXR3b3JraW5nIG1hbmFnZW1lbnQgZmVhdHVyZS4gKi9cbiAgICBwdWJsaWMgQVdTRW5oYW5jZWRDbGFzc2ljTmV0d29ya2luZ01hbmdlbWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbmhhbmNlZENsYXNzaWNOZXR3b3JraW5nTWFuZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgY29uc29sZSBmdWxsIGFjY2VzcyB0byBBV1MgRW50aXR5IFJlc29sdXRpb24gYW5kIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0VudGl0eVJlc29sdXRpb25Db25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbnRpdHlSZXNvbHV0aW9uQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBFbnRpdHkgUmVzb2x1dGlvbiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0VudGl0eVJlc29sdXRpb25Db25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRW50aXR5UmVzb2x1dGlvbkNvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gRUMyIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVDMkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVDMkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gRUNTIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVDU0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVDU0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gRUtTIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVLU0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvckVLU0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gRUMyIG5ldHdvcmtpbmcgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yTmV0d29ya0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvck5ldHdvcmtBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIEZhdWx0IEluamVjdGlvbiBTaW11bGF0b3IgU2VydmljZSBwZXJtaXNzaW9uIGluIFJEUyBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgdG8gcGVyZm9ybSBGSVMgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JSRFNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JSRFNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIEZhdWx0IEluamVjdGlvbiBTaW11bGF0b3IgU2VydmljZSBwZXJtaXNzaW9uIGluIFNTTSBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgdG8gcGVyZm9ybSBGSVMgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JTU01BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JTU01BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIGFjY2VzcyB0byBBV1MgU2VydmljZSBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gRmluU3BhY2UgKi9cbiAgICBwdWJsaWMgQVdTRmluU3BhY2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGaW5TcGFjZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBhY2Nlc3MgZm9yIEFXUyBGTSBBZG1pbmlzdHJhdG9yICovXG4gICAgcHVibGljIEFXU0ZNQWRtaW5GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZNQWRtaW5GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZCBvbmx5IGFjY2VzcyBmb3IgQVdTIEZNIEFkbWluaXN0cmF0b3IgdGhhdCBhbGxvd3MgbW9uaXRvcmluZyBBV1MgRk0gb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NGTUFkbWluUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRk1BZG1pblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgV0FGIGFjdGlvbnMgZm9yIEFXUyBGaXJld2FsbCBNYW5hZ2VyIG1lbWJlciBhY2NvdW50cyAqL1xuICAgIHB1YmxpYyBBV1NGTU1lbWJlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZNTWVtYmVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgQVdTIEZvciBXb3JkcHJlc3MgUGx1Z2luICovXG4gICAgcHVibGljIEFXU0ZvcldvcmRQcmVzc1BsdWdpblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGb3JXb3JkUHJlc3NQbHVnaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgd2hpY2ggYWxsb3dzIEFXUyBDb2RlIENvbm5lY3Rpb25zIHRvIHN5bmMgY29udGVudCBmcm9tIHlvdXIgZ2l0IHJlcG9zaXRvcnkgKi9cbiAgICBwdWJsaWMgQVdTR2l0U3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dpdFN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBV1MgR2xvYmFsIEFjY2VsZXJhdG9yIHRvIG1hbmFnZSBFQzIgRWxhc3RpYyBOZXR3b3JrIEludGVyZmFjZXMgYW5kIFNlY3VyaXR5IEdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQVdTR2xvYmFsQWNjZWxlcmF0b3JTTFJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2xvYmFsQWNjZWxlcmF0b3JTTFJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgR2x1ZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTR2x1ZUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBHbHVlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgYWNjZXNzIHRvIHNhZ2VtYWtlciBub3RlYm9vayBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0dsdWVDb25zb2xlU2FnZU1ha2VyTm90ZWJvb2tGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVDb25zb2xlU2FnZU1ha2VyTm90ZWJvb2tGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEdsdWUgRGF0YUJyZXcgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBBbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIEtNUywgR2x1ZSkuICovXG4gICAgcHVibGljIEF3c0dsdWVEYXRhQnJld0Z1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXdzR2x1ZURhdGFCcmV3RnVsbEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIGdsdWUgdG8gcGVyZm9ybSBhY3Rpb24gb24gdXNlcidzIGdsdWUgZGF0YSBjYXRhbG9nLCB0aGlzIHBvbGljeSBhbHNvIHByb3ZpZGVzIHBlcm1pc3Npb24gdG8gZWMyIGFjdGlvbnMgdG8gYWxsb3cgZ2x1ZSB0byBjcmVhdGUgRU5JIHRvIGNvbm5lY3QgdG8gcmVzb3VyY2VzIGluIHRoZSBWUEMsIGFsc28gYWxsb3cgZ2x1ZSB0byBhY2Nlc3MgcmVnaXN0ZXJlZCBkYXRhIGluIGxha2Vmb3JtYXRpb24gYW5kIHBlcm1pc3Npb24gdG8gYWNjZXNzIHVzZXIncyBjbG91ZHdhdGNoICovXG4gICAgcHVibGljIEFXU0dsdWVEYXRhQnJld1NlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVEYXRhQnJld1NlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBHbHVlIFNjaGVtYSBSZWdpc3RyeSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0dsdWVTY2hlbWFSZWdpc3RyeUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZVNjaGVtYVJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byB0aGUgQVdTIEdsdWUgU2NoZW1hIFJlZ2lzdHJ5IFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTR2x1ZVNjaGVtYVJlZ2lzdHJ5UmVhZG9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZVNjaGVtYVJlZ2lzdHJ5UmVhZG9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBHbHVlIHNlcnZpY2Ugcm9sZSB3aGljaCBhbGxvd3MgY3VzdG9tZXIgdG8gbWFuYWdlIG5vdGVib29rIHNlcnZlciAqL1xuICAgIHB1YmxpYyBBV1NHbHVlU2VydmljZU5vdGVib29rUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlU2VydmljZU5vdGVib29rUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIEdsdWUgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgRUMyLCBTMywgYW5kIENsb3Vkd2F0Y2ggTG9ncyAqL1xuICAgIHB1YmxpYyBBV1NHbHVlU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZVNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdGhhdCBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlIGFuZCB1c2Ugb25seSB0aGUgbm90ZWJvb2sgc2Vzc2lvbnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLiBUaGlzIHBvbGljeSBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGV4cGxpY2l0bHkgYWxsb3cgdXNlcnMgdG8gcGFzcyBhIHJlc3RyaWN0ZWQgR2x1ZSBzZXNzaW9uIHJvbGUuICovXG4gICAgcHVibGljIEF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWROb3RlYm9va1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkTm90ZWJvb2tQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQVdTIEdsdWUgcmVzb3VyY2VzIGV4Y2VwdCBmb3Igc2Vzc2lvbnMuIEFsbG93cyB1c2VycyB0byBjcmVhdGUgYW5kIHVzZSBvbmx5IHRoZSBub3RlYm9vayBzZXNzaW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgb3RoZXIgcGVybWlzc2lvbnMgbmVlZGVkIGJ5IEFXUyBHbHVlIHRvIG1hbmFnZSBHbHVlIHJlc291cmNlcyBpbiBvdGhlciBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWROb3RlYm9va1NlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWROb3RlYm9va1NlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdGhhdCBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlIGFuZCB1c2Ugb25seSB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLiBUaGlzIHBvbGljeSBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGV4cGxpY2l0bHkgYWxsb3cgdXNlcnMgdG8gcGFzcyBhIHJlc3RyaWN0ZWQgR2x1ZSBzZXNzaW9uIHJvbGUuICovXG4gICAgcHVibGljIEF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBV1MgR2x1ZSByZXNvdXJjZXMgZXhjZXB0IGZvciBzZXNzaW9ucy4gQWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBhbmQgdXNlIG9ubHkgdGhlIGludGVyYWN0aXZlIHNlc3Npb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXNlci4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyBvdGhlciBwZXJtaXNzaW9ucyBuZWVkZWQgYnkgQVdTIEdsdWUgdG8gbWFuYWdlIEdsdWUgcmVzb3VyY2VzIGluIG90aGVyIEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZFNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHdpdGhpbiBBbWF6b24gR3JhZmFuYSB0byBjcmVhdGUgYW5kIG1hbmFnZSB3b3Jrc3BhY2VzIGZvciB0aGUgZW50aXJlIG9yZ2FuaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTR3JhZmFuYUFjY291bnRBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyYWZhbmFBY2NvdW50QWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyB0byByZWFkIG9ubHkgb3BlcmF0aW9ucyBpbiBBbWF6b24gR3JhZmFuYS4gKi9cbiAgICBwdWJsaWMgQVdTR3JhZmFuYUNvbnNvbGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmFmYW5hQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgb25seSB0aGUgYWJpbGl0eSB0byB1cGRhdGUgdXNlciBhbmQgZ3JvdXAgcGVybWlzc2lvbnMgZm9yIEFXUyBHcmFmYW5hIHdvcmtzcGFjZXMuICovXG4gICAgcHVibGljIEFXU0dyYWZhbmFXb3Jrc3BhY2VQZXJtaXNzaW9uTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmFmYW5hV29ya3NwYWNlUGVybWlzc2lvbk1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhYmlsaXR5IHRvIHVwZGF0ZSBJQU0gSWRlbnRpdHkgQ2VudGVyIChJZEMpIHVzZXIgYW5kIGdyb3VwIHBlcm1pc3Npb25zIGZvciBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHdvcmtzcGFjZXMuICovXG4gICAgcHVibGljIEFXU0dyYWZhbmFXb3Jrc3BhY2VQZXJtaXNzaW9uTWFuYWdlbWVudFYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyYWZhbmFXb3Jrc3BhY2VQZXJtaXNzaW9uTWFuYWdlbWVudFYyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBHcmVlbmdyYXNzIGNvbmZpZ3VyYXRpb24sIG1hbmFnZW1lbnQgYW5kIGRlcGxveW1lbnQgYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NHcmVlbmdyYXNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmVlbmdyYXNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFXUyBHcmVlbmdyYXNzIGNvbmZpZ3VyYXRpb24sIG1hbmFnZW1lbnQgYW5kIGRlcGxveW1lbnQgYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NHcmVlbmdyYXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JlZW5ncmFzc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgR3JlZW5ncmFzcyBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBBV1MgTGFtYmRhIGFuZCBBV1MgSW9UIHRoaW5nIHNoYWRvd3MuICovXG4gICAgcHVibGljIEFXU0dyZWVuZ3Jhc3NSZXNvdXJjZUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JlZW5ncmFzc1Jlc291cmNlQWNjZXNzUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBEYXRhZmxvdyBFbmRwb2ludCBJbnN0YW5jZSBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIEFXUyBHcm91bmQgU3RhdGlvbiBBZ2VudCAqL1xuICAgIHB1YmxpYyBBV1NHcm91bmRTdGF0aW9uQWdlbnRJbnN0YW5jZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcm91bmRTdGF0aW9uQWdlbnRJbnN0YW5jZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSGVhbHRoIHRvIGVuYWJsZSB0aGUgSGVhbHRoIGV2ZW50IHByb2Nlc3NvciBmZWF0dXJlLiAqL1xuICAgIHB1YmxpYyBBV1NIZWFsdGhFdmVudFByb2Nlc3NvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0hlYWx0aEV2ZW50UHJvY2Vzc29yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBIZWFsdGggQXBpcyBhbmQgTm90aWZpY2F0aW9ucyBhbmQgdGhlIFBlcnNvbmFsIEhlYWx0aCBEYXNoYm9hcmQgKi9cbiAgICBwdWJsaWMgQVdTSGVhbHRoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NIZWFsdGhGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEhlYWx0aCBJbWFnaW5nIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0hlYWx0aEltYWdpbmdGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0hlYWx0aEltYWdpbmdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgSGVhbHRoIEltYWdpbmcgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTSGVhbHRoSW1hZ2luZ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0hlYWx0aEltYWdpbmdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBBV1MgSGVhbHRoSW1hZ2luZyB0byBtYW5hZ2Ugc2VydmljZSBvcGVyYXRpb25zIGFuZCBwdWJsaXNoIHNlcnZpY2UgbWV0cmljcyAqL1xuICAgIHB1YmxpYyBBV1NIZWFsdGhJbWFnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoSW1hZ2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogTWFuYWdlZCBQb2xpY3kgRm9yIEFtYXpvbiBIZWFsdGhPbWljcyBTZXJ2aWNlIExpbmtlZCBSb2xlICovXG4gICAgcHVibGljIEFXU0hlYWx0aE9taWNzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoT21pY3NTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBsaXN0IG9mIGFjdGlvbnMgdGhhdCBhcmUgYWxsb3dlZCBmb3Igcm9sZXMgYXNzdW1lZCB3aXRoIHRoZSBJQU0gSWRlbnRpdHkgQ2VudGVyIGlkZW50aXR5IGNvbnRleHQuIEFXUyBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChBV1MgU1RTKSBhdXRvbWF0aWNhbGx5IGF0dGFjaGVzIHRoaXMgcG9saWN5IHRvIGFzc3VtZWQgcm9sZXMuIFRoZSBpZGVudGl0eSBjb250ZXh0IGlzIHBhc3NlZCBhcyBQcm92aWRlZENvbnRleHQuICovXG4gICAgcHVibGljIEFXU0lBTUlkZW50aXR5Q2VudGVyQWxsb3dMaXN0Rm9ySWRlbnRpdHlDb250ZXh0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lBTUlkZW50aXR5Q2VudGVyQWxsb3dMaXN0Rm9ySWRlbnRpdHlDb250ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBJQU0gSWRlbnRpdHkgQ2VudGVyIHVzZXJzIGZyb20gYW4gZXh0ZXJuYWwgcHJvdmlkZXIuICovXG4gICAgcHVibGljIEFXU0lkZW50aXR5Q2VudGVyRXh0ZXJuYWxNYW5hZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lkZW50aXR5Q2VudGVyRXh0ZXJuYWxNYW5hZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHRoZSBJZGVudGl0eSBTeW5jIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTSWRlbnRpdHlTeW5jRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJZGVudGl0eVN5bmNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgSWRlbnRpdHkgU3luYyBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0lkZW50aXR5U3luY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lkZW50aXR5U3luY1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBJbWFnZSBCdWlsZGVyIGFjdGlvbnMgYW5kIHJlc291cmNlIHNjb3BlZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0ltYWdlQnVpbGRlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW1hZ2VCdWlsZGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIEFXUyBJbWFnZSBCdWlsZGVyIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ltYWdlQnVpbGRlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ltYWdlQnVpbGRlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRoZSBqb2JzIGNyZWF0ZWQgdW5kZXIgdGhlIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NJbXBvcnRFeHBvcnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ltcG9ydEV4cG9ydEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBqb2JzIGNyZWF0ZWQgdW5kZXIgdGhlIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NJbXBvcnRFeHBvcnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbXBvcnRFeHBvcnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBJbmNpZGVudCBNYW5hZ2VyIHBlcm1pc3Npb25zIHRvIGNhbGwgb3RoZXIgQVdTIHNlcnZpY2VzIGFzIGEgcGFydCBvZiBtYW5hZ2luZyBhbiBpbmNpZGVudC4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VySW5jaWRlbnRBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbmNpZGVudE1hbmFnZXJJbmNpZGVudEFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHN0YXJ0LCB2aWV3LCBhbmQgdXBkYXRlIGluY2lkZW50cyB3aXRoIGZ1bGwgYWNjZXNzIHRvIGN1c3RvbSB0aW1lbGluZSBldmVudHMgJiByZWxhdGVkIGl0ZW1zLiBBc3NpZ24gdGhpcyBwb2xpY3kgdG8gdXNlcnMgd2hvIHdpbGwgY3JlYXRlIGFuZCByZXNvbHZlIGluY2lkZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VyUmVzb2x2ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW5jaWRlbnRNYW5hZ2VyUmVzb2x2ZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgSW5jaWRlbnQgTWFuYWdlciBwZXJtaXNzaW9uIHRvIG1hbmFnZSBpbmNpZGVudCByZWNvcmRzIGFuZCByZWxhdGVkIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW5jaWRlbnRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBJb1QgQW5hbHl0aWNzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RBbmFseXRpY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEFuYWx5dGljc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElvVCBBbmFseXRpY3MuICovXG4gICAgcHVibGljIEFXU0lvVEFuYWx5dGljc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEFuYWx5dGljc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBJb1QgY29uZmlndXJhdGlvbiBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVENvbmZpZ0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RDb25maWdBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIGNvbmZpZ3VyYXRpb24gYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RDb25maWdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RDb25maWdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIG1lc3NhZ2luZyBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVERhdGFBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGF0YUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIGFjY2VzcyB0byBJb1QgdGhpbmcgZ3JvdXBzIGFuZCByZWFkIGFjY2VzcyB0byBJb1QgQ2VydGlmaWNhdGVzIGZvciBleGVjdXRpb24gb2YgQUREX1RISU5HU19UT19USElOR19HUk9VUCBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlckFkZFRoaW5nc1RvVGhpbmdHcm91cE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJBZGRUaGluZ3NUb1RoaW5nR3JvdXBNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhY2Nlc3MgZm9yIElvVCBhbmQgcmVsYXRlZCByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlRGVmZW5kZXJBdWRpdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlckF1ZGl0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciBlbmFibGluZyBJb1QgbG9nZ2luZyBmb3IgZXhlY3V0aW9uIG9mIEVOQUJMRV9JT1RfTE9HR0lORyBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlckVuYWJsZUlvVExvZ2dpbmdNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyRW5hYmxlSW9UTG9nZ2luZ01pdGlnYXRpb25BY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBtZXNzYWdlcyBwdWJsaXNoIGFjY2VzcyB0byBTTlMgdG9waWMgZm9yIGV4ZWN1dGlvbiBvZiBQVUJMSVNIX0ZJTkRJTkdfVE9fU05TIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyUHVibGlzaEZpbmRpbmdzVG9TTlNNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyUHVibGlzaEZpbmRpbmdzVG9TTlNNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIElvVCBwb2xpY2llcyBmb3IgZXhlY3V0aW9uIG9mIFJFUExBQ0VfREVGQVVMVF9QT0xJQ1lfVkVSU0lPTiBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlclJlcGxhY2VEZWZhdWx0UG9saWN5TWl0aWdhdGlvbkFjdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlclJlcGxhY2VEZWZhdWx0UG9saWN5TWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIGFjY2VzcyB0byBJb1QgQ0EgY2VydGlmaWNhdGVzIGZvciBleGVjdXRpb24gb2YgIFVQREFURV9DQV9DRVJUSUZJQ0FURSBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlclVwZGF0ZUNBQ2VydE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJVcGRhdGVDQUNlcnRNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIElvVCBjZXJ0aWZpY2F0ZXMgZm9yIGV4ZWN1dGlvbiBvZiBVUERBVEVfREVWSUNFX0NFUlRJRklDQVRFIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyVXBkYXRlRGV2aWNlQ2VydE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJVcGRhdGVEZXZpY2VDZXJ0TWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSW9UIERldmljZSBUZXN0ZXIgdG8gcnVuIHRoZSBGcmVlUlRPUyBxdWFsaWZpY2F0aW9uIHN1aXRlIGJ5IGFsbG93aW5nIGFjY2VzcyB0byBzZXJ2aWNlcyBpbmNsdWRpbmcgSW9ULCBTMywgYW5kIElBTSAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VUZXN0ZXJGb3JGcmVlUlRPU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlVGVzdGVyRm9yRnJlZVJUT1NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBJb1QgRGV2aWNlIFRlc3RlciB0byBydW4gdGhlIEFXUyBHcmVlbmdyYXNzIHF1YWxpZmljYXRpb24gc3VpdGUgYnkgYWxsb3dpbmcgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIExhbWJkYSwgSW9ULCBBUEkgR2F0ZXdheSwgSUFNICovXG4gICAgcHVibGljIEFXU0lvVERldmljZVRlc3RlckZvckdyZWVuZ3Jhc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZVRlc3RlckZvckdyZWVuZ3Jhc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW9UIEV2ZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTSW9URXZlbnRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RFdmVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJb1QgRXZlbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RFdmVudHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RFdmVudHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZlZGVyYXRpb24gYWNjZXNzIGZvciBJb1QgRmxlZXQgSHViIGFwcGxpY2F0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RGbGVldEh1YkZlZGVyYXRpb25BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URmxlZXRIdWJGZWRlcmF0aW9uQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFXUyBSZXNvdXJjZXMgYW5kIG1ldGFEYXRhIHVzZWQgb3IgbWFuYWdlZCBieSBBV1NJb1RGbGVldHdpc2UgZm9yIGF1eGlsaWFyeSBmZWF0dXJlcyAqL1xuICAgIHB1YmxpYyBBV1NJb1RGbGVldHdpc2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RGbGVldHdpc2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIGNvbmZpZ3VyYXRpb24gYW5kIG1lc3NhZ2luZyBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBjcmVhdGlvbiBvZiBBbWF6b24gQ2xvdWRXYXRjaCBMb2cgZ3JvdXBzIGFuZCBzdHJlYW1pbmcgbG9ncyB0byB0aGUgZ3JvdXBzICovXG4gICAgcHVibGljIEFXU0lvVExvZ2dpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UTG9nZ2luZyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZWQgaW50ZWdyYXRpb25zIGZvciBBV1MgSW9UIERldmljZSBNYW5hZ2VtZW50IGFuZCByZWxhdGVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1hbmFnZWQgaW50ZWdyYXRpb25zIGZvciBBV1MgSW9UIERldmljZSBNYW5hZ2VtZW50IHBlcm1pc3Npb24gdG8gcHVibGlzaCBsb2dzIGFuZCBtZXRyaWNzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gY3JlYXRlIEFXUyBJb1QgSm9iIGFuZCBkZXNjcmliZSB0aGUgQVdTIGNvZGUgc2lnbmVyIGpvYiAqL1xuICAgIHB1YmxpYyBBV1NJb1RPVEFVcGRhdGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UT1RBVXBkYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBhbGwgQVdTIHNlcnZpY2VzIHN1cHBvcnRlZCBpbiBBV1MgSW9UIFJ1bGUgQWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RSdWxlQWN0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RSdWxlQWN0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZSBBV1MgSW9UIFNpdGVXaXNlIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBjcmVhdGUgYW5kIGxpc3QgZGF0YSBzdG9yZXMgdXNlZCB3aXRoIEFXUyBJb1QgU2l0ZVdpc2UgKGUuZy4gQVdTIElvVCBBbmFseXRpY3MpLCBhY2Nlc3MgdG8gbGlzdCBhbmQgdmlldyBBV1MgSW9UIEdyZWVuZ3Jhc3MgcmVzb3VyY2VzLCBsaXN0IGFuZCBtb2RpZnkgQVdTIFNlY3JldHMgTWFuYWdlciBzZWNyZXRzLCByZXRyaWV2ZSBBV1MgSW9UIHRoaW5nIHNoYWRvd3MsIGxpc3QgcmVzb3VyY2VzIHdpdGggc3BlY2lmaWMgdGFncywgYW5kIGNyZWF0ZSBhbmQgdXNlIGEgc2VydmljZS1saW5rZWQgcm9sZSBmb3IgQVdTIElvVCBTaXRlV2lzZS4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW9UIFNpdGVXaXNlLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RTaXRlV2lzZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UU2l0ZVdpc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGFjY2VzcyBBV1MgSW9UIFNpdGVXaXNlIGFzc2V0cyBhbmQgYXNzZXQgZGF0YSwgY3JlYXRlIEFXUyBJb1QgU2l0ZVdpc2UgTW9uaXRvciByZXNvdXJjZXMsIGFuZCBsaXN0IEFXUyBTU08gdXNlcnMuICovXG4gICAgcHVibGljIEFXU0lvVFNpdGVXaXNlTW9uaXRvclBvcnRhbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZU1vbml0b3JQb3J0YWxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHJvbGUgZ3JhbnRzIEFXUyBJb1QgU2l0ZVdpc2UgbW9uaXRvciBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgeW91ciBBV1MgSW9UIFNpdGVXaXNlIGFzc2V0cyAmIGFzc2V0IHByb3BlcnRpZXMsIGFuZCBjcmVhdGUgQVdTIElvVCBTaXRld2lzZSBwcm9qZWN0cywgZGFzaGJvYXJkcyAmIGFjY2VzcyBwb2xpY2llcyB0aHJvdWdoIEFXUyBJb1QgU2l0ZVdpc2UgcG9ydGFscy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VNb25pdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UU2l0ZVdpc2VNb25pdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElvVCBTaXRlV2lzZS4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHVzZXJzIHRvIHJlZ2lzdGVyIHRoaW5ncyBhdCBidWxrIHVzaW5nIEFXUyBJb1QgU3RhcnRUaGluZ1JlZ2lzdHJhdGlvblRhc2sgQVBJICovXG4gICAgcHVibGljIEFXU0lvVFRoaW5nc1JlZ2lzdHJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RUaGluZ3NSZWdpc3RyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElvVCBUd2luTWFrZXIgdG8gY2FsbCBvdGhlciBBV1Mgc2VydmljZXMgYW5kIHRvIHN5bmMgdGhlaXIgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RUd2luTWFrZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RUd2luTWFrZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSBkYXRhIGFjY2VzcyB0byBBV1MgSW9UIFdpcmVsZXNzIGRldmljZXMuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzRGF0YUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RXaXJlbGVzc0RhdGFBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGFzc29jaWF0ZWQgaWRlbnRpdHkgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBJb1QgV2lyZWxlc3Mgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIElvVCBXaXJlbGVzcyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIHRvIElvVCBSdWxlcyBFbmdpbmUgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzRnVsbFB1Ymxpc2hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NGdWxsUHVibGlzaEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSBhY2Nlc3MgdG8gY3JlYXRlLCBsaXN0IGFuZCBkZXNjcmliZSBJb1QgQ2VydGlmaWNhdGVzICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzR2F0ZXdheUNlcnRNYW5hZ2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzR2F0ZXdheUNlcnRNYW5hZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBhc3NvY2lhdGVkIGlkZW50aXR5IHRvIGNyZWF0ZSBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzIGdyb3VwcyBhbmQgc3RyZWFtIGxvZ3MgdG8gdGhlIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NMb2dnaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzTG9nZ2luZyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBJb1Qgd2lyZWxlc3MuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgSVAgQWRkcmVzcyBNYW5hZ2VyIHRvIGFjY2VzcyBWUEMgcmVzb3VyY2VzIGFuZCBpbnRlZ3JhdGUgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSVBBTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lQQU1TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFVzZWQgYnkgQVdTIElRIHRvIGV4ZWN1dGUgcGF5bWVudCByZXF1ZXN0cyBvbiBiZWhhbGYgb2YgYSBjdXN0b21lciAqL1xuICAgIHB1YmxpYyBBV1NJUUNvbnRyYWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSVFDb250cmFjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIElRICovXG4gICAgcHVibGljIEFXU0lRRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJUUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElRIHRvIG1hbmFnZSB0aGUgcm9sZSBhc3N1bWVkIGJ5IEFXUyBJUSBleHBlcnRzLiAqL1xuICAgIHB1YmxpYyBBV1NJUVBlcm1pc3Npb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJUVBlcm1pc3Npb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBBV1MgS01TIGN1c3RvbSBrZXkgc3RvcmVzICovXG4gICAgcHVibGljIEFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlQ3VzdG9tS2V5U3RvcmVzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VDdXN0b21LZXlTdG9yZXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgQVdTIEtNUyB0byBzeW5jaHJvbml6ZSB0aGUgc2hhcmVkIHByb3BlcnRpZXMgb2YgbXVsdGktUmVnaW9uIGtleXMuICovXG4gICAgcHVibGljIEFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlTXVsdGlSZWdpb25LZXlzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VNdWx0aVJlZ2lvbktleXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKS4gKi9cbiAgICBwdWJsaWMgQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VQb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VQb3dlclVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjcm9zcyBhY2NvdW50IGFjY2VzcyB0byBHbHVlIHJlc291cmNlcyB2aWEgTGFrZSBGb3JtYXRpb24uIEFsc28gZ3JhbnRzIHJlYWQgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHN1Y2ggYXMgb3JnYW5pemF0aW9ucyBhbmQgcmVzb3VyY2UgYWNjZXNzIG1hbmFnZXIgKi9cbiAgICBwdWJsaWMgQVdTTGFrZUZvcm1hdGlvbkNyb3NzQWNjb3VudE1hbmFnZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFrZUZvcm1hdGlvbkNyb3NzQWNjb3VudE1hbmFnZXIpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFXUyBMYWtlIEZvcm1hdGlvbiBhbmQgcmVsYXRlZCBzZXJ2aWNlcywgc3VjaCBhcyBBV1MgR2x1ZSwgdG8gbWFuYWdlIGRhdGEgbGFrZXMgKi9cbiAgICBwdWJsaWMgQVdTTGFrZUZvcm1hdGlvbkRhdGFBZG1pbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYWtlRm9ybWF0aW9uRGF0YUFkbWluKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBMYW1iZGEgc2VydmljZSwgQVdTIExhbWJkYSBjb25zb2xlIGZlYXR1cmVzLCBhbmQgb3RoZXIgcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBMYW1iZGEgc2VydmljZSwgQVdTIExhbWJkYSBjb25zb2xlIGZlYXR1cmVzLCBhbmQgb3RoZXIgcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzIGFuZCByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHRvIGR1cmFibGUgZXhlY3V0aW9uIEFQSXMgdXNlZCBieSBMYW1iZGEgZHVyYWJsZSBmdW5jdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhQmFzaWNEdXJhYmxlRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGlzdCBhbmQgcmVhZCBhY2Nlc3MgdG8gRHluYW1vREIgc3RyZWFtcyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBsb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFEeW5hbW9EQkV4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRHluYW1vREJFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWluaW11bSBwZXJtaXNzaW9ucyBmb3IgYSBMYW1iZGEgZnVuY3Rpb24gdG8gbWFuYWdlIEVOSXMgKGNyZWF0ZSwgZGVzY3JpYmUsIGRlbGV0ZSkgdXNlZCBieSBhIFZQQy1lbmFibGVkIExhbWJkYSBGdW5jdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhRU5JTWFuYWdlbWVudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFFTklNYW5hZ2VtZW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgUHV0LCBHZXQgYWNjZXNzIHRvIFMzIGFuZCBmdWxsIGFjY2VzcyB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUV4ZWN1dGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRXhlY3V0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIHRvIER5bmFtb0RCIFN0cmVhbXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUludm9jYXRpb25EeW5hbW9EQigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFJbnZvY2F0aW9uRHluYW1vREIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaXN0IGFuZCByZWFkIGFjY2VzcyB0byBLaW5lc2lzIHN0cmVhbXMgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggbG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhS2luZXNpc0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhS2luZXNpc0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdG8gY3JlYXRlIGFuZCBhZG1pbmlzdGVyIEVDMiByZXNvdXJjZXMgbWFuYWdlZCBieSB0aGUgTGFtYmRhIE1hbmFnZWQgSW5zdGFuY2VzLCBhbmQgZGVzY3JpcHRpdmUgcGVybWlzc2lvbnMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYU1hbmFnZWRFQzJSZXNvdXJjZU9wZXJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYU1hbmFnZWRFQzJSZXNvdXJjZU9wZXJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gYWNjZXNzIE1TSyBDbHVzdGVyIHdpdGhpbiBhIFZQQywgbWFuYWdlIEVOSXMgKGNyZWF0ZSwgZGVzY3JpYmUsIGRlbGV0ZSkgaW4gdGhlIFZQQyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFNU0tFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYU1TS0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgTGFtYmRhIFJlcGxpY2F0b3IgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIHJlcGxpY2F0ZSBmdW5jdGlvbnMgYWNyb3NzIHJlZ2lvbnMgKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhUmVwbGljYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFSZXBsaWNhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFXUyBMYW1iZGEgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTGFtYmRhIHRvIGRlc2NyaWJlIGFuZCB0ZXJtaW5hdGUgbWFuYWdlZCBpbnN0YW5jZXMgZnJvbSBFQzIgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVjZWl2ZSBtZXNzYWdlLCBkZWxldGUgbWVzc2FnZSwgYW5kIHJlYWQgYXR0cmlidXRlIGFjY2VzcyB0byBTUVMgcXVldWVzLCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBsb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFTUVNRdWV1ZUV4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhU1FTUXVldWVFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWluaW11bSBwZXJtaXNzaW9ucyBmb3IgYSBMYW1iZGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGlsZSBhY2Nlc3NpbmcgYSByZXNvdXJjZSB3aXRoaW4gYSBWUEMgLSBjcmVhdGUsIGRlc2NyaWJlLCBkZWxldGUgbmV0d29yayBpbnRlcmZhY2VzIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhVlBDQWNjZXNzRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbG93IGFjY2VzcyB0byB0aGUgQVdTIExpY2Vuc2UgTWFuYWdlciBBUEkgYWN0aW9ucyByZXF1aXJlZCB0byBjb25zdW1lIHVwb24gbGljZW5zZXMgdGhhdCB0aGUgdXNlciBoYXMgZW50aXRsZW1lbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlckNvbnN1bXB0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyQ29uc3VtcHRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExpY2Vuc2UgTWFuYWdlciBMaW51eCBTdWJzY3JpcHRpb25zIFNlcnZpY2UgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTGljZW5zZU1hbmFnZXJMaW51eFN1YnNjcmlwdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMaWNlbnNlTWFuYWdlckxpbnV4U3Vic2NyaXB0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIExpY2Vuc2UgTWFuYWdlciBzZXJ2aWNlIG1hc3RlciBhY2NvdW50IHJvbGUgcG9saWN5ICovXG4gICAgcHVibGljIEFXU0xpY2Vuc2VNYW5hZ2VyTWFzdGVyQWNjb3VudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGljZW5zZU1hbmFnZXJNYXN0ZXJBY2NvdW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBMaWNlbnNlIE1hbmFnZXIgc2VydmljZSBtZW1iZXIgYWNjb3VudCByb2xlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlck1lbWJlckFjY291bnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyTWVtYmVyQWNjb3VudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTGljZW5zZSBNYW5hZ2VyIHNlcnZpY2UgZGVmYXVsdCByb2xlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExpY2Vuc2UgTWFuYWdlciBVc2VyIFN1YnNjcmlwdGlvbnMgU2VydmljZSB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlclVzZXJTdWJzY3JpcHRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGljZW5zZU1hbmFnZXJVc2VyU3Vic2NyaXB0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNMiB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTTJTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU00yU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFuYWdlZCBTZXJ2aWNlcyB0byByZWFkIHRoZSB2YWx1ZXMgb2YgdGhlIHRhZ3Mgb24gQVdTIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNDb250YWN0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRTZXJ2aWNlc0NvbnRhY3RzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTWFuYWdlZCBTZXJ2aWNlcyAtIHBvbGljeSB0byBtYW5hZ2UgZGV0ZWN0aXZlIGNvbnRyb2xzIGluZnJhc3RydWN0dXJlICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXJ2aWNlc0RldGVjdGl2ZUNvbnRyb2xzQ29uZmlnU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZFNlcnZpY2VzRGV0ZWN0aXZlQ29udHJvbHNDb25maWdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBNYW5hZ2VkIFNlcnZpY2VzIHBvbGljeSB0byBlbmFibGUgQU1TIGV2ZW50IHByb2Nlc3NvciBmZWF0dXJlLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24ncyBBV1MgTWFuYWdlZCBTZXJ2aWNlJ3MgU2VsZiBTZXJ2aWNlIFJlcG9ydGluZyBmZWF0dXJlIHRvIHJlYWQgQVdTIE9yZ2FuaXphdGlvbiBkYXRhIG9uIHlvdXIgYmVoYWxmIHRvIGVuYWJsZSBvcmdhbml6YXRpb24gbGV2ZWwgYWdncmVnYXRlZCByZXBvcnRpbmcgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZFNlcnZpY2VzU2VsZlNlcnZpY2VSZXBvcnRpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNTZWxmU2VydmljZVJlcG9ydGluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNYW5hZ2VkIFNlcnZpY2VzIHRvIG1hbmFnZSBkZXBsb3ltZW50IHRvb2xraXQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXJ2aWNlc0RlcGxveW1lbnRUb29sa2l0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRTZXJ2aWNlc0RlcGxveW1lbnRUb29sa2l0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gY29uZmlndXJlIGFuZCBjdXN0b21pemUgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlbWVudENvbnNvbGVBZG1pbmlzdHJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZW1lbnRDb25zb2xlQWRtaW5pc3RyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2Nlc3MgdG8gZXNzZW50aWFsIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgZmVhdHVyZXMgYW5kIHVzZXIgZXhwZXJpZW5jZSAoVVgpIGNhcGFiaWxpdGllcyBmb3Igbm9uLWFkbWluaXN0cmF0aXZlIHVzZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VtZW50Q29uc29sZUJhc2ljVXNlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VtZW50Q29uc29sZUJhc2ljVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFya2V0cGxhY2UgdG8gY29weSB5b3VyIEFtYXpvbiBNYWNoaW5lIEltYWdlcyAoQU1JcykgaW4gb3JkZXIgdG8gbGlzdCB0aGVtIG9uIEFXUyBNYXJrZXRwbGFjZSAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZUFtaUluZ2VzdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZUFtaUluZ2VzdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFya2V0cGxhY2UgdG8gY3JlYXRlIGFuZCBtYW5hZ2Ugc2VsbGVyIGRlcGxveW1lbnQgcGFyYW1ldGVycyBmb3IgdGhlIHByb2R1Y3RzIHRoYXQgeW91IHN1YnNjcmliZSB0byBvbiBBV1MgTWFya2V0cGxhY2UuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlRGVwbG95bWVudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlRGVwbG95bWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gc3Vic2NyaWJlIGFuZCB1bnN1YnNjcmliZSB0byBBV1MgTWFya2V0cGxhY2Ugc29mdHdhcmUsIGFsbG93cyB1c2VycyB0byBtYW5hZ2UgTWFya2V0cGxhY2Ugc29mdHdhcmUgaW5zdGFuY2VzIGZyb20gdGhlIE1hcmtldHBsYWNlICdZb3VyIFNvZnR3YXJlJyBwYWdlLCBhbmQgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEVDMi4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIHRvIEFXUyBNYXJrZXRwbGFjZSBFbnRpdGxlbWVudHMgKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VHZXRFbnRpdGxlbWVudHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VHZXRFbnRpdGxlbWVudHMpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1hcmtldHBsYWNlIGZvciBsaWNlbnNlIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlTGljZW5zZU1hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZUxpY2Vuc2VNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzdWJzY3JpYmUgYW5kIHVuc3Vic2NyaWJlIHRvIEFXUyBNYXJrZXRwbGFjZSBzb2Z0d2FyZSAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZU1hbmFnZVN1YnNjcmlwdGlvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VNYW5hZ2VTdWJzY3JpcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1ldGVyaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZU1ldGVyaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZU1ldGVyaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIHJlZ2lzdGVyIGEgcmVzb3VyY2UgYW5kIHRyYWNrIHVzYWdlIHRocm91Z2ggQVdTIE1hcmtldHBsYWNlIE1ldGVyaW5nIFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlTWV0ZXJpbmdSZWdpc3RlclVzYWdlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlTWV0ZXJpbmdSZWdpc3RlclVzYWdlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgZm9yIGFuIEFXUyBNYXJrZXRwbGFjZSBlUHJvY3VyZW1lbnQgaW50ZWdyYXRpb24uICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlUHJvY3VyZW1lbnRTeXN0ZW1BZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VQcm9jdXJlbWVudFN5c3RlbUFkbWluRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIGZvciBBV1MgTWFya2V0cGxhY2Ugc2VydmljZXMgdG8gcHVyY2hhc2Ugb3JkZXIgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VQdXJjaGFzZU9yZGVyc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUHVyY2hhc2VPcmRlcnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHJldmlldyBBV1MgTWFya2V0cGxhY2Ugc3Vic2NyaXB0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1hcmtldHBsYWNlIGZvciBSZXNhbGUgQXV0aG9yaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VSZXNhbGVBdXRob3JpemF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VSZXNhbGVBdXRob3JpemF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgc2VsbGVyIG9wZXJhdGlvbnMgb24gdGhlIEFXUyBNYXJrZXRwbGFjZSBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQU1JIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlU2VsbGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBzZWxsZXJzIGFjY2VzcyB0byBPZmZlcnMgYW5kIEFncmVlbWVudHMgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVNlbGxlck9mZmVyTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlck9mZmVyTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHNlbGxlcnMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1hbmFnZW1lbnQgUHJvZHVjdHMgcGFnZSBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQU1JIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBzZWxsZXJzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1hbmFnZW1lbnQgUHJvZHVjdHMgcGFnZS4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VTZWxsZXJQcm9kdWN0c1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBNQ1Agc2VydmljZSBhY3Rpb25zLiBUaGlzIHBvbGljeSBkb2VzIG5vdCBncmFudCBhY2Nlc3MgdG8gdGhlIGFjdGlvbnMgdGFrZW4gYnkgdGhlIE1DUCwgb25seSB0aGUgTUNQIGFjdGlvbnMgdGhlbXNlbHZlcy4gKi9cbiAgICBwdWJsaWMgQVdTTWNwU2VydmljZUFjdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01jcFNlcnZpY2VBY3Rpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBkZWZhdWx0IHBvbGljeSB0aGF0IGVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBNZWRpYUNvbm5lY3QuICovXG4gICAgcHVibGljIEFXU01lZGlhQ29ubmVjdFNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWVkaWFDb25uZWN0U2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBNZWRpYUxpdmUgQW55d2hlcmUgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTWVkaWFMaXZlQW55d2hlcmVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNZWRpYUxpdmVBbnl3aGVyZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBNZWRpYVRhaWxvciAqL1xuICAgIHB1YmxpYyBBV1NNZWRpYVRhaWxvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01lZGlhVGFpbG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgYWxsb3dzIEFXU01pZ3JhdGlvbkh1YlNlcnZpY2UgdG8gY2FsbCBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeVNlcnZpY2Ugb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViRGlzY292ZXJ5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YkRpc2NvdmVyeUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgRGF0YWJhc2UgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJETVNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViRE1TQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogTWFuYWdlZCBwb2xpY3kgdG8gcHJvdmlkZSB0aGUgY3VzdG9tZXIgYWNjZXNzIHRvIHRoZSBNaWdyYXRpb24gSHViIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gQVdTIE1pZ3JhdGlvbiBIdWIsIEFXUyBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSwgQW1hem9uIFNpbXBsZSBTdG9yYWdlIFNlcnZpY2UgYW5kIEFXUyBTZWNyZXRzIE1hbmFnZXIuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNaWdyYXRpb24gSHViIE9yY2hlc3RyYXRvciBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IG5lZWRzIHRvIGJlIGF0dGFjaGVkIGZvciBTQVAgYW5kIE1HTiBtaWdyYXRlZCBpbnN0YW5jZSBmb3Igb3VyIHNlcnZpY2UgdG8gb3JjaGVzdHJhdGUgaW5zdGFuY2VzIGJ5IGRvd25sb2FkaW5nIHNjcmlwdHMgZnJvbSBTMyBhbmQgdG8gZmV0Y2ggc2VjcmV0IHZhbHVlcyBpbnNpZGUgRUMyIGluc3RhbmNlLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JJbnN0YW5jZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9ySW5zdGFuY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gQW1hem9uIFNpbXBsZSBTdG9yYWdlIFNlcnZpY2UsIEFXUyBTZWNyZXRzIE1hbmFnZXIgYW5kIFBsdWdpbiByZWxhdGVkIGFjdGlvbnMgZm9yIEFXUyBNaWdyYXRpb24gSHViIE9yY2hlc3RyYXRvci4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9yUGx1Z2luKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvclBsdWdpbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgTWlncmF0aW9uIEh1YiBPcmNoZXN0cmF0b3IgdG8gbWlncmF0ZSBhbmQgbW9kZXJuaXplIHlvdXIgb24tcHJlbWlzZXMgd29ya2xvYWRzICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNaWdyYXRpb24gSHViIFJlZmFjdG9yIFNwYWNlcyBhbmQgb3RoZXIgQVdTIHJlbGF0ZWQgc2VydmljZXMgZXhjZXB0IEFXUyBUcmFuc2l0IEdhdGV3YXkgYW5kIEVDMiBzZWN1cml0eSBncm91cHMgbm90IHJlcXVpcmVkIHdoZW4gdXNpbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgYSBuZXR3b3JrIGJyaWRnZS4gVGhpcyBwb2xpY3kgYWxzbyBleGNsdWRlcyBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgQVdTIExhbWJkYSBhbmQgQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyIGFzIHRoZXkgY2FuIGJlIHNjb3BlZCBkb3duIGJhc2VkIG9uIHRhZ3MuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzRW52aXJvbm1lbnRzV2l0aG91dEJyaWRnZXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzRW52aXJvbm1lbnRzV2l0aG91dEJyaWRnZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVXNlIGluIHRoZSBJQU0gc2VydmljZSByb2xlIHBhc3NlZCB0byB0aGUgU1NNIEF1dG9tYXRpb24gZG9jdW1lbnQgQVdTUmVmYWN0b3JTcGFjZXMtQ3JlYXRlUmVzb3VyY2VzIHRvIGdyYW50IHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHJ1biB0aGUgYXV0b21hdGlvbi4gVGhlIHBvbGljeSBncmFudHMgcmVhZC93cml0ZSBhY2Nlc3MgdG8gRUMyIHRhZ3MgaW4gb3JkZXIgdG8gdHJhY2sgYXV0b21hdGlvbiBwcm9ncmVzcy4gV2hlbiB0aGUgUmVmYWN0b3IgU3BhY2VzIGVudmlyb25tZW50J3MgbmV0d29yayBicmlkZ2UgaXMgZW5hYmxlZCwgdGhlIGF1dG9tYXRpb24gYWxzbyBhZGRzIHRoZSBlbnZpcm9ubWVudCdzIHNlY3VyaXR5IGdyb3VwIHRvIHRoZSBFQzIgaW5zdGFuY2UgdG8gcGVybWl0IHRyYWZmaWMgZnJvbSBvdGhlciBSZWZhY3RvciBTcGFjZXMgc2VydmljZXMgaW4gdGhlIGVudmlyb25tZW50LiBUaGUgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byB0aGUgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UncyBwb3N0IGxhdW5jaCBhY3Rpb25zIFNTTSBwYXJhbWV0ZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc1NTTUF1dG9tYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNTU01BdXRvbWF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNaWdyYXRpb25IdWIgUmVmYWN0b3IgU3BhY2VzLCBBV1MgTWlncmF0aW9uSHViIFJlZmFjdG9yIFNwYWNlcyBjb25zb2xlIGZlYXR1cmVzIGFuZCBvdGhlciByZWxhdGVkIEFXUyBzZXJ2aWNlcyBleGNlcHQgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIEFXUyBMYW1iZGEgYW5kIEFXUyBSZXNvdXJjZSBBY2Nlc3MgTWFuYWdlciBhcyB0aGV5IGNhbiBiZSBzY29wZWQgZG93biBiYXNlZCBvbiB0YWdzLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IEFXUyBNaWdyYXRpb24gSHViIFJlZmFjdG9yIFNwYWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJTTVNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViU01TQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIGFsbG93IGNvbW11bmljYXRpb24gd2l0aCB0aGUgQVdTIE1pZ3JhdGlvbiBIdWIgU3RyYXRlZ3kgUmVjb21tZW5kYXRpb25zIHNlcnZpY2UsIHJlYWQvd3JpdGUgYWNjZXNzIHRvIFMzIGJ1Y2tldHMgcmVsYXRlZCB0byB0aGUgc2VydmljZSwgQW1hem9uIEFQSSBHYXRld2F5IGFjY2VzcyB0byB1cGxvYWQgbG9ncyBhbmQgbWV0cmljcyB0byBBV1MsIEFXUyBTZWNyZXRzIE1hbmFnZXIgYWNjZXNzIHRvIGZldGNoIGNyZWRlbnRpYWxzLCBhbmQgYW55IHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5Q29sbGVjdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5Q29sbGVjdG9yKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgTWlncmF0aW9uIEh1YiBTdHJhdGVneSBSZWNvbW1lbmRhdGlvbnMgc2VydmljZSBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIHNlcnZpY2VzIHRocm91Z2ggdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5Q29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZSBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1pZ3JhdGlvbiBIdWIgU3RyYXRlZ3kgUmVjb21tZW5kYXRpb25zIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBbWF6b24gTVNLIFJlcGxpY2F0b3IgdG8gcmVwbGljYXRlIGRhdGEgYmV0d2VlbiBNU0sgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFXU01TS1JlcGxpY2F0b3JFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01TS1JlcGxpY2F0b3JFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIFZQQyByZXNvdXJjZXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIE5BVCBHYXRld2F5cy4gKi9cbiAgICBwdWJsaWMgQVdTTkFUR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05BVEdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgTmV0d29yayBGaXJld2FsbCBzZXJ2aWNlLCBpbmNsdWRpbmcgcGVybWlzc2lvbnMgdG8gY3JlYXRlLCBjb25maWd1cmUsIG1hbmFnZSwgYW5kIGRlbGV0ZSBmaXJld2FsbCByZXNvdXJjZXMsIHBvbGljaWVzLCBhbmQgcnVsZSBncm91cHMuIEFkZGl0aW9uYWxseSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBtb2RpZnkgVlBDIGVuZHBvaW50cywgUzMgYnVja2V0IHBvbGljaWVzLCBDbG91ZFdhdGNoIExvZ3MgY29uZmlndXJhdGlvbnMsIGFuZCBjcmVhdGUgc2VydmljZS1saW5rZWQgcm9sZXMgZm9yIE5ldHdvcmsgRmlyZXdhbGwgYW5kIGxvZyBkZWxpdmVyeSBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrRmlyZXdhbGxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtGaXJld2FsbEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBOZXR3b3JrIEZpcmV3YWxsIHJlc291cmNlcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUsIENMSSwgYW5kIFNES3MuIFRoaXMgcG9saWN5IGFsbG93cyB1c2VycyB0byB2aWV3IGFuZCBtb25pdG9yIGZpcmV3YWxsIGNvbmZpZ3VyYXRpb25zLCBwb2xpY2llcywgcnVsZSBncm91cHMsIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcywgd2l0aG91dCB0aGUgYWJpbGl0eSB0byBtYWtlIGNoYW5nZXMuICovXG4gICAgcHVibGljIEFXU05ldHdvcmtGaXJld2FsbFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtGaXJld2FsbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQVdTTmV0d29ya0ZpcmV3YWxsIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIG5lY2Vzc2FyeSByZXNvdXJjZXMgZm9yIHlvdXIgRmlyZXdhbGxzLiAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrRmlyZXdhbGxTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrRmlyZXdhbGxTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IE5ldHdvcmtNYW5hZ2VyIHRvIGFjY2VzcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHlvdXIgQ29yZSBOZXR3b3JrICovXG4gICAgcHVibGljIEFXU05ldHdvcmtNYW5hZ2VyQ2xvdWRXQU5TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrTWFuYWdlckNsb3VkV0FOU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTmV0d29ya01hbmFnZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrTWFuYWdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya01hbmFnZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTmV0d29ya01hbmFnZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrTWFuYWdlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtNYW5hZ2VyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBOZXR3b3JrTWFuYWdlciB0byBhY2Nlc3MgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB5b3VyIEdsb2JhbCBOZXR3b3JrcyAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlLWxpbmtlZCByb2xlIHBlcm1pc3Npb25zIGZvciBDbG91ZFdhdGNoIExvZ3MgY2VudHJhbGl6YXRpb24gKi9cbiAgICBwdWJsaWMgQVdTT2JzZXJ2YWJpbGl0eUFkbWluTG9nc0NlbnRyYWxpemF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT2JzZXJ2YWJpbGl0eUFkbWluTG9nc0NlbnRyYWxpemF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIEFXUyBDb25maWcgQ29uZmlndXJhdGlvbiBSZWNvcmRlciwgbWFuYWdlIEFXUyBDb25maWcgQ29uZmlndXJhdGlvbiBBZ2dyZWdhdG9yLCBjcmVhdGUgQVdTIENvbmZpZyBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBDb25maWd1cmF0aW9uIFJlY29yZGVyIGZ1bmN0aW9uYWxpdHksIGNvbnN1bWUgcmVjb3JkZXIgY29uZmlndXJhdGlvbiBkYXRhLCBhbmQgcmVhZCBBV1MgT3JnYW5pemF0aW9ucyBkYXRhIGZvciBvcmdhbml6YXRpb25hbCBmZWF0dXJlcy4gKi9cbiAgICBwdWJsaWMgQVdTT2JzZXJ2YWJpbGl0eUFkbWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT2JzZXJ2YWJpbGl0eUFkbWluU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIEFXUyBDb25maWcgcmVjb3JkZXIgcmVzb3VyY2UgYW5kIHRlbGVtZXRyeSBzZXR0aW5ncyBvbiBBV1MgcmVzb3VyY2VzIGluY2x1ZGluZyBsb2dzLCBtZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBBV1NPYnNlcnZhYmlsaXR5QWRtaW5UZWxlbWV0cnlFbmFibGVtZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT2JzZXJ2YWJpbGl0eUFkbWluVGVsZW1ldHJ5RW5hYmxlbWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIE9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFXU09yZ2FuaXphdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09yZ2FuaXphdGlvbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgT3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTT3JnYW5pemF0aW9uc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09yZ2FuaXphdGlvbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgcG9saWN5IHRvIGFsbG93IEFXUyBPcmdhbml6YXRpb25zIHRvIHNoYXJlIHRydXN0IHdpdGggb3RoZXIgYXBwcm92ZWQgQVdTIFNlcnZpY2VzIGZvciB0aGUgcHVycG9zZSBvZiBzaW1wbGlmeWluZyBjdXN0b21lciBjb25maWd1cmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NPcmdhbml6YXRpb25zU2VydmljZVRydXN0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09yZ2FuaXphdGlvbnNTZXJ2aWNlVHJ1c3RQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyB5b3UgdG8gaW5zdGFsbCBhbiBPdXRwb3N0IHNlcnZlciBvbiB5b3VyIG9uLXByZW1pc2VzIG5ldHdvcmsuICovXG4gICAgcHVibGljIEFXU091dHBvc3RzQXV0aG9yaXplU2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU091dHBvc3RzQXV0aG9yaXplU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBMaW5rZWQgUm9sZSBwb2xpY3kgdG8gZW5hYmxlIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG1hbmFnZWQgYnkgQVdTIE91dHBvc3RzICovXG4gICAgcHVibGljIEFXU091dHBvc3RzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT3V0cG9zdHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSW9UIHNvZnR3YXJlIG9uIGFuIEFXUyBQYW5vcmFtYSBBcHBsaWFuY2UgdG8gdXBsb2FkIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hQXBwbGlhbmNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYUFwcGxpYW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYW4gQVdTIFBhbm9yYW1hIEFwcGxpYW5jZSB0byB1cGxvYWQgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCwgYW5kIHRvIGdldCBvYmplY3RzIGZyb20gQW1hem9uIFMzIGFjY2VzcyBwb2ludHMgY3JlYXRlZCBmb3IgdXNlIHdpdGggQVdTIFBhbm9yYW1hLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYUFwcGxpYW5jZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hQXBwbGlhbmNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUGFub3JhbWEgKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIG9uIGFuIEFXUyBQYW5vcmFtYSBBcHBsaWFuY2UgdG8gbWFuYWdlIHJlc291cmNlcyBpbiBQYW5vcmFtYSwgdXBsb2FkIGxvZ3MgYW5kIG1ldHJpY3MgdG8gQW1hem9uIENsb3VkV2F0Y2gsIGFuZCB0byBtYW5hZ2Ugb2JqZWN0cyBpbiBidWNrZXRzIGNyZWF0ZWQgZm9yIHVzZSB3aXRoIFBhbm9yYW1hLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYUdyZWVuZ3Jhc3NHcm91cFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFHcmVlbmdyYXNzR3JvdXBSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBTYWdlTWFrZXIgdG8gbWFuYWdlIG9iamVjdHMgaW4gYnVja2V0cyBjcmVhdGVkIGZvciB1c2Ugd2l0aCBBV1MgUGFub3JhbWEuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hU2FnZU1ha2VyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYVNhZ2VNYWtlclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFBhbm9yYW1hIHRvIG1hbmFnZSByZXNvdXJjZXMgaW4gQVdTIElvVCwgQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgQVdTIFBhbm9yYW1hLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYVNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFBhbm9yYW1hIHRvIG1hbmFnZSByZXNvdXJjZXMgaW4gQW1hem9uIFMzLCBBV1MgSW9ULCBBV1MgSW9UIEdyZWVuR3Jhc3MsIEFXUyBMYW1iZGEsIEFtYXpvbiBTYWdlTWFrZXIsIGFuZCBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzLCBhbmQgdG8gcGFzcyBzZXJ2aWNlIHJvbGVzIHRvIEFXUyBJb1QsIEFXUyBJb1QgR3JlZW5HcmFzcywgYW5kIEFtYXpvbiBTYWdlTWFrZXIuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG5lY2Vzc2FyeSBhY2Nlc3MgZm9yIGNoYW5uZWwgaGFuZHNoYWtlIGFwcHJvdmFsIG1hbmFnZW1lbnQgYWN0aXZpdGllcy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lckNlbnRyYWxDaGFubmVsSGFuZHNoYWtlQXBwcm92YWxNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsQ2hhbm5lbEhhbmRzaGFrZUFwcHJvdmFsTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG5lY2Vzc2FyeSBhY2Nlc3MgZm9yIGNoYW5uZWwgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbENoYW5uZWxNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsQ2hhbm5lbE1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUGFydG5lciBDZW50cmFsIGFuZCByZWxhdGVkIEFXUyBTZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lckNlbnRyYWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG5lY2Vzc2FyeSBhY2Nlc3MgZm9yIG1hcmtldGluZyBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbE1hcmtldGluZ01hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxNYXJrZXRpbmdNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbmVjZXNzYXJ5IGFjY2VzcyBmb3Igb3Bwb3J0dW5pdHkgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbE9wcG9ydHVuaXR5TWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYXJ0bmVyQ2VudHJhbE9wcG9ydHVuaXR5TWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG5lY2Vzc2FyeSBhY2Nlc3MgZm9yIGRldmVsb3BlciB0ZXN0aW5nIGluIHRoZSBTYW5kYm94IGNhdGFsb2cuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsU2FuZGJveEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxTYW5kYm94RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgUmVzb3VyY2VTbmFwc2hvdEpvYiB0byByZWFkIGEgcmVzb3VyY2UgYW5kIHNuYXBzaG90IGl0IGluIHRoZSB0YXJnZXQgZW5nYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lckNlbnRyYWxTZWxsaW5nUmVzb3VyY2VTbmFwc2hvdEpvYkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxTZWxsaW5nUmVzb3VyY2VTbmFwc2hvdEpvYkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBjYW4gYmUgdXNlZCB0byBncmFudCByZWFkLW9ubHkgYWNjZXNzIHRvIEFQSXMgdGhhdCBjYW4gcmVhZCBzZXJ2aWNlIG1ldGFkYXRhIGZvciBzZXJ2aWNlcyBpbiB5b3VyIEFXUyBhY2NvdW50LiBZb3UgY2FuIHVzZSB0aGlzIHBvbGljeSB0byBwcm92aWRlIHlvdXIgcGFydG5lcnMgaW4gdGhlIFBhcnRuZXItTGVkIFN1cHBvcnQgUHJvZ3JhbSB3aXRoIGFjY2VzcyB0byB0aGUgc2VydmljZXMgc3BlY2lmaWVkIGluIHRoZSBwZXJtaXNzaW9ucyBkZXRhaWxzIHNlY3Rpb24gYmVsb3cuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJMZWRTdXBwb3J0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckxlZFN1cHBvcnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFByb1NlcnZlIHRvb2xzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyUHJvU2VydmVUb29sc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lclByb1NlcnZlVG9vbHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIG93biBhc3Nlc3NtZW50cyBpbiBQcm9TZXJ2ZSB0b29scy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lclByb1NlcnZlVG9vbHNJbmRpdmlkdWFsQ29udHJpYnV0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lclByb1NlcnZlVG9vbHNJbmRpdmlkdWFsQ29udHJpYnV0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIGFjY2VzcyB0byBvcmdhbml6YXRpb25hbCBhc3Nlc3NtZW50cyB3aXRoIGFiaWxpdHkgdG8gbWFuYWdlIG93biBhc3Nlc3NtZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lclByb1NlcnZlVG9vbHNPcmdhbml6YXRpb25SZWFkZXJJbmRpdmlkdWFsQ29udHJpYnV0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lclByb1NlcnZlVG9vbHNPcmdhbml6YXRpb25SZWFkZXJJbmRpdmlkdWFsQ29udHJpYnV0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbiB0byBBV1MgUENTIGNvbXB1dGUgbm9kZXMgdG8gY29ubmVjdCB0byBBV1MgUENTIGNsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NQQ1NDb21wdXRlTm9kZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQQ1NDb21wdXRlTm9kZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBQQ1MgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUENTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUENTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUHJpY2UgTGlzdCBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NQcmljZUxpc3RTZXJ2aWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcmljZUxpc3RTZXJ2aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGF1ZGl0b3IgYWNjZXNzIHRvIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FBdWRpdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQUF1ZGl0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZXNzZW50aWFsIHBlcm1pc3Npb25zIGZvciB0aGUgQVdTIFByaXZhdGUgQ0EgQ29ubmVjdG9yIGZvciBLdWJlcm5ldGVzLiAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FDb25uZWN0b3JGb3JLdWJlcm5ldGVzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQUNvbm5lY3RvckZvckt1YmVybmV0ZXNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcHJpdmlsZWdlZCBjZXJ0aWZpY2F0ZSB1c2VyIGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBUHJpdmlsZWdlZFVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZUNBUHJpdmlsZWdlZFVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNlcnRpZmljYXRlIHVzZXIgYWNjZXNzIHRvIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQVVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgYWRtaW5pc3RyYXRpdmUgYWN0aW9ucyBmb3IgYW4gQVdTIFByaXZhdGUgTWFya2V0cGxhY2UuICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVNYXJrZXRwbGFjZUFkbWluRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlTWFya2V0cGxhY2VBZG1pbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gY3JlYXRpbmcgcmVxdWVzdHMgaW4gYW4gQVdTIFByaXZhdGUgTWFya2V0cGxhY2UuICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVNYXJrZXRwbGFjZVJlcXVlc3RzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVNYXJrZXRwbGFjZVJlcXVlc3RzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBQcml2YXRlIE5ldHdvcmtzIFNlcnZpY2UgdG8gbWFuYWdlIHJlc291cmNlcyBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyLiAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlTmV0d29ya3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlTmV0d29ya3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIENvZGVCdWlsZCBuZWVkcyB0byBydW4gYSBidWlsZCBmb3IgQVdTIFByb3RvbiBDb2RlQnVpbGQgUHJvdmlzaW9uaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdCYXNpY0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdCYXNpY0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgUHJvdG9uIHRvIG1hbmFnZSBQcm90b24gcmVzb3VyY2UgcHJvdmlzaW9uaW5nIHVzaW5nIENvZGVCdWlsZCBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgQVdTIFByb3RvbiBBUElzIGFuZCBNYW5hZ2VtZW50IENvbnNvbGUsIGJ1dCBkb2VzIG5vdCBhbGxvdyBhZG1pbmlzdHJhdGlvbiBvZiBQcm90b24gdGVtcGxhdGVzIG9yIGVudmlyb25tZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uRGV2ZWxvcGVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvbkRldmVsb3BlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgUHJvdG9uIEFQSXMgYW5kIE1hbmFnZW1lbnQgQ29uc29sZS4gSW4gYWRkaXRpb24gdG8gdGhlc2UgcGVybWlzc2lvbnMsIGFjY2VzcyB0byBBbWF6b24gUzMgaXMgYWxzbyBuZWVkZWQgdG8gcmVnaXN0ZXIgdGVtcGxhdGUgYnVuZGxlcyBmcm9tIHlvdXIgUzMgYnVja2V0cywgYXMgd2VsbCBhcyBhY2Nlc3MgdG8gQW1hem9uIElBTSB0byBjcmVhdGUgYW5kIG1hbmFnZSB0aGUgc2VydmljZSByb2xlcyBmb3IgUHJvdG9uLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgUHJvdG9uIEFQSXMgYW5kIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgd2hpY2ggYWxsb3dzIEFXUyBQcm90b24gdG8gc3luYyB5b3VyIHNlcnZpY2UsIGVudmlyb25tZW50IGFuZCBjb21wb25lbnQgZGVmaW5pdGlvbnMgZnJvbSB5b3VyIGdpdCByZXBvc2l0b3J5IHRvIEFXUyBQcm90b24uICovXG4gICAgcHVibGljIEFXU1Byb3RvblNlcnZpY2VHaXRTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uU2VydmljZUdpdFN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB3aGljaCBhbGxvd3MgQVdTIFByb3RvbiB0byBzeW5jIHlvdXIgZ2l0IHJlcG9zaXRvcnkgY29udGVudHMgdG8gUHJvdG9uIG9yIHN5bmMgUHJvdG9uIGNvbnRlbnRzIHRvIHlvdXIgZ2l0IHJlcG9zaXRvcmllcy4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uU3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvblN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byB2aWV3IGFuZCBtb2RpZnkgcHVyY2hhc2Ugb3JkZXJzIG9uIGJpbGxpbmcgY29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NQdXJjaGFzZU9yZGVyc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1B1cmNoYXNlT3JkZXJzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQVdTUXVpY2tTZXR1cENGR0NQYWNrc1Blcm1pc3Npb25zQm91bmRhcnkgcG9saWN5IGRlZmluZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGluIGFuIElBTSByb2xlIGNyZWF0ZWQgYnkgUXVpY2sgU2V0dXAuIFF1aWNrIFNldHVwIHVzZXMgYSByb2xlIGNyZWF0ZWQgd2l0aCB0aGlzIHBvbGljeSB0byBkZXBsb3kgQVdTIENvbmZpZyBjb25mb3JtYW5jZSBwYWNrcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cENGR0NQYWNrc1Blcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cENGR0NQYWNrc1Blcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgQVdTIFN5c3RlbXMgTWFuYWdlciBRdWljayBTZXR1cCB0byBkZXBsb3kgbXVsdGlwbGUgY29uZmlndXJhdGlvbiB0eXBlcy4gVGhlc2UgY29uZmlndXJhdGlvbiB0eXBlcyBjcmVhdGUgSUFNIHJvbGVzIGFuZCBhdXRvbWF0aW9ucyB0aGF0IGNvbmZpZ3VyZSBmcmVxdWVudGx5IHVzZWQgQW1hem9uIFdlYiBTZXJ2aWNlcyBzZXJ2aWNlcyBhbmQgZmVhdHVyZXMgd2l0aCByZWNvbW1lbmRlZCBiZXN0IHByYWN0aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cERlcGxveW1lbnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBEZXBsb3ltZW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBV1NRdWlja1NldHVwRGV2T3BzR3VydVBlcm1pc3Npb25zQm91bmRhcnkgcG9saWN5IGRlZmluZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGluIGFuIElBTSByb2xlIGNyZWF0ZWQgYnkgUXVpY2sgU2V0dXAuIFF1aWNrIFNldHVwIHVzZXMgYSByb2xlIGNyZWF0ZWQgd2l0aCB0aGlzIHBvbGljeSB0byBlbmFibGUgYW5kIGNvbmZpZ3VyZSBBbWF6b24gRGV2T3BzIEd1cnUuIFRoaXMgcG9saWN5IGFsc28gcHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gZW5hYmxlIFN5c3RlbXMgTWFuYWdlciBFeHBsb3Jlci4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cERldk9wc0d1cnVQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBEZXZPcHNHdXJ1UGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFF1aWNrU2V0dXAgY3JlYXRlcyBJQU0gcm9sZXMgd2hpY2ggZW5hYmxlIGl0IHRvIGNvbmZpZ3VyZSB0aGUgU3lzdGVtcyBNYW5hZ2VyIERpc3RyaWJ1dG9yIGZlYXR1cmUgb24geW91ciBiZWhhbGYsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgc3VjaCByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwRGlzdHJpYnV0b3JQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBEaXN0cmlidXRvclBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBTeXN0ZW1zIE1hbmFnZXIgdG8gcnVuIHRoZSBBV1NRdWlja1NldHVwVHlwZS1FbmFibGVBUkVYIEF1dG9tYXRpb24gcnVuYm9vaywgd2hpY2ggZW5hYmxlcyBBV1MgUmVzb3VyY2UgRXhwbG9yZXIgZm9yIHVzZSB3aXRoIFN5c3RlbXMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cEVuYWJsZUFSRVhFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cEVuYWJsZUFSRVhFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBwcmluY2lwYWxzIHRvIHJ1biB0aGUgQVdTUXVpY2tTZXR1cFR5cGUtRW5hYmxlREhNQyBBdXRvbWF0aW9uIHJ1bmJvb2ssIHdoaWNoIGVuYWJsZXMgRGVmYXVsdCBIb3N0IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cEVuYWJsZURITUNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cEVuYWJsZURITUNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgUXVpY2sgU2V0dXAgdG8gZGVwbG95IHRoZSBjb25maWd1cmF0aW9uIHR5cGUgcmVxdWlyZWQgdG8gc2V0IHVwIGp1c3QtaW4tdGltZSBub2RlIGFjY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cEpJVE5BRGVwbG95bWVudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cEpJVE5BRGVwbG95bWVudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBTeXN0ZW1zIE1hbmFnZXIgdG8gY3JlYXRlIGEgZGVmYXVsdCBJQU0gaW5zdGFuY2UgcHJvZmlsZSBmb3IgdGhlIFF1aWNrIFNldHVwIGNhcGFiaWxpdHkgYW5kIGF0dGFjaCBpdCB0byBBbWF6b24gRUMyIGluc3RhbmNlcyB0aGF0IGRvbid0IGFscmVhZHkgaGF2ZSBhbiBpbnN0YW5jZS4gcHJvZmlsZSBhdHRhY2hlZC4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cE1hbmFnZWRJbnN0YW5jZVByb2ZpbGVFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cE1hbmFnZWRJbnN0YW5jZVByb2ZpbGVFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBlbmFibGUganVzdC1pbi10aW1lIG5vZGUgYWNjZXNzIGZvciBTeXN0ZW1zIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBNYW5hZ2VKSVROQVJlc291cmNlc0V4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwTWFuYWdlSklUTkFSZXNvdXJjZXNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHBhdGNoIGJhc2VsaW5lcyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIGJ5IGFuIGFkbWluaXN0cmF0b3IgaW4gdGhlIGN1cnJlbnQgQVdTIGFjY291bnQgb3Igb3JnYW5pemF0aW9uIHVzaW5nIFF1aWNrIFNldHVwLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lCYXNlbGluZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lCYXNlbGluZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgUXVpY2sgU2V0dXAgdG8gY3JlYXRlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBwYXRjaCBwb2xpY3kgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5RGVwbG95bWVudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5RGVwbG95bWVudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBRdWlja1NldHVwIGNyZWF0ZXMgSUFNIHJvbGVzIHdoaWNoIGVuYWJsZSBpdCB0byBjb25maWd1cmUgdGhlIFN5c3RlbXMgTWFuYWdlciBQYXRjaCBNYW5hZ2VyIGZlYXR1cmUgb24geW91ciBiZWhhbGYsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgc3VjaCByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQVdTUXVpY2tTZXR1cFNjaGVkdWxlclBlcm1pc3Npb25zQm91bmRhcnkgcG9saWN5IGRlZmluZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGluIGFuIElBTSByb2xlIGNyZWF0ZWQgYnkgUXVpY2sgU2V0dXAuIFF1aWNrIFNldHVwIHVzZXMgYSByb2xlIGNyZWF0ZWQgd2l0aCB0aGlzIHBvbGljeSB0byBlbmFibGUgYW5kIGNvbmZpZ3VyZSBzY2hlZHVsZWQgb3BlcmF0aW9ucyBvbiBBbWF6b24gRUMyIGluc3RhbmNlcyBhbmQgb3RoZXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU2NoZWR1bGVyUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU2NoZWR1bGVyUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtc3Npb25zIHRoYXQgYWxsb3cgUXVpY2sgU2V0dXAgdG8gY3JlYXRlIHJlc291cmNlcyB0aGF0IGFyZSB1c2VkIGR1cmluZyB0aGUgU3lzdGVtcyBNYW5hZ2VyIG9uYm9hcmRpbmcgcHJvY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFNTTURlcGxveW1lbnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01EZXBsb3ltZW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgbGlzdGluZyBhbGwgUzMgYnVja2V0cyBpbiBhbiBhY2NvdW50OyBhbmQgZm9yIG1hbmFnaW5nIGFuZCByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGFib3V0IHNwZWNpZmljIGJ1Y2tldHMgaW4gdGhlIHByaW5jaXBhbCBhY2NvdW50IHRoYXQgYXJlIG1hbmFnZWQgdGhyb3VnaCBBV1MgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNRGVwbG95bWVudFMzQnVja2V0Um9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU1NNRGVwbG95bWVudFMzQnVja2V0Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFF1aWNrIFNldHVwIGNyZWF0ZXMgSUFNIHJvbGVzIHdoaWNoIGVuYWJsZSBpdCB0byBjb25maWd1cmUgdGhlIEhvc3QgTWFuYWdlciBRdWljayBTZXR1cCB0eXBlIG9uIHlvdXIgYmVoYWxmLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHN1Y2ggcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFNTTUhvc3RNZ210UGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU1NNSG9zdE1nbXRQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBncmFudHMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBRdWljayBTZXR1cCB0byBydW4gdGhlIGEgQVdTIENsb3VkRm9ybWF0aW9uIGN1c3RvbSByZXNvdXJjZSBvbiBsaWZlY3ljbGUgZXZlbnRzIGR1cmluZyBRdWljayBTZXR1cCBkZXBsb3ltZW50IGluIFN5c3RlbXMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFNTTUxpZmVjeWNsZU1hbmFnZW1lbnRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFNTTUxpZmVjeWNsZU1hbmFnZW1lbnRFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBTeXN0ZW1zIE1hbmFnZXIgdG8gY3JlYXRlIHByZXJlcXVpc2l0ZXMgc3VjaCBhcyBJQU0gcm9sZXMgcmVxdWlyZWQgZm9yIFN5c3RlbXMgTWFuYWdlciBvbmJvYXJkaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNTWFuYWdlUmVzb3VyY2VzRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01NYW5hZ2VSZXNvdXJjZXNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBwcmluY2lwYWxzIHRvIHJ1biB0aGUgQVdTUXVpY2tTZXR1cFR5cGUtU3RhcnRTU01Bc3NvY2lhdGlvbnMgQXV0b21hdGlvbiBydW5ib29rLCB3aGljaCBzdGFydHMgU3RhdGUgTWFuYWdlciBBc3NvY2lhdGlvbnMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTdGFydFNTTUFzc29jaWF0aW9uc0V4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU3RhcnRTU01Bc3NvY2lhdGlvbnNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbWFuYWdlZCBwb2xpY3kgQVdTUXVpY2tTZXR1cFN0YXJ0U3RvcEluc3RhbmNlc0V4ZWN1dGlvblBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgUXVpY2sgU2V0dXAgdG8gc3RhcnQgYW5kIHN0b3AgQW1hem9uIEVDMiBpbnN0YW5jZXMgb24gYSBzY2hlZHVsZS4gVGhpcyBwb2xpY3kgaXMgdXNlZCB3aXRoIHRoZSBRdWljayBTZXR1cCBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiB0eXBlLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU3RhcnRTdG9wSW5zdGFuY2VzRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTdGFydFN0b3BJbnN0YW5jZXNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgc2V0IG9mIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHBlcmZvcm0gUXVpY2tTaWdodCBBc3NldCBCdW5kbGUgRXhwb3J0IE9wZXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodEFzc2V0QnVuZGxlRXhwb3J0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRBc3NldEJ1bmRsZUV4cG9ydFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gcGVyZm9ybSBRdWlja1NpZ2h0IEFzc2V0IEJ1bmRsZSBJbXBvcnQgT3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0QXNzZXRCdW5kbGVJbXBvcnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodEFzc2V0QnVuZGxlSW1wb3J0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUXVpY2tzaWdodCBhY2Nlc3MgdG8gQXRoZW5hIEFQSSBhbmQgUzMgYnVja2V0cyB1c2VkIGZvciBBdGhlbmEgcXVlcnkgcmVzdWx0cyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja3NpZ2h0QXRoZW5hQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrc2lnaHRBdGhlbmFBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBRdWlja1NpZ2h0IHRvIGRlc2NyaWJlIHRoZSBSRFMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHREZXNjcmliZVJEUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0RGVzY3JpYmVSRFMpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBRdWlja1NpZ2h0IHRvIGRlc2NyaWJlIFJlZHNoaWZ0IHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0RGVzY3JpYmVSZWRzaGlmdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0RGVzY3JpYmVSZWRzaGlmdCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gRWxhc3RpY3NlYXJjaCByZXNvdXJjZXMgZnJvbSBBbWF6b24gUXVpY2tTaWdodCAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0RWxhc3RpY3NlYXJjaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0RWxhc3RpY3NlYXJjaFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmUgUXVpY2tTaWdodCByZWFkLW9ubHkgYWNjZXNzIHRvIElvVCBBbmFseXRpY3MgZGF0YXNldHMgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodElvVEFuYWx5dGljc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0SW9UQW5hbHl0aWNzQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgUXVpY2tTaWdodCB0byBsaXN0IElBTSBlbnRpdGllcyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0TGlzdElBTSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0TGlzdElBTSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gT3BlblNlYXJjaCByZXNvdXJjZXMgZnJvbSBBbWF6b24gUXVpY2tTaWdodCAqL1xuICAgIHB1YmxpYyBBV1NRdWlja3NpZ2h0T3BlblNlYXJjaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja3NpZ2h0T3BlblNlYXJjaFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIHJlc291cmNlcyBmcm9tIEFtYXpvbiBRdWlja1NpZ2h0ICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRTYWdlTWFrZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodFNhZ2VNYWtlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB1c2VkIGJ5IFF1aWNrU2lnaHQgdG8gY3JlYXRlIHNlY3JldHMgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgdG8gYXR0YWNoIHJlc291cmNlIHBvbGljaWVzIG9uIGV4aXN0aW5nIFF1aWNrU2lnaHQgc2VjcmV0cy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdXNlZCBieSBRdWlja1NpZ2h0IHRvIGNyZWF0ZSBzZWNyZXRzIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgYW5kIHRvIGF0dGFjaCByZXNvdXJjZSBwb2xpY2llcyBvbiBleGlzdGluZyBRdWlja1NpZ2h0IHNlY3JldHMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRTZWNyZXRzTWFuYWdlcldyaXRlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRTZWNyZXRzTWFuYWdlcldyaXRlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIFF1aWNrU2lnaHQgYWNjZXNzIHRvIEFXUyBUaW1lc3RyZWFtIEFQSXMuIEN1c3RvbWVycyBjYW4gYXR0YWNoIHRoaXMgcG9saWN5IHRvIEFXUyBRdWlja1NpZ2h0IHJvbGUgdG8gYWxsb3cgcmV0cmlldmFsIG9mIGRhdGEgYW5kIG1ldGFkYXRhLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0VGltZXN0cmVhbVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0VGltZXN0cmVhbVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgUmVhY2hhYmlsaXR5IEFuYWx5emVyIHRvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGFuZCBpbnRlZ3JhdGUgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUmVhY2hhYmlsaXR5QW5hbHl6ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZWFjaGFiaWxpdHlBbmFseXplclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gdXNlIEFXUyBzZXJ2aWNlcyB3aXRoIHRoZSBBV1MgVG9vbGtpdCBmb3IgLk5FVCBSZWZhY3RvcmluZyBleHRlbnNpb24gZm9yIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBJdCBpcyBpbnRlbmRlZCB0byBiZSBhdHRhY2hlZCB0byBhIGxvY2FsIEFXUyBwcm9maWxlLiBUaGUgcG9saWN5IGFsbG93cyB1cGxvYWRpbmcgYXBwbGljYXRpb24gYXJ0aWZhY3RzIGFuZCBkb3dubG9hZGluZyB0aGUgcmVzdWx0aW5nIGFydGlmYWN0cyBmcm9tIEFtYXpvbiBTMy4gSXQgYWxsb3dzIGJ1aWxkaW5nIGFwcGxpY2F0aW9ucyBpbnRvIGEgY29udGFpbmVyIGltYWdlIHVzaW5nIEFXUyBDb2RlQnVpbGQgYW5kIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgdGhlIGltYWdlcyBmcm9tIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBSZWdpc3RyeSAoQW1hem9uIEVDUikuIEFuZCBpdCBhbGxvd3MgZGVwbG95bWVudCBvZiB0aGUgYXBwbGljYXRpb24gdG8gY29udGFpbmVyIHNlcnZpY2VzIG9uIEFXUyBzdWNoIGFzIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIChBbWF6b24gRUNTKSwgb3B0aW9uYWwgY3JlYXRpb24gb2YgVlBDIHJlc291cmNlcywgb3B0aW9uYWwgY29ubmVjdGlvbiB0byBleGlzdGluZyBpbmZyYXN0cnVjdHVyZSBzdWNoIGFzIEFXUyBEaXJlY3RvcnkgU2VydmljZSwgYW5kIG90aGVyIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1JlZmFjdG9yaW5nVG9vbGtpdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVmYWN0b3JpbmdUb29sa2l0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgQW1hem9uIEVDUyBUYXNrcyBjcmVhdGVkIGZvciB0ZXN0aW5nIGFwcGxpY2F0aW9ucyBpbiBBV1MgdXNpbmcgdGhlIEFXUyBUb29sa2l0IGZvciAuTkVUIFJlZmFjdG9yaW5nIGV4dGVuc2lvbiBmb3IgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uIFRoZSBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byBkb3dubG9hZCBhcHBsaWNhdGlvbiBhcnRpZmFjdHMgZnJvbSBBbWF6b24gUzMsIGNvbW11bmljYXRlIHRoZSBzdGF0dXMgb2YgdGhlIFRhc2sgdXNpbmcgQVdTIFN5c3RlbXMgTWFuYWdlciwgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NSZWZhY3RvcmluZ1Rvb2xraXRTaWRlY2FyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JlZmFjdG9yaW5nVG9vbGtpdFNpZGVjYXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZTpQb3N0IFByaXZhdGUgYWNjZXNzIHRvIHB1Ymxpc2ggQ2xvdWRXYXRjaCBtZXRyaWNzIGRhdGEgKi9cbiAgICBwdWJsaWMgQVdTcmVQb3N0UHJpdmF0ZUNsb3VkV2F0Y2hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTcmVQb3N0UHJpdmF0ZUNsb3VkV2F0Y2hBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIHJlOlBvc3QgU3BhY2Ugc2VydmljZSB0byBjcmVhdGUsIG1hbmFnZSwgYW5kIHJlc29sdmUgU3VwcG9ydCBjYXNlcyB0aGF0IGFyZSBjcmVhdGVkIHRocm91Z2ggdGhlIFNwYWNlIGFwcGxpY2F0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NSZXBvc3RTcGFjZVN1cHBvcnRPcGVyYXRpb25zUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JlcG9zdFNwYWNlU3VwcG9ydE9wZXJhdGlvbnNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBSZXNpbGllbmNlIEh1YiBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZXMgaW4gb3JkZXIgdG8gZXhlY3V0ZSBhc3Nlc3NtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NSZXNpbGllbmNlSHViQXNzc2Vzc21lbnRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzaWxpZW5jZUh1YkFzc3Nlc3NtZW50RXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIEFXU1Jlc291cmNlQWNjZXNzTWFuYWdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgQVBJcyBuZWVkZWQgYnkgYSByZXNvdXJjZSBzaGFyZSBwYXJ0aWNpcGFudC4gKi9cbiAgICBwdWJsaWMgQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyUmVzb3VyY2VTaGFyZVBhcnRpY2lwYW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlQWNjZXNzTWFuYWdlclJlc291cmNlU2hhcmVQYXJ0aWNpcGFudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIFJlYWQtb25seSBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgYWNjZXNzIHRvIGN1c3RvbWVycycgT3JnYW5pemF0aW9ucyBzdHJ1Y3R1cmUuIEl0IGFsc28gY29udGFpbnMgSUFNIHBlcm1pc3Npb25zIHRvIHNlbGYtZGVsZXRlIHRoZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgUmVzb3VyY2UgRXhwbG9yZXIgcmVzb3VyY2VzIGFuZCBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB0byBzdXBwb3J0IHRoaXMgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUV4cGxvcmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byBSZXNvdXJjZSBFeHBsb3JlciBhbmQgZ3JhbnRzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0byBvdGhlciBBV1Mgc2VydmljZXMgdG8gc3VwcG9ydCB0aGlzIGFjY2Vzcy4gVGhlIEFXUyBPcmdhbml6YXRpb25zIGFkbWluaXN0cmF0b3IgbmVlZHMgdGhlc2UgcGVybWlzc2lvbnMgdG8gc2V0dXAgYW5kIG1hbmFnZSBtdWx0aS1hY2NvdW50IHNlYXJjaCBpbiB0aGUgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTUmVzb3VyY2VFeHBsb3Jlck9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3Jlck9yZ2FuaXphdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIHNlYXJjaCBmb3IgYW5kIHZpZXcgUmVzb3VyY2UgRXhwbG9yZXIgcmVzb3VyY2VzIGFuZCBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB0byBzdXBwb3J0IHRoaXMgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3JlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJlc291cmNlIEV4cGxvcmVyIHRvIHZpZXcgcmVzb3VyY2VzIGFuZCBDbG91ZFRyYWlsIGV2ZW50cyBvbiB5b3VyIGJlaGFsZiB0byBpbmRleCB5b3VyIHJlc291cmNlcyBmb3Igc2VhcmNoLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3JlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBpcyB0aGUgcmVhZCBvbmx5IHBvbGljeSBmb3IgQVdTIFJlc291cmNlIEdyb3VwcyAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUdyb3Vwc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlR3JvdXBzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUm9ib01ha2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBBbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIElBTSkuICovXG4gICAgcHVibGljIEFXU1JvYm9NYWtlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9ib01ha2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFJvYm9NYWtlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESyAqL1xuICAgIHB1YmxpYyBBV1NSb2JvTWFrZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2JvTWFrZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJvYm9NYWtlciBzZXJ2aWNlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NSb2JvTWFrZXJTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvYm9NYWtlclNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBSb2JvTWFrZXIgc2VydmljZSBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTUm9ib01ha2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9ib01ha2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhbGwgcGVybWlzc2lvbnMgdG8gSUFNIFJvbGVzIEFueXdoZXJlIHJlc291cmNlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogQ3JlYXRlUHJvZmlsZSwgRGVsZXRlVHJ1c3RBbmNob3IsIERpc2FibGVDUkwsIFJlc2V0Tm90aWZpY2F0aW9uU2V0dGluZ3MuICovXG4gICAgcHVibGljIEFXU1JvbGVzQW55d2hlcmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvbGVzQW55d2hlcmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIElBTSBSb2xlcyBBbnl3aGVyZSByZXNvdXJjZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IEdldFRydXN0QW5jaG9yLCBMaXN0UHJvZmlsZXMsIEdldENSTC4gVGhlcmUgd2lsbCBiZSBubyBvdGhlciBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgc2VydmljZXMgaW5jbHVkZWQgaW4gdGhpcyBwb2xpY3kuICovXG4gICAgcHVibGljIEFXU1JvbGVzQW55d2hlcmVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2xlc0FueXdoZXJlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgSUFNIFJvbGVzIEFueXdoZXJlIHRvIHB1Ymxpc2ggc2VydmljZS91c2FnZSBtZXRyaWNzIHRvIENsb3VkV2F0Y2ggYW5kIGNoZWNrIHRoZSBzdGF0dXMgb2YgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdGllcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUm9sZXNBbnl3aGVyZVNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9sZXNBbnl3aGVyZVNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBbWF6b24gUzMgb24gT3V0cG9zdHMgc2VydmljZSB0byBtYW5hZ2UgRUMyIG5ldHdvcmsgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTM09uT3V0cG9zdHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTM09uT3V0cG9zdHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFNhdmluZ3MgUGxhbnMgc2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NTYXZpbmdzUGxhbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NhdmluZ3NQbGFuc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIFNhdmluZ3MgUGxhbnMgc2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NTYXZpbmdzUGxhbnNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTYXZpbmdzUGxhbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZXRyaWV2ZSBhbmQgZGVzY3JpYmUgc2VjcmV0cyBmcm9tIFNlY3JldHMgTWFuYWdlci4gVGhpcyBwb2xpY3kgYWxzbyBhbGxvd3MgZGVjcnlwdGluZyBLTVMga2V5cyBmb3IgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldHMuICovXG4gICAgcHVibGljIEFXU1NlY3JldHNNYW5hZ2VyQ2xpZW50UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjcmV0c01hbmFnZXJDbGllbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBhdXRoZW50aWNhdGVkIHVzZXJzIHRvIGFjY2VzcyB0aGUgU2VjdXJpdHkgQWdlbnQgV2ViIEFwcGxpY2F0aW9uIGZvciBjb25maWd1cmluZyBhbmQgZXhlY3V0aW5nIGF1dG9tYXRlZCBzZWN1cml0eSBwZW5ldHJhdGlvbiB0ZXN0cy4gVGhpcyBwb2xpY3kgZW5hYmxlcyB1c2VycyB0byBtYW5hZ2UgcGVudGVzdHMsIHZpZXcgZmluZGluZ3MsIG1vbml0b3IgdGVzdCBleGVjdXRpb24sIGFuZCBpbnRlcmFjdCB3aXRoIEFXUyByZXNvdXJjZXMgcmVxdWlyZWQgZm9yIHNlY3VyaXR5IHRlc3Rpbmcgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlBZ2VudFdlYkFwcFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUFnZW50V2ViQXBwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdXNlIEFXUyBTZWN1cml0eSBIdWIuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SHViRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUh1YkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbiB0byBlbmFibGUgYW5kIG1hbmFnZSBBV1MgU2VjdXJpdHkgSHViIHdpdGhpbiBhbiBvcmdhbml6YXRpb24uIEluY2x1ZGVzIGVuYWJsaW5nIHRoZSBzZXJ2aWNlIGFjcm9zcyB0aGUgb3JnYW5pemF0aW9uLCBhbmQgZGV0ZXJtaW5pbmcgdGhlIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQgZm9yIHRoZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1Yk9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlIdWJPcmdhbml6YXRpb25zQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgU2VjdXJpdHkgSHViIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1YlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFXUyBTZWN1cml0eSBIdWIgdG8gYWNjZXNzIHlvdXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1YlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgU2VjdXJpdHkgSHViIHRvIG1hbmFnZSBBV1MgQ29uZmlnIHJ1bGVzIGFuZCBTZWN1cml0eSBIdWIgcmVzb3VyY2VzIGluIHlvdXIgb3JnYW5pemF0aW9uIGFuZCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlIdWJWMlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViVjJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBwcm92aWRlcyBjdXN0b21lcnMgd2l0aCBSZWFkIGFuZCBXcml0ZSBwZXJtaXNzaW9ucyB0byBjYXNlIHJlc291cmNlcyB0aGF0IGFyZSBjcmVhdGVkIHRocm91Z2ggdGhlIFNlY3VyaXR5IEluY2lkZW50IFJlc3BvbnNlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZUNhc2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZUNhc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHByb3ZpZGVzIGN1c3RvbWVycyB3aXRoIFJlYWQgYW5kIFdyaXRlIHBlcm1pc3Npb25zIHRvIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB0byB0aGUgU2VjdXJpdHkgSW5jaWRlbnQgUmVzcG9uc2Ugc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHByb3ZpZGVzIGN1c3RvbWVycyB3aXRoIFJlYWQtb25seSBwZXJtaXNzaW9ucyB0byBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gdGhlIFNlY3VyaXR5IEluY2lkZW50IFJlc3BvbnNlIHNlcnZpY2UuIFBlcm1pc3Npb24gaW5jbHVkZXMgYWNjZXNzIHRvIEdldENhc2VBdHRhY2htZW50RG93bmxvYWRVcmwgYXMgd2VsbCBmb3IgdGhlIGFiaWxpdHkgdG8gZ2V0IGNhc2UgYXR0YWNobWVudCBkb3dubG9hZCBVUkxzLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBTZWN1cml0eSBJbmNpZGVudCBSZXNwb25zZSAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgU2VjdXJpdHkgSW5jaWRlbnQgUmVzcG9uc2UgdG8gY29udGludW91c2x5IG1vbml0b3IgeW91ciBlbnZpcm9ubWVudCBmb3Igc2VjdXJpdHkgdGhyZWF0cywgdHVuZSBzZWN1cml0eSBzZXJ2aWNlcyB0byByZWR1Y2UgYWxlcnQgbm9pc2UsIGFuZCBnYXRoZXIgaW5mb3JtYXRpb24gdG8gaW52ZXN0aWdhdGUgcG90ZW50aWFsIGluY2lkZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlVHJpYWdlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlVHJpYWdlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBzZXJ2aWNlIGNhdGFsb2cgYWRtaW4gY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQWRtaW5GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nQWRtaW5GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBTZXJ2aWNlIENhdGFsb2cgYWRtaW4gY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQWRtaW5SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FkbWluUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBTZXJ2aWNlIENhdGFsb2cgQXBwIFJlZ2lzdHJ5IGNhcGFiaWxpdGllcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gU2VydmljZSBDYXRhbG9nIEFwcCBSZWdpc3RyeSBjYXBhYmlsaXRlcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dBcHBSZWdpc3RyeVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFNlcnZpY2UgQ2F0YWxvZyBBcHBSZWdpc3RyeSB0byBtYW5hZ2UgUmVzb3VyY2UgR3JvdXBzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBzZXJ2aWNlIGNhdGFsb2cgZW5kdXNlciBjYXBhYmlsaXRpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dFbmRVc2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0VuZFVzZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBTZXJ2aWNlIENhdGFsb2cgZW5kLXVzZXIgY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nRW5kVXNlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nRW5kVXNlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQSBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIFNlcnZpY2VDYXRhbG9nIHRvIHN5bmMgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvcmdhbml6YXRpb24gc3RydWN0dXJlICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nT3Jnc0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dPcmdzRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEEgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQVdTIFNlcnZpY2VDYXRhbG9nIHRvIHN5bmMgUHJvdmlzaW9uaW5nIEFydGlmYWN0cyBmcm9tIHNvdXJjZSByZXBvc2l0b3JpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIFNlcnZpY2UgTGlua2VkIFJvbGUgcHJvdmlkZXMgQUlEZXZPcHMgYWJpbGl0eSB0byBwcm92aWRlIHVzYWdlIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckFJRGV2T3BzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQUlEZXZPcHNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgbWFuYWdpbmcgbm9kZWdyb3VwcyBpbiB0aGUgY3VzdG9tZXIncyBhY2NvdW50LiBUaGVzZSBwb2xpY2llcyByZWxhdGVkIHRvIG1hbmFnZW1lbnQgb2YgdGhlIGZvbGxvd2luZyByZXNvdXJjZXM6IEF1dG9zY2FsaW5nR3JvdXBzLCBTZWN1cml0eUdyb3VwcywgTGF1bmNoVGVtcGxhdGVzIGFuZCBJbnN0YW5jZVByb2ZpbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvbkVLU05vZGVncm91cCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckFtYXpvbkVLU05vZGVncm91cCk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgU2VydmljZSBMaW5rZWQgUm9sZSBwcm92aWRlcyBBbWF6b24gUSBEZXZlbG9wZXIgYWJpbGl0eSB0byBwcm92aWRlIHVzYWdlIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvblFEZXZlbG9wZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JBbWF6b25RRGV2ZWxvcGVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBTZXJ2aWNlLUxpbmtlZCBSb2xlIHByb3ZpZGVzIEFXUyBUcmFuc2Zvcm0gd2l0aCB0aGUgYWJpbGl0eSB0byBwcm92aWRlIHVzYWdlIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckFXU1RyYW5zZm9ybSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckFXU1RyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgVHJhbnNmb3JtIEN1c3RvbSB0byBwdWJsaXNoIENsb3VkV2F0Y2ggbWV0cmljcyB0byB5b3VyIGFjY291bnQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQVdTVHJhbnNmb3JtQ3VzdG9tKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQVdTVHJhbnNmb3JtQ3VzdG9tKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIFN5c3RlbXMgTWFuYWdlciByZXNvdXJjZXMgdXNlZCBieSBDbG91ZFdhdGNoIEFsYXJtcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckNsb3VkV2F0Y2hBbGFybXNBY3Rpb25TU01TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckNsb3VkV2F0Y2hBbGFybXNBY3Rpb25TU01TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZFdhdGNoIHRvIGFjY2VzcyBSRFMgUGVyZm9ybWFuY2UgSW5zaWdodHMgbWV0cmljcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckNsb3VkV2F0Y2hNZXRyaWNzRGJQZXJmSW5zaWdodHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckNsb3VkV2F0Y2hNZXRyaWNzRGJQZXJmSW5zaWdodHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIENvZGVHdXJ1IFByb2ZpbGVyIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JDb2RlR3VydVByb2ZpbGVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQ29kZUd1cnVQcm9maWxlcik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcm9sZSBncmFudHMgcGVybWlzc2lvbnMgdG8gQ29kZVdoaXNwZXJlciB0byBhY2Nlc3MgZGF0YSBpbiB5b3VyIGFjY291bnQgdG8gY2FsY3VsYXRlIGJpbGxpbmcsIHByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgYW5kIGFjY2VzcyBzZWN1cml0eSByZXBvcnRzIGluIEFtYXpvbiBDb2RlR3VydSwgYW5kIGVtaXQgZGF0YSB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckNvZGVXaGlzcGVyZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JDb2RlV2hpc3BlcmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMiBTY2hlZHVsZWQgSW5zdGFuY2VzIHRvIGxhdW5jaCBhbmQgbWFuYWdlIHNwb3QgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckVDMlNjaGVkdWxlZEluc3RhbmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckVDMlNjaGVkdWxlZEluc3RhbmNlcyk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBHcm91bmRTdGF0aW9uIHVzZXMgdGhpcyBzZXJ2aWNlLWxpbmtlZCByb2xlIHRvIGludm9rZSBFQzIgdG8gZmluZCBwdWJsaWMgSVB2NCBhZGRyZXNzZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JHcm91bmRTdGF0aW9uRGF0YWZsb3dFbmRwb2ludEdyb3VwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yR3JvdW5kU3RhdGlvbkRhdGFmbG93RW5kcG9pbnRHcm91cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzJJbWFnZUJ1aWxkZXIgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9ySW1hZ2VCdWlsZGVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9ySW1hZ2VCdWlsZGVyKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBJb1QgU2l0ZVdpc2UgdG8gcHJvdmlzaW9uIGFuZCBtYW5hZ2UgZ2F0ZXdheXMgYXMgd2VsbCBhcyBxdWVyeSBkYXRhLiBUaGUgcG9saWN5IGluY2x1ZGVzIHJlcXVpcmVkIEFXUyBHcmVlbmdyYXNzIHBlcm1pc3Npb25zIGZvciBkZXBsb3lpbmcgdG8gZ3JvdXBzLCBBV1MgTGFtYmRhIHBlcm1pc3Npb25zIGZvciBjcmVhdGluZyBhbmQgdXBkYXRpbmcgc2VydmljZS1wcmVmaXhlZCBmdW5jdGlvbnMsIGFuZCBBV1MgSW9UIEFuYWx5dGljcyBwZXJtaXNzaW9ucyBmb3IgcXVlcnlpbmcgZGF0YSBmcm9tIGRhdGFzdG9yZXMuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9ySW9UU2l0ZVdpc2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JJb1RTaXRlV2lzZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBMb2cgRGVsaXZlcnkgc2VydmljZSB0byBkZWxpdmVyIGxvZ3MgYnkgY2FsbGluZyBsb2cgZGVzdGluYXRpb24gb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yTG9nRGVsaXZlcnlQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JMb2dEZWxpdmVyeVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBbWF6b24gTW9uaXRyb24gcGVybWlzc2lvbnMgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMsIGluY2x1ZGluZyBBV1MgU1NPIHVzZXIgYXNzaWdubWVudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JNb25pdHJvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvck1vbml0cm9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ2xvdWR3YXRjaCBhY2Nlc3MgdG8gcHVibGlzaCBvcGVyYXRpb25hbCBhbmQgdXNhZ2UgbWV0cmljcyBhbmQgbG9ncyBmb3IgQW1hem9uIE5lcHR1bmUgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JOZXB0dW5lR3JhcGhQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JOZXB0dW5lR3JhcGhQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBkZXNjcmliZSBhbmQgdXBkYXRlIFByaXZhdGUgTWFya2V0cGxhY2UgcmVzb3VyY2VzIGFuZCBkZXNjcmliZSBBV1MgT3JnYW5pemF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvclByaXZhdGVNYXJrZXRwbGFjZUFkbWluUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yUHJpdmF0ZU1hcmtldHBsYWNlQWRtaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIFByb2N1cmVtZW50IEluc2lnaHRzIHRvIG9idGFpbiBPcmdhbml6YXRpb24gQWNjb3VudCBkZXRhaWxzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yUHJvY3VyZW1lbnRJbnNpZ2h0c1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvclByb2N1cmVtZW50SW5zaWdodHNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMgbmVjZXNzYXJ5IHRvIG1pZ3JhdGUgc2VydmljZSBpbnN0YW5jZXMgaW50byBBV1MgaW5jbHVkaW5nIEVDMiwgUzMgYW5kIENsb3VkZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvclNNUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvclNNUyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgVXNlciBTdWJzY3JpcHRpb25zIHNlcnZpY2UgdG8geW91ciBJZGVudGl0eSBDZW50ZXIgcmVzb3VyY2VzIHRvIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHlvdXIgc3Vic2NyaXB0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JVc2VyU3Vic2NyaXB0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvclVzZXJTdWJzY3JpcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgY29tcGxpYW5jZSByZXBvcnRzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwUmVwb3J0cygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cFJlcG9ydHMpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBjb250YWlucyBwZXJtaXNzaW9ucyBmb3IgdGVzdGluZyByZXN0b3JlcyBhbmQgZm9yIGNsZWFuaW5nIHVwIHJlc291cmNlcyBjcmVhdGVkIGR1cmluZyB0ZXN0cy4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXBSZXN0b3JlVGVzdGluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cFJlc3RvcmVUZXN0aW5nKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBwcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQW1hem9uIFdvcmtTcGFjZXMgdG8gbWFuYWdlIEVDMiBpbnN0YW5jZXMgaW4geW91ciBBV1MgYWNjb3VudCAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZVBvbGljeUZvcldvcmtzcGFjZXNJbnN0YW5jZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVQb2xpY3lGb3JXb3Jrc3BhY2VzSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIEFXUyBERG9TIFJlc3BvbnNlIFRlYW0gd2l0aCBsaW1pdGVkIGFjY2VzcyB0byB5b3VyIEFXUyBhY2NvdW50IHRvIGFzc2lzdCB3aXRoIEREb1MgYXR0YWNrIG1pdGlnYXRpb24gZHVyaW5nIGEgaGlnaC1zZXZlcml0eSBldmVudC4gKi9cbiAgICBwdWJsaWMgQVdTU2hpZWxkRFJUQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NoaWVsZERSVEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgU2hpZWxkIHRvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmIHRvIHByb3ZpZGUgRERvUyBwcm90ZWN0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTaGllbGRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTaGllbGRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBwdWJsaXNoIG1ldHJpY3MgYW5kIHByb3ZpZGUgaW5zaWdodHMgZm9yIHlvdXIgc29jaWFsIG1lc3NhZ2Ugc2VuZGluZy4gKi9cbiAgICBwdWJsaWMgQVdTU29jaWFsTWVzc2FnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU29jaWFsTWVzc2FnaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgU3lzdGVtcyBNYW5hZ2VyIGZvciBTQVAgd2l0aCB0aGUgcGVybWlzc2lvbnMgbmVlZGVkIHRvIG1hbmFnZSBhbmQgaW50ZWdyYXRlIFNBUCBzb2Z0d2FyZSB3aXRoIEFXUy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNRm9yU0FQU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNRm9yU0FQU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIFNlcnZpY2UgTGlua2VkIFJvbGUgQVdTU2VydmljZVJvbGVGb3JBbWF6b25TU01fT3BzSW5zaWdodHMgKi9cbiAgICBwdWJsaWMgQVdTU1NNT3BzSW5zaWdodHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01PcHNJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWRtaW5pc3RyYXRvciBhY2Nlc3MgZm9yIFNTTyBEaXJlY3RvcnkgKi9cbiAgICBwdWJsaWMgQVdTU1NPRGlyZWN0b3J5QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09EaXJlY3RvcnlBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZE9ubHkgYWNjZXNzIGZvciBTU08gRGlyZWN0b3J5ICovXG4gICAgcHVibGljIEFXU1NTT0RpcmVjdG9yeVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTT0RpcmVjdG9yeVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHdpdGhpbiBBV1MgU1NPIHRvIG1hbmFnZSBBV1MgT3JnYW5pemF0aW9ucyBtYXN0ZXIgYW5kIG1lbWJlciBhY2NvdW50cyBhbmQgY2xvdWQgYXBwbGljYXRpb24gKi9cbiAgICBwdWJsaWMgQVdTU1NPTWFzdGVyQWNjb3VudEFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPTWFzdGVyQWNjb3VudEFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3Mgd2l0aGluIEFXUyBTU08gdG8gbWFuYWdlIEFXUyBPcmdhbml6YXRpb25zIG1lbWJlciBhY2NvdW50cyBhbmQgY2xvdWQgYXBwbGljYXRpb24gKi9cbiAgICBwdWJsaWMgQVdTU1NPTWVtYmVyQWNjb3VudEFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPTWVtYmVyQWNjb3VudEFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBTU08gY29uZmlndXJhdGlvbnMuICovXG4gICAgcHVibGljIEFXU1NTT1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTT1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFXUyBTU08gcGVybWlzc2lvbnMgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMsIGluY2x1ZGluZyBJQU0gcm9sZXMsIHBvbGljaWVzIGFuZCBTQU1MIElkUCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU1NPU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbiBhY2Nlc3MgcG9saWN5IGZvciBwcm92aWRpbmcgYSB1c2VyL3JvbGUvZXRjIGFjY2VzcyB0byB0aGUgQVdTIFN0ZXBGdW5jdGlvbnMgY29uc29sZS4gRm9yIGEgZnVsbCBjb25zb2xlIGV4cGVyaWVuY2UsIGluIGFkZGl0aW9uIHRvIHRoaXMgcG9saWN5LCBhIHVzZXIgbWF5IG5lZWQgaWFtOlBhc3NSb2xlIHBlcm1pc3Npb24gb24gb3RoZXIgSUFNIHJvbGVzIHRoYXQgY2FuIGJlIGFzc3VtZWQgYnkgdGhlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1N0ZXBGdW5jdGlvbnNDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdGVwRnVuY3Rpb25zQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbiBhY2Nlc3MgcG9saWN5IGZvciBwcm92aWRpbmcgYSB1c2VyL3JvbGUvZXRjIGFjY2VzcyB0byB0aGUgQVdTIFN0ZXBGdW5jdGlvbnMgQVBJLiBGb3IgZnVsbCBhY2Nlc3MsIGluIGFkZGl0aW9uIHRvIHRoaXMgcG9saWN5LCBhIHVzZXIgTVVTVCBoYXZlIGlhbTpQYXNzUm9sZSBwZXJtaXNzaW9uIG9uIGF0IGxlYXN0IG9uZSBJQU0gcm9sZSB0aGF0IGNhbiBiZSBhc3N1bWVkIGJ5IHRoZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTdGVwRnVuY3Rpb25zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdGVwRnVuY3Rpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFuIGFjY2VzcyBwb2xpY3kgZm9yIHByb3ZpZGluZyBhIHVzZXIvcm9sZS9ldGMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQVdTIFN0ZXBGdW5jdGlvbnMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU3RlcEZ1bmN0aW9uc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0ZXBGdW5jdGlvbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBTdG9yYWdlIEdhdGV3YXkgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NTdG9yYWdlR2F0ZXdheUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RvcmFnZUdhdGV3YXlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBTdG9yYWdlIEdhdGV3YXkgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NTdG9yYWdlR2F0ZXdheVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0b3JhZ2VHYXRld2F5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlLWxpbmtlZCByb2xlIHVzZWQgYnkgQVdTIFN0b3JhZ2UgR2F0ZXdheSB0byBlbmFibGUgaW50ZWdyYXRpb24gb2Ygb3RoZXIgQVdTIHNlcnZpY2VzIHdpdGggU3RvcmFnZSBHYXRld2F5LiAqL1xuICAgIHB1YmxpYyBBV1NTdG9yYWdlR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0b3JhZ2VHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1NTdXBwbHlDaGFpbkZlZGVyYXRpb25BZG1pbkFjY2VzcyBwcm92aWRlcyBBV1MgU3VwcGx5IENoYWluIGZlZGVyYXRlZCB1c2VycyBhY2Nlc3MgdG8gdGhlIEFXUyBTdXBwbHkgQ2hhaW4gYXBwbGljYXRpb24sIGluY2x1ZGluZyB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gcGVyZm9ybSBhY3Rpb25zIHdpdGhpbiB0aGUgQVdTIFN1cHBseSBDaGFpbiBhcHBsaWNhdGlvbi4gVGhlIHBvbGljeSBwcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyBvdmVyIElBTSBJZGVudGl0eSBDZW50ZXIgdXNlcnMgYW5kIGdyb3VwcyBhbmQgaXMgYXR0YWNoZWQgdG8gYSByb2xlIGNyZWF0ZWQgYnkgQVdTIFN1cHBseSBDaGFpbiBvbiB5b3VyIGJlaGFsZi4gWW91IHNob3VsZG4ndCBhdHRhY2ggQVdTU3VwcGx5Q2hhaW5GZWRlcmF0aW9uQWRtaW5BY2Nlc3MgcG9saWN5IHRvIGFueSBvdGhlciBJQU0gZW50aXRpZXMuICovXG4gICAgcHVibGljIEFXU1N1cHBseUNoYWluRmVkZXJhdGlvbkFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBseUNoYWluRmVkZXJhdGlvbkFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHVzZXJzIHRvIGFjY2VzcyB0aGUgQVdTIFN1cHBvcnQgQ2VudGVyLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIFN1cHBvcnQgQXBwIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcywgc3VjaCBhcyBBV1MgU3VwcG9ydCBhbmQgU2VydmljZSBRdW90YXMuIFRoaXMgcG9saWN5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgc3VwcG9ydGluZyBzZXJ2aWNlcyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250YWN0IEFXUyBTdXBwb3J0IGZvciBzdXBwb3J0IGNhc2VzLCBjaGFuZ2Ugc2VydmljZSBxdW90YXMsIGFuZCBjcmVhdGUgdGhlIHJlbGV2YW50IHNlcnZpY2UtbGlua2VkIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0QXBwRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdXBwb3J0QXBwRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIEFXUyBTdXBwb3J0IEFwcC4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydEFwcFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRBcHBSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHN1cHBvcnRwbGFucy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydFBsYW5zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdXBwb3J0UGxhbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBzdXBwb3J0cGxhbnMuICovXG4gICAgcHVibGljIEFXU1N1cHBvcnRQbGFuc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRQbGFuc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBTdXBwb3J0IHRvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIHRvIHByb3ZpZGUgYmlsbGluZywgYWRtaW5pc3RyYXRpdmUsIGFuZCBzdXBwb3J0IHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFXUyBTeXN0ZW1zIE1hbmFnZXIgKFNTTSkgcGVybWlzc2lvbiB0byBkaXNjb3ZlciBBV1MgYWNjb3VudCBpbmZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJBY2NvdW50RGlzY292ZXJ5U2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckFjY291bnREaXNjb3ZlcnlTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IHRoZSBBV1MgU3lzdGVtcyBNYW5hZ2VyIGNoYW5nZSBtYW5hZ2VtZW50IGZyYW1ld29yay4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJDaGFuZ2VNYW5hZ2VtZW50U2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckNoYW5nZU1hbmFnZW1lbnRTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFXUyBTeXN0ZW1zIE1hbmFnZXIgUXVpY2sgU2V0dXAgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUgQVdTIENvbmZpZyBjb25maWd1cmF0aW9uIHJlY29yZGluZy4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJFbmFibGVDb25maWdSZWNvcmRpbmdFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJFbmFibGVDb25maWdSZWNvcmRpbmdFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgZm9yIGVuYWJsaW5nIEV4cGxvcmVyLCBhIGNhcGFiaWxpdHkgb2YgQVdTIFN5c3RlbXMgTWFuYWdlci4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byB1cGRhdGUgcmVsYXRlZCBTeXN0ZW1zIE1hbmFnZXIgc2VydmljZSBzZXR0aW5ncywgYW5kIHRvIGNyZWF0ZSBhIHNlcnZpY2UtbGlua2VkIHJvbGUgZm9yIFN5c3RlbXMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJFbmFibGVFeHBsb3JlckV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckVuYWJsZUV4cGxvcmVyRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFN5c3RlbXMgTWFuYWdlciBmb3IgU0FQIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJGb3JTQVBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyRm9yU0FQRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFN5c3RlbXMgTWFuYWdlciBmb3IgU0FQIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJGb3JTQVBSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckZvclNBUFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IHRoZSBBV1MgU3lzdGVtcyBNYW5hZ2VyIGp1c3QgaW4gdGltZSBhY2Nlc3MgZnJhbWV3b3JrLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1NlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbWFuYWdlZCBwb2xpY3kgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5Qb2xpY3kgYWxsb3dzIFN5c3RlbXMgTWFuYWdlciB0byBnZW5lcmF0ZSBhY2Nlc3MgdG9rZW5zIHVzZWQgZm9yIGp1c3QtaW4tdGltZSBub2RlIGFjY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbWFuYWdlZCBwb2xpY3kgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5TZXNzaW9uUG9saWN5IGFsbG93cyBTeXN0ZW1zIE1hbmFnZXIgdG8gYXBwbHkgc2NvcGVkIGRvd24gcGVybWlzc2lvbnMgdG8gYSBqdXN0LWluLXRpbWUgbm9kZSBhY2Nlc3Mgc2Vzc2lvbiBvbmNlIGl0IGlzIHN0YXJ0ZWQuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuU2Vzc2lvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NUb2tlblNlc3Npb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgU3lzdGVtcyBNYW5hZ2VyIHRvIHNoYXJlIGEgZGVueS1hY2Nlc3MgcG9saWN5IGZvciBqdXN0LWluLXRpbWUgbm9kZSBhY2Nlc3MgZnJvbSB0aGUgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudCB0byBtZW1iZXIgYWNjb3VudHMsIGFuZCByZXBsaWNhdGUgdGhlIHBvbGljeSB0byBtdWx0aXBsZSBSZWdpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVOb2RlQWNjZXNzUm9sZVByb3BhZ2F0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZU5vZGVBY2Nlc3NSb2xlUHJvcGFnYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCB0byBjb2xsZWN0IGluZm9ybWF0aW9uIGFib3V0IGEgdXNlciBmb3IgSnVzdC1Jbi1UaW1lLU5vZGUtQWNjZXNzIG5vdGlmaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyTm90aWZpY2F0aW9uc1NlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJOb3RpZmljYXRpb25zU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIElBTSByb2xlIGZvciBTU00gRXhwbG9yZXIgdG8gbWFuYWdlIE9wc0RhdGEgcmVsYXRlZCBvcGVyYXRpb25zICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyT3BzRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlck9wc0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIEFXUyBQb3J0YWwgQXNzZXQgU2VydmVyIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94QXNzZXRTZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hBc3NldFNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBBV1MgVGhpbmtib3gncyBEZWFkbGluZSBzb2Z0d2FyZSBmdWxsIGFjY2VzcyB0byBtdWx0aXBsZSBBV1Mgc2VydmljZXMgYXMgcmVxdWlyZWQgZm9yIEFXUyBQb3J0YWwgYWRtaW5pc3RyYXRpb24uIFRoaXMgaW5jbHVkZXMgYWNjZXNzIHRvIGNyZWF0ZSBhcmJpdHJhcnkgdGFncyBvbiBzZXZlcmFsIEVDMiByZXNvdXJjZSB0eXBlcy4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hBV1NQb3J0YWxBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUaGlua2JveEFXU1BvcnRhbEFkbWluUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBBV1MgUG9ydGFsIEdhdGV3YXkgbWFjaGluZSB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveEFXU1BvcnRhbEdhdGV3YXlQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hBV1NQb3J0YWxHYXRld2F5UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBEZWFkbGluZSBXb3JrZXJzIGluIEFXUyBQb3J0YWwgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hBV1NQb3J0YWxXb3JrZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hBV1NQb3J0YWxXb3JrZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIHRoZSBvcGVyYXRpb24gb2YgQVdTIFRoaW5rYm94J3MgRGVhZGxpbmUgUmVzb3VyY2UgVHJhY2tlci4gIFRoaXMgaW5jbHVkZXMgZnVsbCBhY2Nlc3MgdG8gc29tZSBFQzIgYWN0aW9ucywgaW5jbHVkaW5nIERlbGV0ZUZsZWV0cyBhbmQgQ2FuY2VsU3BvdEZsZWV0UmVxdWVzdHMuICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94RGVhZGxpbmVSZXNvdXJjZVRyYWNrZXJBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hEZWFkbGluZVJlc291cmNlVHJhY2tlckFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBjcmVhdGUsIGRlc3Ryb3ksIGFuZCBhZG1pbmlzdGVyIEFXUyBUaGlua2JveCdzIERlYWRsaW5lIFJlc291cmNlIFRyYWNrZXIuICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94RGVhZGxpbmVSZXNvdXJjZVRyYWNrZXJBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUaGlua2JveERlYWRsaW5lUmVzb3VyY2VUcmFja2VyQWRtaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIEFXUyBUaGlua2JveCdzIERlYWRsaW5lIFNwb3QgRXZlbnQgUGx1Z2luLiAgVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9uIHRvIHJlcXVlc3QsIG1vZGlmeSwgYW5kIGNhbmNlbCBhIHNwb3QgZmxlZXQsIGFzIHdlbGwgYXMgbGltaXRlZCBQYXNzUm9sZSBwZXJtaXNzaW9uLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveERlYWRsaW5lU3BvdEV2ZW50UGx1Z2luQWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hEZWFkbGluZVNwb3RFdmVudFBsdWdpbkFkbWluUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnQgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIGFuIEVDMiBpbnN0YW5jZSBydW5uaW5nIEFXUyBUaGlua2JveCBEZWFkbGluZSBTcG90IEV2ZW50IFBsdWdpbiBXb3JrZXIgc29mdHdhcmUuICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94RGVhZGxpbmVTcG90RXZlbnRQbHVnaW5Xb3JrZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hEZWFkbGluZVNwb3RFdmVudFBsdWdpbldvcmtlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBUcmFuc2ZlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmZXJDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2ZlckNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFRyYW5zZmVyIFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1RyYW5zZmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2ZlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFRyYW5zZmVyIGZ1bGwgYWNjZXNzIHRvIGNyZWF0ZSBsb2cgc3RyZWFtcyBhbmQgZ3JvdXBzIGFuZCBwdXQgbG9nIGV2ZW50cyB0byB5b3VyIGFjY291bnQgKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmZXJMb2dnaW5nQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZmVyTG9nZ2luZ0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZG9ubHkgYWNjZXNzIHRvIEFXUyBUcmFuc2ZlciBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2ZlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyB0aGUgQVdTIFRyYW5zZm9ybSBzZXJ2aWNlIHRvIGRlcGxveSB0cmFuc2Zvcm1lZCAuTkVUIGFwcGxpY2F0aW9ucyBieSBjcmVhdGluZyBhbmQgbWFuYWdpbmcgQVdTIHJlc291cmNlcy4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHByb3Zpc2lvbiBpbmZyYXN0cnVjdHVyZSwgbWFuYWdlIGNvbXB1dGUgcmVzb3VyY2VzLCBhbmQgY29uZmlndXJlIGRlcGxveW1lbnQgc2V0dGluZ3MgYWNyb3NzIHZhcmlvdXMgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1BcHBsaWNhdGlvbkRlcGxveW1lbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtQXBwbGljYXRpb25EZXBsb3ltZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyB0aGUgQVdTIFRyYW5zZm9ybSB0byBkZXBsb3kgYXBwbGljYXRpb25zIHRvIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIChFQ1MpIHdpdGggRmFyZ2F0ZS4gSXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHByb3Zpc2lvbiwgY29uZmlndXJlLCBhbmQgbWFuYWdlIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIHJlcXVpcmVkIHRvIHJ1biBhcHBsaWNhdGlvbnMgb24gRUNTLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1BcHBsaWNhdGlvbkVDU0RlcGxveW1lbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtQXBwbGljYXRpb25FQ1NEZXBsb3ltZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGV4ZWN1dGUgdHJhbnNmb3JtYXRpb25zIGluIEFXUyBUcmFuc2Zvcm0gY3VzdG9tLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1DdXN0b21FeGVjdXRlVHJhbnNmb3JtYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUN1c3RvbUV4ZWN1dGVUcmFuc2Zvcm1hdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgVHJhbnNmb3JtIGN1c3RvbS4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtQ3VzdG9tRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2Zvcm1DdXN0b21GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyB0aGUgbWFuYWdlbWVudCBvZiB0cmFuc2Zvcm1hdGlvbiByZXNvdXJjZXMgYW5kIGV4ZWN1dGlvbiBvZiB0cmFuc2Zvcm1hdGlvbnMgaW4gQVdTIFRyYW5zZm9ybSBjdXN0b20uICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybUN1c3RvbU1hbmFnZVRyYW5zZm9ybWF0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2Zvcm1DdXN0b21NYW5hZ2VUcmFuc2Zvcm1hdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIHRoZSBBV1MgVHJhbnNmb3JtIHNlcnZpY2UgdG8gcmVhZCBhIHNwZWNpZmllZCBTZWNyZXRzTWFuYWdlciBTZWNyZXQgaW4gY29ubmVjdGlvbiB0byBzcGVjaWZpZWQgS01TIGtleS4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHJlYWQgdGhlIHNwZWNpZmllZCBzZWNyZXQgdmFsdWUgYW5kIGRlY3J5cHQgaXQgaXMgdGhlIHNlY3JldCBpcyBlbmNyeXB0ZWQgKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtU2VjcmV0c01hbmFnZXJDb25uZWN0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtU2VjcmV0c01hbmFnZXJDb25uZWN0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgVHJ1c3RlZCBBZHZpc29yIFByaW9yaXR5LiBUaGlzIHBvbGljeSBhbHNvIGVuYWJsZXMgdGhlIHVzZXIgdG8gYWRkIFRydXN0ZWQgQWR2aXNvciBhcyBhIHRydXN0ZWQgc2VydmljZSB3aXRoIEFXUyBPcmdhbml6YXRpb25zIGFuZCB0byBzcGVjaWZ5IGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnRzIGZvciBUcnVzdGVkIEFkdmlzb3IgUHJpb3JpdHkuICovXG4gICAgcHVibGljIEFXU1RydXN0ZWRBZHZpc29yUHJpb3JpdHlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RydXN0ZWRBZHZpc29yUHJpb3JpdHlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgVHJ1c3RlZCBBZHZpc29yIFByaW9yaXR5LiBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb24gdG8gdmlldyB0aGUgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudHMuICovXG4gICAgcHVibGljIEFXU1RydXN0ZWRBZHZpc29yUHJpb3JpdHlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcnVzdGVkQWR2aXNvclByaW9yaXR5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIFBvbGljeSBmb3IgVHJ1c3RlZCBBZHZpc29yIE11bHRpLWFjY291bnQgUmVwb3J0aW5nICovXG4gICAgcHVibGljIEFXU1RydXN0ZWRBZHZpc29yUmVwb3J0aW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJ1c3RlZEFkdmlzb3JSZXBvcnRpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyBmb3IgdGhlIEFXUyBUcnVzdGVkIEFkdmlzb3IgU2VydmljZSB0byBoZWxwIHJlZHVjZSBjb3N0LCBpbmNyZWFzZSBwZXJmb3JtYW5jZSwgYW5kIGltcHJvdmUgc2VjdXJpdHkgb2YgeW91ciBBV1MgZW52aXJvbm1lbnQuICovXG4gICAgcHVibGljIEFXU1RydXN0ZWRBZHZpc29yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJ1c3RlZEFkdmlzb3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdXNlciBhdHRyaWJ1dGVzIGZyb20gQVdTIElBTSBJZGVudGl0eSBDZW50ZXIgZm9yIHRoZSB1c2VyIGF0dHJpYnV0ZXMgdGhhdCB0aGUgY3VzdG9tZXIgaGFzIG9wdGVkIGluIHRvLiAqL1xuICAgIHB1YmxpYyBBV1NVc2VyQXR0cmlidXRlQ29zdEFsbG9jYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVXNlckF0dHJpYnV0ZUNvc3RBbGxvY2F0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBVc2VyIE5vdGlmaWNhdGlvbnMgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1VzZXJOb3RpZmljYXRpb25zU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVXNlck5vdGlmaWNhdGlvbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIGZvciB2aWV3aW5nIGVudGl0bGVkIFZlbmRvciBJbnNpZ2h0cyByZXNvdXJjZXMgYW5kIG1hbmFnaW5nIFZlbmRvciBJbnNpZ2h0cyBzdWJzY3JpcHRpb25zICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyBmb3Igdmlld2luZyBlbnRpdGxlZCBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWZW5kb3JJbnNpZ2h0c0Fzc2Vzc29yUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHRoZSBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzVmVuZG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWZW5kb3JJbnNpZ2h0c1ZlbmRvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIGZvciB2aWV3aW5nIHRoZSBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzVmVuZG9yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVmVuZG9ySW5zaWdodHNWZW5kb3JSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgTGF0dGljZSB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTVnBjTGF0dGljZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZwY0xhdHRpY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFNpdGUtdG8tU2l0ZSBWUE4gdG8gY3JlYXRlIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIHJlbGF0ZWQgdG8geW91ciBWUE4gQ29ubmVjdGlvbnMuICovXG4gICAgcHVibGljIEFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgVlBDIFRyYW5zaXQgR2F0ZXdheSB0byBjcmVhdGUgYW5kIG1hbmFnZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGZvciB5b3VyIFRyYW5zaXQgR2F0ZXdheSBWUEMgQXR0YWNobWVudHMuICovXG4gICAgcHVibGljIEFXU1ZQQ1RyYW5zaXRHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVlBDVHJhbnNpdEdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIFZlcmlmaWVkIEFjY2VzcyBzZXJ2aWNlIHRvIHByb3Zpc2lvbiBlbmRwb2ludHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTVlBDVmVyaWZpZWRBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWUENWZXJpZmllZEFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCB1cGRhdGUgQW1hem9uIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9ucywgcGVybWlzc2lvbnMgdG8gdmlldyBsb2FkIGJhbGFuY2VycyBvbiBBV1MgRWxhc3RpYyBMb2FkIEJhbGFuY2luZywgcGVybWlzc2lvbnMgdG8gdmlldyBBbWF6b24gQVBJIEdhdGV3YXkgUkVTVCBBUElzIGFuZCBzdGFnZXMsIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIHZpZXcgQW1hem9uIENsb3VkV2F0Y2ggbWV0cmljcywgYW5kIHBlcm1pc3Npb25zIHRvIHZpZXcgcmVnaW9ucyBlbmFibGVkIHdpdGhpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgdG8gbGlzdCBBbWF6b24gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25zLCBwZXJtaXNzaW9ucyB0byB2aWV3IGxvYWQgYmFsYW5jZXJzIG9uIEFXUyBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBwZXJtaXNzaW9ucyB0byB2aWV3IEFtYXpvbiBBUEkgR2F0ZXdheSBSRVNUIEFQSXMgYW5kIHN0YWdlcywgcGVybWlzc2lvbnMgdG8gbGlzdCBhbmQgdmlldyBBbWF6b24gQ2xvdWRXYXRjaCBtZXRyaWNzLCBhbmQgcGVybWlzc2lvbnMgdG8gdmlldyByZWdpb25zIGVuYWJsZWQgd2l0aGluIHRoZSBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NXQUZDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NXQUZGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dBRkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTV0FGUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgV2VsbEFyY2hpdGVjdGVkIHRvIGFjY2VzcyBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcyB0aGF0IHJlbGF0ZSB0byBXZWxsQXJjaGl0ZWN0ZWQgcmVzb3VyY2VzIG9uIGJlaGFsZiBvZiBjdXN0b21lcnMuICovXG4gICAgcHVibGljIEFXU1dlbGxBcmNoaXRlY3RlZERpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dlbGxBcmNoaXRlY3RlZERpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFdlbGwtQXJjaGl0ZWN0ZWQgdG8gYWNjZXNzIE9yZ2FuaXphdGlvbnMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1dlbGxBcmNoaXRlY3RlZE9yZ2FuaXphdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NXZWxsQXJjaGl0ZWN0ZWRPcmdhbml6YXRpb25zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgZnVsbCBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byB0aGUgV2lja3Igc2VydmljZSwgaW5jbHVkaW5nIHRoZSBXaWNrciBhZG1pbmlzdHJhdGl2ZSBmdW5jdGlvbnMgdW5kZXIgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1dpY2tyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NXaWNrckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIFgtUmF5IHRyYWNlcyAqL1xuICAgIHB1YmxpYyBBV1NYcmF5Q3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWHJheUNyb3NzQWNjb3VudFNoYXJpbmdDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgdGhlIEFXUyBYLVJheSBEYWVtb24gdG8gcmVsYXkgcmF3IHRyYWNlIHNlZ21lbnRzIGRhdGEgdG8gdGhlIHNlcnZpY2UncyBBUEkgYW5kIHJldHJpZXZlIHNhbXBsaW5nIGRhdGEgKHJ1bGVzLCB0YXJnZXRzLCBldGMuKSB0byBiZSB1c2VkIGJ5IHRoZSBYLVJheSBTREsuICovXG4gICAgcHVibGljIEFXU1hSYXlEYWVtb25Xcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYUmF5RGFlbW9uV3JpdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgZnVsbCBhY2Nlc3MgbWFuYWdlZCBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTWHJheUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWHJheUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgcmVhZCBvbmx5IG1hbmFnZWQgcG9saWN5ICovXG4gICAgcHVibGljIEFXU1hyYXlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYcmF5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgd3JpdGUgb25seSBtYW5hZ2VkIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NYcmF5V3JpdGVPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1hyYXlXcml0ZU9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgZm9yIEFSQyB6b25hbCBzaGlmdCBwcmFjdGljZSBydW5zLCBhbmQgYWNjZXNzIHRvIENsb3VkV2F0Y2ggYWxhcm0gc3RhdHVzZXMgdG8gbW9uaXRvciBwcmFjdGljZSBydW5zLiAqL1xuICAgIHB1YmxpYyBBV1Nab25hbEF1dG9zaGlmdFByYWN0aWNlUnVuU0xSUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1pvbmFsQXV0b3NoaWZ0UHJhY3RpY2VSdW5TTFJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBUElzIG5lZWRlZCB0byBzdXBwb3J0IHpvbmUtZ3JvdXAgYWNjZXNzLW1hbmFnZW1lbnQgZm9yIG9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFXU1pvbmVHcm91cEFjY2Vzc01hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1Nab25lR3JvdXBBY2Nlc3NNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIHRoZSBBV1MgQmF0Y2ggc2VydmljZSB0byBtYW5hZ2UgdGhlIHJlcXVpcmVkIHJlc291cmNlcywgaW5jbHVkaW5nIEFtYXpvbiBFQzIgYW5kIEFtYXpvbiBFQ1MgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBCYXRjaFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkJhdGNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBCZWRyb2NrIEFnZW50Q29yZSBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEJlZHJvY2sgQWdlbnRDb3JlIGluIFZQQyBtb2RlICovXG4gICAgcHVibGljIEJlZHJvY2tBZ2VudENvcmVOZXR3b3JrU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZU5ldHdvcmtTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gaWRlbnRpdHkgYW5kIHRva2VuIG1hbmFnZW1lbnQgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciBBbWF6b24gQmVkcm9jayBBZ2VudENvcmUgUnVudGltZSBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVJZGVudGl0eVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkJlZHJvY2tBZ2VudENvcmVSdW50aW1lSWRlbnRpdHlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyBmb3IgYmlsbGluZyBhbmQgY29zdCBtYW5hZ2VtZW50LiBUaGlzIGluY2x1ZGVzIHZpZXdpbmcgYWNjb3VudCB1c2FnZSBhbmQgdmlld2luZyBhbmQgbW9kaWZ5aW5nIGJ1ZGdldHMgYW5kIHBheW1lbnQgbWV0aG9kcy4gKi9cbiAgICBwdWJsaWMgQmlsbGluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5CaWxsaW5nKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEJ1ZGdldHMgdG8gdmVyaWZ5IGFjY2VzcyB0byBCaWxsaW5nIFZpZXdzIHNoYXJlZCBhY3Jvc3MgYWNjb3VudCBib3VuZGFyaWVzLiAqL1xuICAgIHB1YmxpYyBCdWRnZXRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQnVkZ2V0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIENlcnRpZmljYXRlIE1hbmFnZXIgU2VydmljZSBSb2xlIFBvbGljeSAqL1xuICAgIHB1YmxpYyBDZXJ0aWZpY2F0ZU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DZXJ0aWZpY2F0ZU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIENsaWVudCBWUE4gdG8gbWFuYWdlIHlvdXIgQ2xpZW50IFZQTiBlbmRwb2ludCBjb25uZWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQ2xpZW50VlBOU2VydmljZUNvbm5lY3Rpb25zUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbGllbnRWUE5TZXJ2aWNlQ29ubmVjdGlvbnNSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBV1MgQ2xpZW50IFZQTiB0byBtYW5hZ2UgeW91ciBDbGllbnQgVlBOIGVuZHBvaW50cy4gKi9cbiAgICBwdWJsaWMgQ2xpZW50VlBOU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xpZW50VlBOU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIFJvbGUgZm9yIENsb3VkRm9ybWF0aW9uIFN0YWNrU2V0cyAoT3JnYW5pemF0aW9uIE1hc3RlciBBY2NvdW50KSAqL1xuICAgIHB1YmxpYyBDbG91ZEZvcm1hdGlvblN0YWNrU2V0c09yZ0FkbWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdBZG1pblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBSb2xlIGZvciBDbG91ZEZvcm1hdGlvbiBTdGFja1NldHMgKE9yZ2FuaXphdGlvbiBNZW1iZXIgQWNjb3VudCkgKi9cbiAgICBwdWJsaWMgQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdNZW1iZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEZvcm1hdGlvblN0YWNrU2V0c09yZ01lbWJlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIENsb3VkRnJvbnQgY29uc29sZSBwbHVzIHRoZSBhYmlsaXR5IHRvIGxpc3QgQW1hem9uIFMzIGJ1Y2tldHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBDbG91ZEZyb250RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEZyb250RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBsaXN0IGRpc3RyaWJ1dGlvbnMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBDbG91ZEZyb250UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGcm9udFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIHJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQ2xvdWRIU00gKi9cbiAgICBwdWJsaWMgQ2xvdWRIU01TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEhTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBDbG91ZFNlYXJjaCBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIENsb3VkU2VhcmNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFNlYXJjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gQ2xvdWRTZWFyY2ggY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBDbG91ZFNlYXJjaFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkU2VhcmNoUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHNlcnZpY2UgbGlua2VkIHJvbGUgYWxsb3dzIENsb3VkVHJhaWwgdG8gZ2V0IGFuZCBhZGQgcmVzb3VyY2UgdGFncyB0byB0aGUgcmVzb3VyY2Ugb3duZXIncyBDbG91ZFRyYWlsIGV2ZW50cy4gKi9cbiAgICBwdWJsaWMgQ2xvdWRUcmFpbEV2ZW50Q29udGV4dCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFRyYWlsRXZlbnRDb250ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbiBwb2xpY3kgZm9yIENsb3VkVHJhaWwgU2VydmljZUxpbmtlZFJvbGUgKi9cbiAgICBwdWJsaWMgQ2xvdWRUcmFpbFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkVHJhaWxTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZFdhdGNoIHRvIGFzc3VtZSBDbG91ZFdhdGNoLUNyb3NzQWNjb3VudFNoYXJpbmcgcm9sZXMgaW4gcmVtb3RlIGFjY291bnRzIG9uIGJlaGFsZiBvZiB0aGUgY3VycmVudCBhY2NvdW50IGluIG9yZGVyIHRvIGRpc3BsYXkgZGF0YSBjcm9zcy1hY2NvdW50LCBjcm9zcy1yZWdpb24gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaENyb3NzQWNjb3VudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQ3Jvc3NBY2NvdW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIGFsYXJtcyBhbmQgbWV0cmljcyBhcyB3ZWxsIGFzIEVDMiBtZXRhZGF0YS4gUHJvdmlkZXMgYWNjZXNzIHRvIFN0b3AsIFRlcm1pbmF0ZSBhbmQgUmVib290IEVDMiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hBY3Rpb25zRUMyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBY3Rpb25zRUMyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byB1c2UgQW1hem9uQ2xvdWRXYXRjaEFnZW50LiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQWdlbnRBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQWdlbnRBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHVzZSBBbWF6b25DbG91ZFdhdGNoQWdlbnQgb24gc2VydmVycyAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQWdlbnRTZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFnZW50U2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBJbnNpZ2h0cyBhbmQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uSW5zaWdodHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBDbG91ZHdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5ICovXG4gICAgcHVibGljIENsb3Vkd2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWR3YXRjaEFwcGxpY2F0aW9uSW5zaWdodHNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBTaWduYWxzIHNlcnZpY2UgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gdXNlIGFuZCBvcGVyYXRlIHRoaXMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIFNpZ25hbHMgdG8gY29sbGVjdCBtb25pdG9yaW5nIGFuZCB0YWdnaW5nIGRhdGEgZnJvbSBvdGhlciByZWxldmFudCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQXBwbGljYXRpb25TaWduYWxzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG5vbi1DbG91ZFdhdGNoIEFQSXMgdXNlZCB0byBkaXNwbGF5IENsb3VkV2F0Y2ggQXV0b21hdGljIERhc2hib2FyZHMsIGluY2x1ZGluZyB0aGUgY29udGVudHMgb2Ygb2JqZWN0cyBzdWNoIGFzIExhbWJkYSBmdW5jdGlvbnMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggcmVzb3VyY2VzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQ3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYnVpbHQtaW4gdGFyZ2V0cyBpbiBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMgdG8gcGVyZm9ybSBFQzIgYWN0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDbG91ZFdhdGNoIEV2ZW50cyB0byByZWxheSBldmVudHMgdG8gdGhlIHN0cmVhbXMgaW4gQVdTIEtpbmVzaXMgU3RyZWFtcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoRXZlbnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBV1MgQ2xvdWRXYXRjaCB0byBleGVjdXRlIGFjdGlvbnMgb24geW91ciBiZWhhbGYgY29uZmlndXJlZCB0aHJvdWdoIGFsYXJtcyBhbmQgZXZlbnRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhY3Rpb25zIGZvciB3b3JraW5nIHdpdGggQW1hem9uIENsb3VkV2F0Y2ggSW50ZXJuZXQgTW9uaXRvci4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgc2VydmljZXMsIHN1Y2ggYXMgQW1hem9uIENsb3VkV2F0Y2gsIEFtYXpvbiBFQzIsIEFtYXpvbiBDbG91ZEZyb250LCBBbWF6b24gV29ya1NwYWNlcywgYW5kIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWN0aW9ucyBmb3Igd29ya2luZyB3aXRoIEFtYXpvbiBDbG91ZFdhdGNoIEludGVybmV0IE1vbml0b3IuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIHNlcnZpY2VzIGluIEFtYXpvbiBDbG91ZFdhdGNoLCBpbmNsdWRpbmcgcG9saWNpZXMgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gQ2xvdWRXYXRjaCBtZXRyaWNzIGFuZCB0byBtYW5hZ2UgbG9nIHF1ZXJpZXMsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEludGVybmV0TW9uaXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEludGVybmV0IE1vbml0b3IgdG8gYWNjZXNzIEVDMiwgV29ya3NwYWNlcywgYW5kIENsb3VkRnJvbnQgcmVzb3VyY2VzLCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hJbnRlcm5ldE1vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gWC1SYXkgYW5kIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBsb2cgZ3JvdXAuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHJlcXVpcmVkIGZvciB0aGUgTGFtYmRhIEluc2lnaHRzIEV4dGVuc2lvbiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTGFtYmRhSW5zaWdodHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFJbnNpZ2h0c0V4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gY2FsbCBDbG91ZFdhdGNoIExvZ3MgdXNpbmcgQVBJIGtleSBhdXRoZW50aWNhdGlvbi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaExvZ3NBUElLZXlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaExvZ3NBUElLZXlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggTG9ncyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaExvZ3NDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Nyb3NzQWNjb3VudFNoYXJpbmdDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBMb2dzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMb2dzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggTG9ncyAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTG9nc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMb2dzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIHVzZSB0aGlzIHBvbGljeSBpbiBJQU0gcm9sZXMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gQW1hem9uIEVDMiBhbmQgQW1hem9uIEVLUyBpbnN0YW5jZSByZXNvdXJjZXMgdG8gc2VuZCB0ZWxlbWV0cnkgcmVwb3J0cyAobWV0cmljcykgdG8gYSBOZXR3b3JrIEZsb3cgTW9uaXRvciBlbmRwb2ludC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvckFnZW50UHVibGlzaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yQWdlbnRQdWJsaXNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3kgdG8geW91ciBJQU0gZW50aXRpZXMuIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSBuYW1lZCBBV1NTZXJ2aWNlUm9sZUZvck5ldHdvcmtGbG93TW9uaXRvciwgd2hpY2ggcHVibGlzaGVzIG5ldHdvcmsgdGVsZW1ldHJ5IGFnZ3JlZ2F0aW9uIHJlc3VsdHMsIGNvbGxlY3RlZCBieSBOZXR3b3JrIEZsb3cgTW9uaXRvciBhZ2VudHMsIHRvIENsb3VkV2F0Y2guIEl0IGFsc28gYWxsb3dzIHRoZSBzZXJ2aWNlIHRvIHVzZSBBV1MgT3JnYW5pemF0aW9ucyB0byBnZXQgaW5mb3JtYXRpb24gZm9yIG11bHRpLWFjY291bnQgc2NlbmFyaW9zLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yVG9wb2xvZ3lTZXJ2aWNlUm9sZVBvbGljeSB0byB5b3VyIElBTSBlbnRpdGllcy4gVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gYSBzZXJ2aWNlLWxpbmtlZCByb2xlIG5hbWVkIEFXU1NlcnZpY2VSb2xlRm9yTmV0d29ya0Zsb3dNb25pdG9yX1RvcG9sb2d5LCB3aGljaCBnZW5lcmF0ZXMgdG9wb2xvZ3kgc25hcHNob3RzIG9mIHJlc291cmNlcyB1c2VkIGJ5IE5ldHdvcmsgRmxvdyBNb25pdG9yIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRXYXRjaCBOZXR3b3JrIE1vbml0b3IgdG8gYWNjZXNzIGFuZCBtYW5hZ2UgRUMyIGFuZCBWUEMgcmVzb3VyY2VzLCBwdWJsaXNoIGRhdGEgdG8gQ2xvdWRXYXRjaCBhbmQgYWNjZXNzIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHVzZXIgYWNjZXNzIHRvIHZpZXcgT3BlblNlYXJjaCBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyB1c2VyIGFjY2VzcyB0byBjcmVhdGUgaW50ZWdyYXRpb24gd2l0aCBPcGVuU2VhcmNoIHRvIGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUgb3IgdmlldyBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoT3BlblNlYXJjaERhc2hib2FyZHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBTeW50aGV0aWNzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoU3ludGhldGljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIFN5bnRoZXRpY3MuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hTeW50aGV0aWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIENvbXByZWhlbmQgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gUzMgcmVzb3VyY2VzIGZvciBkYXRhIGFjY2VzcyAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kRGF0YUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZERhdGFBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQuICovXG4gICAgcHVibGljIENvbXByZWhlbmRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQgTWVkaWNhbCAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kTWVkaWNhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZE1lZGljYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gQ29tcHJlaGVuZC4gKi9cbiAgICBwdWJsaWMgQ29tcHJlaGVuZFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBDb21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5IG1hbmFnZWQgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSB0aGF0IGFsbG93cyBDb21wdXRlIE9wdGltaXplciB0byBwZXJmb3JtIGFjdGlvbnMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplckF1dG9tYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDb21wdXRlT3B0aW1pemVyLiAqL1xuICAgIHB1YmxpYyBDb21wdXRlT3B0aW1pemVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHV0ZU9wdGltaXplclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvbXB1dGVPcHRpbWl6ZXIgdG8gY2FsbCBBV1Mgc2VydmljZXMgYW5kIGNvbGxlY3Qgd29ya2xvYWQgZGV0YWlscyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXB1dGVPcHRpbWl6ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBuZWVkZWQgZm9yIEFXU0NvbmZpZyB0byBjcmVhdGUgY29uZm9ybWFuY2UgcGFja3MgKi9cbiAgICBwdWJsaWMgQ29uZmlnQ29uZm9ybXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db25maWdDb25mb3Jtc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRm9yIHVzZSB3aXRoIGFjY291bnRzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgVmVyY2VsIE1hcmtldHBsYWNlIGludGVncmF0aW9uIHdpdGggQVdTLiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIGFsbCByZXNvdXJjZXMgZm9yIHRoZSBzZXJ2aWNlcyB0aGF0IGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIFZlcmNlbCBNYXJrZXRwbGFjZS4gKi9cbiAgICBwdWJsaWMgQ29uc29sZUZ1bGxBY2Nlc3NGcm9tVmVyY2VsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbnNvbGVGdWxsQWNjZXNzRnJvbVZlcmNlbCk7XG4gICAgfVxuXG4gICAgLyoqIEZvciB1c2Ugd2l0aCBhY2NvdW50cyBjcmVhdGVkIHRocm91Z2ggdGhlIFZlcmNlbCBNYXJrZXRwbGFjZSBpbnRlZ3JhdGlvbiB3aXRoIEFXUy4gUHJvdmlkZXMgYWNjZXNzIHRvIHZpZXcgYWxsIHJlc291cmNlcyBmb3IgdGhlIHNlcnZpY2VzIHRoYXQgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgVmVyY2VsIE1hcmtldHBsYWNlLiAqL1xuICAgIHB1YmxpYyBDb25zb2xlVmlld09ubHlBY2Nlc3NGcm9tVmVyY2VsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbnNvbGVWaWV3T25seUFjY2Vzc0Zyb21WZXJjZWwpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIGFkbWluIGFjY2VzcyB0byBDb3N0IE9wdGltaXphdGlvbiBIdWIuICovXG4gICAgcHVibGljIENvc3RPcHRpbWl6YXRpb25IdWJBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db3N0T3B0aW1pemF0aW9uSHViQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQ29zdCBPcHRpbWl6YXRpb24gSHViLiAqL1xuICAgIHB1YmxpYyBDb3N0T3B0aW1pemF0aW9uSHViUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29zdE9wdGltaXphdGlvbkh1YlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvc3QgT3B0aW1pemF0aW9uIEh1YiB0byByZXRyaWV2ZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gYW5kIGNvbGxlY3Qgb3B0aW1pemF0aW9uLXJlbGF0ZWQgZGF0YSBhbmQgbWV0YWRhdGEuICovXG4gICAgcHVibGljIENvc3RPcHRpbWl6YXRpb25IdWJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db3N0T3B0aW1pemF0aW9uSHViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvbm5lY3QgQ3VzdG9tZXIgUHJvZmlsZXMgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBDdXN0b21lclByb2ZpbGVzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ3VzdG9tZXJQcm9maWxlc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIEFXUyBzZXJ2aWNlcyBhbmQgYWN0aW9ucyByZXF1aXJlZCB0byBzZXQgdXAgYW5kIGNvbmZpZ3VyZSBBV1MgZGF0YWJhc2Ugc2VydmljZXMuICovXG4gICAgcHVibGljIERhdGFiYXNlQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EYXRhYmFzZUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIGRhdGEgYW5hbHl0aWNzIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBEYXRhU2NpZW50aXN0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRhdGFTY2llbnRpc3QpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgREFYIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIE5ldHdvcmsgaW50ZXJmYWNlLCBTZWN1cml0eSBncm91cCwgU3VibmV0IGFuZCBWcGMgb24gYmVoYWxmIG9mIGN1c3RvbWVyICovXG4gICAgcHVibGljIERBWFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRBWFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGlzY292ZXJ5IGFuZCBBc3Nlc3NtZW50IHBlcm1pc3Npb25zIGZvciBkYXRhYmFzZSBjb25uZWN0b3IgdXNlZCBpbiBkYXRhYmFzZSBtb2Rlcm5pemF0aW9uICovXG4gICAgcHVibGljIERCTW9kRGlzY292ZXJ5QW5kQXNzZXNzbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EQk1vZERpc2NvdmVyeUFuZEFzc2Vzc21lbnQpO1xuICAgIH1cblxuICAgIC8qKiBSZXNvdXJjZSBwcm92aXNpb25pbmcgYW5kIGRhdGEgbWlncmF0aW9uIHBlcm1pc3Npb25zIGZvciBkYXRhYmFzZSBjb25uZWN0b3IgdXNlZCBpbiBkYXRhYmFzZSBtb2Rlcm5pemF0aW9uICovXG4gICAgcHVibGljIERCTW9kUHJvdmlzaW9uaW5nQW5kTWlncmF0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRCTW9kUHJvdmlzaW9uaW5nQW5kTWlncmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHJlYWQtb25seSBBUElzIG5lZWRlZCB0byBydW4gRUMyIERlY2xhcmF0aXZlIFBvbGljaWVzIEFjY291bnQgU3RhdHVzIFJlcG9ydC4gKi9cbiAgICBwdWJsaWMgRGVjbGFyYXRpdmVQb2xpY2llc0VDMlJlcG9ydCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EZWNsYXJhdGl2ZVBvbGljaWVzRUMyUmVwb3J0KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gc3VwcG9ydCBBbWF6b24gQ2xvdWRXYXRjaCBDb250cmlidXRvciBJbnNpZ2h0cyBmb3IgQW1hem9uIER5bmFtb0RCLiAqL1xuICAgIHB1YmxpYyBEeW5hbW9EQkNsb3VkV2F0Y2hDb250cmlidXRvckluc2lnaHRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRHluYW1vREJDbG91ZFdhdGNoQ29udHJpYnV0b3JJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgRHluYW1vREIgdG8gbWFuYWdlIGdsb2JhbCB0YWJsZSByZXBsaWNhIHNldHRpbmdzICovXG4gICAgcHVibGljIER5bmFtb0RCR2xvYmFsVGFibGVTZXR0aW5nc01hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EeW5hbW9EQkdsb2JhbFRhYmxlU2V0dGluZ3NNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIEFXUyBEeW5hbW9EQiBhY2Nlc3MgdG8gS2luZXNpc0RhdGFTdHJlYW1zICovXG4gICAgcHVibGljIER5bmFtb0RCS2luZXNpc1JlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRHluYW1vREJLaW5lc2lzUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IER5bmFtb0RCIGZvciBjcm9zcy1yZWdpb24gZGF0YSByZXBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBEeW5hbW9EQlJlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRHluYW1vREJSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEVDMiBGYXN0IExhdW5jaCBhY3Rpb25zICovXG4gICAgcHVibGljIEVDMkZhc3RMYXVuY2hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkZhc3RMYXVuY2hGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50cyBlYzJmYXN0bGF1bmNoIHRvIHByZXBhcmUgYW5kIG1hbmFnZSBwcmVwcm92aXNpb25lZCBzbmFwc2hvdHMgaW4gY3VzdG9tZXIncyBhY2NvdW50ICYgcHVibGlzaCByZWxhdGVkIG1ldHJpY3MuICovXG4gICAgcHVibGljIEVDMkZhc3RMYXVuY2hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJGYXN0TGF1bmNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gRUMyIEZsZWV0IHRvIGxhdW5jaCBpbnN0YW5jZXMgaW4gdGhlIGZ1dHVyZS4gKi9cbiAgICBwdWJsaWMgRUMyRmxlZXRUaW1lU2hpZnRhYmxlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMyRmxlZXRUaW1lU2hpZnRhYmxlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyBuZWVkIGJ5IEVDMiBJbWFnZSBCdWlsZGVyIHRvIHBlcmZvcm0gYSBjcm9zcyBhY2NvdW50IGRpc3RyaWJ1dGlvbi4gKi9cbiAgICBwdWJsaWMgRWMySW1hZ2VCdWlsZGVyQ3Jvc3NBY2NvdW50RGlzdHJpYnV0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVjMkltYWdlQnVpbGRlckNyb3NzQWNjb3VudERpc3RyaWJ1dGlvbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBFQzJJbWFnZUJ1aWxkZXJMaWZlY3ljbGVFeGVjdXRpb25Qb2xpY3kgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgSW1hZ2UgQnVpbGRlciB0byBwZXJmb3JtIGFjdGlvbnMgc3VjaCBhcyBkZXByZWNhdGUgb3IgZGVsZXRlIEltYWdlIEJ1aWxkZXIgaW1hZ2UgcmVzb3VyY2VzIGFuZCB0aGVpciB1bmRlcmx5aW5nIHJlc291cmNlcyAoQU1Jcywgc25hcHNob3RzKSB0byBzdXBwb3J0IGF1dG9tYXRlZCBydWxlcyBmb3IgaW1hZ2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgdGFza3MuICovXG4gICAgcHVibGljIEVDMkltYWdlQnVpbGRlckxpZmVjeWNsZUV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJJbWFnZUJ1aWxkZXJMaWZlY3ljbGVFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgY3VzdG9tZXJzIHRvIGNhbGwgRUMyIEluc3RhbmNlIENvbm5lY3QgdG8gcHVibGlzaCBlcGhlbWVyYWwga2V5cyB0byB0aGVpciBFQzIgaW5zdGFuY2VzIGFuZCBjb25uZWN0IHZpYSBzc2ggb3IgdGhlIEVDMiBJbnN0YW5jZSBDb25uZWN0IENMSS4gKi9cbiAgICBwdWJsaWMgRUMySW5zdGFuY2VDb25uZWN0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkluc3RhbmNlQ29ubmVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEVDMiBJbnN0YW5jZSBDb25uZWN0IGVuZHBvaW50IHBvbGljeSB0byBtYW5hZ2UgRUMyIEluc3RhbmNlIENvbm5lY3QgZW5kcG9pbnRzIGNyZWF0ZWQgYnkgdGhlIGN1c3RvbWVyICovXG4gICAgcHVibGljIEVjMkluc3RhbmNlQ29ubmVjdEVuZHBvaW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVjMkluc3RhbmNlQ29ubmVjdEVuZHBvaW50KTtcbiAgICB9XG5cbiAgICAvKiogRUMyIEluc3RhbmNlIHByb2ZpbGUgZm9yIEltYWdlIEJ1aWxkZXIgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgRUMySW5zdGFuY2VQcm9maWxlRm9ySW1hZ2VCdWlsZGVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkluc3RhbmNlUHJvZmlsZUZvckltYWdlQnVpbGRlcik7XG4gICAgfVxuXG4gICAgLyoqIEVDMiBJbnN0YW5jZSBwcm9maWxlIGZvciBidWlsZGluZyBjb250YWluZXIgaW1hZ2VzIHdpdGggRUMyIEltYWdlIEJ1aWxkZXIuIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgdXNlciBicm9hZCBwZXJtaXNzaW9ucyB0byB1cGxvYWQgRUNSIGltYWdlcy4gKi9cbiAgICBwdWJsaWMgRUMySW5zdGFuY2VQcm9maWxlRm9ySW1hZ2VCdWlsZGVyRUNSQ29udGFpbmVyQnVpbGRzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkluc3RhbmNlUHJvZmlsZUZvckltYWdlQnVpbGRlckVDUkNvbnRhaW5lckJ1aWxkcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBFQ1IgUmVwbGljYXRpb24gKi9cbiAgICBwdWJsaWMgRUNSUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQ1JSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjdGlvbnMgdG8gYmUgcGVyZm9ybWVkIHdoZW4gdXNpbmcgQVdTIEVDUiByZXBvc2l0b3J5IGNyZWF0aW9uIHRlbXBsYXRlcyAqL1xuICAgIHB1YmxpYyBFQ1JUZW1wbGF0ZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDUlRlbXBsYXRlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgRWxhc3RpQ2FjaGUgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgYXMgbmVjZXNzYXJ5IGZvciBtYW5hZ2luZyB5b3VyIGNhY2hlICovXG4gICAgcHVibGljIEVsYXN0aUNhY2hlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxhc3RpQ2FjaGVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGljTG9hZEJhbGFuY2luZywgYW5kIGxpbWl0ZWQgYWNjZXNzIHRvIG90aGVyIHNlcnZpY2VzIG5lY2Vzc2FyeSB0byBwcm92aWRlIEVsYXN0aWNMb2FkQmFsYW5jaW5nIGZlYXR1cmVzLiAqL1xuICAgIHB1YmxpYyBFbGFzdGljTG9hZEJhbGFuY2luZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxhc3RpY0xvYWRCYWxhbmNpbmdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRWxhc3RpY0xvYWRCYWxhbmNpbmcgYW5kIGRlcGVuZGVudCBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBFbGFzdGljTG9hZEJhbGFuY2luZ1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsYXN0aWNMb2FkQmFsYW5jaW5nUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc3MgdG8gdmlldyBwdXJjaGFzZWQgYXNzZXRzIGFuZCBkb3dubG9hZCByZWxhdGVkIHNvZnR3YXJlIGFuZCBraWNrc3RhcnQgZmlsZXMgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQWN0aXZhdGlvbnNEb3dubG9hZFNvZnR3YXJlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFjdGl2YXRpb25zRG93bmxvYWRTb2Z0d2FyZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIHZpZXcgYW5kIHRha2UgYWN0aW9uIG9uIEVsZW1lbnRhbCBBcHBsaWFuY2VzIGFuZCBTb2Z0d2FyZSBwdXJjaGFzZWQgYXNzZXRzICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFjdGl2YXRpb25zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBY3RpdmF0aW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc3MgdG8gdmlldyBwdXJjaGFzZWQgYXNzZXRzIGFuZCBnZW5lcmF0ZSBzb2Z0d2FyZSBsaWNlbnNlcyBmb3IgcGVuZGluZyBhY3RpdmF0aW9ucyAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBY3RpdmF0aW9uc0dlbmVyYXRlTGljZW5zZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQWN0aXZhdGlvbnNHZW5lcmF0ZUxpY2Vuc2VzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgZGV0YWlsZWQgbGlzdCBvZiBwdXJjaGFzZWQgYXNzZXRzIGFzc29jaWF0ZWQgdG8gdGhlIEFXUyBhY2NvdW50IG9mIHRoZSB1c2VyICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFjdGl2YXRpb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQWN0aXZhdGlvbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIHZpZXcgYW5kIHRha2UgYWN0aW9uIG9uIEVsZW1lbnRhbCBBcHBsaWFuY2VzIGFuZCBTb2Z0d2FyZSBxdW90ZXMgYW5kIG9yZGVycyAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBcHBsaWFuY2VzU29mdHdhcmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFwcGxpYW5jZXNTb2Z0d2FyZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkLW9ubHkgYWNjZXNzIHRvIHZpZXcgRWxlbWVudGFsIEFwcGxpYW5jZXMgYW5kIFNvZnR3YXJlIHF1b3RlcyBhbmQgb3JkZXJzICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFwcGxpYW5jZXNTb2Z0d2FyZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFwcGxpYW5jZXNTb2Z0d2FyZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBhY2Nlc3MgdG8gdmlldyBhbmQgdGFrZSBhY3Rpb24gb24gRWxlbWVudGFsIEFwcGxpYW5jZSBhbmQgU29mdHdhcmUgc3VwcG9ydCBjYXNlcyBhbmQgcHJvZHVjdCBzdXBwb3J0IGNvbnRlbnQgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsU3VwcG9ydENlbnRlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsU3VwcG9ydENlbnRlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgdGhlIFdBTCBzZXJ2aWNlIGZvciBBbWF6b24gRU1SIHRvIGZpbmQgYW5kIHJldHVybiB0aGUgc3RhdHVzIG9mIGEgY2x1c3RlciAqL1xuICAgIHB1YmxpYyBFTVJEZXNjcmliZUNsdXN0ZXJQb2xpY3lGb3JFTVJXQUwoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRU1SRGVzY3JpYmVDbHVzdGVyUG9saWN5Rm9yRU1SV0FMKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHBvbGljeSB0byBhbGxvdyBGTSBzZXJ2aWNlIGxpbmtlZCByb2xlIHRvIHBlcmZvcm0gRk0tcmVsYXRlZCBhY3Rpb25zIG9uIEZNLW1hbmFnZWQgcmVzb3VyY2VzIHdpdGhpbiBhIGN1c3RvbWVyIEFXUyBPcmdhbml6YXRpb24gYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgRk1TU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRk1TU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEZTeCB0byBkZWxldGUgaXRzIFNlcnZpY2UgTGlua2VkIFJvbGVzIGZvciBBbWF6b24gUzMgYWNjZXNzICovXG4gICAgcHVibGljIEZTeERlbGV0ZVNlcnZpY2VMaW5rZWRSb2xlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkZTeERlbGV0ZVNlcnZpY2VMaW5rZWRSb2xlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgY29tcHV0ZSBhY3Rpb25zIGluIGFuIEFtYXpvbiBHYW1lTGlmdCBjb250YWluZXIgZmxlZXQsIGluY2x1ZGluZyBhY2Nlc3MgdG8gZGVwZW5kZW5jaWVzIHN1Y2ggYXMgQW1hem9uIFMzLiAqL1xuICAgIHB1YmxpYyBHYW1lTGlmdENvbnRhaW5lckZsZWV0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdhbWVMaWZ0Q29udGFpbmVyRmxlZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gYWxsb3cgR2FtZWxpZnQgR2FtZVNlcnZlckdyb3VwcyB0byBtYW5hZ2UgY3VzdG9tZXIgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEdhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBjb25uZWN0IHdpdGggQW1hem9uIFEgYW5kIHV0aWxpemUgdGhlIGZlYXR1cmVzIGluIHRoZSBHaXRMYWIgRHVvIHdpdGggQW1hem9uIFEgaW50ZWdyYXRpb24uICovXG4gICAgcHVibGljIEdpdExhYkR1b1dpdGhBbWF6b25RUGVybWlzc2lvbnNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR2l0TGFiRHVvV2l0aEFtYXpvblFQZXJtaXNzaW9uc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEdsb2JhbEFjY2VsZXJhdG9yIFVzZXJzIGZ1bGwgQWNjZXNzIHRvIGFsbCBBUElzICovXG4gICAgcHVibGljIEdsb2JhbEFjY2VsZXJhdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HbG9iYWxBY2NlbGVyYXRvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBHbG9iYWxBY2NlbGVyYXRvciBVc2VycyBBY2Nlc3MgdG8gUmVhZCBPbmx5IEFQSXMgKi9cbiAgICBwdWJsaWMgR2xvYmFsQWNjZWxlcmF0b3JSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HbG9iYWxBY2NlbGVyYXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhY2Nlc3MgdG8gdGhlIEdyZWVuZ3Jhc3MgT1RBIFVwZGF0ZSBhcnRpZmFjdHMgaW4gYWxsIEdyZWVuZ3Jhc3MgcmVnaW9ucyAqL1xuICAgIHB1YmxpYyBHcmVlbmdyYXNzT1RBVXBkYXRlQXJ0aWZhY3RBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR3JlZW5ncmFzc09UQVVwZGF0ZUFydGlmYWN0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEhlYWx0aCBwb2xpY3kgdG8gZW5hYmxlIE9yZ2FuaXphdGlvbmFsIFZpZXcgZmVhdHVyZSAqL1xuICAgIHB1YmxpYyBIZWFsdGhPcmdhbml6YXRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSGVhbHRoT3JnYW5pemF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byByZWFkIGFsbCBhY2Nlc3MgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgSUFNIGFjY2VzcyBhZHZpc29yIHN1Y2ggYXMgc2VydmljZSBsYXN0IGFjY2Vzc2VkIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBZHZpc29yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNQWNjZXNzQWR2aXNvclJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSUFNIEFjY2VzcyBBbmFseXplciAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBbmFseXplckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNQWNjZXNzQW5hbHl6ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJQU0gQWNjZXNzIEFuYWx5emVyIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBbmFseXplclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUFjY2Vzc0FuYWx5emVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgdG8gY2hlY2sgdGhlIHByZXNlbmNlIG9mIHJvb3QgdXNlciBjcmVkZW50aWFscyBzdWNoIGFzIHJvb3QgdXNlciBwYXNzd29yZCBhbmQgcm9vdCB1c2VyIGFjY2VzcyBrZXlzIHVzaW5nIHRoZSBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChTVFMpIEFzc3VtZVJvb3QgQVBJLiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNQXVkaXRSb290VXNlckNyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUF1ZGl0Um9vdFVzZXJDcmVkZW50aWFscyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCB0byBjcmVhdGUgYSByb290IHVzZXIgcGFzc3dvcmQgdXNpbmcgdGhlIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKFNUUykgQXNzdW1lUm9vdCBBUEkuICBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNQ3JlYXRlUm9vdFVzZXJQYXNzd29yZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1DcmVhdGVSb290VXNlclBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIHRvIGRlbGV0ZSBhbGwgcm9vdCB1c2VyIGNyZWRlbnRpYWxzIHN1Y2ggYXMgcm9vdCBwYXNzd29yZCBhbmQgcm9vdCBhY2Nlc3Mga2V5cyB1c2luZyB0aGUgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAoU1RTKSBBc3N1bWVSb290IEFQSS4gIFVzZSB0aGlzIG1hbmFnZWQgcG9saWN5IG9ubHkgd2l0aCB0aGUgU1RTIEFzc3VtZVJvb3QgYWN0aW9uLiAqL1xuICAgIHB1YmxpYyBJQU1EZWxldGVSb290VXNlckNyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTURlbGV0ZVJvb3RVc2VyQ3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBJQU0gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBJQU1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElBTSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIElBTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFuIElBTSB1c2VyIHRvIG1hbmFnZSB0aGVpciBvd24gU2VydmljZSBTcGVjaWZpYyBDcmVkZW50aWFscy4gKi9cbiAgICBwdWJsaWMgSUFNU2VsZk1hbmFnZVNlcnZpY2VTcGVjaWZpY0NyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVNlbGZNYW5hZ2VTZXJ2aWNlU3BlY2lmaWNDcmVkZW50aWFscyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IGZvciBhbiBJQU0gdXNlciB0byBjaGFuZ2UgdGhlaXIgb3duIHBhc3N3b3JkLiAqL1xuICAgIHB1YmxpYyBJQU1Vc2VyQ2hhbmdlUGFzc3dvcmQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNVXNlckNoYW5nZVBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgZm9yIGFuIElBTSB1c2VyIHRvIG1hbmFnZSB0aGVpciBvd24gU1NIIGtleXMuICovXG4gICAgcHVibGljIElBTVVzZXJTU0hLZXlzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVVzZXJTU0hLZXlzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW50ZXJhY3RpdmUgVmlkZW8gU2VydmljZSAoSVZTKSwgQWxzbyBpbmNsdWRlZCBwZXJtaXNzaW9ucyBmb3IgZGVwZW5kZW50IHNlcnZpY2VzLCBuZWVkZWQgZm9yIGZ1bGwgYWNjZXNzIHRvIHRoZSBpdnMgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgSVZTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBJVlMgTG93LUxhdGVuY3kgYW5kIFJlYWwtVGltZSBzdHJlYW1pbmcgQVBJcyAqL1xuICAgIHB1YmxpYyBJVlNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgdG8gcGVyZm9ybSBTMyBQdXRPYmplY3QgdG8gcmVjb3JkaW5nIElWUyBsaXZlIHN0cmVhbXMgKi9cbiAgICBwdWJsaWMgSVZTUmVjb3JkVG9TMygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNSZWNvcmRUb1MzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIEthZmthIENvbm5lY3QgcGVybWlzc2lvbiB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgS2Fma2FDb25uZWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2Fma2FDb25uZWN0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBJQU0gc2VydmljZSBsaW5rZWQgcm9sZSBwb2xpY3kgZm9yIEthZmthLiAqL1xuICAgIHB1YmxpYyBLYWZrYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkthZmthU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBLZXlzcGFjZXMgZm9yIENoYW5nZSBEYXRhIENhcHR1cmUgKi9cbiAgICBwdWJsaWMgS2V5c3BhY2VzQ0RDU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2V5c3BhY2VzQ0RDU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCBieSBLZXlzcGFjZXMgZm9yIGNyb3NzLXJlZ2lvbiBkYXRhIHJlcGxpY2F0aW9uICovXG4gICAgcHVibGljIEtleXNwYWNlc1JlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2V5c3BhY2VzUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBncmFudCB0ZW1wb3JhcnkgZGF0YSBhY2Nlc3MgdG8gTGFrZSBGb3JtYXRpb24gcmVzb3VyY2VzICovXG4gICAgcHVibGljIExha2VGb3JtYXRpb25EYXRhQWNjZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTGFrZUZvcm1hdGlvbkRhdGFBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIExleCBCb3QgdXNlIGNhc2UgKi9cbiAgICBwdWJsaWMgTGV4Qm90UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxleEJvdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIExleCBDaGFubmVsIHVzZSBjYXNlICovXG4gICAgcHVibGljIExleENoYW5uZWxQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTGV4Q2hhbm5lbFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBMaWdodHNhaWwgc2VydmljZSBsaW5rZWQgcm9sZSBwb2xpY3kgd2hpY2ggZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGV4cG9ydCByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgTGlnaHRzYWlsRXhwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxpZ2h0c2FpbEV4cG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIHJlZ2lzdGVyIE1lZGlhQ29ubmVjdCBHYXRld2F5IEluc3RhbmNlcyB0byBhIE1lZGlhQ29ubmVjdCBHYXRld2F5LiAqL1xuICAgIHB1YmxpYyBNZWRpYUNvbm5lY3RHYXRld2F5SW5zdGFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1lZGlhQ29ubmVjdEdhdGV3YXlJbnN0YW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTWVkaWFQYWNrYWdlIHRvIHB1Ymxpc2ggbG9ncyB0byBDbG91ZFdhdGNoICovXG4gICAgcHVibGljIE1lZGlhUGFja2FnZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1lZGlhUGFja2FnZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIE1lbW9yeURCIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmIGFzIG5lY2Vzc2FyeSBmb3IgbWFuYWdpbmcgeW91ciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIE1lbW9yeURCU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTWVtb3J5REJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgRGF0YWJhc2UgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBNaWdyYXRpb25IdWJETVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NaWdyYXRpb25IdWJETVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBNaWdyYXRpb24gSHViIHRvIGNhbGwgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2Ugb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgTWlncmF0aW9uSHViU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTWlncmF0aW9uSHViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIFNlcnZlciBNaWdyYXRpb24gU2VydmljZSB0byBhc3N1bWUgcm9sZSBpbiBjdXN0b21lcidzIGFjY291bnQgdG8gY2FsbCBNaWdyYXRpb24gSHViICovXG4gICAgcHVibGljIE1pZ3JhdGlvbkh1YlNNU0FjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1pZ3JhdGlvbkh1YlNNU0FjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgTW9uaXRyb24gc2VydmljZSBsaW5rZWQgcm9sZSBncmFudGluZyBhY2Nlc3MgdG8gcmVxdWlyZWQgY3VzdG9tZXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBNb25pdHJvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1vbml0cm9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBNdWx0aS1wYXJ0eSBhcHByb3ZhbC4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyByZWxhdGVkIHBlcm1pc3Npb25zIHRvIEFXUyBPcmdhbml6YXRpb25zIGFuZCBBV1MgSUFNIElkZW50aXR5IGZvciBtYW5hZ2luZyBhcHByb3ZhbCB0ZWFtcyBhbmQgaWRlbnRpdHkgc291cmNlcy4gKi9cbiAgICBwdWJsaWMgTXVsdGlQYXJ0eUFwcHJvdmFsRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NdWx0aVBhcnR5QXBwcm92YWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBNdWx0aS1wYXJ0eSBhcHByb3ZhbC4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyByZWxhdGVkIHJlYWQgcGVybWlzc2lvbiB0byBBV1MgT3JnYW5pemF0aW9ucyBhbmQgQVdTIElBTSBJZGVudGl0eSBmb3IgYXBwcm92YWwgdGVhbXMgYW5kIGlkZW50aXR5IHNvdXJjZXMuICovXG4gICAgcHVibGljIE11bHRpUGFydHlBcHByb3ZhbFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk11bHRpUGFydHlBcHByb3ZhbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gbWFuYWdlIEFtYXpvbiBOZXB0dW5lIHVzaW5nIHRoZSBBV1MgQ29uc29sZS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCwgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBlZGl0IEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFuZCBWUEMgY29uZmlndXJhdGlvbnMsIHBlcm1pc3Npb25zIHRvIHZpZXcgYW5kIGxpc3Qga2V5cyBvbiBBbWF6b24gS01TLCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL25lcHR1bmUvZmFxcy8uICovXG4gICAgcHVibGljIE5lcHR1bmVDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXB0dW5lQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTmVwdHVuZS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL25lcHR1bmUvZmFxcy8uICovXG4gICAgcHVibGljIE5lcHR1bmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk5lcHR1bmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgQW1hem9uIE5lcHR1bmUgQW5hbHl0aWNzIHJlc291cmNlcyBhbG9uZyB3aXRoIHJlYWQgb25seSBwZXJtaXNzaW9ucyBmb3IgZGVwZW5kZW50IHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lR3JhcGhSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXB0dW5lR3JhcGhSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE5lcHR1bmUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIFJEUyByZXNvdXJjZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9uZXB0dW5lL2ZhcXMvLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmVwdHVuZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIEFXUyBzZXJ2aWNlcyBhbmQgYWN0aW9ucyByZXF1aXJlZCB0byBzZXQgdXAgYW5kIGNvbmZpZ3VyZSBBV1MgbmV0d29yayByZXNvdXJjZXMuICovXG4gICAgcHVibGljIE5ldHdvcmtBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk5ldHdvcmtBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBBV1MgU2hpZWxkIG5ldHdvcmsgc2VjdXJpdHkgZGlyZWN0b3Igc2VydmljZSBsaW5rZWQgcm9sZSB0byBhc3Nlc3Mgc3BlY2lmaWVkIGVudmlyb25tZW50cy4gKi9cbiAgICBwdWJsaWMgTmV0d29ya1NlY3VyaXR5RGlyZWN0b3JTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXR3b3JrU2VjdXJpdHlEaXJlY3RvclNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIE5vdmFBY3QgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMgdG8gb3BlcmF0ZSB0aGUgTm92YSBBY3QgYWdlbnRzLiAqL1xuICAgIHB1YmxpYyBOb3ZhQWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTm92YUFjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBPYnNlcnZhYmlsaXR5IEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIE9BTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuT0FNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIFJlYWQgT25seSBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBPYnNlcnZhYmlsaXR5IEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIE9BTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk9BTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBPcGVuU2VhcmNoIEluZ2VzdGlvbiB0byBkZXNjcmliZSBuZXR3b3JrIHJlc291cmNlcyBhbmQgd3JpdGUgc2VydmljZSBtZXRyaWNzIHRvIGNsb3Vkd2F0Y2ggKi9cbiAgICBwdWJsaWMgT3BlbnNlYXJjaEluZ2VzdGlvblNlbGZNYW5hZ2VkVnBjZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5PcGVuc2VhcmNoSW5nZXN0aW9uU2VsZk1hbmFnZWRWcGNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGFzc29jaWF0ZSBhbmQgZGlzc29jaWF0ZSBwYXJ0bmVyIGNlbnRyYWwgdXNlcnMgd2l0aCBJQU0gcm9sZXMgKi9cbiAgICBwdWJsaWMgUGFydG5lckNlbnRyYWxBY2NvdW50TWFuYWdlbWVudFVzZXJSb2xlQXNzb2NpYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUGFydG5lckNlbnRyYWxBY2NvdW50TWFuYWdlbWVudFVzZXJSb2xlQXNzb2NpYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgcHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBhbGwgdGhlIGluY2VudGl2ZSBiZW5lZml0cyBpbiBBV1MgUGFydG5lciBDZW50cmFsLiAqL1xuICAgIHB1YmxpYyBQYXJ0bmVyQ2VudHJhbEluY2VudGl2ZUJlbmVmaXRNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlBhcnRuZXJDZW50cmFsSW5jZW50aXZlQmVuZWZpdE1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcywgYnV0IGRvZXMgbm90IGFsbG93IG1hbmFnZW1lbnQgb2YgVXNlcnMgYW5kIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgUG93ZXJVc2VyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlBvd2VyVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFEgQXBwcy4gKi9cbiAgICBwdWJsaWMgUUFwcHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5RQXBwc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIFFCdXNpbmVzcyB0byBjYWxsIFF1aWNrU2lnaHQgQVBJcyBmb3IgdGhlIFF1aWNrU2lnaHQgcGx1Z2luICovXG4gICAgcHVibGljIFFCdXNpbmVzc1F1aWNrc2lnaHRQbHVnaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUUJ1c2luZXNzUXVpY2tzaWdodFBsdWdpblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFEgKi9cbiAgICBwdWJsaWMgUUJ1c2luZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUUJ1c2luZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdXNlZCBieSBRdWlja1NpZ2h0IHRlYW0gdG8gYWNjZXNzIGN1c3RvbWVyIGRhdGEgcHJvZHVjZWQgYnkgUzMgU3RvcmFnZSBNYW5hZ2VtZW50IEFuYWx5dGljcy4gKi9cbiAgICBwdWJsaWMgUXVpY2tTaWdodEFjY2Vzc0ZvclMzU3RvcmFnZU1hbmFnZW1lbnRBbmFseXRpY3NSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5RdWlja1NpZ2h0QWNjZXNzRm9yUzNTdG9yYWdlTWFuYWdlbWVudEFuYWx5dGljc1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gUkRTIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgUkRTQ2xvdWRIc21BdXRob3JpemF0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SRFNDbG91ZEhzbUF1dGhvcml6YXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBSZXNvdXJjZSBHcm91cHMgYW5kIFRhZyBFZGl0b3IuICovXG4gICAgcHVibGljIFJlc291cmNlR3JvdXBzYW5kVGFnRWRpdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SZXNvdXJjZUdyb3Vwc2FuZFRhZ0VkaXRvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdXNlIFJlc291cmNlIEdyb3VwcyBhbmQgVGFnIEVkaXRvciwgYnV0IGRvZXMgbm90IGFsbG93IGVkaXRpbmcgb2YgdGFncyB2aWEgdGhlIFRhZyBFZGl0b3IuICovXG4gICAgcHVibGljIFJlc291cmNlR3JvdXBzYW5kVGFnRWRpdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVzb3VyY2VHcm91cHNhbmRUYWdFZGl0b3JSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgUmVzb3VyY2UgR3JvdXBzIHRvIHF1ZXJ5IHRoZSBBV1Mgc2VydmljZXMgdGhhdCBvd24geW91ciByZXNvdXJjZXMgdG8ga2VlcCB0aGUgZ3JvdXAgdXAtdG8tZGF0ZSAqL1xuICAgIHB1YmxpYyBSZXNvdXJjZUdyb3Vwc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJlc291cmNlR3JvdXBzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byB0YWcgYW5kIHVudGFnIGFsbCB0aGUgcmVzb3VyY2VzIHN1cHBvcnRlZCBieSBSZXNvdXJjZSBHcm91cHMgVGFnZ2luZyBBUEkuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byByZXRyaWV2ZSBhbGwgdGFnZ2VkLCBvciBwcmV2aW91c2x5IHRhZ2dlZCwgcmVzb3VyY2VzIHRocm91Z2ggdGhlIFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSS4gKi9cbiAgICBwdWJsaWMgUmVzb3VyY2VHcm91cHNUYWdnaW5nQVBJVGFnVW50YWdTdXBwb3J0ZWRSZXNvdXJjZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVzb3VyY2VHcm91cHNUYWdnaW5nQVBJVGFnVW50YWdTdXBwb3J0ZWRSZXNvdXJjZXMpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIE9wZW5TaGlmdCBBbWF6b24gRUJTIENvbnRhaW5lciBTdG9yYWdlIEludGVyZmFjZSAoQ1NJKSBEcml2ZXIgT3BlcmF0b3IgdG8gaW5zdGFsbCBhbmQgbWFpbnRhaW4gdGhlIEFtYXpvbiBFQlMgQ1NJIGRyaXZlciBvbiBhIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBjbHVzdGVyLiBUaGUgQW1hem9uIEVCUyBDU0kgZHJpdmVyIGFsbG93cyBST1NBIGNsdXN0ZXJzIHRvIG1hbmFnZSB0aGUgbGlmZWN5Y2xlIG9mIEFtYXpvbiBFQlMgdm9sdW1lcyBmb3IgcGVyc2lzdGVudCB2b2x1bWVzLiAqL1xuICAgIHB1YmxpYyBST1NBQW1hem9uRUJTQ1NJRHJpdmVyT3BlcmF0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUFtYXpvbkVCU0NTSURyaXZlck9wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBPcGVuU2hpZnQgQ2xvdWQgTmV0d29yayBDb25maWcgQ29udHJvbGxlciBPcGVyYXRvciB0byBwcm92aXNpb24gYW5kIG1hbmFnZSBuZXR3b3JraW5nIHJlc291cmNlcyBmb3IgdXNlIGJ5IHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgY2x1c3RlciBuZXR3b3JraW5nIG92ZXJsYXkuIFRoZSBPcGVuU2hpZnQgQ2xvdWQgTmV0d29yayBPcGVyYXRvciBpbnRlcmZhY2VzIHdpdGggQVdTIEFQSXMgb24gYmVoYWxmIG9mIHRoZSBuZXR3b3JrIHBsdWdpbnMgdmlhIEN1c3RvbVJlc291cmNlRGVmaW5pdGlvbnMuIFRoZSBvcGVyYXRvciB1c2VzIHRoZXNlIHBvbGljeSBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgcHJpdmF0ZSBJUCBhZGRyZXNzZXMgZm9yIEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFzIHBhcnQgb2YgdGhlIFJPU0EgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgUk9TQUNsb3VkTmV0d29ya0NvbmZpZ09wZXJhdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FDbG91ZE5ldHdvcmtDb25maWdPcGVyYXRvclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgY29udHJvbCBwbGFuZSB0byBtYW5hZ2UgUk9TQSBjbHVzdGVyIEFtYXpvbiBFQzIgYW5kIEFtYXpvbiBSb3V0ZSA1MyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIFJPU0FDb250cm9sUGxhbmVPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBQ29udHJvbFBsYW5lT3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIE9wZW5TaGlmdCBJbWFnZSBSZWdpc3RyeSBPcGVyYXRvciB0byBwcm92aXNpb24gYW5kIG1hbmFnZSBBbWF6b24gUzMgYnVja2V0cyBhbmQgb2JqZWN0cyBmb3IgdXNlIGJ5IHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgaW4tY2x1c3RlciBpbWFnZSByZWdpc3RyeSB0byBzYXRpc2Z5IFJPU0Egc3RvcmFnZSByZXF1aXJlbWVudHMuIFRoZSBPcGVuU2hpZnQgSW1hZ2UgUmVnaXN0cnkgT3BlcmF0b3IgaW5zdGFsbHMgYW5kIG1haW50YWlucyB0aGUgaW50ZXJuYWwgcmVnaXN0cnkgb2YgYSBSZWQgSGF0IE9wZW5TaGlmdCBjbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBST1NBSW1hZ2VSZWdpc3RyeU9wZXJhdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FJbWFnZVJlZ2lzdHJ5T3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIE9wZW5TaGlmdCBJbmdyZXNzIE9wZXJhdG9yIHRvIHByb3Zpc2lvbiBhbmQgbWFuYWdlIGxvYWQgYmFsYW5jZXJzIGFuZCBkb21haW4gbmFtZSBzeXN0ZW0gKEROUykgY29uZmlndXJhdGlvbnMgZm9yIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBjbHVzdGVycy4gVGhlIHBvbGljeSBhbGxvd3MgcmVhZCBhY2Nlc3MgdG8gdGFnIHZhbHVlcywgd2hpY2ggdGhlIG9wZXJhdG9yIGZpbHRlcnMgZm9yIFJvdXRlIDUzIHJlc291cmNlcyB0byBkaXNjb3ZlciBob3N0ZWQgem9uZXMuICovXG4gICAgcHVibGljIFJPU0FJbmdyZXNzT3BlcmF0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUluZ3Jlc3NPcGVyYXRvclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGluc3RhbGxlciB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyB0aGF0IHN1cHBvcnQgUk9TQSBjbHVzdGVyIGluc3RhbGxhdGlvbi4gVGhpcyBpbmNsdWRlcyBtYW5hZ2luZyBpbnN0YW5jZSBwcm9maWxlcyBmb3IgUk9TQSB3b3JrZXIgbm9kZXMuICovXG4gICAgcHVibGljIFJPU0FJbnN0YWxsZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUluc3RhbGxlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYnVpbHQtaW4gUk9TQSBBV1MgRW5jcnlwdGlvbiBQcm92aWRlciB0byBtYW5hZ2UgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykga2V5cyB0byBzdXBwb3J0IGV0Y2QgZGF0YSBlbmNyeXB0aW9uIHVzaW5nIGEgY3VzdG9tZXIgcHJvdmlkZWQgQVdTIEtNUyBrZXkuIFRoZSBwb2xpY3kgYWxsb3dzIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb2YgZGF0YSB1c2luZyBLTVMga2V5cy4gKi9cbiAgICBwdWJsaWMgUk9TQUtNU1Byb3ZpZGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FLTVNQcm92aWRlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgUk9TQSBLdWJlcm5ldGVzIGNvbnRyb2xsZXIgdG8gbWFuYWdlIEFtYXpvbiBFQzIsIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgKEVMQiksIGFuZCBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSByZXNvdXJjZXMgZm9yIGEgUk9TQSBjbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBST1NBS3ViZUNvbnRyb2xsZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUt1YmVDb250cm9sbGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIG1hbmFnZSB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIHN1YnNjcmlwdGlvbi4gKi9cbiAgICBwdWJsaWMgUk9TQU1hbmFnZVN1YnNjcmlwdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBTWFuYWdlU3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSB0byBtYW5hZ2UgY2x1c3RlciBFQzIgaW5zdGFuY2VzIGFzIHdvcmtlciBub2RlcywgaW5jbHVkaW5nIHBlcm1pc3Npb24gdG8gY29uZmlndXJlIHNlY3VyaXR5IGdyb3VwcyBhbmQgdGFnIGluc3RhbmNlcyBhbmQgdm9sdW1lcy4gVGhpcyBwb2xpY3kgYWxzbyBhbGxvd3MgZm9yIHRoZSB1c2Ugb2YgRUMyIGluc3RhbmNlcyB3aXRoIGRpc2sgZW5jcnlwdGlvbiBwcm92aWRlZCBieSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSBrZXlzLiAqL1xuICAgIHB1YmxpYyBST1NBTm9kZVBvb2xNYW5hZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FOb2RlUG9vbE1hbmFnZW1lbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBpbnN0YWxsZXIgdG8gY29uZmlndXJlIFZQQyBFbmRwb2ludHMgYW5kIFNlY3VyaXR5IEdyb3Vwcy4gSW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHNoYXJlZCBWUEMuICovXG4gICAgcHVibGljIFJPU0FTaGFyZWRWUENFbmRwb2ludFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBU2hhcmVkVlBDRW5kcG9pbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBpbnN0YWxsZXIgdG8gY29uZmlndXJlIFJvdXRlNTMgcmVjb3Jkcy4gSW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHNoYXJlZCBWUEMuICovXG4gICAgcHVibGljIFJPU0FTaGFyZWRWUENSb3V0ZTUzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FTaGFyZWRWUENSb3V0ZTUzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgUk9TQSBzaXRlIHJlbGlhYmlsaXR5IGVuZ2luZWVyaW5nIChTUkUpIHRoZSBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gaW5pdGlhbGx5IG9ic2VydmUsIGRpYWdub3NlLCBhbmQgc3VwcG9ydCBBV1MgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgY2x1c3RlcnMsIGluY2x1ZGluZyB0aGUgYWJpbGl0eSB0byBjaGFuZ2UgUk9TQSBjbHVzdGVyIG5vZGUgc3RhdGUuICovXG4gICAgcHVibGljIFJPU0FTUkVTdXBwb3J0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FTUkVTdXBwb3J0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSB3b3JrZXIgbm9kZXMgaW4geW91ciBhY2NvdW50IHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEVDMiBpbnN0YW5jZXMgYW5kIEFXUyBSZWdpb25zIGZvciBjb21wdXRlIG5vZGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIFJPU0FXb3JrZXJJbnN0YW5jZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBV29ya2VySW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgUm91dGUgNTMgUmVjb3ZlcnkgUmVhZGluZXNzICovXG4gICAgcHVibGljIFJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IFJvdXRlNTMgUmVzb2x2ZXIgKi9cbiAgICBwdWJsaWMgUm91dGU1M1Jlc29sdmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUm91dGU1M1Jlc29sdmVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFXUyBSVEJGYWJyaWMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgeW91ciBuZXR3b3JrIGludGVyZmFjZSByZXNvdXJjZXMgYW5kIGRlbGl2ZXIgbWV0cmljcy4gKi9cbiAgICBwdWJsaWMgUlRCRmFicmljU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUlRCRmFicmljU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgUzMgU3RvcmFnZSBMZW5zICovXG4gICAgcHVibGljIFMzU3RvcmFnZUxlbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TM1N0b3JhZ2VMZW5zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgdG8gdW5sb2NrIGEgUzMgYnVja2V0IHBvbGljeSB1c2luZyB0aGUgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAoU1RTKSBBc3N1bWVSb290IEFQSS4gVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgb25seSB3aXRoIHRoZSBTVFMgQXNzdW1lUm9vdCBhY3Rpb24uICovXG4gICAgcHVibGljIFMzVW5sb2NrQnVja2V0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlMzVW5sb2NrQnVja2V0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgaW5pdGlhbCBhZG1pbmlzdHJhdGl2ZSBhbmQgaW5kaXZpZHVhbCBzZXR1cCBwcml2aWxlZ2VzIGZvciBBbWF6b24gU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBBbGxvd3MgbGF1bmNoaW5nIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpbyBQb3J0YWwuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0FkbWluSUFNQ29uc29sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9BZG1pbklBTUNvbnNvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBZG1pbmlzdHJhdGl2ZSBleGVjdXRpb24gcG9saWN5IGZvciB1c2luZyBJQU0gcm9sZXMgd2l0aCBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uIEFsbG93cyBhZG1pbnMgdG8gcHJvdmlzaW9uLCBtYW5hZ2UgYW5kIGFjY2VzcyByZXNvdXJjZXMgaW4geW91ciBhY2NvdW50IChleGNsdWRpbmcgYWNjZXNzIHRvIGRhdGEgcmVzb3VyY2VzKSBmb3IgSUFNLWJhc2VkIHVzYWdlIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1EZWZhdWx0RXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0FkbWluSUFNRGVmYXVsdEV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFkbWluaXN0cmF0aXZlIGV4ZWN1dGlvbiBwb2xpY3kgZm9yIHVzaW5nIElBTSByb2xlcyB3aXRoIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gQWxsb3dzIGFkbWlucyB0byBwcm92aXNpb24sIG1hbmFnZSBhbmQgYWNjZXNzIHJlc291cmNlcyBpbiB0aGUgbG9jYWwgYWNjb3VudCAoaW5jbHVkaW5nIGJyb2FkIGFjY2VzcyB0byBhbGwgQVBJcyBpbiBkYXRhIHNlcnZpY2VzIGxpa2UgUzMsIEdsdWUsIENsb3VkV2F0Y2ggTG9ncywgYW5kIG90aGVycykgZm9yIElBTS1iYXNlZCB1c2FnZSBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0FkbWluSUFNUGVybWlzc2l2ZUV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9BZG1pbklBTVBlcm1pc3NpdmVFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIElBTSBwb2xpY3kgZ3JhbnRzIGFuIElBTSByb2xlIGZ1bGwgYWNjZXNzIHRvIEFXUyBHbHVlIERhdGEgQ2F0YWxvZyAobWV0YWRhdGEpIGFuZCBBbWF6b24gUzMgKGFjdHVhbCBkYXRhKSBmb3IgZGF0YSBsYWtlIG9wZXJhdGlvbnMsIHdpdGggYWNjZXNzIHNjb3BlZCBieSBhY2NvdW50LCBhbmQgcm9sZSB0YWdzLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9BZG1pblByb2plY3RVc2VyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9BZG1pblByb2plY3RVc2VyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQmVkcm9jayBBZ2VudHMgdG8gYWNjZXNzIEFtYXpvbiBCZWRyb2NrIG1vZGVscyBhbmQgb3RoZXIgcmVzb3VyY2VzIGF0dGFjaGVkIHRvIGFuIGFnZW50IGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tBZ2VudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tBZ2VudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGFuIEFtYXpvbiBCZWRyb2NrIGNoYXQgYWdlbnQgYXBwJ3MgY29uZmlndXJhdGlvbiBhbmQgQW1hem9uIEJlZHJvY2sgYWdlbnQgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0NoYXRBZ2VudFVzZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tDaGF0QWdlbnRVc2VyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQmVkcm9jayB0byBhY2Nlc3MgQW1hem9uIEJlZHJvY2sgbW9kZWxzIGFuZCBkYXRhc2V0cyBmb3IgZXZhbHVhdGlvbiBqb2JzIGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tFdmFsdWF0aW9uSm9iU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0V2YWx1YXRpb25Kb2JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQmVkcm9jayBGbG93cyB0byBhY2Nlc3MgQW1hem9uIEJlZHJvY2sgbW9kZWxzIGFuZCBvdGhlciByZXNvdXJjZXMgYXR0YWNoZWQgdG8gYSBmbG93IGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tGbG93U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0Zsb3dTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTGFtYmRhIHRvIGFjY2VzcyBhbiBBbWF6b24gQmVkcm9jayBmdW5jdGlvbiBjb21wb25lbnQncyBjb25maWd1cmF0aW9uIGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tGdW5jdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0Z1bmN0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjb25maWd1cmUgdmVjdG9yIHN0b3JlcyBhbmQgQW1hem9uIEJlZHJvY2sga25vd2xlZGdlIGJhc2VzIGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tLbm93bGVkZ2VCYXNlQ3VzdG9tUmVzb3VyY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0tub3dsZWRnZUJhc2VDdXN0b21SZXNvdXJjZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQmVkcm9jayBLbm93bGVkZ2UgQmFzZXMgdG8gYWNjZXNzIEFtYXpvbiBCZWRyb2NrIG1vZGVscyBhbmQgZGF0YSBzb3VyY2VzIGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tLbm93bGVkZ2VCYXNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0tub3dsZWRnZUJhc2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBhbiBBbWF6b24gQmVkcm9jayBwcm9tcHQgYW5kIGl0cyBjb25maWd1cmF0aW9uIGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tQcm9tcHRVc2VyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrUHJvbXB0VXNlclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyB1c2VkIGJ5IEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIHRvIGNhdGFsb2csIGRpc2NvdmVyLCBnb3Zlcm4sIHNoYXJlLCBhbmQgYW5hbHl6ZSBkYXRhIGluIHRoZSBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBkb21haW4uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0RvbWFpbkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRG9tYWluRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBmb3IgZG9tYWluIGxldmVsIGFjdGlvbnMgaW4gdGhlIHBvcnRhbCB0aGF0IGFyZSBwZXJmb3JtZWQgYnkgQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0RvbWFpblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0RvbWFpblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgcGVybWlzc2lvbnMgcmVsYXRlZCB0byBFTVIuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0VNUkNvbnRhaW5lcnNTeXN0ZW1OYW1lc3BhY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0VNUkNvbnRhaW5lcnNTeXN0ZW1OYW1lc3BhY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgcGVybWlzc2lvbnMgcmVsYXRlZCB0byBFTVIuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0VNUkluc3RhbmNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9FTVJJbnN0YW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBjcmVhdGVzIElBTSByb2xlcyBmb3IgcHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIEVNUi4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRU1SU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRU1SU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvIHZpYSB0aGUgQW1hem9uIFNhZ2VNYWtlciBtYW5hZ2VtZW50IGNvbnNvbGUuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIHVzZXMgdGhpcyBwb2xpY3kgdG8gcHJvdmlzaW9uIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFByb3Zpc2lvbmluZ1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFByb3Zpc2lvbmluZ1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBjcmVhdGVzIElBTSByb2xlcyBmb3IgcHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIFNhZ2VNYWtlci4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFJvbGVNYWNoaW5lTGVhcm5pbmdQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFJvbGVNYWNoaW5lTGVhcm5pbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBQcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Qcm9qZWN0VXNlclJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1Byb2plY3RVc2VyUm9sZVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBjcmVhdGVzIElBTSByb2xlcyBmb3IgcHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFVzZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1Byb2plY3RVc2VyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBydW5uaW5nIHF1ZXJ5IGV4ZWN1dGlvbnMgb24gZmVkZXJhdGVkIGNvbm5lY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9RdWVyeUV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvUXVlcnlFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgaW5kaXZpZHVhbCBzZXR1cCBwcml2aWxlZ2VzIGZvciBBbWF6b24gU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBBbGxvd3MgbGF1bmNoaW5nIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpbyBQb3J0YWwuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1VzZXJJQU1Db25zb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1VzZXJJQU1Db25zb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRXhlY3V0aW9uIHBvbGljeSBmb3IgdXNpbmcgSUFNIHJvbGVzIHdpdGggU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiBBbGxvd3MgdXNlcnMgdG8gYWNjZXNzIHJlc291cmNlcyBpbiB0aGUgbG9jYWwgYWNjb3VudCAoZXhjbHVkaW5nIGFjY2VzcyB0byBkYXRhIHJlc291cmNlcykgZm9yIElBTS1iYXNlZCB1c2FnZSBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1VzZXJJQU1EZWZhdWx0RXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1VzZXJJQU1EZWZhdWx0RXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRXhlY3V0aW9uIHBvbGljeSBmb3IgdXNpbmcgSUFNIHJvbGVzIHdpdGggU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiBBbGxvd3MgdXNlcnMgdG8gYWNjZXNzIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQgKGluY2x1ZGluZyBicm9hZCBhY2Nlc3MgdG8gYWxsIEFQSXMgaW4gZGF0YSBzZXJ2aWNlcyBsaWtlIFMzLCBHbHVlLCBDbG91ZFdhdGNoIExvZ3MsIGFuZCBvdGhlcnMpIGZvciBJQU0tYmFzZWQgdXNhZ2Ugb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Vc2VySUFNUGVybWlzc2l2ZUV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Vc2VySUFNUGVybWlzc2l2ZUV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQvd3JpdGUgYWNjZXNzIHRvIEFXUyBTZWNyZXRzIE1hbmFnZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlOiB0aGlzIGV4bHVkZXMgSUFNIGFjdGlvbnMsIHNvIGNvbWJpbmUgd2l0aCBJQU1GdWxsQWNjZXNzIGlmIHJvdGF0aW9uIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQuICovXG4gICAgcHVibGljIFNlY3JldHNNYW5hZ2VyUmVhZFdyaXRlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3JldHNNYW5hZ2VyUmVhZFdyaXRlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlcnMgdG8gYWNjZXNzIHRoZSBTZWN1cml0eSBBZ2VudCBXZWIgQXBwbGljYXRpb24gZm9yIGNvbmZpZ3VyaW5nIGFuZCBleGVjdXRpbmcgYXV0b21hdGVkIHNlY3VyaXR5IHBlbmV0cmF0aW9uIHRlc3RzLiBUaGlzIHBvbGljeSBlbmFibGVzIHVzZXJzIHRvIG1hbmFnZSBwZW50ZXN0cywgdmlldyBmaW5kaW5ncywgbW9uaXRvciB0ZXN0IGV4ZWN1dGlvbiwgYW5kIGludGVyYWN0IHdpdGggQVdTIHJlc291cmNlcyByZXF1aXJlZCBmb3Igc2VjdXJpdHkgdGVzdGluZyBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBTZWN1cml0eUFnZW50V2ViQXBwQVBJUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3VyaXR5QWdlbnRXZWJBcHBBUElQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgYXV0aGVudGljYXRlZCB1c2VycyB0byBhY2Nlc3MgdGhlIFNlY3VyaXR5IEFnZW50IFdlYiBBcHBsaWNhdGlvbiBmb3IgY29uZmlndXJpbmcgYW5kIGV4ZWN1dGluZyBhdXRvbWF0ZWQgc2VjdXJpdHkgcGVuZXRyYXRpb24gdGVzdHMuIFRoaXMgcG9saWN5IGVuYWJsZXMgdXNlcnMgdG8gbWFuYWdlIHBlbnRlc3RzLCB2aWV3IGZpbmRpbmdzLCBtb25pdG9yIHRlc3QgZXhlY3V0aW9uLCBhbmQgaW50ZXJhY3Qgd2l0aCBBV1MgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBzZWN1cml0eSB0ZXN0aW5nIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIFNlY3VyaXR5QWdlbnRXZWJBcHBQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VjdXJpdHlBZ2VudFdlYkFwcFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBzZWN1cml0eSBhdWRpdCB0ZW1wbGF0ZSBncmFudHMgYWNjZXNzIHRvIHJlYWQgc2VjdXJpdHkgY29uZmlndXJhdGlvbiBtZXRhZGF0YS4gSXQgaXMgdXNlZnVsIGZvciBzb2Z0d2FyZSB0aGF0IGF1ZGl0cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbiBBV1MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgU2VjdXJpdHlBdWRpdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZWN1cml0eUF1ZGl0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSByZXNvdXJjZXMgY3JlYXRlZCBieSBTZWN1cml0eSBMYWtlLiAqL1xuICAgIHB1YmxpYyBTZWN1cml0eUxha2VSZXNvdXJjZU1hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZWN1cml0eUxha2VSZXNvdXJjZU1hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBvcGVyYXRlIHRoZSBBbWF6b24gU2VjdXJpdHkgTGFrZSBzZXJ2aWNlIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIFNlY3VyaXR5TGFrZVNlcnZpY2VMaW5rZWRSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3VyaXR5TGFrZVNlcnZpY2VMaW5rZWRSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgdG8gYWxsb3cgdGhlIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIENvbm5lY3RvciB0byBtaWdyYXRlIFZNcyB0byBFQzIuIEFsbG93cyBjb21tdW5pY2F0aW9uIHdpdGggdGhlIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UsIHJlYWQvd3JpdGUgYWNjZXNzIHRvIFMzIGJ1Y2tldHMgc3RhcnRpbmcgd2l0aCAnc21zLWItJyBhbmQgJ2ltcG9ydC10by1lYzItJyBhcyB3ZWxsIGFzIHRoZSBidWNrZXRzIHVzZWQgZm9yIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIENvbm5lY3RvciB1cGdyYWRlLCBBV1MgU2VydmVyIE1pZ3JhdGlvbiBDb25uZWN0b3IgcmVnaXN0cmF0aW9uIHdpdGggQVdTLCBhbmQgbWV0cmljcyB1cGxvYWQgdG8gQVdTLiAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25Db25uZWN0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uQ29ubmVjdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIGFsbCBmZWF0dXJlcyBvZiB0aGUgU2VydmVyIE1pZ3JhdGlvbiBTZXJ2aWNlIENvbnNvbGUgKi9cbiAgICBwdWJsaWMgU2VydmVyTWlncmF0aW9uU2VydmljZUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlcnZlck1pZ3JhdGlvblNlcnZpY2VDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHRvIGFsbG93IHRoZSBBV1MgU2VydmVyIE1pZ3JhdGlvbiBTZXJ2aWNlIHRvIGNyZWF0ZSBhbmQgdXBkYXRlIHJlbGV2YW50IEFXUyByZXNvdXJjZXMgaW50byB0aGUgY3VzdG9tZXIncyBBV1MgYWNjb3VudCBmb3IgbGF1bmNoaW5nIG1pZ3JhdGVkIHNlcnZlcnMgYW5kIGFwcGxpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgU2VydmVyTWlncmF0aW9uU2VydmljZUxhdW5jaFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uU2VydmljZUxhdW5jaFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyB0byBhbGxvdyB0aGUgQVdTIFNNUyB0byBydW4gdXNlZCBkYXRhIHZhbGlkYXRpb24gc2NyaXB0IGFuZCBzZW5kIHNjcmlwdCBzdWNjZXNzL2ZhaWx1cmUgYmFjayB0byBTTVMgKi9cbiAgICBwdWJsaWMgU2VydmVyTWlncmF0aW9uU2VydmljZVJvbGVGb3JJbnN0YW5jZVZhbGlkYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uU2VydmljZVJvbGVGb3JJbnN0YW5jZVZhbGlkYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBTZXJ2aWNlIFF1b3RhcyAqL1xuICAgIHB1YmxpYyBTZXJ2aWNlUXVvdGFzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2aWNlUXVvdGFzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gU2VydmljZSBRdW90YXMgKi9cbiAgICBwdWJsaWMgU2VydmljZVF1b3Rhc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlcnZpY2VRdW90YXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBTZXJ2aWNlIFF1b3RhcyB0byBjcmVhdGUgc3VwcG9ydCBjYXNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBTZXJ2aWNlUXVvdGFzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmljZVF1b3Rhc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHByb2dyYW1tYXRpYyBhY2Nlc3MgdG8gQVdTIHRocm91Z2ggdGhlIEFXUyBTaWduLWluIHNlcnZpY2UsIGluY2x1ZGluZyBPQXV0aDIgdG9rZW4gY3JlYXRpb24gZm9yIGRldmVsb3BlciB0b29scyBhbmQgYXBwbGljYXRpb25zLiAqL1xuICAgIHB1YmxpYyBTaWduSW5Mb2NhbERldmVsb3BtZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNpZ25JbkxvY2FsRGV2ZWxvcG1lbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgU2ltcGxlIFdvcmtmbG93IGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgU2ltcGxlV29ya2Zsb3dGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNpbXBsZVdvcmtmbG93RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBTTVNWb2ljZSB0byBwdWJsaXNoIG1ldHJpY3MgdG8gQ2xvdWRXYXRjaCBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBTTVNWb2ljZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNNU1ZvaWNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3Mgc3BsaXQgY29zdCBhbGxvY2F0aW9uIGRhdGEgdG8gcmV0cmlldmUgQVdTIE9yZ2FuaXphdGlvbnMgaW5mb3JtYXRpb24sIGlmIGFwcGxpY2FibGUsIGFuZCBjb2xsZWN0IHRlbGVtZXRyeSBkYXRhIGZvciB0aGUgc3BsaXQgY29zdCBhbGxvY2F0aW9uIGRhdGEgc2VydmljZXMgdGhhdCB0aGUgY3VzdG9tZXIgaGFzIG9wdGVkIGluIHRvLiAqL1xuICAgIHB1YmxpYyBTcGxpdENvc3RBbGxvY2F0aW9uRGF0YVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNwbGl0Q29zdEFsbG9jYXRpb25EYXRhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgdG8gdW5sb2NrIGEgU1FTIHF1ZXVlIHBvbGljeSB1c2luZyB0aGUgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAoU1RTKSBBc3N1bWVSb290IEFQSS4gVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgb25seSB3aXRoIHRoZSBTVFMgQXNzdW1lUm9vdCBhY3Rpb24uICovXG4gICAgcHVibGljIFNRU1VubG9ja1F1ZXVlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNRU1VubG9ja1F1ZXVlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gY2hlY2sgUXVpY2sgU2V0dXAgY29uZmlndXJhdGlvbiBoZWFsdGgsIGVuc3VyZSBjb25zaXN0ZW50IHVzZSBvZiBwYXJhbWV0ZXJzIGFuZCBwcm92aXNpb25lZCByZXNvdXJjZXMsIGFuZCByZW1lZGlhdGUgcmVzb3VyY2VzIHdoZW4gZHJpZnQgaXMgZGV0ZWN0ZWQuICovXG4gICAgcHVibGljIFNTTVF1aWNrU2V0dXBSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNTTVF1aWNrU2V0dXBSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHRyb3VibGVzaG9vdCBhbmQgcmVzb2x2ZSBpc3N1ZXMgaW4gYW4gQVdTIGFjY291bnQuIFRoaXMgcG9saWN5IGFsc28gZW5hYmxlcyB0aGUgdXNlciB0byBjb250YWN0IEFXUyBzdXBwb3J0IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIGNhc2VzLiAqL1xuICAgIHB1YmxpYyBTdXBwb3J0VXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TdXBwb3J0VXNlcik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIHJlc291cmNlcyByZXF1aXJlZCBmb3IgYXBwbGljYXRpb24gYW5kIGRldmVsb3BtZW50IG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIFN5c3RlbUFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU3lzdGVtQWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBUcmFuc2xhdGUuICovXG4gICAgcHVibGljIFRyYW5zbGF0ZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVHJhbnNsYXRlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIFRyYW5zbGF0ZS4gKi9cbiAgICBwdWJsaWMgVHJhbnNsYXRlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVHJhbnNsYXRlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdmlldyByZXNvdXJjZXMgYW5kIGJhc2ljIG1ldGFkYXRhIGFjcm9zcyBhbGwgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBWaWV3T25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WaWV3T25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgVk0gSW1wb3J0L0V4cG9ydCBzZXJ2aWNlIHJvbGUsIGZvciBjdXN0b21lcnMgdXNpbmcgdGhlIEFXUyBDb25uZWN0b3IuIFRoZSBWTSBJbXBvcnQvRXhwb3J0IHNlcnZpY2UgYXNzdW1lcyBhIHJvbGUgd2l0aCB0aGlzIHBvbGljeSB0byBmdWxmaWxsIHZpcnR1YWwgbWFjaGluZSBtaWdyYXRpb24gcmVxdWVzdHMgZnJvbSB0aGUgQVdTIENvbm5lY3RvciB2aXJ0dWFsIGFwcGxpYW5jZS4gKE5vdGUgdGhhdCB0aGUgQVdTIENvbm5lY3RvciB1c2VzIHRoZSBcIkFXU0Nvbm5lY3RvclwiIG1hbmFnZWQgcG9saWN5IHRvIGlzc3VlIHJlcXVlc3RzIG9uIHRoZSBjdXN0b21lcidzIGJlaGFsZiB0byB0aGUgVk0gSW1wb3J0L0V4cG9ydCBzZXJ2aWNlLikgUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIEFNSXMgYW5kIEVCUyBzbmFwc2hvdHMsIG1vZGlmeSBFQlMgc25hcHNob3QgYXR0cmlidXRlcywgbWFrZSBcIkRlc2NyaWJlKlwiIGNhbGxzIG9uIEVDMiBvYmplY3RzLCBhbmQgcmVhZCBmcm9tIFMzIGJ1Y2tldHMgc3RhcnRpbmcgd2l0aCAnaW1wb3J0LXRvLWVjMi0nLiAqL1xuICAgIHB1YmxpYyBWTUltcG9ydEV4cG9ydFJvbGVGb3JBV1NDb25uZWN0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVk1JbXBvcnRFeHBvcnRSb2xlRm9yQVdTQ29ubmVjdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFZQQyBMYXR0aWNlIGFuZCBhY2Nlc3MgdG8gZGVwZW5kZW5jeSBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgVlBDTGF0dGljZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVlBDTGF0dGljZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBWUEMgTGF0dGljZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUsIGFuZCBsaW1pdGVkIGFjY2VzcyB0byBkZXBlbmRlbmN5IHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBWUENMYXR0aWNlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVlBDTGF0dGljZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGludm9raW5nIEFtYXpvbiBWUEMgTGF0dGljZSBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgVlBDTGF0dGljZVNlcnZpY2VzSW52b2tlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlZQQ0xhdHRpY2VTZXJ2aWNlc0ludm9rZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0aW5nIFNMUiB0byB3cml0ZSBjdXN0b21lcidzIGxvZ3MgdG8gYSBmaXJlaG9zZSBzdHJlYW0gKi9cbiAgICBwdWJsaWMgV0FGTG9nZ2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLldBRkxvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0aW5nIFNMUiB0byB3cml0ZSBjdXN0b21lcidzIGxvZ3MgdG8gYSBmaXJlaG9zZSBzdHJlYW0gKi9cbiAgICBwdWJsaWMgV0FGUmVnaW9uYWxMb2dnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuV0FGUmVnaW9uYWxMb2dnaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBjcmVhdGVzIGEgc2VydmljZS1saW5rZWQgcm9sZSB0aGF0IGFsbG93cyBBV1MgV0FGIHRvIHdyaXRlIGxvZ3MgdG8gQW1hem9uIEtpbmVzaXMgRGF0YSBGaXJlaG9zZS4gKi9cbiAgICBwdWJsaWMgV0FGVjJMb2dnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuV0FGVjJMb2dnaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgV2VsbC1BcmNoaXRlY3RlZCBUb29sIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBXZWxsQXJjaGl0ZWN0ZWRDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XZWxsQXJjaGl0ZWN0ZWRDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIFdlbGwtQXJjaGl0ZWN0ZWQgVG9vbCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgV2VsbEFyY2hpdGVjdGVkQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLldlbGxBcmNoaXRlY3RlZENvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya0xpbmsgKi9cbiAgICBwdWJsaWMgV29ya0xpbmtTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Xb3JrTGlua1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG59XG4iXX0=