UNPKG

cdk-iam-floyd

Version:

AWS IAM policy statement generator with fluent interface for AWS CDK

814 lines 77.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Clouddirectory = void 0; const shared_1 = require("../../shared"); /** * Statement provider for service [clouddirectory](https://docs.aws.amazon.com/service-authorization/latest/reference/list_clouddirectory.html). * * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement */ class Clouddirectory extends shared_1.PolicyStatement { /** * Grants permission to add a new Facet to an object * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_AddFacetToObject.html */ toAddFacetToObject() { return this.to('AddFacetToObject'); } /** * Grants permission to copy input published schema into Directory with same name and version as that of published schema * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ApplySchema.html */ toApplySchema() { return this.to('ApplySchema'); } /** * Grants permission to attach an existing object to another existing object * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_AttachObject.html */ toAttachObject() { return this.to('AttachObject'); } /** * Grants permission to attach a policy object to any other object * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_AttachPolicy.html */ toAttachPolicy() { return this.to('AttachPolicy'); } /** * Grants permission to attach the specified object to the specified index * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_AttachToIndex.html */ toAttachToIndex() { return this.to('AttachToIndex'); } /** * Grants permission to attach a typed link b/w a source & target object reference * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_AttachTypedLink.html */ toAttachTypedLink() { return this.to('AttachTypedLink'); } /** * Grants permission to perform all the read operations in a batch. Each individual operation inside BatchRead needs to be granted permissions explicitly * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_BatchRead.html */ toBatchRead() { return this.to('BatchRead'); } /** * Grants permission to perform all the write operations in a batch. Each individual operation inside BatchWrite needs to be granted permissions explicitly * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_BatchWrite.html */ toBatchWrite() { return this.to('BatchWrite'); } /** * Grants permission to create a Directory by copying the published schema into the directory * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_CreateDirectory.html */ toCreateDirectory() { return this.to('CreateDirectory'); } /** * Grants permission to create a new Facet in a schema * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_CreateFacet.html */ toCreateFacet() { return this.to('CreateFacet'); } /** * Grants permission to create an index object * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_CreateIndex.html */ toCreateIndex() { return this.to('CreateIndex'); } /** * Grants permission to create an object in a Directory * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_CreateObject.html */ toCreateObject() { return this.to('CreateObject'); } /** * Grants permission to create a new schema in a development state * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_CreateSchema.html */ toCreateSchema() { return this.to('CreateSchema'); } /** * Grants permission to create a new Typed Link facet in a schema * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_CreateTypedLinkFacet.html */ toCreateTypedLinkFacet() { return this.to('CreateTypedLinkFacet'); } /** * Grants permission to delete a directory. Only disabled directories can be deleted * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_DeleteDirectory.html */ toDeleteDirectory() { return this.to('DeleteDirectory'); } /** * Grants permission to delete a given Facet. All attributes and Rules associated with the facet will be deleted * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_DeleteFacet.html */ toDeleteFacet() { return this.to('DeleteFacet'); } /** * Grants permission to delete an object and its associated attributes * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_DeleteObject.html */ toDeleteObject() { return this.to('DeleteObject'); } /** * Grants permission to delete a given schema * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_DeleteSchema.html */ toDeleteSchema() { return this.to('DeleteSchema'); } /** * Grants permission to delete a given TypedLink Facet. All attributes and Rules associated with the facet will be deleted * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_DeleteTypedLinkFacet.html */ toDeleteTypedLinkFacet() { return this.to('DeleteTypedLinkFacet'); } /** * Grants permission to detach the specified object from the specified index * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_DetachFromIndex.html */ toDetachFromIndex() { return this.to('DetachFromIndex'); } /** * Grants permission to detach a given object from the parent object * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_DetachObject.html */ toDetachObject() { return this.to('DetachObject'); } /** * Grants permission to detach a policy from an object * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_DetachPolicy.html */ toDetachPolicy() { return this.to('DetachPolicy'); } /** * Grants permission to detach a given typed link b/w given source and target object reference * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_DetachTypedLink.html */ toDetachTypedLink() { return this.to('DetachTypedLink'); } /** * Grants permission to disable the specified directory * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_DisableDirectory.html */ toDisableDirectory() { return this.to('DisableDirectory'); } /** * Grants permission to enable the specified directory * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_EnableDirectory.html */ toEnableDirectory() { return this.to('EnableDirectory'); } /** * Grants permission to return current applied schema version ARN, including the minor version in use * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_GetAppliedSchemaVersion.html */ toGetAppliedSchemaVersion() { return this.to('GetAppliedSchemaVersion'); } /** * Grants permission to retrieve metadata about a directory * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_GetDirectory.html */ toGetDirectory() { return this.to('GetDirectory'); } /** * Grants permission to get details of the Facet, such as Facet Name, Attributes, Rules, or ObjectType * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_GetFacet.html */ toGetFacet() { return this.to('GetFacet'); } /** * Grants permission to retrieve attributes that are associated with a typed link * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_GetLinkAttributes.html */ toGetLinkAttributes() { return this.to('GetLinkAttributes'); } /** * Grants permission to retrieve attributes within a facet that are associated with an object * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_GetObjectAttributes.html */ toGetObjectAttributes() { return this.to('GetObjectAttributes'); } /** * Grants permission to retrieve metadata about an object * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_GetObjectInformation.html */ toGetObjectInformation() { return this.to('GetObjectInformation'); } /** * Grants permission to retrieve a JSON representation of the schema * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_GetSchemaAsJson.html */ toGetSchemaAsJson() { return this.to('GetSchemaAsJson'); } /** * Grants permission to return identity attributes order information associated with a given typed link facet * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_GetTypedLinkFacetInformation.html */ toGetTypedLinkFacetInformation() { return this.to('GetTypedLinkFacetInformation'); } /** * Grants permission to list schemas applied to a directory * * Access Level: List * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListAppliedSchemaArns.html */ toListAppliedSchemaArns() { return this.to('ListAppliedSchemaArns'); } /** * Grants permission to list indices attached to an object * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListAttachedIndices.html */ toListAttachedIndices() { return this.to('ListAttachedIndices'); } /** * Grants permission to retrieve the ARNs of schemas in the development state * * Access Level: List * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListDevelopmentSchemaArns.html */ toListDevelopmentSchemaArns() { return this.to('ListDevelopmentSchemaArns'); } /** * Grants permission to list directories created within an account * * Access Level: List * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListDirectories.html */ toListDirectories() { return this.to('ListDirectories'); } /** * Grants permission to retrieve attributes attached to the facet * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListFacetAttributes.html */ toListFacetAttributes() { return this.to('ListFacetAttributes'); } /** * Grants permission to retrieve the names of facets that exist in a schema * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListFacetNames.html */ toListFacetNames() { return this.to('ListFacetNames'); } /** * Grants permission to return a paginated list of all incoming TypedLinks for a given object * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListIncomingTypedLinks.html */ toListIncomingTypedLinks() { return this.to('ListIncomingTypedLinks'); } /** * Grants permission to list objects attached to the specified index * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListIndex.html */ toListIndex() { return this.to('ListIndex'); } /** * Grants permission to list the major version families of each managed schema. If a major version ARN is provided as SchemaArn, the minor version revisions in that family are listed instead * * Access Level: List * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListManagedSchemaArns.html */ toListManagedSchemaArns() { return this.to('ListManagedSchemaArns'); } /** * Grants permission to list all attributes associated with an object * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListObjectAttributes.html */ toListObjectAttributes() { return this.to('ListObjectAttributes'); } /** * Grants permission to return a paginated list of child objects associated with a given object * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListObjectChildren.html */ toListObjectChildren() { return this.to('ListObjectChildren'); } /** * Grants permission to retrieve all available parent paths for any object type such as node, leaf node, policy node, and index node objects * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListObjectParentPaths.html */ toListObjectParentPaths() { return this.to('ListObjectParentPaths'); } /** * Grants permission to list parent objects associated with a given object in pagination fashion * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListObjectParents.html */ toListObjectParents() { return this.to('ListObjectParents'); } /** * Grants permission to return policies attached to an object in pagination fashion * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListObjectPolicies.html */ toListObjectPolicies() { return this.to('ListObjectPolicies'); } /** * Grants permission to return a paginated list of all outgoing TypedLinks for a given object * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListOutgoingTypedLinks.html */ toListOutgoingTypedLinks() { return this.to('ListOutgoingTypedLinks'); } /** * Grants permission to return all of the ObjectIdentifiers to which a given policy is attached * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListPolicyAttachments.html */ toListPolicyAttachments() { return this.to('ListPolicyAttachments'); } /** * Grants permission to retrieve published schema ARNs * * Access Level: List * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListPublishedSchemaArns.html */ toListPublishedSchemaArns() { return this.to('ListPublishedSchemaArns'); } /** * Grants permission to return tags for a resource * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListTagsForResource.html */ toListTagsForResource() { return this.to('ListTagsForResource'); } /** * Grants permission to return a paginated list of attributes associated with typed link facet * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListTypedLinkFacetAttributes.html */ toListTypedLinkFacetAttributes() { return this.to('ListTypedLinkFacetAttributes'); } /** * Grants permission to return a paginated list of typed link facet names that exist in a schema * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_ListTypedLinkFacetNames.html */ toListTypedLinkFacetNames() { return this.to('ListTypedLinkFacetNames'); } /** * Grants permission to list all policies from the root of the Directory to the object specified * * Access Level: Read * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_LookupPolicy.html */ toLookupPolicy() { return this.to('LookupPolicy'); } /** * Grants permission to publish a development schema with a version * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_PublishSchema.html */ toPublishSchema() { return this.to('PublishSchema'); } /** * Grants permission to update a schema using JSON upload. Only available for development schemas * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_PutSchemaFromJson.html */ toPutSchemaFromJson() { return this.to('PutSchemaFromJson'); } /** * Grants permission to remove the specified facet from the specified object * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_RemoveFacetFromObject.html */ toRemoveFacetFromObject() { return this.to('RemoveFacetFromObject'); } /** * Grants permission to add tags to a resource * * Access Level: Tagging, Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_TagResource.html */ toTagResource() { return this.to('TagResource'); } /** * Grants permission to remove tags from a resource * * Access Level: Tagging, Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_UntagResource.html */ toUntagResource() { return this.to('UntagResource'); } /** * Grants permission to add/update/delete existing Attributes, Rules, or ObjectType of a Facet * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_UpdateFacet.html */ toUpdateFacet() { return this.to('UpdateFacet'); } /** * Grants permission to update a given typed link's attributes. Attributes to be updated must not contribute to the typed link's identity, as defined by its IdentityAttributeOrder * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_UpdateLinkAttributes.html */ toUpdateLinkAttributes() { return this.to('UpdateLinkAttributes'); } /** * Grants permission to update a given object's attributes * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_UpdateObjectAttributes.html */ toUpdateObjectAttributes() { return this.to('UpdateObjectAttributes'); } /** * Grants permission to update the schema name with a new name * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_UpdateSchema.html */ toUpdateSchema() { return this.to('UpdateSchema'); } /** * Grants permission to add/update/delete existing Attributes, Rules, identity attribute order of a TypedLink Facet * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_UpdateTypedLinkFacet.html */ toUpdateTypedLinkFacet() { return this.to('UpdateTypedLinkFacet'); } /** * Grants permission to upgrade a single directory in-place using the PublishedSchemaArn with schema updates found in MinorVersion. Backwards-compatible minor version upgrades are instantaneously available for readers on all objects in the directory * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_UpgradeAppliedSchema.html */ toUpgradeAppliedSchema() { return this.to('UpgradeAppliedSchema'); } /** * Grants permission to upgrade a published schema under a new minor version revision using the current contents of DevelopmentSchemaArn * * Access Level: Write * * https://docs.aws.amazon.com/directoryservice/latest/APIReference/API_UpgradePublishedSchema.html */ toUpgradePublishedSchema() { return this.to('UpgradePublishedSchema'); } /** * Adds a resource of type appliedSchema to the statement * * https://docs.aws.amazon.com/directoryservice/latest/admin-guide/cd_key_concepts.html#whatisdirectory * * @param directoryId - Identifier for the directoryId. * @param schemaName - Identifier for the schemaName. * @param version - Identifier for the version. * @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. */ onAppliedSchema(directoryId, schemaName, version, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:clouddirectory:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:directory/${directoryId}/schema/${schemaName}/${version}`); } /** * Adds a resource of type developmentSchema to the statement * * https://docs.aws.amazon.com/directoryservice/latest/admin-guide/cd_key_concepts.html#whatisdirectory * * @param schemaName - Identifier for the schemaName. * @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. */ onDevelopmentSchema(schemaName, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:clouddirectory:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:schema/development/${schemaName}`); } /** * Adds a resource of type directory to the statement * * https://docs.aws.amazon.com/directoryservice/latest/admin-guide/cd_key_concepts.html#whatisdirectory * * @param directoryId - Identifier for the directoryId. * @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. */ onDirectory(directoryId, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:clouddirectory:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:directory/${directoryId}`); } /** * Adds a resource of type publishedSchema to the statement * * https://docs.aws.amazon.com/directoryservice/latest/admin-guide/cd_key_concepts.html#whatisdirectory * * @param schemaName - Identifier for the schemaName. * @param version - Identifier for the version. * @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. */ onPublishedSchema(schemaName, version, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:clouddirectory:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:schema/published/${schemaName}/${version}`); } /** * Statement provider for service [clouddirectory](https://docs.aws.amazon.com/service-authorization/latest/reference/list_clouddirectory.html). * */ constructor(props) { super(props); this.servicePrefix = 'clouddirectory'; this.accessLevelList = { Write: [ 'AddFacetToObject', 'ApplySchema', 'AttachObject', 'AttachPolicy', 'AttachToIndex', 'AttachTypedLink', 'BatchWrite', 'CreateDirectory', 'CreateFacet', 'CreateIndex', 'CreateObject', 'CreateSchema', 'CreateTypedLinkFacet', 'DeleteDirectory', 'DeleteFacet', 'DeleteObject', 'DeleteSchema', 'DeleteTypedLinkFacet', 'DetachFromIndex', 'DetachObject', 'DetachPolicy', 'DetachTypedLink', 'DisableDirectory', 'EnableDirectory', 'PublishSchema', 'PutSchemaFromJson', 'RemoveFacetFromObject', 'TagResource', 'UntagResource', 'UpdateFacet', 'UpdateLinkAttributes', 'UpdateObjectAttributes', 'UpdateSchema', 'UpdateTypedLinkFacet', 'UpgradeAppliedSchema', 'UpgradePublishedSchema' ], Read: [ 'BatchRead', 'GetAppliedSchemaVersion', 'GetDirectory', 'GetFacet', 'GetLinkAttributes', 'GetObjectAttributes', 'GetObjectInformation', 'GetSchemaAsJson', 'GetTypedLinkFacetInformation', 'ListAttachedIndices', 'ListFacetAttributes', 'ListFacetNames', 'ListIncomingTypedLinks', 'ListIndex', 'ListObjectAttributes', 'ListObjectChildren', 'ListObjectParentPaths', 'ListObjectParents', 'ListObjectPolicies', 'ListOutgoingTypedLinks', 'ListPolicyAttachments', 'ListTagsForResource', 'ListTypedLinkFacetAttributes', 'ListTypedLinkFacetNames', 'LookupPolicy' ], List: [ 'ListAppliedSchemaArns', 'ListDevelopmentSchemaArns', 'ListDirectories', 'ListManagedSchemaArns', 'ListPublishedSchemaArns' ], Tagging: [ 'TagResource', 'UntagResource' ] }; } } exports.Clouddirectory = Clouddirectory; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRkaXJlY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGRpcmVjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBK0M7QUFHL0M7Ozs7R0FJRztBQUNILE1BQWEsY0FBZSxTQUFRLHdCQUFlO0lBR2pEOzs7Ozs7T0FNRztJQUNJLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksZUFBZTtRQUNwQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxzQkFBc0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksc0JBQXNCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kseUJBQXlCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHNCQUFzQjtRQUMzQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSw4QkFBOEI7UUFDbkMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHVCQUF1QjtRQUM1QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSwyQkFBMkI7UUFDaEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHdCQUF3QjtRQUM3QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHVCQUF1QjtRQUM1QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksc0JBQXNCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxvQkFBb0I7UUFDekIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHVCQUF1QjtRQUM1QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxvQkFBb0I7UUFDekIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHdCQUF3QjtRQUM3QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksdUJBQXVCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx5QkFBeUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksOEJBQThCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx5QkFBeUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx1QkFBdUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHNCQUFzQjtRQUMzQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksd0JBQXdCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksc0JBQXNCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxzQkFBc0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHdCQUF3QjtRQUM3QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBaUZEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksZUFBZSxDQUFDLFdBQW1CLEVBQUUsVUFBa0IsRUFBRSxPQUFlLEVBQUUsT0FBZ0IsRUFBRSxNQUFlLEVBQUUsU0FBa0I7UUFDcEksT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQVEsU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBaUIsbUJBQW9CLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYyxJQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBZSxjQUFlLFdBQVksV0FBWSxVQUFXLElBQUssT0FBUSxFQUFFLENBQUMsQ0FBQztJQUNwTixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksbUJBQW1CLENBQUMsVUFBa0IsRUFBRSxPQUFnQixFQUFFLE1BQWUsRUFBRSxTQUFrQjtRQUNsRyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBUSxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFpQixtQkFBb0IsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFjLElBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFlLHVCQUF3QixVQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3hMLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxXQUFXLENBQUMsV0FBbUIsRUFBRSxPQUFnQixFQUFFLE1BQWUsRUFBRSxTQUFrQjtRQUMzRixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBUSxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFpQixtQkFBb0IsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFjLElBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFlLGNBQWUsV0FBWSxFQUFFLENBQUMsQ0FBQztJQUNoTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLGlCQUFpQixDQUFDLFVBQWtCLEVBQUUsT0FBZSxFQUFFLE9BQWdCLEVBQUUsTUFBZSxFQUFFLFNBQWtCO1FBQ2pILE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFRLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWlCLG1CQUFvQixNQUFNLElBQUksSUFBSSxDQUFDLGFBQWMsSUFBSyxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWUscUJBQXNCLFVBQVcsSUFBSyxPQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ25NLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLEtBQWdDO1FBQzFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQXYyQlIsa0JBQWEsR0FBRyxnQkFBZ0IsQ0FBQztRQXd0QjlCLG9CQUFlLEdBQW9CO1lBQzNDLEtBQUssRUFBRTtnQkFDTCxrQkFBa0I7Z0JBQ2xCLGFBQWE7Z0JBQ2IsY0FBYztnQkFDZCxjQUFjO2dCQUNkLGVBQWU7Z0JBQ2YsaUJBQWlCO2dCQUNqQixZQUFZO2dCQUNaLGlCQUFpQjtnQkFDakIsYUFBYTtnQkFDYixhQUFhO2dCQUNiLGNBQWM7Z0JBQ2QsY0FBYztnQkFDZCxzQkFBc0I7Z0JBQ3RCLGlCQUFpQjtnQkFDakIsYUFBYTtnQkFDYixjQUFjO2dCQUNkLGNBQWM7Z0JBQ2Qsc0JBQXNCO2dCQUN0QixpQkFBaUI7Z0JBQ2pCLGNBQWM7Z0JBQ2QsY0FBYztnQkFDZCxpQkFBaUI7Z0JBQ2pCLGtCQUFrQjtnQkFDbEIsaUJBQWlCO2dCQUNqQixlQUFlO2dCQUNmLG1CQUFtQjtnQkFDbkIsdUJBQXVCO2dCQUN2QixhQUFhO2dCQUNiLGVBQWU7Z0JBQ2YsYUFBYTtnQkFDYixzQkFBc0I7Z0JBQ3RCLHdCQUF3QjtnQkFDeEIsY0FBYztnQkFDZCxzQkFBc0I7Z0JBQ3RCLHNCQUFzQjtnQkFDdEIsd0JBQXdCO2FBQ3pCO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLFdBQVc7Z0JBQ1gseUJBQXlCO2dCQUN6QixjQUFjO2dCQUNkLFVBQVU7Z0JBQ1YsbUJBQW1CO2dCQUNuQixxQkFBcUI7Z0JBQ3JCLHNCQUFzQjtnQkFDdEIsaUJBQWlCO2dCQUNqQiw4QkFBOEI7Z0JBQzlCLHFCQUFxQjtnQkFDckIscUJBQXFCO2dCQUNyQixnQkFBZ0I7Z0JBQ2hCLHdCQUF3QjtnQkFDeEIsV0FBVztnQkFDWCxzQkFBc0I7Z0JBQ3RCLG9CQUFvQjtnQkFDcEIsdUJBQXVCO2dCQUN2QixtQkFBbUI7Z0JBQ25CLG9CQUFvQjtnQkFDcEIsd0JBQXdCO2dCQUN4Qix1QkFBdUI7Z0JBQ3ZCLHFCQUFxQjtnQkFDckIsOEJBQThCO2dCQUM5Qix5QkFBeUI7Z0JBQ3pCLGNBQWM7YUFDZjtZQUNELElBQUksRUFBRTtnQkFDSix1QkFBdUI7Z0JBQ3ZCLDJCQUEyQjtnQkFDM0IsaUJBQWlCO2dCQUNqQix1QkFBdUI7Z0JBQ3ZCLHlCQUF5QjthQUMxQjtZQUNELE9BQU8sRUFBRTtnQkFDUCxhQUFhO2dCQUNiLGVBQWU7YUFDaEI7U0FDRixDQUFDO0lBbUVGLENBQUM7Q0FDRjtBQTEyQkQsd0NBMDJCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjY2Vzc0xldmVsTGlzdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hY2Nlc3MtbGV2ZWwnO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IGF3c19pYW0gYXMgaWFtIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbi8qKlxuICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtjbG91ZGRpcmVjdG9yeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfY2xvdWRkaXJlY3RvcnkuaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZGRpcmVjdG9yeSBleHRlbmRzIFBvbGljeVN0YXRlbWVudCB7XG4gIHB1YmxpYyBzZXJ2aWNlUHJlZml4ID0gJ2Nsb3VkZGlyZWN0b3J5JztcblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWRkIGEgbmV3IEZhY2V0IHRvIGFuIG9iamVjdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kaXJlY3RvcnlzZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0FkZEZhY2V0VG9PYmplY3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQWRkRmFjZXRUb09iamVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQWRkRmFjZXRUb09iamVjdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNvcHkgaW5wdXQgcHVibGlzaGVkIHNjaGVtYSBpbnRvIERpcmVjdG9yeSB3aXRoIHNhbWUgbmFtZSBhbmQgdmVyc2lvbiBhcyB0aGF0IG9mIHB1Ymxpc2hlZCBzY2hlbWFcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGlyZWN0b3J5c2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BcHBseVNjaGVtYS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9BcHBseVNjaGVtYSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXBwbHlTY2hlbWEnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhdHRhY2ggYW4gZXhpc3Rpbmcgb2JqZWN0IHRvIGFub3RoZXIgZXhpc3Rpbmcgb2JqZWN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2RpcmVjdG9yeXNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXR0YWNoT2JqZWN0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0F0dGFjaE9iamVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXR0YWNoT2JqZWN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXR0YWNoIGEgcG9saWN5IG9iamVjdCB0byBhbnkgb3RoZXIgb2JqZWN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2RpcmVjdG9yeXNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXR0YWNoUG9saWN5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0F0dGFjaFBvbGljeSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXR0YWNoUG9saWN5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXR0YWNoIHRoZSBzcGVjaWZpZWQgb2JqZWN0IHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGlyZWN0b3J5c2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdHRhY2hUb0luZGV4Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0F0dGFjaFRvSW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0F0dGFjaFRvSW5kZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhdHRhY2ggYSB0eXBlZCBsaW5rIGIvdyBhIHNvdXJjZSAmIHRhcmdldCBvYmplY3QgcmVmZXJlbmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2RpcmVjdG9yeXNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXR0YWNoVHlwZWRMaW5rLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0F0dGFjaFR5cGVkTGluaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXR0YWNoVHlwZWRMaW5rJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcGVyZm9ybSBhbGwgdGhlIHJlYWQgb3BlcmF0aW9ucyBpbiBhIGJhdGNoLiBFYWNoIGluZGl2aWR1YWwgb3BlcmF0aW9uIGluc2lkZSBCYXRjaFJlYWQgbmVlZHMgdG8gYmUgZ3JhbnRlZCBwZXJtaXNzaW9ucyBleHBsaWNpdGx5XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGlyZWN0b3J5c2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9CYXRjaFJlYWQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQmF0Y2hSZWFkKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdCYXRjaFJlYWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBwZXJmb3JtIGFsbCB0aGUgd3JpdGUgb3BlcmF0aW9ucyBpbiBhIGJhdGNoLiBFYWNoIGluZGl2aWR1YWwgb3BlcmF0aW9uIGluc2lkZSBCYXRjaFdyaXRlIG5lZWRzIHRvIGJlIGdyYW50ZWQgcGVybWlzc2lvbnMgZXhwbGljaXRseVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kaXJlY3RvcnlzZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0JhdGNoV3JpdGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQmF0Y2hXcml0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQmF0Y2hXcml0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIERpcmVjdG9yeSBieSBjb3B5aW5nIHRoZSBwdWJsaXNoZWQgc2NoZW1hIGludG8gdGhlIGRpcmVjdG9yeVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kaXJlY3RvcnlzZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURpcmVjdG9yeS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVEaXJlY3RvcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZURpcmVjdG9yeScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBGYWNldCBpbiBhIHNjaGVtYVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kaXJlY3RvcnlzZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUZhY2V0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUZhY2V0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVGYWNldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhbiBpbmRleCBvYmplY3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGlyZWN0b3J5c2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVJbmRleC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlSW5kZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYW4gb2JqZWN0IGluIGEgRGlyZWN0b3J5XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2RpcmVjdG9yeXNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlT2JqZWN0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZU9iamVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlT2JqZWN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbmV3IHNjaGVtYSBpbiBhIGRldmVsb3BtZW50IHN0YXRlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2RpcmVjdG9yeXNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2NoZW1hLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVNjaGVtYSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlU2NoZW1hJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbmV3IFR5cGVkIExpbmsgZmFjZXQgaW4gYSBzY2hlbWFcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGlyZWN0b3J5c2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVUeXBlZExpbmtGYWNldC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVUeXBlZExpbmtGYWNldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlVHlwZWRMaW5rRmFjZXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBkaXJlY3RvcnkuIE9ubHkgZGlzYWJsZWQgZGlyZWN0b3JpZXMgY2FuIGJlIGRlbGV0ZWRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGlyZWN0b3J5c2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZWxldGVEaXJlY3RvcnkuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlRGlyZWN0b3J5KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVEaXJlY3RvcnknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBnaXZlbiBGYWNldC4gQWxsIGF0dHJpYnV0ZXMgYW5kIFJ1bGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFjZXQgd2lsbCBiZSBkZWxldGVkXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2RpcmVjdG9yeXNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVsZXRlRmFjZXQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlRmFjZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUZhY2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGFuIG9iamVjdCBhbmQgaXRzIGFzc29jaWF0ZWQgYXR0cmlidXRlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kaXJlY3RvcnlzZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RlbGV0ZU9iamVjdC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVPYmplY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZU9iamVjdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGdpdmVuIHNjaGVtYVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kaXJlY3RvcnlzZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RlbGV0ZVNjaGVtYS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVTY2hlbWEoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVNjaGVtYScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGdpdmVuIFR5cGVkTGluayBGYWNldC4gQWxsIGF0dHJpYnV0ZXMgYW5kIFJ1bGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFjZXQgd2lsbCBiZSBkZWxldGVkXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2RpcmVjdG9yeXNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVsZXRlVHlwZWRMaW5rRmFjZXQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlVHlwZWRMaW5rRmFjZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVR5cGVkTGlua0ZhY2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGV0YWNoIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGZyb20gdGhlIHNwZWNpZmllZCBpbmRleFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kaXJlY3RvcnlzZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RldGFjaEZyb21JbmRleC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZXRhY2hGcm9tSW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RldGFjaEZyb21JbmRleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRldGFjaCBhIGdpdmVuIG9iamVjdCBmcm9tIHRoZSBwYXJlbnQgb2JqZWN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2RpcmVjdG9yeXNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGV0YWNoT2JqZWN0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RldGFjaE9iamVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGV0YWNoT2JqZWN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGV0YWNoIGEgcG9saWN5IGZyb20gYW4gb2JqZWN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2RpcmVjdG9yeXNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGV0YWNoUG9saWN5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RldGFjaFBvbGljeSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGV0YWNoUG9saWN5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGV0YWNoIGEgZ2l2ZW4gdHlwZWQgbGluayBiL3cgZ2l2ZW4gc291cmNlIGFuZCB0YXJnZXQgb2JqZWN0IHJlZmVyZW5jZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kaXJlY3RvcnlzZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RldGFjaFR5cGVkTGluay5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZXRhY2hUeXBlZExpbmsoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RldGFjaFR5cGVkTGluaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRpc2FibGUgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnlcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGlyZWN0b3J5c2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EaXNhYmxlRGlyZWN0b3J5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rpc2FibGVEaXJlY3RvcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rpc2FibGVEaXJlY3R