UNPKG

cdk-iam-floyd

Version:

AWS IAM policy statement generator with fluent interface for AWS CDK

902 lines 75.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AwsExternalAnthropic = void 0; const shared_1 = require("../../shared"); /** * Statement provider for service [aws-external-anthropic](https://docs.aws.amazon.com/service-authorization/latest/reference/list_claudeplatformonaws.html). * * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement */ class AwsExternalAnthropic extends shared_1.PolicyStatement { /** * Grants permission to archive a managed agent * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toArchiveAgent() { return this.to('ArchiveAgent'); } /** * Grants permission to archive a managed agent environment * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toArchiveEnvironment() { return this.to('ArchiveEnvironment'); } /** * Grants permission to archive a memory store * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toArchiveMemoryStore() { return this.to('ArchiveMemoryStore'); } /** * Grants permission to archive a managed agent session * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toArchiveSession() { return this.to('ArchiveSession'); } /** * Grants permission to archive a credential vault * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toArchiveVault() { return this.to('ArchiveVault'); } /** * Grants permission to archive a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toArchiveWorkspace() { return this.to('ArchiveWorkspace'); } /** * Grants permission to assume console access on Claude Platform * * Access Level: Write * * Possible conditions: * - .ifCapability() * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toAssumeConsole() { return this.to('AssumeConsole'); } /** * Grants permission to make API calls using bearer token authentication * * Access Level: List * * Possible conditions: * - .ifBearerTokenType() * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html */ toCallWithBearerToken() { return this.to('CallWithBearerToken'); } /** * Grants permission to cancel an in-progress batch inference request * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCancelBatchInference() { return this.to('CancelBatchInference'); } /** * Grants permission to count tokens for a message request * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCountTokens() { return this.to('CountTokens'); } /** * Grants permission to create a managed agent in a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateAgent() { return this.to('CreateAgent'); } /** * Grants permission to create a batch inference request * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateBatchInference() { return this.to('CreateBatchInference'); } /** * Grants permission to create a managed agent environment in a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateEnvironment() { return this.to('CreateEnvironment'); } /** * Grants permission to upload a file to a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateFile() { return this.to('CreateFile'); } /** * Grants permission to create a chat completion inference request * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateInference() { return this.to('CreateInference'); } /** * Grants permission to create a managed agent memory store in a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateMemoryStore() { return this.to('CreateMemoryStore'); } /** * Grants permission to create a managed agent session in a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateSession() { return this.to('CreateSession'); } /** * Grants permission to create a skill in a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateSkill() { return this.to('CreateSkill'); } /** * Grants permission to create a user profile in a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateUserProfile() { return this.to('CreateUserProfile'); } /** * Grants permission to create an enrollment URL for a user profile * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateUserProfileEnrollmentUrl() { return this.to('CreateUserProfileEnrollmentUrl'); } /** * Grants permission to create a managed agent credential vault in a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateVault() { return this.to('CreateVault'); } /** * Grants permission to create a workspace in an organization * * Access Level: Write * * Possible conditions: * - .ifAwsRequestTag() * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toCreateWorkspace() { return this.to('CreateWorkspace'); } /** * Grants permission to delete a batch inference request * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toDeleteBatchInference() { return this.to('DeleteBatchInference'); } /** * Grants permission to delete a managed agent environment * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toDeleteEnvironment() { return this.to('DeleteEnvironment'); } /** * Grants permission to delete a file from a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toDeleteFile() { return this.to('DeleteFile'); } /** * Grants permission to delete a memory store * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toDeleteMemoryStore() { return this.to('DeleteMemoryStore'); } /** * Grants permission to delete a managed agent session * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toDeleteSession() { return this.to('DeleteSession'); } /** * Grants permission to delete a skill from a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toDeleteSkill() { return this.to('DeleteSkill'); } /** * Grants permission to delete a credential vault * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toDeleteVault() { return this.to('DeleteVault'); } /** * Grants permission to retrieve the status of account setup and AWS Marketplace registration * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetAccountStatus() { return this.to('GetAccountStatus'); } /** * Grants permission to retrieve details or versions of a managed agent * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetAgent() { return this.to('GetAgent'); } /** * Grants permission to retrieve details of a batch inference request * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetBatchInference() { return this.to('GetBatchInference'); } /** * Grants permission to retrieve details of a managed agent environment * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetEnvironment() { return this.to('GetEnvironment'); } /** * Grants permission to retrieve a file or its content from a workspace * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetFile() { return this.to('GetFile'); } /** * Grants permission to retrieve details of a memory store, its memories, or its memory versions * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetMemoryStore() { return this.to('GetMemoryStore'); } /** * Grants permission to retrieve information about a specific model * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetModel() { return this.to('GetModel'); } /** * Grants permission to retrieve details, events, or resources of a managed agent session * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetSession() { return this.to('GetSession'); } /** * Grants permission to retrieve details of a skill or its versions * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetSkill() { return this.to('GetSkill'); } /** * Grants permission to retrieve details of a user profile * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetUserProfile() { return this.to('GetUserProfile'); } /** * Grants permission to retrieve details of a credential vault or its credentials * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetVault() { return this.to('GetVault'); } /** * Grants permission to retrieve details of a workspace * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toGetWorkspace() { return this.to('GetWorkspace'); } /** * Grants permission to list managed agents in a workspace * * Access Level: List * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListAgents() { return this.to('ListAgents'); } /** * Grants permission to list batch inference requests in a workspace * * Access Level: List * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListBatchInferences() { return this.to('ListBatchInferences'); } /** * Grants permission to list managed agent environments in a workspace * * Access Level: List * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListEnvironments() { return this.to('ListEnvironments'); } /** * Grants permission to list files in a workspace * * Access Level: List * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListFiles() { return this.to('ListFiles'); } /** * Grants permission to list managed agent memory stores in a workspace * * Access Level: List * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListMemoryStores() { return this.to('ListMemoryStores'); } /** * Grants permission to list available models in a workspace * * Access Level: List * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListModels() { return this.to('ListModels'); } /** * Grants permission to list managed agent sessions in a workspace * * Access Level: List * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListSessions() { return this.to('ListSessions'); } /** * Grants permission to list skills in a workspace * * Access Level: List * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListSkills() { return this.to('ListSkills'); } /** * Grants permission to list tags for a resource * * Access Level: Read * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListTagsForResource() { return this.to('ListTagsForResource'); } /** * Grants permission to list user profiles in a workspace * * Access Level: List * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListUserProfiles() { return this.to('ListUserProfiles'); } /** * Grants permission to list managed agent credential vaults in a workspace * * Access Level: List * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListVaults() { return this.to('ListVaults'); } /** * Grants permission to list workspaces in an organization * * Access Level: List * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toListWorkspaces() { return this.to('ListWorkspaces'); } /** * Grants permission to tag a resource * * Access Level: Tagging * * Possible conditions: * - .ifAwsTagKeys() * - .ifAwsRequestTag() * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toTagResource() { return this.to('TagResource'); } /** * Grants permission to untag a resource * * Access Level: Tagging * * Possible conditions: * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toUntagResource() { return this.to('UntagResource'); } /** * Grants permission to update a managed agent * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toUpdateAgent() { return this.to('UpdateAgent'); } /** * Grants permission to update a managed agent environment * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toUpdateEnvironment() { return this.to('UpdateEnvironment'); } /** * Grants permission to update a memory store, mutate its memories, or redact a memory version * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toUpdateMemoryStore() { return this.to('UpdateMemoryStore'); } /** * Grants permission to update a managed agent session, append session events, or manage its resources * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toUpdateSession() { return this.to('UpdateSession'); } /** * Grants permission to create or delete a skill version * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toUpdateSkill() { return this.to('UpdateSkill'); } /** * Grants permission to update a user profile in a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toUpdateUserProfile() { return this.to('UpdateUserProfile'); } /** * Grants permission to update a credential vault or manage its stored credentials * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toUpdateVault() { return this.to('UpdateVault'); } /** * Grants permission to update a workspace * * Access Level: Write * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions */ toUpdateWorkspace() { return this.to('UpdateWorkspace'); } /** * Adds a resource of type workspace to the statement * * https://docs.aws.amazon.com/claude-platform/latest/userguide/workspaces.html#workspaces * * @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() */ onWorkspace(resourceId, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:aws-external-anthropic:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:workspace/${resourceId}`); } /** * Filters access by the Short-term or Long-term bearer tokens * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-policies.html * * 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 use of the Claude Platform console * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-policies.html * * @param value `true` or `false`. **Default:** `true` */ ifCalledViaConsole(value) { return this.if(`CalledViaConsole`, (typeof value !== 'undefined' ? value : true), 'Bool'); } /** * Filters access by the Claude Platform role used for the console session * * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-policies.html * * Applies to actions: * - .toAssumeConsole() * * @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` */ ifCapability(value, operator) { return this.if(`Capability`, value, operator ?? 'StringLike'); } /** * 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: * - .toCreateWorkspace() * - .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: * - .toArchiveAgent() * - .toArchiveEnvironment() * - .toArchiveMemoryStore() * - .toArchiveSession() * - .toArchiveVault() * - .toArchiveWorkspace() * - .toCancelBatchInference() * - .toCountTokens() * - .toCreateAgent() * - .toCreateBatchInference() * - .toCreateEnvironment() * - .toCreateFile() * - .toCreateInference() * - .toCreateMemoryStore() * - .toCreateSession() * - .toCreateSkill() * - .toCreateUserProfile() * - .toCreateUserProfileEnrollmentUrl() * - .toCreateVault() * - .toDeleteBatchInference() * - .toDeleteEnvironment() * - .toDeleteFile() * - .toDeleteMemoryStore() * - .toDeleteSession() * - .toDeleteSkill() * - .toDeleteVault() * - .toGetAgent() * - .toGetBatchInference() * - .toGetEnvironment() * - .toGetFile() * - .toGetMemoryStore() * - .toGetModel() * - .toGetSession() * - .toGetSkill() * - .toGetUserProfile() * - .toGetVault() * - .toGetWorkspace() * - .toListAgents() * - .toListBatchInferences() * - .toListEnvironments() * - .toListFiles() * - .toListMemoryStores() * - .toListModels() * - .toListSessions() * - .toListSkills() * - .toListTagsForResource() * - .toListUserProfiles() * - .toListVaults() * - .toTagResource() * - .toUntagResource() * - .toUpdateAgent() * - .toUpdateEnvironment() * - .toUpdateMemoryStore() * - .toUpdateSession() * - .toUpdateSkill() * - .toUpdateUserProfile() * - .toUpdateVault() * - .toUpdateWorkspace() * * Applies to resource types: * - workspace * * @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: * - .toCreateWorkspace() * - .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'); } /** * Statement provider for service [aws-external-anthropic](https://docs.aws.amazon.com/service-authorization/latest/reference/list_claudeplatformonaws.html). * */ constructor(props) { super(props); this.servicePrefix = 'aws-external-anthropic'; this.accessLevelList = { Write: [ 'ArchiveAgent', 'ArchiveEnvironment', 'ArchiveMemoryStore', 'ArchiveSession', 'ArchiveVault', 'ArchiveWorkspace', 'AssumeConsole', 'CancelBatchInference', 'CountTokens', 'CreateAgent', 'CreateBatchInference', 'CreateEnvironment', 'CreateFile', 'CreateInference', 'CreateMemoryStore', 'CreateSession', 'CreateSkill', 'CreateUserProfile', 'CreateUserProfileEnrollmentUrl', 'CreateVault', 'CreateWorkspace', 'DeleteBatchInference', 'DeleteEnvironment', 'DeleteFile', 'DeleteMemoryStore', 'DeleteSession', 'DeleteSkill', 'DeleteVault', 'UpdateAgent', 'UpdateEnvironment', 'UpdateMemoryStore', 'UpdateSession', 'UpdateSkill', 'UpdateUserProfile', 'UpdateVault', 'UpdateWorkspace' ], List: [ 'CallWithBearerToken', 'ListAgents', 'ListBatchInferences', 'ListEnvironments', 'ListFiles', 'ListMemoryStores', 'ListModels', 'ListSessions', 'ListSkills', 'ListUserProfiles', 'ListVaults', 'ListWorkspaces' ], Read: [ 'GetAccountStatus', 'GetAgent', 'GetBatchInference', 'GetEnvironment', 'GetFile', 'GetMemoryStore', 'GetModel', 'GetSession', 'GetSkill', 'GetUserProfile', 'GetVault', 'GetWorkspace', 'ListTagsForResource' ], Tagging: [ 'TagResource', 'UntagResource' ] }; } } exports.AwsExternalAnthropic = AwsExternalAnthropic; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhdWRlcGxhdGZvcm1vbmF3cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsYXVkZXBsYXRmb3Jtb25hd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQXlEO0FBR3pEOzs7O0dBSUc7QUFDSCxNQUFhLG9CQUFxQixTQUFRLHdCQUFlO0lBR3ZEOzs7Ozs7T0FNRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxvQkFBb0I7UUFDekIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG9CQUFvQjtRQUN6QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksa0JBQWtCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxzQkFBc0I7UUFDM0IsT0FBTyxJ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QkFBbUI7Z0JBQ25CLG1CQUFtQjtnQkFDbkIsZUFBZTtnQkFDZixhQUFhO2dCQUNiLG1CQUFtQjtnQkFDbkIsYUFBYTtnQkFDYixpQkFBaUI7YUFDbEI7WUFDRCxJQUFJLEVBQUU7Z0JBQ0oscUJBQXFCO2dCQUNyQixZQUFZO2dCQUNaLHFCQUFxQjtnQkFDckIsa0JBQWtCO2dCQUNsQixXQUFXO2dCQUNYLGtCQUFrQjtnQkFDbEIsWUFBWTtnQkFDWixjQUFjO2dCQUNkLFlBQVk7Z0JBQ1osa0JBQWtCO2dCQUNsQixZQUFZO2dCQUNaLGdCQUFnQjthQUNqQjtZQUNELElBQUksRUFBRTtnQkFDSixrQkFBa0I7Z0JBQ2xCLFVBQVU7Z0JBQ1YsbUJBQW1CO2dCQUNuQixnQkFBZ0I7Z0JBQ2hCLFNBQVM7Z0JBQ1QsZ0JBQWdCO2dCQUNoQixVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osVUFBVTtnQkFDVixnQkFBZ0I7Z0JBQ2hCLFVBQVU7Z0JBQ1YsY0FBYztnQkFDZCxxQkFBcUI7YUFDdEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsYUFBYTtnQkFDYixlQUFlO2FBQ2hCO1NBQ0YsQ0FBQztJQWdMRixDQUFDO0NBQ0Y7QUFsOEJELG9EQWs4QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2F3cy1leHRlcm5hbC1hbnRocm9waWNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2NsYXVkZXBsYXRmb3Jtb25hd3MuaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBBd3NFeHRlcm5hbEFudGhyb3BpYyBleHRlbmRzIFBvbGljeVN0YXRlbWVudCB7XG4gIHB1YmxpYyBzZXJ2aWNlUHJlZml4ID0gJ2F3cy1leHRlcm5hbC1hbnRocm9waWMnO1xuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhcmNoaXZlIGEgbWFuYWdlZCBhZ2VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9BcmNoaXZlQWdlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0FyY2hpdmVBZ2VudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFyY2hpdmUgYSBtYW5hZ2VkIGFnZW50IGVudmlyb25tZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0FyY2hpdmVFbnZpcm9ubWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXJjaGl2ZUVudmlyb25tZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXJjaGl2ZSBhIG1lbW9yeSBzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9BcmNoaXZlTWVtb3J5U3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0FyY2hpdmVNZW1vcnlTdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFyY2hpdmUgYSBtYW5hZ2VkIGFnZW50IHNlc3Npb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQXJjaGl2ZVNlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0FyY2hpdmVTZXNzaW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXJjaGl2ZSBhIGNyZWRlbnRpYWwgdmF1bHRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQXJjaGl2ZVZhdWx0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdBcmNoaXZlVmF1bHQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhcmNoaXZlIGEgd29ya3NwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0FyY2hpdmVXb3Jrc3BhY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0FyY2hpdmVXb3Jrc3BhY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhc3N1bWUgY29uc29sZSBhY2Nlc3Mgb24gQ2xhdWRlIFBsYXRmb3JtXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZDYXBhYmlsaXR5KClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0Fzc3VtZUNvbnNvbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Fzc3VtZUNvbnNvbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBtYWtlIEFQSSBjYWxscyB1c2luZyBiZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQmVhcmVyVG9rZW5UeXBlKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NhbGxXaXRoQmVhcmVyVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NhbGxXaXRoQmVhcmVyVG9rZW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjYW5jZWwgYW4gaW4tcHJvZ3Jlc3MgYmF0Y2ggaW5mZXJlbmNlIHJlcXVlc3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQ2FuY2VsQmF0Y2hJbmZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NhbmNlbEJhdGNoSW5mZXJlbmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY291bnQgdG9rZW5zIGZvciBhIG1lc3NhZ2UgcmVxdWVzdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9Db3VudFRva2VucygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ291bnRUb2tlbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBtYW5hZ2VkIGFnZW50IGluIGEgd29ya3NwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUFnZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVBZ2VudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIGJhdGNoIGluZmVyZW5jZSByZXF1ZXN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUJhdGNoSW5mZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVCYXRjaEluZmVyZW5jZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG1hbmFnZWQgYWdlbnQgZW52aXJvbm1lbnQgaW4gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlRW52aXJvbm1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUVudmlyb25tZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBsb2FkIGEgZmlsZSB0byBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVGaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVGaWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgY2hhdCBjb21wbGV0aW9uIGluZmVyZW5jZSByZXF1ZXN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUluZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlSW5mZXJlbmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbWFuYWdlZCBhZ2VudCBtZW1vcnkgc3RvcmUgaW4gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlTWVtb3J5U3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZU1lbW9yeVN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbWFuYWdlZCBhZ2VudCBzZXNzaW9uIGluIGEgd29ya3NwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVNlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVNlc3Npb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBza2lsbCBpbiBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVTa2lsbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlU2tpbGwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSB1c2VyIHByb2ZpbGUgaW4gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlVXNlclByb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVVzZXJQcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuIGVucm9sbG1lbnQgVVJMIGZvciBhIHVzZXIgcHJvZmlsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVVc2VyUHJvZmlsZUVucm9sbG1lbnRVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVVzZXJQcm9maWxlRW5yb2xsbWVudFVybCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG1hbmFnZWQgYWdlbnQgY3JlZGVudGlhbCB2YXVsdCBpbiBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVWYXVsdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlVmF1bHQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSB3b3Jrc3BhY2UgaW4gYW4gb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVdvcmtzcGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlV29ya3NwYWNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgYmF0Y2ggaW5mZXJlbmNlIHJlcXVlc3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlQmF0Y2hJbmZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUJhdGNoSW5mZXJlbmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgbWFuYWdlZCBhZ2VudCBlbnZpcm9ubWVudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVFbnZpcm9ubWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlRW52aXJvbm1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBmaWxlIGZyb20gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlRmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlRmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIG1lbW9yeSBzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVNZW1vcnlTdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlTWVtb3J5U3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFud