parse-server 9.6.0-alpha.1 → 9.6.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -49,6 +49,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
49
49
  * - Requires a secret key for setup.
50
50
  * - Validates the user's OTP against a time-based one-time password (TOTP) generated using the secret key.
51
51
  * - Supports configurable digits, period, and algorithm for TOTP generation.
52
+ * - Generates two single-use recovery codes during enrollment. Each recovery code can be used once
53
+ * in place of a TOTP token and is consumed after use.
52
54
  *
53
55
  * ## MFA Payload
54
56
  * The adapter requires the following `authData` fields:
@@ -175,8 +177,16 @@ class MFAAdapter extends _AuthAdapter.default {
175
177
  if (!secret) {
176
178
  return saveResponse;
177
179
  }
178
- if (recovery[0] === token || recovery[1] === token) {
179
- return saveResponse;
180
+ const recoveryIndex = recovery?.indexOf(token) ?? -1;
181
+ if (recoveryIndex >= 0) {
182
+ const updatedRecovery = [...recovery];
183
+ updatedRecovery.splice(recoveryIndex, 1);
184
+ return {
185
+ save: {
186
+ ...auth.mfa,
187
+ recovery: updatedRecovery
188
+ }
189
+ };
180
190
  }
181
191
  const totp = new _otpauth.TOTP({
182
192
  algorithm: this.algorithm,
@@ -321,4 +331,4 @@ class MFAAdapter extends _AuthAdapter.default {
321
331
  }
322
332
  }
323
333
  var _default = exports.default = new MFAAdapter();
324
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfb3RwYXV0aCIsInJlcXVpcmUiLCJfY3J5cHRvVXRpbHMiLCJfQXV0aEFkYXB0ZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTUZBQWRhcHRlciIsIkF1dGhBZGFwdGVyIiwidmFsaWRhdGVPcHRpb25zIiwib3B0cyIsInZhbGlkT3B0aW9ucyIsIm9wdGlvbnMiLCJBcnJheSIsImlzQXJyYXkiLCJzbXMiLCJpbmNsdWRlcyIsInRvdHAiLCJkaWdpdHMiLCJwZXJpb2QiLCJzZW5kU01TIiwic21zQ2FsbGJhY2siLCJhbGdvcml0aG0iLCJ2YWxpZGF0ZVNldFVwIiwibWZhRGF0YSIsIm1vYmlsZSIsInNldHVwTW9iaWxlT1RQIiwic2V0dXBUT1RQIiwidmFsaWRhdGVMb2dpbiIsImxvZ2luRGF0YSIsIl8iLCJyZXEiLCJzYXZlUmVzcG9uc2UiLCJkb05vdFNhdmUiLCJ0b2tlbiIsImF1dGgiLCJvcmlnaW5hbCIsImdldCIsInNlY3JldCIsInJlY292ZXJ5Iiwic2F2ZWQiLCJleHBpcnkiLCJtZmEiLCJzZW5kVG9rZW4iLCJvYmplY3QiLCJzZXQiLCJzYXZlIiwidXNlTWFzdGVyS2V5IiwiRGF0ZSIsIlRPVFAiLCJTZWNyZXQiLCJmcm9tQmFzZTMyIiwidmFsaWQiLCJ2YWxpZGF0ZSIsInZhbGlkYXRlVXBkYXRlIiwiYXV0aERhdGEiLCJtYXN0ZXIiLCJjb25maXJtU01TT1RQIiwib2xkIiwiYWZ0ZXJGaW5kIiwic3RhdHVzIiwicG9saWN5IiwicGVuZGluZyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ0ZXN0IiwicmFuZG9tU3RyaW5nIiwicmVwbGFjZSIsInN1YnN0cmluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwiZ2V0VGltZSIsImlucHV0RGF0YSIsInBlbmRpbmdEYXRhIiwicmVzcG9uc2UiLCJqb2luIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvbWZhLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyc2UgU2VydmVyIGF1dGhlbnRpY2F0aW9uIGFkYXB0ZXIgZm9yIE11bHRpLUZhY3RvciBBdXRoZW50aWNhdGlvbiAoTUZBKS5cbiAqXG4gKiBAY2xhc3MgTUZBQWRhcHRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgYWRhcHRlciBvcHRpb25zLlxuICogQHBhcmFtIHtBcnJheTxTdHJpbmc+fSBvcHRpb25zLm9wdGlvbnMgLSBTdXBwb3J0ZWQgTUZBIG1ldGhvZHMuIE11c3QgaW5jbHVkZSBgXCJTTVNcImAgb3IgYFwiVE9UUFwiYC5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5kaWdpdHM9Nl0gLSBUaGUgbnVtYmVyIG9mIGRpZ2l0cyBmb3IgdGhlIG9uZS10aW1lIHBhc3N3b3JkIChPVFApLiBNdXN0IGJlIGJldHdlZW4gNCBhbmQgMTAuXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMucGVyaW9kPTMwXSAtIFRoZSB2YWxpZGl0eSBwZXJpb2Qgb2YgdGhlIE9UUCBpbiBzZWNvbmRzLiBNdXN0IGJlIGdyZWF0ZXIgdGhhbiAxMC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5hbGdvcml0aG09XCJTSEExXCJdIC0gVGhlIGFsZ29yaXRobSB1c2VkIGZvciBUT1RQIGdlbmVyYXRpb24uIERlZmF1bHRzIHRvIGBcIlNIQTFcImAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5zZW5kU01TXSAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHNlbmRpbmcgU01TIE9UUHMuIFJlcXVpcmVkIGlmIGBcIlNNU1wiYCBpcyBpbmNsdWRlZCBpbiBgb3B0aW9uc2AuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiAjIyBQYXJzZSBTZXJ2ZXIgQ29uZmlndXJhdGlvblxuICogVG8gY29uZmlndXJlIFBhcnNlIFNlcnZlciBmb3IgTUZBLCB1c2UgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gKiBgYGBqYXZhc2NyaXB0XG4gKiB7XG4gKiAgIGF1dGg6IHtcbiAqICAgICBtZmE6IHtcbiAqICAgICAgIG9wdGlvbnM6IFtcIlNNU1wiLCBcIlRPVFBcIl0sXG4gKiAgICAgICBkaWdpdHM6IDYsXG4gKiAgICAgICBwZXJpb2Q6IDMwLFxuICogICAgICAgYWxnb3JpdGhtOiBcIlNIQTFcIixcbiAqICAgICAgIHNlbmRTTVM6ICh0b2tlbiwgbW9iaWxlKSA9PiB7XG4gKiAgICAgICAgIC8vIFNlbmQgdGhlIFNNUyB1c2luZyB5b3VyIHByZWZlcnJlZCBTTVMgcHJvdmlkZXIuXG4gKiAgICAgICAgIGNvbnNvbGUubG9nKGBTZW5kaW5nIFNNUyB0byAke21vYmlsZX0gd2l0aCB0b2tlbjogJHt0b2tlbn1gKTtcbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIE1GQSBNZXRob2RzXG4gKiAtICoqU01TKio6XG4gKiAgIC0gUmVxdWlyZXMgYSB2YWxpZCBtb2JpbGUgbnVtYmVyLlxuICogICAtIFNlbmRzIGEgb25lLXRpbWUgcGFzc3dvcmQgKE9UUCkgdmlhIFNNUyBmb3IgbG9naW4gb3IgdmVyaWZpY2F0aW9uLlxuICogICAtIFVzZXMgdGhlIGBzZW5kU01TYCBjYWxsYmFjayBmb3Igc2VuZGluZyB0aGUgT1RQLlxuICpcbiAqIC0gKipUT1RQKio6XG4gKiAgIC0gUmVxdWlyZXMgYSBzZWNyZXQga2V5IGZvciBzZXR1cC5cbiAqICAgLSBWYWxpZGF0ZXMgdGhlIHVzZXIncyBPVFAgYWdhaW5zdCBhIHRpbWUtYmFzZWQgb25lLXRpbWUgcGFzc3dvcmQgKFRPVFApIGdlbmVyYXRlZCB1c2luZyB0aGUgc2VjcmV0IGtleS5cbiAqICAgLSBTdXBwb3J0cyBjb25maWd1cmFibGUgZGlnaXRzLCBwZXJpb2QsIGFuZCBhbGdvcml0aG0gZm9yIFRPVFAgZ2VuZXJhdGlvbi5cbiAqXG4gKiAjIyBNRkEgUGF5bG9hZFxuICogVGhlIGFkYXB0ZXIgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBgYXV0aERhdGFgIGZpZWxkczpcbiAqIC0gKipGb3IgU01TLWJhc2VkIE1GQSoqOlxuICogICAtIGBtb2JpbGVgOiBUaGUgdXNlcidzIG1vYmlsZSBudW1iZXIgKHJlcXVpcmVkIGZvciBzZXR1cCkuXG4gKiAgIC0gYHRva2VuYDogVGhlIE9UUCBwcm92aWRlZCBieSB0aGUgdXNlciBmb3IgbG9naW4gb3IgdmVyaWZpY2F0aW9uLlxuICogLSAqKkZvciBUT1RQLWJhc2VkIE1GQSoqOlxuICogICAtIGBzZWNyZXRgOiBUaGUgVE9UUCBzZWNyZXQga2V5IGZvciB0aGUgdXNlciAocmVxdWlyZWQgZm9yIHNldHVwKS5cbiAqICAgLSBgdG9rZW5gOiBUaGUgT1RQIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGZvciBsb2dpbiBvciB2ZXJpZmljYXRpb24uXG4gKlxuICogIyMgRXhhbXBsZSBQYXlsb2Fkc1xuICogIyMjIFNNUyBTZXR1cCBQYXlsb2FkXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwibW9iaWxlXCI6IFwiKzEyMzQ1Njc4OTBcIlxuICogfVxuICogYGBgXG4gKlxuICogIyMjIFRPVFAgU2V0dXAgUGF5bG9hZFxuICogYGBganNvblxuICoge1xuICogICBcInNlY3JldFwiOiBcIkJBU0UzMkVOQ09ERURTRUNSRVRcIixcbiAqICAgXCJ0b2tlblwiOiBcIjEyMzQ1NlwiXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyMgTG9naW4gUGF5bG9hZFxuICogYGBganNvblxuICoge1xuICogICBcInRva2VuXCI6IFwiMTIzNDU2XCJcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RpbWUtYmFzZWRfT25lLVRpbWVfUGFzc3dvcmRfYWxnb3JpdGhtIFRpbWUtYmFzZWQgT25lLVRpbWUgUGFzc3dvcmQgQWxnb3JpdGhtIChUT1RQKX1cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MjM4IFJGQyA2MjM4OiBUT1RQOiBUaW1lLUJhc2VkIE9uZS1UaW1lIFBhc3N3b3JkIEFsZ29yaXRobX1cbiAqL1xuXG5pbXBvcnQgeyBUT1RQLCBTZWNyZXQgfSBmcm9tICdvdHBhdXRoJztcbmltcG9ydCB7IHJhbmRvbVN0cmluZyB9IGZyb20gJy4uLy4uL2NyeXB0b1V0aWxzJztcbmltcG9ydCBBdXRoQWRhcHRlciBmcm9tICcuL0F1dGhBZGFwdGVyJztcbmNsYXNzIE1GQUFkYXB0ZXIgZXh0ZW5kcyBBdXRoQWRhcHRlciB7XG4gIHZhbGlkYXRlT3B0aW9ucyhvcHRzKSB7XG4gICAgY29uc3QgdmFsaWRPcHRpb25zID0gb3B0cy5vcHRpb25zO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWxpZE9wdGlvbnMpKSB7XG4gICAgICB0aHJvdyAnbWZhLm9wdGlvbnMgbXVzdCBiZSBhbiBhcnJheSc7XG4gICAgfVxuICAgIHRoaXMuc21zID0gdmFsaWRPcHRpb25zLmluY2x1ZGVzKCdTTVMnKTtcbiAgICB0aGlzLnRvdHAgPSB2YWxpZE9wdGlvbnMuaW5jbHVkZXMoJ1RPVFAnKTtcbiAgICBpZiAoIXRoaXMuc21zICYmICF0aGlzLnRvdHApIHtcbiAgICAgIHRocm93ICdtZmEub3B0aW9ucyBtdXN0IGluY2x1ZGUgU01TIG9yIFRPVFAnO1xuICAgIH1cbiAgICBjb25zdCBkaWdpdHMgPSBvcHRzLmRpZ2l0cyB8fCA2O1xuICAgIGNvbnN0IHBlcmlvZCA9IG9wdHMucGVyaW9kIHx8IDMwO1xuICAgIGlmICh0eXBlb2YgZGlnaXRzICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgJ21mYS5kaWdpdHMgbXVzdCBiZSBhIG51bWJlcic7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGVyaW9kICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgJ21mYS5wZXJpb2QgbXVzdCBiZSBhIG51bWJlcic7XG4gICAgfVxuICAgIGlmIChkaWdpdHMgPCA0IHx8IGRpZ2l0cyA+IDEwKSB7XG4gICAgICB0aHJvdyAnbWZhLmRpZ2l0cyBtdXN0IGJlIGJldHdlZW4gNCBhbmQgMTAnO1xuICAgIH1cbiAgICBpZiAocGVyaW9kIDwgMTApIHtcbiAgICAgIHRocm93ICdtZmEucGVyaW9kIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEwJztcbiAgICB9XG4gICAgY29uc3Qgc2VuZFNNUyA9IG9wdHMuc2VuZFNNUztcbiAgICBpZiAodGhpcy5zbXMgJiYgdHlwZW9mIHNlbmRTTVMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93ICdtZmEuc2VuZFNNUyBjYWxsYmFjayBtdXN0IGJlIGRlZmluZWQgd2hlbiB1c2luZyBTTVMgT1RQcyc7XG4gICAgfVxuICAgIHRoaXMuc21zQ2FsbGJhY2sgPSBzZW5kU01TO1xuICAgIHRoaXMuZGlnaXRzID0gZGlnaXRzO1xuICAgIHRoaXMucGVyaW9kID0gcGVyaW9kO1xuICAgIHRoaXMuYWxnb3JpdGhtID0gb3B0cy5hbGdvcml0aG0gfHwgJ1NIQTEnO1xuICB9XG4gIHZhbGlkYXRlU2V0VXAobWZhRGF0YSkge1xuICAgIGlmIChtZmFEYXRhLm1vYmlsZSAmJiB0aGlzLnNtcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0dXBNb2JpbGVPVFAobWZhRGF0YS5tb2JpbGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy50b3RwKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXR1cFRPVFAobWZhRGF0YSk7XG4gICAgfVxuICAgIHRocm93ICdJbnZhbGlkIE1GQSBkYXRhJztcbiAgfVxuICBhc3luYyB2YWxpZGF0ZUxvZ2luKGxvZ2luRGF0YSwgXywgcmVxKSB7XG4gICAgY29uc3Qgc2F2ZVJlc3BvbnNlID0ge1xuICAgICAgZG9Ob3RTYXZlOiB0cnVlLFxuICAgIH07XG4gICAgY29uc3QgdG9rZW4gPSBsb2dpbkRhdGEudG9rZW47XG4gICAgY29uc3QgYXV0aCA9IHJlcS5vcmlnaW5hbC5nZXQoJ2F1dGhEYXRhJykgfHwge307XG4gICAgY29uc3QgeyBzZWNyZXQsIHJlY292ZXJ5LCBtb2JpbGUsIHRva2VuOiBzYXZlZCwgZXhwaXJ5IH0gPSBhdXRoLm1mYSB8fCB7fTtcbiAgICBpZiAodGhpcy5zbXMgJiYgbW9iaWxlKSB7XG4gICAgICBpZiAodG9rZW4gPT09ICdyZXF1ZXN0Jykge1xuICAgICAgICBjb25zdCB7IHRva2VuOiBzZW5kVG9rZW4sIGV4cGlyeSB9ID0gYXdhaXQgdGhpcy5zZW5kU01TKG1vYmlsZSk7XG4gICAgICAgIGF1dGgubWZhLnRva2VuID0gc2VuZFRva2VuO1xuICAgICAgICBhdXRoLm1mYS5leHBpcnkgPSBleHBpcnk7XG4gICAgICAgIHJlcS5vYmplY3Quc2V0KCdhdXRoRGF0YScsIGF1dGgpO1xuICAgICAgICBhd2FpdCByZXEub2JqZWN0LnNhdmUobnVsbCwgeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSk7XG4gICAgICAgIHRocm93ICdQbGVhc2UgZW50ZXIgdGhlIHRva2VuJztcbiAgICAgIH1cbiAgICAgIGlmICghc2F2ZWQgfHwgdG9rZW4gIT09IHNhdmVkKSB7XG4gICAgICAgIHRocm93ICdJbnZhbGlkIE1GQSB0b2tlbiAxJztcbiAgICAgIH1cbiAgICAgIGlmIChuZXcgRGF0ZSgpID4gZXhwaXJ5KSB7XG4gICAgICAgIHRocm93ICdJbnZhbGlkIE1GQSB0b2tlbiAyJztcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBhdXRoLm1mYS50b2tlbjtcbiAgICAgIGRlbGV0ZSBhdXRoLm1mYS5leHBpcnk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzYXZlOiBhdXRoLm1mYSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnRvdHApIHtcbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93ICdJbnZhbGlkIE1GQSB0b2tlbic7XG4gICAgICB9XG4gICAgICBpZiAoIXNlY3JldCkge1xuICAgICAgICByZXR1cm4gc2F2ZVJlc3BvbnNlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY292ZXJ5WzBdID09PSB0b2tlbiB8fCByZWNvdmVyeVsxXSA9PT0gdG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHNhdmVSZXNwb25zZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRvdHAgPSBuZXcgVE9UUCh7XG4gICAgICAgIGFsZ29yaXRobTogdGhpcy5hbGdvcml0aG0sXG4gICAgICAgIGRpZ2l0czogdGhpcy5kaWdpdHMsXG4gICAgICAgIHBlcmlvZDogdGhpcy5wZXJpb2QsXG4gICAgICAgIHNlY3JldDogU2VjcmV0LmZyb21CYXNlMzIoc2VjcmV0KSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdmFsaWQgPSB0b3RwLnZhbGlkYXRlKHtcbiAgICAgICAgdG9rZW4sXG4gICAgICB9KTtcbiAgICAgIGlmICh2YWxpZCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyAnSW52YWxpZCBNRkEgdG9rZW4nO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2F2ZVJlc3BvbnNlO1xuICB9XG4gIGFzeW5jIHZhbGlkYXRlVXBkYXRlKGF1dGhEYXRhLCBfLCByZXEpIHtcbiAgICBpZiAocmVxLm1hc3Rlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYXV0aERhdGEubW9iaWxlICYmIHRoaXMuc21zKSB7XG4gICAgICBpZiAoIWF1dGhEYXRhLnRva2VuKSB7XG4gICAgICAgIHRocm93ICdNRkEgaXMgYWxyZWFkeSBzZXQgdXAgb24gdGhpcyBhY2NvdW50JztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNvbmZpcm1TTVNPVFAoYXV0aERhdGEsIHJlcS5vcmlnaW5hbC5nZXQoJ2F1dGhEYXRhJyk/Lm1mYSB8fCB7fSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRvdHApIHtcbiAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVMb2dpbih7IHRva2VuOiBhdXRoRGF0YS5vbGQgfSwgbnVsbCwgcmVxKTtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlU2V0VXAoYXV0aERhdGEpO1xuICAgIH1cbiAgICB0aHJvdyAnSW52YWxpZCBNRkEgZGF0YSc7XG4gIH1cbiAgYWZ0ZXJGaW5kKGF1dGhEYXRhLCBvcHRpb25zLCByZXEpIHtcbiAgICBpZiAocmVxLm1hc3Rlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy50b3RwICYmIGF1dGhEYXRhLnNlY3JldCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiAnZW5hYmxlZCcsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5zbXMgJiYgYXV0aERhdGEubW9iaWxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6ICdlbmFibGVkJyxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6ICdkaXNhYmxlZCcsXG4gICAgfTtcbiAgfVxuXG4gIHBvbGljeShyZXEsIGF1dGgpIHtcbiAgICBpZiAodGhpcy5zbXMgJiYgYXV0aD8ucGVuZGluZyAmJiBPYmplY3Qua2V5cyhhdXRoKS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiAnZGVmYXVsdCc7XG4gICAgfVxuICAgIHJldHVybiAnYWRkaXRpb25hbCc7XG4gIH1cblxuICBhc3luYyBzZXR1cE1vYmlsZU9UUChtb2JpbGUpIHtcbiAgICBjb25zdCB7IHRva2VuLCBleHBpcnkgfSA9IGF3YWl0IHRoaXMuc2VuZFNNUyhtb2JpbGUpO1xuICAgIHJldHVybiB7XG4gICAgICBzYXZlOiB7XG4gICAgICAgIHBlbmRpbmc6IHtcbiAgICAgICAgICBbbW9iaWxlXToge1xuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICBleHBpcnksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRTTVMobW9iaWxlKSB7XG4gICAgaWYgKCEvXlsrXSpbKF17MCwxfVswLTldezEsM31bKV17MCwxfVstXFxzXFwuLzAtOV0qJC9nLnRlc3QobW9iaWxlKSkge1xuICAgICAgdGhyb3cgJ0ludmFsaWQgbW9iaWxlIG51bWJlci4nO1xuICAgIH1cbiAgICBsZXQgdG9rZW4gPSAnJztcbiAgICB3aGlsZSAodG9rZW4ubGVuZ3RoIDwgdGhpcy5kaWdpdHMpIHtcbiAgICAgIHRva2VuICs9IHJhbmRvbVN0cmluZygxMCkucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICB9XG4gICAgdG9rZW4gPSB0b2tlbi5zdWJzdHJpbmcoMCwgdGhpcy5kaWdpdHMpO1xuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSh0aGlzLnNtc0NhbGxiYWNrKHRva2VuLCBtb2JpbGUpKTtcbiAgICBjb25zdCBleHBpcnkgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIHRoaXMucGVyaW9kICogMTAwMCk7XG4gICAgcmV0dXJuIHsgdG9rZW4sIGV4cGlyeSB9O1xuICB9XG5cbiAgYXN5bmMgY29uZmlybVNNU09UUChpbnB1dERhdGEsIGF1dGhEYXRhKSB7XG4gICAgY29uc3QgeyBtb2JpbGUsIHRva2VuIH0gPSBpbnB1dERhdGE7XG4gICAgaWYgKCFhdXRoRGF0YS5wZW5kaW5nPy5bbW9iaWxlXSkge1xuICAgICAgdGhyb3cgJ1RoaXMgbnVtYmVyIGlzIG5vdCBwZW5kaW5nJztcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZ0RhdGEgPSBhdXRoRGF0YS5wZW5kaW5nW21vYmlsZV07XG4gICAgaWYgKHRva2VuICE9PSBwZW5kaW5nRGF0YS50b2tlbikge1xuICAgICAgdGhyb3cgJ0ludmFsaWQgTUZBIHRva2VuJztcbiAgICB9XG4gICAgaWYgKG5ldyBEYXRlKCkgPiBwZW5kaW5nRGF0YS5leHBpcnkpIHtcbiAgICAgIHRocm93ICdJbnZhbGlkIE1GQSB0b2tlbic7XG4gICAgfVxuICAgIGRlbGV0ZSBhdXRoRGF0YS5wZW5kaW5nW21vYmlsZV07XG4gICAgYXV0aERhdGEubW9iaWxlID0gbW9iaWxlO1xuICAgIHJldHVybiB7XG4gICAgICBzYXZlOiBhdXRoRGF0YSxcbiAgICB9O1xuICB9XG5cbiAgc2V0dXBUT1RQKG1mYURhdGEpIHtcbiAgICBjb25zdCB7IHNlY3JldCwgdG9rZW4gfSA9IG1mYURhdGE7XG4gICAgaWYgKCFzZWNyZXQgfHwgIXRva2VuIHx8IHNlY3JldC5sZW5ndGggPCAyMCkge1xuICAgICAgdGhyb3cgJ0ludmFsaWQgTUZBIGRhdGEnO1xuICAgIH1cbiAgICBjb25zdCB0b3RwID0gbmV3IFRPVFAoe1xuICAgICAgYWxnb3JpdGhtOiB0aGlzLmFsZ29yaXRobSxcbiAgICAgIGRpZ2l0czogdGhpcy5kaWdpdHMsXG4gICAgICBwZXJpb2Q6IHRoaXMucGVyaW9kLFxuICAgICAgc2VjcmV0OiBTZWNyZXQuZnJvbUJhc2UzMihzZWNyZXQpLFxuICAgIH0pO1xuICAgIGNvbnN0IHZhbGlkID0gdG90cC52YWxpZGF0ZSh7XG4gICAgICB0b2tlbixcbiAgICB9KTtcbiAgICBpZiAodmFsaWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93ICdJbnZhbGlkIE1GQSB0b2tlbic7XG4gICAgfVxuICAgIGNvbnN0IHJlY292ZXJ5ID0gW3JhbmRvbVN0cmluZygzMCksIHJhbmRvbVN0cmluZygzMCldO1xuICAgIHJldHVybiB7XG4gICAgICByZXNwb25zZTogeyByZWNvdmVyeTogcmVjb3Zlcnkuam9pbignLCAnKSB9LFxuICAgICAgc2F2ZTogeyBzZWNyZXQsIHJlY292ZXJ5IH0sXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgbmV3IE1GQUFkYXB0ZXIoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBOEVBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFlBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUF3QyxTQUFBRyx1QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQWhGeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUt3QyxXQUFXLENBQUN4QyxLQUFLLEVBQUU7TUFDL0IsTUFBTSxtQkFBbUI7SUFDM0I7SUFDQSxJQUFJLElBQUljLElBQUksQ0FBQyxDQUFDLEdBQUcwQixXQUFXLENBQUNqQyxNQUFNLEVBQUU7TUFDbkMsTUFBTSxtQkFBbUI7SUFDM0I7SUFDQSxPQUFPYyxRQUFRLENBQUNPLE9BQU8sQ0FBQ3JDLE1BQU0sQ0FBQztJQUMvQjhCLFFBQVEsQ0FBQzlCLE1BQU0sR0FBR0EsTUFBTTtJQUN4QixPQUFPO01BQ0xxQixJQUFJLEVBQUVTO0lBQ1IsQ0FBQztFQUNIO0VBRUE1QixTQUFTQSxDQUFDSCxPQUFPLEVBQUU7SUFDakIsTUFBTTtNQUFFYyxNQUFNO01BQUVKO0lBQU0sQ0FBQyxHQUFHVixPQUFPO0lBQ2pDLElBQUksQ0FBQ2MsTUFBTSxJQUFJLENBQUNKLEtBQUssSUFBSUksTUFBTSxDQUFDMkIsTUFBTSxHQUFHLEVBQUUsRUFBRTtNQUMzQyxNQUFNLGtCQUFrQjtJQUMxQjtJQUNBLE1BQU1oRCxJQUFJLEdBQUcsSUFBSWdDLGFBQUksQ0FBQztNQUNwQjNCLFNBQVMsRUFBRSxJQUFJLENBQUNBLFNBQVM7TUFDekJKLE1BQU0sRUFBRSxJQUFJLENBQUNBLE1BQU07TUFDbkJDLE1BQU0sRUFBRSxJQUFJLENBQUNBLE1BQU07TUFDbkJtQixNQUFNLEVBQUVZLGVBQU0sQ0FBQ0MsVUFBVSxDQUFDYixNQUFNO0lBQ2xDLENBQUMsQ0FBQztJQUNGLE1BQU1jLEtBQUssR0FBR25DLElBQUksQ0FBQ29DLFFBQVEsQ0FBQztNQUMxQm5CO0lBQ0YsQ0FBQyxDQUFDO0lBQ0YsSUFBSWtCLEtBQUssS0FBSyxJQUFJLEVBQUU7TUFDbEIsTUFBTSxtQkFBbUI7SUFDM0I7SUFDQSxNQUFNYixRQUFRLEdBQUcsQ0FBQyxJQUFBNEIseUJBQVksRUFBQyxFQUFFLENBQUMsRUFBRSxJQUFBQSx5QkFBWSxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELE9BQU87TUFDTFEsUUFBUSxFQUFFO1FBQUVwQyxRQUFRLEVBQUVBLFFBQVEsQ0FBQ3FDLElBQUksQ0FBQyxJQUFJO01BQUUsQ0FBQztNQUMzQzlCLElBQUksRUFBRTtRQUFFUixNQUFNO1FBQUVDO01BQVM7SUFDM0IsQ0FBQztFQUNIO0FBQ0Y7QUFBQyxJQUFBc0MsUUFBQSxHQUFBQyxPQUFBLENBQUF4RSxPQUFBLEdBQ2MsSUFBSUMsVUFBVSxDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
334
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfb3RwYXV0aCIsInJlcXVpcmUiLCJfY3J5cHRvVXRpbHMiLCJfQXV0aEFkYXB0ZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTUZBQWRhcHRlciIsIkF1dGhBZGFwdGVyIiwidmFsaWRhdGVPcHRpb25zIiwib3B0cyIsInZhbGlkT3B0aW9ucyIsIm9wdGlvbnMiLCJBcnJheSIsImlzQXJyYXkiLCJzbXMiLCJpbmNsdWRlcyIsInRvdHAiLCJkaWdpdHMiLCJwZXJpb2QiLCJzZW5kU01TIiwic21zQ2FsbGJhY2siLCJhbGdvcml0aG0iLCJ2YWxpZGF0ZVNldFVwIiwibWZhRGF0YSIsIm1vYmlsZSIsInNldHVwTW9iaWxlT1RQIiwic2V0dXBUT1RQIiwidmFsaWRhdGVMb2dpbiIsImxvZ2luRGF0YSIsIl8iLCJyZXEiLCJzYXZlUmVzcG9uc2UiLCJkb05vdFNhdmUiLCJ0b2tlbiIsImF1dGgiLCJvcmlnaW5hbCIsImdldCIsInNlY3JldCIsInJlY292ZXJ5Iiwic2F2ZWQiLCJleHBpcnkiLCJtZmEiLCJzZW5kVG9rZW4iLCJvYmplY3QiLCJzZXQiLCJzYXZlIiwidXNlTWFzdGVyS2V5IiwiRGF0ZSIsInJlY292ZXJ5SW5kZXgiLCJpbmRleE9mIiwidXBkYXRlZFJlY292ZXJ5Iiwic3BsaWNlIiwiVE9UUCIsIlNlY3JldCIsImZyb21CYXNlMzIiLCJ2YWxpZCIsInZhbGlkYXRlIiwidmFsaWRhdGVVcGRhdGUiLCJhdXRoRGF0YSIsIm1hc3RlciIsImNvbmZpcm1TTVNPVFAiLCJvbGQiLCJhZnRlckZpbmQiLCJzdGF0dXMiLCJwb2xpY3kiLCJwZW5kaW5nIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInRlc3QiLCJyYW5kb21TdHJpbmciLCJyZXBsYWNlIiwic3Vic3RyaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXRUaW1lIiwiaW5wdXREYXRhIiwicGVuZGluZ0RhdGEiLCJyZXNwb25zZSIsImpvaW4iLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQXV0aC9tZmEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJzZSBTZXJ2ZXIgYXV0aGVudGljYXRpb24gYWRhcHRlciBmb3IgTXVsdGktRmFjdG9yIEF1dGhlbnRpY2F0aW9uIChNRkEpLlxuICpcbiAqIEBjbGFzcyBNRkFBZGFwdGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBhZGFwdGVyIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0FycmF5PFN0cmluZz59IG9wdGlvbnMub3B0aW9ucyAtIFN1cHBvcnRlZCBNRkEgbWV0aG9kcy4gTXVzdCBpbmNsdWRlIGBcIlNNU1wiYCBvciBgXCJUT1RQXCJgLlxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmRpZ2l0cz02XSAtIFRoZSBudW1iZXIgb2YgZGlnaXRzIGZvciB0aGUgb25lLXRpbWUgcGFzc3dvcmQgKE9UUCkuIE11c3QgYmUgYmV0d2VlbiA0IGFuZCAxMC5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5wZXJpb2Q9MzBdIC0gVGhlIHZhbGlkaXR5IHBlcmlvZCBvZiB0aGUgT1RQIGluIHNlY29uZHMuIE11c3QgYmUgZ3JlYXRlciB0aGFuIDEwLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmFsZ29yaXRobT1cIlNIQTFcIl0gLSBUaGUgYWxnb3JpdGhtIHVzZWQgZm9yIFRPVFAgZ2VuZXJhdGlvbi4gRGVmYXVsdHMgdG8gYFwiU0hBMVwiYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnNlbmRTTVNdIC0gQSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igc2VuZGluZyBTTVMgT1RQcy4gUmVxdWlyZWQgaWYgYFwiU01TXCJgIGlzIGluY2x1ZGVkIGluIGBvcHRpb25zYC5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqICMjIFBhcnNlIFNlcnZlciBDb25maWd1cmF0aW9uXG4gKiBUbyBjb25maWd1cmUgUGFyc2UgU2VydmVyIGZvciBNRkEsIHVzZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHtcbiAqICAgYXV0aDoge1xuICogICAgIG1mYToge1xuICogICAgICAgb3B0aW9uczogW1wiU01TXCIsIFwiVE9UUFwiXSxcbiAqICAgICAgIGRpZ2l0czogNixcbiAqICAgICAgIHBlcmlvZDogMzAsXG4gKiAgICAgICBhbGdvcml0aG06IFwiU0hBMVwiLFxuICogICAgICAgc2VuZFNNUzogKHRva2VuLCBtb2JpbGUpID0+IHtcbiAqICAgICAgICAgLy8gU2VuZCB0aGUgU01TIHVzaW5nIHlvdXIgcHJlZmVycmVkIFNNUyBwcm92aWRlci5cbiAqICAgICAgICAgY29uc29sZS5sb2coYFNlbmRpbmcgU01TIHRvICR7bW9iaWxlfSB3aXRoIHRva2VuOiAke3Rva2VufWApO1xuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogIyMgTUZBIE1ldGhvZHNcbiAqIC0gKipTTVMqKjpcbiAqICAgLSBSZXF1aXJlcyBhIHZhbGlkIG1vYmlsZSBudW1iZXIuXG4gKiAgIC0gU2VuZHMgYSBvbmUtdGltZSBwYXNzd29yZCAoT1RQKSB2aWEgU01TIGZvciBsb2dpbiBvciB2ZXJpZmljYXRpb24uXG4gKiAgIC0gVXNlcyB0aGUgYHNlbmRTTVNgIGNhbGxiYWNrIGZvciBzZW5kaW5nIHRoZSBPVFAuXG4gKlxuICogLSAqKlRPVFAqKjpcbiAqICAgLSBSZXF1aXJlcyBhIHNlY3JldCBrZXkgZm9yIHNldHVwLlxuICogICAtIFZhbGlkYXRlcyB0aGUgdXNlcidzIE9UUCBhZ2FpbnN0IGEgdGltZS1iYXNlZCBvbmUtdGltZSBwYXNzd29yZCAoVE9UUCkgZ2VuZXJhdGVkIHVzaW5nIHRoZSBzZWNyZXQga2V5LlxuICogICAtIFN1cHBvcnRzIGNvbmZpZ3VyYWJsZSBkaWdpdHMsIHBlcmlvZCwgYW5kIGFsZ29yaXRobSBmb3IgVE9UUCBnZW5lcmF0aW9uLlxuICogICAtIEdlbmVyYXRlcyB0d28gc2luZ2xlLXVzZSByZWNvdmVyeSBjb2RlcyBkdXJpbmcgZW5yb2xsbWVudC4gRWFjaCByZWNvdmVyeSBjb2RlIGNhbiBiZSB1c2VkIG9uY2VcbiAqICAgICBpbiBwbGFjZSBvZiBhIFRPVFAgdG9rZW4gYW5kIGlzIGNvbnN1bWVkIGFmdGVyIHVzZS5cbiAqXG4gKiAjIyBNRkEgUGF5bG9hZFxuICogVGhlIGFkYXB0ZXIgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBgYXV0aERhdGFgIGZpZWxkczpcbiAqIC0gKipGb3IgU01TLWJhc2VkIE1GQSoqOlxuICogICAtIGBtb2JpbGVgOiBUaGUgdXNlcidzIG1vYmlsZSBudW1iZXIgKHJlcXVpcmVkIGZvciBzZXR1cCkuXG4gKiAgIC0gYHRva2VuYDogVGhlIE9UUCBwcm92aWRlZCBieSB0aGUgdXNlciBmb3IgbG9naW4gb3IgdmVyaWZpY2F0aW9uLlxuICogLSAqKkZvciBUT1RQLWJhc2VkIE1GQSoqOlxuICogICAtIGBzZWNyZXRgOiBUaGUgVE9UUCBzZWNyZXQga2V5IGZvciB0aGUgdXNlciAocmVxdWlyZWQgZm9yIHNldHVwKS5cbiAqICAgLSBgdG9rZW5gOiBUaGUgT1RQIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGZvciBsb2dpbiBvciB2ZXJpZmljYXRpb24uXG4gKlxuICogIyMgRXhhbXBsZSBQYXlsb2Fkc1xuICogIyMjIFNNUyBTZXR1cCBQYXlsb2FkXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwibW9iaWxlXCI6IFwiKzEyMzQ1Njc4OTBcIlxuICogfVxuICogYGBgXG4gKlxuICogIyMjIFRPVFAgU2V0dXAgUGF5bG9hZFxuICogYGBganNvblxuICoge1xuICogICBcInNlY3JldFwiOiBcIkJBU0UzMkVOQ09ERURTRUNSRVRcIixcbiAqICAgXCJ0b2tlblwiOiBcIjEyMzQ1NlwiXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyMgTG9naW4gUGF5bG9hZFxuICogYGBganNvblxuICoge1xuICogICBcInRva2VuXCI6IFwiMTIzNDU2XCJcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RpbWUtYmFzZWRfT25lLVRpbWVfUGFzc3dvcmRfYWxnb3JpdGhtIFRpbWUtYmFzZWQgT25lLVRpbWUgUGFzc3dvcmQgQWxnb3JpdGhtIChUT1RQKX1cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MjM4IFJGQyA2MjM4OiBUT1RQOiBUaW1lLUJhc2VkIE9uZS1UaW1lIFBhc3N3b3JkIEFsZ29yaXRobX1cbiAqL1xuXG5pbXBvcnQgeyBUT1RQLCBTZWNyZXQgfSBmcm9tICdvdHBhdXRoJztcbmltcG9ydCB7IHJhbmRvbVN0cmluZyB9IGZyb20gJy4uLy4uL2NyeXB0b1V0aWxzJztcbmltcG9ydCBBdXRoQWRhcHRlciBmcm9tICcuL0F1dGhBZGFwdGVyJztcbmNsYXNzIE1GQUFkYXB0ZXIgZXh0ZW5kcyBBdXRoQWRhcHRlciB7XG4gIHZhbGlkYXRlT3B0aW9ucyhvcHRzKSB7XG4gICAgY29uc3QgdmFsaWRPcHRpb25zID0gb3B0cy5vcHRpb25zO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWxpZE9wdGlvbnMpKSB7XG4gICAgICB0aHJvdyAnbWZhLm9wdGlvbnMgbXVzdCBiZSBhbiBhcnJheSc7XG4gICAgfVxuICAgIHRoaXMuc21zID0gdmFsaWRPcHRpb25zLmluY2x1ZGVzKCdTTVMnKTtcbiAgICB0aGlzLnRvdHAgPSB2YWxpZE9wdGlvbnMuaW5jbHVkZXMoJ1RPVFAnKTtcbiAgICBpZiAoIXRoaXMuc21zICYmICF0aGlzLnRvdHApIHtcbiAgICAgIHRocm93ICdtZmEub3B0aW9ucyBtdXN0IGluY2x1ZGUgU01TIG9yIFRPVFAnO1xuICAgIH1cbiAgICBjb25zdCBkaWdpdHMgPSBvcHRzLmRpZ2l0cyB8fCA2O1xuICAgIGNvbnN0IHBlcmlvZCA9IG9wdHMucGVyaW9kIHx8IDMwO1xuICAgIGlmICh0eXBlb2YgZGlnaXRzICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgJ21mYS5kaWdpdHMgbXVzdCBiZSBhIG51bWJlcic7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGVyaW9kICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgJ21mYS5wZXJpb2QgbXVzdCBiZSBhIG51bWJlcic7XG4gICAgfVxuICAgIGlmIChkaWdpdHMgPCA0IHx8IGRpZ2l0cyA+IDEwKSB7XG4gICAgICB0aHJvdyAnbWZhLmRpZ2l0cyBtdXN0IGJlIGJldHdlZW4gNCBhbmQgMTAnO1xuICAgIH1cbiAgICBpZiAocGVyaW9kIDwgMTApIHtcbiAgICAgIHRocm93ICdtZmEucGVyaW9kIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEwJztcbiAgICB9XG4gICAgY29uc3Qgc2VuZFNNUyA9IG9wdHMuc2VuZFNNUztcbiAgICBpZiAodGhpcy5zbXMgJiYgdHlwZW9mIHNlbmRTTVMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93ICdtZmEuc2VuZFNNUyBjYWxsYmFjayBtdXN0IGJlIGRlZmluZWQgd2hlbiB1c2luZyBTTVMgT1RQcyc7XG4gICAgfVxuICAgIHRoaXMuc21zQ2FsbGJhY2sgPSBzZW5kU01TO1xuICAgIHRoaXMuZGlnaXRzID0gZGlnaXRzO1xuICAgIHRoaXMucGVyaW9kID0gcGVyaW9kO1xuICAgIHRoaXMuYWxnb3JpdGhtID0gb3B0cy5hbGdvcml0aG0gfHwgJ1NIQTEnO1xuICB9XG4gIHZhbGlkYXRlU2V0VXAobWZhRGF0YSkge1xuICAgIGlmIChtZmFEYXRhLm1vYmlsZSAmJiB0aGlzLnNtcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0dXBNb2JpbGVPVFAobWZhRGF0YS5tb2JpbGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy50b3RwKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXR1cFRPVFAobWZhRGF0YSk7XG4gICAgfVxuICAgIHRocm93ICdJbnZhbGlkIE1GQSBkYXRhJztcbiAgfVxuICBhc3luYyB2YWxpZGF0ZUxvZ2luKGxvZ2luRGF0YSwgXywgcmVxKSB7XG4gICAgY29uc3Qgc2F2ZVJlc3BvbnNlID0ge1xuICAgICAgZG9Ob3RTYXZlOiB0cnVlLFxuICAgIH07XG4gICAgY29uc3QgdG9rZW4gPSBsb2dpbkRhdGEudG9rZW47XG4gICAgY29uc3QgYXV0aCA9IHJlcS5vcmlnaW5hbC5nZXQoJ2F1dGhEYXRhJykgfHwge307XG4gICAgY29uc3QgeyBzZWNyZXQsIHJlY292ZXJ5LCBtb2JpbGUsIHRva2VuOiBzYXZlZCwgZXhwaXJ5IH0gPSBhdXRoLm1mYSB8fCB7fTtcbiAgICBpZiAodGhpcy5zbXMgJiYgbW9iaWxlKSB7XG4gICAgICBpZiAodG9rZW4gPT09ICdyZXF1ZXN0Jykge1xuICAgICAgICBjb25zdCB7IHRva2VuOiBzZW5kVG9rZW4sIGV4cGlyeSB9ID0gYXdhaXQgdGhpcy5zZW5kU01TKG1vYmlsZSk7XG4gICAgICAgIGF1dGgubWZhLnRva2VuID0gc2VuZFRva2VuO1xuICAgICAgICBhdXRoLm1mYS5leHBpcnkgPSBleHBpcnk7XG4gICAgICAgIHJlcS5vYmplY3Quc2V0KCdhdXRoRGF0YScsIGF1dGgpO1xuICAgICAgICBhd2FpdCByZXEub2JqZWN0LnNhdmUobnVsbCwgeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSk7XG4gICAgICAgIHRocm93ICdQbGVhc2UgZW50ZXIgdGhlIHRva2VuJztcbiAgICAgIH1cbiAgICAgIGlmICghc2F2ZWQgfHwgdG9rZW4gIT09IHNhdmVkKSB7XG4gICAgICAgIHRocm93ICdJbnZhbGlkIE1GQSB0b2tlbiAxJztcbiAgICAgIH1cbiAgICAgIGlmIChuZXcgRGF0ZSgpID4gZXhwaXJ5KSB7XG4gICAgICAgIHRocm93ICdJbnZhbGlkIE1GQSB0b2tlbiAyJztcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBhdXRoLm1mYS50b2tlbjtcbiAgICAgIGRlbGV0ZSBhdXRoLm1mYS5leHBpcnk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzYXZlOiBhdXRoLm1mYSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnRvdHApIHtcbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93ICdJbnZhbGlkIE1GQSB0b2tlbic7XG4gICAgICB9XG4gICAgICBpZiAoIXNlY3JldCkge1xuICAgICAgICByZXR1cm4gc2F2ZVJlc3BvbnNlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjb3ZlcnlJbmRleCA9IHJlY292ZXJ5Py5pbmRleE9mKHRva2VuKSA/PyAtMTtcbiAgICAgIGlmIChyZWNvdmVyeUluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFJlY292ZXJ5ID0gWy4uLnJlY292ZXJ5XTtcbiAgICAgICAgdXBkYXRlZFJlY292ZXJ5LnNwbGljZShyZWNvdmVyeUluZGV4LCAxKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzYXZlOiB7IC4uLmF1dGgubWZhLCByZWNvdmVyeTogdXBkYXRlZFJlY292ZXJ5IH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCB0b3RwID0gbmV3IFRPVFAoe1xuICAgICAgICBhbGdvcml0aG06IHRoaXMuYWxnb3JpdGhtLFxuICAgICAgICBkaWdpdHM6IHRoaXMuZGlnaXRzLFxuICAgICAgICBwZXJpb2Q6IHRoaXMucGVyaW9kLFxuICAgICAgICBzZWNyZXQ6IFNlY3JldC5mcm9tQmFzZTMyKHNlY3JldCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHZhbGlkID0gdG90cC52YWxpZGF0ZSh7XG4gICAgICAgIHRva2VuLFxuICAgICAgfSk7XG4gICAgICBpZiAodmFsaWQgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgJ0ludmFsaWQgTUZBIHRva2VuJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNhdmVSZXNwb25zZTtcbiAgfVxuICBhc3luYyB2YWxpZGF0ZVVwZGF0ZShhdXRoRGF0YSwgXywgcmVxKSB7XG4gICAgaWYgKHJlcS5tYXN0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGF1dGhEYXRhLm1vYmlsZSAmJiB0aGlzLnNtcykge1xuICAgICAgaWYgKCFhdXRoRGF0YS50b2tlbikge1xuICAgICAgICB0aHJvdyAnTUZBIGlzIGFscmVhZHkgc2V0IHVwIG9uIHRoaXMgYWNjb3VudCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jb25maXJtU01TT1RQKGF1dGhEYXRhLCByZXEub3JpZ2luYWwuZ2V0KCdhdXRoRGF0YScpPy5tZmEgfHwge30pO1xuICAgIH1cbiAgICBpZiAodGhpcy50b3RwKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlTG9naW4oeyB0b2tlbjogYXV0aERhdGEub2xkIH0sIG51bGwsIHJlcSk7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVNldFVwKGF1dGhEYXRhKTtcbiAgICB9XG4gICAgdGhyb3cgJ0ludmFsaWQgTUZBIGRhdGEnO1xuICB9XG4gIGFmdGVyRmluZChhdXRoRGF0YSwgb3B0aW9ucywgcmVxKSB7XG4gICAgaWYgKHJlcS5tYXN0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudG90cCAmJiBhdXRoRGF0YS5zZWNyZXQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogJ2VuYWJsZWQnLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc21zICYmIGF1dGhEYXRhLm1vYmlsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiAnZW5hYmxlZCcsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAnZGlzYWJsZWQnLFxuICAgIH07XG4gIH1cblxuICBwb2xpY3kocmVxLCBhdXRoKSB7XG4gICAgaWYgKHRoaXMuc21zICYmIGF1dGg/LnBlbmRpbmcgJiYgT2JqZWN0LmtleXMoYXV0aCkubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICAgIH1cbiAgICByZXR1cm4gJ2FkZGl0aW9uYWwnO1xuICB9XG5cbiAgYXN5bmMgc2V0dXBNb2JpbGVPVFAobW9iaWxlKSB7XG4gICAgY29uc3QgeyB0b2tlbiwgZXhwaXJ5IH0gPSBhd2FpdCB0aGlzLnNlbmRTTVMobW9iaWxlKTtcbiAgICByZXR1cm4ge1xuICAgICAgc2F2ZToge1xuICAgICAgICBwZW5kaW5nOiB7XG4gICAgICAgICAgW21vYmlsZV06IHtcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICAgZXhwaXJ5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBhc3luYyBzZW5kU01TKG1vYmlsZSkge1xuICAgIGlmICghL15bK10qWyhdezAsMX1bMC05XXsxLDN9WyldezAsMX1bLVxcc1xcLi8wLTldKiQvZy50ZXN0KG1vYmlsZSkpIHtcbiAgICAgIHRocm93ICdJbnZhbGlkIG1vYmlsZSBudW1iZXIuJztcbiAgICB9XG4gICAgbGV0IHRva2VuID0gJyc7XG4gICAgd2hpbGUgKHRva2VuLmxlbmd0aCA8IHRoaXMuZGlnaXRzKSB7XG4gICAgICB0b2tlbiArPSByYW5kb21TdHJpbmcoMTApLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgfVxuICAgIHRva2VuID0gdG9rZW4uc3Vic3RyaW5nKDAsIHRoaXMuZGlnaXRzKTtcbiAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUodGhpcy5zbXNDYWxsYmFjayh0b2tlbiwgbW9iaWxlKSk7XG4gICAgY29uc3QgZXhwaXJ5ID0gbmV3IERhdGUobmV3IERhdGUoKS5nZXRUaW1lKCkgKyB0aGlzLnBlcmlvZCAqIDEwMDApO1xuICAgIHJldHVybiB7IHRva2VuLCBleHBpcnkgfTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpcm1TTVNPVFAoaW5wdXREYXRhLCBhdXRoRGF0YSkge1xuICAgIGNvbnN0IHsgbW9iaWxlLCB0b2tlbiB9ID0gaW5wdXREYXRhO1xuICAgIGlmICghYXV0aERhdGEucGVuZGluZz8uW21vYmlsZV0pIHtcbiAgICAgIHRocm93ICdUaGlzIG51bWJlciBpcyBub3QgcGVuZGluZyc7XG4gICAgfVxuICAgIGNvbnN0IHBlbmRpbmdEYXRhID0gYXV0aERhdGEucGVuZGluZ1ttb2JpbGVdO1xuICAgIGlmICh0b2tlbiAhPT0gcGVuZGluZ0RhdGEudG9rZW4pIHtcbiAgICAgIHRocm93ICdJbnZhbGlkIE1GQSB0b2tlbic7XG4gICAgfVxuICAgIGlmIChuZXcgRGF0ZSgpID4gcGVuZGluZ0RhdGEuZXhwaXJ5KSB7XG4gICAgICB0aHJvdyAnSW52YWxpZCBNRkEgdG9rZW4nO1xuICAgIH1cbiAgICBkZWxldGUgYXV0aERhdGEucGVuZGluZ1ttb2JpbGVdO1xuICAgIGF1dGhEYXRhLm1vYmlsZSA9IG1vYmlsZTtcbiAgICByZXR1cm4ge1xuICAgICAgc2F2ZTogYXV0aERhdGEsXG4gICAgfTtcbiAgfVxuXG4gIHNldHVwVE9UUChtZmFEYXRhKSB7XG4gICAgY29uc3QgeyBzZWNyZXQsIHRva2VuIH0gPSBtZmFEYXRhO1xuICAgIGlmICghc2VjcmV0IHx8ICF0b2tlbiB8fCBzZWNyZXQubGVuZ3RoIDwgMjApIHtcbiAgICAgIHRocm93ICdJbnZhbGlkIE1GQSBkYXRhJztcbiAgICB9XG4gICAgY29uc3QgdG90cCA9IG5ldyBUT1RQKHtcbiAgICAgIGFsZ29yaXRobTogdGhpcy5hbGdvcml0aG0sXG4gICAgICBkaWdpdHM6IHRoaXMuZGlnaXRzLFxuICAgICAgcGVyaW9kOiB0aGlzLnBlcmlvZCxcbiAgICAgIHNlY3JldDogU2VjcmV0LmZyb21CYXNlMzIoc2VjcmV0KSxcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZCA9IHRvdHAudmFsaWRhdGUoe1xuICAgICAgdG9rZW4sXG4gICAgfSk7XG4gICAgaWYgKHZhbGlkID09PSBudWxsKSB7XG4gICAgICB0aHJvdyAnSW52YWxpZCBNRkEgdG9rZW4nO1xuICAgIH1cbiAgICBjb25zdCByZWNvdmVyeSA9IFtyYW5kb21TdHJpbmcoMzApLCByYW5kb21TdHJpbmcoMzApXTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzcG9uc2U6IHsgcmVjb3Zlcnk6IHJlY292ZXJ5LmpvaW4oJywgJykgfSxcbiAgICAgIHNhdmU6IHsgc2VjcmV0LCByZWNvdmVyeSB9LFxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IG5ldyBNRkFBZGFwdGVyKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQWdGQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFBd0MsU0FBQUcsdUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFsRnhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUtBLE1BQU1HLFVBQVUsU0FBU0Msb0JBQVcsQ0FBQztFQUNuQ0MsZUFBZUEsQ0FBQ0MsSUFBSSxFQUFFO0lBQ3BCLE1BQU1DLFlBQVksR0FBR0QsSUFBSSxDQUFDRSxPQUFPO0lBQ2pDLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUNILFlB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