UNPKG

cdk-iam-floyd

Version:

AWS IAM policy statement generator with fluent interface for AWS CDK

720 lines 67.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BedrockMantle = void 0; const shared_1 = require("../../shared"); /** * Statement provider for service [bedrock-mantle](https://docs.aws.amazon.com/service-authorization/latest/reference/list_bedrock-mantle.html). * * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement */ class BedrockMantle extends shared_1.PolicyStatement { /** * Grants permission to archive a specific project * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toArchiveProject() { return this.to('ArchiveProject'); } /** * Grants permission to associate a customized model with a project * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toAssociateCustomizedModel() { return this.to('AssociateCustomizedModel'); } /** * Grants permission to cancel an in-progress fine tuning job * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toCancelFineTuningJob() { return this.to('CancelFineTuningJob'); } /** * Grants permission to cancel an in-progress inference request * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toCancelInference() { return this.to('CancelInference'); } /** * Grants permission to import a customized model with custom weights * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toCreateCustomizedModel() { return this.to('CreateCustomizedModel'); } /** * Grants permission to create a file in a project * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toCreateFile() { return this.to('CreateFile'); } /** * Grants permission to create a fine tuning job * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toCreateFineTuningJob() { return this.to('CreateFineTuningJob'); } /** * Grants permission to create a chat completion inference request * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toCreateInference() { return this.to('CreateInference'); } /** * Grants permission to create a project * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toCreateProject() { return this.to('CreateProject'); } /** * Grants permission to create a capacity reservation for a model * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toCreateReservation() { return this.to('CreateReservation'); } /** * Grants permission to delete a customized model * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toDeleteCustomizedModel() { return this.to('DeleteCustomizedModel'); } /** * Grants permission to delete a specific file * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toDeleteFile() { return this.to('DeleteFile'); } /** * Grants permission to delete a specific inference request * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toDeleteInference() { return this.to('DeleteInference'); } /** * Grants permission to delete a capacity reservation * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toDeleteReservation() { return this.to('DeleteReservation'); } /** * Grants permission to disassociate a customized model from a project * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toDisassociateCustomizedModel() { return this.to('DisassociateCustomizedModel'); } /** * Grants permission to retrieve the account-wide data retention setting * * Access Level: Read * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toGetAccountDataRetention() { return this.to('GetAccountDataRetention'); } /** * Grants permission to get customized model * * Access Level: Read * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toGetCustomizedModel() { return this.to('GetCustomizedModel'); } /** * Grants permission to retrieve information about a specific file * * Access Level: Read * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toGetFile() { return this.to('GetFile'); } /** * Grants permission to retrieve details of a specific fine tuning job * * Access Level: Read * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toGetFineTuningJob() { return this.to('GetFineTuningJob'); } /** * Grants permission to retrieve details of a specific inference request * * Access Level: Read * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toGetInference() { return this.to('GetInference'); } /** * Grants permission to retrieve information about a specific model * * Access Level: Read * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toGetModel() { return this.to('GetModel'); } /** * Grants permission to retrieve details of a specific project * * Access Level: Read * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toGetProject() { return this.to('GetProject'); } /** * Grants permission to get reservation * * Access Level: Read * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toGetReservation() { return this.to('GetReservation'); } /** * Grants permission to list project associations for a customized model * * Access Level: List * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toListCustomizedModelAssociations() { return this.to('ListCustomizedModelAssociations'); } /** * Grants permission to list customized models * * Access Level: List * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toListCustomizedModels() { return this.to('ListCustomizedModels'); } /** * Grants permission to list all available files in a project * * Access Level: List * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toListFiles() { return this.to('ListFiles'); } /** * Grants permission to list all available fine tuning jobs in a project * * Access Level: List * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toListFineTuningJobs() { return this.to('ListFineTuningJobs'); } /** * Grants permission to list all available models in a project * * Access Level: List * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toListModels() { return this.to('ListModels'); } /** * Grants permission to list projects * * Access Level: List * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toListProjects() { return this.to('ListProjects'); } /** * Grants permission to list reservations * * Access Level: List * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toListReservations() { return this.to('ListReservations'); } /** * Grants permission to list tags for a resource * * Access Level: Read * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toListTagsForResource() { return this.to('ListTagsForResource'); } /** * Grants permission to set the account-wide data retention setting * * Access Level: Write * * Possible conditions: * - .ifDataRetentionMode() * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toPutAccountDataRetention() { return this.to('PutAccountDataRetention'); } /** * Grants permission to tag a resource * * Access Level: Tagging, Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toTagResource() { return this.to('TagResource'); } /** * Grants permission to untag a resource * * Access Level: Tagging, Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toUntagResource() { return this.to('UntagResource'); } /** * Grants permission to update a specific project * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toUpdateProject() { return this.to('UpdateProject'); } /** * Grants permission to update reservation * * Access Level: Write * * https://docs.aws.amazon.com/bedrock/latest/APIReference/#welcome */ toUpdateReservation() { return this.to('UpdateReservation'); } /** * Grants permission to make API calls using bearer token authentication * * Access Level: List * * Possible conditions: * - .ifBearerTokenType() */ toCallWithBearerToken() { return this.to('CallWithBearerToken'); } /** * Adds a resource of type customized-model to the statement * * https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-mantle.html#CustomizedModel * * @param resourceId - Identifier for the resourceId. * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account. * @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region. * @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition. * * Possible conditions: * - .ifAwsResourceTag() */ onCustomizedModel(resourceId, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:bedrock-mantle:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:customized-model/${resourceId}`); } /** * Adds a resource of type project to the statement * * https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-mantle.html#Project * * @param resourceId - Identifier for the resourceId. * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account. * @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region. * @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition. * * Possible conditions: * - .ifAwsResourceTag() */ onProject(resourceId, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:bedrock-mantle:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:project/${resourceId}`); } /** * Adds a resource of type reservation to the statement * * https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-mantle.html#Reservation * * @param resourceId - Identifier for the resourceId. * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account. * @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region. * @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition. * * Possible conditions: * - .ifAwsResourceTag() */ onReservation(resourceId, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:bedrock-mantle:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:reservation/${resourceId}`); } /** * Filters access by the tags that are passed in the request * * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag * * Applies to actions: * - .toCreateCustomizedModel() * - .toCreateProject() * - .toCreateReservation() * - .toTagResource() * * @param tagKey The tag key to check * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifAwsRequestTag(tagKey, value, operator) { return this.if(`aws:RequestTag/${tagKey}`, value, operator ?? 'StringLike'); } /** * Filters access by the tags associated with the resource * * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag * * Applies to actions: * - .toArchiveProject() * - .toAssociateCustomizedModel() * - .toCancelFineTuningJob() * - .toCancelInference() * - .toCreateCustomizedModel() * - .toCreateFile() * - .toCreateFineTuningJob() * - .toCreateInference() * - .toCreateProject() * - .toCreateReservation() * - .toDeleteCustomizedModel() * - .toDeleteFile() * - .toDeleteInference() * - .toDeleteReservation() * - .toDisassociateCustomizedModel() * - .toGetCustomizedModel() * - .toGetFile() * - .toGetFineTuningJob() * - .toGetInference() * - .toGetModel() * - .toGetProject() * - .toGetReservation() * - .toListCustomizedModelAssociations() * - .toListCustomizedModels() * - .toListFiles() * - .toListFineTuningJobs() * - .toListModels() * - .toListProjects() * - .toListReservations() * - .toListTagsForResource() * - .toTagResource() * - .toUntagResource() * - .toUpdateProject() * - .toUpdateReservation() * * Applies to resource types: * - customized-model * - project * - reservation * * @param tagKey The tag key to check * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifAwsResourceTag(tagKey, value, operator) { return this.if(`aws:ResourceTag/${tagKey}`, value, operator ?? 'StringLike'); } /** * Filters access by the tag keys that are passed in the request * * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys * * Applies to actions: * - .toCreateCustomizedModel() * - .toCreateProject() * - .toCreateReservation() * - .toTagResource() * - .toUntagResource() * * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifAwsTagKeys(value, operator) { return this.if(`aws:TagKeys`, value, operator ?? 'StringLike'); } /** * Filters access by the Short-term or Long-term bearer tokens * * https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockmantle.html#amazonbedrockmantle-policy-keys * * Applies to actions: * - .toCallWithBearerToken() * * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifBearerTokenType(value, operator) { return this.if(`BearerTokenType`, value, operator ?? 'StringLike'); } /** * Filters access by the ARN of the customized model being associated or referenced in cross-resource operations * * https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockmantle.html#amazonbedrockmantle-policy-keys * * Applies to actions: * - .toAssociateCustomizedModel() * - .toDisassociateCustomizedModel() * * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifCustomizedModelArn(value, operator) { return this.if(`CustomizedModelArn`, value, operator ?? 'StringLike'); } /** * Filters access by the data retention mode being set on a project or account * * https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockmantle.html#amazonbedrockmantle-policy-keys * * Applies to actions: * - .toCreateProject() * - .toPutAccountDataRetention() * - .toUpdateProject() * * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifDataRetentionMode(value, operator) { return this.if(`DataRetentionMode`, value, operator ?? 'StringLike'); } /** * Filters access by the specified file identifiers * * https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockmantle.html#amazonbedrockmantle-policy-keys * * Applies to actions: * - .toCreateFineTuningJob() * - .toDeleteFile() * - .toGetFile() * * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifFiles(value, operator) { return this.if(`Files`, value, operator ?? 'StringLike'); } /** * Filters access by the specified fine-tuning job identifier * * https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockmantle.html#amazonbedrockmantle-policy-keys * * Applies to actions: * - .toCancelFineTuningJob() * - .toGetFineTuningJob() * * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifFineTuningJob(value, operator) { return this.if(`FineTuningJob`, value, operator ?? 'StringLike'); } /** * Filters access by the specified Model * * https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockmantle.html#amazonbedrockmantle-policy-keys * * Applies to actions: * - .toCreateFineTuningJob() * - .toCreateInference() * * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifModel(value, operator) { return this.if(`Model`, value, operator ?? 'StringLike'); } /** * Filters access by the ARN of the project being associated or referenced in cross-resource operations * * https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockmantle.html#amazonbedrockmantle-policy-keys * * Applies to actions: * - .toAssociateCustomizedModel() * - .toCreateReservation() * - .toDeleteReservation() * - .toDisassociateCustomizedModel() * - .toUpdateReservation() * * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifProjectArn(value, operator) { return this.if(`ProjectArn`, value, operator ?? 'StringLike'); } /** * Filters access by the ARN of the reservation being referenced in cross-resource operations * * https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockmantle.html#amazonbedrockmantle-policy-keys * * Applies to actions: * - .toCreateReservation() * - .toDeleteReservation() * - .toUpdateReservation() * * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifReservationArn(value, operator) { return this.if(`ReservationArn`, value, operator ?? 'StringLike'); } /** * Filters access by the specified ServiceTier * * https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockmantle.html#amazonbedrockmantle-policy-keys * * Applies to actions: * - .toCreateInference() * * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifServiceTier(value, operator) { return this.if(`ServiceTier`, value, operator ?? 'StringLike'); } /** * Statement provider for service [bedrock-mantle](https://docs.aws.amazon.com/service-authorization/latest/reference/list_bedrock-mantle.html). * */ constructor(props) { super(props); this.servicePrefix = 'bedrock-mantle'; this.accessLevelList = { Write: [ 'ArchiveProject', 'AssociateCustomizedModel', 'CancelFineTuningJob', 'CancelInference', 'CreateCustomizedModel', 'CreateFile', 'CreateFineTuningJob', 'CreateInference', 'CreateProject', 'CreateReservation', 'DeleteCustomizedModel', 'DeleteFile', 'DeleteInference', 'DeleteReservation', 'DisassociateCustomizedModel', 'PutAccountDataRetention', 'TagResource', 'UntagResource', 'UpdateProject', 'UpdateReservation' ], Read: [ 'GetAccountDataRetention', 'GetCustomizedModel', 'GetFile', 'GetFineTuningJob', 'GetInference', 'GetModel', 'GetProject', 'GetReservation', 'ListTagsForResource' ], List: [ 'ListCustomizedModelAssociations', 'ListCustomizedModels', 'ListFiles', 'ListFineTuningJobs', 'ListModels', 'ListProjects', 'ListReservations', 'CallWithBearerToken' ], Tagging: [ 'TagResource', 'UntagResource' ] }; } } exports.BedrockMantle = BedrockMantle; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay1tYW50bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJiZWRyb2NrLW1hbnRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBeUQ7QUFHekQ7Ozs7R0FJRztBQUNILE1BQWEsYUFBYyxTQUFRLHdCQUFlO0lBR2hEOzs7Ozs7T0FNRztJQUNJLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksMEJBQTBCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksdUJBQXVCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsRUFB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QixxQkFBcUI7YUFDdEI7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osaUNBQWlDO2dCQUNqQyxzQkFBc0I7Z0JBQ3RCLFdBQVc7Z0JBQ1gsb0JBQW9CO2dCQUNwQixZQUFZO2dCQUNaLGNBQWM7Z0JBQ2Qsa0JBQWtCO2dCQUNsQixxQkFBcUI7YUFDdEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsYUFBYTtnQkFDYixlQUFlO2FBQ2hCO1NBQ0YsQ0FBQztJQTJTRixDQUFDO0NBQ0Y7QUExdkJELHNDQTB2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2JlZHJvY2stbWFudGxlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9iZWRyb2NrLW1hbnRsZS5odG1sKS5cbiAqXG4gKiBAcGFyYW0gc2lkIFtTSURdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWwpIG9mIHRoZSBzdGF0ZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEJlZHJvY2tNYW50bGUgZXh0ZW5kcyBQb2xpY3lTdGF0ZW1lbnQge1xuICBwdWJsaWMgc2VydmljZVByZWZpeCA9ICdiZWRyb2NrLW1hbnRsZSc7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFyY2hpdmUgYSBzcGVjaWZpYyBwcm9qZWN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2svbGF0ZXN0L0FQSVJlZmVyZW5jZS8jd2VsY29tZVxuICAgKi9cbiAgcHVibGljIHRvQXJjaGl2ZVByb2plY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0FyY2hpdmVQcm9qZWN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXNzb2NpYXRlIGEgY3VzdG9taXplZCBtb2RlbCB3aXRoIGEgcHJvamVjdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0Fzc29jaWF0ZUN1c3RvbWl6ZWRNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXNzb2NpYXRlQ3VzdG9taXplZE1vZGVsJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY2FuY2VsIGFuIGluLXByb2dyZXNzIGZpbmUgdHVuaW5nIGpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0NhbmNlbEZpbmVUdW5pbmdKb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NhbmNlbEZpbmVUdW5pbmdKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjYW5jZWwgYW4gaW4tcHJvZ3Jlc3MgaW5mZXJlbmNlIHJlcXVlc3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9DYW5jZWxJbmZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NhbmNlbEluZmVyZW5jZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGltcG9ydCBhIGN1c3RvbWl6ZWQgbW9kZWwgd2l0aCBjdXN0b20gd2VpZ2h0c1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUN1c3RvbWl6ZWRNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ3VzdG9taXplZE1vZGVsJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgZmlsZSBpbiBhIHByb2plY3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVGaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVGaWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgZmluZSB0dW5pbmcgam9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2svbGF0ZXN0L0FQSVJlZmVyZW5jZS8jd2VsY29tZVxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlRmluZVR1bmluZ0pvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlRmluZVR1bmluZ0pvYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIGNoYXQgY29tcGxldGlvbiBpbmZlcmVuY2UgcmVxdWVzdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUluZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlSW5mZXJlbmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgcHJvamVjdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVByb2plY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVByb2plY3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBjYXBhY2l0eSByZXNlcnZhdGlvbiBmb3IgYSBtb2RlbFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVJlc2VydmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVSZXNlcnZhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGN1c3RvbWl6ZWQgbW9kZWxcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVDdXN0b21pemVkTW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUN1c3RvbWl6ZWRNb2RlbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHNwZWNpZmljIGZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVGaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVGaWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgc3BlY2lmaWMgaW5mZXJlbmNlIHJlcXVlc3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVJbmZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUluZmVyZW5jZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGNhcGFjaXR5IHJlc2VydmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2svbGF0ZXN0L0FQSVJlZmVyZW5jZS8jd2VsY29tZVxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlUmVzZXJ2YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVJlc2VydmF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGlzYXNzb2NpYXRlIGEgY3VzdG9taXplZCBtb2RlbCBmcm9tIGEgcHJvamVjdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0Rpc2Fzc29jaWF0ZUN1c3RvbWl6ZWRNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGlzYXNzb2NpYXRlQ3VzdG9taXplZE1vZGVsJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgdGhlIGFjY291bnQtd2lkZSBkYXRhIHJldGVudGlvbiBzZXR0aW5nXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9HZXRBY2NvdW50RGF0YVJldGVudGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0QWNjb3VudERhdGFSZXRlbnRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgY3VzdG9taXplZCBtb2RlbFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2svbGF0ZXN0L0FQSVJlZmVyZW5jZS8jd2VsY29tZVxuICAgKi9cbiAgcHVibGljIHRvR2V0Q3VzdG9taXplZE1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDdXN0b21pemVkTW9kZWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIGZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0dldEZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldEZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBkZXRhaWxzIG9mIGEgc3BlY2lmaWMgZmluZSB0dW5pbmcgam9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9HZXRGaW5lVHVuaW5nSm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRGaW5lVHVuaW5nSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgZGV0YWlscyBvZiBhIHNwZWNpZmljIGluZmVyZW5jZSByZXF1ZXN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9HZXRJbmZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldEluZmVyZW5jZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgbW9kZWxcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0dldE1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRNb2RlbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGRldGFpbHMgb2YgYSBzcGVjaWZpYyBwcm9qZWN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9HZXRQcm9qZWN0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRQcm9qZWN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IHJlc2VydmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9HZXRSZXNlcnZhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0UmVzZXJ2YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHByb2plY3QgYXNzb2NpYXRpb25zIGZvciBhIGN1c3RvbWl6ZWQgbW9kZWxcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDdXN0b21pemVkTW9kZWxBc3NvY2lhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RDdXN0b21pemVkTW9kZWxBc3NvY2lhdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGN1c3RvbWl6ZWQgbW9kZWxzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0Q3VzdG9taXplZE1vZGVscygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEN1c3RvbWl6ZWRNb2RlbHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGFsbCBhdmFpbGFibGUgZmlsZXMgaW4gYSBwcm9qZWN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvQVBJUmVmZXJlbmNlLyN3ZWxjb21lXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0RmlsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RGaWxlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYWxsIGF2YWlsYWJsZSBmaW5lIHR1bmluZyBqb2JzIGluIGEgcHJvamVjdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2svbGF0ZXN0L0FQSVJlZmVyZW5jZS8jd2VsY29tZVxuICAgKi9cbiAgcHVibGljIHRvTGlzdEZpbmVUdW5pbmdKb2JzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0RmluZVR1bmluZ0pvYnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGFsbCBhdmFpbGFibGUgbW9kZWxzIGluIGEgcHJvamVjdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2svbGF0ZXN0L0FQSVJlZmVyZW5jZS8jd2VsY29tZVxuICAgKi9cbiAgcHVibGljIHRvTGlzdE1vZGVscygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdE1vZGVscycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgcHJvamVjdHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RQcm9qZWN0cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFByb2plY3RzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCByZXNlcnZhdGlvbnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RSZXNlcnZhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RSZXNlcnZhdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHRhZ3MgZm9yIGEgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RUYWdzRm9yUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RUYWdzRm9yUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzZXQgdGhlIGFjY291bnQtd2lkZSBkYXRhIHJldGVudGlvbiBzZXR0aW5nXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZEYXRhUmV0ZW50aW9uTW9kZSgpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b1B1dEFjY291bnREYXRhUmV0ZW50aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdQdXRBY2NvdW50RGF0YVJldGVudGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHRhZyBhIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogVGFnZ2luZywgV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2svbGF0ZXN0L0FQSVJlZmVyZW5jZS8jd2VsY29tZVxuICAgKi9cbiAgcHVibGljIHRvVGFnUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1RhZ1Jlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdW50YWcgYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFRhZ2dpbmcsIFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b1VudGFnUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VudGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSBzcGVjaWZpYyBwcm9qZWN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2svbGF0ZXN0L0FQSVJlZmVyZW5jZS8jd2VsY29tZVxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUHJvamVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlUHJvamVjdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSByZXNlcnZhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC9BUElSZWZlcmVuY2UvI3dlbGNvbWVcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVJlc2VydmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVSZXNlcnZhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIG1ha2UgQVBJIGNhbGxzIHVzaW5nIGJlYXJlciB0b2tlbiBhdXRoZW50aWNhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZCZWFyZXJUb2tlblR5cGUoKVxuICAgKi9cbiAgcHVibGljIHRvQ2FsbFdpdGhCZWFyZXJUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ2FsbFdpdGhCZWFyZXJUb2tlbicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFjY2Vzc0xldmVsTGlzdDogQWNjZXNzTGV2ZWxMaXN0ID0ge1xuICAgIFdyaXRlOiBbXG4gICAgICAnQXJjaGl2ZVByb2plY3QnLFxuICAgICAgJ0Fzc29jaWF0ZUN1c3RvbWl6ZWRNb2RlbCcsXG4gICAgICAnQ2FuY2VsRmluZVR1bmluZ0pvYicsXG4gICAgICAnQ2FuY2VsSW5mZXJlbmNlJyxcbiAgICAgICdDcmVhdGVDdXN0b21pemVkTW9kZWwnLFxuICAgICAgJ0NyZWF0ZUZpbGUnLFxuICAgICAgJ0NyZWF0ZUZpbmVUdW5pbmdKb2InLFxuICAgICAgJ0NyZWF0ZUluZmVyZW5jZScsXG4gICAgICAnQ3JlYXRlUHJvamVjdCcsXG4gICAgICAnQ3JlYXRlUmVzZXJ2YXRpb24nLFxuICAgICAgJ0RlbGV0ZUN1c3RvbWl6ZWRNb2RlbCcsXG4gICAgICAnRGVsZXRlRmlsZScsXG4gICAgICAnRGVsZXRlSW5mZXJlbmNlJyxcbiAgICAgICdEZWxldGVSZXNlcnZhdGlvbicsXG4gICAgICAnRGlzYXNzb2NpYXRlQ3VzdG9taXplZE1vZGVsJyxcbiAgICAgICdQdXRBY2NvdW50RGF0YVJldGVudGlvbicsXG4gICAgICAnVGFnUmVzb3VyY2UnLFxuICAgICAgJ1VudGFnUmVzb3VyY2UnLFxuICAgICAgJ1VwZGF0ZVByb2plY3QnLFxuICAgICAgJ1VwZGF0ZVJlc2VydmF0aW9uJ1xuICAgIF0sXG4gICAgUmVhZDogW1xuICAgICAgJ0dldEFjY291bnREYXRhUmV0ZW50aW9uJyxcbiAgICAgICdHZXRDdXN0b21pemVkTW9kZWwnLFxuICAgICAgJ0dldEZpbGUnLFxuICAgICAgJ0dldEZpbmVUdW5pbmdKb2InLFxuICAgICAgJ0dldEluZmVyZW5jZScsXG4gICAgICAnR2V0TW9kZWwnLFxuICAgICAgJ0dldFByb2plY3QnLFxuICAgICAgJ0dldFJlc2VydmF0aW9uJyxcbiAgICAgICdMaXN0VGFnc0ZvclJlc291cmNlJ1xuICAgIF0sXG4gICAgTGlzdDogW1xuICAgICAgJ0xpc3RDdXN0b21pemVkTW9kZWxBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0xpc3RDdXN0b21pemVkTW9kZWxzJyxcbiAgICAgICdMaXN0RmlsZXMnLFxuICAgICAgJ0xpc3RGaW5lVHVuaW5nSm9icycsXG4gICAgICAnTGlzdE1vZGVscycsXG4gICAgICAnTGlzdFByb2plY3RzJyxcbiAgICAgICdMaXN0UmVzZXJ2YXRpb25zJyxcbiAgICAgICdDYWxsV2l0aEJlYXJlclRva2VuJ1xuICAgIF0sXG4gICAgVGFnZ2luZzogW1xuICAgICAgJ1RhZ1Jlc291cmNlJyxcbiAgICAgICdVbnRhZ1Jlc291cmNlJ1xuICAgIF1cbiAgfTtcblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgY3VzdG9taXplZC1tb2RlbCB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC91c2VyZ3VpZGUvYmVkcm9jay1tYW50bGUuaHRtbCNDdXN0b21pemVkTW9kZWxcbiAgICpcbiAgICogQHBhcmFtIHJlc291cmNlSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgcmVzb3VyY2VJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2