UNPKG

cdk-iam-floyd

Version:

AWS IAM policy statement generator with fluent interface for AWS CDK

1,561 lines 158 kB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Cleanrooms = void 0;
const shared_1 = require("../../shared");
/**
 * Statement provider for service [cleanrooms](https://docs.aws.amazon.com/service-authorization/latest/reference/list_cleanrooms.html).
 *
 * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
 */
class Cleanrooms extends shared_1.PolicyStatement {
    /**
     * Grants permission to view details of analysisTemplates associated to the collaboration
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_BatchGetCollaborationAnalysisTemplate.html
     */
    toBatchGetCollaborationAnalysisTemplate() {
        return this.to('BatchGetCollaborationAnalysisTemplate');
    }
    /**
     * Grants permission to view details for schemas
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_BatchGetSchema.html
     */
    toBatchGetSchema() {
        return this.to('BatchGetSchema');
    }
    /**
     * Grants permission to view analysis rules associated with schemas
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_BatchGetSchemaAnalysisRule.html
     */
    toBatchGetSchemaAnalysisRule() {
        return this.to('BatchGetSchemaAnalysisRule');
    }
    /**
     * Grants permission to create a new analysis template
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateAnalysisTemplate.html
     */
    toCreateAnalysisTemplate() {
        return this.to('CreateAnalysisTemplate');
    }
    /**
     * Grants permission to create a new collaboration, a shared data collaboration environment
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateCollaboration.html
     */
    toCreateCollaboration() {
        return this.to('CreateCollaboration');
    }
    /**
     * Grants permission to create a change request in a collaboration
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateCollaborationChangeRequest.html
     */
    toCreateCollaborationChangeRequest() {
        return this.to('CreateCollaborationChangeRequest');
    }
    /**
     * Grants permission to link a Cleanrooms ML configured audience model with a collaboration by creating a new association
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateConfiguredAudienceModelAssociation.html
     */
    toCreateConfiguredAudienceModelAssociation() {
        return this.to('CreateConfiguredAudienceModelAssociation');
    }
    /**
     * Grants permission to create a new configured table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateConfiguredTable.html
     */
    toCreateConfiguredTable() {
        return this.to('CreateConfiguredTable');
    }
    /**
     * Grants permission to create a analysis rule for a configured table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateConfiguredTableAnalysisRule.html
     */
    toCreateConfiguredTableAnalysisRule() {
        return this.to('CreateConfiguredTableAnalysisRule');
    }
    /**
     * Grants permission to link a configured table with a collaboration by creating a new association
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateConfiguredTableAssociation.html
     */
    toCreateConfiguredTableAssociation() {
        return this.to('CreateConfiguredTableAssociation');
    }
    /**
     * Grants permission to create an analysis rule for a configured table association
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateConfiguredTableAssociationAnalysisRule.html
     */
    toCreateConfiguredTableAssociationAnalysisRule() {
        return this.to('CreateConfiguredTableAssociationAnalysisRule');
    }
    /**
     * Grants permission to link an id mapping workflow with a collaboration by creating a new id mapping table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateIdMappingTable.html
     */
    toCreateIdMappingTable() {
        return this.to('CreateIdMappingTable');
    }
    /**
     * Grants permission to link an AWS Entity Resolution Id Namespace with a collaboration by creating a new association
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateIdNamespaceAssociation.html
     */
    toCreateIdNamespaceAssociation() {
        return this.to('CreateIdNamespaceAssociation');
    }
    /**
     * Grants permission to create a new intermediate table in a membership
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateIntermediateTable.html
     */
    toCreateIntermediateTable() {
        return this.to('CreateIntermediateTable');
    }
    /**
     * Grants permission to create an analysis rule for an intermediate table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateIntermediateTableAnalysisRule.html
     */
    toCreateIntermediateTableAnalysisRule() {
        return this.to('CreateIntermediateTableAnalysisRule');
    }
    /**
     * Grants permission to join collaborations by creating a membership
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreateMembership.html
     */
    toCreateMembership() {
        return this.to('CreateMembership');
    }
    /**
     * Grants permission to create a new privacy budget template
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_CreatePrivacyBudgetTemplate.html
     */
    toCreatePrivacyBudgetTemplate() {
        return this.to('CreatePrivacyBudgetTemplate');
    }
    /**
     * Grants permission to delete an existing analysis template
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteAnalysisTemplate.html
     */
    toDeleteAnalysisTemplate() {
        return this.to('DeleteAnalysisTemplate');
    }
    /**
     * Grants permission to delete an existing collaboration
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteCollaboration.html
     */
    toDeleteCollaboration() {
        return this.to('DeleteCollaboration');
    }
    /**
     * Grants permission to delete an existing configured audience model association
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteConfiguredAudienceModelAssociation.html
     */
    toDeleteConfiguredAudienceModelAssociation() {
        return this.to('DeleteConfiguredAudienceModelAssociation');
    }
    /**
     * Grants permission to delete a configured table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteConfiguredTable.html
     */
    toDeleteConfiguredTable() {
        return this.to('DeleteConfiguredTable');
    }
    /**
     * Grants permission to delete an existing analysis rule
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteConfiguredTableAnalysisRule.html
     */
    toDeleteConfiguredTableAnalysisRule() {
        return this.to('DeleteConfiguredTableAnalysisRule');
    }
    /**
     * Grants permission to remove a configured table association from a collaboration
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteConfiguredTableAssociation.html
     */
    toDeleteConfiguredTableAssociation() {
        return this.to('DeleteConfiguredTableAssociation');
    }
    /**
     * Grants permission to delete an existing configured table association analysis rule
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteConfiguredTableAssociationAnalysisRule.html
     */
    toDeleteConfiguredTableAssociationAnalysisRule() {
        return this.to('DeleteConfiguredTableAssociationAnalysisRule');
    }
    /**
     * Grants permission to remove an id mapping table from a collaboration
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteIdMappingTable.html
     */
    toDeleteIdMappingTable() {
        return this.to('DeleteIdMappingTable');
    }
    /**
     * Grants permission to remove an Id Namespace Association from a collaboration
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteIdNamespaceAssociation.html
     */
    toDeleteIdNamespaceAssociation() {
        return this.to('DeleteIdNamespaceAssociation');
    }
    /**
     * Grants permission to remove an intermediate table from a collaboration
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteIntermediateTable.html
     */
    toDeleteIntermediateTable() {
        return this.to('DeleteIntermediateTable');
    }
    /**
     * Grants permission to delete an existing analysis rule for an intermediate table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteIntermediateTableAnalysisRule.html
     */
    toDeleteIntermediateTableAnalysisRule() {
        return this.to('DeleteIntermediateTableAnalysisRule');
    }
    /**
     * Grants permission to delete members from a collaboration
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteMember.html
     */
    toDeleteMember() {
        return this.to('DeleteMember');
    }
    /**
     * Grants permission to leave collaborations by deleting a membership
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeleteMembership.html
     */
    toDeleteMembership() {
        return this.to('DeleteMembership');
    }
    /**
     * Grants permission to delete an existing privacy budget template
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DeletePrivacyBudgetTemplate.html
     */
    toDeletePrivacyBudgetTemplate() {
        return this.to('DeletePrivacyBudgetTemplate');
    }
    /**
     * Grants permission to invalidate an intermediate table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_DisallowIntermediateTable.html
     */
    toDisallowIntermediateTable() {
        return this.to('DisallowIntermediateTable');
    }
    /**
     * Grants permission to get an analysis log export
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetAnalysisLogExport.html
     */
    toGetAnalysisLogExport() {
        return this.to('GetAnalysisLogExport');
    }
    /**
     * Grants permission to view details for an analysis template
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetAnalysisTemplate.html
     */
    toGetAnalysisTemplate() {
        return this.to('GetAnalysisTemplate');
    }
    /**
     * Grants permission to view details for a collaboration
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaboration.html
     */
    toGetCollaboration() {
        return this.to('GetCollaboration');
    }
    /**
     * Grants permission to view details for an analysis template within a collaboration
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaborationAnalysisTemplate.html
     */
    toGetCollaborationAnalysisTemplate() {
        return this.to('GetCollaborationAnalysisTemplate');
    }
    /**
     * Grants permission to get a change request in a collaboration
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaborationChangeRequest.html
     */
    toGetCollaborationChangeRequest() {
        return this.to('GetCollaborationChangeRequest');
    }
    /**
     * Grants permission to view details for a configured audience model association within a collaboration
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaborationConfiguredAudienceModelAssociation.html
     */
    toGetCollaborationConfiguredAudienceModelAssociation() {
        return this.to('GetCollaborationConfiguredAudienceModelAssociation');
    }
    /**
     * Grants permission to get id namespace association within a collaboration
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaborationIdNamespaceAssociation.html
     */
    toGetCollaborationIdNamespaceAssociation() {
        return this.to('GetCollaborationIdNamespaceAssociation');
    }
    /**
     * Grants permission to view details for a privacy budget template within a collaboration
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetCollaborationPrivacyBudgetTemplate.html
     */
    toGetCollaborationPrivacyBudgetTemplate() {
        return this.to('GetCollaborationPrivacyBudgetTemplate');
    }
    /**
     * Grants permission to view details for a configured audience model association
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetConfiguredAudienceModelAssociation.html
     */
    toGetConfiguredAudienceModelAssociation() {
        return this.to('GetConfiguredAudienceModelAssociation');
    }
    /**
     * Grants permission to view details for a configured table
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetConfiguredTable.html
     */
    toGetConfiguredTable() {
        return this.to('GetConfiguredTable');
    }
    /**
     * Grants permission to view analysis rules for a configured table
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetConfiguredTableAnalysisRule.html
     */
    toGetConfiguredTableAnalysisRule() {
        return this.to('GetConfiguredTableAnalysisRule');
    }
    /**
     * Grants permission to view details for a configured table association
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetConfiguredTableAssociation.html
     */
    toGetConfiguredTableAssociation() {
        return this.to('GetConfiguredTableAssociation');
    }
    /**
     * Grants permission to view analysis rules for a configured table association
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetConfiguredTableAssociationAnalysisRule.html
     */
    toGetConfiguredTableAssociationAnalysisRule() {
        return this.to('GetConfiguredTableAssociationAnalysisRule');
    }
    /**
     * Grants permission to view details of an id mapping table
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetIdMappingTable.html
     */
    toGetIdMappingTable() {
        return this.to('GetIdMappingTable');
    }
    /**
     * Grants permission to view details of an id namespace association
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetIdNamespaceAssociation.html
     */
    toGetIdNamespaceAssociation() {
        return this.to('GetIdNamespaceAssociation');
    }
    /**
     * Grants permission to view details of an intermediate table
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetIntermediateTable.html
     */
    toGetIntermediateTable() {
        return this.to('GetIntermediateTable');
    }
    /**
     * Grants permission to view analysis rules for an intermediate table
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetIntermediateTableAnalysisRule.html
     */
    toGetIntermediateTableAnalysisRule() {
        return this.to('GetIntermediateTableAnalysisRule');
    }
    /**
     * Grants permission to view details about a membership
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetMembership.html
     */
    toGetMembership() {
        return this.to('GetMembership');
    }
    /**
     * Grants permission to view details for a privacy budget template
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetPrivacyBudgetTemplate.html
     */
    toGetPrivacyBudgetTemplate() {
        return this.to('GetPrivacyBudgetTemplate');
    }
    /**
     * Grants permission to view a protected job
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetProtectedJob.html
     */
    toGetProtectedJob() {
        return this.to('GetProtectedJob');
    }
    /**
     * Grants permission to view a protected query
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetProtectedQuery.html
     */
    toGetProtectedQuery() {
        return this.to('GetProtectedQuery');
    }
    /**
     * Grants permission to view details for a schema
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetSchema.html
     */
    toGetSchema() {
        return this.to('GetSchema');
    }
    /**
     * Grants permission to view analysis rules associated with a schema
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_GetSchemaAnalysisRule.html
     */
    toGetSchemaAnalysisRule() {
        return this.to('GetSchemaAnalysisRule');
    }
    /**
     * Grants permission to list analysis log exports
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListAnalysisLogExports.html
     */
    toListAnalysisLogExports() {
        return this.to('ListAnalysisLogExports');
    }
    /**
     * Grants permission to list available analysis templates
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListAnalysisTemplates.html
     */
    toListAnalysisTemplates() {
        return this.to('ListAnalysisTemplates');
    }
    /**
     * Grants permission to list available analysis templates within a collaboration
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationAnalysisTemplates.html
     */
    toListCollaborationAnalysisTemplates() {
        return this.to('ListCollaborationAnalysisTemplates');
    }
    /**
     * Grants permission to list change requests in a collaboration
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationChangeRequests.html
     */
    toListCollaborationChangeRequests() {
        return this.to('ListCollaborationChangeRequests');
    }
    /**
     * Grants permission to list available configured audience model association within a collaboration
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationConfiguredAudienceModelAssociations.html
     */
    toListCollaborationConfiguredAudienceModelAssociations() {
        return this.to('ListCollaborationConfiguredAudienceModelAssociations');
    }
    /**
     * Grants permission to list id namespace within a collaboration
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationIdNamespaceAssociations.html
     */
    toListCollaborationIdNamespaceAssociations() {
        return this.to('ListCollaborationIdNamespaceAssociations');
    }
    /**
     * Grants permission to list available privacy budget templates within a collaboration
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationPrivacyBudgetTemplates.html
     */
    toListCollaborationPrivacyBudgetTemplates() {
        return this.to('ListCollaborationPrivacyBudgetTemplates');
    }
    /**
     * Grants permission to list privacy budgets within a collaboration
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborationPrivacyBudgets.html
     */
    toListCollaborationPrivacyBudgets() {
        return this.to('ListCollaborationPrivacyBudgets');
    }
    /**
     * Grants permission to list available collaborations
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListCollaborations.html
     */
    toListCollaborations() {
        return this.to('ListCollaborations');
    }
    /**
     * Grants permission to list available configured audience model associations for a membership
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListConfiguredAudienceModelAssociations.html
     */
    toListConfiguredAudienceModelAssociations() {
        return this.to('ListConfiguredAudienceModelAssociations');
    }
    /**
     * Grants permission to list available configured table associations for a membership
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListConfiguredTableAssociations.html
     */
    toListConfiguredTableAssociations() {
        return this.to('ListConfiguredTableAssociations');
    }
    /**
     * Grants permission to list available configured tables
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListConfiguredTables.html
     */
    toListConfiguredTables() {
        return this.to('ListConfiguredTables');
    }
    /**
     * Grants permission to list available id mapping tables for a membership
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListIdMappingTables.html
     */
    toListIdMappingTables() {
        return this.to('ListIdMappingTables');
    }
    /**
     * Grants permission to list entity resolution data associations for a membership
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListIdNamespaceAssociations.html
     */
    toListIdNamespaceAssociations() {
        return this.to('ListIdNamespaceAssociations');
    }
    /**
     * Grants permission to list versions of an intermediate table
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListIntermediateTableVersions.html
     */
    toListIntermediateTableVersions() {
        return this.to('ListIntermediateTableVersions');
    }
    /**
     * Grants permission to list intermediate tables for a membership
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListIntermediateTables.html
     */
    toListIntermediateTables() {
        return this.to('ListIntermediateTables');
    }
    /**
     * Grants permission to list the members of a collaboration
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListMembers.html
     */
    toListMembers() {
        return this.to('ListMembers');
    }
    /**
     * Grants permission to list available memberships
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListMemberships.html
     */
    toListMemberships() {
        return this.to('ListMemberships');
    }
    /**
     * Grants permission to list available privacy budget templates
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListPrivacyBudgetTemplates.html
     */
    toListPrivacyBudgetTemplates() {
        return this.to('ListPrivacyBudgetTemplates');
    }
    /**
     * Grants permission to list available privacy budgets
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListPrivacyBudgets.html
     */
    toListPrivacyBudgets() {
        return this.to('ListPrivacyBudgets');
    }
    /**
     * Grants permission to list protected jobs
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListProtectedJobs.html
     */
    toListProtectedJobs() {
        return this.to('ListProtectedJobs');
    }
    /**
     * Grants permission to list protected queries
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListProtectedQueries.html
     */
    toListProtectedQueries() {
        return this.to('ListProtectedQueries');
    }
    /**
     * Grants permission to view available schemas for a collaboration
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListSchemas.html
     */
    toListSchemas() {
        return this.to('ListSchemas');
    }
    /**
     * Grants permission to list tags for a resource
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_ListTagsForResource.html
     */
    toListTagsForResource() {
        return this.to('ListTagsForResource');
    }
    /**
     * Grants permission to start an Id Mapping Job in AWS Entity Resolution to generate id mapping results in cleanrooms collaboration.
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_PopulateIdMappingTable.html
     */
    toPopulateIdMappingTable() {
        return this.to('PopulateIdMappingTable');
    }
    /**
     * Grants permission to populate an intermediate table by executing its stored analysis
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_PopulateIntermediateTable.html
     */
    toPopulateIntermediateTable() {
        return this.to('PopulateIntermediateTable');
    }
    /**
     * Grants permission to preview privacy budget template settings
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_PreviewPrivacyImpact.html
     */
    toPreviewPrivacyImpact() {
        return this.to('PreviewPrivacyImpact');
    }
    /**
     * Grants permission to start an analysis log export
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_StartAnalysisLogExport.html
     */
    toStartAnalysisLogExport() {
        return this.to('StartAnalysisLogExport');
    }
    /**
     * Grants permission to start protected jobs
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_StartProtectedJob.html
     */
    toStartProtectedJob() {
        return this.to('StartProtectedJob');
    }
    /**
     * Grants permission to start protected queries
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_StartProtectedQuery.html
     */
    toStartProtectedQuery() {
        return this.to('StartProtectedQuery');
    }
    /**
     * Grants permission to tag a resource
     *
     * Access Level: Tagging, Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_TagResource.html
     */
    toTagResource() {
        return this.to('TagResource');
    }
    /**
     * Grants permission to untag a resource
     *
     * Access Level: Tagging, Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UntagResource.html
     */
    toUntagResource() {
        return this.to('UntagResource');
    }
    /**
     * Grants permission to update details of the analysis template
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateAnalysisTemplate.html
     */
    toUpdateAnalysisTemplate() {
        return this.to('UpdateAnalysisTemplate');
    }
    /**
     * Grants permission to update details of the collaboration
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateCollaboration.html
     */
    toUpdateCollaboration() {
        return this.to('UpdateCollaboration');
    }
    /**
     * Grants permission to update a change request in a collaboration
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateCollaborationChangeRequest.html
     */
    toUpdateCollaborationChangeRequest() {
        return this.to('UpdateCollaborationChangeRequest');
    }
    /**
     * Grants permission to update a configured audience model association
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredAudienceModelAssociation.html
     */
    toUpdateConfiguredAudienceModelAssociation() {
        return this.to('UpdateConfiguredAudienceModelAssociation');
    }
    /**
     * Grants permission to update an existing configured table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTable.html
     */
    toUpdateConfiguredTable() {
        return this.to('UpdateConfiguredTable');
    }
    /**
     * Grants permission to update analysis rules for a configured table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTableAnalysisRule.html
     */
    toUpdateConfiguredTableAnalysisRule() {
        return this.to('UpdateConfiguredTableAnalysisRule');
    }
    /**
     * Grants permission to update a configured table association
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTableAssociation.html
     */
    toUpdateConfiguredTableAssociation() {
        return this.to('UpdateConfiguredTableAssociation');
    }
    /**
     * Grants permission to update analysis rules for a configured table association
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTableAssociationAnalysisRule.html
     */
    toUpdateConfiguredTableAssociationAnalysisRule() {
        return this.to('UpdateConfiguredTableAssociationAnalysisRule');
    }
    /**
     * Grants permission to update an id mapping table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateIdMappingTable.html
     */
    toUpdateIdMappingTable() {
        return this.to('UpdateIdMappingTable');
    }
    /**
     * Grants permission to update a entity resolution input association
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateIdNamespaceAssociation.html
     */
    toUpdateIdNamespaceAssociation() {
        return this.to('UpdateIdNamespaceAssociation');
    }
    /**
     * Grants permission to update an intermediate table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateIntermediateTable.html
     */
    toUpdateIntermediateTable() {
        return this.to('UpdateIntermediateTable');
    }
    /**
     * Grants permission to update an analysis rule for an intermediate table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateIntermediateTableAnalysisRule.html
     */
    toUpdateIntermediateTableAnalysisRule() {
        return this.to('UpdateIntermediateTableAnalysisRule');
    }
    /**
     * Grants permission to update details of a membership
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateMembership.html
     */
    toUpdateMembership() {
        return this.to('UpdateMembership');
    }
    /**
     * Grants permission to update details of the privacy budget template
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdatePrivacyBudgetTemplate.html
     */
    toUpdatePrivacyBudgetTemplate() {
        return this.to('UpdatePrivacyBudgetTemplate');
    }
    /**
     * Grants permission to update protected jobs
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateProtectedJob.html
     */
    toUpdateProtectedJob() {
        return this.to('UpdateProtectedJob');
    }
    /**
     * Grants permission to update protected queries
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateProtectedQuery.html
     */
    toUpdateProtectedQuery() {
        return this.to('UpdateProtectedQuery');
    }
    /**
     * Grants permission to access a collaboration in the context of Clean Rooms ML custom models
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/ml-behaviors-byom.html#ml-behaviors-byom-membership-collaboration-access
     */
    toPassCollaboration() {
        return this.to('PassCollaboration');
    }
    /**
     * Grants permission to access a membership in the context of Clean Rooms ML custom models
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/ml-behaviors-byom.html#ml-behaviors-byom-membership-collaboration-access
     */
    toPassMembership() {
        return this.to('PassMembership');
    }
    /**
     * Grants permission to update the allowed columns of an existing configured table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTable.html
     */
    toUpdateConfiguredTableAllowedColumns() {
        return this.to('UpdateConfiguredTableAllowedColumns');
    }
    /**
     * Grants permission to update the table reference of an existing configured table
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/apireference/API_UpdateConfiguredTable.html
     */
    toUpdateConfiguredTableReference() {
        return this.to('UpdateConfiguredTableReference');
    }
    /**
     * Adds a resource of type analysistemplate to the statement
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
     *
     * @param membershipId - Identifier for the membershipId.
     * @param analysisTemplateId - Identifier for the analysisTemplateId.
     * @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()
     */
    onAnalysistemplate(membershipId, analysisTemplateId, account, region, partition) {
        return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/analysistemplate/${analysisTemplateId}`);
    }
    /**
     * Adds a resource of type collaboration to the statement
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
     *
     * @param collaborationId - Identifier for the collaborationId.
     * @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()
     */
    onCollaboration(collaborationId, account, region, partition) {
        return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:collaboration/${collaborationId}`);
    }
    /**
     * Adds a resource of type configuredaudiencemodelassociation to the statement
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
     *
     * @param membershipId - Identifier for the membershipId.
     * @param configuredAudienceModelAssociationId - Identifier for the configuredAudienceModelAssociationId.
     * @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()
     */
    onConfiguredaudiencemodelassociation(membershipId, configuredAudienceModelAssociationId, account, region, partition) {
        return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/configuredaudiencemodelassociation/${configuredAudienceModelAssociationId}`);
    }
    /**
     * Adds a resource of type configuredtable to the statement
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
     *
     * @param configuredTableId - Identifier for the configuredTableId.
     * @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()
     */
    onConfiguredtable(configuredTableId, account, region, partition) {
        return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:configuredtable/${configuredTableId}`);
    }
    /**
     * Adds a resource of type configuredtableassociation to the statement
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
     *
     * @param membershipId - Identifier for the membershipId.
     * @param configuredTableAssociationId - Identifier for the configuredTableAssociationId.
     * @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()
     */
    onConfiguredtableassociation(membershipId, configuredTableAssociationId, account, region, partition) {
        return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/configuredtableassociation/${configuredTableAssociationId}`);
    }
    /**
     * Adds a resource of type idmappingtable to the statement
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
     *
     * @param membershipId - Identifier for the membershipId.
     * @param idMappingTableId - Identifier for the idMappingTableId.
     * @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()
     */
    onIdmappingtable(membershipId, idMappingTableId, account, region, partition) {
        return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/idmappingtable/${idMappingTableId}`);
    }
    /**
     * Adds a resource of type idnamespaceassociation to the statement
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
     *
     * @param membershipId - Identifier for the membershipId.
     * @param idNamespaceAssociationId - Identifier for the idNamespaceAssociationId.
     * @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()
     */
    onIdnamespaceassociation(membershipId, idNamespaceAssociationId, account, region, partition) {
        return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/idnamespaceassociation/${idNamespaceAssociationId}`);
    }
    /**
     * Adds a resource of type intermediatetable to the statement
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
     *
     * @param membershipId - Identifier for the membershipId.
     * @param intermediateTableId - Identifier for the intermediateTableId.
     * @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()
     */
    onIntermediatetable(membershipId, intermediateTableId, account, region, partition) {
        return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/intermediatetable/${intermediateTableId}`);
    }
    /**
     * Adds a resource of type membership to the statement
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
     *
     * @param membershipId - Identifier for the membershipId.
     * @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()
     */
    onMembership(membershipId, account, region, partition) {
        return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}`);
    }
    /**
     * Adds a resource of type privacybudgettemplate to the statement
     *
     * https://docs.aws.amazon.com/clean-rooms/latest/userguide/security-iam.html
     *
     * @param membershipId - Identifier for the membershipId.
     * @param privacyBudgetTemplateId - Identifier for the privacyBudgetTemplateId.
     * @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()
     */
    onPrivacybudgettemplate(membershipId, privacyBudgetTemplateId, account, region, partition) {
        return this.on(`arn:${partition ?? this.defaultPartition}:cleanrooms:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:membership/${membershipId}/privacybudgettemplate/${privacyBudgetTemplateId}`);
    }
    /**
     * 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:
     * - .toCreateAnalysisTemplate()
     * - .toCreateCollaboration()
     * - .toCreateCollaborationChangeRequest()
     * - .toCreateConfiguredAudienceModelAssociation()
     * - .toCreateConfiguredTable()
     * - .toCreateConfiguredTableAssociation()
     * - .toCreateConfiguredTableAssociationAnalysisRule()
     * - .toCreateIdMappingTable()
     * - .toCreateIdNamespaceAssociation()
     * - .toCreateIntermediateTable()
     * - .toCreateMembership()
     * - .toCreatePrivacyBudgetTemplate()
     * - .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:
     * - .toBatchGetCollaborationAnalysisTemplate()
     * - .toBatchGetSchema()
     * - .toBatchGetSchemaAnalysisRule()
     * - .toCreateAnalysisTemplate()
     * - .toCreateCollaboration()
     * - .toCreateCollaborationChangeRequest()
     * - .toCreateConfiguredAudienceModelAssociation()
     * - .toCreateConfiguredTable()
     * - .toCreateConfiguredTableAnalysisRule()
     * - .toCreateConfiguredTableAssociation()
     * - .toCreateConfiguredTableAssociationAnalysisRule()
     * - .toCreateIdMappingTable()
     * - .toCreateIdNamespaceAssociation()
     * - .toCreateIntermediateTable()
     * - .toCreateIntermediateTableAnalysisRule()
     * - .toCreateMembership()
     * - .toCreatePrivacyBudgetTemplate()
     * - .toDeleteAnalysisTemplate()
     * - .toDeleteCollaboration()
     * - .toDeleteConfiguredAudienceModelAssociation()
     * - .toDeleteConfiguredTable()
     * - .toDeleteConfiguredTableAnalysisRule()
     * - .toDeleteConfiguredTableAssociation()
     * - .toDeleteConfiguredTableAssociationAnalysisRule()
     * - .toDeleteIdMappingTable()
     * - .toDeleteIdNamespaceAssociation()
     * - .toDeleteIntermediateTable()
     * - .toDeleteIntermediateTableAnalysisRule()
     * - .toDeleteMember()
     * - .toDeleteMembership()
     * - .toDeletePrivacyBudgetTemplate()
     * - .toDisallowIntermediateTable()
     * - .toGetAnalysisLogExport()
     * - .toGetAnalysisTemplate()
     * - .toGetCollaboration()
     * - .toGetCollaborationAnalysisTemplate()
     * - .toGetCollaborationChangeRequest()
     * - .toGetCollaborationConfiguredAudienceModelAssociation()
     * - .toGetCollaborationIdNamespaceAssociation()
     * - .toGetCollaborationPrivacyBudgetTemplate()
     * - .toGetConfiguredAudienceModelAssociation()
     * - .toGetConfiguredTable()
     * - .toGetConfiguredTableAnalysisRule()
     * - .toGetConfiguredTableAssociation()
     * - .toGetConfiguredTableAssociationAnalysisRule()
     * - .toGetIdMappingTable()
     * - .toGetIdNamespaceAssociation()
     * - .toGetIntermediateTable()
     * - .toGetIntermediateTableAnalysisRule()
     * - .toGetMembership()
     * - .toGetPrivacyBudgetTemplate()
     * - .toGetProtectedJob()
     * - .toGetProtectedQuery()
     * - .toGetSchema()
     * - .toGetSchemaAnalysisRule()
     * - .toListAnalysisLogExports()
     * - .toListAnalysisTemplates()
     * - .toListCollaborationAnalysisTemplates()
     * - .toListCollaborationChangeRequests()
     * - .toListCollaborationConfiguredAudienceModelAssociations()
     * - .toListCollaborationIdNamespaceAssociations()
     * - .toListCollaborationPrivacyBudgetTemplates()
     * - .toListCollaborationPrivacyBudgets()
     * - .toListConfiguredAudienceModelAssociations()
     * - .toListConfiguredTableAssociations()
     * - .toListIdMappingTables()
     * - .toListIdNamespaceAssociations()
     * - .toListIntermediateTableVersions()
     * - .toListIntermediateTables()
     * - .toListMembers()
     * - .toListPrivacyBudgetTemplates()
     * - .toListPrivacyBudgets()
     * - .toListProtectedJobs()
     * - .toListProtectedQueries()
     * - .toListSchemas()
     * - .toListTagsForResource()
     * - .toPopulateIdMappingTable()
     * - .toPopulateIntermediateTable()
     * - .toPreviewPrivacyImpact()
     * - .toStartAnalysisLogExport()
     * - .toStartProtectedJob()
     * - .toStartProtectedQuery()
     * - .toTagResource()
     * - .toUntagResource()
     * - .toUpdateAnalysisTemplate()
     * - .toUpdateCollaboration()
     * - .toUpdateCollaborationChangeRequest()
     * - .toUpdateConfiguredAudienceModelAssociation()
     * - .toUpdateConfiguredTable()
     * - .toUpdateConfiguredTableAnalysisRule()
     * - .toUpdateConfiguredTableAssociation()
     * - .toUpdateConfiguredTableAssociationAnalysisRule()
     * - .toUpdateIdMappingTable()
     * - .toUpdateIdNamespaceAssociation()
     * - .toUpdateIntermediateTable()
     * - .toUpdateIntermediateTableAnalysisRule()
     * - .toUpdateMembership()
     * - .toUpdatePrivacyBudgetTemplate()
     * - .toUpdateProtectedJob()
     * - .toUpdateProtectedQuery()
     * - .toPassCollaboration()
     * - .toPassMembership()
     * - .toUpdateConfiguredTableAllowedColumns()
     * - .toUpdateConfiguredTableReference()
     *
     * Applies to resource types:
     * - analysistemplate
     * - collaboration
     * - configuredaudiencemodelassociation
     * - configuredtable
     * - configuredtableassociation
     * - idmappingtable
     * - idnamespaceassociation
     * - intermediatetable
     * - membership
     * - privacybudgettemplate
     *
     * @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:
     * - .toCreateAnalysisTemplate()
     * - .toCreateCollaboration()
     * - .toCreateCollaborationChangeRequest()
     * - .toCreateConfiguredAudienceModelAssociation()
     * - .toCreateConfiguredTable()
     * - .toCreateConfiguredTableAssociation()
     * - .toCreateConfiguredTableAssociationAnalysisRule()
     * - .toCreateIdMappingTable()
     * - .toCreateIdNamespaceAssociation()
     * - .toCreateIntermediateTable()
     * - .toCreateMembership()
     * - .toCreatePrivacyBudgetTemplate()
     * - .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 [cleanrooms](https://docs.aws.amazon.com/service-authorization/latest/reference/list_cleanrooms.html).
     *
     */
    constructor(props) {
        super(props);
        this.servicePrefix = 'cleanrooms';
        this.accessLevelList = {
            Read: [
                'BatchGetCollaborationAnalysisTemplate',
                'BatchGetSchema',
                'BatchGetSchemaAnalysisRule',
                'GetAnalysisLogExport',
                'GetAnalysisTemplate',
                'GetCollaboration',
                'GetCollaborationAnalysisTemplate',
                'GetCollaborationChangeRequest',
                'GetCollaborationConfiguredAudienceModelAssociation',
                'GetCollaborationIdNamespaceAssociation',
                'GetCollaborationPrivacyBudgetTemplate',
                'GetConfiguredAudienceModelAssociation',
                'GetConfiguredTable',
                'GetConfiguredTableAnalysisRule',
                'GetConfiguredTableAssociation',
                'GetConfiguredTableAssociationAnalysisRule',
                'GetIdMappingTable',
                'GetIdNamespaceAssociation',
                'GetIntermediateTable',
                'GetIntermediateTableAnalysisRule',
                'GetMembership',
                'GetPrivacyBudgetTemplate',
                'GetProtectedJob',
                'GetProtectedQuery',
                'GetSchema',
                'GetSchemaAnalysisRule',
                'PreviewPrivacyImpact',
                'PassCollaboration',
                'PassMembership'
            ],
            Write: [
                'CreateAnalysisTemplate',
                'CreateCollaboration',
                'CreateCollaborationChangeRequest',
                'CreateConfiguredAudienceModelAssociation',
                'CreateConfiguredTable',
                'CreateConfiguredTableAnalysisRule',
                'CreateConfiguredTableAssociation',
                'CreateConfiguredTableAssociationAnalysisRule',
                'CreateIdMappingTable',
                'CreateIdNamespaceAssociation',
                'CreateIntermediateTable',
                'CreateIntermediateTableAnalysisRule',
                'CreateMembership',
                'CreatePrivacyBudgetTemplate',
                'DeleteAnalysisTemplate',
                'DeleteCollaboration',
                'DeleteConfiguredAudienceModelAssociation',
                'DeleteConfiguredTable',
                'DeleteConfiguredTableAnalysisRule',
                'DeleteConfiguredTableAssociation',
                'DeleteConfiguredTableAssociationAnalysisRule',
                'DeleteIdMappingTable',
                'DeleteIdNamespaceAssociation',
                'DeleteIntermediateTable',
                'DeleteIntermediateTableAnalysisRule',
                'DeleteMember',
                'DeleteMembership',
                'DeletePrivacyBudgetTemplate',
                'DisallowIntermediateTable',
                'PopulateIdMappingTable',
                'PopulateIntermediateTable',
                'StartAnalysisLogExport',
                'StartProtectedJob',
                'StartProtectedQuery',
                'TagResource',
                'UntagResource',
                'UpdateAnalysisTemplate',
                'UpdateCollaboration',
                'UpdateCollaborationChangeRequest',
                'UpdateConfiguredAudienceModelAssociation',
                'UpdateConfiguredTable',
                'UpdateConfiguredTableAnalysisRule',
                'UpdateConfiguredTableAssociation',
                'UpdateConfiguredTableAssociationAnalysisRule',
                'UpdateIdMappingTable',
                'UpdateIdNamespaceAssociation',
                'UpdateIntermediateTable',
                'UpdateIntermediateTableAnalysisRule',
                'UpdateMembership',
                'UpdatePrivacyBudgetTemplate',
                'UpdateProtectedJob',
                'UpdateProtectedQuery',
                'UpdateConfiguredTableAllowedColumns',
                'UpdateConfiguredTableReference'
            ],
            List: [
                'ListAnalysisLogExports',
                'ListAnalysisTemplates',
                'ListCollaborationAnalysisTemplates',
                'ListCollaborationChangeRequests',
                'ListCollaborationConfiguredAudienceModelAssociations',
                'ListCollaborationIdNamespaceAssociations',
                'ListCollaborationPrivacyBudgetTemplates',
                'ListCollaborationPrivacyBudgets',
                'ListCollaborations',
                'ListConfiguredAudienceModelAssociations',
                'ListConfiguredTableAssociations',
                'ListConfiguredTables',
                'ListIdMappingTables',
                'ListIdNamespaceAssociations',
                'ListIntermediateTableVersions',
                'ListIntermediateTables',
                'ListMembers',
                'ListMemberships',
                'ListPrivacyBudgetTemplates',
                'ListPrivacyBudgets',
                'ListProtectedJobs',
                'ListProtectedQueries',
                'ListSchemas',
                'ListTagsForResource'
            ],
            Tagging: [
                'TagResource',
                'UntagResource'
            ]
        };
    }
}
exports.Cleanrooms = Cleanrooms;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW5yb29tcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsZWFucm9vbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQXlEO0FBR3pEOzs7O0dBSUc7QUFDSCxNQUFhLFVBQVcsU0FBUSx3QkFBZTtJQUc3Qzs7Ozs7O09BTUc7SUFDSSx1Q0FBdUM7UUFDNUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksNEJBQTRCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx3QkFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksa0NBQWtDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSwwQ0FBMEM7UUFDL0MsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHVCQUF1QjtRQUM1QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUNBQW1DO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEVBQUUs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O2dCQUNuQixxQkFBcUI7Z0JBQ3JCLGFBQWE7Z0JBQ2IsZUFBZTtnQkFDZix3QkFBd0I7Z0JBQ3hCLHFCQUFxQjtnQkFDckIsa0NBQWtDO2dCQUNsQywwQ0FBMEM7Z0JBQzFDLHVCQUF1QjtnQkFDdkIsbUNBQW1DO2dCQUNuQyxrQ0FBa0M7Z0JBQ2xDLDhDQUE4QztnQkFDOUMsc0JBQXNCO2dCQUN0Qiw4QkFBOEI7Z0JBQzlCLHlCQUF5QjtnQkFDekIscUNBQXFDO2dCQUNyQyxrQkFBa0I7Z0JBQ2xCLDZCQUE2QjtnQkFDN0Isb0JBQW9CO2dCQUNwQixzQkFBc0I7Z0JBQ3RCLHFDQUFxQztnQkFDckMsZ0NBQWdDO2FBQ2pDO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLHdCQUF3QjtnQkFDeEIsdUJBQXVCO2dCQUN2QixvQ0FBb0M7Z0JBQ3BDLGlDQUFpQztnQkFDakMsc0RBQXNEO2dCQUN0RCwwQ0FBMEM7Z0JBQzFDLHlDQUF5QztnQkFDekMsaUNBQWlDO2dCQUNqQyxvQkFBb0I7Z0JBQ3BCLHlDQUF5QztnQkFDekMsaUNBQWlDO2dCQUNqQyxzQkFBc0I7Z0JBQ3RCLHFCQUFxQjtnQkFDckIsNkJBQTZCO2dCQUM3QiwrQkFBK0I7Z0JBQy9CLHdCQUF3QjtnQkFDeEIsYUFBYTtnQkFDYixpQkFBaUI7Z0JBQ2pCLDRCQUE0QjtnQkFDNUIsb0JBQW9CO2dCQUNwQixtQkFBbUI7Z0JBQ25CLHNCQUFzQjtnQkFDdEIsYUFBYTtnQkFDYixxQkFBcUI7YUFDdEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsYUFBYTtnQkFDYixlQUFlO2FBQ2hCO1NBQ0YsQ0FBQztJQW9YRixDQUFDO0NBQ0Y7QUF2b0RELGdDQXVvREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2NsZWFucm9vbXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2NsZWFucm9vbXMuaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBDbGVhbnJvb21zIGV4dGVuZHMgUG9saWN5U3RhdGVtZW50IHtcbiAgcHVibGljIHNlcnZpY2VQcmVmaXggPSAnY2xlYW5yb29tcyc7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBvZiBhbmFseXNpc1RlbXBsYXRlcyBhc3NvY2lhdGVkIHRvIHRoZSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfQmF0Y2hHZXRDb2xsYWJvcmF0aW9uQW5hbHlzaXNUZW1wbGF0ZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9CYXRjaEdldENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdCYXRjaEdldENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBkZXRhaWxzIGZvciBzY2hlbWFzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfQmF0Y2hHZXRTY2hlbWEuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQmF0Y2hHZXRTY2hlbWEoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0JhdGNoR2V0U2NoZW1hJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBhbmFseXNpcyBydWxlcyBhc3NvY2lhdGVkIHdpdGggc2NoZW1hc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0JhdGNoR2V0U2NoZW1hQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0JhdGNoR2V0U2NoZW1hQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdCYXRjaEdldFNjaGVtYUFuYWx5c2lzUnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBhbmFseXNpcyB0ZW1wbGF0ZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVBbmFseXNpc1RlbXBsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUFuYWx5c2lzVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUFuYWx5c2lzVGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgY29sbGFib3JhdGlvbiwgYSBzaGFyZWQgZGF0YSBjb2xsYWJvcmF0aW9uIGVudmlyb25tZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbGxhYm9yYXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQ29sbGFib3JhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ29sbGFib3JhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIGNoYW5nZSByZXF1ZXN0IGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVDb2xsYWJvcmF0aW9uQ2hhbmdlUmVxdWVzdC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVDb2xsYWJvcmF0aW9uQ2hhbmdlUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaW5rIGEgQ2xlYW5yb29tcyBNTCBjb25maWd1cmVkIGF1ZGllbmNlIG1vZGVsIHdpdGggYSBjb2xsYWJvcmF0aW9uIGJ5IGNyZWF0aW5nIGEgbmV3IGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBjb25maWd1cmVkIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVDb25maWd1cmVkVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIGFuYWx5c2lzIHJ1bGUgZm9yIGEgY29uZmlndXJlZCB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaW5rIGEgY29uZmlndXJlZCB0YWJsZSB3aXRoIGEgY29sbGFib3JhdGlvbiBieSBjcmVhdGluZyBhIG5ldyBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYW4gYW5hbHlzaXMgcnVsZSBmb3IgYSBjb25maWd1cmVkIHRhYmxlIGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpbmsgYW4gaWQgbWFwcGluZyB3b3JrZmxvdyB3aXRoIGEgY29sbGFib3JhdGlvbiBieSBjcmVhdGluZyBhIG5ldyBpZCBtYXBwaW5nIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUlkTWFwcGluZ1RhYmxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUlkTWFwcGluZ1RhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVJZE1hcHBpbmdUYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpbmsgYW4gQVdTIEVudGl0eSBSZXNvbHV0aW9uIElkIE5hbWVzcGFjZSB3aXRoIGEgY29sbGFib3JhdGlvbiBieSBjcmVhdGluZyBhIG5ldyBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVJZE5hbWVzcGFjZUFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgaW50ZXJtZWRpYXRlIHRhYmxlIGluIGEgbWVtYmVyc2hpcFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVJbnRlcm1lZGlhdGVUYWJsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVJbnRlcm1lZGlhdGVUYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlSW50ZXJtZWRpYXRlVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYW4gYW5hbHlzaXMgcnVsZSBmb3IgYW4gaW50ZXJtZWRpYXRlIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUludGVybWVkaWF0ZVRhYmxlQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUludGVybWVkaWF0ZVRhYmxlQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGpvaW4gY29sbGFib3JhdGlvbnMgYnkgY3JlYXRpbmcgYSBtZW1iZXJzaGlwXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZU1lbWJlcnNoaXAuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlTWVtYmVyc2hpcCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlTWVtYmVyc2hpcCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBwcml2YWN5IGJ1ZGdldCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlUHJpdmFjeUJ1ZGdldFRlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYW4gZXhpc3RpbmcgYW5hbHlzaXMgdGVtcGxhdGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlQW5hbHlzaXNUZW1wbGF0ZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVBbmFseXNpc1RlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVBbmFseXNpc1RlbXBsYXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGFuIGV4aXN0aW5nIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlQ29sbGFib3JhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVDb2xsYWJvcmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVDb2xsYWJvcmF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGFuIGV4aXN0aW5nIGNvbmZpZ3VyZWQgYXVkaWVuY2UgbW9kZWwgYXNzb2NpYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgY29uZmlndXJlZCB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9EZWxldGVDb25maWd1cmVkVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlQ29uZmlndXJlZFRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVDb25maWd1cmVkVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYW4gZXhpc3RpbmcgYW5hbHlzaXMgcnVsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9EZWxldGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZW1vdmUgYSBjb25maWd1cmVkIHRhYmxlIGFzc29jaWF0aW9uIGZyb20gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0RlbGV0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBleGlzdGluZyBjb25maWd1cmVkIHRhYmxlIGFzc29jaWF0aW9uIGFuYWx5c2lzIHJ1bGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25BbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25BbmFseXNpc1J1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVtb3ZlIGFuIGlkIG1hcHBpbmcgdGFibGUgZnJvbSBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlSWRNYXBwaW5nVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlSWRNYXBwaW5nVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUlkTWFwcGluZ1RhYmxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVtb3ZlIGFuIElkIE5hbWVzcGFjZSBBc3NvY2lhdGlvbiBmcm9tIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9EZWxldGVJZE5hbWVzcGFjZUFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZW1vdmUgYW4gaW50ZXJtZWRpYXRlIHRhYmxlIGZyb20gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0RlbGV0ZUludGVybWVkaWF0ZVRhYmxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUludGVybWVkaWF0ZVRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVJbnRlcm1lZGlhdGVUYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBleGlzdGluZyBhbmFseXNpcyBydWxlIGZvciBhbiBpbnRlcm1lZGlhdGUgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUludGVybWVkaWF0ZVRhYmxlQW5hbHlzaXNSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIG1lbWJlcnMgZnJvbSBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlTWVtYmVyLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZU1lbWJlcigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlTWVtYmVyJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGVhdmUgY29sbGFib3JhdGlvbnMgYnkgZGVsZXRpbmcgYSBtZW1iZXJzaGlwXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0RlbGV0ZU1lbWJlcnNoaXAuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlTWVtYmVyc2hpcCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlTWVtYmVyc2hpcCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBleGlzdGluZyBwcml2YWN5IGJ1ZGdldCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9EZWxldGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlUHJpdmFjeUJ1ZGdldFRlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBpbnZhbGlkYXRlIGFuIGludGVybWVkaWF0ZSB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9EaXNhbGxvd0ludGVybWVkaWF0ZVRhYmxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rpc2FsbG93SW50ZXJtZWRpYXRlVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rpc2FsbG93SW50ZXJtZWRpYXRlVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYW4gYW5hbHlzaXMgbG9nIGV4cG9ydFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldEFuYWx5c2lzTG9nRXhwb3J0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldEFuYWx5c2lzTG9nRXhwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRBbmFseXNpc0xvZ0V4cG9ydCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBmb3IgYW4gYW5hbHlzaXMgdGVtcGxhdGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRBbmFseXNpc1RlbXBsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldEFuYWx5c2lzVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldEFuYWx5c2lzVGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGRldGFpbHMgZm9yIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbGxhYm9yYXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q29sbGFib3JhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q29sbGFib3JhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBmb3IgYW4gYW5hbHlzaXMgdGVtcGxhdGUgd2l0aGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb2xsYWJvcmF0aW9uQW5hbHlzaXNUZW1wbGF0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhIGNoYW5nZSByZXF1ZXN0IGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbGxhYm9yYXRpb25DaGFuZ2VSZXF1ZXN0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldENvbGxhYm9yYXRpb25DaGFuZ2VSZXF1ZXN0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb2xsYWJvcmF0aW9uQ2hhbmdlUmVxdWVzdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBmb3IgYSBjb25maWd1cmVkIGF1ZGllbmNlIG1vZGVsIGFzc29jaWF0aW9uIHdpdGhpbiBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRDb2xsYWJvcmF0aW9uQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRDb2xsYWJvcmF0aW9uQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q29sbGFib3JhdGlvbkNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgaWQgbmFtZXNwYWNlIGFzc29jaWF0aW9uIHdpdGhpbiBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q29sbGFib3JhdGlvbklkTmFtZXNwYWNlQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGRldGFpbHMgZm9yIGEgcHJpdmFjeSBidWRnZXQgdGVtcGxhdGUgd2l0aGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0VGVtcGxhdGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q29sbGFib3JhdGlvblByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q29sbGFib3JhdGlvblByaXZhY3lCdWRnZXRUZW1wbGF0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBmb3IgYSBjb25maWd1cmVkIGF1ZGllbmNlIG1vZGVsIGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0Q29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBkZXRhaWxzIGZvciBhIGNvbmZpZ3VyZWQgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRDb25maWd1cmVkVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q29uZmlndXJlZFRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb25maWd1cmVkVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGFuYWx5c2lzIHJ1bGVzIGZvciBhIGNvbmZpZ3VyZWQgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGRldGFpbHMgZm9yIGEgY29uZmlndXJlZCB0YWJsZSBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgYW5hbHlzaXMgcnVsZXMgZm9yIGEgY29uZmlndXJlZCB0YWJsZSBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBvZiBhbiBpZCBtYXBwaW5nIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0SWRNYXBwaW5nVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0SWRNYXBwaW5nVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldElkTWFwcGluZ1RhYmxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBkZXRhaWxzIG9mIGFuIGlkIG5hbWVzcGFjZSBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldElkTmFtZXNwYWNlQXNzb2NpYXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0SWROYW1lc3BhY2VBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0SWROYW1lc3BhY2VBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgZGV0YWlscyBvZiBhbiBpbnRlcm1lZGlhdGUgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRJbnRlcm1lZGlhdGVUYWJsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRJbnRlcm1lZGlhdGVUYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0SW50ZXJtZWRpYXRlVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGFuYWx5c2lzIHJ1bGVzIGZvciBhbiBpbnRlcm1lZGlhdGUgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0SW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGRldGFpbHMgYWJvdXQgYSBtZW1iZXJzaGlwXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0TWVtYmVyc2hpcC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRNZW1iZXJzaGlwKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRNZW1iZXJzaGlwJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBkZXRhaWxzIGZvciBhIHByaXZhY3kgYnVkZ2V0IHRlbXBsYXRlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBhIHByb3RlY3RlZCBqb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRQcm90ZWN0ZWRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0UHJvdGVjdGVkSm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRQcm90ZWN0ZWRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGEgcHJvdGVjdGVkIHF1ZXJ5XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0UHJvdGVjdGVkUXVlcnkuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0UHJvdGVjdGVkUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFByb3RlY3RlZFF1ZXJ5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBkZXRhaWxzIGZvciBhIHNjaGVtYVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldFNjaGVtYS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRTY2hlbWEoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFNjaGVtYScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgYW5hbHlzaXMgcnVsZXMgYXNzb2NpYXRlZCB3aXRoIGEgc2NoZW1hXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0U2NoZW1hQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFNjaGVtYUFuYWx5c2lzUnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0U2NoZW1hQW5hbHlzaXNSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBhbmFseXNpcyBsb2cgZXhwb3J0c1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RBbmFseXNpc0xvZ0V4cG9ydHMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdEFuYWx5c2lzTG9nRXhwb3J0cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEFuYWx5c2lzTG9nRXhwb3J0cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIGFuYWx5c2lzIHRlbXBsYXRlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RBbmFseXNpc1RlbXBsYXRlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0QW5hbHlzaXNUZW1wbGF0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RBbmFseXNpc1RlbXBsYXRlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIGFuYWx5c2lzIHRlbXBsYXRlcyB3aXRoaW4gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0Q29sbGFib3JhdGlvbkFuYWx5c2lzVGVtcGxhdGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q29sbGFib3JhdGlvbkFuYWx5c2lzVGVtcGxhdGVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBjaGFuZ2UgcmVxdWVzdHMgaW4gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdENvbGxhYm9yYXRpb25DaGFuZ2VSZXF1ZXN0cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0Q29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3RzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3RzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBhdmFpbGFibGUgY29uZmlndXJlZCBhdWRpZW5jZSBtb2RlbCBhc3NvY2lhdGlvbiB3aXRoaW4gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdENvbGxhYm9yYXRpb25Db25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0Q29sbGFib3JhdGlvbkNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q29sbGFib3JhdGlvbkNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBpZCBuYW1lc3BhY2Ugd2l0aGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdENvbGxhYm9yYXRpb25JZE5hbWVzcGFjZUFzc29jaWF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdENvbGxhYm9yYXRpb25JZE5hbWVzcGFjZUFzc29jaWF0aW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIHByaXZhY3kgYnVkZ2V0IHRlbXBsYXRlcyB3aXRoaW4gYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0VGVtcGxhdGVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDb2xsYWJvcmF0aW9uUHJpdmFjeUJ1ZGdldFRlbXBsYXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0VGVtcGxhdGVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBwcml2YWN5IGJ1ZGdldHMgd2l0aGluIGEgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RDb2xsYWJvcmF0aW9uUHJpdmFjeUJ1ZGdldHMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIGNvbGxhYm9yYXRpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdENvbGxhYm9yYXRpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDb2xsYWJvcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdENvbGxhYm9yYXRpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBhdmFpbGFibGUgY29uZmlndXJlZCBhdWRpZW5jZSBtb2RlbCBhc3NvY2lhdGlvbnMgZm9yIGEgbWVtYmVyc2hpcFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0Q29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIGNvbmZpZ3VyZWQgdGFibGUgYXNzb2NpYXRpb25zIGZvciBhIG1lbWJlcnNoaXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0Q29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGF2YWlsYWJsZSBjb25maWd1cmVkIHRhYmxlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RDb25maWd1cmVkVGFibGVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDb25maWd1cmVkVGFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q29uZmlndXJlZFRhYmxlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIGlkIG1hcHBpbmcgdGFibGVzIGZvciBhIG1lbWJlcnNoaXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0SWRNYXBwaW5nVGFibGVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RJZE1hcHBpbmdUYWJsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RJZE1hcHBpbmdUYWJsZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGVudGl0eSByZXNvbHV0aW9uIGRhdGEgYXNzb2NpYXRpb25zIGZvciBhIG1lbWJlcnNoaXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0SWROYW1lc3BhY2VBc3NvY2lhdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdElkTmFtZXNwYWNlQXNzb2NpYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0SWROYW1lc3BhY2VBc3NvY2lhdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHZlcnNpb25zIG9mIGFuIGludGVybWVkaWF0ZSB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RJbnRlcm1lZGlhdGVUYWJsZVZlcnNpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RJbnRlcm1lZGlhdGVUYWJsZVZlcnNpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0SW50ZXJtZWRpYXRlVGFibGVWZXJzaW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgaW50ZXJtZWRpYXRlIHRhYmxlcyBmb3IgYSBtZW1iZXJzaGlwXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdEludGVybWVkaWF0ZVRhYmxlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0SW50ZXJtZWRpYXRlVGFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0SW50ZXJtZWRpYXRlVGFibGVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB0aGUgbWVtYmVycyBvZiBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0TWVtYmVycy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0TWVtYmVycygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdE1lbWJlcnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGF2YWlsYWJsZSBtZW1iZXJzaGlwc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RNZW1iZXJzaGlwcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0TWVtYmVyc2hpcHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RNZW1iZXJzaGlwcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIHByaXZhY3kgYnVkZ2V0IHRlbXBsYXRlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RQcml2YWN5QnVkZ2V0VGVtcGxhdGVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RQcml2YWN5QnVkZ2V0VGVtcGxhdGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIHByaXZhY3kgYnVkZ2V0c1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RQcml2YWN5QnVkZ2V0cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UHJpdmFjeUJ1ZGdldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RQcml2YWN5QnVkZ2V0cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgcHJvdGVjdGVkIGpvYnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0UHJvdGVjdGVkSm9icy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UHJvdGVjdGVkSm9icygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFByb3RlY3RlZEpvYnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHByb3RlY3RlZCBxdWVyaWVzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdFByb3RlY3RlZFF1ZXJpZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFByb3RlY3RlZFF1ZXJpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RQcm90ZWN0ZWRRdWVyaWVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBhdmFpbGFibGUgc2NoZW1hcyBmb3IgYSBjb2xsYWJvcmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdFNjaGVtYXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFNjaGVtYXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RTY2hlbWFzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB0YWdzIGZvciBhIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfTGlzdFRhZ3NGb3JSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0VGFnc0ZvclJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0VGFnc0ZvclJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgYW4gSWQgTWFwcGluZyBKb2IgaW4gQVdTIEVudGl0eSBSZXNvbHV0aW9uIHRvIGdlbmVyYXRlIGlkIG1hcHBpbmcgcmVzdWx0cyBpbiBjbGVhbnJvb21zIGNvbGxhYm9yYXRpb24uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1BvcHVsYXRlSWRNYXBwaW5nVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUG9wdWxhdGVJZE1hcHBpbmdUYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUG9wdWxhdGVJZE1hcHBpbmdUYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHBvcHVsYXRlIGFuIGludGVybWVkaWF0ZSB0YWJsZSBieSBleGVjdXRpbmcgaXRzIHN0b3JlZCBhbmFseXNpc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9Qb3B1bGF0ZUludGVybWVkaWF0ZVRhYmxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1BvcHVsYXRlSW50ZXJtZWRpYXRlVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1BvcHVsYXRlSW50ZXJtZWRpYXRlVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBwcmV2aWV3IHByaXZhY3kgYnVkZ2V0IHRlbXBsYXRlIHNldHRpbmdzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfUHJldmlld1ByaXZhY3lJbXBhY3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUHJldmlld1ByaXZhY3lJbXBhY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1ByZXZpZXdQcml2YWN5SW1wYWN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgYW4gYW5hbHlzaXMgbG9nIGV4cG9ydFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9TdGFydEFuYWx5c2lzTG9nRXhwb3J0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0QW5hbHlzaXNMb2dFeHBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0QW5hbHlzaXNMb2dFeHBvcnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdGFydCBwcm90ZWN0ZWQgam9ic1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9TdGFydFByb3RlY3RlZEpvYi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdGFydFByb3RlY3RlZEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRQcm90ZWN0ZWRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdGFydCBwcm90ZWN0ZWQgcXVlcmllc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9TdGFydFByb3RlY3RlZFF1ZXJ5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0UHJvdGVjdGVkUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0UHJvdGVjdGVkUXVlcnknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB0YWcgYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFRhZ2dpbmcsIFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9UYWdSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9UYWdSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1bnRhZyBhIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogVGFnZ2luZywgV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VudGFnUmVzb3VyY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVW50YWdSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVW50YWdSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBkZXRhaWxzIG9mIHRoZSBhbmFseXNpcyB0ZW1wbGF0ZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVBbmFseXNpc1RlbXBsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUFuYWx5c2lzVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUFuYWx5c2lzVGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgZGV0YWlscyBvZiB0aGUgY29sbGFib3JhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVDb2xsYWJvcmF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUNvbGxhYm9yYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUNvbGxhYm9yYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSBjaGFuZ2UgcmVxdWVzdCBpbiBhIGNvbGxhYm9yYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVXBkYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUNvbGxhYm9yYXRpb25DaGFuZ2VSZXF1ZXN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgY29uZmlndXJlZCBhdWRpZW5jZSBtb2RlbCBhc3NvY2lhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYW4gZXhpc3RpbmcgY29uZmlndXJlZCB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVDb25maWd1cmVkVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlQ29uZmlndXJlZFRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVDb25maWd1cmVkVGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYW5hbHlzaXMgcnVsZXMgZm9yIGEgY29uZmlndXJlZCB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSBjb25maWd1cmVkIHRhYmxlIGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhbmFseXNpcyBydWxlcyBmb3IgYSBjb25maWd1cmVkIHRhYmxlIGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhbiBpZCBtYXBwaW5nIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUlkTWFwcGluZ1RhYmxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUlkTWFwcGluZ1RhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVJZE1hcHBpbmdUYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhIGVudGl0eSByZXNvbHV0aW9uIGlucHV0IGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlSWROYW1lc3BhY2VBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhbiBpbnRlcm1lZGlhdGUgdGFibGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVXBkYXRlSW50ZXJtZWRpYXRlVGFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlSW50ZXJtZWRpYXRlVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUludGVybWVkaWF0ZVRhYmxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGFuIGFuYWx5c2lzIHJ1bGUgZm9yIGFuIGludGVybWVkaWF0ZSB0YWJsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgZGV0YWlscyBvZiBhIG1lbWJlcnNoaXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVXBkYXRlTWVtYmVyc2hpcC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVNZW1iZXJzaGlwKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVNZW1iZXJzaGlwJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGRldGFpbHMgb2YgdGhlIHByaXZhY3kgYnVkZ2V0IHRlbXBsYXRlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBwcm90ZWN0ZWQgam9ic1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVQcm90ZWN0ZWRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUHJvdGVjdGVkSm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVQcm90ZWN0ZWRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgcHJvdGVjdGVkIHF1ZXJpZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVXBkYXRlUHJvdGVjdGVkUXVlcnkuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUHJvdGVjdGVkUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVByb3RlY3RlZFF1ZXJ5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWNjZXNzIGEgY29sbGFib3JhdGlvbiBpbiB0aGUgY29udGV4dCBvZiBDbGVhbiBSb29tcyBNTCBjdXN0b20gbW9kZWxzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L3VzZXJndWlkZS9tbC1iZWhhdmlvcnMtYnlvbS5odG1sI21sLWJlaGF2aW9ycy1ieW9tLW1lbWJlcnNoaXAtY29sbGFib3JhdGlvbi1hY2Nlc3NcbiAgICovXG4gIHB1YmxpYyB0b1Bhc3NDb2xsYWJvcmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdQYXNzQ29sbGFib3JhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFjY2VzcyBhIG1lbWJlcnNoaXAgaW4gdGhlIGNvbnRleHQgb2YgQ2xlYW4gUm9vbXMgTUwgY3VzdG9tIG1vZGVsc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC91c2VyZ3VpZGUvbWwtYmVoYXZpb3JzLWJ5b20uaHRtbCNtbC1iZWhhdmlvcnMtYnlvbS1tZW1iZXJzaGlwLWNvbGxhYm9yYXRpb24tYWNjZXNzXG4gICAqL1xuICBwdWJsaWMgdG9QYXNzTWVtYmVyc2hpcCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUGFzc01lbWJlcnNoaXAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgdGhlIGFsbG93ZWQgY29sdW1ucyBvZiBhbiBleGlzdGluZyBjb25maWd1cmVkIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVDb25maWd1cmVkVGFibGVBbGxvd2VkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlQ29uZmlndXJlZFRhYmxlQWxsb3dlZENvbHVtbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgdGhlIHRhYmxlIHJlZmVyZW5jZSBvZiBhbiBleGlzdGluZyBjb25maWd1cmVkIHRhYmxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVDb25maWd1cmVkVGFibGVSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZVJlZmVyZW5jZScpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFjY2Vzc0xldmVsTGlzdDogQWNjZXNzTGV2ZWxMaXN0ID0ge1xuICAgIFJlYWQ6IFtcbiAgICAgICdCYXRjaEdldENvbGxhYm9yYXRpb25BbmFseXNpc1RlbXBsYXRlJyxcbiAgICAgICdCYXRjaEdldFNjaGVtYScsXG4gICAgICAnQmF0Y2hHZXRTY2hlbWFBbmFseXNpc1J1bGUnLFxuICAgICAgJ0dldEFuYWx5c2lzTG9nRXhwb3J0JyxcbiAgICAgICdHZXRBbmFseXNpc1RlbXBsYXRlJyxcbiAgICAgICdHZXRDb2xsYWJvcmF0aW9uJyxcbiAgICAgICdHZXRDb2xsYWJvcmF0aW9uQW5hbHlzaXNUZW1wbGF0ZScsXG4gICAgICAnR2V0Q29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QnLFxuICAgICAgJ0dldENvbGxhYm9yYXRpb25Db25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uJyxcbiAgICAgICdHZXRDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbicsXG4gICAgICAnR2V0Q29sbGFib3JhdGlvblByaXZhY3lCdWRnZXRUZW1wbGF0ZScsXG4gICAgICAnR2V0Q29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbicsXG4gICAgICAnR2V0Q29uZmlndXJlZFRhYmxlJyxcbiAgICAgICdHZXRDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnLFxuICAgICAgJ0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uJyxcbiAgICAgICdHZXRDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZScsXG4gICAgICAnR2V0SWRNYXBwaW5nVGFibGUnLFxuICAgICAgJ0dldElkTmFtZXNwYWNlQXNzb2NpYXRpb24nLFxuICAgICAgJ0dldEludGVybWVkaWF0ZVRhYmxlJyxcbiAgICAgICdHZXRJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZScsXG4gICAgICAnR2V0TWVtYmVyc2hpcCcsXG4gICAgICAnR2V0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlJyxcbiAgICAgICdHZXRQcm90ZWN0ZWRKb2InLFxuICAgICAgJ0dldFByb3RlY3RlZFF1ZXJ5JyxcbiAgICAgICdHZXRTY2hlbWEnLFxuICAgICAgJ0dldFNjaGVtYUFuYWx5c2lzUnVsZScsXG4gICAgICAnUHJldmlld1ByaXZhY3lJbXBhY3QnLFxuICAgICAgJ1Bhc3NDb2xsYWJvcmF0aW9uJyxcbiAgICAgICdQYXNzTWVtYmVyc2hpcCdcbiAgICBdLFxuICAgIFdyaXRlOiBbXG4gICAgICAnQ3JlYXRlQW5hbHlzaXNUZW1wbGF0ZScsXG4gICAgICAnQ3JlYXRlQ29sbGFib3JhdGlvbicsXG4gICAgICAnQ3JlYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QnLFxuICAgICAgJ0NyZWF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24nLFxuICAgICAgJ0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZScsXG4gICAgICAnQ3JlYXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlJyxcbiAgICAgICdDcmVhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbicsXG4gICAgICAnQ3JlYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25BbmFseXNpc1J1bGUnLFxuICAgICAgJ0NyZWF0ZUlkTWFwcGluZ1RhYmxlJyxcbiAgICAgICdDcmVhdGVJZE5hbWVzcGFjZUFzc29jaWF0aW9uJyxcbiAgICAgICdDcmVhdGVJbnRlcm1lZGlhdGVUYWJsZScsXG4gICAgICAnQ3JlYXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUnLFxuICAgICAgJ0NyZWF0ZU1lbWJlcnNoaXAnLFxuICAgICAgJ0NyZWF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZScsXG4gICAgICAnRGVsZXRlQW5hbHlzaXNUZW1wbGF0ZScsXG4gICAgICAnRGVsZXRlQ29sbGFib3JhdGlvbicsXG4gICAgICAnRGVsZXRlQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbicsXG4gICAgICAnRGVsZXRlQ29uZmlndXJlZFRhYmxlJyxcbiAgICAgICdEZWxldGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUnLFxuICAgICAgJ0RlbGV0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uJyxcbiAgICAgICdEZWxldGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZScsXG4gICAgICAnRGVsZXRlSWRNYXBwaW5nVGFibGUnLFxuICAgICAgJ0RlbGV0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24nLFxuICAgICAgJ0RlbGV0ZUludGVybWVkaWF0ZVRhYmxlJyxcbiAgICAgICdEZWxldGVJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZScsXG4gICAgICAnRGVsZXRlTWVtYmVyJyxcbiAgICAgICdEZWxldGVNZW1iZXJzaGlwJyxcbiAgICAgICdEZWxldGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUnLFxuICAgICAgJ0Rpc2FsbG93SW50ZXJtZWRpYXRlVGFibGUnLFxuICAgICAgJ1BvcHVsYXRlSWRNYXBwaW5nVGFibGUnLFxuICAgICAgJ1BvcHVsYXRlSW50ZXJtZWRpYXRlVGFibGUnLFxuICAgICAgJ1N0YXJ0QW5hbHlzaXNMb2dFeHBvcnQnLFxuICAgICAgJ1N0YXJ0UHJvdGVjdGVkSm9iJyxcbiAgICAgICdTdGFydFByb3RlY3RlZFF1ZXJ5JyxcbiAgICAgICdUYWdSZXNvdXJjZScsXG4gICAgICAnVW50YWdSZXNvdXJjZScsXG4gICAgICAnVXBkYXRlQW5hbHlzaXNUZW1wbGF0ZScsXG4gICAgICAnVXBkYXRlQ29sbGFib3JhdGlvbicsXG4gICAgICAnVXBkYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QnLFxuICAgICAgJ1VwZGF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24nLFxuICAgICAgJ1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZScsXG4gICAgICAnVXBkYXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlJyxcbiAgICAgICdVcGRhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbicsXG4gICAgICAnVXBkYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25BbmFseXNpc1J1bGUnLFxuICAgICAgJ1VwZGF0ZUlkTWFwcGluZ1RhYmxlJyxcbiAgICAgICdVcGRhdGVJZE5hbWVzcGFjZUFzc29jaWF0aW9uJyxcbiAgICAgICdVcGRhdGVJbnRlcm1lZGlhdGVUYWJsZScsXG4gICAgICAnVXBkYXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUnLFxuICAgICAgJ1VwZGF0ZU1lbWJlcnNoaXAnLFxuICAgICAgJ1VwZGF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZScsXG4gICAgICAnVXBkYXRlUHJvdGVjdGVkSm9iJyxcbiAgICAgICdVcGRhdGVQcm90ZWN0ZWRRdWVyeScsXG4gICAgICAnVXBkYXRlQ29uZmlndXJlZFRhYmxlQWxsb3dlZENvbHVtbnMnLFxuICAgICAgJ1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZVJlZmVyZW5jZSdcbiAgICBdLFxuICAgIExpc3Q6IFtcbiAgICAgICdMaXN0QW5hbHlzaXNMb2dFeHBvcnRzJyxcbiAgICAgICdMaXN0QW5hbHlzaXNUZW1wbGF0ZXMnLFxuICAgICAgJ0xpc3RDb2xsYWJvcmF0aW9uQW5hbHlzaXNUZW1wbGF0ZXMnLFxuICAgICAgJ0xpc3RDb2xsYWJvcmF0aW9uQ2hhbmdlUmVxdWVzdHMnLFxuICAgICAgJ0xpc3RDb2xsYWJvcmF0aW9uQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0xpc3RDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0xpc3RDb2xsYWJvcmF0aW9uUHJpdmFjeUJ1ZGdldFRlbXBsYXRlcycsXG4gICAgICAnTGlzdENvbGxhYm9yYXRpb25Qcml2YWN5QnVkZ2V0cycsXG4gICAgICAnTGlzdENvbGxhYm9yYXRpb25zJyxcbiAgICAgICdMaXN0Q29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0xpc3RDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0xpc3RDb25maWd1cmVkVGFibGVzJyxcbiAgICAgICdMaXN0SWRNYXBwaW5nVGFibGVzJyxcbiAgICAgICdMaXN0SWROYW1lc3BhY2VBc3NvY2lhdGlvbnMnLFxuICAgICAgJ0xpc3RJbnRlcm1lZGlhdGVUYWJsZVZlcnNpb25zJyxcbiAgICAgICdMaXN0SW50ZXJtZWRpYXRlVGFibGVzJyxcbiAgICAgICdMaXN0TWVtYmVycycsXG4gICAgICAnTGlzdE1lbWJlcnNoaXBzJyxcbiAgICAgICdMaXN0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlcycsXG4gICAgICAnTGlzdFByaXZhY3lCdWRnZXRzJyxcbiAgICAgICdMaXN0UHJvdGVjdGVkSm9icycsXG4gICAgICAnTGlzdFByb3RlY3RlZFF1ZXJpZXMnLFxuICAgICAgJ0xpc3RTY2hlbWFzJyxcbiAgICAgICdMaXN0VGFnc0ZvclJlc291cmNlJ1xuICAgIF0sXG4gICAgVGFnZ2luZzogW1xuICAgICAgJ1RhZ1Jlc291cmNlJyxcbiAgICAgICdVbnRhZ1Jlc291cmNlJ1xuICAgIF1cbiAgfTtcblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgYW5hbHlzaXN0ZW1wbGF0ZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvdXNlcmd1aWRlL3NlY3VyaXR5LWlhbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBtZW1iZXJzaGlwSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgbWVtYmVyc2hpcElkLlxuICAgKiBAcGFyYW0gYW5hbHlzaXNUZW1wbGF0ZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIGFuYWx5c2lzVGVtcGxhdGVJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uQW5hbHlzaXN0ZW1wbGF0ZShtZW1iZXJzaGlwSWQ6IHN0cmluZywgYW5hbHlzaXNUZW1wbGF0ZUlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06Y2xlYW5yb29tczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06bWVtYmVyc2hpcC8keyBtZW1iZXJzaGlwSWQgfS9hbmFseXNpc3RlbXBsYXRlLyR7IGFuYWx5c2lzVGVtcGxhdGVJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgY29sbGFib3JhdGlvbiB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvdXNlcmd1aWRlL3NlY3VyaXR5LWlhbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsYWJvcmF0aW9uSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgY29sbGFib3JhdGlvbklkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Db2xsYWJvcmF0aW9uKGNvbGxhYm9yYXRpb25JZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmNsZWFucm9vbXM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OmNvbGxhYm9yYXRpb24vJHsgY29sbGFib3JhdGlvbklkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBjb25maWd1cmVkYXVkaWVuY2Vtb2RlbGFzc29jaWF0aW9uIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC91c2VyZ3VpZGUvc2VjdXJpdHktaWFtLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIG1lbWJlcnNoaXBJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBtZW1iZXJzaGlwSWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgY29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbklkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Db25maWd1cmVkYXVkaWVuY2Vtb2RlbGFzc29jaWF0aW9uKG1lbWJlcnNoaXBJZDogc3RyaW5nLCBjb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpjbGVhbnJvb21zOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTptZW1iZXJzaGlwLyR7IG1lbWJlcnNoaXBJZCB9L2NvbmZpZ3VyZWRhdWRpZW5jZW1vZGVsYXNzb2NpYXRpb24vJHsgY29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbklkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBjb25maWd1cmVkdGFibGUgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L3VzZXJndWlkZS9zZWN1cml0eS1pYW0uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlndXJlZFRhYmxlSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgY29uZmlndXJlZFRhYmxlSWQuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvbkNvbmZpZ3VyZWR0YWJsZShjb25maWd1cmVkVGFibGVJZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmNsZWFucm9vbXM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OmNvbmZpZ3VyZWR0YWJsZS8keyBjb25maWd1cmVkVGFibGVJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgY29uZmlndXJlZHRhYmxlYXNzb2NpYXRpb24gdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L3VzZXJndWlkZS9zZWN1cml0eS1pYW0uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gbWVtYmVyc2hpcElkIC0gSWRlbnRpZmllciBmb3IgdGhlIG1lbWJlcnNoaXBJZC5cbiAgICogQHBhcmFtIGNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgY29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25JZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uQ29uZmlndXJlZHRhYmxlYXNzb2NpYXRpb24obWVtYmVyc2hpcElkOiBzdHJpbmcsIGNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpjbGVhbnJvb21zOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTptZW1iZXJzaGlwLyR7IG1lbWJlcnNoaXBJZCB9L2NvbmZpZ3VyZWR0YWJsZWFzc29jaWF0aW9uLyR7IGNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIGlkbWFwcGluZ3RhYmxlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC91c2VyZ3VpZGUvc2VjdXJpdHktaWFtLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIG1lbWJlcnNoaXBJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBtZW1iZXJzaGlwSWQuXG4gICAqIEBwYXJhbSBpZE1hcHBpbmdUYWJsZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIGlkTWFwcGluZ1RhYmxlSWQuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvbklkbWFwcGluZ3RhYmxlKG1lbWJlcnNoaXBJZDogc3RyaW5nLCBpZE1hcHBpbmdUYWJsZUlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06Y2xlYW5yb29tczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06bWVtYmVyc2hpcC8keyBtZW1iZXJzaGlwSWQgfS9pZG1hcHBpbmd0YWJsZS8keyBpZE1hcHBpbmdUYWJsZUlkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBpZG5hbWVzcGFjZWFzc29jaWF0aW9uIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsZWFuLXJvb21zL2xhdGVzdC91c2VyZ3VpZGUvc2VjdXJpdHktaWFtLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIG1lbWJlcnNoaXBJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBtZW1iZXJzaGlwSWQuXG4gICAqIEBwYXJhbSBpZE5hbWVzcGFjZUFzc29jaWF0aW9uSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgaWROYW1lc3BhY2VBc3NvY2lhdGlvbklkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25JZG5hbWVzcGFjZWFzc29jaWF0aW9uKG1lbWJlcnNoaXBJZDogc3RyaW5nLCBpZE5hbWVzcGFjZUFzc29jaWF0aW9uSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpjbGVhbnJvb21zOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTptZW1iZXJzaGlwLyR7IG1lbWJlcnNoaXBJZCB9L2lkbmFtZXNwYWNlYXNzb2NpYXRpb24vJHsgaWROYW1lc3BhY2VBc3NvY2lhdGlvbklkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBpbnRlcm1lZGlhdGV0YWJsZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvdXNlcmd1aWRlL3NlY3VyaXR5LWlhbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBtZW1iZXJzaGlwSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgbWVtYmVyc2hpcElkLlxuICAgKiBAcGFyYW0gaW50ZXJtZWRpYXRlVGFibGVJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBpbnRlcm1lZGlhdGVUYWJsZUlkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25JbnRlcm1lZGlhdGV0YWJsZShtZW1iZXJzaGlwSWQ6IHN0cmluZywgaW50ZXJtZWRpYXRlVGFibGVJZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmNsZWFucm9vbXM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9Om1lbWJlcnNoaXAvJHsgbWVtYmVyc2hpcElkIH0vaW50ZXJtZWRpYXRldGFibGUvJHsgaW50ZXJtZWRpYXRlVGFibGVJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgbWVtYmVyc2hpcCB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGVhbi1yb29tcy9sYXRlc3QvdXNlcmd1aWRlL3NlY3VyaXR5LWlhbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBtZW1iZXJzaGlwSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgbWVtYmVyc2hpcElkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25NZW1iZXJzaGlwKG1lbWJlcnNoaXBJZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmNsZWFucm9vbXM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9Om1lbWJlcnNoaXAvJHsgbWVtYmVyc2hpcElkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBwcml2YWN5YnVkZ2V0dGVtcGxhdGUgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xlYW4tcm9vbXMvbGF0ZXN0L3VzZXJndWlkZS9zZWN1cml0eS1pYW0uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gbWVtYmVyc2hpcElkIC0gSWRlbnRpZmllciBmb3IgdGhlIG1lbWJlcnNoaXBJZC5cbiAgICogQHBhcmFtIHByaXZhY3lCdWRnZXRUZW1wbGF0ZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIHByaXZhY3lCdWRnZXRUZW1wbGF0ZUlkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Qcml2YWN5YnVkZ2V0dGVtcGxhdGUobWVtYmVyc2hpcElkOiBzdHJpbmcsIHByaXZhY3lCdWRnZXRUZW1wbGF0ZUlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06Y2xlYW5yb29tczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06bWVtYmVyc2hpcC8keyBtZW1iZXJzaGlwSWQgfS9wcml2YWN5YnVkZ2V0dGVtcGxhdGUvJHsgcHJpdmFjeUJ1ZGdldFRlbXBsYXRlSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IHRoZSB0YWdzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVxdWVzdHRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQW5hbHlzaXNUZW1wbGF0ZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QoKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKClcbiAgICogLSAudG9DcmVhdGVJZE1hcHBpbmdUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlSW50ZXJtZWRpYXRlVGFibGUoKVxuICAgKiAtIC50b0NyZWF0ZU1lbWJlcnNoaXAoKVxuICAgKiAtIC50b0NyZWF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdGFnS2V5IFRoZSB0YWcga2V5IHRvIGNoZWNrXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzUmVxdWVzdFRhZyh0YWdLZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpSZXF1ZXN0VGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVzb3VyY2V0YWdcbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0JhdGNoR2V0Q29sbGFib3JhdGlvbkFuYWx5c2lzVGVtcGxhdGUoKVxuICAgKiAtIC50b0JhdGNoR2V0U2NoZW1hKClcbiAgICogLSAudG9CYXRjaEdldFNjaGVtYUFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvQ3JlYXRlQW5hbHlzaXNUZW1wbGF0ZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QoKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29uZmlndXJlZFRhYmxlQW5hbHlzaXNSdWxlKClcbiAgICogLSAudG9DcmVhdGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb25BbmFseXNpc1J1bGUoKVxuICAgKiAtIC50b0NyZWF0ZUlkTWFwcGluZ1RhYmxlKClcbiAgICogLSAudG9DcmVhdGVJZE5hbWVzcGFjZUFzc29jaWF0aW9uKClcbiAgICogLSAudG9DcmVhdGVJbnRlcm1lZGlhdGVUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlSW50ZXJtZWRpYXRlVGFibGVBbmFseXNpc1J1bGUoKVxuICAgKiAtIC50b0NyZWF0ZU1lbWJlcnNoaXAoKVxuICAgKiAtIC50b0NyZWF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpXG4gICAqIC0gLnRvRGVsZXRlQW5hbHlzaXNUZW1wbGF0ZSgpXG4gICAqIC0gLnRvRGVsZXRlQ29sbGFib3JhdGlvbigpXG4gICAqIC0gLnRvRGVsZXRlQ29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvRGVsZXRlQ29uZmlndXJlZFRhYmxlKClcbiAgICogLSAudG9EZWxldGVDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUoKVxuICAgKiAtIC50b0RlbGV0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uKClcbiAgICogLSAudG9EZWxldGVDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvRGVsZXRlSWRNYXBwaW5nVGFibGUoKVxuICAgKiAtIC50b0RlbGV0ZUlkTmFtZXNwYWNlQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0RlbGV0ZUludGVybWVkaWF0ZVRhYmxlKClcbiAgICogLSAudG9EZWxldGVJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvRGVsZXRlTWVtYmVyKClcbiAgICogLSAudG9EZWxldGVNZW1iZXJzaGlwKClcbiAgICogLSAudG9EZWxldGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUoKVxuICAgKiAtIC50b0Rpc2FsbG93SW50ZXJtZWRpYXRlVGFibGUoKVxuICAgKiAtIC50b0dldEFuYWx5c2lzTG9nRXhwb3J0KClcbiAgICogLSAudG9HZXRBbmFseXNpc1RlbXBsYXRlKClcbiAgICogLSAudG9HZXRDb2xsYWJvcmF0aW9uKClcbiAgICogLSAudG9HZXRDb2xsYWJvcmF0aW9uQW5hbHlzaXNUZW1wbGF0ZSgpXG4gICAqIC0gLnRvR2V0Q29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QoKVxuICAgKiAtIC50b0dldENvbGxhYm9yYXRpb25Db25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uKClcbiAgICogLSAudG9HZXRDb2xsYWJvcmF0aW9uSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvR2V0Q29sbGFib3JhdGlvblByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpXG4gICAqIC0gLnRvR2V0Q29uZmlndXJlZEF1ZGllbmNlTW9kZWxBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvR2V0Q29uZmlndXJlZFRhYmxlKClcbiAgICogLSAudG9HZXRDb25maWd1cmVkVGFibGVBbmFseXNpc1J1bGUoKVxuICAgKiAtIC50b0dldENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uKClcbiAgICogLSAudG9HZXRDb25maWd1cmVkVGFibGVBc3NvY2lhdGlvbkFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvR2V0SWRNYXBwaW5nVGFibGUoKVxuICAgKiAtIC50b0dldElkTmFtZXNwYWNlQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0dldEludGVybWVkaWF0ZVRhYmxlKClcbiAgICogLSAudG9HZXRJbnRlcm1lZGlhdGVUYWJsZUFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvR2V0TWVtYmVyc2hpcCgpXG4gICAqIC0gLnRvR2V0UHJpdmFjeUJ1ZGdldFRlbXBsYXRlKClcbiAgICogLSAudG9HZXRQcm90ZWN0ZWRKb2IoKVxuICAgKiAtIC50b0dldFByb3RlY3RlZFF1ZXJ5KClcbiAgICogLSAudG9HZXRTY2hlbWEoKVxuICAgKiAtIC50b0dldFNjaGVtYUFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvTGlzdEFuYWx5c2lzTG9nRXhwb3J0cygpXG4gICAqIC0gLnRvTGlzdEFuYWx5c2lzVGVtcGxhdGVzKClcbiAgICogLSAudG9MaXN0Q29sbGFib3JhdGlvbkFuYWx5c2lzVGVtcGxhdGVzKClcbiAgICogLSAudG9MaXN0Q29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3RzKClcbiAgICogLSAudG9MaXN0Q29sbGFib3JhdGlvbkNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb25zKClcbiAgICogLSAudG9MaXN0Q29sbGFib3JhdGlvbklkTmFtZXNwYWNlQXNzb2NpYXRpb25zKClcbiAgICogLSAudG9MaXN0Q29sbGFib3JhdGlvblByaXZhY3lCdWRnZXRUZW1wbGF0ZXMoKVxuICAgKiAtIC50b0xpc3RDb2xsYWJvcmF0aW9uUHJpdmFjeUJ1ZGdldHMoKVxuICAgKiAtIC50b0xpc3RDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9ucygpXG4gICAqIC0gLnRvTGlzdENvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9ucygpXG4gICAqIC0gLnRvTGlzdElkTWFwcGluZ1RhYmxlcygpXG4gICAqIC0gLnRvTGlzdElkTmFtZXNwYWNlQXNzb2NpYXRpb25zKClcbiAgICogLSAudG9MaXN0SW50ZXJtZWRpYXRlVGFibGVWZXJzaW9ucygpXG4gICAqIC0gLnRvTGlzdEludGVybWVkaWF0ZVRhYmxlcygpXG4gICAqIC0gLnRvTGlzdE1lbWJlcnMoKVxuICAgKiAtIC50b0xpc3RQcml2YWN5QnVkZ2V0VGVtcGxhdGVzKClcbiAgICogLSAudG9MaXN0UHJpdmFjeUJ1ZGdldHMoKVxuICAgKiAtIC50b0xpc3RQcm90ZWN0ZWRKb2JzKClcbiAgICogLSAudG9MaXN0UHJvdGVjdGVkUXVlcmllcygpXG4gICAqIC0gLnRvTGlzdFNjaGVtYXMoKVxuICAgKiAtIC50b0xpc3RUYWdzRm9yUmVzb3VyY2UoKVxuICAgKiAtIC50b1BvcHVsYXRlSWRNYXBwaW5nVGFibGUoKVxuICAgKiAtIC50b1BvcHVsYXRlSW50ZXJtZWRpYXRlVGFibGUoKVxuICAgKiAtIC50b1ByZXZpZXdQcml2YWN5SW1wYWN0KClcbiAgICogLSAudG9TdGFydEFuYWx5c2lzTG9nRXhwb3J0KClcbiAgICogLSAudG9TdGFydFByb3RlY3RlZEpvYigpXG4gICAqIC0gLnRvU3RhcnRQcm90ZWN0ZWRRdWVyeSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1VudGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1VwZGF0ZUFuYWx5c2lzVGVtcGxhdGUoKVxuICAgKiAtIC50b1VwZGF0ZUNvbGxhYm9yYXRpb24oKVxuICAgKiAtIC50b1VwZGF0ZUNvbGxhYm9yYXRpb25DaGFuZ2VSZXF1ZXN0KClcbiAgICogLSAudG9VcGRhdGVDb25maWd1cmVkQXVkaWVuY2VNb2RlbEFzc29jaWF0aW9uKClcbiAgICogLSAudG9VcGRhdGVDb25maWd1cmVkVGFibGUoKVxuICAgKiAtIC50b1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFuYWx5c2lzUnVsZSgpXG4gICAqIC0gLnRvVXBkYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKClcbiAgICogLSAudG9VcGRhdGVJZE1hcHBpbmdUYWJsZSgpXG4gICAqIC0gLnRvVXBkYXRlSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvVXBkYXRlSW50ZXJtZWRpYXRlVGFibGUoKVxuICAgKiAtIC50b1VwZGF0ZUludGVybWVkaWF0ZVRhYmxlQW5hbHlzaXNSdWxlKClcbiAgICogLSAudG9VcGRhdGVNZW1iZXJzaGlwKClcbiAgICogLSAudG9VcGRhdGVQcml2YWN5QnVkZ2V0VGVtcGxhdGUoKVxuICAgKiAtIC50b1VwZGF0ZVByb3RlY3RlZEpvYigpXG4gICAqIC0gLnRvVXBkYXRlUHJvdGVjdGVkUXVlcnkoKVxuICAgKiAtIC50b1Bhc3NDb2xsYWJvcmF0aW9uKClcbiAgICogLSAudG9QYXNzTWVtYmVyc2hpcCgpXG4gICAqIC0gLnRvVXBkYXRlQ29uZmlndXJlZFRhYmxlQWxsb3dlZENvbHVtbnMoKVxuICAgKiAtIC50b1VwZGF0ZUNvbmZpZ3VyZWRUYWJsZVJlZmVyZW5jZSgpXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gcmVzb3VyY2UgdHlwZXM6XG4gICAqIC0gYW5hbHlzaXN0ZW1wbGF0ZVxuICAgKiAtIGNvbGxhYm9yYXRpb25cbiAgICogLSBjb25maWd1cmVkYXVkaWVuY2Vtb2RlbGFzc29jaWF0aW9uXG4gICAqIC0gY29uZmlndXJlZHRhYmxlXG4gICAqIC0gY29uZmlndXJlZHRhYmxlYXNzb2NpYXRpb25cbiAgICogLSBpZG1hcHBpbmd0YWJsZVxuICAgKiAtIGlkbmFtZXNwYWNlYXNzb2NpYXRpb25cbiAgICogLSBpbnRlcm1lZGlhdGV0YWJsZVxuICAgKiAtIG1lbWJlcnNoaXBcbiAgICogLSBwcml2YWN5YnVkZ2V0dGVtcGxhdGVcbiAgICpcbiAgICogQHBhcmFtIHRhZ0tleSBUaGUgdGFnIGtleSB0byBjaGVja1xuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1Jlc291cmNlVGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlc291cmNlVGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZyBrZXlzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtdGFna2V5c1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQW5hbHlzaXNUZW1wbGF0ZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlQ29sbGFib3JhdGlvbkNoYW5nZVJlcXVlc3QoKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRBdWRpZW5jZU1vZGVsQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlQ29uZmlndXJlZFRhYmxlQXNzb2NpYXRpb24oKVxuICAgKiAtIC50b0NyZWF0ZUNvbmZpZ3VyZWRUYWJsZUFzc29jaWF0aW9uQW5hbHlzaXNSdWxlKClcbiAgICogLSAudG9DcmVhdGVJZE1hcHBpbmdUYWJsZSgpXG4gICAqIC0gLnRvQ3JlYXRlSWROYW1lc3BhY2VBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlSW50ZXJtZWRpYXRlVGFibGUoKVxuICAgKiAtIC50b0NyZWF0ZU1lbWJlcnNoaXAoKVxuICAgKiAtIC50b0NyZWF0ZVByaXZhY3lCdWRnZXRUZW1wbGF0ZSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1VudGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1RhZ0tleXModmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpUYWdLZXlzYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtjbGVhbnJvb21zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9jbGVhbnJvb21zLmh0bWwpLlxuICAgKlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM/OiBpYW0uUG9saWN5U3RhdGVtZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbn1cbiJdfQ==