@aws-cdk/aws-mediaconnect-alpha 2.263.0-alpha.0 → 2.264.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.
@@ -49,7 +49,7 @@ const shared_1 = require("./shared");
49
49
  */
50
50
  class RouterOutputProtocolOptions {
51
51
  value;
52
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocolOptions", version: "2.263.0-alpha.0" };
52
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocolOptions", version: "2.264.0-alpha.0" };
53
53
  /** Real-time Transport Protocol */
54
54
  static RTP = new RouterOutputProtocolOptions('RTP');
55
55
  /** Reliable Internet Stream Transport */
@@ -80,7 +80,7 @@ exports.RouterOutputProtocolOptions = RouterOutputProtocolOptions;
80
80
  */
81
81
  class RouterOutputTier {
82
82
  value;
83
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputTier", version: "2.263.0-alpha.0" };
83
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputTier", version: "2.264.0-alpha.0" };
84
84
  /** Up to 100 Mbps */
85
85
  static OUTPUT_100 = new RouterOutputTier('OUTPUT_100');
86
86
  /** Up to 50 Mbps */
@@ -110,7 +110,7 @@ exports.RouterOutputTier = RouterOutputTier;
110
110
  * Supported protocols: RTP, RIST, SRT (Listener and Caller).
111
111
  */
112
112
  class RouterOutputProtocol {
113
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocol", version: "2.263.0-alpha.0" };
113
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocol", version: "2.264.0-alpha.0" };
114
114
  /**
115
115
  * Create an RTP protocol configuration
116
116
  *
@@ -300,7 +300,7 @@ exports.RouterOutputProtocol = RouterOutputProtocol;
300
300
  * Factory class for creating Router Output configurations
301
301
  */
302
302
  class RouterOutputConfiguration {
303
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputConfiguration", version: "2.263.0-alpha.0" };
303
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputConfiguration", version: "2.264.0-alpha.0" };
304
304
  /**
305
305
  * Create a standard Router Output configuration with a single protocol
306
306
  *
@@ -467,6 +467,7 @@ class StandardRouterOutputConfig extends RouterOutputConfiguration {
467
467
  protocolConfiguration: protocol.config,
468
468
  },
469
469
  },
470
+ availabilityZone: this.props.availabilityZone,
470
471
  grant: protocol.grant,
471
472
  };
472
473
  }
@@ -617,7 +618,7 @@ let RouterOutput = (() => {
617
618
  RouterOutput = _classThis = _classDescriptor.value;
618
619
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
619
620
  }
620
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutput", version: "2.263.0-alpha.0" };
621
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutput", version: "2.264.0-alpha.0" };
621
622
  /** Uniquely identifies this class. */
622
623
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-mediaconnect-alpha.RouterOutput';
623
624
  /**
@@ -743,7 +744,8 @@ let RouterOutput = (() => {
743
744
  });
744
745
  const configBind = props.configuration._bind(this, routerOutputArn);
745
746
  // Check to see if region specified is also compatible with AZ configured for some of the Router Outputs configurations
746
- if (configBind.availabilityZone && !configBind.availabilityZone.startsWith(targetRegion)) {
747
+ if (configBind.availabilityZone && !aws_cdk_lib_1.Token.isUnresolved(configBind.availabilityZone) && !aws_cdk_lib_1.Token.isUnresolved(targetRegion)
748
+ && !configBind.availabilityZone.startsWith(targetRegion)) {
747
749
  throw new aws_cdk_lib_1.ValidationError((0, helpers_internal_1.lit) `RouterOutputAzRegionMismatch`, `Availability zone '${configBind.availabilityZone}' must be within region '${targetRegion}'`, this);
748
750
  }
749
751
  const routerOutput = new aws_mediaconnect_1.CfnRouterOutput(this, 'Resource', {
@@ -751,7 +753,7 @@ let RouterOutput = (() => {
751
753
  maximumBitrate: props.maximumBitrate.toBps(),
752
754
  routingScope: props.routingScope.value,
753
755
  tier: (props.tier ?? RouterOutputTier.OUTPUT_20).value,
754
- availabilityZone: configBind.availabilityZone, // Only specified for MediaConnect Flow and MediaLive inputs (with no connection).
756
+ availabilityZone: configBind.availabilityZone,
755
757
  maintenanceConfiguration: props.maintenanceConfiguration ? {
756
758
  preferredDayTime: props.maintenanceConfiguration,
757
759
  } : {
@@ -786,4 +788,4 @@ function extractRouterOutputId(routerOutputArn) {
786
788
  }
787
789
  return parsed;
788
790
  }
789
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLW91dHB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJvdXRlci1vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQXNJO0FBRXRJLCtEQUEwRDtBQUUxRCxtRUFBK0Q7QUFFL0QsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFNMUUscUNBQStJO0FBRS9JOztHQUVHO0FBQ0gsTUFBYSwyQkFBMkI7SUFtQkY7O0lBbEJwQyxtQ0FBbUM7SUFDNUIsTUFBTSxDQUFVLEdBQUcsR0FBRyxJQUFJLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLHlDQUF5QztJQUNsQyxNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEUsOENBQThDO0lBQ3ZDLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRixnREFBZ0Q7SUFDekMsTUFBTSxDQUFVLFlBQVksR0FBRyxJQUFJLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXRGOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBYTtRQUM1QixPQUFPLElBQUksMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDL0M7SUFFRCw2Q0FBNkM7SUFDN0MsWUFBb0MsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7S0FBSTtJQUVyRCwrQkFBK0I7SUFDeEIsUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQjs7QUF4Qkgsa0VBeUJDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGdCQUFnQjtJQWlCUzs7SUFoQnBDLHFCQUFxQjtJQUNkLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2RSxvQkFB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QyxlQUFlLEVBQUUsdUJBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUN0RixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUkscUNBQXVCLENBQy9CLElBQUEsc0JBQUcsRUFBQSx3QkFBd0IsRUFDM0Isc0NBQXNDLGVBQWUsc0ZBQXNGLENBQzVJLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQml0cmF0ZSwgSVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXJuLCBBcm5Gb3JtYXQsIER1cmF0aW9uLCBMYXp5LCBOYW1lcywgUmVzb3VyY2UsIFN0YWNrLCBUb2tlbiwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgTWV0cmljT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IE1ldHJpYywgVW5pdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB0eXBlIHsgR3JhbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmblJvdXRlck91dHB1dCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1tZWRpYWNvbm5lY3QnO1xuaW1wb3J0IHR5cGUgeyBJUm91dGVyT3V0cHV0UmVmLCBSb3V0ZXJPdXRwdXRSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFjb25uZWN0JztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSUZsb3cgfSBmcm9tICcuL2Zsb3cnO1xuaW1wb3J0IHR5cGUgeyBNYWludGVuYW5jZUNvbmZpZ3VyYXRpb24sIEZvcndhcmRFcnJvckNvcnJlY3Rpb24sIFJvdXRpbmdTY29wZSB9IGZyb20gJy4vcm91dGVyLWlucHV0JztcbmltcG9ydCB0eXBlIHsgSVJvdXRlck5ldHdvcmtJbnRlcmZhY2UgfSBmcm9tICcuL3JvdXRlci1uZXR3b3JrLWludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE1lZGlhTGl2ZVBpcGVsaW5lLCBSb3V0ZXJTcnRFbmNyeXB0aW9uLCBUcmFuc2l0RW5jcnlwdGlvbiB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IHJlbmRlclRhZ3MsIGV4Y2VlZHNSb3V0ZXJUaWVyQml0cmF0ZSwgcmVzb2x2ZVJvdXRlclNydEVuY3J5cHRpb24sIHJlc29sdmVUcmFuc2l0RW5jcnlwdGlvbiwgdmFsaWRhdGVNYWludGVuYW5jZVRpbWUgfSBmcm9tICcuL3NoYXJlZCc7XG5cbi8qKlxuICogUHJvdG9jb2wgb3B0aW9ucyBhdmFpbGFibGUgZm9yIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyB7XG4gIC8qKiBSZWFsLXRpbWUgVHJhbnNwb3J0IFByb3RvY29sICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlRQID0gbmV3IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucygnUlRQJyk7XG4gIC8qKiBSZWxpYWJsZSBJbnRlcm5ldCBTdHJlYW0gVHJhbnNwb3J0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUklTVCA9IG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMoJ1JJU1QnKTtcbiAgLyoqIFNlY3VyZSBSZWxpYWJsZSBUcmFuc3BvcnQgLSBDYWxsZXIgbW9kZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNSVF9DQUxMRVIgPSBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zKCdTUlRfQ0FMTEVSJyk7XG4gIC8qKiBTZWN1cmUgUmVsaWFibGUgVHJhbnNwb3J0IC0gTGlzdGVuZXIgbW9kZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNSVF9MSVNURU5FUiA9IG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMoJ1NSVF9MSVNURU5FUicpO1xuXG4gIC8qKlxuICAgKiBVc2UgYSBjdXN0b20gcHJvdG9jb2wgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBwcm90b2NvbCBzdHJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyB7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnModmFsdWUpO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB2YWx1ZSBUaGUgcHJvdG9jb2wgc3RyaW5nIHZhbHVlICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmcpIHt9XG5cbiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFJvdXRpbmcgdGllciB0aGF0IGRldGVybWluZXMgdGhlIG1heGltdW0gYml0cmF0ZSAoaW4gTWJwcykgZm9yIGEgUm91dGVyIE91dHB1dC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlck91dHB1dFRpZXIge1xuICAvKiogVXAgdG8gMTAwIE1icHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPVVRQVVRfMTAwID0gbmV3IFJvdXRlck91dHB1dFRpZXIoJ09VVFBVVF8xMDAnKTtcbiAgLyoqIFVwIHRvIDUwIE1icHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPVVRQVVRfNTAgPSBuZXcgUm91dGVyT3V0cHV0VGllcignT1VUUFVUXzUwJyk7XG4gIC8qKiBVcCB0byAyMCBNYnBzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT1VUUFVUXzIwID0gbmV3IFJvdXRlck91dHB1dFRpZXIoJ09VVFBVVF8yMCcpO1xuXG4gIC8qKlxuICAgKiBVc2UgYSBjdXN0b20gdGllciB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHRpZXIgc3RyaW5nIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBSb3V0ZXJPdXRwdXRUaWVyIHtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFRpZXIodmFsdWUpO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB2YWx1ZSBUaGUgdGllciBzdHJpbmcgdmFsdWUgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZykge31cblxuICAvKiogUmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlICovXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBSb3V0ZXIgT3V0cHV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlck91dHB1dCBleHRlbmRzIElSZXNvdXJjZSwgSVJvdXRlck91dHB1dFJlZiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUCBhZGRyZXNzIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpcEFkZHJlc3M6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSByb3V0ZXIgb3V0cHV0IHdhcyBjcmVhdGVkLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgcm91dGVyIG91dHB1dCB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0aGlzIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIFJvdXRlciBvdXRwdXQgbWV0cmljcyBhcmUgZGltZW5zaW9uZWQgYnkgYFJvdXRlck91dHB1dEFSTmAuIFNlZSB0aGUgTWVkaWFDb25uZWN0XG4gICAqIGRvY3VtZW50YXRpb24gZm9yIGF2YWlsYWJsZSBtZXRyaWMgbmFtZXMgKGUuZy4gYFJvdXRlck91dHB1dEJpdFJhdGVgLFxuICAgKiBgUm91dGVyT3V0cHV0VG90YWxQYWNrZXRzYCkuXG4gICAqL1xuICBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIGJpdHJhdGUgb2YgdGhlIHJvdXRlciBvdXRwdXQncyBwYXlsb2FkLlxuICAgKiBAZGVmYXVsdCAtIGF2ZXJhZ2Ugb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNCaXRyYXRlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgc2VudCBieSB0aGUgcm91dGVyIG91dHB1dC5cbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNUb3RhbFBhY2tldHMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSByb3V0ZXIgb3V0cHV0IGNvbm5lY3Rpb24gc3RhdGUgKDEgY29ubmVjdGVkLCAwIGRpc2Nvbm5lY3RlZCkuIEFwcGxpZXMgdG8gU1JUIG91dHB1dHMgb25seS5cbiAgICogQGRlZmF1bHQgLSBtaW5pbXVtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljQ29ubmVjdGVkKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIHJldHJhbnNtaXR0ZWQgcGFja2V0cyByZXF1ZXN0ZWQgdGhyb3VnaCBhdXRvbWF0aWMgcmVwZWF0IHJlcXVlc3QgKEFSUSkuXG4gICAqIEFwcGxpZXMgdG8gUklTVCBhbmQgU1JUIG91dHB1dHMgb25seS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNBcnFSZXF1ZXN0cyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBSb3V0ZXIgT3V0cHV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVyT3V0cHV0UHJvcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgUm91dGVyIE91dHB1dFxuICAgKiBAZGVmYXVsdCAtIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5XG4gICAqL1xuICByZWFkb25seSByb3V0ZXJPdXRwdXROYW1lPzogc3RyaW5nO1xuICAvKiogTWF4aW11bSBiaXRyYXRlIGluIGJpdHMgcGVyIHNlY29uZCB0aGF0IHRoZSBSb3V0ZXIgT3V0cHV0IGNhbiBoYW5kbGUgKi9cbiAgcmVhZG9ubHkgbWF4aW11bUJpdHJhdGU6IEJpdHJhdGU7XG4gIC8qKiBSb3V0aW5nIHNjb3BlIGZvciB0aGUgUm91dGVyIE91dHB1dCAqL1xuICByZWFkb25seSByb3V0aW5nU2NvcGU6IFJvdXRpbmdTY29wZTtcbiAgLyoqXG4gICAqIFJvdXRpbmcgdGllciB0aGF0IGRldGVybWluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG91dHB1dHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwXG4gICAqL1xuICByZWFkb25seSB0aWVyPzogUm91dGVyT3V0cHV0VGllcjtcbiAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBSb3V0ZXIgT3V0cHV0IChzdGFuZGFyZCwgTWVkaWFDb25uZWN0IEZsb3csIG9yIE1lZGlhTGl2ZSkgKi9cbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbjogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIE1haW50ZW5hbmNlIHdpbmRvdyBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtYWludGVuYW5jZSB3aW5kb3cgd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBtYWludGVuYW5jZUNvbmZpZ3VyYXRpb24/OiBNYWludGVuYW5jZUNvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBBV1MgcmVnaW9uIHdoZXJlIHRoZSBSb3V0ZXIgT3V0cHV0IHdpbGwgYmUgY3JlYXRlZFxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHRzIHRvIHRoZSBzYW1lIHJlZ2lvbiBhcyBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRhZ3MgdG8gYWRkIHRvIHRoZSBSb3V0ZXIgT3V0cHV0XG4gICAqIEBkZWZhdWx0IC0gTm8gdGFnZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIFJvdXRlciBPdXRwdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVyT3V0cHV0QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBUaGUgbmFtZSBpcyBub3QgZW5jb2RlZCBpbiB0aGUgQVJOICh0aGUgQVJOIGNvbnRhaW5zIG9ubHkgdGhlIHNlcnZpY2UtZ2VuZXJhdGVkIElEKSxcbiAgICogc28gcHJvdmlkZSBpdCBoZXJlIGlmIHlvdSBuZWVkIHRvIGFjY2VzcyBgcm91dGVyT3V0cHV0TmFtZWAgb24gdGhlIGltcG9ydGVkIGNvbnN0cnVjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByb3V0ZXJPdXRwdXROYW1lIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIGltcG9ydGVkIGNvbnN0cnVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBhcnNlZCBmcm9tIHRoZSBBUk4gd2hlbiBhdmFpbGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFJUUCBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciBvdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnRwT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIGZvciBSVFAgdHJhZmZpYyAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZztcbiAgLyoqIFBvcnQgbnVtYmVyIGZvciBSVFAgdHJhZmZpYyAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBGb3J3YXJkIEVycm9yIENvcnJlY3Rpb24gc2V0dGluZ1xuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZDsgd2hlbiBvbWl0dGVkLCBNZWRpYUNvbm5lY3QgYXBwbGllcyBGb3J3YXJkRXJyb3JDb3JyZWN0aW9uLkRJU0FCTEVEIGF0IGRlcGxveSB0aW1lXG4gICAqL1xuICByZWFkb25seSBmb3J3YXJkRXJyb3JDb3JyZWN0aW9uPzogRm9yd2FyZEVycm9yQ29ycmVjdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBSSVNUIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIG91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSaXN0T3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIGZvciBSSVNUIHRyYWZmaWMgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBQb3J0IG51bWJlciBmb3IgUklTVCB0cmFmZmljICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBTUlQgTGlzdGVuZXIgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3Igb3V0cHV0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNydExpc3RlbmVyT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBQb3J0IG51bWJlciBmb3IgU1JUIGxpc3RlbmVyICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgLyoqIE1pbmltdW0gbGF0ZW5jeSBmb3IgU1JUICovXG4gIHJlYWRvbmx5IG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgU1JUIHN0cmVhbXNcbiAgICogQGRlZmF1bHQgLSBObyBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgU1JUIENhbGxlciBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciBvdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3J0Q2FsbGVyT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIHRvIGNvbm5lY3QgdG8gKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBEZXN0aW5hdGlvbiBwb3J0IHRvIGNvbm5lY3QgdG8gKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25Qb3J0OiBudW1iZXI7XG4gIC8qKiBNaW5pbXVtIGxhdGVuY3kgZm9yIFNSVCAqL1xuICByZWFkb25seSBtaW5pbXVtTGF0ZW5jeTogRHVyYXRpb247XG4gIC8qKlxuICAgKiBPcHRpb25hbCBzdHJlYW0gSUQgZm9yIFNSVCBjb25uZWN0aW9uXG4gICAqIEBkZWZhdWx0IC0gTm8gc3RyZWFtIElEXG4gICAqL1xuICByZWFkb25seSBzdHJlYW1JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgU1JUIHN0cmVhbXNcbiAgICogQGRlZmF1bHQgLSBObyBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogRmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgUm91dGVyIE91dHB1dCBwcm90b2NvbCBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBTdXBwb3J0ZWQgcHJvdG9jb2xzOiBSVFAsIFJJU1QsIFNSVCAoTGlzdGVuZXIgYW5kIENhbGxlcikuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gUlRQIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wucnRwKHtcbiAgICogICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgcG9ydDogNTAwMCxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBSVFAgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBSVFBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcnRwKHByb3BzOiBSdHBPdXRwdXRQcm90b2NvbFByb3BzKTogUm91dGVyT3V0cHV0UHJvdG9jb2wge1xuICAgIFJvdXRlck91dHB1dFByb3RvY29sLnZhbGlkYXRlUG9ydChwcm9wcy5wb3J0KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFByb3RvY29sKFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucy5SVFAsIHtcbiAgICAgIHJ0cDoge1xuICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6IHByb3BzLmRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgICAgZGVzdGluYXRpb25Qb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBmb3J3YXJkRXJyb3JDb3JyZWN0aW9uOiBwcm9wcy5mb3J3YXJkRXJyb3JDb3JyZWN0aW9uLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBSSVNUIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wucmlzdCh7XG4gICAqICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiAnMTAuMC4wLjEnLFxuICAgKiAgICAgIHBvcnQ6IDUwMDAsXG4gICAqICAgIH0pO1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgUklTVCBwcm90b2NvbCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFJJU1RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmlzdChwcm9wczogUmlzdE91dHB1dFByb3RvY29sUHJvcHMpOiBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gICAgUm91dGVyT3V0cHV0UHJvdG9jb2wudmFsaWRhdGVQb3J0KHByb3BzLnBvcnQpO1xuICAgIHJldHVybiBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2woUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zLlJJU1QsIHtcbiAgICAgIHJpc3Q6IHtcbiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiBwcm9wcy5kZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgIGRlc3RpbmF0aW9uUG9ydDogcHJvcHMucG9ydCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFNSVCBMaXN0ZW5lciBwcm90b2NvbCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIFJvdXRlck91dHB1dFByb3RvY29sLnNydExpc3RlbmVyKHtcbiAgICogICAgICBwb3J0OiA1MDAwLFxuICAgKiAgICAgIG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbi5taWxsaXMoMTI1KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTUlQgTGlzdGVuZXIgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBTUlQgTGlzdGVuZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3J0TGlzdGVuZXIocHJvcHM6IFNydExpc3RlbmVyT3V0cHV0UHJvdG9jb2xQcm9wcyk6IFJvdXRlck91dHB1dFByb3RvY29sIHtcbiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC52YWxpZGF0ZVBvcnQocHJvcHMucG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbChSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMuU1JUX0xJU1RFTkVSLCB7XG4gICAgICBzcnRMaXN0ZW5lcjoge1xuICAgICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBtaW5pbXVtTGF0ZW5jeU1pbGxpc2Vjb25kczogcHJvcHMubWluaW11bUxhdGVuY3kudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgIH0sXG4gICAgfSwgcHJvcHMuZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBTUlQgQ2FsbGVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wuc3J0Q2FsbGVyKHtcbiAgICogICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgZGVzdGluYXRpb25Qb3J0OiA1MDAwLFxuICAgKiAgICAgIG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbi5taWxsaXMoMTI1KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTUlQgQ2FsbGVyIHByb3RvY29sIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0UHJvdG9jb2wgaW5zdGFuY2UgY29uZmlndXJlZCBmb3IgU1JUIENhbGxlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcnRDYWxsZXIocHJvcHM6IFNydENhbGxlck91dHB1dFByb3RvY29sUHJvcHMpOiBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gICAgUm91dGVyT3V0cHV0UHJvdG9jb2wudmFsaWRhdGVTcnRDYWxsZXJQb3J0KHByb3BzLmRlc3RpbmF0aW9uUG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbChSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMuU1JUX0NBTExFUiwge1xuICAgICAgc3J0Q2FsbGVyOiB7XG4gICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogcHJvcHMuZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblBvcnQ6IHByb3BzLmRlc3RpbmF0aW9uUG9ydCxcbiAgICAgICAgbWluaW11bUxhdGVuY3lNaWxsaXNlY29uZHM6IHByb3BzLm1pbmltdW1MYXRlbmN5LnRvTWlsbGlzZWNvbmRzKCksXG4gICAgICAgIHN0cmVhbUlkOiBwcm9wcy5zdHJlYW1JZCxcbiAgICAgIH0sXG4gICAgfSwgcHJvcHMuZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgcG9ydCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICgzMDAwLTMwMDAwKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVQb3J0KHBvcnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHBvcnQpICYmIChwb3J0IDwgMzAwMCB8fCBwb3J0ID4gMzAwMDApKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dFBvcnRSYW5nZWAsIGBQb3J0IG11c3QgYmUgYmV0d2VlbiAzMDAwIGFuZCAzMDAwMCwgZ290ICR7cG9ydH1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBTUlQgQ2FsbGVyIHBvcnQgaXMgd2l0aGluIHRoZSB2YWxpZCByYW5nZSAoMC02NTUzNSlcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlU3J0Q2FsbGVyUG9ydChwb3J0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwb3J0KSAmJiAocG9ydCA8IDAgfHwgcG9ydCA+IDY1NTM1KSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBTcnRDYWxsZXJQb3J0UmFuZ2VgLCBgU1JUIENhbGxlciBwb3J0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2NTUzNSwgZ290ICR7cG9ydH1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9wcm90b2NvbE5hbWU6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuY3J5cHRpb24/OiBSb3V0ZXJTcnRFbmNyeXB0aW9uO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHJvdG9jb2xOYW1lOiBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMsXG4gICAgY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHksXG4gICAgZW5jcnlwdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb24sXG4gICkge1xuICAgIHRoaXMuX3Byb3RvY29sTmFtZSA9IHByb3RvY29sTmFtZTtcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5fZW5jcnlwdGlvbiA9IGVuY3J5cHRpb247XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGlzIHByb3RvY29sIHRvIGl0cyBDRk4tcmVhZHkgZm9ybS4gUmV0dXJucyB0aGUgcHJvdG9jb2wgaWRlbnRpZmllclxuICAgKiBhbmQgdGhlIENGTiBjb25maWd1cmF0aW9uIHNoYXBlIHdpdGggU1JUIGVuY3J5cHRpb24gYXV0by1yb2xlIG1hdGVyaWFsaXplZCBpZiBuZWVkZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAgICAgICAgICAgICBDb25zdHJ1Y3QgdGhhdCBzY29wZXMgdGhlIGF1dG8tY3JlYXRlZCBlbmNyeXB0aW9uIHJvbGVcbiAgICogQHBhcmFtIHJvdXRlck91dHB1dEFybiAgIE9wdGlvbmFsIEFSTiBvZiB0aGUgY29uc3VtaW5nIHJvdXRlciBvdXRwdXQg4oCUIHdoZW4gcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZXMgdGhlIGF1dG8tY3JlYXRlZCBlbmNyeXB0aW9uIHJvbGUncyB0cnVzdCBwb2xpY3kuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlck91dHB1dEFybj86IHN0cmluZyk6IHtcbiAgICBuYW1lOiBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnM7XG4gICAgY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHk7XG4gICAgZ3JhbnQ/OiBHcmFudDtcbiAgfSB7XG4gICAgaWYgKCF0aGlzLl9lbmNyeXB0aW9uKSB7XG4gICAgICByZXR1cm4geyBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsIGNvbmZpZzogdGhpcy5fY29uZmlnIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyBjb25maWc6IGVuY3J5cHRpb25Db25maWd1cmF0aW9uLCBncmFudCB9ID0gcmVzb2x2ZVJvdXRlclNydEVuY3J5cHRpb24oc2NvcGUsICdFbmNyeXB0aW9uUm9sZScsIHRoaXMuX2VuY3J5cHRpb24sIHJvdXRlck91dHB1dEFybik7XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnNydExpc3RlbmVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsXG4gICAgICAgIGNvbmZpZzogeyBzcnRMaXN0ZW5lcjogeyAuLi50aGlzLl9jb25maWcuc3J0TGlzdGVuZXIsIGVuY3J5cHRpb25Db25maWd1cmF0aW9uIH0gfSxcbiAgICAgICAgZ3JhbnQsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnNydENhbGxlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdGhpcy5fcHJvdG9jb2xOYW1lLFxuICAgICAgICBjb25maWc6IHsgc3J0Q2FsbGVyOiB7IC4uLnRoaXMuX2NvbmZpZy5zcnRDYWxsZXIsIGVuY3J5cHRpb25Db25maWd1cmF0aW9uIH0gfSxcbiAgICAgICAgZ3JhbnQsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsIGNvbmZpZzogdGhpcy5fY29uZmlnIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBzdGFuZGFyZCBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFyZE91dHB1dENvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKiBOZXR3b3JrIGludGVyZmFjZSBmb3IgdGhlIFJvdXRlciBPdXRwdXQgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0ludGVyZmFjZTogSVJvdXRlck5ldHdvcmtJbnRlcmZhY2U7XG4gIC8qKiBQcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciB0aGUgb3V0cHV0ICovXG4gIHJlYWRvbmx5IHByb3RvY29sOiBSb3V0ZXJPdXRwdXRQcm90b2NvbDtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUxpdmUgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggc3BlY2lmaWMgaW5wdXQgY29ubmVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhTGl2ZUlucHV0Q29ubmVjdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgTWVkaWFMaXZlIGlucHV0IHRvIHNlbmQgb3V0cHV0IHRvLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIHdpbGwgY2hhbmdlIHRvIGFjY2VwdCBhbiBJSW5wdXRSZWYgKHR5cGVkIE1lZGlhTGl2ZSBJbnB1dCByZWZlcmVuY2UpXG4gICAqIHdoZW4gdGhlIEBhd3MtY2RrL2F3cy1tZWRpYWxpdmUtYWxwaGEgTDIgY29uc3RydWN0IGlzIHJlbGVhc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVkaWFMaXZlSW5wdXRBcm46IHN0cmluZztcbiAgLyoqIFBpcGVsaW5lIElEIGZvciBNZWRpYUxpdmUgaW5wdXQgKi9cbiAgcmVhZG9ubHkgbWVkaWFMaXZlUGlwZWxpbmVJZDogTWVkaWFMaXZlUGlwZWxpbmU7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIE1lZGlhTGl2ZSBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFMaXZlTm9JbnB1dENvbm5lY3Rpb25Qcm9wcyB7XG4gIC8qKiBBdmFpbGFiaWxpdHkgem9uZSBmb3IgdGhlIHJvdXRlciBvdXRwdXQgd2hlbiBub3QgY29ubmVjdGluZyB0byBhIHNwZWNpZmljIGlucHV0ICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd0Nvbm5lY3Rpb25Qcm9wcyB7XG4gIC8qKiBNZWRpYUNvbm5lY3QgRmxvdyB0byBzZW5kIG91dHB1dCB0byAqL1xuICByZWFkb25seSBmbG93OiBJRmxvdztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd05vQ29ubmVjdGlvblByb3BzIHtcbiAgLyoqIEF2YWlsYWJpbGl0eSB6b25lIGZvciB0aGUgcm91dGVyIG91dHB1dCB3aGVuIG5vdCBjb25uZWN0aW5nIHRvIGEgc3BlY2lmaWMgZmxvdyAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgY2xhc3MgZm9yIGNyZWF0aW5nIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgc3RhbmRhcmQgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggYSBzaW5nbGUgcHJvdG9jb2xcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgZGVjbGFyZSBjb25zdCBuZXR3b3JrSW50ZXJmYWNlOiBSb3V0ZXJOZXR3b3JrSW50ZXJmYWNlO1xuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLnN0YW5kYXJkKHtcbiAgICogICAgICBuZXR3b3JrSW50ZXJmYWNlLFxuICAgKiAgICAgIHByb3RvY29sOiBSb3V0ZXJPdXRwdXRQcm90b2NvbC5ydHAoe1xuICAgKiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiAnMTAuMC4wLjEnLFxuICAgKiAgICAgICAgcG9ydDogNTAwMCxcbiAgICogICAgICB9KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTdGFuZGFyZCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3Igc3RhbmRhcmQgc2V0dXBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3RhbmRhcmQocHJvcHM6IFN0YW5kYXJkT3V0cHV0Q29uZmlndXJhdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTdGFuZGFyZFJvdXRlck91dHB1dENvbmZpZyhwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTWVkaWFMaXZlIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbiB3aXRoIGEgc3BlY2lmaWMgaW5wdXQgY29ubmVjdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB0aGUgTWVkaWFMaXZlIGlucHV0IGFscmVhZHkgZXhpc3RzIGFuZCB5b3Ugd2FudCB0byBjb25uZWN0IGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLm1lZGlhTGl2ZUlucHV0KHtcbiAgICogICAgICBtZWRpYUxpdmVJbnB1dEFybjogJ2Fybjphd3M6bWVkaWFsaXZlOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6aW5wdXQ6MTIzNDU2NycsXG4gICAqICAgICAgbWVkaWFMaXZlUGlwZWxpbmVJZDogTWVkaWFMaXZlUGlwZWxpbmUuUElQRUxJTkVfMCxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUxpdmUgaW5wdXQgY29ubmVjdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIE1lZGlhTGl2ZSBzZXR1cCB3aXRoIGlucHV0IGNvbm5lY3Rpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWVkaWFMaXZlSW5wdXQocHJvcHM6IE1lZGlhTGl2ZUlucHV0Q29ubmVjdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dENvbmZpZyh7XG4gICAgICBtZWRpYUxpdmVJbnB1dEFybjogcHJvcHMubWVkaWFMaXZlSW5wdXRBcm4sXG4gICAgICBtZWRpYUxpdmVQaXBlbGluZUlkOiBwcm9wcy5tZWRpYUxpdmVQaXBlbGluZUlkLFxuICAgICAgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogcHJvcHMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUxpdmUgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgYSBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHlvdSB3YW50IHRvIHNldCB1cCB0aGUgcm91dGVyIG91dHB1dCBiZWZvcmUgdGhlIE1lZGlhTGl2ZSBpbnB1dCBleGlzdHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ubWVkaWFMaXZlSW5wdXRXaXRob3V0Q29ubmVjdGlvbih7XG4gICAqICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogJ3VzLWVhc3QtMWEnLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhTGl2ZSBubyBpbnB1dCBjb25uZWN0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3IgTWVkaWFMaXZlIHNldHVwIHdpdGhvdXQgaW5wdXQgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUxpdmVJbnB1dFdpdGhvdXRDb25uZWN0aW9uKHByb3BzOiBNZWRpYUxpdmVOb0lucHV0Q29ubmVjdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dENvbmZpZyhcbiAgICAgIHsgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogcHJvcHMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbiB9LFxuICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1lZGlhQ29ubmVjdCBGbG93IFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbiB3aXRoIGEgc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHRoZSB0YXJnZXQgZmxvdyBhbHJlYWR5IGV4aXN0cyBhbmQgeW91IHdhbnQgdG8gY29ubmVjdCBpbW1lZGlhdGVseS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgZGVjbGFyZSBjb25zdCBmbG93OiBGbG93O1xuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLm1lZGlhQ29ubmVjdEZsb3coe1xuICAgKiAgICAgIGZsb3csXG4gICAqICAgIH0pO1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgTWVkaWFDb25uZWN0IEZsb3cgY29ubmVjdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIE1lZGlhQ29ubmVjdCBGbG93IHNldHVwIHdpdGggZmxvdyBjb25uZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1lZGlhQ29ubmVjdEZsb3cocHJvcHM6IE1lZGlhQ29ubmVjdEZsb3dDb25uZWN0aW9uUHJvcHMpOiBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRDb25maWcoe1xuICAgICAgZmxvdzogcHJvcHMuZmxvdyxcbiAgICAgIGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb246IHByb3BzLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgYSBzcGVjaWZpYyBmbG93IGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIHdoZW4geW91IHdhbnQgdG8gc2V0IHVwIHRoZSByb3V0ZXIgb3V0cHV0IGJlZm9yZSB0aGUgdGFyZ2V0IGZsb3cgZXhpc3RzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLm1lZGlhQ29ubmVjdEZsb3dXaXRob3V0Q29ubmVjdGlvbih7XG4gICAqICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogJ3VzLWVhc3QtMWEnLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhQ29ubmVjdCBGbG93IG5vIGNvbm5lY3Rpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBzZXR1cCB3aXRob3V0IGZsb3cgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUNvbm5lY3RGbG93V2l0aG91dENvbm5lY3Rpb24ocHJvcHM6IE1lZGlhQ29ubmVjdEZsb3dOb0Nvbm5lY3Rpb25Qcm9wcyk6IFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dENvbmZpZyhcbiAgICAgIHsgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogcHJvcHMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbiB9LFxuICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhpcyBjb25maWd1cmF0aW9uIHRvIGl0cyBDbG91ZEZvcm1hdGlvbiBzaGFwZS4gQ2FsbGVkIGJ5IHRoZSBSb3V0ZXJPdXRwdXRcbiAgICogY29uc3RydWN0b3Ig4oCUIGVhY2ggY29uY3JldGUgc3ViY2xhc3Mgc3VwcGxpZXMgaXRzIG93biB2YXJpYW50LXNwZWNpZmljIHJlbmRlcmluZy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKToge1xuICAgIGNvbmZpZzogQ2ZuUm91dGVyT3V0cHV0LlJvdXRlck91dHB1dENvbmZpZ3VyYXRpb25Qcm9wZXJ0eTsgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZzsgZ3JhbnQ/OiBHcmFudDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb25jcmV0ZSB2YXJpYW50OiBzdGFuZGFyZCAoc2luZ2xlLXByb3RvY29sKSByb3V0ZXIgb3V0cHV0IGNvbmZpZ3VyYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgU3RhbmRhcmRSb3V0ZXJPdXRwdXRDb25maWcgZXh0ZW5kcyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogU3RhbmRhcmRPdXRwdXRDb25maWd1cmF0aW9uUHJvcHMpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0LCByb3V0ZXJPdXRwdXRBcm4/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcm90b2NvbCA9IHRoaXMucHJvcHMucHJvdG9jb2wuX2JpbmQoc2NvcGUsIHJvdXRlck91dHB1dEFybik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBzdGFuZGFyZDoge1xuICAgICAgICAgIG5ldHdvcmtJbnRlcmZhY2VBcm46IHRoaXMucHJvcHMubmV0d29ya0ludGVyZmFjZS5yb3V0ZXJOZXR3b3JrSW50ZXJmYWNlQXJuLFxuICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbC5uYW1lLnZhbHVlLFxuICAgICAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbjogcHJvdG9jb2wuY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGdyYW50OiBwcm90b2NvbC5ncmFudCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29uY3JldGUgdmFyaWFudDogTWVkaWFMaXZlIElucHV0IHJvdXRlciBvdXRwdXQgY29uZmlndXJhdGlvbiAod2l0aCBvciB3aXRob3V0IGNvbm5lY3Rpb24pLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIE1lZGlhTGl2ZUlucHV0Um91dGVyT3V0cHV0Q29uZmlnIGV4dGVuZHMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZyxcbiAgKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNpdCA9IHJlc29sdmVUcmFuc2l0RW5jcnlwdGlvbihzY29wZSwgJ0Rlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb25Sb2xlJywgdGhpcy5vcHRpb25zLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24sIHJvdXRlck91dHB1dEFybik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBtZWRpYUxpdmVJbnB1dDoge1xuICAgICAgICAgIG1lZGlhTGl2ZUlucHV0QXJuOiB0aGlzLm9wdGlvbnMubWVkaWFMaXZlSW5wdXRBcm4sXG4gICAgICAgICAgbWVkaWFMaXZlUGlwZWxpbmVJZDogdGhpcy5vcHRpb25zLm1lZGlhTGl2ZVBpcGVsaW5lSWQsXG4gICAgICAgICAgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogdHJhbnNpdC5jb25maWcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgZ3JhbnQ6IHRyYW5zaXQuZ3JhbnQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVybmFsIG9wdGlvbnMgZm9yIHtAbGluayBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dENvbmZpZ30uIE5vdCBleHBvcnRlZDsganNpaSBuZXZlciBzZWVzIHRoaXMuXG4gKi9cbmludGVyZmFjZSBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dE9wdGlvbnMge1xuICByZWFkb25seSBtZWRpYUxpdmVJbnB1dEFybj86IHN0cmluZztcbiAgcmVhZG9ubHkgbWVkaWFMaXZlUGlwZWxpbmVJZD86IE1lZGlhTGl2ZVBpcGVsaW5lO1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogQ29uY3JldGUgdmFyaWFudDogTWVkaWFDb25uZWN0IEZsb3cgcm91dGVyIG91dHB1dCBjb25maWd1cmF0aW9uICh3aXRoIG9yIHdpdGhvdXQgY29ubmVjdGlvbikuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dENvbmZpZyBleHRlbmRzIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZyxcbiAgKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNpdCA9IHJlc29sdmVUcmFuc2l0RW5jcnlwdGlvbihzY29wZSwgJ0Rlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb25Sb2xlJywgdGhpcy5vcHRpb25zLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24sIHJvdXRlck91dHB1dEFybik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBtZWRpYUNvbm5lY3RGbG93OiB7XG4gICAgICAgICAgZmxvd0FybjogdGhpcy5vcHRpb25zLmZsb3c/LmZsb3dBcm4sXG4gICAgICAgICAgZmxvd1NvdXJjZUFybjogdGhpcy5vcHRpb25zLmZsb3c/LnNvdXJjZUFybixcbiAgICAgICAgICBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uOiB0cmFuc2l0LmNvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiB0aGlzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBncmFudDogdHJhbnNpdC5ncmFudCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgb3B0aW9ucyBmb3Ige0BsaW5rIE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRDb25maWd9LiBOb3QgZXhwb3J0ZWQ7IGpzaWkgbmV2ZXIgc2VlcyB0aGlzLlxuICovXG5pbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dE9wdGlvbnMge1xuICByZWFkb25seSBmbG93PzogSUZsb3c7XG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBBIE1lZGlhQ29ubmVjdCBSb3V0ZXIgT3V0cHV0IHRoYXQgc2VuZHMgbWVkaWEgc3RyZWFtcyB0byBkZXN0aW5hdGlvbnMuXG4gKlxuICogUm91dGVyIE91dHB1dHMgc3VwcG9ydCBtdWx0aXBsZSBjb25maWd1cmF0aW9uIHR5cGVzOlxuICogLSBTdGFuZGFyZDogU2luZ2xlIHByb3RvY29sIG91dHB1dFxuICogLSBNZWRpYUxpdmUgSW5wdXQ6IE91dHB1dCB0byBBV1MgRWxlbWVudGFsIE1lZGlhTGl2ZVxuICogLSBNZWRpYUNvbm5lY3QgRmxvdzogT3V0cHV0IHRvIGFub3RoZXIgTWVkaWFDb25uZWN0IEZsb3dcbiAqL1xuYWJzdHJhY3QgY2xhc3MgUm91dGVyT3V0cHV0QmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlck91dHB1dCB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb3V0ZXJPdXRwdXRBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJvdXRlck91dHB1dE5hbWU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJvdXRlck91dHB1dElkOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpcEFkZHJlc3M6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhpcyBSb3V0ZXIgT3V0cHV0IHJlc291cmNlLlxuICAgKiBSZXF1aXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgSVJvdXRlck91dHB1dFJlZiBpbnRlcmZhY2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvdXRlck91dHB1dFJlZigpOiBSb3V0ZXJPdXRwdXRSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7IHJvdXRlck91dHB1dEFybjogdGhpcy5yb3V0ZXJPdXRwdXRBcm4gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdGhpcyByb3V0ZXIgb3V0cHV0LlxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9NZWRpYUNvbm5lY3QnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFJvdXRlck91dHB1dEFSTjogdGhpcy5yb3V0ZXJPdXRwdXRBcm4sXG4gICAgICAgIC4uLnByb3BzPy5kaW1lbnNpb25zTWFwLFxuICAgICAgfSxcbiAgICB9KS5hdHRhY2hUbyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBiaXRyYXRlIG9mIHRoZSByb3V0ZXIgb3V0cHV0J3MgcGF5bG9hZC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNCaXRyYXRlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJPdXRwdXRCaXRSYXRlJywge1xuICAgICAgc3RhdGlzdGljOiAnYXZnJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkJJVFNfUEVSX1NFQ09ORCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHNlbnQgYnkgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljVG90YWxQYWNrZXRzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJPdXRwdXRUb3RhbFBhY2tldHMnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQ09VTlQsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSByb3V0ZXIgb3V0cHV0IGNvbm5lY3Rpb24gc3RhdGUgKDEgY29ubmVjdGVkLCAwIGRpc2Nvbm5lY3RlZCkuIEFwcGxpZXMgdG8gU1JUIG91dHB1dHMgb25seS5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDb25uZWN0ZWQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1JvdXRlck91dHB1dENvbm5lY3RlZCcsIHtcbiAgICAgIHN0YXRpc3RpYzogJ21pbicsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5OT05FLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIHJldHJhbnNtaXR0ZWQgcGFja2V0cyByZXF1ZXN0ZWQgdGhyb3VnaCBBUlEuIEFwcGxpZXMgdG8gUklTVCBhbmQgU1JUIG91dHB1dHMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQXJxUmVxdWVzdHMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1JvdXRlck91dHB1dEFSUVJlcXVlc3RzJywge1xuICAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkNPVU5ULFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIEFXUyBFbGVtZW50YWwgTWVkaWFDb25uZWN0IFJvdXRlciBPdXRwdXQuXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBSb3V0ZXJPdXRwdXQgZXh0ZW5kcyBSb3V0ZXJPdXRwdXRCYXNlIGltcGxlbWVudHMgSVJvdXRlck91dHB1dCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLW1lZGlhY29ubmVjdC1hbHBoYS5Sb3V0ZXJPdXRwdXQnO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgUm91dGVyIE91dHB1dCBmcm9tIGl0cyBBUk4uXG4gICAqXG4gICAqIFRoZSBBUk4gb25seSBjb250YWlucyB0aGUgc2VydmljZS1nZW5lcmF0ZWQgSUQgKG5vdCB0aGUgcm91dGVyIG91dHB1dCBuYW1lKS4gQWNjZXNzaW5nXG4gICAqIGByb3V0ZXJPdXRwdXROYW1lYCBvbiBhbiBBUk4gaW1wb3J0IHRocm93cyDigJQgdXNlIGBmcm9tUm91dGVyT3V0cHV0QXR0cmlidXRlcygpYCB0byBwcm92aWRlXG4gICAqIHRoZSBuYW1lIGV4cGxpY2l0bHkuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcm91dGVyT3V0cHV0QXJuIFRoZSBBUk4gb2YgdGhlIFJvdXRlciBPdXRwdXRcbiAgICogQHJldHVybnMgQSBSb3V0ZXIgT3V0cHV0IGNvbnN0cnVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUm91dGVyT3V0cHV0QXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHJvdXRlck91dHB1dEFybjogc3RyaW5nKTogSVJvdXRlck91dHB1dCB7XG4gICAgcmV0dXJuIFJvdXRlck91dHB1dC5mcm9tUm91dGVyT3V0cHV0QXR0cmlidXRlcyhzY29wZSwgaWQsIHsgcm91dGVyT3V0cHV0QXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBSb3V0ZXIgT3V0cHV0IGZyb20gYXR0cmlidXRlcy5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB5b3UgbmVlZCB0byByZWZlcmVuY2UgYSByb3V0ZXIgb3V0cHV0IGJ5IG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIFJvdXRlciBPdXRwdXQgYXR0cmlidXRlc1xuICAgKiBAcmV0dXJucyBBIFJvdXRlciBPdXRwdXQgY29uc3RydWN0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Sb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBSb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzKTogSVJvdXRlck91dHB1dCB7XG4gICAgLy8gRGVyaXZlIHRoZSBJRCBmcm9tIHRoZSBBUk4gdXNpbmcgQ0ZOIGludHJpbnNpY3Mgc28gdGhpcyB3b3JrcyB3aXRoIHRva2VuIEFSTnMgdG9vLlxuICAgIC8vIFRoZSBBUk4gZm9ybWF0IGlzIGFybjphd3M6bWVkaWFjb25uZWN0OjxyZWdpb24+OjxhY2NvdW50Pjpyb3V0ZXJPdXRwdXQ6PGlkPiwgc28gdGhlXG4gICAgLy8gcmVzb3VyY2UgbmFtZSBpcyB0aGUgSUQuXG4gICAgY29uc3Qgcm91dGVyT3V0cHV0SWQgPSBhdHRycy5yb3V0ZXJPdXRwdXRJZCA/PyBleHRyYWN0Um91dGVyT3V0cHV0SWQoYXR0cnMucm91dGVyT3V0cHV0QXJuKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJvdXRlck91dHB1dEJhc2UgaW1wbGVtZW50cyBJUm91dGVyT3V0cHV0IHtcbiAgICAgIHB1YmxpYyByZWFkb25seSByb3V0ZXJPdXRwdXRBcm4gPSBhdHRycy5yb3V0ZXJPdXRwdXRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQgPSByb3V0ZXJPdXRwdXRJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0ID0gdW5kZWZpbmVkO1xuXG4gICAgICBwdWJsaWMgZ2V0IHJvdXRlck91dHB1dE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGF0dHJzLnJvdXRlck91dHB1dE5hbWUpIHJldHVybiBhdHRycy5yb3V0ZXJPdXRwdXROYW1lO1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBSb3V0ZXJPdXRwdXROYW1lTm90UHJvdmlkZWRgLFxuICAgICAgICAgIGAncm91dGVyT3V0cHV0TmFtZScgd2FzIG5vdCBwcm92aWRlZCB3aGVuIGltcG9ydGluZyBSb3V0ZXJPdXRwdXQgJHt0aGlzLm5vZGUucGF0aH07IHByb3ZpZGUgaXQgaW4gZnJvbVJvdXRlck91dHB1dEF0dHJpYnV0ZXMoKWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGdldCBpcEFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUm91dGVyT3V0cHV0SXBBZGRyZXNzTm90UHJvdmlkZWRgLFxuICAgICAgICAgIGAnaXBBZGRyZXNzJyBpcyBub3QgYXZhaWxhYmxlIG9uIGltcG9ydGVkIFJvdXRlck91dHB1dCAke3RoaXMubm9kZS5wYXRofWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGJpdHJhdGUgaW4gTWJwcyBmb3IgYSBrbm93biB0aWVyLCBvciB1bmRlZmluZWQgZm9yIGN1c3RvbSB0aWVycy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHRpZXJMaW1pdE1icHModGllcjogUm91dGVyT3V0cHV0VGllcik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRpZXIudmFsdWUgPT09IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwLnZhbHVlKSByZXR1cm4gMjA7XG4gICAgaWYgKHRpZXIudmFsdWUgPT09IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzUwLnZhbHVlKSByZXR1cm4gNTA7XG4gICAgaWYgKHRpZXIudmFsdWUgPT09IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzEwMC52YWx1ZSkgcmV0dXJuIDEwMDtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlck91dHB1dEFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGlwQWRkcmVzczogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb3V0ZXJPdXRwdXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5yb3V0ZXJPdXRwdXROYW1lID8/IExhenkuc3RyaW5nKHsgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjggfSkgfSksXG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSByb3V0ZXIgb3V0cHV0IG5hbWUgaWYgcHJvdmlkZWRcbiAgICBpZiAocHJvcHMucm91dGVyT3V0cHV0TmFtZSAhPSBudWxsICYmIHByb3BzLnJvdXRlck91dHB1dE5hbWUgIT09ICcnICYmICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMucm91dGVyT3V0cHV0TmFtZSkpIHtcbiAgICAgIGlmIChwcm9wcy5yb3V0ZXJPdXRwdXROYW1lLmxlbmd0aCA+IDEyOCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSb3V0ZXJPdXRwdXROYW1lTGVuZ3RoYCwgYFJvdXRlciBvdXRwdXQgbmFtZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTI4IGNoYXJhY3RlcnMsIGdvdCAke3Byb3BzLnJvdXRlck91dHB1dE5hbWUubGVuZ3RofWAsIHRoaXMpO1xuICAgICAgfVxuICAgICAgaWYgKCEvXlthLXpBLVowLTktXSskLy50ZXN0KHByb3BzLnJvdXRlck91dHB1dE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dE5hbWVGb3JtYXRgLCBgUm91dGVyIG91dHB1dCBuYW1lIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zLCBnb3QgJyR7cHJvcHMucm91dGVyT3V0cHV0TmFtZX0nYCwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWF4aW11bSBiaXRyYXRlXG4gICAgaWYgKCFwcm9wcy5tYXhpbXVtQml0cmF0ZS5pc1VucmVzb2x2ZWQoKSAmJiBwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpIDwgMTAwMDAwMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0TWluQml0cmF0ZWAsIGBNYXhpbXVtIGJpdHJhdGUgbXVzdCBiZSBhdCBsZWFzdCAxLDAwMCwwMDAgYml0cy9zICgxIE1icHMpLCBnb3QgJHtwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpfWAsIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGJpdHJhdGUgZG9lcyBub3QgZXhjZWVkIHRpZXIgbGltaXRcbiAgICBjb25zdCByZXNvbHZlZFRpZXIgPSBwcm9wcy50aWVyID8/IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwO1xuICAgIGNvbnN0IHRpZXJNYnBzID0gUm91dGVyT3V0cHV0LnRpZXJMaW1pdE1icHMocmVzb2x2ZWRUaWVyKTtcbiAgICBpZiAoZXhjZWVkc1JvdXRlclRpZXJCaXRyYXRlKHRpZXJNYnBzLCBwcm9wcy5tYXhpbXVtQml0cmF0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dEJpdHJhdGVFeGNlZWRzVGllcmAsIGBNYXhpbXVtIGJpdHJhdGUgJHtwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpIC8gMV8wMDBfMDAwfSBNYnBzIGV4Y2VlZHMgdGhlICR7cmVzb2x2ZWRUaWVyLnZhbHVlfSB0aWVyIGxpbWl0IG9mICR7dGllck1icHN9IE1icHNgLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtYWludGVuYW5jZSB0aW1lIGZvcm1hdFxuICAgIGlmIChwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHZhbGlkYXRlTWFpbnRlbmFuY2VUaW1lKHByb3BzLm1haW50ZW5hbmNlQ29uZmlndXJhdGlvbi50aW1lKTtcbiAgICB9XG5cbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgdGFyZ2V0UmVnaW9uID0gcHJvcHMucmVnaW9uTmFtZSA/PyBzdGFjay5yZWdpb247XG5cbiAgICAvLyBXaWxkY2FyZCB0aGUgaWQg4oCUIHBpbm5pbmcgdGhlIGxpdmUgQVJOIChhdHRyQXJuKSB3b3VsZCBjcmVhdGUgYSByb2xlIOKGkiByb3V0ZXItb3V0cHV0IOKGkiByb2xlIGN5Y2xlLlxuICAgIGNvbnN0IHJvdXRlck91dHB1dEFybiA9IHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnbWVkaWFjb25uZWN0JyxcbiAgICAgIHJlZ2lvbjogdGFyZ2V0UmVnaW9uLFxuICAgICAgcmVzb3VyY2U6ICdyb3V0ZXJPdXRwdXQnLFxuICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29uZmlnQmluZCA9IHByb3BzLmNvbmZpZ3VyYXRpb24uX2JpbmQodGhpcywgcm91dGVyT3V0cHV0QXJuKTtcblxuICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZWdpb24gc3BlY2lmaWVkIGlzIGFsc28gY29tcGF0aWJsZSB3aXRoIEFaIGNvbmZpZ3VyZWQgZm9yIHNvbWUgb2YgdGhlIFJvdXRlciBPdXRwdXRzIGNvbmZpZ3VyYXRpb25zXG4gICAgaWYgKGNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZSAmJiAhY29uZmlnQmluZC5hdmFpbGFiaWxpdHlab25lLnN0YXJ0c1dpdGgodGFyZ2V0UmVnaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0QXpSZWdpb25NaXNtYXRjaGAsIGBBdmFpbGFiaWxpdHkgem9uZSAnJHtjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmV9JyBtdXN0IGJlIHdpdGhpbiByZWdpb24gJyR7dGFyZ2V0UmVnaW9ufSdgLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZXJPdXRwdXQgPSBuZXcgQ2ZuUm91dGVyT3V0cHV0KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgbWF4aW11bUJpdHJhdGU6IHByb3BzLm1heGltdW1CaXRyYXRlLnRvQnBzKCksXG4gICAgICByb3V0aW5nU2NvcGU6IHByb3BzLnJvdXRpbmdTY29wZS52YWx1ZSxcbiAgICAgIHRpZXI6IChwcm9wcy50aWVyID8/IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwKS52YWx1ZSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IGNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZSwgLy8gT25seSBzcGVjaWZpZWQgZm9yIE1lZGlhQ29ubmVjdCBGbG93IGFuZCBNZWRpYUxpdmUgaW5wdXRzICh3aXRoIG5vIGNvbm5lY3Rpb24pLlxuICAgICAgbWFpbnRlbmFuY2VDb25maWd1cmF0aW9uOiBwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24gPyB7XG4gICAgICAgIHByZWZlcnJlZERheVRpbWU6IHByb3BzLm1haW50ZW5hbmNlQ29uZmlndXJhdGlvbixcbiAgICAgIH0gOiB7XG4gICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ0JpbmQuY29uZmlnLFxuICAgICAgcmVnaW9uTmFtZTogdGFyZ2V0UmVnaW9uLFxuICAgICAgdGFnczogcHJvcHMudGFncyA/IHJlbmRlclRhZ3MocHJvcHMudGFncykgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlck91dHB1dEFybiA9IHJvdXRlck91dHB1dC5hdHRyQXJuO1xuICAgIHRoaXMucm91dGVyT3V0cHV0TmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIHRoaXMucm91dGVyT3V0cHV0SWQgPSByb3V0ZXJPdXRwdXQuYXR0cklkO1xuICAgIHRoaXMuaXBBZGRyZXNzID0gcm91dGVyT3V0cHV0LmF0dHJJcEFkZHJlc3M7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSByb3V0ZXJPdXRwdXQuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLnVwZGF0ZWRBdCA9IHJvdXRlck91dHB1dC5hdHRyVXBkYXRlZEF0O1xuXG4gICAgLy8gV2l0aG91dCB0aGlzIHRoZSByb3V0ZXIgaW5wdXQgY2FuIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZVxuICAgIC8vIHBvbGljeSBpcyBhdHRhY2hlZCAoXCJhY2Nlc3MgZGVuaWVkXCIgYXQgY3JlYXRlIHRpbWUpLiBPcmRlcmluZyB0aGUgZ3JhbnQgYmVmb3JlIHRoZVxuICAgIC8vIHJvdXRlciBpbnB1dCBwdWxscyB0aGUgcG9saWN5IGluIGFzIGEgZGVwZW5kZW5jeS5cbiAgICBjb25maWdCaW5kLmdyYW50Py5hcHBseUJlZm9yZShyb3V0ZXJPdXRwdXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RSb3V0ZXJPdXRwdXRJZChyb3V0ZXJPdXRwdXRBcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnNlZCA9IEFybi5zcGxpdChyb3V0ZXJPdXRwdXRBcm4sIEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWU7XG4gIGlmIChwYXJzZWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgIGxpdGBJbnZhbGlkUm91dGVyT3V0cHV0QXJuYCxcbiAgICAgIGBDb3VsZCBub3QgcGFyc2UgUm91dGVyIE91dHB1dCBBUk46ICR7cm91dGVyT3V0cHV0QXJufS4gRXhwZWN0ZWQgZm9ybWF0OiBhcm46PHBhcnRpdGlvbj46bWVkaWFjb25uZWN0OjxyZWdpb24+OjxhY2NvdW50Pjpyb3V0ZXJPdXRwdXQ6PGlkPmAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuIl19
791
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLW91dHB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJvdXRlci1vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQXNJO0FBRXRJLCtEQUEwRDtBQUUxRCxtRUFBK0Q7QUFFL0QsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFNMUUscUNBQStJO0FBRS9JOztHQUVHO0FBQ0gsTUFBYSwyQkFBMkI7SUFtQkY7O0lBbEJwQyxtQ0FBbUM7SUFDNUIsTUFBTSxDQUFVLEdBQUcsR0FBRyxJQUFJLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLHlDQUF5QztJQUNsQyxNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEUsOENBQThDO0lBQ3ZDLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRixnREFBZ0Q7SUFDekMsTUFBTSxDQUFVLFlBQVksR0FBRyxJQUFJLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXRGOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBYTtRQUM1QixPQUFPLElBQUksMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDL0M7SUFFRCw2Q0FBNkM7SUFDN0MsWUFBb0MsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7S0FBSTtJQUVyRCwrQkFBK0I7SUFDeEIsUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQjs7QUF4Qkgsa0VBeUJDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGdCQUFnQjtJQWlCUzs7SUFoQnBDLHFCQUFxQjtJQUNkLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2RSxvQkFB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V0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzdDOztZQWpLVSx1REFBWTs7Ozs7QUFBWixvQ0FBWTtBQW9LekIsU0FBUyxxQkFBcUIsQ0FBQyxlQUF1QjtJQUNwRCxNQUFNLE1BQU0sR0FBRyxpQkFBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsdUJBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUN0RixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUkscUNBQXVCLENBQy9CLElBQUEsc0JBQUcsRUFBQSx3QkFBd0IsRUFDM0Isc0NBQXNDLGVBQWUsc0ZBQXNGLENBQzVJLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQml0cmF0ZSwgSVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXJuLCBBcm5Gb3JtYXQsIER1cmF0aW9uLCBMYXp5LCBOYW1lcywgUmVzb3VyY2UsIFN0YWNrLCBUb2tlbiwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgTWV0cmljT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IE1ldHJpYywgVW5pdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB0eXBlIHsgR3JhbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmblJvdXRlck91dHB1dCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1tZWRpYWNvbm5lY3QnO1xuaW1wb3J0IHR5cGUgeyBJUm91dGVyT3V0cHV0UmVmLCBSb3V0ZXJPdXRwdXRSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFjb25uZWN0JztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSUZsb3cgfSBmcm9tICcuL2Zsb3cnO1xuaW1wb3J0IHR5cGUgeyBNYWludGVuYW5jZUNvbmZpZ3VyYXRpb24sIEZvcndhcmRFcnJvckNvcnJlY3Rpb24sIFJvdXRpbmdTY29wZSB9IGZyb20gJy4vcm91dGVyLWlucHV0JztcbmltcG9ydCB0eXBlIHsgSVJvdXRlck5ldHdvcmtJbnRlcmZhY2UgfSBmcm9tICcuL3JvdXRlci1uZXR3b3JrLWludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE1lZGlhTGl2ZVBpcGVsaW5lLCBSb3V0ZXJTcnRFbmNyeXB0aW9uLCBUcmFuc2l0RW5jcnlwdGlvbiB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IHJlbmRlclRhZ3MsIGV4Y2VlZHNSb3V0ZXJUaWVyQml0cmF0ZSwgcmVzb2x2ZVJvdXRlclNydEVuY3J5cHRpb24sIHJlc29sdmVUcmFuc2l0RW5jcnlwdGlvbiwgdmFsaWRhdGVNYWludGVuYW5jZVRpbWUgfSBmcm9tICcuL3NoYXJlZCc7XG5cbi8qKlxuICogUHJvdG9jb2wgb3B0aW9ucyBhdmFpbGFibGUgZm9yIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyB7XG4gIC8qKiBSZWFsLXRpbWUgVHJhbnNwb3J0IFByb3RvY29sICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlRQID0gbmV3IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucygnUlRQJyk7XG4gIC8qKiBSZWxpYWJsZSBJbnRlcm5ldCBTdHJlYW0gVHJhbnNwb3J0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUklTVCA9IG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMoJ1JJU1QnKTtcbiAgLyoqIFNlY3VyZSBSZWxpYWJsZSBUcmFuc3BvcnQgLSBDYWxsZXIgbW9kZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNSVF9DQUxMRVIgPSBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zKCdTUlRfQ0FMTEVSJyk7XG4gIC8qKiBTZWN1cmUgUmVsaWFibGUgVHJhbnNwb3J0IC0gTGlzdGVuZXIgbW9kZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNSVF9MSVNURU5FUiA9IG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMoJ1NSVF9MSVNURU5FUicpO1xuXG4gIC8qKlxuICAgKiBVc2UgYSBjdXN0b20gcHJvdG9jb2wgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBwcm90b2NvbCBzdHJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyB7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnModmFsdWUpO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB2YWx1ZSBUaGUgcHJvdG9jb2wgc3RyaW5nIHZhbHVlICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmcpIHt9XG5cbiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFJvdXRpbmcgdGllciB0aGF0IGRldGVybWluZXMgdGhlIG1heGltdW0gYml0cmF0ZSAoaW4gTWJwcykgZm9yIGEgUm91dGVyIE91dHB1dC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlck91dHB1dFRpZXIge1xuICAvKiogVXAgdG8gMTAwIE1icHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPVVRQVVRfMTAwID0gbmV3IFJvdXRlck91dHB1dFRpZXIoJ09VVFBVVF8xMDAnKTtcbiAgLyoqIFVwIHRvIDUwIE1icHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPVVRQVVRfNTAgPSBuZXcgUm91dGVyT3V0cHV0VGllcignT1VUUFVUXzUwJyk7XG4gIC8qKiBVcCB0byAyMCBNYnBzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT1VUUFVUXzIwID0gbmV3IFJvdXRlck91dHB1dFRpZXIoJ09VVFBVVF8yMCcpO1xuXG4gIC8qKlxuICAgKiBVc2UgYSBjdXN0b20gdGllciB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHRpZXIgc3RyaW5nIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBSb3V0ZXJPdXRwdXRUaWVyIHtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFRpZXIodmFsdWUpO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB2YWx1ZSBUaGUgdGllciBzdHJpbmcgdmFsdWUgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZykge31cblxuICAvKiogUmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlICovXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBSb3V0ZXIgT3V0cHV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlck91dHB1dCBleHRlbmRzIElSZXNvdXJjZSwgSVJvdXRlck91dHB1dFJlZiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUCBhZGRyZXNzIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpcEFkZHJlc3M6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSByb3V0ZXIgb3V0cHV0IHdhcyBjcmVhdGVkLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgcm91dGVyIG91dHB1dCB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0aGlzIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIFJvdXRlciBvdXRwdXQgbWV0cmljcyBhcmUgZGltZW5zaW9uZWQgYnkgYFJvdXRlck91dHB1dEFSTmAuIFNlZSB0aGUgTWVkaWFDb25uZWN0XG4gICAqIGRvY3VtZW50YXRpb24gZm9yIGF2YWlsYWJsZSBtZXRyaWMgbmFtZXMgKGUuZy4gYFJvdXRlck91dHB1dEJpdFJhdGVgLFxuICAgKiBgUm91dGVyT3V0cHV0VG90YWxQYWNrZXRzYCkuXG4gICAqL1xuICBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIGJpdHJhdGUgb2YgdGhlIHJvdXRlciBvdXRwdXQncyBwYXlsb2FkLlxuICAgKiBAZGVmYXVsdCAtIGF2ZXJhZ2Ugb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNCaXRyYXRlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgc2VudCBieSB0aGUgcm91dGVyIG91dHB1dC5cbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNUb3RhbFBhY2tldHMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSByb3V0ZXIgb3V0cHV0IGNvbm5lY3Rpb24gc3RhdGUgKDEgY29ubmVjdGVkLCAwIGRpc2Nvbm5lY3RlZCkuIEFwcGxpZXMgdG8gU1JUIG91dHB1dHMgb25seS5cbiAgICogQGRlZmF1bHQgLSBtaW5pbXVtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljQ29ubmVjdGVkKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIHJldHJhbnNtaXR0ZWQgcGFja2V0cyByZXF1ZXN0ZWQgdGhyb3VnaCBhdXRvbWF0aWMgcmVwZWF0IHJlcXVlc3QgKEFSUSkuXG4gICAqIEFwcGxpZXMgdG8gUklTVCBhbmQgU1JUIG91dHB1dHMgb25seS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNBcnFSZXF1ZXN0cyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBSb3V0ZXIgT3V0cHV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVyT3V0cHV0UHJvcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgUm91dGVyIE91dHB1dFxuICAgKiBAZGVmYXVsdCAtIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5XG4gICAqL1xuICByZWFkb25seSByb3V0ZXJPdXRwdXROYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG1heGltdW0gYml0cmF0ZSBmb3IgdGhlIHJvdXRlciBvdXRwdXQuICovXG4gIHJlYWRvbmx5IG1heGltdW1CaXRyYXRlOiBCaXRyYXRlO1xuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvdXRlciBvdXRwdXQgaXMgY29uZmlndXJlZCBmb3IgUmVnaW9uYWwgb3IgZ2xvYmFsIHJvdXRpbmcuICovXG4gIHJlYWRvbmx5IHJvdXRpbmdTY29wZTogUm91dGluZ1Njb3BlO1xuICAvKipcbiAgICogU2VsZWN0IGEgdGllciBiYXNlZCBvbiB5b3VyIG1heGltdW0gYml0cmF0ZSByZXF1aXJlbWVudHMuXG4gICAqIEBkZWZhdWx0IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwXG4gICAqL1xuICByZWFkb25seSB0aWVyPzogUm91dGVyT3V0cHV0VGllcjtcbiAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBSb3V0ZXIgT3V0cHV0IChzdGFuZGFyZCwgTWVkaWFDb25uZWN0IEZsb3csIG9yIE1lZGlhTGl2ZSkgKi9cbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbjogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIE1haW50ZW5hbmNlIHdpbmRvdyBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtYWludGVuYW5jZSB3aW5kb3cgd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBtYWludGVuYW5jZUNvbmZpZ3VyYXRpb24/OiBNYWludGVuYW5jZUNvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgQVdTIFJlZ2lvbiB3aGVyZSB0aGUgcm91dGVyIG91dHB1dCBpcyBsb2NhdGVkLlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHRzIHRvIHRoZSBzYW1lIHJlZ2lvbiBhcyBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRhZ3MgdG8gYWRkIHRvIHRoZSBSb3V0ZXIgT3V0cHV0XG4gICAqIEBkZWZhdWx0IC0gTm8gdGFnZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIFJvdXRlciBPdXRwdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVyT3V0cHV0QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBUaGUgbmFtZSBpcyBub3QgZW5jb2RlZCBpbiB0aGUgQVJOICh0aGUgQVJOIGNvbnRhaW5zIG9ubHkgdGhlIHNlcnZpY2UtZ2VuZXJhdGVkIElEKSxcbiAgICogc28gcHJvdmlkZSBpdCBoZXJlIGlmIHlvdSBuZWVkIHRvIGFjY2VzcyBgcm91dGVyT3V0cHV0TmFtZWAgb24gdGhlIGltcG9ydGVkIGNvbnN0cnVjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByb3V0ZXJPdXRwdXROYW1lIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIGltcG9ydGVkIGNvbnN0cnVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBhcnNlZCBmcm9tIHRoZSBBUk4gd2hlbiBhdmFpbGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFJUUCBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciBvdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnRwT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIGZvciBSVFAgdHJhZmZpYyAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZztcbiAgLyoqIFBvcnQgbnVtYmVyIGZvciBSVFAgdHJhZmZpYyAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBGb3J3YXJkIEVycm9yIENvcnJlY3Rpb24gc2V0dGluZ1xuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZDsgd2hlbiBvbWl0dGVkLCBNZWRpYUNvbm5lY3QgYXBwbGllcyBGb3J3YXJkRXJyb3JDb3JyZWN0aW9uLkRJU0FCTEVEIGF0IGRlcGxveSB0aW1lXG4gICAqL1xuICByZWFkb25seSBmb3J3YXJkRXJyb3JDb3JyZWN0aW9uPzogRm9yd2FyZEVycm9yQ29ycmVjdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBSSVNUIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIG91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSaXN0T3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIGZvciBSSVNUIHRyYWZmaWMgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBQb3J0IG51bWJlciBmb3IgUklTVCB0cmFmZmljICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBTUlQgTGlzdGVuZXIgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3Igb3V0cHV0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNydExpc3RlbmVyT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBQb3J0IG51bWJlciBmb3IgU1JUIGxpc3RlbmVyICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgLyoqIE1pbmltdW0gbGF0ZW5jeSBmb3IgU1JUICovXG4gIHJlYWRvbmx5IG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgU1JUIHN0cmVhbXNcbiAgICogQGRlZmF1bHQgLSBObyBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgU1JUIENhbGxlciBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciBvdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3J0Q2FsbGVyT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIHRvIGNvbm5lY3QgdG8gKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBEZXN0aW5hdGlvbiBwb3J0IHRvIGNvbm5lY3QgdG8gKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25Qb3J0OiBudW1iZXI7XG4gIC8qKiBNaW5pbXVtIGxhdGVuY3kgZm9yIFNSVCAqL1xuICByZWFkb25seSBtaW5pbXVtTGF0ZW5jeTogRHVyYXRpb247XG4gIC8qKlxuICAgKiBPcHRpb25hbCBzdHJlYW0gSUQgZm9yIFNSVCBjb25uZWN0aW9uXG4gICAqIEBkZWZhdWx0IC0gTm8gc3RyZWFtIElEXG4gICAqL1xuICByZWFkb25seSBzdHJlYW1JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgU1JUIHN0cmVhbXNcbiAgICogQGRlZmF1bHQgLSBObyBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogRmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgUm91dGVyIE91dHB1dCBwcm90b2NvbCBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBTdXBwb3J0ZWQgcHJvdG9jb2xzOiBSVFAsIFJJU1QsIFNSVCAoTGlzdGVuZXIgYW5kIENhbGxlcikuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gUlRQIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wucnRwKHtcbiAgICogICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgcG9ydDogNTAwMCxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBSVFAgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBSVFBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcnRwKHByb3BzOiBSdHBPdXRwdXRQcm90b2NvbFByb3BzKTogUm91dGVyT3V0cHV0UHJvdG9jb2wge1xuICAgIFJvdXRlck91dHB1dFByb3RvY29sLnZhbGlkYXRlUG9ydChwcm9wcy5wb3J0KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFByb3RvY29sKFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucy5SVFAsIHtcbiAgICAgIHJ0cDoge1xuICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6IHByb3BzLmRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgICAgZGVzdGluYXRpb25Qb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBmb3J3YXJkRXJyb3JDb3JyZWN0aW9uOiBwcm9wcy5mb3J3YXJkRXJyb3JDb3JyZWN0aW9uLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBSSVNUIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wucmlzdCh7XG4gICAqICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiAnMTAuMC4wLjEnLFxuICAgKiAgICAgIHBvcnQ6IDUwMDAsXG4gICAqICAgIH0pO1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgUklTVCBwcm90b2NvbCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFJJU1RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmlzdChwcm9wczogUmlzdE91dHB1dFByb3RvY29sUHJvcHMpOiBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gICAgUm91dGVyT3V0cHV0UHJvdG9jb2wudmFsaWRhdGVQb3J0KHByb3BzLnBvcnQpO1xuICAgIHJldHVybiBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2woUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zLlJJU1QsIHtcbiAgICAgIHJpc3Q6IHtcbiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiBwcm9wcy5kZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgIGRlc3RpbmF0aW9uUG9ydDogcHJvcHMucG9ydCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFNSVCBMaXN0ZW5lciBwcm90b2NvbCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIFJvdXRlck91dHB1dFByb3RvY29sLnNydExpc3RlbmVyKHtcbiAgICogICAgICBwb3J0OiA1MDAwLFxuICAgKiAgICAgIG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbi5taWxsaXMoMTI1KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTUlQgTGlzdGVuZXIgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBTUlQgTGlzdGVuZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3J0TGlzdGVuZXIocHJvcHM6IFNydExpc3RlbmVyT3V0cHV0UHJvdG9jb2xQcm9wcyk6IFJvdXRlck91dHB1dFByb3RvY29sIHtcbiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC52YWxpZGF0ZVBvcnQocHJvcHMucG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbChSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMuU1JUX0xJU1RFTkVSLCB7XG4gICAgICBzcnRMaXN0ZW5lcjoge1xuICAgICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBtaW5pbXVtTGF0ZW5jeU1pbGxpc2Vjb25kczogcHJvcHMubWluaW11bUxhdGVuY3kudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgIH0sXG4gICAgfSwgcHJvcHMuZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBTUlQgQ2FsbGVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wuc3J0Q2FsbGVyKHtcbiAgICogICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgZGVzdGluYXRpb25Qb3J0OiA1MDAwLFxuICAgKiAgICAgIG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbi5taWxsaXMoMTI1KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTUlQgQ2FsbGVyIHByb3RvY29sIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0UHJvdG9jb2wgaW5zdGFuY2UgY29uZmlndXJlZCBmb3IgU1JUIENhbGxlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcnRDYWxsZXIocHJvcHM6IFNydENhbGxlck91dHB1dFByb3RvY29sUHJvcHMpOiBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gICAgUm91dGVyT3V0cHV0UHJvdG9jb2wudmFsaWRhdGVTcnRDYWxsZXJQb3J0KHByb3BzLmRlc3RpbmF0aW9uUG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbChSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMuU1JUX0NBTExFUiwge1xuICAgICAgc3J0Q2FsbGVyOiB7XG4gICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogcHJvcHMuZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblBvcnQ6IHByb3BzLmRlc3RpbmF0aW9uUG9ydCxcbiAgICAgICAgbWluaW11bUxhdGVuY3lNaWxsaXNlY29uZHM6IHByb3BzLm1pbmltdW1MYXRlbmN5LnRvTWlsbGlzZWNvbmRzKCksXG4gICAgICAgIHN0cmVhbUlkOiBwcm9wcy5zdHJlYW1JZCxcbiAgICAgIH0sXG4gICAgfSwgcHJvcHMuZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgcG9ydCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICgzMDAwLTMwMDAwKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVQb3J0KHBvcnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHBvcnQpICYmIChwb3J0IDwgMzAwMCB8fCBwb3J0ID4gMzAwMDApKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dFBvcnRSYW5nZWAsIGBQb3J0IG11c3QgYmUgYmV0d2VlbiAzMDAwIGFuZCAzMDAwMCwgZ290ICR7cG9ydH1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBTUlQgQ2FsbGVyIHBvcnQgaXMgd2l0aGluIHRoZSB2YWxpZCByYW5nZSAoMC02NTUzNSlcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlU3J0Q2FsbGVyUG9ydChwb3J0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwb3J0KSAmJiAocG9ydCA8IDAgfHwgcG9ydCA+IDY1NTM1KSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBTcnRDYWxsZXJQb3J0UmFuZ2VgLCBgU1JUIENhbGxlciBwb3J0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2NTUzNSwgZ290ICR7cG9ydH1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9wcm90b2NvbE5hbWU6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuY3J5cHRpb24/OiBSb3V0ZXJTcnRFbmNyeXB0aW9uO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHJvdG9jb2xOYW1lOiBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMsXG4gICAgY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHksXG4gICAgZW5jcnlwdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb24sXG4gICkge1xuICAgIHRoaXMuX3Byb3RvY29sTmFtZSA9IHByb3RvY29sTmFtZTtcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5fZW5jcnlwdGlvbiA9IGVuY3J5cHRpb247XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGlzIHByb3RvY29sIHRvIGl0cyBDRk4tcmVhZHkgZm9ybS4gUmV0dXJucyB0aGUgcHJvdG9jb2wgaWRlbnRpZmllclxuICAgKiBhbmQgdGhlIENGTiBjb25maWd1cmF0aW9uIHNoYXBlIHdpdGggU1JUIGVuY3J5cHRpb24gYXV0by1yb2xlIG1hdGVyaWFsaXplZCBpZiBuZWVkZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAgICAgICAgICAgICBDb25zdHJ1Y3QgdGhhdCBzY29wZXMgdGhlIGF1dG8tY3JlYXRlZCBlbmNyeXB0aW9uIHJvbGVcbiAgICogQHBhcmFtIHJvdXRlck91dHB1dEFybiAgIE9wdGlvbmFsIEFSTiBvZiB0aGUgY29uc3VtaW5nIHJvdXRlciBvdXRwdXQg4oCUIHdoZW4gcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZXMgdGhlIGF1dG8tY3JlYXRlZCBlbmNyeXB0aW9uIHJvbGUncyB0cnVzdCBwb2xpY3kuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlck91dHB1dEFybj86IHN0cmluZyk6IHtcbiAgICBuYW1lOiBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnM7XG4gICAgY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHk7XG4gICAgZ3JhbnQ/OiBHcmFudDtcbiAgfSB7XG4gICAgaWYgKCF0aGlzLl9lbmNyeXB0aW9uKSB7XG4gICAgICByZXR1cm4geyBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsIGNvbmZpZzogdGhpcy5fY29uZmlnIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyBjb25maWc6IGVuY3J5cHRpb25Db25maWd1cmF0aW9uLCBncmFudCB9ID0gcmVzb2x2ZVJvdXRlclNydEVuY3J5cHRpb24oc2NvcGUsICdFbmNyeXB0aW9uUm9sZScsIHRoaXMuX2VuY3J5cHRpb24sIHJvdXRlck91dHB1dEFybik7XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnNydExpc3RlbmVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsXG4gICAgICAgIGNvbmZpZzogeyBzcnRMaXN0ZW5lcjogeyAuLi50aGlzLl9jb25maWcuc3J0TGlzdGVuZXIsIGVuY3J5cHRpb25Db25maWd1cmF0aW9uIH0gfSxcbiAgICAgICAgZ3JhbnQsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnNydENhbGxlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdGhpcy5fcHJvdG9jb2xOYW1lLFxuICAgICAgICBjb25maWc6IHsgc3J0Q2FsbGVyOiB7IC4uLnRoaXMuX2NvbmZpZy5zcnRDYWxsZXIsIGVuY3J5cHRpb25Db25maWd1cmF0aW9uIH0gfSxcbiAgICAgICAgZ3JhbnQsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsIGNvbmZpZzogdGhpcy5fY29uZmlnIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBzdGFuZGFyZCBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFyZE91dHB1dENvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKiBOZXR3b3JrIGludGVyZmFjZSBmb3IgdGhlIFJvdXRlciBPdXRwdXQgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0ludGVyZmFjZTogSVJvdXRlck5ldHdvcmtJbnRlcmZhY2U7XG4gIC8qKiBQcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciB0aGUgb3V0cHV0ICovXG4gIHJlYWRvbmx5IHByb3RvY29sOiBSb3V0ZXJPdXRwdXRQcm90b2NvbDtcbiAgLyoqXG4gICAqIFRoZSBhdmFpbGFiaWxpdHkgem9uZSB3aGVyZSB0aGUgcm91dGVyIG91dHB1dCBpcyBsb2NhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFzc2lnbmVkIGJ5IHRoZSBNZWRpYUNvbm5lY3Qgc2VydmljZVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUxpdmUgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggc3BlY2lmaWMgaW5wdXQgY29ubmVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhTGl2ZUlucHV0Q29ubmVjdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgTWVkaWFMaXZlIGlucHV0IHRvIHNlbmQgb3V0cHV0IHRvLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIHdpbGwgY2hhbmdlIHRvIGFjY2VwdCBhbiBJSW5wdXRSZWYgKHR5cGVkIE1lZGlhTGl2ZSBJbnB1dCByZWZlcmVuY2UpXG4gICAqIHdoZW4gdGhlIEBhd3MtY2RrL2F3cy1tZWRpYWxpdmUtYWxwaGEgTDIgY29uc3RydWN0IGlzIHJlbGVhc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVkaWFMaXZlSW5wdXRBcm46IHN0cmluZztcbiAgLyoqIFBpcGVsaW5lIElEIGZvciBNZWRpYUxpdmUgaW5wdXQgKi9cbiAgcmVhZG9ubHkgbWVkaWFMaXZlUGlwZWxpbmVJZDogTWVkaWFMaXZlUGlwZWxpbmU7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIE1lZGlhTGl2ZSBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFMaXZlTm9JbnB1dENvbm5lY3Rpb25Qcm9wcyB7XG4gIC8qKiBBdmFpbGFiaWxpdHkgem9uZSBmb3IgdGhlIHJvdXRlciBvdXRwdXQgd2hlbiBub3QgY29ubmVjdGluZyB0byBhIHNwZWNpZmljIGlucHV0ICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd0Nvbm5lY3Rpb25Qcm9wcyB7XG4gIC8qKiBNZWRpYUNvbm5lY3QgRmxvdyB0byBzZW5kIG91dHB1dCB0byAqL1xuICByZWFkb25seSBmbG93OiBJRmxvdztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd05vQ29ubmVjdGlvblByb3BzIHtcbiAgLyoqIEF2YWlsYWJpbGl0eSB6b25lIGZvciB0aGUgcm91dGVyIG91dHB1dCB3aGVuIG5vdCBjb25uZWN0aW5nIHRvIGEgc3BlY2lmaWMgZmxvdyAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgY2xhc3MgZm9yIGNyZWF0aW5nIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgc3RhbmRhcmQgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggYSBzaW5nbGUgcHJvdG9jb2xcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgZGVjbGFyZSBjb25zdCBuZXR3b3JrSW50ZXJmYWNlOiBSb3V0ZXJOZXR3b3JrSW50ZXJmYWNlO1xuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLnN0YW5kYXJkKHtcbiAgICogICAgICBuZXR3b3JrSW50ZXJmYWNlLFxuICAgKiAgICAgIHByb3RvY29sOiBSb3V0ZXJPdXRwdXRQcm90b2NvbC5ydHAoe1xuICAgKiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiAnMTAuMC4wLjEnLFxuICAgKiAgICAgICAgcG9ydDogNTAwMCxcbiAgICogICAgICB9KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTdGFuZGFyZCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3Igc3RhbmRhcmQgc2V0dXBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3RhbmRhcmQocHJvcHM6IFN0YW5kYXJkT3V0cHV0Q29uZmlndXJhdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTdGFuZGFyZFJvdXRlck91dHB1dENvbmZpZyhwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTWVkaWFMaXZlIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbiB3aXRoIGEgc3BlY2lmaWMgaW5wdXQgY29ubmVjdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB0aGUgTWVkaWFMaXZlIGlucHV0IGFscmVhZHkgZXhpc3RzIGFuZCB5b3Ugd2FudCB0byBjb25uZWN0IGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLm1lZGlhTGl2ZUlucHV0KHtcbiAgICogICAgICBtZWRpYUxpdmVJbnB1dEFybjogJ2Fybjphd3M6bWVkaWFsaXZlOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6aW5wdXQ6MTIzNDU2NycsXG4gICAqICAgICAgbWVkaWFMaXZlUGlwZWxpbmVJZDogTWVkaWFMaXZlUGlwZWxpbmUuUElQRUxJTkVfMCxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUxpdmUgaW5wdXQgY29ubmVjdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIE1lZGlhTGl2ZSBzZXR1cCB3aXRoIGlucHV0IGNvbm5lY3Rpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWVkaWFMaXZlSW5wdXQocHJvcHM6IE1lZGlhTGl2ZUlucHV0Q29ubmVjdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dENvbmZpZyh7XG4gICAgICBtZWRpYUxpdmVJbnB1dEFybjogcHJvcHMubWVkaWFMaXZlSW5wdXRBcm4sXG4gICAgICBtZWRpYUxpdmVQaXBlbGluZUlkOiBwcm9wcy5tZWRpYUxpdmVQaXBlbGluZUlkLFxuICAgICAgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogcHJvcHMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUxpdmUgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgYSBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHlvdSB3YW50IHRvIHNldCB1cCB0aGUgcm91dGVyIG91dHB1dCBiZWZvcmUgdGhlIE1lZGlhTGl2ZSBpbnB1dCBleGlzdHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ubWVkaWFMaXZlSW5wdXRXaXRob3V0Q29ubmVjdGlvbih7XG4gICAqICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogJ3VzLWVhc3QtMWEnLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhTGl2ZSBubyBpbnB1dCBjb25uZWN0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3IgTWVkaWFMaXZlIHNldHVwIHdpdGhvdXQgaW5wdXQgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUxpdmVJbnB1dFdpdGhvdXRDb25uZWN0aW9uKHByb3BzOiBNZWRpYUxpdmVOb0lucHV0Q29ubmVjdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dENvbmZpZyhcbiAgICAgIHsgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogcHJvcHMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbiB9LFxuICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1lZGlhQ29ubmVjdCBGbG93IFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbiB3aXRoIGEgc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHRoZSB0YXJnZXQgZmxvdyBhbHJlYWR5IGV4aXN0cyBhbmQgeW91IHdhbnQgdG8gY29ubmVjdCBpbW1lZGlhdGVseS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgZGVjbGFyZSBjb25zdCBmbG93OiBGbG93O1xuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLm1lZGlhQ29ubmVjdEZsb3coe1xuICAgKiAgICAgIGZsb3csXG4gICAqICAgIH0pO1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgTWVkaWFDb25uZWN0IEZsb3cgY29ubmVjdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIE1lZGlhQ29ubmVjdCBGbG93IHNldHVwIHdpdGggZmxvdyBjb25uZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1lZGlhQ29ubmVjdEZsb3cocHJvcHM6IE1lZGlhQ29ubmVjdEZsb3dDb25uZWN0aW9uUHJvcHMpOiBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRDb25maWcoe1xuICAgICAgZmxvdzogcHJvcHMuZmxvdyxcbiAgICAgIGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb246IHByb3BzLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgYSBzcGVjaWZpYyBmbG93IGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIHdoZW4geW91IHdhbnQgdG8gc2V0IHVwIHRoZSByb3V0ZXIgb3V0cHV0IGJlZm9yZSB0aGUgdGFyZ2V0IGZsb3cgZXhpc3RzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLm1lZGlhQ29ubmVjdEZsb3dXaXRob3V0Q29ubmVjdGlvbih7XG4gICAqICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogJ3VzLWVhc3QtMWEnLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhQ29ubmVjdCBGbG93IG5vIGNvbm5lY3Rpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBzZXR1cCB3aXRob3V0IGZsb3cgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUNvbm5lY3RGbG93V2l0aG91dENvbm5lY3Rpb24ocHJvcHM6IE1lZGlhQ29ubmVjdEZsb3dOb0Nvbm5lY3Rpb25Qcm9wcyk6IFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dENvbmZpZyhcbiAgICAgIHsgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogcHJvcHMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbiB9LFxuICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhpcyBjb25maWd1cmF0aW9uIHRvIGl0cyBDbG91ZEZvcm1hdGlvbiBzaGFwZS4gQ2FsbGVkIGJ5IHRoZSBSb3V0ZXJPdXRwdXRcbiAgICogY29uc3RydWN0b3Ig4oCUIGVhY2ggY29uY3JldGUgc3ViY2xhc3Mgc3VwcGxpZXMgaXRzIG93biB2YXJpYW50LXNwZWNpZmljIHJlbmRlcmluZy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKToge1xuICAgIGNvbmZpZzogQ2ZuUm91dGVyT3V0cHV0LlJvdXRlck91dHB1dENvbmZpZ3VyYXRpb25Qcm9wZXJ0eTsgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZzsgZ3JhbnQ/OiBHcmFudDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb25jcmV0ZSB2YXJpYW50OiBzdGFuZGFyZCAoc2luZ2xlLXByb3RvY29sKSByb3V0ZXIgb3V0cHV0IGNvbmZpZ3VyYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgU3RhbmRhcmRSb3V0ZXJPdXRwdXRDb25maWcgZXh0ZW5kcyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogU3RhbmRhcmRPdXRwdXRDb25maWd1cmF0aW9uUHJvcHMpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0LCByb3V0ZXJPdXRwdXRBcm4/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcm90b2NvbCA9IHRoaXMucHJvcHMucHJvdG9jb2wuX2JpbmQoc2NvcGUsIHJvdXRlck91dHB1dEFybik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBzdGFuZGFyZDoge1xuICAgICAgICAgIG5ldHdvcmtJbnRlcmZhY2VBcm46IHRoaXMucHJvcHMubmV0d29ya0ludGVyZmFjZS5yb3V0ZXJOZXR3b3JrSW50ZXJmYWNlQXJuLFxuICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbC5uYW1lLnZhbHVlLFxuICAgICAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbjogcHJvdG9jb2wuY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHRoaXMucHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgIGdyYW50OiBwcm90b2NvbC5ncmFudCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29uY3JldGUgdmFyaWFudDogTWVkaWFMaXZlIElucHV0IHJvdXRlciBvdXRwdXQgY29uZmlndXJhdGlvbiAod2l0aCBvciB3aXRob3V0IGNvbm5lY3Rpb24pLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIE1lZGlhTGl2ZUlucHV0Um91dGVyT3V0cHV0Q29uZmlnIGV4dGVuZHMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZyxcbiAgKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNpdCA9IHJlc29sdmVUcmFuc2l0RW5jcnlwdGlvbihzY29wZSwgJ0Rlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb25Sb2xlJywgdGhpcy5vcHRpb25zLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24sIHJvdXRlck91dHB1dEFybik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBtZWRpYUxpdmVJbnB1dDoge1xuICAgICAgICAgIG1lZGlhTGl2ZUlucHV0QXJuOiB0aGlzLm9wdGlvbnMubWVkaWFMaXZlSW5wdXRBcm4sXG4gICAgICAgICAgbWVkaWFMaXZlUGlwZWxpbmVJZDogdGhpcy5vcHRpb25zLm1lZGlhTGl2ZVBpcGVsaW5lSWQsXG4gICAgICAgICAgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogdHJhbnNpdC5jb25maWcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgZ3JhbnQ6IHRyYW5zaXQuZ3JhbnQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVybmFsIG9wdGlvbnMgZm9yIHtAbGluayBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dENvbmZpZ30uXG4gKi9cbmludGVyZmFjZSBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dE9wdGlvbnMge1xuICByZWFkb25seSBtZWRpYUxpdmVJbnB1dEFybj86IHN0cmluZztcbiAgcmVhZG9ubHkgbWVkaWFMaXZlUGlwZWxpbmVJZD86IE1lZGlhTGl2ZVBpcGVsaW5lO1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogQ29uY3JldGUgdmFyaWFudDogTWVkaWFDb25uZWN0IEZsb3cgcm91dGVyIG91dHB1dCBjb25maWd1cmF0aW9uICh3aXRoIG9yIHdpdGhvdXQgY29ubmVjdGlvbikuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dENvbmZpZyBleHRlbmRzIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZyxcbiAgKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNpdCA9IHJlc29sdmVUcmFuc2l0RW5jcnlwdGlvbihzY29wZSwgJ0Rlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb25Sb2xlJywgdGhpcy5vcHRpb25zLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24sIHJvdXRlck91dHB1dEFybik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBtZWRpYUNvbm5lY3RGbG93OiB7XG4gICAgICAgICAgZmxvd0FybjogdGhpcy5vcHRpb25zLmZsb3c/LmZsb3dBcm4sXG4gICAgICAgICAgZmxvd1NvdXJjZUFybjogdGhpcy5vcHRpb25zLmZsb3c/LnNvdXJjZUFybixcbiAgICAgICAgICBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uOiB0cmFuc2l0LmNvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiB0aGlzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBncmFudDogdHJhbnNpdC5ncmFudCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgb3B0aW9ucyBmb3Ige0BsaW5rIE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRDb25maWd9LlxuICovXG5pbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dE9wdGlvbnMge1xuICByZWFkb25seSBmbG93PzogSUZsb3c7XG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBBIE1lZGlhQ29ubmVjdCBSb3V0ZXIgT3V0cHV0IHRoYXQgc2VuZHMgbWVkaWEgc3RyZWFtcyB0byBkZXN0aW5hdGlvbnMuXG4gKlxuICogUm91dGVyIE91dHB1dHMgc3VwcG9ydCBtdWx0aXBsZSBjb25maWd1cmF0aW9uIHR5cGVzOlxuICogLSBTdGFuZGFyZDogU2luZ2xlIHByb3RvY29sIG91dHB1dFxuICogLSBNZWRpYUxpdmUgSW5wdXQ6IE91dHB1dCB0byBBV1MgRWxlbWVudGFsIE1lZGlhTGl2ZVxuICogLSBNZWRpYUNvbm5lY3QgRmxvdzogT3V0cHV0IHRvIGFub3RoZXIgTWVkaWFDb25uZWN0IEZsb3dcbiAqL1xuYWJzdHJhY3QgY2xhc3MgUm91dGVyT3V0cHV0QmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlck91dHB1dCB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb3V0ZXJPdXRwdXRBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJvdXRlck91dHB1dE5hbWU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJvdXRlck91dHB1dElkOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpcEFkZHJlc3M6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhpcyBSb3V0ZXIgT3V0cHV0IHJlc291cmNlLlxuICAgKiBSZXF1aXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgSVJvdXRlck91dHB1dFJlZiBpbnRlcmZhY2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvdXRlck91dHB1dFJlZigpOiBSb3V0ZXJPdXRwdXRSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7IHJvdXRlck91dHB1dEFybjogdGhpcy5yb3V0ZXJPdXRwdXRBcm4gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdGhpcyByb3V0ZXIgb3V0cHV0LlxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9NZWRpYUNvbm5lY3QnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFJvdXRlck91dHB1dEFSTjogdGhpcy5yb3V0ZXJPdXRwdXRBcm4sXG4gICAgICAgIC4uLnByb3BzPy5kaW1lbnNpb25zTWFwLFxuICAgICAgfSxcbiAgICB9KS5hdHRhY2hUbyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBiaXRyYXRlIG9mIHRoZSByb3V0ZXIgb3V0cHV0J3MgcGF5bG9hZC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNCaXRyYXRlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJPdXRwdXRCaXRSYXRlJywge1xuICAgICAgc3RhdGlzdGljOiAnYXZnJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkJJVFNfUEVSX1NFQ09ORCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHNlbnQgYnkgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljVG90YWxQYWNrZXRzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJPdXRwdXRUb3RhbFBhY2tldHMnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQ09VTlQsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSByb3V0ZXIgb3V0cHV0IGNvbm5lY3Rpb24gc3RhdGUgKDEgY29ubmVjdGVkLCAwIGRpc2Nvbm5lY3RlZCkuIEFwcGxpZXMgdG8gU1JUIG91dHB1dHMgb25seS5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDb25uZWN0ZWQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1JvdXRlck91dHB1dENvbm5lY3RlZCcsIHtcbiAgICAgIHN0YXRpc3RpYzogJ21pbicsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5OT05FLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIHJldHJhbnNtaXR0ZWQgcGFja2V0cyByZXF1ZXN0ZWQgdGhyb3VnaCBBUlEuIEFwcGxpZXMgdG8gUklTVCBhbmQgU1JUIG91dHB1dHMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQXJxUmVxdWVzdHMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1JvdXRlck91dHB1dEFSUVJlcXVlc3RzJywge1xuICAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkNPVU5ULFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIEFXUyBFbGVtZW50YWwgTWVkaWFDb25uZWN0IFJvdXRlciBPdXRwdXQuXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBSb3V0ZXJPdXRwdXQgZXh0ZW5kcyBSb3V0ZXJPdXRwdXRCYXNlIGltcGxlbWVudHMgSVJvdXRlck91dHB1dCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLW1lZGlhY29ubmVjdC1hbHBoYS5Sb3V0ZXJPdXRwdXQnO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgUm91dGVyIE91dHB1dCBmcm9tIGl0cyBBUk4uXG4gICAqXG4gICAqIFRoZSBBUk4gb25seSBjb250YWlucyB0aGUgc2VydmljZS1nZW5lcmF0ZWQgSUQgKG5vdCB0aGUgcm91dGVyIG91dHB1dCBuYW1lKS4gQWNjZXNzaW5nXG4gICAqIGByb3V0ZXJPdXRwdXROYW1lYCBvbiBhbiBBUk4gaW1wb3J0IHRocm93cyDigJQgdXNlIGBmcm9tUm91dGVyT3V0cHV0QXR0cmlidXRlcygpYCB0byBwcm92aWRlXG4gICAqIHRoZSBuYW1lIGV4cGxpY2l0bHkuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcm91dGVyT3V0cHV0QXJuIFRoZSBBUk4gb2YgdGhlIFJvdXRlciBPdXRwdXRcbiAgICogQHJldHVybnMgQSBSb3V0ZXIgT3V0cHV0IGNvbnN0cnVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUm91dGVyT3V0cHV0QXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHJvdXRlck91dHB1dEFybjogc3RyaW5nKTogSVJvdXRlck91dHB1dCB7XG4gICAgcmV0dXJuIFJvdXRlck91dHB1dC5mcm9tUm91dGVyT3V0cHV0QXR0cmlidXRlcyhzY29wZSwgaWQsIHsgcm91dGVyT3V0cHV0QXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBSb3V0ZXIgT3V0cHV0IGZyb20gYXR0cmlidXRlcy5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB5b3UgbmVlZCB0byByZWZlcmVuY2UgYSByb3V0ZXIgb3V0cHV0IGJ5IG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIFJvdXRlciBPdXRwdXQgYXR0cmlidXRlc1xuICAgKiBAcmV0dXJucyBBIFJvdXRlciBPdXRwdXQgY29uc3RydWN0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Sb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBSb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzKTogSVJvdXRlck91dHB1dCB7XG4gICAgLy8gRGVyaXZlIHRoZSBJRCBmcm9tIHRoZSBBUk4gdXNpbmcgQ0ZOIGludHJpbnNpY3Mgc28gdGhpcyB3b3JrcyB3aXRoIHRva2VuIEFSTnMgdG9vLlxuICAgIC8vIFRoZSBBUk4gZm9ybWF0IGlzIGFybjphd3M6bWVkaWFjb25uZWN0OjxyZWdpb24+OjxhY2NvdW50Pjpyb3V0ZXJPdXRwdXQ6PGlkPiwgc28gdGhlXG4gICAgLy8gcmVzb3VyY2UgbmFtZSBpcyB0aGUgSUQuXG4gICAgY29uc3Qgcm91dGVyT3V0cHV0SWQgPSBhdHRycy5yb3V0ZXJPdXRwdXRJZCA/PyBleHRyYWN0Um91dGVyT3V0cHV0SWQoYXR0cnMucm91dGVyT3V0cHV0QXJuKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJvdXRlck91dHB1dEJhc2UgaW1wbGVtZW50cyBJUm91dGVyT3V0cHV0IHtcbiAgICAgIHB1YmxpYyByZWFkb25seSByb3V0ZXJPdXRwdXRBcm4gPSBhdHRycy5yb3V0ZXJPdXRwdXRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQgPSByb3V0ZXJPdXRwdXRJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0ID0gdW5kZWZpbmVkO1xuXG4gICAgICBwdWJsaWMgZ2V0IHJvdXRlck91dHB1dE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGF0dHJzLnJvdXRlck91dHB1dE5hbWUpIHJldHVybiBhdHRycy5yb3V0ZXJPdXRwdXROYW1lO1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBSb3V0ZXJPdXRwdXROYW1lTm90UHJvdmlkZWRgLFxuICAgICAgICAgIGAncm91dGVyT3V0cHV0TmFtZScgd2FzIG5vdCBwcm92aWRlZCB3aGVuIGltcG9ydGluZyBSb3V0ZXJPdXRwdXQgJHt0aGlzLm5vZGUucGF0aH07IHByb3ZpZGUgaXQgaW4gZnJvbVJvdXRlck91dHB1dEF0dHJpYnV0ZXMoKWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGdldCBpcEFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUm91dGVyT3V0cHV0SXBBZGRyZXNzTm90UHJvdmlkZWRgLFxuICAgICAgICAgIGAnaXBBZGRyZXNzJyBpcyBub3QgYXZhaWxhYmxlIG9uIGltcG9ydGVkIFJvdXRlck91dHB1dCAke3RoaXMubm9kZS5wYXRofWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGJpdHJhdGUgaW4gTWJwcyBmb3IgYSBrbm93biB0aWVyLCBvciB1bmRlZmluZWQgZm9yIGN1c3RvbSB0aWVycy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHRpZXJMaW1pdE1icHModGllcjogUm91dGVyT3V0cHV0VGllcik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRpZXIudmFsdWUgPT09IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwLnZhbHVlKSByZXR1cm4gMjA7XG4gICAgaWYgKHRpZXIudmFsdWUgPT09IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzUwLnZhbHVlKSByZXR1cm4gNTA7XG4gICAgaWYgKHRpZXIudmFsdWUgPT09IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzEwMC52YWx1ZSkgcmV0dXJuIDEwMDtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlck91dHB1dEFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGlwQWRkcmVzczogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb3V0ZXJPdXRwdXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5yb3V0ZXJPdXRwdXROYW1lID8/IExhenkuc3RyaW5nKHsgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjggfSkgfSksXG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSByb3V0ZXIgb3V0cHV0IG5hbWUgaWYgcHJvdmlkZWRcbiAgICBpZiAocHJvcHMucm91dGVyT3V0cHV0TmFtZSAhPSBudWxsICYmIHByb3BzLnJvdXRlck91dHB1dE5hbWUgIT09ICcnICYmICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMucm91dGVyT3V0cHV0TmFtZSkpIHtcbiAgICAgIGlmIChwcm9wcy5yb3V0ZXJPdXRwdXROYW1lLmxlbmd0aCA+IDEyOCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSb3V0ZXJPdXRwdXROYW1lTGVuZ3RoYCwgYFJvdXRlciBvdXRwdXQgbmFtZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTI4IGNoYXJhY3RlcnMsIGdvdCAke3Byb3BzLnJvdXRlck91dHB1dE5hbWUubGVuZ3RofWAsIHRoaXMpO1xuICAgICAgfVxuICAgICAgaWYgKCEvXlthLXpBLVowLTktXSskLy50ZXN0KHByb3BzLnJvdXRlck91dHB1dE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dE5hbWVGb3JtYXRgLCBgUm91dGVyIG91dHB1dCBuYW1lIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zLCBnb3QgJyR7cHJvcHMucm91dGVyT3V0cHV0TmFtZX0nYCwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWF4aW11bSBiaXRyYXRlXG4gICAgaWYgKCFwcm9wcy5tYXhpbXVtQml0cmF0ZS5pc1VucmVzb2x2ZWQoKSAmJiBwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpIDwgMTAwMDAwMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0TWluQml0cmF0ZWAsIGBNYXhpbXVtIGJpdHJhdGUgbXVzdCBiZSBhdCBsZWFzdCAxLDAwMCwwMDAgYml0cy9zICgxIE1icHMpLCBnb3QgJHtwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpfWAsIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGJpdHJhdGUgZG9lcyBub3QgZXhjZWVkIHRpZXIgbGltaXRcbiAgICBjb25zdCByZXNvbHZlZFRpZXIgPSBwcm9wcy50aWVyID8/IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwO1xuICAgIGNvbnN0IHRpZXJNYnBzID0gUm91dGVyT3V0cHV0LnRpZXJMaW1pdE1icHMocmVzb2x2ZWRUaWVyKTtcbiAgICBpZiAoZXhjZWVkc1JvdXRlclRpZXJCaXRyYXRlKHRpZXJNYnBzLCBwcm9wcy5tYXhpbXVtQml0cmF0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dEJpdHJhdGVFeGNlZWRzVGllcmAsIGBNYXhpbXVtIGJpdHJhdGUgJHtwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpIC8gMV8wMDBfMDAwfSBNYnBzIGV4Y2VlZHMgdGhlICR7cmVzb2x2ZWRUaWVyLnZhbHVlfSB0aWVyIGxpbWl0IG9mICR7dGllck1icHN9IE1icHNgLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtYWludGVuYW5jZSB0aW1lIGZvcm1hdFxuICAgIGlmIChwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHZhbGlkYXRlTWFpbnRlbmFuY2VUaW1lKHByb3BzLm1haW50ZW5hbmNlQ29uZmlndXJhdGlvbi50aW1lKTtcbiAgICB9XG5cbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgdGFyZ2V0UmVnaW9uID0gcHJvcHMucmVnaW9uTmFtZSA/PyBzdGFjay5yZWdpb247XG5cbiAgICAvLyBXaWxkY2FyZCB0aGUgaWQg4oCUIHBpbm5pbmcgdGhlIGxpdmUgQVJOIChhdHRyQXJuKSB3b3VsZCBjcmVhdGUgYSByb2xlIOKGkiByb3V0ZXItb3V0cHV0IOKGkiByb2xlIGN5Y2xlLlxuICAgIGNvbnN0IHJvdXRlck91dHB1dEFybiA9IHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnbWVkaWFjb25uZWN0JyxcbiAgICAgIHJlZ2lvbjogdGFyZ2V0UmVnaW9uLFxuICAgICAgcmVzb3VyY2U6ICdyb3V0ZXJPdXRwdXQnLFxuICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29uZmlnQmluZCA9IHByb3BzLmNvbmZpZ3VyYXRpb24uX2JpbmQodGhpcywgcm91dGVyT3V0cHV0QXJuKTtcblxuICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZWdpb24gc3BlY2lmaWVkIGlzIGFsc28gY29tcGF0aWJsZSB3aXRoIEFaIGNvbmZpZ3VyZWQgZm9yIHNvbWUgb2YgdGhlIFJvdXRlciBPdXRwdXRzIGNvbmZpZ3VyYXRpb25zXG4gICAgaWYgKGNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZSAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKGNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZSkgJiYgIVRva2VuLmlzVW5yZXNvbHZlZCh0YXJnZXRSZWdpb24pXG4gICAgICAmJiAhY29uZmlnQmluZC5hdmFpbGFiaWxpdHlab25lLnN0YXJ0c1dpdGgodGFyZ2V0UmVnaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0QXpSZWdpb25NaXNtYXRjaGAsIGBBdmFpbGFiaWxpdHkgem9uZSAnJHtjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmV9JyBtdXN0IGJlIHdpdGhpbiByZWdpb24gJyR7dGFyZ2V0UmVnaW9ufSdgLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZXJPdXRwdXQgPSBuZXcgQ2ZuUm91dGVyT3V0cHV0KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgbWF4aW11bUJpdHJhdGU6IHByb3BzLm1heGltdW1CaXRyYXRlLnRvQnBzKCksXG4gICAgICByb3V0aW5nU2NvcGU6IHByb3BzLnJvdXRpbmdTY29wZS52YWx1ZSxcbiAgICAgIHRpZXI6IChwcm9wcy50aWVyID8/IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwKS52YWx1ZSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IGNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgIG1haW50ZW5hbmNlQ29uZmlndXJhdGlvbjogcHJvcHMubWFpbnRlbmFuY2VDb25maWd1cmF0aW9uID8ge1xuICAgICAgICBwcmVmZXJyZWREYXlUaW1lOiBwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24sXG4gICAgICB9IDoge1xuICAgICAgICBkZWZhdWx0OiB7fSxcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmF0aW9uOiBjb25maWdCaW5kLmNvbmZpZyxcbiAgICAgIHJlZ2lvbk5hbWU6IHRhcmdldFJlZ2lvbixcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MgPyByZW5kZXJUYWdzKHByb3BzLnRhZ3MpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yb3V0ZXJPdXRwdXRBcm4gPSByb3V0ZXJPdXRwdXQuYXR0ckFybjtcbiAgICB0aGlzLnJvdXRlck91dHB1dE5hbWUgPSB0aGlzLnBoeXNpY2FsTmFtZTtcbiAgICB0aGlzLnJvdXRlck91dHB1dElkID0gcm91dGVyT3V0cHV0LmF0dHJJZDtcbiAgICB0aGlzLmlwQWRkcmVzcyA9IHJvdXRlck91dHB1dC5hdHRySXBBZGRyZXNzO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gcm91dGVyT3V0cHV0LmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy51cGRhdGVkQXQgPSByb3V0ZXJPdXRwdXQuYXR0clVwZGF0ZWRBdDtcblxuICAgIC8vIFdpdGhvdXQgdGhpcyB0aGUgcm91dGVyIGlucHV0IGNhbiBiZSBjcmVhdGVkIGJlZm9yZSB0aGVcbiAgICAvLyBwb2xpY3kgaXMgYXR0YWNoZWQgKFwiYWNjZXNzIGRlbmllZFwiIGF0IGNyZWF0ZSB0aW1lKS4gT3JkZXJpbmcgdGhlIGdyYW50IGJlZm9yZSB0aGVcbiAgICAvLyByb3V0ZXIgaW5wdXQgcHVsbHMgdGhlIHBvbGljeSBpbiBhcyBhIGRlcGVuZGVuY3kuXG4gICAgY29uZmlnQmluZC5ncmFudD8uYXBwbHlCZWZvcmUocm91dGVyT3V0cHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0Um91dGVyT3V0cHV0SWQocm91dGVyT3V0cHV0QXJuOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWQgPSBBcm4uc3BsaXQocm91dGVyT3V0cHV0QXJuLCBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lO1xuICBpZiAocGFyc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBsaXRgSW52YWxpZFJvdXRlck91dHB1dEFybmAsXG4gICAgICBgQ291bGQgbm90IHBhcnNlIFJvdXRlciBPdXRwdXQgQVJOOiAke3JvdXRlck91dHB1dEFybn0uIEV4cGVjdGVkIGZvcm1hdDogYXJuOjxwYXJ0aXRpb24+Om1lZGlhY29ubmVjdDo8cmVnaW9uPjo8YWNjb3VudD46cm91dGVyT3V0cHV0OjxpZD5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiJdfQ==
package/lib/shared.js CHANGED
@@ -23,7 +23,7 @@ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
23
23
  */
24
24
  class EncryptionAlgorithm {
25
25
  value;
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.EncryptionAlgorithm", version: "2.263.0-alpha.0" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.EncryptionAlgorithm", version: "2.264.0-alpha.0" };
27
27
  /**
28
28
  * Option for AES128
29
29
  */
@@ -60,7 +60,7 @@ exports.EncryptionAlgorithm = EncryptionAlgorithm;
60
60
  */
61
61
  class KeyType {
62
62
  value;
63
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.KeyType", version: "2.263.0-alpha.0" };
63
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.KeyType", version: "2.264.0-alpha.0" };
64
64
  /**
65
65
  * Option for Static Key
66
66
  */
@@ -129,7 +129,7 @@ var MaintenanceDay;
129
129
  */
130
130
  class BridgeProtocol {
131
131
  value;
132
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.BridgeProtocol", version: "2.263.0-alpha.0" };
132
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.BridgeProtocol", version: "2.264.0-alpha.0" };
133
133
  /**
134
134
  * Option for RTP-FEC
135
135
  */
@@ -175,7 +175,7 @@ exports.BridgeProtocol = BridgeProtocol;
175
175
  * });
176
176
  */
177
177
  class GatewayNetwork {
178
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.GatewayNetwork", version: "2.263.0-alpha.0" };
178
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.GatewayNetwork", version: "2.264.0-alpha.0" };
179
179
  /**
180
180
  * Define a new gateway network.
181
181
  *
@@ -220,7 +220,7 @@ exports.GatewayNetwork = GatewayNetwork;
220
220
  */
221
221
  class FailoverMode {
222
222
  value;
223
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.FailoverMode", version: "2.263.0-alpha.0" };
223
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.FailoverMode", version: "2.264.0-alpha.0" };
224
224
  /**
225
225
  * MERGE combines the source streams into a single stream, allowing graceful
226
226
  * recovery from any single-source loss.
@@ -299,7 +299,7 @@ var MediaLivePipeline;
299
299
  */
300
300
  class NetworkInterface {
301
301
  value;
302
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.NetworkInterface", version: "2.263.0-alpha.0" };
302
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.NetworkInterface", version: "2.264.0-alpha.0" };
303
303
  /**
304
304
  * Option for ENA
305
305
  */
@@ -332,7 +332,7 @@ exports.NetworkInterface = NetworkInterface;
332
332
  * Factory class for creating VPC Interface configurations
333
333
  */
334
334
  class VpcInterface {
335
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.VpcInterface", version: "2.263.0-alpha.0" };
335
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.VpcInterface", version: "2.264.0-alpha.0" };
336
336
  /**
337
337
  * Define a new VPC Interface configuration. MediaConnect will create network interfaces automatically.
338
338
  *
@@ -525,7 +525,7 @@ function resolveRouterSrtEncryption(scope, id, encryption, sourceArn) {
525
525
  * Use the predefined constants for standard rates, or {@link Framerate.of} for a custom rate.
526
526
  */
527
527
  class Framerate {
528
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.Framerate", version: "2.263.0-alpha.0" };
528
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.Framerate", version: "2.264.0-alpha.0" };
529
529
  /** 24 fps (cinema) — `24/1`. */
530
530
  static FPS_24 = new Framerate(24, 1);
531
531
  /** 25 fps — `25/1`. */
@@ -590,7 +590,7 @@ exports.Framerate = Framerate;
590
590
  * a custom ratio.
591
591
  */
592
592
  class PixelAspectRatio {
593
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.PixelAspectRatio", version: "2.263.0-alpha.0" };
593
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.PixelAspectRatio", version: "2.264.0-alpha.0" };
594
594
  /** Square pixels (`1:1`). */
595
595
  static SQUARE = new PixelAspectRatio(1, 1);
596
596
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aws-cdk/aws-mediaconnect-alpha",
3
3
  "private": false,
4
- "version": "2.263.0-alpha.0",
4
+ "version": "2.264.0-alpha.0",
5
5
  "description": "The CDK construct library for AWS Elemental MediaConnect",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -79,17 +79,17 @@
79
79
  },
80
80
  "license": "Apache-2.0",
81
81
  "devDependencies": {
82
- "@aws-cdk/cdk-build-tools": "2.263.0-alpha.0",
82
+ "@aws-cdk/cdk-build-tools": "2.264.0-alpha.0",
83
83
  "@aws-cdk/integ-runner": "^2.202.3",
84
- "@aws-cdk/integ-tests-alpha": "^2.263.0-alpha.0",
85
- "@aws-cdk/pkglint": "2.263.0-alpha.0",
84
+ "@aws-cdk/integ-tests-alpha": "^2.264.0-alpha.0",
85
+ "@aws-cdk/pkglint": "2.264.0-alpha.0",
86
86
  "@types/jest": "^29.5.14",
87
- "aws-cdk-lib": "2.263.0",
87
+ "aws-cdk-lib": "2.264.0",
88
88
  "jest": "^29.7.0"
89
89
  },
90
90
  "homepage": "https://github.com/aws/aws-cdk",
91
91
  "peerDependencies": {
92
- "aws-cdk-lib": "^2.263.0",
92
+ "aws-cdk-lib": "^2.264.0",
93
93
  "constructs": "^10.5.0"
94
94
  },
95
95
  "separate-module": false,