cdk-dms-replication 0.1.12 → 0.1.13

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.
@@ -42,5 +42,5 @@ class DmsReplicationTask extends constructs_1.Construct {
42
42
  }
43
43
  exports.DmsReplicationTask = DmsReplicationTask;
44
44
  _a = JSII_RTTI_SYMBOL_1;
45
- DmsReplicationTask[_a] = { fqn: "cdk-dms-replication.DmsReplicationTask", version: "0.1.12" };
45
+ DmsReplicationTask[_a] = { fqn: "cdk-dms-replication.DmsReplicationTask", version: "0.1.13" };
46
46
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGljYXRpb24tdGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXBsaWNhdGlvbi10YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQywyQ0FBdUM7QUFJdkMsbURBQStDO0FBc0UvQzs7O0dBR0c7QUFDSCxNQUFhLGtCQUFtQixTQUFRLHNCQUFTO0lBTy9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBOEI7UUFDdEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLGNBQWMsR0FDbEIsS0FBSyxDQUFDLHlCQUF5QjtZQUMvQixHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXRFLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSw0QkFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFdkUsd0VBQXdFO1FBQ3hFLElBQUksWUFBZ0MsQ0FBQztRQUNyQyxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDOUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3JFLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxzQkFBc0I7WUFDcEQsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxXQUFXO1lBQ25ELGlCQUFpQixFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBVztZQUNuRCxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLHVCQUF1QixFQUFFLFlBQVk7WUFDckMseUJBQXlCLEVBQUUsY0FBYztZQUN6QyxZQUFZO1lBQ1osZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUN4QyxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7WUFDdEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FDeEMsS0FBSyxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FDakQsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDO0lBQ3hELENBQUM7O0FBMUNILGdEQTJDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBkbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWRtcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElEbXNFbmRwb2ludCB9IGZyb20gJy4vZW5kcG9pbnQnO1xuaW1wb3J0IHsgTWlncmF0aW9uVHlwZSB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgVGFibGVNYXBwaW5ncyB9IGZyb20gJy4vdGFibGUtbWFwcGluZ3MnO1xuaW1wb3J0IHsgVGFza1NldHRpbmdzIH0gZnJvbSAnLi90YXNrLXNldHRpbmdzJztcblxuLyoqIFByb3BzIGZvciB7QGxpbmsgRG1zUmVwbGljYXRpb25UYXNrfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG1zUmVwbGljYXRpb25UYXNrUHJvcHMge1xuICAvKiogQVJOIG9mIHRoZSByZXBsaWNhdGlvbiBpbnN0YW5jZSB0byB1c2UuICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uSW5zdGFuY2VBcm46IHN0cmluZztcblxuICAvKiogU291cmNlIGVuZHBvaW50LiAqL1xuICByZWFkb25seSBzb3VyY2VFbmRwb2ludDogSURtc0VuZHBvaW50O1xuXG4gIC8qKiBUYXJnZXQgZW5kcG9pbnQuICovXG4gIHJlYWRvbmx5IHRhcmdldEVuZHBvaW50OiBJRG1zRW5kcG9pbnQ7XG5cbiAgLyoqIFRoZSBtaWdyYXRpb24gdHlwZS4gKi9cbiAgcmVhZG9ubHkgbWlncmF0aW9uVHlwZTogTWlncmF0aW9uVHlwZTtcblxuICAvKipcbiAgICogVGFibGUgbWFwcGluZ3MgSlNPTiBzdHJpbmcuXG4gICAqIFVzZSB7QGxpbmsgVGFibGVNYXBwaW5nc30gdG8gYnVpbGQgdGhpcywgb3IgcHJvdmlkZSBhIHJhdyBKU09OIHN0cmluZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGFibGVNYXBwaW5nczogbmV3IFRhYmxlTWFwcGluZ3MoKS5pbmNsdWRlU2NoZW1hKCdwdWJsaWMnKS50b0pzb24oKVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVNYXBwaW5nczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUYXNrIHNldHRpbmdzIEpTT04gc3RyaW5nLlxuICAgKiBVc2Uge0BsaW5rIFRhc2tTZXR0aW5nc30gdG8gYnVpbGQgdGhpcywgb3IgcHJvdmlkZSBhIHJhdyBKU09OIHN0cmluZy5cbiAgICogQSBzZW5zaWJsZSBkZWZhdWx0IGlzIGFwcGxpZWQgaWYgbm90IHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFza1NldHRpbmdzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2dpY2FsIG5hbWUgZm9yIHRoZSByZXBsaWNhdGlvbiB0YXNrLlxuICAgKiBBdXRvLWdlbmVyYXRlZCBmcm9tIHRoZSBjb25zdHJ1Y3QgSUQgaWYgbm90IHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25UYXNrSWRlbnRpZmllcj86IHN0cmluZztcblxuICAvKipcbiAgICogQ0RDIHN0YXJ0IHRpbWUgYXMgYW4gSVNPLTg2MDEgc3RyaW5nIG9yIFVuaXggZXBvY2ggbnVtYmVyLlxuICAgKiBPbmx5IHZhbGlkIHdoZW4gbWlncmF0aW9uVHlwZSBpcyBDREMgb3IgRlVMTF9MT0FEX0FORF9DREMuXG4gICAqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGNkY1N0YXJ0UG9zaXRpb24uXG4gICAqL1xuICByZWFkb25seSBjZGNTdGFydFRpbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENEQyBzdGFydCBwb3NpdGlvbiAobG9nIHNlcXVlbmNlIG51bWJlciBvciBzaW1pbGFyKS5cbiAgICogT25seSB2YWxpZCB3aGVuIG1pZ3JhdGlvblR5cGUgaXMgQ0RDIG9yIEZVTExfTE9BRF9BTkRfQ0RDLlxuICAgKiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBjZGNTdGFydFRpbWUuXG4gICAqL1xuICByZWFkb25seSBjZGNTdGFydFBvc2l0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDREMgc3RvcCBwb3NpdGlvbi4gIFRoZSB0YXNrIHN0b3BzIG9uY2UgdGhpcyBwb3NpdGlvbiBpcyByZWFjaGVkLlxuICAgKiBPbmx5IHZhbGlkIHdoZW4gbWlncmF0aW9uVHlwZSBpcyBDREMgb3IgRlVMTF9MT0FEX0FORF9DREMuXG4gICAqL1xuICByZWFkb25seSBjZGNTdG9wUG9zaXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlbW92YWwgcG9saWN5IGZvciB0aGlzIHJlc291cmNlLlxuICAgKiBAZGVmYXVsdCBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogY2RrLlJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFRhZ3MgdG8gYXBwbHkgdG8gdGhlIHRhc2sgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogY2RrLkNmblRhZ1tdO1xufVxuXG4vKipcbiAqIEEgRE1TIHJlcGxpY2F0aW9uIHRhc2sgdGhhdCB0aWVzIGEgcmVwbGljYXRpb24gaW5zdGFuY2UgdG8gYSBzb3VyY2UgYW5kXG4gKiB0YXJnZXQgZW5kcG9pbnQgYW5kIGRlZmluZXMgd2hhdCBkYXRhIHRvIG1pZ3JhdGUgYW5kIGhvdy5cbiAqL1xuZXhwb3J0IGNsYXNzIERtc1JlcGxpY2F0aW9uVGFzayBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKiBUaGUgdW5kZXJseWluZyBDbG91ZEZvcm1hdGlvbiByZXBsaWNhdGlvbiB0YXNrIHJlc291cmNlLiAqL1xuICByZWFkb25seSBjZm5SZXBsaWNhdGlvblRhc2s6IGRtcy5DZm5SZXBsaWNhdGlvblRhc2s7XG5cbiAgLyoqIEFSTiBvZiB0aGUgcmVwbGljYXRpb24gdGFzay4gKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25UYXNrQXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERtc1JlcGxpY2F0aW9uVGFza1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHRhc2tJZGVudGlmaWVyID1cbiAgICAgIHByb3BzLnJlcGxpY2F0aW9uVGFza0lkZW50aWZpZXIgPz9cbiAgICAgIGNkay5OYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDYzIH0pLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBjb25zdCB0YXNrU2V0dGluZ3MgPSBwcm9wcy50YXNrU2V0dGluZ3MgPz8gbmV3IFRhc2tTZXR0aW5ncygpLnRvSnNvbigpO1xuXG4gICAgLy8gRE1TIGV4cGVjdHMgY2RjU3RhcnRUaW1lIGFzIGEgVW5peCBlcG9jaCBudW1iZXIgKHNlY29uZHMgc2luY2UgZXBvY2gpXG4gICAgbGV0IGNkY1N0YXJ0VGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5jZGNTdGFydFRpbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gRGF0ZS5wYXJzZShwcm9wcy5jZGNTdGFydFRpbWUpO1xuICAgICAgY2RjU3RhcnRUaW1lID0gaXNOYU4ocGFyc2VkKSA/IE51bWJlcihwcm9wcy5jZGNTdGFydFRpbWUpIDogTWF0aC5mbG9vcihwYXJzZWQgLyAxMDAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNmblJlcGxpY2F0aW9uVGFzayA9IG5ldyBkbXMuQ2ZuUmVwbGljYXRpb25UYXNrKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIHJlcGxpY2F0aW9uSW5zdGFuY2VBcm46IHByb3BzLnJlcGxpY2F0aW9uSW5zdGFuY2VBcm4sXG4gICAgICBzb3VyY2VFbmRwb2ludEFybjogcHJvcHMuc291cmNlRW5kcG9pbnQuZW5kcG9pbnRBcm4sXG4gICAgICB0YXJnZXRFbmRwb2ludEFybjogcHJvcHMudGFyZ2V0RW5kcG9pbnQuZW5kcG9pbnRBcm4sXG4gICAgICBtaWdyYXRpb25UeXBlOiBwcm9wcy5taWdyYXRpb25UeXBlLFxuICAgICAgdGFibGVNYXBwaW5nczogcHJvcHMudGFibGVNYXBwaW5ncyxcbiAgICAgIHJlcGxpY2F0aW9uVGFza1NldHRpbmdzOiB0YXNrU2V0dGluZ3MsXG4gICAgICByZXBsaWNhdGlvblRhc2tJZGVudGlmaWVyOiB0YXNrSWRlbnRpZmllcixcbiAgICAgIGNkY1N0YXJ0VGltZSxcbiAgICAgIGNkY1N0YXJ0UG9zaXRpb246IHByb3BzLmNkY1N0YXJ0UG9zaXRpb24sXG4gICAgICBjZGNTdG9wUG9zaXRpb246IHByb3BzLmNkY1N0b3BQb3NpdGlvbixcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNmblJlcGxpY2F0aW9uVGFzay5hcHBseVJlbW92YWxQb2xpY3koXG4gICAgICBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgKTtcblxuICAgIHRoaXMucmVwbGljYXRpb25UYXNrQXJuID0gdGhpcy5jZm5SZXBsaWNhdGlvblRhc2sucmVmO1xuICB9XG59XG4iXX0=
@@ -269,5 +269,5 @@ class DmsServerlessPipeline extends constructs_1.Construct {
269
269
  }
270
270
  exports.DmsServerlessPipeline = DmsServerlessPipeline;
271
271
  _a = JSII_RTTI_SYMBOL_1;
272
- DmsServerlessPipeline[_a] = { fqn: "cdk-dms-replication.DmsServerlessPipeline", version: "0.1.12" };
272
+ DmsServerlessPipeline[_a] = { fqn: "cdk-dms-replication.DmsServerlessPipeline", version: "0.1.13" };
273
273
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVybGVzcy1waXBlbGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJ2ZXJsZXNzLXBpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLDZDQUE2QztBQUM3QywyQ0FBdUM7QUFDdkMsMkNBQXdFO0FBQ3hFLHlDQUF1RDtBQUN2RCxtQ0FBc0Q7QUFFdEQscURBQWlEO0FBRWpELDhFQUE4RTtBQUM5RSxtRUFBbUU7QUFDbkUsOEVBQThFO0FBQzlFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQXNMbkYsOEVBQThFO0FBQzlFLFlBQVk7QUFDWiw4RUFBOEU7QUFFOUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDRztBQUNILE1BQWEscUJBQXNCLFNBQVEsc0JBQVM7SUFxQ2xELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDdkUsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQztRQUV4RCwwRUFBMEU7UUFDMUUsbUVBQW1FO1FBQ25FLDBFQUEwRTtRQUMxRSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUks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SUFBSSxTQUFTLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQzs7QUFuUkgsc0RBb1JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGRtcyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZG1zJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBlbnN1cmVEbXNDbG91ZFdhdGNoUm9sZSwgZW5zdXJlRG1zVnBjUm9sZSB9IGZyb20gJy4vZG1zLXJvbGVzJztcbmltcG9ydCB7IERtc0VuZHBvaW50LCBJRG1zRW5kcG9pbnQgfSBmcm9tICcuL2VuZHBvaW50JztcbmltcG9ydCB7IEVuZHBvaW50VHlwZSwgTWlncmF0aW9uVHlwZSB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgU291cmNlRW5kcG9pbnRPcHRpb25zLCBUYXJnZXRFbmRwb2ludE9wdGlvbnMgfSBmcm9tICcuL21pZ3JhdGlvbi1waXBlbGluZSc7XG5pbXBvcnQgeyBUYWJsZU1hcHBpbmdzIH0gZnJvbSAnLi90YWJsZS1tYXBwaW5ncyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVmFsaWQgY2FwYWNpdHkgdW5pdCB2YWx1ZXMg4oCUIGRvY3VtZW50ZWQgaW4gdGhlIERNUyBBUEkgcmVmZXJlbmNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmNvbnN0IFZBTElEX0NBUEFDSVRZX1VOSVRTID0gbmV3IFNldChbMSwgMiwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4LCAxOTIsIDI1NiwgMzg0XSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJvcHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogUHJvcHMgZm9yIHtAbGluayBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmV9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmVQcm9wcyB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTmV0d29ya2luZ1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFZQQyBpbiB3aGljaCB0byBwbGFjZSB0aGUgc2VydmVybGVzcyByZXBsaWNhdGlvbiBjb25maWcuXG4gICAqIFRoZSBjb25maWcgaXMgcGxhY2VkIGluIHByaXZhdGUgc3VibmV0cy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFN1Ym5ldCBzZWxlY3Rpb24gZm9yIHRoZSByZXBsaWNhdGlvbiBzdWJuZXQgZ3JvdXAuXG4gICAqIEBkZWZhdWx0IHByaXZhdGUgc3VibmV0cyB3aXRoIGVncmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IGdyb3VwcyB0byBhdHRhY2ggdG8gdGhlIHNlcnZlcmxlc3MgcmVwbGljYXRpb24gY29uZmlnLlxuICAgKiBBIG5ldyBzZWN1cml0eSBncm91cCBpcyBjcmVhdGVkIGlmIG5vbmUgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM/OiBlYzIuSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIENvbXB1dGUgY29uZmlnXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgRE1TIENhcGFjaXR5IFVuaXRzIChEQ1VzKSB0aGUgc2VydmVybGVzcyByZXBsaWNhdGlvbiBtYXlcbiAgICogc2NhbGUgdXAgdG8uXG4gICAqXG4gICAqIFZhbGlkIHZhbHVlczogMSwgMiwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4LCAxOTIsIDI1NiwgMzg0LlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q2FwYWNpdHlVbml0czogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiBEQ1VzIERNUyB3aWxsIHByb3Zpc2lvbiBhdCBzdGFydC11cC5cbiAgICogQGRlZmF1bHQgRE1TIGF1dG8tZGV0ZXJtaW5lcyBiYXNlZCBvbiB3b3JrbG9hZFxuICAgKi9cbiAgcmVhZG9ubHkgbWluQ2FwYWNpdHlVbml0cz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc2VydmVybGVzcyByZXBsaWNhdGlvbiBpcyBNdWx0aS1BWi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG11bHRpQXo/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQcmVmZXJyZWQgbWFpbnRlbmFuY2Ugd2luZG93LCBlLmcuIFwic3VuOjA0OjAwLXN1bjowNDozMFwiLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c/OiBzdHJpbmc7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBFbmNyeXB0aW9uXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgcmVwbGljYXRpb24gc3RvcmFnZSBhdCByZXN0LlxuICAgKiBBIG5ldyBrZXkgaXMgY3JlYXRlZCBpZiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEVuZHBvaW50c1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFNvdXJjZSBlbmRwb2ludCBjb25maWd1cmF0aW9uLlxuICAgKiBQcm92aWRlIHRoaXMgT1IgYGV4aXN0aW5nU291cmNlRW5kcG9pbnRgIOKAlCBub3QgYm90aC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUVuZHBvaW50PzogU291cmNlRW5kcG9pbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBbiBleGlzdGluZyB7QGxpbmsgSURtc0VuZHBvaW50fSB0byB1c2UgYXMgdGhlIHNvdXJjZS5cbiAgICogUHJvdmlkZSB0aGlzIE9SIGBzb3VyY2VFbmRwb2ludGAg4oCUIG5vdCBib3RoLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdTb3VyY2VFbmRwb2ludD86IElEbXNFbmRwb2ludDtcblxuICAvKipcbiAgICogVGFyZ2V0IGVuZHBvaW50IGNvbmZpZ3VyYXRpb24uXG4gICAqIFByb3ZpZGUgdGhpcyBPUiBgZXhpc3RpbmdUYXJnZXRFbmRwb2ludGAg4oCUIG5vdCBib3RoLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0RW5kcG9pbnQ/OiBUYXJnZXRFbmRwb2ludE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFuIGV4aXN0aW5nIHtAbGluayBJRG1zRW5kcG9pbnR9IHRvIHVzZSBhcyB0aGUgdGFyZ2V0LlxuICAgKiBQcm92aWRlIHRoaXMgT1IgYHRhcmdldEVuZHBvaW50YCDigJQgbm90IGJvdGguXG4gICAqL1xuICByZWFkb25seSBleGlzdGluZ1RhcmdldEVuZHBvaW50PzogSURtc0VuZHBvaW50O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWlncmF0aW9uIGNvbmZpZ1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIFRoZSB0eXBlIG9mIG1pZ3JhdGlvbiB0byBwZXJmb3JtLiAqL1xuICByZWFkb25seSBtaWdyYXRpb25UeXBlOiBNaWdyYXRpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBUYWJsZSBtYXBwaW5ncyBKU09OIHN0cmluZy5cbiAgICogVXNlIHtAbGluayBUYWJsZU1hcHBpbmdzfSB0byBidWlsZCB0aGlzLlxuICAgKiBEZWZhdWx0cyB0byBcImluY2x1ZGUgYWxsIHRhYmxlcyBpbiBhbGwgc2NoZW1hc1wiIGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTWFwcGluZ3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlcGxpY2F0aW9uIHNldHRpbmdzIEpTT04gc3RyaW5nIChlcXVpdmFsZW50IHRvIHRhc2sgc2V0dGluZ3MgZm9yIGNsYXNzaWMgRE1TKS5cbiAgICogVXNlIHtAbGluayBUYXNrU2V0dGluZ3N9IHRvIGJ1aWxkIHRoaXMuXG4gICAqIFNlbnNpYmxlIGRlZmF1bHRzIGFyZSBhcHBsaWVkIGJ5IERNUyBpZiBub3QgcHJvdmlkZWQuXG4gICAqXG4gICAqIEByZW1hcmtzIERNUyBTZXJ2ZXJsZXNzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBDREMgc3RhcnQvc3RvcCBwb3NpdGlvbnNcbiAgICogdmlhIENsb3VkRm9ybWF0aW9uLiBUbyBzdGFydCByZXBsaWNhdGlvbiBmcm9tIGEgc3BlY2lmaWMgTFNOIG9yIHRpbWVzdGFtcFxuICAgKiBhZnRlciB0aGUgcmVwbGljYXRpb24gY29uZmlnIGhhcyBiZWVuIGNyZWF0ZWQsIGNhbGwgdGhlXG4gICAqIGBTdGFydFJlcGxpY2F0aW9uYCBBUEkgd2l0aCBgU3RhcnRSZXBsaWNhdGlvblRhc2tUeXBlYCBzZXQgdG9cbiAgICogYHN0YXJ0LXJlcGxpY2F0aW9uYCBhbmQgc3VwcGx5IGBDZGNTdGFydFBvc2l0aW9uYCBvciBgQ2RjU3RhcnRUaW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IHRhc2tTZXR0aW5ncz86IHN0cmluZztcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE9ic2VydmFiaWxpdHlcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNyZWF0ZSBhIENsb3VkV2F0Y2ggbG9nIGdyb3VwIGZvciB0aGUgcmVwbGljYXRpb24gY29uZmlnLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVDbG91ZFdhdGNoTG9ncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJldGVudGlvbiBwZXJpb2QgZm9yIHRoZSBDbG91ZFdhdGNoIGxvZyBncm91cC5cbiAgICogQGRlZmF1bHQgbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogbG9ncy5SZXRlbnRpb25EYXlzO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSUFNIC8gc2VydmljZSByb2xlc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIHRoZSB0d28gYWNjb3VudC1sZXZlbCBETVMgc2VydmljZSByb2xlcyAoYGRtcy12cGMtcm9sZWBcbiAgICogYW5kIGBkbXMtY2xvdWR3YXRjaC1sb2dzLXJvbGVgKSByZXF1aXJlZCBieSBETVMuXG4gICAqXG4gICAqIFdoZW4gYHRydWVgLCB0aGUgcm9sZXMgYXJlIGNyZWF0ZWQgaWRlbXBvdGVudGx5IHZpYSBhIGN1c3RvbSByZXNvdXJjZTogaWZcbiAgICogZWl0aGVyIHJvbGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGFjY291bnQgKGNyZWF0ZWQgYnkgYW5vdGhlciBzdGFjayBvclxuICAgKiBtYW51YWxseSksIHRoZSBleGlzdGluZyByb2xlIGlzIHNpbGVudGx5IHJldXNlZCBhbmQgaXRzIHRydXN0IHBvbGljeSBpc1xuICAgKiBjb3JyZWN0ZWQgaWYgbmVjZXNzYXJ5LiBUaGUgcm9sZXMgYXJlIGNyZWF0ZWQgd2l0aCBgUmVtb3ZhbFBvbGljeS5SRVRBSU5gXG4gICAqIGFuZCBhcmUgKipub3QqKiBsaWZlY3ljbGUtbWFuYWdlZCBieSB0aGlzIHN0YWNrIOKAlCB0aGV5IHdpbGwgbm90IGJlIGRlbGV0ZWRcbiAgICogd2hlbiB0aGUgc3RhY2sgaXMgZGVzdHJveWVkLiBJZiB5b3UgcmVxdWlyZSB0aGUgcm9sZXMgdG8gYmVcbiAgICogbGlmZWN5Y2xlLW1hbmFnZWQsIGNyZWF0ZSB0aGVtIGluIGEgZGVkaWNhdGVkIHN0YWNrIGFuZCBzZXQgdGhpcyB0b1xuICAgKiBgZmFsc2VgLCB0aGVuIHBhc3MgY3Jvc3Mtc3RhY2sgcmVmZXJlbmNlcyBhcyBuZWVkZWQuXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCwgdGhlIGNvbnN0cnVjdCBleHBlY3RzIHRoZSByb2xlcyB0byBhbHJlYWR5IGJlIHByZXNlbnQgYW5kXG4gICAqIHNraXBzIGNyZWF0aW5nIHRoZW0uIFRoZSBgZG1zVnBjUm9sZWAgYW5kIGBkbXNDbG91ZFdhdGNoUm9sZWAgcHJvcGVydGllc1xuICAgKiB3aWxsIGJlIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVEbXNTZXJ2aWNlUm9sZXM/OiBib29sZWFuO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTmFtaW5nIC8gbGlmZWN5Y2xlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogTG9naWNhbCBpZGVudGlmaWVyIGZvciB0aGUgcmVwbGljYXRpb24gY29uZmlnIHJlc291cmNlLlxuICAgKiBAZGVmYXVsdCB1bmlxdWUgbmFtZSBkZXJpdmVkIGZyb20gdGhlIGNvbnN0cnVjdCBpZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25Db25maWdJZGVudGlmaWVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBhcHBsaWVkIHRvIGFsbCByZXNvdXJjZXMgaW4gdGhlIHBpcGVsaW5lLlxuICAgKiBAZGVmYXVsdCBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogY2RrLlJlbW92YWxQb2xpY3k7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uc3RydWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBbiBMMyBDREsgcGF0dGVybiBjb25zdHJ1Y3QgdGhhdCBwcm92aXNpb25zIGEgRE1TIFNlcnZlcmxlc3MgcmVwbGljYXRpb25cbiAqIHBpcGVsaW5lOlxuICpcbiAqIC0gKipSZXBsaWNhdGlvbiBjb25maWcqKiDigJQgYmFja2VkIGJ5IGBDZm5SZXBsaWNhdGlvbkNvbmZpZ2A7IERNUyBhdXRvLXNjYWxlc1xuICogICBjYXBhY2l0eSBiZXR3ZWVuIGBtaW5DYXBhY2l0eVVuaXRzYCBhbmQgYG1heENhcGFjaXR5VW5pdHNgLlxuICogLSAqKlNvdXJjZSBlbmRwb2ludCoqIOKAlCBzdXBwb3J0cyBldmVyeSBlbmdpbmUgRE1TIHN1cHBvcnRzLlxuICogLSAqKlRhcmdldCBlbmRwb2ludCoqIOKAlCBzdXBwb3J0cyBldmVyeSBlbmdpbmUgRE1TIHN1cHBvcnRzLlxuICogLSAqKlN1Ym5ldCBncm91cCoqIOKAlCBwcml2YXRlIHN1Ym5ldCBwbGFjZW1lbnQuXG4gKiAtICoqS01TIGtleSoqIOKAlCBzdG9yYWdlIGVuY3J5cHRpb24gYXQgcmVzdCAoY3JlYXRlZCBpZiBub3QgcHJvdmlkZWQpLlxuICogLSAqKlNlY3VyaXR5IGdyb3VwKiog4oCUIGRlZGljYXRlZCBncm91cCAoY3JlYXRlZCBpZiBub3QgcHJvdmlkZWQpLlxuICogLSAqKklBTSByb2xlcyoqIOKAlCBgZG1zLXZwYy1yb2xlYCBhbmQgYGRtcy1jbG91ZHdhdGNoLWxvZ3Mtcm9sZWAuXG4gKiAtICoqQ2xvdWRXYXRjaCBsb2cgZ3JvdXAqKiDigJQgKG9wdGlvbmFsKSByZXRhaW5zIHJlcGxpY2F0aW9uIGxvZ3MuXG4gKlxuICogPiAqKkNEQyBzdGFydC9zdG9wIHBvc2l0aW9uIGxpbWl0YXRpb24qKjogYENmblJlcGxpY2F0aW9uQ29uZmlnYCBkb2VzIG5vdFxuICogPiBleHBvc2UgYGNkY1N0YXJ0VGltZWAgLyBgY2RjU3RhcnRQb3NpdGlvbmAgLyBgY2RjU3RvcFBvc2l0aW9uYC4gVG8gc3RhcnRcbiAqID4gZnJvbSBhIHNwZWNpZmljIHBvc2l0aW9uLCBjYWxsIHRoZSBgU3RhcnRSZXBsaWNhdGlvbmAgQVBJIGRpcmVjdGx5IGFmdGVyXG4gKiA+IHRoZSBjb25maWcgaXMgY3JlYXRlZCAoZS5nLiBmcm9tIGEgTGFtYmRhIGN1c3RvbSByZXNvdXJjZSBvciBDTEkpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwaXBlbGluZSA9IG5ldyBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmUodGhpcywgJ1NlcnZlcmxlc3NQaXBlbGluZScsIHtcbiAqICAgdnBjLFxuICogICBtYXhDYXBhY2l0eVVuaXRzOiA4LFxuICogICBtaWdyYXRpb25UeXBlOiBNaWdyYXRpb25UeXBlLkZVTExfTE9BRF9BTkRfQ0RDLFxuICogICBzb3VyY2VFbmRwb2ludDoge1xuICogICAgIGVuZ2luZTogRW5kcG9pbnRFbmdpbmUuTVlTUUwsXG4gKiAgICAgc2VydmVyTmFtZTogJ215c3FsLmV4YW1wbGUuY29tJyxcbiAqICAgICBwb3J0OiAzMzA2LFxuICogICAgIHVzZXJuYW1lOiAnZG1zX3VzZXInLFxuICogICAgIHBhc3N3b3JkOiBjZGsuU2VjcmV0VmFsdWUuc2VjcmV0c01hbmFnZXIoJ215c3FsLWRtcy1zZWNyZXQnKSxcbiAqICAgfSxcbiAqICAgdGFyZ2V0RW5kcG9pbnQ6IHtcbiAqICAgICBlbmdpbmU6IEVuZHBvaW50RW5naW5lLkFVUk9SQV9QT1NUR1JFU1FMLFxuICogICAgIHNlcnZlck5hbWU6IGNsdXN0ZXIuY2x1c3RlckVuZHBvaW50Lmhvc3RuYW1lLFxuICogICAgIHBvcnQ6IDU0MzIsXG4gKiAgICAgdXNlcm5hbWU6ICdkbXNfdXNlcicsXG4gKiAgICAgcGFzc3dvcmQ6IGNkay5TZWNyZXRWYWx1ZS5zZWNyZXRzTWFuYWdlcignYXVyb3JhLWRtcy1zZWNyZXQnKSxcbiAqICAgfSxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgRG1zU2VydmVybGVzc1BpcGVsaW5lIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIFRoZSB1bmRlcmx5aW5nIGBDZm5SZXBsaWNhdGlvbkNvbmZpZ2AgcmVzb3VyY2UuICovXG4gIHJlYWRvbmx5IGNmblJlcGxpY2F0aW9uQ29uZmlnOiBkbXMuQ2ZuUmVwbGljYXRpb25Db25maWc7XG5cbiAgLyoqIFRoZSBBUk4gb2YgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZy4gKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25Db25maWdBcm46IHN0cmluZztcblxuICAvKiogVGhlIHNvdXJjZSBlbmRwb2ludCB1c2VkIGJ5IHRoaXMgcGlwZWxpbmUuICovXG4gIHJlYWRvbmx5IHNvdXJjZTogSURtc0VuZHBvaW50O1xuXG4gIC8qKiBUaGUgdGFyZ2V0IGVuZHBvaW50IHVzZWQgYnkgdGhpcyBwaXBlbGluZS4gKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBJRG1zRW5kcG9pbnQ7XG5cbiAgLyoqIFRoZSByZXBsaWNhdGlvbiBzdWJuZXQgZ3JvdXAgY3JlYXRlZCBmb3IgdGhpcyBwaXBlbGluZS4gKi9cbiAgcmVhZG9ubHkgc3VibmV0R3JvdXA6IGRtcy5DZm5SZXBsaWNhdGlvblN1Ym5ldEdyb3VwO1xuXG4gIC8qKiBUaGUgS01TIGtleSB1c2VkIGZvciBzdG9yYWdlIGVuY3J5cHRpb24uICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk6IGttcy5JS2V5O1xuXG4gIC8qKiBUaGUgc2VjdXJpdHkgZ3JvdXAgYXR0YWNoZWQgdG8gdGhpcyBwaXBlbGluZS4gKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuXG4gIC8qKiBDbG91ZFdhdGNoIGxvZyBncm91cCBmb3IgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZyAoaWYgZW5hYmxlQ2xvdWRXYXRjaExvZ3MgaXMgdHJ1ZSkuICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwPzogbG9ncy5Mb2dHcm91cDtcblxuICAvKipcbiAgICogQ29uc3RydWN0IHdyYXBwaW5nIHRoZSBjdXN0b20gcmVzb3VyY2VzIHRoYXQgY3JlYXRlZCB0aGUgYGRtcy1jbG91ZHdhdGNoLWxvZ3Mtcm9sZWAuXG4gICAqIGB1bmRlZmluZWRgIHdoZW4gYGNyZWF0ZURtc1NlcnZpY2VSb2xlc2AgaXMgYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IGRtc0Nsb3VkV2F0Y2hSb2xlPzogQ29uc3RydWN0O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Qgd3JhcHBpbmcgdGhlIGN1c3RvbSByZXNvdXJjZXMgdGhhdCBjcmVhdGVkIHRoZSBgZG1zLXZwYy1yb2xlYC5cbiAgICogYHVuZGVmaW5lZGAgd2hlbiBgY3JlYXRlRG1zU2VydmljZVJvbGVzYCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgZG1zVnBjUm9sZT86IENvbnN0cnVjdDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRG1zU2VydmVybGVzc1BpcGVsaW5lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKHByb3BzKTtcblxuICAgIGNvbnN0IHJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1k7XG4gICAgY29uc3QgY3JlYXRlUm9sZXMgPSBwcm9wcy5jcmVhdGVEbXNTZXJ2aWNlUm9sZXMgPz8gdHJ1ZTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZG1zLXZwYy1yb2xlIOKAlCByZXF1aXJlZCBieSBETVMgdG8gcGxhY2UgdGhlIGNvbmZpZyBpbnNpZGUgYSBWUEMuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBpZiAoY3JlYXRlUm9sZXMpIHtcbiAgICAgIHRoaXMuZG1zVnBjUm9sZSA9IGVuc3VyZURtc1ZwY1JvbGUoY2RrLlN0YWNrLm9mKHRoaXMpKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIENsb3VkV2F0Y2ggbG9nIGdyb3VwICYgSUFNIHJvbGVcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGVuYWJsZUxvZ3MgPSBwcm9wcy5lbmFibGVDbG91ZFdhdGNoTG9ncyA/PyB0cnVlO1xuXG4gICAgaWYgKGVuYWJsZUxvZ3MpIHtcbiAgICAgIHRoaXMubG9nR3JvdXAgPSBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCAnTG9nR3JvdXAnLCB7XG4gICAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvZG1zL3NlcnZlcmxlc3MvJHtpZH1gLFxuICAgICAgICByZXRlbnRpb246IHByb3BzLmxvZ1JldGVudGlvbiA/PyBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRILFxuICAgICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChjcmVhdGVSb2xlcykge1xuICAgICAgICB0aGlzLmRtc0Nsb3VkV2F0Y2hSb2xlID0gZW5zdXJlRG1zQ2xvdWRXYXRjaFJvbGUoY2RrLlN0YWNrLm9mKHRoaXMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEtNUyBrZXlcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9XG4gICAgICBwcm9wcy5rbXNLZXkgPz9cbiAgICAgIG5ldyBrbXMuS2V5KHRoaXMsICdFbmNyeXB0aW9uS2V5Jywge1xuICAgICAgICBkZXNjcmlwdGlvbjogYERNUyBzZXJ2ZXJsZXNzIHJlcGxpY2F0aW9uIGVuY3J5cHRpb24ga2V5IGZvciAke2lkfWAsXG4gICAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiB0cnVlLFxuICAgICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNlY3VyaXR5IGdyb3VwXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBwcm92aWRlZFNncyA9IHByb3BzLnNlY3VyaXR5R3JvdXBzID8/IFtdO1xuICAgIGlmIChwcm92aWRlZFNncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCAnU2VjdXJpdHlHcm91cCcsIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRE1TIHNlcnZlcmxlc3MgcmVwbGljYXRpb24gc2VjdXJpdHkgZ3JvdXAgZm9yICR7aWR9YCxcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlY3VyaXR5R3JvdXAgPSBwcm92aWRlZFNnc1swXTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwSWRzID1cbiAgICAgIHByb3ZpZGVkU2dzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBwcm92aWRlZFNncy5tYXAoKHNnKSA9PiBzZy5zZWN1cml0eUdyb3VwSWQpXG4gICAgICAgIDogW3RoaXMuc2VjdXJpdHlHcm91cC5zZWN1cml0eUdyb3VwSWRdO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTdWJuZXQgZ3JvdXBcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHN1Ym5ldFNlbGVjdGlvbiA9IHByb3BzLnZwY1N1Ym5ldHMgPz8ge1xuICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICB9O1xuICAgIGNvbnN0IHN1Ym5ldHMgPSBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyhzdWJuZXRTZWxlY3Rpb24pO1xuXG4gICAgdGhpcy5zdWJuZXRHcm91cCA9IG5ldyBkbXMuQ2ZuUmVwbGljYXRpb25TdWJuZXRHcm91cCh0aGlzLCAnU3VibmV0R3JvdXAnLCB7XG4gICAgICByZXBsaWNhdGlvblN1Ym5ldEdyb3VwRGVzY3JpcHRpb246IGBETVMgc2VydmVybGVzcyBzdWJuZXQgZ3JvdXAgZm9yICR7aWR9YCxcbiAgICAgIHN1Ym5ldElkczogc3VibmV0cy5zdWJuZXRJZHMsXG4gICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNvdXJjZSBlbmRwb2ludFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgaWYgKHByb3BzLmV4aXN0aW5nU291cmNlRW5kcG9pbnQpIHtcbiAgICAgIHRoaXMuc291cmNlID0gcHJvcHMuZXhpc3RpbmdTb3VyY2VFbmRwb2ludDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc291cmNlT3B0cyA9IHByb3BzLnNvdXJjZUVuZHBvaW50ITtcbiAgICAgIHRoaXMuc291cmNlID0gbmV3IERtc0VuZHBvaW50KHRoaXMsICdTb3VyY2VFbmRwb2ludCcsIHtcbiAgICAgICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGUuU09VUkNFLFxuICAgICAgICBlbmdpbmU6IHNvdXJjZU9wdHMuZW5naW5lLFxuICAgICAgICBlbmRwb2ludElkZW50aWZpZXI6IHNvdXJjZU9wdHMuZW5kcG9pbnRJZGVudGlmaWVyLFxuICAgICAgICBzZXJ2ZXJOYW1lOiBzb3VyY2VPcHRzLnNlcnZlck5hbWUsXG4gICAgICAgIHBvcnQ6IHNvdXJjZU9wdHMucG9ydCxcbiAgICAgICAgdXNlcm5hbWU6IHNvdXJjZU9wdHMudXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkOiBzb3VyY2VPcHRzLnBhc3N3b3JkLFxuICAgICAgICBkYXRhYmFzZU5hbWU6IHNvdXJjZU9wdHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBleHRyYUNvbm5lY3Rpb25BdHRyaWJ1dGVzOiBzb3VyY2VPcHRzLmV4dHJhQ29ubmVjdGlvbkF0dHJpYnV0ZXMsXG4gICAgICAgIGNlcnRpZmljYXRlQXJuOiBzb3VyY2VPcHRzLmNlcnRpZmljYXRlQXJuLFxuICAgICAgICBzc2xNb2RlOiBzb3VyY2VPcHRzLnNzbE1vZGUsXG4gICAgICAgIG15U3FsU2V0dGluZ3M6IHNvdXJjZU9wdHMubXlTcWxTZXR0aW5ncyxcbiAgICAgICAgcG9zdGdyZVNxbFNldHRpbmdzOiBzb3VyY2VPcHRzLnBvc3RncmVTcWxTZXR0aW5ncyxcbiAgICAgICAgb3JhY2xlU2V0dGluZ3M6IHNvdXJjZU9wdHMub3JhY2xlU2V0dGluZ3MsXG4gICAgICAgIHNxbFNlcnZlclNldHRpbmdzOiBzb3VyY2VPcHRzLnNxbFNlcnZlclNldHRpbmdzLFxuICAgICAgICBzYXBBc2VTZXR0aW5nczogc291cmNlT3B0cy5zYXBBc2VTZXR0aW5ncyxcbiAgICAgICAgZGIyU2V0dGluZ3M6IHNvdXJjZU9wdHMuZGIyU2V0dGluZ3MsXG4gICAgICAgIG1vbmdvRGJTZXR0aW5nczogc291cmNlT3B0cy5tb25nb0RiU2V0dGluZ3MsXG4gICAgICAgIHMzU2V0dGluZ3M6IHNvdXJjZU9wdHMuczNTZXR0aW5ncyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVGFyZ2V0IGVuZHBvaW50XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBpZiAocHJvcHMuZXhpc3RpbmdUYXJnZXRFbmRwb2ludCkge1xuICAgICAgdGhpcy50YXJnZXQgPSBwcm9wcy5leGlzdGluZ1RhcmdldEVuZHBvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0YXJnZXRPcHRzID0gcHJvcHMudGFyZ2V0RW5kcG9pbnQhO1xuICAgICAgdGhpcy50YXJnZXQgPSBuZXcgRG1zRW5kcG9pbnQodGhpcywgJ1RhcmdldEVuZHBvaW50Jywge1xuICAgICAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZS5UQVJHRVQsXG4gICAgICAgIGVuZ2luZTogdGFyZ2V0T3B0cy5lbmdpbmUsXG4gICAgICAgIGVuZHBvaW50SWRlbnRpZmllcjogdGFyZ2V0T3B0cy5lbmRwb2ludElkZW50aWZpZXIsXG4gICAgICAgIHNlcnZlck5hbWU6IHRhcmdldE9wdHMuc2VydmVyTmFtZSxcbiAgICAgICAgcG9ydDogdGFyZ2V0T3B0cy5wb3J0LFxuICAgICAgICB1c2VybmFtZTogdGFyZ2V0T3B0cy51c2VybmFtZSxcbiAgICAgICAgcGFzc3dvcmQ6IHRhcmdldE9wdHMucGFzc3dvcmQsXG4gICAgICAgIGRhdGFiYXNlTmFtZTogdGFyZ2V0T3B0cy5kYXRhYmFzZU5hbWUsXG4gICAgICAgIGV4dHJhQ29ubmVjdGlvbkF0dHJpYnV0ZXM6IHRhcmdldE9wdHMuZXh0cmFDb25uZWN0aW9uQXR0cmlidXRlcyxcbiAgICAgICAgY2VydGlmaWNhdGVBcm46IHRhcmdldE9wdHMuY2VydGlmaWNhdGVBcm4sXG4gICAgICAgIHNzbE1vZGU6IHRhcmdldE9wdHMuc3NsTW9kZSxcbiAgICAgICAgbXlTcWxTZXR0aW5nczogdGFyZ2V0T3B0cy5teVNxbFNldHRpbmdzLFxuICAgICAgICBwb3N0Z3JlU3FsU2V0dGluZ3M6IHRhcmdldE9wdHMucG9zdGdyZVNxbFNldHRpbmdzLFxuICAgICAgICBvcmFjbGVTZXR0aW5nczogdGFyZ2V0T3B0cy5vcmFjbGVTZXR0aW5ncyxcbiAgICAgICAgc3FsU2VydmVyU2V0dGluZ3M6IHRhcmdldE9wdHMuc3FsU2VydmVyU2V0dGluZ3MsXG4gICAgICAgIHNhcEFzZVNldHRpbmdzOiB0YXJnZXRPcHRzLnNhcEFzZVNldHRpbmdzLFxuICAgICAgICBkYjJTZXR0aW5nczogdGFyZ2V0T3B0cy5kYjJTZXR0aW5ncyxcbiAgICAgICAgbW9uZ29EYlNldHRpbmdzOiB0YXJnZXRPcHRzLm1vbmdvRGJTZXR0aW5ncyxcbiAgICAgICAgczNTZXR0aW5nczogdGFyZ2V0T3B0cy5zM1NldHRpbmdzLFxuICAgICAgICBkeW5hbW9EYlNldHRpbmdzOiB0YXJnZXRPcHRzLmR5bmFtb0RiU2V0dGluZ3MsXG4gICAgICAgIHJlZHNoaWZ0U2V0dGluZ3M6IHRhcmdldE9wdHMucmVkc2hpZnRTZXR0aW5ncyxcbiAgICAgICAga2luZXNpc1NldHRpbmdzOiB0YXJnZXRPcHRzLmtpbmVzaXNTZXR0aW5ncyxcbiAgICAgICAga2Fma2FTZXR0aW5nczogdGFyZ2V0T3B0cy5rYWZrYVNldHRpbmdzLFxuICAgICAgICBvcGVuU2VhcmNoU2V0dGluZ3M6IHRhcmdldE9wdHMub3BlblNlYXJjaFNldHRpbmdzLFxuICAgICAgICBuZXB0dW5lU2V0dGluZ3M6IHRhcmdldE9wdHMubmVwdHVuZVNldHRpbmdzLFxuICAgICAgICByZWRpc1NldHRpbmdzOiB0YXJnZXRPcHRzLnJlZGlzU2V0dGluZ3MsXG4gICAgICAgIHJlbW92YWxQb2xpY3ksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFRhYmxlIG1hcHBpbmdzIOKAlCBkZWZhdWx0IHRvIFwiaW5jbHVkZSBldmVyeXRoaW5nXCJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHRhYmxlTWFwcGluZ3NKc29uID1cbiAgICAgIHByb3BzLnRhYmxlTWFwcGluZ3MgPz8gbmV3IFRhYmxlTWFwcGluZ3MoKS5pbmNsdWRlU2NoZW1hKCclJykudG9Kc29uKCk7XG4gICAgLy8gQ2ZuUmVwbGljYXRpb25Db25maWcudGFibGVNYXBwaW5ncyBleHBlY3RzIGEgSlNPTiBvYmplY3QsIG5vdCBhIHN0cmluZy5cbiAgICBjb25zdCB0YWJsZU1hcHBpbmdzT2JqID0gSlNPTi5wYXJzZSh0YWJsZU1hcHBpbmdzSnNvbik7XG5cbiAgICBjb25zdCByZXBsaWNhdGlvblNldHRpbmdzT2JqID1cbiAgICAgIHByb3BzLnRhc2tTZXR0aW5ncyAhPT0gdW5kZWZpbmVkID8gSlNPTi5wYXJzZShwcm9wcy50YXNrU2V0dGluZ3MpIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBSZXBsaWNhdGlvbiBjb25maWcgaWRlbnRpZmllclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgY29uZmlnSWRlbnRpZmllciA9XG4gICAgICBwcm9wcy5yZXBsaWNhdGlvbkNvbmZpZ0lkZW50aWZpZXIgPz9cbiAgICAgIGNkay5OYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDYzIH0pLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIENmblJlcGxpY2F0aW9uQ29uZmlnXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aGlzLmNmblJlcGxpY2F0aW9uQ29uZmlnID0gbmV3IGRtcy5DZm5SZXBsaWNhdGlvbkNvbmZpZyh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICByZXBsaWNhdGlvbkNvbmZpZ0lkZW50aWZpZXI6IGNvbmZpZ0lkZW50aWZpZXIsXG4gICAgICByZXBsaWNhdGlvblR5cGU6IHByb3BzLm1pZ3JhdGlvblR5cGUsXG4gICAgICBzb3VyY2VFbmRwb2ludEFybjogdGhpcy5zb3VyY2UuZW5kcG9pbnRBcm4sXG4gICAgICB0YXJnZXRFbmRwb2ludEFybjogdGhpcy50YXJnZXQuZW5kcG9pbnRBcm4sXG4gICAgICB0YWJsZU1hcHBpbmdzOiB0YWJsZU1hcHBpbmdzT2JqLFxuICAgICAgcmVwbGljYXRpb25TZXR0aW5nczogcmVwbGljYXRpb25TZXR0aW5nc09iaixcbiAgICAgIGNvbXB1dGVDb25maWc6IHtcbiAgICAgICAgbWF4Q2FwYWNpdHlVbml0czogcHJvcHMubWF4Q2FwYWNpdHlVbml0cyxcbiAgICAgICAgbWluQ2FwYWNpdHlVbml0czogcHJvcHMubWluQ2FwYWNpdHlVbml0cyxcbiAgICAgICAgbXVsdGlBejogcHJvcHMubXVsdGlBeiA/PyBmYWxzZSxcbiAgICAgICAga21zS2V5SWQ6IHRoaXMuZW5jcnlwdGlvbktleS5rZXlBcm4sXG4gICAgICAgIHJlcGxpY2F0aW9uU3VibmV0R3JvdXBJZDogdGhpcy5zdWJuZXRHcm91cC5yZWYsXG4gICAgICAgIHZwY1NlY3VyaXR5R3JvdXBJZHM6IHNlY3VyaXR5R3JvdXBJZHMsXG4gICAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBwcm9wcy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5jZm5SZXBsaWNhdGlvbkNvbmZpZy5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG5cbiAgICAvLyBkbXMtdnBjLXJvbGUgbXVzdCBleGlzdCBiZWZvcmUgRE1TIGNhbiBkZXNjcmliZSBWUEMgc3VibmV0cyAoc3VibmV0IGdyb3VwKVxuICAgIC8vIG9yIHBsYWNlIHRoZSByZXBsaWNhdGlvbiBjb25maWcgaW5zaWRlIGEgVlBDLlxuICAgIGlmICh0aGlzLmRtc1ZwY1JvbGUpIHtcbiAgICAgIHRoaXMuc3VibmV0R3JvdXAubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMuZG1zVnBjUm9sZSk7XG4gICAgICB0aGlzLmNmblJlcGxpY2F0aW9uQ29uZmlnLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmRtc1ZwY1JvbGUpO1xuICAgIH1cblxuICAgIHRoaXMucmVwbGljYXRpb25Db25maWdBcm4gPSB0aGlzLmNmblJlcGxpY2F0aW9uQ29uZmlnLnJlZjtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQcml2YXRlIGhlbHBlcnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVByb3BzKHByb3BzOiBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmVQcm9wcyk6IHZvaWQge1xuICAgIGlmICghVkFMSURfQ0FQQUNJVFlfVU5JVFMuaGFzKHByb3BzLm1heENhcGFjaXR5VW5pdHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtYXhDYXBhY2l0eVVuaXRzIG11c3QgYmUgb25lIG9mICR7Wy4uLlZBTElEX0NBUEFDSVRZX1VOSVRTXS5qb2luKCcsICcpfS4gR290OiAke3Byb3BzLm1heENhcGFjaXR5VW5pdHN9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHByb3BzLm1pbkNhcGFjaXR5VW5pdHMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIVZBTElEX0NBUEFDSVRZX1VOSVRTLmhhcyhwcm9wcy5taW5DYXBhY2l0eVVuaXRzKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbWluQ2FwYWNpdHlVbml0cyBtdXN0IGJlIG9uZSBvZiAke1suLi5WQUxJRF9DQVBBQ0lUWV9VTklUU10uam9pbignLCAnKX0uIEdvdDogJHtwcm9wcy5taW5DYXBhY2l0eVVuaXRzfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwcm9wcy5taW5DYXBhY2l0eVVuaXRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLm1pbkNhcGFjaXR5VW5pdHMgPiBwcm9wcy5tYXhDYXBhY2l0eVVuaXRzXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtaW5DYXBhY2l0eVVuaXRzICgke3Byb3BzLm1pbkNhcGFjaXR5VW5pdHN9KSBtdXN0IGJlIDw9IG1heENhcGFjaXR5VW5pdHMgKCR7cHJvcHMubWF4Q2FwYWNpdHlVbml0c30pLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1NvdXJjZSA9ICEhcHJvcHMuc291cmNlRW5kcG9pbnQ7XG4gICAgY29uc3QgaGFzRXhpc3RpbmdTb3VyY2UgPSAhIXByb3BzLmV4aXN0aW5nU291cmNlRW5kcG9pbnQ7XG4gICAgaWYgKGhhc1NvdXJjZSAmJiBoYXNFeGlzdGluZ1NvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlIGVpdGhlciBgc291cmNlRW5kcG9pbnRgIG9yIGBleGlzdGluZ1NvdXJjZUVuZHBvaW50YCwgbm90IGJvdGguJyk7XG4gICAgfVxuICAgIGlmICghaGFzU291cmNlICYmICFoYXNFeGlzdGluZ1NvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgb2YgYHNvdXJjZUVuZHBvaW50YCBvciBgZXhpc3RpbmdTb3VyY2VFbmRwb2ludGAgaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVGFyZ2V0ID0gISFwcm9wcy50YXJnZXRFbmRwb2ludDtcbiAgICBjb25zdCBoYXNFeGlzdGluZ1RhcmdldCA9ICEhcHJvcHMuZXhpc3RpbmdUYXJnZXRFbmRwb2ludDtcbiAgICBpZiAoaGFzVGFyZ2V0ICYmIGhhc0V4aXN0aW5nVGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGUgZWl0aGVyIGB0YXJnZXRFbmRwb2ludGAgb3IgYGV4aXN0aW5nVGFyZ2V0RW5kcG9pbnRgLCBub3QgYm90aC4nKTtcbiAgICB9XG4gICAgaWYgKCFoYXNUYXJnZXQgJiYgIWhhc0V4aXN0aW5nVGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09uZSBvZiBgdGFyZ2V0RW5kcG9pbnRgIG9yIGBleGlzdGluZ1RhcmdldEVuZHBvaW50YCBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -42,6 +42,12 @@ export declare enum RuleObjectLocator {
42
42
  TABLE_TABLESPACE = "table-tablespace",
43
43
  INDEX_TABLESPACE = "index-tablespace"
44
44
  }
45
+ /** DynamoDB attribute sub-type for object-mapping rules. */
46
+ export declare enum DynamoDbAttributeSubType {
47
+ STRING = "string",
48
+ NUMBER = "number",
49
+ BINARY = "binary"
50
+ }
45
51
  /** Data type for added columns. */
46
52
  export declare enum ColumnDataType {
47
53
  STRING = "string",
@@ -87,6 +93,67 @@ export interface RuleObjectLocatorValue {
87
93
  readonly tableName?: string;
88
94
  readonly columnName?: string;
89
95
  }
96
+ /**
97
+ * Mapping from a source column (or DMS expression) to a DynamoDB partition or
98
+ * sort key attribute. Exactly one of `sourceColumn` or `value` must be set.
99
+ */
100
+ export interface DynamoDbKeyMapping {
101
+ /**
102
+ * Name of a single column on the relational source. The builder wraps this
103
+ * in the DMS expression `${sourceColumn}`. Mutually exclusive with `value`.
104
+ */
105
+ readonly sourceColumn?: string;
106
+ /**
107
+ * Raw DMS value expression, used verbatim. Use this for composite keys or
108
+ * other expressions like `'CUSTOMER#${customer_id}'`. Mutually exclusive
109
+ * with `sourceColumn`.
110
+ */
111
+ readonly value?: string;
112
+ /** Name of the partition/sort key attribute on the DynamoDB target item. */
113
+ readonly targetAttributeName: string;
114
+ /** DynamoDB attribute sub-type (`string`, `number`, or `binary`). */
115
+ readonly attributeSubType: DynamoDbAttributeSubType;
116
+ }
117
+ /**
118
+ * Mapping from a source column (or DMS expression) to a non-key attribute on
119
+ * the DynamoDB target. Exactly one of `sourceColumn` or `value` must be set.
120
+ * Source columns not listed in `attributeMappings` or `excludeColumns` pass
121
+ * through with the source column name.
122
+ */
123
+ export interface DynamoDbAttributeMapping {
124
+ /**
125
+ * Name of a single column on the relational source. The builder wraps this
126
+ * in the DMS expression `${sourceColumn}`. Mutually exclusive with `value`.
127
+ */
128
+ readonly sourceColumn?: string;
129
+ /**
130
+ * Raw DMS value expression, used verbatim. Use this for composite values or
131
+ * other expressions like `'STATUS#${status}'`. Mutually exclusive with
132
+ * `sourceColumn`.
133
+ */
134
+ readonly value?: string;
135
+ /** Name of the attribute on the DynamoDB target item. */
136
+ readonly targetAttributeName: string;
137
+ /** DynamoDB attribute sub-type (`string`, `number`, or `binary`). */
138
+ readonly attributeSubType: DynamoDbAttributeSubType;
139
+ }
140
+ /** Options for `TableMappings.mapToDynamoDb`. */
141
+ export interface DynamoDbObjectMappingOptions {
142
+ /** Name of the target DynamoDB table. */
143
+ readonly targetTableName: string;
144
+ /** Mapping for the DynamoDB partition (hash) key. Required. */
145
+ readonly partitionKey: DynamoDbKeyMapping;
146
+ /** Mapping for the DynamoDB sort (range) key. Optional. */
147
+ readonly sortKey?: DynamoDbKeyMapping;
148
+ /** Source columns to exclude from the migrated item. */
149
+ readonly excludeColumns?: string[];
150
+ /**
151
+ * Additional column-to-attribute mappings. Use this to rename non-key
152
+ * columns or change their DynamoDB sub-type. Columns not listed here pass
153
+ * through with the source column name.
154
+ */
155
+ readonly attributeMappings?: DynamoDbAttributeMapping[];
156
+ }
90
157
  /** Represents a single, fully built rule in the table-mappings JSON. */
91
158
  export interface TableMappingRule {
92
159
  readonly ruleType: string;
@@ -172,6 +239,56 @@ export declare class TableMappings {
172
239
  */
173
240
  addColumn(schemaName: string, tableName: string, column: AddColumnDefinition): TableMappings;
174
241
  private buildDataType;
242
+ /**
243
+ * Map a relational source table to a DynamoDB target table.
244
+ *
245
+ * Emits a DMS `object-mapping` rule with `rule-action: map-record-to-record`.
246
+ * DMS requires this rule type when the target endpoint is DynamoDB; the
247
+ * partition key (and optional sort key) tell DMS how to build the item key
248
+ * from source columns.
249
+ *
250
+ * Source columns not listed in `attributeMappings` or `excludeColumns` are
251
+ * migrated with the source column name as the attribute name.
252
+ *
253
+ * For each key or attribute mapping, set either `sourceColumn` (a single
254
+ * column wrapped as `${col}`) or `value` (a raw DMS expression, e.g.
255
+ * `'CUSTOMER#${customer_id}'` for composite keys). Exactly one is required.
256
+ *
257
+ * Calling this method twice with the same `schemaName`/`tableName` emits two
258
+ * separate rules; DMS will reject duplicate object-mapping rules at deploy
259
+ * time. Call it once per source table.
260
+ *
261
+ * @example
262
+ * const mappings = new TableMappings()
263
+ * .includeTable('public', 'orders')
264
+ * .mapToDynamoDb('public', 'orders', {
265
+ * targetTableName: 'Orders',
266
+ * // Composite partition key from a literal prefix + source column:
267
+ * partitionKey: {
268
+ * value: 'CUSTOMER#${customer_id}',
269
+ * targetAttributeName: 'PK',
270
+ * attributeSubType: DynamoDbAttributeSubType.STRING,
271
+ * },
272
+ * // Bare source column for the sort key:
273
+ * sortKey: {
274
+ * sourceColumn: 'created_at',
275
+ * targetAttributeName: 'CreatedAt',
276
+ * attributeSubType: DynamoDbAttributeSubType.STRING,
277
+ * },
278
+ * excludeColumns: ['internal_flag'],
279
+ * attributeMappings: [
280
+ * {
281
+ * sourceColumn: 'customer_id',
282
+ * targetAttributeName: 'CustomerId',
283
+ * attributeSubType: DynamoDbAttributeSubType.STRING,
284
+ * },
285
+ * ],
286
+ * })
287
+ * .toJson();
288
+ */
289
+ mapToDynamoDb(schemaName: string, tableName: string, options: DynamoDbObjectMappingOptions): TableMappings;
290
+ private checkNotExcluded;
291
+ private buildAttributeMapping;
175
292
  private addTransformationRule;
176
293
  /**
177
294
  * Serialise the accumulated rules to the JSON string expected by DMS.
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.TableMappings = exports.ColumnDataType = exports.RuleObjectLocator = exports.TransformationAction = exports.SelectionAction = void 0;
4
+ exports.TableMappings = exports.ColumnDataType = exports.DynamoDbAttributeSubType = exports.RuleObjectLocator = exports.TransformationAction = exports.SelectionAction = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  /**
7
7
  * Table mappings define which schemas/tables DMS migrates and how they are
@@ -53,6 +53,13 @@ var RuleObjectLocator;
53
53
  RuleObjectLocator["TABLE_TABLESPACE"] = "table-tablespace";
54
54
  RuleObjectLocator["INDEX_TABLESPACE"] = "index-tablespace";
55
55
  })(RuleObjectLocator || (exports.RuleObjectLocator = RuleObjectLocator = {}));
56
+ /** DynamoDB attribute sub-type for object-mapping rules. */
57
+ var DynamoDbAttributeSubType;
58
+ (function (DynamoDbAttributeSubType) {
59
+ DynamoDbAttributeSubType["STRING"] = "string";
60
+ DynamoDbAttributeSubType["NUMBER"] = "number";
61
+ DynamoDbAttributeSubType["BINARY"] = "binary";
62
+ })(DynamoDbAttributeSubType || (exports.DynamoDbAttributeSubType = DynamoDbAttributeSubType = {}));
56
63
  /** Data type for added columns. */
57
64
  var ColumnDataType;
58
65
  (function (ColumnDataType) {
@@ -243,6 +250,123 @@ class TableMappings {
243
250
  dt.scale = column.columnScale;
244
251
  return dt;
245
252
  }
253
+ // -------------------------------------------------------------------------
254
+ // DynamoDB object mapping
255
+ // -------------------------------------------------------------------------
256
+ /**
257
+ * Map a relational source table to a DynamoDB target table.
258
+ *
259
+ * Emits a DMS `object-mapping` rule with `rule-action: map-record-to-record`.
260
+ * DMS requires this rule type when the target endpoint is DynamoDB; the
261
+ * partition key (and optional sort key) tell DMS how to build the item key
262
+ * from source columns.
263
+ *
264
+ * Source columns not listed in `attributeMappings` or `excludeColumns` are
265
+ * migrated with the source column name as the attribute name.
266
+ *
267
+ * For each key or attribute mapping, set either `sourceColumn` (a single
268
+ * column wrapped as `${col}`) or `value` (a raw DMS expression, e.g.
269
+ * `'CUSTOMER#${customer_id}'` for composite keys). Exactly one is required.
270
+ *
271
+ * Calling this method twice with the same `schemaName`/`tableName` emits two
272
+ * separate rules; DMS will reject duplicate object-mapping rules at deploy
273
+ * time. Call it once per source table.
274
+ *
275
+ * @example
276
+ * const mappings = new TableMappings()
277
+ * .includeTable('public', 'orders')
278
+ * .mapToDynamoDb('public', 'orders', {
279
+ * targetTableName: 'Orders',
280
+ * // Composite partition key from a literal prefix + source column:
281
+ * partitionKey: {
282
+ * value: 'CUSTOMER#${customer_id}',
283
+ * targetAttributeName: 'PK',
284
+ * attributeSubType: DynamoDbAttributeSubType.STRING,
285
+ * },
286
+ * // Bare source column for the sort key:
287
+ * sortKey: {
288
+ * sourceColumn: 'created_at',
289
+ * targetAttributeName: 'CreatedAt',
290
+ * attributeSubType: DynamoDbAttributeSubType.STRING,
291
+ * },
292
+ * excludeColumns: ['internal_flag'],
293
+ * attributeMappings: [
294
+ * {
295
+ * sourceColumn: 'customer_id',
296
+ * targetAttributeName: 'CustomerId',
297
+ * attributeSubType: DynamoDbAttributeSubType.STRING,
298
+ * },
299
+ * ],
300
+ * })
301
+ * .toJson();
302
+ */
303
+ mapToDynamoDb(schemaName, tableName, options) {
304
+ const excluded = new Set(options.excludeColumns ?? []);
305
+ this.checkNotExcluded(options.partitionKey, excluded);
306
+ if (options.sortKey) {
307
+ this.checkNotExcluded(options.sortKey, excluded);
308
+ }
309
+ for (const mapping of options.attributeMappings ?? []) {
310
+ this.checkNotExcluded(mapping, excluded);
311
+ }
312
+ const id = this.nextId++;
313
+ const attributeMappings = [
314
+ this.buildAttributeMapping(options.partitionKey),
315
+ ];
316
+ if (options.sortKey) {
317
+ attributeMappings.push(this.buildAttributeMapping(options.sortKey));
318
+ }
319
+ if (options.attributeMappings) {
320
+ for (const mapping of options.attributeMappings) {
321
+ attributeMappings.push(this.buildAttributeMapping(mapping));
322
+ }
323
+ }
324
+ const mappingParameters = {
325
+ 'partition-key-name': options.partitionKey.targetAttributeName,
326
+ };
327
+ if (options.sortKey) {
328
+ mappingParameters['sort-key-name'] = options.sortKey.targetAttributeName;
329
+ }
330
+ if (options.excludeColumns && options.excludeColumns.length > 0) {
331
+ mappingParameters['exclude-columns'] = options.excludeColumns;
332
+ }
333
+ mappingParameters['attribute-mappings'] = attributeMappings;
334
+ this.rules.push({
335
+ 'rule-type': 'object-mapping',
336
+ 'rule-id': String(id),
337
+ 'rule-name': `${id}`,
338
+ 'rule-action': 'map-record-to-record',
339
+ 'object-locator': {
340
+ 'schema-name': schemaName,
341
+ 'table-name': tableName,
342
+ },
343
+ 'target-table-name': options.targetTableName,
344
+ 'mapping-parameters': mappingParameters,
345
+ });
346
+ return this;
347
+ }
348
+ checkNotExcluded(mapping, excluded) {
349
+ if (mapping.sourceColumn !== undefined && excluded.has(mapping.sourceColumn)) {
350
+ throw new Error(`DynamoDB attribute mapping for '${mapping.targetAttributeName}' uses ` +
351
+ `sourceColumn '${mapping.sourceColumn}', which also appears in ` +
352
+ 'excludeColumns. Remove it from one or the other.');
353
+ }
354
+ }
355
+ buildAttributeMapping(mapping) {
356
+ const hasSource = mapping.sourceColumn !== undefined;
357
+ const hasValue = mapping.value !== undefined;
358
+ if (hasSource === hasValue) {
359
+ throw new Error(`DynamoDB attribute mapping for '${mapping.targetAttributeName}': ` +
360
+ 'exactly one of sourceColumn or value must be set.');
361
+ }
362
+ const value = hasValue ? mapping.value : `\${${mapping.sourceColumn}}`;
363
+ return {
364
+ 'target-attribute-name': mapping.targetAttributeName,
365
+ 'attribute-type': 'scalar',
366
+ 'attribute-sub-type': mapping.attributeSubType,
367
+ 'value': value,
368
+ };
369
+ }
246
370
  addTransformationRule(schemaName, tableName, columnName, ruleTarget, action, value) {
247
371
  const id = this.nextId++;
248
372
  const objectLocator = {
@@ -280,5 +404,5 @@ class TableMappings {
280
404
  }
281
405
  exports.TableMappings = TableMappings;
282
406
  _a = JSII_RTTI_SYMBOL_1;
283
- TableMappings[_a] = { fqn: "cdk-dms-replication.TableMappings", version: "0.1.12" };
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbWFwcGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGFibGUtbWFwcGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7O0dBTUc7QUFFSCw4RUFBOEU7QUFDOUUsUUFBUTtBQUNSLDhFQUE4RTtBQUU5RSxvREFBb0Q7QUFDcEQsSUFBWSxlQUlYO0FBSkQsV0FBWSxlQUFlO0lBQ3pCLHNDQUFtQixDQUFBO0lBQ25CLHNDQUFtQixDQUFBO0lBQ25CLHdDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyxlQUFlLCtCQUFmLGVBQWUsUUFJMUI7QUFFRCwwQ0FBMEM7QUFDMUMsSUFBWSxvQkFxQlg7QUFyQkQsV0FBWSxvQkFBb0I7SUFDOUIscUNBQXFDO0lBQ3JDLCtEQUF1QyxDQUFBO0lBQ3ZDLHFDQUFxQztJQUNyQywrREFBdUMsQ0FBQTtJQUN2QyxnQ0FBZ0M7SUFDaEMsaURBQXlCLENBQUE7SUFDekIscUNBQXFDO0lBQ3JDLHVEQUErQixDQUFBO0lBQy9CLGdDQUFnQztJQUNoQyxpREFBeUIsQ0FBQTtJQUN6QixxQ0FBcUM7SUFDckMsdURBQStCLENBQUE7SUFDL0IseUJBQXlCO0lBQ3pCLHlDQUFpQixDQUFBO0lBQ2pCLHlCQUF5QjtJQUN6Qix1REFBK0IsQ0FBQTtJQUMvQixvQkFBb0I7SUFDcEIsaURBQXlCLENBQUE7SUFDekIsMEJBQTBCO0lBQzFCLHlEQUFpQyxDQUFBO0FBQ25DLENBQUMsRUFyQlcsb0JBQW9CLG9DQUFwQixvQkFBb0IsUUFxQi9CO0FBRUQsc0NBQXNDO0FBQ3RDLElBQVksaUJBTVg7QUFORCxXQUFZLGlCQUFpQjtJQUMzQixzQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBZSxDQUFBO0lBQ2Ysc0NBQWlCLENBQUE7SUFDakIsMERBQXFDLENBQUE7SUFDckMsMERBQXFDLENBQUE7QUFDdkMsQ0FBQyxFQU5XLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBTTVCO0FBRUQsbUNBQW1D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LFNBQVM7U0FDeEIsQ0FBQztRQUNGLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzdCLGFBQWEsQ0FBQyxhQUFhLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDNUMsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUE0QjtZQUNwQyxXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3JCLFdBQVcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNwQixhQUFhLEVBQUUsVUFBVTtZQUN6QixnQkFBZ0IsRUFBRSxhQUFhO1lBQy9CLGFBQWEsRUFBRSxNQUFNO1NBQ3RCLENBQUM7UUFDRixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLFNBQVM7SUFDVCw0RUFBNEU7SUFFNUU7Ozs7T0FJRztJQUNILE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDOztBQTFWSCxzQ0EyVkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRhYmxlIG1hcHBpbmdzIGRlZmluZSB3aGljaCBzY2hlbWFzL3RhYmxlcyBETVMgbWlncmF0ZXMgYW5kIGhvdyB0aGV5IGFyZVxuICogdHJhbnNmb3JtZWQuIFRoaXMgYnVpbGRlciBwcm9kdWNlcyB0aGUgSlNPTiBzdHJpbmcgdGhhdCBETVMgZXhwZWN0cyBmb3JcbiAqIHRoZSBgdGFibGVNYXBwaW5nc2AgcHJvcGVydHkgb2YgYSByZXBsaWNhdGlvbiB0YXNrLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rtcy9sYXRlc3QvdXNlcmd1aWRlL0NIQVBfVGFza3MuQ3VzdG9taXppbmdUYXNrcy5UYWJsZU1hcHBpbmcuaHRtbFxuICovXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW51bXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogV2hldGhlciB0aGUgcnVsZSBzZWxlY3RzIG9yIGV4Y2x1ZGVzIG9iamVjdHMuICovXG5leHBvcnQgZW51bSBTZWxlY3Rpb25BY3Rpb24ge1xuICBJTkNMVURFID0gJ2luY2x1ZGUnLFxuICBFWENMVURFID0gJ2V4Y2x1ZGUnLFxuICBFWFBMSUNJVCA9ICdleHBsaWNpdCcsXG59XG5cbi8qKiBUYWJsZS1sZXZlbCB0cmFuc2Zvcm1hdGlvbiBhY3Rpb25zLiAqL1xuZXhwb3J0IGVudW0gVHJhbnNmb3JtYXRpb25BY3Rpb24ge1xuICAvKiogQ29udmVydCB0aGUgbmFtZSB0byBsb3dlcmNhc2UuICovXG4gIENPTlZFUlRfTE9XRVJDQVNFID0gJ2NvbnZlcnQtbG93ZXJjYXNlJyxcbiAgLyoqIENvbnZlcnQgdGhlIG5hbWUgdG8gdXBwZXJjYXNlLiAqL1xuICBDT05WRVJUX1VQUEVSQ0FTRSA9ICdjb252ZXJ0LXVwcGVyY2FzZScsXG4gIC8qKiBBZGQgYSBwcmVmaXggdG8gdGhlIG5hbWUuICovXG4gIEFERF9QUkVGSVggPSAnYWRkLXByZWZpeCcsXG4gIC8qKiBSZW1vdmUgYSBwcmVmaXggZnJvbSB0aGUgbmFtZS4gKi9cbiAgUkVNT1ZFX1BSRUZJWCA9ICdyZW1vdmUtcHJlZml4JyxcbiAgLyoqIEFkZCBhIHN1ZmZpeCB0byB0aGUgbmFtZS4gKi9cbiAgQUREX1NVRkZJWCA9ICdhZGQtc3VmZml4JyxcbiAgLyoqIFJlbW92ZSBhIHN1ZmZpeCBmcm9tIHRoZSBuYW1lLiAqL1xuICBSRU1PVkVfU1VGRklYID0gJ3JlbW92ZS1zdWZmaXgnLFxuICAvKiogUmVuYW1lIHRoZSBvYmplY3QuICovXG4gIFJFTkFNRSA9ICdyZW5hbWUnLFxuICAvKiogUmVtb3ZlIHRoZSBjb2x1bW4uICovXG4gIFJFTU9WRV9DT0xVTU4gPSAncmVtb3ZlLWNvbHVtbicsXG4gIC8qKiBBZGQgYSBjb2x1bW4uICovXG4gIEFERF9DT0xVTU4gPSAnYWRkLWNvbHVtbicsXG4gIC8qKiBJbmNsdWRlIHRoZSBjb2x1bW4uICovXG4gIElOQ0xVREVfQ09MVU1OID0gJ2luY2x1ZGUtY29sdW1uJyxcbn1cblxuLyoqIFRoZSBvYmplY3QgdHlwZSBhIHJ1bGUgdGFyZ2V0cy4gKi9cbmV4cG9ydCBlbnVtIFJ1bGVPYmplY3RMb2NhdG9yIHtcbiAgU0NIRU1BID0gJ3NjaGVtYScsXG4gIFRBQkxFID0gJ3RhYmxlJyxcbiAgQ09MVU1OID0gJ2NvbHVtbicsXG4gIFRBQkxFX1RBQkxFU1BBQ0UgPSAndGFibGUtdGFibGVzcGFjZScsXG4gIElOREVYX1RBQkxFU1BBQ0UgPSAnaW5kZXgtdGFibGVzcGFjZScsXG59XG5cbi8qKiBEYXRhIHR5cGUgZm9yIGFkZGVkIGNvbHVtbnMuICovXG5leHBvcnQgZW51bSBDb2x1bW5EYXRhVHlwZSB7XG4gIFNUUklORyA9ICdzdHJpbmcnLFxuICBJTlQ0ID0gJ2ludDQnLFxuICBJTlQ4ID0gJ2ludDgnLFxuICBGTE9BVDQgPSAnZmxvYXQ0JyxcbiAgRkxPQVQ4ID0gJ2Zsb2F0OCcsXG4gIE5VTUVSSUMgPSAnbnVtZXJpYycsXG4gIERBVEVUSU1FID0gJ2RhdGV0aW1lJyxcbiAgQllURVMgPSAnYnl0ZXMnLFxuICBCTE9CID0gJ2Jsb2InLFxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEludGVyZmFjZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQSBjb2x1bW4gYWRkZWQgdmlhIGFuIEFERF9DT0xVTU4gdHJhbnNmb3JtYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZENvbHVtbkRlZmluaXRpb24ge1xuICAvKiogTmFtZSBvZiB0aGUgbmV3IGNvbHVtbi4gKi9cbiAgcmVhZG9ubHkgY29sdW1uTmFtZTogc3RyaW5nO1xuICAvKiogRGF0YSB0eXBlIG9mIHRoZSBuZXcgY29sdW1uLiAqL1xuICByZWFkb25seSBjb2x1bW5UeXBlOiBDb2x1bW5EYXRhVHlwZTtcbiAgLyoqIENoYXJhY3RlciBsZW5ndGggZm9yIHN0cmluZyBjb2x1bW5zLiAqL1xuICByZWFkb25seSBjb2x1bW5MZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBQcmVjaXNpb24gZm9yIG51bWVyaWMgY29sdW1ucy4gKi9cbiAgcmVhZG9ubHkgY29sdW1uUHJlY2lzaW9uPzogbnVtYmVyO1xuICAvKiogU2NhbGUgZm9yIG51bWVyaWMgY29sdW1ucy4gKi9cbiAgcmVhZG9ubHkgY29sdW1uU2NhbGU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBDb25zdGFudCBzdHJpbmcgdmFsdWUgdG8gcG9wdWxhdGUgdGhlIGNvbHVtbiB3aXRoLiBFbWl0dGVkIGFzIGFcbiAgICogc2luZ2xlLXF1b3RlZCBETVMgZXhwcmVzc2lvbiBsaXRlcmFsIOKAlCB1c2Ugb25seSBmb3Igc3RyaW5nIGNvbHVtbiB0eXBlcy5cbiAgICogRm9yIG51bWVyaWMgb3IgZGF0ZXRpbWUgdHlwZXMsIHVzZSBgZXhwcmVzc2lvbmAgd2l0aCBhbiB1bnF1b3RlZCBsaXRlcmFsXG4gICAqIChlLmcuIGBleHByZXNzaW9uOiAnNDInYCkuXG4gICAqIEV4YWN0bHkgb25lIG9mIGBjb2x1bW5WYWx1ZWAgb3IgYGV4cHJlc3Npb25gIG11c3QgYmUgc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29sdW1uVmFsdWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBETVMgZXhwcmVzc2lvbiB0byBwb3B1bGF0ZSB0aGUgY29sdW1uIChlLmcuIGAkdGltZXN0YW1wYCxcbiAgICogYCdFTlRJVFkjJyB8fCAkaWRgLCBvciBhbiB1bnF1b3RlZCBudW1lcmljIGxpdGVyYWwgbGlrZSBgNDJgKS5cbiAgICogRXhhY3RseSBvbmUgb2YgYGNvbHVtblZhbHVlYCBvciBgZXhwcmVzc2lvbmAgbXVzdCBiZSBzZXQuXG4gICAqL1xuICByZWFkb25seSBleHByZXNzaW9uPzogc3RyaW5nO1xufVxuXG4vKiogT2JqZWN0IGxvY2F0b3IgaWRlbnRpZnlpbmcgdGhlIHNjaGVtYSwgdGFibGUsIGFuZCBvcHRpb25hbCBjb2x1bW4gYSBydWxlIHRhcmdldHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVPYmplY3RMb2NhdG9yVmFsdWUge1xuICByZWFkb25seSBzY2hlbWFOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhYmxlTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgY29sdW1uTmFtZT86IHN0cmluZztcbn1cblxuLyoqIFJlcHJlc2VudHMgYSBzaW5nbGUsIGZ1bGx5IGJ1aWx0IHJ1bGUgaW4gdGhlIHRhYmxlLW1hcHBpbmdzIEpTT04uICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlTWFwcGluZ1J1bGUge1xuICByZWFkb25seSBydWxlVHlwZTogc3RyaW5nO1xuICByZWFkb25seSBydWxlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgb2JqZWN0TG9jYXRvcjogUnVsZU9iamVjdExvY2F0b3JWYWx1ZTtcbiAgcmVhZG9ubHkgcnVsZUFjdGlvbjogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcbiAgcmVhZG9ubHkgb2xkVmFsdWU/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQnVpbGRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRmx1ZW50IGJ1aWxkZXIgZm9yIERNUyB0YWJsZSBtYXBwaW5ncy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWFwcGluZ3MgPSBuZXcgVGFibGVNYXBwaW5ncygpXG4gKiAgIC5pbmNsdWRlU2NoZW1hKCdwdWJsaWMnKVxuICogICAuaW5jbHVkZVRhYmxlKCdwdWJsaWMnLCAnb3JkZXJzJylcbiAqICAgLmV4Y2x1ZGVUYWJsZSgncHVibGljJywgJ2F1ZGl0X2xvZycpXG4gKiAgIC5yZW5hbWVTY2hlbWEoJ3B1YmxpYycsICdwcm9kJylcbiAqICAgLnRvTG93ZXJDYXNlVGFibGUoJ3B1YmxpYycsICclJylcbiAqICAgLnRvSnNvbigpO1xuICovXG5leHBvcnQgY2xhc3MgVGFibGVNYXBwaW5ncyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcnVsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcbiAgcHJpdmF0ZSBuZXh0SWQ6IG51bWJlciA9IDE7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTZWxlY3Rpb24gcnVsZXNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGFsbCB0YWJsZXMgaW4gYSBzY2hlbWEuXG4gICAqIFVzZSBgJWAgYXMgYSB3aWxkY2FyZCBmb3IgYHNjaGVtYU5hbWVgIHRvIGluY2x1ZGUgYWxsIHNjaGVtYXMuXG4gICAqL1xuICBpbmNsdWRlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFNlbGVjdGlvblJ1bGUoc2NoZW1hTmFtZSwgJyUnLCBTZWxlY3Rpb25BY3Rpb24uSU5DTFVERSk7XG4gIH1cblxuICAvKiogRXhjbHVkZSBhbGwgdGFibGVzIGluIGEgc2NoZW1hLiAqL1xuICBleGNsdWRlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFNlbGVjdGlvblJ1bGUoc2NoZW1hTmFtZSwgJyUnLCBTZWxlY3Rpb25BY3Rpb24uRVhDTFVERSk7XG4gIH1cblxuICAvKipcbiAgICogSW5jbHVkZSBhIHNwZWNpZmljIHRhYmxlIChvciBhIHdpbGRjYXJkIHBhdHRlcm4pIHdpdGhpbiBhIHNjaGVtYS5cbiAgICogVXNlIGAlYCBmb3IgYHRhYmxlTmFtZWAgdG8gbWF0Y2ggYWxsIHRhYmxlcyBpbiB0aGUgc2NoZW1hLlxuICAgKi9cbiAgaW5jbHVkZVRhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTZWxlY3Rpb25SdWxlKHNjaGVtYU5hbWUsIHRhYmxlTmFtZSwgU2VsZWN0aW9uQWN0aW9uLklOQ0xVREUpO1xuICB9XG5cbiAgLyoqIEV4Y2x1ZGUgYSBzcGVjaWZpYyB0YWJsZSAob3Igd2lsZGNhcmQpIHdpdGhpbiBhIHNjaGVtYS4gKi9cbiAgZXhjbHVkZVRhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTZWxlY3Rpb25SdWxlKHNjaGVtYU5hbWUsIHRhYmxlTmFtZSwgU2VsZWN0aW9uQWN0aW9uLkVYQ0xVREUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxpY2l0bHkgaW5jbHVkZSBhIHNpbmdsZSB0YWJsZS4gVW5saWtlIGBpbmNsdWRlYCwgYGV4cGxpY2l0YCBtZWFucyBETVNcbiAgICogb25seSBtaWdyYXRlcyB0aGlzIG9uZSB0YWJsZSByZWdhcmRsZXNzIG9mIG90aGVyIGBpbmNsdWRlYCBydWxlcy5cbiAgICovXG4gIGV4cGxpY2l0VGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFNlbGVjdGlvblJ1bGUoc2NoZW1hTmFtZSwgdGFibGVOYW1lLCBTZWxlY3Rpb25BY3Rpb24uRVhQTElDSVQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZWxlY3Rpb25SdWxlKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBhY3Rpb246IFNlbGVjdGlvbkFjdGlvbixcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgY29uc3QgaWQgPSB0aGlzLm5leHRJZCsrO1xuICAgIHRoaXMucnVsZXMucHVzaCh7XG4gICAgICAncnVsZS10eXBlJzogJ3NlbGVjdGlvbicsXG4gICAgICAncnVsZS1pZCc6IFN0cmluZyhpZCksXG4gICAgICAncnVsZS1uYW1lJzogYCR7aWR9YCxcbiAgICAgICdvYmplY3QtbG9jYXRvcic6IHtcbiAgICAgICAgJ3NjaGVtYS1uYW1lJzogc2NoZW1hTmFtZSxcbiAgICAgICAgJ3RhYmxlLW5hbWUnOiB0YWJsZU5hbWUsXG4gICAgICB9LFxuICAgICAgJ3J1bGUtYWN0aW9uJzogYWN0aW9uLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBUcmFuc2Zvcm1hdGlvbiBydWxlcyDigJQgc2NoZW1hXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogUmVuYW1lIGEgc2NoZW1hLiAqL1xuICByZW5hbWVTY2hlbWEoc2NoZW1hTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgJyUnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuU0NIRU1BLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uUkVOQU1FLFxuICAgICAgbmV3TmFtZSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgYWxsIHNjaGVtYSBuYW1lcyB0byBsb3dlcmNhc2UuICovXG4gIHRvTG93ZXJDYXNlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICAnJScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5TQ0hFTUEsXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX0xPV0VSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgYWxsIHNjaGVtYSBuYW1lcyB0byB1cHBlcmNhc2UuICovXG4gIHRvVXBwZXJDYXNlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICAnJScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5TQ0hFTUEsXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX1VQUEVSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIEFkZCBhIHByZWZpeCB0byBzY2hlbWEgbmFtZXMuICovXG4gIGFkZFByZWZpeFRvU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgJyUnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuU0NIRU1BLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX1BSRUZJWCxcbiAgICAgIHByZWZpeCxcbiAgICApO1xuICB9XG5cbiAgLyoqIEFkZCBhIHN1ZmZpeCB0byBzY2hlbWEgbmFtZXMuICovXG4gIGFkZFN1ZmZpeFRvU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgJyUnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuU0NIRU1BLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX1NVRkZJWCxcbiAgICAgIHN1ZmZpeCxcbiAgICApO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBUcmFuc2Zvcm1hdGlvbiBydWxlcyDigJQgdGFibGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBSZW5hbWUgYSB0YWJsZS4gKi9cbiAgcmVuYW1lVGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZywgbmV3TmFtZTogc3RyaW5nKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLlRBQkxFLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uUkVOQU1FLFxuICAgICAgbmV3TmFtZSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgbWF0Y2hpbmcgdGFibGUgbmFtZXMgdG8gbG93ZXJjYXNlLiBVc2UgYCVgIHRvIG1hdGNoIGFsbCB0YWJsZXMuICovXG4gIHRvTG93ZXJDYXNlVGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5UQUJMRSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkNPTlZFUlRfTE9XRVJDQVNFLFxuICAgICk7XG4gIH1cblxuICAvKiogQ29udmVydCBtYXRjaGluZyB0YWJsZSBuYW1lcyB0byB1cHBlcmNhc2UuICovXG4gIHRvVXBwZXJDYXNlVGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5UQUJMRSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkNPTlZFUlRfVVBQRVJDQVNFLFxuICAgICk7XG4gIH1cblxuICAvKiogQWRkIGEgcHJlZml4IHRvIHRhYmxlIG5hbWVzLiAqL1xuICBhZGRQcmVmaXhUb1RhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLlRBQkxFLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX1BSRUZJWCxcbiAgICAgIHByZWZpeCxcbiAgICApO1xuICB9XG5cbiAgLyoqIEFkZCBhIHN1ZmZpeCB0byB0YWJsZSBuYW1lcy4gKi9cbiAgYWRkU3VmZml4VG9UYWJsZShzY2hlbWFOYW1lOiBzdHJpbmcsIHRhYmxlTmFtZTogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5UQUJMRSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkFERF9TVUZGSVgsXG4gICAgICBzdWZmaXgsXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVHJhbnNmb3JtYXRpb24gcnVsZXMg4oCUIGNvbHVtblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIFJlbmFtZSBhIGNvbHVtbiBpbiBhIHRhYmxlLiAqL1xuICByZW5hbWVDb2x1bW4oXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBuZXdOYW1lOiBzdHJpbmcsXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICBjb2x1bW5OYW1lLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuQ09MVU1OLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uUkVOQU1FLFxuICAgICAgbmV3TmFtZSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgbWF0Y2hpbmcgY29sdW1uIG5hbWVzIHRvIGxvd2VyY2FzZS4gKi9cbiAgdG9Mb3dlckNhc2VDb2x1bW4oXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIGNvbHVtbk5hbWUsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5DT0xVTU4sXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX0xPV0VSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgbWF0Y2hpbmcgY29sdW1uIG5hbWVzIHRvIHVwcGVyY2FzZS4gKi9cbiAgdG9VcHBlckNhc2VDb2x1bW4oXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIGNvbHVtbk5hbWUsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5DT0xVTU4sXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX1VQUEVSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJlbW92ZSBhIGNvbHVtbiBmcm9tIGEgdGFibGUuICovXG4gIHJlbW92ZUNvbHVtbihcbiAgICBzY2hlbWFOYW1lOiBzdHJpbmcsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICApOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgdGFibGVOYW1lLFxuICAgICAgY29sdW1uTmFtZSxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLkNPTFVNTixcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLlJFTU9WRV9DT0xVTU4sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgY29sdW1uIHRvIGEgdGFibGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG1hcHBpbmdzLmFkZENvbHVtbigncHVibGljJywgJ29yZGVycycsIHtcbiAgICogICBjb2x1bW5OYW1lOiAnbWlncmF0aW9uX3RzJyxcbiAgICogICBjb2x1bW5UeXBlOiBDb2x1bW5EYXRhVHlwZS5EQVRFVElNRSxcbiAgICogICBleHByZXNzaW9uOiAnJHRpbWVzdGFtcCcsXG4gICAqIH0pO1xuICAgKi9cbiAgYWRkQ29sdW1uKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW46IEFkZENvbHVtbkRlZmluaXRpb24sXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0SWQrKztcbiAgICBjb25zdCBvYmplY3RMb2NhdG9yOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3NjaGVtYS1uYW1lJzogc2NoZW1hTmFtZSxcbiAgICAgICd0YWJsZS1uYW1lJzogdGFibGVOYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCBydWxlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICdydWxlLXR5cGUnOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICAgJ3J1bGUtaWQnOiBTdHJpbmcoaWQpLFxuICAgICAgJ3J1bGUtbmFtZSc6IGAke2lkfWAsXG4gICAgICAnb2JqZWN0LWxvY2F0b3InOiBvYmplY3RMb2NhdG9yLFxuICAgICAgJ3J1bGUtYWN0aW9uJzogVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX0NPTFVNTixcbiAgICAgICdydWxlLXRhcmdldCc6ICdjb2x1bW4nLFxuICAgICAgJ3ZhbHVlJzogY29sdW1uLmNvbHVtbk5hbWUsXG4gICAgICAnZGF0YS10eXBlJzogdGhpcy5idWlsZERhdGFUeXBlKGNvbHVtbiksXG4gICAgfTtcblxuICAgIGlmIChjb2x1bW4uZXhwcmVzc2lvbikge1xuICAgICAgcnVsZS5leHByZXNzaW9uID0gY29sdW1uLmV4cHJlc3Npb247XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uY29sdW1uVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRE1TIGV4cHJlc3Npb24gc3ludGF4OiBzdHJpbmcgbGl0ZXJhbHMgdXNlIHNpbmdsZSBxdW90ZXMgKGVzY2FwZSAnIGFzICcnKVxuICAgICAgcnVsZS5leHByZXNzaW9uID0gYCcke2NvbHVtbi5jb2x1bW5WYWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XG4gICAgfVxuXG4gICAgdGhpcy5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZERhdGFUeXBlKGNvbHVtbjogQWRkQ29sdW1uRGVmaW5pdGlvbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBkdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IHR5cGU6IGNvbHVtbi5jb2x1bW5UeXBlIH07XG4gICAgaWYgKGNvbHVtbi5jb2x1bW5MZW5ndGggIT09IHVuZGVmaW5lZCkgZHQubGVuZ3RoID0gY29sdW1uLmNvbHVtbkxlbmd0aDtcbiAgICBpZiAoY29sdW1uLmNvbHVtblByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSBkdC5wcmVjaXNpb24gPSBjb2x1bW4uY29sdW1uUHJlY2lzaW9uO1xuICAgIGlmIChjb2x1bW4uY29sdW1uU2NhbGUgIT09IHVuZGVmaW5lZCkgZHQuc2NhbGUgPSBjb2x1bW4uY29sdW1uU2NhbGU7XG4gICAgcmV0dXJuIGR0O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBydWxlVGFyZ2V0OiBSdWxlT2JqZWN0TG9jYXRvcixcbiAgICBhY3Rpb246IFRyYW5zZm9ybWF0aW9uQWN0aW9uLFxuICAgIHZhbHVlPzogc3RyaW5nLFxuICApOiBUYWJsZU1hcHBpbmdzIHtcbiAgICBjb25zdCBpZCA9IHRoaXMubmV4dElkKys7XG4gICAgY29uc3Qgb2JqZWN0TG9jYXRvcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdzY2hlbWEtbmFtZSc6IHNjaGVtYU5hbWUsXG4gICAgICAndGFibGUtbmFtZSc6IHRhYmxlTmFtZSxcbiAgICB9O1xuICAgIGlmIChjb2x1bW5OYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iamVjdExvY2F0b3JbJ2NvbHVtbi1uYW1lJ10gPSBjb2x1bW5OYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgJ3J1bGUtdHlwZSc6ICd0cmFuc2Zvcm1hdGlvbicsXG4gICAgICAncnVsZS1pZCc6IFN0cmluZyhpZCksXG4gICAgICAncnVsZS1uYW1lJzogYCR7aWR9YCxcbiAgICAgICdydWxlLXRhcmdldCc6IHJ1bGVUYXJnZXQsXG4gICAgICAnb2JqZWN0LWxvY2F0b3InOiBvYmplY3RMb2NhdG9yLFxuICAgICAgJ3J1bGUtYWN0aW9uJzogYWN0aW9uLFxuICAgIH07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE91dHB1dFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFNlcmlhbGlzZSB0aGUgYWNjdW11bGF0ZWQgcnVsZXMgdG8gdGhlIEpTT04gc3RyaW5nIGV4cGVjdGVkIGJ5IERNUy5cbiAgICogUGFzc2VzIHRoZSByZXN1bHQgZGlyZWN0bHkgdG8gYHJlcGxpY2F0aW9uVGFza1NldHRpbmdzYCBvclxuICAgKiBgRG1zUmVwbGljYXRpb25UYXNrLnRhYmxlTWFwcGluZ3NgLlxuICAgKi9cbiAgdG9Kc29uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgcnVsZXM6IHRoaXMucnVsZXMgfSwgbnVsbCwgMik7XG4gIH1cbn1cbiJdfQ==
407
+ TableMappings[_a] = { fqn: "cdk-dms-replication.TableMappings", version: "0.1.13" };
408
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbWFwcGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGFibGUtbWFwcGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7O0dBTUc7QUFFSCw4RUFBOEU7QUFDOUUsUUFBUTtBQUNSLDhFQUE4RTtBQUU5RSxvREFBb0Q7QUFDcEQsSUFBWSxlQUlYO0FBSkQsV0FBWSxlQUFlO0lBQ3pCLHNDQUFtQixDQUFBO0lBQ25CLHNDQUFtQixDQUFBO0lBQ25CLHdDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyxlQUFlLCtCQUFmLGVBQWUsUUFJMUI7QUFFRCwwQ0FBMEM7QUFDMUMsSUFBWSxvQkFxQlg7QUFyQkQsV0FBWSxvQkFBb0I7SUFDOUIscUNBQXFDO0lBQ3JDLCtEQUF1QyxDQUFBO0lBQ3ZDLHFDQUFxQztJQUNyQywrREFBdUMsQ0FBQTtJQUN2QyxnQ0FBZ0M7SUFDaEMsaURBQXlCLENBQUE7SUFDekIscUNBQXFDO0lBQ3JDLHVEQUErQixDQUFBO0lBQy9CLGdDQUFnQztJQUNoQyxpREFBeUIsQ0FBQTtJQUN6QixxQ0FBcUM7SUFDckMsdURBQStCLENBQUE7SUFDL0IseUJBQXlCO0lBQ3pCLHlDQUFpQixDQUFBO0lBQ2pCLHlCQUF5QjtJQUN6Qix1REFBK0IsQ0FBQTtJQUMvQixvQkFBb0I7SUFDcEIsaURBQXlCLENBQUE7SUFDekIsMEJBQTBCO0lBQzFCLHlEQUFpQyxDQUFBO0FBQ25DLENBQUMsRUFyQlcsb0JBQW9CLG9DQUFwQixvQkFBb0IsUUFxQi9CO0FBRUQsc0NBQXNDO0FBQ3RDLElBQVksaUJBTVg7QUFORCxXQUFZLGlCQUFpQjtJQUMzQixzQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBZSxDQUFBO0lBQ2Ysc0NBQWlCLENBQUE7SUFDakIsMERBQXFDLENBQUE7SUFDckMsMERBQXFDLENBQUE7QUFDdkMsQ0FBQyxFQU5XLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBTTVCO0FBRUQsNERBQTRE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QVMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3JCLFdBQVcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNwQixhQUFhLEVBQUUsVUFBVTtZQUN6QixnQkFBZ0IsRUFBRSxhQUFhO1lBQy9CLGFBQWEsRUFBRSxNQUFNO1NBQ3RCLENBQUM7UUFDRixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLFNBQVM7SUFDVCw0RUFBNEU7SUFFNUU7Ozs7T0FJRztJQUNILE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDOztBQXBlSCxzQ0FxZUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRhYmxlIG1hcHBpbmdzIGRlZmluZSB3aGljaCBzY2hlbWFzL3RhYmxlcyBETVMgbWlncmF0ZXMgYW5kIGhvdyB0aGV5IGFyZVxuICogdHJhbnNmb3JtZWQuIFRoaXMgYnVpbGRlciBwcm9kdWNlcyB0aGUgSlNPTiBzdHJpbmcgdGhhdCBETVMgZXhwZWN0cyBmb3JcbiAqIHRoZSBgdGFibGVNYXBwaW5nc2AgcHJvcGVydHkgb2YgYSByZXBsaWNhdGlvbiB0YXNrLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rtcy9sYXRlc3QvdXNlcmd1aWRlL0NIQVBfVGFza3MuQ3VzdG9taXppbmdUYXNrcy5UYWJsZU1hcHBpbmcuaHRtbFxuICovXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW51bXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogV2hldGhlciB0aGUgcnVsZSBzZWxlY3RzIG9yIGV4Y2x1ZGVzIG9iamVjdHMuICovXG5leHBvcnQgZW51bSBTZWxlY3Rpb25BY3Rpb24ge1xuICBJTkNMVURFID0gJ2luY2x1ZGUnLFxuICBFWENMVURFID0gJ2V4Y2x1ZGUnLFxuICBFWFBMSUNJVCA9ICdleHBsaWNpdCcsXG59XG5cbi8qKiBUYWJsZS1sZXZlbCB0cmFuc2Zvcm1hdGlvbiBhY3Rpb25zLiAqL1xuZXhwb3J0IGVudW0gVHJhbnNmb3JtYXRpb25BY3Rpb24ge1xuICAvKiogQ29udmVydCB0aGUgbmFtZSB0byBsb3dlcmNhc2UuICovXG4gIENPTlZFUlRfTE9XRVJDQVNFID0gJ2NvbnZlcnQtbG93ZXJjYXNlJyxcbiAgLyoqIENvbnZlcnQgdGhlIG5hbWUgdG8gdXBwZXJjYXNlLiAqL1xuICBDT05WRVJUX1VQUEVSQ0FTRSA9ICdjb252ZXJ0LXVwcGVyY2FzZScsXG4gIC8qKiBBZGQgYSBwcmVmaXggdG8gdGhlIG5hbWUuICovXG4gIEFERF9QUkVGSVggPSAnYWRkLXByZWZpeCcsXG4gIC8qKiBSZW1vdmUgYSBwcmVmaXggZnJvbSB0aGUgbmFtZS4gKi9cbiAgUkVNT1ZFX1BSRUZJWCA9ICdyZW1vdmUtcHJlZml4JyxcbiAgLyoqIEFkZCBhIHN1ZmZpeCB0byB0aGUgbmFtZS4gKi9cbiAgQUREX1NVRkZJWCA9ICdhZGQtc3VmZml4JyxcbiAgLyoqIFJlbW92ZSBhIHN1ZmZpeCBmcm9tIHRoZSBuYW1lLiAqL1xuICBSRU1PVkVfU1VGRklYID0gJ3JlbW92ZS1zdWZmaXgnLFxuICAvKiogUmVuYW1lIHRoZSBvYmplY3QuICovXG4gIFJFTkFNRSA9ICdyZW5hbWUnLFxuICAvKiogUmVtb3ZlIHRoZSBjb2x1bW4uICovXG4gIFJFTU9WRV9DT0xVTU4gPSAncmVtb3ZlLWNvbHVtbicsXG4gIC8qKiBBZGQgYSBjb2x1bW4uICovXG4gIEFERF9DT0xVTU4gPSAnYWRkLWNvbHVtbicsXG4gIC8qKiBJbmNsdWRlIHRoZSBjb2x1bW4uICovXG4gIElOQ0xVREVfQ09MVU1OID0gJ2luY2x1ZGUtY29sdW1uJyxcbn1cblxuLyoqIFRoZSBvYmplY3QgdHlwZSBhIHJ1bGUgdGFyZ2V0cy4gKi9cbmV4cG9ydCBlbnVtIFJ1bGVPYmplY3RMb2NhdG9yIHtcbiAgU0NIRU1BID0gJ3NjaGVtYScsXG4gIFRBQkxFID0gJ3RhYmxlJyxcbiAgQ09MVU1OID0gJ2NvbHVtbicsXG4gIFRBQkxFX1RBQkxFU1BBQ0UgPSAndGFibGUtdGFibGVzcGFjZScsXG4gIElOREVYX1RBQkxFU1BBQ0UgPSAnaW5kZXgtdGFibGVzcGFjZScsXG59XG5cbi8qKiBEeW5hbW9EQiBhdHRyaWJ1dGUgc3ViLXR5cGUgZm9yIG9iamVjdC1tYXBwaW5nIHJ1bGVzLiAqL1xuZXhwb3J0IGVudW0gRHluYW1vRGJBdHRyaWJ1dGVTdWJUeXBlIHtcbiAgU1RSSU5HID0gJ3N0cmluZycsXG4gIE5VTUJFUiA9ICdudW1iZXInLFxuICBCSU5BUlkgPSAnYmluYXJ5Jyxcbn1cblxuLyoqIERhdGEgdHlwZSBmb3IgYWRkZWQgY29sdW1ucy4gKi9cbmV4cG9ydCBlbnVtIENvbHVtbkRhdGFUeXBlIHtcbiAgU1RSSU5HID0gJ3N0cmluZycsXG4gIElOVDQgPSAnaW50NCcsXG4gIElOVDggPSAnaW50OCcsXG4gIEZMT0FUNCA9ICdmbG9hdDQnLFxuICBGTE9BVDggPSAnZmxvYXQ4JyxcbiAgTlVNRVJJQyA9ICdudW1lcmljJyxcbiAgREFURVRJTUUgPSAnZGF0ZXRpbWUnLFxuICBCWVRFUyA9ICdieXRlcycsXG4gIEJMT0IgPSAnYmxvYicsXG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSW50ZXJmYWNlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBIGNvbHVtbiBhZGRlZCB2aWEgYW4gQUREX0NPTFVNTiB0cmFuc2Zvcm1hdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQ29sdW1uRGVmaW5pdGlvbiB7XG4gIC8qKiBOYW1lIG9mIHRoZSBuZXcgY29sdW1uLiAqL1xuICByZWFkb25seSBjb2x1bW5OYW1lOiBzdHJpbmc7XG4gIC8qKiBEYXRhIHR5cGUgb2YgdGhlIG5ldyBjb2x1bW4uICovXG4gIHJlYWRvbmx5IGNvbHVtblR5cGU6IENvbHVtbkRhdGFUeXBlO1xuICAvKiogQ2hhcmFjdGVyIGxlbmd0aCBmb3Igc3RyaW5nIGNvbHVtbnMuICovXG4gIHJlYWRvbmx5IGNvbHVtbkxlbmd0aD86IG51bWJlcjtcbiAgLyoqIFByZWNpc2lvbiBmb3IgbnVtZXJpYyBjb2x1bW5zLiAqL1xuICByZWFkb25seSBjb2x1bW5QcmVjaXNpb24/OiBudW1iZXI7XG4gIC8qKiBTY2FsZSBmb3IgbnVtZXJpYyBjb2x1bW5zLiAqL1xuICByZWFkb25seSBjb2x1bW5TY2FsZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIENvbnN0YW50IHN0cmluZyB2YWx1ZSB0byBwb3B1bGF0ZSB0aGUgY29sdW1uIHdpdGguIEVtaXR0ZWQgYXMgYVxuICAgKiBzaW5nbGUtcXVvdGVkIERNUyBleHByZXNzaW9uIGxpdGVyYWwg4oCUIHVzZSBvbmx5IGZvciBzdHJpbmcgY29sdW1uIHR5cGVzLlxuICAgKiBGb3IgbnVtZXJpYyBvciBkYXRldGltZSB0eXBlcywgdXNlIGBleHByZXNzaW9uYCB3aXRoIGFuIHVucXVvdGVkIGxpdGVyYWxcbiAgICogKGUuZy4gYGV4cHJlc3Npb246ICc0MidgKS5cbiAgICogRXhhY3RseSBvbmUgb2YgYGNvbHVtblZhbHVlYCBvciBgZXhwcmVzc2lvbmAgbXVzdCBiZSBzZXQuXG4gICAqL1xuICByZWFkb25seSBjb2x1bW5WYWx1ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIERNUyBleHByZXNzaW9uIHRvIHBvcHVsYXRlIHRoZSBjb2x1bW4gKGUuZy4gYCR0aW1lc3RhbXBgLFxuICAgKiBgJ0VOVElUWSMnIHx8ICRpZGAsIG9yIGFuIHVucXVvdGVkIG51bWVyaWMgbGl0ZXJhbCBsaWtlIGA0MmApLlxuICAgKiBFeGFjdGx5IG9uZSBvZiBgY29sdW1uVmFsdWVgIG9yIGBleHByZXNzaW9uYCBtdXN0IGJlIHNldC5cbiAgICovXG4gIHJlYWRvbmx5IGV4cHJlc3Npb24/OiBzdHJpbmc7XG59XG5cbi8qKiBPYmplY3QgbG9jYXRvciBpZGVudGlmeWluZyB0aGUgc2NoZW1hLCB0YWJsZSwgYW5kIG9wdGlvbmFsIGNvbHVtbiBhIHJ1bGUgdGFyZ2V0cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZU9iamVjdExvY2F0b3JWYWx1ZSB7XG4gIHJlYWRvbmx5IHNjaGVtYU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdGFibGVOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjb2x1bW5OYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1hcHBpbmcgZnJvbSBhIHNvdXJjZSBjb2x1bW4gKG9yIERNUyBleHByZXNzaW9uKSB0byBhIER5bmFtb0RCIHBhcnRpdGlvbiBvclxuICogc29ydCBrZXkgYXR0cmlidXRlLiBFeGFjdGx5IG9uZSBvZiBgc291cmNlQ29sdW1uYCBvciBgdmFsdWVgIG11c3QgYmUgc2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RiS2V5TWFwcGluZyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIGEgc2luZ2xlIGNvbHVtbiBvbiB0aGUgcmVsYXRpb25hbCBzb3VyY2UuIFRoZSBidWlsZGVyIHdyYXBzIHRoaXNcbiAgICogaW4gdGhlIERNUyBleHByZXNzaW9uIGAke3NvdXJjZUNvbHVtbn1gLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgdmFsdWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlQ29sdW1uPzogc3RyaW5nO1xuICAvKipcbiAgICogUmF3IERNUyB2YWx1ZSBleHByZXNzaW9uLCB1c2VkIHZlcmJhdGltLiBVc2UgdGhpcyBmb3IgY29tcG9zaXRlIGtleXMgb3JcbiAgICogb3RoZXIgZXhwcmVzc2lvbnMgbGlrZSBgJ0NVU1RPTUVSIyR7Y3VzdG9tZXJfaWR9J2AuIE11dHVhbGx5IGV4Y2x1c2l2ZVxuICAgKiB3aXRoIGBzb3VyY2VDb2x1bW5gLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBOYW1lIG9mIHRoZSBwYXJ0aXRpb24vc29ydCBrZXkgYXR0cmlidXRlIG9uIHRoZSBEeW5hbW9EQiB0YXJnZXQgaXRlbS4gKi9cbiAgcmVhZG9ubHkgdGFyZ2V0QXR0cmlidXRlTmFtZTogc3RyaW5nO1xuICAvKiogRHluYW1vREIgYXR0cmlidXRlIHN1Yi10eXBlIChgc3RyaW5nYCwgYG51bWJlcmAsIG9yIGBiaW5hcnlgKS4gKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlU3ViVHlwZTogRHluYW1vRGJBdHRyaWJ1dGVTdWJUeXBlO1xufVxuXG4vKipcbiAqIE1hcHBpbmcgZnJvbSBhIHNvdXJjZSBjb2x1bW4gKG9yIERNUyBleHByZXNzaW9uKSB0byBhIG5vbi1rZXkgYXR0cmlidXRlIG9uXG4gKiB0aGUgRHluYW1vREIgdGFyZ2V0LiBFeGFjdGx5IG9uZSBvZiBgc291cmNlQ29sdW1uYCBvciBgdmFsdWVgIG11c3QgYmUgc2V0LlxuICogU291cmNlIGNvbHVtbnMgbm90IGxpc3RlZCBpbiBgYXR0cmlidXRlTWFwcGluZ3NgIG9yIGBleGNsdWRlQ29sdW1uc2AgcGFzc1xuICogdGhyb3VnaCB3aXRoIHRoZSBzb3VyY2UgY29sdW1uIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1vRGJBdHRyaWJ1dGVNYXBwaW5nIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgYSBzaW5nbGUgY29sdW1uIG9uIHRoZSByZWxhdGlvbmFsIHNvdXJjZS4gVGhlIGJ1aWxkZXIgd3JhcHMgdGhpc1xuICAgKiBpbiB0aGUgRE1TIGV4cHJlc3Npb24gYCR7c291cmNlQ29sdW1ufWAuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGB2YWx1ZWAuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VDb2x1bW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSYXcgRE1TIHZhbHVlIGV4cHJlc3Npb24sIHVzZWQgdmVyYmF0aW0uIFVzZSB0aGlzIGZvciBjb21wb3NpdGUgdmFsdWVzIG9yXG4gICAqIG90aGVyIGV4cHJlc3Npb25zIGxpa2UgYCdTVEFUVVMjJHtzdGF0dXN9J2AuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoXG4gICAqIGBzb3VyY2VDb2x1bW5gLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBOYW1lIG9mIHRoZSBhdHRyaWJ1dGUgb24gdGhlIER5bmFtb0RCIHRhcmdldCBpdGVtLiAqL1xuICByZWFkb25seSB0YXJnZXRBdHRyaWJ1dGVOYW1lOiBzdHJpbmc7XG4gIC8qKiBEeW5hbW9EQiBhdHRyaWJ1dGUgc3ViLXR5cGUgKGBzdHJpbmdgLCBgbnVtYmVyYCwgb3IgYGJpbmFyeWApLiAqL1xuICByZWFkb25seSBhdHRyaWJ1dGVTdWJUeXBlOiBEeW5hbW9EYkF0dHJpYnV0ZVN1YlR5cGU7XG59XG5cbi8qKiBPcHRpb25zIGZvciBgVGFibGVNYXBwaW5ncy5tYXBUb0R5bmFtb0RiYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1vRGJPYmplY3RNYXBwaW5nT3B0aW9ucyB7XG4gIC8qKiBOYW1lIG9mIHRoZSB0YXJnZXQgRHluYW1vREIgdGFibGUuICovXG4gIHJlYWRvbmx5IHRhcmdldFRhYmxlTmFtZTogc3RyaW5nO1xuICAvKiogTWFwcGluZyBmb3IgdGhlIER5bmFtb0RCIHBhcnRpdGlvbiAoaGFzaCkga2V5LiBSZXF1aXJlZC4gKi9cbiAgcmVhZG9ubHkgcGFydGl0aW9uS2V5OiBEeW5hbW9EYktleU1hcHBpbmc7XG4gIC8qKiBNYXBwaW5nIGZvciB0aGUgRHluYW1vREIgc29ydCAocmFuZ2UpIGtleS4gT3B0aW9uYWwuICovXG4gIHJlYWRvbmx5IHNvcnRLZXk/OiBEeW5hbW9EYktleU1hcHBpbmc7XG4gIC8qKiBTb3VyY2UgY29sdW1ucyB0byBleGNsdWRlIGZyb20gdGhlIG1pZ3JhdGVkIGl0ZW0uICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVDb2x1bW5zPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbHVtbi10by1hdHRyaWJ1dGUgbWFwcGluZ3MuIFVzZSB0aGlzIHRvIHJlbmFtZSBub24ta2V5XG4gICAqIGNvbHVtbnMgb3IgY2hhbmdlIHRoZWlyIER5bmFtb0RCIHN1Yi10eXBlLiBDb2x1bW5zIG5vdCBsaXN0ZWQgaGVyZSBwYXNzXG4gICAqIHRocm91Z2ggd2l0aCB0aGUgc291cmNlIGNvbHVtbiBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlTWFwcGluZ3M/OiBEeW5hbW9EYkF0dHJpYnV0ZU1hcHBpbmdbXTtcbn1cblxuLyoqIFJlcHJlc2VudHMgYSBzaW5nbGUsIGZ1bGx5IGJ1aWx0IHJ1bGUgaW4gdGhlIHRhYmxlLW1hcHBpbmdzIEpTT04uICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlTWFwcGluZ1J1bGUge1xuICByZWFkb25seSBydWxlVHlwZTogc3RyaW5nO1xuICByZWFkb25seSBydWxlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgb2JqZWN0TG9jYXRvcjogUnVsZU9iamVjdExvY2F0b3JWYWx1ZTtcbiAgcmVhZG9ubHkgcnVsZUFjdGlvbjogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcbiAgcmVhZG9ubHkgb2xkVmFsdWU/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQnVpbGRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRmx1ZW50IGJ1aWxkZXIgZm9yIERNUyB0YWJsZSBtYXBwaW5ncy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWFwcGluZ3MgPSBuZXcgVGFibGVNYXBwaW5ncygpXG4gKiAgIC5pbmNsdWRlU2NoZW1hKCdwdWJsaWMnKVxuICogICAuaW5jbHVkZVRhYmxlKCdwdWJsaWMnLCAnb3JkZXJzJylcbiAqICAgLmV4Y2x1ZGVUYWJsZSgncHVibGljJywgJ2F1ZGl0X2xvZycpXG4gKiAgIC5yZW5hbWVTY2hlbWEoJ3B1YmxpYycsICdwcm9kJylcbiAqICAgLnRvTG93ZXJDYXNlVGFibGUoJ3B1YmxpYycsICclJylcbiAqICAgLnRvSnNvbigpO1xuICovXG5leHBvcnQgY2xhc3MgVGFibGVNYXBwaW5ncyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcnVsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcbiAgcHJpdmF0ZSBuZXh0SWQ6IG51bWJlciA9IDE7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTZWxlY3Rpb24gcnVsZXNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGFsbCB0YWJsZXMgaW4gYSBzY2hlbWEuXG4gICAqIFVzZSBgJWAgYXMgYSB3aWxkY2FyZCBmb3IgYHNjaGVtYU5hbWVgIHRvIGluY2x1ZGUgYWxsIHNjaGVtYXMuXG4gICAqL1xuICBpbmNsdWRlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFNlbGVjdGlvblJ1bGUoc2NoZW1hTmFtZSwgJyUnLCBTZWxlY3Rpb25BY3Rpb24uSU5DTFVERSk7XG4gIH1cblxuICAvKiogRXhjbHVkZSBhbGwgdGFibGVzIGluIGEgc2NoZW1hLiAqL1xuICBleGNsdWRlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFNlbGVjdGlvblJ1bGUoc2NoZW1hTmFtZSwgJyUnLCBTZWxlY3Rpb25BY3Rpb24uRVhDTFVERSk7XG4gIH1cblxuICAvKipcbiAgICogSW5jbHVkZSBhIHNwZWNpZmljIHRhYmxlIChvciBhIHdpbGRjYXJkIHBhdHRlcm4pIHdpdGhpbiBhIHNjaGVtYS5cbiAgICogVXNlIGAlYCBmb3IgYHRhYmxlTmFtZWAgdG8gbWF0Y2ggYWxsIHRhYmxlcyBpbiB0aGUgc2NoZW1hLlxuICAgKi9cbiAgaW5jbHVkZVRhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTZWxlY3Rpb25SdWxlKHNjaGVtYU5hbWUsIHRhYmxlTmFtZSwgU2VsZWN0aW9uQWN0aW9uLklOQ0xVREUpO1xuICB9XG5cbiAgLyoqIEV4Y2x1ZGUgYSBzcGVjaWZpYyB0YWJsZSAob3Igd2lsZGNhcmQpIHdpdGhpbiBhIHNjaGVtYS4gKi9cbiAgZXhjbHVkZVRhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTZWxlY3Rpb25SdWxlKHNjaGVtYU5hbWUsIHRhYmxlTmFtZSwgU2VsZWN0aW9uQWN0aW9uLkVYQ0xVREUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxpY2l0bHkgaW5jbHVkZSBhIHNpbmdsZSB0YWJsZS4gVW5saWtlIGBpbmNsdWRlYCwgYGV4cGxpY2l0YCBtZWFucyBETVNcbiAgICogb25seSBtaWdyYXRlcyB0aGlzIG9uZSB0YWJsZSByZWdhcmRsZXNzIG9mIG90aGVyIGBpbmNsdWRlYCBydWxlcy5cbiAgICovXG4gIGV4cGxpY2l0VGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFNlbGVjdGlvblJ1bGUoc2NoZW1hTmFtZSwgdGFibGVOYW1lLCBTZWxlY3Rpb25BY3Rpb24uRVhQTElDSVQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZWxlY3Rpb25SdWxlKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBhY3Rpb246IFNlbGVjdGlvbkFjdGlvbixcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgY29uc3QgaWQgPSB0aGlzLm5leHRJZCsrO1xuICAgIHRoaXMucnVsZXMucHVzaCh7XG4gICAgICAncnVsZS10eXBlJzogJ3NlbGVjdGlvbicsXG4gICAgICAncnVsZS1pZCc6IFN0cmluZyhpZCksXG4gICAgICAncnVsZS1uYW1lJzogYCR7aWR9YCxcbiAgICAgICdvYmplY3QtbG9jYXRvcic6IHtcbiAgICAgICAgJ3NjaGVtYS1uYW1lJzogc2NoZW1hTmFtZSxcbiAgICAgICAgJ3RhYmxlLW5hbWUnOiB0YWJsZU5hbWUsXG4gICAgICB9LFxuICAgICAgJ3J1bGUtYWN0aW9uJzogYWN0aW9uLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBUcmFuc2Zvcm1hdGlvbiBydWxlcyDigJQgc2NoZW1hXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogUmVuYW1lIGEgc2NoZW1hLiAqL1xuICByZW5hbWVTY2hlbWEoc2NoZW1hTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgJyUnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuU0NIRU1BLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uUkVOQU1FLFxuICAgICAgbmV3TmFtZSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgYWxsIHNjaGVtYSBuYW1lcyB0byBsb3dlcmNhc2UuICovXG4gIHRvTG93ZXJDYXNlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICAnJScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5TQ0hFTUEsXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX0xPV0VSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgYWxsIHNjaGVtYSBuYW1lcyB0byB1cHBlcmNhc2UuICovXG4gIHRvVXBwZXJDYXNlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICAnJScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5TQ0hFTUEsXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX1VQUEVSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIEFkZCBhIHByZWZpeCB0byBzY2hlbWEgbmFtZXMuICovXG4gIGFkZFByZWZpeFRvU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgJyUnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuU0NIRU1BLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX1BSRUZJWCxcbiAgICAgIHByZWZpeCxcbiAgICApO1xuICB9XG5cbiAgLyoqIEFkZCBhIHN1ZmZpeCB0byBzY2hlbWEgbmFtZXMuICovXG4gIGFkZFN1ZmZpeFRvU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgJyUnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuU0NIRU1BLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX1NVRkZJWCxcbiAgICAgIHN1ZmZpeCxcbiAgICApO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBUcmFuc2Zvcm1hdGlvbiBydWxlcyDigJQgdGFibGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBSZW5hbWUgYSB0YWJsZS4gKi9cbiAgcmVuYW1lVGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZywgbmV3TmFtZTogc3RyaW5nKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLlRBQkxFLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uUkVOQU1FLFxuICAgICAgbmV3TmFtZSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgbWF0Y2hpbmcgdGFibGUgbmFtZXMgdG8gbG93ZXJjYXNlLiBVc2UgYCVgIHRvIG1hdGNoIGFsbCB0YWJsZXMuICovXG4gIHRvTG93ZXJDYXNlVGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5UQUJMRSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkNPTlZFUlRfTE9XRVJDQVNFLFxuICAgICk7XG4gIH1cblxuICAvKiogQ29udmVydCBtYXRjaGluZyB0YWJsZSBuYW1lcyB0byB1cHBlcmNhc2UuICovXG4gIHRvVXBwZXJDYXNlVGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5UQUJMRSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkNPTlZFUlRfVVBQRVJDQVNFLFxuICAgICk7XG4gIH1cblxuICAvKiogQWRkIGEgcHJlZml4IHRvIHRhYmxlIG5hbWVzLiAqL1xuICBhZGRQcmVmaXhUb1RhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLlRBQkxFLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX1BSRUZJWCxcbiAgICAgIHByZWZpeCxcbiAgICApO1xuICB9XG5cbiAgLyoqIEFkZCBhIHN1ZmZpeCB0byB0YWJsZSBuYW1lcy4gKi9cbiAgYWRkU3VmZml4VG9UYWJsZShzY2hlbWFOYW1lOiBzdHJpbmcsIHRhYmxlTmFtZTogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5UQUJMRSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkFERF9TVUZGSVgsXG4gICAgICBzdWZmaXgsXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVHJhbnNmb3JtYXRpb24gcnVsZXMg4oCUIGNvbHVtblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIFJlbmFtZSBhIGNvbHVtbiBpbiBhIHRhYmxlLiAqL1xuICByZW5hbWVDb2x1bW4oXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBuZXdOYW1lOiBzdHJpbmcsXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICBjb2x1bW5OYW1lLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuQ09MVU1OLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uUkVOQU1FLFxuICAgICAgbmV3TmFtZSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgbWF0Y2hpbmcgY29sdW1uIG5hbWVzIHRvIGxvd2VyY2FzZS4gKi9cbiAgdG9Mb3dlckNhc2VDb2x1bW4oXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIGNvbHVtbk5hbWUsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5DT0xVTU4sXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX0xPV0VSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgbWF0Y2hpbmcgY29sdW1uIG5hbWVzIHRvIHVwcGVyY2FzZS4gKi9cbiAgdG9VcHBlckNhc2VDb2x1bW4oXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIGNvbHVtbk5hbWUsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5DT0xVTU4sXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX1VQUEVSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJlbW92ZSBhIGNvbHVtbiBmcm9tIGEgdGFibGUuICovXG4gIHJlbW92ZUNvbHVtbihcbiAgICBzY2hlbWFOYW1lOiBzdHJpbmcsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICApOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgdGFibGVOYW1lLFxuICAgICAgY29sdW1uTmFtZSxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLkNPTFVNTixcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLlJFTU9WRV9DT0xVTU4sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgY29sdW1uIHRvIGEgdGFibGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG1hcHBpbmdzLmFkZENvbHVtbigncHVibGljJywgJ29yZGVycycsIHtcbiAgICogICBjb2x1bW5OYW1lOiAnbWlncmF0aW9uX3RzJyxcbiAgICogICBjb2x1bW5UeXBlOiBDb2x1bW5EYXRhVHlwZS5EQVRFVElNRSxcbiAgICogICBleHByZXNzaW9uOiAnJHRpbWVzdGFtcCcsXG4gICAqIH0pO1xuICAgKi9cbiAgYWRkQ29sdW1uKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW46IEFkZENvbHVtbkRlZmluaXRpb24sXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0SWQrKztcbiAgICBjb25zdCBvYmplY3RMb2NhdG9yOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3NjaGVtYS1uYW1lJzogc2NoZW1hTmFtZSxcbiAgICAgICd0YWJsZS1uYW1lJzogdGFibGVOYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCBydWxlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICdydWxlLXR5cGUnOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICAgJ3J1bGUtaWQnOiBTdHJpbmcoaWQpLFxuICAgICAgJ3J1bGUtbmFtZSc6IGAke2lkfWAsXG4gICAgICAnb2JqZWN0LWxvY2F0b3InOiBvYmplY3RMb2NhdG9yLFxuICAgICAgJ3J1bGUtYWN0aW9uJzogVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX0NPTFVNTixcbiAgICAgICdydWxlLXRhcmdldCc6ICdjb2x1bW4nLFxuICAgICAgJ3ZhbHVlJzogY29sdW1uLmNvbHVtbk5hbWUsXG4gICAgICAnZGF0YS10eXBlJzogdGhpcy5idWlsZERhdGFUeXBlKGNvbHVtbiksXG4gICAgfTtcblxuICAgIGlmIChjb2x1bW4uZXhwcmVzc2lvbikge1xuICAgICAgcnVsZS5leHByZXNzaW9uID0gY29sdW1uLmV4cHJlc3Npb247XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uY29sdW1uVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRE1TIGV4cHJlc3Npb24gc3ludGF4OiBzdHJpbmcgbGl0ZXJhbHMgdXNlIHNpbmdsZSBxdW90ZXMgKGVzY2FwZSAnIGFzICcnKVxuICAgICAgcnVsZS5leHByZXNzaW9uID0gYCcke2NvbHVtbi5jb2x1bW5WYWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XG4gICAgfVxuXG4gICAgdGhpcy5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZERhdGFUeXBlKGNvbHVtbjogQWRkQ29sdW1uRGVmaW5pdGlvbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBkdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IHR5cGU6IGNvbHVtbi5jb2x1bW5UeXBlIH07XG4gICAgaWYgKGNvbHVtbi5jb2x1bW5MZW5ndGggIT09IHVuZGVmaW5lZCkgZHQubGVuZ3RoID0gY29sdW1uLmNvbHVtbkxlbmd0aDtcbiAgICBpZiAoY29sdW1uLmNvbHVtblByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSBkdC5wcmVjaXNpb24gPSBjb2x1bW4uY29sdW1uUHJlY2lzaW9uO1xuICAgIGlmIChjb2x1bW4uY29sdW1uU2NhbGUgIT09IHVuZGVmaW5lZCkgZHQuc2NhbGUgPSBjb2x1bW4uY29sdW1uU2NhbGU7XG4gICAgcmV0dXJuIGR0O1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBEeW5hbW9EQiBvYmplY3QgbWFwcGluZ1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIE1hcCBhIHJlbGF0aW9uYWwgc291cmNlIHRhYmxlIHRvIGEgRHluYW1vREIgdGFyZ2V0IHRhYmxlLlxuICAgKlxuICAgKiBFbWl0cyBhIERNUyBgb2JqZWN0LW1hcHBpbmdgIHJ1bGUgd2l0aCBgcnVsZS1hY3Rpb246IG1hcC1yZWNvcmQtdG8tcmVjb3JkYC5cbiAgICogRE1TIHJlcXVpcmVzIHRoaXMgcnVsZSB0eXBlIHdoZW4gdGhlIHRhcmdldCBlbmRwb2ludCBpcyBEeW5hbW9EQjsgdGhlXG4gICAqIHBhcnRpdGlvbiBrZXkgKGFuZCBvcHRpb25hbCBzb3J0IGtleSkgdGVsbCBETVMgaG93IHRvIGJ1aWxkIHRoZSBpdGVtIGtleVxuICAgKiBmcm9tIHNvdXJjZSBjb2x1bW5zLlxuICAgKlxuICAgKiBTb3VyY2UgY29sdW1ucyBub3QgbGlzdGVkIGluIGBhdHRyaWJ1dGVNYXBwaW5nc2Agb3IgYGV4Y2x1ZGVDb2x1bW5zYCBhcmVcbiAgICogbWlncmF0ZWQgd2l0aCB0aGUgc291cmNlIGNvbHVtbiBuYW1lIGFzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAgICpcbiAgICogRm9yIGVhY2gga2V5IG9yIGF0dHJpYnV0ZSBtYXBwaW5nLCBzZXQgZWl0aGVyIGBzb3VyY2VDb2x1bW5gIChhIHNpbmdsZVxuICAgKiBjb2x1bW4gd3JhcHBlZCBhcyBgJHtjb2x9YCkgb3IgYHZhbHVlYCAoYSByYXcgRE1TIGV4cHJlc3Npb24sIGUuZy5cbiAgICogYCdDVVNUT01FUiMke2N1c3RvbWVyX2lkfSdgIGZvciBjb21wb3NpdGUga2V5cykuIEV4YWN0bHkgb25lIGlzIHJlcXVpcmVkLlxuICAgKlxuICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHR3aWNlIHdpdGggdGhlIHNhbWUgYHNjaGVtYU5hbWVgL2B0YWJsZU5hbWVgIGVtaXRzIHR3b1xuICAgKiBzZXBhcmF0ZSBydWxlczsgRE1TIHdpbGwgcmVqZWN0IGR1cGxpY2F0ZSBvYmplY3QtbWFwcGluZyBydWxlcyBhdCBkZXBsb3lcbiAgICogdGltZS4gQ2FsbCBpdCBvbmNlIHBlciBzb3VyY2UgdGFibGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IG1hcHBpbmdzID0gbmV3IFRhYmxlTWFwcGluZ3MoKVxuICAgKiAgIC5pbmNsdWRlVGFibGUoJ3B1YmxpYycsICdvcmRlcnMnKVxuICAgKiAgIC5tYXBUb0R5bmFtb0RiKCdwdWJsaWMnLCAnb3JkZXJzJywge1xuICAgKiAgICAgdGFyZ2V0VGFibGVOYW1lOiAnT3JkZXJzJyxcbiAgICogICAgIC8vIENvbXBvc2l0ZSBwYXJ0aXRpb24ga2V5IGZyb20gYSBsaXRlcmFsIHByZWZpeCArIHNvdXJjZSBjb2x1bW46XG4gICAqICAgICBwYXJ0aXRpb25LZXk6IHtcbiAgICogICAgICAgdmFsdWU6ICdDVVNUT01FUiMke2N1c3RvbWVyX2lkfScsXG4gICAqICAgICAgIHRhcmdldEF0dHJpYnV0ZU5hbWU6ICdQSycsXG4gICAqICAgICAgIGF0dHJpYnV0ZVN1YlR5cGU6IER5bmFtb0RiQXR0cmlidXRlU3ViVHlwZS5TVFJJTkcsXG4gICAqICAgICB9LFxuICAgKiAgICAgLy8gQmFyZSBzb3VyY2UgY29sdW1uIGZvciB0aGUgc29ydCBrZXk6XG4gICAqICAgICBzb3J0S2V5OiB7XG4gICAqICAgICAgIHNvdXJjZUNvbHVtbjogJ2NyZWF0ZWRfYXQnLFxuICAgKiAgICAgICB0YXJnZXRBdHRyaWJ1dGVOYW1lOiAnQ3JlYXRlZEF0JyxcbiAgICogICAgICAgYXR0cmlidXRlU3ViVHlwZTogRHluYW1vRGJBdHRyaWJ1dGVTdWJUeXBlLlNUUklORyxcbiAgICogICAgIH0sXG4gICAqICAgICBleGNsdWRlQ29sdW1uczogWydpbnRlcm5hbF9mbGFnJ10sXG4gICAqICAgICBhdHRyaWJ1dGVNYXBwaW5nczogW1xuICAgKiAgICAgICB7XG4gICAqICAgICAgICAgc291cmNlQ29sdW1uOiAnY3VzdG9tZXJfaWQnLFxuICAgKiAgICAgICAgIHRhcmdldEF0dHJpYnV0ZU5hbWU6ICdDdXN0b21lcklkJyxcbiAgICogICAgICAgICBhdHRyaWJ1dGVTdWJUeXBlOiBEeW5hbW9EYkF0dHJpYnV0ZVN1YlR5cGUuU1RSSU5HLFxuICAgKiAgICAgICB9LFxuICAgKiAgICAgXSxcbiAgICogICB9KVxuICAgKiAgIC50b0pzb24oKTtcbiAgICovXG4gIG1hcFRvRHluYW1vRGIoXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IER5bmFtb0RiT2JqZWN0TWFwcGluZ09wdGlvbnMsXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIGNvbnN0IGV4Y2x1ZGVkID0gbmV3IFNldChvcHRpb25zLmV4Y2x1ZGVDb2x1bW5zID8/IFtdKTtcbiAgICB0aGlzLmNoZWNrTm90RXhjbHVkZWQob3B0aW9ucy5wYXJ0aXRpb25LZXksIGV4Y2x1ZGVkKTtcbiAgICBpZiAob3B0aW9ucy5zb3J0S2V5KSB7XG4gICAgICB0aGlzLmNoZWNrTm90RXhjbHVkZWQob3B0aW9ucy5zb3J0S2V5LCBleGNsdWRlZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiBvcHRpb25zLmF0dHJpYnV0ZU1hcHBpbmdzID8/IFtdKSB7XG4gICAgICB0aGlzLmNoZWNrTm90RXhjbHVkZWQobWFwcGluZywgZXhjbHVkZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0SWQrKztcblxuICAgIGNvbnN0IGF0dHJpYnV0ZU1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gPSBbXG4gICAgICB0aGlzLmJ1aWxkQXR0cmlidXRlTWFwcGluZyhvcHRpb25zLnBhcnRpdGlvbktleSksXG4gICAgXTtcbiAgICBpZiAob3B0aW9ucy5zb3J0S2V5KSB7XG4gICAgICBhdHRyaWJ1dGVNYXBwaW5ncy5wdXNoKHRoaXMuYnVpbGRBdHRyaWJ1dGVNYXBwaW5nKG9wdGlvbnMuc29ydEtleSkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGVNYXBwaW5ncykge1xuICAgICAgZm9yIChjb25zdCBtYXBwaW5nIG9mIG9wdGlvbnMuYXR0cmlidXRlTWFwcGluZ3MpIHtcbiAgICAgICAgYXR0cmlidXRlTWFwcGluZ3MucHVzaCh0aGlzLmJ1aWxkQXR0cmlidXRlTWFwcGluZyhtYXBwaW5nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWFwcGluZ1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgJ3BhcnRpdGlvbi1rZXktbmFtZSc6IG9wdGlvbnMucGFydGl0aW9uS2V5LnRhcmdldEF0dHJpYnV0ZU5hbWUsXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucy5zb3J0S2V5KSB7XG4gICAgICBtYXBwaW5nUGFyYW1ldGVyc1snc29ydC1rZXktbmFtZSddID0gb3B0aW9ucy5zb3J0S2V5LnRhcmdldEF0dHJpYnV0ZU5hbWU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmV4Y2x1ZGVDb2x1bW5zICYmIG9wdGlvbnMuZXhjbHVkZUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgbWFwcGluZ1BhcmFtZXRlcnNbJ2V4Y2x1ZGUtY29sdW1ucyddID0gb3B0aW9ucy5leGNsdWRlQ29sdW1ucztcbiAgICB9XG4gICAgbWFwcGluZ1BhcmFtZXRlcnNbJ2F0dHJpYnV0ZS1tYXBwaW5ncyddID0gYXR0cmlidXRlTWFwcGluZ3M7XG5cbiAgICB0aGlzLnJ1bGVzLnB1c2goe1xuICAgICAgJ3J1bGUtdHlwZSc6ICdvYmplY3QtbWFwcGluZycsXG4gICAgICAncnVsZS1pZCc6IFN0cmluZyhpZCksXG4gICAgICAncnVsZS1uYW1lJzogYCR7aWR9YCxcbiAgICAgICdydWxlLWFjdGlvbic6ICdtYXAtcmVjb3JkLXRvLXJlY29yZCcsXG4gICAgICAnb2JqZWN0LWxvY2F0b3InOiB7XG4gICAgICAgICdzY2hlbWEtbmFtZSc6IHNjaGVtYU5hbWUsXG4gICAgICAgICd0YWJsZS1uYW1lJzogdGFibGVOYW1lLFxuICAgICAgfSxcbiAgICAgICd0YXJnZXQtdGFibGUtbmFtZSc6IG9wdGlvbnMudGFyZ2V0VGFibGVOYW1lLFxuICAgICAgJ21hcHBpbmctcGFyYW1ldGVycyc6IG1hcHBpbmdQYXJhbWV0ZXJzLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja05vdEV4Y2x1ZGVkKFxuICAgIG1hcHBpbmc6IER5bmFtb0RiS2V5TWFwcGluZyB8IER5bmFtb0RiQXR0cmlidXRlTWFwcGluZyxcbiAgICBleGNsdWRlZDogU2V0PHN0cmluZz4sXG4gICk6IHZvaWQge1xuICAgIGlmIChtYXBwaW5nLnNvdXJjZUNvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGV4Y2x1ZGVkLmhhcyhtYXBwaW5nLnNvdXJjZUNvbHVtbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYER5bmFtb0RCIGF0dHJpYnV0ZSBtYXBwaW5nIGZvciAnJHttYXBwaW5nLnRhcmdldEF0dHJpYnV0ZU5hbWV9JyB1c2VzIGAgK1xuICAgICAgICBgc291cmNlQ29sdW1uICcke21hcHBpbmcuc291cmNlQ29sdW1ufScsIHdoaWNoIGFsc28gYXBwZWFycyBpbiBgICtcbiAgICAgICAgJ2V4Y2x1ZGVDb2x1bW5zLiBSZW1vdmUgaXQgZnJvbSBvbmUgb3IgdGhlIG90aGVyLicsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBdHRyaWJ1dGVNYXBwaW5nKFxuICAgIG1hcHBpbmc6IER5bmFtb0RiS2V5TWFwcGluZyB8IER5bmFtb0RiQXR0cmlidXRlTWFwcGluZyxcbiAgKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgaGFzU291cmNlID0gbWFwcGluZy5zb3VyY2VDb2x1bW4gIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBoYXNWYWx1ZSA9IG1hcHBpbmcudmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzU291cmNlID09PSBoYXNWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRHluYW1vREIgYXR0cmlidXRlIG1hcHBpbmcgZm9yICcke21hcHBpbmcudGFyZ2V0QXR0cmlidXRlTmFtZX0nOiBgICtcbiAgICAgICAgJ2V4YWN0bHkgb25lIG9mIHNvdXJjZUNvbHVtbiBvciB2YWx1ZSBtdXN0IGJlIHNldC4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBoYXNWYWx1ZSA/IG1hcHBpbmcudmFsdWUhIDogYFxcJHske21hcHBpbmcuc291cmNlQ29sdW1ufX1gO1xuICAgIHJldHVybiB7XG4gICAgICAndGFyZ2V0LWF0dHJpYnV0ZS1uYW1lJzogbWFwcGluZy50YXJnZXRBdHRyaWJ1dGVOYW1lLFxuICAgICAgJ2F0dHJpYnV0ZS10eXBlJzogJ3NjYWxhcicsXG4gICAgICAnYXR0cmlidXRlLXN1Yi10eXBlJzogbWFwcGluZy5hdHRyaWJ1dGVTdWJUeXBlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcnVsZVRhcmdldDogUnVsZU9iamVjdExvY2F0b3IsXG4gICAgYWN0aW9uOiBUcmFuc2Zvcm1hdGlvbkFjdGlvbixcbiAgICB2YWx1ZT86IHN0cmluZyxcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgY29uc3QgaWQgPSB0aGlzLm5leHRJZCsrO1xuICAgIGNvbnN0IG9iamVjdExvY2F0b3I6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnc2NoZW1hLW5hbWUnOiBzY2hlbWFOYW1lLFxuICAgICAgJ3RhYmxlLW5hbWUnOiB0YWJsZU5hbWUsXG4gICAgfTtcbiAgICBpZiAoY29sdW1uTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmplY3RMb2NhdG9yWydjb2x1bW4tbmFtZSddID0gY29sdW1uTmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICdydWxlLXR5cGUnOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICAgJ3J1bGUtaWQnOiBTdHJpbmcoaWQpLFxuICAgICAgJ3J1bGUtbmFtZSc6IGAke2lkfWAsXG4gICAgICAncnVsZS10YXJnZXQnOiBydWxlVGFyZ2V0LFxuICAgICAgJ29iamVjdC1sb2NhdG9yJzogb2JqZWN0TG9jYXRvcixcbiAgICAgICdydWxlLWFjdGlvbic6IGFjdGlvbixcbiAgICB9O1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBydWxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBPdXRwdXRcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpc2UgdGhlIGFjY3VtdWxhdGVkIHJ1bGVzIHRvIHRoZSBKU09OIHN0cmluZyBleHBlY3RlZCBieSBETVMuXG4gICAqIFBhc3NlcyB0aGUgcmVzdWx0IGRpcmVjdGx5IHRvIGByZXBsaWNhdGlvblRhc2tTZXR0aW5nc2Agb3JcbiAgICogYERtc1JlcGxpY2F0aW9uVGFzay50YWJsZU1hcHBpbmdzYC5cbiAgICovXG4gIHRvSnNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IHJ1bGVzOiB0aGlzLnJ1bGVzIH0sIG51bGwsIDIpO1xuICB9XG59XG4iXX0=