Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@aws-cdk/aws-ec2

Package Overview
Dependencies
Maintainers
4
Versions
288
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-cdk/aws-ec2 - npm Package Compare versions

Comparing version 0.14.1 to 0.15.0

test/example.images.lit.d.ts

26

lib/connections.d.ts

@@ -35,7 +35,7 @@ import { SecurityGroupRef } from "./security-group";

/**
* What securityGroup this object is managing connections for
* What securityGroup(s) this object is managing connections for
*
* @default No security
* @default No security groups
*/
securityGroup?: SecurityGroupRef;
securityGroups?: SecurityGroupRef[];
/**

@@ -57,5 +57,11 @@ * Default port range for initiating connections to and from this object

*
* This object can manage one or more security groups.
*/
export declare class Connections {
export declare class Connections implements IConnectable {
readonly connections: Connections;
/**
* The default port configured for this connection peer, if available
*/
readonly defaultPortRange?: IPortRange;
/**
* Underlying securityGroup for this Connections object, if present

@@ -66,12 +72,14 @@ *

*/
readonly securityGroup?: SecurityGroupRef;
private readonly _securityGroups;
/**
* The rule that defines how to represent this peer in a security group
*/
readonly securityGroupRule: ISecurityGroupRule;
private readonly _securityGroupRules;
private skip;
constructor(props?: ConnectionsProps);
readonly securityGroups: SecurityGroupRef[];
/**
* The default port configured for this connection peer, if available
* Add a security group to the list of security groups managed by this object
*/
readonly defaultPortRange?: IPortRange;
constructor(props: ConnectionsProps);
addSecurityGroup(...securityGroups: SecurityGroupRef[]): void;
/**

@@ -78,0 +86,0 @@ * Allow connections to the peer on the given port

@@ -13,22 +13,53 @@ "use strict";

*
* This object can manage one or more security groups.
*/
class Connections {
constructor(props) {
if (!props.securityGroupRule && !props.securityGroup) {
throw new Error('Connections: require one of securityGroupRule or securityGroup');
constructor(props = {}) {
/**
* Underlying securityGroup for this Connections object, if present
*
* May be empty if this Connections object is not managing a SecurityGroup,
* but simply representing a Connectable peer.
*/
this._securityGroups = new ReactiveList();
/**
* The rule that defines how to represent this peer in a security group
*/
this._securityGroupRules = new ReactiveList();
this.skip = false;
this.connections = this;
this._securityGroups.push(...(props.securityGroups || []));
this._securityGroupRules.push(...this._securityGroups.asArray());
if (props.securityGroupRule) {
this._securityGroupRules.push(props.securityGroupRule);
}
this.securityGroupRule = props.securityGroupRule || props.securityGroup;
this.securityGroup = props.securityGroup;
this.defaultPortRange = props.defaultPortRange;
}
get securityGroups() {
return this._securityGroups.asArray();
}
/**
* Add a security group to the list of security groups managed by this object
*/
addSecurityGroup(...securityGroups) {
for (const securityGroup of securityGroups) {
this._securityGroups.push(securityGroup);
this._securityGroupRules.push(securityGroup);
}
}
/**
* Allow connections to the peer on the given port
*/
allowTo(other, portRange, description) {
if (this.securityGroup) {
this.securityGroup.addEgressRule(other.connections.securityGroupRule, portRange, description);
if (this.skip) {
return;
}
if (other.connections.securityGroup) {
other.connections.securityGroup.addIngressRule(this.securityGroupRule, portRange, description);
}
this._securityGroups.forEachAndForever(securityGroup => {
other.connections._securityGroupRules.forEachAndForever(rule => {
securityGroup.addEgressRule(rule, portRange, description);
});
});
this.skip = true;
other.connections.allowFrom(this, portRange, description);
this.skip = false;
}

@@ -39,8 +70,13 @@ /**

allowFrom(other, portRange, description) {
if (this.securityGroup) {
this.securityGroup.addIngressRule(other.connections.securityGroupRule, portRange, description);
if (this.skip) {
return;
}
if (other.connections.securityGroup) {
other.connections.securityGroup.addEgressRule(this.securityGroupRule, portRange, description);
}
this._securityGroups.forEachAndForever(securityGroup => {
other.connections._securityGroupRules.forEachAndForever(rule => {
securityGroup.addIngressRule(rule, portRange, description);
});
});
this.skip = true;
other.connections.allowTo(this, portRange, description);
this.skip = false;
}

@@ -51,5 +87,9 @@ /**

allowInternally(portRange, description) {
if (this.securityGroup) {
this.securityGroup.addIngressRule(this.securityGroupRule, portRange, description);
}
this._securityGroups.forEachAndForever(securityGroup => {
this._securityGroupRules.forEachAndForever(rule => {
securityGroup.addIngressRule(rule, portRange, description);
// FIXME: this seems required but we didn't use to have it. Research.
// securityGroup.addEgressRule(rule, portRange, description);
});
});
}

@@ -119,2 +159,28 @@ /**

exports.Connections = Connections;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25uZWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLCtEQUFnRjtBQW1EaEY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxXQUFXO0lBbUJ0QixZQUFZLEtBQXVCO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQ3BELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztTQUNuRjtRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLElBQUksS0FBSyxDQUFDLGFBQWMsQ0FBQztRQUN6RSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPLENBQUMsS0FBbUIsRUFBRSxTQUFxQixFQUFFLFdBQW9CO1FBQzdFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUMvRjtRQUNELElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDbkMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FFaEc7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUMsS0FBbUIsRUFBRSxTQUFxQixFQUFFLFdBQW9CO1FBQy9FLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNoRztRQUNELElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDbkMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDL0Y7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlLENBQUMsU0FBcUIsRUFBRSxXQUFvQjtRQUNoRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNuRjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWMsQ0FBQyxTQUFxQixFQUFFLFdBQW9CO1FBQy9ELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSw2QkFBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQixDQUFDLFNBQXFCLEVBQUUsV0FBb0I7UUFDakUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLDZCQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxvQkFBb0IsQ0FBQyxLQUFtQixFQUFFLFdBQW9CO1FBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO1NBQzFGO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNJLDBCQUEwQixDQUFDLFdBQW9CO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO1NBQ2hHO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksMkJBQTJCLENBQUMsV0FBb0I7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7U0FDakc7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFrQixDQUFDLEtBQW1CLEVBQUUsV0FBb0I7UUFDakUsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtZQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7U0FDeEY7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksa0JBQWtCLENBQUMsS0FBbUIsRUFBRSxXQUFvQjtRQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztTQUN4RjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0Y7QUFuSUQsa0NBbUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VjdXJpdHlHcm91cFJlZiB9IGZyb20gXCIuL3NlY3VyaXR5LWdyb3VwXCI7XG5pbXBvcnQgeyBBbnlJUHY0LCBJUG9ydFJhbmdlLCBJU2VjdXJpdHlHcm91cFJ1bGUgfSBmcm9tIFwiLi9zZWN1cml0eS1ncm91cC1ydWxlXCI7XG5cbi8qKlxuICogVGhlIGdvYWwgb2YgdGhpcyBtb2R1bGUgaXMgdG8gbWFrZSBwb3NzaWJsZSB0byB3cml0ZSBzdGF0ZW1lbnRzIGxpa2UgdGhpczpcbiAqXG4gKiAgYGBgdHNcbiAqICBkYXRhYmFzZS5jb25uZWN0aW9ucy5hbGxvd0Zyb20oZmxlZXQpO1xuICogIGZsZWV0LmNvbm5lY3Rpb25zLmFsbG93VG8oZGF0YWJhc2UpO1xuICogIHJkZ3cuY29ubmVjdGlvbnMuYWxsb3dGcm9tQ2lkcklwKCcwLjMuMS41Lzg2Jyk7XG4gKiAgcmdkdy5jb25uZWN0aW9ucy5hbGxvd1RyYWZmaWNUbyhmbGVldCwgbmV3IEFsbFBvcnRzKCkpO1xuICogIGBgYFxuICpcbiAqIFRoZSBpbnNpZ2h0IGhlcmUgaXMgdGhhdCBzb21lIGNvbm5lY3RpbmcgcGVlcnMgaGF2ZSBpbmZvcm1hdGlvbiBvbiB3aGF0IHBvcnRzIHNob3VsZFxuICogYmUgaW52b2x2ZWQgaW4gdGhlIGNvbm5lY3Rpb24sIGFuZCBzb21lIGRvbid0LlxuICovXG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgaGFzIGEgQ29ubmVjdGlvbnMgb2JqZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbm5lY3RhYmxlIHtcbiAgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gaW50aWFsaXplIGEgbmV3IENvbm5lY3Rpb25zIG9iamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25zUHJvcHMge1xuICAvKipcbiAgICogQ2xhc3MgdGhhdCByZXByZXNlbnRzIHRoZSBydWxlIGJ5IHdoaWNoIG90aGVycyBjYW4gY29ubmVjdCB0byB0aGlzIGNvbm5lY3RhYmxlXG4gICAqXG4gICAqIFRoaXMgb2JqZWN0IGlzIHJlcXVpcmVkLCBidXQgd2lsbCBiZSBkZXJpdmVkIGZyb20gc2VjdXJpdHlHcm91cCBpZiB0aGF0IGlzIHBhc3NlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgRGVyaXZlZCBmcm9tIHNlY3VyaXR5R3JvdXAgaWYgc2V0LlxuICAgKi9cbiAgc2VjdXJpdHlHcm91cFJ1bGU/OiBJU2VjdXJpdHlHcm91cFJ1bGU7XG5cbiAgLyoqXG4gICAqIFdoYXQgc2VjdXJpdHlHcm91cCB0aGlzIG9iamVjdCBpcyBtYW5hZ2luZyBjb25uZWN0aW9ucyBmb3JcbiAgICpcbiAgICogQGRlZmF1bHQgTm8gc2VjdXJpdHlcbiAgICovXG4gIHNlY3VyaXR5R3JvdXA/OiBTZWN1cml0eUdyb3VwUmVmO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHBvcnQgcmFuZ2UgZm9yIGluaXRpYXRpbmcgY29ubmVjdGlvbnMgdG8gYW5kIGZyb20gdGhpcyBvYmplY3RcbiAgICpcbiAgICogQGRlZmF1bHQgTm8gZGVmYXVsdCBwb3J0IHJhbmdlXG4gICAqL1xuICBkZWZhdWx0UG9ydFJhbmdlPzogSVBvcnRSYW5nZTtcbn1cblxuLyoqXG4gKiBNYW5hZ2UgdGhlIGFsbG93ZWQgbmV0d29yayBjb25uZWN0aW9ucyBmb3IgY29uc3RydWN0cyB3aXRoIFNlY3VyaXR5IEdyb3Vwcy5cbiAqXG4gKiBTZWN1cml0eSBHcm91cHMgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSBmaXJld2FsbCBmb3IgbmV0d29yay1jb25uZWN0ZWRcbiAqIGRldmljZXMuIFRoaXMgY2xhc3MgbWFrZXMgaXQgZWFzeSB0byBhbGxvdyBuZXR3b3JrIGNvbm5lY3Rpb25zIHRvIGFuZFxuICogZnJvbSBzZWN1cml0eSBncm91cHMsIGFuZCBiZXR3ZWVuIHNlY3VyaXR5IGdyb3VwcyBpbmRpdmlkdWFsbHkuIFdoZW5cbiAqIGVzdGFibGlzaGluZyBjb25uZWN0aXZpdHkgYmV0d2VlbiBzZWN1cml0eSBncm91cHMsIGl0IHdpbGwgYXV0b21hdGljYWxseVxuICogYWRkIHJ1bGVzIGluIGJvdGggc2VjdXJpdHkgZ3JvdXBzXG4gKlxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbnMge1xuICAvKipcbiAgICogVW5kZXJseWluZyBzZWN1cml0eUdyb3VwIGZvciB0aGlzIENvbm5lY3Rpb25zIG9iamVjdCwgaWYgcHJlc2VudFxuICAgKlxuICAgKiBNYXkgYmUgZW1wdHkgaWYgdGhpcyBDb25uZWN0aW9ucyBvYmplY3QgaXMgbm90IG1hbmFnaW5nIGEgU2VjdXJpdHlHcm91cCxcbiAgICogYnV0IHNpbXBseSByZXByZXNlbnRpbmcgYSBDb25uZWN0YWJsZSBwZWVyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBTZWN1cml0eUdyb3VwUmVmO1xuXG4gIC8qKlxuICAgKiBUaGUgcnVsZSB0aGF0IGRlZmluZXMgaG93IHRvIHJlcHJlc2VudCB0aGlzIHBlZXIgaW4gYSBzZWN1cml0eSBncm91cFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBSdWxlOiBJU2VjdXJpdHlHcm91cFJ1bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHBvcnQgY29uZmlndXJlZCBmb3IgdGhpcyBjb25uZWN0aW9uIHBlZXIsIGlmIGF2YWlsYWJsZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRQb3J0UmFuZ2U/OiBJUG9ydFJhbmdlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDb25uZWN0aW9uc1Byb3BzKSB7XG4gICAgaWYgKCFwcm9wcy5zZWN1cml0eUdyb3VwUnVsZSAmJiAhcHJvcHMuc2VjdXJpdHlHcm91cCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25uZWN0aW9uczogcmVxdWlyZSBvbmUgb2Ygc2VjdXJpdHlHcm91cFJ1bGUgb3Igc2VjdXJpdHlHcm91cCcpO1xuICAgIH1cblxuICAgIHRoaXMuc2VjdXJpdHlHcm91cFJ1bGUgPSBwcm9wcy5zZWN1cml0eUdyb3VwUnVsZSB8fCBwcm9wcy5zZWN1cml0eUdyb3VwITtcbiAgICB0aGlzLnNlY3VyaXR5R3JvdXAgPSBwcm9wcy5zZWN1cml0eUdyb3VwO1xuICAgIHRoaXMuZGVmYXVsdFBvcnRSYW5nZSA9IHByb3BzLmRlZmF1bHRQb3J0UmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgY29ubmVjdGlvbnMgdG8gdGhlIHBlZXIgb24gdGhlIGdpdmVuIHBvcnRcbiAgICovXG4gIHB1YmxpYyBhbGxvd1RvKG90aGVyOiBJQ29ubmVjdGFibGUsIHBvcnRSYW5nZTogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICB0aGlzLnNlY3VyaXR5R3JvdXAuYWRkRWdyZXNzUnVsZShvdGhlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3VwUnVsZSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gICAgfVxuICAgIGlmIChvdGhlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICBvdGhlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKHRoaXMuc2VjdXJpdHlHcm91cFJ1bGUsIHBvcnRSYW5nZSwgZGVzY3JpcHRpb24pO1xuXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGNvbm5lY3Rpb25zIGZyb20gdGhlIHBlZXIgb24gdGhlIGdpdmVuIHBvcnRcbiAgICovXG4gIHB1YmxpYyBhbGxvd0Zyb20ob3RoZXI6IElDb25uZWN0YWJsZSwgcG9ydFJhbmdlOiBJUG9ydFJhbmdlLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGlmICh0aGlzLnNlY3VyaXR5R3JvdXApIHtcbiAgICAgIHRoaXMuc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShvdGhlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3VwUnVsZSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gICAgfVxuICAgIGlmIChvdGhlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICBvdGhlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3VwLmFkZEVncmVzc1J1bGUodGhpcy5zZWN1cml0eUdyb3VwUnVsZSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGhvc3RzIGluc2lkZSB0aGUgc2VjdXJpdHkgZ3JvdXAgdG8gY29ubmVjdCB0byBlYWNoIG90aGVyIG9uIHRoZSBnaXZlbiBwb3J0XG4gICAqL1xuICBwdWJsaWMgYWxsb3dJbnRlcm5hbGx5KHBvcnRSYW5nZTogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICB0aGlzLnNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUodGhpcy5zZWN1cml0eUdyb3VwUnVsZSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIGFsbCBJUHY0IHJhbmdlc1xuICAgKi9cbiAgcHVibGljIGFsbG93VG9BbnlJUHY0KHBvcnRSYW5nZTogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmFsbG93VG8obmV3IEFueUlQdjQoKSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgZnJvbSBhbnkgSVB2NCByYW5nZXNcbiAgICovXG4gIHB1YmxpYyBhbGxvd0Zyb21BbnlJUHY0KHBvcnRSYW5nZTogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmFsbG93RnJvbShuZXcgQW55SVB2NCgpLCBwb3J0UmFuZ2UsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBjb25uZWN0aW9ucyBmcm9tIHRoZSBwZWVyIG9uIG91ciBkZWZhdWx0IHBvcnRcbiAgICpcbiAgICogRXZlbiBpZiB0aGUgcGVlciBoYXMgYSBkZWZhdWx0IHBvcnQsIHdlIHdpbGwgYWx3YXlzIHVzZSBvdXIgZGVmYXVsdCBwb3J0LlxuICAgKi9cbiAgcHVibGljIGFsbG93RGVmYXVsdFBvcnRGcm9tKG90aGVyOiBJQ29ubmVjdGFibGUsIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRQb3J0UmFuZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGwgYWxsb3dEZWZhdWx0UG9ydEZyb20oKTogdGhpcyByZXNvdXJjZSBoYXMgbm8gZGVmYXVsdCBwb3J0Jyk7XG4gICAgfVxuICAgIHRoaXMuYWxsb3dGcm9tKG90aGVyLCB0aGlzLmRlZmF1bHRQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBob3N0cyBpbnNpZGUgdGhlIHNlY3VyaXR5IGdyb3VwIHRvIGNvbm5lY3QgdG8gZWFjaCBvdGhlclxuICAgKi9cbiAgcHVibGljIGFsbG93RGVmYXVsdFBvcnRJbnRlcm5hbGx5KGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRQb3J0UmFuZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGwgYWxsb3dEZWZhdWx0UG9ydEludGVybmFsbHkoKTogdGhpcyByZXNvdXJjZSBoYXMgbm8gZGVmYXVsdCBwb3J0Jyk7XG4gICAgfVxuICAgIHRoaXMuYWxsb3dJbnRlcm5hbGx5KHRoaXMuZGVmYXVsdFBvcnRSYW5nZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGRlZmF1bHQgY29ubmVjdGlvbnMgZnJvbSBhbGwgSVB2NCByYW5nZXNcbiAgICovXG4gIHB1YmxpYyBhbGxvd0RlZmF1bHRQb3J0RnJvbUFueUlwdjQoZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdFBvcnRSYW5nZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsbCBhbGxvd0RlZmF1bHRQb3J0RnJvbUFueUlwdjQoKTogdGhpcyByZXNvdXJjZSBoYXMgbm8gZGVmYXVsdCBwb3J0Jyk7XG4gICAgfVxuICAgIHRoaXMuYWxsb3dGcm9tQW55SVB2NCh0aGlzLmRlZmF1bHRQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBjb25uZWN0aW9ucyB0byB0aGUgc2VjdXJpdHkgZ3JvdXAgb24gdGhlaXIgZGVmYXVsdCBwb3J0XG4gICAqL1xuICBwdWJsaWMgYWxsb3dUb0RlZmF1bHRQb3J0KG90aGVyOiBJQ29ubmVjdGFibGUsIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgaWYgKG90aGVyLmNvbm5lY3Rpb25zLmRlZmF1bHRQb3J0UmFuZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsbCBhbGxvVG9EZWZhdWx0UG9ydCgpOiBvdGhlciByZXNvdXJjZSBoYXMgbm8gZGVmYXVsdCBwb3J0Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5hbGxvd1RvKG90aGVyLCBvdGhlci5jb25uZWN0aW9ucy5kZWZhdWx0UG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgY29ubmVjdGlvbnMgZnJvbSB0aGUgcGVlciBvbiBvdXIgZGVmYXVsdCBwb3J0XG4gICAqXG4gICAqIEV2ZW4gaWYgdGhlIHBlZXIgaGFzIGEgZGVmYXVsdCBwb3J0LCB3ZSB3aWxsIGFsd2F5cyB1c2Ugb3VyIGRlZmF1bHQgcG9ydC5cbiAgICovXG4gIHB1YmxpYyBhbGxvd0RlZmF1bHRQb3J0VG8ob3RoZXI6IElDb25uZWN0YWJsZSwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdFBvcnRSYW5nZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsbCBhbGxvd0RlZmF1bHRQb3J0VG8oKTogdGhpcyByZXNvdXJjZSBoYXMgbm8gZGVmYXVsdCBwb3J0Jyk7XG4gICAgfVxuICAgIHRoaXMuYWxsb3dUbyhvdGhlciwgdGhpcy5kZWZhdWx0UG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gIH1cbn1cbiJdfQ==
class ReactiveList {
constructor() {
this.elements = new Array();
this.listeners = new Array();
}
push(...xs) {
this.elements.push(...xs);
for (const listener of this.listeners) {
for (const x of xs) {
listener(x);
}
}
}
forEachAndForever(listener) {
for (const element of this.elements) {
listener(element);
}
this.listeners.push(listener);
}
asArray() {
return this.elements.slice();
}
get length() {
return this.elements.length;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25uZWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLCtEQUFnRjtBQW1EaEY7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsV0FBVztJQXVCdEIsWUFBWSxRQUEwQixFQUFFO1FBZnhDOzs7OztXQUtHO1FBQ2Msb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUV4RTs7V0FFRztRQUNjLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBRXRFLFNBQUksR0FBWSxLQUFLLENBQUM7UUFHNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDeEQ7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQixDQUFDLEdBQUcsY0FBa0M7UUFDM0QsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFD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LEVBQWEsQ0FBQztJQXlCdEQsQ0FBQztJQXZCUSxJQUFJLENBQUMsR0FBRyxFQUFPO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDMUIsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3JDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNsQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYjtTQUNGO0lBQ0gsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFFBQW1CO1FBQzFDLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNuQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkI7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWN1cml0eUdyb3VwUmVmIH0gZnJvbSBcIi4vc2VjdXJpdHktZ3JvdXBcIjtcbmltcG9ydCB7IEFueUlQdjQsIElQb3J0UmFuZ2UsIElTZWN1cml0eUdyb3VwUnVsZSB9IGZyb20gXCIuL3NlY3VyaXR5LWdyb3VwLXJ1bGVcIjtcblxuLyoqXG4gKiBUaGUgZ29hbCBvZiB0aGlzIG1vZHVsZSBpcyB0byBtYWtlIHBvc3NpYmxlIHRvIHdyaXRlIHN0YXRlbWVudHMgbGlrZSB0aGlzOlxuICpcbiAqICBgYGB0c1xuICogIGRhdGFiYXNlLmNvbm5lY3Rpb25zLmFsbG93RnJvbShmbGVldCk7XG4gKiAgZmxlZXQuY29ubmVjdGlvbnMuYWxsb3dUbyhkYXRhYmFzZSk7XG4gKiAgcmRndy5jb25uZWN0aW9ucy5hbGxvd0Zyb21DaWRySXAoJzAuMy4xLjUvODYnKTtcbiAqICByZ2R3LmNvbm5lY3Rpb25zLmFsbG93VHJhZmZpY1RvKGZsZWV0LCBuZXcgQWxsUG9ydHMoKSk7XG4gKiAgYGBgXG4gKlxuICogVGhlIGluc2lnaHQgaGVyZSBpcyB0aGF0IHNvbWUgY29ubmVjdGluZyBwZWVycyBoYXZlIGluZm9ybWF0aW9uIG9uIHdoYXQgcG9ydHMgc2hvdWxkXG4gKiBiZSBpbnZvbHZlZCBpbiB0aGUgY29ubmVjdGlvbiwgYW5kIHNvbWUgZG9uJ3QuXG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBoYXMgYSBDb25uZWN0aW9ucyBvYmplY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29ubmVjdGFibGUge1xuICByZWFkb25seSBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBpbnRpYWxpemUgYSBuZXcgQ29ubmVjdGlvbnMgb2JqZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvbnNQcm9wcyB7XG4gIC8qKlxuICAgKiBDbGFzcyB0aGF0IHJlcHJlc2VudHMgdGhlIHJ1bGUgYnkgd2hpY2ggb3RoZXJzIGNhbiBjb25uZWN0IHRvIHRoaXMgY29ubmVjdGFibGVcbiAgICpcbiAgICogVGhpcyBvYmplY3QgaXMgcmVxdWlyZWQsIGJ1dCB3aWxsIGJlIGRlcml2ZWQgZnJvbSBzZWN1cml0eUdyb3VwIGlmIHRoYXQgaXMgcGFzc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEZXJpdmVkIGZyb20gc2VjdXJpdHlHcm91cCBpZiBzZXQuXG4gICAqL1xuICBzZWN1cml0eUdyb3VwUnVsZT86IElTZWN1cml0eUdyb3VwUnVsZTtcblxuICAvKipcbiAgICogV2hhdCBzZWN1cml0eUdyb3VwKHMpIHRoaXMgb2JqZWN0IGlzIG1hbmFnaW5nIGNvbm5lY3Rpb25zIGZvclxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBzZWN1cml0eSBncm91cHNcbiAgICovXG4gIHNlY3VyaXR5R3JvdXBzPzogU2VjdXJpdHlHcm91cFJlZltdO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHBvcnQgcmFuZ2UgZm9yIGluaXRpYXRpbmcgY29ubmVjdGlvbnMgdG8gYW5kIGZyb20gdGhpcyBvYmplY3RcbiAgICpcbiAgICogQGRlZmF1bHQgTm8gZGVmYXVsdCBwb3J0IHJhbmdlXG4gICAqL1xuICBkZWZhdWx0UG9ydFJhbmdlPzogSVBvcnRSYW5nZTtcbn1cblxuLyoqXG4gKiBNYW5hZ2UgdGhlIGFsbG93ZWQgbmV0d29yayBjb25uZWN0aW9ucyBmb3IgY29uc3RydWN0cyB3aXRoIFNlY3VyaXR5IEdyb3Vwcy5cbiAqXG4gKiBTZWN1cml0eSBHcm91cHMgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSBmaXJld2FsbCBmb3IgbmV0d29yay1jb25uZWN0ZWRcbiAqIGRldmljZXMuIFRoaXMgY2xhc3MgbWFrZXMgaXQgZWFzeSB0byBhbGxvdyBuZXR3b3JrIGNvbm5lY3Rpb25zIHRvIGFuZFxuICogZnJvbSBzZWN1cml0eSBncm91cHMsIGFuZCBiZXR3ZWVuIHNlY3VyaXR5IGdyb3VwcyBpbmRpdmlkdWFsbHkuIFdoZW5cbiAqIGVzdGFibGlzaGluZyBjb25uZWN0aXZpdHkgYmV0d2VlbiBzZWN1cml0eSBncm91cHMsIGl0IHdpbGwgYXV0b21hdGljYWxseVxuICogYWRkIHJ1bGVzIGluIGJvdGggc2VjdXJpdHkgZ3JvdXBzXG4gKlxuICogVGhpcyBvYmplY3QgY2FuIG1hbmFnZSBvbmUgb3IgbW9yZSBzZWN1cml0eSBncm91cHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9ucyBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHBvcnQgY29uZmlndXJlZCBmb3IgdGhpcyBjb25uZWN0aW9uIHBlZXIsIGlmIGF2YWlsYWJsZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRQb3J0UmFuZ2U/OiBJUG9ydFJhbmdlO1xuXG4gIC8qKlxuICAgKiBVbmRlcmx5aW5nIHNlY3VyaXR5R3JvdXAgZm9yIHRoaXMgQ29ubmVjdGlvbnMgb2JqZWN0LCBpZiBwcmVzZW50XG4gICAqXG4gICAqIE1heSBiZSBlbXB0eSBpZiB0aGlzIENvbm5lY3Rpb25zIG9iamVjdCBpcyBub3QgbWFuYWdpbmcgYSBTZWN1cml0eUdyb3VwLFxuICAgKiBidXQgc2ltcGx5IHJlcHJlc2VudGluZyBhIENvbm5lY3RhYmxlIHBlZXIuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWN1cml0eUdyb3VwcyA9IG5ldyBSZWFjdGl2ZUxpc3Q8U2VjdXJpdHlHcm91cFJlZj4oKTtcblxuICAvKipcbiAgICogVGhlIHJ1bGUgdGhhdCBkZWZpbmVzIGhvdyB0byByZXByZXNlbnQgdGhpcyBwZWVyIGluIGEgc2VjdXJpdHkgZ3JvdXBcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlY3VyaXR5R3JvdXBSdWxlcyA9IG5ldyBSZWFjdGl2ZUxpc3Q8SVNlY3VyaXR5R3JvdXBSdWxlPigpO1xuXG4gIHByaXZhdGUgc2tpcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDb25uZWN0aW9uc1Byb3BzID0ge30pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcztcbiAgICB0aGlzLl9zZWN1cml0eUdyb3Vwcy5wdXNoKC4uLihwcm9wcy5zZWN1cml0eUdyb3VwcyB8fCBbXSkpO1xuXG4gICAgdGhpcy5fc2VjdXJpdHlHcm91cFJ1bGVzLnB1c2goLi4udGhpcy5fc2VjdXJpdHlHcm91cHMuYXNBcnJheSgpKTtcbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cFJ1bGUpIHtcbiAgICAgIHRoaXMuX3NlY3VyaXR5R3JvdXBSdWxlcy5wdXNoKHByb3BzLnNlY3VyaXR5R3JvdXBSdWxlKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlZmF1bHRQb3J0UmFuZ2UgPSBwcm9wcy5kZWZhdWx0UG9ydFJhbmdlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWN1cml0eUdyb3VwcygpOiBTZWN1cml0eUdyb3VwUmVmW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWN1cml0eUdyb3Vwcy5hc0FycmF5KCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2VjdXJpdHkgZ3JvdXAgdG8gdGhlIGxpc3Qgb2Ygc2VjdXJpdHkgZ3JvdXBzIG1hbmFnZWQgYnkgdGhpcyBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBhZGRTZWN1cml0eUdyb3VwKC4uLnNlY3VyaXR5R3JvdXBzOiBTZWN1cml0eUdyb3VwUmVmW10pIHtcbiAgICBmb3IgKGNvbnN0IHNlY3VyaXR5R3JvdXAgb2Ygc2VjdXJpdHlHcm91cHMpIHtcbiAgICAgIHRoaXMuX3NlY3VyaXR5R3JvdXBzLnB1c2goc2VjdXJpdHlHcm91cCk7XG4gICAgICB0aGlzLl9zZWN1cml0eUdyb3VwUnVsZXMucHVzaChzZWN1cml0eUdyb3VwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgY29ubmVjdGlvbnMgdG8gdGhlIHBlZXIgb24gdGhlIGdpdmVuIHBvcnRcbiAgICovXG4gIHB1YmxpYyBhbGxvd1RvKG90aGVyOiBJQ29ubmVjdGFibGUsIHBvcnRSYW5nZTogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5za2lwKSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5fc2VjdXJpdHlHcm91cHMuZm9yRWFjaEFuZEZvcmV2ZXIoc2VjdXJpdHlHcm91cCA9PiB7XG4gICAgICBvdGhlci5jb25uZWN0aW9ucy5fc2VjdXJpdHlHcm91cFJ1bGVzLmZvckVhY2hBbmRGb3JldmVyKHJ1bGUgPT4ge1xuICAgICAgICBzZWN1cml0eUdyb3VwLmFkZEVncmVzc1J1bGUocnVsZSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2tpcCA9IHRydWU7XG4gICAgb3RoZXIuY29ubmVjdGlvbnMuYWxsb3dGcm9tKHRoaXMsIHBvcnRSYW5nZSwgZGVzY3JpcHRpb24pO1xuICAgIHRoaXMuc2tpcCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGNvbm5lY3Rpb25zIGZyb20gdGhlIHBlZXIgb24gdGhlIGdpdmVuIHBvcnRcbiAgICovXG4gIHB1YmxpYyBhbGxvd0Zyb20ob3RoZXI6IElDb25uZWN0YWJsZSwgcG9ydFJhbmdlOiBJUG9ydFJhbmdlLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGlmICh0aGlzLnNraXApIHsgcmV0dXJuOyB9XG5cbiAgICB0aGlzLl9zZWN1cml0eUdyb3Vwcy5mb3JFYWNoQW5kRm9yZXZlcihzZWN1cml0eUdyb3VwID0+IHtcbiAgICAgIG90aGVyLmNvbm5lY3Rpb25zLl9zZWN1cml0eUdyb3VwUnVsZXMuZm9yRWFjaEFuZEZvcmV2ZXIocnVsZSA9PiB7XG4gICAgICAgIHNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUocnVsZSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2tpcCA9IHRydWU7XG4gICAgb3RoZXIuY29ubmVjdGlvbnMuYWxsb3dUbyh0aGlzLCBwb3J0UmFuZ2UsIGRlc2NyaXB0aW9uKTtcbiAgICB0aGlzLnNraXAgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBob3N0cyBpbnNpZGUgdGhlIHNlY3VyaXR5IGdyb3VwIHRvIGNvbm5lY3QgdG8gZWFjaCBvdGhlciBvbiB0aGUgZ2l2ZW4gcG9ydFxuICAgKi9cbiAgcHVibGljIGFsbG93SW50ZXJuYWxseShwb3J0UmFuZ2U6IElQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2VjdXJpdHlHcm91cHMuZm9yRWFjaEFuZEZvcmV2ZXIoc2VjdXJpdHlHcm91cCA9PiB7XG4gICAgICB0aGlzLl9zZWN1cml0eUdyb3VwUnVsZXMuZm9yRWFjaEFuZEZvcmV2ZXIocnVsZSA9PiB7XG4gICAgICAgIHNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUocnVsZSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gICAgICAgIC8vIEZJWE1FOiB0aGlzIHNlZW1zIHJlcXVpcmVkIGJ1dCB3ZSBkaWRuJ3QgdXNlIHRvIGhhdmUgaXQuIFJlc2VhcmNoLlxuICAgICAgICAvLyBzZWN1cml0eUdyb3VwLmFkZEVncmVzc1J1bGUocnVsZSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBhbGwgSVB2NCByYW5nZXNcbiAgICovXG4gIHB1YmxpYyBhbGxvd1RvQW55SVB2NChwb3J0UmFuZ2U6IElQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgdGhpcy5hbGxvd1RvKG5ldyBBbnlJUHY0KCksIHBvcnRSYW5nZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGZyb20gYW55IElQdjQgcmFuZ2VzXG4gICAqL1xuICBwdWJsaWMgYWxsb3dGcm9tQW55SVB2NChwb3J0UmFuZ2U6IElQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgdGhpcy5hbGxvd0Zyb20obmV3IEFueUlQdjQoKSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgY29ubmVjdGlvbnMgZnJvbSB0aGUgcGVlciBvbiBvdXIgZGVmYXVsdCBwb3J0XG4gICAqXG4gICAqIEV2ZW4gaWYgdGhlIHBlZXIgaGFzIGEgZGVmYXVsdCBwb3J0LCB3ZSB3aWxsIGFsd2F5cyB1c2Ugb3VyIGRlZmF1bHQgcG9ydC5cbiAgICovXG4gIHB1YmxpYyBhbGxvd0RlZmF1bHRQb3J0RnJvbShvdGhlcjogSUNvbm5lY3RhYmxlLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGlmICghdGhpcy5kZWZhdWx0UG9ydFJhbmdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIGFsbG93RGVmYXVsdFBvcnRGcm9tKCk6IHRoaXMgcmVzb3VyY2UgaGFzIG5vIGRlZmF1bHQgcG9ydCcpO1xuICAgIH1cbiAgICB0aGlzLmFsbG93RnJvbShvdGhlciwgdGhpcy5kZWZhdWx0UG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgaG9zdHMgaW5zaWRlIHRoZSBzZWN1cml0eSBncm91cCB0byBjb25uZWN0IHRvIGVhY2ggb3RoZXJcbiAgICovXG4gIHB1YmxpYyBhbGxvd0RlZmF1bHRQb3J0SW50ZXJuYWxseShkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGlmICghdGhpcy5kZWZhdWx0UG9ydFJhbmdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIGFsbG93RGVmYXVsdFBvcnRJbnRlcm5hbGx5KCk6IHRoaXMgcmVzb3VyY2UgaGFzIG5vIGRlZmF1bHQgcG9ydCcpO1xuICAgIH1cbiAgICB0aGlzLmFsbG93SW50ZXJuYWxseSh0aGlzLmRlZmF1bHRQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBkZWZhdWx0IGNvbm5lY3Rpb25zIGZyb20gYWxsIElQdjQgcmFuZ2VzXG4gICAqL1xuICBwdWJsaWMgYWxsb3dEZWZhdWx0UG9ydEZyb21BbnlJcHY0KGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRQb3J0UmFuZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGwgYWxsb3dEZWZhdWx0UG9ydEZyb21BbnlJcHY0KCk6IHRoaXMgcmVzb3VyY2UgaGFzIG5vIGRlZmF1bHQgcG9ydCcpO1xuICAgIH1cbiAgICB0aGlzLmFsbG93RnJvbUFueUlQdjQodGhpcy5kZWZhdWx0UG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgY29ubmVjdGlvbnMgdG8gdGhlIHNlY3VyaXR5IGdyb3VwIG9uIHRoZWlyIGRlZmF1bHQgcG9ydFxuICAgKi9cbiAgcHVibGljIGFsbG93VG9EZWZhdWx0UG9ydChvdGhlcjogSUNvbm5lY3RhYmxlLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGlmIChvdGhlci5jb25uZWN0aW9ucy5kZWZhdWx0UG9ydFJhbmdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGwgYWxsb1RvRGVmYXVsdFBvcnQoKTogb3RoZXIgcmVzb3VyY2UgaGFzIG5vIGRlZmF1bHQgcG9ydCcpO1xuICAgIH1cblxuICAgIHRoaXMuYWxsb3dUbyhvdGhlciwgb3RoZXIuY29ubmVjdGlvbnMuZGVmYXVsdFBvcnRSYW5nZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGNvbm5lY3Rpb25zIGZyb20gdGhlIHBlZXIgb24gb3VyIGRlZmF1bHQgcG9ydFxuICAgKlxuICAgKiBFdmVuIGlmIHRoZSBwZWVyIGhhcyBhIGRlZmF1bHQgcG9ydCwgd2Ugd2lsbCBhbHdheXMgdXNlIG91ciBkZWZhdWx0IHBvcnQuXG4gICAqL1xuICBwdWJsaWMgYWxsb3dEZWZhdWx0UG9ydFRvKG90aGVyOiBJQ29ubmVjdGFibGUsIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRQb3J0UmFuZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGwgYWxsb3dEZWZhdWx0UG9ydFRvKCk6IHRoaXMgcmVzb3VyY2UgaGFzIG5vIGRlZmF1bHQgcG9ydCcpO1xuICAgIH1cbiAgICB0aGlzLmFsbG93VG8ob3RoZXIsIHRoaXMuZGVmYXVsdFBvcnRSYW5nZSwgZGVzY3JpcHRpb24pO1xuICB9XG59XG5cbnR5cGUgQWN0aW9uPFQ+ID0gKHg6IFQpID0+IHZvaWQ7XG5cbmNsYXNzIFJlYWN0aXZlTGlzdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudHMgPSBuZXcgQXJyYXk8VD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnMgPSBuZXcgQXJyYXk8QWN0aW9uPFQ+PigpO1xuXG4gIHB1YmxpYyBwdXNoKC4uLnhzOiBUW10pIHtcbiAgICB0aGlzLmVsZW1lbnRzLnB1c2goLi4ueHMpO1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgIGZvciAoY29uc3QgeCBvZiB4cykge1xuICAgICAgICBsaXN0ZW5lcih4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9yRWFjaEFuZEZvcmV2ZXIobGlzdGVuZXI6IEFjdGlvbjxUPikge1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLmVsZW1lbnRzKSB7XG4gICAgICBsaXN0ZW5lcihlbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICBwdWJsaWMgYXNBcnJheSgpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzLnNsaWNlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzLmxlbmd0aDtcbiAgfVxufSJdfQ==

@@ -35,2 +35,8 @@ import { Construct } from '@aws-cdk/cdk';

/**
* What generation of Amazon Linux to use
*
* @default AmazonLinux
*/
generation?: AmazonLinuxGeneration;
/**
* What edition of Amazon Linux to use

@@ -60,5 +66,6 @@ *

export declare class AmazonLinuxImage implements IMachineImageSource {
private readonly edition?;
private readonly virtualization?;
private readonly storage?;
private readonly generation;
private readonly edition;
private readonly virtualization;
private readonly storage;
constructor(props?: AmazonLinuxImageProps);

@@ -71,2 +78,15 @@ /**

/**
* What generation of Amazon Linux to use
*/
export declare enum AmazonLinuxGeneration {
/**
* Amazon Linux
*/
AmazonLinux = "amzn",
/**
* Amazon Linux 2
*/
AmazonLinux2 = "amzn2"
}
/**
* Amazon Linux edition

@@ -73,0 +93,0 @@ */

@@ -40,2 +40,3 @@ "use strict";

constructor(props) {
this.generation = (props && props.generation) || AmazonLinuxGeneration.AmazonLinux;
this.edition = (props && props.edition) || AmazonLinuxEdition.Standard;

@@ -50,3 +51,4 @@ this.virtualization = (props && props.virtualization) || AmazonLinuxVirt.HVM;

const parts = [
'amzn-ami',
this.generation,
'ami',
this.edition !== AmazonLinuxEdition.Standard ? this.edition : undefined,

@@ -67,2 +69,16 @@ this.virtualization,

/**
* What generation of Amazon Linux to use
*/
var AmazonLinuxGeneration;
(function (AmazonLinuxGeneration) {
/**
* Amazon Linux
*/
AmazonLinuxGeneration["AmazonLinux"] = "amzn";
/**
* Amazon Linux 2
*/
AmazonLinuxGeneration["AmazonLinux2"] = "amzn2";
})(AmazonLinuxGeneration = exports.AmazonLinuxGeneration || (exports.AmazonLinuxGeneration = {}));
/**
* Amazon Linux edition

@@ -210,2 +226,2 @@ */

exports.LinuxOS = LinuxOS;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjaGluZS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hY2hpbmUtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBc0U7QUFZdEU7Ozs7OztHQU1HO0FBQ0gsTUFBYSxZQUFZO0lBQ3ZCLFlBQTZCLE9BQXVCO1FBQXZCLFlBQU8sR0FBUCxPQUFPLENBQWdCO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxNQUFpQjtRQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLDBCQUFvQixDQUFDLE1BQU0sRUFBRTtZQUNuRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDckQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxrQkFBa0IsQ0FBQyxPQUF1QjtRQUNoRCxPQUFPLGtDQUFrQyxHQUFHLE9BQU8sQ0FBQztJQUN0RCxDQUFDO0NBQ0Y7QUF0QkQsb0NBc0JDO0FBNEJEOzs7O0dBSUc7QUFDSCxNQUFhLGdCQUFnQjtJQU8zQixZQUFZLEtBQTZCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztRQUN2RSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDO1FBQzdFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLGNBQWMsQ0FBQztJQUMvRSxDQUFDO0lB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QsIFNTTVBhcmFtZXRlclByb3ZpZGVyLCBTdGFjayB9IGZyb20gJ0Bhd3MtY2RrL2Nkayc7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBjbGFzc2VzIHRoYXQgY2FuIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBtYWNoaW5lIGltYWdlIHRvIHVzZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElNYWNoaW5lSW1hZ2VTb3VyY2Uge1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBpbWFnZSB0byB1c2UgaW4gdGhlIGdpdmVuIGNvbnRleHRcbiAgICovXG4gIGdldEltYWdlKHBhcmVudDogQ29uc3RydWN0KTogTWFjaGluZUltYWdlO1xufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGluZGljYXRlZCBXaW5kb3dzIHZlcnNpb25cbiAqXG4gKiBUaGUgQU1JIElEIGlzIHNlbGVjdGVkIHVzaW5nIHRoZSB2YWx1ZXMgcHVibGlzaGVkIHRvIHRoZSBTU00gcGFyYW1ldGVyIHN0b3JlLlxuICpcbiAqIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vYmxvZ3MvbXQvcXVlcnktZm9yLXRoZS1sYXRlc3Qtd2luZG93cy1hbWktdXNpbmctc3lzdGVtcy1tYW5hZ2VyLXBhcmFtZXRlci1zdG9yZS9cbiAqL1xuZXhwb3J0IGNsYXNzIFdpbmRvd3NJbWFnZSBpbXBsZW1lbnRzIElNYWNoaW5lSW1hZ2VTb3VyY2UgIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB2ZXJzaW9uOiBXaW5kb3dzVmVyc2lvbikge1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgaW1hZ2UgdG8gdXNlIGluIHRoZSBnaXZlbiBjb250ZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0SW1hZ2UocGFyZW50OiBDb25zdHJ1Y3QpOiBNYWNoaW5lSW1hZ2Uge1xuICAgIGNvbnN0IHNzbVByb3ZpZGVyID0gbmV3IFNTTVBhcmFtZXRlclByb3ZpZGVyKHBhcmVudCwge1xuICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5pbWFnZVBhcmFtZXRlck5hbWUodGhpcy52ZXJzaW9uKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFtaSA9IHNzbVByb3ZpZGVyLnBhcmFtZXRlclZhbHVlKCk7XG4gICAgcmV0dXJuIG5ldyBNYWNoaW5lSW1hZ2UoYW1pLCBuZXcgV2luZG93c09TKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCB0aGUgU1NNIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgZ2l2ZW4gV2luZG93cyBpbWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBpbWFnZVBhcmFtZXRlck5hbWUodmVyc2lvbjogV2luZG93c1ZlcnNpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiAnL2F3cy9zZXJ2aWNlL2FtaS13aW5kb3dzLWxhdGVzdC8nICsgdmVyc2lvbjtcbiAgfVxufVxuXG4vKipcbiAqIEFtYXpvbiBMaW51eCBpbWFnZSBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW1hem9uTGludXhJbWFnZVByb3BzIHtcbiAgLyoqXG4gICAqIFdoYXQgZWRpdGlvbiBvZiBBbWF6b24gTGludXggdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IFN0YW5kYXJkXG4gICAqL1xuICBlZGl0aW9uPzogQW1hem9uTGludXhFZGl0aW9uO1xuXG4gIC8qKlxuICAgKiBWaXJ0dWFsaXphdGlvbiB0eXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IEhWTVxuICAgKi9cbiAgdmlydHVhbGl6YXRpb24/OiBBbWF6b25MaW51eFZpcnQ7XG5cbiAgLyoqXG4gICAqIFdoYXQgc3RvcmFnZSBiYWNrZWQgaW1hZ2UgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IEdlbmVyYWxQdXJwb3NlXG4gICAqL1xuICBzdG9yYWdlPzogQW1hem9uTGludXhTdG9yYWdlO1xufVxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIEFtYXpvbiBMaW51eFxuICpcbiAqIFRoZSBBTUkgSUQgaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIHZhbHVlcyBwdWJsaXNoZWQgdG8gdGhlIFNTTSBwYXJhbWV0ZXIgc3RvcmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBBbWF6b25MaW51eEltYWdlIGltcGxlbWVudHMgSU1hY2hpbmVJbWFnZVNvdXJjZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWRpdGlvbj86IEFtYXpvbkxpbnV4RWRpdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHZpcnR1YWxpemF0aW9uPzogQW1hem9uTGludXhWaXJ0O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZT86IEFtYXpvbkxpbnV4U3RvcmFnZTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcz86IEFtYXpvbkxpbnV4SW1hZ2VQcm9wcykge1xuICAgIHRoaXMuZWRpdGlvbiA9IChwcm9wcyAmJiBwcm9wcy5lZGl0aW9uKSB8fCBBbWF6b25MaW51eEVkaXRpb24uU3RhbmRhcmQ7XG4gICAgdGhpcy52aXJ0dWFsaXphdGlvbiA9IChwcm9wcyAmJiBwcm9wcy52aXJ0dWFsaXphdGlvbikgfHwgQW1hem9uTGludXhWaXJ0LkhWTTtcbiAgICB0aGlzLnN0b3JhZ2UgPSAocHJvcHMgJiYgcHJvcHMuc3RvcmFnZSkgfHwgQW1hem9uTGludXhTdG9yYWdlLkdlbmVyYWxQdXJwb3NlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgaW1hZ2UgdG8gdXNlIGluIHRoZSBnaXZlbiBjb250ZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0SW1hZ2UocGFyZW50OiBDb25zdHJ1Y3QpOiBNYWNoaW5lSW1hZ2Uge1xuICAgIGNvbnN0IHBhcnRzOiBBcnJheTxzdHJpbmd8dW5kZWZpbmVkPiA9IFtcbiAgICAgICdhbXpuLWFtaScsXG4gICAgICB0aGlzLmVkaXRpb24gIT09IEFtYXpvbkxpbnV4RWRpdGlvbi5TdGFuZGFyZCA/IHRoaXMuZWRpdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgIHRoaXMudmlydHVhbGl6YXRpb24sXG4gICAgICAneDg2XzY0JywgLy8gTm8gMzItYml0cyBpbWFnZXMgdmVuZGVkIHRocm91Z2ggdGhpc1xuICAgICAgdGhpcy5zdG9yYWdlXG4gICAgXS5maWx0ZXIoeCA9PiB4ICE9PSB1bmRlZmluZWQpOyAvLyBHZXQgcmlkIG9mIHVuZGVmaW5lZHNcblxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSAnL2F3cy9zZXJ2aWNlL2FtaS1hbWF6b24tbGludXgtbGF0ZXN0LycgKyBwYXJ0cy5qb2luKCctJyk7XG5cbiAgICBjb25zdCBzc21Qcm92aWRlciA9IG5ldyBTU01QYXJhbWV0ZXJQcm92aWRlcihwYXJlbnQsIHtcbiAgICAgIHBhcmFtZXRlck5hbWUsXG4gICAgfSk7XG4gICAgY29uc3QgYW1pID0gc3NtUHJvdmlkZXIucGFyYW1ldGVyVmFsdWUoKTtcbiAgICByZXR1cm4gbmV3IE1hY2hpbmVJbWFnZShhbWksIG5ldyBMaW51eE9TKCkpO1xuICB9XG59XG5cbi8qKlxuICogQW1hem9uIExpbnV4IGVkaXRpb25cbiAqL1xuZXhwb3J0IGVudW0gQW1hem9uTGludXhFZGl0aW9uIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIGVkaXRpb25cbiAgICovXG4gIFN0YW5kYXJkID0gJ3N0YW5kYXJkJyxcblxuICAvKipcbiAgICogTWluaW1hbCBlZGl0aW9uXG4gICAqL1xuICBNaW5pbWFsID0gJ21pbmltYWwnXG59XG5cbi8qKlxuICogVmlydHVhbGl6YXRpb24gdHlwZSBmb3IgQW1hem9uIExpbnV4XG4gKi9cbmV4cG9ydCBlbnVtIEFtYXpvbkxpbnV4VmlydCB7XG4gIC8qKlxuICAgKiBIVk0gdmlydHVhbGl6YXRpb24gKHJlY29tbWVuZGVkKVxuICAgKi9cbiAgSFZNID0gJ2h2bScsXG5cbiAgLyoqXG4gICAqIFBWIHZpcnR1YWxpemF0aW9uXG4gICAqL1xuICBQViA9ICdwdidcbn1cblxuZXhwb3J0IGVudW0gQW1hem9uTGludXhTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEVCUy1iYWNrZWQgc3RvcmFnZVxuICAgKi9cbiAgRUJTID0gJ2VicycsXG5cbiAgLyoqXG4gICAqIFMzLWJhY2tlZCBzdG9yYWdlXG4gICAqL1xuICBTMyA9ICdlYnMnLFxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIFB1cnBvc2UtYmFzZWQgc3RvcmFnZSAocmVjb21tZW5kZWQpXG4gICAqL1xuICBHZW5lcmFsUHVycG9zZSA9ICdncDInLFxufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhIExpbnV4IG1hY2hpbmUgaW1hZ2UgZnJvbSBhbiBBTUkgbWFwXG4gKlxuICogTGludXggaW1hZ2VzIElEcyBhcmUgbm90IHB1Ymxpc2hlZCB0byBTU00gcGFyYW1ldGVyIHN0b3JlIHlldCwgc28geW91J2xsIGhhdmUgdG9cbiAqIG1hbnVhbGx5IHNwZWNpZnkgYW4gQU1JIG1hcC5cbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNMaW51eEltYWdlIGltcGxlbWVudHMgSU1hY2hpbmVJbWFnZVNvdXJjZSAge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFtaU1hcDoge1tyZWdpb246IHN0cmluZ106IHN0cmluZ30pIHtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbWFnZShwYXJlbnQ6IENvbnN0cnVjdCk6IE1hY2hpbmVJbWFnZSB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5maW5kKHBhcmVudCk7XG4gICAgY29uc3QgcmVnaW9uID0gc3RhY2sucmVxdWlyZVJlZ2lvbignQU1JIGNhbm5vdCBiZSBkZXRlcm1pbmVkJyk7XG4gICAgY29uc3QgYW1pID0gdGhpcy5hbWlNYXBbcmVnaW9uXTtcbiAgICBpZiAoIWFtaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBBTUkgaW4gQU1JIG1hcDogbm8gQU1JIHNwZWNpZmllZCBmb3IgcmVnaW9uICcke3JlZ2lvbn0nYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNYWNoaW5lSW1hZ2UoYW1pLCBuZXcgTGludXhPUygpKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBXaW5kb3dzIHZlcnNpb24gdG8gdXNlIGZvciB0aGUgV2luZG93c0ltYWdlXG4gKi9cbmV4cG9ydCBlbnVtIFdpbmRvd3NWZXJzaW9uIHtcbiAgV2luZG93c1NlcnZlcjIwMTZUdXJrc2loRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1UdXJraXNoLUZ1bGwtQmFzZScsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2U3dlZGlzaEZ1bGxCYXNlID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtU3dlZGlzaC1GdWxsLUJhc2UnLFxuICBXaW5kb3dzU2VydmVyMjAxNlNwYW5pc2hGdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LVNwYW5pc2gtRnVsbC1CYXNlJyxcbiAgV2luZG93c1NlcnZlcjIwMTZSdXNzaWFuRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1SdXNzaWFuLUZ1bGwtQmFzZScsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2UG9ydHVndWVzZVBvcnR1Z2FsRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1Qb3J0dWd1ZXNlX1BvcnR1Z2FsLUZ1bGwtQmFzZScsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2UG9ydHVndWVzZUJyYXppbEZ1bGxCYXNlID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtUG9ydHVndWVzZV9CcmF6aWwtRnVsbC1CYXNlJyxcbiAgV2luZG93c1NlcnZlcjIwMTZQb2xpc2hGdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LVBvbGlzaC1GdWxsLUJhc2UnLFxuICBXaW5kb3dzU2VydmVyMjAxNktvcmVhbkZ1bGxTUUwyMDE2QmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUtvcmVhbi1GdWxsLVNRTF8yMDE2X1NQMV9TdGFuZGFyZCcsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2S29yZWFuRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1Lb3JlYW4tRnVsbC1CYXNlJyxcbiAgV2luZG93c1NlcnZlcjIwMTZKYXBhbmVzZUZ1bGxTUUwyMDE2V2ViID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtSmFwYW5lc2UtRnVsbC1TUUxfMjAxNl9TUDFfV2ViJyxcbiAgV2luZG93c1NlcnZlcjIwMTZKYXBhbmVzZUZ1bGxTUUwyMDE2U3RhbmRhcmQgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1KYXBhbmVzZS1GdWxsLVNRTF8yMDE2X1NQMV9TdGFuZGFyZCcsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2SmFwYW5lc2VGdWxsU1FMMjAxNkV4cHJlc3MgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1KYXBhbmVzZS1GdWxsLVNRTF8yMDE2X1NQMV9FeHByZXNzJyxcbiAgV2luZG93c1NlcnZlcjIwMTZKYXBhbmVzZUZ1bGxTUUwyMDE2RW50ZXJwcmlzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUphcGFuZXNlLUZ1bGwtU1FMXzIwMTZfU1AxX0VudGVycHJpc2UnLFxuICBXaW5kb3dzU2VydmVyMjAxNkphcGFuZXNlRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1KYXBhbmVzZS1GdWxsLUJhc2UnLFxuICBXaW5kb3dzU2VydmVyMjAxNkl0YWxpYW5GdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUl0YWxpYW4tRnVsbC1CYXNlJyxcbiAgV2luZG93c1NlcnZlcjIwMTZIdW5nYXJpYW5GdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUh1bmdhcmlhbi1GdWxsLUJhc2UnLFxuICBXaW5kb3dzU2VydmVyMjAxNkdlcm1hbkZ1bGxCYXNlID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtR2VybWFuLUZ1bGwtQmFzZScsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2RnJlbmNoRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1GcmVuY2gtRnVsbC1CYXNlJyxcbiAgV2luZG93c1NlcnZlcjIwMTZFbmdsaXNoTmFub0Jhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1FbmdsaXNoLU5hbm8tQmFzZScsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2RW5nbGlzaEZ1bGxTUUwyMDE3V2ViID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtRW5nbGlzaC1GdWxsLVNRTF8yMDE3X1dlYicsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2RW5nbGlzaEZ1bGxTUUwyMDE3U3RhbmRhcmQgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1FbmdsaXNoLUZ1bGwtU1FMXzIwMTdfU3RhbmRhcmQnLFxuICBXaW5kb3dzU2VydmVyMjAxNkVuZ2xpc2hGdWxsU1FMMjAxN0V4cHJlc3MgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1FbmdsaXNoLUZ1bGwtU1FMXzIwMTdfRXhwcmVzcycsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2RW5nbGlzaEZ1bGxTUUwyMDE3RW50ZXJwcmlzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUVuZ2xpc2gtRnVsbC1TUUxfMjAxN19FbnRlcnByaXNlJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIG1hY2hpbmUgdG8gYmUgbGF1bmNoZWRcbiAqXG4gKiBDb21iaW5lcyBhbiBBTUkgSUQgd2l0aCBhbiBPUy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hY2hpbmVJbWFnZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpbWFnZUlkOiBzdHJpbmcsIHB1YmxpYyByZWFkb25seSBvczogT3BlcmF0aW5nU3lzdGVtKSB7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgT1MgdHlwZSBvZiBhIHBhcnRpY3VsYXIgaW1hZ2VcbiAqL1xuZXhwb3J0IGVudW0gT3BlcmF0aW5nU3lzdGVtVHlwZSB7XG4gIExpbnV4LFxuICBXaW5kb3dzLFxufVxuXG4vKipcbiAqIEFic3RyYWN0aW9uIG9mIE9TIGZlYXR1cmVzIHdlIG5lZWQgdG8gYmUgYXdhcmUgb2ZcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9wZXJhdGluZ1N5c3RlbSB7XG4gIHB1YmxpYyBhYnN0cmFjdCBjcmVhdGVVc2VyRGF0YShzY3JpcHRzOiBzdHJpbmdbXSk6IHN0cmluZztcbiAgYWJzdHJhY3QgZ2V0IHR5cGUoKTogT3BlcmF0aW5nU3lzdGVtVHlwZTtcbn1cblxuLyoqXG4gKiBPUyBmZWF0dXJlcyBzcGVjaWFsaXplZCBmb3IgV2luZG93c1xuICovXG5leHBvcnQgY2xhc3MgV2luZG93c09TIGV4dGVuZHMgT3BlcmF0aW5nU3lzdGVtIHtcbiAgcHVibGljIGNyZWF0ZVVzZXJEYXRhKHNjcmlwdHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYDxwb3dlcnNoZWxsPiR7c2NyaXB0cy5qb2luKCdcXG4nKX08L3Bvd2Vyc2hlbGw+YDtcbiAgfVxuXG4gIGdldCB0eXBlKCk6IE9wZXJhdGluZ1N5c3RlbVR5cGUge1xuICAgIHJldHVybiBPcGVyYXRpbmdTeXN0ZW1UeXBlLldpbmRvd3M7XG4gIH1cbn1cblxuLyoqXG4gKiBPUyBmZWF0dXJlcyBzcGVjaWFsaXplZCBmb3IgTGludXhcbiAqL1xuZXhwb3J0IGNsYXNzIExpbnV4T1MgZXh0ZW5kcyBPcGVyYXRpbmdTeXN0ZW0ge1xuICBwdWJsaWMgY3JlYXRlVXNlckRhdGEoc2NyaXB0czogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiAnIyEvYmluL2Jhc2hcXG4nICsgc2NyaXB0cy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCB0eXBlKCk6IE9wZXJhdGluZ1N5c3RlbVR5cGUge1xuICAgIHJldHVybiBPcGVyYXRpbmdTeXN0ZW1UeXBlLkxpbnV4O1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjaGluZS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hY2hpbmUtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBc0U7QUFZdEU7Ozs7OztHQU1HO0FBQ0gsTUFBYSxZQUFZO0lBQ3ZCLFlBQTZCLE9BQXVCO1FBQXZCLFlBQU8sR0FBUCxPQUFPLENBQWdCO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxNQUFpQjtRQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLDBCQUFvQixDQUFDLE1BQU0sRUFBRTtZQUNuRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDckQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxrQkFBa0IsQ0FBQyxPQUF1QjtRQUNoRCxPQUFPLGtDQUFrQyxHQUFHLE9BQU8sQ0FBQztJQUN0RCxDQUFDO0NBQ0Y7QUF0QkQsb0NBc0JDO0FBbUNEOzs7O0dBSUc7QUFDSCxNQUFhLGdCQUFnQjtJQU0zQixZQUFZLEtBQTZCO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFdBQVcsQ0FBQztRQUNuRixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUM7UUFDdkUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQztRQUM3RSxJQUFJLENB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SSxJQUFJO1FBQ04sT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBUkQsOEJBUUM7QUFFRDs7R0FFRztBQUNILE1BQWEsT0FBUSxTQUFRLGVBQWU7SUFDbkMsY0FBYyxDQUFDLE9BQWlCO1FBQ3JDLE9BQU8sZUFBZSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sbUJBQW1CLENBQUMsS0FBSyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQVJELDBCQVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0LCBTU01QYXJhbWV0ZXJQcm92aWRlciwgU3RhY2sgfSBmcm9tICdAYXdzLWNkay9jZGsnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgY2xhc3NlcyB0aGF0IGNhbiBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgbWFjaGluZSBpbWFnZSB0byB1c2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWFjaGluZUltYWdlU291cmNlIHtcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgaW1hZ2UgdG8gdXNlIGluIHRoZSBnaXZlbiBjb250ZXh0XG4gICAqL1xuICBnZXRJbWFnZShwYXJlbnQ6IENvbnN0cnVjdCk6IE1hY2hpbmVJbWFnZTtcbn1cblxuLyoqXG4gKiBTZWxlY3QgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBpbmRpY2F0ZWQgV2luZG93cyB2ZXJzaW9uXG4gKlxuICogVGhlIEFNSSBJRCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgdmFsdWVzIHB1Ymxpc2hlZCB0byB0aGUgU1NNIHBhcmFtZXRlciBzdG9yZS5cbiAqXG4gKiBodHRwczovL2F3cy5hbWF6b24uY29tL2Jsb2dzL210L3F1ZXJ5LWZvci10aGUtbGF0ZXN0LXdpbmRvd3MtYW1pLXVzaW5nLXN5c3RlbXMtbWFuYWdlci1wYXJhbWV0ZXItc3RvcmUvXG4gKi9cbmV4cG9ydCBjbGFzcyBXaW5kb3dzSW1hZ2UgaW1wbGVtZW50cyBJTWFjaGluZUltYWdlU291cmNlICB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdmVyc2lvbjogV2luZG93c1ZlcnNpb24pIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGltYWdlIHRvIHVzZSBpbiB0aGUgZ2l2ZW4gY29udGV4dFxuICAgKi9cbiAgcHVibGljIGdldEltYWdlKHBhcmVudDogQ29uc3RydWN0KTogTWFjaGluZUltYWdlIHtcbiAgICBjb25zdCBzc21Qcm92aWRlciA9IG5ldyBTU01QYXJhbWV0ZXJQcm92aWRlcihwYXJlbnQsIHtcbiAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuaW1hZ2VQYXJhbWV0ZXJOYW1lKHRoaXMudmVyc2lvbiksXG4gICAgfSk7XG5cbiAgICBjb25zdCBhbWkgPSBzc21Qcm92aWRlci5wYXJhbWV0ZXJWYWx1ZSgpO1xuICAgIHJldHVybiBuZXcgTWFjaGluZUltYWdlKGFtaSwgbmV3IFdpbmRvd3NPUygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgdGhlIFNTTSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIGdpdmVuIFdpbmRvd3MgaW1hZ2VcbiAgICovXG4gIHByaXZhdGUgaW1hZ2VQYXJhbWV0ZXJOYW1lKHZlcnNpb246IFdpbmRvd3NWZXJzaW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJy9hd3Mvc2VydmljZS9hbWktd2luZG93cy1sYXRlc3QvJyArIHZlcnNpb247XG4gIH1cbn1cblxuLyoqXG4gKiBBbWF6b24gTGludXggaW1hZ2UgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFtYXpvbkxpbnV4SW1hZ2VQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGF0IGdlbmVyYXRpb24gb2YgQW1hem9uIExpbnV4IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBBbWF6b25MaW51eFxuICAgKi9cbiAgZ2VuZXJhdGlvbj86IEFtYXpvbkxpbnV4R2VuZXJhdGlvbjtcblxuICAvKipcbiAgICogV2hhdCBlZGl0aW9uIG9mIEFtYXpvbiBMaW51eCB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgU3RhbmRhcmRcbiAgICovXG4gIGVkaXRpb24/OiBBbWF6b25MaW51eEVkaXRpb247XG5cbiAgLyoqXG4gICAqIFZpcnR1YWxpemF0aW9uIHR5cGVcbiAgICpcbiAgICogQGRlZmF1bHQgSFZNXG4gICAqL1xuICB2aXJ0dWFsaXphdGlvbj86IEFtYXpvbkxpbnV4VmlydDtcblxuICAvKipcbiAgICogV2hhdCBzdG9yYWdlIGJhY2tlZCBpbWFnZSB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgR2VuZXJhbFB1cnBvc2VcbiAgICovXG4gIHN0b3JhZ2U/OiBBbWF6b25MaW51eFN0b3JhZ2U7XG59XG5cbi8qKlxuICogU2VsZWN0cyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgQW1hem9uIExpbnV4XG4gKlxuICogVGhlIEFNSSBJRCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgdmFsdWVzIHB1Ymxpc2hlZCB0byB0aGUgU1NNIHBhcmFtZXRlciBzdG9yZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFtYXpvbkxpbnV4SW1hZ2UgaW1wbGVtZW50cyBJTWFjaGluZUltYWdlU291cmNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBnZW5lcmF0aW9uOiBBbWF6b25MaW51eEdlbmVyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgZWRpdGlvbjogQW1hem9uTGludXhFZGl0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHZpcnR1YWxpemF0aW9uOiBBbWF6b25MaW51eFZpcnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZTogQW1hem9uTGludXhTdG9yYWdlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzPzogQW1hem9uTGludXhJbWFnZVByb3BzKSB7XG4gICAgdGhpcy5nZW5lcmF0aW9uID0gKHByb3BzICYmIHByb3BzLmdlbmVyYXRpb24pIHx8IEFtYXpvbkxpbnV4R2VuZXJhdGlvbi5BbWF6b25MaW51eDtcbiAgICB0aGlzLmVkaXRpb24gPSAocHJvcHMgJiYgcHJvcHMuZWRpdGlvbikgfHwgQW1hem9uTGludXhFZGl0aW9uLlN0YW5kYXJkO1xuICAgIHRoaXMudmlydHVhbGl6YXRpb24gPSAocHJvcHMgJiYgcHJvcHMudmlydHVhbGl6YXRpb24pIHx8IEFtYXpvbkxpbnV4VmlydC5IVk07XG4gICAgdGhpcy5zdG9yYWdlID0gKHByb3BzICYmIHByb3BzLnN0b3JhZ2UpIHx8IEFtYXpvbkxpbnV4U3RvcmFnZS5HZW5lcmFsUHVycG9zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGltYWdlIHRvIHVzZSBpbiB0aGUgZ2l2ZW4gY29udGV4dFxuICAgKi9cbiAgcHVibGljIGdldEltYWdlKHBhcmVudDogQ29uc3RydWN0KTogTWFjaGluZUltYWdlIHtcbiAgICBjb25zdCBwYXJ0czogQXJyYXk8c3RyaW5nfHVuZGVmaW5lZD4gPSBbXG4gICAgICB0aGlzLmdlbmVyYXRpb24sXG4gICAgICAnYW1pJyxcbiAgICAgIHRoaXMuZWRpdGlvbiAhPT0gQW1hem9uTGludXhFZGl0aW9uLlN0YW5kYXJkID8gdGhpcy5lZGl0aW9uIDogdW5kZWZpbmVkLFxuICAgICAgdGhpcy52aXJ0dWFsaXphdGlvbixcbiAgICAgICd4ODZfNjQnLCAvLyBObyAzMi1iaXRzIGltYWdlcyB2ZW5kZWQgdGhyb3VnaCB0aGlzXG4gICAgICB0aGlzLnN0b3JhZ2VcbiAgICBdLmZpbHRlcih4ID0+IHggIT09IHVuZGVmaW5lZCk7IC8vIEdldCByaWQgb2YgdW5kZWZpbmVkc1xuXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9ICcvYXdzL3NlcnZpY2UvYW1pLWFtYXpvbi1saW51eC1sYXRlc3QvJyArIHBhcnRzLmpvaW4oJy0nKTtcblxuICAgIGNvbnN0IHNzbVByb3ZpZGVyID0gbmV3IFNTTVBhcmFtZXRlclByb3ZpZGVyKHBhcmVudCwge1xuICAgICAgcGFyYW1ldGVyTmFtZSxcbiAgICB9KTtcbiAgICBjb25zdCBhbWkgPSBzc21Qcm92aWRlci5wYXJhbWV0ZXJWYWx1ZSgpO1xuICAgIHJldHVybiBuZXcgTWFjaGluZUltYWdlKGFtaSwgbmV3IExpbnV4T1MoKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGF0IGdlbmVyYXRpb24gb2YgQW1hem9uIExpbnV4IHRvIHVzZVxuICovXG5leHBvcnQgZW51bSBBbWF6b25MaW51eEdlbmVyYXRpb24ge1xuICAvKipcbiAgICogQW1hem9uIExpbnV4XG4gICAqL1xuICBBbWF6b25MaW51eCA9ICdhbXpuJyxcblxuICAvKipcbiAgICogQW1hem9uIExpbnV4IDJcbiAgICovXG4gIEFtYXpvbkxpbnV4MiA9ICdhbXpuMicsXG59XG5cbi8qKlxuICogQW1hem9uIExpbnV4IGVkaXRpb25cbiAqL1xuZXhwb3J0IGVudW0gQW1hem9uTGludXhFZGl0aW9uIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIGVkaXRpb25cbiAgICovXG4gIFN0YW5kYXJkID0gJ3N0YW5kYXJkJyxcblxuICAvKipcbiAgICogTWluaW1hbCBlZGl0aW9uXG4gICAqL1xuICBNaW5pbWFsID0gJ21pbmltYWwnXG59XG5cbi8qKlxuICogVmlydHVhbGl6YXRpb24gdHlwZSBmb3IgQW1hem9uIExpbnV4XG4gKi9cbmV4cG9ydCBlbnVtIEFtYXpvbkxpbnV4VmlydCB7XG4gIC8qKlxuICAgKiBIVk0gdmlydHVhbGl6YXRpb24gKHJlY29tbWVuZGVkKVxuICAgKi9cbiAgSFZNID0gJ2h2bScsXG5cbiAgLyoqXG4gICAqIFBWIHZpcnR1YWxpemF0aW9uXG4gICAqL1xuICBQViA9ICdwdidcbn1cblxuZXhwb3J0IGVudW0gQW1hem9uTGludXhTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEVCUy1iYWNrZWQgc3RvcmFnZVxuICAgKi9cbiAgRUJTID0gJ2VicycsXG5cbiAgLyoqXG4gICAqIFMzLWJhY2tlZCBzdG9yYWdlXG4gICAqL1xuICBTMyA9ICdlYnMnLFxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIFB1cnBvc2UtYmFzZWQgc3RvcmFnZSAocmVjb21tZW5kZWQpXG4gICAqL1xuICBHZW5lcmFsUHVycG9zZSA9ICdncDInLFxufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhIExpbnV4IG1hY2hpbmUgaW1hZ2UgZnJvbSBhbiBBTUkgbWFwXG4gKlxuICogTGludXggaW1hZ2VzIElEcyBhcmUgbm90IHB1Ymxpc2hlZCB0byBTU00gcGFyYW1ldGVyIHN0b3JlIHlldCwgc28geW91J2xsIGhhdmUgdG9cbiAqIG1hbnVhbGx5IHNwZWNpZnkgYW4gQU1JIG1hcC5cbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNMaW51eEltYWdlIGltcGxlbWVudHMgSU1hY2hpbmVJbWFnZVNvdXJjZSAge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFtaU1hcDoge1tyZWdpb246IHN0cmluZ106IHN0cmluZ30pIHtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbWFnZShwYXJlbnQ6IENvbnN0cnVjdCk6IE1hY2hpbmVJbWFnZSB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5maW5kKHBhcmVudCk7XG4gICAgY29uc3QgcmVnaW9uID0gc3RhY2sucmVxdWlyZVJlZ2lvbignQU1JIGNhbm5vdCBiZSBkZXRlcm1pbmVkJyk7XG4gICAgY29uc3QgYW1pID0gdGhpcy5hbWlNYXBbcmVnaW9uXTtcbiAgICBpZiAoIWFtaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBBTUkgaW4gQU1JIG1hcDogbm8gQU1JIHNwZWNpZmllZCBmb3IgcmVnaW9uICcke3JlZ2lvbn0nYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNYWNoaW5lSW1hZ2UoYW1pLCBuZXcgTGludXhPUygpKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBXaW5kb3dzIHZlcnNpb24gdG8gdXNlIGZvciB0aGUgV2luZG93c0ltYWdlXG4gKi9cbmV4cG9ydCBlbnVtIFdpbmRvd3NWZXJzaW9uIHtcbiAgV2luZG93c1NlcnZlcjIwMTZUdXJrc2loRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1UdXJraXNoLUZ1bGwtQmFzZScsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2U3dlZGlzaEZ1bGxCYXNlID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtU3dlZGlzaC1GdWxsLUJhc2UnLFxuICBXaW5kb3dzU2VydmVyMjAxNlNwYW5pc2hGdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LVNwYW5pc2gtRnVsbC1CYXNlJyxcbiAgV2luZG93c1NlcnZlcjIwMTZSdXNzaWFuRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1SdXNzaWFuLUZ1bGwtQmFzZScsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2UG9ydHVndWVzZVBvcnR1Z2FsRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1Qb3J0dWd1ZXNlX1BvcnR1Z2FsLUZ1bGwtQmFzZScsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2UG9ydHVndWVzZUJyYXppbEZ1bGxCYXNlID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtUG9ydHVndWVzZV9CcmF6aWwtRnVsbC1CYXNlJyxcbiAgV2luZG93c1NlcnZlcjIwMTZQb2xpc2hGdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LVBvbGlzaC1GdWxsLUJhc2UnLFxuICBXaW5kb3dzU2VydmVyMjAxNktvcmVhbkZ1bGxTUUwyMDE2QmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUtvcmVhbi1GdWxsLVNRTF8yMDE2X1NQMV9TdGFuZGFyZCcsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2S29yZWFuRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1Lb3JlYW4tRnVsbC1CYXNlJyxcbiAgV2luZG93c1NlcnZlcjIwMTZKYXBhbmVzZUZ1bGxTUUwyMDE2V2ViID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtSmFwYW5lc2UtRnVsbC1TUUxfMjAxNl9TUDFfV2ViJyxcbiAgV2luZG93c1NlcnZlcjIwMTZKYXBhbmVzZUZ1bGxTUUwyMDE2U3RhbmRhcmQgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1KYXBhbmVzZS1GdWxsLVNRTF8yMDE2X1NQMV9TdGFuZGFyZCcsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2SmFwYW5lc2VGdWxsU1FMMjAxNkV4cHJlc3MgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1KYXBhbmVzZS1GdWxsLVNRTF8yMDE2X1NQMV9FeHByZXNzJyxcbiAgV2luZG93c1NlcnZlcjIwMTZKYXBhbmVzZUZ1bGxTUUwyMDE2RW50ZXJwcmlzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUphcGFuZXNlLUZ1bGwtU1FMXzIwMTZfU1AxX0VudGVycHJpc2UnLFxuICBXaW5kb3dzU2VydmVyMjAxNkphcGFuZXNlRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1KYXBhbmVzZS1GdWxsLUJhc2UnLFxuICBXaW5kb3dzU2VydmVyMjAxNkl0YWxpYW5GdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUl0YWxpYW4tRnVsbC1CYXNlJyxcbiAgV2luZG93c1NlcnZlcjIwMTZIdW5nYXJpYW5GdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUh1bmdhcmlhbi1GdWxsLUJhc2UnLFxuICBXaW5kb3dzU2VydmVyMjAxNkdlcm1hbkZ1bGxCYXNlID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtR2VybWFuLUZ1bGwtQmFzZScsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2RnJlbmNoRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1GcmVuY2gtRnVsbC1CYXNlJyxcbiAgV2luZG93c1NlcnZlcjIwMTZFbmdsaXNoTmFub0Jhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1FbmdsaXNoLU5hbm8tQmFzZScsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2RW5nbGlzaEZ1bGxTUUwyMDE3V2ViID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtRW5nbGlzaC1GdWxsLVNRTF8yMDE3X1dlYicsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2RW5nbGlzaEZ1bGxTUUwyMDE3U3RhbmRhcmQgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1FbmdsaXNoLUZ1bGwtU1FMXzIwMTdfU3RhbmRhcmQnLFxuICBXaW5kb3dzU2VydmVyMjAxNkVuZ2xpc2hGdWxsU1FMMjAxN0V4cHJlc3MgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1FbmdsaXNoLUZ1bGwtU1FMXzIwMTdfRXhwcmVzcycsXG4gIFdpbmRvd3NTZXJ2ZXIyMDE2RW5nbGlzaEZ1bGxTUUwyMDE3RW50ZXJwcmlzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUVuZ2xpc2gtRnVsbC1TUUxfMjAxN19FbnRlcnByaXNlJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIG1hY2hpbmUgdG8gYmUgbGF1bmNoZWRcbiAqXG4gKiBDb21iaW5lcyBhbiBBTUkgSUQgd2l0aCBhbiBPUy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hY2hpbmVJbWFnZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpbWFnZUlkOiBzdHJpbmcsIHB1YmxpYyByZWFkb25seSBvczogT3BlcmF0aW5nU3lzdGVtKSB7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgT1MgdHlwZSBvZiBhIHBhcnRpY3VsYXIgaW1hZ2VcbiAqL1xuZXhwb3J0IGVudW0gT3BlcmF0aW5nU3lzdGVtVHlwZSB7XG4gIExpbnV4LFxuICBXaW5kb3dzLFxufVxuXG4vKipcbiAqIEFic3RyYWN0aW9uIG9mIE9TIGZlYXR1cmVzIHdlIG5lZWQgdG8gYmUgYXdhcmUgb2ZcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9wZXJhdGluZ1N5c3RlbSB7XG4gIHB1YmxpYyBhYnN0cmFjdCBjcmVhdGVVc2VyRGF0YShzY3JpcHRzOiBzdHJpbmdbXSk6IHN0cmluZztcbiAgYWJzdHJhY3QgZ2V0IHR5cGUoKTogT3BlcmF0aW5nU3lzdGVtVHlwZTtcbn1cblxuLyoqXG4gKiBPUyBmZWF0dXJlcyBzcGVjaWFsaXplZCBmb3IgV2luZG93c1xuICovXG5leHBvcnQgY2xhc3MgV2luZG93c09TIGV4dGVuZHMgT3BlcmF0aW5nU3lzdGVtIHtcbiAgcHVibGljIGNyZWF0ZVVzZXJEYXRhKHNjcmlwdHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYDxwb3dlcnNoZWxsPiR7c2NyaXB0cy5qb2luKCdcXG4nKX08L3Bvd2Vyc2hlbGw+YDtcbiAgfVxuXG4gIGdldCB0eXBlKCk6IE9wZXJhdGluZ1N5c3RlbVR5cGUge1xuICAgIHJldHVybiBPcGVyYXRpbmdTeXN0ZW1UeXBlLldpbmRvd3M7XG4gIH1cbn1cblxuLyoqXG4gKiBPUyBmZWF0dXJlcyBzcGVjaWFsaXplZCBmb3IgTGludXhcbiAqL1xuZXhwb3J0IGNsYXNzIExpbnV4T1MgZXh0ZW5kcyBPcGVyYXRpbmdTeXN0ZW0ge1xuICBwdWJsaWMgY3JlYXRlVXNlckRhdGEoc2NyaXB0czogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiAnIyEvYmluL2Jhc2hcXG4nICsgc2NyaXB0cy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCB0eXBlKCk6IE9wZXJhdGluZ1N5c3RlbVR5cGUge1xuICAgIHJldHVybiBPcGVyYXRpbmdTeXN0ZW1UeXBlLkxpbnV4O1xuICB9XG59XG4iXX0=

@@ -13,3 +13,3 @@ "use strict";

this.canInlineRule = false;
this.connections = new connections_1.Connections({ securityGroup: this });
this.connections = new connections_1.Connections({ securityGroups: [this] });
}

@@ -254,2 +254,2 @@ /**

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZWN1cml0eS1ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUFxRjtBQUNyRiwrQ0FBMEQ7QUFDMUQsbURBQWlEO0FBV2pEOztHQUVHO0FBQ0gsTUFBc0IsZ0JBQWlCLFNBQVEsZUFBUztJQUF4RDs7UUFTa0Isa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQTREekUsQ0FBQztJQXJFQzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBaUIsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDOUUsT0FBTyxJQUFJLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQVdNLGNBQWMsQ0FBQyxJQUF3QixFQUFFLFVBQXNCLEVBQUUsV0FBb0I7UUFDMUYsSUFBSSxFQUFFLEdBQUcsUUFBUSxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQy9DLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUM3QixXQUFXLEdBQUcsRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTFCLGtCQUFrQjtRQUNsQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQ3ZDLElBQUksOEJBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxrQkFDdEQsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLElBQzFCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUN4QixVQUFVLENBQUMsVUFBVSxFQUFFLElBQzFCLFdBQVcsSUFDWCxDQUFDO1NBQ0o7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cHV0LCBUYWdNYW5hZ2VyLCBUYWdzLCBUb2tlbiB9IGZyb20gJ0Bhd3MtY2RrL2Nkayc7XG5pbXBvcnQgeyBDb25uZWN0aW9ucywgSUNvbm5lY3RhYmxlIH0gZnJvbSAnLi9jb25uZWN0aW9ucyc7XG5pbXBvcnQgeyBjbG91ZGZvcm1hdGlvbiB9IGZyb20gJy4vZWMyLmdlbmVyYXRlZCc7XG5pbXBvcnQgeyBJUG9ydFJhbmdlLCBJU2VjdXJpdHlHcm91cFJ1bGUgfSBmcm9tICcuL3NlY3VyaXR5LWdyb3VwLXJ1bGUnO1xuaW1wb3J0IHsgVnBjTmV0d29ya1JlZiB9IGZyb20gJy4vdnBjLXJlZic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHlHcm91cFJlZlByb3BzIHtcbiAgLyoqXG4gICAqIElEIG9mIHNlY3VyaXR5IGdyb3VwXG4gICAqL1xuICBzZWN1cml0eUdyb3VwSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIFNlY3VyaXR5R3JvdXAgdGhhdCBpcyBub3QgY3JlYXRlZCBpbiB0aGlzIHRlbXBsYXRlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZWN1cml0eUdyb3VwUmVmIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVNlY3VyaXR5R3JvdXBSdWxlLCBJQ29ubmVjdGFibGUge1xuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIFNlY3VyaXR5R3JvdXBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaW1wb3J0KHBhcmVudDogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2VjdXJpdHlHcm91cFJlZlByb3BzKTogU2VjdXJpdHlHcm91cFJlZiB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZFNlY3VyaXR5R3JvdXAocGFyZW50LCBpZCwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FuSW5saW5lUnVsZSA9IGZhbHNlO1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoeyBzZWN1cml0eUdyb3VwOiB0aGlzIH0pO1xuXG4gIC8qKlxuICAgKiBGSVhNRTogV2hlcmUgdG8gcGxhY2UgdGhpcz8/XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFBvcnRSYW5nZT86IElQb3J0UmFuZ2U7XG5cbiAgcHVibGljIGFkZEluZ3Jlc3NSdWxlKHBlZXI6IElTZWN1cml0eUdyb3VwUnVsZSwgY29ubmVjdGlvbjogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBsZXQgaWQgPSBgZnJvbSAke3BlZXIudW5pcXVlSWR9OiR7Y29ubmVjdGlvbn1gO1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXNjcmlwdGlvbiA9IGlkO1xuICAgIH1cbiAgICBpZCA9IGlkLnJlcGxhY2UoJy8nLCAnXycpO1xuXG4gICAgLy8gU2tpcCBkdXBsaWNhdGVzXG4gICAgaWYgKHRoaXMudHJ5RmluZENoaWxkKGlkKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXcgY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cEluZ3Jlc3NSZXNvdXJjZSh0aGlzLCBpZCwge1xuICAgICAgICBncm91cElkOiB0aGlzLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgLi4ucGVlci50b0luZ3Jlc3NSdWxlSlNPTigpLFxuICAgICAgICAuLi5jb25uZWN0aW9uLnRvUnVsZUpTT04oKSxcbiAgICAgICAgZGVzY3JpcHRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRFZ3Jlc3NSdWxlKHBlZXI6IElTZWN1cml0eUdyb3VwUnVsZSwgY29ubmVjdGlvbjogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBsZXQgaWQgPSBgdG8gJHtwZWVyLnVuaXF1ZUlkfToke2Nvbm5lY3Rpb259YDtcbiAgICBpZiAoZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVzY3JpcHRpb24gPSBpZDtcbiAgICB9XG4gICAgaWQgPSBpZC5yZXBsYWNlKCcvJywgJ18nKTtcblxuICAgIC8vIFNraXAgZHVwbGljYXRlc1xuICAgIGlmICh0aGlzLnRyeUZpbmRDaGlsZChpZCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBFZ3Jlc3NSZXNvdXJjZSh0aGlzLCBpZCwge1xuICAgICAgICBncm91cElkOiB0aGlzLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgLi4ucGVlci50b0VncmVzc1J1bGVKU09OKCksXG4gICAgICAgIC4uLmNvbm5lY3Rpb24udG9SdWxlSlNPTigpLFxuICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvSW5ncmVzc1J1bGVKU09OKCk6IGFueSB7XG4gICAgcmV0dXJuIHsgc291cmNlU2VjdXJpdHlHcm91cElkOiB0aGlzLnNlY3VyaXR5R3JvdXBJZCB9O1xuICB9XG5cbiAgcHVibGljIHRvRWdyZXNzUnVsZUpTT04oKTogYW55IHtcbiAgICByZXR1cm4geyBkZXN0aW5hdGlvblNlY3VyaXR5R3JvdXBJZDogdGhpcy5zZWN1cml0eUdyb3VwSWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdGhpcyBTZWN1cml0eUdyb3VwIGZvciB1c2UgaW4gYSBkaWZmZXJlbnQgU3RhY2tcbiAgICovXG4gIHB1YmxpYyBleHBvcnQoKTogU2VjdXJpdHlHcm91cFJlZlByb3BzIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VjdXJpdHlHcm91cElkOiBuZXcgT3V0cHV0KHRoaXMsICdTZWN1cml0eUdyb3VwSWQnLCB7IHZhbHVlOiB0aGlzLnNlY3VyaXR5R3JvdXBJZCB9KS5tYWtlSW1wb3J0VmFsdWUoKS50b1N0cmluZygpXG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHlHcm91cFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZWN1cml0eSBncm91cC4gRm9yIHZhbGlkIHZhbHVlcywgc2VlIHRoZSBHcm91cE5hbWVcbiAgICogcGFyYW1ldGVyIG9mIHRoZSBDcmVhdGVTZWN1cml0eUdyb3VwIGFjdGlvbiBpbiB0aGUgQW1hem9uIEVDMiBBUElcbiAgICogUmVmZXJlbmNlLlxuICAgKlxuICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIGFuIGV4cGxpY2l0IGdyb3VwIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgR3JvdXBOYW1lLCBBV1MgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGVzIGFcbiAgICogdW5pcXVlIHBoeXNpY2FsIElEIGFuZCB1c2VzIHRoYXQgSUQgZm9yIHRoZSBncm91cCBuYW1lLlxuICAgKi9cbiAgZ3JvdXBOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBzZWN1cml0eSBncm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGRlZmF1bHQgbmFtZSB3aWxsIGJlIHRoZSBjb25zdHJ1Y3QncyBDREsgcGF0aC5cbiAgICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHJlc291cmNlIHRhZ3MgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHNlY3VyaXR5IGdyb3VwLlxuICAgKi9cbiAgdGFncz86IFRhZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSBzZWN1cml0eSBncm91cC5cbiAgICovXG4gIHZwYzogVnBjTmV0d29ya1JlZjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyBhbGwgb3V0Ym91bmQgdHJhZmZpYyBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlLCB0aGVyZSB3aWxsIG9ubHkgYmUgYSBzaW5nbGUgZWdyZXNzIHJ1bGUgd2hpY2ggYWxsb3dzIGFsbFxuICAgKiBvdXRib3VuZCB0cmFmZmljLiBJZiB0aGlzIGlzIHNldCB0byBmYWxzZSwgbm8gb3V0Ym91bmQgdHJhZmZpYyB3aWxsIGJlIGFsbG93ZWQgYnlcbiAgICogZGVmYXVsdCBhbmQgYWxsIGVncmVzcyB0cmFmZmljIG11c3QgYmUgZXhwbGljaXRseSBhdXRob3JpemVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhbGxvd0FsbE91dGJvdW5kPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIEFtYXpvbiBFQzIgc2VjdXJpdHkgZ3JvdXAgd2l0aGluIGEgVlBDLlxuICpcbiAqIFRoaXMgY2xhc3MgaGFzIGFuIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9uIG92ZXIgU2VjdXJpdHlHcm91cFJlZiB0aGF0IGl0IGNhbiBhbHNvIGNyZWF0ZVxuICogaW5saW5lIGluZ3Jlc3MgYW5kIGVncmVzcyBydWxlICh3aGljaCBzYXZlcyBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIHJlc291cmNlcyBpbnNpZGVcbiAqIHRoZSB0ZW1wbGF0ZSkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWN1cml0eUdyb3VwIGV4dGVuZHMgU2VjdXJpdHlHcm91cFJlZiBpbXBsZW1lbnRzIElUYWdnYWJsZSB7XG4gIC8qKlxuICAgKiBBbiBhdHRyaWJ1dGUgdGhhdCByZXByZXNlbnRzIHRoZSBzZWN1cml0eSBncm91cCBuYW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyb3VwTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBhdHRyaWJ1dGUgdGhhdCByZXByZXNlbnRzIHRoZSBwaHlzaWNhbCBWUEMgSUQgdGhpcyBzZWN1cml0eSBncm91cCBpcyBwYXJ0IG9mLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgc2VjdXJpdHkgZ3JvdXBcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZWN1cml0eUdyb3VwSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogTWFuYWdlIHRhZ3MgZm9yIHRoaXMgY29uc3RydWN0IGFuZCBjaGlsZHJlblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhZ3M6IFRhZ01hbmFnZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWN1cml0eUdyb3VwOiBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwUmVzb3VyY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0SW5ncmVzc1J1bGVzOiBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwUmVzb3VyY2UuSW5ncmVzc1Byb3BlcnR5W10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXJlY3RFZ3Jlc3NSdWxlczogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlLkVncmVzc1Byb3BlcnR5W10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93QWxsT3V0Ym91bmQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFNlY3VyaXR5R3JvdXBQcm9wcykge1xuICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICB0aGlzLnRhZ3MgPSBuZXcgVGFnTWFuYWdlcih0aGlzLCB7IGluaXRpYWxUYWdzOiBwcm9wcy50YWdzfSk7XG4gICAgY29uc3QgZ3JvdXBEZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uIHx8IHRoaXMucGF0aDtcblxuICAgIHRoaXMuYWxsb3dBbGxPdXRib3VuZCA9IHByb3BzLmFsbG93QWxsT3V0Ym91bmQgIT09IGZhbHNlO1xuXG4gICAgdGhpcy5zZWN1cml0eUdyb3VwID0gbmV3IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBncm91cE5hbWU6IHByb3BzLmdyb3VwTmFtZSxcbiAgICAgIGdyb3VwRGVzY3JpcHRpb24sXG4gICAgICBzZWN1cml0eUdyb3VwSW5ncmVzczogbmV3IFRva2VuKCgpID0+IHRoaXMuZGlyZWN0SW5ncmVzc1J1bGVzKSxcbiAgICAgIHNlY3VyaXR5R3JvdXBFZ3Jlc3M6IG5ldyBUb2tlbigoKSA9PiB0aGlzLmRpcmVjdEVncmVzc1J1bGVzKSxcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBJZCA9IHRoaXMuc2VjdXJpdHlHcm91cC5zZWN1cml0eUdyb3VwSWQ7XG4gICAgdGhpcy5ncm91cE5hbWUgPSB0aGlzLnNlY3VyaXR5R3JvdXAuc2VjdXJpdHlHcm91cE5hbWU7XG4gICAgdGhpcy52cGNJZCA9IHRoaXMuc2VjdXJpdHlHcm91cC5zZWN1cml0eUdyb3VwVnBjSWQ7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRFZ3Jlc3NSdWxlKCk7XG4gIH1cblxuICBwdWJsaWMgYWRkSW5ncmVzc1J1bGUocGVlcjogSVNlY3VyaXR5R3JvdXBSdWxlLCBjb25uZWN0aW9uOiBJUG9ydFJhbmdlLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGlmICghcGVlci5jYW5JbmxpbmVSdWxlIHx8ICFjb25uZWN0aW9uLmNhbklubGluZVJ1bGUpIHtcbiAgICAgIHN1cGVyLmFkZEluZ3Jlc3NSdWxlKHBlZXIsIGNvbm5lY3Rpb24sIGRlc2NyaXB0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVzY3JpcHRpb24gPSBgZnJvbSAke3BlZXIudW5pcXVlSWR9OiR7Y29ubmVjdGlvbn1gO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGlyZWN0SW5ncmVzc1J1bGUoe1xuICAgICAgLi4ucGVlci50b0luZ3Jlc3NSdWxlSlNPTigpLFxuICAgICAgLi4uY29ubmVjdGlvbi50b1J1bGVKU09OKCksXG4gICAgICBkZXNjcmlwdGlvblxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZEVncmVzc1J1bGUocGVlcjogSVNlY3VyaXR5R3JvdXBSdWxlLCBjb25uZWN0aW9uOiBJUG9ydFJhbmdlLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGlmICh0aGlzLmFsbG93QWxsT3V0Ym91bmQpIHtcbiAgICAgIC8vIEluIHRoZSBjYXNlIG9mIFwiYWxsb3dBbGxPdXRib3VuZFwiLCB3ZSBkb24ndCBhZGQgYW55IG1vcmUgcnVsZXMuIFRoZXJlXG4gICAgICAvLyBpcyBvbmx5IG9uZSBydWxlIHdoaWNoIGFsbG93cyBhbGwgdHJhZmZpYyBhbmQgdGhhdCBzdWJzdW1lcyBhbnkgb3RoZXJcbiAgICAgIC8vIHJ1bGUuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIGJvZ3VzIHJ1bGUgZXhpc3RzIHdlIGNhbiBub3cgcmVtb3ZlIGl0IGJlY2F1c2UgdGhlXG4gICAgICAvLyBwcmVzZW5jZSBvZiBhbnkgb3RoZXIgcnVsZSB3aWxsIGdldCByaWQgb2YgRUMyJ3MgaW1wbGljaXQgXCJhbGxcbiAgICAgIC8vIG91dGJvdW5kXCIgcnVsZSBhbnl3YXkuXG4gICAgICB0aGlzLnJlbW92ZU5vVHJhZmZpY1J1bGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIXBlZXIuY2FuSW5saW5lUnVsZSB8fCAhY29ubmVjdGlvbi5jYW5JbmxpbmVSdWxlKSB7XG4gICAgICBzdXBlci5hZGRFZ3Jlc3NSdWxlKHBlZXIsIGNvbm5lY3Rpb24sIGRlc2NyaXB0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVzY3JpcHRpb24gPSBgZnJvbSAke3BlZXIudW5pcXVlSWR9OiR7Y29ubmVjdGlvbn1gO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAuLi5wZWVyLnRvRWdyZXNzUnVsZUpTT04oKSxcbiAgICAgIC4uLmNvbm5lY3Rpb24udG9SdWxlSlNPTigpLFxuICAgICAgZGVzY3JpcHRpb25cbiAgICB9O1xuXG4gICAgaWYgKGlzQWxsVHJhZmZpY1J1bGUocnVsZSkpIHtcbiAgICAgIC8vIFdlIGNhbm5vdCBhbGxvdyB0aGlzOyBpZiBzb21lb25lIGFkZHMgdGhlIHJ1bGUgaW4gdGhpcyB3YXksIGl0IHdpbGwgYmVcbiAgICAgIC8vIHJlbW92ZWQgYWdhaW4gaWYgdGhleSBhZGQgb3RoZXIgcnVsZXMuIFdlIGFsc28gY2FuJ3QgYXV0b21hdGljYWxseSBzd2l0Y2hcbiAgICAgIC8vIHRvIFwiYWxsT3V0Ym91bmQ9dHJ1ZVwiIG1vZGUsIGJlY2F1c2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IGVtaXR0ZWRcbiAgICAgIC8vIEVncmVzc1J1bGUgb2JqZWN0cyAod2hpY2ggY291bnQgYXMgcnVsZXMgYWRkZWQgbGF0ZXIpIGFuZCB0aGVyZSdzIG5vIHdheVxuICAgICAgLy8gdG8gcmVjYWxsIHRob3NlLiBCZXR0ZXIgdG8gcHJldmVudCB0aGlzIGZvciBub3cuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhZGQgYW4gXCJhbGwgdHJhZmZpY1wiIGVncmVzcyBydWxlIGluIHRoaXMgd2F5OyBzZXQgYWxsb3dBbGxPdXRib3VuZD10cnVlIG9uIHRoZSBTZWN1cml0eUdyb3VwIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREaXJlY3RFZ3Jlc3NSdWxlKHJ1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGRpcmVjdCBpbmdyZXNzIHJ1bGVcbiAgICovXG4gIHByaXZhdGUgYWRkRGlyZWN0SW5ncmVzc1J1bGUocnVsZTogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlLkluZ3Jlc3NQcm9wZXJ0eSkge1xuICAgIGlmICghdGhpcy5oYXNJbmdyZXNzUnVsZShydWxlKSkge1xuICAgICAgdGhpcy5kaXJlY3RJbmdyZXNzUnVsZXMucHVzaChydWxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGluZ3Jlc3MgcnVsZSBleGlzdHMgb24gdGhlIGdyb3VwXG4gICAqL1xuICBwcml2YXRlIGhhc0luZ3Jlc3NSdWxlKHJ1bGU6IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZS5JbmdyZXNzUHJvcGVydHkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXJlY3RJbmdyZXNzUnVsZXMuZmluZEluZGV4KHIgPT4gaW5ncmVzc1J1bGVzRXF1YWwociwgcnVsZSkpID4gLTE7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZGlyZWN0IGVncmVzcyBydWxlXG4gICAqL1xuICBwcml2YXRlIGFkZERpcmVjdEVncmVzc1J1bGUocnVsZTogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlLkVncmVzc1Byb3BlcnR5KSB7XG4gICAgaWYgKCF0aGlzLmhhc0VncmVzc1J1bGUocnVsZSkpIHtcbiAgICAgIHRoaXMuZGlyZWN0RWdyZXNzUnVsZXMucHVzaChydWxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGVncmVzcyBydWxlIGV4aXN0cyBvbiB0aGUgZ3JvdXBcbiAgICovXG4gIHByaXZhdGUgaGFzRWdyZXNzUnVsZShydWxlOiBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwUmVzb3VyY2UuRWdyZXNzUHJvcGVydHkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXJlY3RFZ3Jlc3NSdWxlcy5maW5kSW5kZXgociA9PiBlZ3Jlc3NSdWxlc0VxdWFsKHIsIHJ1bGUpKSA+IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZGVmYXVsdCBlZ3Jlc3MgcnVsZSB0byB0aGUgc2VjdXJpdHlHcm91cFxuICAgKlxuICAgKiBUaGlzIGRlcGVuZHMgb24gYWxsb3dBbGxPdXRib3VuZDpcbiAgICpcbiAgICogLSBJZiBhbGxvd0FsbE91dGJvdW5kIGlzIHRydWUsIHdlICpURUNITklDQUxMWSogZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZywgYmVjYXVzZVxuICAgKiAgIEVDMiBpcyBnb2luZyB0byBjcmVhdGUgdGhpcyBkZWZhdWx0IHJ1bGUgYW55d2F5LiBCdXQsIGZvciBtYXhpbXVtIHJlYWRhYmlsaXR5XG4gICAqICAgb2YgdGhlIHRlbXBsYXRlLCB3ZSB3aWxsIGFkZCBvbmUgYW55d2F5LlxuICAgKiAtIElmIGFsbG93QWxsT3V0Ym91bmQgaXMgZmFsc2UsIHdlIGFkZCBhIGJvZ3VzIHJ1bGUgdGhhdCBtYXRjaGVzIG5vIHRyYWZmaWMgaW5cbiAgICogICBvcmRlciB0byBnZXQgcmlkIG9mIHRoZSBkZWZhdWx0IFwiYWxsIG91dGJvdW5kXCIgcnVsZSB0aGF0IEVDMiBjcmVhdGVzIGJ5IGRlZmF1bHQuXG4gICAqICAgSWYgb3RoZXIgcnVsZXMgaGFwcGVuIHRvIGdldCBhZGRlZCBsYXRlciwgd2UgcmVtb3ZlIHRoZSBib2d1cyBydWxlIGFnYWluIHNvXG4gICAqICAgdGhhdCBpdCBkb2Vzbid0IGNsdXR0ZXIgdXAgdGhlIHRlbXBsYXRlIHRvbyBtdWNoIChldmVuIHRob3VnaCB0aGF0J3Mgbm90XG4gICAqICAgc3RyaWN0bHkgbmVjZXNzYXJ5KS5cbiAgICovXG4gIHByaXZhdGUgYWRkRGVmYXVsdEVncmVzc1J1bGUoKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dBbGxPdXRib3VuZCkge1xuICAgICAgdGhpcy5kaXJlY3RFZ3Jlc3NSdWxlcy5wdXNoKEFMTE9XX0FMTF9SVUxFKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXJlY3RFZ3Jlc3NSdWxlcy5wdXNoKE1BVENIX05PX1RSQUZGSUMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGJvZ3VzIHJ1bGUgaWYgaXQgZXhpc3RzXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZU5vVHJhZmZpY1J1bGUoKSB7XG4gICAgY29uc3QgaSA9IHRoaXMuZGlyZWN0RWdyZXNzUnVsZXMuZmluZEluZGV4KHIgPT4gZWdyZXNzUnVsZXNFcXVhbChyLCBNQVRDSF9OT19UUkFGRklDKSk7XG4gICAgaWYgKGkgPiAtMSkge1xuICAgICAgdGhpcy5kaXJlY3RFZ3Jlc3NSdWxlcy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRWdyZXNzIHJ1bGUgdGhhdCBwdXJwb3NlbHkgbWF0Y2hlcyBubyB0cmFmZmljXG4gKlxuICogVGhpcyBpcyB1c2VkIGluIG9yZGVyIHRvIGRpc2FibGUgdGhlIFwiYWxsIHRyYWZmaWNcIiBkZWZhdWx0IG9mIFNlY3VyaXR5IEdyb3Vwcy5cbiAqXG4gKiBObyBtYWNoaW5lIGNhbiBldmVyIGFjdHVhbGx5IGhhdmUgdGhlIDI1NS4yNTUuMjU1LjI1NSBJUCBhZGRyZXNzLCBidXRcbiAqIGluIG9yZGVyIHRvIGxvY2sgaXQgZG93biBldmVuIG1vcmUgd2UnbGwgcmVzdHJpY3QgdG8gYSBub25leGlzdGVudFxuICogSUNNUCB0cmFmZmljIHR5cGUuXG4gKi9cbmNvbnN0IE1BVENIX05PX1RSQUZGSUMgPSB7XG4gIGNpZHJJcDogJzI1NS4yNTUuMjU1LjI1NS8zMicsXG4gIGRlc2NyaXB0aW9uOiAnRGlzYWxsb3cgYWxsIHRyYWZmaWMnLFxuICBpcFByb3RvY29sOiAnaWNtcCcsXG4gIGZyb21Qb3J0OiAyNTIsXG4gIHRvUG9ydDogODZcbn07XG5cbi8qKlxuICogRWdyZXNzIHJ1bGUgdGhhdCBtYXRjaGVzIGFsbCB0cmFmZmljXG4gKi9cbmNvbnN0IEFMTE9XX0FMTF9SVUxFID0ge1xuICBjaWRySXA6ICcwLjAuMC4wLzAnLFxuICBkZXNjcmlwdGlvbjogJ0FsbG93IGFsbCBvdXRib3VuZCB0cmFmZmljIGJ5IGRlZmF1bHQnLFxuICBpcFByb3RvY29sOiAnLTEnLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uUnVsZSB7XG4gIC8qKlxuICAgKiBUaGUgSVAgcHJvdG9jb2wgbmFtZSAodGNwLCB1ZHAsIGljbXApIG9yIG51bWJlciAoc2VlIFByb3RvY29sIE51bWJlcnMpLlxuICAgKiBVc2UgLTEgdG8gc3BlY2lmeSBhbGwgcHJvdG9jb2xzLiBJZiB5b3Ugc3BlY2lmeSAtMSwgb3IgYSBwcm90b2NvbCBudW1iZXJcbiAgICogb3RoZXIgdGhhbiB0Y3AsIHVkcCwgaWNtcCwgb3IgNTggKElDTVB2NiksIHRyYWZmaWMgb24gYWxsIHBvcnRzIGlzXG4gICAqIGFsbG93ZWQsIHJlZ2FyZGxlc3Mgb2YgYW55IHBvcnRzIHlvdSBzcGVjaWZ5LiBGb3IgdGNwLCB1ZHAsIGFuZCBpY21wLCB5b3VcbiAgICogbXVzdCBzcGVjaWZ5IGEgcG9ydCByYW5nZS4gRm9yIHByb3RvY29sIDU4IChJQ01QdjYpLCB5b3UgY2FuIG9wdGlvbmFsbHlcbiAgICogc3BlY2lmeSBhIHBvcnQgcmFuZ2U7IGlmIHlvdSBkb24ndCwgdHJhZmZpYyBmb3IgYWxsIHR5cGVzIGFuZCBjb2RlcyBpc1xuICAgKiBhbGxvd2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0Y3BcbiAgICovXG4gIHByb3RvY29sPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBwb3J0IHJhbmdlIGZvciB0aGUgVENQIGFuZCBVRFAgcHJvdG9jb2xzLCBvciBhbiBJQ01QIHR5cGUgbnVtYmVyLlxuICAgKlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBpY21wIGZvciB0aGUgSXBQcm90b2NvbCBwcm9wZXJ0eSwgeW91IGNhbiBzcGVjaWZ5XG4gICAqIC0xIGFzIGEgd2lsZGNhcmQgKGkuZS4sIGFueSBJQ01QIHR5cGUgbnVtYmVyKS5cbiAgICovXG4gIGZyb21Qb3J0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVuZCBvZiBwb3J0IHJhbmdlIGZvciB0aGUgVENQIGFuZCBVRFAgcHJvdG9jb2xzLCBvciBhbiBJQ01QIGNvZGUuXG4gICAqXG4gICAqIElmIHlvdSBzcGVjaWZ5IGljbXAgZm9yIHRoZSBJcFByb3RvY29sIHByb3BlcnR5LCB5b3UgY2FuIHNwZWNpZnkgLTEgYXMgYVxuICAgKiB3aWxkY2FyZCAoaS5lLiwgYW55IElDTVAgY29kZSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IElmIHRvUG9ydCBpcyBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGJlIHRoZSBzYW1lIGFzIGZyb21Qb3J0LlxuICAgKi9cbiAgdG9Qb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB0aGlzIGNvbm5lY3Rpb24uIEl0IGlzIGFwcGxpZWQgdG8gYm90aCB0aGUgaW5ncmVzcyBydWxlXG4gICAqIGFuZCB0aGUgZWdyZXNzIHJ1bGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIFNlY3VyaXR5R3JvdXAgdGhhdCBoYXNuJ3QgYmVlbiBjcmVhdGVkIGhlcmVcbiAqL1xuY2xhc3MgSW1wb3J0ZWRTZWN1cml0eUdyb3VwIGV4dGVuZHMgU2VjdXJpdHlHcm91cFJlZiB7XG4gIHB1YmxpYyByZWFkb25seSBzZWN1cml0eUdyb3VwSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogU2VjdXJpdHlHcm91cFJlZlByb3BzKSB7XG4gICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgIHRoaXMuc2VjdXJpdHlHcm91cElkID0gcHJvcHMuc2VjdXJpdHlHcm91cElkO1xuICB9XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gaW5ncmVzcyBydWxlcyBmb3IgZXF1YWxpdHkgdGhlIHNhbWUgd2F5IENsb3VkRm9ybWF0aW9uIHdvdWxkIChkaXNjYXJkaW5nIGRlc2NyaXB0aW9uKVxuICovXG5mdW5jdGlvbiBpbmdyZXNzUnVsZXNFcXVhbChhOiBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwUmVzb3VyY2UuSW5ncmVzc1Byb3BlcnR5LCBiOiBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwUmVzb3VyY2UuSW5ncmVzc1Byb3BlcnR5KSB7XG4gIHJldHVybiBhLmNpZHJJcCA9PT0gYi5jaWRySXBcbiAgICAmJiBhLmNpZHJJcHY2ID09PSBiLmNpZHJJcHY2XG4gICAgJiYgYS5mcm9tUG9ydCA9PT0gYi5mcm9tUG9ydFxuICAgICYmIGEudG9Qb3J0ID09PSBiLnRvUG9ydFxuICAgICYmIGEuaXBQcm90b2NvbCA9PT0gYi5pcFByb3RvY29sXG4gICAgJiYgYS5zb3VyY2VTZWN1cml0eUdyb3VwSWQgPT09IGIuc291cmNlU2VjdXJpdHlHcm91cElkXG4gICAgJiYgYS5zb3VyY2VTZWN1cml0eUdyb3VwTmFtZSA9PT0gYi5zb3VyY2VTZWN1cml0eUdyb3VwTmFtZVxuICAgICYmIGEuc291cmNlU2VjdXJpdHlHcm91cE93bmVySWQgPT09IGIuc291cmNlU2VjdXJpdHlHcm91cE93bmVySWQ7XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gZWdyZXNzIHJ1bGVzIGZvciBlcXVhbGl0eSB0aGUgc2FtZSB3YXkgQ2xvdWRGb3JtYXRpb24gd291bGQgKGRpc2NhcmRpbmcgZGVzY3JpcHRpb24pXG4gKi9cbmZ1bmN0aW9uIGVncmVzc1J1bGVzRXF1YWwoYTogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlLkVncmVzc1Byb3BlcnR5LCBiOiBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwUmVzb3VyY2UuRWdyZXNzUHJvcGVydHkpIHtcbiAgcmV0dXJuIGEuY2lkcklwID09PSBiLmNpZHJJcFxuICAgICYmIGEuY2lkcklwdjYgPT09IGIuY2lkcklwdjZcbiAgICAmJiBhLmZyb21Qb3J0ID09PSBiLmZyb21Qb3J0XG4gICAgJiYgYS50b1BvcnQgPT09IGIudG9Qb3J0XG4gICAgJiYgYS5pcFByb3RvY29sID09PSBiLmlwUHJvdG9jb2xcbiAgICAmJiBhLmRlc3RpbmF0aW9uUHJlZml4TGlzdElkID09PSBiLmRlc3RpbmF0aW9uUHJlZml4TGlzdElkXG4gICAgJiYgYS5kZXN0aW5hdGlvblNlY3VyaXR5R3JvdXBJZCA9PT0gYi5kZXN0aW5hdGlvblNlY3VyaXR5R3JvdXBJZDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoaXMgcnVsZSByZWZlcnMgdG8gYWxsIHRyYWZmaWNcbiAqL1xuZnVuY3Rpb24gaXNBbGxUcmFmZmljUnVsZShydWxlOiBhbnkpIHtcbiAgcmV0dXJuIHJ1bGUuY2lkcklwID09PSAnMC4wLjAuMC8wJyAmJiBydWxlLmlwUHJvdG9jb2wgPT09ICctMSc7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZWN1cml0eS1ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUFxRjtBQUNyRiwrQ0FBMEQ7QUFDMUQsbURBQWlEO0FBV2pEOztHQUVHO0FBQ0gsTUFBc0IsZ0JBQWlCLFNBQVEsZUFBUztJQUF4RDs7UUFTa0Isa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUE0RDVFLENBQUM7SUFyRUM7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQWlCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQzlFLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFXTSxjQUFjLENBQUMsSUFBd0IsRUFBRSxVQUFzQixFQUFFLFdBQW9CO1FBQzFGLElBQUksRUFBRSxHQUFHLFFBQVEsSUFBSSxDQUFDLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMvQyxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDN0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztTQUNsQjtRQUNELEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUUxQixrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUN2QyxJQUFJLDhCQUFjLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLEVBQUUsa0JBQ3RELE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxJQUMxQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFDeEIsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUMxQixXQUFXLElBQ1gs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Z2FibGUsIE91dHB1dCwgVGFnTWFuYWdlciwgVGFncywgVG9rZW4gfSBmcm9tICdAYXdzLWNkay9jZGsnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbnMsIElDb25uZWN0YWJsZSB9IGZyb20gJy4vY29ubmVjdGlvbnMnO1xuaW1wb3J0IHsgY2xvdWRmb3JtYXRpb24gfSBmcm9tICcuL2VjMi5nZW5lcmF0ZWQnO1xuaW1wb3J0IHsgSVBvcnRSYW5nZSwgSVNlY3VyaXR5R3JvdXBSdWxlIH0gZnJvbSAnLi9zZWN1cml0eS1ncm91cC1ydWxlJztcbmltcG9ydCB7IFZwY05ldHdvcmtSZWYgfSBmcm9tICcuL3ZwYy1yZWYnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBSZWZQcm9wcyB7XG4gIC8qKlxuICAgKiBJRCBvZiBzZWN1cml0eSBncm91cFxuICAgKi9cbiAgc2VjdXJpdHlHcm91cElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBTZWN1cml0eUdyb3VwIHRoYXQgaXMgbm90IGNyZWF0ZWQgaW4gdGhpcyB0ZW1wbGF0ZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VjdXJpdHlHcm91cFJlZiBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElTZWN1cml0eUdyb3VwUnVsZSwgSUNvbm5lY3RhYmxlIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBTZWN1cml0eUdyb3VwXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGltcG9ydChwYXJlbnQ6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNlY3VyaXR5R3JvdXBSZWZQcm9wcyk6IFNlY3VyaXR5R3JvdXBSZWYge1xuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRTZWN1cml0eUdyb3VwKHBhcmVudCwgaWQsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzZWN1cml0eUdyb3VwSWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNhbklubGluZVJ1bGUgPSBmYWxzZTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cHM6IFt0aGlzXSB9KTtcblxuICAvKipcbiAgICogRklYTUU6IFdoZXJlIHRvIHBsYWNlIHRoaXM/P1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRQb3J0UmFuZ2U/OiBJUG9ydFJhbmdlO1xuXG4gIHB1YmxpYyBhZGRJbmdyZXNzUnVsZShwZWVyOiBJU2VjdXJpdHlHcm91cFJ1bGUsIGNvbm5lY3Rpb246IElQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgbGV0IGlkID0gYGZyb20gJHtwZWVyLnVuaXF1ZUlkfToke2Nvbm5lY3Rpb259YDtcbiAgICBpZiAoZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVzY3JpcHRpb24gPSBpZDtcbiAgICB9XG4gICAgaWQgPSBpZC5yZXBsYWNlKCcvJywgJ18nKTtcblxuICAgIC8vIFNraXAgZHVwbGljYXRlc1xuICAgIGlmICh0aGlzLnRyeUZpbmRDaGlsZChpZCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBJbmdyZXNzUmVzb3VyY2UodGhpcywgaWQsIHtcbiAgICAgICAgZ3JvdXBJZDogdGhpcy5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgIC4uLnBlZXIudG9JbmdyZXNzUnVsZUpTT04oKSxcbiAgICAgICAgLi4uY29ubmVjdGlvbi50b1J1bGVKU09OKCksXG4gICAgICAgIGRlc2NyaXB0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkRWdyZXNzUnVsZShwZWVyOiBJU2VjdXJpdHlHcm91cFJ1bGUsIGNvbm5lY3Rpb246IElQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgbGV0IGlkID0gYHRvICR7cGVlci51bmlxdWVJZH06JHtjb25uZWN0aW9ufWA7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc2NyaXB0aW9uID0gaWQ7XG4gICAgfVxuICAgIGlkID0gaWQucmVwbGFjZSgnLycsICdfJyk7XG5cbiAgICAvLyBTa2lwIGR1cGxpY2F0ZXNcbiAgICBpZiAodGhpcy50cnlGaW5kQ2hpbGQoaWQpID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ldyBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwRWdyZXNzUmVzb3VyY2UodGhpcywgaWQsIHtcbiAgICAgICAgZ3JvdXBJZDogdGhpcy5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgIC4uLnBlZXIudG9FZ3Jlc3NSdWxlSlNPTigpLFxuICAgICAgICAuLi5jb25uZWN0aW9uLnRvUnVsZUpTT04oKSxcbiAgICAgICAgZGVzY3JpcHRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b0luZ3Jlc3NSdWxlSlNPTigpOiBhbnkge1xuICAgIHJldHVybiB7IHNvdXJjZVNlY3VyaXR5R3JvdXBJZDogdGhpcy5zZWN1cml0eUdyb3VwSWQgfTtcbiAgfVxuXG4gIHB1YmxpYyB0b0VncmVzc1J1bGVKU09OKCk6IGFueSB7XG4gICAgcmV0dXJuIHsgZGVzdGluYXRpb25TZWN1cml0eUdyb3VwSWQ6IHRoaXMuc2VjdXJpdHlHcm91cElkIH07XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRoaXMgU2VjdXJpdHlHcm91cCBmb3IgdXNlIGluIGEgZGlmZmVyZW50IFN0YWNrXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0KCk6IFNlY3VyaXR5R3JvdXBSZWZQcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBJZDogbmV3IE91dHB1dCh0aGlzLCAnU2VjdXJpdHlHcm91cElkJywgeyB2YWx1ZTogdGhpcy5zZWN1cml0eUdyb3VwSWQgfSkubWFrZUltcG9ydFZhbHVlKCkudG9TdHJpbmcoKVxuICAgIH07XG4gIH1cblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VjdXJpdHkgZ3JvdXAuIEZvciB2YWxpZCB2YWx1ZXMsIHNlZSB0aGUgR3JvdXBOYW1lXG4gICAqIHBhcmFtZXRlciBvZiB0aGUgQ3JlYXRlU2VjdXJpdHlHcm91cCBhY3Rpb24gaW4gdGhlIEFtYXpvbiBFQzIgQVBJXG4gICAqIFJlZmVyZW5jZS5cbiAgICpcbiAgICogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSBhbiBleHBsaWNpdCBncm91cCBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIEdyb3VwTmFtZSwgQVdTIENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlcyBhXG4gICAqIHVuaXF1ZSBwaHlzaWNhbCBJRCBhbmQgdXNlcyB0aGF0IElEIGZvciB0aGUgZ3JvdXAgbmFtZS5cbiAgICovXG4gIGdyb3VwTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgc2VjdXJpdHkgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBkZWZhdWx0IG5hbWUgd2lsbCBiZSB0aGUgY29uc3RydWN0J3MgQ0RLIHBhdGguXG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyByZXNvdXJjZSB0YWdzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzZWN1cml0eSBncm91cC5cbiAgICovXG4gIHRhZ3M/OiBUYWdzO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgc2VjdXJpdHkgZ3JvdXAuXG4gICAqL1xuICB2cGM6IFZwY05ldHdvcmtSZWY7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgYWxsIG91dGJvdW5kIHRyYWZmaWMgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlcmUgd2lsbCBvbmx5IGJlIGEgc2luZ2xlIGVncmVzcyBydWxlIHdoaWNoIGFsbG93cyBhbGxcbiAgICogb3V0Ym91bmQgdHJhZmZpYy4gSWYgdGhpcyBpcyBzZXQgdG8gZmFsc2UsIG5vIG91dGJvdW5kIHRyYWZmaWMgd2lsbCBiZSBhbGxvd2VkIGJ5XG4gICAqIGRlZmF1bHQgYW5kIGFsbCBlZ3Jlc3MgdHJhZmZpYyBtdXN0IGJlIGV4cGxpY2l0bHkgYXV0aG9yaXplZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYWxsb3dBbGxPdXRib3VuZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBBbWF6b24gRUMyIHNlY3VyaXR5IGdyb3VwIHdpdGhpbiBhIFZQQy5cbiAqXG4gKiBUaGlzIGNsYXNzIGhhcyBhbiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbiBvdmVyIFNlY3VyaXR5R3JvdXBSZWYgdGhhdCBpdCBjYW4gYWxzbyBjcmVhdGVcbiAqIGlubGluZSBpbmdyZXNzIGFuZCBlZ3Jlc3MgcnVsZSAod2hpY2ggc2F2ZXMgb24gdGhlIHRvdGFsIG51bWJlciBvZiByZXNvdXJjZXMgaW5zaWRlXG4gKiB0aGUgdGVtcGxhdGUpLlxuICovXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlHcm91cCBleHRlbmRzIFNlY3VyaXR5R3JvdXBSZWYgaW1wbGVtZW50cyBJVGFnZ2FibGUge1xuICAvKipcbiAgICogQW4gYXR0cmlidXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgc2VjdXJpdHkgZ3JvdXAgbmFtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBncm91cE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gYXR0cmlidXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgVlBDIElEIHRoaXMgc2VjdXJpdHkgZ3JvdXAgaXMgcGFydCBvZi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHNlY3VyaXR5IGdyb3VwXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjdXJpdHlHcm91cElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hbmFnZSB0YWdzIGZvciB0aGlzIGNvbnN0cnVjdCBhbmQgY2hpbGRyZW5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWdzOiBUYWdNYW5hZ2VyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdXJpdHlHcm91cDogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpcmVjdEluZ3Jlc3NSdWxlczogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlLkluZ3Jlc3NQcm9wZXJ0eVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0RWdyZXNzUnVsZXM6IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZS5FZ3Jlc3NQcm9wZXJ0eVtdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd0FsbE91dGJvdW5kOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBTZWN1cml0eUdyb3VwUHJvcHMpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgdGhpcy50YWdzID0gbmV3IFRhZ01hbmFnZXIodGhpcywgeyBpbml0aWFsVGFnczogcHJvcHMudGFnc30pO1xuICAgIGNvbnN0IGdyb3VwRGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbiB8fCB0aGlzLnBhdGg7XG5cbiAgICB0aGlzLmFsbG93QWxsT3V0Ym91bmQgPSBwcm9wcy5hbGxvd0FsbE91dGJvdW5kICE9PSBmYWxzZTtcblxuICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwUmVzb3VyY2UodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgZ3JvdXBOYW1lOiBwcm9wcy5ncm91cE5hbWUsXG4gICAgICBncm91cERlc2NyaXB0aW9uLFxuICAgICAgc2VjdXJpdHlHcm91cEluZ3Jlc3M6IG5ldyBUb2tlbigoKSA9PiB0aGlzLmRpcmVjdEluZ3Jlc3NSdWxlcyksXG4gICAgICBzZWN1cml0eUdyb3VwRWdyZXNzOiBuZXcgVG9rZW4oKCkgPT4gdGhpcy5kaXJlY3RFZ3Jlc3NSdWxlcyksXG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgICAgdGFnczogdGhpcy50YWdzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZWN1cml0eUdyb3VwSWQgPSB0aGlzLnNlY3VyaXR5R3JvdXAuc2VjdXJpdHlHcm91cElkO1xuICAgIHRoaXMuZ3JvdXBOYW1lID0gdGhpcy5zZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBOYW1lO1xuICAgIHRoaXMudnBjSWQgPSB0aGlzLnNlY3VyaXR5R3JvdXAuc2VjdXJpdHlHcm91cFZwY0lkO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0RWdyZXNzUnVsZSgpO1xuICB9XG5cbiAgcHVibGljIGFkZEluZ3Jlc3NSdWxlKHBlZXI6IElTZWN1cml0eUdyb3VwUnVsZSwgY29ubmVjdGlvbjogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXBlZXIuY2FuSW5saW5lUnVsZSB8fCAhY29ubmVjdGlvbi5jYW5JbmxpbmVSdWxlKSB7XG4gICAgICBzdXBlci5hZGRJbmdyZXNzUnVsZShwZWVyLCBjb25uZWN0aW9uLCBkZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc2NyaXB0aW9uID0gYGZyb20gJHtwZWVyLnVuaXF1ZUlkfToke2Nvbm5lY3Rpb259YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERpcmVjdEluZ3Jlc3NSdWxlKHtcbiAgICAgIC4uLnBlZXIudG9JbmdyZXNzUnVsZUpTT04oKSxcbiAgICAgIC4uLmNvbm5lY3Rpb24udG9SdWxlSlNPTigpLFxuICAgICAgZGVzY3JpcHRpb25cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFZ3Jlc3NSdWxlKHBlZXI6IElTZWN1cml0eUdyb3VwUnVsZSwgY29ubmVjdGlvbjogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5hbGxvd0FsbE91dGJvdW5kKSB7XG4gICAgICAvLyBJbiB0aGUgY2FzZSBvZiBcImFsbG93QWxsT3V0Ym91bmRcIiwgd2UgZG9uJ3QgYWRkIGFueSBtb3JlIHJ1bGVzLiBUaGVyZVxuICAgICAgLy8gaXMgb25seSBvbmUgcnVsZSB3aGljaCBhbGxvd3MgYWxsIHRyYWZmaWMgYW5kIHRoYXQgc3Vic3VtZXMgYW55IG90aGVyXG4gICAgICAvLyBydWxlLlxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBib2d1cyBydWxlIGV4aXN0cyB3ZSBjYW4gbm93IHJlbW92ZSBpdCBiZWNhdXNlIHRoZVxuICAgICAgLy8gcHJlc2VuY2Ugb2YgYW55IG90aGVyIHJ1bGUgd2lsbCBnZXQgcmlkIG9mIEVDMidzIGltcGxpY2l0IFwiYWxsXG4gICAgICAvLyBvdXRib3VuZFwiIHJ1bGUgYW55d2F5LlxuICAgICAgdGhpcy5yZW1vdmVOb1RyYWZmaWNSdWxlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFwZWVyLmNhbklubGluZVJ1bGUgfHwgIWNvbm5lY3Rpb24uY2FuSW5saW5lUnVsZSkge1xuICAgICAgc3VwZXIuYWRkRWdyZXNzUnVsZShwZWVyLCBjb25uZWN0aW9uLCBkZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc2NyaXB0aW9uID0gYGZyb20gJHtwZWVyLnVuaXF1ZUlkfToke2Nvbm5lY3Rpb259YDtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0ge1xuICAgICAgLi4ucGVlci50b0VncmVzc1J1bGVKU09OKCksXG4gICAgICAuLi5jb25uZWN0aW9uLnRvUnVsZUpTT04oKSxcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfTtcblxuICAgIGlmIChpc0FsbFRyYWZmaWNSdWxlKHJ1bGUpKSB7XG4gICAgICAvLyBXZSBjYW5ub3QgYWxsb3cgdGhpczsgaWYgc29tZW9uZSBhZGRzIHRoZSBydWxlIGluIHRoaXMgd2F5LCBpdCB3aWxsIGJlXG4gICAgICAvLyByZW1vdmVkIGFnYWluIGlmIHRoZXkgYWRkIG90aGVyIHJ1bGVzLiBXZSBhbHNvIGNhbid0IGF1dG9tYXRpY2FsbHkgc3dpdGNoXG4gICAgICAvLyB0byBcImFsbE91dGJvdW5kPXRydWVcIiBtb2RlLCBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBlbWl0dGVkXG4gICAgICAvLyBFZ3Jlc3NSdWxlIG9iamVjdHMgKHdoaWNoIGNvdW50IGFzIHJ1bGVzIGFkZGVkIGxhdGVyKSBhbmQgdGhlcmUncyBubyB3YXlcbiAgICAgIC8vIHRvIHJlY2FsbCB0aG9zZS4gQmV0dGVyIHRvIHByZXZlbnQgdGhpcyBmb3Igbm93LlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIGFuIFwiYWxsIHRyYWZmaWNcIiBlZ3Jlc3MgcnVsZSBpbiB0aGlzIHdheTsgc2V0IGFsbG93QWxsT3V0Ym91bmQ9dHJ1ZSBvbiB0aGUgU2VjdXJpdHlHcm91cCBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGlyZWN0RWdyZXNzUnVsZShydWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkaXJlY3QgaW5ncmVzcyBydWxlXG4gICAqL1xuICBwcml2YXRlIGFkZERpcmVjdEluZ3Jlc3NSdWxlKHJ1bGU6IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZS5JbmdyZXNzUHJvcGVydHkpIHtcbiAgICBpZiAoIXRoaXMuaGFzSW5ncmVzc1J1bGUocnVsZSkpIHtcbiAgICAgIHRoaXMuZGlyZWN0SW5ncmVzc1J1bGVzLnB1c2gocnVsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBpbmdyZXNzIHJ1bGUgZXhpc3RzIG9uIHRoZSBncm91cFxuICAgKi9cbiAgcHJpdmF0ZSBoYXNJbmdyZXNzUnVsZShydWxlOiBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwUmVzb3VyY2UuSW5ncmVzc1Byb3BlcnR5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0SW5ncmVzc1J1bGVzLmZpbmRJbmRleChyID0+IGluZ3Jlc3NSdWxlc0VxdWFsKHIsIHJ1bGUpKSA+IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGRpcmVjdCBlZ3Jlc3MgcnVsZVxuICAgKi9cbiAgcHJpdmF0ZSBhZGREaXJlY3RFZ3Jlc3NSdWxlKHJ1bGU6IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZS5FZ3Jlc3NQcm9wZXJ0eSkge1xuICAgIGlmICghdGhpcy5oYXNFZ3Jlc3NSdWxlKHJ1bGUpKSB7XG4gICAgICB0aGlzLmRpcmVjdEVncmVzc1J1bGVzLnB1c2gocnVsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBlZ3Jlc3MgcnVsZSBleGlzdHMgb24gdGhlIGdyb3VwXG4gICAqL1xuICBwcml2YXRlIGhhc0VncmVzc1J1bGUocnVsZTogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlLkVncmVzc1Byb3BlcnR5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0RWdyZXNzUnVsZXMuZmluZEluZGV4KHIgPT4gZWdyZXNzUnVsZXNFcXVhbChyLCBydWxlKSkgPiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGRlZmF1bHQgZWdyZXNzIHJ1bGUgdG8gdGhlIHNlY3VyaXR5R3JvdXBcbiAgICpcbiAgICogVGhpcyBkZXBlbmRzIG9uIGFsbG93QWxsT3V0Ym91bmQ6XG4gICAqXG4gICAqIC0gSWYgYWxsb3dBbGxPdXRib3VuZCBpcyB0cnVlLCB3ZSAqVEVDSE5JQ0FMTFkqIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcsIGJlY2F1c2VcbiAgICogICBFQzIgaXMgZ29pbmcgdG8gY3JlYXRlIHRoaXMgZGVmYXVsdCBydWxlIGFueXdheS4gQnV0LCBmb3IgbWF4aW11bSByZWFkYWJpbGl0eVxuICAgKiAgIG9mIHRoZSB0ZW1wbGF0ZSwgd2Ugd2lsbCBhZGQgb25lIGFueXdheS5cbiAgICogLSBJZiBhbGxvd0FsbE91dGJvdW5kIGlzIGZhbHNlLCB3ZSBhZGQgYSBib2d1cyBydWxlIHRoYXQgbWF0Y2hlcyBubyB0cmFmZmljIGluXG4gICAqICAgb3JkZXIgdG8gZ2V0IHJpZCBvZiB0aGUgZGVmYXVsdCBcImFsbCBvdXRib3VuZFwiIHJ1bGUgdGhhdCBFQzIgY3JlYXRlcyBieSBkZWZhdWx0LlxuICAgKiAgIElmIG90aGVyIHJ1bGVzIGhhcHBlbiB0byBnZXQgYWRkZWQgbGF0ZXIsIHdlIHJlbW92ZSB0aGUgYm9ndXMgcnVsZSBhZ2FpbiBzb1xuICAgKiAgIHRoYXQgaXQgZG9lc24ndCBjbHV0dGVyIHVwIHRoZSB0ZW1wbGF0ZSB0b28gbXVjaCAoZXZlbiB0aG91Z2ggdGhhdCdzIG5vdFxuICAgKiAgIHN0cmljdGx5IG5lY2Vzc2FyeSkuXG4gICAqL1xuICBwcml2YXRlIGFkZERlZmF1bHRFZ3Jlc3NSdWxlKCkge1xuICAgIGlmICh0aGlzLmFsbG93QWxsT3V0Ym91bmQpIHtcbiAgICAgIHRoaXMuZGlyZWN0RWdyZXNzUnVsZXMucHVzaChBTExPV19BTExfUlVMRSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlyZWN0RWdyZXNzUnVsZXMucHVzaChNQVRDSF9OT19UUkFGRklDKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBib2d1cyBydWxlIGlmIGl0IGV4aXN0c1xuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVOb1RyYWZmaWNSdWxlKCkge1xuICAgIGNvbnN0IGkgPSB0aGlzLmRpcmVjdEVncmVzc1J1bGVzLmZpbmRJbmRleChyID0+IGVncmVzc1J1bGVzRXF1YWwociwgTUFUQ0hfTk9fVFJBRkZJQykpO1xuICAgIGlmIChpID4gLTEpIHtcbiAgICAgIHRoaXMuZGlyZWN0RWdyZXNzUnVsZXMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEVncmVzcyBydWxlIHRoYXQgcHVycG9zZWx5IG1hdGNoZXMgbm8gdHJhZmZpY1xuICpcbiAqIFRoaXMgaXMgdXNlZCBpbiBvcmRlciB0byBkaXNhYmxlIHRoZSBcImFsbCB0cmFmZmljXCIgZGVmYXVsdCBvZiBTZWN1cml0eSBHcm91cHMuXG4gKlxuICogTm8gbWFjaGluZSBjYW4gZXZlciBhY3R1YWxseSBoYXZlIHRoZSAyNTUuMjU1LjI1NS4yNTUgSVAgYWRkcmVzcywgYnV0XG4gKiBpbiBvcmRlciB0byBsb2NrIGl0IGRvd24gZXZlbiBtb3JlIHdlJ2xsIHJlc3RyaWN0IHRvIGEgbm9uZXhpc3RlbnRcbiAqIElDTVAgdHJhZmZpYyB0eXBlLlxuICovXG5jb25zdCBNQVRDSF9OT19UUkFGRklDID0ge1xuICBjaWRySXA6ICcyNTUuMjU1LjI1NS4yNTUvMzInLFxuICBkZXNjcmlwdGlvbjogJ0Rpc2FsbG93IGFsbCB0cmFmZmljJyxcbiAgaXBQcm90b2NvbDogJ2ljbXAnLFxuICBmcm9tUG9ydDogMjUyLFxuICB0b1BvcnQ6IDg2XG59O1xuXG4vKipcbiAqIEVncmVzcyBydWxlIHRoYXQgbWF0Y2hlcyBhbGwgdHJhZmZpY1xuICovXG5jb25zdCBBTExPV19BTExfUlVMRSA9IHtcbiAgY2lkcklwOiAnMC4wLjAuMC8wJyxcbiAgZGVzY3JpcHRpb246ICdBbGxvdyBhbGwgb3V0Ym91bmQgdHJhZmZpYyBieSBkZWZhdWx0JyxcbiAgaXBQcm90b2NvbDogJy0xJyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblJ1bGUge1xuICAvKipcbiAgICogVGhlIElQIHByb3RvY29sIG5hbWUgKHRjcCwgdWRwLCBpY21wKSBvciBudW1iZXIgKHNlZSBQcm90b2NvbCBOdW1iZXJzKS5cbiAgICogVXNlIC0xIHRvIHNwZWNpZnkgYWxsIHByb3RvY29scy4gSWYgeW91IHNwZWNpZnkgLTEsIG9yIGEgcHJvdG9jb2wgbnVtYmVyXG4gICAqIG90aGVyIHRoYW4gdGNwLCB1ZHAsIGljbXAsIG9yIDU4IChJQ01QdjYpLCB0cmFmZmljIG9uIGFsbCBwb3J0cyBpc1xuICAgKiBhbGxvd2VkLCByZWdhcmRsZXNzIG9mIGFueSBwb3J0cyB5b3Ugc3BlY2lmeS4gRm9yIHRjcCwgdWRwLCBhbmQgaWNtcCwgeW91XG4gICAqIG11c3Qgc3BlY2lmeSBhIHBvcnQgcmFuZ2UuIEZvciBwcm90b2NvbCA1OCAoSUNNUHY2KSwgeW91IGNhbiBvcHRpb25hbGx5XG4gICAqIHNwZWNpZnkgYSBwb3J0IHJhbmdlOyBpZiB5b3UgZG9uJ3QsIHRyYWZmaWMgZm9yIGFsbCB0eXBlcyBhbmQgY29kZXMgaXNcbiAgICogYWxsb3dlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdGNwXG4gICAqL1xuICBwcm90b2NvbD86IHN0cmluZztcblxuICAvKipcbiAgICogU3RhcnQgb2YgcG9ydCByYW5nZSBmb3IgdGhlIFRDUCBhbmQgVURQIHByb3RvY29scywgb3IgYW4gSUNNUCB0eXBlIG51bWJlci5cbiAgICpcbiAgICogSWYgeW91IHNwZWNpZnkgaWNtcCBmb3IgdGhlIElwUHJvdG9jb2wgcHJvcGVydHksIHlvdSBjYW4gc3BlY2lmeVxuICAgKiAtMSBhcyBhIHdpbGRjYXJkIChpLmUuLCBhbnkgSUNNUCB0eXBlIG51bWJlcikuXG4gICAqL1xuICBmcm9tUG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmQgb2YgcG9ydCByYW5nZSBmb3IgdGhlIFRDUCBhbmQgVURQIHByb3RvY29scywgb3IgYW4gSUNNUCBjb2RlLlxuICAgKlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBpY21wIGZvciB0aGUgSXBQcm90b2NvbCBwcm9wZXJ0eSwgeW91IGNhbiBzcGVjaWZ5IC0xIGFzIGFcbiAgICogd2lsZGNhcmQgKGkuZS4sIGFueSBJQ01QIGNvZGUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBJZiB0b1BvcnQgaXMgbm90IHNwZWNpZmllZCwgaXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBmcm9tUG9ydC5cbiAgICovXG4gIHRvUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhpcyBjb25uZWN0aW9uLiBJdCBpcyBhcHBsaWVkIHRvIGJvdGggdGhlIGluZ3Jlc3MgcnVsZVxuICAgKiBhbmQgdGhlIGVncmVzcyBydWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBTZWN1cml0eUdyb3VwIHRoYXQgaGFzbid0IGJlZW4gY3JlYXRlZCBoZXJlXG4gKi9cbmNsYXNzIEltcG9ydGVkU2VjdXJpdHlHcm91cCBleHRlbmRzIFNlY3VyaXR5R3JvdXBSZWYge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjdXJpdHlHcm91cElkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFNlY3VyaXR5R3JvdXBSZWZQcm9wcykge1xuICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBJZCA9IHByb3BzLnNlY3VyaXR5R3JvdXBJZDtcbiAgfVxufVxuXG4vKipcbiAqIENvbXBhcmUgdHdvIGluZ3Jlc3MgcnVsZXMgZm9yIGVxdWFsaXR5IHRoZSBzYW1lIHdheSBDbG91ZEZvcm1hdGlvbiB3b3VsZCAoZGlzY2FyZGluZyBkZXNjcmlwdGlvbilcbiAqL1xuZnVuY3Rpb24gaW5ncmVzc1J1bGVzRXF1YWwoYTogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlLkluZ3Jlc3NQcm9wZXJ0eSwgYjogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlLkluZ3Jlc3NQcm9wZXJ0eSkge1xuICByZXR1cm4gYS5jaWRySXAgPT09IGIuY2lkcklwXG4gICAgJiYgYS5jaWRySXB2NiA9PT0gYi5jaWRySXB2NlxuICAgICYmIGEuZnJvbVBvcnQgPT09IGIuZnJvbVBvcnRcbiAgICAmJiBhLnRvUG9ydCA9PT0gYi50b1BvcnRcbiAgICAmJiBhLmlwUHJvdG9jb2wgPT09IGIuaXBQcm90b2NvbFxuICAgICYmIGEuc291cmNlU2VjdXJpdHlHcm91cElkID09PSBiLnNvdXJjZVNlY3VyaXR5R3JvdXBJZFxuICAgICYmIGEuc291cmNlU2VjdXJpdHlHcm91cE5hbWUgPT09IGIuc291cmNlU2VjdXJpdHlHcm91cE5hbWVcbiAgICAmJiBhLnNvdXJjZVNlY3VyaXR5R3JvdXBPd25lcklkID09PSBiLnNvdXJjZVNlY3VyaXR5R3JvdXBPd25lcklkO1xufVxuXG4vKipcbiAqIENvbXBhcmUgdHdvIGVncmVzcyBydWxlcyBmb3IgZXF1YWxpdHkgdGhlIHNhbWUgd2F5IENsb3VkRm9ybWF0aW9uIHdvdWxkIChkaXNjYXJkaW5nIGRlc2NyaXB0aW9uKVxuICovXG5mdW5jdGlvbiBlZ3Jlc3NSdWxlc0VxdWFsKGE6IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZS5FZ3Jlc3NQcm9wZXJ0eSwgYjogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlLkVncmVzc1Byb3BlcnR5KSB7XG4gIHJldHVybiBhLmNpZHJJcCA9PT0gYi5jaWRySXBcbiAgICAmJiBhLmNpZHJJcHY2ID09PSBiLmNpZHJJcHY2XG4gICAgJiYgYS5mcm9tUG9ydCA9PT0gYi5mcm9tUG9ydFxuICAgICYmIGEudG9Qb3J0ID09PSBiLnRvUG9ydFxuICAgICYmIGEuaXBQcm90b2NvbCA9PT0gYi5pcFByb3RvY29sXG4gICAgJiYgYS5kZXN0aW5hdGlvblByZWZpeExpc3RJZCA9PT0gYi5kZXN0aW5hdGlvblByZWZpeExpc3RJZFxuICAgICYmIGEuZGVzdGluYXRpb25TZWN1cml0eUdyb3VwSWQgPT09IGIuZGVzdGluYXRpb25TZWN1cml0eUdyb3VwSWQ7XG59XG5cbi8qKlxuICogV2hldGhlciB0aGlzIHJ1bGUgcmVmZXJzIHRvIGFsbCB0cmFmZmljXG4gKi9cbmZ1bmN0aW9uIGlzQWxsVHJhZmZpY1J1bGUocnVsZTogYW55KSB7XG4gIHJldHVybiBydWxlLmNpZHJJcCA9PT0gJzAuMC4wLjAvMCcgJiYgcnVsZS5pcFByb3RvY29sID09PSAnLTEnO1xufVxuIl19
{
"name": "@aws-cdk/aws-ec2",
"version": "0.14.1",
"version": "0.15.0",
"description": "CDK Constructs for AWS EC2",

@@ -55,13 +55,16 @@ "main": "lib/index.js",

"devDependencies": {
"@aws-cdk/assert": "^0.14.1",
"cdk-build-tools": "^0.14.1",
"cdk-integ-tools": "^0.14.1",
"cfn2ts": "^0.14.1",
"pkglint": "^0.14.1"
"@aws-cdk/assert": "^0.15.0",
"cdk-build-tools": "^0.15.0",
"cdk-integ-tools": "^0.15.0",
"cfn2ts": "^0.15.0",
"pkglint": "^0.15.0"
},
"dependencies": {
"@aws-cdk/aws-iam": "^0.14.1",
"@aws-cdk/aws-iam": "^0.15.0",
"@aws-cdk/cdk": "^0.15.0"
},
"homepage": "https://github.com/awslabs/aws-cdk",
"peerDependencies": {
"@aws-cdk/cdk": "^0.14.1"
},
"homepage": "https://github.com/awslabs/aws-cdk"
}
}

@@ -201,3 +201,3 @@ ## AWS Compute and Networking Construct Library

security groups. If you want to allow connections between two constructs that
have security groups, you have to add an **Egress* rule to one Security Group,
have security groups, you have to add an **Egress** rule to one Security Group,
and an **Ingress** rule to the other. The connections object will automatically

@@ -274,1 +274,20 @@ take care of this for you:

```
### Machine Images (AMIs)
AMIs control the OS that gets launched when you start your EC2 instance. The EC2
library contains constructs to select the AMI you want to use.
Depending on the type of AMI, you select it a different way.
The latest version of Amazon Linux and Microsoft Windows images are
selectable by instantiating one of these classes:
[example of creating images](test/example.images.lit.ts)
> NOTE: The Amazon Linux images selected will be cached in your `cdk.json`, so that your
> AutoScalingGroups don't automatically change out from under you when you're making unrelated
> changes. To update to the latest version of Amazon Linux, remove the cache entry from the `context`
> section of your `cdk.json`.
>
> We will add command-line options to make this step easier in the future.
import { Test } from 'nodeunit';
declare const _default: {
'security group can allows all outbound traffic by default'(test: Test): void;
'no new outbound rule is added if we are allowing all traffic anyway'(test: Test): void;
'security group disallow outbound traffic by default'(test: Test): void;
'bogus outbound rule disappears if another rule is added'(test: Test): void;
'all outbound rule cannot be added after creation'(test: Test): void;
'peering between two security groups does not recursive infinitely'(test: Test): void;
'(imported) SecurityGroup can be used as target of .allowTo()'(test: Test): void;
'peer between all types of peers and port range types'(test: Test): void;
'security groups added to connections after rule still gets rule'(test: Test): void;
'when security groups are added to target they also get the rule'(test: Test): void;
'multiple security groups allows internally between them'(test: Test): void;
};
export = _default;

@@ -11,169 +11,125 @@ "use strict";

module.exports = {
'security group can allows all outbound traffic by default'(test) {
'peering between two security groups does not recursive infinitely'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const stack = new cdk_1.Stack(undefined, 'TestStack', { env: { account: '12345678', region: 'dummy' } });
const vpc = new lib_1.VpcNetwork(stack, 'VPC');
const sg1 = new lib_1.SecurityGroup(stack, 'SG1', { vpc });
const sg2 = new lib_1.SecurityGroup(stack, 'SG2', { vpc });
const conn1 = new SomethingConnectable(new lib_1.Connections({ securityGroups: [sg1] }));
const conn2 = new SomethingConnectable(new lib_1.Connections({ securityGroups: [sg2] }));
// WHEN
new lib_1.SecurityGroup(stack, 'SG1', { vpc, allowAllOutbound: true });
// THEN
assert_1.expect(stack).to(assert_1.haveResource('AWS::EC2::SecurityGroup', {
SecurityGroupEgress: [
{
CidrIp: "0.0.0.0/0",
Description: "Allow all outbound traffic by default",
IpProtocol: "-1"
}
],
}));
conn1.connections.allowTo(conn2, new lib_1.TcpPort(80), 'Test');
// THEN -- it finishes!
test.done();
},
'no new outbound rule is added if we are allowing all traffic anyway'(test) {
'(imported) SecurityGroup can be used as target of .allowTo()'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const vpc = new lib_1.VpcNetwork(stack, 'VPC');
const sg1 = new lib_1.SecurityGroup(stack, 'SomeSecurityGroup', { vpc, allowAllOutbound: false });
const somethingConnectable = new SomethingConnectable(new lib_1.Connections({ securityGroups: [sg1] }));
const securityGroup = lib_1.SecurityGroupRef.import(stack, 'ImportedSG', { securityGroupId: 'sg-12345' });
// WHEN
const sg = new lib_1.SecurityGroup(stack, 'SG1', { vpc, allowAllOutbound: true });
sg.addEgressRule(new lib_1.AnyIPv4(), new lib_1.TcpPort(86), 'This does not show up');
// THEN
assert_1.expect(stack).to(assert_1.haveResource('AWS::EC2::SecurityGroup', {
SecurityGroupEgress: [
{
CidrIp: "0.0.0.0/0",
Description: "Allow all outbound traffic by default",
IpProtocol: "-1"
},
],
somethingConnectable.connections.allowTo(securityGroup, new lib_1.TcpAllPorts(), 'Connect there');
// THEN: rule to generated security group to connect to imported
assert_1.expect(stack).to(assert_1.haveResource("AWS::EC2::SecurityGroupEgress", {
GroupId: { "Fn::GetAtt": ["SomeSecurityGroupEF219AD6", "GroupId"] },
IpProtocol: "tcp",
Description: "Connect there",
DestinationSecurityGroupId: "sg-12345",
FromPort: 0,
ToPort: 65535
}));
// THEN: rule to imported security group to allow connections from generated
assert_1.expect(stack).to(assert_1.haveResource("AWS::EC2::SecurityGroupIngress", {
IpProtocol: "tcp",
Description: "Connect there",
FromPort: 0,
GroupId: "sg-12345",
SourceSecurityGroupId: { "Fn::GetAtt": ["SomeSecurityGroupEF219AD6", "GroupId"] },
ToPort: 65535
}));
test.done();
},
'security group disallow outbound traffic by default'(test) {
'security groups added to connections after rule still gets rule'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const vpc = new lib_1.VpcNetwork(stack, 'VPC');
const sg1 = new lib_1.SecurityGroup(stack, 'SecurityGroup1', { vpc, allowAllOutbound: false });
const sg2 = new lib_1.SecurityGroup(stack, 'SecurityGroup2', { vpc, allowAllOutbound: false });
const connections = new lib_1.Connections({ securityGroups: [sg1] });
// WHEN
new lib_1.SecurityGroup(stack, 'SG1', { vpc, allowAllOutbound: false });
connections.allowFromAnyIPv4(new lib_1.TcpPort(88));
connections.addSecurityGroup(sg2);
// THEN
assert_1.expect(stack).to(assert_1.haveResource('AWS::EC2::SecurityGroup', {
SecurityGroupEgress: [
GroupDescription: "SecurityGroup1",
SecurityGroupIngress: [
{
CidrIp: "255.255.255.255/32",
Description: "Disallow all traffic",
FromPort: 252,
IpProtocol: "icmp",
ToPort: 86
CidrIp: "0.0.0.0/0",
FromPort: 88,
ToPort: 88
}
],
]
}));
test.done();
},
'bogus outbound rule disappears if another rule is added'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const vpc = new lib_1.VpcNetwork(stack, 'VPC');
// WHEN
const sg = new lib_1.SecurityGroup(stack, 'SG1', { vpc, allowAllOutbound: false });
sg.addEgressRule(new lib_1.AnyIPv4(), new lib_1.TcpPort(86), 'This replaces the other one');
// THEN
assert_1.expect(stack).to(assert_1.haveResource('AWS::EC2::SecurityGroup', {
SecurityGroupEgress: [
GroupDescription: "SecurityGroup2",
SecurityGroupIngress: [
{
CidrIp: "0.0.0.0/0",
Description: "This replaces the other one",
FromPort: 86,
IpProtocol: "tcp",
ToPort: 86
FromPort: 88,
ToPort: 88
}
],
]
}));
test.done();
},
'all outbound rule cannot be added after creation'(test) {
'when security groups are added to target they also get the rule'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const vpc = new lib_1.VpcNetwork(stack, 'VPC');
const sg1 = new lib_1.SecurityGroup(stack, 'SecurityGroup1', { vpc, allowAllOutbound: false });
const sg2 = new lib_1.SecurityGroup(stack, 'SecurityGroup2', { vpc, allowAllOutbound: false });
const sg3 = new lib_1.SecurityGroup(stack, 'SecurityGroup3', { vpc, allowAllOutbound: false });
const connections1 = new lib_1.Connections({ securityGroups: [sg1] });
const connections2 = new lib_1.Connections({ securityGroups: [sg2] });
const connectable = new SomethingConnectable(connections2);
// WHEN
const sg = new lib_1.SecurityGroup(stack, 'SG1', { vpc, allowAllOutbound: false });
test.throws(() => {
sg.addEgressRule(new lib_1.AnyIPv4(), new lib_1.AllTraffic(), 'All traffic');
}, /Cannot add/);
test.done();
},
'peering between two security groups does not recursive infinitely'(test) {
// GIVEN
const stack = new cdk_1.Stack(undefined, 'TestStack', { env: { account: '12345678', region: 'dummy' } });
const vpc = new lib_1.VpcNetwork(stack, 'VPC');
const sg1 = new lib_1.SecurityGroup(stack, 'SG1', { vpc });
const sg2 = new lib_1.SecurityGroup(stack, 'SG2', { vpc });
const conn1 = new SomethingConnectable(new lib_1.Connections({ securityGroup: sg1 }));
const conn2 = new SomethingConnectable(new lib_1.Connections({ securityGroup: sg2 }));
// WHEN
conn1.connections.allowTo(conn2, new lib_1.TcpPort(80), 'Test');
connections1.allowTo(connectable, new lib_1.TcpPort(88));
connections2.addSecurityGroup(sg3);
// THEN
assert_1.expect(stack).to(assert_1.haveResource('AWS::EC2::SecurityGroupIngress', {
GroupId: { "Fn::GetAtt": ["SecurityGroup23BE86BB7", "GroupId"] },
SourceSecurityGroupId: { "Fn::GetAtt": ["SecurityGroup1F554B36F", "GroupId"] },
FromPort: 88,
ToPort: 88
}));
assert_1.expect(stack).to(assert_1.haveResource('AWS::EC2::SecurityGroupIngress', {
GroupId: { "Fn::GetAtt": ["SecurityGroup3E5E374B9", "GroupId"] },
SourceSecurityGroupId: { "Fn::GetAtt": ["SecurityGroup1F554B36F", "GroupId"] },
FromPort: 88,
ToPort: 88
}));
test.done();
},
'(imported) SecurityGroup can be used as target of .allowTo()'(test) {
'multiple security groups allows internally between them'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const vpc = new lib_1.VpcNetwork(stack, 'VPC');
const sg1 = new lib_1.SecurityGroup(stack, 'SomeSecurityGroup', { vpc, allowAllOutbound: false });
const somethingConnectable = new SomethingConnectable(new lib_1.Connections({ securityGroup: sg1 }));
const securityGroup = lib_1.SecurityGroupRef.import(stack, 'ImportedSG', { securityGroupId: 'sg-12345' });
const sg1 = new lib_1.SecurityGroup(stack, 'SecurityGroup1', { vpc, allowAllOutbound: false });
const sg2 = new lib_1.SecurityGroup(stack, 'SecurityGroup2', { vpc, allowAllOutbound: false });
const connections = new lib_1.Connections({ securityGroups: [sg1] });
// WHEN
somethingConnectable.connections.allowTo(securityGroup, new lib_1.TcpAllPorts(), 'Connect there');
// THEN: rule to generated security group to connect to imported
assert_1.expect(stack).to(assert_1.haveResource("AWS::EC2::SecurityGroupEgress", {
GroupId: { "Fn::GetAtt": ["SomeSecurityGroupEF219AD6", "GroupId"] },
IpProtocol: "tcp",
Description: "Connect there",
DestinationSecurityGroupId: "sg-12345",
FromPort: 0,
ToPort: 65535
connections.allowInternally(new lib_1.TcpPort(88));
connections.addSecurityGroup(sg2);
// THEN
assert_1.expect(stack).to(assert_1.haveResource('AWS::EC2::SecurityGroupIngress', {
GroupId: { "Fn::GetAtt": ["SecurityGroup1F554B36F", "GroupId"] },
SourceSecurityGroupId: { "Fn::GetAtt": ["SecurityGroup1F554B36F", "GroupId"] },
FromPort: 88,
ToPort: 88
}));
// THEN: rule to imported security group to allow connections from generated
assert_1.expect(stack).to(assert_1.haveResource("AWS::EC2::SecurityGroupIngress", {
IpProtocol: "tcp",
Description: "Connect there",
FromPort: 0,
GroupId: "sg-12345",
SourceSecurityGroupId: { "Fn::GetAtt": ["SomeSecurityGroupEF219AD6", "GroupId"] },
ToPort: 65535
}));
test.done();
},
'peer between all types of peers and port range types'(test) {
// GIVEN
const stack = new cdk_1.Stack(undefined, 'TestStack', { env: { account: '12345678', region: 'dummy' } });
const vpc = new lib_1.VpcNetwork(stack, 'VPC');
const sg = new lib_1.SecurityGroup(stack, 'SG', { vpc });
const peers = [
new lib_1.SecurityGroup(stack, 'PeerGroup', { vpc }),
new lib_1.AnyIPv4(),
new lib_1.AnyIPv6(),
new lib_1.PrefixList('pl-012345'),
];
const ports = [
new lib_1.TcpPort(1234),
new lib_1.TcpPortFromAttribute("tcp-test-port!"),
new lib_1.TcpAllPorts(),
new lib_1.TcpPortRange(80, 90),
new lib_1.UdpPort(2345),
new lib_1.UdpPortFromAttribute("udp-test-port!"),
new lib_1.UdpAllPorts(),
new lib_1.UdpPortRange(85, 95),
new lib_1.IcmpTypeAndCode(5, 1),
new lib_1.IcmpAllTypeCodes(8),
new lib_1.IcmpAllTypesAndCodes(),
new lib_1.IcmpPing(),
new lib_1.AllTraffic()
];
// WHEN
for (const peer of peers) {
for (const port of ports) {
sg.connections.allowTo(peer, port);
}
}
// THEN -- no crash
test.done();
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jb25uZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUF1RDtBQUN2RCxzQ0FBcUM7QUFHckMsZ0NBc0JnQjtBQThNaEIsTUFBTSxvQkFBb0I7SUFDeEIsWUFBNEIsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDcEQsQ0FBQztDQUNGO0FBL01ELGlCQUFTO0lBQ1AsMkRBQTJELENBQUMsSUFBVTtRQUNwRSxRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztRQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLGdCQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXpDLE9BQU87UUFDUCxJQUFJLG1CQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWpFLE9BQU87UUFDUCxlQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFZLENBQUMseUJBQXlCLEVBQUU7WUFDdkQsbUJBQW1CLEVBQUU7Z0JBQ25CO29CQUNFLE1BQU0sRUFBRSxXQUFXO29CQUNuQixXQUFXLEVBQUUsdUNBQXVDO29CQUNwRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7YUFDRjtTQUNGLENBQUMsQ0FBQyxDQUFDO1FBRUosSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFFQUFxRSxDQUFDLElBQVU7UUFDOUUsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV6QyxPQUFPO1FBQ1AsTUFBTSxFQUFFLEdBQUcsSUFBSSxtQkFBYSxDQUFD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QUksaUJBQVcsRUFBRTtZQUNqQixJQUFJLGtCQUFZLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN4QixJQUFJLHFCQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixJQUFJLHNCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLDBCQUFvQixFQUFFO1lBQzFCLElBQUksY0FBUSxFQUFFO1lBQ2QsSUFBSSxnQkFBVSxFQUFFO1NBQ2pCLENBQUM7UUFFRixPQUFPO1FBQ1AsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7Z0JBQ3hCLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNwQztTQUNGO1FBRUQsbUJBQW1CO1FBRW5CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCBoYXZlUmVzb3VyY2UgfSBmcm9tICdAYXdzLWNkay9hc3NlcnQnO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdAYXdzLWNkay9jZGsnO1xuaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcblxuaW1wb3J0IHtcbiAgQWxsVHJhZmZpYyxcbiAgQW55SVB2NCxcbiAgQW55SVB2NixcbiAgQ29ubmVjdGlvbnMsXG4gIEljbXBBbGxUeXBlQ29kZXMsXG4gIEljbXBBbGxUeXBlc0FuZENvZGVzLFxuICBJY21wUGluZyxcbiAgSWNtcFR5cGVBbmRDb2RlLFxuICBJQ29ubmVjdGFibGUsXG4gIFByZWZpeExpc3QsXG4gIFNlY3VyaXR5R3JvdXAsXG4gIFNlY3VyaXR5R3JvdXBSZWYsXG4gIFRjcEFsbFBvcnRzLFxuICBUY3BQb3J0LFxuICBUY3BQb3J0RnJvbUF0dHJpYnV0ZSxcbiAgVGNwUG9ydFJhbmdlLFxuICBVZHBBbGxQb3J0cyxcbiAgVWRwUG9ydCxcbiAgVWRwUG9ydEZyb21BdHRyaWJ1dGUsXG4gIFVkcFBvcnRSYW5nZSxcbiAgVnBjTmV0d29ya1xufSBmcm9tIFwiLi4vbGliXCI7XG5cbmV4cG9ydCA9IHtcbiAgJ3NlY3VyaXR5IGdyb3VwIGNhbiBhbGxvd3MgYWxsIG91dGJvdW5kIHRyYWZmaWMgYnkgZGVmYXVsdCcodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCB2cGMgPSBuZXcgVnBjTmV0d29yayhzdGFjaywgJ1ZQQycpO1xuXG4gICAgLy8gV0hFTlxuICAgIG5ldyBTZWN1cml0eUdyb3VwKHN0YWNrLCAnU0cxJywgeyB2cGMsIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50byhoYXZlUmVzb3VyY2UoJ0FXUzo6RUMyOjpTZWN1cml0eUdyb3VwJywge1xuICAgICAgU2VjdXJpdHlHcm91cEVncmVzczogW1xuICAgICAgICB7XG4gICAgICAgICAgQ2lkcklwOiBcIjAuMC4wLjAvMFwiLFxuICAgICAgICAgIERlc2NyaXB0aW9uOiBcIkFsbG93IGFsbCBvdXRib3VuZCB0cmFmZmljIGJ5IGRlZmF1bHRcIixcbiAgICAgICAgICBJcFByb3RvY29sOiBcIi0xXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICB9KSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnbm8gbmV3IG91dGJvdW5kIHJ1bGUgaXMgYWRkZWQgaWYgd2UgYXJlIGFsbG93aW5nIGFsbCB0cmFmZmljIGFueXdheScodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCB2cGMgPSBuZXcgVnBjTmV0d29yayhzdGFjaywgJ1ZQQycpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IHNnID0gbmV3IFNlY3VyaXR5R3JvdXAoc3RhY2ssICdTRzEnLCB7IHZwYywgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSB9KTtcbiAgICBzZy5hZGRFZ3Jlc3NSdWxlKG5ldyBBbnlJUHY0KCksIG5ldyBUY3BQb3J0KDg2KSwgJ1RoaXMgZG9lcyBub3Qgc2hvdyB1cCcpO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlKCdBV1M6OkVDMjo6U2VjdXJpdHlHcm91cCcsIHtcbiAgICAgIFNlY3VyaXR5R3JvdXBFZ3Jlc3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIENpZHJJcDogXCIwLjAuMC4wLzBcIixcbiAgICAgICAgICBEZXNjcmlwdGlvbjogXCJBbGxvdyBhbGwgb3V0Ym91bmQgdHJhZmZpYyBieSBkZWZhdWx0XCIsXG4gICAgICAgICAgSXBQcm90b2NvbDogXCItMVwiXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdzZWN1cml0eSBncm91cCBkaXNhbGxvdyBvdXRib3VuZCB0cmFmZmljIGJ5IGRlZmF1bHQnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgY29uc3QgdnBjID0gbmV3IFZwY05ldHdvcmsoc3RhY2ssICdWUEMnKTtcblxuICAgIC8vIFdIRU5cbiAgICBuZXcgU2VjdXJpdHlHcm91cChzdGFjaywgJ1NHMScsIHsgdnBjLCBhbGxvd0FsbE91dGJvdW5kOiBmYWxzZSB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXAnLCB7XG4gICAgICBTZWN1cml0eUdyb3VwRWdyZXNzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBDaWRySXA6IFwiMjU1LjI1NS4yNTUuMjU1LzMyXCIsXG4gICAgICAgICAgRGVzY3JpcHRpb246IFwiRGlzYWxsb3cgYWxsIHRyYWZmaWNcIixcbiAgICAgICAgICBGcm9tUG9ydDogMjUyLFxuICAgICAgICAgIElwUHJvdG9jb2w6IFwiaWNtcFwiLFxuICAgICAgICAgIFRvUG9ydDogODZcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICB9KSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnYm9ndXMgb3V0Ym91bmQgcnVsZSBkaXNhcHBlYXJzIGlmIGFub3RoZXIgcnVsZSBpcyBhZGRlZCcodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCB2cGMgPSBuZXcgVnBjTmV0d29yayhzdGFjaywgJ1ZQQycpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IHNnID0gbmV3IFNlY3VyaXR5R3JvdXAoc3RhY2ssICdTRzEnLCB7IHZwYywgYWxsb3dBbGxPdXRib3VuZDogZmFsc2UgfSk7XG4gICAgc2cuYWRkRWdyZXNzUnVsZShuZXcgQW55SVB2NCgpLCBuZXcgVGNwUG9ydCg4NiksICdUaGlzIHJlcGxhY2VzIHRoZSBvdGhlciBvbmUnKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXAnLCB7XG4gICAgICBTZWN1cml0eUdyb3VwRWdyZXNzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBDaWRySXA6IFwiMC4wLjAuMC8wXCIsXG4gICAgICAgICAgRGVzY3JpcHRpb246IFwiVGhpcyByZXBsYWNlcyB0aGUgb3RoZXIgb25lXCIsXG4gICAgICAgICAgRnJvbVBvcnQ6IDg2LFxuICAgICAgICAgIElwUHJvdG9jb2w6IFwidGNwXCIsXG4gICAgICAgICAgVG9Qb3J0OiA4NlxuICAgICAgICB9XG4gICAgICBdLFxuICAgIH0pKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdhbGwgb3V0Ym91bmQgcnVsZSBjYW5ub3QgYmUgYWRkZWQgYWZ0ZXIgY3JlYXRpb24nKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgY29uc3QgdnBjID0gbmV3IFZwY05ldHdvcmsoc3RhY2ssICdWUEMnKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBzZyA9IG5ldyBTZWN1cml0eUdyb3VwKHN0YWNrLCAnU0cxJywgeyB2cGMsIGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlIH0pO1xuICAgIHRlc3QudGhyb3dzKCgpID0+IHtcbiAgICAgIHNnLmFkZEVncmVzc1J1bGUobmV3IEFueUlQdjQoKSwgbmV3IEFsbFRyYWZmaWMoKSwgJ0FsbCB0cmFmZmljJyk7XG4gICAgfSwgL0Nhbm5vdCBhZGQvKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdwZWVyaW5nIGJldHdlZW4gdHdvIHNlY3VyaXR5IGdyb3VwcyBkb2VzIG5vdCByZWN1cnNpdmUgaW5maW5pdGVseScodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4JywgcmVnaW9uOiAnZHVtbXknIH19KTtcblxuICAgIGNvbnN0IHZwYyA9IG5ldyBWcGNOZXR3b3JrKHN0YWNrLCAnVlBDJyk7XG4gICAgY29uc3Qgc2cxID0gbmV3IFNlY3VyaXR5R3JvdXAoc3RhY2ssICdTRzEnLCB7IHZwYyB9KTtcbiAgICBjb25zdCBzZzIgPSBuZXcgU2VjdXJpdHlHcm91cChzdGFjaywgJ1NHMicsIHsgdnBjIH0pO1xuXG4gICAgY29uc3QgY29ubjEgPSBuZXcgU29tZXRoaW5nQ29ubmVjdGFibGUobmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cDogc2cxIH0pKTtcbiAgICBjb25zdCBjb25uMiA9IG5ldyBTb21ldGhpbmdDb25uZWN0YWJsZShuZXcgQ29ubmVjdGlvbnMoeyBzZWN1cml0eUdyb3VwOiBzZzIgfSkpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbm4xLmNvbm5lY3Rpb25zLmFsbG93VG8oY29ubjIsIG5ldyBUY3BQb3J0KDgwKSwgJ1Rlc3QnKTtcblxuICAgIC8vIFRIRU5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnKGltcG9ydGVkKSBTZWN1cml0eUdyb3VwIGNhbiBiZSB1c2VkIGFzIHRhcmdldCBvZiAuYWxsb3dUbygpJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIGNvbnN0IHZwYyA9IG5ldyBWcGNOZXR3b3JrKHN0YWNrLCAnVlBDJyk7XG4gICAgY29uc3Qgc2cxID0gbmV3IFNlY3VyaXR5R3JvdXAoc3RhY2ssICdTb21lU2VjdXJpdHlHcm91cCcsIHsgdnBjLCBhbGxvd0FsbE91dGJvdW5kOiBmYWxzZSB9KTtcbiAgICBjb25zdCBzb21ldGhpbmdDb25uZWN0YWJsZSA9IG5ldyBTb21ldGhpbmdDb25uZWN0YWJsZShuZXcgQ29ubmVjdGlvbnMoeyBzZWN1cml0eUdyb3VwOiBzZzEgfSkpO1xuXG4gICAgY29uc3Qgc2VjdXJpdHlHcm91cCA9IFNlY3VyaXR5R3JvdXBSZWYuaW1wb3J0KHN0YWNrLCAnSW1wb3J0ZWRTRycsIHsgc2VjdXJpdHlHcm91cElkOiAnc2ctMTIzNDUnIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIHNvbWV0aGluZ0Nvbm5lY3RhYmxlLmNvbm5lY3Rpb25zLmFsbG93VG8oc2VjdXJpdHlHcm91cCwgbmV3IFRjcEFsbFBvcnRzKCksICdDb25uZWN0IHRoZXJlJyk7XG5cbiAgICAvLyBUSEVOOiBydWxlIHRvIGdlbmVyYXRlZCBzZWN1cml0eSBncm91cCB0byBjb25uZWN0IHRvIGltcG9ydGVkXG4gICAgZXhwZWN0KHN0YWNrKS50byhoYXZlUmVzb3VyY2UoXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1wiLCB7XG4gICAgICAgIEdyb3VwSWQ6IHsgXCJGbjo6R2V0QXR0XCI6IFsgXCJTb21lU2VjdXJpdHlHcm91cEVGMjE5QUQ2XCIsIFwiR3JvdXBJZFwiIF0gfSxcbiAgICAgICAgSXBQcm90b2NvbDogXCJ0Y3BcIixcbiAgICAgICAgRGVzY3JpcHRpb246IFwiQ29ubmVjdCB0aGVyZVwiLFxuICAgICAgICBEZXN0aW5hdGlvblNlY3VyaXR5R3JvdXBJZDogXCJzZy0xMjM0NVwiLFxuICAgICAgICBGcm9tUG9ydDogMCxcbiAgICAgICAgVG9Qb3J0OiA2NTUzNVxuICAgIH0pKTtcblxuICAgIC8vIFRIRU46IHJ1bGUgdG8gaW1wb3J0ZWQgc2VjdXJpdHkgZ3JvdXAgdG8gYWxsb3cgY29ubmVjdGlvbnMgZnJvbSBnZW5lcmF0ZWRcbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZShcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1wiLCB7XG4gICAgICBJcFByb3RvY29sOiBcInRjcFwiLFxuICAgICAgRGVzY3JpcHRpb246IFwiQ29ubmVjdCB0aGVyZVwiLFxuICAgICAgRnJvbVBvcnQ6IDAsXG4gICAgICBHcm91cElkOiBcInNnLTEyMzQ1XCIsXG4gICAgICBTb3VyY2VTZWN1cml0eUdyb3VwSWQ6IHsgXCJGbjo6R2V0QXR0XCI6IFsgXCJTb21lU2VjdXJpdHlHcm91cEVGMjE5QUQ2XCIsIFwiR3JvdXBJZFwiIF0gfSxcbiAgICAgIFRvUG9ydDogNjU1MzVcbiAgICB9KSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAncGVlciBiZXR3ZWVuIGFsbCB0eXBlcyBvZiBwZWVycyBhbmQgcG9ydCByYW5nZSB0eXBlcycodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4JywgcmVnaW9uOiAnZHVtbXknIH19KTtcbiAgICBjb25zdCB2cGMgPSBuZXcgVnBjTmV0d29yayhzdGFjaywgJ1ZQQycpO1xuICAgIGNvbnN0IHNnID0gbmV3IFNlY3VyaXR5R3JvdXAoc3RhY2ssICdTRycsIHsgdnBjIH0pO1xuXG4gICAgY29uc3QgcGVlcnMgPSBbXG4gICAgICBuZXcgU2VjdXJpdHlHcm91cChzdGFjaywgJ1BlZXJHcm91cCcsIHsgdnBjIH0pLFxuICAgICAgbmV3IEFueUlQdjQoKSxcbiAgICAgIG5ldyBBbnlJUHY2KCksXG4gICAgICBuZXcgUHJlZml4TGlzdCgncGwtMDEyMzQ1JyksXG4gICAgXTtcblxuICAgIGNvbnN0IHBvcnRzID0gW1xuICAgICAgbmV3IFRjcFBvcnQoMTIzNCksXG4gICAgICBuZXcgVGNwUG9ydEZyb21BdHRyaWJ1dGUoXCJ0Y3AtdGVzdC1wb3J0IVwiKSxcbiAgICAgIG5ldyBUY3BBbGxQb3J0cygpLFxuICAgICAgbmV3IFRjcFBvcnRSYW5nZSg4MCwgOTApLFxuICAgICAgbmV3IFVkcFBvcnQoMjM0NSksXG4gICAgICBuZXcgVWRwUG9ydEZyb21BdHRyaWJ1dGUoXCJ1ZHAtdGVzdC1wb3J0IVwiKSxcbiAgICAgIG5ldyBVZHBBbGxQb3J0cygpLFxuICAgICAgbmV3IFVkcFBvcnRSYW5nZSg4NSwgOTUpLFxuICAgICAgbmV3IEljbXBUeXBlQW5kQ29kZSg1LCAxKSxcbiAgICAgIG5ldyBJY21wQWxsVHlwZUNvZGVzKDgpLFxuICAgICAgbmV3IEljbXBBbGxUeXBlc0FuZENvZGVzKCksXG4gICAgICBuZXcgSWNtcFBpbmcoKSxcbiAgICAgIG5ldyBBbGxUcmFmZmljKClcbiAgICBdO1xuXG4gICAgLy8gV0hFTlxuICAgIGZvciAoY29uc3QgcGVlciBvZiBwZWVycykge1xuICAgICAgZm9yIChjb25zdCBwb3J0IG9mIHBvcnRzKSB7XG4gICAgICAgIHNnLmNvbm5lY3Rpb25zLmFsbG93VG8ocGVlciwgcG9ydCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVEhFTiAtLSBubyBjcmFzaFxuXG4gICAgdGVzdC5kb25lKCk7XG4gIH1cbn07XG5cbmNsYXNzIFNvbWV0aGluZ0Nvbm5lY3RhYmxlIGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucykge1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jb25uZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUF1RDtBQUN2RCxzQ0FBcUM7QUFHckMsZ0NBUWdCO0FBdUpoQixNQUFNLG9CQUFvQjtJQUN4QixZQUE0QixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUNwRCxDQUFDO0NBQ0Y7QUF4SkQsaUJBQVM7SUFDUCxtRUFBbUUsQ0FBQyxJQUFVO1FBQzVFLFFBQVE7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBRWxHLE1BQU0sR0FBRyxHQUFHLElBQUksZ0JBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxtQkFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksbUJBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUVyRCxNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksaUJBQVcsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sS0FBSyxHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxpQkFBVyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbkYsT0FBTztRQUNQLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJ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QVE7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssRUFBRSxDQUFDO1FBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksZ0JBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxtQkFBYSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sR0FBRyxHQUFHLElBQUksbUJBQWEsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RixNQUFNLFdBQVcsR0FBRyxJQUFJLGlCQUFXLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFL0QsT0FBTztRQUNQLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxhQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbEMsT0FBTztRQUNQLGVBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMscUJBQVksQ0FBQyxnQ0FBZ0MsRUFBRTtZQUM5RCxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSx3QkFBd0IsRUFBRSxTQUFTLENBQUUsRUFBRTtZQUNsRSxxQkFBcUIsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFFLHdCQUF3QixFQUFFLFNBQVMsQ0FBRSxFQUFFO1lBQ2hGLFFBQVEsRUFBRSxFQUFFO1lBQ1osTUFBTSxFQUFFLEVBQUU7U0FDWCxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCBoYXZlUmVzb3VyY2UgfSBmcm9tICdAYXdzLWNkay9hc3NlcnQnO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdAYXdzLWNkay9jZGsnO1xuaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcblxuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbnMsXG4gIElDb25uZWN0YWJsZSxcbiAgU2VjdXJpdHlHcm91cCxcbiAgU2VjdXJpdHlHcm91cFJlZixcbiAgVGNwQWxsUG9ydHMsXG4gIFRjcFBvcnQsXG4gIFZwY05ldHdvcmtcbn0gZnJvbSBcIi4uL2xpYlwiO1xuXG5leHBvcnQgPSB7XG4gICdwZWVyaW5nIGJldHdlZW4gdHdvIHNlY3VyaXR5IGdyb3VwcyBkb2VzIG5vdCByZWN1cnNpdmUgaW5maW5pdGVseScodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4JywgcmVnaW9uOiAnZHVtbXknIH19KTtcblxuICAgIGNvbnN0IHZwYyA9IG5ldyBWcGNOZXR3b3JrKHN0YWNrLCAnVlBDJyk7XG4gICAgY29uc3Qgc2cxID0gbmV3IFNlY3VyaXR5R3JvdXAoc3RhY2ssICdTRzEnLCB7IHZwYyB9KTtcbiAgICBjb25zdCBzZzIgPSBuZXcgU2VjdXJpdHlHcm91cChzdGFjaywgJ1NHMicsIHsgdnBjIH0pO1xuXG4gICAgY29uc3QgY29ubjEgPSBuZXcgU29tZXRoaW5nQ29ubmVjdGFibGUobmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cHM6IFtzZzFdIH0pKTtcbiAgICBjb25zdCBjb25uMiA9IG5ldyBTb21ldGhpbmdDb25uZWN0YWJsZShuZXcgQ29ubmVjdGlvbnMoeyBzZWN1cml0eUdyb3VwczogW3NnMl0gfSkpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbm4xLmNvbm5lY3Rpb25zLmFsbG93VG8oY29ubjIsIG5ldyBUY3BQb3J0KDgwKSwgJ1Rlc3QnKTtcblxuICAgIC8vIFRIRU4gLS0gaXQgZmluaXNoZXMhXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJyhpbXBvcnRlZCkgU2VjdXJpdHlHcm91cCBjYW4gYmUgdXNlZCBhcyB0YXJnZXQgb2YgLmFsbG93VG8oKScodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCB2cGMgPSBuZXcgVnBjTmV0d29yayhzdGFjaywgJ1ZQQycpO1xuICAgIGNvbnN0IHNnMSA9IG5ldyBTZWN1cml0eUdyb3VwKHN0YWNrLCAnU29tZVNlY3VyaXR5R3JvdXAnLCB7IHZwYywgYWxsb3dBbGxPdXRib3VuZDogZmFsc2UgfSk7XG4gICAgY29uc3Qgc29tZXRoaW5nQ29ubmVjdGFibGUgPSBuZXcgU29tZXRoaW5nQ29ubmVjdGFibGUobmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cHM6IFtzZzFdIH0pKTtcblxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXAgPSBTZWN1cml0eUdyb3VwUmVmLmltcG9ydChzdGFjaywgJ0ltcG9ydGVkU0cnLCB7IHNlY3VyaXR5R3JvdXBJZDogJ3NnLTEyMzQ1JyB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBzb21ldGhpbmdDb25uZWN0YWJsZS5jb25uZWN0aW9ucy5hbGxvd1RvKHNlY3VyaXR5R3JvdXAsIG5ldyBUY3BBbGxQb3J0cygpLCAnQ29ubmVjdCB0aGVyZScpO1xuXG4gICAgLy8gVEhFTjogcnVsZSB0byBnZW5lcmF0ZWQgc2VjdXJpdHkgZ3JvdXAgdG8gY29ubmVjdCB0byBpbXBvcnRlZFxuICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlKFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIiwge1xuICAgICAgICBHcm91cElkOiB7IFwiRm46OkdldEF0dFwiOiBbIFwiU29tZVNlY3VyaXR5R3JvdXBFRjIxOUFENlwiLCBcIkdyb3VwSWRcIiBdIH0sXG4gICAgICAgIElwUHJvdG9jb2w6IFwidGNwXCIsXG4gICAgICAgIERlc2NyaXB0aW9uOiBcIkNvbm5lY3QgdGhlcmVcIixcbiAgICAgICAgRGVzdGluYXRpb25TZWN1cml0eUdyb3VwSWQ6IFwic2ctMTIzNDVcIixcbiAgICAgICAgRnJvbVBvcnQ6IDAsXG4gICAgICAgIFRvUG9ydDogNjU1MzVcbiAgICB9KSk7XG5cbiAgICAvLyBUSEVOOiBydWxlIHRvIGltcG9ydGVkIHNlY3VyaXR5IGdyb3VwIHRvIGFsbG93IGNvbm5lY3Rpb25zIGZyb20gZ2VuZXJhdGVkXG4gICAgZXhwZWN0KHN0YWNrKS50byhoYXZlUmVzb3VyY2UoXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIiwge1xuICAgICAgSXBQcm90b2NvbDogXCJ0Y3BcIixcbiAgICAgIERlc2NyaXB0aW9uOiBcIkNvbm5lY3QgdGhlcmVcIixcbiAgICAgIEZyb21Qb3J0OiAwLFxuICAgICAgR3JvdXBJZDogXCJzZy0xMjM0NVwiLFxuICAgICAgU291cmNlU2VjdXJpdHlHcm91cElkOiB7IFwiRm46OkdldEF0dFwiOiBbIFwiU29tZVNlY3VyaXR5R3JvdXBFRjIxOUFENlwiLCBcIkdyb3VwSWRcIiBdIH0sXG4gICAgICBUb1BvcnQ6IDY1NTM1XG4gICAgfSkpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3NlY3VyaXR5IGdyb3VwcyBhZGRlZCB0byBjb25uZWN0aW9ucyBhZnRlciBydWxlIHN0aWxsIGdldHMgcnVsZScodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCB2cGMgPSBuZXcgVnBjTmV0d29yayhzdGFjaywgJ1ZQQycpO1xuICAgIGNvbnN0IHNnMSA9IG5ldyBTZWN1cml0eUdyb3VwKHN0YWNrLCAnU2VjdXJpdHlHcm91cDEnLCB7IHZwYywgYWxsb3dBbGxPdXRib3VuZDogZmFsc2UgfSk7XG4gICAgY29uc3Qgc2cyID0gbmV3IFNlY3VyaXR5R3JvdXAoc3RhY2ssICdTZWN1cml0eUdyb3VwMicsIHsgdnBjLCBhbGxvd0FsbE91dGJvdW5kOiBmYWxzZSB9KTtcbiAgICBjb25zdCBjb25uZWN0aW9ucyA9IG5ldyBDb25uZWN0aW9ucyh7IHNlY3VyaXR5R3JvdXBzOiBbc2cxXSB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25uZWN0aW9ucy5hbGxvd0Zyb21BbnlJUHY0KG5ldyBUY3BQb3J0KDg4KSk7XG4gICAgY29ubmVjdGlvbnMuYWRkU2VjdXJpdHlHcm91cChzZzIpO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlKCdBV1M6OkVDMjo6U2VjdXJpdHlHcm91cCcsIHtcbiAgICAgIEdyb3VwRGVzY3JpcHRpb246IFwiU2VjdXJpdHlHcm91cDFcIixcbiAgICAgIFNlY3VyaXR5R3JvdXBJbmdyZXNzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBDaWRySXA6IFwiMC4wLjAuMC8wXCIsXG4gICAgICAgICAgRnJvbVBvcnQ6IDg4LFxuICAgICAgICAgIFRvUG9ydDogODhcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pKTtcblxuICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlKCdBV1M6OkVDMjo6U2VjdXJpdHlHcm91cCcsIHtcbiAgICAgIEdyb3VwRGVzY3JpcHRpb246IFwiU2VjdXJpdHlHcm91cDJcIixcbiAgICAgIFNlY3VyaXR5R3JvdXBJbmdyZXNzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBDaWRySXA6IFwiMC4wLjAuMC8wXCIsXG4gICAgICAgICAgRnJvbVBvcnQ6IDg4LFxuICAgICAgICAgIFRvUG9ydDogODhcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICd3aGVuIHNlY3VyaXR5IGdyb3VwcyBhcmUgYWRkZWQgdG8gdGFyZ2V0IHRoZXkgYWxzbyBnZXQgdGhlIHJ1bGUnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgY29uc3QgdnBjID0gbmV3IFZwY05ldHdvcmsoc3RhY2ssICdWUEMnKTtcbiAgICBjb25zdCBzZzEgPSBuZXcgU2VjdXJpdHlHcm91cChzdGFjaywgJ1NlY3VyaXR5R3JvdXAxJywgeyB2cGMsIGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHNnMiA9IG5ldyBTZWN1cml0eUdyb3VwKHN0YWNrLCAnU2VjdXJpdHlHcm91cDInLCB7IHZwYywgYWxsb3dBbGxPdXRib3VuZDogZmFsc2UgfSk7XG4gICAgY29uc3Qgc2czID0gbmV3IFNlY3VyaXR5R3JvdXAoc3RhY2ssICdTZWN1cml0eUdyb3VwMycsIHsgdnBjLCBhbGxvd0FsbE91dGJvdW5kOiBmYWxzZSB9KTtcbiAgICBjb25zdCBjb25uZWN0aW9uczEgPSBuZXcgQ29ubmVjdGlvbnMoeyBzZWN1cml0eUdyb3VwczogW3NnMV0gfSk7XG4gICAgY29uc3QgY29ubmVjdGlvbnMyID0gbmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cHM6IFtzZzJdIH0pO1xuICAgIGNvbnN0IGNvbm5lY3RhYmxlID0gbmV3IFNvbWV0aGluZ0Nvbm5lY3RhYmxlKGNvbm5lY3Rpb25zMik7XG5cbiAgICAvLyBXSEVOXG4gICAgY29ubmVjdGlvbnMxLmFsbG93VG8oY29ubmVjdGFibGUsIG5ldyBUY3BQb3J0KDg4KSk7XG4gICAgY29ubmVjdGlvbnMyLmFkZFNlY3VyaXR5R3JvdXAoc2czKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzJywge1xuICAgICAgR3JvdXBJZDogeyBcIkZuOjpHZXRBdHRcIjogWyBcIlNlY3VyaXR5R3JvdXAyM0JFODZCQjdcIiwgXCJHcm91cElkXCIgXSB9LFxuICAgICAgU291cmNlU2VjdXJpdHlHcm91cElkOiB7IFwiRm46OkdldEF0dFwiOiBbIFwiU2VjdXJpdHlHcm91cDFGNTU0QjM2RlwiLCBcIkdyb3VwSWRcIiBdIH0sXG4gICAgICBGcm9tUG9ydDogODgsXG4gICAgICBUb1BvcnQ6IDg4XG4gICAgfSkpO1xuXG4gICAgZXhwZWN0KHN0YWNrKS50byhoYXZlUmVzb3VyY2UoJ0FXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzcycsIHtcbiAgICAgIEdyb3VwSWQ6IHsgXCJGbjo6R2V0QXR0XCI6IFsgXCJTZWN1cml0eUdyb3VwM0U1RTM3NEI5XCIsIFwiR3JvdXBJZFwiIF0gfSxcbiAgICAgIFNvdXJjZVNlY3VyaXR5R3JvdXBJZDogeyBcIkZuOjpHZXRBdHRcIjogWyBcIlNlY3VyaXR5R3JvdXAxRjU1NEIzNkZcIiwgXCJHcm91cElkXCIgXSB9LFxuICAgICAgRnJvbVBvcnQ6IDg4LFxuICAgICAgVG9Qb3J0OiA4OFxuICAgIH0pKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdtdWx0aXBsZSBzZWN1cml0eSBncm91cHMgYWxsb3dzIGludGVybmFsbHkgYmV0d2VlbiB0aGVtJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIGNvbnN0IHZwYyA9IG5ldyBWcGNOZXR3b3JrKHN0YWNrLCAnVlBDJyk7XG4gICAgY29uc3Qgc2cxID0gbmV3IFNlY3VyaXR5R3JvdXAoc3RhY2ssICdTZWN1cml0eUdyb3VwMScsIHsgdnBjLCBhbGxvd0FsbE91dGJvdW5kOiBmYWxzZSB9KTtcbiAgICBjb25zdCBzZzIgPSBuZXcgU2VjdXJpdHlHcm91cChzdGFjaywgJ1NlY3VyaXR5R3JvdXAyJywgeyB2cGMsIGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cHM6IFtzZzFdIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbm5lY3Rpb25zLmFsbG93SW50ZXJuYWxseShuZXcgVGNwUG9ydCg4OCkpO1xuICAgIGNvbm5lY3Rpb25zLmFkZFNlY3VyaXR5R3JvdXAoc2cyKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzJywge1xuICAgICAgR3JvdXBJZDogeyBcIkZuOjpHZXRBdHRcIjogWyBcIlNlY3VyaXR5R3JvdXAxRjU1NEIzNkZcIiwgXCJHcm91cElkXCIgXSB9LFxuICAgICAgU291cmNlU2VjdXJpdHlHcm91cElkOiB7IFwiRm46OkdldEF0dFwiOiBbIFwiU2VjdXJpdHlHcm91cDFGNTU0QjM2RlwiLCBcIkdyb3VwSWRcIiBdIH0sXG4gICAgICBGcm9tUG9ydDogODgsXG4gICAgICBUb1BvcnQ6IDg4XG4gICAgfSkpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG59O1xuXG5jbGFzcyBTb21ldGhpbmdDb25uZWN0YWJsZSBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uczogQ29ubmVjdGlvbnMpIHtcbiAgfVxufVxuIl19

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc