@aws-cdk/aws-imagebuilder-alpha 2.246.0-alpha.0 → 2.248.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/lib/component.js CHANGED
@@ -51,7 +51,7 @@ const LATEST_VERSION = 'x.x.x';
51
51
  * The value of a constant in a component document
52
52
  */
53
53
  class ComponentConstantValue {
54
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentConstantValue", version: "2.246.0-alpha.0" };
54
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentConstantValue", version: "2.248.0-alpha.0" };
55
55
  /**
56
56
  * Creates a string type constant in a component document
57
57
  *
@@ -268,7 +268,7 @@ var ComponentSchemaVersion;
268
268
  * Represents the inputs for a step in the component document
269
269
  */
270
270
  class ComponentStepInputs {
271
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepInputs", version: "2.246.0-alpha.0" };
271
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepInputs", version: "2.248.0-alpha.0" };
272
272
  /**
273
273
  * Creates the input value from an object, for the component step
274
274
  *
@@ -298,7 +298,7 @@ exports.ComponentStepInputs = ComponentStepInputs;
298
298
  * Represents an `if` condition in the component document
299
299
  */
300
300
  class ComponentStepIfCondition {
301
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepIfCondition", version: "2.246.0-alpha.0" };
301
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepIfCondition", version: "2.248.0-alpha.0" };
302
302
  /**
303
303
  * Creates the `if` value from an object, for the component step
304
304
  *
@@ -320,7 +320,7 @@ exports.ComponentStepIfCondition = ComponentStepIfCondition;
320
320
  * Helper class for referencing and uploading component data
321
321
  */
322
322
  class ComponentData {
323
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentData", version: "2.246.0-alpha.0" };
323
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentData", version: "2.248.0-alpha.0" };
324
324
  /**
325
325
  * Uploads component data from a local file to S3 to use as the component data
326
326
  *
@@ -407,7 +407,7 @@ exports.ComponentData = ComponentData;
407
407
  * Helper class for S3-based component data references, containing additional permission grant methods on the S3 object
408
408
  */
409
409
  class S3ComponentData extends ComponentData {
410
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3ComponentData", version: "2.246.0-alpha.0" };
410
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3ComponentData", version: "2.248.0-alpha.0" };
411
411
  bucket;
412
412
  key;
413
413
  constructor(bucket, key) {
@@ -468,7 +468,7 @@ class S3ComponentDataFromAsset extends S3ComponentData {
468
468
  * Helper class for working with AWS Marketplace components
469
469
  */
470
470
  class AwsMarketplaceComponent {
471
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AwsMarketplaceComponent", version: "2.246.0-alpha.0" };
471
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AwsMarketplaceComponent", version: "2.248.0-alpha.0" };
472
472
  /**
473
473
  * Imports an AWS Marketplace component from its attributes
474
474
  *
@@ -554,7 +554,7 @@ let Component = (() => {
554
554
  Component = _classThis = _classDescriptor.value;
555
555
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
556
556
  }
557
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Component", version: "2.246.0-alpha.0" };
557
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Component", version: "2.248.0-alpha.0" };
558
558
  /** Uniquely identifies this class. */
559
559
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.Component';
560
560
  /**
@@ -586,10 +586,10 @@ let Component = (() => {
586
586
  throw error;
587
587
  }
588
588
  if (attrs.componentArn && (attrs.componentName || attrs.componentVersion)) {
589
- throw new cdk.ValidationError('ConflictingComponentAttributes', 'a componentName or componentVersion cannot be provided when a componentArn is provided', scope);
589
+ throw new cdk.ValidationError((0, helpers_internal_1.lit) `ConflictingComponentAttributes`, 'a componentName or componentVersion cannot be provided when a componentArn is provided', scope);
590
590
  }
591
591
  if (!attrs.componentArn && !attrs.componentName) {
592
- throw new cdk.ValidationError('MissingComponentIdentifier', 'either componentArn or componentName is required', scope);
592
+ throw new cdk.ValidationError((0, helpers_internal_1.lit) `MissingComponentIdentifier`, 'either componentArn or componentName is required', scope);
593
593
  }
594
594
  const componentArn = attrs.componentArn ??
595
595
  cdk.Stack.of(scope).formatArn({
@@ -654,7 +654,7 @@ let Component = (() => {
654
654
  this.validateComponentName();
655
655
  props.supportedOsVersions?.forEach((osVersion) => {
656
656
  if (osVersion.platform !== props.platform) {
657
- throw new cdk.ValidationError('IncompatibleOsVersion', `os version ${osVersion.osVersion} is not compatible with platform ${props.platform}`, this);
657
+ throw new cdk.ValidationError((0, helpers_internal_1.lit) `IncompatibleOsVersion`, `os version ${osVersion.osVersion} is not compatible with platform ${props.platform}`, this);
658
658
  }
659
659
  });
660
660
  const componentVersion = props.componentVersion ?? '1.0.0';
@@ -699,16 +699,16 @@ let Component = (() => {
699
699
  return; // Cannot validate unresolved tokens, given their actual value is rendered at deployment time
700
700
  }
701
701
  if (this.physicalName.length > 128) {
702
- throw new cdk.ValidationError('ComponentNameTooLong', `the componentName cannot be longer than 128 characters, got: '${this.physicalName}'`, this);
702
+ throw new cdk.ValidationError((0, helpers_internal_1.lit) `ComponentNameTooLong`, `the componentName cannot be longer than 128 characters, got: '${this.physicalName}'`, this);
703
703
  }
704
704
  if (this.physicalName.includes(' ')) {
705
- throw new cdk.ValidationError('ComponentNameContainsSpaces', `the componentName cannot contain spaces, got: '${this.physicalName}'`, this);
705
+ throw new cdk.ValidationError((0, helpers_internal_1.lit) `ComponentNameContainsSpaces`, `the componentName cannot contain spaces, got: '${this.physicalName}'`, this);
706
706
  }
707
707
  if (this.physicalName.includes('_')) {
708
- throw new cdk.ValidationError('ComponentNameContainsUnderscores', `the componentName cannot contain underscores, got: '${this.physicalName}'`, this);
708
+ throw new cdk.ValidationError((0, helpers_internal_1.lit) `ComponentNameContainsUnderscores`, `the componentName cannot contain underscores, got: '${this.physicalName}'`, this);
709
709
  }
710
710
  if (this.physicalName !== this.physicalName.toLowerCase()) {
711
- throw new cdk.ValidationError('ComponentNameNotLowercase', `the componentName must be lowercase, got: '${this.physicalName}'`, this);
711
+ throw new cdk.ValidationError((0, helpers_internal_1.lit) `ComponentNameNotLowercase`, `the componentName must be lowercase, got: '${this.physicalName}'`, this);
712
712
  }
713
713
  }
714
714
  static {
@@ -718,4 +718,4 @@ let Component = (() => {
718
718
  return Component = _classThis;
719
719
  })();
720
720
  exports.Component = Component;
721
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsbUVBQTREO0FBRzVELHNEQUFzRDtBQUN0RCw0RUFBdUU7QUFDdkUsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUUxRSw2QkFBNkI7QUFHN0IsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7QUFFakYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBK1QvQjs7R0FFRztBQUNILE1BQWEsc0JBQXNCOztJQUNqQzs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDcEQ7SUFFRDs7T0FFRztJQUNhLElBQUksQ0FBUztJQUU3Qjs7T0FFRztJQUNhLEtBQUssQ0FBTTtJQUUzQixZQUFzQixJQUFZLEVBQUUsS0FBVTtRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjs7QUF2Qkgsd0RBd0JDO0FBMEJEOztHQUVHO0FBQ0gsSUFBWSxlQXdKWDtBQXhKRCxXQUFZLGVBQWU7SUFDekI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7O09BR0c7SUFDSCxvQ0FBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILHlDQUFzQixDQUFBO0lBRXRCOztPQUVHO0lBQ0gsNkNBQTBCLENBQUE7SUFFMUI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7T0FFRztJQUNILGlEQUE4QixDQUFBO0lBRTlCOztPQUVHO0lBQ0gsbURBQWdDLENBQUE7SUFFaEM7O09BRUc7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RyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE9BQU8sQ0FBQyw2RkFBNkY7WUFDdkcsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUMzQixzQkFBc0IsRUFDdEIsaUVBQWlFLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFDckYsSUFBSSxDQUNMLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsRUFBRSxrREFBa0QsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdJLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLGtDQUFrQyxFQUFFLHVEQUF1RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkosQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQzFELE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLDJCQUEyQixFQUFFLDhDQUE4QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkksQ0FBQztTQUNGOztZQTVMVSx1REFBUzs7Ozs7QUFBVCw4QkFBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDZm5Db21wb25lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaW1hZ2VidWlsZGVyJztcbmltcG9ydCB0eXBlICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHR5cGUgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0ICogYXMgczNhc3NldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBtZW1vaXplZEdldHRlciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAneWFtbCc7XG5pbXBvcnQgdHlwZSB7IE9TVmVyc2lvbiwgUGxhdGZvcm0gfSBmcm9tICcuL29zLXZlcnNpb24nO1xuXG5jb25zdCBDT01QT05FTlRfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5Db21wb25lbnQnKTtcblxuY29uc3QgTEFURVNUX1ZFUlNJT04gPSAneC54LngnO1xuXG4vKipcbiAqIEFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29tcG9uZW50IGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgQ29tcG9uZW50IHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50UHJvcHMge1xuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBkb2N1bWVudCBjb250ZW50IHRoYXQgZGVmaW5lcyB0aGUgYnVpbGQsIHZhbGlkYXRpb24sIG9yIHRlc3Qgc3RlcHMgdG8gYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBpbWFnZVxuICAgKiBidWlsZGluZyBwcm9jZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YTogQ29tcG9uZW50RGF0YTtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gcGxhdGZvcm0gb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBQbGF0Zm9ybTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5hbWUgaXMgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAxLjAuMFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhbmdlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQuIERlc2NyaWJlcyB3aGF0IGNoYW5nZSBoYXMgYmVlbiBtYWRlIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LCBvclxuICAgKiB3aGF0IG1ha2VzIHRoaXMgdmVyc2lvbiBkaWZmZXJlbnQgZnJvbSBvdGhlciB2ZXJzaW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGlzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbiBJbWFnZSBCdWlsZGVyIG93bmVkIGtleSB3aWxsIGJlIHVzZWQgdG8gZW5jcnlwdCB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb25zIHN1cHBvcnRlZCBieSB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBzdXBwb3J0ZWRPc1ZlcnNpb25zPzogT1NWZXJzaW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYW4gRUMyIEltYWdlIEJ1aWxkZXIgY29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgQVJOIGlzIGF1dG9tYXRpY2FsbHkgY29uc3RydWN0ZWQgaWYgYSBjb21wb25lbnROYW1lIGlzIHByb3ZpZGVkLCBvdGhlcndpc2UgYSBjb21wb25lbnRBcm4gaXNcbiAgICogICAgICAgICAgICByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50QXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIG5hbWUgaXMgYXV0b21hdGljYWxseSBjb25zdHJ1Y3RlZCBpZiBhIGNvbXBvbmVudEFybiBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIGEgY29tcG9uZW50TmFtZSBpc1xuICAgKiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnQsIHgueC54XG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFuIEVDMiBJbWFnZSBCdWlsZGVyIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnQuIFRoaXMgbmFtZSBzaG91bGQgZXhjbHVkZSB0aGUgbWFya2V0cGxhY2UgcHJvZHVjdCBJRCBmcm9tIGl0XG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXJrZXRwbGFjZSBwcm9kdWN0IElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBtYXJrZXRwbGFjZVByb2R1Y3RJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgQVdTIE1hcmtldHBsYWNlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LCB4LngueFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIGFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbXBvbmVudCBEb2N1bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50IHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlbWEgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBzY2hlbWFWZXJzaW9uOiBDb21wb25lbnRTY2hlbWFWZXJzaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2VzIHdoaWNoIGRlZmluZSB0aGUgZ3JvdXBpbmcgb2Ygc3RlcHMgdG8gcnVuIGluIHRoZSBidWlsZCBhbmQgdGVzdCB3b3JrZmxvd3Mgb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGhhc2VzOiBDb21wb25lbnREb2N1bWVudFBoYXNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGRvY3VtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uc3RhbnRzIHRvIGRlZmluZSBpbiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RhbnRzPzogeyBbY29uc3RhbnROYW1lOiBzdHJpbmddOiBDb21wb25lbnRDb25zdGFudFZhbHVlIH07XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXJzIHRvIGRlZmluZSBpbiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IHsgW3BhcmFtZXRlck5hbWU6IHN0cmluZ106IENvbXBvbmVudERvY3VtZW50UGFyYW1ldGVyRGVmaW5pdGlvbiB9O1xufVxuXG4vKipcbiAqIFRoZSBwaGFzZSB0byBydW4gaW4gYSBzcGVjaWZpYyB3b3JrZmxvdyBpbiBhbiBpbWFnZSBidWlsZCwgd2hpY2ggZGVmaW5lIHRoZSBzdGVwcyB0byBleGVjdXRlIHRvIGN1c3RvbWl6ZSBvciB0ZXN0XG4gKiB0aGUgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRQaGFzZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGhhc2VcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IENvbXBvbmVudFBoYXNlTmFtZTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygc3RlcHMgdG8gZXhlY3V0ZSB0byBtb2RpZnkgb3IgdGVzdCB0aGUgYnVpbGQvdGVzdCBpbnN0YW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RlcHM6IENvbXBvbmVudERvY3VtZW50U3RlcFtdO1xufVxuXG4vKipcbiAqIFRoZSBzdGVwIHRvIHJ1biBpbiBhIHNwZWNpZmljIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZCwgd2hpY2ggZGVmaW5lcyB0aGUgc3RlcCB0byBleGVjdXRlIHRvIGN1c3RvbWl6ZSBvciB0ZXN0IHRoZVxuICogaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRTdGVwIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGVwXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhY3Rpb24gdG8gcGVyZm9ybSBpbiB0aGUgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uOiBDb21wb25lbnRBY3Rpb247XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHBhcmFtZXRlcnMgcmVxdWlyZWQgYnkgdGhlIGFjdGlvbiB0byBydW4gdGhlIHN0ZXBcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvdG9lLWFjdGlvbi1tb2R1bGVzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGlucHV0czogQ29tcG9uZW50U3RlcElucHV0cztcblxuICAvKipcbiAgICogVGhlIGNvbmRpdGlvbiB0byBhcHBseSB0byB0aGUgc3RlcC4gSWYgdGhlIGNvbmRpdGlvbiBpcyBmYWxzZSwgdGhlbiB0aGUgc3RlcCBpcyBza2lwcGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY29uZGl0aW9uIGlzIGFwcGxpZWQgdG8gdGhlIHN0ZXAgYW5kIGl0IGdldHMgZXhlY3V0ZWRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvdG9lLWNvbmRpdGlvbmFsLWNvbnN0cnVjdHMuaHRtbFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS90b2UtY29tcGFyaXNvbi1vcGVyYXRvcnMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaWY/OiBDb21wb25lbnRTdGVwSWZDb25kaXRpb247XG5cbiAgLyoqXG4gICAqIEEgbG9vcGluZyBjb25zdHJ1Y3QgZGVmaW5pbmcgYSByZXBlYXRlZCBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9vcD86IENvbXBvbmVudERvY3VtZW50TG9vcDtcblxuICAvKipcbiAgICogVGhlIHRpbWVvdXQgb2YgdGhlIHN0ZXBcbiAgICpcbiAgICogQGRlZmF1bHQgLSAxMjAgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoYXQgdGhlIHN0ZXAgc2hvdWxkIGRvIGluIGNhc2Ugb2YgZmFpbHVyZVxuICAgKlxuICAgKiBAZGVmYXVsdCBDb21wb25lbnRPbkZhaWx1cmUuQUJPUlRcbiAgICovXG4gIHJlYWRvbmx5IG9uRmFpbHVyZT86IENvbXBvbmVudE9uRmFpbHVyZTtcbn1cblxuLyoqXG4gKiBUaGUgbG9vcGluZyBjb25zdHJ1Y3Qgb2YgYSBjb21wb25lbnQgZGVmaW5lcyBhIHJlcGVhdGVkIHNlcXVlbmNlIG9mIGluc3RydWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50TG9vcCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbG9vcCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IGxvb3BcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3IgbG9vcCBpdGVyYXRlcyBvbiBhIHJhbmdlIG9mIGludGVnZXJzIHNwZWNpZmllZCB3aXRoaW4gYSBib3VuZGFyeSBvdXRsaW5lZCBieSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGVcbiAgICogdmFyaWFibGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBgZm9yRWFjaGAgaXMgcHJvdmlkZWQuIG90aGVyd2lzZSwgYGZvcmAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSBmb3I/OiBDb21wb25lbnREb2N1bWVudEZvckxvb3A7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JFYWNoIGxvb3AgaXRlcmF0ZXMgb24gYW4gZXhwbGljaXQgbGlzdCBvZiB2YWx1ZXMsIHdoaWNoIGNhbiBiZSBzdHJpbmdzIGFuZCBjaGFpbmVkIGV4cHJlc3Npb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBgZm9yYCBpcyBwcm92aWRlZC4gb3RoZXJ3aXNlLCBgZm9yRWFjaGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSBmb3JFYWNoPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIGZvciBsb29wIGl0ZXJhdGVzIG9uIGEgcmFuZ2Ugb2YgaW50ZWdlcnMgc3BlY2lmaWVkIHdpdGhpbiBhIGJvdW5kYXJ5IG91dGxpbmVkIGJ5IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZVxuICogdmFyaWFibGVzLiBUaGUgaXRlcmF0aW5nIHZhbHVlcyBhcmUgaW4gdGhlIHNldCBbc3RhcnQsIGVuZF0gYW5kIGluY2x1ZGVzIGJvdW5kYXJ5IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudEZvckxvb3Age1xuICAvKipcbiAgICogU3RhcnRpbmcgdmFsdWUgb2YgaXRlcmF0aW9uLiBEb2VzIG5vdCBhY2NlcHQgY2hhaW5pbmcgZXhwcmVzc2lvbnMuXG4gICAqL1xuICByZWFkb25seSBzdGFydDogbnVtYmVyO1xuICAvKipcbiAgICogRW5kaW5nIHZhbHVlIG9mIGl0ZXJhdGlvbi4gRG9lcyBub3QgYWNjZXB0IGNoYWluaW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kOiBudW1iZXI7XG4gIC8qKlxuICAgKiBEaWZmZXJlbmNlIGJ5IHdoaWNoIGFuIGl0ZXJhdGluZyB2YWx1ZSBpcyB1cGRhdGVkIHRocm91Z2ggYWRkaXRpb24uIEl0IG11c3QgYmUgYSBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBub24temVyb1xuICAgKiB2YWx1ZS4gRG9lcyBub3QgYWNjZXB0IGNoYWluaW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlQnk6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYSBjb25zdGFudCBpbiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc3RyaW5nIHR5cGUgY29uc3RhbnQgaW4gYSBjb21wb25lbnQgZG9jdW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRDb25zdGFudFZhbHVlKCdzdHJpbmcnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRhdGEgdHlwZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogYW55O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBwYXJhbWV0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudFBhcmFtZXRlckRlZmluaXRpb24ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlclxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogQ29tcG9uZW50UGFyYW1ldGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUsIGluZGljYXRpbmcgdGhlIHBhcmFtZXRlciBpcyByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdD86IGFueTtcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGFjdGlvbiBmb3IgYSBzdGVwIHdpdGhpbiB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudEFjdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgQXBwZW5kRmlsZSBhY3Rpb24gYWRkcyB0aGUgcHJvdmlkZWQgY29udGVudCB0byB0aGUgcHJlLWV4aXN0aW5nIGNvbnRlbnQgb2YgYSBmaWxlXG4gICAqL1xuICBBUFBFTkRfRklMRSA9ICdBcHBlbmRGaWxlJyxcblxuICAvKipcbiAgICogVGhlIEFzc2VydCBhY3Rpb24gcGVyZm9ybXMgdmFsdWUgd2l0aCBjb21wYXJpc29uL2xvZ2ljIG9wZXJhdG9ycywgYW5kIHN1Y2NlZWRzL2ZhaWxzIHRoZSBzdGVwIGJhc2VkIG9uIHRoZSBvdXRjb21lXG4gICAqIG9mIHRoZSBhc3NlcnRpb25cbiAgICovXG4gIEFTU0VSVCA9ICdBc3NlcnQnLFxuXG4gIC8qKlxuICAgKiBUaGUgQ29weUZpbGUgYWN0aW9uIGNvcGllcyBmaWxlcyBmcm9tIGEgc291cmNlIGZpbGUgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgQ09QWV9GSUxFID0gJ0NvcHlGaWxlJyxcblxuICAvKipcbiAgICogVGhlIENvcHlGb2xkZXIgYWN0aW9uIGNvcGllcyBmb2xkZXJzIGZyb20gYSBzb3VyY2UgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgQ09QWV9GT0xERVIgPSAnQ29weUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSBDcmVhdGVGaWxlIGFjdGlvbiBjcmVhdGVzIGEgZmlsZSBpbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIENSRUFURV9GSUxFID0gJ0NyZWF0ZUZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgQ3JlYXRlRm9sZGVyIGFjdGlvbiBjcmVhdGVzIGEgZm9sZGVyIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgQ1JFQVRFX0ZPTERFUiA9ICdDcmVhdGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgQ3JlYXRlU3ltbGluayBhY3Rpb24gY3JlYXRlcyBzeW1ib2xpYyBsaW5rcyBmcm9tIGEgZ2l2ZW4gcGF0aCB0byBhIHRhcmdldFxuICAgKi9cbiAgQ1JFQVRFX1NZTUxJTksgPSAnQ3JlYXRlU3ltbGluaycsXG5cbiAgLyoqXG4gICAqIFRoZSBEZWxldGVGaWxlIGFjdGlvbiBkZWxldGVzIGZpbGUocykgaW4gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuICBERUxFVEVfRklMRSA9ICdEZWxldGVGaWxlJyxcblxuICAvKipcbiAgICogVGhlIERlbGV0ZUZvbGRlciBhY3Rpb24gZGVsZXRlcyBmb2xkZXJzIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgREVMRVRFX0ZPTERFUiA9ICdEZWxldGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZUJhc2ggYWN0aW9uIHJ1bnMgYmFzaCBzY3JpcHRzIHdpdGggaW5saW5lIGJhc2ggY29tbWFuZHNcbiAgICovXG4gIEVYRUNVVEVfQkFTSCA9ICdFeGVjdXRlQmFzaCcsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlQmluYXJ5IGFjdGlvbiBydW5zIGEgcHJvdmlkZWQgYmluYXJ5IGV4ZWN1dGFibGVcbiAgICovXG4gIEVYRUNVVEVfQklOQVJZID0gJ0V4ZWN1dGVCaW5hcnknLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZURvY3VtZW50IGFjdGlvbiBhbGxvd3MgcnVubmluZyBvdGhlciBjb21wb25lbnQgZG9jdW1lbnRzIGZyb20gd2l0aGluIGEgZ2l2ZW4gY29tcG9uZW50XG4gICAqL1xuICBFWEVDVVRFX0RPQ1VNRU5UID0gJ0V4ZWN1dGVEb2N1bWVudCcsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlUG93ZXJzaGVsbCBhY3Rpb24gcnVucyBQb3dlclNoZWxsIHNjcmlwdHMgd2l0aCBpbmxpbmUgUG93ZXJTaGVsbCBjb21tYW5kc1xuICAgKi9cbiAgRVhFQ1VURV9QT1dFUlNIRUxMID0gJ0V4ZWN1dGVQb3dlclNoZWxsJyxcblxuICAvKipcbiAgICogVGhlIEluc3RhbGxNU0kgYWN0aW9uIHJ1bnMgYSBXaW5kb3dzIGFwcGxpY2F0aW9uIHdpdGggdGhlIHByb3ZpZGVkIE1TSSBmaWxlXG4gICAqL1xuICBJTlNUQUxMX01TSSA9ICdJbnN0YWxsTVNJJyxcblxuICAvKipcbiAgICogVGhlIExpc3RGaWxlcyBhY3Rpb24gbGlzdHMgZmlsZXMgaW4gdGhlIHByb3ZpZGVkIGZvbGRlclxuICAgKi9cbiAgTElTVF9GSUxFUyA9ICdMaXN0RmlsZXMnLFxuXG4gIC8qKlxuICAgKiBUaGUgTW92ZUZpbGUgYWN0aW9uIG1vdmVzIGZpbGVzIGZyb20gYSBzb3VyY2UgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgTU9WRV9GSUxFID0gJ01vdmVGaWxlJyxcblxuICAvKipcbiAgICogVGhlIE1vdmVGb2xkZXIgYWN0aW9uIG1vdmVzIGZvbGRlcnMgZnJvbSBhIHNvdXJjZSB0byBhIGRlc3RpbmF0aW9uXG4gICAqL1xuICBNT1ZFX0ZPTERFUiA9ICdNb3ZlRm9sZGVyJyxcblxuICAvKipcbiAgICogVGhlIFJlYWRGaWxlIGFjdGlvbiByZWFkcyB0aGUgY29udGVudCBvZiBhIHRleHQgZmlsZVxuICAgKi9cbiAgUkVBRF9GSUxFID0gJ1JlYWRGaWxlJyxcblxuICAvKipcbiAgICogVGhlIFJlYm9vdCBhY3Rpb24gcmVib290cyB0aGUgaW5zdGFuY2VcbiAgICovXG4gIFJFQk9PVCA9ICdSZWJvb3QnLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0RmlsZUVuY29kaW5nIGFjdGlvbiBtb2RpZmllcyB0aGUgZW5jb2RpbmcgcHJvcGVydHkgb2YgYW4gZXhpc3RpbmcgZmlsZVxuICAgKi9cbiAgU0VUX0ZJTEVfRU5DT0RJTkcgPSAnU2V0RmlsZUVuY29kaW5nJyxcblxuICAvKipcbiAgICogVGhlIFNldEZpbGVPd25lciBhY3Rpb24gbW9kaWZpZXMgdGhlIG93bmVyIGFuZCBncm91cCBvd25lcnNoaXAgcHJvcGVydGllcyBvZiBhbiBleGlzdGluZyBmaWxlXG4gICAqL1xuICBTRVRfRklMRV9PV05FUiA9ICdTZXRGaWxlT3duZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0Rm9sZGVyT3duZXIgYWN0aW9uIHJlY3Vyc2l2ZWx5IG1vZGlmaWVzIHRoZSBvd25lciBhbmQgZ3JvdXAgb3duZXJzaGlwIHByb3BlcnRpZXMgb2YgYW4gZXhpc3RpbmcgZm9sZGVyXG4gICAqL1xuICBTRVRfRk9MREVSX09XTkVSID0gJ1NldEZvbGRlck93bmVyJyxcblxuICAvKipcbiAgICogVGhlIFNldEZpbGVQZXJtaXNzaW9ucyBhY3Rpb24gbW9kaWZpZXMgdGhlIHBlcm1pc3Npb24gb2YgYW4gZXhpc3RpbmcgZmlsZVxuICAgKi9cbiAgU0VUX0ZJTEVfUEVSTUlTU0lPTlMgPSAnU2V0RmlsZVBlcm1pc3Npb25zJyxcblxuICAvKipcbiAgICogVGhlIFNldEZvbGRlclBlcm1pc3Npb25zIGFjdGlvbiByZWN1cnNpdmVseSBtb2RpZmllcyB0aGUgcGVybWlzc2lvbnMgb2YgYW4gZXhpc3RpbmcgZm9sZGVyIGFuZCBhbGwgb2YgaXRzIHN1YmZpbGVzXG4gICAqIGFuZCBzdWJmb2xkZXJzXG4gICAqL1xuICBTRVRfRk9MREVSX1BFUk1JU1NJT05TID0gJ1NldEZvbGRlclBlcm1pc3Npb25zJyxcblxuICAvKipcbiAgICogVGhlIFNldFJlZ2lzdHJ5IGFjdGlvbiBzZXRzIHRoZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBXaW5kb3dzIHJlZ2lzdHJ5IGtleVxuICAgKi9cbiAgU0VUX1JFR0lTVFJZID0gJ1NldFJlZ2lzdHJ5JyxcblxuICAvKipcbiAgICogVGhlIFMzRG93bmxvYWQgYWN0aW9uIGRvd25sb2FkcyBhbiBBbWF6b24gUzMgb2JqZWN0L2ZvbGRlciB0byBhIGxvY2FsIGRlc3RpbmF0aW9uXG4gICAqL1xuICBTM19ET1dOTE9BRCA9ICdTM0Rvd25sb2FkJyxcblxuICAvKipcbiAgICogVGhlIFMzVXBsb2FkIGFjdGlvbiB1cGxvYWRzIGEgZmlsZSBvciBmb2xkZXIgdG8gYW4gQW1hem9uIFMzIGxvY2F0aW9uXG4gICAqL1xuICBTM19VUExPQUQgPSAnUzNVcGxvYWQnLFxuXG4gIC8qKlxuICAgKiBUaGUgVW5pbnN0YWxsTVNJIGFjdGlvbiByZW1vdmVzIGEgV2luZG93cyBhcHBsaWNhdGlvbiB1c2luZyBhbiBNU0kgZmlsZVxuICAgKi9cbiAgVU5JTlNUQUxMX01TSSA9ICdVbmluc3RhbGxNU0knLFxuXG4gIC8qKlxuICAgKiBUaGUgVXBkYXRlT1MgYWN0aW9uIGluc3RhbGxzIE9TIHVwZGF0ZXNcbiAgICovXG4gIFVQREFURV9PUyA9ICdVcGRhdGVPUycsXG5cbiAgLyoqXG4gICAqIFRoZSBXZWJEb3dubG9hZCBhY3Rpb24gZG93bmxvYWRzIGZpbGVzIGZyb20gYSBVUkwgdG8gYSBsb2NhbCBkZXN0aW5hdGlvblxuICAgKi9cbiAgV0VCX0RPV05MT0FEID0gJ1dlYkRvd25sb2FkJyxcbn1cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hhdCB0aGUgc3RlcCBzaG91bGQgZG8gaW4gY2FzZSBvZiBmYWlsdXJlXG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudE9uRmFpbHVyZSB7XG4gIC8qKlxuICAgKiBGYWlscyB0aGUgc3RlcCBhbmQgZG9jdW1lbnQgZXhlY3V0aW9uXG4gICAqL1xuICBBQk9SVCA9ICdBYm9ydCcsXG5cbiAgLyoqXG4gICAqIEZhaWxzIHRoZSBzdGVwIGFuZCBwcm9jZWVkcyB0byBleGVjdXRlIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIGRvY3VtZW50XG4gICAqL1xuICBDT05USU5VRSA9ICdDb250aW51ZScsXG5cbiAgLyoqXG4gICAqIElnbm9yZXMgdGhlIHN0ZXAgYW5kIHByb2NlZWRzIHRvIGV4ZWN1dGUgdGhlIG5leHQgc3RlcCBpbiB0aGUgZG9jdW1lbnRcbiAgICovXG4gIElHTk9SRSA9ICdJZ25vcmUnLFxufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXIgdHlwZSBpbiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRQYXJhbWV0ZXJUeXBlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgcGFyYW1ldGVyIHZhbHVlIGlzIGEgc3RyaW5nXG4gICAqL1xuICBTVFJJTkcgPSAnc3RyaW5nJyxcbn1cblxuLyoqXG4gKiBUaGUgcGhhc2VzIG9mIGEgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudFBoYXNlTmFtZSB7XG4gIC8qKlxuICAgKiBCdWlsZCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LiBUaGlzIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIEJVSUxESU5HIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZC5cbiAgICovXG4gIEJVSUxEID0gJ2J1aWxkJyxcblxuICAvKipcbiAgICogVGVzdCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LCBleGVjdXRlZCBkaXJlY3RseSBvbiB0aGUgaW5zdGFuY2Ugd2hpY2ggaXMgdXNlZCB0byBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlLiBUaGlzXG4gICAqIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIFRFU1RJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgQ09OVEFJTkVSX0hPU1RfVEVTVCA9ICdjb250YWluZXItaG9zdC10ZXN0JyxcblxuICAvKipcbiAgICogVGVzdCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LiBUaGlzIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIFRFU1RJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgVEVTVCA9ICd0ZXN0JyxcblxuICAvKipcbiAgICogVmFsaWRhdGUgcGhhc2Ugb2YgdGhlIGNvbXBvbmVudC4gVGhpcyBwaGFzZSBpcyBydW4gZHVyaW5nIHRoZSBCVUlMRElORyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQsIGFmdGVyIHRoZSBidWlsZFxuICAgKiBzdGVwIG9mIHRoZSBjb21wb25lbnQgaXMgZXhlY3V0ZWQuXG4gICAqL1xuICBWQUxJREFURSA9ICd2YWxpZGF0ZScsXG59XG5cbi8qKlxuICogVGhlIHNjaGVtYSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50U2NoZW1hVmVyc2lvbiB7XG4gIC8qKlxuICAgKiBTY2hlbWEgdmVyc2lvbiAxLjAgZm9yIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAgICovXG4gIFYxXzAgPSAnMS4wJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBpbnB1dHMgZm9yIGEgc3RlcCBpbiB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRTdGVwSW5wdXRzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGlucHV0IHZhbHVlIGZyb20gYW4gb2JqZWN0LCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dHNPYmplY3QgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnB1dCB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChpbnB1dHNPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBDb21wb25lbnRTdGVwSW5wdXRzIHtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudFN0ZXBJbnB1dHMoaW5wdXRzT2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBpbnB1dCB2YWx1ZSBmcm9tIGEgbGlzdCBvZiBpbnB1dCBvYmplY3RzLCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dHNPYmplY3RMaXN0IFRoZSBsaXN0IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgaW5wdXQgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21MaXN0KGlucHV0c09iamVjdExpc3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSk6IENvbXBvbmVudFN0ZXBJbnB1dHMge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50U3RlcElucHV0cyhpbnB1dHNPYmplY3RMaXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgaW5wdXQgdmFsdWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnB1dHM6IGFueTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoaW5wdXQ6IGFueSkge1xuICAgIHRoaXMuaW5wdXRzID0gaW5wdXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGBpZmAgY29uZGl0aW9uIGluIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBvbmVudFN0ZXBJZkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBgaWZgIHZhbHVlIGZyb20gYW4gb2JqZWN0LCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpZk9iamVjdCBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBpZmAgY29uZGl0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PYmplY3QoaWZPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBDb21wb25lbnRTdGVwSWZDb25kaXRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50U3RlcElmQ29uZGl0aW9uKGlmT2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgaW5wdXQgdmFsdWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpZkNvbmRpdGlvbjogYW55O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihpZkNvbmRpdGlvbjogYW55KSB7XG4gICAgdGhpcy5pZkNvbmRpdGlvbiA9IGlmQ29uZGl0aW9uO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIHZhbHVlLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uLlxuICogLSBGb3IgaW5saW5lIGNvbXBvbmVudHMsIGRhdGEgaXMgdGhlIGNvbXBvbmVudCB0ZXh0XG4gKiAtIEZvciBTMy1iYWNrZWQgY29tcG9uZW50cywgdXJpIGlzIHRoZSBTMyBVUkxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREYXRhQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgdXJpIGlzIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIFVSSSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgZGF0YSBpcyBzZXRcbiAgICovXG4gIHJlYWRvbmx5IHVyaT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHJlZmVyZW5jaW5nIGFuZCB1cGxvYWRpbmcgY29tcG9uZW50IGRhdGFcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBvbmVudERhdGEge1xuICAvKipcbiAgICogVXBsb2FkcyBjb21wb25lbnQgZGF0YSBmcm9tIGEgbG9jYWwgZmlsZSB0byBTMyB0byB1c2UgYXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIHBhdGggVGhlIGxvY2FsIHBhdGggdG8gdGhlIGNvbXBvbmVudCBkYXRhIGZpbGVcbiAgICogQHBhcmFtIG9wdGlvbnMgUzMgYXNzZXQgdXBsb2FkIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFzc2V0KFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogczNhc3NldHMuQXNzZXRPcHRpb25zID0ge30sXG4gICk6IFMzQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgYXNzZXQgPSBuZXcgczNhc3NldHMuQXNzZXQoc2NvcGUsIGlkLCB7IC4uLm9wdGlvbnMsIHBhdGggfSk7XG4gICAgcmV0dXJuIG5ldyBTM0NvbXBvbmVudERhdGFGcm9tQXNzZXQoYXNzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZXMgY29tcG9uZW50IGRhdGEgZnJvbSBhIHByZS1leGlzdGluZyBTMyBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIGJ1Y2tldCBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBjb21wb25lbnQgZGF0YSBpcyBzdG9yZWRcbiAgICogQHBhcmFtIGtleSBUaGUgUzMga2V5IG9mIHRoZSBjb21wb25lbnQgZGF0YSBmaWxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TMyhidWNrZXQ6IHMzLklCdWNrZXQsIGtleTogc3RyaW5nKTogUzNDb21wb25lbnREYXRhIHtcbiAgICByZXR1cm4gbmV3IFMzQ29tcG9uZW50RGF0YUZyb21CdWNrZXRLZXkoYnVja2V0LCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIEpTT04gb2JqZWN0IGFzIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBBbiBpbmxpbmUgSlNPTiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbk9iamVjdChkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgaW5saW5lRGF0YSA9IHlhbWwuc3RyaW5naWZ5KGRhdGEsIHsgaW5kZW50OiAyIH0pO1xuICAgIHJldHVybiBuZXcgSW5saW5lQ29tcG9uZW50RGF0YShpbmxpbmVEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VzIGFuIGlubGluZSBKU09OIG9iamVjdCBhcyB0aGUgY29tcG9uZW50IGRhdGEsIHVzaW5nIHRoZSBDb21wb25lbnREb2N1bWVudCBpbnRlcmZhY2VcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgQW4gaW5saW5lIEpTT04gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudERvY3VtZW50SnNvbk9iamVjdChkYXRhOiBDb21wb25lbnREb2N1bWVudCk6IENvbXBvbmVudERhdGEge1xuICAgIGNvbnN0IHsgbmFtZSwgZGVzY3JpcHRpb24sIHNjaGVtYVZlcnNpb24sIGNvbnN0YW50cywgcGFyYW1ldGVycywgcGhhc2VzIH0gPSBkYXRhO1xuICAgIHJldHVybiB0aGlzLmZyb21Kc29uT2JqZWN0KHtcbiAgICAgIC4uLihuYW1lICE9PSB1bmRlZmluZWQgJiYgeyBuYW1lIH0pLFxuICAgICAgLi4uKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgIHNjaGVtYVZlcnNpb246IHNjaGVtYVZlcnNpb24sXG4gICAgICAuLi4oY29uc3RhbnRzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBjb25zdGFudHM6IE9iamVjdC5lbnRyaWVzKGNvbnN0YW50cykubWFwKChbY29uc3RhbnROYW1lLCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgW2NvbnN0YW50TmFtZV06IHsgdHlwZTogdmFsdWUudHlwZSwgdmFsdWU6IHZhbHVlLnZhbHVlIH0sXG4gICAgICAgIH0pKSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIHBhcmFtZXRlcnM6IE9iamVjdC5lbnRyaWVzKHBhcmFtZXRlcnMpLm1hcCgoW3BhcmFtZXRlck5hbWUsIHZhbHVlXSkgPT4gKHsgW3BhcmFtZXRlck5hbWVdOiB2YWx1ZSB9KSksXG4gICAgICB9KSxcbiAgICAgIHBoYXNlczogcGhhc2VzLm1hcCgocGhhc2UpID0+ICh7XG4gICAgICAgIG5hbWU6IHBoYXNlLm5hbWUsXG4gICAgICAgIHN0ZXBzOiBwaGFzZS5zdGVwcy5tYXAoKHN0ZXApID0+ICh7XG4gICAgICAgICAgbmFtZTogc3RlcC5uYW1lLFxuICAgICAgICAgIGFjdGlvbjogc3RlcC5hY3Rpb24sXG4gICAgICAgICAgLi4uKHN0ZXAub25GYWlsdXJlICE9PSB1bmRlZmluZWQgJiYgeyBvbkZhaWx1cmU6IHN0ZXAub25GYWlsdXJlIH0pLFxuICAgICAgICAgIC4uLihzdGVwLnRpbWVvdXQgIT09IHVuZGVmaW5lZCAmJiB7IHRpbWVvdXRTZWNvbmRzOiBzdGVwLnRpbWVvdXQudG9TZWNvbmRzKCkgfSksXG4gICAgICAgICAgLi4uKHN0ZXAuaWYgIT09IHVuZGVmaW5lZCAmJiB7IGlmOiBzdGVwLmlmLmlmQ29uZGl0aW9uIH0pLFxuICAgICAgICAgIC4uLihzdGVwLmxvb3AgIT09IHVuZGVmaW5lZCAmJiB7IGxvb3A6IHN0ZXAubG9vcCB9KSxcbiAgICAgICAgICBpbnB1dHM6IHN0ZXAuaW5wdXRzLmlucHV0cyxcbiAgICAgICAgfSkpLFxuICAgICAgfSkpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIEpTT04vWUFNTCBzdHJpbmcgYXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIEFuIGlubGluZSBKU09OL1lBTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUlubGluZShkYXRhOiBzdHJpbmcpOiBDb21wb25lbnREYXRhIHtcbiAgICByZXR1cm4gbmV3IElubGluZUNvbXBvbmVudERhdGEoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIHZhbHVlLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uLlxuICAgKiAtIEZvciBpbmxpbmUgY29tcG9uZW50cywgZGF0YSBpcyB0aGUgY29tcG9uZW50IHRleHRcbiAgICogLSBGb3IgUzMtYmFja2VkIGNvbXBvbmVudHMsIHVyaSBpcyB0aGUgUzMgVVJMXG4gICAqL1xuICBhYnN0cmFjdCByZW5kZXIoKTogQ29tcG9uZW50RGF0YUNvbmZpZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIFMzLWJhc2VkIGNvbXBvbmVudCBkYXRhIHJlZmVyZW5jZXMsIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBwZXJtaXNzaW9uIGdyYW50IG1ldGhvZHMgb24gdGhlIFMzIG9iamVjdFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUzNDb21wb25lbnREYXRhIGV4dGVuZHMgQ29tcG9uZW50RGF0YSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBrZXk6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmJ1Y2tldCA9IGJ1Y2tldDtcbiAgICB0aGlzLmtleSA9IGtleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEgdGV4dCwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpOiBDb21wb25lbnREYXRhQ29uZmlnIHtcbiAgICByZXR1cm4geyB1cmk6IHRoaXMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KHRoaXMua2V5KSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHB1dCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudCBkYXRhIGluIFMzXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRQdXQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFB1dChncmFudGVlLCB0aGlzLmtleSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudCBkYXRhIGluIFMzXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxufVxuXG5jbGFzcyBJbmxpbmVDb21wb25lbnREYXRhIGV4dGVuZHMgQ29tcG9uZW50RGF0YSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSB0ZXh0LCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IENvbXBvbmVudERhdGFDb25maWcge1xuICAgIHJldHVybiB7IGRhdGE6IHRoaXMuZGF0YSB9O1xuICB9XG59XG5cbmNsYXNzIFMzQ29tcG9uZW50RGF0YUZyb21CdWNrZXRLZXkgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKGJ1Y2tldCwga2V5KTtcbiAgfVxufVxuXG5jbGFzcyBTM0NvbXBvbmVudERhdGFGcm9tQXNzZXQgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYXNzZXQ6IHMzYXNzZXRzLkFzc2V0KSB7XG4gICAgc3VwZXIoYXNzZXQuYnVja2V0LCBhc3NldC5zM09iamVjdEtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50c1xuICovXG5leHBvcnQgY2xhc3MgQXdzTWFya2V0cGxhY2VDb21wb25lbnQge1xuICAvKipcbiAgICogSW1wb3J0cyBhbiBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50IGZyb20gaXRzIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIEFXUy1tYW5hZ2VkIGNvbXBvbmVudCBhdHRyaWJ1dGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBBd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMsXG4gICk6IElDb21wb25lbnQge1xuICAgIHJldHVybiBDb21wb25lbnQuZnJvbUNvbXBvbmVudEFybihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgICBhY2NvdW50OiAnYXdzLW1hcmtldHBsYWNlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdjb21wb25lbnQnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAke2F0dHJzLmNvbXBvbmVudE5hbWV9LSR7YXR0cnMubWFya2V0cGxhY2VQcm9kdWN0SWR9LyR7YXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTn1gLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbmV3IG9yIGltcG9ydGVkIENvbXBvbmVudFxuICovXG5hYnN0cmFjdCBjbGFzcyBDb21wb25lbnRCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbXBvbmVudEFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5jb21wb25lbnRBcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2ltYWdlYnVpbGRlcjpHZXRDb21wb25lbnQnKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29tcG9uZW50LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL21hbmFnZS1jb21wb25lbnRzLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1pbWFnZWJ1aWxkZXItYWxwaGEuQ29tcG9uZW50JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBnaXZlbiBpdHMgQVJOLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50QXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbXBvbmVudEFybjogc3RyaW5nKTogSUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGNvbXBvbmVudEFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgY29tcG9uZW50IGdpdmVuIGl0cyBuYW1lLiBUaGUgcHJvdmlkZWQgbmFtZSBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsXG4gICAqIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudE5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29tcG9uZW50TmFtZTogc3RyaW5nKTogSUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGNvbXBvbmVudE5hbWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBieSBwcm92aWRpbmcgaXRzIGF0dHJpYnV0ZXMuIElmIHRoZSBjb21wb25lbnQgbmFtZSBpcyBwcm92aWRlZCBhcyBhbiBhdHRyaWJ1dGUsIGl0XG4gICAqIG11c3QgYmUgbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlcyBhbmQgdW5kZXJzY29yZXNcbiAgICogd2l0aCBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50QXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogQ29tcG9uZW50QXR0cmlidXRlcyk6IElDb21wb25lbnQge1xuICAgIGlmIChhdHRycy5jb21wb25lbnRBcm4gJiYgKGF0dHJzLmNvbXBvbmVudE5hbWUgfHwgYXR0cnMuY29tcG9uZW50VmVyc2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAnQ29uZmxpY3RpbmdDb21wb25lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2EgY29tcG9uZW50TmFtZSBvciBjb21wb25lbnRWZXJzaW9uIGNhbm5vdCBiZSBwcm92aWRlZCB3aGVuIGEgY29tcG9uZW50QXJuIGlzIHByb3ZpZGVkJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghYXR0cnMuY29tcG9uZW50QXJuICYmICFhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignTWlzc2luZ0NvbXBvbmVudElkZW50aWZpZXInLCAnZWl0aGVyIGNvbXBvbmVudEFybiBvciBjb21wb25lbnROYW1lIGlzIHJlcXVpcmVkJywgc2NvcGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudEFybiA9XG4gICAgICBhdHRycy5jb21wb25lbnRBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnY29tcG9uZW50JyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgJHthdHRycy5jb21wb25lbnROYW1lfS8ke2F0dHJzLmNvbXBvbmVudFZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT059YCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2NvbXBvbmVudE5hbWUsIGNvbXBvbmVudFZlcnNpb25dID0gKCgpID0+IHtcbiAgICAgIGlmIChhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBbYXR0cnMuY29tcG9uZW50TmFtZSwgYXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTl07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihcbiAgICAgICAgY29tcG9uZW50QXJuLFxuICAgICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uU3BsaXQgPSBjZGsuRm4uc3BsaXQoJy8nLCBjb21wb25lbnROYW1lVmVyc2lvbik7XG4gICAgICByZXR1cm4gW2Nkay5Gbi5zZWxlY3QoMCwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCksIGNkay5Gbi5zZWxlY3QoMSwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCldO1xuICAgIH0pKCk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRBcm4gPSBjb21wb25lbnRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbiA9IGNvbXBvbmVudFZlcnNpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgQ29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0NvbXBvbmVudCh4OiBhbnkpOiB4IGlzIENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIENPTVBPTkVOVF9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZW5jcnlwdGVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGVkOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgcHJpdmF0ZSByZXNvdXJjZTogQ2ZuQ29tcG9uZW50O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTpcbiAgICAgICAgcHJvcHMuY29tcG9uZW50TmFtZSA/P1xuICAgICAgICBjZGsuTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICBjZGsuTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgICAgICAgICAgIHNlcGFyYXRvcjogJy0nLFxuICAgICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICctJyxcbiAgICAgICAgICAgIH0pLnRvTG93ZXJDYXNlKCksIC8vIEVuZm9yY2UgbG93ZXJjYXNlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgZmFsbGJhY2tcbiAgICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgQ09NUE9ORU5UX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnROYW1lKCk7XG5cbiAgICBwcm9wcy5zdXBwb3J0ZWRPc1ZlcnNpb25zPy5mb3JFYWNoKChvc1ZlcnNpb24pID0+IHtcbiAgICAgIGlmIChvc1ZlcnNpb24ucGxhdGZvcm0gIT09IHByb3BzLnBsYXRmb3JtKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICdJbmNvbXBhdGlibGVPc1ZlcnNpb24nLFxuICAgICAgICAgIGBvcyB2ZXJzaW9uICR7b3NWZXJzaW9uLm9zVmVyc2lvbn0gaXMgbm90IGNvbXBhdGlibGUgd2l0aCBwbGF0Zm9ybSAke3Byb3BzLnBsYXRmb3JtfWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFZlcnNpb24gPSBwcm9wcy5jb21wb25lbnRWZXJzaW9uID8/ICcxLjAuMCc7XG4gICAgY29uc3Qgc3VwcG9ydGVkT3NWZXJzaW9ucyA9IHByb3BzLnN1cHBvcnRlZE9zVmVyc2lvbnM/LmZpbHRlcigob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uICE9PSB1bmRlZmluZWQpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Db21wb25lbnQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICB2ZXJzaW9uOiBjb21wb25lbnRWZXJzaW9uLFxuICAgICAgY2hhbmdlRGVzY3JpcHRpb246IHByb3BzLmNoYW5nZURlc2NyaXB0aW9uLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGxhdGZvcm06IHByb3BzLnBsYXRmb3JtLFxuICAgICAga21zS2V5SWQ6IHByb3BzLmttc0tleT8ua2V5QXJuLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIC4uLihzdXBwb3J0ZWRPc1ZlcnNpb25zPy5sZW5ndGggJiYge1xuICAgICAgICBzdXBwb3J0ZWRPc1ZlcnNpb25zOiBzdXBwb3J0ZWRPc1ZlcnNpb25zLm1hcCgob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uISksXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLmRhdGEucmVuZGVyKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbXBvbmVudFZlcnNpb24gPSBjb21wb25lbnRWZXJzaW9uO1xuICAgIHRoaXMuZW5jcnlwdGVkID0gdHJ1ZTsgLy8gQ29tcG9uZW50cyBhcmUgYWx3YXlzIGVuY3J5cHRlZFxuICAgIHRoaXMua21zS2V5ID0gcHJvcHMua21zS2V5O1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZSh0aGlzLnJlc291cmNlLmF0dHJOYW1lKTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGNvbXBvbmVudEFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2NvbXBvbmVudCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGAke3RoaXMucGh5c2ljYWxOYW1lfS8ke3RoaXMuY29tcG9uZW50VmVyc2lvbn1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlLmF0dHJUeXBlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbXBvbmVudE5hbWUoKSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQodGhpcy5waHlzaWNhbE5hbWUpKSB7XG4gICAgICByZXR1cm47IC8vIENhbm5vdCB2YWxpZGF0ZSB1bnJlc29sdmVkIHRva2VucywgZ2l2ZW4gdGhlaXIgYWN0dWFsIHZhbHVlIGlzIHJlbmRlcmVkIGF0IGRlcGxveW1lbnQgdGltZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAnQ29tcG9uZW50TmFtZVRvb0xvbmcnLFxuICAgICAgICBgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuIDEyOCBjaGFyYWN0ZXJzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ0NvbXBvbmVudE5hbWVDb250YWluc1NwYWNlcycsIGB0aGUgY29tcG9uZW50TmFtZSBjYW5ub3QgY29udGFpbiBzcGFjZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignQ29tcG9uZW50TmFtZUNvbnRhaW5zVW5kZXJzY29yZXMnLCBgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ0NvbXBvbmVudE5hbWVOb3RMb3dlcmNhc2UnLCBgdGhlIGNvbXBvbmVudE5hbWUgbXVzdCBiZSBsb3dlcmNhc2UsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cbiAgfVxufVxuIl19
721
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsbUVBQTREO0FBRzVELHNEQUFzRDtBQUN0RCw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUUxRSw2QkFBNkI7QUFHN0IsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7QUFFakYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBK1QvQjs7R0FFRztBQUNILE1BQWEsc0JBQXNCOztJQUNqQzs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDcEQ7SUFFRDs7T0FFRztJQUNhLElBQUksQ0FBUztJQUU3Qjs7T0FFRztJQUNhLEtBQUssQ0FBTTtJQUUzQixZQUFzQixJQUFZLEVBQUUsS0FBVTtRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjs7QUF2Qkgsd0RBd0JDO0FBMEJEOztHQUVHO0FBQ0gsSUFBWSxlQXdKWDtBQXhKRCxXQUFZLGVBQWU7SUFDekI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7O09BR0c7SUFDSCxvQ0FBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILHlDQUFzQixDQUFBO0lBRXRCOztPQUVHO0lBQ0gsNkNBQTBCLENBQUE7SUFFMUI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7T0FFRztJQUNILGlEQUE4QixDQUFBO0lBRTlCOztPQUVHO0lBQ0gsbURBQWdDLENBQUE7SUFFaEM7O09BRUc7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O0FBQVQsOEJBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ2ZuQ29tcG9uZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWltYWdlYnVpbGRlcic7XG5pbXBvcnQgdHlwZSAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB0eXBlICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHMzYXNzZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgbWVtb2l6ZWRHZXR0ZXIsIGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAneWFtbCc7XG5pbXBvcnQgdHlwZSB7IE9TVmVyc2lvbiwgUGxhdGZvcm0gfSBmcm9tICcuL29zLXZlcnNpb24nO1xuXG5jb25zdCBDT01QT05FTlRfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5Db21wb25lbnQnKTtcblxuY29uc3QgTEFURVNUX1ZFUlNJT04gPSAneC54LngnO1xuXG4vKipcbiAqIEFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29tcG9uZW50IGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgQ29tcG9uZW50IHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50UHJvcHMge1xuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBkb2N1bWVudCBjb250ZW50IHRoYXQgZGVmaW5lcyB0aGUgYnVpbGQsIHZhbGlkYXRpb24sIG9yIHRlc3Qgc3RlcHMgdG8gYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBpbWFnZVxuICAgKiBidWlsZGluZyBwcm9jZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YTogQ29tcG9uZW50RGF0YTtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gcGxhdGZvcm0gb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBQbGF0Zm9ybTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5hbWUgaXMgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAxLjAuMFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhbmdlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQuIERlc2NyaWJlcyB3aGF0IGNoYW5nZSBoYXMgYmVlbiBtYWRlIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LCBvclxuICAgKiB3aGF0IG1ha2VzIHRoaXMgdmVyc2lvbiBkaWZmZXJlbnQgZnJvbSBvdGhlciB2ZXJzaW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGlzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbiBJbWFnZSBCdWlsZGVyIG93bmVkIGtleSB3aWxsIGJlIHVzZWQgdG8gZW5jcnlwdCB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb25zIHN1cHBvcnRlZCBieSB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBzdXBwb3J0ZWRPc1ZlcnNpb25zPzogT1NWZXJzaW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYW4gRUMyIEltYWdlIEJ1aWxkZXIgY29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgQVJOIGlzIGF1dG9tYXRpY2FsbHkgY29uc3RydWN0ZWQgaWYgYSBjb21wb25lbnROYW1lIGlzIHByb3ZpZGVkLCBvdGhlcndpc2UgYSBjb21wb25lbnRBcm4gaXNcbiAgICogICAgICAgICAgICByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50QXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIG5hbWUgaXMgYXV0b21hdGljYWxseSBjb25zdHJ1Y3RlZCBpZiBhIGNvbXBvbmVudEFybiBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIGEgY29tcG9uZW50TmFtZSBpc1xuICAgKiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnQsIHgueC54XG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFuIEVDMiBJbWFnZSBCdWlsZGVyIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnQuIFRoaXMgbmFtZSBzaG91bGQgZXhjbHVkZSB0aGUgbWFya2V0cGxhY2UgcHJvZHVjdCBJRCBmcm9tIGl0XG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXJrZXRwbGFjZSBwcm9kdWN0IElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBtYXJrZXRwbGFjZVByb2R1Y3RJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgQVdTIE1hcmtldHBsYWNlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LCB4LngueFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIGFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbXBvbmVudCBEb2N1bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50IHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlbWEgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBzY2hlbWFWZXJzaW9uOiBDb21wb25lbnRTY2hlbWFWZXJzaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2VzIHdoaWNoIGRlZmluZSB0aGUgZ3JvdXBpbmcgb2Ygc3RlcHMgdG8gcnVuIGluIHRoZSBidWlsZCBhbmQgdGVzdCB3b3JrZmxvd3Mgb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGhhc2VzOiBDb21wb25lbnREb2N1bWVudFBoYXNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGRvY3VtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uc3RhbnRzIHRvIGRlZmluZSBpbiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RhbnRzPzogeyBbY29uc3RhbnROYW1lOiBzdHJpbmddOiBDb21wb25lbnRDb25zdGFudFZhbHVlIH07XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXJzIHRvIGRlZmluZSBpbiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IHsgW3BhcmFtZXRlck5hbWU6IHN0cmluZ106IENvbXBvbmVudERvY3VtZW50UGFyYW1ldGVyRGVmaW5pdGlvbiB9O1xufVxuXG4vKipcbiAqIFRoZSBwaGFzZSB0byBydW4gaW4gYSBzcGVjaWZpYyB3b3JrZmxvdyBpbiBhbiBpbWFnZSBidWlsZCwgd2hpY2ggZGVmaW5lIHRoZSBzdGVwcyB0byBleGVjdXRlIHRvIGN1c3RvbWl6ZSBvciB0ZXN0XG4gKiB0aGUgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRQaGFzZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGhhc2VcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IENvbXBvbmVudFBoYXNlTmFtZTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygc3RlcHMgdG8gZXhlY3V0ZSB0byBtb2RpZnkgb3IgdGVzdCB0aGUgYnVpbGQvdGVzdCBpbnN0YW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RlcHM6IENvbXBvbmVudERvY3VtZW50U3RlcFtdO1xufVxuXG4vKipcbiAqIFRoZSBzdGVwIHRvIHJ1biBpbiBhIHNwZWNpZmljIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZCwgd2hpY2ggZGVmaW5lcyB0aGUgc3RlcCB0byBleGVjdXRlIHRvIGN1c3RvbWl6ZSBvciB0ZXN0IHRoZVxuICogaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRTdGVwIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGVwXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhY3Rpb24gdG8gcGVyZm9ybSBpbiB0aGUgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uOiBDb21wb25lbnRBY3Rpb247XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHBhcmFtZXRlcnMgcmVxdWlyZWQgYnkgdGhlIGFjdGlvbiB0byBydW4gdGhlIHN0ZXBcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvdG9lLWFjdGlvbi1tb2R1bGVzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGlucHV0czogQ29tcG9uZW50U3RlcElucHV0cztcblxuICAvKipcbiAgICogVGhlIGNvbmRpdGlvbiB0byBhcHBseSB0byB0aGUgc3RlcC4gSWYgdGhlIGNvbmRpdGlvbiBpcyBmYWxzZSwgdGhlbiB0aGUgc3RlcCBpcyBza2lwcGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY29uZGl0aW9uIGlzIGFwcGxpZWQgdG8gdGhlIHN0ZXAgYW5kIGl0IGdldHMgZXhlY3V0ZWRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvdG9lLWNvbmRpdGlvbmFsLWNvbnN0cnVjdHMuaHRtbFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS90b2UtY29tcGFyaXNvbi1vcGVyYXRvcnMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaWY/OiBDb21wb25lbnRTdGVwSWZDb25kaXRpb247XG5cbiAgLyoqXG4gICAqIEEgbG9vcGluZyBjb25zdHJ1Y3QgZGVmaW5pbmcgYSByZXBlYXRlZCBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9vcD86IENvbXBvbmVudERvY3VtZW50TG9vcDtcblxuICAvKipcbiAgICogVGhlIHRpbWVvdXQgb2YgdGhlIHN0ZXBcbiAgICpcbiAgICogQGRlZmF1bHQgLSAxMjAgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoYXQgdGhlIHN0ZXAgc2hvdWxkIGRvIGluIGNhc2Ugb2YgZmFpbHVyZVxuICAgKlxuICAgKiBAZGVmYXVsdCBDb21wb25lbnRPbkZhaWx1cmUuQUJPUlRcbiAgICovXG4gIHJlYWRvbmx5IG9uRmFpbHVyZT86IENvbXBvbmVudE9uRmFpbHVyZTtcbn1cblxuLyoqXG4gKiBUaGUgbG9vcGluZyBjb25zdHJ1Y3Qgb2YgYSBjb21wb25lbnQgZGVmaW5lcyBhIHJlcGVhdGVkIHNlcXVlbmNlIG9mIGluc3RydWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50TG9vcCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbG9vcCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IGxvb3BcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3IgbG9vcCBpdGVyYXRlcyBvbiBhIHJhbmdlIG9mIGludGVnZXJzIHNwZWNpZmllZCB3aXRoaW4gYSBib3VuZGFyeSBvdXRsaW5lZCBieSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGVcbiAgICogdmFyaWFibGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBgZm9yRWFjaGAgaXMgcHJvdmlkZWQuIG90aGVyd2lzZSwgYGZvcmAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSBmb3I/OiBDb21wb25lbnREb2N1bWVudEZvckxvb3A7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JFYWNoIGxvb3AgaXRlcmF0ZXMgb24gYW4gZXhwbGljaXQgbGlzdCBvZiB2YWx1ZXMsIHdoaWNoIGNhbiBiZSBzdHJpbmdzIGFuZCBjaGFpbmVkIGV4cHJlc3Npb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBgZm9yYCBpcyBwcm92aWRlZC4gb3RoZXJ3aXNlLCBgZm9yRWFjaGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSBmb3JFYWNoPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIGZvciBsb29wIGl0ZXJhdGVzIG9uIGEgcmFuZ2Ugb2YgaW50ZWdlcnMgc3BlY2lmaWVkIHdpdGhpbiBhIGJvdW5kYXJ5IG91dGxpbmVkIGJ5IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZVxuICogdmFyaWFibGVzLiBUaGUgaXRlcmF0aW5nIHZhbHVlcyBhcmUgaW4gdGhlIHNldCBbc3RhcnQsIGVuZF0gYW5kIGluY2x1ZGVzIGJvdW5kYXJ5IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudEZvckxvb3Age1xuICAvKipcbiAgICogU3RhcnRpbmcgdmFsdWUgb2YgaXRlcmF0aW9uLiBEb2VzIG5vdCBhY2NlcHQgY2hhaW5pbmcgZXhwcmVzc2lvbnMuXG4gICAqL1xuICByZWFkb25seSBzdGFydDogbnVtYmVyO1xuICAvKipcbiAgICogRW5kaW5nIHZhbHVlIG9mIGl0ZXJhdGlvbi4gRG9lcyBub3QgYWNjZXB0IGNoYWluaW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kOiBudW1iZXI7XG4gIC8qKlxuICAgKiBEaWZmZXJlbmNlIGJ5IHdoaWNoIGFuIGl0ZXJhdGluZyB2YWx1ZSBpcyB1cGRhdGVkIHRocm91Z2ggYWRkaXRpb24uIEl0IG11c3QgYmUgYSBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBub24temVyb1xuICAgKiB2YWx1ZS4gRG9lcyBub3QgYWNjZXB0IGNoYWluaW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlQnk6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYSBjb25zdGFudCBpbiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc3RyaW5nIHR5cGUgY29uc3RhbnQgaW4gYSBjb21wb25lbnQgZG9jdW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRDb25zdGFudFZhbHVlKCdzdHJpbmcnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRhdGEgdHlwZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogYW55O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBwYXJhbWV0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudFBhcmFtZXRlckRlZmluaXRpb24ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlclxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogQ29tcG9uZW50UGFyYW1ldGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUsIGluZGljYXRpbmcgdGhlIHBhcmFtZXRlciBpcyByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdD86IGFueTtcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGFjdGlvbiBmb3IgYSBzdGVwIHdpdGhpbiB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudEFjdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgQXBwZW5kRmlsZSBhY3Rpb24gYWRkcyB0aGUgcHJvdmlkZWQgY29udGVudCB0byB0aGUgcHJlLWV4aXN0aW5nIGNvbnRlbnQgb2YgYSBmaWxlXG4gICAqL1xuICBBUFBFTkRfRklMRSA9ICdBcHBlbmRGaWxlJyxcblxuICAvKipcbiAgICogVGhlIEFzc2VydCBhY3Rpb24gcGVyZm9ybXMgdmFsdWUgd2l0aCBjb21wYXJpc29uL2xvZ2ljIG9wZXJhdG9ycywgYW5kIHN1Y2NlZWRzL2ZhaWxzIHRoZSBzdGVwIGJhc2VkIG9uIHRoZSBvdXRjb21lXG4gICAqIG9mIHRoZSBhc3NlcnRpb25cbiAgICovXG4gIEFTU0VSVCA9ICdBc3NlcnQnLFxuXG4gIC8qKlxuICAgKiBUaGUgQ29weUZpbGUgYWN0aW9uIGNvcGllcyBmaWxlcyBmcm9tIGEgc291cmNlIGZpbGUgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgQ09QWV9GSUxFID0gJ0NvcHlGaWxlJyxcblxuICAvKipcbiAgICogVGhlIENvcHlGb2xkZXIgYWN0aW9uIGNvcGllcyBmb2xkZXJzIGZyb20gYSBzb3VyY2UgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgQ09QWV9GT0xERVIgPSAnQ29weUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSBDcmVhdGVGaWxlIGFjdGlvbiBjcmVhdGVzIGEgZmlsZSBpbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIENSRUFURV9GSUxFID0gJ0NyZWF0ZUZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgQ3JlYXRlRm9sZGVyIGFjdGlvbiBjcmVhdGVzIGEgZm9sZGVyIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgQ1JFQVRFX0ZPTERFUiA9ICdDcmVhdGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgQ3JlYXRlU3ltbGluayBhY3Rpb24gY3JlYXRlcyBzeW1ib2xpYyBsaW5rcyBmcm9tIGEgZ2l2ZW4gcGF0aCB0byBhIHRhcmdldFxuICAgKi9cbiAgQ1JFQVRFX1NZTUxJTksgPSAnQ3JlYXRlU3ltbGluaycsXG5cbiAgLyoqXG4gICAqIFRoZSBEZWxldGVGaWxlIGFjdGlvbiBkZWxldGVzIGZpbGUocykgaW4gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuICBERUxFVEVfRklMRSA9ICdEZWxldGVGaWxlJyxcblxuICAvKipcbiAgICogVGhlIERlbGV0ZUZvbGRlciBhY3Rpb24gZGVsZXRlcyBmb2xkZXJzIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgREVMRVRFX0ZPTERFUiA9ICdEZWxldGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZUJhc2ggYWN0aW9uIHJ1bnMgYmFzaCBzY3JpcHRzIHdpdGggaW5saW5lIGJhc2ggY29tbWFuZHNcbiAgICovXG4gIEVYRUNVVEVfQkFTSCA9ICdFeGVjdXRlQmFzaCcsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlQmluYXJ5IGFjdGlvbiBydW5zIGEgcHJvdmlkZWQgYmluYXJ5IGV4ZWN1dGFibGVcbiAgICovXG4gIEVYRUNVVEVfQklOQVJZID0gJ0V4ZWN1dGVCaW5hcnknLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZURvY3VtZW50IGFjdGlvbiBhbGxvd3MgcnVubmluZyBvdGhlciBjb21wb25lbnQgZG9jdW1lbnRzIGZyb20gd2l0aGluIGEgZ2l2ZW4gY29tcG9uZW50XG4gICAqL1xuICBFWEVDVVRFX0RPQ1VNRU5UID0gJ0V4ZWN1dGVEb2N1bWVudCcsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlUG93ZXJzaGVsbCBhY3Rpb24gcnVucyBQb3dlclNoZWxsIHNjcmlwdHMgd2l0aCBpbmxpbmUgUG93ZXJTaGVsbCBjb21tYW5kc1xuICAgKi9cbiAgRVhFQ1VURV9QT1dFUlNIRUxMID0gJ0V4ZWN1dGVQb3dlclNoZWxsJyxcblxuICAvKipcbiAgICogVGhlIEluc3RhbGxNU0kgYWN0aW9uIHJ1bnMgYSBXaW5kb3dzIGFwcGxpY2F0aW9uIHdpdGggdGhlIHByb3ZpZGVkIE1TSSBmaWxlXG4gICAqL1xuICBJTlNUQUxMX01TSSA9ICdJbnN0YWxsTVNJJyxcblxuICAvKipcbiAgICogVGhlIExpc3RGaWxlcyBhY3Rpb24gbGlzdHMgZmlsZXMgaW4gdGhlIHByb3ZpZGVkIGZvbGRlclxuICAgKi9cbiAgTElTVF9GSUxFUyA9ICdMaXN0RmlsZXMnLFxuXG4gIC8qKlxuICAgKiBUaGUgTW92ZUZpbGUgYWN0aW9uIG1vdmVzIGZpbGVzIGZyb20gYSBzb3VyY2UgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgTU9WRV9GSUxFID0gJ01vdmVGaWxlJyxcblxuICAvKipcbiAgICogVGhlIE1vdmVGb2xkZXIgYWN0aW9uIG1vdmVzIGZvbGRlcnMgZnJvbSBhIHNvdXJjZSB0byBhIGRlc3RpbmF0aW9uXG4gICAqL1xuICBNT1ZFX0ZPTERFUiA9ICdNb3ZlRm9sZGVyJyxcblxuICAvKipcbiAgICogVGhlIFJlYWRGaWxlIGFjdGlvbiByZWFkcyB0aGUgY29udGVudCBvZiBhIHRleHQgZmlsZVxuICAgKi9cbiAgUkVBRF9GSUxFID0gJ1JlYWRGaWxlJyxcblxuICAvKipcbiAgICogVGhlIFJlYm9vdCBhY3Rpb24gcmVib290cyB0aGUgaW5zdGFuY2VcbiAgICovXG4gIFJFQk9PVCA9ICdSZWJvb3QnLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0RmlsZUVuY29kaW5nIGFjdGlvbiBtb2RpZmllcyB0aGUgZW5jb2RpbmcgcHJvcGVydHkgb2YgYW4gZXhpc3RpbmcgZmlsZVxuICAgKi9cbiAgU0VUX0ZJTEVfRU5DT0RJTkcgPSAnU2V0RmlsZUVuY29kaW5nJyxcblxuICAvKipcbiAgICogVGhlIFNldEZpbGVPd25lciBhY3Rpb24gbW9kaWZpZXMgdGhlIG93bmVyIGFuZCBncm91cCBvd25lcnNoaXAgcHJvcGVydGllcyBvZiBhbiBleGlzdGluZyBmaWxlXG4gICAqL1xuICBTRVRfRklMRV9PV05FUiA9ICdTZXRGaWxlT3duZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0Rm9sZGVyT3duZXIgYWN0aW9uIHJlY3Vyc2l2ZWx5IG1vZGlmaWVzIHRoZSBvd25lciBhbmQgZ3JvdXAgb3duZXJzaGlwIHByb3BlcnRpZXMgb2YgYW4gZXhpc3RpbmcgZm9sZGVyXG4gICAqL1xuICBTRVRfRk9MREVSX09XTkVSID0gJ1NldEZvbGRlck93bmVyJyxcblxuICAvKipcbiAgICogVGhlIFNldEZpbGVQZXJtaXNzaW9ucyBhY3Rpb24gbW9kaWZpZXMgdGhlIHBlcm1pc3Npb24gb2YgYW4gZXhpc3RpbmcgZmlsZVxuICAgKi9cbiAgU0VUX0ZJTEVfUEVSTUlTU0lPTlMgPSAnU2V0RmlsZVBlcm1pc3Npb25zJyxcblxuICAvKipcbiAgICogVGhlIFNldEZvbGRlclBlcm1pc3Npb25zIGFjdGlvbiByZWN1cnNpdmVseSBtb2RpZmllcyB0aGUgcGVybWlzc2lvbnMgb2YgYW4gZXhpc3RpbmcgZm9sZGVyIGFuZCBhbGwgb2YgaXRzIHN1YmZpbGVzXG4gICAqIGFuZCBzdWJmb2xkZXJzXG4gICAqL1xuICBTRVRfRk9MREVSX1BFUk1JU1NJT05TID0gJ1NldEZvbGRlclBlcm1pc3Npb25zJyxcblxuICAvKipcbiAgICogVGhlIFNldFJlZ2lzdHJ5IGFjdGlvbiBzZXRzIHRoZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBXaW5kb3dzIHJlZ2lzdHJ5IGtleVxuICAgKi9cbiAgU0VUX1JFR0lTVFJZID0gJ1NldFJlZ2lzdHJ5JyxcblxuICAvKipcbiAgICogVGhlIFMzRG93bmxvYWQgYWN0aW9uIGRvd25sb2FkcyBhbiBBbWF6b24gUzMgb2JqZWN0L2ZvbGRlciB0byBhIGxvY2FsIGRlc3RpbmF0aW9uXG4gICAqL1xuICBTM19ET1dOTE9BRCA9ICdTM0Rvd25sb2FkJyxcblxuICAvKipcbiAgICogVGhlIFMzVXBsb2FkIGFjdGlvbiB1cGxvYWRzIGEgZmlsZSBvciBmb2xkZXIgdG8gYW4gQW1hem9uIFMzIGxvY2F0aW9uXG4gICAqL1xuICBTM19VUExPQUQgPSAnUzNVcGxvYWQnLFxuXG4gIC8qKlxuICAgKiBUaGUgVW5pbnN0YWxsTVNJIGFjdGlvbiByZW1vdmVzIGEgV2luZG93cyBhcHBsaWNhdGlvbiB1c2luZyBhbiBNU0kgZmlsZVxuICAgKi9cbiAgVU5JTlNUQUxMX01TSSA9ICdVbmluc3RhbGxNU0knLFxuXG4gIC8qKlxuICAgKiBUaGUgVXBkYXRlT1MgYWN0aW9uIGluc3RhbGxzIE9TIHVwZGF0ZXNcbiAgICovXG4gIFVQREFURV9PUyA9ICdVcGRhdGVPUycsXG5cbiAgLyoqXG4gICAqIFRoZSBXZWJEb3dubG9hZCBhY3Rpb24gZG93bmxvYWRzIGZpbGVzIGZyb20gYSBVUkwgdG8gYSBsb2NhbCBkZXN0aW5hdGlvblxuICAgKi9cbiAgV0VCX0RPV05MT0FEID0gJ1dlYkRvd25sb2FkJyxcbn1cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hhdCB0aGUgc3RlcCBzaG91bGQgZG8gaW4gY2FzZSBvZiBmYWlsdXJlXG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudE9uRmFpbHVyZSB7XG4gIC8qKlxuICAgKiBGYWlscyB0aGUgc3RlcCBhbmQgZG9jdW1lbnQgZXhlY3V0aW9uXG4gICAqL1xuICBBQk9SVCA9ICdBYm9ydCcsXG5cbiAgLyoqXG4gICAqIEZhaWxzIHRoZSBzdGVwIGFuZCBwcm9jZWVkcyB0byBleGVjdXRlIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIGRvY3VtZW50XG4gICAqL1xuICBDT05USU5VRSA9ICdDb250aW51ZScsXG5cbiAgLyoqXG4gICAqIElnbm9yZXMgdGhlIHN0ZXAgYW5kIHByb2NlZWRzIHRvIGV4ZWN1dGUgdGhlIG5leHQgc3RlcCBpbiB0aGUgZG9jdW1lbnRcbiAgICovXG4gIElHTk9SRSA9ICdJZ25vcmUnLFxufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXIgdHlwZSBpbiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRQYXJhbWV0ZXJUeXBlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgcGFyYW1ldGVyIHZhbHVlIGlzIGEgc3RyaW5nXG4gICAqL1xuICBTVFJJTkcgPSAnc3RyaW5nJyxcbn1cblxuLyoqXG4gKiBUaGUgcGhhc2VzIG9mIGEgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudFBoYXNlTmFtZSB7XG4gIC8qKlxuICAgKiBCdWlsZCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LiBUaGlzIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIEJVSUxESU5HIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZC5cbiAgICovXG4gIEJVSUxEID0gJ2J1aWxkJyxcblxuICAvKipcbiAgICogVGVzdCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LCBleGVjdXRlZCBkaXJlY3RseSBvbiB0aGUgaW5zdGFuY2Ugd2hpY2ggaXMgdXNlZCB0byBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlLiBUaGlzXG4gICAqIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIFRFU1RJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgQ09OVEFJTkVSX0hPU1RfVEVTVCA9ICdjb250YWluZXItaG9zdC10ZXN0JyxcblxuICAvKipcbiAgICogVGVzdCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LiBUaGlzIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIFRFU1RJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgVEVTVCA9ICd0ZXN0JyxcblxuICAvKipcbiAgICogVmFsaWRhdGUgcGhhc2Ugb2YgdGhlIGNvbXBvbmVudC4gVGhpcyBwaGFzZSBpcyBydW4gZHVyaW5nIHRoZSBCVUlMRElORyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQsIGFmdGVyIHRoZSBidWlsZFxuICAgKiBzdGVwIG9mIHRoZSBjb21wb25lbnQgaXMgZXhlY3V0ZWQuXG4gICAqL1xuICBWQUxJREFURSA9ICd2YWxpZGF0ZScsXG59XG5cbi8qKlxuICogVGhlIHNjaGVtYSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50U2NoZW1hVmVyc2lvbiB7XG4gIC8qKlxuICAgKiBTY2hlbWEgdmVyc2lvbiAxLjAgZm9yIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAgICovXG4gIFYxXzAgPSAnMS4wJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBpbnB1dHMgZm9yIGEgc3RlcCBpbiB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRTdGVwSW5wdXRzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGlucHV0IHZhbHVlIGZyb20gYW4gb2JqZWN0LCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dHNPYmplY3QgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnB1dCB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChpbnB1dHNPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBDb21wb25lbnRTdGVwSW5wdXRzIHtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudFN0ZXBJbnB1dHMoaW5wdXRzT2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBpbnB1dCB2YWx1ZSBmcm9tIGEgbGlzdCBvZiBpbnB1dCBvYmplY3RzLCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dHNPYmplY3RMaXN0IFRoZSBsaXN0IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgaW5wdXQgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21MaXN0KGlucHV0c09iamVjdExpc3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSk6IENvbXBvbmVudFN0ZXBJbnB1dHMge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50U3RlcElucHV0cyhpbnB1dHNPYmplY3RMaXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgaW5wdXQgdmFsdWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnB1dHM6IGFueTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoaW5wdXQ6IGFueSkge1xuICAgIHRoaXMuaW5wdXRzID0gaW5wdXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGBpZmAgY29uZGl0aW9uIGluIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBvbmVudFN0ZXBJZkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBgaWZgIHZhbHVlIGZyb20gYW4gb2JqZWN0LCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpZk9iamVjdCBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBpZmAgY29uZGl0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PYmplY3QoaWZPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBDb21wb25lbnRTdGVwSWZDb25kaXRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50U3RlcElmQ29uZGl0aW9uKGlmT2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgaW5wdXQgdmFsdWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpZkNvbmRpdGlvbjogYW55O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihpZkNvbmRpdGlvbjogYW55KSB7XG4gICAgdGhpcy5pZkNvbmRpdGlvbiA9IGlmQ29uZGl0aW9uO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIHZhbHVlLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uLlxuICogLSBGb3IgaW5saW5lIGNvbXBvbmVudHMsIGRhdGEgaXMgdGhlIGNvbXBvbmVudCB0ZXh0XG4gKiAtIEZvciBTMy1iYWNrZWQgY29tcG9uZW50cywgdXJpIGlzIHRoZSBTMyBVUkxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREYXRhQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgdXJpIGlzIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIFVSSSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgZGF0YSBpcyBzZXRcbiAgICovXG4gIHJlYWRvbmx5IHVyaT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHJlZmVyZW5jaW5nIGFuZCB1cGxvYWRpbmcgY29tcG9uZW50IGRhdGFcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBvbmVudERhdGEge1xuICAvKipcbiAgICogVXBsb2FkcyBjb21wb25lbnQgZGF0YSBmcm9tIGEgbG9jYWwgZmlsZSB0byBTMyB0byB1c2UgYXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIHBhdGggVGhlIGxvY2FsIHBhdGggdG8gdGhlIGNvbXBvbmVudCBkYXRhIGZpbGVcbiAgICogQHBhcmFtIG9wdGlvbnMgUzMgYXNzZXQgdXBsb2FkIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFzc2V0KFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogczNhc3NldHMuQXNzZXRPcHRpb25zID0ge30sXG4gICk6IFMzQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgYXNzZXQgPSBuZXcgczNhc3NldHMuQXNzZXQoc2NvcGUsIGlkLCB7IC4uLm9wdGlvbnMsIHBhdGggfSk7XG4gICAgcmV0dXJuIG5ldyBTM0NvbXBvbmVudERhdGFGcm9tQXNzZXQoYXNzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZXMgY29tcG9uZW50IGRhdGEgZnJvbSBhIHByZS1leGlzdGluZyBTMyBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIGJ1Y2tldCBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBjb21wb25lbnQgZGF0YSBpcyBzdG9yZWRcbiAgICogQHBhcmFtIGtleSBUaGUgUzMga2V5IG9mIHRoZSBjb21wb25lbnQgZGF0YSBmaWxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TMyhidWNrZXQ6IHMzLklCdWNrZXQsIGtleTogc3RyaW5nKTogUzNDb21wb25lbnREYXRhIHtcbiAgICByZXR1cm4gbmV3IFMzQ29tcG9uZW50RGF0YUZyb21CdWNrZXRLZXkoYnVja2V0LCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIEpTT04gb2JqZWN0IGFzIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBBbiBpbmxpbmUgSlNPTiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbk9iamVjdChkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgaW5saW5lRGF0YSA9IHlhbWwuc3RyaW5naWZ5KGRhdGEsIHsgaW5kZW50OiAyIH0pO1xuICAgIHJldHVybiBuZXcgSW5saW5lQ29tcG9uZW50RGF0YShpbmxpbmVEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VzIGFuIGlubGluZSBKU09OIG9iamVjdCBhcyB0aGUgY29tcG9uZW50IGRhdGEsIHVzaW5nIHRoZSBDb21wb25lbnREb2N1bWVudCBpbnRlcmZhY2VcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgQW4gaW5saW5lIEpTT04gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudERvY3VtZW50SnNvbk9iamVjdChkYXRhOiBDb21wb25lbnREb2N1bWVudCk6IENvbXBvbmVudERhdGEge1xuICAgIGNvbnN0IHsgbmFtZSwgZGVzY3JpcHRpb24sIHNjaGVtYVZlcnNpb24sIGNvbnN0YW50cywgcGFyYW1ldGVycywgcGhhc2VzIH0gPSBkYXRhO1xuICAgIHJldHVybiB0aGlzLmZyb21Kc29uT2JqZWN0KHtcbiAgICAgIC4uLihuYW1lICE9PSB1bmRlZmluZWQgJiYgeyBuYW1lIH0pLFxuICAgICAgLi4uKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgIHNjaGVtYVZlcnNpb246IHNjaGVtYVZlcnNpb24sXG4gICAgICAuLi4oY29uc3RhbnRzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBjb25zdGFudHM6IE9iamVjdC5lbnRyaWVzKGNvbnN0YW50cykubWFwKChbY29uc3RhbnROYW1lLCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgW2NvbnN0YW50TmFtZV06IHsgdHlwZTogdmFsdWUudHlwZSwgdmFsdWU6IHZhbHVlLnZhbHVlIH0sXG4gICAgICAgIH0pKSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIHBhcmFtZXRlcnM6IE9iamVjdC5lbnRyaWVzKHBhcmFtZXRlcnMpLm1hcCgoW3BhcmFtZXRlck5hbWUsIHZhbHVlXSkgPT4gKHsgW3BhcmFtZXRlck5hbWVdOiB2YWx1ZSB9KSksXG4gICAgICB9KSxcbiAgICAgIHBoYXNlczogcGhhc2VzLm1hcCgocGhhc2UpID0+ICh7XG4gICAgICAgIG5hbWU6IHBoYXNlLm5hbWUsXG4gICAgICAgIHN0ZXBzOiBwaGFzZS5zdGVwcy5tYXAoKHN0ZXApID0+ICh7XG4gICAgICAgICAgbmFtZTogc3RlcC5uYW1lLFxuICAgICAgICAgIGFjdGlvbjogc3RlcC5hY3Rpb24sXG4gICAgICAgICAgLi4uKHN0ZXAub25GYWlsdXJlICE9PSB1bmRlZmluZWQgJiYgeyBvbkZhaWx1cmU6IHN0ZXAub25GYWlsdXJlIH0pLFxuICAgICAgICAgIC4uLihzdGVwLnRpbWVvdXQgIT09IHVuZGVmaW5lZCAmJiB7IHRpbWVvdXRTZWNvbmRzOiBzdGVwLnRpbWVvdXQudG9TZWNvbmRzKCkgfSksXG4gICAgICAgICAgLi4uKHN0ZXAuaWYgIT09IHVuZGVmaW5lZCAmJiB7IGlmOiBzdGVwLmlmLmlmQ29uZGl0aW9uIH0pLFxuICAgICAgICAgIC4uLihzdGVwLmxvb3AgIT09IHVuZGVmaW5lZCAmJiB7IGxvb3A6IHN0ZXAubG9vcCB9KSxcbiAgICAgICAgICBpbnB1dHM6IHN0ZXAuaW5wdXRzLmlucHV0cyxcbiAgICAgICAgfSkpLFxuICAgICAgfSkpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIEpTT04vWUFNTCBzdHJpbmcgYXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIEFuIGlubGluZSBKU09OL1lBTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUlubGluZShkYXRhOiBzdHJpbmcpOiBDb21wb25lbnREYXRhIHtcbiAgICByZXR1cm4gbmV3IElubGluZUNvbXBvbmVudERhdGEoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIHZhbHVlLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uLlxuICAgKiAtIEZvciBpbmxpbmUgY29tcG9uZW50cywgZGF0YSBpcyB0aGUgY29tcG9uZW50IHRleHRcbiAgICogLSBGb3IgUzMtYmFja2VkIGNvbXBvbmVudHMsIHVyaSBpcyB0aGUgUzMgVVJMXG4gICAqL1xuICBhYnN0cmFjdCByZW5kZXIoKTogQ29tcG9uZW50RGF0YUNvbmZpZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIFMzLWJhc2VkIGNvbXBvbmVudCBkYXRhIHJlZmVyZW5jZXMsIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBwZXJtaXNzaW9uIGdyYW50IG1ldGhvZHMgb24gdGhlIFMzIG9iamVjdFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUzNDb21wb25lbnREYXRhIGV4dGVuZHMgQ29tcG9uZW50RGF0YSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBrZXk6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmJ1Y2tldCA9IGJ1Y2tldDtcbiAgICB0aGlzLmtleSA9IGtleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEgdGV4dCwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpOiBDb21wb25lbnREYXRhQ29uZmlnIHtcbiAgICByZXR1cm4geyB1cmk6IHRoaXMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KHRoaXMua2V5KSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHB1dCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudCBkYXRhIGluIFMzXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRQdXQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFB1dChncmFudGVlLCB0aGlzLmtleSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudCBkYXRhIGluIFMzXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxufVxuXG5jbGFzcyBJbmxpbmVDb21wb25lbnREYXRhIGV4dGVuZHMgQ29tcG9uZW50RGF0YSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSB0ZXh0LCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IENvbXBvbmVudERhdGFDb25maWcge1xuICAgIHJldHVybiB7IGRhdGE6IHRoaXMuZGF0YSB9O1xuICB9XG59XG5cbmNsYXNzIFMzQ29tcG9uZW50RGF0YUZyb21CdWNrZXRLZXkgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKGJ1Y2tldCwga2V5KTtcbiAgfVxufVxuXG5jbGFzcyBTM0NvbXBvbmVudERhdGFGcm9tQXNzZXQgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYXNzZXQ6IHMzYXNzZXRzLkFzc2V0KSB7XG4gICAgc3VwZXIoYXNzZXQuYnVja2V0LCBhc3NldC5zM09iamVjdEtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50c1xuICovXG5leHBvcnQgY2xhc3MgQXdzTWFya2V0cGxhY2VDb21wb25lbnQge1xuICAvKipcbiAgICogSW1wb3J0cyBhbiBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50IGZyb20gaXRzIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIEFXUy1tYW5hZ2VkIGNvbXBvbmVudCBhdHRyaWJ1dGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBBd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMsXG4gICk6IElDb21wb25lbnQge1xuICAgIHJldHVybiBDb21wb25lbnQuZnJvbUNvbXBvbmVudEFybihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgICBhY2NvdW50OiAnYXdzLW1hcmtldHBsYWNlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdjb21wb25lbnQnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAke2F0dHJzLmNvbXBvbmVudE5hbWV9LSR7YXR0cnMubWFya2V0cGxhY2VQcm9kdWN0SWR9LyR7YXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTn1gLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbmV3IG9yIGltcG9ydGVkIENvbXBvbmVudFxuICovXG5hYnN0cmFjdCBjbGFzcyBDb21wb25lbnRCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbXBvbmVudEFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5jb21wb25lbnRBcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2ltYWdlYnVpbGRlcjpHZXRDb21wb25lbnQnKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29tcG9uZW50LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL21hbmFnZS1jb21wb25lbnRzLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1pbWFnZWJ1aWxkZXItYWxwaGEuQ29tcG9uZW50JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBnaXZlbiBpdHMgQVJOLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50QXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbXBvbmVudEFybjogc3RyaW5nKTogSUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGNvbXBvbmVudEFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgY29tcG9uZW50IGdpdmVuIGl0cyBuYW1lLiBUaGUgcHJvdmlkZWQgbmFtZSBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsXG4gICAqIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudE5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29tcG9uZW50TmFtZTogc3RyaW5nKTogSUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGNvbXBvbmVudE5hbWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBieSBwcm92aWRpbmcgaXRzIGF0dHJpYnV0ZXMuIElmIHRoZSBjb21wb25lbnQgbmFtZSBpcyBwcm92aWRlZCBhcyBhbiBhdHRyaWJ1dGUsIGl0XG4gICAqIG11c3QgYmUgbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlcyBhbmQgdW5kZXJzY29yZXNcbiAgICogd2l0aCBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50QXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogQ29tcG9uZW50QXR0cmlidXRlcyk6IElDb21wb25lbnQge1xuICAgIGlmIChhdHRycy5jb21wb25lbnRBcm4gJiYgKGF0dHJzLmNvbXBvbmVudE5hbWUgfHwgYXR0cnMuY29tcG9uZW50VmVyc2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgQ29uZmxpY3RpbmdDb21wb25lbnRBdHRyaWJ1dGVzYCxcbiAgICAgICAgJ2EgY29tcG9uZW50TmFtZSBvciBjb21wb25lbnRWZXJzaW9uIGNhbm5vdCBiZSBwcm92aWRlZCB3aGVuIGEgY29tcG9uZW50QXJuIGlzIHByb3ZpZGVkJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghYXR0cnMuY29tcG9uZW50QXJuICYmICFhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgTWlzc2luZ0NvbXBvbmVudElkZW50aWZpZXJgLCAnZWl0aGVyIGNvbXBvbmVudEFybiBvciBjb21wb25lbnROYW1lIGlzIHJlcXVpcmVkJywgc2NvcGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudEFybiA9XG4gICAgICBhdHRycy5jb21wb25lbnRBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnY29tcG9uZW50JyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgJHthdHRycy5jb21wb25lbnROYW1lfS8ke2F0dHJzLmNvbXBvbmVudFZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT059YCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2NvbXBvbmVudE5hbWUsIGNvbXBvbmVudFZlcnNpb25dID0gKCgpID0+IHtcbiAgICAgIGlmIChhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBbYXR0cnMuY29tcG9uZW50TmFtZSwgYXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTl07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihcbiAgICAgICAgY29tcG9uZW50QXJuLFxuICAgICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uU3BsaXQgPSBjZGsuRm4uc3BsaXQoJy8nLCBjb21wb25lbnROYW1lVmVyc2lvbik7XG4gICAgICByZXR1cm4gW2Nkay5Gbi5zZWxlY3QoMCwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCksIGNkay5Gbi5zZWxlY3QoMSwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCldO1xuICAgIH0pKCk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRBcm4gPSBjb21wb25lbnRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbiA9IGNvbXBvbmVudFZlcnNpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgQ29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0NvbXBvbmVudCh4OiBhbnkpOiB4IGlzIENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIENPTVBPTkVOVF9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZW5jcnlwdGVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGVkOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgcHJpdmF0ZSByZXNvdXJjZTogQ2ZuQ29tcG9uZW50O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTpcbiAgICAgICAgcHJvcHMuY29tcG9uZW50TmFtZSA/P1xuICAgICAgICBjZGsuTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICBjZGsuTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgICAgICAgICAgIHNlcGFyYXRvcjogJy0nLFxuICAgICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICctJyxcbiAgICAgICAgICAgIH0pLnRvTG93ZXJDYXNlKCksIC8vIEVuZm9yY2UgbG93ZXJjYXNlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgZmFsbGJhY2tcbiAgICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgQ09NUE9ORU5UX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnROYW1lKCk7XG5cbiAgICBwcm9wcy5zdXBwb3J0ZWRPc1ZlcnNpb25zPy5mb3JFYWNoKChvc1ZlcnNpb24pID0+IHtcbiAgICAgIGlmIChvc1ZlcnNpb24ucGxhdGZvcm0gIT09IHByb3BzLnBsYXRmb3JtKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBJbmNvbXBhdGlibGVPc1ZlcnNpb25gLFxuICAgICAgICAgIGBvcyB2ZXJzaW9uICR7b3NWZXJzaW9uLm9zVmVyc2lvbn0gaXMgbm90IGNvbXBhdGlibGUgd2l0aCBwbGF0Zm9ybSAke3Byb3BzLnBsYXRmb3JtfWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFZlcnNpb24gPSBwcm9wcy5jb21wb25lbnRWZXJzaW9uID8/ICcxLjAuMCc7XG4gICAgY29uc3Qgc3VwcG9ydGVkT3NWZXJzaW9ucyA9IHByb3BzLnN1cHBvcnRlZE9zVmVyc2lvbnM/LmZpbHRlcigob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uICE9PSB1bmRlZmluZWQpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Db21wb25lbnQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICB2ZXJzaW9uOiBjb21wb25lbnRWZXJzaW9uLFxuICAgICAgY2hhbmdlRGVzY3JpcHRpb246IHByb3BzLmNoYW5nZURlc2NyaXB0aW9uLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGxhdGZvcm06IHByb3BzLnBsYXRmb3JtLFxuICAgICAga21zS2V5SWQ6IHByb3BzLmttc0tleT8ua2V5QXJuLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIC4uLihzdXBwb3J0ZWRPc1ZlcnNpb25zPy5sZW5ndGggJiYge1xuICAgICAgICBzdXBwb3J0ZWRPc1ZlcnNpb25zOiBzdXBwb3J0ZWRPc1ZlcnNpb25zLm1hcCgob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uISksXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLmRhdGEucmVuZGVyKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbXBvbmVudFZlcnNpb24gPSBjb21wb25lbnRWZXJzaW9uO1xuICAgIHRoaXMuZW5jcnlwdGVkID0gdHJ1ZTsgLy8gQ29tcG9uZW50cyBhcmUgYWx3YXlzIGVuY3J5cHRlZFxuICAgIHRoaXMua21zS2V5ID0gcHJvcHMua21zS2V5O1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZSh0aGlzLnJlc291cmNlLmF0dHJOYW1lKTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGNvbXBvbmVudEFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2NvbXBvbmVudCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGAke3RoaXMucGh5c2ljYWxOYW1lfS8ke3RoaXMuY29tcG9uZW50VmVyc2lvbn1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlLmF0dHJUeXBlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbXBvbmVudE5hbWUoKSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQodGhpcy5waHlzaWNhbE5hbWUpKSB7XG4gICAgICByZXR1cm47IC8vIENhbm5vdCB2YWxpZGF0ZSB1bnJlc29sdmVkIHRva2VucywgZ2l2ZW4gdGhlaXIgYWN0dWFsIHZhbHVlIGlzIHJlbmRlcmVkIGF0IGRlcGxveW1lbnQgdGltZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgQ29tcG9uZW50TmFtZVRvb0xvbmdgLFxuICAgICAgICBgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuIDEyOCBjaGFyYWN0ZXJzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YENvbXBvbmVudE5hbWVDb250YWluc1NwYWNlc2AsIGB0aGUgY29tcG9uZW50TmFtZSBjYW5ub3QgY29udGFpbiBzcGFjZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgQ29tcG9uZW50TmFtZUNvbnRhaW5zVW5kZXJzY29yZXNgLCBgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YENvbXBvbmVudE5hbWVOb3RMb3dlcmNhc2VgLCBgdGhlIGNvbXBvbmVudE5hbWUgbXVzdCBiZSBsb3dlcmNhc2UsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cbiAgfVxufVxuIl19