@bitgo-beta/sdk-coin-trx 1.0.2-beta.2289 → 1.0.2-beta.2290

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.
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,sBAAsB,EAItB,SAAS,IAAI,aAAa,EAI3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;IAE5D,OAAO,CAAC,YAAY,CAAc;IAClC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM9B;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7B;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IASzB;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAU9B;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,WAAW;IAWtF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAWvD,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAuBnD,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM;IAI3C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAWrC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQvC;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IA2CzE,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQnD;;;;;OAKG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAa5C"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,sBAAsB,EAItB,SAAS,IAAI,aAAa,EAI3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;IAE5D,OAAO,CAAC,YAAY,CAAc;IAClC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM9B;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7B;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IASzB;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAU9B;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,WAAW;IAWtF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAWvD,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAuBnD,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM;IAI3C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAWrC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAevC;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IA2CzE,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQnD;;;;;OAKG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAa5C"}
@@ -200,6 +200,11 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
200
200
  // TRON addresses are accepted in base58 (T...) or hex (0x... / 41...) form;
201
201
  // they are alternative encodings of the same 21-byte address.
202
202
  if (!(0, utils_1.isBase58Address)(address.address) && !(0, utils_1.isHexAddress)(address.address)) {
203
+ const invalidChars = (0, utils_1.getNonBase58Characters)(address.address || '');
204
+ if (invalidChars.length > 0) {
205
+ const formatted = invalidChars.map((c) => (c === ' ' ? '<space>' : `"${c}"`)).join(', ');
206
+ throw new Error(`${address.address} is not a valid base58 address: contains invalid Base58 character(s): ${formatted}.`);
207
+ }
203
208
  throw new Error(address.address + ' is not a valid base58 address.');
204
209
  }
205
210
  }
@@ -306,4 +311,4 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
306
311
  }
307
312
  }
308
313
  exports.TransactionBuilder = TransactionBuilder;
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQW9DO0FBQ3BDLDBDQUE0QjtBQUM1QixnRUFBcUM7QUFFckMsbURBVThCO0FBRzlCLG1DQVFpQjtBQUNqQiwrQ0FBNEM7QUFDNUMsdUNBQW9DO0FBRXBDOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxpQ0FBc0I7SUFTNUQ7Ozs7T0FJRztJQUNILFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQWMsV0FBVyxDQUFDLFdBQXdCO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFnQjtRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBQSxzQ0FBOEIsRUFBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsSUFBWTtRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxLQUFZO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7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LENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLHFDQUEwQixDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDdkYsQ0FBQztRQUVELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsa0NBQTBCLEVBQUUsQ0FBQztZQUN6RCxNQUFNLElBQUkscUNBQTBCLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBOVJELGdEQThSQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXkgYXMgQmFzZVB1YmxpY0tleSxcbiAgU2lnbmluZ0Vycm9yLFxuICBFeHRlbmRUcmFuc2FjdGlvbkVycm9yLFxuICBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25SZWNlaXB0LCBCbG9jayB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQWRkcmVzcyB9IGZyb20gJy4vYWRkcmVzcyc7XG5pbXBvcnQge1xuICBzaWduVHJhbnNhY3Rpb24sXG4gIGlzQmFzZTU4QWRkcmVzcyxcbiAgaXNIZXhBZGRyZXNzLFxuICBkZWNvZGVUcmFuc2FjdGlvbixcbiAgVkFMSURfUkVTT1VSQ0VfVFlQRVMsXG4gIGdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyxcbiAgVFJBTlNBQ1RJT05fTUFYX0VYUElSQVRJT04sXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuXG4vKipcbiAqIFRyb24gdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAvLyB0cmFuc2FjdGlvbiBiZWluZyBidWlsdFxuICBwcml2YXRlIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfb3duZXJBZGRyZXNzOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfcmVmQmxvY2tCeXRlczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3JlZkJsb2NrSGFzaDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2V4cGlyYXRpb246IG51bWJlcjtcbiAgcHJvdGVjdGVkIF90aW1lc3RhbXA6IG51bWJlcjtcblxuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvaW5Db25maWd9IF9jb2luQ29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtBZGRyZXNzfSBhZGRyZXNzIFRoZSBzb3VyY2UgYWRkcmVzc1xuICAgKiBAcmV0dXJucyB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgc291cmNlKGFkZHJlc3M6IEFkZHJlc3MpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzKTtcbiAgICB0aGlzLl9vd25lckFkZHJlc3MgPSBnZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRpbWVzdGFtcCBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzXG4gICAqIEByZXR1cm5zIHRoZSBidWlsZGVyIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXIgc2V0XG4gICAqL1xuICB0aW1lc3RhbXAodGltZTogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5fdGltZXN0YW1wID0gdGltZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGJsb2NrIHZhbHVlcyxcbiAgICpcbiAgICogQHBhcmFtIHtCbG9ja30gYmxvY2sgdGhlIG9iamVjdCBjb250YWluaW5nIG51bWJlciBhbmQgaGFzaCBvZiB0aGUgYmxvY2tcbiAgICogQHJldHVybnMgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIGJsb2NrKGJsb2NrOiBCbG9jayk6IHRoaXMge1xuICAgIGNvbnN0IGJsb2NrQnl0ZXMgPSBCdWZmZXIuYWxsb2MoOCk7XG4gICAgYmxvY2tCeXRlcy53cml0ZUludDMyQkUoYmxvY2subnVtYmVyLCA0KTtcbiAgICB0aGlzLl9yZWZCbG9ja0J5dGVzID0gYmxvY2tCeXRlcy5zbGljZSg2LCA4KS50b1N0cmluZygnaGV4Jyk7XG4gICAgdGhpcy5fcmVmQmxvY2tIYXNoID0gQnVmZmVyLmZyb20oYmxvY2suaGFzaCwgJ2hleCcpLnNsaWNlKDgsIDE2KS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGV4cGlyYXRpb24gdGltZSBmb3IgdGhlIHRyYW5zYWN0aW9uLCBzZXQgdGltZXN0YW1wIGlmIGl0IHdhcyBub3Qgc2V0IHByZXZpb3VzbHlcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgdGhlIGV4cGlyYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHNcbiAgICogQHJldHVybnMgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIGV4cGlyYXRpb24odGltZTogbnVtYmVyKTogdGhpcyB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaWQpIHtcbiAgICAgIHRocm93IG5ldyBFeHRlbmRUcmFuc2FjdGlvbkVycm9yKCdFeHBpcmF0aW9uIGlzIGFscmVhZHkgc2V0LCBpdCBjYW4gb25seSBiZSBleHRlbmRlZCcpO1xuICAgIH1cbiAgICB0aGlzLl90aW1lc3RhbXAgPSB0aGlzLl90aW1lc3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgICB0aGlzLnZhbGlkYXRlRXhwaXJhdGlvblRpbWUodGltZSk7XG4gICAgdGhpcy5fZXhwaXJhdGlvbiA9IHRpbWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdHJhbnNhY3Rpb24gdGFrZXMgaW4gcmF3IEpTT04gZGlyZWN0bHkgZnJvbSB0aGUgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblJlY2VpcHR9IHJhd1RyYW5zYWN0aW9uIFRoZSBUcm9uIHRyYW5zYWN0aW9uIGluIEpTT04gZm9ybWF0IGFzIHJldHVybmVkIGJ5IHRoZSBUcm9uIGxpYiBvciBhIHN0cmluZ2lmeWVkIHZlcnNpb24gb2Ygc3VjaCBKU09OLlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb259IFRyb24gdHJhbnNhY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBsZXQgdHg7XG4gICAgaWYgKHR5cGVvZiByYXdUcmFuc2FjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gSlNPTi5wYXJzZShyYXdUcmFuc2FjdGlvbik7XG4gICAgICB0eCA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnLCB0cmFuc2FjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcsIHJhd1RyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5pbnB1dHMpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBubyBzZW5kZXInKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24ub3V0cHV0cykge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIHJlY2VpdmVyJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwcGx5U2lnbmF0dXJlKGtleSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwbHlTaWduYXR1cmUoa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IG9sZFRyYW5zYWN0aW9uID0gdGhpcy50cmFuc2FjdGlvbi50b0pzb24oKTtcbiAgICAvLyBTdG9yZSB0aGUgb3JpZ2luYWwgc2lnbmF0dXJlcyB0byBjb21wYXJlIHRoZW0gd2l0aCB0aGUgbmV3IG9uZXMgaW4gYSBsYXRlciBzdGVwLiBTaWduYXR1cmVzXG4gICAgLy8gY2FuIGJlIHVuZGVmaW5lZCBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSB0cmFuc2FjdGlvbiBpcyBiZWluZyBzaWduZWRcbiAgICBjb25zdCBvbGRTaWduYXR1cmVDb3VudCA9IG9sZFRyYW5zYWN0aW9uLnNpZ25hdHVyZSA/IG9sZFRyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGggOiAwO1xuICAgIGxldCBzaWduZWRUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25SZWNlaXB0O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgICAvLyBTaW5jZSB0aGUga2V5IHBhaXIgd2FzIGdlbmVyYXRlZCB1c2luZyBhIHByaXZhdGUga2V5LCBpdCB3aWxsIGFsd2F5cyBoYXZlIGEgcHJ2IGF0dHJpYnV0ZSxcbiAgICAgIC8vIGhlbmNlIGl0IGlzIHNhZmUgdG8gdXNlIG5vbi1udWxsIG9wZXJhdG9yXG4gICAgICBzaWduZWRUcmFuc2FjdGlvbiA9IHNpZ25UcmFuc2FjdGlvbihrZXlQYWlyLmdldEtleXMoKS5wcnYhLCB0aGlzLnRyYW5zYWN0aW9uLnRvSnNvbigpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdGYWlsZWQgdG8gc2lnbiB0cmFuc2FjdGlvbiB2aWEgaGVscGVyLicpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgbW9yZSBzaWduYXR1cmVzIHRoYW4gd2hhdCB3ZSBzdGFydGVkIHdpdGhcbiAgICBpZiAoIXNpZ25lZFRyYW5zYWN0aW9uLnNpZ25hdHVyZSB8fCBvbGRTaWduYXR1cmVDb3VudCA+PSBzaWduZWRUcmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdUcmFuc2FjdGlvbiBzaWduaW5nIGRpZCBub3QgcmV0dXJuIGFuIGFkZGl0aW9uYWwgc2lnbmF0dXJlLicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgc2lnbmVkVHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5hZGRTaWduYXR1cmUoc2lnbmF0dXJlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgLy8gVGhpcyBpcyBhIG5vLW9wIHNpbmNlIFRyb24gdHJhbnNhY3Rpb25zIGFyZSBidWlsdCBmcm9tXG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLmlkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBIHZhbGlkIHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBhbiBpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMudHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZykge1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0aGlzLmZyb21JbXBsZW1lbnRhdGlvbih0eCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kIHRoZSB2YWxpZGl0eSBvZiB0aGlzIHRyYW5zYWN0aW9uIGJ5IHRoZSBnaXZlbiBhbW91bnQgb2YgdGltZVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZXh0ZW5zaW9uTXMgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZXh0ZW5kIHRoZSB2YWxpZFRvIHRpbWVcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGV4dGVuZFZhbGlkVG8oZXh0ZW5zaW9uTXM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZXh0ZW5kRXhwaXJhdGlvbihleHRlbnNpb25Ncyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgY2Fubm90IGJlIGJlbG93IHplcm8uJyk7XG4gICAgfVxuXG4gICAgLy8gbWF4IGxvbmcgaW4gSmF2YSAtIGFzc3VtZWQgdXBwZXIgbGltaXQgZm9yIGEgVFJYIHRyYW5zYWN0aW9uXG4gICAgaWYgKHZhbHVlLmlzR3JlYXRlclRoYW4obmV3IEJpZ051bWJlcignOTIyMzM3MjAzNjg1NDc3NTgwNycpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIGhhbmRsZWQgYnkgdGhlIGphdmF0cm9uIG5vZGUuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XG4gICAgLy8gVFJPTiBhZGRyZXNzZXMgYXJlIGFjY2VwdGVkIGluIGJhc2U1OCAoVC4uLikgb3IgaGV4ICgweC4uLiAvIDQxLi4uKSBmb3JtO1xuICAgIC8vIHRoZXkgYXJlIGFsdGVybmF0aXZlIGVuY29kaW5ncyBvZiB0aGUgc2FtZSAyMS1ieXRlIGFkZHJlc3MuXG4gICAgaWYgKCFpc0Jhc2U1OEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSAmJiAhaXNIZXhBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihhZGRyZXNzLmFkZHJlc3MgKyAnIGlzIG5vdCBhIHZhbGlkIGJhc2U1OCBhZGRyZXNzLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIHZhbGlkYXRlIHRoZSByZXNvdXJjZSB0eXBlXG4gICAqIEBwYXJhbSByZXNvdXJjZSBUaGUgcmVzb3VyY2UgdHlwZSB0byBiZSB2YWxpZGF0ZWRcbiAgICovXG4gIHZhbGlkYXRlUmVzb3VyY2UocmVzb3VyY2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghVkFMSURfUkVTT1VSQ0VfVFlQRVMuaW5jbHVkZXMocmVzb3VyY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzb3VyY2UgKyAnIGlzIG5vdCBhIHZhbGlkIHJlc291cmNlIHR5cGUuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBub3QgdmFsaWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIGEgcmF3IHRyYW5zYWN0aW9uLiBUaGUgdmFsaWRhdGlvblxuICAgKiBwaGFzZSBpcyB0byBjb21wYXJlIHRoZSByYXctZGF0YS1oZXggdG8gdGhlIHJhdy1kYXRhIG9mIHRoZVxuICAgKiB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogVGhlIGNvbnRlbnRzIHRvIGJlIHZhbGlkYXRlZCBhcmVcbiAgICogMS4gVGhlIHRyYW5zYWN0aW9uIGlkXG4gICAqIDIuIFRoZSBleHBpcmF0aW9uIGRhdGVcbiAgICogMy4gVGhlIHRpbWVzdGFtcFxuICAgKiA0LiBUaGUgY29udHJhY3RcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmd9IHJhd1RyYW5zYWN0aW9uIFRoZSByYXcgdHJhbnNhY3Rpb24gdG8gYmUgdmFsaWRhdGVkXG4gICAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBUT0RPOiBWYWxpZGF0aW9uIG9mIHNpZ25hdHVyZVxuICAgIGlmICghcmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignUmF3IHRyYW5zYWN0aW9uIGlzIGVtcHR5Jyk7XG4gICAgfVxuICAgIGxldCBjdXJyVHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdDtcbiAgICAvLyByYXdUcmFuc2FjdGlvbiBjYW4gYmUgZWl0aGVyIFN0cmluZ2lmaWVkIEpTT04gT1JcbiAgICAvLyBpdCBjYW4gYmUgYSByZWd1bGFyIEpTT04gb2JqZWN0IChub3Qgc3RyaW5naWZpZWQpLlxuICAgIGlmICh0eXBlb2YgcmF3VHJhbnNhY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjdXJyVHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignVGhlcmUgd2FzIGVycm9yIGluIHBhcnNpbmcgdGhlIEpTT04gc3RyaW5nJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfLmlzT2JqZWN0KHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgY3VyclRyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gaXMgbm90IGFuIG9iamVjdCBvciBzdHJpbmdpZmllZCBqc29uJyk7XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZWRSYXdEYXRhSGV4ID0gZGVjb2RlVHJhbnNhY3Rpb24oY3VyclRyYW5zYWN0aW9uLnJhd19kYXRhX2hleCk7XG4gICAgaWYgKCFjdXJyVHJhbnNhY3Rpb24udHhJRCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBJRCBpcyBlbXB0eScpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSB0aGUgdHJhbnNhY3Rpb24gSUQgZnJvbSB0aGUgcmF3IGRhdGEgaGV4XG4gICAgY29uc3QgaGV4QnVmZmVyID0gQnVmZmVyLmZyb20oY3VyclRyYW5zYWN0aW9uLnJhd19kYXRhX2hleCwgJ2hleCcpO1xuICAgIGNvbnN0IGN1cnJUeElEID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhleEJ1ZmZlcikuZGlnZXN0KCdoZXgnKTtcbiAgICBpZiAoY3VyclRyYW5zYWN0aW9uLnR4SUQgIT09IGN1cnJUeElEKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBub3QgaGF2ZSBhIHZhbGlkIGlkJyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIHRoZSBleHBpcmF0aW9uIHRpbWUgZnJvbSB0aGUgcmF3LWRhdGEtaGV4XG4gICAgaWYgKGN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YS5leHBpcmF0aW9uICE9PSBkZWNvZGVkUmF3RGF0YUhleC5leHBpcmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBub3QgaGF2ZSBhIHZhbGlkIGV4cGlyYXRpb24nKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgdGhlIHRpbWVzdGFtcCBmcm9tIHRoZSByYXctZGF0YS1oZXhcbiAgICBpZiAoY3VyclRyYW5zYWN0aW9uLnJhd19kYXRhLnRpbWVzdGFtcCAhPT0gZGVjb2RlZFJhd0RhdGFIZXgudGltZXN0YW1wKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBub3QgaGF2ZSBhIHZhbGlkIHRpbWV0YW1wJyk7XG4gICAgfVxuICAgIC8vIFRyYW5zYWN0aW9uIGNvbnRyYWN0IG11c3QgZXhpc3RcbiAgICBpZiAoIWN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YS5jb250cmFjdCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjb250cmFjdHMgYXJlIGVtcHR5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaGV4QnVmZmVyID0gQnVmZmVyLmZyb20odHJhbnNhY3Rpb24udG9Kc29uKCkucmF3X2RhdGFfaGV4LCAnaGV4Jyk7XG4gICAgY29uc3QgdHhJZCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShoZXhCdWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgaWYgKHRyYW5zYWN0aW9uLmlkICE9PSB0eElkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IodHJhbnNhY3Rpb24uaWQgKyAnIGlzIG5vdCBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLiBFeHBlY3Rpbmc6ICcgKyB0eElkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGV4cGlyYXRpb24gdGltZSBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSBleHBpcmF0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gICAqIEB0aHJvd3Mge0ludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yfSBJZiB0aGUgZXhwaXJhdGlvbiB0aW1lIGlzIGludmFsaWRcbiAgICovXG4gIHZhbGlkYXRlRXhwaXJhdGlvblRpbWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA8IHRoaXMuX3RpbWVzdGFtcCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdFeHBpcmF0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRpbWVzdGFtcCcpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA8IERhdGUubm93KCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignRXhwaXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHRpbWUnKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgLSB0aGlzLl90aW1lc3RhbXAgPiBUUkFOU0FDVElPTl9NQVhfRVhQSVJBVElPTikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdFeHBpcmF0aW9uIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBvbmUgZGF5Jyk7XG4gICAgfVxuICB9XG59XG4iXX0=
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQW9DO0FBQ3BDLDBDQUE0QjtBQUM1QixnRUFBcUM7QUFFckMsbURBVThCO0FBRzlCLG1DQVNpQjtBQUNqQiwrQ0FBNEM7QUFDNUMsdUNBQW9DO0FBRXBDOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxpQ0FBc0I7SUFTNUQ7Ozs7T0FJRztJQUNILFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQWMsV0FBVyxDQUFDLFdBQXdCO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFnQjtRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBQSxzQ0FBOEIsRUFBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsSUFBWTtRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxLQUFZO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7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RSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RSxNQUFNLElBQUksR0FBRyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLGtDQUF1QixDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsNkNBQTZDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDM0csQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHNCQUFzQixDQUFDLEtBQWE7UUFDbEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxxQ0FBMEIsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUkscUNBQTBCLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxrQ0FBMEIsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxxQ0FBMEIsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFyU0QsZ0RBcVNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduaW5nRXJyb3IsXG4gIEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblJlY2VpcHQsIEJsb2NrIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBBZGRyZXNzIH0gZnJvbSAnLi9hZGRyZXNzJztcbmltcG9ydCB7XG4gIHNpZ25UcmFuc2FjdGlvbixcbiAgaXNCYXNlNThBZGRyZXNzLFxuICBpc0hleEFkZHJlc3MsXG4gIGdldE5vbkJhc2U1OENoYXJhY3RlcnMsXG4gIGRlY29kZVRyYW5zYWN0aW9uLFxuICBWQUxJRF9SRVNPVVJDRV9UWVBFUyxcbiAgZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzLFxuICBUUkFOU0FDVElPTl9NQVhfRVhQSVJBVElPTixcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5cbi8qKlxuICogVHJvbiB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIC8vIHRyYW5zYWN0aW9uIGJlaW5nIGJ1aWx0XG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9vd25lckFkZHJlc3M6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9yZWZCbG9ja0J5dGVzOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfcmVmQmxvY2tIYXNoOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfZXhwaXJhdGlvbjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX3RpbWVzdGFtcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29pbkNvbmZpZ30gX2NvaW5Db25maWcgQ29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc291cmNlIGFkZHJlc3MgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FkZHJlc3N9IGFkZHJlc3MgVGhlIHNvdXJjZSBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHRoZSBidWlsZGVyIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXIgc2V0XG4gICAqL1xuICBzb3VyY2UoYWRkcmVzczogQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKGFkZHJlc3MpO1xuICAgIHRoaXMuX293bmVyQWRkcmVzcyA9IGdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdGltZXN0YW1wIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcbiAgICogQHJldHVybnMgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIHRpbWVzdGFtcCh0aW1lOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl90aW1lc3RhbXAgPSB0aW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgYmxvY2sgdmFsdWVzLFxuICAgKlxuICAgKiBAcGFyYW0ge0Jsb2NrfSBibG9jayB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgbnVtYmVyIGFuZCBoYXNoIG9mIHRoZSBibG9ja1xuICAgKiBAcmV0dXJucyB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgYmxvY2soYmxvY2s6IEJsb2NrKTogdGhpcyB7XG4gICAgY29uc3QgYmxvY2tCeXRlcyA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICBibG9ja0J5dGVzLndyaXRlSW50MzJCRShibG9jay5udW1iZXIsIDQpO1xuICAgIHRoaXMuX3JlZkJsb2NrQnl0ZXMgPSBibG9ja0J5dGVzLnNsaWNlKDYsIDgpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB0aGlzLl9yZWZCbG9ja0hhc2ggPSBCdWZmZXIuZnJvbShibG9jay5oYXNoLCAnaGV4Jykuc2xpY2UoOCwgMTYpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgdHJhbnNhY3Rpb24sIHNldCB0aW1lc3RhbXAgaWYgaXQgd2FzIG5vdCBzZXQgcHJldmlvdXNseVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSB0aGUgZXhwaXJhdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kc1xuICAgKiBAcmV0dXJucyB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgZXhwaXJhdGlvbih0aW1lOiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5pZCkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0V4cGlyYXRpb24gaXMgYWxyZWFkeSBzZXQsIGl0IGNhbiBvbmx5IGJlIGV4dGVuZGVkJyk7XG4gICAgfVxuICAgIHRoaXMuX3RpbWVzdGFtcCA9IHRoaXMuX3RpbWVzdGFtcCB8fCBEYXRlLm5vdygpO1xuICAgIHRoaXMudmFsaWRhdGVFeHBpcmF0aW9uVGltZSh0aW1lKTtcbiAgICB0aGlzLl9leHBpcmF0aW9uID0gdGltZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSB0cmFuc2FjdGlvbiB0YWtlcyBpbiByYXcgSlNPTiBkaXJlY3RseSBmcm9tIHRoZSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uUmVjZWlwdH0gcmF3VHJhbnNhY3Rpb24gVGhlIFRyb24gdHJhbnNhY3Rpb24gaW4gSlNPTiBmb3JtYXQgYXMgcmV0dXJuZWQgYnkgdGhlIFRyb24gbGliIG9yIGEgc3RyaW5naWZ5ZWQgdmVyc2lvbiBvZiBzdWNoIEpTT04uXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbn0gVHJvbiB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGxldCB0eDtcbiAgICBpZiAodHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcsIHRyYW5zYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgcmF3VHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLmlucHV0cykge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIHNlbmRlcicpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5vdXRwdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm8gcmVjZWl2ZXInKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlTaWduYXR1cmUoa2V5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcHBseVNpZ25hdHVyZShrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qgb2xkVHJhbnNhY3Rpb24gPSB0aGlzLnRyYW5zYWN0aW9uLnRvSnNvbigpO1xuICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCBzaWduYXR1cmVzIHRvIGNvbXBhcmUgdGhlbSB3aXRoIHRoZSBuZXcgb25lcyBpbiBhIGxhdGVyIHN0ZXAuIFNpZ25hdHVyZXNcbiAgICAvLyBjYW4gYmUgdW5kZWZpbmVkIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHRyYW5zYWN0aW9uIGlzIGJlaW5nIHNpZ25lZFxuICAgIGNvbnN0IG9sZFNpZ25hdHVyZUNvdW50ID0gb2xkVHJhbnNhY3Rpb24uc2lnbmF0dXJlID8gb2xkVHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA6IDA7XG4gICAgbGV0IHNpZ25lZFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICAgIC8vIFNpbmNlIHRoZSBrZXkgcGFpciB3YXMgZ2VuZXJhdGVkIHVzaW5nIGEgcHJpdmF0ZSBrZXksIGl0IHdpbGwgYWx3YXlzIGhhdmUgYSBwcnYgYXR0cmlidXRlLFxuICAgICAgLy8gaGVuY2UgaXQgaXMgc2FmZSB0byB1c2Ugbm9uLW51bGwgb3BlcmF0b3JcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gc2lnblRyYW5zYWN0aW9uKGtleVBhaXIuZ2V0S2V5cygpLnBydiEsIHRoaXMudHJhbnNhY3Rpb24udG9Kc29uKCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0ZhaWxlZCB0byBzaWduIHRyYW5zYWN0aW9uIHZpYSBoZWxwZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBtb3JlIHNpZ25hdHVyZXMgdGhhbiB3aGF0IHdlIHN0YXJ0ZWQgd2l0aFxuICAgIGlmICghc2lnbmVkVHJhbnNhY3Rpb24uc2lnbmF0dXJlIHx8IG9sZFNpZ25hdHVyZUNvdW50ID49IHNpZ25lZFRyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1RyYW5zYWN0aW9uIHNpZ25pbmcgZGlkIG5vdCByZXR1cm4gYW4gYWRkaXRpb25hbCBzaWduYXR1cmUuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnLCBzaWduZWRUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShzaWduYXR1cmUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICAvLyBUaGlzIGlzIGEgbm8tb3Agc2luY2UgVHJvbiB0cmFuc2FjdGlvbnMgYXJlIGJ1aWx0IGZyb21cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uaWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0EgdmFsaWQgdHJhbnNhY3Rpb24gbXVzdCBoYXZlIGFuIGlkJyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy50cmFuc2FjdGlvbik7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKSB7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IHRoaXMuZnJvbUltcGxlbWVudGF0aW9uKHR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgdGhlIHZhbGlkaXR5IG9mIHRoaXMgdHJhbnNhY3Rpb24gYnkgdGhlIGdpdmVuIGFtb3VudCBvZiB0aW1lXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBleHRlbnNpb25NcyBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBleHRlbmQgdGhlIHZhbGlkVG8gdGltZVxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKi9cbiAgZXh0ZW5kVmFsaWRUbyhleHRlbnNpb25NczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5leHRlbmRFeHBpcmF0aW9uKGV4dGVuc2lvbk1zKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbk9yRXF1YWxUbygwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgYmVsb3cgemVyby4nKTtcbiAgICB9XG5cbiAgICAvLyBtYXggbG9uZyBpbiBKYXZhIC0gYXNzdW1lZCB1cHBlciBsaW1pdCBmb3IgYSBUUlggdHJhbnNhY3Rpb25cbiAgICBpZiAodmFsdWUuaXNHcmVhdGVyVGhhbihuZXcgQmlnTnVtYmVyKCc5MjIzMzcyMDM2ODU0Nzc1ODA3JykpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gaGFuZGxlZCBieSB0aGUgamF2YXRyb24gbm9kZS4nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEFkZHJlc3MpOiB2b2lkIHtcbiAgICAvLyBUUk9OIGFkZHJlc3NlcyBhcmUgYWNjZXB0ZWQgaW4gYmFzZTU4IChULi4uKSBvciBoZXggKDB4Li4uIC8gNDEuLi4pIGZvcm07XG4gICAgLy8gdGhleSBhcmUgYWx0ZXJuYXRpdmUgZW5jb2RpbmdzIG9mIHRoZSBzYW1lIDIxLWJ5dGUgYWRkcmVzcy5cbiAgICBpZiAoIWlzQmFzZTU4QWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpICYmICFpc0hleEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgY29uc3QgaW52YWxpZENoYXJzID0gZ2V0Tm9uQmFzZTU4Q2hhcmFjdGVycyhhZGRyZXNzLmFkZHJlc3MgfHwgJycpO1xuICAgICAgaWYgKGludmFsaWRDaGFycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGludmFsaWRDaGFycy5tYXAoKGMpID0+IChjID09PSAnICcgPyAnPHNwYWNlPicgOiBgXCIke2N9XCJgKSkuam9pbignLCAnKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGAke2FkZHJlc3MuYWRkcmVzc30gaXMgbm90IGEgdmFsaWQgYmFzZTU4IGFkZHJlc3M6IGNvbnRhaW5zIGludmFsaWQgQmFzZTU4IGNoYXJhY3RlcihzKTogJHtmb3JtYXR0ZWR9LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihhZGRyZXNzLmFkZHJlc3MgKyAnIGlzIG5vdCBhIHZhbGlkIGJhc2U1OCBhZGRyZXNzLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIHZhbGlkYXRlIHRoZSByZXNvdXJjZSB0eXBlXG4gICAqIEBwYXJhbSByZXNvdXJjZSBUaGUgcmVzb3VyY2UgdHlwZSB0byBiZSB2YWxpZGF0ZWRcbiAgICovXG4gIHZhbGlkYXRlUmVzb3VyY2UocmVzb3VyY2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghVkFMSURfUkVTT1VSQ0VfVFlQRVMuaW5jbHVkZXMocmVzb3VyY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzb3VyY2UgKyAnIGlzIG5vdCBhIHZhbGlkIHJlc291cmNlIHR5cGUuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBub3QgdmFsaWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIGEgcmF3IHRyYW5zYWN0aW9uLiBUaGUgdmFsaWRhdGlvblxuICAgKiBwaGFzZSBpcyB0byBjb21wYXJlIHRoZSByYXctZGF0YS1oZXggdG8gdGhlIHJhdy1kYXRhIG9mIHRoZVxuICAgKiB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogVGhlIGNvbnRlbnRzIHRvIGJlIHZhbGlkYXRlZCBhcmVcbiAgICogMS4gVGhlIHRyYW5zYWN0aW9uIGlkXG4gICAqIDIuIFRoZSBleHBpcmF0aW9uIGRhdGVcbiAgICogMy4gVGhlIHRpbWVzdGFtcFxuICAgKiA0LiBUaGUgY29udHJhY3RcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmd9IHJhd1RyYW5zYWN0aW9uIFRoZSByYXcgdHJhbnNhY3Rpb24gdG8gYmUgdmFsaWRhdGVkXG4gICAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBUT0RPOiBWYWxpZGF0aW9uIG9mIHNpZ25hdHVyZVxuICAgIGlmICghcmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignUmF3IHRyYW5zYWN0aW9uIGlzIGVtcHR5Jyk7XG4gICAgfVxuICAgIGxldCBjdXJyVHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdDtcbiAgICAvLyByYXdUcmFuc2FjdGlvbiBjYW4gYmUgZWl0aGVyIFN0cmluZ2lmaWVkIEpTT04gT1JcbiAgICAvLyBpdCBjYW4gYmUgYSByZWd1bGFyIEpTT04gb2JqZWN0IChub3Qgc3RyaW5naWZpZWQpLlxuICAgIGlmICh0eXBlb2YgcmF3VHJhbnNhY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjdXJyVHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignVGhlcmUgd2FzIGVycm9yIGluIHBhcnNpbmcgdGhlIEpTT04gc3RyaW5nJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfLmlzT2JqZWN0KHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgY3VyclRyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gaXMgbm90IGFuIG9iamVjdCBvciBzdHJpbmdpZmllZCBqc29uJyk7XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZWRSYXdEYXRhSGV4ID0gZGVjb2RlVHJhbnNhY3Rpb24oY3VyclRyYW5zYWN0aW9uLnJhd19kYXRhX2hleCk7XG4gICAgaWYgKCFjdXJyVHJhbnNhY3Rpb24udHhJRCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBJRCBpcyBlbXB0eScpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSB0aGUgdHJhbnNhY3Rpb24gSUQgZnJvbSB0aGUgcmF3IGRhdGEgaGV4XG4gICAgY29uc3QgaGV4QnVmZmVyID0gQnVmZmVyLmZyb20oY3VyclRyYW5zYWN0aW9uLnJhd19kYXRhX2hleCwgJ2hleCcpO1xuICAgIGNvbnN0IGN1cnJUeElEID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhleEJ1ZmZlcikuZGlnZXN0KCdoZXgnKTtcbiAgICBpZiAoY3VyclRyYW5zYWN0aW9uLnR4SUQgIT09IGN1cnJUeElEKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBub3QgaGF2ZSBhIHZhbGlkIGlkJyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIHRoZSBleHBpcmF0aW9uIHRpbWUgZnJvbSB0aGUgcmF3LWRhdGEtaGV4XG4gICAgaWYgKGN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YS5leHBpcmF0aW9uICE9PSBkZWNvZGVkUmF3RGF0YUhleC5leHBpcmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBub3QgaGF2ZSBhIHZhbGlkIGV4cGlyYXRpb24nKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgdGhlIHRpbWVzdGFtcCBmcm9tIHRoZSByYXctZGF0YS1oZXhcbiAgICBpZiAoY3VyclRyYW5zYWN0aW9uLnJhd19kYXRhLnRpbWVzdGFtcCAhPT0gZGVjb2RlZFJhd0RhdGFIZXgudGltZXN0YW1wKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBub3QgaGF2ZSBhIHZhbGlkIHRpbWV0YW1wJyk7XG4gICAgfVxuICAgIC8vIFRyYW5zYWN0aW9uIGNvbnRyYWN0IG11c3QgZXhpc3RcbiAgICBpZiAoIWN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YS5jb250cmFjdCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjb250cmFjdHMgYXJlIGVtcHR5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaGV4QnVmZmVyID0gQnVmZmVyLmZyb20odHJhbnNhY3Rpb24udG9Kc29uKCkucmF3X2RhdGFfaGV4LCAnaGV4Jyk7XG4gICAgY29uc3QgdHhJZCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShoZXhCdWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgaWYgKHRyYW5zYWN0aW9uLmlkICE9PSB0eElkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IodHJhbnNhY3Rpb24uaWQgKyAnIGlzIG5vdCBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLiBFeHBlY3Rpbmc6ICcgKyB0eElkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGV4cGlyYXRpb24gdGltZSBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSBleHBpcmF0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gICAqIEB0aHJvd3Mge0ludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yfSBJZiB0aGUgZXhwaXJhdGlvbiB0aW1lIGlzIGludmFsaWRcbiAgICovXG4gIHZhbGlkYXRlRXhwaXJhdGlvblRpbWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA8IHRoaXMuX3RpbWVzdGFtcCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdFeHBpcmF0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRpbWVzdGFtcCcpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA8IERhdGUubm93KCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignRXhwaXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHRpbWUnKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgLSB0aGlzLl90aW1lc3RhbXAgPiBUUkFOU0FDVElPTl9NQVhfRVhQSVJBVElPTikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdFeHBpcmF0aW9uIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBvbmUgZGF5Jyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -11,6 +11,13 @@ export declare const tokenTestnetContractAddresses: string[];
11
11
  export type ByteArray = number[];
12
12
  export type TronBinaryLike = ByteArray | Buffer | Uint8Array | string;
13
13
  export declare const VALID_RESOURCE_TYPES: string[];
14
+ export declare const BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
15
+ /**
16
+ * Returns an array of unique characters in the input string that do not belong to the Base58 alphabet.
17
+ *
18
+ * @param value
19
+ */
20
+ export declare function getNonBase58Characters(value: string): string[];
14
21
  /**
15
22
  * @param address
16
23
  */
@@ -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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"}
@@ -36,7 +36,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.VALID_RESOURCE_TYPES = exports.tokenTestnetContractAddresses = exports.tokenMainnetContractAddresses = exports.TRANSACTION_DEFAULT_EXPIRATION = exports.TRANSACTION_MAX_EXPIRATION = void 0;
39
+ exports.BASE58_ALPHABET = exports.VALID_RESOURCE_TYPES = exports.tokenTestnetContractAddresses = exports.tokenMainnetContractAddresses = exports.TRANSACTION_DEFAULT_EXPIRATION = exports.TRANSACTION_MAX_EXPIRATION = void 0;
40
+ exports.getNonBase58Characters = getNonBase58Characters;
40
41
  exports.isBase58Address = isBase58Address;
41
42
  exports.isHexAddress = isHexAddress;
42
43
  exports.getBase58AddressFromHexAddress = getBase58AddressFromHexAddress;
@@ -93,6 +94,21 @@ const getTronTokens = (network = 'mainnet') => {
93
94
  exports.tokenMainnetContractAddresses = getTronTokens('mainnet');
94
95
  exports.tokenTestnetContractAddresses = getTronTokens('testnet');
95
96
  exports.VALID_RESOURCE_TYPES = ['ENERGY', 'BANDWIDTH'];
97
+ exports.BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
98
+ /**
99
+ * Returns an array of unique characters in the input string that do not belong to the Base58 alphabet.
100
+ *
101
+ * @param value
102
+ */
103
+ function getNonBase58Characters(value) {
104
+ const invalid = new Set();
105
+ for (const ch of value) {
106
+ if (!exports.BASE58_ALPHABET.includes(ch)) {
107
+ invalid.add(ch);
108
+ }
109
+ }
110
+ return Array.from(invalid);
111
+ }
96
112
  /**
97
113
  * @param address
98
114
  */
@@ -886,4 +902,4 @@ function generateRawDataHex(rawData = {}) {
886
902
  throw new sdk_core_1.UtilsError('Failed to generate raw data hex: ' + e.message);
887
903
  }
888
904
  }
889
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJEQSwwQ0FFQztBQVNELG9DQUdDO0FBUUQsd0VBUUM7QUFLRCxnRUFFQztBQUtELGdFQUVDO0FBRUQsd0VBWUM7QUFRRCwwQ0FtQkM7QUFJRCxrREFFQztBQUtELG9EQUVDO0FBS0Qsc0VBRUM7QUFLRCwwREFHQztBQU1ELDBDQUVDO0FBT0QsZ0NBRUM7QUFLRCwwREFFQztBQU9ELDhDQStFQztBQVNELG9EQTBCQztBQVFELDRDQUdDO0FBT0QsZ0NBRUM7QUFNRCx3REEwQ0M7QUFRRCxnRUF1Q0M7QUFTRCxzRkFzQkM7QUFRRCxzRUFzQ0M7QUFRRCw4REFpREM7QUFRRCwwRUF3Q0M7QUFTRCxzRUEwQkM7QUFRRCxvRkEwQkM7QUFRRCx3RUE0Q0M7QUFRRCw0RUE0Q0M7QUFRRCxrRUFpQ0M7QUF1QkQsa0RBR0M7QUFRRCxrRUFLQztBQVFELHNCQUVDO0FBU0QsNENBbUJDO0FBUUQsNENBUUM7QUFjRCxnREF3RUM7QUEvK0JELG9EQUE0QjtBQUM1QixvREFBc0M7QUFDdEMsaURBQW1DO0FBQ25DLHdEQUF5RDtBQUV6RCxtREFBa0Q7QUFDbEQsaURBQTJEO0FBcUIzRCxpQ0FBb0U7QUFDcEUsNENBQXVEO0FBQ3ZELDJDQUEyRTtBQUU5RCxRQUFBLDBCQUEwQixHQUFHLFFBQVEsQ0FBQyxDQUFDLFVBQVU7QUFDakQsUUFBQSw4QkFBOEIsR0FBRyxRQUFRLENBQUMsQ0FBQyxjQUFjO0FBQ3RFLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDO0FBQ3JDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQUk1QixNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQU8sR0FBRyxTQUFTLEVBQUUsRUFBRTtJQUM1QyxPQUNFLGVBQUs7U0FDRixNQUFNLENB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LFFBQVE7U0FDM0IsQ0FBQztRQUVGLDRDQUE0QztRQUM1QyxNQUFNLFlBQVksR0FBRyxlQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFckUsd0JBQXdCO1FBQ3hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUkscUJBQVUsQ0FBQyxtQ0FBbUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBoZXggZnJvbSAnQHN0YWJsZWxpYi9oZXgnO1xuaW1wb3J0ICogYXMgdHJvbndlYiBmcm9tICd0cm9ud2ViJztcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Byb3RvYnVmL3Ryb24nO1xuXG5pbXBvcnQgeyBVdGlsc0Vycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJvbkVyYzIwQ29pbiwgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIFRyYW5zZmVyQ29udHJhY3QsXG4gIFJhd0RhdGEsXG4gIEFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QsXG4gIFRyYW5zYWN0aW9uUmVjZWlwdCxcbiAgUGVybWlzc2lvbixcbiAgVHJpZ2dlclNtYXJ0Q29udHJhY3QsXG4gIEZyZWV6ZUJhbGFuY2VDb250cmFjdFBhcmFtZXRlcixcbiAgVm90ZVdpdG5lc3NDb250cmFjdFBhcmFtZXRlcixcbiAgRnJlZXplQ29udHJhY3REZWNvZGVkLFxuICBWb3RlQ29udHJhY3REZWNvZGVkLFxuICBVbmZyZWV6ZUJhbGFuY2VDb250cmFjdFBhcmFtZXRlcixcbiAgV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0UGFyYW1ldGVyLFxuICBVbmZyZWV6ZUNvbnRyYWN0RGVjb2RlZCxcbiAgV2l0aGRyYXdDb250cmFjdERlY29kZWQsXG4gIFJlc291cmNlTWFuYWdlbWVudENvbnRyYWN0UGFyYW1ldGVyLFxuICBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdERlY29kZWQsXG4gIEFjY291bnRDcmVhdGVDb250cmFjdCxcbiAgQWNjb3VudENyZWF0ZUNvbnRyYWN0RGVjb2RlZCxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBDb250cmFjdFR5cGUsIFBlcm1pc3Npb25UeXBlLCBUcm9uUmVzb3VyY2UgfSBmcm9tICcuL2VudW0nO1xuaW1wb3J0IHsgQWJpQ29kZXIsIGhleENvbmNhdCB9IGZyb20gJ2V0aGVycy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgREVMRUdBVElPTl9UWVBFX1VSTCwgQUNDT1VOVF9DUkVBVEVfVFlQRV9VUkwgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBUUkFOU0FDVElPTl9NQVhfRVhQSVJBVElPTiA9IDg2NDAwMDAwOyAvLyBvbmUgZGF5XG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05fREVGQVVMVF9FWFBJUkFUSU9OID0gMTA4MDAwMDA7IC8vIHRocmVlIGhvdXJzXG5jb25zdCBBRERSRVNTX1BSRUZJWF9SRUdFWCA9IC9eKDQxKS87XG5jb25zdCBBRERSRVNTX1BSRUZJWCA9ICc0MSc7XG5cbmV4cG9ydCB0eXBlIEJ5dGVzTGlrZSA9IG51bWJlcltdIHwgVWludDhBcnJheTtcblxuY29uc3QgZ2V0VHJvblRva2VucyA9IChuZXR3b3JrID0gJ21haW5uZXQnKSA9PiB7XG4gIHJldHVybiAoXG4gICAgY29pbnNcbiAgICAgIC5maWx0ZXIoKGNvaW4pID0+IGNvaW4uZmFtaWx5ID09PSAndHJ4JylcbiAgICAgIC5maWx0ZXIoKHRyeCkgPT4gdHJ4Lm5ldHdvcmsudHlwZSA9PT0gbmV0d29yayAmJiB0cnguaXNUb2tlbikgYXMgdW5rbm93biBhcyBUcm9uRXJjMjBDb2luW11cbiAgKS5tYXAoKGNvaW5zKSA9PiBjb2lucy5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9rZW5NYWlubmV0Q29udHJhY3RBZGRyZXNzZXMgPSBnZXRUcm9uVG9rZW5zKCdtYWlubmV0Jyk7XG5leHBvcnQgY29uc3QgdG9rZW5UZXN0bmV0Q29udHJhY3RBZGRyZXNzZXMgPSBnZXRUcm9uVG9rZW5zKCd0ZXN0bmV0Jyk7XG4vKipcbiAqIFRyb24tc3BlY2lmaWMgaGVscGVyIGZ1bmN0aW9uc1xuICovXG5leHBvcnQgdHlwZSBCeXRlQXJyYXkgPSBudW1iZXJbXTtcbmV4cG9ydCB0eXBlIFRyb25CaW5hcnlMaWtlID0gQnl0ZUFycmF5IHwgQnVmZmVyIHwgVWludDhBcnJheSB8IHN0cmluZztcblxuZXhwb3J0IGNvbnN0IFZBTElEX1JFU09VUkNFX1RZUEVTID0gWydFTkVSR1knLCAnQkFORFdJRFRIJ107XG5cbi8qKlxuICogQHBhcmFtIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmFzZTU4QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY3J5cHRvLmlzQWRkcmVzc1ZhbGlkKGFkZHJlc3MpO1xufVxuXG4vKipcbiAqIERldGVjdHMgaGV4IHJlcHJlc2VudGF0aW9ucyBvZiBhIFRST04gYWRkcmVzczogMHgtcHJlZml4ZWQgMjAtYnl0ZSBFVk0tc3R5bGUsXG4gKiBvciA0MS1wcmVmaXhlZCAyMS1ieXRlIGZvcm0uIEJhcmUgMjAtYnl0ZSBoZXggKG5vIDB4LzQxKSBpcyByZWplY3RlZCDigJQgaXQgaXMgbm90XG4gKiBhbiBvbi1jaGFpbiAvIEFQSSBhZGRyZXNzIGVuY29kaW5nLlxuICpcbiAqIEBwYXJhbSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0hleEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGxvd2VyID0gYWRkcmVzcy50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gL14weFswLTlhLWZdezQwfSQvLnRlc3QobG93ZXIpIHx8IC9eNDFbMC05YS1mXXs0MH0kLy50ZXN0KGxvd2VyKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbnkgdmFsaWQgVFJPTiBhZGRyZXNzIHJlcHJlc2VudGF0aW9uIChiYXNlNTgsIDB4LXByZWZpeGVkIGhleCxcbiAqIG9yIDQxLXByZWZpeGVkIGhleCkgdG8gdGhlIGNhbm9uaWNhbCBiYXNlNTggZm9ybS5cbiAqXG4gKiBAcGFyYW0gYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXhBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChpc0Jhc2U1OEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuICBjb25zdCBiYXJlID0gYWRkcmVzcy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL14weC8sICcnKTtcbiAgLy8gVGhlIDIwLWJ5dGUgRVZNLXN0eWxlIGZvcm0gbGFja3MgdGhlIDB4NDEgVFJPTiB2ZXJzaW9uIHByZWZpeC5cbiAgY29uc3QgaGV4ID0gYmFyZS5sZW5ndGggPT09IDQwID8gJzQxJyArIGJhcmUgOiBiYXJlO1xuICByZXR1cm4gZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgoaGV4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gc3RyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhzdHI6IHN0cmluZyk6IEJ5dGVBcnJheSB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNvZGUuaGV4U3RyMmJ5dGVBcnJheShzdHIucmVwbGFjZSgnMHgnLCAnJykpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhcnJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhleEFkZHJlc3NGcm9tQnl0ZUFycmF5KGFycjogQnl0ZUFycmF5KTogc3RyaW5nIHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY29kZS5ieXRlQXJyYXkyaGV4U3RyKGFycik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoYmFzZTU4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBwdWxsZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL1RST04tVVMvdHJvbndlYi9ibG9iL2RjYjhlZmEzNmE1ZWJiNjVjNGRhYjM2MjZlOTAyNTZhNDUzZjNiMGQvc3JjL3V0aWxzL2hlbHAuanMjTDE3XG4gIC8vIGJ1dCB0aGV5IGRvbid0IHN1cmZhY2UgdGhpcyBjYWxsIGluIGluZGV4LmpzXG4gIC8vIGNhbm9uaWNhbGl6ZXMgaGV4LWZvcm0gaW5wdXRzICgweC4uLiAvIDQxLi4uKSB0byBiYXNlNTggZmlyc3QsIHNvIGFsbCBidWlsZGVyc1xuICAvLyBhY2NlcHQgZXZlcnkgdmFsaWQgcmVwcmVzZW50YXRpb24gb2YgYSBUUk9OIGFkZHJlc3MgKENPSU5TLTE1NzUpXG4gIGNvbnN0IGNhbm9uaWNhbCA9IGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4QWRkcmVzcyhiYXNlNTgpO1xuICBjb25zdCBieXRlcyA9IHRyb253ZWIudXRpbHMuY3J5cHRvLmRlY29kZUJhc2U1OEFkZHJlc3MoY2Fub25pY2FsKTtcbiAgLy8gRW5zdXJlIGJ5dGVzIGlzIGEgQnl0ZUFycmF5IChudW1iZXJbXSlcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgcmV0dXJuIGdldEhleEFkZHJlc3NGcm9tQnl0ZUFycmF5KGJ5dGVzKTtcbiAgfVxuICB0aHJvdyBuZXcgVXRpbHNFcnJvcignRmFpbGVkIHRvIGRlY29kZSBiYXNlNTggYWRkcmVzcyB0byBieXRlIGFycmF5Jyk7XG59XG5cbi8qKlxuICogQHBhcmFtIG1lc3NhZ2VUb1ZlcmlmeVxuICogQHBhcmFtIGJhc2U1OEFkZHJlc3NcbiAqIEBwYXJhbSBzaWdIZXhcbiAqIEBwYXJhbSB1c2VUcm9uSGVhZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmUoXG4gIG1lc3NhZ2VUb1ZlcmlmeTogc3RyaW5nLFxuICBiYXNlNThBZGRyZXNzOiBzdHJpbmcsXG4gIHNpZ0hleDogc3RyaW5nLFxuICB1c2VUcm9uSGVhZGVyID0gdHJ1ZVxuKTogYm9vbGVhbiB7XG4gIGlmICghaXNWYWxpZEhleChzaWdIZXgpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ3NpZ25hdHVyZSBpcyBub3QgaW4gYSB2YWxpZCBmb3JtYXQsIG5lZWRzIHRvIGJlIGhleGFkZWNpbWFsJyk7XG4gIH1cblxuICBpZiAoIWlzVmFsaWRIZXgobWVzc2FnZVRvVmVyaWZ5KSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdtZXNzYWdlIGlzIG5vdCBpbiBhIHZhbGlkIGZvcm1hdCwgbmVlZHMgdG8gYmUgaGV4YWRlY2ltYWwnKTtcbiAgfVxuXG4gIGlmICghaXNCYXNlNThBZGRyZXNzKGJhc2U1OEFkZHJlc3MpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ2FkZHJlc3MgbmVlZHMgdG8gYmUgYmFzZTU4IGVuY29kZWQnKTtcbiAgfVxuXG4gIHJldHVybiB0cm9ud2ViLlRyeC52ZXJpZnlTaWduYXR1cmUobWVzc2FnZVRvVmVyaWZ5LCBiYXNlNThBZGRyZXNzLCBzaWdIZXgsIHVzZVRyb25IZWFkZXIpO1xufVxuLyoqXG4gKiBAcGFyYW0gcHJpdmF0ZUtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHViS2V5RnJvbVByaUtleShwcml2YXRlS2V5OiBUcm9uQmluYXJ5TGlrZSk6IEJ5dGVBcnJheSB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5nZXRQdWJLZXlGcm9tUHJpS2V5KHByaXZhdGVLZXkgYXMgQnl0ZXNMaWtlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcHJpdmF0ZUtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzc0Zyb21QcmlLZXkocHJpdmF0ZUtleTogVHJvbkJpbmFyeUxpa2UpOiBCeXRlQXJyYXkge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uZ2V0QWRkcmVzc0Zyb21QcmlLZXkocHJpdmF0ZUtleSBhcyBCeXRlc0xpa2UpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShhZGRyZXNzOiBCeXRlQXJyYXkpOiBzdHJpbmcge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uZ2V0QmFzZTU4Q2hlY2tBZGRyZXNzKGFkZHJlc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBoZXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYXJyID0gZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoaGV4KTtcbiAgcmV0dXJuIGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KGFycik7XG59XG5cbi8qKlxuICogQHBhcmFtIHByaXZhdGVLZXlcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnblRyYW5zYWN0aW9uKHByaXZhdGVLZXk6IHN0cmluZyB8IEJ5dGVBcnJheSwgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdCk6IFRyYW5zYWN0aW9uUmVjZWlwdCB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5zaWduVHJhbnNhY3Rpb24ocHJpdmF0ZUtleSwgdHJhbnNhY3Rpb24pIGFzIFRyYW5zYWN0aW9uUmVjZWlwdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIHByaXZhdGVLZXlcbiAqIEBwYXJhbSB1c2VUcm9uSGVhZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduU3RyaW5nKG1lc3NhZ2U6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nIHwgQnl0ZUFycmF5LCB1c2VUcm9uSGVhZGVyID0gdHJ1ZSk6IHN0cmluZyB7XG4gIHJldHVybiB0cm9ud2ViLlRyeC5zaWduU3RyaW5nKG1lc3NhZ2UsIHByaXZhdGVLZXkgYXMgc3RyaW5nLCB1c2VUcm9uSGVhZGVyKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcHViQnl0ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJhd0FkZHJlc3NGcm9tUHViS2V5KHB1YkJ5dGVzOiBUcm9uQmluYXJ5TGlrZSk6IEJ5dGVBcnJheSB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5jb21wdXRlQWRkcmVzcyhwdWJCeXRlcyBhcyBCeXRlc0xpa2UpO1xufVxuXG4vKipcbiAqIERlY29kZXMgYSBoZXggZW5jb2RlZCB0cmFuc2FjdGlvbiBpbiBpdHMgcHJvdG9idWYgcmVwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGhleFN0cmluZyByYXdfZGF0YV9oZXggZmllbGQgZnJvbSB0cm9uIHRyYW5zYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVHJhbnNhY3Rpb24oaGV4U3RyaW5nOiBzdHJpbmcpOiBSYXdEYXRhIHtcbiAgY29uc3QgcmF3VHJhbnNhY3Rpb24gPSBkZWNvZGVSYXdUcmFuc2FjdGlvbihoZXhTdHJpbmcpO1xuXG4gIC8vIHRoZXJlIHNob3VsZCBub3QgYmUgbXVsdGlwbGUgY29udHJhY3RzIGluIHRoaXMgZGF0YVxuICBpZiAocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdOdW1iZXIgb2YgY29udHJhY3RzIGlzIGdyZWF0ZXIgdGhhbiAxLicpO1xuICB9XG5cbiAgbGV0IGNvbnRyYWN0OlxuICAgIHwgVHJhbnNmZXJDb250cmFjdFtdXG4gICAgfCBBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0W11cbiAgICB8IFRyaWdnZXJTbWFydENvbnRyYWN0W11cbiAgICB8IEZyZWV6ZUJhbGFuY2VDb250cmFjdFBhcmFtZXRlcltdXG4gICAgfCBWb3RlV2l0bmVzc0NvbnRyYWN0UGFyYW1ldGVyW11cbiAgICB8IFVuZnJlZXplQmFsYW5jZUNvbnRyYWN0UGFyYW1ldGVyW11cbiAgICB8IFdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdFBhcmFtZXRlcltdXG4gICAgfCBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdFBhcmFtZXRlcltdO1xuXG4gIGxldCBjb250cmFjdFR5cGU6IENvbnRyYWN0VHlwZTtcblxuICAvLyBlbnN1cmUgdGhlIGNvbnRyYWN0IHR5cGUgaXMgc3VwcG9ydGVkXG4gIHN3aXRjaCAocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci50eXBlX3VybCkge1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVHJhbnNmZXJDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuVHJhbnNmZXI7XG4gICAgICBjb250cmFjdCA9IGV4cG9ydHMuZGVjb2RlVHJhbnNmZXJDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuQWNjb3VudFBlcm1pc3Npb25VcGRhdGU7XG4gICAgICBjb250cmFjdCA9IGV4cG9ydHMuZGVjb2RlQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QnOlxuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLlRyaWdnZXJTbWFydENvbnRyYWN0O1xuICAgICAgY29udHJhY3QgPSBleHBvcnRzLmRlY29kZVRyaWdnZXJTbWFydENvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5GcmVlemVCYWxhbmNlVjJDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuRnJlZXplQmFsYW5jZVYyO1xuICAgICAgY29udHJhY3QgPSBkZWNvZGVGcmVlemVCYWxhbmNlVjJDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVm90ZVdpdG5lc3NDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuVm90ZVdpdG5lc3M7XG4gICAgICBjb250cmFjdCA9IGRlY29kZVZvdGVXaXRuZXNzQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLldpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCc6XG4gICAgICBjb250cmFjdCA9IGRlY29kZVdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGNvbnRyYWN0VHlwZSA9IENvbnRyYWN0VHlwZS5XaXRoZHJhd0V4cGlyZVVuZnJlZXplO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5XaXRoZHJhd0JhbGFuY2VDb250cmFjdCc6XG4gICAgICBjb250cmFjdCA9IGRlY29kZVdpdGhkcmF3QmFsYW5jZUNvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLldpdGhkcmF3QmFsYW5jZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdCc6XG4gICAgICBjb250cmFjdCA9IGRlY29kZVVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuVW5mcmVlemVCYWxhbmNlVjI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERFTEVHQVRJT05fVFlQRV9VUkw6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0O1xuICAgICAgY29udHJhY3QgPSBkZWNvZGVEZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0JzpcbiAgICAgIGNvbnRyYWN0VHlwZSA9IENvbnRyYWN0VHlwZS5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdDtcbiAgICAgIGNvbnRyYWN0ID0gZGVjb2RlVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEFDQ09VTlRfQ1JFQVRFX1RZUEVfVVJMOlxuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLkFjY291bnRDcmVhdGU7XG4gICAgICBjb250cmFjdCA9IGRlY29kZUFjY291bnRDcmVhdGVDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVW5zdXBwb3J0ZWQgY29udHJhY3QgdHlwZScpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb250cmFjdFR5cGUsXG4gICAgY29udHJhY3QsXG4gICAgZXhwaXJhdGlvbjogcmF3VHJhbnNhY3Rpb24uZXhwaXJhdGlvbixcbiAgICB0aW1lc3RhbXA6IHJhd1RyYW5zYWN0aW9uLnRpbWVzdGFtcCxcbiAgICByZWZfYmxvY2tfYnl0ZXM6IHJhd1RyYW5zYWN0aW9uLmJsb2NrQnl0ZXMsXG4gICAgcmVmX2Jsb2NrX2hhc2g6IHJhd1RyYW5zYWN0aW9uLmJsb2NrSGFzaCxcbiAgICBmZWVfbGltaXQ6ICtyYXdUcmFuc2FjdGlvbi5mZWVMaW1pdCxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIGEgdHJhbnNhY3Rpb24ncyByYXcgZmllbGQgZnJvbSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZy4gVGhpcyBpcyBhIHByb3RvYnVmIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBoZXhTdHJpbmcgdGhpcyBpcyB0aGUgcmF3IGhleGFkZWNpbWFsIGVuY29kZWQgc3RyaW5nLiBEb2MgZm91bmQgaW4gdGhlIGZvbGxvd2luZyBsaW5rLlxuICogQGV4YW1wbGVcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9CaXRHby9iaXRnby1hY2NvdW50LWxpYi9ibG9iLzVmMjgyNTg4NzAxNzc4YTQ0MjFjNzVmYTYxZjQyNzEzZjU2ZTk1YjkvcmVzb3VyY2VzL3Byb3RvYnVmL3Ryb24ucHJvdG8jTDMxOX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVJhd1RyYW5zYWN0aW9uKGhleFN0cmluZzogc3RyaW5nKToge1xuICBleHBpcmF0aW9uOiBudW1iZXI7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBjb250cmFjdHM6IEFycmF5PGFueT47XG4gIGJsb2NrQnl0ZXM6IHN0cmluZztcbiAgYmxvY2tIYXNoOiBzdHJpbmc7XG4gIGZlZUxpbWl0OiBzdHJpbmc7XG59IHtcbiAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuZnJvbShoZXhTdHJpbmcsICdoZXgnKTtcblxuICBsZXQgcmF3O1xuICB0cnkge1xuICAgIC8vIHdlIG5lZWQgdG8gZGVjb2RlIG91ciByYXdfZGF0YV9oZXggZmllbGQgZmlyc3RcbiAgICByYXcgPSBwcm90b2NvbC5UcmFuc2FjdGlvbi5yYXcuZGVjb2RlKGJ5dGVzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIGluaXRpYWwgcmF3X2RhdGFfaGV4IGZyb20gdGhlIHNlcmlhbGl6ZWQgdHguJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cGlyYXRpb246IE51bWJlcihyYXcuZXhwaXJhdGlvbiksXG4gICAgdGltZXN0YW1wOiBOdW1iZXIocmF3LnRpbWVzdGFtcCksXG4gICAgY29udHJhY3RzOiByYXcuY29udHJhY3QsXG4gICAgYmxvY2tCeXRlczogdG9IZXgocmF3LnJlZkJsb2NrQnl0ZXMpLFxuICAgIGZlZUxpbWl0OiByYXcuZmVlTGltaXQsXG4gICAgYmxvY2tIYXNoOiB0b0hleChyYXcucmVmQmxvY2tIYXNoKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB0byBoZXhcbiAqXG4gKiBAcGFyYW0gYmFzZTY0IC0gVGhlIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBoZXggcmVwcmVzZW50YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhleEZyb21CYXNlNjQoYmFzZTY0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKTtcbiAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygnaGV4Jyk7XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHBhc3NlZCBzdHJpbmcgaXMgYSBzYWZlIGhleCBzdHJpbmcgZm9yIHRyb24ncyBwdXJwb3Nlcy5cbiAqXG4gKiBAcGFyYW0gaGV4IEEgdmFsaWQgaGV4IHN0cmluZyBtdXN0IGJlIGEgc3RyaW5nIG1hZGUgb2YgbnVtYmVycyBhbmQgY2hhcmFjdGVycyBhbmQgaGFzIGFuIGV2ZW4gbGVuZ3RoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEhleChoZXg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL14oMHgpPyhbMC05YS1mXXsyfSkrJC9pLnRlc3QoaGV4KTtcbn1cblxuLyoqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCB3aGljaCBjb3JyZXNwb25kcyB3aXRoIHRoZSBkZXRhaWxzIG9mIHRoZSB0cmFuc2ZlclxuICpcbiAqIEBwYXJhbSB0cmFuc2ZlckhleCBpcyB0aGUgdmFsdWUgcHJvcGVydHkgb2YgdGhlIFwicGFyYW1ldGVyXCIgZmllbGQgb2YgY29udHJhY3RMaXN0WzBdXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRyYW5zZmVyQ29udHJhY3QodHJhbnNmZXJIZXg6IHN0cmluZyk6IFRyYW5zZmVyQ29udHJhY3RbXSB7XG4gIGNvbnN0IGNvbnRyYWN0Qnl0ZXMgPSBCdWZmZXIuZnJvbSh0cmFuc2ZlckhleCwgJ2Jhc2U2NCcpO1xuICBsZXQgdHJhbnNmZXJDb250cmFjdDtcblxuICB0cnkge1xuICAgIHRyYW5zZmVyQ29udHJhY3QgPSBwcm90b2NvbC5UcmFuc2ZlckNvbnRyYWN0LmRlY29kZShjb250cmFjdEJ5dGVzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIHRyYW5zZmVyIGNvbnRyYWN0IGluIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgfVxuXG4gIGlmICghdHJhbnNmZXJDb250cmFjdC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHRyYW5zZmVyIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCF0cmFuc2ZlckNvbnRyYWN0LnRvQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdEZXN0aW5hdGlvbiBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgdHJhbnNmZXIgY29udHJhY3QuJyk7XG4gIH1cblxuICBpZiAoIXRyYW5zZmVyQ29udHJhY3QuaGFzT3duUHJvcGVydHkoJ2Ftb3VudCcpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0Ftb3VudCBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHRyYW5zZmVyIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgLy8gZGVzZXJpYWxpemUgYXR0cmlidXRlc1xuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odHJhbnNmZXJDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IHRvX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbSh0cmFuc2ZlckNvbnRyYWN0LnRvQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcbiAgY29uc3QgYW1vdW50ID0gdHJhbnNmZXJDb250cmFjdC5hbW91bnQ7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBhbW91bnQ6IE51bWJlcihhbW91bnQpLFxuICAgICAgICAgIG93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdG9fYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggY29ycmVzcG9uZGluZyB3aXRoIHRyaWdnZXIgc21hcnQgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0XG4gKiBAcmV0dXJucyB7QWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRyaWdnZXJTbWFydENvbnRyYWN0KGJhc2U2NDogc3RyaW5nKTogVHJpZ2dlclNtYXJ0Q29udHJhY3RbXSB7XG4gIGxldCBjb250cmFjdENhbGxEZWNvZGVkO1xuICB0cnkge1xuICAgIGNvbnRyYWN0Q2FsbERlY29kZWQgPSBwcm90b2NvbC5UcmlnZ2VyU21hcnRDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgY29udHJhY3QgY2FsbCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIWNvbnRyYWN0Q2FsbERlY29kZWQub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBjb250cmFjdCBjYWxsLicpO1xuICB9XG5cbiAgaWYgKCFjb250cmFjdENhbGxEZWNvZGVkLmNvbnRyYWN0QWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdEZXN0aW5hdGlvbiBjb250cmFjdCBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgY29udHJhY3QgY2FsbC4nKTtcbiAgfVxuXG4gIGlmICghY29udHJhY3RDYWxsRGVjb2RlZC5kYXRhKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0RhdGEgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBjb250cmFjdCBjYWxsLicpO1xuICB9XG5cbiAgLy8gZGVzZXJpYWxpemUgYXR0cmlidXRlc1xuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20oY29udHJhY3RDYWxsRGVjb2RlZC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IGNvbnRyYWN0X2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShjb250cmFjdENhbGxEZWNvZGVkLmNvbnRyYWN0QWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcbiAgY29uc3QgZGF0YSA9IGNvbnRyYWN0Q2FsbERlY29kZWQuZGF0YTtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIG93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgY29udHJhY3RfYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggY29ycmVzcG9uZGluZyB3aXRoIHRoZSBkZXRhaWxzIG9mIHRoZSBjb250cmFjdCB3aGljaCB1cGRhdGVzXG4gKiBhY2NvdW50IHBlcm1pc3Npb25cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0XG4gKiBAcmV0dXJucyB7QWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0IHtcbiAgY29uc3QgYWNjb3VudFVwZGF0ZUNvbnRyYWN0ID0gcHJvdG9jb2wuQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICBhc3NlcnQoYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lm93bmVyQWRkcmVzcyk7XG4gIGFzc2VydChhY2NvdW50VXBkYXRlQ29udHJhY3Qub3duZXIpO1xuICBhc3NlcnQoYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lmhhc093blByb3BlcnR5KCdhY3RpdmVzJykpO1xuXG4gIGNvbnN0IG93bmVyQWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKGFjY291bnRVcGRhdGVDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IG93bmVyOiBQZXJtaXNzaW9uID0gY3JlYXRlUGVybWlzc2lvbihhY2NvdW50VXBkYXRlQ29udHJhY3Qub3duZXIpO1xuICBsZXQgd2l0bmVzczogUGVybWlzc2lvbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgaWYgKGFjY291bnRVcGRhdGVDb250cmFjdC53aXRuZXNzKSB7XG4gICAgd2l0bmVzcyA9IGNyZWF0ZVBlcm1pc3Npb24oYWNjb3VudFVwZGF0ZUNvbnRyYWN0LndpdG5lc3MpO1xuICB9XG4gIGNvbnN0IGFjdGl2ZUxpc3QgPSBhY2NvdW50VXBkYXRlQ29udHJhY3QuYWN0aXZlcy5tYXAoKGFjdGl2ZSkgPT4gY3JlYXRlUGVybWlzc2lvbihhY3RpdmUpKTtcblxuICByZXR1cm4ge1xuICAgIG93bmVyQWRkcmVzcyxcbiAgICBvd25lcixcbiAgICB3aXRuZXNzLFxuICAgIGFjdGl2ZXM6IGFjdGl2ZUxpc3QsXG4gIH07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCBmcmVlemUgYmFsYW5jZSBjb250cmFjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjQgLSBUaGUgYmFzZTY0IGVuY29kZWQgY29udHJhY3QgZGF0YVxuICogQHJldHVybnMge0ZyZWV6ZUJhbGFuY2VDb250cmFjdFBhcmFtZXRlcltdfSAtIEFycmF5IGNvbnRhaW5pbmcgdGhlIGRlY29kZWQgZnJlZXplIGNvbnRyYWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVGcmVlemVCYWxhbmNlVjJDb250cmFjdChiYXNlNjQ6IHN0cmluZyk6IEZyZWV6ZUJhbGFuY2VDb250cmFjdFBhcmFtZXRlcltdIHtcbiAgbGV0IGZyZWV6ZUNvbnRyYWN0OiBGcmVlemVDb250cmFjdERlY29kZWQ7XG4gIHRyeSB7XG4gICAgZnJlZXplQ29udHJhY3QgPSBwcm90b2NvbC5GcmVlemVCYWxhbmNlVjJDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgZnJlZXplIGNvbnRyYWN0IGluIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgfVxuXG4gIGlmICghZnJlZXplQ29udHJhY3Qub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBmcmVlemUgY29udHJhY3QuJyk7XG4gIH1cblxuICBpZiAoZnJlZXplQ29udHJhY3QuZnJvemVuQmFsYW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0Zyb3plbiBiYWxhbmNlIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZnJlZXplIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKGZyZWV6ZUNvbnRyYWN0Lm93bmVyQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcblxuICAvLyBJbiBwcm90b2J1ZjMsIGRlZmF1bHQgdmFsdWVzIChCQU5EV0lEVEggPSAwKSBtYXkgYmUgb21pdHRlZCBmcm9tIHNlcmlhbGl6YXRpb24uXG4gIC8vIElmIHJlc291cmNlIGlzIHVuZGVmaW5lZCwgZGVmYXVsdCB0byBCQU5EV0lEVEguXG4gIGNvbnN0IHJlc291cmNlVmFsdWUgPVxuICAgIGZyZWV6ZUNvbnRyYWN0LnJlc291cmNlID09PSB1bmRlZmluZWQgfHwgZnJlZXplQ29udHJhY3QucmVzb3VyY2UgPT09ICdCQU5EV0lEVEgnXG4gICAgICA/IFRyb25SZXNvdXJjZS5CQU5EV0lEVEhcbiAgICAgIDogVHJvblJlc291cmNlLkVORVJHWTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHBhcmFtZXRlcjoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHJlc291cmNlOiByZXNvdXJjZVZhbHVlLFxuICAgICAgICAgIGZyb3plbl9iYWxhbmNlOiBOdW1iZXIoZnJlZXplQ29udHJhY3QuZnJvemVuQmFsYW5jZSksXG4gICAgICAgICAgb3duZXJfYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggY29ycmVzcG9uZGluZyB3aXRoIHZvdGUgd2l0bmVzcyBjb250cmFjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjQgLSBUaGUgYmFzZTY0IGVuY29kZWQgY29udHJhY3QgZGF0YVxuICogQHJldHVybnMge1ZvdGVXaXRuZXNzQ29udHJhY3RQYXJhbWV0ZXJbXX0gLSBBcnJheSBjb250YWluaW5nIHRoZSBkZWNvZGVkIHZvdGUgd2l0bmVzcyBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVm90ZVdpdG5lc3NDb250cmFjdChiYXNlNjQ6IHN0cmluZyk6IFZvdGVXaXRuZXNzQ29udHJhY3RQYXJhbWV0ZXJbXSB7XG4gIGxldCB2b3RlQ29udHJhY3Q6IFZvdGVDb250cmFjdERlY29kZWQ7XG4gIHRyeSB7XG4gICAgdm90ZUNvbnRyYWN0ID0gcHJvdG9jb2wuVm90ZVdpdG5lc3NDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgdm90ZSBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIXZvdGVDb250cmFjdC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHZvdGUgY29udHJhY3QuJyk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkodm90ZUNvbnRyYWN0LnZvdGVzKSB8fCB2b3RlQ29udHJhY3Qudm90ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1ZvdGVzIGRvIG5vdCBleGlzdCBvciBhcmUgZW1wdHkgaW4gdGhpcyB2b3RlIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgLy8gZGVzZXJpYWxpemUgYXR0cmlidXRlc1xuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odm90ZUNvbnRyYWN0Lm93bmVyQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcblxuICBpbnRlcmZhY2UgVm90ZUl0ZW0ge1xuICAgIHZvdGVBZGRyZXNzPzogc3RyaW5nO1xuICAgIHZvdGVDb3VudD86IHN0cmluZyB8IG51bWJlcjtcbiAgfVxuXG4gIGNvbnN0IHZvdGVzID0gdm90ZUNvbnRyYWN0LnZvdGVzLm1hcCgodm90ZTogVm90ZUl0ZW0pID0+IHtcbiAgICBpZiAoIXZvdGUudm90ZUFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdWb3RlIGFkZHJlc3MgaXMgbWlzc2luZyBpbiBvbmUgb2YgdGhlIHZvdGVzLicpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2b3RlX2FkZHJlc3M6IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgICAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbSh2b3RlLnZvdGVBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICAgICAgKSxcbiAgICAgIHZvdGVfY291bnQ6IE51bWJlcih2b3RlLnZvdGVDb3VudCB8fCAwKSxcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHBhcmFtZXRlcjoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIG93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdm90ZXMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB1bmZyZWV6ZSBiYWxhbmNlIGNvbnRyYWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NCAtIFRoZSBiYXNlNjQgZW5jb2RlZCBjb250cmFjdCBkYXRhXG4gKiBAcmV0dXJucyB7VW5mcmVlemVCYWxhbmNlQ29udHJhY3RQYXJhbWV0ZXJbXX0gLSBBcnJheSBjb250YWluaW5nIHRoZSBkZWNvZGVkIHVuZnJlZXplIGNvbnRyYWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0KGJhc2U2NDogc3RyaW5nKTogVW5mcmVlemVCYWxhbmNlQ29udHJhY3RQYXJhbWV0ZXJbXSB7XG4gIGxldCB1bmZyZWV6ZUNvbnRyYWN0OiBVbmZyZWV6ZUNvbnRyYWN0RGVjb2RlZDtcbiAgdHJ5IHtcbiAgICB1bmZyZWV6ZUNvbnRyYWN0ID0gcHJvdG9jb2wuVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgdW5mcmVlemUgY29udHJhY3QgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCF1bmZyZWV6ZUNvbnRyYWN0Lm93bmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdPd25lciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgdW5mcmVlemUgY29udHJhY3QuJyk7XG4gIH1cblxuICBpZiAodW5mcmVlemVDb250cmFjdC51bmZyZWV6ZUJhbGFuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdVbmZyZWV6ZSBiYWxhbmNlIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgdW5mcmVlemUgY29udHJhY3QuJyk7XG4gIH1cblxuICAvLyBkZXNlcmlhbGl6ZSBhdHRyaWJ1dGVzXG4gIGNvbnN0IG93bmVyX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbSh1bmZyZWV6ZUNvbnRyYWN0Lm93bmVyQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcblxuICAvLyBJbiBwcm90b2J1ZjMsIGRlZmF1bHQgdmFsdWVzIChCQU5EV0lEVEggPSAwKSBtYXkgYmUgb21pdHRlZCBmcm9tIHNlcmlhbGl6YXRpb24uXG4gIC8vIElmIHJlc291cmNlIGlzIHVuZGVmaW5lZCwgZGVmYXVsdCB0byBCQU5EV0lEVEguXG4gIGNvbnN0IHJlc291cmNlVmFsdWUgPSB1bmZyZWV6ZUNvbnRyYWN0LnJlc291cmNlO1xuICBjb25zdCByZXNvdXJjZUVudW0gPVxuICAgIHJlc291cmNlVmFsdWUgPT09IHVuZGVmaW5lZCB8fCByZXNvdXJjZVZhbHVlID09PSBwcm90b2NvbC5SZXNvdXJjZUNvZGUuQkFORFdJRFRIXG4gICAgICA/IFRyb25SZXNvdXJjZS5CQU5EV0lEVEhcbiAgICAgIDogVHJvblJlc291cmNlLkVORVJHWTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHBhcmFtZXRlcjoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHJlc291cmNlOiByZXNvdXJjZUVudW0sXG4gICAgICAgICAgdW5mcmVlemVfYmFsYW5jZTogTnVtYmVyKHVuZnJlZXplQ29udHJhY3QudW5mcmVlemVCYWxhbmNlKSxcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCBjb3JyZXNwb25kaW5nIHdpdGggd2l0aGRyYXcgYmFsYW5jZSBjb250cmFjdFxuICogRGVjb2RlZCBjb250cmFjdCBpcyB0aGUgc2FtZSBhcyB3aXRoZHJhdyBleHBpcmUgdW5mcmVlemVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0IC0gVGhlIGJhc2U2NCBlbmNvZGVkIGNvbnRyYWN0IGRhdGFcbiAqIEByZXR1cm5zIHtXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3RQYXJhbWV0ZXJbXX0gLSBBcnJheSBjb250YWluaW5nIHRoZSBkZWNvZGVkIHdpdGhkcmF3IGNvbnRyYWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVXaXRoZHJhd0JhbGFuY2VDb250cmFjdChiYXNlNjQ6IHN0cmluZyk6IFdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdFBhcmFtZXRlcltdIHtcbiAgbGV0IHdpdGhkcmF3Q29udHJhY3Q6IFdpdGhkcmF3Q29udHJhY3REZWNvZGVkO1xuICB0cnkge1xuICAgIHdpdGhkcmF3Q29udHJhY3QgPSBwcm90b2NvbC5XaXRoZHJhd0JhbGFuY2VDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgd2l0aGRyYXcgY29udHJhY3QgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCF3aXRoZHJhd0NvbnRyYWN0Lm93bmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdPd25lciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgd2l0aGRyYXcgY29udHJhY3QuJyk7XG4gIH1cblxuICAvLyBkZXNlcmlhbGl6ZSBhdHRyaWJ1dGVzXG4gIGNvbnN0IG93bmVyX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbSh3aXRoZHJhd0NvbnRyYWN0Lm93bmVyQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHBhcmFtZXRlcjoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIG93bmVyX2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB3aXRoZHJhdyBleHBpcmUgdW5mcmVlemUgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0IC0gVGhlIGJhc2U2NCBlbmNvZGVkIGNvbnRyYWN0IGRhdGFcbiAqIEByZXR1cm5zIHtXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3RQYXJhbWV0ZXJbXX0gLSBBcnJheSBjb250YWluaW5nIHRoZSBkZWNvZGVkIHdpdGhkcmF3IGNvbnRyYWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3RQYXJhbWV0ZXJbXSB7XG4gIGxldCB3aXRoZHJhd0NvbnRyYWN0OiBXaXRoZHJhd0NvbnRyYWN0RGVjb2RlZDtcbiAgdHJ5IHtcbiAgICB3aXRoZHJhd0NvbnRyYWN0ID0gcHJvdG9jb2wuV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIHdpdGhkcmF3IGNvbnRyYWN0IGluIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgfVxuXG4gIGlmICghd2l0aGRyYXdDb250cmFjdC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHdpdGhkcmF3IGNvbnRyYWN0LicpO1xuICB9XG5cbiAgLy8gZGVzZXJpYWxpemUgYXR0cmlidXRlc1xuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20od2l0aGRyYXdDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCBjb3JyZXNwb25kaW5nIHdpdGggZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0IC0gVGhlIGJhc2U2NCBlbmNvZGVkIGNvbnRyYWN0IGRhdGFcbiAqIEByZXR1cm5zIHtSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdFBhcmFtZXRlcltdfSAtIEFycmF5IGNvbnRhaW5pbmcgdGhlIGRlY29kZWQgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZURlbGVnYXRlUmVzb3VyY2VDb250cmFjdChiYXNlNjQ6IHN0cmluZyk6IFJlc291cmNlTWFuYWdlbWVudENvbnRyYWN0UGFyYW1ldGVyW10ge1xuICBsZXQgZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0OiBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdERlY29kZWQ7XG4gIHRyeSB7XG4gICAgZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0ID0gcHJvdG9jb2wuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LmRlY29kZShCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKSkudG9KU09OKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSBkZWxlZ2F0ZSByZXNvdXJjZSBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIWRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRlbGVnYXRlIHJlc291cmNlIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCFkZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucmVjZWl2ZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1JlY2VpdmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkZWxlZ2F0ZSByZXNvdXJjZSBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGlmIChkZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QuYmFsYW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0JhbGFuY2UgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkZWxlZ2F0ZSByZXNvdXJjZSBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGNvbnN0IG93bmVyX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShkZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuXG4gIGNvbnN0IHJlY2VpdmVyX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShkZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucmVjZWl2ZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuXG4gIC8vIEluIHByb3RvYnVmMywgZGVmYXVsdCB2YWx1ZXMgKEJBTkRXSURUSCA9IDApIG1heSBiZSBvbWl0dGVkIGZyb20gc2VyaWFsaXphdGlvbi5cbiAgLy8gSWYgcmVzb3VyY2UgaXMgdW5kZWZpbmVkIG9yIGZhbHN5LCBkZWZhdWx0IHRvIEJBTkRXSURUSC5cbiAgY29uc3QgcmVzb3VyY2VWYWx1ZSA9ICFkZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucmVzb3VyY2UgPyBUcm9uUmVzb3VyY2UuQkFORFdJRFRIIDogVHJvblJlc291cmNlLkVORVJHWTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHBhcmFtZXRlcjoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHJlc291cmNlOiByZXNvdXJjZVZhbHVlLFxuICAgICAgICAgIGJhbGFuY2U6IE51bWJlcihkZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QuYmFsYW5jZSksXG4gICAgICAgICAgb3duZXJfYWRkcmVzcyxcbiAgICAgICAgICByZWNlaXZlcl9hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCBjb3JyZXNwb25kaW5nIHdpdGggdW5kZWxlZ2F0ZSByZXNvdXJjZSBjb250cmFjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjQgLSBUaGUgYmFzZTY0IGVuY29kZWQgY29udHJhY3QgZGF0YVxuICogQHJldHVybnMge1Jlc291cmNlTWFuYWdlbWVudENvbnRyYWN0UGFyYW1ldGVyW119IC0gQXJyYXkgY29udGFpbmluZyB0aGUgZGVjb2RlZCB1bmRlbGVnYXRlIHJlc291cmNlIGNvbnRyYWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdChiYXNlNjQ6IHN0cmluZyk6IFJlc291cmNlTWFuYWdlbWVudENvbnRyYWN0UGFyYW1ldGVyW10ge1xuICBsZXQgdW5kZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Q6IFJlc291cmNlTWFuYWdlbWVudENvbnRyYWN0RGVjb2RlZDtcbiAgdHJ5IHtcbiAgICB1bmRlbGVnYXRlUmVzb3VyY2VDb250cmFjdCA9IHByb3RvY29sLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LmRlY29kZShCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKSkudG9KU09OKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSBkZWxlZ2F0ZSByZXNvdXJjZSBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIXVuZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0Lm93bmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdPd25lciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QuJyk7XG4gIH1cblxuICBpZiAoIXVuZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnJlY2VpdmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdSZWNlaXZlciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QuJyk7XG4gIH1cblxuICBpZiAodW5kZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QuYmFsYW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0JhbGFuY2UgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkZWxlZ2F0ZSByZXNvdXJjZSBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGNvbnN0IG93bmVyX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbSh1bmRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgY29uc3QgcmVjZWl2ZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKHVuZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnJlY2VpdmVyQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcblxuICAvLyBJbiBwcm90b2J1ZjMsIGRlZmF1bHQgdmFsdWVzIChCQU5EV0lEVEggPSAwKSBtYXkgYmUgb21pdHRlZCBmcm9tIHNlcmlhbGl6YXRpb24uXG4gIC8vIElmIHJlc291cmNlIGlzIHVuZGVmaW5lZCBvciBmYWxzeSwgZGVmYXVsdCB0byBCQU5EV0lEVEguXG4gIGNvbnN0IHJlc291cmNlVmFsdWUgPSAhdW5kZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QucmVzb3VyY2UgPyBUcm9uUmVzb3VyY2UuQkFORFdJRFRIIDogVHJvblJlc291cmNlLkVORVJHWTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHBhcmFtZXRlcjoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHJlc291cmNlOiByZXNvdXJjZVZhbHVlLFxuICAgICAgICAgIGJhbGFuY2U6IE51bWJlcih1bmRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5iYWxhbmNlKSxcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHJlY2VpdmVyX2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB0aGUgYWNjb3VudCBjcmVhdGUgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHZhbHVlIC0gVGhlIHJhdyBwcm90b2J1ZiBieXRlcyBmcm9tIHRoZSBjb250cmFjdCBwYXJhbWV0ZXJcbiAqIEByZXR1cm5zIHtBY2NvdW50Q3JlYXRlQ29udHJhY3RbXX0gLSBBcnJheSBjb250YWluaW5nIHRoZSBkZWNvZGVkIGFjY291bnQgY3JlYXRlIGNvbnRyYWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVBY2NvdW50Q3JlYXRlQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBBY2NvdW50Q3JlYXRlQ29udHJhY3RbXSB7XG4gIGxldCBkZWNvZGVkOiBBY2NvdW50Q3JlYXRlQ29udHJhY3REZWNvZGVkO1xuICB0cnkge1xuICAgIGRlY29kZWQgPSBwcm90b2NvbC5BY2NvdW50Q3JlYXRlQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIGFjY291bnQgY3JlYXRlIGNvbnRyYWN0IGluIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgfVxuXG4gIGlmICghZGVjb2RlZC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGFjY291bnQgY3JlYXRlIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCFkZWNvZGVkLmFjY291bnRBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0FjY291bnQgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGFjY291bnQgY3JlYXRlIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKGRlY29kZWQub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCBhY2NvdW50X2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShkZWNvZGVkLmFjY291bnRBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgb3duZXJfYWRkcmVzcyxcbiAgICAgICAgICBhY2NvdW50X2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogQHBhcmFtIHJhd1xuICovXG5mdW5jdGlvbiBjcmVhdGVQZXJtaXNzaW9uKHJhdzogeyBwZXJtaXNzaW9uTmFtZTogc3RyaW5nOyB0aHJlc2hvbGQ6IG51bWJlciB9KTogUGVybWlzc2lvbiB7XG4gIGxldCBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGU7XG4gIGNvbnN0IHBlcm1pc3Npb24gPSByYXcucGVybWlzc2lvbk5hbWUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGlmIChwZXJtaXNzaW9uID09PSAnb3duZXInKSB7XG4gICAgcGVybWlzc2lvblR5cGUgPSBQZXJtaXNzaW9uVHlwZS5Pd25lcjtcbiAgfSBlbHNlIGlmIChwZXJtaXNzaW9uID09PSAnd2l0bmVzcycpIHtcbiAgICBwZXJtaXNzaW9uVHlwZSA9IFBlcm1pc3Npb25UeXBlLldpdG5lc3M7XG4gIH0gZWxzZSBpZiAocGVybWlzc2lvbi5zdWJzdHIoMCwgNikgPT09ICdhY3RpdmUnKSB7XG4gICAgcGVybWlzc2lvblR5cGUgPSBQZXJtaXNzaW9uVHlwZS5BY3RpdmU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1Blcm1pc3Npb24gdHlwZSBub3QgcGFyc2VhYmxlLicpO1xuICB9XG4gIHJldHVybiB7IHR5cGU6IHBlcm1pc3Npb25UeXBlLCB0aHJlc2hvbGQ6IHJhdy50aHJlc2hvbGQgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUeEpzb25TdHJpbmcocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pO1xuICByZXR1cm4gdHJhbnNhY3Rpb24uaGFzT3duUHJvcGVydHkoJ3R4SUQnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHJhdyB0cmFuc2FjdGlvbiBhY2NvbW1vZGF0ZXMgdG8gYml0Z28ncyBwcmVmZXJyZWQgZm9ybWF0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1RyYW5zYWN0aW9uIC0gVGhlIHJhdyB0cmFuc2FjdGlvbiB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUmF3VHJhbnNhY3Rpb25Gb3JtYXQocmF3VHJhbnNhY3Rpb246IGFueSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJyAmJiAoaXNWYWxpZEhleChyYXdUcmFuc2FjdGlvbikgfHwgaXNWYWxpZFR4SnNvblN0cmluZyhyYXdUcmFuc2FjdGlvbikpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaGV4IHN0cmluZyBvZiB0aGUgZ2l2ZW4gYnVmZmVyXG4gKlxuICogQHBhcmFtIHtCdWZmZXIgfCBVaW50OEFycmF5fSBidWZmZXIgLSB0aGUgYnVmZmVyIHRvIGJlIGNvbnZlcnRlZCB0byBoZXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9IZXgoYnVmZmVyOiBCdWZmZXIgfCBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgcmV0dXJuIGhleC5lbmNvZGUoYnVmZmVyLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgS2VjY2FrLTI1NiBlbmNvZGVkIHN0cmluZyBvZiB0aGUgcGFyYW1ldGVyc1xuICpcbiAqIEBwYXJhbSB0eXBlcyAtIHN0cmluZ3MgZGVzY3JpYmluZyB0aGUgdHlwZXMgb2YgdGhlIHZhbHVlc1xuICogQHBhcmFtIHZhbHVlcyAtIHZhbHVlIHRvIGVuY29kZVxuICogQHBhcmFtIG1ldGhvZElkIC0gdGhlIGZpcnN0IDQgYnl0ZXMgb2YgdGhlIGZ1bmN0aW9uIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVEYXRhUGFyYW1zKHR5cGVzOiBzdHJpbmdbXSwgdmFsdWVzOiBhbnlbXSwgbWV0aG9kSWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICB0eXBlcy5mb3JFYWNoKCh0eXBlLCBpbmRleCkgPT4ge1xuICAgIGlmICh0eXBlID09ICdhZGRyZXNzJykge1xuICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlc1tpbmRleF0ucmVwbGFjZShBRERSRVNTX1BSRUZJWF9SRUdFWCwgJzB4Jyk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBhYmlDb2RlciA9IG5ldyBBYmlDb2RlcigpO1xuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gYWJpQ29kZXIuZW5jb2RlKHR5cGVzLCB2YWx1ZXMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYFRoZXJlIHdhcyBhbiBlcnJvciBlbmNvZGluZyB0aGUgZGF0YSBwYXJhbXMuIEVycm9yID0gJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgfVxuICBpZiAobWV0aG9kSWQpIHtcbiAgICByZXR1cm4gaGV4Q29uY2F0KFttZXRob2RJZCwgZGF0YV0pLnJlcGxhY2UoL14oMHgpLywgJycpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL14oMHgpLywgJycpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVjb2RlZCB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBhcnJheSBvZiB0eXBlc1xuICpcbiAqIEBwYXJhbSB0eXBlcyAtIHN0cmluZ3MgZGVzY3JpYmluZyB0aGUgdHlwZXMgb2YgdGhlIHZhbHVlc1xuICogQHBhcmFtIGRhdGEgLSBlbmNvZGVkIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRGF0YVBhcmFtcyh0eXBlczogc3RyaW5nW10sIGRhdGE6IHN0cmluZyk6IGFueVtdIHtcbiAgY29uc3QgYWJpQ29kZXIgPSBuZXcgQWJpQ29kZXIoKTtcbiAgZGF0YSA9ICcweCcgKyBkYXRhLnN1YnN0cmluZyg4KTtcbiAgcmV0dXJuIGFiaUNvZGVyLmRlY29kZSh0eXBlcywgZGF0YSkucmVkdWNlKChvYmosIGFyZywgaW5kZXgpID0+IHtcbiAgICBpZiAodHlwZXNbaW5kZXhdID09ICdhZGRyZXNzJykgYXJnID0gQUREUkVTU19QUkVGSVggKyBhcmcuc3Vic3RyKDIpLnRvTG93ZXJDYXNlKCk7XG4gICAgb2JqLnB1c2goYXJnKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LCBbXSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgcmF3X2RhdGFfaGV4IGZvciBhIFRST04gdHJhbnNhY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmF3RGF0YSAtIFRoZSB0cmFuc2FjdGlvbiByYXcgZGF0YSBvYmplY3QgY29udGFpbmluZzpcbiAqIEBwYXJhbSB7QXJyYXl9IHJhd0RhdGEuY29udHJhY3QgLSBBcnJheSBvZiBjb250cmFjdCBvYmplY3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3RGF0YS5yZWZCbG9ja0J5dGVzIC0gUmVmZXJlbmNlIGJsb2NrIGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3RGF0YS5yZWZCbG9ja0hhc2ggLSBSZWZlcmVuY2UgYmxvY2sgaGFzaFxuICogQHBhcmFtIHtudW1iZXJ9IHJhd0RhdGEuZXhwaXJhdGlvbiAtIFRyYW5zYWN0aW9uIGV4cGlyYXRpb24gdGltZXN0YW1wXG4gKiBAcGFyYW0ge251bWJlcn0gcmF3RGF0YS50aW1lc3RhbXAgLSBUcmFuc2FjdGlvbiBjcmVhdGlvbiB0aW1lc3RhbXBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmF3RGF0YS5mZWVMaW1pdF0gLSBPcHRpb25hbCBmZWUgbGltaXQgZm9yIHNtYXJ0IGNvbnRyYWN0c1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVuY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSYXdEYXRhSGV4KFxuICByYXdEYXRhOiB7XG4gICAgY29udHJhY3Q/OiBwcm90b2NvbC5UcmFuc2FjdGlvbi5Db250cmFjdFtdO1xuICAgIHJlZkJsb2NrQnl0ZXM/OiBzdHJpbmc7XG4gICAgcmVmQmxvY2tIYXNoPzogc3RyaW5nO1xuICAgIGV4cGlyYXRpb24/OiBudW1iZXI7XG4gICAgdGltZXN0YW1wPzogbnVtYmVyO1xuICAgIGZlZUxpbWl0PzogbnVtYmVyO1xuICB9ID0ge31cbik6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgLy8gUHJvY2VzcyBjb250cmFjdHMgdG8gZW5zdXJlIHByb3BlciBwcm90b2J1ZiBlbmNvZGluZ1xuICAgIGxldCBwcm9jZXNzZWRDb250cmFjdHMgPSByYXdEYXRhLmNvbnRyYWN0O1xuICAgIGlmIChyYXdEYXRhLmNvbnRyYWN0ICYmIHJhd0RhdGEuY29udHJhY3QubGVuZ3RoID4gMCkge1xuICAgICAgcHJvY2Vzc2VkQ29udHJhY3RzID0gcmF3RGF0YS5jb250cmFjdC5tYXAoKGNvbnRyYWN0KSA9PiB7XG4gICAgICAgIC8vIEhhbmRsZSBUcmFuc2ZlckNvbnRyYWN0IHNwZWNpZmljYWxseVxuICAgICAgICBpZiAoY29udHJhY3QucGFyYW1ldGVyPy50eXBlX3VybCA9PT0gJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVHJhbnNmZXJDb250cmFjdCcpIHtcbiAgICAgICAgICBjb25zdCBjb250cmFjdFZhbHVlID0gY29udHJhY3QucGFyYW1ldGVyLnZhbHVlIGFzIGFueTtcblxuICAgICAgICAgIC8vIENyZWF0ZSB0aGUgcHJvdG9idWYgY29udHJhY3Qgb2JqZWN0XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJDb250cmFjdDogYW55ID0ge307XG5cbiAgICAgICAgICAvLyBIYW5kbGUgb3duZXJfYWRkcmVzcyAocmVxdWlyZWQgZmllbGQpXG4gICAgICAgICAgaWYgKGNvbnRyYWN0VmFsdWUub3duZXJfYWRkcmVzcykge1xuICAgICAgICAgICAgdHJhbnNmZXJDb250cmFjdC5vd25lckFkZHJlc3MgPSBCdWZmZXIuZnJvbShjb250cmFjdFZhbHVlLm93bmVyX2FkZHJlc3MsICdoZXgnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBIYW5kbGUgdG9fYWRkcmVzcyAocmVxdWlyZWQgZmllbGQpXG4gICAgICAgICAgaWYgKGNvbnRyYWN0VmFsdWUudG9fYWRkcmVzcykge1xuICAgICAgICAgICAgdHJhbnNmZXJDb250cmFjdC50b0FkZHJlc3MgPSBCdWZmZXIuZnJvbShjb250cmFjdFZhbHVlLnRvX2FkZHJlc3MsICdoZXgnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBIYW5kbGUgYW1vdW50IChyZXF1aXJlZCBmaWVsZClcbiAgICAgICAgICBpZiAoY29udHJhY3RWYWx1ZS5hbW91bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHJhbnNmZXJDb250cmFjdC5hbW91bnQgPSBjb250cmFjdFZhbHVlLmFtb3VudDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBFbmNvZGUgdGhlIGNvbnRyYWN0IHVzaW5nIHByb3RvYnVmXG4gICAgICAgICAgY29uc3QgZW5jb2RlZENvbnRyYWN0ID0gcHJvdG9jb2wuVHJhbnNmZXJDb250cmFjdC5lbmNvZGUodHJhbnNmZXJDb250cmFjdCkuZmluaXNoKCk7XG4gICAgICAgICAgY29uc3QgYmFzZTY0VmFsdWUgPSBCdWZmZXIuZnJvbShlbmNvZGVkQ29udHJhY3QpLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb250cmFjdCxcbiAgICAgICAgICAgIHBhcmFtZXRlcjoge1xuICAgICAgICAgICAgICAuLi5jb250cmFjdC5wYXJhbWV0ZXIsXG4gICAgICAgICAgICAgIHZhbHVlOiBiYXNlNjRWYWx1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBhbnk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udHJhY3Q7XG4gICAgICB9KSBhcyBwcm90b2NvbC5UcmFuc2FjdGlvbi5Db250cmFjdFtdO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSByYXcgdHJhbnNhY3Rpb24gb2JqZWN0IG1hdGNoaW5nIHByb3RvYnVmIHNjaGVtYVxuICAgIGNvbnN0IHJhd1R4OiBwcm90b2NvbC5UcmFuc2FjdGlvbi5JcmF3ID0ge1xuICAgICAgY29udHJhY3Q6IHByb2Nlc3NlZENvbnRyYWN0cyxcbiAgICAgIHJlZkJsb2NrQnl0ZXM6IHJhd0RhdGEucmVmQmxvY2tCeXRlcyA/IEJ1ZmZlci5mcm9tKHJhd0RhdGEucmVmQmxvY2tCeXRlcywgJ2hleCcpIDogdW5kZWZpbmVkLFxuICAgICAgcmVmQmxvY2tIYXNoOiByYXdEYXRhLnJlZkJsb2NrSGFzaCA/IEJ1ZmZlci5mcm9tKHJhd0RhdGEucmVmQmxvY2tIYXNoLCAnaGV4JykgOiB1bmRlZmluZWQsXG4gICAgICBleHBpcmF0aW9uOiByYXdEYXRhLmV4cGlyYXRpb24sXG4gICAgICB0aW1lc3RhbXA6IHJhd0RhdGEudGltZXN0YW1wLFxuICAgICAgZmVlTGltaXQ6IHJhd0RhdGEuZmVlTGltaXQsXG4gICAgfTtcblxuICAgIC8vIEVuY29kZSB1c2luZyBwcm90b2J1ZiBhbmQgZ2V0IGZpbmFsIGJ5dGVzXG4gICAgY29uc3QgZW5jb2RlZEJ5dGVzID0gcHJvdG9jb2wuVHJhbnNhY3Rpb24ucmF3LmVuY29kZShyYXdUeCkuZmluaXNoKCk7XG5cbiAgICAvLyBDb252ZXJ0IHRvIGhleCBzdHJpbmdcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZW5jb2RlZEJ5dGVzKS50b1N0cmluZygnaGV4Jyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIHJhdyBkYXRhIGhleDogJyArIGUubWVzc2FnZSk7XG4gIH1cbn1cbiJdfQ==
905
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThEQSx3REFRQztBQUtELDBDQUVDO0FBU0Qsb0NBR0M7QUFRRCx3RUFRQztBQUtELGdFQUVDO0FBS0QsZ0VBRUM7QUFFRCx3RUFZQztBQVFELDBDQW1CQztBQUlELGtEQUVDO0FBS0Qsb0RBRUM7QUFLRCxzRUFFQztBQUtELDBEQUdDO0FBTUQsMENBRUM7QUFPRCxnQ0FFQztBQUtELDBEQUVDO0FBT0QsOENBK0VDO0FBU0Qsb0RBMEJDO0FBUUQsNENBR0M7QUFPRCxnQ0FFQztBQU1ELHdEQTBDQztBQVFELGdFQXVDQztBQVNELHNGQXNCQztBQVFELHNFQXNDQztBQVFELDhEQWlEQztBQVFELDBFQXdDQztBQVNELHNFQTBCQztBQVFELG9GQTBCQztBQVFELHdFQTRDQztBQVFELDRFQTRDQztBQVFELGtFQWlDQztBQXVCRCxrREFHQztBQVFELGtFQUtDO0FBUUQsc0JBRUM7QUFTRCw0Q0FtQkM7QUFRRCw0Q0FRQztBQWNELGdEQXdFQztBQS8vQkQsb0RBQTRCO0FBQzVCLG9EQUFzQztBQUN0QyxpREFBbUM7QUFDbkMsd0RBQXlEO0FBRXpELG1EQUFrRDtBQUNsRCxpREFBMkQ7QUFxQjNELGlDQUFvRTtBQUNwRSw0Q0FBdUQ7QUFDdkQsMkNBQTJFO0FBRTlELFFBQUEsMEJBQTBCLEdBQUcsUUFBUSxDQUFDLENBQUMsVUFBVTtBQUNqRCxRQUFBLDhCQUE4QixHQUFHLFFBQVEsQ0FBQyxDQUFDLGNBQWM7QUFDdEUsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBSTVCLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBTyxHQUFHLFNBQVMsRUFBRSxFQUFFO0lBQzVDLE9BQ0UsZUFBSztT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WUFDdkMsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QixhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzVGLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDekYsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7U0FDM0IsQ0FBQztRQUVGLDRDQUE0QztRQUM1QyxNQUFNLFlBQVksR0FBRyxlQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFckUsd0JBQXdCO1FBQ3hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUkscUJBQVUsQ0FBQyxtQ0FBbUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBoZXggZnJvbSAnQHN0YWJsZWxpYi9oZXgnO1xuaW1wb3J0ICogYXMgdHJvbndlYiBmcm9tICd0cm9ud2ViJztcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Byb3RvYnVmL3Ryb24nO1xuXG5pbXBvcnQgeyBVdGlsc0Vycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJvbkVyYzIwQ29pbiwgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIFRyYW5zZmVyQ29udHJhY3QsXG4gIFJhd0RhdGEsXG4gIEFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QsXG4gIFRyYW5zYWN0aW9uUmVjZWlwdCxcbiAgUGVybWlzc2lvbixcbiAgVHJpZ2dlclNtYXJ0Q29udHJhY3QsXG4gIEZyZWV6ZUJhbGFuY2VDb250cmFjdFBhcmFtZXRlcixcbiAgVm90ZVdpdG5lc3NDb250cmFjdFBhcmFtZXRlcixcbiAgRnJlZXplQ29udHJhY3REZWNvZGVkLFxuICBWb3RlQ29udHJhY3REZWNvZGVkLFxuICBVbmZyZWV6ZUJhbGFuY2VDb250cmFjdFBhcmFtZXRlcixcbiAgV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0UGFyYW1ldGVyLFxuICBVbmZyZWV6ZUNvbnRyYWN0RGVjb2RlZCxcbiAgV2l0aGRyYXdDb250cmFjdERlY29kZWQsXG4gIFJlc291cmNlTWFuYWdlbWVudENvbnRyYWN0UGFyYW1ldGVyLFxuICBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdERlY29kZWQsXG4gIEFjY291bnRDcmVhdGVDb250cmFjdCxcbiAgQWNjb3VudENyZWF0ZUNvbnRyYWN0RGVjb2RlZCxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBDb250cmFjdFR5cGUsIFBlcm1pc3Npb25UeXBlLCBUcm9uUmVzb3VyY2UgfSBmcm9tICcuL2VudW0nO1xuaW1wb3J0IHsgQWJpQ29kZXIsIGhleENvbmNhdCB9IGZyb20gJ2V0aGVycy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgREVMRUdBVElPTl9UWVBFX1VSTCwgQUNDT1VOVF9DUkVBVEVfVFlQRV9VUkwgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBUUkFOU0FDVElPTl9NQVhfRVhQSVJBVElPTiA9IDg2NDAwMDAwOyAvLyBvbmUgZGF5XG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05fREVGQVVMVF9FWFBJUkFUSU9OID0gMTA4MDAwMDA7IC8vIHRocmVlIGhvdXJzXG5jb25zdCBBRERSRVNTX1BSRUZJWF9SRUdFWCA9IC9eKDQxKS87XG5jb25zdCBBRERSRVNTX1BSRUZJWCA9ICc0MSc7XG5cbmV4cG9ydCB0eXBlIEJ5dGVzTGlrZSA9IG51bWJlcltdIHwgVWludDhBcnJheTtcblxuY29uc3QgZ2V0VHJvblRva2VucyA9IChuZXR3b3JrID0gJ21haW5uZXQnKSA9PiB7XG4gIHJldHVybiAoXG4gICAgY29pbnNcbiAgICAgIC5maWx0ZXIoKGNvaW4pID0+IGNvaW4uZmFtaWx5ID09PSAndHJ4JylcbiAgICAgIC5maWx0ZXIoKHRyeCkgPT4gdHJ4Lm5ldHdvcmsudHlwZSA9PT0gbmV0d29yayAmJiB0cnguaXNUb2tlbikgYXMgdW5rbm93biBhcyBUcm9uRXJjMjBDb2luW11cbiAgKS5tYXAoKGNvaW5zKSA9PiBjb2lucy5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9rZW5NYWlubmV0Q29udHJhY3RBZGRyZXNzZXMgPSBnZXRUcm9uVG9rZW5zKCdtYWlubmV0Jyk7XG5leHBvcnQgY29uc3QgdG9rZW5UZXN0bmV0Q29udHJhY3RBZGRyZXNzZXMgPSBnZXRUcm9uVG9rZW5zKCd0ZXN0bmV0Jyk7XG4vKipcbiAqIFRyb24tc3BlY2lmaWMgaGVscGVyIGZ1bmN0aW9uc1xuICovXG5leHBvcnQgdHlwZSBCeXRlQXJyYXkgPSBudW1iZXJbXTtcbmV4cG9ydCB0eXBlIFRyb25CaW5hcnlMaWtlID0gQnl0ZUFycmF5IHwgQnVmZmVyIHwgVWludDhBcnJheSB8IHN0cmluZztcblxuZXhwb3J0IGNvbnN0IFZBTElEX1JFU09VUkNFX1RZUEVTID0gWydFTkVSR1knLCAnQkFORFdJRFRIJ107XG5leHBvcnQgY29uc3QgQkFTRTU4X0FMUEhBQkVUID0gJzEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXonO1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgdW5pcXVlIGNoYXJhY3RlcnMgaW4gdGhlIGlucHV0IHN0cmluZyB0aGF0IGRvIG5vdCBiZWxvbmcgdG8gdGhlIEJhc2U1OCBhbHBoYWJldC5cbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vbkJhc2U1OENoYXJhY3RlcnModmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaW52YWxpZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGNoIG9mIHZhbHVlKSB7XG4gICAgaWYgKCFCQVNFNThfQUxQSEFCRVQuaW5jbHVkZXMoY2gpKSB7XG4gICAgICBpbnZhbGlkLmFkZChjaCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKGludmFsaWQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Jhc2U1OEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5pc0FkZHJlc3NWYWxpZChhZGRyZXNzKTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIGhleCByZXByZXNlbnRhdGlvbnMgb2YgYSBUUk9OIGFkZHJlc3M6IDB4LXByZWZpeGVkIDIwLWJ5dGUgRVZNLXN0eWxlLFxuICogb3IgNDEtcHJlZml4ZWQgMjEtYnl0ZSBmb3JtLiBCYXJlIDIwLWJ5dGUgaGV4IChubyAweC80MSkgaXMgcmVqZWN0ZWQg4oCUIGl0IGlzIG5vdFxuICogYW4gb24tY2hhaW4gLyBBUEkgYWRkcmVzcyBlbmNvZGluZy5cbiAqXG4gKiBAcGFyYW0gYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNIZXhBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsb3dlciA9IGFkZHJlc3MudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIC9eMHhbMC05YS1mXXs0MH0kLy50ZXN0KGxvd2VyKSB8fCAvXjQxWzAtOWEtZl17NDB9JC8udGVzdChsb3dlcik7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW55IHZhbGlkIFRST04gYWRkcmVzcyByZXByZXNlbnRhdGlvbiAoYmFzZTU4LCAweC1wcmVmaXhlZCBoZXgsXG4gKiBvciA0MS1wcmVmaXhlZCBoZXgpIHRvIHRoZSBjYW5vbmljYWwgYmFzZTU4IGZvcm0uXG4gKlxuICogQHBhcmFtIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoaXNCYXNlNThBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cbiAgY29uc3QgYmFyZSA9IGFkZHJlc3MudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eMHgvLCAnJyk7XG4gIC8vIFRoZSAyMC1ieXRlIEVWTS1zdHlsZSBmb3JtIGxhY2tzIHRoZSAweDQxIFRST04gdmVyc2lvbiBwcmVmaXguXG4gIGNvbnN0IGhleCA9IGJhcmUubGVuZ3RoID09PSA0MCA/ICc0MScgKyBiYXJlIDogYmFyZTtcbiAgcmV0dXJuIGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KGhleCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHN0clxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3Moc3RyOiBzdHJpbmcpOiBCeXRlQXJyYXkge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jb2RlLmhleFN0cjJieXRlQXJyYXkoc3RyLnJlcGxhY2UoJzB4JywgJycpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gYXJyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZXhBZGRyZXNzRnJvbUJ5dGVBcnJheShhcnI6IEJ5dGVBcnJheSk6IHN0cmluZyB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNvZGUuYnl0ZUFycmF5MmhleFN0cihhcnIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKGJhc2U1ODogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gcHVsbGVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9UUk9OLVVTL3Ryb253ZWIvYmxvYi9kY2I4ZWZhMzZhNWViYjY1YzRkYWIzNjI2ZTkwMjU2YTQ1M2YzYjBkL3NyYy91dGlscy9oZWxwLmpzI0wxN1xuICAvLyBidXQgdGhleSBkb24ndCBzdXJmYWNlIHRoaXMgY2FsbCBpbiBpbmRleC5qc1xuICAvLyBjYW5vbmljYWxpemVzIGhleC1mb3JtIGlucHV0cyAoMHguLi4gLyA0MS4uLikgdG8gYmFzZTU4IGZpcnN0LCBzbyBhbGwgYnVpbGRlcnNcbiAgLy8gYWNjZXB0IGV2ZXJ5IHZhbGlkIHJlcHJlc2VudGF0aW9uIG9mIGEgVFJPTiBhZGRyZXNzIChDT0lOUy0xNTc1KVxuICBjb25zdCBjYW5vbmljYWwgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUhleEFkZHJlc3MoYmFzZTU4KTtcbiAgY29uc3QgYnl0ZXMgPSB0cm9ud2ViLnV0aWxzLmNyeXB0by5kZWNvZGVCYXNlNThBZGRyZXNzKGNhbm9uaWNhbCk7XG4gIC8vIEVuc3VyZSBieXRlcyBpcyBhIEJ5dGVBcnJheSAobnVtYmVyW10pXG4gIGlmIChBcnJheS5pc0FycmF5KGJ5dGVzKSkge1xuICAgIHJldHVybiBnZXRIZXhBZGRyZXNzRnJvbUJ5dGVBcnJheShieXRlcyk7XG4gIH1cbiAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0ZhaWxlZCB0byBkZWNvZGUgYmFzZTU4IGFkZHJlc3MgdG8gYnl0ZSBhcnJheScpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBtZXNzYWdlVG9WZXJpZnlcbiAqIEBwYXJhbSBiYXNlNThBZGRyZXNzXG4gKiBAcGFyYW0gc2lnSGV4XG4gKiBAcGFyYW0gdXNlVHJvbkhlYWRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5U2lnbmF0dXJlKFxuICBtZXNzYWdlVG9WZXJpZnk6IHN0cmluZyxcbiAgYmFzZTU4QWRkcmVzczogc3RyaW5nLFxuICBzaWdIZXg6IHN0cmluZyxcbiAgdXNlVHJvbkhlYWRlciA9IHRydWVcbik6IGJvb2xlYW4ge1xuICBpZiAoIWlzVmFsaWRIZXgoc2lnSGV4KSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdzaWduYXR1cmUgaXMgbm90IGluIGEgdmFsaWQgZm9ybWF0LCBuZWVkcyB0byBiZSBoZXhhZGVjaW1hbCcpO1xuICB9XG5cbiAgaWYgKCFpc1ZhbGlkSGV4KG1lc3NhZ2VUb1ZlcmlmeSkpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignbWVzc2FnZSBpcyBub3QgaW4gYSB2YWxpZCBmb3JtYXQsIG5lZWRzIHRvIGJlIGhleGFkZWNpbWFsJyk7XG4gIH1cblxuICBpZiAoIWlzQmFzZTU4QWRkcmVzcyhiYXNlNThBZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdhZGRyZXNzIG5lZWRzIHRvIGJlIGJhc2U1OCBlbmNvZGVkJyk7XG4gIH1cblxuICByZXR1cm4gdHJvbndlYi5UcngudmVyaWZ5U2lnbmF0dXJlKG1lc3NhZ2VUb1ZlcmlmeSwgYmFzZTU4QWRkcmVzcywgc2lnSGV4LCB1c2VUcm9uSGVhZGVyKTtcbn1cbi8qKlxuICogQHBhcmFtIHByaXZhdGVLZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFB1YktleUZyb21QcmlLZXkocHJpdmF0ZUtleTogVHJvbkJpbmFyeUxpa2UpOiBCeXRlQXJyYXkge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uZ2V0UHViS2V5RnJvbVByaUtleShwcml2YXRlS2V5IGFzIEJ5dGVzTGlrZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHByaXZhdGVLZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFkZHJlc3NGcm9tUHJpS2V5KHByaXZhdGVLZXk6IFRyb25CaW5hcnlMaWtlKTogQnl0ZUFycmF5IHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY3J5cHRvLmdldEFkZHJlc3NGcm9tUHJpS2V5KHByaXZhdGVLZXkgYXMgQnl0ZXNMaWtlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoYWRkcmVzczogQnl0ZUFycmF5KTogc3RyaW5nIHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY3J5cHRvLmdldEJhc2U1OENoZWNrQWRkcmVzcyhhZGRyZXNzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gaGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlNThBZGRyZXNzRnJvbUhleChoZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGFyciA9IGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKGhleCk7XG4gIHJldHVybiBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShhcnIpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwcml2YXRlS2V5XG4gKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihwcml2YXRlS2V5OiBzdHJpbmcgfCBCeXRlQXJyYXksIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQpOiBUcmFuc2FjdGlvblJlY2VpcHQge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uc2lnblRyYW5zYWN0aW9uKHByaXZhdGVLZXksIHRyYW5zYWN0aW9uKSBhcyBUcmFuc2FjdGlvblJlY2VpcHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEBwYXJhbSBwcml2YXRlS2V5XG4gKiBAcGFyYW0gdXNlVHJvbkhlYWRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnblN0cmluZyhtZXNzYWdlOiBzdHJpbmcsIHByaXZhdGVLZXk6IHN0cmluZyB8IEJ5dGVBcnJheSwgdXNlVHJvbkhlYWRlciA9IHRydWUpOiBzdHJpbmcge1xuICByZXR1cm4gdHJvbndlYi5Ucnguc2lnblN0cmluZyhtZXNzYWdlLCBwcml2YXRlS2V5IGFzIHN0cmluZywgdXNlVHJvbkhlYWRlcik7XG59XG5cbi8qKlxuICogQHBhcmFtIHB1YkJ5dGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYXdBZGRyZXNzRnJvbVB1YktleShwdWJCeXRlczogVHJvbkJpbmFyeUxpa2UpOiBCeXRlQXJyYXkge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uY29tcHV0ZUFkZHJlc3MocHViQnl0ZXMgYXMgQnl0ZXNMaWtlKTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIGEgaGV4IGVuY29kZWQgdHJhbnNhY3Rpb24gaW4gaXRzIHByb3RvYnVmIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBoZXhTdHJpbmcgcmF3X2RhdGFfaGV4IGZpZWxkIGZyb20gdHJvbiB0cmFuc2FjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRyYW5zYWN0aW9uKGhleFN0cmluZzogc3RyaW5nKTogUmF3RGF0YSB7XG4gIGNvbnN0IHJhd1RyYW5zYWN0aW9uID0gZGVjb2RlUmF3VHJhbnNhY3Rpb24oaGV4U3RyaW5nKTtcblxuICAvLyB0aGVyZSBzaG91bGQgbm90IGJlIG11bHRpcGxlIGNvbnRyYWN0cyBpbiB0aGlzIGRhdGFcbiAgaWYgKHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0cy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignTnVtYmVyIG9mIGNvbnRyYWN0cyBpcyBncmVhdGVyIHRoYW4gMS4nKTtcbiAgfVxuXG4gIGxldCBjb250cmFjdDpcbiAgICB8IFRyYW5zZmVyQ29udHJhY3RbXVxuICAgIHwgQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdFtdXG4gICAgfCBUcmlnZ2VyU21hcnRDb250cmFjdFtdXG4gICAgfCBGcmVlemVCYWxhbmNlQ29udHJhY3RQYXJhbWV0ZXJbXVxuICAgIHwgVm90ZVdpdG5lc3NDb250cmFjdFBhcmFtZXRlcltdXG4gICAgfCBVbmZyZWV6ZUJhbGFuY2VDb250cmFjdFBhcmFtZXRlcltdXG4gICAgfCBXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3RQYXJhbWV0ZXJbXVxuICAgIHwgUmVzb3VyY2VNYW5hZ2VtZW50Q29udHJhY3RQYXJhbWV0ZXJbXTtcblxuICBsZXQgY29udHJhY3RUeXBlOiBDb250cmFjdFR5cGU7XG5cbiAgLy8gZW5zdXJlIHRoZSBjb250cmFjdCB0eXBlIGlzIHN1cHBvcnRlZFxuICBzd2l0Y2ggKHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudHlwZV91cmwpIHtcbiAgICBjYXNlICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLlRyYW5zZmVyQ29udHJhY3QnOlxuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLlRyYW5zZmVyO1xuICAgICAgY29udHJhY3QgPSBleHBvcnRzLmRlY29kZVRyYW5zZmVyQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QnOlxuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlO1xuICAgICAgY29udHJhY3QgPSBleHBvcnRzLmRlY29kZUFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLlRyaWdnZXJTbWFydENvbnRyYWN0JzpcbiAgICAgIGNvbnRyYWN0VHlwZSA9IENvbnRyYWN0VHlwZS5UcmlnZ2VyU21hcnRDb250cmFjdDtcbiAgICAgIGNvbnRyYWN0ID0gZXhwb3J0cy5kZWNvZGVUcmlnZ2VyU21hcnRDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuRnJlZXplQmFsYW5jZVYyQ29udHJhY3QnOlxuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLkZyZWV6ZUJhbGFuY2VWMjtcbiAgICAgIGNvbnRyYWN0ID0gZGVjb2RlRnJlZXplQmFsYW5jZVYyQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLlZvdGVXaXRuZXNzQ29udHJhY3QnOlxuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLlZvdGVXaXRuZXNzO1xuICAgICAgY29udHJhY3QgPSBkZWNvZGVWb3RlV2l0bmVzc0NvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QnOlxuICAgICAgY29udHJhY3QgPSBkZWNvZGVXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QnOlxuICAgICAgY29udHJhY3QgPSBkZWNvZGVXaXRoZHJhd0JhbGFuY2VDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGNvbnRyYWN0VHlwZSA9IENvbnRyYWN0VHlwZS5XaXRoZHJhd0JhbGFuY2U7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QnOlxuICAgICAgY29udHJhY3QgPSBkZWNvZGVVbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLlVuZnJlZXplQmFsYW5jZVYyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBERUxFR0FUSU9OX1RZUEVfVVJMOlxuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdDtcbiAgICAgIGNvbnRyYWN0ID0gZGVjb2RlRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Q7XG4gICAgICBjb250cmFjdCA9IGRlY29kZVVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBBQ0NPVU5UX0NSRUFURV9UWVBFX1VSTDpcbiAgICAgIGNvbnRyYWN0VHlwZSA9IENvbnRyYWN0VHlwZS5BY2NvdW50Q3JlYXRlO1xuICAgICAgY29udHJhY3QgPSBkZWNvZGVBY2NvdW50Q3JlYXRlQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbnRyYWN0IHR5cGUnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29udHJhY3RUeXBlLFxuICAgIGNvbnRyYWN0LFxuICAgIGV4cGlyYXRpb246IHJhd1RyYW5zYWN0aW9uLmV4cGlyYXRpb24sXG4gICAgdGltZXN0YW1wOiByYXdUcmFuc2FjdGlvbi50aW1lc3RhbXAsXG4gICAgcmVmX2Jsb2NrX2J5dGVzOiByYXdUcmFuc2FjdGlvbi5ibG9ja0J5dGVzLFxuICAgIHJlZl9ibG9ja19oYXNoOiByYXdUcmFuc2FjdGlvbi5ibG9ja0hhc2gsXG4gICAgZmVlX2xpbWl0OiArcmF3VHJhbnNhY3Rpb24uZmVlTGltaXQsXG4gIH07XG59XG5cbi8qKlxuICogRGVjb2RlcyBhIHRyYW5zYWN0aW9uJ3MgcmF3IGZpZWxkIGZyb20gYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcuIFRoaXMgaXMgYSBwcm90b2J1ZiByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gaGV4U3RyaW5nIHRoaXMgaXMgdGhlIHJhdyBoZXhhZGVjaW1hbCBlbmNvZGVkIHN0cmluZy4gRG9jIGZvdW5kIGluIHRoZSBmb2xsb3dpbmcgbGluay5cbiAqIEBleGFtcGxlXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vQml0R28vYml0Z28tYWNjb3VudC1saWIvYmxvYi81ZjI4MjU4ODcwMTc3OGE0NDIxYzc1ZmE2MWY0MjcxM2Y1NmU5NWI5L3Jlc291cmNlcy9wcm90b2J1Zi90cm9uLnByb3RvI0wzMTl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVSYXdUcmFuc2FjdGlvbihoZXhTdHJpbmc6IHN0cmluZyk6IHtcbiAgZXhwaXJhdGlvbjogbnVtYmVyO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgY29udHJhY3RzOiBBcnJheTxhbnk+O1xuICBibG9ja0J5dGVzOiBzdHJpbmc7XG4gIGJsb2NrSGFzaDogc3RyaW5nO1xuICBmZWVMaW1pdDogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmZyb20oaGV4U3RyaW5nLCAnaGV4Jyk7XG5cbiAgbGV0IHJhdztcbiAgdHJ5IHtcbiAgICAvLyB3ZSBuZWVkIHRvIGRlY29kZSBvdXIgcmF3X2RhdGFfaGV4IGZpZWxkIGZpcnN0XG4gICAgcmF3ID0gcHJvdG9jb2wuVHJhbnNhY3Rpb24ucmF3LmRlY29kZShieXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSBpbml0aWFsIHJhd19kYXRhX2hleCBmcm9tIHRoZSBzZXJpYWxpemVkIHR4LicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBpcmF0aW9uOiBOdW1iZXIocmF3LmV4cGlyYXRpb24pLFxuICAgIHRpbWVzdGFtcDogTnVtYmVyKHJhdy50aW1lc3RhbXApLFxuICAgIGNvbnRyYWN0czogcmF3LmNvbnRyYWN0LFxuICAgIGJsb2NrQnl0ZXM6IHRvSGV4KHJhdy5yZWZCbG9ja0J5dGVzKSxcbiAgICBmZWVMaW1pdDogcmF3LmZlZUxpbWl0LFxuICAgIGJsb2NrSGFzaDogdG9IZXgocmF3LnJlZkJsb2NrSGFzaCksXG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgdG8gaGV4XG4gKlxuICogQHBhcmFtIGJhc2U2NCAtIFRoZSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgdG8gY29udmVydFxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgaGV4IHJlcHJlc2VudGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZXhGcm9tQmFzZTY0KGJhc2U2NDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0Jyk7XG4gIHJldHVybiBidWZmZXIudG9TdHJpbmcoJ2hleCcpO1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwYXNzZWQgc3RyaW5nIGlzIGEgc2FmZSBoZXggc3RyaW5nIGZvciB0cm9uJ3MgcHVycG9zZXMuXG4gKlxuICogQHBhcmFtIGhleCBBIHZhbGlkIGhleCBzdHJpbmcgbXVzdCBiZSBhIHN0cmluZyBtYWRlIG9mIG51bWJlcnMgYW5kIGNoYXJhY3RlcnMgYW5kIGhhcyBhbiBldmVuIGxlbmd0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRIZXgoaGV4OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9eKDB4KT8oWzAtOWEtZl17Mn0pKyQvaS50ZXN0KGhleCk7XG59XG5cbi8qKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggd2hpY2ggY29ycmVzcG9uZHMgd2l0aCB0aGUgZGV0YWlscyBvZiB0aGUgdHJhbnNmZXJcbiAqXG4gKiBAcGFyYW0gdHJhbnNmZXJIZXggaXMgdGhlIHZhbHVlIHByb3BlcnR5IG9mIHRoZSBcInBhcmFtZXRlclwiIGZpZWxkIG9mIGNvbnRyYWN0TGlzdFswXVxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUcmFuc2ZlckNvbnRyYWN0KHRyYW5zZmVySGV4OiBzdHJpbmcpOiBUcmFuc2ZlckNvbnRyYWN0W10ge1xuICBjb25zdCBjb250cmFjdEJ5dGVzID0gQnVmZmVyLmZyb20odHJhbnNmZXJIZXgsICdiYXNlNjQnKTtcbiAgbGV0IHRyYW5zZmVyQ29udHJhY3Q7XG5cbiAgdHJ5IHtcbiAgICB0cmFuc2ZlckNvbnRyYWN0ID0gcHJvdG9jb2wuVHJhbnNmZXJDb250cmFjdC5kZWNvZGUoY29udHJhY3RCeXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSB0cmFuc2ZlciBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIXRyYW5zZmVyQ29udHJhY3Qub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB0cmFuc2ZlciBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGlmICghdHJhbnNmZXJDb250cmFjdC50b0FkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignRGVzdGluYXRpb24gYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHRyYW5zZmVyIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCF0cmFuc2ZlckNvbnRyYWN0Lmhhc093blByb3BlcnR5KCdhbW91bnQnKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdBbW91bnQgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB0cmFuc2ZlciBjb250cmFjdC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKHRyYW5zZmVyQ29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCB0b19hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odHJhbnNmZXJDb250cmFjdC50b0FkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IGFtb3VudCA9IHRyYW5zZmVyQ29udHJhY3QuYW1vdW50O1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgYW1vdW50OiBOdW1iZXIoYW1vdW50KSxcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHRvX2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB0cmlnZ2VyIHNtYXJ0IGNvbnRyYWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NFxuICogQHJldHVybnMge0FjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUcmlnZ2VyU21hcnRDb250cmFjdChiYXNlNjQ6IHN0cmluZyk6IFRyaWdnZXJTbWFydENvbnRyYWN0W10ge1xuICBsZXQgY29udHJhY3RDYWxsRGVjb2RlZDtcbiAgdHJ5IHtcbiAgICBjb250cmFjdENhbGxEZWNvZGVkID0gcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIGNvbnRyYWN0IGNhbGwgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCFjb250cmFjdENhbGxEZWNvZGVkLm93bmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdPd25lciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgY29udHJhY3QgY2FsbC4nKTtcbiAgfVxuXG4gIGlmICghY29udHJhY3RDYWxsRGVjb2RlZC5jb250cmFjdEFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignRGVzdGluYXRpb24gY29udHJhY3QgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGNvbnRyYWN0IGNhbGwuJyk7XG4gIH1cblxuICBpZiAoIWNvbnRyYWN0Q2FsbERlY29kZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdEYXRhIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgY29udHJhY3QgY2FsbC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKGNvbnRyYWN0Q2FsbERlY29kZWQub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCBjb250cmFjdF9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20oY29udHJhY3RDYWxsRGVjb2RlZC5jb250cmFjdEFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IGRhdGEgPSBjb250cmFjdENhbGxEZWNvZGVkLmRhdGE7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICAgIGNvbnRyYWN0X2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB0aGUgZGV0YWlscyBvZiB0aGUgY29udHJhY3Qgd2hpY2ggdXBkYXRlc1xuICogYWNjb3VudCBwZXJtaXNzaW9uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NFxuICogQHJldHVybnMge0FjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0KGJhc2U2NDogc3RyaW5nKTogQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdCB7XG4gIGNvbnN0IGFjY291bnRVcGRhdGVDb250cmFjdCA9IHByb3RvY29sLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgYXNzZXJ0KGFjY291bnRVcGRhdGVDb250cmFjdC5vd25lckFkZHJlc3MpO1xuICBhc3NlcnQoYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lm93bmVyKTtcbiAgYXNzZXJ0KGFjY291bnRVcGRhdGVDb250cmFjdC5oYXNPd25Qcm9wZXJ0eSgnYWN0aXZlcycpKTtcblxuICBjb25zdCBvd25lckFkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShhY2NvdW50VXBkYXRlQ29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCBvd25lcjogUGVybWlzc2lvbiA9IGNyZWF0ZVBlcm1pc3Npb24oYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lm93bmVyKTtcbiAgbGV0IHdpdG5lc3M6IFBlcm1pc3Npb24gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGlmIChhY2NvdW50VXBkYXRlQ29udHJhY3Qud2l0bmVzcykge1xuICAgIHdpdG5lc3MgPSBjcmVhdGVQZXJtaXNzaW9uKGFjY291bnRVcGRhdGVDb250cmFjdC53aXRuZXNzKTtcbiAgfVxuICBjb25zdCBhY3RpdmVMaXN0ID0gYWNjb3VudFVwZGF0ZUNvbnRyYWN0LmFjdGl2ZXMubWFwKChhY3RpdmUpID0+IGNyZWF0ZVBlcm1pc3Npb24oYWN0aXZlKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBvd25lckFkZHJlc3MsXG4gICAgb3duZXIsXG4gICAgd2l0bmVzcyxcbiAgICBhY3RpdmVzOiBhY3RpdmVMaXN0LFxuICB9O1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCBjb3JyZXNwb25kaW5nIHdpdGggZnJlZXplIGJhbGFuY2UgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0IC0gVGhlIGJhc2U2NCBlbmNvZGVkIGNvbnRyYWN0IGRhdGFcbiAqIEByZXR1cm5zIHtGcmVlemVCYWxhbmNlQ29udHJhY3RQYXJhbWV0ZXJbXX0gLSBBcnJheSBjb250YWluaW5nIHRoZSBkZWNvZGVkIGZyZWV6ZSBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRnJlZXplQmFsYW5jZVYyQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBGcmVlemVCYWxhbmNlQ29udHJhY3RQYXJhbWV0ZXJbXSB7XG4gIGxldCBmcmVlemVDb250cmFjdDogRnJlZXplQ29udHJhY3REZWNvZGVkO1xuICB0cnkge1xuICAgIGZyZWV6ZUNvbnRyYWN0ID0gcHJvdG9jb2wuRnJlZXplQmFsYW5jZVYyQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIGZyZWV6ZSBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIWZyZWV6ZUNvbnRyYWN0Lm93bmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdPd25lciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZnJlZXplIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKGZyZWV6ZUNvbnRyYWN0LmZyb3plbkJhbGFuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdGcm96ZW4gYmFsYW5jZSBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGZyZWV6ZSBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGNvbnN0IG93bmVyX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShmcmVlemVDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgLy8gSW4gcHJvdG9idWYzLCBkZWZhdWx0IHZhbHVlcyAoQkFORFdJRFRIID0gMCkgbWF5IGJlIG9taXR0ZWQgZnJvbSBzZXJpYWxpemF0aW9uLlxuICAvLyBJZiByZXNvdXJjZSBpcyB1bmRlZmluZWQsIGRlZmF1bHQgdG8gQkFORFdJRFRILlxuICBjb25zdCByZXNvdXJjZVZhbHVlID1cbiAgICBmcmVlemVDb250cmFjdC5yZXNvdXJjZSA9PT0gdW5kZWZpbmVkIHx8IGZyZWV6ZUNvbnRyYWN0LnJlc291cmNlID09PSAnQkFORFdJRFRIJ1xuICAgICAgPyBUcm9uUmVzb3VyY2UuQkFORFdJRFRIXG4gICAgICA6IFRyb25SZXNvdXJjZS5FTkVSR1k7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICByZXNvdXJjZTogcmVzb3VyY2VWYWx1ZSxcbiAgICAgICAgICBmcm96ZW5fYmFsYW5jZTogTnVtYmVyKGZyZWV6ZUNvbnRyYWN0LmZyb3plbkJhbGFuY2UpLFxuICAgICAgICAgIG93bmVyX2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB2b3RlIHdpdG5lc3MgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0IC0gVGhlIGJhc2U2NCBlbmNvZGVkIGNvbnRyYWN0IGRhdGFcbiAqIEByZXR1cm5zIHtWb3RlV2l0bmVzc0NvbnRyYWN0UGFyYW1ldGVyW119IC0gQXJyYXkgY29udGFpbmluZyB0aGUgZGVjb2RlZCB2b3RlIHdpdG5lc3MgY29udHJhY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVZvdGVXaXRuZXNzQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBWb3RlV2l0bmVzc0NvbnRyYWN0UGFyYW1ldGVyW10ge1xuICBsZXQgdm90ZUNvbnRyYWN0OiBWb3RlQ29udHJhY3REZWNvZGVkO1xuICB0cnkge1xuICAgIHZvdGVDb250cmFjdCA9IHByb3RvY29sLlZvdGVXaXRuZXNzQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIHZvdGUgY29udHJhY3QgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCF2b3RlQ29udHJhY3Qub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB2b3RlIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZvdGVDb250cmFjdC52b3RlcykgfHwgdm90ZUNvbnRyYWN0LnZvdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdWb3RlcyBkbyBub3QgZXhpc3Qgb3IgYXJlIGVtcHR5IGluIHRoaXMgdm90ZSBjb250cmFjdC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKHZvdGVDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgaW50ZXJmYWNlIFZvdGVJdGVtIHtcbiAgICB2b3RlQWRkcmVzcz86IHN0cmluZztcbiAgICB2b3RlQ291bnQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIH1cblxuICBjb25zdCB2b3RlcyA9IHZvdGVDb250cmFjdC52b3Rlcy5tYXAoKHZvdGU6IFZvdGVJdGVtKSA9PiB7XG4gICAgaWYgKCF2b3RlLnZvdGVBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVm90ZSBhZGRyZXNzIGlzIG1pc3NpbmcgaW4gb25lIG9mIHRoZSB2b3Rlcy4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdm90ZV9hZGRyZXNzOiBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICAgICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odm90ZS52b3RlQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgICAgICksXG4gICAgICB2b3RlX2NvdW50OiBOdW1iZXIodm90ZS52b3RlQ291bnQgfHwgMCksXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZvdGVzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCBjb3JyZXNwb25kaW5nIHdpdGggdW5mcmVlemUgYmFsYW5jZSBjb250cmFjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjQgLSBUaGUgYmFzZTY0IGVuY29kZWQgY29udHJhY3QgZGF0YVxuICogQHJldHVybnMge1VuZnJlZXplQmFsYW5jZUNvbnRyYWN0UGFyYW1ldGVyW119IC0gQXJyYXkgY29udGFpbmluZyB0aGUgZGVjb2RlZCB1bmZyZWV6ZSBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdChiYXNlNjQ6IHN0cmluZyk6IFVuZnJlZXplQmFsYW5jZUNvbnRyYWN0UGFyYW1ldGVyW10ge1xuICBsZXQgdW5mcmVlemVDb250cmFjdDogVW5mcmVlemVDb250cmFjdERlY29kZWQ7XG4gIHRyeSB7XG4gICAgdW5mcmVlemVDb250cmFjdCA9IHByb3RvY29sLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIHVuZnJlZXplIGNvbnRyYWN0IGluIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgfVxuXG4gIGlmICghdW5mcmVlemVDb250cmFjdC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHVuZnJlZXplIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKHVuZnJlZXplQ29udHJhY3QudW5mcmVlemVCYWxhbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVW5mcmVlemUgYmFsYW5jZSBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHVuZnJlZXplIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgLy8gZGVzZXJpYWxpemUgYXR0cmlidXRlc1xuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odW5mcmVlemVDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgLy8gSW4gcHJvdG9idWYzLCBkZWZhdWx0IHZhbHVlcyAoQkFORFdJRFRIID0gMCkgbWF5IGJlIG9taXR0ZWQgZnJvbSBzZXJpYWxpemF0aW9uLlxuICAvLyBJZiByZXNvdXJjZSBpcyB1bmRlZmluZWQsIGRlZmF1bHQgdG8gQkFORFdJRFRILlxuICBjb25zdCByZXNvdXJjZVZhbHVlID0gdW5mcmVlemVDb250cmFjdC5yZXNvdXJjZTtcbiAgY29uc3QgcmVzb3VyY2VFbnVtID1cbiAgICByZXNvdXJjZVZhbHVlID09PSB1bmRlZmluZWQgfHwgcmVzb3VyY2VWYWx1ZSA9PT0gcHJvdG9jb2wuUmVzb3VyY2VDb2RlLkJBTkRXSURUSFxuICAgICAgPyBUcm9uUmVzb3VyY2UuQkFORFdJRFRIXG4gICAgICA6IFRyb25SZXNvdXJjZS5FTkVSR1k7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICByZXNvdXJjZTogcmVzb3VyY2VFbnVtLFxuICAgICAgICAgIHVuZnJlZXplX2JhbGFuY2U6IE51bWJlcih1bmZyZWV6ZUNvbnRyYWN0LnVuZnJlZXplQmFsYW5jZSksXG4gICAgICAgICAgb3duZXJfYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggY29ycmVzcG9uZGluZyB3aXRoIHdpdGhkcmF3IGJhbGFuY2UgY29udHJhY3RcbiAqIERlY29kZWQgY29udHJhY3QgaXMgdGhlIHNhbWUgYXMgd2l0aGRyYXcgZXhwaXJlIHVuZnJlZXplXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NCAtIFRoZSBiYXNlNjQgZW5jb2RlZCBjb250cmFjdCBkYXRhXG4gKiBAcmV0dXJucyB7V2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0UGFyYW1ldGVyW119IC0gQXJyYXkgY29udGFpbmluZyB0aGUgZGVjb2RlZCB3aXRoZHJhdyBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3RQYXJhbWV0ZXJbXSB7XG4gIGxldCB3aXRoZHJhd0NvbnRyYWN0OiBXaXRoZHJhd0NvbnRyYWN0RGVjb2RlZDtcbiAgdHJ5IHtcbiAgICB3aXRoZHJhd0NvbnRyYWN0ID0gcHJvdG9jb2wuV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIHdpdGhkcmF3IGNvbnRyYWN0IGluIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgfVxuXG4gIGlmICghd2l0aGRyYXdDb250cmFjdC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHdpdGhkcmF3IGNvbnRyYWN0LicpO1xuICB9XG5cbiAgLy8gZGVzZXJpYWxpemUgYXR0cmlidXRlc1xuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20od2l0aGRyYXdDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCBjb3JyZXNwb25kaW5nIHdpdGggd2l0aGRyYXcgZXhwaXJlIHVuZnJlZXplIGNvbnRyYWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NCAtIFRoZSBiYXNlNjQgZW5jb2RlZCBjb250cmFjdCBkYXRhXG4gKiBAcmV0dXJucyB7V2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0UGFyYW1ldGVyW119IC0gQXJyYXkgY29udGFpbmluZyB0aGUgZGVjb2RlZCB3aXRoZHJhdyBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0KGJhc2U2NDogc3RyaW5nKTogV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0UGFyYW1ldGVyW10ge1xuICBsZXQgd2l0aGRyYXdDb250cmFjdDogV2l0aGRyYXdDb250cmFjdERlY29kZWQ7XG4gIHRyeSB7XG4gICAgd2l0aGRyYXdDb250cmFjdCA9IHByb3RvY29sLldpdGhkcmF3QmFsYW5jZUNvbnRyYWN0LmRlY29kZShCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKSkudG9KU09OKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSB3aXRoZHJhdyBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIXdpdGhkcmF3Q29udHJhY3Qub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB3aXRoZHJhdyBjb250cmFjdC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKHdpdGhkcmF3Q29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgb3duZXJfYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggY29ycmVzcG9uZGluZyB3aXRoIGRlbGVnYXRlIHJlc291cmNlIGNvbnRyYWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NCAtIFRoZSBiYXNlNjQgZW5jb2RlZCBjb250cmFjdCBkYXRhXG4gKiBAcmV0dXJucyB7UmVzb3VyY2VNYW5hZ2VtZW50Q29udHJhY3RQYXJhbWV0ZXJbXX0gLSBBcnJheSBjb250YWluaW5nIHRoZSBkZWNvZGVkIGRlbGVnYXRlIHJlc291cmNlIGNvbnRyYWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVEZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdFBhcmFtZXRlcltdIHtcbiAgbGV0IGRlbGVnYXRlUmVzb3VyY2VDb250cmFjdDogUmVzb3VyY2VNYW5hZ2VtZW50Q29udHJhY3REZWNvZGVkO1xuICB0cnkge1xuICAgIGRlbGVnYXRlUmVzb3VyY2VDb250cmFjdCA9IHByb3RvY29sLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCFkZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Qub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkZWxlZ2F0ZSByZXNvdXJjZSBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGlmICghZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnJlY2VpdmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdSZWNlaXZlciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QuJyk7XG4gIH1cblxuICBpZiAoZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LmJhbGFuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdCYWxhbmNlIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QuJyk7XG4gIH1cblxuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20oZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0Lm93bmVyQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcblxuICBjb25zdCByZWNlaXZlcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20oZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnJlY2VpdmVyQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcblxuICAvLyBJbiBwcm90b2J1ZjMsIGRlZmF1bHQgdmFsdWVzIChCQU5EV0lEVEggPSAwKSBtYXkgYmUgb21pdHRlZCBmcm9tIHNlcmlhbGl6YXRpb24uXG4gIC8vIElmIHJlc291cmNlIGlzIHVuZGVmaW5lZCBvciBmYWxzeSwgZGVmYXVsdCB0byBCQU5EV0lEVEguXG4gIGNvbnN0IHJlc291cmNlVmFsdWUgPSAhZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnJlc291cmNlID8gVHJvblJlc291cmNlLkJBTkRXSURUSCA6IFRyb25SZXNvdXJjZS5FTkVSR1k7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICByZXNvdXJjZTogcmVzb3VyY2VWYWx1ZSxcbiAgICAgICAgICBiYWxhbmNlOiBOdW1iZXIoZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LmJhbGFuY2UpLFxuICAgICAgICAgIG93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgcmVjZWl2ZXJfYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggY29ycmVzcG9uZGluZyB3aXRoIHVuZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0IC0gVGhlIGJhc2U2NCBlbmNvZGVkIGNvbnRyYWN0IGRhdGFcbiAqIEByZXR1cm5zIHtSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdFBhcmFtZXRlcltdfSAtIEFycmF5IGNvbnRhaW5pbmcgdGhlIGRlY29kZWQgdW5kZWxlZ2F0ZSByZXNvdXJjZSBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdFBhcmFtZXRlcltdIHtcbiAgbGV0IHVuZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0OiBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdERlY29kZWQ7XG4gIHRyeSB7XG4gICAgdW5kZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QgPSBwcm90b2NvbC5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCF1bmRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRlbGVnYXRlIHJlc291cmNlIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCF1bmRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5yZWNlaXZlckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignUmVjZWl2ZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRlbGVnYXRlIHJlc291cmNlIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKHVuZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LmJhbGFuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdCYWxhbmNlIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QuJyk7XG4gIH1cblxuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odW5kZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuXG4gIGNvbnN0IHJlY2VpdmVyX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbSh1bmRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5yZWNlaXZlckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgLy8gSW4gcHJvdG9idWYzLCBkZWZhdWx0IHZhbHVlcyAoQkFORFdJRFRIID0gMCkgbWF5IGJlIG9taXR0ZWQgZnJvbSBzZXJpYWxpemF0aW9uLlxuICAvLyBJZiByZXNvdXJjZSBpcyB1bmRlZmluZWQgb3IgZmFsc3ksIGRlZmF1bHQgdG8gQkFORFdJRFRILlxuICBjb25zdCByZXNvdXJjZVZhbHVlID0gIXVuZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnJlc291cmNlID8gVHJvblJlc291cmNlLkJBTkRXSURUSCA6IFRyb25SZXNvdXJjZS5FTkVSR1k7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICByZXNvdXJjZTogcmVzb3VyY2VWYWx1ZSxcbiAgICAgICAgICBiYWxhbmNlOiBOdW1iZXIodW5kZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QuYmFsYW5jZSksXG4gICAgICAgICAgb3duZXJfYWRkcmVzcyxcbiAgICAgICAgICByZWNlaXZlcl9hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCBjb3JyZXNwb25kaW5nIHdpdGggdGhlIGFjY291bnQgY3JlYXRlIGNvbnRyYWN0XG4gKlxuICogQHBhcmFtIHtVaW50OEFycmF5fSB2YWx1ZSAtIFRoZSByYXcgcHJvdG9idWYgYnl0ZXMgZnJvbSB0aGUgY29udHJhY3QgcGFyYW1ldGVyXG4gKiBAcmV0dXJucyB7QWNjb3VudENyZWF0ZUNvbnRyYWN0W119IC0gQXJyYXkgY29udGFpbmluZyB0aGUgZGVjb2RlZCBhY2NvdW50IGNyZWF0ZSBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlQWNjb3VudENyZWF0ZUNvbnRyYWN0KGJhc2U2NDogc3RyaW5nKTogQWNjb3VudENyZWF0ZUNvbnRyYWN0W10ge1xuICBsZXQgZGVjb2RlZDogQWNjb3VudENyZWF0ZUNvbnRyYWN0RGVjb2RlZDtcbiAgdHJ5IHtcbiAgICBkZWNvZGVkID0gcHJvdG9jb2wuQWNjb3VudENyZWF0ZUNvbnRyYWN0LmRlY29kZShCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKSkudG9KU09OKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSBhY2NvdW50IGNyZWF0ZSBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIWRlY29kZWQub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBhY2NvdW50IGNyZWF0ZSBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGlmICghZGVjb2RlZC5hY2NvdW50QWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdBY2NvdW50IGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBhY2NvdW50IGNyZWF0ZSBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGNvbnN0IG93bmVyX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShkZWNvZGVkLm93bmVyQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcbiAgY29uc3QgYWNjb3VudF9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20oZGVjb2RlZC5hY2NvdW50QWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHBhcmFtZXRlcjoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIG93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgYWNjb3VudF9hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIEBwYXJhbSByYXdcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGVybWlzc2lvbihyYXc6IHsgcGVybWlzc2lvbk5hbWU6IHN0cmluZzsgdGhyZXNob2xkOiBudW1iZXIgfSk6IFBlcm1pc3Npb24ge1xuICBsZXQgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlO1xuICBjb25zdCBwZXJtaXNzaW9uID0gcmF3LnBlcm1pc3Npb25OYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICBpZiAocGVybWlzc2lvbiA9PT0gJ293bmVyJykge1xuICAgIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGUuT3duZXI7XG4gIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PT0gJ3dpdG5lc3MnKSB7XG4gICAgcGVybWlzc2lvblR5cGUgPSBQZXJtaXNzaW9uVHlwZS5XaXRuZXNzO1xuICB9IGVsc2UgaWYgKHBlcm1pc3Npb24uc3Vic3RyKDAsIDYpID09PSAnYWN0aXZlJykge1xuICAgIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGUuQWN0aXZlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdQZXJtaXNzaW9uIHR5cGUgbm90IHBhcnNlYWJsZS4nKTtcbiAgfVxuICByZXR1cm4geyB0eXBlOiBwZXJtaXNzaW9uVHlwZSwgdGhyZXNob2xkOiByYXcudGhyZXNob2xkIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVHhKc29uU3RyaW5nKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgcmV0dXJuIHRyYW5zYWN0aW9uLmhhc093blByb3BlcnR5KCd0eElEJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCByYXcgdHJhbnNhY3Rpb24gYWNjb21tb2RhdGVzIHRvIGJpdGdvJ3MgcHJlZmVycmVkIGZvcm1hdFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdUcmFuc2FjdGlvbiAtIFRoZSByYXcgdHJhbnNhY3Rpb24gdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMge2Jvb2xlYW59IHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFJhd1RyYW5zYWN0aW9uRm9ybWF0KHJhd1RyYW5zYWN0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiByYXdUcmFuc2FjdGlvbiA9PT0gJ3N0cmluZycgJiYgKGlzVmFsaWRIZXgocmF3VHJhbnNhY3Rpb24pIHx8IGlzVmFsaWRUeEpzb25TdHJpbmcocmF3VHJhbnNhY3Rpb24pKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGhleCBzdHJpbmcgb2YgdGhlIGdpdmVuIGJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgVWludDhBcnJheX0gYnVmZmVyIC0gdGhlIGJ1ZmZlciB0byBiZSBjb252ZXJ0ZWQgdG8gaGV4XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBoZXggdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSGV4KGJ1ZmZlcjogQnVmZmVyIHwgVWludDhBcnJheSk6IHN0cmluZyB7XG4gIHJldHVybiBoZXguZW5jb2RlKGJ1ZmZlciwgdHJ1ZSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEtlY2Nhay0yNTYgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHBhcmFtZXRlcnNcbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBzdHJpbmdzIGRlc2NyaWJpbmcgdGhlIHR5cGVzIG9mIHRoZSB2YWx1ZXNcbiAqIEBwYXJhbSB2YWx1ZXMgLSB2YWx1ZSB0byBlbmNvZGVcbiAqIEBwYXJhbSBtZXRob2RJZCAtIHRoZSBmaXJzdCA0IGJ5dGVzIG9mIHRoZSBmdW5jdGlvbiBzZWxlY3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRGF0YVBhcmFtcyh0eXBlczogc3RyaW5nW10sIHZhbHVlczogYW55W10sIG1ldGhvZElkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHlwZXMuZm9yRWFjaCgodHlwZSwgaW5kZXgpID0+IHtcbiAgICBpZiAodHlwZSA9PSAnYWRkcmVzcycpIHtcbiAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZXNbaW5kZXhdLnJlcGxhY2UoQUREUkVTU19QUkVGSVhfUkVHRVgsICcweCcpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgYWJpQ29kZXIgPSBuZXcgQWJpQ29kZXIoKTtcbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9IGFiaUNvZGVyLmVuY29kZSh0eXBlcywgdmFsdWVzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBUaGVyZSB3YXMgYW4gZXJyb3IgZW5jb2RpbmcgdGhlIGRhdGEgcGFyYW1zLiBFcnJvciA9ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gIH1cbiAgaWYgKG1ldGhvZElkKSB7XG4gICAgcmV0dXJuIGhleENvbmNhdChbbWV0aG9kSWQsIGRhdGFdKS5yZXBsYWNlKC9eKDB4KS8sICcnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS5yZXBsYWNlKC9eKDB4KS8sICcnKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlY29kZWQgdmFsdWVzIGFjY29yZGluZyB0byB0aGUgYXJyYXkgb2YgdHlwZXNcbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBzdHJpbmdzIGRlc2NyaWJpbmcgdGhlIHR5cGVzIG9mIHRoZSB2YWx1ZXNcbiAqIEBwYXJhbSBkYXRhIC0gZW5jb2RlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZURhdGFQYXJhbXModHlwZXM6IHN0cmluZ1tdLCBkYXRhOiBzdHJpbmcpOiBhbnlbXSB7XG4gIGNvbnN0IGFiaUNvZGVyID0gbmV3IEFiaUNvZGVyKCk7XG4gIGRhdGEgPSAnMHgnICsgZGF0YS5zdWJzdHJpbmcoOCk7XG4gIHJldHVybiBhYmlDb2Rlci5kZWNvZGUodHlwZXMsIGRhdGEpLnJlZHVjZSgob2JqLCBhcmcsIGluZGV4KSA9PiB7XG4gICAgaWYgKHR5cGVzW2luZGV4XSA9PSAnYWRkcmVzcycpIGFyZyA9IEFERFJFU1NfUFJFRklYICsgYXJnLnN1YnN0cigyKS50b0xvd2VyQ2FzZSgpO1xuICAgIG9iai5wdXNoKGFyZyk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSwgW10pO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIHJhd19kYXRhX2hleCBmb3IgYSBUUk9OIHRyYW5zYWN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJhd0RhdGEgLSBUaGUgdHJhbnNhY3Rpb24gcmF3IGRhdGEgb2JqZWN0IGNvbnRhaW5pbmc6XG4gKiBAcGFyYW0ge0FycmF5fSByYXdEYXRhLmNvbnRyYWN0IC0gQXJyYXkgb2YgY29udHJhY3Qgb2JqZWN0c1xuICogQHBhcmFtIHtzdHJpbmd9IHJhd0RhdGEucmVmQmxvY2tCeXRlcyAtIFJlZmVyZW5jZSBibG9jayBieXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IHJhd0RhdGEucmVmQmxvY2tIYXNoIC0gUmVmZXJlbmNlIGJsb2NrIGhhc2hcbiAqIEBwYXJhbSB7bnVtYmVyfSByYXdEYXRhLmV4cGlyYXRpb24gLSBUcmFuc2FjdGlvbiBleHBpcmF0aW9uIHRpbWVzdGFtcFxuICogQHBhcmFtIHtudW1iZXJ9IHJhd0RhdGEudGltZXN0YW1wIC0gVHJhbnNhY3Rpb24gY3JlYXRpb24gdGltZXN0YW1wXG4gKiBAcGFyYW0ge251bWJlcn0gW3Jhd0RhdGEuZmVlTGltaXRdIC0gT3B0aW9uYWwgZmVlIGxpbWl0IGZvciBzbWFydCBjb250cmFjdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmF3RGF0YUhleChcbiAgcmF3RGF0YToge1xuICAgIGNvbnRyYWN0PzogcHJvdG9jb2wuVHJhbnNhY3Rpb24uQ29udHJhY3RbXTtcbiAgICByZWZCbG9ja0J5dGVzPzogc3RyaW5nO1xuICAgIHJlZkJsb2NrSGFzaD86IHN0cmluZztcbiAgICBleHBpcmF0aW9uPzogbnVtYmVyO1xuICAgIHRpbWVzdGFtcD86IG51bWJlcjtcbiAgICBmZWVMaW1pdD86IG51bWJlcjtcbiAgfSA9IHt9XG4pOiBzdHJpbmcge1xuICB0cnkge1xuICAgIC8vIFByb2Nlc3MgY29udHJhY3RzIHRvIGVuc3VyZSBwcm9wZXIgcHJvdG9idWYgZW5jb2RpbmdcbiAgICBsZXQgcHJvY2Vzc2VkQ29udHJhY3RzID0gcmF3RGF0YS5jb250cmFjdDtcbiAgICBpZiAocmF3RGF0YS5jb250cmFjdCAmJiByYXdEYXRhLmNvbnRyYWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHByb2Nlc3NlZENvbnRyYWN0cyA9IHJhd0RhdGEuY29udHJhY3QubWFwKChjb250cmFjdCkgPT4ge1xuICAgICAgICAvLyBIYW5kbGUgVHJhbnNmZXJDb250cmFjdCBzcGVjaWZpY2FsbHlcbiAgICAgICAgaWYgKGNvbnRyYWN0LnBhcmFtZXRlcj8udHlwZV91cmwgPT09ICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLlRyYW5zZmVyQ29udHJhY3QnKSB7XG4gICAgICAgICAgY29uc3QgY29udHJhY3RWYWx1ZSA9IGNvbnRyYWN0LnBhcmFtZXRlci52YWx1ZSBhcyBhbnk7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgdGhlIHByb3RvYnVmIGNvbnRyYWN0IG9iamVjdFxuICAgICAgICAgIGNvbnN0IHRyYW5zZmVyQ29udHJhY3Q6IGFueSA9IHt9O1xuXG4gICAgICAgICAgLy8gSGFuZGxlIG93bmVyX2FkZHJlc3MgKHJlcXVpcmVkIGZpZWxkKVxuICAgICAgICAgIGlmIChjb250cmFjdFZhbHVlLm93bmVyX2FkZHJlc3MpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQ29udHJhY3Qub3duZXJBZGRyZXNzID0gQnVmZmVyLmZyb20oY29udHJhY3RWYWx1ZS5vd25lcl9hZGRyZXNzLCAnaGV4Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSGFuZGxlIHRvX2FkZHJlc3MgKHJlcXVpcmVkIGZpZWxkKVxuICAgICAgICAgIGlmIChjb250cmFjdFZhbHVlLnRvX2FkZHJlc3MpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQ29udHJhY3QudG9BZGRyZXNzID0gQnVmZmVyLmZyb20oY29udHJhY3RWYWx1ZS50b19hZGRyZXNzLCAnaGV4Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSGFuZGxlIGFtb3VudCAocmVxdWlyZWQgZmllbGQpXG4gICAgICAgICAgaWYgKGNvbnRyYWN0VmFsdWUuYW1vdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQ29udHJhY3QuYW1vdW50ID0gY29udHJhY3RWYWx1ZS5hbW91bnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRW5jb2RlIHRoZSBjb250cmFjdCB1c2luZyBwcm90b2J1ZlxuICAgICAgICAgIGNvbnN0IGVuY29kZWRDb250cmFjdCA9IHByb3RvY29sLlRyYW5zZmVyQ29udHJhY3QuZW5jb2RlKHRyYW5zZmVyQ29udHJhY3QpLmZpbmlzaCgpO1xuICAgICAgICAgIGNvbnN0IGJhc2U2NFZhbHVlID0gQnVmZmVyLmZyb20oZW5jb2RlZENvbnRyYWN0KS50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29udHJhY3QsXG4gICAgICAgICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgICAgICAgLi4uY29udHJhY3QucGFyYW1ldGVyLFxuICAgICAgICAgICAgICB2YWx1ZTogYmFzZTY0VmFsdWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgYW55O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyYWN0O1xuICAgICAgfSkgYXMgcHJvdG9jb2wuVHJhbnNhY3Rpb24uQ29udHJhY3RbXTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgcmF3IHRyYW5zYWN0aW9uIG9iamVjdCBtYXRjaGluZyBwcm90b2J1ZiBzY2hlbWFcbiAgICBjb25zdCByYXdUeDogcHJvdG9jb2wuVHJhbnNhY3Rpb24uSXJhdyA9IHtcbiAgICAgIGNvbnRyYWN0OiBwcm9jZXNzZWRDb250cmFjdHMsXG4gICAgICByZWZCbG9ja0J5dGVzOiByYXdEYXRhLnJlZkJsb2NrQnl0ZXMgPyBCdWZmZXIuZnJvbShyYXdEYXRhLnJlZkJsb2NrQnl0ZXMsICdoZXgnKSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlZkJsb2NrSGFzaDogcmF3RGF0YS5yZWZCbG9ja0hhc2ggPyBCdWZmZXIuZnJvbShyYXdEYXRhLnJlZkJsb2NrSGFzaCwgJ2hleCcpIDogdW5kZWZpbmVkLFxuICAgICAgZXhwaXJhdGlvbjogcmF3RGF0YS5leHBpcmF0aW9uLFxuICAgICAgdGltZXN0YW1wOiByYXdEYXRhLnRpbWVzdGFtcCxcbiAgICAgIGZlZUxpbWl0OiByYXdEYXRhLmZlZUxpbWl0LFxuICAgIH07XG5cbiAgICAvLyBFbmNvZGUgdXNpbmcgcHJvdG9idWYgYW5kIGdldCBmaW5hbCBieXRlc1xuICAgIGNvbnN0IGVuY29kZWRCeXRlcyA9IHByb3RvY29sLlRyYW5zYWN0aW9uLnJhdy5lbmNvZGUocmF3VHgpLmZpbmlzaCgpO1xuXG4gICAgLy8gQ29udmVydCB0byBoZXggc3RyaW5nXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGVuY29kZWRCeXRlcykudG9TdHJpbmcoJ2hleCcpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSByYXcgZGF0YSBoZXg6ICcgKyBlLm1lc3NhZ2UpO1xuICB9XG59XG4iXX0=