UNPKG

awscdk-resources-mongodbatlas

Version:

MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources

235 lines 43.3 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.CfnCloudBackupSnapshot = exports.ApiAtlasDiskBackupShardedClusterSnapshotViewType = exports.ApiAtlasDiskBackupShardedClusterSnapshotViewStatus = exports.ApiAtlasDiskBackupShardedClusterSnapshotViewSnapshotType = exports.ApiAtlasDiskBackupShardedClusterSnapshotViewFrequencyType = exports.ApiAtlasDiskBackupShardedClusterSnapshotMemberViewCloudProvider = exports.CfnCloudBackupSnapshotPropsSnapshotType = exports.CfnCloudBackupSnapshotPropsFrequencyType = exports.CfnCloudBackupSnapshotPropsInstanceType = void 0; exports.toJson_CfnCloudBackupSnapshotProps = toJson_CfnCloudBackupSnapshotProps; exports.toJson_ApiAtlasDiskBackupShardedClusterSnapshotMemberView = toJson_ApiAtlasDiskBackupShardedClusterSnapshotMemberView; exports.toJson_ApiAtlasDiskBackupShardedClusterSnapshotView = toJson_ApiAtlasDiskBackupShardedClusterSnapshotView; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); // Generated by cdk-import const cdk = require("aws-cdk-lib"); /** * Converts an object of type 'CfnCloudBackupSnapshotProps' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnCloudBackupSnapshotProps(obj) { if (obj === undefined) { return undefined; } const result = { Profile: obj.profile, InstanceType: obj.instanceType, InstanceName: obj.instanceName, Description: obj.description, FrequencyType: obj.frequencyType, ProjectId: obj.projectId, IncludeCount: obj.includeCount, ItemsPerPage: obj.itemsPerPage, Members: obj.members?.map((y) => toJson_ApiAtlasDiskBackupShardedClusterSnapshotMemberView(y)), PageNum: obj.pageNum, PolicyItems: obj.policyItems?.map((y) => y), Results: obj.results?.map((y) => toJson_ApiAtlasDiskBackupShardedClusterSnapshotView(y)), RetentionInDays: obj.retentionInDays, SnapshotType: obj.snapshotType, TotalCount: obj.totalCount, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /* eslint-enable max-len, quote-props */ /** * Type of instance specified on the Instance Name serverless or cluster * * @schema CfnCloudBackupSnapshotPropsInstanceType */ var CfnCloudBackupSnapshotPropsInstanceType; (function (CfnCloudBackupSnapshotPropsInstanceType) { /** serverless */ CfnCloudBackupSnapshotPropsInstanceType["SERVERLESS"] = "serverless"; /** cluster */ CfnCloudBackupSnapshotPropsInstanceType["CLUSTER"] = "cluster"; })(CfnCloudBackupSnapshotPropsInstanceType || (exports.CfnCloudBackupSnapshotPropsInstanceType = CfnCloudBackupSnapshotPropsInstanceType = {})); /** * Human-readable label that identifies how often this snapshot triggers. * * @schema CfnCloudBackupSnapshotPropsFrequencyType */ var CfnCloudBackupSnapshotPropsFrequencyType; (function (CfnCloudBackupSnapshotPropsFrequencyType) { /** hourly */ CfnCloudBackupSnapshotPropsFrequencyType["HOURLY"] = "hourly"; /** daily */ CfnCloudBackupSnapshotPropsFrequencyType["DAILY"] = "daily"; /** weekly */ CfnCloudBackupSnapshotPropsFrequencyType["WEEKLY"] = "weekly"; /** monthly */ CfnCloudBackupSnapshotPropsFrequencyType["MONTHLY"] = "monthly"; })(CfnCloudBackupSnapshotPropsFrequencyType || (exports.CfnCloudBackupSnapshotPropsFrequencyType = CfnCloudBackupSnapshotPropsFrequencyType = {})); /** * Converts an object of type 'ApiAtlasDiskBackupShardedClusterSnapshotMemberView' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_ApiAtlasDiskBackupShardedClusterSnapshotMemberView(obj) { if (obj === undefined) { return undefined; } const result = { CloudProvider: obj.cloudProvider, Id: obj.id, ReplicaSetName: obj.replicaSetName, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'ApiAtlasDiskBackupShardedClusterSnapshotView' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_ApiAtlasDiskBackupShardedClusterSnapshotView(obj) { if (obj === undefined) { return undefined; } const result = { CreatedAt: obj.createdAt, Description: obj.description, ExpiresAt: obj.expiresAt, FrequencyType: obj.frequencyType, Id: obj.id, MasterKeyUUID: obj.masterKeyUuid, Members: obj.members?.map((y) => toJson_ApiAtlasDiskBackupShardedClusterSnapshotMemberView(y)), MongodVersion: obj.mongodVersion, PolicyItems: obj.policyItems?.map((y) => y), SnapshotIds: obj.snapshotIds?.map((y) => y), SnapshotType: obj.snapshotType, Status: obj.status, StorageSizeBytes: obj.storageSizeBytes, Type: obj.type, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /* eslint-enable max-len, quote-props */ /** * Human-readable label that identifies when this snapshot triggers. * * @schema CfnCloudBackupSnapshotPropsSnapshotType */ var CfnCloudBackupSnapshotPropsSnapshotType; (function (CfnCloudBackupSnapshotPropsSnapshotType) { /** onDemand */ CfnCloudBackupSnapshotPropsSnapshotType["ON_DEMAND"] = "onDemand"; /** scheduled */ CfnCloudBackupSnapshotPropsSnapshotType["SCHEDULED"] = "scheduled"; })(CfnCloudBackupSnapshotPropsSnapshotType || (exports.CfnCloudBackupSnapshotPropsSnapshotType = CfnCloudBackupSnapshotPropsSnapshotType = {})); /** * Human-readable label that identifies the cloud provider that stores this snapshot. The resource returns this parameter when `"type": "replicaSet".` * * @schema ApiAtlasDiskBackupShardedClusterSnapshotMemberViewCloudProvider */ var ApiAtlasDiskBackupShardedClusterSnapshotMemberViewCloudProvider; (function (ApiAtlasDiskBackupShardedClusterSnapshotMemberViewCloudProvider) { /** AWS */ ApiAtlasDiskBackupShardedClusterSnapshotMemberViewCloudProvider["AWS"] = "AWS"; /** AZURE */ ApiAtlasDiskBackupShardedClusterSnapshotMemberViewCloudProvider["AZURE"] = "AZURE"; /** GCP */ ApiAtlasDiskBackupShardedClusterSnapshotMemberViewCloudProvider["GCP"] = "GCP"; })(ApiAtlasDiskBackupShardedClusterSnapshotMemberViewCloudProvider || (exports.ApiAtlasDiskBackupShardedClusterSnapshotMemberViewCloudProvider = ApiAtlasDiskBackupShardedClusterSnapshotMemberViewCloudProvider = {})); /** * Human-readable label that identifies how often this snapshot triggers. * * @schema ApiAtlasDiskBackupShardedClusterSnapshotViewFrequencyType */ var ApiAtlasDiskBackupShardedClusterSnapshotViewFrequencyType; (function (ApiAtlasDiskBackupShardedClusterSnapshotViewFrequencyType) { /** hourly */ ApiAtlasDiskBackupShardedClusterSnapshotViewFrequencyType["HOURLY"] = "hourly"; /** daily */ ApiAtlasDiskBackupShardedClusterSnapshotViewFrequencyType["DAILY"] = "daily"; /** weekly */ ApiAtlasDiskBackupShardedClusterSnapshotViewFrequencyType["WEEKLY"] = "weekly"; /** monthly */ ApiAtlasDiskBackupShardedClusterSnapshotViewFrequencyType["MONTHLY"] = "monthly"; })(ApiAtlasDiskBackupShardedClusterSnapshotViewFrequencyType || (exports.ApiAtlasDiskBackupShardedClusterSnapshotViewFrequencyType = ApiAtlasDiskBackupShardedClusterSnapshotViewFrequencyType = {})); /** * Human-readable label that identifies when this snapshot triggers. * * @schema ApiAtlasDiskBackupShardedClusterSnapshotViewSnapshotType */ var ApiAtlasDiskBackupShardedClusterSnapshotViewSnapshotType; (function (ApiAtlasDiskBackupShardedClusterSnapshotViewSnapshotType) { /** onDemand */ ApiAtlasDiskBackupShardedClusterSnapshotViewSnapshotType["ON_DEMAND"] = "onDemand"; /** scheduled */ ApiAtlasDiskBackupShardedClusterSnapshotViewSnapshotType["SCHEDULED"] = "scheduled"; })(ApiAtlasDiskBackupShardedClusterSnapshotViewSnapshotType || (exports.ApiAtlasDiskBackupShardedClusterSnapshotViewSnapshotType = ApiAtlasDiskBackupShardedClusterSnapshotViewSnapshotType = {})); /** * Human-readable label that indicates the stage of the backup process for this snapshot. * * @schema ApiAtlasDiskBackupShardedClusterSnapshotViewStatus */ var ApiAtlasDiskBackupShardedClusterSnapshotViewStatus; (function (ApiAtlasDiskBackupShardedClusterSnapshotViewStatus) { /** queued */ ApiAtlasDiskBackupShardedClusterSnapshotViewStatus["QUEUED"] = "queued"; /** inProgress */ ApiAtlasDiskBackupShardedClusterSnapshotViewStatus["IN_PROGRESS"] = "inProgress"; /** completed */ ApiAtlasDiskBackupShardedClusterSnapshotViewStatus["COMPLETED"] = "completed"; /** failed */ ApiAtlasDiskBackupShardedClusterSnapshotViewStatus["FAILED"] = "failed"; })(ApiAtlasDiskBackupShardedClusterSnapshotViewStatus || (exports.ApiAtlasDiskBackupShardedClusterSnapshotViewStatus = ApiAtlasDiskBackupShardedClusterSnapshotViewStatus = {})); /** * Human-readable label that categorizes the cluster as a replica set or sharded cluster. * * @schema ApiAtlasDiskBackupShardedClusterSnapshotViewType */ var ApiAtlasDiskBackupShardedClusterSnapshotViewType; (function (ApiAtlasDiskBackupShardedClusterSnapshotViewType) { /** REPLICA_SET */ ApiAtlasDiskBackupShardedClusterSnapshotViewType["REPLICA_SET"] = "REPLICA_SET"; /** SHARDED_CLUSTER */ ApiAtlasDiskBackupShardedClusterSnapshotViewType["SHARDED_CLUSTER"] = "SHARDED_CLUSTER"; })(ApiAtlasDiskBackupShardedClusterSnapshotViewType || (exports.ApiAtlasDiskBackupShardedClusterSnapshotViewType = ApiAtlasDiskBackupShardedClusterSnapshotViewType = {})); /** * A CloudFormation `MongoDB::Atlas::CloudBackupSnapshot` * * @cloudformationResource MongoDB::Atlas::CloudBackupSnapshot * @stability external */ class CfnCloudBackupSnapshot extends cdk.CfnResource { /** * Create a new `MongoDB::Atlas::CloudBackupSnapshot`. * * @param scope - scope in which this resource is defined * @param id - scoped id of the resource * @param props - resource properties */ constructor(scope, id, props) { super(scope, id, { type: CfnCloudBackupSnapshot.CFN_RESOURCE_TYPE_NAME, properties: toJson_CfnCloudBackupSnapshotProps(props), }); this.props = props; this.attrSnapshotId = cdk.Token.asString(this.getAtt("SnapshotId")); this.attrSnapshotIds = cdk.Token.asList(this.getAtt("SnapshotIds")); this.attrMasterKeyUUID = cdk.Token.asString(this.getAtt("MasterKeyUUID")); this.attrType = cdk.Token.asString(this.getAtt("Type")); this.attrExpiresAt = cdk.Token.asString(this.getAtt("ExpiresAt")); this.attrStorageSizeBytes = cdk.Token.asString(this.getAtt("StorageSizeBytes")); this.attrId = cdk.Token.asString(this.getAtt("Id")); this.attrCreatedAt = cdk.Token.asString(this.getAtt("CreatedAt")); this.attrCloudProvider = cdk.Token.asString(this.getAtt("CloudProvider")); this.attrMongodVersion = cdk.Token.asString(this.getAtt("MongodVersion")); this.attrReplicaSetName = cdk.Token.asString(this.getAtt("ReplicaSetName")); this.attrStatus = cdk.Token.asString(this.getAtt("Status")); } } exports.CfnCloudBackupSnapshot = CfnCloudBackupSnapshot; _a = JSII_RTTI_SYMBOL_1; CfnCloudBackupSnapshot[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnCloudBackupSnapshot", version: "3.13.1" }; /** * The CloudFormation resource type name for this resource class. */ CfnCloudBackupSnapshot.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::CloudBackupSnapshot"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL2Nsb3VkLWJhY2t1cC1zbmFwc2hvdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBd0hBLGdGQWdDQztBQTZERCw4SEFnQkM7QUE4R0Qsa0hBNkJDOztBQWhYRCwwQkFBMEI7QUFDMUIsbUNBQW1DO0FBbUhuQzs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQixrQ0FBa0MsQ0FDaEQsR0FBNEM7SUFFNUMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHO1FBQ2IsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1FBQ3BCLFlBQVksRUFBRSxHQUFHLENBQUMsWUFBWTtRQUM5QixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7UUFDOUIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1FBQzVCLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYTtRQUNoQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7UUFDeEIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO1FBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsWUFBWTtRQUM5QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUM5Qix5REFBeUQsQ0FBQyxDQUFDLENBQUMsQ0FDN0Q7UUFDRCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87UUFDcEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDOUIsbURBQW1ELENBQUMsQ0FB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QUFlLENBQUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7O0FBOUZILHdEQStGQzs7O0FBOUZDOztHQUVHO0FBQ29CLDZDQUFzQixHQUMzQyxxQ0FBcUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBjZGstaW1wb3J0XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8qKlxuICogUmV0dXJucywgdGFrZXMsIGFuZCByZW1vdmVzIENsb3VkIEJhY2t1cCBzbmFwc2hvdHMuXG4gKlxuICogQHNjaGVtYSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHMge1xuICAvKipcbiAgICogVGhlIHByb2ZpbGUgaXMgZGVmaW5lZCBpbiBBV1MgU2VjcmV0IG1hbmFnZXIuIFNlZSBbU2VjcmV0IE1hbmFnZXIgUHJvZmlsZSBzZXR1cF0oLi4vLi4vLi4vZXhhbXBsZXMvcHJvZmlsZS1zZWNyZXQueWFtbCkuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2xvdWRCYWNrdXBTbmFwc2hvdFByb3BzI1Byb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgaW5zdGFuY2Ugc3BlY2lmaWVkIG9uIHRoZSBJbnN0YW5jZSBOYW1lIHNlcnZlcmxlc3Mgb3IgY2x1c3RlclxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsb3VkQmFja3VwU25hcHNob3RQcm9wcyNJbnN0YW5jZVR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogQ2ZuQ2xvdWRCYWNrdXBTbmFwc2hvdFByb3BzSW5zdGFuY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UgbmFtZSBvZiB0aGUgU2VydmVybGVzcy9DbHVzdGVyIHdob3NlIHNuYXBzaG90IHlvdSB3YW50IHRvIHJlc3RvcmUgb3IgeW91IHdhbnQgdG8gcmV0cmlldmUgcmVzdG9yZSBzbmFwc2hvdC5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHMjSW5zdGFuY2VOYW1lXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgcGhyYXNlIG9yIHNlbnRlbmNlIHRoYXQgZXhwbGFpbnMgdGhlIHB1cnBvc2Ugb2YgdGhlIHNuYXBzaG90LiBUaGUgcmVzb3VyY2UgcmV0dXJucyB0aGlzIHBhcmFtZXRlciB3aGVuIGBcInN0YXR1c1wiOiBcIm9uRGVtYW5kXCJgLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsb3VkQmFja3VwU25hcHNob3RQcm9wcyNEZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyBob3cgb2Z0ZW4gdGhpcyBzbmFwc2hvdCB0cmlnZ2Vycy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHMjRnJlcXVlbmN5VHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgZnJlcXVlbmN5VHlwZT86IENmbkNsb3VkQmFja3VwU25hcHNob3RQcm9wc0ZyZXF1ZW5jeVR5cGU7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSAyNC1oZXhhZGVjaW1hbCBkaWdpdCBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHlvdXIgcHJvamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHMjUHJvamVjdElkXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSByZXNwb25zZSByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgKCoqdG90YWxDb3VudCoqKSBpbiB0aGUgcmVzcG9uc2UuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2xvdWRCYWNrdXBTbmFwc2hvdFByb3BzI0luY2x1ZGVDb3VudFxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZUNvdW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIGl0ZW1zIHRoYXQgdGhlIHJlc3BvbnNlIHJldHVybnMgcGVyIHBhZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2xvdWRCYWNrdXBTbmFwc2hvdFByb3BzI0l0ZW1zUGVyUGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXNQZXJQYWdlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBMaXN0IHRoYXQgaW5jbHVkZXMgdGhlIHNuYXBzaG90cyBhbmQgdGhlIGNsb3VkIHByb3ZpZGVyIHRoYXQgc3RvcmVzIHRoZSBzbmFwc2hvdHMuIFRoZSByZXNvdXJjZSByZXR1cm5zIHRoaXMgcGFyYW1ldGVyIHdoZW4gYFwidHlwZVwiIDogXCJTSEFSREVEX0NMVVNURVJcImAuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2xvdWRCYWNrdXBTbmFwc2hvdFByb3BzI01lbWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IG1lbWJlcnM/OiBBcGlBdGxhc0Rpc2tCYWNrdXBTaGFyZGVkQ2x1c3RlclNuYXBzaG90TWVtYmVyVmlld1tdO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgdGhlIHBhZ2UgdGhhdCBkaXNwbGF5cyB0aGUgY3VycmVudCBzZXQgb2YgdGhlIHRvdGFsIG9iamVjdHMgdGhhdCB0aGUgcmVzcG9uc2UgcmV0dXJucy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHMjUGFnZU51bVxuICAgKi9cbiAgcmVhZG9ubHkgcGFnZU51bT86IG51bWJlcjtcblxuICAvKipcbiAgICogTGlzdCB0aGF0IGNvbnRhaW5zIHVuaXF1ZSBpZGVudGlmaWVycyBmb3IgdGhlIHBvbGljeSBpdGVtcy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHMjUG9saWN5SXRlbXNcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeUl0ZW1zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcmV0dXJuZWQgZG9jdW1lbnRzIHRoYXQgTW9uZ29EQiBDbG91ZCBwcm92aWRlcyB3aGVuIGNvbXBsZXRpbmcgdGhpcyByZXF1ZXN0LlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsb3VkQmFja3VwU25hcHNob3RQcm9wcyNSZXN1bHRzXG4gICAqL1xuICByZWFkb25seSByZXN1bHRzPzogQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXdbXTtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIGRheXMgdGhhdCBNb25nb0RCIENsb3VkIHNob3VsZCByZXRhaW4gdGhlIG9uLWRlbWFuZCBzbmFwc2hvdC4gTXVzdCBiZSBhdCBsZWFzdCAqKjEqKlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsb3VkQmFja3VwU25hcHNob3RQcm9wcyNSZXRlbnRpb25JbkRheXNcbiAgICovXG4gIHJlYWRvbmx5IHJldGVudGlvbkluRGF5cz86IG51bWJlcjtcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHdoZW4gdGhpcyBzbmFwc2hvdCB0cmlnZ2Vycy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHMjU25hcHNob3RUeXBlXG4gICAqL1xuICByZWFkb25seSBzbmFwc2hvdFR5cGU/OiBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHNTbmFwc2hvdFR5cGU7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBkb2N1bWVudHMgcmV0dXJuZWQgaW4gdGhpcyByZXNwb25zZS5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHMjVG90YWxDb3VudFxuICAgKi9cbiAgcmVhZG9ubHkgdG90YWxDb3VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ2ZuQ2xvdWRCYWNrdXBTbmFwc2hvdFByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHMoXG4gIG9iajogQ2ZuQ2xvdWRCYWNrdXBTbmFwc2hvdFByb3BzIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgUHJvZmlsZTogb2JqLnByb2ZpbGUsXG4gICAgSW5zdGFuY2VUeXBlOiBvYmouaW5zdGFuY2VUeXBlLFxuICAgIEluc3RhbmNlTmFtZTogb2JqLmluc3RhbmNlTmFtZSxcbiAgICBEZXNjcmlwdGlvbjogb2JqLmRlc2NyaXB0aW9uLFxuICAgIEZyZXF1ZW5jeVR5cGU6IG9iai5mcmVxdWVuY3lUeXBlLFxuICAgIFByb2plY3RJZDogb2JqLnByb2plY3RJZCxcbiAgICBJbmNsdWRlQ291bnQ6IG9iai5pbmNsdWRlQ291bnQsXG4gICAgSXRlbXNQZXJQYWdlOiBvYmouaXRlbXNQZXJQYWdlLFxuICAgIE1lbWJlcnM6IG9iai5tZW1iZXJzPy5tYXAoKHkpID0+XG4gICAgICB0b0pzb25fQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdE1lbWJlclZpZXcoeSlcbiAgICApLFxuICAgIFBhZ2VOdW06IG9iai5wYWdlTnVtLFxuICAgIFBvbGljeUl0ZW1zOiBvYmoucG9saWN5SXRlbXM/Lm1hcCgoeSkgPT4geSksXG4gICAgUmVzdWx0czogb2JqLnJlc3VsdHM/Lm1hcCgoeSkgPT5cbiAgICAgIHRvSnNvbl9BcGlBdGxhc0Rpc2tCYWNrdXBTaGFyZGVkQ2x1c3RlclNuYXBzaG90Vmlldyh5KVxuICAgICksXG4gICAgUmV0ZW50aW9uSW5EYXlzOiBvYmoucmV0ZW50aW9uSW5EYXlzLFxuICAgIFNuYXBzaG90VHlwZTogb2JqLnNuYXBzaG90VHlwZSxcbiAgICBUb3RhbENvdW50OiBvYmoudG90YWxDb3VudCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVHlwZSBvZiBpbnN0YW5jZSBzcGVjaWZpZWQgb24gdGhlIEluc3RhbmNlIE5hbWUgc2VydmVybGVzcyBvciBjbHVzdGVyXG4gKlxuICogQHNjaGVtYSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHNJbnN0YW5jZVR5cGVcbiAqL1xuZXhwb3J0IGVudW0gQ2ZuQ2xvdWRCYWNrdXBTbmFwc2hvdFByb3BzSW5zdGFuY2VUeXBlIHtcbiAgLyoqIHNlcnZlcmxlc3MgKi9cbiAgU0VSVkVSTEVTUyA9IFwic2VydmVybGVzc1wiLFxuICAvKiogY2x1c3RlciAqL1xuICBDTFVTVEVSID0gXCJjbHVzdGVyXCIsXG59XG5cbi8qKlxuICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIGhvdyBvZnRlbiB0aGlzIHNuYXBzaG90IHRyaWdnZXJzLlxuICpcbiAqIEBzY2hlbWEgQ2ZuQ2xvdWRCYWNrdXBTbmFwc2hvdFByb3BzRnJlcXVlbmN5VHlwZVxuICovXG5leHBvcnQgZW51bSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHNGcmVxdWVuY3lUeXBlIHtcbiAgLyoqIGhvdXJseSAqL1xuICBIT1VSTFkgPSBcImhvdXJseVwiLFxuICAvKiogZGFpbHkgKi9cbiAgREFJTFkgPSBcImRhaWx5XCIsXG4gIC8qKiB3ZWVrbHkgKi9cbiAgV0VFS0xZID0gXCJ3ZWVrbHlcIixcbiAgLyoqIG1vbnRobHkgKi9cbiAgTU9OVEhMWSA9IFwibW9udGhseVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdE1lbWJlclZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlBdGxhc0Rpc2tCYWNrdXBTaGFyZGVkQ2x1c3RlclNuYXBzaG90TWVtYmVyVmlldyB7XG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIGNsb3VkIHByb3ZpZGVyIHRoYXQgc3RvcmVzIHRoaXMgc25hcHNob3QuIFRoZSByZXNvdXJjZSByZXR1cm5zIHRoaXMgcGFyYW1ldGVyIHdoZW4gYFwidHlwZVwiOiBcInJlcGxpY2FTZXRcIi5gXG4gICAqXG4gICAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdE1lbWJlclZpZXcjQ2xvdWRQcm92aWRlclxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRQcm92aWRlcj86IEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RNZW1iZXJWaWV3Q2xvdWRQcm92aWRlcjtcblxuICAvKipcbiAgICogVW5pcXVlIDI0LWhleGFkZWNpbWFsIGRpZ2l0IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIHNuYXBzaG90LlxuICAgKlxuICAgKiBAc2NoZW1hIEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RNZW1iZXJWaWV3I0lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBzaGFyZCBvciBjb25maWcgaG9zdCBmcm9tIHdoaWNoIE1vbmdvREIgQ2xvdWQgdG9vayB0aGlzIHNuYXBzaG90LlxuICAgKlxuICAgKiBAc2NoZW1hIEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RNZW1iZXJWaWV3I1JlcGxpY2FTZXROYW1lXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhU2V0TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdE1lbWJlclZpZXcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0FwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RNZW1iZXJWaWV3KFxuICBvYmo6IEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RNZW1iZXJWaWV3IHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgQ2xvdWRQcm92aWRlcjogb2JqLmNsb3VkUHJvdmlkZXIsXG4gICAgSWQ6IG9iai5pZCxcbiAgICBSZXBsaWNhU2V0TmFtZTogb2JqLnJlcGxpY2FTZXROYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RWaWV3XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXcge1xuICAvKipcbiAgICogRGF0ZSBhbmQgdGltZSB3aGVuIE1vbmdvREIgQ2xvdWQgdG9vayB0aGUgc25hcHNob3QuIFRoaXMgcGFyYW1ldGVyIGV4cHJlc3NlcyBpdHMgdmFsdWUgaW4gdGhlIElTTyA4NjAxIHRpbWVzdGFtcCBmb3JtYXQgaW4gVVRDLlxuICAgKlxuICAgKiBAc2NoZW1hIEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RWaWV3I0NyZWF0ZWRBdFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBwaHJhc2Ugb3Igc2VudGVuY2UgdGhhdCBleHBsYWlucyB0aGUgcHVycG9zZSBvZiB0aGUgc25hcHNob3QuIFRoZSByZXNvdXJjZSByZXR1cm5zIHRoaXMgcGFyYW1ldGVyIHdoZW4gYFwic3RhdHVzXCI6IFwib25EZW1hbmRcImAuXG4gICAqXG4gICAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXcjRGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEYXRlIGFuZCB0aW1lIHdoZW4gTW9uZ29EQiBDbG91ZCBkZWxldGVzIHRoZSBzbmFwc2hvdC4gVGhpcyBwYXJhbWV0ZXIgZXhwcmVzc2VzIGl0cyB2YWx1ZSBpbiB0aGUgSVNPIDg2MDEgdGltZXN0YW1wIGZvcm1hdCBpbiBVVEMuXG4gICAqXG4gICAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXcjRXhwaXJlc0F0XG4gICAqL1xuICByZWFkb25seSBleHBpcmVzQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyBob3cgb2Z0ZW4gdGhpcyBzbmFwc2hvdCB0cmlnZ2Vycy5cbiAgICpcbiAgICogQHNjaGVtYSBBcGlBdGxhc0Rpc2tCYWNrdXBTaGFyZGVkQ2x1c3RlclNuYXBzaG90VmlldyNGcmVxdWVuY3lUeXBlXG4gICAqL1xuICByZWFkb25seSBmcmVxdWVuY3lUeXBlPzogQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXdGcmVxdWVuY3lUeXBlO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgMjQtaGV4YWRlY2ltYWwgZGlnaXQgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgc25hcHNob3QuXG4gICAqXG4gICAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXcjSWRcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgQW1hem9uIFdlYiBTZXJ2aWNlcyAoQVdTKSBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpIEN1c3RvbWVyIE1hc3RlciBLZXkgKENNSykgdXNlZCB0byBlbmNyeXB0IHRoZSBzbmFwc2hvdC4gVGhlIHJlc291cmNlIHJldHVybnMgdGhpcyB2YWx1ZSB3aGVuIGBcImVuY3J5cHRpb25FbmFibGVkXCIgOiB0cnVlYC5cbiAgICpcbiAgICogQHNjaGVtYSBBcGlBdGxhc0Rpc2tCYWNrdXBTaGFyZGVkQ2x1c3RlclNuYXBzaG90VmlldyNNYXN0ZXJLZXlVVUlEXG4gICAqL1xuICByZWFkb25seSBtYXN0ZXJLZXlVdWlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IHRoYXQgaW5jbHVkZXMgdGhlIHNuYXBzaG90cyBhbmQgdGhlIGNsb3VkIHByb3ZpZGVyIHRoYXQgc3RvcmVzIHRoZSBzbmFwc2hvdHMuIFRoZSByZXNvdXJjZSByZXR1cm5zIHRoaXMgcGFyYW1ldGVyIHdoZW4gYFwidHlwZVwiIDogXCJTSEFSREVEX0NMVVNURVJcImAuXG4gICAqXG4gICAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXcjTWVtYmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVycz86IEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RNZW1iZXJWaWV3W107XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIE1vbmdvREIgaG9zdCB0aGF0IHRoaXMgc25hcHNob3QgYmFja3MgdXAuXG4gICAqXG4gICAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXcjTW9uZ29kVmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgbW9uZ29kVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCB0aGF0IGNvbnRhaW5zIHVuaXF1ZSBpZGVudGlmaWVycyBmb3IgdGhlIHBvbGljeSBpdGVtcy5cbiAgICpcbiAgICogQHNjaGVtYSBBcGlBdGxhc0Rpc2tCYWNrdXBTaGFyZGVkQ2x1c3RlclNuYXBzaG90VmlldyNQb2xpY3lJdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5SXRlbXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCB0aGF0IGNvbnRhaW5zIHRoZSB1bmlxdWUgaWRlbnRpZmllcnMgb2YgdGhlIHNuYXBzaG90cyBjcmVhdGVkIGZvciB0aGUgc2hhcmRzIGFuZCBjb25maWcgaG9zdCBmb3IgYSBzaGFyZGVkIGNsdXN0ZXIuIFRoZSByZXNvdXJjZSByZXR1cm5zIHRoaXMgcGFyYW1ldGVyIHdoZW4gYFwidHlwZVwiOiBcIlNIQVJERURfQ0xVU1RFUlwiYC4gVGhlc2UgaWRlbnRpZmllcnMgc2hvdWxkIG1hdGNoIHRoZSBvbmVzIHNwZWNpZmllZCBpbiB0aGUgKiptZW1iZXJzW25dLmlkKiogcGFyYW1ldGVycy4gVGhpcyBhbGxvd3MgeW91IHRvIG1hcCBhIHNuYXBzaG90IHRvIGl0cyBzaGFyZCBvciBjb25maWcgaG9zdCBuYW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RWaWV3I1NuYXBzaG90SWRzXG4gICAqL1xuICByZWFkb25seSBzbmFwc2hvdElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgd2hlbiB0aGlzIHNuYXBzaG90IHRyaWdnZXJzLlxuICAgKlxuICAgKiBAc2NoZW1hIEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RWaWV3I1NuYXBzaG90VHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgc25hcHNob3RUeXBlPzogQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXdTbmFwc2hvdFR5cGU7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaW5kaWNhdGVzIHRoZSBzdGFnZSBvZiB0aGUgYmFja3VwIHByb2Nlc3MgZm9yIHRoaXMgc25hcHNob3QuXG4gICAqXG4gICAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXcjU3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBBcGlBdGxhc0Rpc2tCYWNrdXBTaGFyZGVkQ2x1c3RlclNuYXBzaG90Vmlld1N0YXR1cztcblxuICAvKipcbiAgICogTnVtYmVyIG9mIGJ5dGVzIHRha2VuIHRvIHN0b3JlIHRoZSBiYWNrdXAgc25hcHNob3QuXG4gICAqXG4gICAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXcjU3RvcmFnZVNpemVCeXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZVNpemVCeXRlcz86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBjYXRlZ29yaXplcyB0aGUgY2x1c3RlciBhcyBhIHJlcGxpY2Egc2V0IG9yIHNoYXJkZWQgY2x1c3Rlci5cbiAgICpcbiAgICogQHNjaGVtYSBBcGlBdGxhc0Rpc2tCYWNrdXBTaGFyZGVkQ2x1c3RlclNuYXBzaG90VmlldyNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXdUeXBlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdBcGlBdGxhc0Rpc2tCYWNrdXBTaGFyZGVkQ2x1c3RlclNuYXBzaG90VmlldycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXcoXG4gIG9iajogQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXcgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBDcmVhdGVkQXQ6IG9iai5jcmVhdGVkQXQsXG4gICAgRGVzY3JpcHRpb246IG9iai5kZXNjcmlwdGlvbixcbiAgICBFeHBpcmVzQXQ6IG9iai5leHBpcmVzQXQsXG4gICAgRnJlcXVlbmN5VHlwZTogb2JqLmZyZXF1ZW5jeVR5cGUsXG4gICAgSWQ6IG9iai5pZCxcbiAgICBNYXN0ZXJLZXlVVUlEOiBvYmoubWFzdGVyS2V5VXVpZCxcbiAgICBNZW1iZXJzOiBvYmoubWVtYmVycz8ubWFwKCh5KSA9PlxuICAgICAgdG9Kc29uX0FwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RNZW1iZXJWaWV3KHkpXG4gICAgKSxcbiAgICBNb25nb2RWZXJzaW9uOiBvYmoubW9uZ29kVmVyc2lvbixcbiAgICBQb2xpY3lJdGVtczogb2JqLnBvbGljeUl0ZW1zPy5tYXAoKHkpID0+IHkpLFxuICAgIFNuYXBzaG90SWRzOiBvYmouc25hcHNob3RJZHM/Lm1hcCgoeSkgPT4geSksXG4gICAgU25hcHNob3RUeXBlOiBvYmouc25hcHNob3RUeXBlLFxuICAgIFN0YXR1czogb2JqLnN0YXR1cyxcbiAgICBTdG9yYWdlU2l6ZUJ5dGVzOiBvYmouc3RvcmFnZVNpemVCeXRlcyxcbiAgICBUeXBlOiBvYmoudHlwZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHdoZW4gdGhpcyBzbmFwc2hvdCB0cmlnZ2Vycy5cbiAqXG4gKiBAc2NoZW1hIENmbkNsb3VkQmFja3VwU25hcHNob3RQcm9wc1NuYXBzaG90VHlwZVxuICovXG5leHBvcnQgZW51bSBDZm5DbG91ZEJhY2t1cFNuYXBzaG90UHJvcHNTbmFwc2hvdFR5cGUge1xuICAvKiogb25EZW1hbmQgKi9cbiAgT05fREVNQU5EID0gXCJvbkRlbWFuZFwiLFxuICAvKiogc2NoZWR1bGVkICovXG4gIFNDSEVEVUxFRCA9IFwic2NoZWR1bGVkXCIsXG59XG5cbi8qKlxuICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBjbG91ZCBwcm92aWRlciB0aGF0IHN0b3JlcyB0aGlzIHNuYXBzaG90LiBUaGUgcmVzb3VyY2UgcmV0dXJucyB0aGlzIHBhcmFtZXRlciB3aGVuIGBcInR5cGVcIjogXCJyZXBsaWNhU2V0XCIuYFxuICpcbiAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdE1lbWJlclZpZXdDbG91ZFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBlbnVtIEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RNZW1iZXJWaWV3Q2xvdWRQcm92aWRlciB7XG4gIC8qKiBBV1MgKi9cbiAgQVdTID0gXCJBV1NcIixcbiAgLyoqIEFaVVJFICovXG4gIEFaVVJFID0gXCJBWlVSRVwiLFxuICAvKiogR0NQICovXG4gIEdDUCA9IFwiR0NQXCIsXG59XG5cbi8qKlxuICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIGhvdyBvZnRlbiB0aGlzIHNuYXBzaG90IHRyaWdnZXJzLlxuICpcbiAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXdGcmVxdWVuY3lUeXBlXG4gKi9cbmV4cG9ydCBlbnVtIEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RWaWV3RnJlcXVlbmN5VHlwZSB7XG4gIC8qKiBob3VybHkgKi9cbiAgSE9VUkxZID0gXCJob3VybHlcIixcbiAgLyoqIGRhaWx5ICovXG4gIERBSUxZID0gXCJkYWlseVwiLFxuICAvKiogd2Vla2x5ICovXG4gIFdFRUtMWSA9IFwid2Vla2x5XCIsXG4gIC8qKiBtb250aGx5ICovXG4gIE1PTlRITFkgPSBcIm1vbnRobHlcIixcbn1cblxuLyoqXG4gKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgd2hlbiB0aGlzIHNuYXBzaG90IHRyaWdnZXJzLlxuICpcbiAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXdTbmFwc2hvdFR5cGVcbiAqL1xuZXhwb3J0IGVudW0gQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXdTbmFwc2hvdFR5cGUge1xuICAvKiogb25EZW1hbmQgKi9cbiAgT05fREVNQU5EID0gXCJvbkRlbWFuZFwiLFxuICAvKiogc2NoZWR1bGVkICovXG4gIFNDSEVEVUxFRCA9IFwic2NoZWR1bGVkXCIsXG59XG5cbi8qKlxuICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpbmRpY2F0ZXMgdGhlIHN0YWdlIG9mIHRoZSBiYWNrdXAgcHJvY2VzcyBmb3IgdGhpcyBzbmFwc2hvdC5cbiAqXG4gKiBAc2NoZW1hIEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RWaWV3U3RhdHVzXG4gKi9cbmV4cG9ydCBlbnVtIEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RWaWV3U3RhdHVzIHtcbiAgLyoqIHF1ZXVlZCAqL1xuICBRVUVVRUQgPSBcInF1ZXVlZFwiLFxuICAvKiogaW5Qcm9ncmVzcyAqL1xuICBJTl9QUk9HUkVTUyA9IFwiaW5Qcm9ncmVzc1wiLFxuICAvKiogY29tcGxldGVkICovXG4gIENPTVBMRVRFRCA9IFwiY29tcGxldGVkXCIsXG4gIC8qKiBmYWlsZWQgKi9cbiAgRkFJTEVEID0gXCJmYWlsZWRcIixcbn1cblxuLyoqXG4gKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGNhdGVnb3JpemVzIHRoZSBjbHVzdGVyIGFzIGEgcmVwbGljYSBzZXQgb3Igc2hhcmRlZCBjbHVzdGVyLlxuICpcbiAqIEBzY2hlbWEgQXBpQXRsYXNEaXNrQmFja3VwU2hhcmRlZENsdXN0ZXJTbmFwc2hvdFZpZXdUeXBlXG4gKi9cbmV4cG9ydCBlbnVtIEFwaUF0bGFzRGlza0JhY2t1cFNoYXJkZWRDbHVzdGVyU25hcHNob3RWaWV3VHlwZSB7XG4gIC8qKiBSRVBMSUNBX1NFVCAqL1xuICBSRVBMSUNBX1NFVCA9IFwiUkVQTElDQV9TRVRcIixcbiAgLyoqIFNIQVJERURfQ0xVU1RFUiAqL1xuICBTSEFSREVEX0NMVVNURVIgPSBcIlNIQVJERURfQ0xVU1RFUlwiLFxufVxuXG4vKipcbiAqIEEgQ2xvdWRGb3JtYXRpb24gYE1vbmdvREI6OkF0bGFzOjpDbG91ZEJhY2t1cFNuYXBzaG90YFxuICpcbiAqIEBjbG91ZGZvcm1hdGlvblJlc291cmNlIE1vbmdvREI6OkF0bGFzOjpDbG91ZEJhY2t1cFNuYXBzaG90XG4gKiBAc3RhYmlsaXR5IGV4dGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDZm5DbG91ZEJhY2t1cFNuYXBzaG90IGV4dGVuZHMgY2RrLkNmblJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSB0eXBlIG5hbWUgZm9yIHRoaXMgcmVzb3VyY2UgY2xhc3MuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENGTl9SRVNPVVJDRV9UWVBFX05BTUUgPVxuICAgIFwiTW9uZ29EQjo6QXRsYXM6OkNsb3VkQmFja3VwU25hcHNob3RcIjtcblxuICAvKipcbiAgICogUmVzb3VyY2UgcHJvcHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IENmbkNsb3VkQmFja3VwU25hcHNob3RQcm9wcztcblxuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6Q2xvdWRCYWNrdXBTbmFwc2hvdC5TbmFwc2hvdElkYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJTbmFwc2hvdElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpDbG91ZEJhY2t1cFNuYXBzaG90LlNuYXBzaG90SWRzYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJTbmFwc2hvdElkczogc3RyaW5nW107XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpDbG91ZEJhY2t1cFNuYXBzaG90Lk1hc3RlcktleVVVSURgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXR0ck1hc3RlcktleVVVSUQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEF0dHJpYnV0ZSBgTW9uZ29EQjo6QXRsYXM6OkNsb3VkQmFja3VwU25hcHNob3QuVHlwZWBcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdHRyVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6Q2xvdWRCYWNrdXBTbmFwc2hvdC5FeHBpcmVzQXRgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXR0ckV4cGlyZXNBdDogc3RyaW5nO1xuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6Q2xvdWRCYWNrdXBTbmFwc2hvdC5TdG9yYWdlU2l6ZUJ5dGVzYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJTdG9yYWdlU2l6ZUJ5dGVzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpDbG91ZEJhY2t1cFNuYXBzaG90LklkYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJJZDogc3RyaW5nO1xuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6Q2xvdWRCYWNrdXBTbmFwc2hvdC5DcmVhdGVkQXRgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXR0ckNyZWF0ZWRBdDogc3RyaW5nO1xuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6Q2xvdWRCYWNrdXBTbmFwc2hvdC5DbG91ZFByb3ZpZGVyYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJDbG91ZFByb3ZpZGVyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpDbG91ZEJhY2t1cFNuYXBzaG90Lk1vbmdvZFZlcnNpb25gXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXR0ck1vbmdvZFZlcnNpb246IHN0cmluZztcbiAgLyoqXG4gICAqIEF0dHJpYnV0ZSBgTW9uZ29EQjo6QXRsYXM6OkNsb3VkQmFja3VwU25hcHNob3QuUmVwbGljYVNldE5hbWVgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXR0clJlcGxpY2FTZXROYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpDbG91ZEJhY2t1cFNuYXBzaG90LlN0YXR1c2BcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdHRyU3RhdHVzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBgTW9uZ29EQjo6QXRsYXM6OkNsb3VkQmFja3VwU25hcHNob3RgLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBpbiB3aGljaCB0aGlzIHJlc291cmNlIGlzIGRlZmluZWRcbiAgICogQHBhcmFtIGlkICAgIC0gc2NvcGVkIGlkIG9mIHRoZSByZXNvdXJjZVxuICAgKiBAcGFyYW0gcHJvcHMgLSByZXNvdXJjZSBwcm9wZXJ0aWVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQ2ZuQ2xvdWRCYWNrdXBTbmFwc2hvdFByb3BzXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgdHlwZTogQ2ZuQ2xvdWRCYWNrdXBTbmFwc2hvdC5DRk5fUkVTT1VSQ0VfVFlQRV9OQU1FLFxuICAgICAgcHJvcGVydGllczogdG9Kc29uX0NmbkNsb3VkQmFja3VwU25hcHNob3RQcm9wcyhwcm9wcykhLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5hdHRyU25hcHNob3RJZCA9IGNkay5Ub2tlbi5hc1N0cmluZyh0aGlzLmdldEF0dChcIlNuYXBzaG90SWRcIikpO1xuICAgIHRoaXMuYXR0clNuYXBzaG90SWRzID0gY2RrLlRva2VuLmFzTGlzdCh0aGlzLmdldEF0dChcIlNuYXBzaG90SWRzXCIpKTtcbiAgICB0aGlzLmF0dHJNYXN0ZXJLZXlVVUlEID0gY2RrLlRva2VuLmFzU3RyaW5nKHRoaXMuZ2V0QXR0KFwiTWFzdGVyS2V5VVVJRFwiKSk7XG4gICAgdGhpcy5hdHRyVHlwZSA9IGNkay5Ub2tlbi5hc1N0cmluZyh0aGlzLmdldEF0dChcIlR5cGVcIikpO1xuICAgIHRoaXMuYXR0ckV4cGlyZXNBdCA9IGNkay5Ub2tlbi5hc1N0cmluZyh0aGlzLmdldEF0dChcIkV4cGlyZXNBdFwiKSk7XG4gICAgdGhpcy5hdHRyU3RvcmFnZVNpemVCeXRlcyA9IGNkay5Ub2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMuZ2V0QXR0KFwiU3RvcmFnZVNpemVCeXRlc1wiKVxuICAgICk7XG4gICAgdGhpcy5hdHRySWQgPSBjZGsuVG9rZW4uYXNTdHJpbmcodGhpcy5nZXRBdHQoXCJJZFwiKSk7XG4gICAgdGhpcy5hdHRyQ3JlYXRlZEF0ID0gY2RrLlRva2VuLmFzU3RyaW5nKHRoaXMuZ2V0QXR0KFwiQ3JlYXRlZEF0XCIpKTtcbiAgICB0aGlzLmF0dHJDbG91ZFByb3ZpZGVyID0gY2RrLlRva2VuLmFzU3RyaW5nKHRoaXMuZ2V0QXR0KFwiQ2xvdWRQcm92aWRlclwiKSk7XG4gICAgdGhpcy5hdHRyTW9uZ29kVmVyc2lvbiA9IGNkay5Ub2tlbi5hc1N0cmluZyh0aGlzLmdldEF0dChcIk1vbmdvZFZlcnNpb25cIikpO1xuICAgIHRoaXMuYXR0clJlcGxpY2FTZXROYW1lID0gY2RrLlRva2VuLmFzU3RyaW5nKHRoaXMuZ2V0QXR0KFwiUmVwbGljYVNldE5hbWVcIikpO1xuICAgIHRoaXMuYXR0clN0YXR1cyA9IGNkay5Ub2tlbi5hc1N0cmluZyh0aGlzLmdldEF0dChcIlN0YXR1c1wiKSk7XG4gIH1cbn1cbiJdfQ==