@aws-cdk/aws-ec2-alpha 2.175.1-alpha.0 → 2.177.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +411 -205
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +3 -1
- package/README.md +38 -6
- package/lib/ipam.js +3 -3
- package/lib/route.d.ts +2 -2
- package/lib/route.js +11 -11
- package/lib/subnet-v2.js +7 -7
- package/lib/util.d.ts +2 -7
- package/lib/util.js +53 -21
- package/lib/vpc-v2-base.js +7 -7
- package/lib/vpc-v2.d.ts +56 -0
- package/lib/vpc-v2.js +50 -10
- package/package.json +7 -7
package/lib/vpc-v2-base.js
CHANGED
|
@@ -188,7 +188,7 @@ class VpcV2Base extends aws_cdk_lib_1.Resource {
|
|
|
188
188
|
let useIpv6;
|
|
189
189
|
if (this.secondaryCidrBlock) {
|
|
190
190
|
useIpv6 = (this.secondaryCidrBlock.some((secondaryAddress) => secondaryAddress.amazonProvidedIpv6CidrBlock === true ||
|
|
191
|
-
secondaryAddress.ipv6IpamPoolId
|
|
191
|
+
secondaryAddress.ipv6IpamPoolId !== undefined || secondaryAddress.ipv6CidrBlock !== undefined));
|
|
192
192
|
}
|
|
193
193
|
if (!useIpv6) {
|
|
194
194
|
throw new Error('Egress only IGW can only be added to Ipv6 enabled VPC');
|
|
@@ -260,7 +260,7 @@ class VpcV2Base extends aws_cdk_lib_1.Resource {
|
|
|
260
260
|
routeName: 'CDKDefaultIPv6Route',
|
|
261
261
|
});
|
|
262
262
|
}
|
|
263
|
-
//Add default route to IGW for IPv4
|
|
263
|
+
// Add default route to IGW for IPv4
|
|
264
264
|
new route_1.Route(this, `${subnet.node.id}-DefaultRoute`, {
|
|
265
265
|
routeTable: subnet.routeTable,
|
|
266
266
|
destination: options?.ipv4Destination ?? '0.0.0.0/0',
|
|
@@ -395,10 +395,10 @@ class VpcV2Base extends aws_cdk_lib_1.Resource {
|
|
|
395
395
|
selectSubnetObjectsByType(subnetType) {
|
|
396
396
|
const allSubnets = {
|
|
397
397
|
[aws_ec2_1.SubnetType.PRIVATE_ISOLATED]: this.isolatedSubnets,
|
|
398
|
-
[
|
|
398
|
+
['Deprecated_Isolated']: this.isolatedSubnets,
|
|
399
399
|
[aws_ec2_1.SubnetType.PRIVATE_WITH_NAT]: this.privateSubnets,
|
|
400
400
|
[aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS]: this.privateSubnets,
|
|
401
|
-
[
|
|
401
|
+
['Deprecated_Private']: this.privateSubnets,
|
|
402
402
|
[aws_ec2_1.SubnetType.PUBLIC]: this.publicSubnets,
|
|
403
403
|
};
|
|
404
404
|
const subnets = allSubnets[subnetType];
|
|
@@ -418,7 +418,7 @@ class VpcV2Base extends aws_cdk_lib_1.Resource {
|
|
|
418
418
|
*/
|
|
419
419
|
reifySelectionDefaults(placement) {
|
|
420
420
|
// TODO: throw error as new VpcV2 cannot support subnetName or subnetGroupName anymore
|
|
421
|
-
if (placement.subnetName !== undefined) {
|
|
421
|
+
if ('subnetName' in placement && placement.subnetName !== undefined) {
|
|
422
422
|
if (placement.subnetGroupName !== undefined) {
|
|
423
423
|
throw new Error('Please use only \'subnetGroupName\' (\'subnetName\' is deprecated and has the same behavior)');
|
|
424
424
|
}
|
|
@@ -455,7 +455,7 @@ class VpcV2Base extends aws_cdk_lib_1.Resource {
|
|
|
455
455
|
}
|
|
456
456
|
exports.VpcV2Base = VpcV2Base;
|
|
457
457
|
_a = JSII_RTTI_SYMBOL_1;
|
|
458
|
-
VpcV2Base[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.VpcV2Base", version: "2.
|
|
458
|
+
VpcV2Base[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.VpcV2Base", version: "2.177.0-alpha.0" };
|
|
459
459
|
class CompositeDependable {
|
|
460
460
|
constructor() {
|
|
461
461
|
this.dependables = new Array();
|
|
@@ -484,4 +484,4 @@ function tap(x, fn) {
|
|
|
484
484
|
fn(x);
|
|
485
485
|
return x;
|
|
486
486
|
}
|
|
487
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXYyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2cGMtdjItYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw2Q0FBeUQ7QUFDekQsaURBQWtjO0FBQ2xjLGlDQUFtRjtBQUNuRiwyQ0FBa0Y7QUFDbEYsbUNBQWlNO0FBRWpNLGlEQUFzRjtBQXdMdEY7Ozs7R0FJRztBQUNILE1BQXNCLFNBQVUsU0FBUSxzQkFBUTtJQUFoRDs7UUFpQkU7O1VBRUU7UUFDYyxrQkFBYSxHQUFjLEVBQUUsQ0FBQztRQUU5Qzs7VUFFRTtRQUNjLG1CQUFjLEdBQWMsRUFBRSxDQUFDO1FBTy9DOztVQUVFO1FBQ2Msc0JBQWlCLEdBQWEsRUFBRSxDQUFDO1FBT2pEOzs7O1dBSUc7UUFDZ0IscUNBQWdDLEdBQUcsSUFBSSw0QkFBZSxFQUFFLENBQUM7UUFzQzVFOztVQUVFO1FBQ1EsK0JBQTBCLEdBQVksS0FBSyxDQUFDO1FBUXREOzs7V0FHRztRQUNPLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztLQStabkM7SUE3WkM7Ozs7O01BS0U7SUFDSyxhQUFhLENBQUMsWUFBNkIsRUFBRTtRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXpDLE9BQU87WUFDTCxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDdkMsSUFBSSxpQkFBaUIsS0FBZSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEYsK0JBQStCLEVBQUUsR0FBRyxDQUFDLElBQUksbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENB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QUFFLFNBQVMsRUFBRSxDQUFDO1FBQzlHLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFFM0QsT0FBTyxJQUFJLENBQUM7S0FDYjs7QUFqZ0JILDhCQW1nQkM7OztBQUVELE1BQU0sbUJBQW1CO0lBR3ZCO1FBRmlCLGdCQUFXLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQztRQUd0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsdUJBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3pCLElBQUksZUFBZTtnQkFDakIsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQWMsQ0FBQztnQkFDcEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ25DLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyx1QkFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFDRCxPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUM7U0FDRixDQUFDLENBQUM7S0FDSjtJQUVEOztNQUVFO0lBQ0ssR0FBRyxDQUFDLEdBQWdCO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzVCO0NBQ0Y7QUFFRDs7RUFFRTtBQUNGLFNBQVMsR0FBRyxDQUFJLENBQUksRUFBRSxFQUFrQjtJQUN0QyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixPQUFPLENBQUMsQ0FBQztBQUVYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBd3MsIFJlc291cmNlLCBBbm5vdGF0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElWcGMsIElTdWJuZXQsIFN1Ym5ldFNlbGVjdGlvbiwgU2VsZWN0ZWRTdWJuZXRzLCBFbmFibGVWcG5HYXRld2F5T3B0aW9ucywgVnBuR2F0ZXdheSwgVnBuQ29ubmVjdGlvblR5cGUsIENmblZQQ0dhdGV3YXlBdHRhY2htZW50LCBDZm5WUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiwgVnBuQ29ubmVjdGlvbk9wdGlvbnMsIFZwbkNvbm5lY3Rpb24sIENsaWVudFZwbkVuZHBvaW50T3B0aW9ucywgQ2xpZW50VnBuRW5kcG9pbnQsIEludGVyZmFjZVZwY0VuZHBvaW50T3B0aW9ucywgSW50ZXJmYWNlVnBjRW5kcG9pbnQsIEdhdGV3YXlWcGNFbmRwb2ludE9wdGlvbnMsIEdhdGV3YXlWcGNFbmRwb2ludCwgRmxvd0xvZ09wdGlvbnMsIEZsb3dMb2csIEZsb3dMb2dSZXNvdXJjZVR5cGUsIFN1Ym5ldFR5cGUsIFN1Ym5ldEZpbHRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgYWxsUm91dGVUYWJsZUlkcywgZmxhdHRlbiwgc3VibmV0R3JvdXBOYW1lRnJvbUNvbnN0cnVjdElkIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IElEZXBlbmRhYmxlLCBEZXBlbmRhYmxlLCBJQ29uc3RydWN0LCBEZXBlbmRlbmN5R3JvdXAgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXksIEludGVybmV0R2F0ZXdheSwgTmF0Q29ubmVjdGl2aXR5VHlwZSwgTmF0R2F0ZXdheSwgTmF0R2F0ZXdheU9wdGlvbnMsIFJvdXRlLCBWUENQZWVyaW5nQ29ubmVjdGlvbiwgVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zLCBWUE5HYXRld2F5VjIgfSBmcm9tICcuL3JvdXRlJztcbmltcG9ydCB7IElTdWJuZXRWMiB9IGZyb20gJy4vc3VibmV0LXYyJztcbmltcG9ydCB7IEFjY291bnRQcmluY2lwYWwsIEVmZmVjdCwgUG9saWN5U3RhdGVtZW50LCBSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJVlBDQ2lkckJsb2NrIH0gZnJvbSAnLi92cGMtdjInO1xuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIExpc3Qgb2Ygc3VibmV0cyB3aGVyZSByb3V0ZSB0byBFR1cgd2lsbCBiZSBhZGRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHJvdXRlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldHM/OiBTdWJuZXRTZWxlY3Rpb25bXTtcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gSXB2NiBhZGRyZXNzIGZvciBFR1cgcm91dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSAnOjovMCcgYWxsIElwdjYgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKiBQcm92aWRlZCBuYW1lIHdpbGwgYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5hbWUgdGFnIGFzc29jaWF0ZWQgYW5kIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBJbnRlcm5ldEdhdGV3YXkgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmV0R2F0ZXdheU9wdGlvbnN7XG5cbiAgLyoqXG4gICAqIERlc3RpbmF0aW9uIElwdjYgYWRkcmVzcyBmb3IgRUdXIHJvdXRlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJzAuMC4wLjAnIGFsbCBJcHY0IHRyYWZmaWNcbiAgICovXG4gIHJlYWRvbmx5IGlwdjREZXN0aW5hdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gSXB2NiBhZGRyZXNzIGZvciBFR1cgcm91dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSAnOjovMCcgYWxsIElwdjYgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkRlc3RpbmF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICogUHJvdmlkZWQgbmFtZSB3aWxsIGJlIHVzZWQgZm9yIHRhZ2dpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcmVzb3VyY2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBWUE5HYXRld2F5VjIgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQTkdhdGV3YXlWMk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgVlBOIGNvbm5lY3Rpb24gdGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IHN1cHBvcnRzLlxuICAgKiBAc2VlIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cG5nYXRld2F5Lmh0bWwjY2ZuLWVjMi12cG5nYXRld2F5LXR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IFZwbkNvbm5lY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmF0ZSBBdXRvbm9tb3VzIFN5c3RlbSBOdW1iZXIgKEFTTikgZm9yIHRoZSBBbWF6b24gc2lkZSBvZiBhIEJHUCBzZXNzaW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIEFTTiBzZXQgZm9yIEJHUCBzZXNzaW9uXG4gICAqL1xuICByZWFkb25seSBhbWF6b25TaWRlQXNuPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgVlBOIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcmVzb3VyY2UgcHJvdmlzaW9uZWQgd2l0aG91dCBhbnkgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBuR2F0ZXdheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN1Ym5ldHMgd2hlcmUgdGhlIHJvdXRlIHByb3BhZ2F0aW9uIHNob3VsZCBiZSBhZGRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwcm9wb2dhdGlvbiBmb3Igcm91dGVzXG4gICAqL1xuICByZWFkb25seSB2cG5Sb3V0ZVByb3BhZ2F0aW9uPzogU3VibmV0U2VsZWN0aW9uW107XG59XG5cbi8qKlxuICogUGxhY2Vob2xkZXIgdG8gc2VlIHdoYXQgZXh0cmEgcHJvcHMgd2UgbWlnaHQgbmVlZCxcbiAqIHdpbGwgYmUgYWRkZWQgdG8gb3JpZ2luYWwgSVZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElWcGNWMiBleHRlbmRzIElWcGMge1xuICAvKipcbiAgICogVGhlIHNlY29uZGFyeSBDSURSIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIFZQQy5cbiAgICpcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbCN2cGMtcmVzaXplfS5cbiAgICovXG4gIHJlYWRvbmx5IHNlY29uZGFyeUNpZHJCbG9jaz86IElWUENDaWRyQmxvY2tbXTtcblxuICAvKipcbiAgICogVGhlIHByaW1hcnkgSVB2NCBDSURSIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKiBOZWVkZWQgaW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIHZwYyByYW5nZSBvZiBzdWJuZXRcbiAgICogY3VycmVudCBwcm9wIHZwY0NpZHJCbG9jayByZWZlcnMgdG8gdGhlIHRva2VuIHZhbHVlXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWwjdnBjLXNpemluZy1pcHY0fS5cbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgdG8gb3ZlcnJpZGUgaW5mZXJyZWQgcmVnaW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY3VycmVudCBzdGFjaydzIGVudmlyb25tZW50IHJlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgQVdTIGFjY291bnQgdGhhdCBvd25zIHRoZSBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgYWNjb3VudCBpZCBvZiB0aGUgcGFyZW50IHN0YWNrXG4gICAqL1xuICByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUHY0IENJRFIgcHJvdmlzaW9uZWQgdW5kZXIgcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU0gcG9vbFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qcm92aXNpb25lZENpZHJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFZwY05hbWUgdG8gYmUgdXNlZCBmb3IgdGFnZ2luZyBpdHMgY29tcG9uZW50c1xuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB2cGNOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gRWdyZXNzIG9ubHkgSW50ZXJuZXQgR2F0ZXdheSB0byBjdXJyZW50IFZQQy5cbiAgICogQ2FuIG9ubHkgYmUgdXNlZCBmb3IgaXB2NiBlbmFibGVkIFZQQ3MuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvZWdyZXNzLW9ubHktaW50ZXJuZXQtZ2F0ZXdheS1iYXNpY3MuaHRtbH0uXG4gICAqL1xuICBhZGRFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5KG9wdGlvbnM/OiBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5T3B0aW9ucyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gSW50ZXJuZXQgR2F0ZXdheSB0byBjdXJyZW50IFZQQy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtaWd3LWludGVybmV0LWFjY2Vzcy5odG1sfS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZpbmVzIHJvdXRlIGZvciBhbGwgaXB2NCgnMC4wLjAuMCcpIGFuZCBpcHY2IGFkZHJlc3NlcygnOjovMCcpXG4gICAqL1xuICBhZGRJbnRlcm5ldEdhdGV3YXkob3B0aW9ucz86IEludGVybmV0R2F0ZXdheU9wdGlvbnMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGRzIFZQTiBHYXRld2F5IHRvIFZQQyBhbmQgc2V0IHJvdXRlIHByb3BvZ2F0aW9uLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cG5nYXRld2F5Lmh0bWx9LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHJvdXRlIHByb3BvZ2F0aW9uXG4gICAqL1xuICBlbmFibGVWcG5HYXRld2F5VjIob3B0aW9uczogVlBOR2F0ZXdheVYyT3B0aW9ucyk6IFZQTkdhdGV3YXlWMjtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBOQVQgR2F0ZXdheSB0byBWUENcbiAgICogQSBOQVQgZ2F0ZXdheSBpcyBhIE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKSBzZXJ2aWNlLiBOQVQgR2F0ZXdheSBDb25uZWN0aXZpdHkgY2FuIGJlIG9mIHR5cGUgYFB1YmxpY2Agb3IgYFByaXZhdGVgLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sfS5cbiAgICpcbiAgICogQGRlZmF1bHQgQ29ubmVjdGl2aXR5VHlwZS5QdWJsaWNcbiAgICovXG4gIGFkZE5hdEdhdGV3YXkob3B0aW9uczogTmF0R2F0ZXdheU9wdGlvbnMpOiBOYXRHYXRld2F5O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IHJvbGUgdG8gYWNjZXB0b3IgVlBDIGFjY291bnRcbiAgICogQSBjcm9zcyBhY2NvdW50IHJvbGUgaXMgcmVxdWlyZWQgZm9yIHRoZSBWUEMgdG8gcGVlciB3aXRoIGFub3RoZXIgYWNjb3VudC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3BlZXItd2l0aC12cGMtaW4tYW5vdGhlci1hY2NvdW50Lmh0bWx9LlxuICAgKi9cbiAgY3JlYXRlQWNjZXB0b3JWcGNSb2xlKHJlcXVlc3RvckFjY291bnRJZDogc3RyaW5nKTogUm9sZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwZWVyaW5nIGNvbm5lY3Rpb25cbiAgICogQSBwZWVyaW5nIGNvbm5lY3Rpb24gaXMgYSBwcml2YXRlIHZpcnR1YWwgbmV0d29yayBlc3RhYmxpc2hlZCBiZXR3ZWVuIHR3byBWUENzLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvcGVlcmluZy93aGF0LWlzLXZwYy1wZWVyaW5nLmh0bWx9LlxuICAgKi9cbiAgY3JlYXRlUGVlcmluZ0Nvbm5lY3Rpb24oaWQ6IHN0cmluZywgb3B0aW9uczogVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zKTogVlBDUGVlcmluZ0Nvbm5lY3Rpb247XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBWUEMgKFZpcnR1YWwgUHJpdmF0ZSBDbG91ZCkgaW4gQVdTLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2FwaS92Mi9kb2NzL2F3cy1jZGstbGliLmF3c19lYzIuVnBjLmh0bWx8QVdTIENESyBEb2N1bWVudGF0aW9uIG9uIFZQQ3N9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVnBjVjJCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVnBjVjIge1xuXG4gIC8qKlxuICAqIElkZW50aWZpZXIgZm9yIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAqIEFybiBvZiB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICogQ0lEUiByYW5nZSBmb3IgdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAqIExpc3Qgb2YgcHVibGljIHN1Ym5ldHMgaW4gdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHM6IElTdWJuZXRbXSA9IFtdO1xuXG4gIC8qKlxuICAqIExpc3Qgb2YgcHJpdmF0ZSBzdWJuZXRzIGluIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlU3VibmV0czogSVN1Ym5ldFtdID0gW107XG5cbiAgLyoqXG4gICogTGlzdCBvZiBpc29sYXRlZCBzdWJuZXRzIGluIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpc29sYXRlZFN1Ym5ldHM6IElTdWJuZXRbXTtcblxuICAvKipcbiAgKiBBWnMgZm9yIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyByZWFkb25seSBhdmFpbGFiaWxpdHlab25lczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgKiBEZXBlbmRhYmxlIHRoYXQgY2FuIGJlIGRlcGVuZGVkIHVwb24gdG8gZm9yY2UgaW50ZXJuZXQgY29ubmVjdGl2aXR5IGVzdGFibGlzaGVkIG9uIHRoZSBWUENcbiAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlO1xuXG4gIC8qKlxuICAgKiBEZXBlbmRhYmxlIHRoYXQgY2FuIGJlIGRlcGVuZGVkIHVwb24gdG8gZm9yY2UgaW50ZXJuZXQgY29ubmVjdGl2aXR5IGVzdGFibGlzaGVkIG9uIHRoZSBWUENcbiAgICogQWRkIGlndyB0byB0aGlzIGlmIGl0cyBhIHB1YmxpYyBzdWJuZXRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPSBuZXcgRGVwZW5kZW5jeUdyb3VwKCk7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBJUHMgZm9yIHRoZSBWUEMsIGNhbiBiZSBtdWx0aXBsZSBJcHY0IG9yIElwdjZcbiAgICogSXB2NCBzaG91bGQgYmUgd2l0aGluIFJGQyMxOTE4IHJhbmdlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc2Vjb25kYXJ5Q2lkckJsb2NrPzogSVZQQ0NpZHJCbG9ja1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBWUEMuXG4gICAqIE5lZWRlZCBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgdnBjIHJhbmdlIG9mIHN1Ym5ldFxuICAgKiBjdXJyZW50IHByb3AgdnBjQ2lkckJsb2NrIHJlZmVycyB0byB0aGUgdG9rZW4gdmFsdWVcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbCN2cGMtc2l6aW5nLWlwdjR9LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogVnBjTmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nIGl0cyBjb21wb25lbnRzXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgKiBSZWdpb24gZm9yIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgKiBJZGVudGlmaWVyIG9mIHRoZSBvd25lciBmb3IgdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IG93bmVyQWNjb3VudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQdjQgQ0lEUiBwcm92aXNpb25lZCB1bmRlciBwb29sXG4gICAqIFJlcXVpcmVkIHRvIGNoZWNrIGZvciBvdmVybGFwcGluZyBDSURScyBhZnRlciBwcm92aXNpb25pbmdcbiAgICogaXMgY29tcGxldGUgdW5kZXIgSVBBTSBwb29sXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaXB2NElwYW1Qcm92aXNpb25lZENpZHJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgZG9uJ3QgZXJyb3Igb3V0IG9uIHRyeWluZyB0byBzZWxlY3Qgc3VibmV0c1xuICAqL1xuICBwcm90ZWN0ZWQgaW5jb21wbGV0ZVN1Ym5ldERlZmluaXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogTXV0YWJsZSBwcml2YXRlIGZpZWxkIGZvciB0aGUgdnBuR2F0ZXdheUlkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIF92cG5HYXRld2F5SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE11dGFibGUgcHJpdmF0ZSBmaWVsZCBmb3IgdGhlIGludGVybmV0R2F0ZXdheUlkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIF9pbnRlcm5ldEdhdGV3YXlJZCA9ICcnO1xuXG4gIC8qKlxuICAqIFJldHVybiBpbmZvcm1hdGlvbiBvbiB0aGUgc3VibmV0cyBhcHByb3ByaWF0ZSBmb3IgdGhlIGdpdmVuIHNlbGVjdGlvbiBzdHJhdGVneVxuICAqXG4gICogUmVxdWlyZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VibmV0IGlzIG1hdGNoZWQsIHRocm93cyBhIGRlc2NyaXB0aXZlXG4gICogZXJyb3IgbWVzc2FnZSBvdGhlcndpc2UuXG4gICovXG4gIHB1YmxpYyBzZWxlY3RTdWJuZXRzKHNlbGVjdGlvbjogU3VibmV0U2VsZWN0aW9uID0ge30pOiBTZWxlY3RlZFN1Ym5ldHMge1xuICAgIGNvbnN0IHN1Ym5ldHMgPSB0aGlzLnNlbGVjdFN1Ym5ldE9iamVjdHMoc2VsZWN0aW9uKTtcbiAgICBjb25zdCBwdWJzID0gbmV3IFNldCh0aGlzLnB1YmxpY1N1Ym5ldHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Ym5ldElkczogc3VibmV0cy5tYXAocyA9PiBzLnN1Ym5ldElkKSxcbiAgICAgIGdldCBhdmFpbGFiaWxpdHlab25lcygpOiBzdHJpbmdbXSB7IHJldHVybiBzdWJuZXRzLm1hcChzID0+IHMuYXZhaWxhYmlsaXR5Wm9uZSk7IH0sXG4gICAgICBpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkOiB0YXAobmV3IENvbXBvc2l0ZURlcGVuZGFibGUoKSwgZCA9PiBzdWJuZXRzLmZvckVhY2gocyA9PiBkLmFkZChzLmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQpKSksXG4gICAgICBzdWJuZXRzLFxuICAgICAgaGFzUHVibGljOiBzdWJuZXRzLnNvbWUocyA9PiBwdWJzLmhhcyhzKSksXG4gICAgICBpc1BlbmRpbmdMb29rdXA6IHRoaXMuaW5jb21wbGV0ZVN1Ym5ldERlZmluaXRpb24sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAqIEFkZHMgYSBWUE4gR2F0ZXdheSB0byB0aGlzIFZQQ1xuICAqIEBkZXByZWNhdGVkIHVzZSBlbmFibGVWcG5HYXRld2F5VjIgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBWUENWMi5Sb3V0ZVxuICAqL1xuICBwdWJsaWMgZW5hYmxlVnBuR2F0ZXdheShvcHRpb25zOiBFbmFibGVWcG5HYXRld2F5T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZwbkdhdGV3YXlJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgVlBOIEdhdGV3YXkgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHZwbkdhdGV3YXkgPSBuZXcgVnBuR2F0ZXdheSh0aGlzLCAnVnBuR2F0ZXdheScsIHtcbiAgICAgIGFtYXpvblNpZGVBc246IG9wdGlvbnMuYW1hem9uU2lkZUFzbixcbiAgICAgIHR5cGU6IFZwbkNvbm5lY3Rpb25UeXBlLklQU0VDXzEsXG4gICAgfSk7XG5cbiAgICB0aGlzLl92cG5HYXRld2F5SWQgPSB2cG5HYXRld2F5LmdhdGV3YXlJZDtcblxuICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBuZXcgQ2ZuVlBDR2F0ZXdheUF0dGFjaG1lbnQodGhpcywgJ1ZQQ1ZQTkdXJywge1xuICAgICAgdnBjSWQ6IHRoaXMudnBjSWQsXG4gICAgICB2cG5HYXRld2F5SWQ6IHRoaXMuX3ZwbkdhdGV3YXlJZCxcbiAgICB9KTtcblxuICAgIC8vIFByb3BhZ2F0ZSByb3V0ZXMgb24gcm91dGUgdGFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmlnaHQgc3VibmV0c1xuICAgIGNvbnN0IHZwblJvdXRlUHJvcGFnYXRpb24gPSBvcHRpb25zLnZwblJvdXRlUHJvcGFnYXRpb24gPz8gW3t9XTtcbiAgICBjb25zdCByb3V0ZVRhYmxlSWRzID0gYWxsUm91dGVUYWJsZUlkcyhmbGF0dGVuKHZwblJvdXRlUHJvcGFnYXRpb24ubWFwKHMgPT4gdGhpcy5zZWxlY3RTdWJuZXRzKHMpLnN1Ym5ldHMpKSk7XG5cbiAgICBpZiAocm91dGVUYWJsZUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZEVycm9yKGBlbmFibGVWcG5HYXRld2F5OiBubyBzdWJuZXRzIG1hdGNoaW5nIHNlbGVjdGlvbjogJyR7SlNPTi5zdHJpbmdpZnkodnBuUm91dGVQcm9wYWdhdGlvbil9Jy4gU2VsZWN0IG90aGVyIHN1Ym5ldHMgdG8gYWRkIHJvdXRlcyB0by5gKTtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZVByb3BhZ2F0aW9uID0gbmV3IENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uKHRoaXMsICdSb3V0ZVByb3BhZ2F0aW9uJywge1xuICAgICAgcm91dGVUYWJsZUlkcyxcbiAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5fdnBuR2F0ZXdheUlkLFxuICAgIH0pO1xuICAgICAgLy8gVGhlIEFXUzo6RUMyOjpWUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiByZXNvdXJjZSBjYW5ub3QgdXNlIHRoZSBWUE4gZ2F0ZXdheVxuICAgICAgLy8gdW50aWwgaXQgaGFzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZCB0byB0aGUgVlBDLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdnBuLWdhdGV3YXlyb3V0ZXByb3AuaHRtbFxuICAgIHJvdXRlUHJvcGFnYXRpb24ubm9kZS5hZGREZXBlbmRlbmN5KGF0dGFjaG1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgVlBOR0F0ZXdheVYyIHRvIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgZW5hYmxlVnBuR2F0ZXdheVYyKG9wdGlvbnM6IFZQTkdhdGV3YXlWMk9wdGlvbnMpOiBWUE5HYXRld2F5VjIge1xuXG4gICAgaWYgKHRoaXMudnBuR2F0ZXdheUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBWUE4gR2F0ZXdheSBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdnBuR2F0ZXdheSA9IG5ldyBWUE5HYXRld2F5VjIodGhpcywgJ1ZwbkdhdGV3YXknLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZC5hZGQodnBuR2F0ZXdheSk7XG4gICAgdGhpcy5fdnBuR2F0ZXdheUlkID0gdnBuR2F0ZXdheS5yb3V0ZXJUYXJnZXRJZDtcblxuICAgIHJldHVybiB2cG5HYXRld2F5O1xuICB9XG5cbiAgLyoqXG4gICogQWRkcyBhIG5ldyBWUE4gY29ubmVjdGlvbiB0byB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWRkVnBuQ29ubmVjdGlvbihpZDogc3RyaW5nLCBvcHRpb25zOiBWcG5Db25uZWN0aW9uT3B0aW9ucyk6IFZwbkNvbm5lY3Rpb24ge1xuICAgIHJldHVybiBuZXcgVnBuQ29ubmVjdGlvbih0aGlzLCBpZCwge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEFkZHMgYSBuZXcgY2xpZW50IFZQTiBlbmRwb2ludCB0byB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWRkQ2xpZW50VnBuRW5kcG9pbnQoaWQ6IHN0cmluZywgb3B0aW9uczogQ2xpZW50VnBuRW5kcG9pbnRPcHRpb25zKTogQ2xpZW50VnBuRW5kcG9pbnQge1xuICAgIHJldHVybiBuZXcgQ2xpZW50VnBuRW5kcG9pbnQodGhpcywgaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB2cGM6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgKiBBZGRzIGEgbmV3IGludGVyZmFjZSBlbmRwb2ludCB0byB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWRkSW50ZXJmYWNlRW5kcG9pbnQoaWQ6IHN0cmluZywgb3B0aW9uczogSW50ZXJmYWNlVnBjRW5kcG9pbnRPcHRpb25zKTogSW50ZXJmYWNlVnBjRW5kcG9pbnQge1xuICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnQodGhpcywgaWQsIHtcbiAgICAgIHZwYzogdGhpcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgKiBBZGRzIGEgbmV3IGdhdGV3YXkgZW5kcG9pbnQgdG8gdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIGFkZEdhdGV3YXlFbmRwb2ludChpZDogc3RyaW5nLCBvcHRpb25zOiBHYXRld2F5VnBjRW5kcG9pbnRPcHRpb25zKTogR2F0ZXdheVZwY0VuZHBvaW50IHtcbiAgICByZXR1cm4gbmV3IEdhdGV3YXlWcGNFbmRwb2ludCh0aGlzLCBpZCwge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IEVncmVzcyBPbmx5IEludGVybmV0IEdhdGV3YXkgdG8gdGhpcyBWUEMgYW5kIGRlZmluZXMgYSBuZXcgcm91dGVcbiAgICogdG8gdGhlIHJvdXRlIHRhYmxlIG9mIGdpdmVuIHN1Ym5ldHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gaW4gY2FzZSBvZiBubyBpbnB1dCBzdWJuZXRzLCBubyByb3V0ZSBpcyBjcmVhdGVkXG4gICAqL1xuICBwdWJsaWMgYWRkRWdyZXNzT25seUludGVybmV0R2F0ZXdheShvcHRpb25zPzogRWdyZXNzT25seUludGVybmV0R2F0ZXdheU9wdGlvbnMpOiB2b2lkIHtcblxuICAgIGNvbnN0IGVndyA9IG5ldyBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5KHRoaXMsICdFZ3Jlc3NPbmx5R1cnLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZTogb3B0aW9ucz8uZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWUsXG4gICAgfSk7XG5cbiAgICBsZXQgdXNlSXB2NjtcbiAgICBpZiAodGhpcy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICAgIHVzZUlwdjYgPSAodGhpcy5zZWNvbmRhcnlDaWRyQmxvY2suc29tZSgoc2Vjb25kYXJ5QWRkcmVzcykgPT4gc2Vjb25kYXJ5QWRkcmVzcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPT09IHRydWUgfHxcbiAgICBzZWNvbmRhcnlBZGRyZXNzLmlwdjZJcGFtUG9vbElkICE9IHVuZGVmaW5lZCkpO1xuICAgIH1cblxuICAgIGlmICghdXNlSXB2Nikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFZ3Jlc3Mgb25seSBJR1cgY2FuIG9ubHkgYmUgYWRkZWQgdG8gSXB2NiBlbmFibGVkIFZQQycpO1xuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucz8uc3VibmV0cykge1xuICAgICAgY29uc3Qgc3VibmV0cyA9IGZsYXR0ZW4ob3B0aW9ucy5zdWJuZXRzLm1hcChzID0+IHRoaXMuc2VsZWN0U3VibmV0cyhzKS5zdWJuZXRzKSk7XG4gICAgICBzdWJuZXRzLmZvckVhY2goKHN1Ym5ldCkgPT4ge1xuICAgICAgICB0aGlzLmNyZWF0ZUVncmVzc1JvdXRlKHN1Ym5ldCwgZWd3LCBvcHRpb25zLmRlc3RpbmF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcm91dGUgZm9yIEVHVyB3aXRoIGRlc3RpbmF0aW9uIHNldCB0byBvdXRib3VuZCBJUHY2KCc6Oi8wJykgb3IgY3VzdG9tIGlwdjYgYWRkcmVzcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUVncmVzc1JvdXRlKHN1Ym5ldDogSVN1Ym5ldFYyLCBlZ3c6IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXksIGRlc3RpbmF0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGVzdGluYXRpb25JcHY2ID0gZGVzdGluYXRpb24gPz8gJzo6LzAnO1xuICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRWdyZXNzUm91dGVgLCB7XG4gICAgICByb3V0ZVRhYmxlOiBzdWJuZXQucm91dGVUYWJsZSxcbiAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbklwdjYsIC8vIElQdjYgZGVmYXVsdCByb3V0ZVxuICAgICAgdGFyZ2V0OiB7IGdhdGV3YXk6IGVndyB9LFxuICAgICAgcm91dGVOYW1lOiAnQ0RLRUlHV1JvdXRlJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IEludGVybmV0IEdhdGV3YXkgdG8gdGhpcyBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBjcmVhdGVzIGEgbmV3IHJvdXRlIGZvciBwdWJsaWMgc3VibmV0cyh3aXRoIGFsbCBvdXRib3VuZCBhY2Nlc3MpIHRvIHRoZSBJbnRlcm5ldCBHYXRld2F5LlxuICAgKi9cbiAgcHVibGljIGFkZEludGVybmV0R2F0ZXdheShvcHRpb25zPzogSW50ZXJuZXRHYXRld2F5T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pbnRlcm5ldEdhdGV3YXlJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgSW50ZXJuZXQgR2F0ZXdheSBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaWd3ID0gbmV3IEludGVybmV0R2F0ZXdheSh0aGlzLCAnSW50ZXJuZXRHYXRld2F5Jywge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgaW50ZXJuZXRHYXRld2F5TmFtZTogb3B0aW9ucz8uaW50ZXJuZXRHYXRld2F5TmFtZSxcbiAgICB9KTtcblxuICAgIHRoaXMuX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQuYWRkKGlndyk7XG4gICAgdGhpcy5faW50ZXJuZXRHYXRld2F5SWQgPSBpZ3cucm91dGVyVGFyZ2V0SWQ7XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcHVibGljIHN1Ym5ldHMgZGVmaW5lZCwgbm8gZGVmYXVsdCByb3V0ZSB3aWxsIGJlIGFkZGVkXG4gICAgaWYgKHRoaXMucHVibGljU3VibmV0cykge1xuICAgICAgdGhpcy5wdWJsaWNTdWJuZXRzLmZvckVhY2goIChzKSA9PiB0aGlzLmFkZERlZmF1bHRJbnRlcm5ldFJvdXRlKHMsIGlndywgb3B0aW9ucykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGRlZmF1bHQgcm91dGUgZm9yIHRoZSBpbnRlcm5ldCBnYXRld2F5XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBhZGREZWZhdWx0SW50ZXJuZXRSb3V0ZShzdWJuZXQ6IElTdWJuZXRWMiwgaWd3OiBJbnRlcm5ldEdhdGV3YXksIG9wdGlvbnM/OiBJbnRlcm5ldEdhdGV3YXlPcHRpb25zKTogdm9pZCB7XG5cbiAgICBpZiAoc3VibmV0LnN1Ym5ldFR5cGUgIT09IFN1Ym5ldFR5cGUuUFVCTElDKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHB1YmxpYyBzdWJuZXRzIGRlZmluZWQgdG8gYWRkIHJvdXRlIGZvciBpbnRlcm5ldCBnYXRld2F5Jyk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGRlZmF1bHQgcm91dGUgdG8gSUdXIGZvciBJUHY2XG4gICAgaWYgKHN1Ym5ldC5pcHY2Q2lkckJsb2NrKSB7XG4gICAgICBuZXcgUm91dGUodGhpcywgYCR7c3VibmV0Lm5vZGUuaWR9LURlZmF1bHRJUHY2Um91dGVgLCB7XG4gICAgICAgIHJvdXRlVGFibGU6IHN1Ym5ldC5yb3V0ZVRhYmxlLFxuICAgICAgICBkZXN0aW5hdGlvbjogb3B0aW9ucz8uaXB2NkRlc3RpbmF0aW9uID8/ICc6Oi8wJyxcbiAgICAgICAgdGFyZ2V0OiB7IGdhdGV3YXk6IGlndyB9LFxuICAgICAgICByb3V0ZU5hbWU6ICdDREtEZWZhdWx0SVB2NlJvdXRlJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvL0FkZCBkZWZhdWx0IHJvdXRlIHRvIElHVyBmb3IgSVB2NFxuICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRGVmYXVsdFJvdXRlYCwge1xuICAgICAgcm91dGVUYWJsZTogc3VibmV0LnJvdXRlVGFibGUsXG4gICAgICBkZXN0aW5hdGlvbjogb3B0aW9ucz8uaXB2NERlc3RpbmF0aW9uID8/ICcwLjAuMC4wLzAnLFxuICAgICAgdGFyZ2V0OiB7IGdhdGV3YXk6IGlndyB9LFxuICAgICAgcm91dGVOYW1lOiAnQ0RLRGVmYXVsdElQdjRSb3V0ZScsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBOQVQgR2F0ZXdheSB0byB0aGUgZ2l2ZW4gc3VibmV0IG9mIHRoaXMgVlBDXG4gICAqIG9mIGdpdmVuIHN1Ym5ldHMuXG4gICAqL1xuICBwdWJsaWMgYWRkTmF0R2F0ZXdheShvcHRpb25zOiBOYXRHYXRld2F5T3B0aW9ucyk6IE5hdEdhdGV3YXkge1xuICAgIGlmIChvcHRpb25zLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDICYmICF0aGlzLl9pbnRlcm5ldEdhdGV3YXlJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIGEgUHVibGljIE5BVCBHYXRld2F5IHdpdGhvdXQgYW4gSW50ZXJuZXQgR2F0ZXdheSBlbmFibGVkIG9uIFZQQycpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE5hdEdhdGV3YXkodGhpcywgJ05BVEdhdGV3YXknLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQWRkcyBhIG5ldyBmbG93IGxvZyB0byB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWRkRmxvd0xvZyhpZDogc3RyaW5nLCBvcHRpb25zPzogRmxvd0xvZ09wdGlvbnMpOiBGbG93TG9nIHtcbiAgICByZXR1cm4gbmV3IEZsb3dMb2codGhpcywgaWQsIHtcbiAgICAgIHJlc291cmNlVHlwZTogRmxvd0xvZ1Jlc291cmNlVHlwZS5mcm9tVnBjKHRoaXMpLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIENyZWF0ZXMgcGVlcmluZyBjb25uZWN0aW9uIHJvbGUgZm9yIGFjY2VwdG9yIFZQQ1xuICAqL1xuICBwdWJsaWMgY3JlYXRlQWNjZXB0b3JWcGNSb2xlKHJlcXVlc3RvckFjY291bnRJZDogc3RyaW5nKTogUm9sZSB7XG4gICAgY29uc3QgcGVlcmluZ1JvbGUgPSBuZXcgUm9sZSh0aGlzLCAnVnBjUGVlcmluZ1JvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBBY2NvdW50UHJpbmNpcGFsKHJlcXVlc3RvckFjY291bnRJZCksXG4gICAgICByb2xlTmFtZTogJ1ZwY1BlZXJpbmdSb2xlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmVzdHJpY3RpdmUgcm9sZSBmb3IgVlBDIHBlZXJpbmcnLFxuICAgIH0pO1xuXG4gICAgcGVlcmluZ1JvbGUuYWRkVG9Qb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnZWMyOkFjY2VwdFZwY1BlZXJpbmdDb25uZWN0aW9uJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7QXdzLlBBUlRJVElPTn06ZWMyOiR7dGhpcy5yZWdpb259OiR7dGhpcy5vd25lckFjY291bnRJZH06dnBjLyR7dGhpcy52cGNJZH1gXSxcbiAgICB9KSk7XG5cbiAgICBwZWVyaW5nUm9sZS5hZGRUb1BvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGFjdGlvbnM6IFsnZWMyOkFjY2VwdFZwY1BlZXJpbmdDb25uZWN0aW9uJ10sXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtBd3MuUEFSVElUSU9OfTplYzI6JHt0aGlzLnJlZ2lvbn06JHt0aGlzLm93bmVyQWNjb3VudElkfTp2cGMtcGVlcmluZy1jb25uZWN0aW9uLypgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2VjMjpBY2NlcHRlclZwYyc6IGBhcm46JHtBd3MuUEFSVElUSU9OfTplYzI6JHt0aGlzLnJlZ2lvbn06JHt0aGlzLm93bmVyQWNjb3VudElkfTp2cGMvJHt0aGlzLnZwY0lkfWAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pKTtcblxuICAgIHJldHVybiBwZWVyaW5nUm9sZTtcbiAgfVxuXG4gIC8qKlxuICAqIENyZWF0ZXMgYSBwZWVyaW5nIGNvbm5lY3Rpb25cbiAgKi9cbiAgcHVibGljIGNyZWF0ZVBlZXJpbmdDb25uZWN0aW9uKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyk6IFZQQ1BlZXJpbmdDb25uZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFZQQ1BlZXJpbmdDb25uZWN0aW9uKHRoaXMsIGlkLCB7XG4gICAgICByZXF1ZXN0b3JWcGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogUmV0dXJucyB0aGUgaWQgb2YgdGhlIFZQTiBHYXRld2F5IChpZiBlbmFibGVkKVxuICAqL1xuICBwdWJsaWMgZ2V0IHZwbkdhdGV3YXlJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl92cG5HYXRld2F5SWQ7XG4gIH1cblxuICAvKipcbiAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgSW50ZXJuZXQgR2F0ZXdheSAoaWYgZW5hYmxlZClcbiAgKi9cbiAgcHVibGljIGdldCBpbnRlcm5ldEdhdGV3YXlJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcm5ldEdhdGV3YXlJZDtcbiAgfVxuXG4gIC8qKlxuICAqIFJldHVybiB0aGUgc3VibmV0cyBhcHByb3ByaWF0ZSBmb3IgdGhlIHBsYWNlbWVudCBzdHJhdGVneVxuICAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0U3VibmV0T2JqZWN0cyhzZWxlY3Rpb246IFN1Ym5ldFNlbGVjdGlvbiA9IHt9KTogSVN1Ym5ldFtdIHtcbiAgICBzZWxlY3Rpb24gPSB0aGlzLnJlaWZ5U2VsZWN0aW9uRGVmYXVsdHMoc2VsZWN0aW9uKTtcblxuICAgIGlmIChzZWxlY3Rpb24uc3VibmV0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gc2VsZWN0aW9uLnN1Ym5ldHM7XG4gICAgfVxuXG4gICAgbGV0IHN1Ym5ldHM7XG5cbiAgICBpZiAoc2VsZWN0aW9uLnN1Ym5ldEdyb3VwTmFtZSAhPT0gdW5kZWZpbmVkKSB7IC8vIFNlbGVjdCBieSBuYW1lXG4gICAgICBzdWJuZXRzID0gdGhpcy5zZWxlY3RTdWJuZXRPYmplY3RzQnlOYW1lKHNlbGVjdGlvbi5zdWJuZXRHcm91cE5hbWUpO1xuXG4gICAgfSBlbHNlIHsgLy8gT3Igc3BlY2lmeSBieSB0eXBlXG4gICAgICBjb25zdCB0eXBlID0gc2VsZWN0aW9uLnN1Ym5ldFR5cGUgfHwgU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTO1xuICAgICAgc3VibmV0cyA9IHRoaXMuc2VsZWN0U3VibmV0T2JqZWN0c0J5VHlwZSh0eXBlKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBhbGwgdGhlIGZpbHRlcnNcbiAgICBzdWJuZXRzID0gdGhpcy5hcHBseVN1Ym5ldEZpbHRlcnMoc3VibmV0cywgc2VsZWN0aW9uLnN1Ym5ldEZpbHRlcnMgPz8gW10pO1xuXG4gICAgcmV0dXJuIHN1Ym5ldHM7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U3VibmV0RmlsdGVycyhzdWJuZXRzOiBJU3VibmV0W10sIGZpbHRlcnM6IFN1Ym5ldEZpbHRlcltdKTogSVN1Ym5ldFtdIHtcbiAgICBsZXQgZmlsdGVyZWQgPSBzdWJuZXRzO1xuICAgIC8vIEFwcGx5IGVhY2ggZmlsdGVyIGluIHNlcXVlbmNlXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xuICAgICAgZmlsdGVyZWQgPSBmaWx0ZXIuc2VsZWN0U3VibmV0cyhmaWx0ZXJlZCk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0U3VibmV0T2JqZWN0c0J5TmFtZShncm91cE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFsbFN1Ym5ldHMgPSBbLi4udGhpcy5wdWJsaWNTdWJuZXRzLCAuLi50aGlzLnByaXZhdGVTdWJuZXRzLCAuLi50aGlzLmlzb2xhdGVkU3VibmV0c107XG4gICAgY29uc3Qgc3VibmV0cyA9IGFsbFN1Ym5ldHMuZmlsdGVyKHMgPT4gc3VibmV0R3JvdXBOYW1lRnJvbUNvbnN0cnVjdElkKHMpID09PSBncm91cE5hbWUpO1xuXG4gICAgaWYgKHN1Ym5ldHMubGVuZ3RoID09PSAwICYmICF0aGlzLmluY29tcGxldGVTdWJuZXREZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBuYW1lcyA9IEFycmF5LmZyb20obmV3IFNldChhbGxTdWJuZXRzLm1hcChzdWJuZXRHcm91cE5hbWVGcm9tQ29uc3RydWN0SWQpKSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBzdWJuZXQgZ3JvdXBzIHdpdGggbmFtZSAnJHtncm91cE5hbWV9JyBpbiB0aGlzIFZQQy4gQXZhaWxhYmxlIG5hbWVzOiAke25hbWVzfWApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJuZXRzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RTdWJuZXRPYmplY3RzQnlUeXBlKHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUpIHtcbiAgICBjb25zdCBhbGxTdWJuZXRzID0ge1xuICAgICAgW1N1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRF06IHRoaXMuaXNvbGF0ZWRTdWJuZXRzLFxuICAgICAgW1N1Ym5ldFR5cGUuSVNPTEFURURdOiB0aGlzLmlzb2xhdGVkU3VibmV0cyxcbiAgICAgIFtTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9OQVRdOiB0aGlzLnByaXZhdGVTdWJuZXRzLFxuICAgICAgW1N1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU106IHRoaXMucHJpdmF0ZVN1Ym5ldHMsXG4gICAgICBbU3VibmV0VHlwZS5QUklWQVRFXTogdGhpcy5wcml2YXRlU3VibmV0cyxcbiAgICAgIFtTdWJuZXRUeXBlLlBVQkxJQ106IHRoaXMucHVibGljU3VibmV0cyxcbiAgICB9O1xuXG4gICAgY29uc3Qgc3VibmV0cyA9IGFsbFN1Ym5ldHNbc3VibmV0VHlwZV07XG5cbiAgICAvLyBGb3JjZSBtZXJnZSBjb25mbGljdCBoZXJlIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvNDA4OVxuICAgIC8vIHNlZSBJbXBvcnRlZFZwY1xuXG4gICAgaWYgKHN1Ym5ldHMubGVuZ3RoID09PSAwICYmICF0aGlzLmluY29tcGxldGVTdWJuZXREZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBhdmFpbGFibGVUeXBlcyA9IE9iamVjdC5lbnRyaWVzKGFsbFN1Ym5ldHMpLmZpbHRlcigoW18sIHN1YnNdKSA9PiBzdWJzLmxlbmd0aCA+IDApLm1hcCgoW3R5cGVOYW1lLCBfXSkgPT4gdHlwZU5hbWUpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gJyR7c3VibmV0VHlwZX0nIHN1Ym5ldCBncm91cHMgaW4gdGhpcyBWUEMuIEF2YWlsYWJsZSB0eXBlczogJHthdmFpbGFibGVUeXBlc31gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VibmV0cztcbiAgfVxuXG4gIC8qKlxuICAqIFZhbGlkYXRlIHRoZSBmaWVsZHMgaW4gYSBTdWJuZXRTZWxlY3Rpb24gb2JqZWN0LCBhbmQgcmVpZnkgZGVmYXVsdHMgaWYgbmVjZXNzYXJ5XG4gICpcbiAgKiBJbiBjYXNlIG9mIGRlZmF1bHQgc2VsZWN0aW9uLCBzZWxlY3QgdGhlIGZpcnN0IHR5cGUgb2YgUFJJVkFURSwgSVNPTEFURUQsXG4gICogUFVCTElDIChpbiB0aGF0IG9yZGVyKSB0aGF0IGhhcyBhbnkgc3VibmV0cy5cbiAgKi9cbiAgcHJpdmF0ZSByZWlmeVNlbGVjdGlvbkRlZmF1bHRzKHBsYWNlbWVudDogU3VibmV0U2VsZWN0aW9uKTogU3VibmV0U2VsZWN0aW9uIHtcblxuICAgIC8vIFRPRE86IHRocm93IGVycm9yIGFzIG5ldyBWcGNWMiBjYW5ub3Qgc3VwcG9ydCBzdWJuZXROYW1lIG9yIHN1Ym5ldEdyb3VwTmFtZSBhbnltb3JlXG4gICAgaWYgKHBsYWNlbWVudC5zdWJuZXROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwbGFjZW1lbnQuc3VibmV0R3JvdXBOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgdXNlIG9ubHkgXFwnc3VibmV0R3JvdXBOYW1lXFwnIChcXCdzdWJuZXROYW1lXFwnIGlzIGRlcHJlY2F0ZWQgYW5kIGhhcyB0aGUgc2FtZSBiZWhhdmlvciknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmdWMignQGF3cy1jZGsvYXdzLWVjMjpzdWJuZXROYW1lRGVwcmVjYXRlZCcsICdVc2FnZSBvZiBcXCdzdWJuZXROYW1lXFwnIGluIFN1Ym5ldFNlbGVjdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgXFwnc3VibmV0R3JvdXBOYW1lXFwnIGluc3RlYWQnKTtcbiAgICAgIH1cbiAgICAgIHBsYWNlbWVudCA9IHsgLi4ucGxhY2VtZW50LCBzdWJuZXRHcm91cE5hbWU6IHBsYWNlbWVudC5zdWJuZXROYW1lIH07XG4gICAgfVxuXG4gICAgY29uc3QgZXhjbHVzaXZlU2VsZWN0aW9uczogQXJyYXk8a2V5b2YgU3VibmV0U2VsZWN0aW9uPiA9IFsnc3VibmV0cycsICdzdWJuZXRUeXBlJywgJ3N1Ym5ldEdyb3VwTmFtZSddO1xuICAgIGNvbnN0IHByb3ZpZGVkU2VsZWN0aW9ucyA9IGV4Y2x1c2l2ZVNlbGVjdGlvbnMuZmlsdGVyKGtleSA9PiBwbGFjZW1lbnRba2V5XSAhPT0gdW5kZWZpbmVkKTtcbiAgICBpZiAocHJvdmlkZWRTZWxlY3Rpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgT25seSBvbmUgb2YgJyR7cHJvdmlkZWRTZWxlY3Rpb25zfScgY2FuIGJlIHN1cHBsaWVkIHRvIHN1Ym5ldCBzZWxlY3Rpb24uYCk7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudC5zdWJuZXRUeXBlID09PSB1bmRlZmluZWQgJiYgcGxhY2VtZW50LnN1Ym5ldEdyb3VwTmFtZSA9PT0gdW5kZWZpbmVkICYmIHBsYWNlbWVudC5zdWJuZXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFJldHVybiBkZWZhdWx0IHN1Ym5ldCB0eXBlIGJhc2VkIG9uIHN1Ym5ldHMgdGhhdCBhY3R1YWxseSBleGlzdFxuICAgICAgbGV0IHN1Ym5ldFR5cGUgPSB0aGlzLnByaXZhdGVTdWJuZXRzLmxlbmd0aFxuICAgICAgICA/IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyA6IHRoaXMuaXNvbGF0ZWRTdWJuZXRzLmxlbmd0aCA/IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCA6IFN1Ym5ldFR5cGUuUFVCTElDO1xuICAgICAgcGxhY2VtZW50ID0geyAuLi5wbGFjZW1lbnQsIHN1Ym5ldFR5cGU6IHN1Ym5ldFR5cGUgfTtcbiAgICB9XG5cbiAgICAvLyBFc3RhYmxpc2ggd2hpY2ggc3VibmV0IGZpbHRlcnMgYXJlIGdvaW5nIHRvIGJlIHVzZWRcbiAgICBsZXQgc3VibmV0RmlsdGVycyA9IHBsYWNlbWVudC5zdWJuZXRGaWx0ZXJzID8/IFtdO1xuXG4gICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBgYXZhaWxhYmlsaXR5Wm9uZXNgIGFuZCBgb25lUGVyQXpgIGZ1bmN0aW9uYWxpdHlcbiAgICBpZiAocGxhY2VtZW50LmF2YWlsYWJpbGl0eVpvbmVzICE9PSB1bmRlZmluZWQpIHsgLy8gRmlsdGVyIGJ5IEFacywgaWYgc3BlY2lmaWVkXG4gICAgICBzdWJuZXRGaWx0ZXJzLnB1c2goU3VibmV0RmlsdGVyLmF2YWlsYWJpbGl0eVpvbmVzKHBsYWNlbWVudC5hdmFpbGFiaWxpdHlab25lcykpO1xuICAgIH1cbiAgICBpZiAoISFwbGFjZW1lbnQub25lUGVyQXopIHsgLy8gRW5zdXJlIG9uZSBwZXIgQVogaWYgc3BlY2lmaWVkXG4gICAgICBzdWJuZXRGaWx0ZXJzLnB1c2goU3VibmV0RmlsdGVyLm9uZVBlckF6KCkpO1xuICAgIH1cblxuICAgIC8vIE92ZXJ3cml0ZSB0aGUgcHJvdmlkZWQgcGxhY2VtZW50IGZpbHRlcnMgYW5kIHJlbW92ZSB0aGUgYXZhaWxhYmlsaXR5Wm9uZXMgYW5kIG9uZVBlckF6IHByb3BlcnRpZXNcbiAgICBwbGFjZW1lbnQgPSB7IC4uLnBsYWNlbWVudCwgc3VibmV0RmlsdGVyczogc3VibmV0RmlsdGVycywgYXZhaWxhYmlsaXR5Wm9uZXM6IHVuZGVmaW5lZCwgb25lUGVyQXo6IHVuZGVmaW5lZCB9O1xuICAgIGNvbnN0IHsgYXZhaWxhYmlsaXR5Wm9uZXMsIG9uZVBlckF6LCAuLi5yZXN0IH0gPSBwbGFjZW1lbnQ7XG5cbiAgICByZXR1cm4gcmVzdDtcbiAgfVxuXG59XG5cbmNsYXNzIENvbXBvc2l0ZURlcGVuZGFibGUgaW1wbGVtZW50cyBJRGVwZW5kYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwZW5kYWJsZXMgPSBuZXcgQXJyYXk8SURlcGVuZGFibGU+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgRGVwZW5kYWJsZS5pbXBsZW1lbnQodGhpcywge1xuICAgICAgZ2V0IGRlcGVuZGVuY3lSb290cygpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PElDb25zdHJ1Y3Q+KCk7XG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIHNlbGYuZGVwZW5kYWJsZXMpIHtcbiAgICAgICAgICByZXQucHVzaCguLi5EZXBlbmRhYmxlLm9mKGRlcCkuZGVwZW5kZW5jeVJvb3RzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEFkZCBhIGNvbnN0cnVjdCB0byB0aGUgZGVwZW5kZW5jeSByb290c1xuICAqL1xuICBwdWJsaWMgYWRkKGRlcDogSURlcGVuZGFibGUpIHtcbiAgICB0aGlzLmRlcGVuZGFibGVzLnB1c2goZGVwKTtcbiAgfVxufVxuXG4vKipcbiogSW52b2tlIGEgZnVuY3Rpb24gb24gYSB2YWx1ZSAoZm9yIGl0cyBzaWRlIGVmZmVjdCkgYW5kIHJldHVybiB0aGUgdmFsdWVcbiovXG5mdW5jdGlvbiB0YXA8VD4oeDogVCwgZm46ICh4OiBUKSA9PiB2b2lkKTogVCB7XG4gIGZuKHgpO1xuICByZXR1cm4geDtcblxufVxuIl19
|
|
487
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXYyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2cGMtdjItYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw2Q0FBeUQ7QUFDekQsaURBQWtjO0FBQ2xjLGlDQUFtRjtBQUNuRiwyQ0FBa0Y7QUFDbEYsbUNBQWlNO0FBRWpNLGlEQUFzRjtBQXdMdEY7Ozs7R0FJRztBQUNILE1BQXNCLFNBQVUsU0FBUSxzQkFBUTtJQUFoRDs7UUFnQkU7O1VBRUU7UUFDYyxrQkFBYSxHQUFjLEVBQUUsQ0FBQztRQUU5Qzs7VUFFRTtRQUNjLG1CQUFjLEdBQWMsRUFBRSxDQUFDO1FBTy9DOztVQUVFO1FBQ2Msc0JBQWlCLEdBQWEsRUFBRSxDQUFDO1FBT2pEOzs7O1dBSUc7UUFDZ0IscUNBQWdDLEdBQUcsSUFBSSw0QkFBZSxFQUFFLENBQUM7UUFzQzVFOztVQUVFO1FBQ1EsK0JBQTBCLEdBQVksS0FBSyxDQUFDO1FBUXREOzs7V0FHRztRQUNPLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztLQStabkM7SUE3WkM7Ozs7O01BS0U7SUFDSyxhQUFhLENBQUMsWUFBNkIsRUFBRTtRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXpDLE9BQU87WUFDTCxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDdkMsSUFBSSxpQkFBaUIsS0FBZSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEYsK0JBQStCLEVBQUUsR0FBRyxDQUFDLElBQUksbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUM7WUFDcEksT0FBTztZQUNQLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxlQUFlLEVBQUUsSUFBSSxDQUFDLDBCQUEwQjtTQUNqRCxDQUFDO0tBQ0g7SUFFRDs7O01BR0U7SUFDSyxnQkFBZ0IsQ0FBQyxPQUFnQzs7Ozs7Ozs7OztRQUN0RCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksb0JBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ3BELGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtZQUNwQyxJQUFJLEVBQUUsMkJBQWlCLENBQUMsT0FBTztTQUNoQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFFMUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxpQ0FBdUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQy9ELEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDakMsQ0FBQyxDQUFDO1FBRUgscUVBQXFFO1FBQ3JFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEUsTUFBTSxhQUFhLEdBQUcsSUFBQSx1QkFBZ0IsRUFBQyxJQUFBLGNBQU8sRUFBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IseUJBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLHFEQUFxRCxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDckssQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSx1Q0FBNkIsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDbkYsYUFBYTtZQUNiLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtTQUNqQyxDQUFDLENBQUM7UUFDRCwrRUFBK0U7UUFDL0UsaURBQWlEO1FBQ2pELGdIQUFnSDtRQUNsSCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ2pEO0lBRUQ7O09BRUc7SUFDSSxrQkFBa0IsQ0FBQyxPQUE0Qjs7Ozs7Ozs7OztRQUVwRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksb0JBQVksQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ3RELEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUM7UUFFL0MsT0FBTyxVQUFVLENBQUM7S0FDbkI7SUFFRDs7TUFFRTtJQUNLLGdCQUFnQixDQUFDLEVBQVUsRUFBRSxPQUE2QjtRQUMvRCxPQUFPLElBQUksdUJBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ2pDLEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7TUFFRTtJQUNLLG9CQUFvQixDQUFDLEVBQVUsRUFBRSxPQUFpQztRQUN2RSxPQUFPLElBQUksMkJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNyQyxHQUFHLE9BQU87WUFDVixHQUFHLEVBQUUsSUFBSTtTQUNWLENBQUMsQ0FBQztLQUNKO0lBRUQ7O01BRUU7SUFDSyxvQkFBb0IsQ0FBQyxFQUFVLEVBQUUsT0FBb0M7UUFDMUUsT0FBTyxJQUFJLDhCQUFvQixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDeEMsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7S0FDSjtJQUVEOztNQUVFO0lBQ0ssa0JBQWtCLENBQUMsRUFBVSxFQUFFLE9BQWtDO1FBQ3RFLE9BQU8sSUFBSSw0QkFBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3RDLEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7Ozs7T0FLRztJQUNJLDRCQUE0QixDQUFDLE9BQTBDOzs7Ozs7Ozs7O1FBRTVFLE1BQU0sR0FBRyxHQUFHLElBQUksaUNBQXlCLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUM5RCxHQUFHLEVBQUUsSUFBSTtZQUNULDZCQUE2QixFQUFFLE9BQU8sRUFBRSw2QkFBNkI7U0FDdEUsQ0FBQyxDQUFDO1FBRUgsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsMkJBQTJCLEtBQUssSUFBSTtnQkFDckgsZ0JBQWdCLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFBQSxDQUFDO1FBRUYsSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBQSxjQUFPLEVBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDakYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0Y7SUFFRDs7O09BR0c7SUFDSyxpQkFBaUIsQ0FBQyxNQUFpQixFQUFFLEdBQThCLEVBQUUsV0FBb0I7UUFDL0YsTUFBTSxlQUFlLEdBQUcsV0FBVyxJQUFJLE1BQU0sQ0FBQztRQUM5QyxJQUFJLGFBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYyxFQUFFO1lBQy9DLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixXQUFXLEVBQUUsZUFBZSxFQUFFLHFCQUFxQjtZQUNuRCxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ3hCLFNBQVMsRUFBRSxjQUFjO1NBQzFCLENBQUMsQ0FBQztLQUNKO0lBRUQ7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUFDLE9BQWdDOzs7Ozs7Ozs7O1FBQ3hELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLHVCQUFlLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ3ZELEdBQUcsRUFBRSxJQUFJO1lBQ1QsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLG1CQUFtQjtTQUNsRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDO1FBRTdDLHlFQUF5RTtRQUN6RSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDO0tBQ0Y7SUFFRDs7O09BR0c7SUFDSyx1QkFBdUIsQ0FBQyxNQUFpQixFQUFFLEdBQW9CLEVBQUUsT0FBZ0M7UUFFdkcsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLG9CQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsSUFBSSxhQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixFQUFFO2dCQUNwRCxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7Z0JBQzdCLFdBQVcsRUFBRSxPQUFPLEVBQUUsZUFBZSxJQUFJLE1BQU07Z0JBQy9DLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ3hCLFNBQVMsRUFBRSxxQkFBcUI7YUFDakMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELG9DQUFvQztRQUNwQyxJQUFJLGFBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxFQUFFO1lBQ2hELFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixXQUFXLEVBQUUsT0FBTyxFQUFFLGVBQWUsSUFBSSxXQUFXO1lBQ3BELE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDeEIsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQyxDQUFDLENBQUM7S0FDSjtJQUVEOzs7T0FHRztJQUNJLGFBQWEsQ0FBQyxPQUEwQjs7Ozs7Ozs7OztRQUM3QyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSywyQkFBbUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN4RixNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUNELE9BQU8sSUFBSSxrQkFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDeEMsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7S0FDSjtJQUVEOztNQUVFO0lBQ0ssVUFBVSxDQUFDLEVBQVUsRUFBRSxPQUF3QjtRQUNwRCxPQUFPLElBQUksaUJBQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQzNCLFlBQVksRUFBRSw2QkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQy9DLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztLQUNKO0lBRUQ7O01BRUU7SUFDSyxxQkFBcUIsQ0FBQyxrQkFBMEI7UUFDckQsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ25ELFNBQVMsRUFBRSxJQUFJLDBCQUFnQixDQUFDLGtCQUFrQixDQUFDO1lBQ25ELFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsV0FBVyxFQUFFLGtDQUFrQztTQUNoRCxDQUFDLENBQUM7UUFFSCxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUkseUJBQWUsQ0FBQztZQUMxQyxNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sRUFBRSxDQUFDLGdDQUFnQyxDQUFDO1lBQzNDLFNBQVMsRUFBRSxDQUFDLE9BQU8saUJBQUcsQ0FBQyxTQUFTLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNoRyxDQUFDLENBQUMsQ0FBQztRQUVKLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSx5QkFBZSxDQUFDO1lBQzFDLE9BQU8sRUFBRSxDQUFDLGdDQUFnQyxDQUFDO1lBQzNDLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7WUFDcEIsU0FBUyxFQUFFLENBQUMsT0FBTyxpQkFBRyxDQUFDLFNBQVMsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLDJCQUEyQixDQUFDO1lBQ3RHLFVBQVUsRUFBRTtnQkFDVixZQUFZLEVBQUU7b0JBQ1osaUJBQWlCLEVBQUUsT0FBTyxpQkFBRyxDQUFDLFNBQVMsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRTtpQkFDdEc7YUFDRjtTQUNGLENBQUMsQ0FBQyxDQUFDO1FBRUosT0FBTyxXQUFXLENBQUM7S0FDcEI7SUFFRDs7TUFFRTtJQUNLLHVCQUF1QixDQUFDLEVBQVUsRUFBRSxPQUFvQzs7Ozs7Ozs7OztRQUM3RSxPQUFPLElBQUksNEJBQW9CLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUN4QyxZQUFZLEVBQUUsSUFBSTtZQUNsQixHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7S0FDSjtJQUVEOztNQUVFO0lBQ0YsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztLQUMzQjtJQUVEOztNQUVFO0lBQ0YsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7S0FDaEM7SUFFRDs7TUFFRTtJQUNRLG1CQUFtQixDQUFDLFlBQTZCLEVBQUU7UUFDM0QsU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVuRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEMsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQztRQUVaLElBQUksU0FBUyxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQjtZQUM5RCxPQUFPLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV0RSxDQUFDO2FBQU0sQ0FBQyxDQUFDLHFCQUFxQjtZQUM1QixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsVUFBVSxJQUFJLG9CQUFVLENBQUMsbUJBQW1CLENBQUM7WUFDcEUsT0FBTyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7UUFFMUUsT0FBTyxPQUFPLENBQUM7S0FDaEI7SUFFTyxrQkFBa0IsQ0FBQyxPQUFrQixFQUFFLE9BQXVCO1FBQ3BFLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN2QixnQ0FBZ0M7UUFDaEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM3QixRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7S0FDakI7SUFFTyx5QkFBeUIsQ0FBQyxTQUFpQjtRQUNqRCxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUYsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUEscUNBQThCLEVBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7UUFFeEYsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQzdELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxxQ0FBOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxTQUFTLG1DQUFtQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztLQUNoQjtJQUVPLHlCQUF5QixDQUFDLFVBQXNCO1FBRXRELE1BQU0sVUFBVSxHQUErRDtZQUM3RSxDQUFDLG9CQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNuRCxDQUFDLHFCQUFxQixDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDN0MsQ0FBQyxvQkFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbEQsQ0FBQyxvQkFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDckQsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzNDLENBQUMsb0JBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYTtTQUN4QyxDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBRSxDQUFDO1FBRXhDLDBFQUEwRTtRQUMxRSxrQkFBa0I7UUFFbEIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQzdELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFILE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLFVBQVUsaURBQWlELGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDaEgsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0tBQ2hCO0lBRUQ7Ozs7O01BS0U7SUFDTSxzQkFBc0IsQ0FBQyxTQUEwQjtRQUV2RCxzRkFBc0Y7UUFDdEYsSUFBSSxZQUFZLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEUsSUFBSSxTQUFTLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLDhGQUE4RixDQUFDLENBQUM7WUFDbEgsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyx1Q0FBdUMsRUFBRSwyRkFBMkYsQ0FBQyxDQUFDO1lBQzFLLENBQUM7WUFDRCxTQUFTLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLFVBQW9CLEVBQUUsQ0FBQztRQUNoRixDQUFDO1FBRUQsTUFBTSxtQkFBbUIsR0FBaUMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdkcsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDM0YsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0Isa0JBQWtCLHdDQUF3QyxDQUFDLENBQUM7UUFDOUYsQ0FBQztRQUVELElBQUksU0FBUyxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksU0FBUyxDQUFDLGVBQWUsS0FBSyxTQUFTLElBQUksU0FBUyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNySCxrRUFBa0U7WUFDbEUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO2dCQUN6QyxDQUFDLENBQUMsb0JBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG9CQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLG9CQUFVLENBQUMsTUFBTSxDQUFDO1lBQ25ILFNBQVMsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUN2RCxDQUFDO1FBRUQsc0RBQXNEO1FBQ3RELElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBRWxELHlGQUF5RjtRQUN6RixJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDLDhCQUE4QjtZQUM3RSxhQUFhLENBQUMsSUFBSSxDQUFDLHNCQUFZLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsaUNBQWlDO1lBQzNELGFBQWEsQ0FBQyxJQUFJLENBQUMsc0JBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxvR0FBb0c7UUFDcEcsU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzlHLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFFM0QsT0FBTyxJQUFJLENBQUM7S0FDYjs7QUFqZ0JILDhCQWtnQkM7OztBQUVELE1BQU0sbUJBQW1CO0lBR3ZCO1FBRmlCLGdCQUFXLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQztRQUd0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsdUJBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3pCLElBQUksZUFBZTtnQkFDakIsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQWMsQ0FBQztnQkFDcEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ25DLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyx1QkFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFDRCxPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUM7U0FDRixDQUFDLENBQUM7S0FDSjtJQUVEOztNQUVFO0lBQ0ssR0FBRyxDQUFDLEdBQWdCO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzVCO0NBQ0Y7QUFFRDs7RUFFRTtBQUNGLFNBQVMsR0FBRyxDQUFJLENBQUksRUFBRSxFQUFrQjtJQUN0QyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixPQUFPLENBQUMsQ0FBQztBQUVYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBd3MsIFJlc291cmNlLCBBbm5vdGF0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElWcGMsIElTdWJuZXQsIFN1Ym5ldFNlbGVjdGlvbiwgU2VsZWN0ZWRTdWJuZXRzLCBFbmFibGVWcG5HYXRld2F5T3B0aW9ucywgVnBuR2F0ZXdheSwgVnBuQ29ubmVjdGlvblR5cGUsIENmblZQQ0dhdGV3YXlBdHRhY2htZW50LCBDZm5WUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiwgVnBuQ29ubmVjdGlvbk9wdGlvbnMsIFZwbkNvbm5lY3Rpb24sIENsaWVudFZwbkVuZHBvaW50T3B0aW9ucywgQ2xpZW50VnBuRW5kcG9pbnQsIEludGVyZmFjZVZwY0VuZHBvaW50T3B0aW9ucywgSW50ZXJmYWNlVnBjRW5kcG9pbnQsIEdhdGV3YXlWcGNFbmRwb2ludE9wdGlvbnMsIEdhdGV3YXlWcGNFbmRwb2ludCwgRmxvd0xvZ09wdGlvbnMsIEZsb3dMb2csIEZsb3dMb2dSZXNvdXJjZVR5cGUsIFN1Ym5ldFR5cGUsIFN1Ym5ldEZpbHRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgYWxsUm91dGVUYWJsZUlkcywgZmxhdHRlbiwgc3VibmV0R3JvdXBOYW1lRnJvbUNvbnN0cnVjdElkIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IElEZXBlbmRhYmxlLCBEZXBlbmRhYmxlLCBJQ29uc3RydWN0LCBEZXBlbmRlbmN5R3JvdXAgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXksIEludGVybmV0R2F0ZXdheSwgTmF0Q29ubmVjdGl2aXR5VHlwZSwgTmF0R2F0ZXdheSwgTmF0R2F0ZXdheU9wdGlvbnMsIFJvdXRlLCBWUENQZWVyaW5nQ29ubmVjdGlvbiwgVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zLCBWUE5HYXRld2F5VjIgfSBmcm9tICcuL3JvdXRlJztcbmltcG9ydCB7IElTdWJuZXRWMiB9IGZyb20gJy4vc3VibmV0LXYyJztcbmltcG9ydCB7IEFjY291bnRQcmluY2lwYWwsIEVmZmVjdCwgUG9saWN5U3RhdGVtZW50LCBSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJVlBDQ2lkckJsb2NrIH0gZnJvbSAnLi92cGMtdjInO1xuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIExpc3Qgb2Ygc3VibmV0cyB3aGVyZSByb3V0ZSB0byBFR1cgd2lsbCBiZSBhZGRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHJvdXRlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldHM/OiBTdWJuZXRTZWxlY3Rpb25bXTtcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gSXB2NiBhZGRyZXNzIGZvciBFR1cgcm91dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSAnOjovMCcgYWxsIElwdjYgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKiBQcm92aWRlZCBuYW1lIHdpbGwgYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5hbWUgdGFnIGFzc29jaWF0ZWQgYW5kIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBJbnRlcm5ldEdhdGV3YXkgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmV0R2F0ZXdheU9wdGlvbnN7XG5cbiAgLyoqXG4gICAqIERlc3RpbmF0aW9uIElwdjYgYWRkcmVzcyBmb3IgRUdXIHJvdXRlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJzAuMC4wLjAnIGFsbCBJcHY0IHRyYWZmaWNcbiAgICovXG4gIHJlYWRvbmx5IGlwdjREZXN0aW5hdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gSXB2NiBhZGRyZXNzIGZvciBFR1cgcm91dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSAnOjovMCcgYWxsIElwdjYgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkRlc3RpbmF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICogUHJvdmlkZWQgbmFtZSB3aWxsIGJlIHVzZWQgZm9yIHRhZ2dpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcmVzb3VyY2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBWUE5HYXRld2F5VjIgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQTkdhdGV3YXlWMk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgVlBOIGNvbm5lY3Rpb24gdGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IHN1cHBvcnRzLlxuICAgKiBAc2VlIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cG5nYXRld2F5Lmh0bWwjY2ZuLWVjMi12cG5nYXRld2F5LXR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IFZwbkNvbm5lY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmF0ZSBBdXRvbm9tb3VzIFN5c3RlbSBOdW1iZXIgKEFTTikgZm9yIHRoZSBBbWF6b24gc2lkZSBvZiBhIEJHUCBzZXNzaW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIEFTTiBzZXQgZm9yIEJHUCBzZXNzaW9uXG4gICAqL1xuICByZWFkb25seSBhbWF6b25TaWRlQXNuPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgVlBOIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcmVzb3VyY2UgcHJvdmlzaW9uZWQgd2l0aG91dCBhbnkgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBuR2F0ZXdheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN1Ym5ldHMgd2hlcmUgdGhlIHJvdXRlIHByb3BhZ2F0aW9uIHNob3VsZCBiZSBhZGRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwcm9wb2dhdGlvbiBmb3Igcm91dGVzXG4gICAqL1xuICByZWFkb25seSB2cG5Sb3V0ZVByb3BhZ2F0aW9uPzogU3VibmV0U2VsZWN0aW9uW107XG59XG5cbi8qKlxuICogUGxhY2Vob2xkZXIgdG8gc2VlIHdoYXQgZXh0cmEgcHJvcHMgd2UgbWlnaHQgbmVlZCxcbiAqIHdpbGwgYmUgYWRkZWQgdG8gb3JpZ2luYWwgSVZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElWcGNWMiBleHRlbmRzIElWcGMge1xuICAvKipcbiAgICogVGhlIHNlY29uZGFyeSBDSURSIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIFZQQy5cbiAgICpcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbCN2cGMtcmVzaXplfS5cbiAgICovXG4gIHJlYWRvbmx5IHNlY29uZGFyeUNpZHJCbG9jaz86IElWUENDaWRyQmxvY2tbXTtcblxuICAvKipcbiAgICogVGhlIHByaW1hcnkgSVB2NCBDSURSIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKiBOZWVkZWQgaW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIHZwYyByYW5nZSBvZiBzdWJuZXRcbiAgICogY3VycmVudCBwcm9wIHZwY0NpZHJCbG9jayByZWZlcnMgdG8gdGhlIHRva2VuIHZhbHVlXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWwjdnBjLXNpemluZy1pcHY0fS5cbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgdG8gb3ZlcnJpZGUgaW5mZXJyZWQgcmVnaW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY3VycmVudCBzdGFjaydzIGVudmlyb25tZW50IHJlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgQVdTIGFjY291bnQgdGhhdCBvd25zIHRoZSBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgYWNjb3VudCBpZCBvZiB0aGUgcGFyZW50IHN0YWNrXG4gICAqL1xuICByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUHY0IENJRFIgcHJvdmlzaW9uZWQgdW5kZXIgcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU0gcG9vbFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qcm92aXNpb25lZENpZHJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFZwY05hbWUgdG8gYmUgdXNlZCBmb3IgdGFnZ2luZyBpdHMgY29tcG9uZW50c1xuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB2cGNOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gRWdyZXNzIG9ubHkgSW50ZXJuZXQgR2F0ZXdheSB0byBjdXJyZW50IFZQQy5cbiAgICogQ2FuIG9ubHkgYmUgdXNlZCBmb3IgaXB2NiBlbmFibGVkIFZQQ3MuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvZWdyZXNzLW9ubHktaW50ZXJuZXQtZ2F0ZXdheS1iYXNpY3MuaHRtbH0uXG4gICAqL1xuICBhZGRFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5KG9wdGlvbnM/OiBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5T3B0aW9ucyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gSW50ZXJuZXQgR2F0ZXdheSB0byBjdXJyZW50IFZQQy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtaWd3LWludGVybmV0LWFjY2Vzcy5odG1sfS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZpbmVzIHJvdXRlIGZvciBhbGwgaXB2NCgnMC4wLjAuMCcpIGFuZCBpcHY2IGFkZHJlc3NlcygnOjovMCcpXG4gICAqL1xuICBhZGRJbnRlcm5ldEdhdGV3YXkob3B0aW9ucz86IEludGVybmV0R2F0ZXdheU9wdGlvbnMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGRzIFZQTiBHYXRld2F5IHRvIFZQQyBhbmQgc2V0IHJvdXRlIHByb3BvZ2F0aW9uLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cG5nYXRld2F5Lmh0bWx9LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHJvdXRlIHByb3BvZ2F0aW9uXG4gICAqL1xuICBlbmFibGVWcG5HYXRld2F5VjIob3B0aW9uczogVlBOR2F0ZXdheVYyT3B0aW9ucyk6IFZQTkdhdGV3YXlWMjtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBOQVQgR2F0ZXdheSB0byBWUENcbiAgICogQSBOQVQgZ2F0ZXdheSBpcyBhIE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKSBzZXJ2aWNlLiBOQVQgR2F0ZXdheSBDb25uZWN0aXZpdHkgY2FuIGJlIG9mIHR5cGUgYFB1YmxpY2Agb3IgYFByaXZhdGVgLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sfS5cbiAgICpcbiAgICogQGRlZmF1bHQgQ29ubmVjdGl2aXR5VHlwZS5QdWJsaWNcbiAgICovXG4gIGFkZE5hdEdhdGV3YXkob3B0aW9uczogTmF0R2F0ZXdheU9wdGlvbnMpOiBOYXRHYXRld2F5O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IHJvbGUgdG8gYWNjZXB0b3IgVlBDIGFjY291bnRcbiAgICogQSBjcm9zcyBhY2NvdW50IHJvbGUgaXMgcmVxdWlyZWQgZm9yIHRoZSBWUEMgdG8gcGVlciB3aXRoIGFub3RoZXIgYWNjb3VudC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3BlZXItd2l0aC12cGMtaW4tYW5vdGhlci1hY2NvdW50Lmh0bWx9LlxuICAgKi9cbiAgY3JlYXRlQWNjZXB0b3JWcGNSb2xlKHJlcXVlc3RvckFjY291bnRJZDogc3RyaW5nKTogUm9sZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwZWVyaW5nIGNvbm5lY3Rpb25cbiAgICogQSBwZWVyaW5nIGNvbm5lY3Rpb24gaXMgYSBwcml2YXRlIHZpcnR1YWwgbmV0d29yayBlc3RhYmxpc2hlZCBiZXR3ZWVuIHR3byBWUENzLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvcGVlcmluZy93aGF0LWlzLXZwYy1wZWVyaW5nLmh0bWx9LlxuICAgKi9cbiAgY3JlYXRlUGVlcmluZ0Nvbm5lY3Rpb24oaWQ6IHN0cmluZywgb3B0aW9uczogVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zKTogVlBDUGVlcmluZ0Nvbm5lY3Rpb247XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBWUEMgKFZpcnR1YWwgUHJpdmF0ZSBDbG91ZCkgaW4gQVdTLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2FwaS92Mi9kb2NzL2F3cy1jZGstbGliLmF3c19lYzIuVnBjLmh0bWx8QVdTIENESyBEb2N1bWVudGF0aW9uIG9uIFZQQ3N9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVnBjVjJCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVnBjVjIge1xuICAvKipcbiAgKiBJZGVudGlmaWVyIGZvciB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgKiBBcm4gb2YgdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHZwY0Fybjogc3RyaW5nO1xuXG4gIC8qKlxuICAqIENJRFIgcmFuZ2UgZm9yIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB2cGNDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgKiBMaXN0IG9mIHB1YmxpYyBzdWJuZXRzIGluIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaWNTdWJuZXRzOiBJU3VibmV0W10gPSBbXTtcblxuICAvKipcbiAgKiBMaXN0IG9mIHByaXZhdGUgc3VibmV0cyBpbiB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IElTdWJuZXRbXSA9IFtdO1xuXG4gIC8qKlxuICAqIExpc3Qgb2YgaXNvbGF0ZWQgc3VibmV0cyBpbiB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBJU3VibmV0W107XG5cbiAgLyoqXG4gICogQVpzIGZvciB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkOiBJRGVwZW5kYWJsZTtcblxuICAvKipcbiAgICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICAqIEFkZCBpZ3cgdG8gdGhpcyBpZiBpdHMgYSBwdWJsaWMgc3VibmV0XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkID0gbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuXG4gIC8qKlxuICAgKiBTZWNvbmRhcnkgSVBzIGZvciB0aGUgVlBDLCBjYW4gYmUgbXVsdGlwbGUgSXB2NCBvciBJcHY2XG4gICAqIElwdjQgc2hvdWxkIGJlIHdpdGhpbiBSRkMjMTkxOCByYW5nZVxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHNlY29uZGFyeUNpZHJCbG9jaz86IElWUENDaWRyQmxvY2tbXTtcblxuICAvKipcbiAgICogVGhlIHByaW1hcnkgSVB2NCBDSURSIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKiBOZWVkZWQgaW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIHZwYyByYW5nZSBvZiBzdWJuZXRcbiAgICogY3VycmVudCBwcm9wIHZwY0NpZHJCbG9jayByZWZlcnMgdG8gdGhlIHRva2VuIHZhbHVlXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWwjdnBjLXNpemluZy1pcHY0fS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZwY05hbWUgdG8gYmUgdXNlZCBmb3IgdGFnZ2luZyBpdHMgY29tcG9uZW50c1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHZwY05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICogUmVnaW9uIGZvciB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICogSWRlbnRpZmllciBvZiB0aGUgb3duZXIgZm9yIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUHY0IENJRFIgcHJvdmlzaW9uZWQgdW5kZXIgcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU0gcG9vbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUsIGRvbid0IGVycm9yIG91dCBvbiB0cnlpbmcgdG8gc2VsZWN0IHN1Ym5ldHNcbiAgKi9cbiAgcHJvdGVjdGVkIGluY29tcGxldGVTdWJuZXREZWZpbml0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE11dGFibGUgcHJpdmF0ZSBmaWVsZCBmb3IgdGhlIHZwbkdhdGV3YXlJZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfdnBuR2F0ZXdheUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNdXRhYmxlIHByaXZhdGUgZmllbGQgZm9yIHRoZSBpbnRlcm5ldEdhdGV3YXlJZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfaW50ZXJuZXRHYXRld2F5SWQgPSAnJztcblxuICAvKipcbiAgKiBSZXR1cm4gaW5mb3JtYXRpb24gb24gdGhlIHN1Ym5ldHMgYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbiBzZWxlY3Rpb24gc3RyYXRlZ3lcbiAgKlxuICAqIFJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1Ym5ldCBpcyBtYXRjaGVkLCB0aHJvd3MgYSBkZXNjcmlwdGl2ZVxuICAqIGVycm9yIG1lc3NhZ2Ugb3RoZXJ3aXNlLlxuICAqL1xuICBwdWJsaWMgc2VsZWN0U3VibmV0cyhzZWxlY3Rpb246IFN1Ym5ldFNlbGVjdGlvbiA9IHt9KTogU2VsZWN0ZWRTdWJuZXRzIHtcbiAgICBjb25zdCBzdWJuZXRzID0gdGhpcy5zZWxlY3RTdWJuZXRPYmplY3RzKHNlbGVjdGlvbik7XG4gICAgY29uc3QgcHVicyA9IG5ldyBTZXQodGhpcy5wdWJsaWNTdWJuZXRzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWJuZXRJZHM6IHN1Ym5ldHMubWFwKHMgPT4gcy5zdWJuZXRJZCksXG4gICAgICBnZXQgYXZhaWxhYmlsaXR5Wm9uZXMoKTogc3RyaW5nW10geyByZXR1cm4gc3VibmV0cy5tYXAocyA9PiBzLmF2YWlsYWJpbGl0eVpvbmUpOyB9LFxuICAgICAgaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDogdGFwKG5ldyBDb21wb3NpdGVEZXBlbmRhYmxlKCksIGQgPT4gc3VibmV0cy5mb3JFYWNoKHMgPT4gZC5hZGQocy5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkKSkpLFxuICAgICAgc3VibmV0cyxcbiAgICAgIGhhc1B1YmxpYzogc3VibmV0cy5zb21lKHMgPT4gcHVicy5oYXMocykpLFxuICAgICAgaXNQZW5kaW5nTG9va3VwOiB0aGlzLmluY29tcGxldGVTdWJuZXREZWZpbml0aW9uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgKiBBZGRzIGEgVlBOIEdhdGV3YXkgdG8gdGhpcyBWUENcbiAgKiBAZGVwcmVjYXRlZCB1c2UgZW5hYmxlVnBuR2F0ZXdheVYyIGZvciBjb21wYXRpYmlsaXR5IHdpdGggVlBDVjIuUm91dGVcbiAgKi9cbiAgcHVibGljIGVuYWJsZVZwbkdhdGV3YXkob3B0aW9uczogRW5hYmxlVnBuR2F0ZXdheU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52cG5HYXRld2F5SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFZQTiBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCB2cG5HYXRld2F5ID0gbmV3IFZwbkdhdGV3YXkodGhpcywgJ1ZwbkdhdGV3YXknLCB7XG4gICAgICBhbWF6b25TaWRlQXNuOiBvcHRpb25zLmFtYXpvblNpZGVBc24sXG4gICAgICB0eXBlOiBWcG5Db25uZWN0aW9uVHlwZS5JUFNFQ18xLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdnBuR2F0ZXdheUlkID0gdnBuR2F0ZXdheS5nYXRld2F5SWQ7XG5cbiAgICBjb25zdCBhdHRhY2htZW50ID0gbmV3IENmblZQQ0dhdGV3YXlBdHRhY2htZW50KHRoaXMsICdWUENWUE5HVycsIHtcbiAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgdnBuR2F0ZXdheUlkOiB0aGlzLl92cG5HYXRld2F5SWQsXG4gICAgfSk7XG5cbiAgICAvLyBQcm9wYWdhdGUgcm91dGVzIG9uIHJvdXRlIHRhYmxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IHN1Ym5ldHNcbiAgICBjb25zdCB2cG5Sb3V0ZVByb3BhZ2F0aW9uID0gb3B0aW9ucy52cG5Sb3V0ZVByb3BhZ2F0aW9uID8/IFt7fV07XG4gICAgY29uc3Qgcm91dGVUYWJsZUlkcyA9IGFsbFJvdXRlVGFibGVJZHMoZmxhdHRlbih2cG5Sb3V0ZVByb3BhZ2F0aW9uLm1hcChzID0+IHRoaXMuc2VsZWN0U3VibmV0cyhzKS5zdWJuZXRzKSkpO1xuXG4gICAgaWYgKHJvdXRlVGFibGVJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRFcnJvcihgZW5hYmxlVnBuR2F0ZXdheTogbm8gc3VibmV0cyBtYXRjaGluZyBzZWxlY3Rpb246ICcke0pTT04uc3RyaW5naWZ5KHZwblJvdXRlUHJvcGFnYXRpb24pfScuIFNlbGVjdCBvdGhlciBzdWJuZXRzIHRvIGFkZCByb3V0ZXMgdG8uYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVQcm9wYWdhdGlvbiA9IG5ldyBDZm5WUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbih0aGlzLCAnUm91dGVQcm9wYWdhdGlvbicsIHtcbiAgICAgIHJvdXRlVGFibGVJZHMsXG4gICAgICB2cG5HYXRld2F5SWQ6IHRoaXMuX3ZwbkdhdGV3YXlJZCxcbiAgICB9KTtcbiAgICAgIC8vIFRoZSBBV1M6OkVDMjo6VlBOR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24gcmVzb3VyY2UgY2Fubm90IHVzZSB0aGUgVlBOIGdhdGV3YXlcbiAgICAgIC8vIHVudGlsIGl0IGhhcyBzdWNjZXNzZnVsbHkgYXR0YWNoZWQgdG8gdGhlIFZQQy5cbiAgICAgIC8vIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbi1nYXRld2F5cm91dGVwcm9wLmh0bWxcbiAgICByb3V0ZVByb3BhZ2F0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeShhdHRhY2htZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIFZQTkdBdGV3YXlWMiB0byB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGVuYWJsZVZwbkdhdGV3YXlWMihvcHRpb25zOiBWUE5HYXRld2F5VjJPcHRpb25zKTogVlBOR2F0ZXdheVYyIHtcblxuICAgIGlmICh0aGlzLnZwbkdhdGV3YXlJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgVlBOIEdhdGV3YXkgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHZwbkdhdGV3YXkgPSBuZXcgVlBOR2F0ZXdheVYyKHRoaXMsICdWcG5HYXRld2F5Jywge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIHRoaXMuX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQuYWRkKHZwbkdhdGV3YXkpO1xuICAgIHRoaXMuX3ZwbkdhdGV3YXlJZCA9IHZwbkdhdGV3YXkucm91dGVyVGFyZ2V0SWQ7XG5cbiAgICByZXR1cm4gdnBuR2F0ZXdheTtcbiAgfVxuXG4gIC8qKlxuICAqIEFkZHMgYSBuZXcgVlBOIGNvbm5lY3Rpb24gdG8gdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIGFkZFZwbkNvbm5lY3Rpb24oaWQ6IHN0cmluZywgb3B0aW9uczogVnBuQ29ubmVjdGlvbk9wdGlvbnMpOiBWcG5Db25uZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFZwbkNvbm5lY3Rpb24odGhpcywgaWQsIHtcbiAgICAgIHZwYzogdGhpcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgKiBBZGRzIGEgbmV3IGNsaWVudCBWUE4gZW5kcG9pbnQgdG8gdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIGFkZENsaWVudFZwbkVuZHBvaW50KGlkOiBzdHJpbmcsIG9wdGlvbnM6IENsaWVudFZwbkVuZHBvaW50T3B0aW9ucyk6IENsaWVudFZwbkVuZHBvaW50IHtcbiAgICByZXR1cm4gbmV3IENsaWVudFZwbkVuZHBvaW50KHRoaXMsIGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgdnBjOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQWRkcyBhIG5ldyBpbnRlcmZhY2UgZW5kcG9pbnQgdG8gdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIGFkZEludGVyZmFjZUVuZHBvaW50KGlkOiBzdHJpbmcsIG9wdGlvbnM6IEludGVyZmFjZVZwY0VuZHBvaW50T3B0aW9ucyk6IEludGVyZmFjZVZwY0VuZHBvaW50IHtcbiAgICByZXR1cm4gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50KHRoaXMsIGlkLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQWRkcyBhIG5ldyBnYXRld2F5IGVuZHBvaW50IHRvIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhZGRHYXRld2F5RW5kcG9pbnQoaWQ6IHN0cmluZywgb3B0aW9uczogR2F0ZXdheVZwY0VuZHBvaW50T3B0aW9ucyk6IEdhdGV3YXlWcGNFbmRwb2ludCB7XG4gICAgcmV0dXJuIG5ldyBHYXRld2F5VnBjRW5kcG9pbnQodGhpcywgaWQsIHtcbiAgICAgIHZwYzogdGhpcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBFZ3Jlc3MgT25seSBJbnRlcm5ldCBHYXRld2F5IHRvIHRoaXMgVlBDIGFuZCBkZWZpbmVzIGEgbmV3IHJvdXRlXG4gICAqIHRvIHRoZSByb3V0ZSB0YWJsZSBvZiBnaXZlbiBzdWJuZXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGluIGNhc2Ugb2Ygbm8gaW5wdXQgc3VibmV0cywgbm8gcm91dGUgaXMgY3JlYXRlZFxuICAgKi9cbiAgcHVibGljIGFkZEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkob3B0aW9ucz86IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlPcHRpb25zKTogdm9pZCB7XG5cbiAgICBjb25zdCBlZ3cgPSBuZXcgRWdyZXNzT25seUludGVybmV0R2F0ZXdheSh0aGlzLCAnRWdyZXNzT25seUdXJywge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWU6IG9wdGlvbnM/LmVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlOYW1lLFxuICAgIH0pO1xuXG4gICAgbGV0IHVzZUlwdjY7XG4gICAgaWYgKHRoaXMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICB1c2VJcHY2ID0gKHRoaXMuc2Vjb25kYXJ5Q2lkckJsb2NrLnNvbWUoKHNlY29uZGFyeUFkZHJlc3MpID0+IHNlY29uZGFyeUFkZHJlc3MuYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrID09PSB0cnVlIHx8XG4gICAgc2Vjb25kYXJ5QWRkcmVzcy5pcHY2SXBhbVBvb2xJZCAhPT0gdW5kZWZpbmVkIHx8IHNlY29uZGFyeUFkZHJlc3MuaXB2NkNpZHJCbG9jayAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VJcHY2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VncmVzcyBvbmx5IElHVyBjYW4gb25seSBiZSBhZGRlZCB0byBJcHY2IGVuYWJsZWQgVlBDJyk7XG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zPy5zdWJuZXRzKSB7XG4gICAgICBjb25zdCBzdWJuZXRzID0gZmxhdHRlbihvcHRpb25zLnN1Ym5ldHMubWFwKHMgPT4gdGhpcy5zZWxlY3RTdWJuZXRzKHMpLnN1Ym5ldHMpKTtcbiAgICAgIHN1Ym5ldHMuZm9yRWFjaCgoc3VibmV0KSA9PiB7XG4gICAgICAgIHRoaXMuY3JlYXRlRWdyZXNzUm91dGUoc3VibmV0LCBlZ3csIG9wdGlvbnMuZGVzdGluYXRpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByb3V0ZSBmb3IgRUdXIHdpdGggZGVzdGluYXRpb24gc2V0IHRvIG91dGJvdW5kIElQdjYoJzo6LzAnKSBvciBjdXN0b20gaXB2NiBhZGRyZXNzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRWdyZXNzUm91dGUoc3VibmV0OiBJU3VibmV0VjIsIGVndzogRWdyZXNzT25seUludGVybmV0R2F0ZXdheSwgZGVzdGluYXRpb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbklwdjYgPSBkZXN0aW5hdGlvbiA/PyAnOjovMCc7XG4gICAgbmV3IFJvdXRlKHRoaXMsIGAke3N1Ym5ldC5ub2RlLmlkfS1FZ3Jlc3NSb3V0ZWAsIHtcbiAgICAgIHJvdXRlVGFibGU6IHN1Ym5ldC5yb3V0ZVRhYmxlLFxuICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uSXB2NiwgLy8gSVB2NiBkZWZhdWx0IHJvdXRlXG4gICAgICB0YXJnZXQ6IHsgZ2F0ZXdheTogZWd3IH0sXG4gICAgICByb3V0ZU5hbWU6ICdDREtFSUdXUm91dGUnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgSW50ZXJuZXQgR2F0ZXdheSB0byB0aGlzIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNyZWF0ZXMgYSBuZXcgcm91dGUgZm9yIHB1YmxpYyBzdWJuZXRzKHdpdGggYWxsIG91dGJvdW5kIGFjY2VzcykgdG8gdGhlIEludGVybmV0IEdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgYWRkSW50ZXJuZXRHYXRld2F5KG9wdGlvbnM/OiBJbnRlcm5ldEdhdGV3YXlPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2ludGVybmV0R2F0ZXdheUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBJbnRlcm5ldCBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ3cgPSBuZXcgSW50ZXJuZXRHYXRld2F5KHRoaXMsICdJbnRlcm5ldEdhdGV3YXknLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICBpbnRlcm5ldEdhdGV3YXlOYW1lOiBvcHRpb25zPy5pbnRlcm5ldEdhdGV3YXlOYW1lLFxuICAgIH0pO1xuXG4gICAgdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZC5hZGQoaWd3KTtcbiAgICB0aGlzLl9pbnRlcm5ldEdhdGV3YXlJZCA9IGlndy5yb3V0ZXJUYXJnZXRJZDtcblxuICAgIC8vIElmIHRoZXJlIGFyZSBubyBwdWJsaWMgc3VibmV0cyBkZWZpbmVkLCBubyBkZWZhdWx0IHJvdXRlIHdpbGwgYmUgYWRkZWRcbiAgICBpZiAodGhpcy5wdWJsaWNTdWJuZXRzKSB7XG4gICAgICB0aGlzLnB1YmxpY1N1Ym5ldHMuZm9yRWFjaCggKHMpID0+IHRoaXMuYWRkRGVmYXVsdEludGVybmV0Um91dGUocywgaWd3LCBvcHRpb25zKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZGVmYXVsdCByb3V0ZSBmb3IgdGhlIGludGVybmV0IGdhdGV3YXlcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGFkZERlZmF1bHRJbnRlcm5ldFJvdXRlKHN1Ym5ldDogSVN1Ym5ldFYyLCBpZ3c6IEludGVybmV0R2F0ZXdheSwgb3B0aW9ucz86IEludGVybmV0R2F0ZXdheU9wdGlvbnMpOiB2b2lkIHtcblxuICAgIGlmIChzdWJuZXQuc3VibmV0VHlwZSAhPT0gU3VibmV0VHlwZS5QVUJMSUMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcHVibGljIHN1Ym5ldHMgZGVmaW5lZCB0byBhZGQgcm91dGUgZm9yIGludGVybmV0IGdhdGV3YXknKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZGVmYXVsdCByb3V0ZSB0byBJR1cgZm9yIElQdjZcbiAgICBpZiAoc3VibmV0LmlwdjZDaWRyQmxvY2spIHtcbiAgICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRGVmYXVsdElQdjZSb3V0ZWAsIHtcbiAgICAgICAgcm91dGVUYWJsZTogc3VibmV0LnJvdXRlVGFibGUsXG4gICAgICAgIGRlc3RpbmF0aW9uOiBvcHRpb25zPy5pcHY2RGVzdGluYXRpb24gPz8gJzo6LzAnLFxuICAgICAgICB0YXJnZXQ6IHsgZ2F0ZXdheTogaWd3IH0sXG4gICAgICAgIHJvdXRlTmFtZTogJ0NES0RlZmF1bHRJUHY2Um91dGUnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEFkZCBkZWZhdWx0IHJvdXRlIHRvIElHVyBmb3IgSVB2NFxuICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRGVmYXVsdFJvdXRlYCwge1xuICAgICAgcm91dGVUYWJsZTogc3VibmV0LnJvdXRlVGFibGUsXG4gICAgICBkZXN0aW5hdGlvbjogb3B0aW9ucz8uaXB2NERlc3RpbmF0aW9uID8/ICcwLjAuMC4wLzAnLFxuICAgICAgdGFyZ2V0OiB7IGdhdGV3YXk6IGlndyB9LFxuICAgICAgcm91dGVOYW1lOiAnQ0RLRGVmYXVsdElQdjRSb3V0ZScsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBOQVQgR2F0ZXdheSB0byB0aGUgZ2l2ZW4gc3VibmV0IG9mIHRoaXMgVlBDXG4gICAqIG9mIGdpdmVuIHN1Ym5ldHMuXG4gICAqL1xuICBwdWJsaWMgYWRkTmF0R2F0ZXdheShvcHRpb25zOiBOYXRHYXRld2F5T3B0aW9ucyk6IE5hdEdhdGV3YXkge1xuICAgIGlmIChvcHRpb25zLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDICYmICF0aGlzLl9pbnRlcm5ldEdhdGV3YXlJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIGEgUHVibGljIE5BVCBHYXRld2F5IHdpdGhvdXQgYW4gSW50ZXJuZXQgR2F0ZXdheSBlbmFibGVkIG9uIFZQQycpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE5hdEdhdGV3YXkodGhpcywgJ05BVEdhdGV3YXknLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQWRkcyBhIG5ldyBmbG93IGxvZyB0byB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWRkRmxvd0xvZyhpZDogc3RyaW5nLCBvcHRpb25zPzogRmxvd0xvZ09wdGlvbnMpOiBGbG93TG9nIHtcbiAgICByZXR1cm4gbmV3IEZsb3dMb2codGhpcywgaWQsIHtcbiAgICAgIHJlc291cmNlVHlwZTogRmxvd0xvZ1Jlc291cmNlVHlwZS5mcm9tVnBjKHRoaXMpLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIENyZWF0ZXMgcGVlcmluZyBjb25uZWN0aW9uIHJvbGUgZm9yIGFjY2VwdG9yIFZQQ1xuICAqL1xuICBwdWJsaWMgY3JlYXRlQWNjZXB0b3JWcGNSb2xlKHJlcXVlc3RvckFjY291bnRJZDogc3RyaW5nKTogUm9sZSB7XG4gICAgY29uc3QgcGVlcmluZ1JvbGUgPSBuZXcgUm9sZSh0aGlzLCAnVnBjUGVlcmluZ1JvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBBY2NvdW50UHJpbmNpcGFsKHJlcXVlc3RvckFjY291bnRJZCksXG4gICAgICByb2xlTmFtZTogJ1ZwY1BlZXJpbmdSb2xlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmVzdHJpY3RpdmUgcm9sZSBmb3IgVlBDIHBlZXJpbmcnLFxuICAgIH0pO1xuXG4gICAgcGVlcmluZ1JvbGUuYWRkVG9Qb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnZWMyOkFjY2VwdFZwY1BlZXJpbmdDb25uZWN0aW9uJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7QXdzLlBBUlRJVElPTn06ZWMyOiR7dGhpcy5yZWdpb259OiR7dGhpcy5vd25lckFjY291bnRJZH06dnBjLyR7dGhpcy52cGNJZH1gXSxcbiAgICB9KSk7XG5cbiAgICBwZWVyaW5nUm9sZS5hZGRUb1BvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGFjdGlvbnM6IFsnZWMyOkFjY2VwdFZwY1BlZXJpbmdDb25uZWN0aW9uJ10sXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtBd3MuUEFSVElUSU9OfTplYzI6JHt0aGlzLnJlZ2lvbn06JHt0aGlzLm93bmVyQWNjb3VudElkfTp2cGMtcGVlcmluZy1jb25uZWN0aW9uLypgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2VjMjpBY2NlcHRlclZwYyc6IGBhcm46JHtBd3MuUEFSVElUSU9OfTplYzI6JHt0aGlzLnJlZ2lvbn06JHt0aGlzLm93bmVyQWNjb3VudElkfTp2cGMvJHt0aGlzLnZwY0lkfWAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pKTtcblxuICAgIHJldHVybiBwZWVyaW5nUm9sZTtcbiAgfVxuXG4gIC8qKlxuICAqIENyZWF0ZXMgYSBwZWVyaW5nIGNvbm5lY3Rpb25cbiAgKi9cbiAgcHVibGljIGNyZWF0ZVBlZXJpbmdDb25uZWN0aW9uKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyk6IFZQQ1BlZXJpbmdDb25uZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFZQQ1BlZXJpbmdDb25uZWN0aW9uKHRoaXMsIGlkLCB7XG4gICAgICByZXF1ZXN0b3JWcGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogUmV0dXJucyB0aGUgaWQgb2YgdGhlIFZQTiBHYXRld2F5IChpZiBlbmFibGVkKVxuICAqL1xuICBwdWJsaWMgZ2V0IHZwbkdhdGV3YXlJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl92cG5HYXRld2F5SWQ7XG4gIH1cblxuICAvKipcbiAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgSW50ZXJuZXQgR2F0ZXdheSAoaWYgZW5hYmxlZClcbiAgKi9cbiAgcHVibGljIGdldCBpbnRlcm5ldEdhdGV3YXlJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcm5ldEdhdGV3YXlJZDtcbiAgfVxuXG4gIC8qKlxuICAqIFJldHVybiB0aGUgc3VibmV0cyBhcHByb3ByaWF0ZSBmb3IgdGhlIHBsYWNlbWVudCBzdHJhdGVneVxuICAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0U3VibmV0T2JqZWN0cyhzZWxlY3Rpb246IFN1Ym5ldFNlbGVjdGlvbiA9IHt9KTogSVN1Ym5ldFtdIHtcbiAgICBzZWxlY3Rpb24gPSB0aGlzLnJlaWZ5U2VsZWN0aW9uRGVmYXVsdHMoc2VsZWN0aW9uKTtcblxuICAgIGlmIChzZWxlY3Rpb24uc3VibmV0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gc2VsZWN0aW9uLnN1Ym5ldHM7XG4gICAgfVxuXG4gICAgbGV0IHN1Ym5ldHM7XG5cbiAgICBpZiAoc2VsZWN0aW9uLnN1Ym5ldEdyb3VwTmFtZSAhPT0gdW5kZWZpbmVkKSB7IC8vIFNlbGVjdCBieSBuYW1lXG4gICAgICBzdWJuZXRzID0gdGhpcy5zZWxlY3RTdWJuZXRPYmplY3RzQnlOYW1lKHNlbGVjdGlvbi5zdWJuZXRHcm91cE5hbWUpO1xuXG4gICAgfSBlbHNlIHsgLy8gT3Igc3BlY2lmeSBieSB0eXBlXG4gICAgICBjb25zdCB0eXBlID0gc2VsZWN0aW9uLnN1Ym5ldFR5cGUgfHwgU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTO1xuICAgICAgc3VibmV0cyA9IHRoaXMuc2VsZWN0U3VibmV0T2JqZWN0c0J5VHlwZSh0eXBlKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBhbGwgdGhlIGZpbHRlcnNcbiAgICBzdWJuZXRzID0gdGhpcy5hcHBseVN1Ym5ldEZpbHRlcnMoc3VibmV0cywgc2VsZWN0aW9uLnN1Ym5ldEZpbHRlcnMgPz8gW10pO1xuXG4gICAgcmV0dXJuIHN1Ym5ldHM7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U3VibmV0RmlsdGVycyhzdWJuZXRzOiBJU3VibmV0W10sIGZpbHRlcnM6IFN1Ym5ldEZpbHRlcltdKTogSVN1Ym5ldFtdIHtcbiAgICBsZXQgZmlsdGVyZWQgPSBzdWJuZXRzO1xuICAgIC8vIEFwcGx5IGVhY2ggZmlsdGVyIGluIHNlcXVlbmNlXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xuICAgICAgZmlsdGVyZWQgPSBmaWx0ZXIuc2VsZWN0U3VibmV0cyhmaWx0ZXJlZCk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0U3VibmV0T2JqZWN0c0J5TmFtZShncm91cE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFsbFN1Ym5ldHMgPSBbLi4udGhpcy5wdWJsaWNTdWJuZXRzLCAuLi50aGlzLnByaXZhdGVTdWJuZXRzLCAuLi50aGlzLmlzb2xhdGVkU3VibmV0c107XG4gICAgY29uc3Qgc3VibmV0cyA9IGFsbFN1Ym5ldHMuZmlsdGVyKHMgPT4gc3VibmV0R3JvdXBOYW1lRnJvbUNvbnN0cnVjdElkKHMpID09PSBncm91cE5hbWUpO1xuXG4gICAgaWYgKHN1Ym5ldHMubGVuZ3RoID09PSAwICYmICF0aGlzLmluY29tcGxldGVTdWJuZXREZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBuYW1lcyA9IEFycmF5LmZyb20obmV3IFNldChhbGxTdWJuZXRzLm1hcChzdWJuZXRHcm91cE5hbWVGcm9tQ29uc3RydWN0SWQpKSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBzdWJuZXQgZ3JvdXBzIHdpdGggbmFtZSAnJHtncm91cE5hbWV9JyBpbiB0aGlzIFZQQy4gQXZhaWxhYmxlIG5hbWVzOiAke25hbWVzfWApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJuZXRzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RTdWJuZXRPYmplY3RzQnlUeXBlKHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUpOiBJU3VibmV0W10ge1xuICAgIHR5cGUgRGVwcmVjYXRlZFN1Ym5ldFR5cGUgPSAnRGVwcmVjYXRlZF9Jc29sYXRlZCcgfCAnRGVwcmVjYXRlZF9Qcml2YXRlJztcbiAgICBjb25zdCBhbGxTdWJuZXRzOiB7IFtrZXkgaW4gU3VibmV0VHlwZSB8IERlcHJlY2F0ZWRTdWJuZXRUeXBlXT86IElTdWJuZXRbXSB9ID0ge1xuICAgICAgW1N1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRF06IHRoaXMuaXNvbGF0ZWRTdWJuZXRzLFxuICAgICAgWydEZXByZWNhdGVkX0lzb2xhdGVkJ106IHRoaXMuaXNvbGF0ZWRTdWJuZXRzLFxuICAgICAgW1N1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVF06IHRoaXMucHJpdmF0ZVN1Ym5ldHMsXG4gICAgICBbU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXTogdGhpcy5wcml2YXRlU3VibmV0cyxcbiAgICAgIFsnRGVwcmVjYXRlZF9Qcml2YXRlJ106IHRoaXMucHJpdmF0ZVN1Ym5ldHMsXG4gICAgICBbU3VibmV0VHlwZS5QVUJMSUNdOiB0aGlzLnB1YmxpY1N1Ym5ldHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHN1Ym5ldHMgPSBhbGxTdWJuZXRzW3N1Ym5ldFR5cGVdITtcblxuICAgIC8vIEZvcmNlIG1lcmdlIGNvbmZsaWN0IGhlcmUgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvcHVsbC80MDg5XG4gICAgLy8gc2VlIEltcG9ydGVkVnBjXG5cbiAgICBpZiAoc3VibmV0cy5sZW5ndGggPT09IDAgJiYgIXRoaXMuaW5jb21wbGV0ZVN1Ym5ldERlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVR5cGVzID0gT2JqZWN0LmVudHJpZXMoYWxsU3VibmV0cykuZmlsdGVyKChbXywgc3Vic10pID0+IHN1YnMubGVuZ3RoID4gMCkubWFwKChbdHlwZU5hbWUsIF9dKSA9PiB0eXBlTmFtZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyAnJHtzdWJuZXRUeXBlfScgc3VibmV0IGdyb3VwcyBpbiB0aGlzIFZQQy4gQXZhaWxhYmxlIHR5cGVzOiAke2F2YWlsYWJsZVR5cGVzfWApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJuZXRzO1xuICB9XG5cbiAgLyoqXG4gICogVmFsaWRhdGUgdGhlIGZpZWxkcyBpbiBhIFN1Ym5ldFNlbGVjdGlvbiBvYmplY3QsIGFuZCByZWlmeSBkZWZhdWx0cyBpZiBuZWNlc3NhcnlcbiAgKlxuICAqIEluIGNhc2Ugb2YgZGVmYXVsdCBzZWxlY3Rpb24sIHNlbGVjdCB0aGUgZmlyc3QgdHlwZSBvZiBQUklWQVRFLCBJU09MQVRFRCxcbiAgKiBQVUJMSUMgKGluIHRoYXQgb3JkZXIpIHRoYXQgaGFzIGFueSBzdWJuZXRzLlxuICAqL1xuICBwcml2YXRlIHJlaWZ5U2VsZWN0aW9uRGVmYXVsdHMocGxhY2VtZW50OiBTdWJuZXRTZWxlY3Rpb24pOiBTdWJuZXRTZWxlY3Rpb24ge1xuXG4gICAgLy8gVE9ETzogdGhyb3cgZXJyb3IgYXMgbmV3IFZwY1YyIGNhbm5vdCBzdXBwb3J0IHN1Ym5ldE5hbWUgb3Igc3VibmV0R3JvdXBOYW1lIGFueW1vcmVcbiAgICBpZiAoJ3N1Ym5ldE5hbWUnIGluIHBsYWNlbWVudCAmJiBwbGFjZW1lbnQuc3VibmV0TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocGxhY2VtZW50LnN1Ym5ldEdyb3VwTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBvbmx5IFxcJ3N1Ym5ldEdyb3VwTmFtZVxcJyAoXFwnc3VibmV0TmFtZVxcJyBpcyBkZXByZWNhdGVkIGFuZCBoYXMgdGhlIHNhbWUgYmVoYXZpb3IpJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nVjIoJ0Bhd3MtY2RrL2F3cy1lYzI6c3VibmV0TmFtZURlcHJlY2F0ZWQnLCAnVXNhZ2Ugb2YgXFwnc3VibmV0TmFtZVxcJyBpbiBTdWJuZXRTZWxlY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIFxcJ3N1Ym5ldEdyb3VwTmFtZVxcJyBpbnN0ZWFkJyk7XG4gICAgICB9XG4gICAgICBwbGFjZW1lbnQgPSB7IC4uLnBsYWNlbWVudCwgc3VibmV0R3JvdXBOYW1lOiBwbGFjZW1lbnQuc3VibmV0TmFtZSBhcyBzdHJpbmcgfTtcbiAgICB9XG5cbiAgICBjb25zdCBleGNsdXNpdmVTZWxlY3Rpb25zOiBBcnJheTxrZXlvZiBTdWJuZXRTZWxlY3Rpb24+ID0gWydzdWJuZXRzJywgJ3N1Ym5ldFR5cGUnLCAnc3VibmV0R3JvdXBOYW1lJ107XG4gICAgY29uc3QgcHJvdmlkZWRTZWxlY3Rpb25zID0gZXhjbHVzaXZlU2VsZWN0aW9ucy5maWx0ZXIoa2V5ID0+IHBsYWNlbWVudFtrZXldICE9PSB1bmRlZmluZWQpO1xuICAgIGlmIChwcm92aWRlZFNlbGVjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPbmx5IG9uZSBvZiAnJHtwcm92aWRlZFNlbGVjdGlvbnN9JyBjYW4gYmUgc3VwcGxpZWQgdG8gc3VibmV0IHNlbGVjdGlvbi5gKTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50LnN1Ym5ldFR5cGUgPT09IHVuZGVmaW5lZCAmJiBwbGFjZW1lbnQuc3VibmV0R3JvdXBOYW1lID09PSB1bmRlZmluZWQgJiYgcGxhY2VtZW50LnN1Ym5ldHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gUmV0dXJuIGRlZmF1bHQgc3VibmV0IHR5cGUgYmFzZWQgb24gc3VibmV0cyB0aGF0IGFjdHVhbGx5IGV4aXN0XG4gICAgICBsZXQgc3VibmV0VHlwZSA9IHRoaXMucHJpdmF0ZVN1Ym5ldHMubGVuZ3RoXG4gICAgICAgID8gU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIDogdGhpcy5pc29sYXRlZFN1Ym5ldHMubGVuZ3RoID8gU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVEIDogU3VibmV0VHlwZS5QVUJMSUM7XG4gICAgICBwbGFjZW1lbnQgPSB7IC4uLnBsYWNlbWVudCwgc3VibmV0VHlwZTogc3VibmV0VHlwZSB9O1xuICAgIH1cblxuICAgIC8vIEVzdGFibGlzaCB3aGljaCBzdWJuZXQgZmlsdGVycyBhcmUgZ29pbmcgdG8gYmUgdXNlZFxuICAgIGxldCBzdWJuZXRGaWx0ZXJzID0gcGxhY2VtZW50LnN1Ym5ldEZpbHRlcnMgPz8gW107XG5cbiAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGBhdmFpbGFiaWxpdHlab25lc2AgYW5kIGBvbmVQZXJBemAgZnVuY3Rpb25hbGl0eVxuICAgIGlmIChwbGFjZW1lbnQuYXZhaWxhYmlsaXR5Wm9uZXMgIT09IHVuZGVmaW5lZCkgeyAvLyBGaWx0ZXIgYnkgQVpzLCBpZiBzcGVjaWZpZWRcbiAgICAgIHN1Ym5ldEZpbHRlcnMucHVzaChTdWJuZXRGaWx0ZXIuYXZhaWxhYmlsaXR5Wm9uZXMocGxhY2VtZW50LmF2YWlsYWJpbGl0eVpvbmVzKSk7XG4gICAgfVxuICAgIGlmICghIXBsYWNlbWVudC5vbmVQZXJBeikgeyAvLyBFbnN1cmUgb25lIHBlciBBWiBpZiBzcGVjaWZpZWRcbiAgICAgIHN1Ym5ldEZpbHRlcnMucHVzaChTdWJuZXRGaWx0ZXIub25lUGVyQXooKSk7XG4gICAgfVxuXG4gICAgLy8gT3ZlcndyaXRlIHRoZSBwcm92aWRlZCBwbGFjZW1lbnQgZmlsdGVycyBhbmQgcmVtb3ZlIHRoZSBhdmFpbGFiaWxpdHlab25lcyBhbmQgb25lUGVyQXogcHJvcGVydGllc1xuICAgIHBsYWNlbWVudCA9IHsgLi4ucGxhY2VtZW50LCBzdWJuZXRGaWx0ZXJzOiBzdWJuZXRGaWx0ZXJzLCBhdmFpbGFiaWxpdHlab25lczogdW5kZWZpbmVkLCBvbmVQZXJBejogdW5kZWZpbmVkIH07XG4gICAgY29uc3QgeyBhdmFpbGFiaWxpdHlab25lcywgb25lUGVyQXosIC4uLnJlc3QgfSA9IHBsYWNlbWVudDtcblxuICAgIHJldHVybiByZXN0O1xuICB9XG59XG5cbmNsYXNzIENvbXBvc2l0ZURlcGVuZGFibGUgaW1wbGVtZW50cyBJRGVwZW5kYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwZW5kYWJsZXMgPSBuZXcgQXJyYXk8SURlcGVuZGFibGU+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgRGVwZW5kYWJsZS5pbXBsZW1lbnQodGhpcywge1xuICAgICAgZ2V0IGRlcGVuZGVuY3lSb290cygpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PElDb25zdHJ1Y3Q+KCk7XG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIHNlbGYuZGVwZW5kYWJsZXMpIHtcbiAgICAgICAgICByZXQucHVzaCguLi5EZXBlbmRhYmxlLm9mKGRlcCkuZGVwZW5kZW5jeVJvb3RzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEFkZCBhIGNvbnN0cnVjdCB0byB0aGUgZGVwZW5kZW5jeSByb290c1xuICAqL1xuICBwdWJsaWMgYWRkKGRlcDogSURlcGVuZGFibGUpIHtcbiAgICB0aGlzLmRlcGVuZGFibGVzLnB1c2goZGVwKTtcbiAgfVxufVxuXG4vKipcbiogSW52b2tlIGEgZnVuY3Rpb24gb24gYSB2YWx1ZSAoZm9yIGl0cyBzaWRlIGVmZmVjdCkgYW5kIHJldHVybiB0aGUgdmFsdWVcbiovXG5mdW5jdGlvbiB0YXA8VD4oeDogVCwgZm46ICh4OiBUKSA9PiB2b2lkKTogVCB7XG4gIGZuKHgpO1xuICByZXR1cm4geDtcblxufVxuIl19
|
package/lib/vpc-v2.d.ts
CHANGED
|
@@ -14,6 +14,25 @@ export interface SecondaryAddressProps {
|
|
|
14
14
|
*/
|
|
15
15
|
readonly cidrBlockName: string;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Additional props needed for BYOIP IPv6 address props
|
|
19
|
+
*/
|
|
20
|
+
export interface Ipv6PoolSecondaryAddressProps extends SecondaryAddressProps {
|
|
21
|
+
/**
|
|
22
|
+
* ID of the IPv6 address pool from which to allocate the IPv6 CIDR block.
|
|
23
|
+
* Note: BYOIP Pool ID is different from the IPAM Pool ID.
|
|
24
|
+
* To onboard your IPv6 address range to your AWS account please refer to the below documentation
|
|
25
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/byoip-onboard.html
|
|
26
|
+
*/
|
|
27
|
+
readonly ipv6PoolId: string;
|
|
28
|
+
/**
|
|
29
|
+
* A valid IPv6 CIDR block from the IPv6 address pool onboarded to AWS using BYOIP.
|
|
30
|
+
* The most specific IPv6 address range that you can bring is /48 for CIDRs that are publicly advertisable
|
|
31
|
+
* and /56 for CIDRs that are not publicly advertisable.
|
|
32
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#byoip-definitions
|
|
33
|
+
*/
|
|
34
|
+
readonly ipv6CidrBlock: string;
|
|
35
|
+
}
|
|
17
36
|
/**
|
|
18
37
|
* IpAddress options to define VPC V2
|
|
19
38
|
*/
|
|
@@ -34,6 +53,10 @@ export declare class IpAddresses {
|
|
|
34
53
|
* Amazon Provided Ipv6 range
|
|
35
54
|
*/
|
|
36
55
|
static amazonProvidedIpv6(props: SecondaryAddressProps): IIpAddresses;
|
|
56
|
+
/**
|
|
57
|
+
* A BYOIP IPv6 address pool
|
|
58
|
+
*/
|
|
59
|
+
static ipv6ByoipPool(props: Ipv6PoolSecondaryAddressProps): IIpAddresses;
|
|
37
60
|
}
|
|
38
61
|
/**
|
|
39
62
|
* Consolidated return parameters to pass to VPC construct
|
|
@@ -96,6 +119,18 @@ export interface VpcCidrOptions {
|
|
|
96
119
|
* @default - no IPAM IPv4 CIDR range is provisioned using IPAM
|
|
97
120
|
*/
|
|
98
121
|
readonly ipv4IpamProvisionedCidrs?: string[];
|
|
122
|
+
/**
|
|
123
|
+
* IPv6 CIDR block from the BOYIP IPv6 address pool.
|
|
124
|
+
*
|
|
125
|
+
* @default - None
|
|
126
|
+
*/
|
|
127
|
+
readonly ipv6CidrBlock?: string;
|
|
128
|
+
/**
|
|
129
|
+
* ID of the BYOIP IPv6 address pool from which to allocate the IPv6 CIDR block.
|
|
130
|
+
*
|
|
131
|
+
* @default - None
|
|
132
|
+
*/
|
|
133
|
+
readonly ipv6PoolId?: string;
|
|
99
134
|
}
|
|
100
135
|
/**
|
|
101
136
|
* Implements ip address allocation according to the IPAdress type
|
|
@@ -325,6 +360,14 @@ export interface IVPCCidrBlock {
|
|
|
325
360
|
* IPAM pool for IPv4 address type
|
|
326
361
|
*/
|
|
327
362
|
readonly ipv4IpamPoolId?: string;
|
|
363
|
+
/**
|
|
364
|
+
* The IPv6 CIDR block from the specified IPv6 address pool.
|
|
365
|
+
*/
|
|
366
|
+
readonly ipv6CidrBlock?: string;
|
|
367
|
+
/**
|
|
368
|
+
* The ID of the IPv6 address pool from which to allocate the IPv6 CIDR block.
|
|
369
|
+
*/
|
|
370
|
+
readonly ipv6Pool?: string;
|
|
328
371
|
}
|
|
329
372
|
/**
|
|
330
373
|
* Attributes for VPCCidrBlock used for defining a new CIDR Block
|
|
@@ -380,4 +423,17 @@ export interface VPCCidrBlockattributes {
|
|
|
380
423
|
* @default - no IPAM IPv4 CIDR range is provisioned using IPAM
|
|
381
424
|
*/
|
|
382
425
|
readonly ipv4IpamProvisionedCidrs?: string[];
|
|
426
|
+
/**
|
|
427
|
+
* The IPv6 CIDR block from the specified IPv6 address pool.
|
|
428
|
+
*
|
|
429
|
+
* @default - No IPv6 CIDR block associated with VPC.
|
|
430
|
+
*/
|
|
431
|
+
readonly ipv6CidrBlock?: string;
|
|
432
|
+
/**
|
|
433
|
+
* The ID of the IPv6 address pool from which to allocate the IPv6 CIDR block.
|
|
434
|
+
* Note: BYOIP Pool ID is different than IPAM Pool ID.
|
|
435
|
+
*
|
|
436
|
+
* @default - No BYOIP pool associated with VPC.
|
|
437
|
+
*/
|
|
438
|
+
readonly ipv6Pool?: string;
|
|
383
439
|
}
|