UNPKG

iam-floyd

Version:

AWS IAM policy statement generator with fluent interface

208 lines 20.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IdentitySync = void 0; const shared_1 = require("../../shared"); /** * Statement provider for service [identity-sync](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentitysync.html). * * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement */ class IdentitySync extends shared_1.PolicyStatement { /** * Statement provider for service [identity-sync](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentitysync.html). * * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement */ constructor(sid) { super(sid); this.servicePrefix = 'identity-sync'; this.accessLevelList = { 'Permissions management': [ 'AllowVendedLogDeliveryForResource' ], Write: [ 'CreateSyncFilter', 'CreateSyncProfile', 'CreateSyncTarget', 'DeleteSyncFilter', 'DeleteSyncProfile', 'DeleteSyncTarget', 'StartSync', 'StopSync', 'UpdateSyncTarget' ], Read: [ 'GetSyncProfile', 'GetSyncTarget' ], List: [ 'ListSyncFilters' ] }; } /** * Grants permission to configure vended log delivery for a Sync Profile * * Access Level: Permissions management * * https://docs.aws.amazon.com/singlesignon/latest/userguide/logging-ad-sync-errors.html */ toAllowVendedLogDeliveryForResource() { return this.to('AllowVendedLogDeliveryForResource'); } /** * Grants permission to create a sync filter on the sync profile * * Access Level: Write * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toCreateSyncFilter() { return this.to('CreateSyncFilter'); } /** * Grants permission to create a sync profile for the identity source * * Access Level: Write * * Dependent actions: * - ds:AuthorizeApplication * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toCreateSyncProfile() { return this.to('CreateSyncProfile'); } /** * Grants permission to create a sync target for the identity source * * Access Level: Write * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toCreateSyncTarget() { return this.to('CreateSyncTarget'); } /** * Grants permission to delete a sync filter from the sync profile * * Access Level: Write * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toDeleteSyncFilter() { return this.to('DeleteSyncFilter'); } /** * Grants permission to delete a sync profile from the source * * Access Level: Write * * Dependent actions: * - ds:UnauthorizeApplication * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toDeleteSyncProfile() { return this.to('DeleteSyncProfile'); } /** * Grants permission to delete a sync target from the source * * Access Level: Write * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toDeleteSyncTarget() { return this.to('DeleteSyncTarget'); } /** * Grants permission to retrieve a sync profile by using a sync profile name * * Access Level: Read * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toGetSyncProfile() { return this.to('GetSyncProfile'); } /** * Grants permission to retrieve a sync target from the sync profile * * Access Level: Read * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toGetSyncTarget() { return this.to('GetSyncTarget'); } /** * Grants permission to list the sync filters from the sync profile * * Access Level: List * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toListSyncFilters() { return this.to('ListSyncFilters'); } /** * Grants permission to start a sync process or to resume a sync process that was previously paused * * Access Level: Write * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toStartSync() { return this.to('StartSync'); } /** * Grants permission to stop any planned sync process in the sync schedule from starting * * Access Level: Write * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toStopSync() { return this.to('StopSync'); } /** * Grants permission to update a sync target on the sync profile * * Access Level: Write * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html */ toUpdateSyncTarget() { return this.to('UpdateSyncTarget'); } /** * Adds a resource of type SyncProfileResource to the statement * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html * * @param syncProfileName - Identifier for the syncProfileName. * @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. */ onSyncProfileResource(syncProfileName, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:identity-sync:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:profile/${syncProfileName}`); } /** * Adds a resource of type SyncTargetResource to the statement * * https://docs.aws.amazon.com/singlesignon/latest/userguide/provision-users-groups-AD.html * * @param syncProfileName - Identifier for the syncProfileName. * @param syncTargetName - Identifier for the syncTargetName. * @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. */ onSyncTargetResource(syncProfileName, syncTargetName, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:identity-sync:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:target/${syncProfileName}/${syncTargetName}`); } } exports.IdentitySync = IdentitySync; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHlzeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaWRlbnRpdHlzeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlDQUErQztBQUUvQzs7OztHQUlHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsd0JBQWU7SUFHL0M7Ozs7T0FJRztJQUNILFlBQVksR0FBWTtRQUN0QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFSTixrQkFBYSxHQUFHLGVBQWUsQ0FBQztRQWdLN0Isb0JBQWUsR0FBb0I7WUFDM0Msd0JBQXdCLEVBQUU7Z0JBQ3hCLG1DQUFtQzthQUNwQztZQUNELEtBQUssRUFBRTtnQkFDTCxrQkFBa0I7Z0JBQ2xCLG1CQUFtQjtnQkFDbkIsa0JBQWtCO2dCQUNsQixrQkFBa0I7Z0JBQ2xCLG1CQUFtQjtnQkFDbkIsa0JBQWtCO2dCQUNsQixXQUFXO2dCQUNYLFVBQVU7Z0JBQ1Ysa0JBQWtCO2FBQ25CO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLGdCQUFnQjtnQkFDaEIsZUFBZTthQUNoQjtZQUNELElBQUksRUFBRTtnQkFDSixpQkFBaUI7YUFDbEI7U0FDRixDQUFDO0lBN0tGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxtQ0FBbUM7UUFDeEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksZUFBZTtRQUNwQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBMEJEOzs7Ozs7Ozs7T0FTRztJQUNJLHFCQUFxQixDQUFDLGVBQXVCLEVBQUUsT0FBZ0IsRUFBRSxNQUFlLEVBQUUsU0FBa0I7UUFDekcsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQVEsU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBaUIsa0JBQW1CLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYyxJQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBZSxZQUFhLGVBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ2pMLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksb0JBQW9CLENBQUMsZUFBdUIsRUFBRSxjQUFzQixFQUFFLE9BQWdCLEVBQUUsTUFBZSxFQUFFLFNBQWtCO1FBQ2hJLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFRLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWlCLGtCQUFtQixNQUFNLElBQUksSUFBSSxDQUFDLGFBQWMsSUFBSyxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWUsV0FBWSxlQUFnQixJQUFLLGNBQWUsRUFBRSxDQUFDLENBQUM7SUFDcE0sQ0FBQztDQUNGO0FBck5ELG9DQXFOQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjY2Vzc0xldmVsTGlzdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hY2Nlc3MtbGV2ZWwnO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2lkZW50aXR5LXN5bmNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2F3c2lkZW50aXR5c3luYy5odG1sKS5cbiAqXG4gKiBAcGFyYW0gc2lkIFtTSURdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWwpIG9mIHRoZSBzdGF0ZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIElkZW50aXR5U3luYyBleHRlbmRzIFBvbGljeVN0YXRlbWVudCB7XG4gIHB1YmxpYyBzZXJ2aWNlUHJlZml4ID0gJ2lkZW50aXR5LXN5bmMnO1xuXG4gIC8qKlxuICAgKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2lkZW50aXR5LXN5bmNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2F3c2lkZW50aXR5c3luYy5odG1sKS5cbiAgICpcbiAgICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcihzaWQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihzaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNvbmZpZ3VyZSB2ZW5kZWQgbG9nIGRlbGl2ZXJ5IGZvciBhIFN5bmMgUHJvZmlsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFBlcm1pc3Npb25zIG1hbmFnZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NpbmdsZXNpZ25vbi9sYXRlc3QvdXNlcmd1aWRlL2xvZ2dpbmctYWQtc3luYy1lcnJvcnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQWxsb3dWZW5kZWRMb2dEZWxpdmVyeUZvclJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdBbGxvd1ZlbmRlZExvZ0RlbGl2ZXJ5Rm9yUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBzeW5jIGZpbHRlciBvbiB0aGUgc3luYyBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NpbmdsZXNpZ25vbi9sYXRlc3QvdXNlcmd1aWRlL3Byb3Zpc2lvbi11c2Vycy1ncm91cHMtQUQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlU3luY0ZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlU3luY0ZpbHRlcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHN5bmMgcHJvZmlsZSBmb3IgdGhlIGlkZW50aXR5IHNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIERlcGVuZGVudCBhY3Rpb25zOlxuICAgKiAtIGRzOkF1dGhvcml6ZUFwcGxpY2F0aW9uXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zaW5nbGVzaWdub24vbGF0ZXN0L3VzZXJndWlkZS9wcm92aXNpb24tdXNlcnMtZ3JvdXBzLUFELmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVN5bmNQcm9maWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVTeW5jUHJvZmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHN5bmMgdGFyZ2V0IGZvciB0aGUgaWRlbnRpdHkgc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NpbmdsZXNpZ25vbi9sYXRlc3QvdXNlcmd1aWRlL3Byb3Zpc2lvbi11c2Vycy1ncm91cHMtQUQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlU3luY1RhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlU3luY1RhcmdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHN5bmMgZmlsdGVyIGZyb20gdGhlIHN5bmMgcHJvZmlsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zaW5nbGVzaWdub24vbGF0ZXN0L3VzZXJndWlkZS9wcm92aXNpb24tdXNlcnMtZ3JvdXBzLUFELmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVN5bmNGaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVN5bmNGaWx0ZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBzeW5jIHByb2ZpbGUgZnJvbSB0aGUgc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogRGVwZW5kZW50IGFjdGlvbnM6XG4gICAqIC0gZHM6VW5hdXRob3JpemVBcHBsaWNhdGlvblxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2luZ2xlc2lnbm9uL2xhdGVzdC91c2VyZ3VpZGUvcHJvdmlzaW9uLXVzZXJzLWdyb3Vwcy1BRC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVTeW5jUHJvZmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlU3luY1Byb2ZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBzeW5jIHRhcmdldCBmcm9tIHRoZSBzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2luZ2xlc2lnbm9uL2xhdGVzdC91c2VyZ3VpZGUvcHJvdmlzaW9uLXVzZXJzLWdyb3Vwcy1BRC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVTeW5jVGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVTeW5jVGFyZ2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgYSBzeW5jIHByb2ZpbGUgYnkgdXNpbmcgYSBzeW5jIHByb2ZpbGUgbmFtZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NpbmdsZXNpZ25vbi9sYXRlc3QvdXNlcmd1aWRlL3Byb3Zpc2lvbi11c2Vycy1ncm91cHMtQUQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0U3luY1Byb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFN5bmNQcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgYSBzeW5jIHRhcmdldCBmcm9tIHRoZSBzeW5jIHByb2ZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zaW5nbGVzaWdub24vbGF0ZXN0L3VzZXJndWlkZS9wcm92aXNpb24tdXNlcnMtZ3JvdXBzLUFELmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFN5bmNUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFN5bmNUYXJnZXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHRoZSBzeW5jIGZpbHRlcnMgZnJvbSB0aGUgc3luYyBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2luZ2xlc2lnbm9uL2xhdGVzdC91c2VyZ3VpZGUvcHJvdmlzaW9uLXVzZXJzLWdyb3Vwcy1BRC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0U3luY0ZpbHRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RTeW5jRmlsdGVycycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHN0YXJ0IGEgc3luYyBwcm9jZXNzIG9yIHRvIHJlc3VtZSBhIHN5bmMgcHJvY2VzcyB0aGF0IHdhcyBwcmV2aW91c2x5IHBhdXNlZFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zaW5nbGVzaWdub24vbGF0ZXN0L3VzZXJndWlkZS9wcm92aXNpb24tdXNlcnMtZ3JvdXBzLUFELmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0U3luYygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRTeW5jJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RvcCBhbnkgcGxhbm5lZCBzeW5jIHByb2Nlc3MgaW4gdGhlIHN5bmMgc2NoZWR1bGUgZnJvbSBzdGFydGluZ1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zaW5nbGVzaWdub24vbGF0ZXN0L3VzZXJndWlkZS9wcm92aXNpb24tdXNlcnMtZ3JvdXBzLUFELmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0b3BTeW5jKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdG9wU3luYycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhIHN5bmMgdGFyZ2V0IG9uIHRoZSBzeW5jIHByb2ZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2luZ2xlc2lnbm9uL2xhdGVzdC91c2VyZ3VpZGUvcHJvdmlzaW9uLXVzZXJzLWdyb3Vwcy1BRC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVTeW5jVGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVTeW5jVGFyZ2V0Jyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWNjZXNzTGV2ZWxMaXN0OiBBY2Nlc3NMZXZlbExpc3QgPSB7XG4gICAgJ1Blcm1pc3Npb25zIG1hbmFnZW1lbnQnOiBbXG4gICAgICAnQWxsb3dWZW5kZWRMb2dEZWxpdmVyeUZvclJlc291cmNlJ1xuICAgIF0sXG4gICAgV3JpdGU6IFtcbiAgICAgICdDcmVhdGVTeW5jRmlsdGVyJyxcbiAgICAgICdDcmVhdGVTeW5jUHJvZmlsZScsXG4gICAgICAnQ3JlYXRlU3luY1RhcmdldCcsXG4gICAgICAnRGVsZXRlU3luY0ZpbHRlcicsXG4gICAgICAnRGVsZXRlU3luY1Byb2ZpbGUnLFxuICAgICAgJ0RlbGV0ZVN5bmNUYXJnZXQnLFxuICAgICAgJ1N0YXJ0U3luYycsXG4gICAgICAnU3RvcFN5bmMnLFxuICAgICAgJ1VwZGF0ZVN5bmNUYXJnZXQnXG4gICAgXSxcbiAgICBSZWFkOiBbXG4gICAgICAnR2V0U3luY1Byb2ZpbGUnLFxuICAgICAgJ0dldFN5bmNUYXJnZXQnXG4gICAgXSxcbiAgICBMaXN0OiBbXG4gICAgICAnTGlzdFN5bmNGaWx0ZXJzJ1xuICAgIF1cbiAgfTtcblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgU3luY1Byb2ZpbGVSZXNvdXJjZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zaW5nbGVzaWdub24vbGF0ZXN0L3VzZXJndWlkZS9wcm92aXNpb24tdXNlcnMtZ3JvdXBzLUFELmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHN5bmNQcm9maWxlTmFtZSAtIElkZW50aWZpZXIgZm9yIHRoZSBzeW5jUHJvZmlsZU5hbWUuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKi9cbiAgcHVibGljIG9uU3luY1Byb2ZpbGVSZXNvdXJjZShzeW5jUHJvZmlsZU5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTppZGVudGl0eS1zeW5jOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTpwcm9maWxlLyR7IHN5bmNQcm9maWxlTmFtZSB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgU3luY1RhcmdldFJlc291cmNlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NpbmdsZXNpZ25vbi9sYXRlc3QvdXNlcmd1aWRlL3Byb3Zpc2lvbi11c2Vycy1ncm91cHMtQUQuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gc3luY1Byb2ZpbGVOYW1lIC0gSWRlbnRpZmllciBmb3IgdGhlIHN5bmNQcm9maWxlTmFtZS5cbiAgICogQHBhcmFtIHN5bmNUYXJnZXROYW1lIC0gSWRlbnRpZmllciBmb3IgdGhlIHN5bmNUYXJnZXROYW1lLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICovXG4gIHB1YmxpYyBvblN5bmNUYXJnZXRSZXNvdXJjZShzeW5jUHJvZmlsZU5hbWU6IHN0cmluZywgc3luY1RhcmdldE5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTppZGVudGl0eS1zeW5jOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTp0YXJnZXQvJHsgc3luY1Byb2ZpbGVOYW1lIH0vJHsgc3luY1RhcmdldE5hbWUgfWApO1xuICB9XG59XG4iXX0=