@bitgo-beta/sdk-coin-canton 1.0.1-beta.582 → 1.0.1-beta.584

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.
@@ -145,6 +145,8 @@ export declare class Utils implements BaseUtils {
145
145
  private convertAmountToLowestUnit;
146
146
  isPlainObject(value: unknown): value is Record<string, unknown>;
147
147
  private areNumericStrings;
148
+ private isIsoTimestamp;
149
+ private isIntegerString;
148
150
  private describeType;
149
151
  private stringifyForError;
150
152
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
@@ -658,6 +658,15 @@ class Utils {
658
658
  }
659
659
  return;
660
660
  }
661
+ // ISO 8601 input vs microsecond-since-epoch encoding in the prepared-transaction protobuf.
662
+ if (this.isIsoTimestamp(expected) && this.isIntegerString(actual)) {
663
+ const expectedMicroseconds = new bignumber_js_1.default(new Date(expected).getTime()).multipliedBy(1000);
664
+ if (!expectedMicroseconds.isEqualTo(new bignumber_js_1.default(actual))) {
665
+ throw new Error(`Canton command timestamp mismatch at '${currentPath || '<root>'}': ` +
666
+ `expected '${expected}' (${expectedMicroseconds.toFixed(0)} µs), got '${actual}'`);
667
+ }
668
+ return;
669
+ }
661
670
  if (expected !== actual) {
662
671
  throw new Error(`Canton command mismatch at '${currentPath || '<root>'}': expected '${expected}', got '${actual}'`);
663
672
  }
@@ -843,6 +852,15 @@ class Utils {
843
852
  const numericRe = /^-?\d+(\.\d+)?$/;
844
853
  return numericRe.test(a) && numericRe.test(b);
845
854
  }
855
+ isIsoTimestamp(value) {
856
+ if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?Z$/.test(value)) {
857
+ return false;
858
+ }
859
+ return Number.isFinite(Date.parse(value));
860
+ }
861
+ isIntegerString(value) {
862
+ return /^\d+$/.test(value);
863
+ }
846
864
  describeType(value) {
847
865
  if (value === null)
848
866
  return 'null';
@@ -876,4 +894,4 @@ class Utils {
876
894
  exports.Utils = Utils;
877
895
  const utils = new Utils();
878
896
  exports.default = utils;
879
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFxQztBQUNyQyxvREFBNEI7QUFFNUIsbURBQTJGO0FBQzNGLGlEQUF5RDtBQUV6RCwwREFBMEU7QUFDMUUseUZBQW1GO0FBRW5GLHlDQUFtRjtBQUluRixNQUFhLEtBQUs7SUFDaEIsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwRCxNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQixpRUFBaUU7UUFDakUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLDJFQUEyRTtRQUMzRSxvREFBb0Q7UUFDcEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxHQUFHLENBQUMs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QUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFtQixDQUFDLENBQUM7UUFDdEMsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN2RCxDQUFDO0NBQ0Y7QUF2MkJELHNCQXUyQkM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTFCLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHsgQmFzZVV0aWxzLCBpc1ZhbGlkRWQyNTUxOVB1YmxpY0tleSwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQ2FudG9uVG9rZW4sIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmltcG9ydCB7IGNvbXB1dGVQcmVwYXJlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2hhc2gvaGFzaC5qcyc7XG5pbXBvcnQgeyBQcmVwYXJlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Byb3RvL3ByZXBhcmVkVHJhbnNhY3Rpb24uanMnO1xuXG5pbXBvcnQgeyBDcnlwdG9LZXlGb3JtYXQsIFNpZ25pbmdBbGdvcml0aG1TcGVjLCBTaWduaW5nS2V5U3BlYyB9IGZyb20gJy4vY29uc3RhbnQnO1xuaW1wb3J0IHsgQ2FudG9uQ29tbWFuZEluZm8sIFByZXBhcmVkVHJhbnNhY3Rpb24gYXMgSVByZXBhcmVkVHJhbnNhY3Rpb24sIFByZXBhcmVkVHhuUGFyc2VkSW5mbyB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgUmVjb3JkRmllbGQsIFZhbHVlIH0gZnJvbSAnLi9yZXNvdXJjZXNJbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFhZGRyZXNzIHx8IGFkZHJlc3MudHJpbSgpID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IFtwYXJ0eUhpbnQsIGZpbmdlcnByaW50XSA9IGFkZHJlc3MudHJpbSgpLnNwbGl0KCc6OicpO1xuICAgIGlmICghZmluZ2VycHJpbnQpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhbGwgbWVtb0lkcyBhcmUgY29uc2lkZXJlZCB2YWxpZCBhcyBsb25nIGFzIHN0cmluZ3MgYXJlIHBhc3NlZFxuICAgIGNvbnN0IFtmaW5nZXJwcmludFBhcnRdID0gZmluZ2VycHJpbnQudHJpbSgpLnNwbGl0KCc/bWVtb0lkPScpO1xuICAgIGlmICghcGFydHlIaW50IHx8ICFmaW5nZXJwcmludFBhcnQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkQ2FudG9uSGV4KGZpbmdlcnByaW50UGFydCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEJsb2NrSWQoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gSW4gY2FudG9uLCB0aGVyZSBpcyBubyBibG9jayBoYXNoLCB3ZSBzdG9yZSB0aGUgaGVpZ2h0IGFzIHRoZSBfaWQgKGhhc2gpXG4gICAgLy8gdGhpcyB3aWxsIGJlIG9mIHRoZSBmb3JtLCA8YmxvY2tIZWlnaHQ+Xzx2ZXJzaW9uPlxuICAgIGNvbnN0IFtoZWlnaHRdID0gaGFzaC5zcGxpdCgnXycpO1xuICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gTnVtYmVyKGhlaWdodCk7XG4gICAgcmV0dXJuICFpc05hTihibG9ja0hlaWdodCkgJiYgYmxvY2tIZWlnaHQgPiAwO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQdWJsaWNLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXkoa2V5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gdmFsaWRhdGUgdGhlIGlucHV0IGlzIGEgdmFsaWQgY2FudG9uIGhleCBzdHJpbmdcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIHRoZSBoZXggc3RyaW5nIHZhbHVlXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHZhbGlkXG4gICAqL1xuICBpc1ZhbGlkQ2FudG9uSGV4KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWdleCA9IC9eW2EtZkEtRjAtOV17Njh9JC87XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gY29udmVydCBoZXggdmFsdWUgdG8gYmFzZTY0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBoZXhTdHJpbmcgLSBoZXggZW5jb2RlZCBzdHJpbmdcbiAgICogQHJldHVybnMge1N0cmluZ30gYmFzZTY0IGVuY29kZWQgc3RyaW5nXG4gICAqL1xuICBnZXRCYXNlNjRGcm9tSGV4KGhleFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oaGV4U3RyaW5nLCAnaGV4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBjcmVhdGUgZmluZ2VycHJpbnQgKHBhcnQgb2YgdGhlIGNhbnRvbiBwYXJ0eUlkKSBmcm9tIHB1YmxpYyBrZXlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YmxpY0tleSB0aGUgcHVibGljIGtleVxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuc2lnbmluZ1B1YmxpY0tleUZyb21FZDI1NTE5KHB1YmxpY0tleSk7XG4gICAgY29uc3QgaGFzaFB1cnBvc2UgPSAxMjtcbiAgICByZXR1cm4gdGhpcy5jb21wdXRlU2hhMjU2Q2FudG9uSGFzaChoYXNoUHVycG9zZSwga2V5LnB1YmxpY0tleSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHBhcnNlIHJhdyBjYW50b24gdHJhbnNhY3Rpb24gJiBnZXQgcmVxdWlyZWQgZGF0YVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcmF3RGF0YSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHR4VHlwZSB0aGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKiBAcmV0dXJucyB7UHJlcGFyZWRUeG5QYXJzZWRJbmZvfVxuICAgKi9cbiAgcGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEocmF3RGF0YTogc3RyaW5nLCB0eFR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IFByZXBhcmVkVHhuUGFyc2VkSW5mbyB7XG4gICAgY29uc3QgZGVjb2RlZERhdGEgPSB0aGlzLmRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24ocmF3RGF0YSk7XG4gICAgY29uc3Qgbm9kZXMgPSBkZWNvZGVkRGF0YS50cmFuc2FjdGlvbj8ubm9kZXMgPz8gW107XG4gICAgY29uc3QgZ2V0RmllbGQgPSAoZmllbGRzOiBSZWNvcmRGaWVsZFtdLCBsYWJlbDogc3RyaW5nKSA9PiBmaWVsZHMuZmluZCgoZikgPT4gZi5sYWJlbCA9PT0gbGFiZWwpPy52YWx1ZT8uc3VtO1xuXG4gICAgbGV0IHNlbmRlciA9ICcnO1xuICAgIGxldCByZWNlaXZlciA9ICcnO1xuICAgIGxldCBhbW91bnQgPSAnJztcbiAgICBsZXQgbWVtb0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGluc3RydW1lbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBpbnN0cnVtZW50QWRtaW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFyZ3VtZW50IGZpZWxkcyBvZiB0aGUgZmlyc3QgY3JlYXRlIG5vZGUgbWF0Y2hpbmcgdGhlIGdpdmVuIGVudGl0eSBuYW1lLlxuICAgICAqL1xuICAgIGNvbnN0IGZpbmRDcmVhdGVOb2RlRmllbGRzID0gKGVudGl0eU5hbWU6IHN0cmluZyk6IFJlY29yZEZpZWxkW10gfCB1bmRlZmluZWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgIGNvbnN0IHZuID0gbm9kZS52ZXJzaW9uZWROb2RlO1xuICAgICAgICBpZiAoIXZuIHx8IHZuLm9uZW9mS2luZCAhPT0gJ3YxJykgY29udGludWU7XG4gICAgICAgIGNvbnN0IG50ID0gdm4udjEubm9kZVR5cGU7XG4gICAgICAgIGlmIChudC5vbmVvZktpbmQgIT09ICdjcmVhdGUnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG50LmNyZWF0ZS50ZW1wbGF0ZUlkPy5lbnRpdHlOYW1lICE9PSBlbnRpdHlOYW1lKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgYXJnU3VtID0gbnQuY3JlYXRlLmFyZ3VtZW50Py5zdW07XG4gICAgICAgIGlmICghYXJnU3VtIHx8IGFyZ1N1bS5vbmVvZktpbmQgIT09ICdyZWNvcmQnKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZmllbGRzID0gYXJnU3VtLnJlY29yZD8uZmllbGRzO1xuICAgICAgICBpZiAoZmllbGRzKSByZXR1cm4gZmllbGRzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2hvc2VuVmFsdWUgZmllbGRzIG9mIHRoZSBmaXJzdCBleGVyY2lzZSBub2RlIG1hdGNoaW5nIHRoZSBnaXZlbiBjaG9pY2VJZC5cbiAgICAgKi9cbiAgICBjb25zdCBmaW5kRXhlcmNpc2VOb2RlRmllbGRzID0gKGNob2ljZUlkOiBzdHJpbmcpOiBSZWNvcmRGaWVsZFtdIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBjb25zdCB2biA9IG5vZGUudmVyc2lvbmVkTm9kZTtcbiAgICAgICAgaWYgKCF2biB8fCB2bi5vbmVvZktpbmQgIT09ICd2MScpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBudCA9IHZuLnYxLm5vZGVUeXBlO1xuICAgICAgICBpZiAobnQub25lb2ZLaW5kICE9PSAnZXhlcmNpc2UnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG50LmV4ZXJjaXNlLmNob2ljZUlkICE9PSBjaG9pY2VJZCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGFyZ1N1bSA9IG50LmV4ZXJjaXNlLmNob3NlblZhbHVlPy5zdW07XG4gICAgICAgIGlmICghYXJnU3VtIHx8IGFyZ1N1bS5vbmVvZktpbmQgIT09ICdyZWNvcmQnKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZmllbGRzID0gYXJnU3VtLnJlY29yZD8uZmllbGRzO1xuICAgICAgICBpZiAoZmllbGRzKSByZXR1cm4gZmllbGRzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgYWN0aW5nIHBhcnR5IG9mIHRoZSBmaXJzdCBleGVyY2lzZSBub2RlIG1hdGNoaW5nIHRoZSBnaXZlbiBjaG9pY2VJZC5cbiAgICAgKi9cbiAgICBjb25zdCBmaW5kRXhlcmNpc2VBY3RpbmdQYXJ0eSA9IChjaG9pY2VJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBjb25zdCB2biA9IG5vZGUudmVyc2lvbmVkTm9kZTtcbiAgICAgICAgaWYgKCF2biB8fCB2bi5vbmVvZktpbmQgIT09ICd2MScpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBudCA9IHZuLnYxLm5vZGVUeXBlO1xuICAgICAgICBpZiAobnQub25lb2ZLaW5kICE9PSAnZXhlcmNpc2UnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG50LmV4ZXJjaXNlLmNob2ljZUlkICE9PSBjaG9pY2VJZCkgY29udGludWU7XG4gICAgICAgIHJldHVybiBudC5leGVyY2lzZS5hY3RpbmdQYXJ0aWVzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgc2VuZGVyLCByZWNlaXZlciwgYW1vdW50LCBhbmQgaW5zdHJ1bWVudCBmaWVsZHMgZnJvbSBhIHRyYW5zZmVyIHJlY29yZC5cbiAgICAgKiBDYW50b24gY29pbiB0cmFuc2ZlcnMgYW5kIGNidGMgdXNlIGluc3RydW1lbnRJZC5hZG1pbjsgcmVndWxhciB0b2tlbiB0cmFuc2ZlcnMgdXNlIGluc3RydW1lbnRJZGVudGlmaWVyLnNvdXJjZS5cbiAgICAgKi9cbiAgICBjb25zdCBleHRyYWN0RnJvbVRyYW5zZmVyUmVjb3JkID0gKFxuICAgICAgdHJhbnNmZXJSZWNvcmQ6IFJlY29yZEZpZWxkW10sXG4gICAgICBpbnN0cnVtZW50RmllbGROYW1lOiBzdHJpbmcsXG4gICAgICBpbnN0cnVtZW50QWRtaW5GaWVsZE5hbWU6IHN0cmluZ1xuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgc2VuZGVyRGF0YSA9IGdldEZpZWxkKHRyYW5zZmVyUmVjb3JkLCAnc2VuZGVyJyk7XG4gICAgICBpZiAoc2VuZGVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBzZW5kZXIgPSBzZW5kZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgY29uc3QgcmVjZWl2ZXJEYXRhID0gZ2V0RmllbGQodHJhbnNmZXJSZWNvcmQsICdyZWNlaXZlcicpO1xuICAgICAgaWYgKHJlY2VpdmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IHJlY2VpdmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgIGNvbnN0IGFtb3VudERhdGEgPSBnZXRGaWVsZCh0cmFuc2ZlclJlY29yZCwgJ2Ftb3VudCcpO1xuICAgICAgaWYgKGFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBhbW91bnREYXRhLm51bWVyaWMgPz8gJyc7XG4gICAgICBjb25zdCBpbnN0cnVtZW50RmllbGQgPSBnZXRGaWVsZCh0cmFuc2ZlclJlY29yZCwgaW5zdHJ1bWVudEZpZWxkTmFtZSk7XG4gICAgICBpZiAoaW5zdHJ1bWVudEZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRGaWVsZHMgPSBpbnN0cnVtZW50RmllbGQucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgIGNvbnN0IGFkbWluRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRGaWVsZHMsIGluc3RydW1lbnRBZG1pbkZpZWxkTmFtZSk7XG4gICAgICAgIGlmIChhZG1pbkRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgaW5zdHJ1bWVudEFkbWluID0gYWRtaW5EYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICBjb25zdCBpZERhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnaWQnKTtcbiAgICAgICAgaWYgKGlkRGF0YT8ub25lb2ZLaW5kID09PSAndGV4dCcpIGluc3RydW1lbnRJZCA9IGlkRGF0YS50ZXh0ID8/ICcnO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHR4VHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuT25lU3RlcFByZUFwcHJvdmFsOiB7XG4gICAgICAgIC8vIENhbnRvbiBjb2luOiBUcmFuc2ZlclByZWFwcHJvdmFsUHJvcG9zYWwgY3JlYXRlIG5vZGUg4oaSIHByb3ZpZGVyPXNlbmRlciwgcmVjZWl2ZXJcbiAgICAgICAgY29uc3QgY29pbkZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdUcmFuc2ZlclByZWFwcHJvdmFsUHJvcG9zYWwnKTtcbiAgICAgICAgaWYgKGNvaW5GaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBwcm92aWRlckRhdGEgPSBnZXRGaWVsZChjb2luRmllbGRzLCAncHJvdmlkZXInKTtcbiAgICAgICAgICBpZiAocHJvdmlkZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IHByb3ZpZGVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCByZWNlaXZlckRhdGEgPSBnZXRGaWVsZChjb2luRmllbGRzLCAncmVjZWl2ZXInKTtcbiAgICAgICAgICBpZiAocmVjZWl2ZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHJlY2VpdmVyID0gcmVjZWl2ZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgIGFtb3VudCA9ICcwJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBUb2tlbjogVHJhbnNmZXJQcmVhcHByb3ZhbCBjcmVhdGUgbm9kZSDihpIgb3BlcmF0b3I9c2VuZGVyLCByZWNlaXZlciwgaW5zdHJ1bWVudEFkbWluLCBpbnN0cnVtZW50QWxsb3dhbmNlc1xuICAgICAgICBjb25zdCB0b2tlbkZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdUcmFuc2ZlclByZWFwcHJvdmFsJyk7XG4gICAgICAgIGlmICh0b2tlbkZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IG9wZXJhdG9yRGF0YSA9IGdldEZpZWxkKHRva2VuRmllbGRzLCAnb3BlcmF0b3InKTtcbiAgICAgICAgICBpZiAob3BlcmF0b3JEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IG9wZXJhdG9yRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCByZWNlaXZlckRhdGEgPSBnZXRGaWVsZCh0b2tlbkZpZWxkcywgJ3JlY2VpdmVyJyk7XG4gICAgICAgICAgaWYgKHJlY2VpdmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IHJlY2VpdmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBhbW91bnQgPSAnMCc7XG4gICAgICAgICAgY29uc3QgaW5zdHJ1bWVudEFkbWluRGF0YSA9IGdldEZpZWxkKHRva2VuRmllbGRzLCAnaW5zdHJ1bWVudEFkbWluJyk7XG4gICAgICAgICAgaWYgKGluc3RydW1lbnRBZG1pbkRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgaW5zdHJ1bWVudEFkbWluID0gaW5zdHJ1bWVudEFkbWluRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBhbGxvd2FuY2VzRGF0YSA9IGdldEZpZWxkKHRva2VuRmllbGRzLCAnaW5zdHJ1bWVudEFsbG93YW5jZXMnKTtcbiAgICAgICAgICBpZiAoYWxsb3dhbmNlc0RhdGE/Lm9uZW9mS2luZCA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICAvLyBmb3IgdGhlIHNhbWUgaW5zdHJ1bWVudCBhZG1pbiwgaWYgbXVsdGlwbGUgdG9rZW5zIGFyZSBzdXBwb3J0ZWQgdGhlbiB3ZSBjYW4gZW5hYmxlIGFsbCBvZiB0aGVtLFxuICAgICAgICAgICAgLy8gYnV0IHdlIHdvbid0IGJlIGRvaW5nIHRoYXQgZm9yIG5vd1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBbGxvd2FuY2UgPSBhbGxvd2FuY2VzRGF0YS5saXN0Py5lbGVtZW50cz8uWzBdPy5zdW07XG4gICAgICAgICAgICBpZiAoZmlyc3RBbGxvd2FuY2U/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWxsb3dhbmNlRmllbGRzID0gZmlyc3RBbGxvd2FuY2UucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IGlkRGF0YSA9IGdldEZpZWxkKGFsbG93YW5jZUZpZWxkcywgJ2lkJyk7XG4gICAgICAgICAgICAgIGlmIChpZERhdGE/Lm9uZW9mS2luZCA9PT0gJ3RleHQnKSBpbnN0cnVtZW50SWQgPSBpZERhdGEudGV4dCA/PyAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyQWNjZXB0OiB7XG4gICAgICAgIC8vIENhbnRvbiBjb2luOiBBbXVsZXQgY3JlYXRlIG5vZGUg4oaSIGRzbz1zZW5kZXIsIG93bmVyPXJlY2VpdmVyLCBhbW91bnQuaW5pdGlhbEFtb3VudFxuICAgICAgICBjb25zdCBhbXVsZXRGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnQW11bGV0Jyk7XG4gICAgICAgIGlmIChhbXVsZXRGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBkc29EYXRhID0gZ2V0RmllbGQoYW11bGV0RmllbGRzLCAnZHNvJyk7XG4gICAgICAgICAgaWYgKGRzb0RhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykgc2VuZGVyID0gZHNvRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmVjZWl2ZXIgPSBvd25lckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgY29uc3QgYW1vdW50RmllbGQgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICBpZiAoYW1vdW50RmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxBbW91bnREYXRhID0gZ2V0RmllbGQoYW1vdW50RmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbml0aWFsQW1vdW50Jyk7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbEFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBpbml0aWFsQW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWd1bGFyIHRva2VuIChub24tY2J0Yyk6IEV4ZWN1dGVkVHJhbnNmZXIgY3JlYXRlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZGVudGlmaWVyLntzb3VyY2U9YWRtaW4sIGlkfX1cbiAgICAgICAgY29uc3QgZXhlY3V0ZWRUcmFuc2ZlckZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdFeGVjdXRlZFRyYW5zZmVyJyk7XG4gICAgICAgIGlmIChleGVjdXRlZFRyYW5zZmVyRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZChleGVjdXRlZFRyYW5zZmVyRmllbGRzLCAndHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGV4dHJhY3RGcm9tVHJhbnNmZXJSZWNvcmQodHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbnN0cnVtZW50SWRlbnRpZmllcicsICdzb3VyY2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2J0YyB0b2tlbiBmYWxsYmFjazogVHJhbnNmZXJSdWxlX0RpcmVjdFRyYW5zZmVyIGV4ZXJjaXNlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZC57YWRtaW4sIGlkfX1cbiAgICAgICAgY29uc3QgZGlyZWN0VHJhbnNmZXJGaWVsZHMgPSBmaW5kRXhlcmNpc2VOb2RlRmllbGRzKCdUcmFuc2ZlclJ1bGVfRGlyZWN0VHJhbnNmZXInKTtcbiAgICAgICAgaWYgKGRpcmVjdFRyYW5zZmVyRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZChkaXJlY3RUcmFuc2ZlckZpZWxkcywgJ3RyYW5zZmVyJyk7XG4gICAgICAgICAgaWYgKHRyYW5zZmVyU3VtPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICBleHRyYWN0RnJvbVRyYW5zZmVyUmVjb3JkKHRyYW5zZmVyU3VtLnJlY29yZD8uZmllbGRzID8/IFtdLCAnaW5zdHJ1bWVudElkJywgJ2FkbWluJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFVTREN4L3R3by1zdGVwIHRva2VuIGZhbGxiYWNrOiBUcmFuc2ZlclJ1bGVfVHdvU3RlcFRyYW5zZmVyIGV4ZXJjaXNlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZC57YWRtaW4sIGlkfX1cbiAgICAgICAgaWYgKCFzZW5kZXIpIHtcbiAgICAgICAgICBjb25zdCB0d29TdGVwVHJhbnNmZXJGaWVsZHMgPSBmaW5kRXhlcmNpc2VOb2RlRmllbGRzKCdUcmFuc2ZlclJ1bGVfVHdvU3RlcFRyYW5zZmVyJyk7XG4gICAgICAgICAgaWYgKHR3b1N0ZXBUcmFuc2ZlckZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZCh0d29TdGVwVHJhbnNmZXJGaWVsZHMsICd0cmFuc2ZlcicpO1xuICAgICAgICAgICAgaWYgKHRyYW5zZmVyU3VtPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICAgIGV4dHJhY3RGcm9tVHJhbnNmZXJSZWNvcmQodHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbnN0cnVtZW50SWQnLCAnYWRtaW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyUmVqZWN0OiB7XG4gICAgICAgIC8vIENhbnRvbiBjb2luOiBBbXVsZXQgY3JlYXRlIG5vZGUg4oaSIGRzbz1zZW5kZXIsIG93bmVyPXJlY2VpdmVyLCBhbW91bnQuaW5pdGlhbEFtb3VudFxuICAgICAgICBjb25zdCBhbXVsZXRGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnQW11bGV0Jyk7XG4gICAgICAgIGlmIChhbXVsZXRGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBkc29EYXRhID0gZ2V0RmllbGQoYW11bGV0RmllbGRzLCAnZHNvJyk7XG4gICAgICAgICAgaWYgKGRzb0RhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykgc2VuZGVyID0gZHNvRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmVjZWl2ZXIgPSBvd25lckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgY29uc3QgYW1vdW50RmllbGQgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICBpZiAoYW1vdW50RmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxBbW91bnREYXRhID0gZ2V0RmllbGQoYW1vdW50RmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbml0aWFsQW1vdW50Jyk7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbEFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBpbml0aWFsQW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWd1bGFyIHRva2VuIChub24tY2J0Yyk6IFJlamVjdGVkVHJhbnNmZXIgY3JlYXRlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZGVudGlmaWVyLntzb3VyY2U9YWRtaW4sIGlkfX1cbiAgICAgICAgY29uc3QgcmVqZWN0ZWRUcmFuc2ZlckZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdSZWplY3RlZFRyYW5zZmVyJyk7XG4gICAgICAgIGlmIChyZWplY3RlZFRyYW5zZmVyRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZChyZWplY3RlZFRyYW5zZmVyRmllbGRzLCAndHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGV4dHJhY3RGcm9tVHJhbnNmZXJSZWNvcmQodHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbnN0cnVtZW50SWRlbnRpZmllcicsICdzb3VyY2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2J0YyB0b2tlbiBmYWxsYmFjazogSG9sZGluZyBjcmVhdGUgbm9kZSAob3duZXI9c2VuZGVyLCBpbnN0cnVtZW50LCBhbW91bnQpXG4gICAgICAgIC8vICsgVHJhbnNmZXJJbnN0cnVjdGlvbl9SZWplY3QgZXhlcmNpc2UgKGFjdGluZ1BhcnRpZXNbMF09cmVjZWl2ZXIgd2hvIHJlamVjdGVkKVxuICAgICAgICBjb25zdCBob2xkaW5nRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0hvbGRpbmcnKTtcbiAgICAgICAgaWYgKGhvbGRpbmdGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChob2xkaW5nRmllbGRzLCAnb3duZXInKTtcbiAgICAgICAgICBpZiAob3duZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IG93bmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBhbW91bnREYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ2Ftb3VudCcpO1xuICAgICAgICAgIGlmIChhbW91bnREYXRhPy5vbmVvZktpbmQgPT09ICdudW1lcmljJykgYW1vdW50ID0gYW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIGNvbnN0IGluc3RydW1lbnREYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ2luc3RydW1lbnQnKTtcbiAgICAgICAgICBpZiAoaW5zdHJ1bWVudERhdGE/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRGaWVsZHMgPSBpbnN0cnVtZW50RGF0YS5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZURhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnc291cmNlJyk7XG4gICAgICAgICAgICBpZiAoc291cmNlRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBpbnN0cnVtZW50QWRtaW4gPSBzb3VyY2VEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgaWREYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudEZpZWxkcywgJ2lkJyk7XG4gICAgICAgICAgICBpZiAoaWREYXRhPy5vbmVvZktpbmQgPT09ICd0ZXh0JykgaW5zdHJ1bWVudElkID0gaWREYXRhLnRleHQgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlY2VpdmVyUGFydHkgPSBmaW5kRXhlcmNpc2VBY3RpbmdQYXJ0eSgnVHJhbnNmZXJJbnN0cnVjdGlvbl9SZWplY3QnKTtcbiAgICAgICAgICBpZiAocmVjZWl2ZXJQYXJ0eSkgcmVjZWl2ZXIgPSByZWNlaXZlclBhcnR5O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uQWxsb2NhdGU6IHtcbiAgICAgICAgLy8gRHZwTGVnQWxsb2NhdGlvbiBjcmVhdGUgbm9kZSDihpIgYWxsb2NhdGlvbi50cmFuc2ZlckxlZyBjb250YWlucyB0aGUgZnVsbCBzZXR0bGVtZW50IHRyYW5zZmVyIGRldGFpbHM6XG4gICAgICAgIC8vIHNlbmRlciwgcmVjZWl2ZXIgKHRoZSBhY3R1YWwgc2V0dGxlbWVudCBjb3VudGVycGFydHkpLCBhbW91bnQsIGFuZCBpbnN0cnVtZW50SWRcbiAgICAgICAgY29uc3QgZHZwRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0R2cExlZ0FsbG9jYXRpb24nKTtcbiAgICAgICAgaWYgKGR2cEZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IGFsbG9jYXRpb25GaWVsZCA9IGdldEZpZWxkKGR2cEZpZWxkcywgJ2FsbG9jYXRpb24nKTtcbiAgICAgICAgICBpZiAoYWxsb2NhdGlvbkZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxvY2F0aW9uRmllbGRzID0gYWxsb2NhdGlvbkZpZWxkLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmZXJMZWdGaWVsZCA9IGdldEZpZWxkKGFsbG9jYXRpb25GaWVsZHMsICd0cmFuc2ZlckxlZycpO1xuICAgICAgICAgICAgaWYgKHRyYW5zZmVyTGVnRmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNmZXJMZWdGaWVsZHMgPSB0cmFuc2ZlckxlZ0ZpZWxkLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgICBjb25zdCBzZW5kZXJEYXRhID0gZ2V0RmllbGQodHJhbnNmZXJMZWdGaWVsZHMsICdzZW5kZXInKTtcbiAgICAgICAgICAgICAgaWYgKHNlbmRlckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykgc2VuZGVyID0gc2VuZGVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXJEYXRhID0gZ2V0RmllbGQodHJhbnNmZXJMZWdGaWVsZHMsICdyZWNlaXZlcicpO1xuICAgICAgICAgICAgICBpZiAocmVjZWl2ZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHJlY2VpdmVyID0gcmVjZWl2ZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgICAgICBjb25zdCBhbW91bnREYXRhID0gZ2V0RmllbGQodHJhbnNmZXJMZWdGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICAgICAgaWYgKGFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBhbW91bnREYXRhLm51bWVyaWMgPz8gJyc7XG4gICAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRJZEZpZWxkID0gZ2V0RmllbGQodHJhbnNmZXJMZWdGaWVsZHMsICdpbnN0cnVtZW50SWQnKTtcbiAgICAgICAgICAgICAgaWYgKGluc3RydW1lbnRJZEZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1bWVudElkRmllbGRzID0gaW5zdHJ1bWVudElkRmllbGQucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICAgICAgY29uc3QgYWRtaW5EYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudElkRmllbGRzLCAnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICBpZiAoYWRtaW5EYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIGluc3RydW1lbnRBZG1pbiA9IGFkbWluRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBpZERhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50SWRGaWVsZHMsICdpZCcpO1xuICAgICAgICAgICAgICAgIGlmIChpZERhdGE/Lm9uZW9mS2luZCA9PT0gJ3RleHQnKSBpbnN0cnVtZW50SWQgPSBpZERhdGEudGV4dCA/PyAnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGYWxsYmFjazogaWYgRHZwTGVnQWxsb2NhdGlvbiBpcyBhYnNlbnQsIHVzZSB0aGUgb3BlcmF0b3IgYXMgcmVjZWl2ZXJcbiAgICAgICAgaWYgKCFyZWNlaXZlcikge1xuICAgICAgICAgIGNvbnN0IGFsbG9jYXRlRmllbGRzID0gZmluZEV4ZXJjaXNlTm9kZUZpZWxkcygnQWxsb2NhdGlvbkZhY3RvcnlfQWxsb2NhdGUnKTtcbiAgICAgICAgICBpZiAoYWxsb2NhdGVGaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkbWluRGF0YSA9IGdldEZpZWxkKGFsbG9jYXRlRmllbGRzLCAnZXhwZWN0ZWRBZG1pbicpO1xuICAgICAgICAgICAgaWYgKGFkbWluRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IGFkbWluRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZW5kZXIpIHtcbiAgICAgICAgICBjb25zdCBzZW5kZXJQYXJ0eSA9IGZpbmRFeGVyY2lzZUFjdGluZ1BhcnR5KCdBbGxvY2F0aW9uRmFjdG9yeV9BbGxvY2F0ZScpO1xuICAgICAgICAgIGlmIChzZW5kZXJQYXJ0eSkgc2VuZGVyID0gc2VuZGVyUGFydHk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkNvc2lnbkRlbGVnYXRpb25BY2NlcHQ6IHtcbiAgICAgICAgLy8gZXhlcmNpc2UgQ29zaWduaW5nRGVsZWdhdGlvblByb3Bvc2FsX0FjY2VwdCDihpIgYWN0aW5nUGFydGllc1swXSA9IHNpZ25lciAoc2VuZGVyKVxuICAgICAgICBjb25zdCBzaWduZXJQYXJ0eSA9IGZpbmRFeGVyY2lzZUFjdGluZ1BhcnR5KCdDb3NpZ25pbmdEZWxlZ2F0aW9uUHJvcG9zYWxfQWNjZXB0Jyk7XG4gICAgICAgIGlmIChzaWduZXJQYXJ0eSkgc2VuZGVyID0gc2lnbmVyUGFydHk7XG4gICAgICAgIC8vIENvc2lnbmluZ0RlbGVnYXRpb24gY3JlYXRlIG5vZGUgKHJlc3VsdCBvZiB0aGUgYWNjZXB0KSDihpIgYWRtaW4gPSByZWNlaXZlclxuICAgICAgICBjb25zdCBkZWxlZ2F0aW9uRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0Nvc2lnbmluZ0RlbGVnYXRpb24nKTtcbiAgICAgICAgaWYgKGRlbGVnYXRpb25GaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBhZG1pbkRhdGEgPSBnZXRGaWVsZChkZWxlZ2F0aW9uRmllbGRzLCAnYWRtaW4nKTtcbiAgICAgICAgICBpZiAoYWRtaW5EYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHJlY2VpdmVyID0gYWRtaW5EYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICB9XG4gICAgICAgIGFtb3VudCA9ICcwJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyT2ZmZXJXaXRoZHJhd246IHtcbiAgICAgICAgLy8gQ2FudG9uIGNvaW46IEFtdWxldCBjcmVhdGUgbm9kZSDihpIgb3duZXI9c2VuZGVyPXJlY2VpdmVyLCBhbW91bnQuaW5pdGlhbEFtb3VudFxuICAgICAgICBjb25zdCBhbXVsZXRGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnQW11bGV0Jyk7XG4gICAgICAgIGlmIChhbXVsZXRGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykge1xuICAgICAgICAgICAgcmVjZWl2ZXIgPSBvd25lckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICBzZW5kZXIgPSByZWNlaXZlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYW1vdW50RmllbGQgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICBpZiAoYW1vdW50RmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxBbW91bnREYXRhID0gZ2V0RmllbGQoYW1vdW50RmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbml0aWFsQW1vdW50Jyk7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbEFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBpbml0aWFsQW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBUb2tlbjogSG9sZGluZyBjcmVhdGUgbm9kZSDihpIgb3duZXI9c2VuZGVyPXJlY2VpdmVyLCBpbnN0cnVtZW50Lntzb3VyY2U9YWRtaW4sIGlkfSwgYW1vdW50XG4gICAgICAgIGNvbnN0IGhvbGRpbmdGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnSG9sZGluZycpO1xuICAgICAgICBpZiAoaG9sZGluZ0ZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IG93bmVyRGF0YSA9IGdldEZpZWxkKGhvbGRpbmdGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykge1xuICAgICAgICAgICAgcmVjZWl2ZXIgPSBvd25lckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICBzZW5kZXIgPSByZWNlaXZlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYW1vdW50RGF0YSA9IGdldEZpZWxkKGhvbGRpbmdGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICBpZiAoYW1vdW50RGF0YT8ub25lb2ZLaW5kID09PSAnbnVtZXJpYycpIGFtb3VudCA9IGFtb3VudERhdGEubnVtZXJpYyA/PyAnJztcbiAgICAgICAgICBjb25zdCBpbnN0cnVtZW50RGF0YSA9IGdldEZpZWxkKGhvbGRpbmdGaWVsZHMsICdpbnN0cnVtZW50Jyk7XG4gICAgICAgICAgaWYgKGluc3RydW1lbnREYXRhPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVtZW50RmllbGRzID0gaW5zdHJ1bWVudERhdGEucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VEYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudEZpZWxkcywgJ3NvdXJjZScpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZURhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgaW5zdHJ1bWVudEFkbWluID0gc291cmNlRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGlkRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRGaWVsZHMsICdpZCcpO1xuICAgICAgICAgICAgaWYgKGlkRGF0YT8ub25lb2ZLaW5kID09PSAndGV4dCcpIGluc3RydW1lbnRJZCA9IGlkRGF0YS50ZXh0ID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBJbml0aWFsIHRyYW5zZmVyICgxLXN0ZXAgYW5kIDItc3RlcCwgY29pbiBhbmQgdG9rZW4pOiBUcmFuc2ZlckZhY3RvcnlfVHJhbnNmZXIgZXhlcmNpc2Ugbm9kZVxuICAgICAgICAvLyDihpIgdHJhbnNmZXIue3NlbmRlciwgcmVjZWl2ZXIsIGFtb3VudCwgaW5zdHJ1bWVudElkLnthZG1pbiwgaWR9LCBtZXRhfVxuICAgICAgICBjb25zdCB0cmFuc2ZlckZpZWxkcyA9IGZpbmRFeGVyY2lzZU5vZGVGaWVsZHMoJ1RyYW5zZmVyRmFjdG9yeV9UcmFuc2ZlcicpO1xuICAgICAgICBpZiAodHJhbnNmZXJGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlclN1bSA9IGdldEZpZWxkKHRyYW5zZmVyRmllbGRzLCAndHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZmVyUmVjb3JkID0gdHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICBleHRyYWN0RnJvbVRyYW5zZmVyUmVjb3JkKHRyYW5zZmVyUmVjb3JkLCAnaW5zdHJ1bWVudElkJywgJ2FkbWluJyk7XG4gICAgICAgICAgICBjb25zdCBtZXRhRmllbGQgPSBnZXRGaWVsZCh0cmFuc2ZlclJlY29yZCwgJ21ldGEnKTtcbiAgICAgICAgICAgIGlmIChtZXRhRmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVzRmllbGQgPSBnZXRGaWVsZChtZXRhRmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICd2YWx1ZXMnKTtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlc0ZpZWxkPy5vbmVvZktpbmQgPT09ICd0ZXh0TWFwJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lbW9FbnRyeSA9IHZhbHVlc0ZpZWxkLnRleHRNYXA/LmVudHJpZXMuZmluZChcbiAgICAgICAgICAgICAgICAgIChlKSA9PiBlLmtleSA9PT0gJ3NwbGljZS5sZmRlY2VudHJhbGl6ZWR0cnVzdC5vcmcvcmVhc29uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKG1lbW9FbnRyeSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWVtb1ZhbHVlID0gbWVtb0VudHJ5Py52YWx1ZT8uc3VtO1xuICAgICAgICAgICAgICAgICAgaWYgKG1lbW9WYWx1ZT8ub25lb2ZLaW5kID09PSAndGV4dCcpIG1lbW9JZCA9IG1lbW9WYWx1ZS50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXNlbmRlciB8fCAhcmVjZWl2ZXIgfHwgIWFtb3VudCkge1xuICAgICAgY29uc3QgbWlzc2luZ0ZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICghc2VuZGVyKSBtaXNzaW5nRmllbGRzLnB1c2goJ3NlbmRlcicpO1xuICAgICAgaWYgKCFyZWNlaXZlcikgbWlzc2luZ0ZpZWxkcy5wdXNoKCdyZWNlaXZlcicpO1xuICAgICAgaWYgKCFhbW91bnQpIG1pc3NpbmdGaWVsZHMucHVzaCgnYW1vdW50Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdHJhbnNhY3Rpb24gZGF0YTogbWlzc2luZyAke21pc3NpbmdGaWVsZHMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgY29uc3QgY29udmVydGVkQW1vdW50ID0gdGhpcy5jb252ZXJ0QW1vdW50VG9Mb3dlc3RVbml0KG5ldyBCaWdOdW1iZXIoYW1vdW50KSk7XG4gICAgY29uc3QgcGFyc2VkRGF0YTogUHJlcGFyZWRUeG5QYXJzZWRJbmZvID0ge1xuICAgICAgc2VuZGVyLFxuICAgICAgcmVjZWl2ZXIsXG4gICAgICBhbW91bnQ6IGNvbnZlcnRlZEFtb3VudCxcbiAgICB9O1xuICAgIGlmIChtZW1vSWQpIHtcbiAgICAgIHBhcnNlZERhdGEubWVtb0lkID0gbWVtb0lkO1xuICAgIH1cbiAgICBpZiAoaW5zdHJ1bWVudElkICYmIGluc3RydW1lbnRBZG1pbikge1xuICAgICAgcGFyc2VkRGF0YS50b2tlbiA9IHRoaXMuZmluZFRva2VuTmFtZUJ5Q29udHJhY3RBZGRyZXNzKGAke2luc3RydW1lbnRBZG1pbn06JHtpbnN0cnVtZW50SWR9YCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWREYXRhO1xuICB9XG5cbiAgLyoqIFBhcnNlcyBgXCJQa2c6TW9kdWxlOkVudGl0eVwiYCBpbnRvIHBhcnRzLiAqL1xuICBwYXJzZUNhbnRvblRlbXBsYXRlSWQodmFsdWU6IHN0cmluZyk6IHsgcGtnOiBzdHJpbmc7IG1vZHVsZU5hbWU6IHN0cmluZzsgZW50aXR5TmFtZTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IFtwa2csIG1vZHVsZU5hbWUsIGVudGl0eU5hbWVdID0gcGFydHM7XG4gICAgaWYgKCFwa2cgfHwgIW1vZHVsZU5hbWUgfHwgIWVudGl0eU5hbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgcGtnLCBtb2R1bGVOYW1lLCBlbnRpdHlOYW1lIH07XG4gIH1cblxuICBkYW1sVmFsdWVUb0pzb24odmFsdWU6IFZhbHVlIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuc3VtKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN1bSA9IHZhbHVlLnN1bTtcbiAgICBzd2l0Y2ggKHN1bS5vbmVvZktpbmQpIHtcbiAgICAgIGNhc2UgJ3VuaXQnOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgJ2Jvb2wnOlxuICAgICAgICByZXR1cm4gc3VtLmJvb2w7XG4gICAgICBjYXNlICdpbnQ2NCc6XG4gICAgICAgIHJldHVybiBzdW0uaW50NjQ7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuIHN1bS5kYXRlO1xuICAgICAgY2FzZSAndGltZXN0YW1wJzpcbiAgICAgICAgcmV0dXJuIHN1bS50aW1lc3RhbXA7XG4gICAgICBjYXNlICdudW1lcmljJzpcbiAgICAgICAgcmV0dXJuIHN1bS5udW1lcmljO1xuICAgICAgY2FzZSAncGFydHknOlxuICAgICAgICByZXR1cm4gc3VtLnBhcnR5O1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIHJldHVybiBzdW0udGV4dDtcbiAgICAgIGNhc2UgJ2NvbnRyYWN0SWQnOlxuICAgICAgICByZXR1cm4gc3VtLmNvbnRyYWN0SWQ7XG4gICAgICBjYXNlICdvcHRpb25hbCc6XG4gICAgICAgIHJldHVybiBzdW0ub3B0aW9uYWw/LnZhbHVlID8gdGhpcy5kYW1sVmFsdWVUb0pzb24oc3VtLm9wdGlvbmFsLnZhbHVlKSA6IG51bGw7XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgcmV0dXJuIChzdW0ubGlzdD8uZWxlbWVudHMgPz8gW10pLm1hcCgoZWwpID0+IHRoaXMuZGFtbFZhbHVlVG9Kc29uKGVsKSk7XG4gICAgICBjYXNlICd0ZXh0TWFwJzoge1xuICAgICAgICBjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2Ygc3VtLnRleHRNYXA/LmVudHJpZXMgPz8gW10pIHtcbiAgICAgICAgICBvYmpbZW50cnkua2V5XSA9IHRoaXMuZGFtbFZhbHVlVG9Kc29uKGVudHJ5LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgICAgY2FzZSAnZ2VuTWFwJzpcbiAgICAgICAgcmV0dXJuIChzdW0uZ2VuTWFwPy5lbnRyaWVzID8/IFtdKS5tYXAoKGVudHJ5KSA9PiBbXG4gICAgICAgICAgdGhpcy5kYW1sVmFsdWVUb0pzb24oZW50cnkua2V5KSxcbiAgICAgICAgICB0aGlzLmRhbWxWYWx1ZVRvSnNvbihlbnRyeS52YWx1ZSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSAncmVjb3JkJzoge1xuICAgICAgICBjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBzdW0ucmVjb3JkPy5maWVsZHMgPz8gW10pIHtcbiAgICAgICAgICBvYmpbZi5sYWJlbF0gPSB0aGlzLmRhbWxWYWx1ZVRvSnNvbihmLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgICAgY2FzZSAndmFyaWFudCc6IHtcbiAgICAgICAgY29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgICBvYmpbc3VtLnZhcmlhbnQuY29uc3RydWN0b3JdID0gdGhpcy5kYW1sVmFsdWVUb0pzb24oc3VtLnZhcmlhbnQudmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgIHJldHVybiBzdW0uZW51bS5jb25zdHJ1Y3RvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlYWRzIGFjdEFzIHBhcnRpZXMgZnJvbSBhIGJhc2U2NC1lbmNvZGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIHByb3RvYnVmLiAqL1xuICBleHRyYWN0U3VibWl0dGVyQWN0QXMocmF3QmFzZTY0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihyYXdCYXNlNjQpO1xuICAgIHJldHVybiBkZWNvZGVkLm1ldGFkYXRhPy5zdWJtaXR0ZXJJbmZvPy5hY3RBcyA/PyBbXTtcbiAgfVxuXG4gIC8qKiBEZWNvZGVzIGEgcHJlcGFyZWQgQ2FudG9uIHRyYW5zYWN0aW9uIHByb3RvYnVmIGFuZCBleHRyYWN0cyB0aGUgcm9vdCBDcmVhdGVDb21tYW5kIG9yIEV4ZXJjaXNlQ29tbWFuZC4gKi9cbiAgZXh0cmFjdENhbnRvbkNvbW1hbmRJbmZvKHJhd0Jhc2U2NDogc3RyaW5nKTogQ2FudG9uQ29tbWFuZEluZm8ge1xuICAgIGNvbnN0IGRlY29kZWQgPSB0aGlzLmRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24ocmF3QmFzZTY0KTtcbiAgICBjb25zdCB0eCA9IGRlY29kZWQudHJhbnNhY3Rpb247XG4gICAgaWYgKCF0eCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZWNvZGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIGhhcyBubyB0cmFuc2FjdGlvbiBib2R5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHJvb3RzID0gdHgucm9vdHMgPz8gW107XG4gICAgaWYgKHJvb3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZWNvZGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIGhhcyBubyByb290IG5vZGVzJyk7XG4gICAgfVxuICAgIGlmIChyb290cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGRlY29kZWQgcHJlcGFyZWQgdHJhbnNhY3Rpb24gaGFzICR7cm9vdHMubGVuZ3RofSByb290IG5vZGVzOyBleHBlY3RlZCBleGFjdGx5IDFgKTtcbiAgICB9XG4gICAgY29uc3Qgcm9vdElkID0gcm9vdHNbMF07XG4gICAgY29uc3Qgcm9vdE5vZGUgPSAodHgubm9kZXMgPz8gW10pLmZpbmQoKG4pID0+IG4ubm9kZUlkID09PSByb290SWQpO1xuICAgIGlmICghcm9vdE5vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcm9vdCBub2RlICcke3Jvb3RJZH0nIG5vdCBmb3VuZCBpbiBub2RlcyBsaXN0YCk7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25lZE5vZGUgPSByb290Tm9kZS52ZXJzaW9uZWROb2RlO1xuICAgIGlmICghdmVyc2lvbmVkTm9kZSB8fCB2ZXJzaW9uZWROb2RlLm9uZW9mS2luZCAhPT0gJ3YxJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCByb290IG5vZGUgdmVyc2lvbjogJHt2ZXJzaW9uZWROb2RlPy5vbmVvZktpbmQgPz8gJ3VuZGVmaW5lZCd9YCk7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVUeXBlID0gdmVyc2lvbmVkTm9kZS52MS5ub2RlVHlwZTtcbiAgICBpZiAobm9kZVR5cGUub25lb2ZLaW5kID09PSAnY3JlYXRlJykge1xuICAgICAgY29uc3QgY3JlYXRlTm9kZSA9IG5vZGVUeXBlLmNyZWF0ZTtcbiAgICAgIGlmICghY3JlYXRlTm9kZS50ZW1wbGF0ZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRlIG5vZGUgbWlzc2luZyB0ZW1wbGF0ZUlkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnQ3JlYXRlQ29tbWFuZCcsXG4gICAgICAgIHRlbXBsYXRlSWQ6IHtcbiAgICAgICAgICBwYWNrYWdlSWQ6IGNyZWF0ZU5vZGUudGVtcGxhdGVJZC5wYWNrYWdlSWQsXG4gICAgICAgICAgbW9kdWxlTmFtZTogY3JlYXRlTm9kZS50ZW1wbGF0ZUlkLm1vZHVsZU5hbWUsXG4gICAgICAgICAgZW50aXR5TmFtZTogY3JlYXRlTm9kZS50ZW1wbGF0ZUlkLmVudGl0eU5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGFyZ3VtZW50OiB0aGlzLmRhbWxWYWx1ZVRvSnNvbihjcmVhdGVOb2RlLmFyZ3VtZW50KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS5vbmVvZktpbmQgPT09ICdleGVyY2lzZScpIHtcbiAgICAgIGNvbnN0IGV4ZXJjaXNlTm9kZSA9IG5vZGVUeXBlLmV4ZXJjaXNlO1xuICAgICAgaWYgKCFleGVyY2lzZU5vZGUudGVtcGxhdGVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4ZXJjaXNlIG5vZGUgbWlzc2luZyB0ZW1wbGF0ZUlkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnRXhlcmNpc2VDb21tYW5kJyxcbiAgICAgICAgdGVtcGxhdGVJZDoge1xuICAgICAgICAgIHBhY2thZ2VJZDogZXhlcmNpc2VOb2RlLnRlbXBsYXRlSWQucGFja2FnZUlkLFxuICAgICAgICAgIG1vZHVsZU5hbWU6IGV4ZXJjaXNlTm9kZS50ZW1wbGF0ZUlkLm1vZHVsZU5hbWUsXG4gICAgICAgICAgZW50aXR5TmFtZTogZXhlcmNpc2VOb2RlLnRlbXBsYXRlSWQuZW50aXR5TmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgYXJndW1lbnQ6IHRoaXMuZGFtbFZhbHVlVG9Kc29uKGV4ZXJjaXNlTm9kZS5jaG9zZW5WYWx1ZSksXG4gICAgICAgIGNob2ljZTogZXhlcmNpc2VOb2RlLmNob2ljZUlkLFxuICAgICAgICBjb250cmFjdElkOiBleGVyY2lzZU5vZGUuY29udHJhY3RJZCxcbiAgICAgICAgYWN0aW5nUGFydGllczogWy4uLihleGVyY2lzZU5vZGUuYWN0aW5nUGFydGllcyA/PyBbXSldLFxuICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCByb290IG5vZGUgdHlwZTogJHtub2RlVHlwZS5vbmVvZktpbmQgPz8gJ3VuZGVmaW5lZCd9YCk7XG4gIH1cblxuICBzYW1lRWxlbWVudHMoYTogcmVhZG9ubHkgc3RyaW5nW10sIGI6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHNvcnRlZEEgPSBbLi4uYV0uc29ydCgpO1xuICAgIGNvbnN0IHNvcnRlZEIgPSBbLi4uYl0uc29ydCgpO1xuICAgIHJldHVybiBzb3J0ZWRBLmV2ZXJ5KCh4LCBpKSA9PiB4ID09PSBzb3J0ZWRCW2ldKTtcbiAgfVxuXG4gIC8qKiBTdHJpcHMgdGhlIGBjb21tYW5kLmAgcHJlZml4IGZyb20gaW5qZWN0QXMgcGF0aHMgKGUuZy4gYGNvbW1hbmQuRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWRgIOKGkiBgRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWRgKS4gKi9cbiAgbm9ybWFsaXplSW5qZWN0QXMoc3BlY3M6IHJlYWRvbmx5IHsgaW5qZWN0QXM/OiBzdHJpbmcgfVtdIHwgdW5kZWZpbmVkKTogU2V0PHN0cmluZz4ge1xuICAgIGNvbnN0IG91dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGlmICghc3BlY3MpIHJldHVybiBvdXQ7XG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHNwZWNzKSB7XG4gICAgICBpZiAoIXNwZWMgfHwgdHlwZW9mIHNwZWMuaW5qZWN0QXMgIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHN0cmlwcGVkID0gc3BlYy5pbmplY3RBcy5zdGFydHNXaXRoKCdjb21tYW5kLicpID8gc3BlYy5pbmplY3RBcy5zbGljZSgnY29tbWFuZC4nLmxlbmd0aCkgOiBzcGVjLmluamVjdEFzO1xuICAgICAgaWYgKHN0cmlwcGVkKSBvdXQuYWRkKHN0cmlwcGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBhc3NlcnRzIHRoYXQgYGFjdHVhbGAgbWF0Y2hlcyBgZXhwZWN0ZWRgLiBQYXRocyBpbiBgaW5qZWN0QXNQYXRoc2AgYXJlIHNraXBwZWQuXG4gICAqIE51bWVyaWMgc3RyaW5ncyBhcmUgY29tcGFyZWQgdmlhIEJpZ051bWJlciB0byBoYW5kbGUgREFNTCBmb3JtYXR0aW5nIGRpZmZlcmVuY2VzIChlLmcuIFwiMTAwXCIgdnMgXCIxMDAuMDAwMDAwMDAwMFwiKS5cbiAgICovXG4gIGFzc2VydERlZXBDYW50b25NYXRjaChleHBlY3RlZDogdW5rbm93biwgYWN0dWFsOiB1bmtub3duLCBpbmplY3RBc1BhdGhzOiBTZXQ8c3RyaW5nPiwgY3VycmVudFBhdGggPSAnJyk6IHZvaWQge1xuICAgIGlmIChpbmplY3RBc1BhdGhzLmhhcyhjdXJyZW50UGF0aCkpIHJldHVybjtcblxuICAgIC8vIE9ubHkgdW5kZWZpbmVkIG1lYW5zIFwidW5zcGVjaWZpZWQg4oCUIHNraXAgY29tcGFyaXNvblwiLiBFbXB0eSB7fSBvciBbXSBhcmUgdmFsaWRcbiAgICAvLyBEYW1sIHZhbHVlcyBhbmQgbXVzdCBiZSB2ZXJpZmllZCBhZ2FpbnN0IGFjdHVhbCB0byBwcmV2ZW50IGFjY2lkZW50YWwgdW5kZXItdmVyaWZpY2F0aW9uLlxuICAgIGlmIChleHBlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV4cGVjdGVkID09PSBudWxsIHx8IGFjdHVhbCA9PT0gbnVsbCkge1xuICAgICAgaWYgKGV4cGVjdGVkICE9PSBhY3R1YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW50b24gY29tbWFuZCBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBleHBlY3RlZCAke3RoaXMuc3RyaW5naWZ5Rm9yRXJyb3IoXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgICl9LCBnb3QgJHt0aGlzLnN0cmluZ2lmeUZvckVycm9yKGFjdHVhbCl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgYWN0dWFsID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHRoaXMuYXJlTnVtZXJpY1N0cmluZ3MoZXhwZWN0ZWQsIGFjdHVhbCkpIHtcbiAgICAgICAgaWYgKCFuZXcgQmlnTnVtYmVyKGV4cGVjdGVkKS5pc0VxdWFsVG8obmV3IEJpZ051bWJlcihhY3R1YWwpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW50b24gY29tbWFuZCBudW1lcmljIG1pc21hdGNoIGF0ICcke2N1cnJlbnRQYXRoIHx8ICc8cm9vdD4nfSc6IGV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV4cGVjdGVkICE9PSBhY3R1YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW50b24gY29tbWFuZCBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBleHBlY3RlZCAnJHtleHBlY3RlZH0nLCBnb3QgJyR7YWN0dWFsfSdgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdudW1iZXInICYmIHR5cGVvZiBhY3R1YWwgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZXhwZWN0ZWQgIT09IGFjdHVhbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbnRvbiBjb21tYW5kIG1pc21hdGNoIGF0ICcke2N1cnJlbnRQYXRoIHx8ICc8cm9vdD4nfSc6IGV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdib29sZWFuJyAmJiB0eXBlb2YgYWN0dWFsID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChleHBlY3RlZCAhPT0gYWN0dWFsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FudG9uIGNvbW1hbmQgbWlzbWF0Y2ggYXQgJyR7Y3VycmVudFBhdGggfHwgJzxyb290Pid9JzogZXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpICYmIEFycmF5LmlzQXJyYXkoYWN0dWFsKSkge1xuICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCAhPT0gYWN0dWFsLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbnRvbiBjb21tYW5kIGxpc3QtbGVuZ3RoIG1pc21hdGNoIGF0ICcke2N1cnJlbnRQYXRoIHx8ICc8cm9vdD4nfSc6IGV4cGVjdGVkICR7ZXhwZWN0ZWQubGVuZ3RofSwgZ290ICR7XG4gICAgICAgICAgICBhY3R1YWwubGVuZ3RoXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gY3VycmVudFBhdGggPyBgJHtjdXJyZW50UGF0aH0uJHtpfWAgOiBTdHJpbmcoaSk7XG4gICAgICAgIHRoaXMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKGV4cGVjdGVkW2ldLCBhY3R1YWxbaV0sIGluamVjdEFzUGF0aHMsIGNoaWxkUGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUGxhaW5PYmplY3QoZXhwZWN0ZWQpICYmIHRoaXMuaXNQbGFpbk9iamVjdChhY3R1YWwpKSB7XG4gICAgICBjb25zdCBleHBlY3RlZEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKGV4cGVjdGVkKSk7XG4gICAgICBjb25zdCBhY3R1YWxLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhhY3R1YWwpKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGV4cGVjdGVkS2V5cykge1xuICAgICAgICBjb25zdCBjaGlsZFBhdGggPSBjdXJyZW50UGF0aCA/IGAke2N1cnJlbnRQYXRofS4ke2tleX1gIDoga2V5O1xuICAgICAgICBpZiAoZXhwZWN0ZWRba2V5XSA9PT0gdW5kZWZpbmVkIHx8IGluamVjdEFzUGF0aHMuaGFzKGNoaWxkUGF0aCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWFjdHVhbEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbnRvbiBjb21tYW5kIG1pc3NpbmcgZmllbGQgYXQgJyR7Y2hpbGRQYXRofScgb24gcHJlcGFyZWQgdHJhbnNhY3Rpb25gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2VydERlZXBDYW50b25NYXRjaChleHBlY3RlZFtrZXldLCAoYWN0dWFsIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldLCBpbmplY3RBc1BhdGhzLCBjaGlsZFBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2FudG9uIGNvbW1hbmQgdHlwZSBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBleHBlY3RlZCAke3RoaXMuZGVzY3JpYmVUeXBlKFxuICAgICAgICBleHBlY3RlZFxuICAgICAgKX0sIGdvdCAke3RoaXMuZGVzY3JpYmVUeXBlKGFjdHVhbCl9YFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIHRvcG9sb2d5IGhhc2ggZnJvbSB0aGUgQVBJIHJlc3BvbnNlIG9mIHRoZSAnY3JlYXRlIHBhcnR5JyBlbmRwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHRvcG9sb2d5VHJhbnNhY3Rpb25zIC0gTGlzdCBvZiBiYXNlNjQtZW5jb2RlZCB0b3BvbG9neSB0cmFuc2FjdGlvbnMgZnJvbSB0aGUgQ2FudG9uIEFQSS5cbiAgICogQHJldHVybnMgVGhlIGZpbmFsIGJhc2U2NC1lbmNvZGVkIHRvcG9sb2d5IHRyYW5zYWN0aW9uIGhhc2guXG4gICAqL1xuICBjb21wdXRlSGFzaEZyb21DcmVhdGVQYXJ0eVJlc3BvbnNlKHRvcG9sb2d5VHJhbnNhY3Rpb25zOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHhCdWZmZXJzID0gdG9wb2xvZ3lUcmFuc2FjdGlvbnMubWFwKCh0eCkgPT4gQnVmZmVyLmZyb20odHgsICdiYXNlNjQnKSk7XG4gICAgcmV0dXJuIHRoaXMuY29tcHV0ZUhhc2hGcm9tVG9wb2xvZ3lUcmFuc2FjdGlvbih0eEJ1ZmZlcnMpO1xuICB9XG5cbiAgYXN5bmMgY29tcHV0ZUhhc2hGcm9tUHJlcGFyZVN1Ym1pc3Npb25SZXNwb25zZShwcmVwYXJlZFRyYW5zYWN0aW9uQmFzZTY0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHByZXBhcmVkVHJhbnNhY3Rpb24gPSB0aGlzLmRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24ocHJlcGFyZWRUcmFuc2FjdGlvbkJhc2U2NCk7XG4gICAgY29uc3QgaGFzaCA9IGF3YWl0IGNvbXB1dGVQcmVwYXJlZFRyYW5zYWN0aW9uKHByZXBhcmVkVHJhbnNhY3Rpb24pO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShoYXNoKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIGZpbmFsIHRvcG9sb2d5IHRyYW5zYWN0aW9uIGhhc2ggZm9yIGEgbGlzdCBvZiBwcmVwYXJlZCBDYW50b24gdHJhbnNhY3Rpb25zLlxuICAgKlxuICAgKiBFYWNoIHRyYW5zYWN0aW9uIGlzIGZpcnN0IGhhc2hlZCB3aXRoIHB1cnBvc2UgYDExYCwgdGhlbiBhbGwgaGFzaGVzIGFyZSBjb21iaW5lZCBhbmRcbiAgICogaGFzaGVkIGFnYWluIHdpdGggcHVycG9zZSBgNTVgLCBmb2xsb3dpbmcgdGhlIENhbnRvbiB0b3BvbG9neSBoYXNoIHJ1bGVzLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIGhhc2ggaXMgZW5jb2RlZCBhcyBhIGJhc2U2NCBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyW119IHByZXBhcmVkVHJhbnNhY3Rpb25zIC0gQW4gYXJyYXkgb2YgQ2FudG9uIHRyYW5zYWN0aW9uIGJ1ZmZlcnMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmaW5hbCB0b3BvbG9neSBoYXNoLCBiYXNlNjQtZW5jb2RlZC5cbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZUhhc2hGcm9tVG9wb2xvZ3lUcmFuc2FjdGlvbihwcmVwYXJlZFRyYW5zYWN0aW9uczogQnVmZmVyW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhd0hhc2hlcyA9IHByZXBhcmVkVHJhbnNhY3Rpb25zLm1hcCgodHgpID0+IHRoaXMuY29tcHV0ZVNoYTI1NkNhbnRvbkhhc2goMTEsIHR4KSk7XG4gICAgY29uc3QgY29tYmluZWRIYXNoZXMgPSB0aGlzLmNvbXB1dGVNdWx0aUhhc2hGb3JUb3BvbG9neShyYXdIYXNoZXMpO1xuICAgIGNvbnN0IGNvbXB1dGVkSGFzaCA9IHRoaXMuY29tcHV0ZVNoYTI1NkNhbnRvbkhhc2goNTUsIGNvbWJpbmVkSGFzaGVzKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oY29tcHV0ZWRIYXNoLCAnaGV4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgYmFzZTY0LWVuY29kZWQgRWQyNTUxOSBwdWJsaWMga2V5IHN0cmluZyBpbnRvIGEgc3RydWN0dXJlZCBzaWduaW5nIHB1YmxpYyBrZXkgb2JqZWN0LlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHVibGljS2V5IFRoZSBiYXNlNjQtZW5jb2RlZCBFZDI1NTE5IHB1YmxpYyBrZXlcbiAgICogQHJldHVybnMge09iamVjdH0gVGhlIHN0cnVjdHVyZWQgc2lnbmluZyBrZXkgb2JqZWN0IGZvcm1hdHRlZCBmb3IgdXNlIHdpdGggY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNpZ25pbmdQdWJsaWNLZXlGcm9tRWQyNTUxOShwdWJsaWNLZXk6IHN0cmluZyk6IHtcbiAgICBmb3JtYXQ6IG51bWJlcjtcbiAgICBwdWJsaWNLZXk6IEJ1ZmZlcjtcbiAgICBzY2hlbWU6IG51bWJlcjtcbiAgICBrZXlTcGVjOiBudW1iZXI7XG4gICAgdXNhZ2U6IFtdO1xuICB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0OiBDcnlwdG9LZXlGb3JtYXQuUkFXLFxuICAgICAgcHVibGljS2V5OiBCdWZmZXIuZnJvbShwdWJsaWNLZXksICdiYXNlNjQnKSxcbiAgICAgIHNjaGVtZTogU2lnbmluZ0FsZ29yaXRobVNwZWMuRUQyNTUxOSxcbiAgICAgIGtleVNwZWM6IFNpZ25pbmdLZXlTcGVjLkVDX0NVUlZFMjU1MTksXG4gICAgICB1c2FnZTogW10sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgYnVmZmVyIHdpdGggYSA0LWJ5dGUgYmlnLWVuZGlhbiBpbnRlZ2VyIHByZWZpeCBmb2xsb3dlZCBieSB0aGUgcHJvdmlkZWQgYnl0ZSBidWZmZXJcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIFRoZSBpbnRlZ2VyIHRvIHByZWZpeCwgd3JpdHRlbiBhcyA0IGJ5dGVzIGluIGJpZy1lbmRpYW4gb3JkZXJcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJ5dGVzIFRoZSBidWZmZXIgdG8gYXBwZW5kIGFmdGVyIHRoZSBpbnRlZ2VyIHByZWZpeFxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBUaGUgcmVzdWx0aW5nIGJ1ZmZlciB3aXRoIHRoZSBwcmVmaXhlZCBpbnRlZ2VyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHByZWZpeGVkSW50KHZhbHVlOiBudW1iZXIsIGJ5dGVzOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyg0ICsgYnl0ZXMubGVuZ3RoKTtcbiAgICBidWZmZXIud3JpdGVVSW50MzJCRSh2YWx1ZSwgMCk7XG4gICAgQnVmZmVyLmZyb20oYnl0ZXMpLmNvcHkoYnVmZmVyLCA0KTtcbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIGFuIFNIQS0yNTYgQ2FudG9uLXN0eWxlIGhhc2ggYnkgcHJlZml4aW5nIHRoZSBpbnB1dCB3aXRoIGEgcHVycG9zZSBpZGVudGlmaWVyLFxuICAgKiB0aGVuIGhhc2hpbmcgdGhlIHJlc3VsdGluZyBidWZmZXIgYW5kIHByZXBlbmRpbmcgYSBtdWx0aS1wcmVmaXhcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHB1cnBvc2UgQSBudW1lcmljIGlkZW50aWZpZXIgdG8gcHJlZml4IHRoZSBoYXNoIGlucHV0IHdpdGhcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJ5dGVzIFRoZSBidWZmZXIgdG8gYmUgaGFzaGVkXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IEEgaGV4YWRlY2ltYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXN1bHRpbmcgaGFzaCB3aXRoIG11bHRpLXByZWZpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBjb21wdXRlU2hhMjU2Q2FudG9uSGFzaChwdXJwb3NlOiBudW1iZXIsIGJ5dGVzOiBCdWZmZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhc2hJbnB1dCA9IHRoaXMucHJlZml4ZWRJbnQocHVycG9zZSwgYnl0ZXMpO1xuICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhhc2hJbnB1dCkuZGlnZXN0KCk7XG4gICAgY29uc3QgbXVsdGlwcmVmaXggPSBCdWZmZXIuZnJvbShbMHgxMiwgMHgyMF0pO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFttdWx0aXByZWZpeCwgaGFzaF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGEgQmFzZTY0LWVuY29kZWQgc3RyaW5nIGludG8gYSBVaW50OEFycmF5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBiNjQgVGhlIEJhc2U2NC1lbmNvZGVkIHN0cmluZ1xuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gVGhlIGRlY29kZWQgYnl0ZSBhcnJheVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBmcm9tQmFzZTY0KGI2NDogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGI2NCwgJ2Jhc2U2NCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGEgQmFzZTY0LWVuY29kZWQgcHJlcGFyZWQgdHJhbnNhY3Rpb24gaW50byBhIHN0cnVjdHVyZWQgb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlNjQgVGhlIEJhc2U2NC1lbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMge0lQcmVwYXJlZFRyYW5zYWN0aW9ufSBUaGUgZGVjb2RlZCBgSVByZXBhcmVkVHJhbnNhY3Rpb25gIG9iamVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKGJhc2U2NDogc3RyaW5nKTogSVByZXBhcmVkVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5mcm9tQmFzZTY0KGJhc2U2NCk7XG4gICAgcmV0dXJuIFByZXBhcmVkVHJhbnNhY3Rpb24uZnJvbUJpbmFyeShieXRlcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgYSBkZXRlcm1pbmlzdGljIGNvbWJpbmVkIGhhc2ggZnJvbSBhbiBhcnJheSBvZiBpbmRpdmlkdWFsIENhbnRvbi1zdHlsZSBTSEEtMjU2IGhhc2hlc1xuICAgKlxuICAgKiBFYWNoIGhhc2ggaXMgZGVjb2RlZCBmcm9tIGhleCwgc29ydGVkIGxleGljb2dyYXBoaWNhbGx5IChieSBoZXgpLCBhbmQgcHJlZml4ZWQgd2l0aCBpdHMgbGVuZ3RoXG4gICAqIFRoZSBmaW5hbCBidWZmZXIgaW5jbHVkZXMgdGhlIG51bWJlciBvZiBoYXNoZXMgZm9sbG93ZWQgYnkgZWFjaCAobGVuZ3RoLXByZWZpeGVkKSBoYXNoXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGhhc2hlcyAtIEFuIGFycmF5IG9mIENhbnRvbi1wcmVmaXhlZCBTSEEtMjU2IGhhc2hlcyBpbiBoZXhhZGVjaW1hbCBzdHJpbmcgZm9ybWF0XG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IEEgYmluYXJ5IGJ1ZmZlciByZXByZXNlbnRpbmcgdGhlIGNvbWJpbmVkIGhhc2ggaW5wdXRcbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZU11bHRpSGFzaEZvclRvcG9sb2d5KGhhc2hlczogc3RyaW5nW10pOiBCdWZmZXIge1xuICAgIGNvbnN0IHNvcnRlZEhhc2hlcyA9IGhhc2hlc1xuICAgICAgLm1hcCgoaGV4KSA9PiBCdWZmZXIuZnJvbShoZXgsICdoZXgnKSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRvU3RyaW5nKCdoZXgnKS5sb2NhbGVDb21wYXJlKGIudG9TdHJpbmcoJ2hleCcpKSk7XG5cbiAgICBjb25zdCBudW1IYXNoZXNCeXRlcyA9IHRoaXMuZW5jb2RlSW50MzIoc29ydGVkSGFzaGVzLmxlbmd0aCk7XG4gICAgY29uc3QgcGFydHM6IEJ1ZmZlcltdID0gW251bUhhc2hlc0J5dGVzXTtcblxuICAgIGZvciAoY29uc3QgaCBvZiBzb3J0ZWRIYXNoZXMpIHtcbiAgICAgIGNvbnN0IGxlbmd0aEJ5dGVzID0gdGhpcy5lbmNvZGVJbnQzMihoLmxlbmd0aCk7XG4gICAgICBwYXJ0cy5wdXNoKGxlbmd0aEJ5dGVzLCBoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChwYXJ0cyk7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlcyBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbnRvIGEgNC1ieXRlIGJpZy1lbmRpYW4gQnVmZmVyXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBpbnRlZ2VyIHRvIGVuY29kZVxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBBIDQtYnl0ZSBidWZmZXIgcmVwcmVzZW50aW5nIHRoZSBpbnRlZ2VyIGluIGJpZy1lbmRpYW4gZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIGVuY29kZUludDMyKHZhbHVlOiBudW1iZXIpOiBCdWZmZXIge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICBidWYud3JpdGVJbnQzMkJFKHZhbHVlLCAwKTtcbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdG8gY2FudG9uIHJhdyB1bml0c1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAgICogQHJldHVybnMge1N0cmluZ30gdGhlIGNvbnZlcnRlZCByYXcgY2FudG9uIHVuaXRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRBbW91bnRUb0xvd2VzdFVuaXQodmFsdWU6IEJpZ051bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLm11bHRpcGxpZWRCeShuZXcgQmlnTnVtYmVyKDEwKS5wb3coMTApKS50b0ZpeGVkKDApO1xuICB9XG5cbiAgaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFyZU51bWVyaWNTdHJpbmdzKGE6IHN0cmluZywgYjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtZXJpY1JlID0gL14tP1xcZCsoXFwuXFxkKyk/JC87XG4gICAgcmV0dXJuIG51bWVyaWNSZS50ZXN0KGEpICYmIG51bWVyaWNSZS50ZXN0KGIpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXNjcmliZVR5cGUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiAnYXJyYXknO1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeUZvckVycm9yKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJpdGdvIHRva2VuIG5hbWUgdXNpbmcgdGhlIG9uLWNoYWluIGluc3RydW1lbnQgZGV0YWlsc1xuICAgKiBAcGFyYW0gY29udHJhY3RBZGRyZXNzIC0gdGhlIGNvbnRyYWN0IGFkZHJlc3Mgb2YgdGhlIGZvcm0sIGBpbnN0cnVtZW50QWRtaW46aW5zdHJ1bWVudElkYFxuICAgKiBAcmV0dXJucyB0b2tlbk5hbWUgaWYgY29udHJhY3RBZGRyZXNzIG1hdGNoZXMgd2l0aCBhbnkgc3VwcG9ydGVkIGNhbnRvbiB0b2tlbnNcbiAgICovXG4gIHByaXZhdGUgZmluZFRva2VuTmFtZUJ5Q29udHJhY3RBZGRyZXNzKGNvbnRyYWN0QWRkcmVzczogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoY29udHJhY3RBZGRyZXNzLmluY2x1ZGVzKCdBbXVsZXQnKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY2FudG9uVG9rZW4gPSBjb2luc1xuICAgICAgLmZpbHRlcigoY29pbikgPT4gY29pbiBpbnN0YW5jZW9mIENhbnRvblRva2VuICYmIGNvaW4uY29udHJhY3RBZGRyZXNzID09PSBjb250cmFjdEFkZHJlc3MpXG4gICAgICAubWFwKChjb2luKSA9PiBjb2luIGFzIENhbnRvblRva2VuKTtcbiAgICByZXR1cm4gY2FudG9uVG9rZW4gPyBjYW50b25Ub2tlblswXS5uYW1lIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
897
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFxQztBQUNyQyxvREFBNEI7QUFFNUIsbURBQTJGO0FBQzNGLGlEQUF5RDtBQUV6RCwwREFBMEU7QUFDMUUseUZBQW1GO0FBRW5GLHlDQUFtRjtBQUluRixNQUFhLEtBQUs7SUFDaEIsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwRCxNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQixpRUFBaUU7UUFDakUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLDJFQUEyRTtRQUMzRSxvREFBb0Q7UUFDcEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxHQUFHLENBQUMs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QUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTFCLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHsgQmFzZVV0aWxzLCBpc1ZhbGlkRWQyNTUxOVB1YmxpY0tleSwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQ2FudG9uVG9rZW4sIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmltcG9ydCB7IGNvbXB1dGVQcmVwYXJlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2hhc2gvaGFzaC5qcyc7XG5pbXBvcnQgeyBQcmVwYXJlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Byb3RvL3ByZXBhcmVkVHJhbnNhY3Rpb24uanMnO1xuXG5pbXBvcnQgeyBDcnlwdG9LZXlGb3JtYXQsIFNpZ25pbmdBbGdvcml0aG1TcGVjLCBTaWduaW5nS2V5U3BlYyB9IGZyb20gJy4vY29uc3RhbnQnO1xuaW1wb3J0IHsgQ2FudG9uQ29tbWFuZEluZm8sIFByZXBhcmVkVHJhbnNhY3Rpb24gYXMgSVByZXBhcmVkVHJhbnNhY3Rpb24sIFByZXBhcmVkVHhuUGFyc2VkSW5mbyB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgUmVjb3JkRmllbGQsIFZhbHVlIH0gZnJvbSAnLi9yZXNvdXJjZXNJbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFhZGRyZXNzIHx8IGFkZHJlc3MudHJpbSgpID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IFtwYXJ0eUhpbnQsIGZpbmdlcnByaW50XSA9IGFkZHJlc3MudHJpbSgpLnNwbGl0KCc6OicpO1xuICAgIGlmICghZmluZ2VycHJpbnQpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhbGwgbWVtb0lkcyBhcmUgY29uc2lkZXJlZCB2YWxpZCBhcyBsb25nIGFzIHN0cmluZ3MgYXJlIHBhc3NlZFxuICAgIGNvbnN0IFtmaW5nZXJwcmludFBhcnRdID0gZmluZ2VycHJpbnQudHJpbSgpLnNwbGl0KCc/bWVtb0lkPScpO1xuICAgIGlmICghcGFydHlIaW50IHx8ICFmaW5nZXJwcmludFBhcnQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkQ2FudG9uSGV4KGZpbmdlcnByaW50UGFydCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEJsb2NrSWQoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gSW4gY2FudG9uLCB0aGVyZSBpcyBubyBibG9jayBoYXNoLCB3ZSBzdG9yZSB0aGUgaGVpZ2h0IGFzIHRoZSBfaWQgKGhhc2gpXG4gICAgLy8gdGhpcyB3aWxsIGJlIG9mIHRoZSBmb3JtLCA8YmxvY2tIZWlnaHQ+Xzx2ZXJzaW9uPlxuICAgIGNvbnN0IFtoZWlnaHRdID0gaGFzaC5zcGxpdCgnXycpO1xuICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gTnVtYmVyKGhlaWdodCk7XG4gICAgcmV0dXJuICFpc05hTihibG9ja0hlaWdodCkgJiYgYmxvY2tIZWlnaHQgPiAwO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQdWJsaWNLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXkoa2V5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gdmFsaWRhdGUgdGhlIGlucHV0IGlzIGEgdmFsaWQgY2FudG9uIGhleCBzdHJpbmdcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIHRoZSBoZXggc3RyaW5nIHZhbHVlXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHZhbGlkXG4gICAqL1xuICBpc1ZhbGlkQ2FudG9uSGV4KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWdleCA9IC9eW2EtZkEtRjAtOV17Njh9JC87XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gY29udmVydCBoZXggdmFsdWUgdG8gYmFzZTY0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBoZXhTdHJpbmcgLSBoZXggZW5jb2RlZCBzdHJpbmdcbiAgICogQHJldHVybnMge1N0cmluZ30gYmFzZTY0IGVuY29kZWQgc3RyaW5nXG4gICAqL1xuICBnZXRCYXNlNjRGcm9tSGV4KGhleFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oaGV4U3RyaW5nLCAnaGV4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBjcmVhdGUgZmluZ2VycHJpbnQgKHBhcnQgb2YgdGhlIGNhbnRvbiBwYXJ0eUlkKSBmcm9tIHB1YmxpYyBrZXlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YmxpY0tleSB0aGUgcHVibGljIGtleVxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuc2lnbmluZ1B1YmxpY0tleUZyb21FZDI1NTE5KHB1YmxpY0tleSk7XG4gICAgY29uc3QgaGFzaFB1cnBvc2UgPSAxMjtcbiAgICByZXR1cm4gdGhpcy5jb21wdXRlU2hhMjU2Q2FudG9uSGFzaChoYXNoUHVycG9zZSwga2V5LnB1YmxpY0tleSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHBhcnNlIHJhdyBjYW50b24gdHJhbnNhY3Rpb24gJiBnZXQgcmVxdWlyZWQgZGF0YVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcmF3RGF0YSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHR4VHlwZSB0aGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKiBAcmV0dXJucyB7UHJlcGFyZWRUeG5QYXJzZWRJbmZvfVxuICAgKi9cbiAgcGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEocmF3RGF0YTogc3RyaW5nLCB0eFR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IFByZXBhcmVkVHhuUGFyc2VkSW5mbyB7XG4gICAgY29uc3QgZGVjb2RlZERhdGEgPSB0aGlzLmRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24ocmF3RGF0YSk7XG4gICAgY29uc3Qgbm9kZXMgPSBkZWNvZGVkRGF0YS50cmFuc2FjdGlvbj8ubm9kZXMgPz8gW107XG4gICAgY29uc3QgZ2V0RmllbGQgPSAoZmllbGRzOiBSZWNvcmRGaWVsZFtdLCBsYWJlbDogc3RyaW5nKSA9PiBmaWVsZHMuZmluZCgoZikgPT4gZi5sYWJlbCA9PT0gbGFiZWwpPy52YWx1ZT8uc3VtO1xuXG4gICAgbGV0IHNlbmRlciA9ICcnO1xuICAgIGxldCByZWNlaXZlciA9ICcnO1xuICAgIGxldCBhbW91bnQgPSAnJztcbiAgICBsZXQgbWVtb0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGluc3RydW1lbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBpbnN0cnVtZW50QWRtaW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFyZ3VtZW50IGZpZWxkcyBvZiB0aGUgZmlyc3QgY3JlYXRlIG5vZGUgbWF0Y2hpbmcgdGhlIGdpdmVuIGVudGl0eSBuYW1lLlxuICAgICAqL1xuICAgIGNvbnN0IGZpbmRDcmVhdGVOb2RlRmllbGRzID0gKGVudGl0eU5hbWU6IHN0cmluZyk6IFJlY29yZEZpZWxkW10gfCB1bmRlZmluZWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgIGNvbnN0IHZuID0gbm9kZS52ZXJzaW9uZWROb2RlO1xuICAgICAgICBpZiAoIXZuIHx8IHZuLm9uZW9mS2luZCAhPT0gJ3YxJykgY29udGludWU7XG4gICAgICAgIGNvbnN0IG50ID0gdm4udjEubm9kZVR5cGU7XG4gICAgICAgIGlmIChudC5vbmVvZktpbmQgIT09ICdjcmVhdGUnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG50LmNyZWF0ZS50ZW1wbGF0ZUlkPy5lbnRpdHlOYW1lICE9PSBlbnRpdHlOYW1lKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgYXJnU3VtID0gbnQuY3JlYXRlLmFyZ3VtZW50Py5zdW07XG4gICAgICAgIGlmICghYXJnU3VtIHx8IGFyZ1N1bS5vbmVvZktpbmQgIT09ICdyZWNvcmQnKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZmllbGRzID0gYXJnU3VtLnJlY29yZD8uZmllbGRzO1xuICAgICAgICBpZiAoZmllbGRzKSByZXR1cm4gZmllbGRzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2hvc2VuVmFsdWUgZmllbGRzIG9mIHRoZSBmaXJzdCBleGVyY2lzZSBub2RlIG1hdGNoaW5nIHRoZSBnaXZlbiBjaG9pY2VJZC5cbiAgICAgKi9cbiAgICBjb25zdCBmaW5kRXhlcmNpc2VOb2RlRmllbGRzID0gKGNob2ljZUlkOiBzdHJpbmcpOiBSZWNvcmRGaWVsZFtdIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBjb25zdCB2biA9IG5vZGUudmVyc2lvbmVkTm9kZTtcbiAgICAgICAgaWYgKCF2biB8fCB2bi5vbmVvZktpbmQgIT09ICd2MScpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBudCA9IHZuLnYxLm5vZGVUeXBlO1xuICAgICAgICBpZiAobnQub25lb2ZLaW5kICE9PSAnZXhlcmNpc2UnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG50LmV4ZXJjaXNlLmNob2ljZUlkICE9PSBjaG9pY2VJZCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGFyZ1N1bSA9IG50LmV4ZXJjaXNlLmNob3NlblZhbHVlPy5zdW07XG4gICAgICAgIGlmICghYXJnU3VtIHx8IGFyZ1N1bS5vbmVvZktpbmQgIT09ICdyZWNvcmQnKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZmllbGRzID0gYXJnU3VtLnJlY29yZD8uZmllbGRzO1xuICAgICAgICBpZiAoZmllbGRzKSByZXR1cm4gZmllbGRzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgYWN0aW5nIHBhcnR5IG9mIHRoZSBmaXJzdCBleGVyY2lzZSBub2RlIG1hdGNoaW5nIHRoZSBnaXZlbiBjaG9pY2VJZC5cbiAgICAgKi9cbiAgICBjb25zdCBmaW5kRXhlcmNpc2VBY3RpbmdQYXJ0eSA9IChjaG9pY2VJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBjb25zdCB2biA9IG5vZGUudmVyc2lvbmVkTm9kZTtcbiAgICAgICAgaWYgKCF2biB8fCB2bi5vbmVvZktpbmQgIT09ICd2MScpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBudCA9IHZuLnYxLm5vZGVUeXBlO1xuICAgICAgICBpZiAobnQub25lb2ZLaW5kICE9PSAnZXhlcmNpc2UnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG50LmV4ZXJjaXNlLmNob2ljZUlkICE9PSBjaG9pY2VJZCkgY29udGludWU7XG4gICAgICAgIHJldHVybiBudC5leGVyY2lzZS5hY3RpbmdQYXJ0aWVzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgc2VuZGVyLCByZWNlaXZlciwgYW1vdW50LCBhbmQgaW5zdHJ1bWVudCBmaWVsZHMgZnJvbSBhIHRyYW5zZmVyIHJlY29yZC5cbiAgICAgKiBDYW50b24gY29pbiB0cmFuc2ZlcnMgYW5kIGNidGMgdXNlIGluc3RydW1lbnRJZC5hZG1pbjsgcmVndWxhciB0b2tlbiB0cmFuc2ZlcnMgdXNlIGluc3RydW1lbnRJZGVudGlmaWVyLnNvdXJjZS5cbiAgICAgKi9cbiAgICBjb25zdCBleHRyYWN0RnJvbVRyYW5zZmVyUmVjb3JkID0gKFxuICAgICAgdHJhbnNmZXJSZWNvcmQ6IFJlY29yZEZpZWxkW10sXG4gICAgICBpbnN0cnVtZW50RmllbGROYW1lOiBzdHJpbmcsXG4gICAgICBpbnN0cnVtZW50QWRtaW5GaWVsZE5hbWU6IHN0cmluZ1xuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgc2VuZGVyRGF0YSA9IGdldEZpZWxkKHRyYW5zZmVyUmVjb3JkLCAnc2VuZGVyJyk7XG4gICAgICBpZiAoc2VuZGVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBzZW5kZXIgPSBzZW5kZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgY29uc3QgcmVjZWl2ZXJEYXRhID0gZ2V0RmllbGQodHJhbnNmZXJSZWNvcmQsICdyZWNlaXZlcicpO1xuICAgICAgaWYgKHJlY2VpdmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IHJlY2VpdmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgIGNvbnN0IGFtb3VudERhdGEgPSBnZXRGaWVsZCh0cmFuc2ZlclJlY29yZCwgJ2Ftb3VudCcpO1xuICAgICAgaWYgKGFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBhbW91bnREYXRhLm51bWVyaWMgPz8gJyc7XG4gICAgICBjb25zdCBpbnN0cnVtZW50RmllbGQgPSBnZXRGaWVsZCh0cmFuc2ZlclJlY29yZCwgaW5zdHJ1bWVudEZpZWxkTmFtZSk7XG4gICAgICBpZiAoaW5zdHJ1bWVudEZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRGaWVsZHMgPSBpbnN0cnVtZW50RmllbGQucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgIGNvbnN0IGFkbWluRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRGaWVsZHMsIGluc3RydW1lbnRBZG1pbkZpZWxkTmFtZSk7XG4gICAgICAgIGlmIChhZG1pbkRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgaW5zdHJ1bWVudEFkbWluID0gYWRtaW5EYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICBjb25zdCBpZERhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnaWQnKTtcbiAgICAgICAgaWYgKGlkRGF0YT8ub25lb2ZLaW5kID09PSAndGV4dCcpIGluc3RydW1lbnRJZCA9IGlkRGF0YS50ZXh0ID8/ICcnO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHR4VHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuT25lU3RlcFByZUFwcHJvdmFsOiB7XG4gICAgICAgIC8vIENhbnRvbiBjb2luOiBUcmFuc2ZlclByZWFwcHJvdmFsUHJvcG9zYWwgY3JlYXRlIG5vZGUg4oaSIHByb3ZpZGVyPXNlbmRlciwgcmVjZWl2ZXJcbiAgICAgICAgY29uc3QgY29pbkZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdUcmFuc2ZlclByZWFwcHJvdmFsUHJvcG9zYWwnKTtcbiAgICAgICAgaWYgKGNvaW5GaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBwcm92aWRlckRhdGEgPSBnZXRGaWVsZChjb2luRmllbGRzLCAncHJvdmlkZXInKTtcbiAgICAgICAgICBpZiAocHJvdmlkZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IHByb3ZpZGVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCByZWNlaXZlckRhdGEgPSBnZXRGaWVsZChjb2luRmllbGRzLCAncmVjZWl2ZXInKTtcbiAgICAgICAgICBpZiAocmVjZWl2ZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHJlY2VpdmVyID0gcmVjZWl2ZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgIGFtb3VudCA9ICcwJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBUb2tlbjogVHJhbnNmZXJQcmVhcHByb3ZhbCBjcmVhdGUgbm9kZSDihpIgb3BlcmF0b3I9c2VuZGVyLCByZWNlaXZlciwgaW5zdHJ1bWVudEFkbWluLCBpbnN0cnVtZW50QWxsb3dhbmNlc1xuICAgICAgICBjb25zdCB0b2tlbkZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdUcmFuc2ZlclByZWFwcHJvdmFsJyk7XG4gICAgICAgIGlmICh0b2tlbkZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IG9wZXJhdG9yRGF0YSA9IGdldEZpZWxkKHRva2VuRmllbGRzLCAnb3BlcmF0b3InKTtcbiAgICAgICAgICBpZiAob3BlcmF0b3JEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IG9wZXJhdG9yRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCByZWNlaXZlckRhdGEgPSBnZXRGaWVsZCh0b2tlbkZpZWxkcywgJ3JlY2VpdmVyJyk7XG4gICAgICAgICAgaWYgKHJlY2VpdmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IHJlY2VpdmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBhbW91bnQgPSAnMCc7XG4gICAgICAgICAgY29uc3QgaW5zdHJ1bWVudEFkbWluRGF0YSA9IGdldEZpZWxkKHRva2VuRmllbGRzLCAnaW5zdHJ1bWVudEFkbWluJyk7XG4gICAgICAgICAgaWYgKGluc3RydW1lbnRBZG1pbkRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgaW5zdHJ1bWVudEFkbWluID0gaW5zdHJ1bWVudEFkbWluRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBhbGxvd2FuY2VzRGF0YSA9IGdldEZpZWxkKHRva2VuRmllbGRzLCAnaW5zdHJ1bWVudEFsbG93YW5jZXMnKTtcbiAgICAgICAgICBpZiAoYWxsb3dhbmNlc0RhdGE/Lm9uZW9mS2luZCA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICAvLyBmb3IgdGhlIHNhbWUgaW5zdHJ1bWVudCBhZG1pbiwgaWYgbXVsdGlwbGUgdG9rZW5zIGFyZSBzdXBwb3J0ZWQgdGhlbiB3ZSBjYW4gZW5hYmxlIGFsbCBvZiB0aGVtLFxuICAgICAgICAgICAgLy8gYnV0IHdlIHdvbid0IGJlIGRvaW5nIHRoYXQgZm9yIG5vd1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBbGxvd2FuY2UgPSBhbGxvd2FuY2VzRGF0YS5saXN0Py5lbGVtZW50cz8uWzBdPy5zdW07XG4gICAgICAgICAgICBpZiAoZmlyc3RBbGxvd2FuY2U/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWxsb3dhbmNlRmllbGRzID0gZmlyc3RBbGxvd2FuY2UucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IGlkRGF0YSA9IGdldEZpZWxkKGFsbG93YW5jZUZpZWxkcywgJ2lkJyk7XG4gICAgICAgICAgICAgIGlmIChpZERhdGE/Lm9uZW9mS2luZCA9PT0gJ3RleHQnKSBpbnN0cnVtZW50SWQgPSBpZERhdGEudGV4dCA/PyAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyQWNjZXB0OiB7XG4gICAgICAgIC8vIENhbnRvbiBjb2luOiBBbXVsZXQgY3JlYXRlIG5vZGUg4oaSIGRzbz1zZW5kZXIsIG93bmVyPXJlY2VpdmVyLCBhbW91bnQuaW5pdGlhbEFtb3VudFxuICAgICAgICBjb25zdCBhbXVsZXRGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnQW11bGV0Jyk7XG4gICAgICAgIGlmIChhbXVsZXRGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBkc29EYXRhID0gZ2V0RmllbGQoYW11bGV0RmllbGRzLCAnZHNvJyk7XG4gICAgICAgICAgaWYgKGRzb0RhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykgc2VuZGVyID0gZHNvRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmVjZWl2ZXIgPSBvd25lckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgY29uc3QgYW1vdW50RmllbGQgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICBpZiAoYW1vdW50RmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxBbW91bnREYXRhID0gZ2V0RmllbGQoYW1vdW50RmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbml0aWFsQW1vdW50Jyk7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbEFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBpbml0aWFsQW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWd1bGFyIHRva2VuIChub24tY2J0Yyk6IEV4ZWN1dGVkVHJhbnNmZXIgY3JlYXRlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZGVudGlmaWVyLntzb3VyY2U9YWRtaW4sIGlkfX1cbiAgICAgICAgY29uc3QgZXhlY3V0ZWRUcmFuc2ZlckZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdFeGVjdXRlZFRyYW5zZmVyJyk7XG4gICAgICAgIGlmIChleGVjdXRlZFRyYW5zZmVyRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZChleGVjdXRlZFRyYW5zZmVyRmllbGRzLCAndHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGV4dHJhY3RGcm9tVHJhbnNmZXJSZWNvcmQodHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbnN0cnVtZW50SWRlbnRpZmllcicsICdzb3VyY2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2J0YyB0b2tlbiBmYWxsYmFjazogVHJhbnNmZXJSdWxlX0RpcmVjdFRyYW5zZmVyIGV4ZXJjaXNlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZC57YWRtaW4sIGlkfX1cbiAgICAgICAgY29uc3QgZGlyZWN0VHJhbnNmZXJGaWVsZHMgPSBmaW5kRXhlcmNpc2VOb2RlRmllbGRzKCdUcmFuc2ZlclJ1bGVfRGlyZWN0VHJhbnNmZXInKTtcbiAgICAgICAgaWYgKGRpcmVjdFRyYW5zZmVyRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZChkaXJlY3RUcmFuc2ZlckZpZWxkcywgJ3RyYW5zZmVyJyk7XG4gICAgICAgICAgaWYgKHRyYW5zZmVyU3VtPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICBleHRyYWN0RnJvbVRyYW5zZmVyUmVjb3JkKHRyYW5zZmVyU3VtLnJlY29yZD8uZmllbGRzID8/IFtdLCAnaW5zdHJ1bWVudElkJywgJ2FkbWluJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFVTREN4L3R3by1zdGVwIHRva2VuIGZhbGxiYWNrOiBUcmFuc2ZlclJ1bGVfVHdvU3RlcFRyYW5zZmVyIGV4ZXJjaXNlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZC57YWRtaW4sIGlkfX1cbiAgICAgICAgaWYgKCFzZW5kZXIpIHtcbiAgICAgICAgICBjb25zdCB0d29TdGVwVHJhbnNmZXJGaWVsZHMgPSBmaW5kRXhlcmNpc2VOb2RlRmllbGRzKCdUcmFuc2ZlclJ1bGVfVHdvU3RlcFRyYW5zZmVyJyk7XG4gICAgICAgICAgaWYgKHR3b1N0ZXBUcmFuc2ZlckZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZCh0d29TdGVwVHJhbnNmZXJGaWVsZHMsICd0cmFuc2ZlcicpO1xuICAgICAgICAgICAgaWYgKHRyYW5zZmVyU3VtPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICAgIGV4dHJhY3RGcm9tVHJhbnNmZXJSZWNvcmQodHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbnN0cnVtZW50SWQnLCAnYWRtaW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyUmVqZWN0OiB7XG4gICAgICAgIC8vIENhbnRvbiBjb2luOiBBbXVsZXQgY3JlYXRlIG5vZGUg4oaSIGRzbz1zZW5kZXIsIG93bmVyPXJlY2VpdmVyLCBhbW91bnQuaW5pdGlhbEFtb3VudFxuICAgICAgICBjb25zdCBhbXVsZXRGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnQW11bGV0Jyk7XG4gICAgICAgIGlmIChhbXVsZXRGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBkc29EYXRhID0gZ2V0RmllbGQoYW11bGV0RmllbGRzLCAnZHNvJyk7XG4gICAgICAgICAgaWYgKGRzb0RhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykgc2VuZGVyID0gZHNvRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmVjZWl2ZXIgPSBvd25lckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgY29uc3QgYW1vdW50RmllbGQgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICBpZiAoYW1vdW50RmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxBbW91bnREYXRhID0gZ2V0RmllbGQoYW1vdW50RmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbml0aWFsQW1vdW50Jyk7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbEFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBpbml0aWFsQW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWd1bGFyIHRva2VuIChub24tY2J0Yyk6IFJlamVjdGVkVHJhbnNmZXIgY3JlYXRlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZGVudGlmaWVyLntzb3VyY2U9YWRtaW4sIGlkfX1cbiAgICAgICAgY29uc3QgcmVqZWN0ZWRUcmFuc2ZlckZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdSZWplY3RlZFRyYW5zZmVyJyk7XG4gICAgICAgIGlmIChyZWplY3RlZFRyYW5zZmVyRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZChyZWplY3RlZFRyYW5zZmVyRmllbGRzLCAndHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGV4dHJhY3RGcm9tVHJhbnNmZXJSZWNvcmQodHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbnN0cnVtZW50SWRlbnRpZmllcicsICdzb3VyY2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2J0YyB0b2tlbiBmYWxsYmFjazogSG9sZGluZyBjcmVhdGUgbm9kZSAob3duZXI9c2VuZGVyLCBpbnN0cnVtZW50LCBhbW91bnQpXG4gICAgICAgIC8vICsgVHJhbnNmZXJJbnN0cnVjdGlvbl9SZWplY3QgZXhlcmNpc2UgKGFjdGluZ1BhcnRpZXNbMF09cmVjZWl2ZXIgd2hvIHJlamVjdGVkKVxuICAgICAgICBjb25zdCBob2xkaW5nRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0hvbGRpbmcnKTtcbiAgICAgICAgaWYgKGhvbGRpbmdGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChob2xkaW5nRmllbGRzLCAnb3duZXInKTtcbiAgICAgICAgICBpZiAob3duZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IG93bmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBhbW91bnREYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ2Ftb3VudCcpO1xuICAgICAgICAgIGlmIChhbW91bnREYXRhPy5vbmVvZktpbmQgPT09ICdudW1lcmljJykgYW1vdW50ID0gYW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIGNvbnN0IGluc3RydW1lbnREYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ2luc3RydW1lbnQnKTtcbiAgICAgICAgICBpZiAoaW5zdHJ1bWVudERhdGE/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRGaWVsZHMgPSBpbnN0cnVtZW50RGF0YS5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZURhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnc291cmNlJyk7XG4gICAgICAgICAgICBpZiAoc291cmNlRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBpbnN0cnVtZW50QWRtaW4gPSBzb3VyY2VEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgaWREYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudEZpZWxkcywgJ2lkJyk7XG4gICAgICAgICAgICBpZiAoaWREYXRhPy5vbmVvZktpbmQgPT09ICd0ZXh0JykgaW5zdHJ1bWVudElkID0gaWREYXRhLnRleHQgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlY2VpdmVyUGFydHkgPSBmaW5kRXhlcmNpc2VBY3RpbmdQYXJ0eSgnVHJhbnNmZXJJbnN0cnVjdGlvbl9SZWplY3QnKTtcbiAgICAgICAgICBpZiAocmVjZWl2ZXJQYXJ0eSkgcmVjZWl2ZXIgPSByZWNlaXZlclBhcnR5O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uQWxsb2NhdGU6IHtcbiAgICAgICAgLy8gRHZwTGVnQWxsb2NhdGlvbiBjcmVhdGUgbm9kZSDihpIgYWxsb2NhdGlvbi50cmFuc2ZlckxlZyBjb250YWlucyB0aGUgZnVsbCBzZXR0bGVtZW50IHRyYW5zZmVyIGRldGFpbHM6XG4gICAgICAgIC8vIHNlbmRlciwgcmVjZWl2ZXIgKHRoZSBhY3R1YWwgc2V0dGxlbWVudCBjb3VudGVycGFydHkpLCBhbW91bnQsIGFuZCBpbnN0cnVtZW50SWRcbiAgICAgICAgY29uc3QgZHZwRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0R2cExlZ0FsbG9jYXRpb24nKTtcbiAgICAgICAgaWYgKGR2cEZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IGFsbG9jYXRpb25GaWVsZCA9IGdldEZpZWxkKGR2cEZpZWxkcywgJ2FsbG9jYXRpb24nKTtcbiAgICAgICAgICBpZiAoYWxsb2NhdGlvbkZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxvY2F0aW9uRmllbGRzID0gYWxsb2NhdGlvbkZpZWxkLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmZXJMZWdGaWVsZCA9IGdldEZpZWxkKGFsbG9jYXRpb25GaWVsZHMsICd0cmFuc2ZlckxlZycpO1xuICAgICAgICAgICAgaWYgKHRyYW5zZmVyTGVnRmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNmZXJMZWdGaWVsZHMgPSB0cmFuc2ZlckxlZ0ZpZWxkLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgICBjb25zdCBzZW5kZXJEYXRhID0gZ2V0RmllbGQodHJhbnNmZXJMZWdGaWVsZHMsICdzZW5kZXInKTtcbiAgICAgICAgICAgICAgaWYgKHNlbmRlckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykgc2VuZGVyID0gc2VuZGVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXJEYXRhID0gZ2V0RmllbGQodHJhbnNmZXJMZWdGaWVsZHMsICdyZWNlaXZlcicpO1xuICAgICAgICAgICAgICBpZiAocmVjZWl2ZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHJlY2VpdmVyID0gcmVjZWl2ZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgICAgICBjb25zdCBhbW91bnREYXRhID0gZ2V0RmllbGQodHJhbnNmZXJMZWdGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICAgICAgaWYgKGFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBhbW91bnREYXRhLm51bWVyaWMgPz8gJyc7XG4gICAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRJZEZpZWxkID0gZ2V0RmllbGQodHJhbnNmZXJMZWdGaWVsZHMsICdpbnN0cnVtZW50SWQnKTtcbiAgICAgICAgICAgICAgaWYgKGluc3RydW1lbnRJZEZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1bWVudElkRmllbGRzID0gaW5zdHJ1bWVudElkRmllbGQucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICAgICAgY29uc3QgYWRtaW5EYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudElkRmllbGRzLCAnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICBpZiAoYWRtaW5EYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIGluc3RydW1lbnRBZG1pbiA9IGFkbWluRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBpZERhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50SWRGaWVsZHMsICdpZCcpO1xuICAgICAgICAgICAgICAgIGlmIChpZERhdGE/Lm9uZW9mS2luZCA9PT0gJ3RleHQnKSBpbnN0cnVtZW50SWQgPSBpZERhdGEudGV4dCA/PyAnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGYWxsYmFjazogaWYgRHZwTGVnQWxsb2NhdGlvbiBpcyBhYnNlbnQsIHVzZSB0aGUgb3BlcmF0b3IgYXMgcmVjZWl2ZXJcbiAgICAgICAgaWYgKCFyZWNlaXZlcikge1xuICAgICAgICAgIGNvbnN0IGFsbG9jYXRlRmllbGRzID0gZmluZEV4ZXJjaXNlTm9kZUZpZWxkcygnQWxsb2NhdGlvbkZhY3RvcnlfQWxsb2NhdGUnKTtcbiAgICAgICAgICBpZiAoYWxsb2NhdGVGaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkbWluRGF0YSA9IGdldEZpZWxkKGFsbG9jYXRlRmllbGRzLCAnZXhwZWN0ZWRBZG1pbicpO1xuICAgICAgICAgICAgaWYgKGFkbWluRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IGFkbWluRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZW5kZXIpIHtcbiAgICAgICAgICBjb25zdCBzZW5kZXJQYXJ0eSA9IGZpbmRFeGVyY2lzZUFjdGluZ1BhcnR5KCdBbGxvY2F0aW9uRmFjdG9yeV9BbGxvY2F0ZScpO1xuICAgICAgICAgIGlmIChzZW5kZXJQYXJ0eSkgc2VuZGVyID0gc2VuZGVyUGFydHk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkNvc2lnbkRlbGVnYXRpb25BY2NlcHQ6IHtcbiAgICAgICAgLy8gZXhlcmNpc2UgQ29zaWduaW5nRGVsZWdhdGlvblByb3Bvc2FsX0FjY2VwdCDihpIgYWN0aW5nUGFydGllc1swXSA9IHNpZ25lciAoc2VuZGVyKVxuICAgICAgICBjb25zdCBzaWduZXJQYXJ0eSA9IGZpbmRFeGVyY2lzZUFjdGluZ1BhcnR5KCdDb3NpZ25pbmdEZWxlZ2F0aW9uUHJvcG9zYWxfQWNjZXB0Jyk7XG4gICAgICAgIGlmIChzaWduZXJQYXJ0eSkgc2VuZGVyID0gc2lnbmVyUGFydHk7XG4gICAgICAgIC8vIENvc2lnbmluZ0RlbGVnYXRpb24gY3JlYXRlIG5vZGUgKHJlc3VsdCBvZiB0aGUgYWNjZXB0KSDihpIgYWRtaW4gPSByZWNlaXZlclxuICAgICAgICBjb25zdCBkZWxlZ2F0aW9uRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0Nvc2lnbmluZ0RlbGVnYXRpb24nKTtcbiAgICAgICAgaWYgKGRlbGVnYXRpb25GaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBhZG1pbkRhdGEgPSBnZXRGaWVsZChkZWxlZ2F0aW9uRmllbGRzLCAnYWRtaW4nKTtcbiAgICAgICAgICBpZiAoYWRtaW5EYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHJlY2VpdmVyID0gYWRtaW5EYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICB9XG4gICAgICAgIGFtb3VudCA9ICcwJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyT2ZmZXJXaXRoZHJhd246IHtcbiAgICAgICAgLy8gQ2FudG9uIGNvaW46IEFtdWxldCBjcmVhdGUgbm9kZSDihpIgb3duZXI9c2VuZGVyPXJlY2VpdmVyLCBhbW91bnQuaW5pdGlhbEFtb3VudFxuICAgICAgICBjb25zdCBhbXVsZXRGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnQW11bGV0Jyk7XG4gICAgICAgIGlmIChhbXVsZXRGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykge1xuICAgICAgICAgICAgcmVjZWl2ZXIgPSBvd25lckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICBzZW5kZXIgPSByZWNlaXZlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYW1vdW50RmllbGQgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICBpZiAoYW1vdW50RmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxBbW91bnREYXRhID0gZ2V0RmllbGQoYW1vdW50RmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbml0aWFsQW1vdW50Jyk7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbEFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBpbml0aWFsQW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBUb2tlbjogSG9sZGluZyBjcmVhdGUgbm9kZSDihpIgb3duZXI9c2VuZGVyPXJlY2VpdmVyLCBpbnN0cnVtZW50Lntzb3VyY2U9YWRtaW4sIGlkfSwgYW1vdW50XG4gICAgICAgIGNvbnN0IGhvbGRpbmdGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnSG9sZGluZycpO1xuICAgICAgICBpZiAoaG9sZGluZ0ZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IG93bmVyRGF0YSA9IGdldEZpZWxkKGhvbGRpbmdGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykge1xuICAgICAgICAgICAgcmVjZWl2ZXIgPSBvd25lckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICBzZW5kZXIgPSByZWNlaXZlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYW1vdW50RGF0YSA9IGdldEZpZWxkKGhvbGRpbmdGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICBpZiAoYW1vdW50RGF0YT8ub25lb2ZLaW5kID09PSAnbnVtZXJpYycpIGFtb3VudCA9IGFtb3VudERhdGEubnVtZXJpYyA/PyAnJztcbiAgICAgICAgICBjb25zdCBpbnN0cnVtZW50RGF0YSA9IGdldEZpZWxkKGhvbGRpbmdGaWVsZHMsICdpbnN0cnVtZW50Jyk7XG4gICAgICAgICAgaWYgKGluc3RydW1lbnREYXRhPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVtZW50RmllbGRzID0gaW5zdHJ1bWVudERhdGEucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VEYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudEZpZWxkcywgJ3NvdXJjZScpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZURhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgaW5zdHJ1bWVudEFkbWluID0gc291cmNlRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGlkRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRGaWVsZHMsICdpZCcpO1xuICAgICAgICAgICAgaWYgKGlkRGF0YT8ub25lb2ZLaW5kID09PSAndGV4dCcpIGluc3RydW1lbnRJZCA9IGlkRGF0YS50ZXh0ID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBJbml0aWFsIHRyYW5zZmVyICgxLXN0ZXAgYW5kIDItc3RlcCwgY29pbiBhbmQgdG9rZW4pOiBUcmFuc2ZlckZhY3RvcnlfVHJhbnNmZXIgZXhlcmNpc2Ugbm9kZVxuICAgICAgICAvLyDihpIgdHJhbnNmZXIue3NlbmRlciwgcmVjZWl2ZXIsIGFtb3VudCwgaW5zdHJ1bWVudElkLnthZG1pbiwgaWR9LCBtZXRhfVxuICAgICAgICBjb25zdCB0cmFuc2ZlckZpZWxkcyA9IGZpbmRFeGVyY2lzZU5vZGVGaWVsZHMoJ1RyYW5zZmVyRmFjdG9yeV9UcmFuc2ZlcicpO1xuICAgICAgICBpZiAodHJhbnNmZXJGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlclN1bSA9IGdldEZpZWxkKHRyYW5zZmVyRmllbGRzLCAndHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZmVyUmVjb3JkID0gdHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICBleHRyYWN0RnJvbVRyYW5zZmVyUmVjb3JkKHRyYW5zZmVyUmVjb3JkLCAnaW5zdHJ1bWVudElkJywgJ2FkbWluJyk7XG4gICAgICAgICAgICBjb25zdCBtZXRhRmllbGQgPSBnZXRGaWVsZCh0cmFuc2ZlclJlY29yZCwgJ21ldGEnKTtcbiAgICAgICAgICAgIGlmIChtZXRhRmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVzRmllbGQgPSBnZXRGaWVsZChtZXRhRmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICd2YWx1ZXMnKTtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlc0ZpZWxkPy5vbmVvZktpbmQgPT09ICd0ZXh0TWFwJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lbW9FbnRyeSA9IHZhbHVlc0ZpZWxkLnRleHRNYXA/LmVudHJpZXMuZmluZChcbiAgICAgICAgICAgICAgICAgIChlKSA9PiBlLmtleSA9PT0gJ3NwbGljZS5sZmRlY2VudHJhbGl6ZWR0cnVzdC5vcmcvcmVhc29uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKG1lbW9FbnRyeSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWVtb1ZhbHVlID0gbWVtb0VudHJ5Py52YWx1ZT8uc3VtO1xuICAgICAgICAgICAgICAgICAgaWYgKG1lbW9WYWx1ZT8ub25lb2ZLaW5kID09PSAndGV4dCcpIG1lbW9JZCA9IG1lbW9WYWx1ZS50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXNlbmRlciB8fCAhcmVjZWl2ZXIgfHwgIWFtb3VudCkge1xuICAgICAgY29uc3QgbWlzc2luZ0ZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICghc2VuZGVyKSBtaXNzaW5nRmllbGRzLnB1c2goJ3NlbmRlcicpO1xuICAgICAgaWYgKCFyZWNlaXZlcikgbWlzc2luZ0ZpZWxkcy5wdXNoKCdyZWNlaXZlcicpO1xuICAgICAgaWYgKCFhbW91bnQpIG1pc3NpbmdGaWVsZHMucHVzaCgnYW1vdW50Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdHJhbnNhY3Rpb24gZGF0YTogbWlzc2luZyAke21pc3NpbmdGaWVsZHMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgY29uc3QgY29udmVydGVkQW1vdW50ID0gdGhpcy5jb252ZXJ0QW1vdW50VG9Mb3dlc3RVbml0KG5ldyBCaWdOdW1iZXIoYW1vdW50KSk7XG4gICAgY29uc3QgcGFyc2VkRGF0YTogUHJlcGFyZWRUeG5QYXJzZWRJbmZvID0ge1xuICAgICAgc2VuZGVyLFxuICAgICAgcmVjZWl2ZXIsXG4gICAgICBhbW91bnQ6IGNvbnZlcnRlZEFtb3VudCxcbiAgICB9O1xuICAgIGlmIChtZW1vSWQpIHtcbiAgICAgIHBhcnNlZERhdGEubWVtb0lkID0gbWVtb0lkO1xuICAgIH1cbiAgICBpZiAoaW5zdHJ1bWVudElkICYmIGluc3RydW1lbnRBZG1pbikge1xuICAgICAgcGFyc2VkRGF0YS50b2tlbiA9IHRoaXMuZmluZFRva2VuTmFtZUJ5Q29udHJhY3RBZGRyZXNzKGAke2luc3RydW1lbnRBZG1pbn06JHtpbnN0cnVtZW50SWR9YCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWREYXRhO1xuICB9XG5cbiAgLyoqIFBhcnNlcyBgXCJQa2c6TW9kdWxlOkVudGl0eVwiYCBpbnRvIHBhcnRzLiAqL1xuICBwYXJzZUNhbnRvblRlbXBsYXRlSWQodmFsdWU6IHN0cmluZyk6IHsgcGtnOiBzdHJpbmc7IG1vZHVsZU5hbWU6IHN0cmluZzsgZW50aXR5TmFtZTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IFtwa2csIG1vZHVsZU5hbWUsIGVudGl0eU5hbWVdID0gcGFydHM7XG4gICAgaWYgKCFwa2cgfHwgIW1vZHVsZU5hbWUgfHwgIWVudGl0eU5hbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgcGtnLCBtb2R1bGVOYW1lLCBlbnRpdHlOYW1lIH07XG4gIH1cblxuICBkYW1sVmFsdWVUb0pzb24odmFsdWU6IFZhbHVlIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuc3VtKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN1bSA9IHZhbHVlLnN1bTtcbiAgICBzd2l0Y2ggKHN1bS5vbmVvZktpbmQpIHtcbiAgICAgIGNhc2UgJ3VuaXQnOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgJ2Jvb2wnOlxuICAgICAgICByZXR1cm4gc3VtLmJvb2w7XG4gICAgICBjYXNlICdpbnQ2NCc6XG4gICAgICAgIHJldHVybiBzdW0uaW50NjQ7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuIHN1bS5kYXRlO1xuICAgICAgY2FzZSAndGltZXN0YW1wJzpcbiAgICAgICAgcmV0dXJuIHN1bS50aW1lc3RhbXA7XG4gICAgICBjYXNlICdudW1lcmljJzpcbiAgICAgICAgcmV0dXJuIHN1bS5udW1lcmljO1xuICAgICAgY2FzZSAncGFydHknOlxuICAgICAgICByZXR1cm4gc3VtLnBhcnR5O1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIHJldHVybiBzdW0udGV4dDtcbiAgICAgIGNhc2UgJ2NvbnRyYWN0SWQnOlxuICAgICAgICByZXR1cm4gc3VtLmNvbnRyYWN0SWQ7XG4gICAgICBjYXNlICdvcHRpb25hbCc6XG4gICAgICAgIHJldHVybiBzdW0ub3B0aW9uYWw/LnZhbHVlID8gdGhpcy5kYW1sVmFsdWVUb0pzb24oc3VtLm9wdGlvbmFsLnZhbHVlKSA6IG51bGw7XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgcmV0dXJuIChzdW0ubGlzdD8uZWxlbWVudHMgPz8gW10pLm1hcCgoZWwpID0+IHRoaXMuZGFtbFZhbHVlVG9Kc29uKGVsKSk7XG4gICAgICBjYXNlICd0ZXh0TWFwJzoge1xuICAgICAgICBjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2Ygc3VtLnRleHRNYXA/LmVudHJpZXMgPz8gW10pIHtcbiAgICAgICAgICBvYmpbZW50cnkua2V5XSA9IHRoaXMuZGFtbFZhbHVlVG9Kc29uKGVudHJ5LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgICAgY2FzZSAnZ2VuTWFwJzpcbiAgICAgICAgcmV0dXJuIChzdW0uZ2VuTWFwPy5lbnRyaWVzID8/IFtdKS5tYXAoKGVudHJ5KSA9PiBbXG4gICAgICAgICAgdGhpcy5kYW1sVmFsdWVUb0pzb24oZW50cnkua2V5KSxcbiAgICAgICAgICB0aGlzLmRhbWxWYWx1ZVRvSnNvbihlbnRyeS52YWx1ZSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSAncmVjb3JkJzoge1xuICAgICAgICBjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBzdW0ucmVjb3JkPy5maWVsZHMgPz8gW10pIHtcbiAgICAgICAgICBvYmpbZi5sYWJlbF0gPSB0aGlzLmRhbWxWYWx1ZVRvSnNvbihmLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgICAgY2FzZSAndmFyaWFudCc6IHtcbiAgICAgICAgY29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgICBvYmpbc3VtLnZhcmlhbnQuY29uc3RydWN0b3JdID0gdGhpcy5kYW1sVmFsdWVUb0pzb24oc3VtLnZhcmlhbnQudmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgIHJldHVybiBzdW0uZW51bS5jb25zdHJ1Y3RvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlYWRzIGFjdEFzIHBhcnRpZXMgZnJvbSBhIGJhc2U2NC1lbmNvZGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIHByb3RvYnVmLiAqL1xuICBleHRyYWN0U3VibWl0dGVyQWN0QXMocmF3QmFzZTY0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihyYXdCYXNlNjQpO1xuICAgIHJldHVybiBkZWNvZGVkLm1ldGFkYXRhPy5zdWJtaXR0ZXJJbmZvPy5hY3RBcyA/PyBbXTtcbiAgfVxuXG4gIC8qKiBEZWNvZGVzIGEgcHJlcGFyZWQgQ2FudG9uIHRyYW5zYWN0aW9uIHByb3RvYnVmIGFuZCBleHRyYWN0cyB0aGUgcm9vdCBDcmVhdGVDb21tYW5kIG9yIEV4ZXJjaXNlQ29tbWFuZC4gKi9cbiAgZXh0cmFjdENhbnRvbkNvbW1hbmRJbmZvKHJhd0Jhc2U2NDogc3RyaW5nKTogQ2FudG9uQ29tbWFuZEluZm8ge1xuICAgIGNvbnN0IGRlY29kZWQgPSB0aGlzLmRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24ocmF3QmFzZTY0KTtcbiAgICBjb25zdCB0eCA9IGRlY29kZWQudHJhbnNhY3Rpb247XG4gICAgaWYgKCF0eCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZWNvZGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIGhhcyBubyB0cmFuc2FjdGlvbiBib2R5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHJvb3RzID0gdHgucm9vdHMgPz8gW107XG4gICAgaWYgKHJvb3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZWNvZGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIGhhcyBubyByb290IG5vZGVzJyk7XG4gICAgfVxuICAgIGlmIChyb290cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGRlY29kZWQgcHJlcGFyZWQgdHJhbnNhY3Rpb24gaGFzICR7cm9vdHMubGVuZ3RofSByb290IG5vZGVzOyBleHBlY3RlZCBleGFjdGx5IDFgKTtcbiAgICB9XG4gICAgY29uc3Qgcm9vdElkID0gcm9vdHNbMF07XG4gICAgY29uc3Qgcm9vdE5vZGUgPSAodHgubm9kZXMgPz8gW10pLmZpbmQoKG4pID0+IG4ubm9kZUlkID09PSByb290SWQpO1xuICAgIGlmICghcm9vdE5vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcm9vdCBub2RlICcke3Jvb3RJZH0nIG5vdCBmb3VuZCBpbiBub2RlcyBsaXN0YCk7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25lZE5vZGUgPSByb290Tm9kZS52ZXJzaW9uZWROb2RlO1xuICAgIGlmICghdmVyc2lvbmVkTm9kZSB8fCB2ZXJzaW9uZWROb2RlLm9uZW9mS2luZCAhPT0gJ3YxJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCByb290IG5vZGUgdmVyc2lvbjogJHt2ZXJzaW9uZWROb2RlPy5vbmVvZktpbmQgPz8gJ3VuZGVmaW5lZCd9YCk7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVUeXBlID0gdmVyc2lvbmVkTm9kZS52MS5ub2RlVHlwZTtcbiAgICBpZiAobm9kZVR5cGUub25lb2ZLaW5kID09PSAnY3JlYXRlJykge1xuICAgICAgY29uc3QgY3JlYXRlTm9kZSA9IG5vZGVUeXBlLmNyZWF0ZTtcbiAgICAgIGlmICghY3JlYXRlTm9kZS50ZW1wbGF0ZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRlIG5vZGUgbWlzc2luZyB0ZW1wbGF0ZUlkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnQ3JlYXRlQ29tbWFuZCcsXG4gICAgICAgIHRlbXBsYXRlSWQ6IHtcbiAgICAgICAgICBwYWNrYWdlSWQ6IGNyZWF0ZU5vZGUudGVtcGxhdGVJZC5wYWNrYWdlSWQsXG4gICAgICAgICAgbW9kdWxlTmFtZTogY3JlYXRlTm9kZS50ZW1wbGF0ZUlkLm1vZHVsZU5hbWUsXG4gICAgICAgICAgZW50aXR5TmFtZTogY3JlYXRlTm9kZS50ZW1wbGF0ZUlkLmVudGl0eU5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGFyZ3VtZW50OiB0aGlzLmRhbWxWYWx1ZVRvSnNvbihjcmVhdGVOb2RlLmFyZ3VtZW50KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS5vbmVvZktpbmQgPT09ICdleGVyY2lzZScpIHtcbiAgICAgIGNvbnN0IGV4ZXJjaXNlTm9kZSA9IG5vZGVUeXBlLmV4ZXJjaXNlO1xuICAgICAgaWYgKCFleGVyY2lzZU5vZGUudGVtcGxhdGVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4ZXJjaXNlIG5vZGUgbWlzc2luZyB0ZW1wbGF0ZUlkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnRXhlcmNpc2VDb21tYW5kJyxcbiAgICAgICAgdGVtcGxhdGVJZDoge1xuICAgICAgICAgIHBhY2thZ2VJZDogZXhlcmNpc2VOb2RlLnRlbXBsYXRlSWQucGFja2FnZUlkLFxuICAgICAgICAgIG1vZHVsZU5hbWU6IGV4ZXJjaXNlTm9kZS50ZW1wbGF0ZUlkLm1vZHVsZU5hbWUsXG4gICAgICAgICAgZW50aXR5TmFtZTogZXhlcmNpc2VOb2RlLnRlbXBsYXRlSWQuZW50aXR5TmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgYXJndW1lbnQ6IHRoaXMuZGFtbFZhbHVlVG9Kc29uKGV4ZXJjaXNlTm9kZS5jaG9zZW5WYWx1ZSksXG4gICAgICAgIGNob2ljZTogZXhlcmNpc2VOb2RlLmNob2ljZUlkLFxuICAgICAgICBjb250cmFjdElkOiBleGVyY2lzZU5vZGUuY29udHJhY3RJZCxcbiAgICAgICAgYWN0aW5nUGFydGllczogWy4uLihleGVyY2lzZU5vZGUuYWN0aW5nUGFydGllcyA/PyBbXSldLFxuICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCByb290IG5vZGUgdHlwZTogJHtub2RlVHlwZS5vbmVvZktpbmQgPz8gJ3VuZGVmaW5lZCd9YCk7XG4gIH1cblxuICBzYW1lRWxlbWVudHMoYTogcmVhZG9ubHkgc3RyaW5nW10sIGI6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHNvcnRlZEEgPSBbLi4uYV0uc29ydCgpO1xuICAgIGNvbnN0IHNvcnRlZEIgPSBbLi4uYl0uc29ydCgpO1xuICAgIHJldHVybiBzb3J0ZWRBLmV2ZXJ5KCh4LCBpKSA9PiB4ID09PSBzb3J0ZWRCW2ldKTtcbiAgfVxuXG4gIC8qKiBTdHJpcHMgdGhlIGBjb21tYW5kLmAgcHJlZml4IGZyb20gaW5qZWN0QXMgcGF0aHMgKGUuZy4gYGNvbW1hbmQuRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWRgIOKGkiBgRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWRgKS4gKi9cbiAgbm9ybWFsaXplSW5qZWN0QXMoc3BlY3M6IHJlYWRvbmx5IHsgaW5qZWN0QXM/OiBzdHJpbmcgfVtdIHwgdW5kZWZpbmVkKTogU2V0PHN0cmluZz4ge1xuICAgIGNvbnN0IG91dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGlmICghc3BlY3MpIHJldHVybiBvdXQ7XG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHNwZWNzKSB7XG4gICAgICBpZiAoIXNwZWMgfHwgdHlwZW9mIHNwZWMuaW5qZWN0QXMgIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHN0cmlwcGVkID0gc3BlYy5pbmplY3RBcy5zdGFydHNXaXRoKCdjb21tYW5kLicpID8gc3BlYy5pbmplY3RBcy5zbGljZSgnY29tbWFuZC4nLmxlbmd0aCkgOiBzcGVjLmluamVjdEFzO1xuICAgICAgaWYgKHN0cmlwcGVkKSBvdXQuYWRkKHN0cmlwcGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBhc3NlcnRzIHRoYXQgYGFjdHVhbGAgbWF0Y2hlcyBgZXhwZWN0ZWRgLiBQYXRocyBpbiBgaW5qZWN0QXNQYXRoc2AgYXJlIHNraXBwZWQuXG4gICAqIE51bWVyaWMgc3RyaW5ncyBhcmUgY29tcGFyZWQgdmlhIEJpZ051bWJlciB0byBoYW5kbGUgREFNTCBmb3JtYXR0aW5nIGRpZmZlcmVuY2VzIChlLmcuIFwiMTAwXCIgdnMgXCIxMDAuMDAwMDAwMDAwMFwiKS5cbiAgICovXG4gIGFzc2VydERlZXBDYW50b25NYXRjaChleHBlY3RlZDogdW5rbm93biwgYWN0dWFsOiB1bmtub3duLCBpbmplY3RBc1BhdGhzOiBTZXQ8c3RyaW5nPiwgY3VycmVudFBhdGggPSAnJyk6IHZvaWQge1xuICAgIGlmIChpbmplY3RBc1BhdGhzLmhhcyhjdXJyZW50UGF0aCkpIHJldHVybjtcblxuICAgIC8vIE9ubHkgdW5kZWZpbmVkIG1lYW5zIFwidW5zcGVjaWZpZWQg4oCUIHNraXAgY29tcGFyaXNvblwiLiBFbXB0eSB7fSBvciBbXSBhcmUgdmFsaWRcbiAgICAvLyBEYW1sIHZhbHVlcyBhbmQgbXVzdCBiZSB2ZXJpZmllZCBhZ2FpbnN0IGFjdHVhbCB0byBwcmV2ZW50IGFjY2lkZW50YWwgdW5kZXItdmVyaWZpY2F0aW9uLlxuICAgIGlmIChleHBlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV4cGVjdGVkID09PSBudWxsIHx8IGFjdHVhbCA9PT0gbnVsbCkge1xuICAgICAgaWYgKGV4cGVjdGVkICE9PSBhY3R1YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW50b24gY29tbWFuZCBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBleHBlY3RlZCAke3RoaXMuc3RyaW5naWZ5Rm9yRXJyb3IoXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgICl9LCBnb3QgJHt0aGlzLnN0cmluZ2lmeUZvckVycm9yKGFjdHVhbCl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgYWN0dWFsID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHRoaXMuYXJlTnVtZXJpY1N0cmluZ3MoZXhwZWN0ZWQsIGFjdHVhbCkpIHtcbiAgICAgICAgaWYgKCFuZXcgQmlnTnVtYmVyKGV4cGVjdGVkKS5pc0VxdWFsVG8obmV3IEJpZ051bWJlcihhY3R1YWwpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW50b24gY29tbWFuZCBudW1lcmljIG1pc21hdGNoIGF0ICcke2N1cnJlbnRQYXRoIHx8ICc8cm9vdD4nfSc6IGV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gSVNPIDg2MDEgaW5wdXQgdnMgbWljcm9zZWNvbmQtc2luY2UtZXBvY2ggZW5jb2RpbmcgaW4gdGhlIHByZXBhcmVkLXRyYW5zYWN0aW9uIHByb3RvYnVmLlxuICAgICAgaWYgKHRoaXMuaXNJc29UaW1lc3RhbXAoZXhwZWN0ZWQpICYmIHRoaXMuaXNJbnRlZ2VyU3RyaW5nKGFjdHVhbCkpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRNaWNyb3NlY29uZHMgPSBuZXcgQmlnTnVtYmVyKG5ldyBEYXRlKGV4cGVjdGVkKS5nZXRUaW1lKCkpLm11bHRpcGxpZWRCeSgxMDAwKTtcbiAgICAgICAgaWYgKCFleHBlY3RlZE1pY3Jvc2Vjb25kcy5pc0VxdWFsVG8obmV3IEJpZ051bWJlcihhY3R1YWwpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW50b24gY29tbWFuZCB0aW1lc3RhbXAgbWlzbWF0Y2ggYXQgJyR7Y3VycmVudFBhdGggfHwgJzxyb290Pid9JzogYCArXG4gICAgICAgICAgICAgIGBleHBlY3RlZCAnJHtleHBlY3RlZH0nICgke2V4cGVjdGVkTWljcm9zZWNvbmRzLnRvRml4ZWQoMCl9IMK1cyksIGdvdCAnJHthY3R1YWx9J2BcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChleHBlY3RlZCAhPT0gYWN0dWFsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2FudG9uIGNvbW1hbmQgbWlzbWF0Y2ggYXQgJyR7Y3VycmVudFBhdGggfHwgJzxyb290Pid9JzogZXhwZWN0ZWQgJyR7ZXhwZWN0ZWR9JywgZ290ICcke2FjdHVhbH0nYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYWN0dWFsID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGV4cGVjdGVkICE9PSBhY3R1YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW50b24gY29tbWFuZCBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBleHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnYm9vbGVhbicgJiYgdHlwZW9mIGFjdHVhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAoZXhwZWN0ZWQgIT09IGFjdHVhbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbnRvbiBjb21tYW5kIG1pc21hdGNoIGF0ICcke2N1cnJlbnRQYXRoIHx8ICc8cm9vdD4nfSc6IGV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdGVkKSAmJiBBcnJheS5pc0FycmF5KGFjdHVhbCkpIHtcbiAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggIT09IGFjdHVhbC5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW50b24gY29tbWFuZCBsaXN0LWxlbmd0aCBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBleHBlY3RlZCAke2V4cGVjdGVkLmxlbmd0aH0sIGdvdCAke1xuICAgICAgICAgICAgYWN0dWFsLmxlbmd0aFxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IGN1cnJlbnRQYXRoID8gYCR7Y3VycmVudFBhdGh9LiR7aX1gIDogU3RyaW5nKGkpO1xuICAgICAgICB0aGlzLmFzc2VydERlZXBDYW50b25NYXRjaChleHBlY3RlZFtpXSwgYWN0dWFsW2ldLCBpbmplY3RBc1BhdGhzLCBjaGlsZFBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1BsYWluT2JqZWN0KGV4cGVjdGVkKSAmJiB0aGlzLmlzUGxhaW5PYmplY3QoYWN0dWFsKSkge1xuICAgICAgY29uc3QgZXhwZWN0ZWRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhleHBlY3RlZCkpO1xuICAgICAgY29uc3QgYWN0dWFsS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoYWN0dWFsKSk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBleHBlY3RlZEtleXMpIHtcbiAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gY3VycmVudFBhdGggPyBgJHtjdXJyZW50UGF0aH0uJHtrZXl9YCA6IGtleTtcbiAgICAgICAgaWYgKGV4cGVjdGVkW2tleV0gPT09IHVuZGVmaW5lZCB8fCBpbmplY3RBc1BhdGhzLmhhcyhjaGlsZFBhdGgpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFhY3R1YWxLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW50b24gY29tbWFuZCBtaXNzaW5nIGZpZWxkIGF0ICcke2NoaWxkUGF0aH0nIG9uIHByZXBhcmVkIHRyYW5zYWN0aW9uYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goZXhwZWN0ZWRba2V5XSwgKGFjdHVhbCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSwgaW5qZWN0QXNQYXRocywgY2hpbGRQYXRoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbnRvbiBjb21tYW5kIHR5cGUgbWlzbWF0Y2ggYXQgJyR7Y3VycmVudFBhdGggfHwgJzxyb290Pid9JzogZXhwZWN0ZWQgJHt0aGlzLmRlc2NyaWJlVHlwZShcbiAgICAgICAgZXhwZWN0ZWRcbiAgICAgICl9LCBnb3QgJHt0aGlzLmRlc2NyaWJlVHlwZShhY3R1YWwpfWBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSB0b3BvbG9neSBoYXNoIGZyb20gdGhlIEFQSSByZXNwb25zZSBvZiB0aGUgJ2NyZWF0ZSBwYXJ0eScgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB0b3BvbG9neVRyYW5zYWN0aW9ucyAtIExpc3Qgb2YgYmFzZTY0LWVuY29kZWQgdG9wb2xvZ3kgdHJhbnNhY3Rpb25zIGZyb20gdGhlIENhbnRvbiBBUEkuXG4gICAqIEByZXR1cm5zIFRoZSBmaW5hbCBiYXNlNjQtZW5jb2RlZCB0b3BvbG9neSB0cmFuc2FjdGlvbiBoYXNoLlxuICAgKi9cbiAgY29tcHV0ZUhhc2hGcm9tQ3JlYXRlUGFydHlSZXNwb25zZSh0b3BvbG9neVRyYW5zYWN0aW9uczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHR4QnVmZmVycyA9IHRvcG9sb2d5VHJhbnNhY3Rpb25zLm1hcCgodHgpID0+IEJ1ZmZlci5mcm9tKHR4LCAnYmFzZTY0JykpO1xuICAgIHJldHVybiB0aGlzLmNvbXB1dGVIYXNoRnJvbVRvcG9sb2d5VHJhbnNhY3Rpb24odHhCdWZmZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGNvbXB1dGVIYXNoRnJvbVByZXBhcmVTdWJtaXNzaW9uUmVzcG9uc2UocHJlcGFyZWRUcmFuc2FjdGlvbkJhc2U2NDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwcmVwYXJlZFRyYW5zYWN0aW9uID0gdGhpcy5kZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKHByZXBhcmVkVHJhbnNhY3Rpb25CYXNlNjQpO1xuICAgIGNvbnN0IGhhc2ggPSBhd2FpdCBjb21wdXRlUHJlcGFyZWRUcmFuc2FjdGlvbihwcmVwYXJlZFRyYW5zYWN0aW9uKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oaGFzaCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSBmaW5hbCB0b3BvbG9neSB0cmFuc2FjdGlvbiBoYXNoIGZvciBhIGxpc3Qgb2YgcHJlcGFyZWQgQ2FudG9uIHRyYW5zYWN0aW9ucy5cbiAgICpcbiAgICogRWFjaCB0cmFuc2FjdGlvbiBpcyBmaXJzdCBoYXNoZWQgd2l0aCBwdXJwb3NlIGAxMWAsIHRoZW4gYWxsIGhhc2hlcyBhcmUgY29tYmluZWQgYW5kXG4gICAqIGhhc2hlZCBhZ2FpbiB3aXRoIHB1cnBvc2UgYDU1YCwgZm9sbG93aW5nIHRoZSBDYW50b24gdG9wb2xvZ3kgaGFzaCBydWxlcy5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBoYXNoIGlzIGVuY29kZWQgYXMgYSBiYXNlNjQgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0J1ZmZlcltdfSBwcmVwYXJlZFRyYW5zYWN0aW9ucyAtIEFuIGFycmF5IG9mIENhbnRvbiB0cmFuc2FjdGlvbiBidWZmZXJzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZmluYWwgdG9wb2xvZ3kgaGFzaCwgYmFzZTY0LWVuY29kZWQuXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVIYXNoRnJvbVRvcG9sb2d5VHJhbnNhY3Rpb24ocHJlcGFyZWRUcmFuc2FjdGlvbnM6IEJ1ZmZlcltdKTogc3RyaW5nIHtcbiAgICBjb25zdCByYXdIYXNoZXMgPSBwcmVwYXJlZFRyYW5zYWN0aW9ucy5tYXAoKHR4KSA9PiB0aGlzLmNvbXB1dGVTaGEyNTZDYW50b25IYXNoKDExLCB0eCkpO1xuICAgIGNvbnN0IGNvbWJpbmVkSGFzaGVzID0gdGhpcy5jb21wdXRlTXVsdGlIYXNoRm9yVG9wb2xvZ3kocmF3SGFzaGVzKTtcbiAgICBjb25zdCBjb21wdXRlZEhhc2ggPSB0aGlzLmNvbXB1dGVTaGEyNTZDYW50b25IYXNoKDU1LCBjb21iaW5lZEhhc2hlcyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNvbXB1dGVkSGFzaCwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGJhc2U2NC1lbmNvZGVkIEVkMjU1MTkgcHVibGljIGtleSBzdHJpbmcgaW50byBhIHN0cnVjdHVyZWQgc2lnbmluZyBwdWJsaWMga2V5IG9iamVjdC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YmxpY0tleSBUaGUgYmFzZTY0LWVuY29kZWQgRWQyNTUxOSBwdWJsaWMga2V5XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzdHJ1Y3R1cmVkIHNpZ25pbmcga2V5IG9iamVjdCBmb3JtYXR0ZWQgZm9yIHVzZSB3aXRoIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzaWduaW5nUHVibGljS2V5RnJvbUVkMjU1MTkocHVibGljS2V5OiBzdHJpbmcpOiB7XG4gICAgZm9ybWF0OiBudW1iZXI7XG4gICAgcHVibGljS2V5OiBCdWZmZXI7XG4gICAgc2NoZW1lOiBudW1iZXI7XG4gICAga2V5U3BlYzogbnVtYmVyO1xuICAgIHVzYWdlOiBbXTtcbiAgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1hdDogQ3J5cHRvS2V5Rm9ybWF0LlJBVyxcbiAgICAgIHB1YmxpY0tleTogQnVmZmVyLmZyb20ocHVibGljS2V5LCAnYmFzZTY0JyksXG4gICAgICBzY2hlbWU6IFNpZ25pbmdBbGdvcml0aG1TcGVjLkVEMjU1MTksXG4gICAgICBrZXlTcGVjOiBTaWduaW5nS2V5U3BlYy5FQ19DVVJWRTI1NTE5LFxuICAgICAgdXNhZ2U6IFtdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGJ1ZmZlciB3aXRoIGEgNC1ieXRlIGJpZy1lbmRpYW4gaW50ZWdlciBwcmVmaXggZm9sbG93ZWQgYnkgdGhlIHByb3ZpZGVkIGJ5dGUgYnVmZmVyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgaW50ZWdlciB0byBwcmVmaXgsIHdyaXR0ZW4gYXMgNCBieXRlcyBpbiBiaWctZW5kaWFuIG9yZGVyXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBieXRlcyBUaGUgYnVmZmVyIHRvIGFwcGVuZCBhZnRlciB0aGUgaW50ZWdlciBwcmVmaXhcbiAgICogQHJldHVybnMge0J1ZmZlcn0gVGhlIHJlc3VsdGluZyBidWZmZXIgd2l0aCB0aGUgcHJlZml4ZWQgaW50ZWdlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBwcmVmaXhlZEludCh2YWx1ZTogbnVtYmVyLCBieXRlczogQnVmZmVyKTogQnVmZmVyIHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoNCArIGJ5dGVzLmxlbmd0aCk7XG4gICAgYnVmZmVyLndyaXRlVUludDMyQkUodmFsdWUsIDApO1xuICAgIEJ1ZmZlci5mcm9tKGJ5dGVzKS5jb3B5KGJ1ZmZlciwgNCk7XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyBhbiBTSEEtMjU2IENhbnRvbi1zdHlsZSBoYXNoIGJ5IHByZWZpeGluZyB0aGUgaW5wdXQgd2l0aCBhIHB1cnBvc2UgaWRlbnRpZmllcixcbiAgICogdGhlbiBoYXNoaW5nIHRoZSByZXN1bHRpbmcgYnVmZmVyIGFuZCBwcmVwZW5kaW5nIGEgbXVsdGktcHJlZml4XG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBwdXJwb3NlIEEgbnVtZXJpYyBpZGVudGlmaWVyIHRvIHByZWZpeCB0aGUgaGFzaCBpbnB1dCB3aXRoXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBieXRlcyBUaGUgYnVmZmVyIHRvIGJlIGhhc2hlZFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBBIGhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVzdWx0aW5nIGhhc2ggd2l0aCBtdWx0aS1wcmVmaXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZVNoYTI1NkNhbnRvbkhhc2gocHVycG9zZTogbnVtYmVyLCBieXRlczogQnVmZmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBoYXNoSW5wdXQgPSB0aGlzLnByZWZpeGVkSW50KHB1cnBvc2UsIGJ5dGVzKTtcbiAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShoYXNoSW5wdXQpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IG11bHRpcHJlZml4ID0gQnVmZmVyLmZyb20oWzB4MTIsIDB4MjBdKTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbbXVsdGlwcmVmaXgsIGhhc2hdKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBpbnRvIGEgVWludDhBcnJheVxuICAgKiBAcGFyYW0ge1N0cmluZ30gYjY0IFRoZSBCYXNlNjQtZW5jb2RlZCBzdHJpbmdcbiAgICogQHJldHVybnMge1VpbnQ4QXJyYXl9IFRoZSBkZWNvZGVkIGJ5dGUgYXJyYXlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZnJvbUJhc2U2NChiNjQ6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShiNjQsICdiYXNlNjQnKSk7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBhIEJhc2U2NC1lbmNvZGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIGludG8gYSBzdHJ1Y3R1cmVkIG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZTY0IFRoZSBCYXNlNjQtZW5jb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIHtJUHJlcGFyZWRUcmFuc2FjdGlvbn0gVGhlIGRlY29kZWQgYElQcmVwYXJlZFRyYW5zYWN0aW9uYCBvYmplY3RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihiYXNlNjQ6IHN0cmluZyk6IElQcmVwYXJlZFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBieXRlcyA9IHRoaXMuZnJvbUJhc2U2NChiYXNlNjQpO1xuICAgIHJldHVybiBQcmVwYXJlZFRyYW5zYWN0aW9uLmZyb21CaW5hcnkoYnl0ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIGEgZGV0ZXJtaW5pc3RpYyBjb21iaW5lZCBoYXNoIGZyb20gYW4gYXJyYXkgb2YgaW5kaXZpZHVhbCBDYW50b24tc3R5bGUgU0hBLTI1NiBoYXNoZXNcbiAgICpcbiAgICogRWFjaCBoYXNoIGlzIGRlY29kZWQgZnJvbSBoZXgsIHNvcnRlZCBsZXhpY29ncmFwaGljYWxseSAoYnkgaGV4KSwgYW5kIHByZWZpeGVkIHdpdGggaXRzIGxlbmd0aFxuICAgKiBUaGUgZmluYWwgYnVmZmVyIGluY2x1ZGVzIHRoZSBudW1iZXIgb2YgaGFzaGVzIGZvbGxvd2VkIGJ5IGVhY2ggKGxlbmd0aC1wcmVmaXhlZCkgaGFzaFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBoYXNoZXMgLSBBbiBhcnJheSBvZiBDYW50b24tcHJlZml4ZWQgU0hBLTI1NiBoYXNoZXMgaW4gaGV4YWRlY2ltYWwgc3RyaW5nIGZvcm1hdFxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBBIGJpbmFyeSBidWZmZXIgcmVwcmVzZW50aW5nIHRoZSBjb21iaW5lZCBoYXNoIGlucHV0XG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVNdWx0aUhhc2hGb3JUb3BvbG9neShoYXNoZXM6IHN0cmluZ1tdKTogQnVmZmVyIHtcbiAgICBjb25zdCBzb3J0ZWRIYXNoZXMgPSBoYXNoZXNcbiAgICAgIC5tYXAoKGhleCkgPT4gQnVmZmVyLmZyb20oaGV4LCAnaGV4JykpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS50b1N0cmluZygnaGV4JykubG9jYWxlQ29tcGFyZShiLnRvU3RyaW5nKCdoZXgnKSkpO1xuXG4gICAgY29uc3QgbnVtSGFzaGVzQnl0ZXMgPSB0aGlzLmVuY29kZUludDMyKHNvcnRlZEhhc2hlcy5sZW5ndGgpO1xuICAgIGNvbnN0IHBhcnRzOiBCdWZmZXJbXSA9IFtudW1IYXNoZXNCeXRlc107XG5cbiAgICBmb3IgKGNvbnN0IGggb2Ygc29ydGVkSGFzaGVzKSB7XG4gICAgICBjb25zdCBsZW5ndGhCeXRlcyA9IHRoaXMuZW5jb2RlSW50MzIoaC5sZW5ndGgpO1xuICAgICAgcGFydHMucHVzaChsZW5ndGhCeXRlcywgaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQocGFydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZXMgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW50byBhIDQtYnl0ZSBiaWctZW5kaWFuIEJ1ZmZlclxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgaW50ZWdlciB0byBlbmNvZGVcbiAgICogQHJldHVybnMge0J1ZmZlcn0gQSA0LWJ5dGUgYnVmZmVyIHJlcHJlc2VudGluZyB0aGUgaW50ZWdlciBpbiBiaWctZW5kaWFuIGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSBlbmNvZGVJbnQzMih2YWx1ZTogbnVtYmVyKTogQnVmZmVyIHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgYnVmLndyaXRlSW50MzJCRSh2YWx1ZSwgMCk7XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIGNhbnRvbiByYXcgdW5pdHNcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHZhbHVlXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBjb252ZXJ0ZWQgcmF3IGNhbnRvbiB1bml0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0QW1vdW50VG9Mb3dlc3RVbml0KHZhbHVlOiBCaWdOdW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZS5tdWx0aXBsaWVkQnkobmV3IEJpZ051bWJlcigxMCkucG93KDEwKSkudG9GaXhlZCgwKTtcbiAgfVxuXG4gIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcmVOdW1lcmljU3RyaW5ncyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG51bWVyaWNSZSA9IC9eLT9cXGQrKFxcLlxcZCspPyQvO1xuICAgIHJldHVybiBudW1lcmljUmUudGVzdChhKSAmJiBudW1lcmljUmUudGVzdChiKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJc29UaW1lc3RhbXAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfShcXC5cXGR7MSwzfSk/WiQvLnRlc3QodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoRGF0ZS5wYXJzZSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ludGVnZXJTdHJpbmcodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXlxcZCskLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzY3JpYmVUeXBlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gJ2FycmF5JztcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnlGb3JFcnJvcih2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiaXRnbyB0b2tlbiBuYW1lIHVzaW5nIHRoZSBvbi1jaGFpbiBpbnN0cnVtZW50IGRldGFpbHNcbiAgICogQHBhcmFtIGNvbnRyYWN0QWRkcmVzcyAtIHRoZSBjb250cmFjdCBhZGRyZXNzIG9mIHRoZSBmb3JtLCBgaW5zdHJ1bWVudEFkbWluOmluc3RydW1lbnRJZGBcbiAgICogQHJldHVybnMgdG9rZW5OYW1lIGlmIGNvbnRyYWN0QWRkcmVzcyBtYXRjaGVzIHdpdGggYW55IHN1cHBvcnRlZCBjYW50b24gdG9rZW5zXG4gICAqL1xuICBwcml2YXRlIGZpbmRUb2tlbk5hbWVCeUNvbnRyYWN0QWRkcmVzcyhjb250cmFjdEFkZHJlc3M6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNvbnRyYWN0QWRkcmVzcy5pbmNsdWRlcygnQW11bGV0JykpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNhbnRvblRva2VuID0gY29pbnNcbiAgICAgIC5maWx0ZXIoKGNvaW4pID0+IGNvaW4gaW5zdGFuY2VvZiBDYW50b25Ub2tlbiAmJiBjb2luLmNvbnRyYWN0QWRkcmVzcyA9PT0gY29udHJhY3RBZGRyZXNzKVxuICAgICAgLm1hcCgoY29pbikgPT4gY29pbiBhcyBDYW50b25Ub2tlbik7XG4gICAgcmV0dXJuIGNhbnRvblRva2VuID8gY2FudG9uVG9rZW5bMF0ubmFtZSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==