superagent 8.0.9 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,17 +5,16 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
5
5
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
6
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
7
7
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
8
- const Stream = require('stream');
9
- const util = require('util');
10
- const net = require('net');
11
- const tls = require('tls');
8
+ const Stream = require('node:stream');
9
+ const net = require('node:net');
10
+ const tls = require('node:tls');
12
11
  // eslint-disable-next-line node/no-deprecated-api
13
- const _require = require('url'),
12
+ const _require = require('node:url'),
14
13
  parse = _require.parse;
15
- const process = require('process');
14
+ const process = require('node:process');
16
15
  const semverGte = require('semver/functions/gte');
17
16
  let http2;
18
- if (semverGte(process.version, 'v10.10.0')) http2 = require('http2');else throw new Error('superagent: this version of Node.js does not support http2');
17
+ if (semverGte(process.version, 'v10.10.0')) http2 = require('node:http2');else throw new Error('superagent: this version of Node.js does not support http2');
19
18
  const _http2$constants = http2.constants,
20
19
  HTTP2_HEADER_PATH = _http2$constants.HTTP2_HEADER_PATH,
21
20
  HTTP2_HEADER_STATUS = _http2$constants.HTTP2_HEADER_STATUS,
@@ -31,138 +30,149 @@ function setProtocol(protocol) {
31
30
  }
32
31
  };
33
32
  }
34
- function Request(protocol, options) {
35
- Stream.call(this);
36
- const defaultPort = protocol === 'https:' ? 443 : 80;
37
- const defaultHost = 'localhost';
38
- const port = options.port || defaultPort;
39
- const host = options.host || defaultHost;
40
- delete options.port;
41
- delete options.host;
42
- this.method = options.method;
43
- this.path = options.path;
44
- this.protocol = protocol;
45
- this.host = host;
46
- delete options.method;
47
- delete options.path;
48
- const sessionOptions = _objectSpread({}, options);
49
- if (options.socketPath) {
50
- sessionOptions.socketPath = options.socketPath;
51
- sessionOptions.createConnection = this.createUnixConnection.bind(this);
33
+ class Request extends Stream {
34
+ constructor(protocol, options) {
35
+ super();
36
+ const defaultPort = protocol === 'https:' ? 443 : 80;
37
+ const defaultHost = 'localhost';
38
+ const port = options.port || defaultPort;
39
+ const host = options.host || defaultHost;
40
+ delete options.port;
41
+ delete options.host;
42
+ this.method = options.method;
43
+ this.path = options.path;
44
+ this.protocol = protocol;
45
+ this.host = host;
46
+ delete options.method;
47
+ delete options.path;
48
+ const sessionOptions = _objectSpread({}, options);
49
+ if (options.socketPath) {
50
+ sessionOptions.socketPath = options.socketPath;
51
+ sessionOptions.createConnection = this.createUnixConnection.bind(this);
52
+ }
53
+ this._headers = {};
54
+ const session = http2.connect(`${protocol}//${host}:${port}`, sessionOptions);
55
+ this.setHeader('host', `${host}:${port}`);
56
+ session.on('error', error => this.emit('error', error));
57
+ this.session = session;
52
58
  }
53
- this._headers = {};
54
- const session = http2.connect(`${protocol}//${host}:${port}`, sessionOptions);
55
- this.setHeader('host', `${host}:${port}`);
56
- session.on('error', error => this.emit('error', error));
57
- this.session = session;
58
- }
59
-
60
- /**
61
- * Inherit from `Stream` (which inherits from `EventEmitter`).
62
- */
63
- util.inherits(Request, Stream);
64
- Request.prototype.createUnixConnection = function (authority, options) {
65
- switch (this.protocol) {
66
- case 'http:':
67
- return net.connect(options.socketPath);
68
- case 'https:':
69
- options.ALPNProtocols = ['h2'];
70
- options.servername = this.host;
71
- options.allowHalfOpen = true;
72
- return tls.connect(options.socketPath, options);
73
- default:
74
- throw new Error('Unsupported protocol', this.protocol);
59
+ createUnixConnection(authority, options) {
60
+ switch (this.protocol) {
61
+ case 'http:':
62
+ {
63
+ return net.connect(options.socketPath);
64
+ }
65
+ case 'https:':
66
+ {
67
+ options.ALPNProtocols = ['h2'];
68
+ options.servername = this.host;
69
+ options.allowHalfOpen = true;
70
+ return tls.connect(options.socketPath, options);
71
+ }
72
+ default:
73
+ {
74
+ throw new Error('Unsupported protocol', this.protocol);
75
+ }
76
+ }
75
77
  }
76
- };
77
- Request.prototype.setNoDelay = function (bool) {
78
- // We can not use setNoDelay with HTTP/2.
79
- // Node 10 limits http2session.socket methods to ones safe to use with HTTP/2.
80
- // See also https://nodejs.org/api/http2.html#http2_http2session_socket
81
- };
82
- Request.prototype.getFrame = function () {
83
- if (this.frame) {
84
- return this.frame;
78
+ setNoDelay(bool) {
79
+ // We can not use setNoDelay with HTTP/2.
80
+ // Node 10 limits http2session.socket methods to ones safe to use with HTTP/2.
81
+ // See also https://nodejs.org/api/http2.html#http2_http2session_socket
85
82
  }
86
- const method = {
87
- [HTTP2_HEADER_PATH]: this.path,
88
- [HTTP2_HEADER_METHOD]: this.method
89
- };
90
- let headers = this.mapToHttp2Header(this._headers);
91
- headers = Object.assign(headers, method);
92
- const frame = this.session.request(headers);
93
- frame.once('response', (headers, flags) => {
94
- headers = this.mapToHttpHeader(headers);
95
- frame.headers = headers;
96
- frame.statusCode = headers[HTTP2_HEADER_STATUS];
97
- frame.status = frame.statusCode;
98
- this.emit('response', frame);
99
- });
100
- this._headerSent = true;
101
- frame.once('drain', () => this.emit('drain'));
102
- frame.on('error', error => this.emit('error', error));
103
- frame.on('close', () => this.session.close());
104
- this.frame = frame;
105
- return frame;
106
- };
107
- Request.prototype.mapToHttpHeader = function (headers) {
108
- const keys = Object.keys(headers);
109
- const http2Headers = {};
110
- for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {
111
- let key = _keys[_i];
112
- let value = headers[key];
113
- key = key.toLowerCase();
114
- switch (key) {
115
- case HTTP2_HEADER_SET_COOKIE:
116
- value = Array.isArray(value) ? value : [value];
117
- break;
118
- default:
119
- break;
83
+ getFrame() {
84
+ if (this.frame) {
85
+ return this.frame;
120
86
  }
121
- http2Headers[key] = value;
87
+ const method = {
88
+ [HTTP2_HEADER_PATH]: this.path,
89
+ [HTTP2_HEADER_METHOD]: this.method
90
+ };
91
+ let headers = this.mapToHttp2Header(this._headers);
92
+ headers = Object.assign(headers, method);
93
+ const frame = this.session.request(headers);
94
+ frame.once('response', (headers, flags) => {
95
+ headers = this.mapToHttpHeader(headers);
96
+ frame.headers = headers;
97
+ frame.statusCode = headers[HTTP2_HEADER_STATUS];
98
+ frame.status = frame.statusCode;
99
+ this.emit('response', frame);
100
+ });
101
+ this._headerSent = true;
102
+ frame.once('drain', () => this.emit('drain'));
103
+ frame.on('error', error => this.emit('error', error));
104
+ frame.on('close', () => this.session.close());
105
+ this.frame = frame;
106
+ return frame;
122
107
  }
123
- return http2Headers;
124
- };
125
- Request.prototype.mapToHttp2Header = function (headers) {
126
- const keys = Object.keys(headers);
127
- const http2Headers = {};
128
- for (var _i2 = 0, _keys2 = keys; _i2 < _keys2.length; _i2++) {
129
- let key = _keys2[_i2];
130
- let value = headers[key];
131
- key = key.toLowerCase();
132
- switch (key) {
133
- case HTTP2_HEADER_HOST:
134
- key = HTTP2_HEADER_AUTHORITY;
135
- value = /^http:\/\/|^https:\/\//.test(value) ? parse(value).host : value;
136
- break;
137
- default:
138
- break;
108
+ mapToHttpHeader(headers) {
109
+ const keys = Object.keys(headers);
110
+ const http2Headers = {};
111
+ for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {
112
+ let key = _keys[_i];
113
+ let value = headers[key];
114
+ key = key.toLowerCase();
115
+ switch (key) {
116
+ case HTTP2_HEADER_SET_COOKIE:
117
+ {
118
+ value = Array.isArray(value) ? value : [value];
119
+ break;
120
+ }
121
+ default:
122
+ {
123
+ break;
124
+ }
125
+ }
126
+ http2Headers[key] = value;
139
127
  }
140
- http2Headers[key] = value;
128
+ return http2Headers;
141
129
  }
142
- return http2Headers;
143
- };
144
- Request.prototype.setHeader = function (name, value) {
145
- this._headers[name.toLowerCase()] = value;
146
- };
147
- Request.prototype.getHeader = function (name) {
148
- return this._headers[name.toLowerCase()];
149
- };
150
- Request.prototype.write = function (data, encoding) {
151
- const frame = this.getFrame();
152
- return frame.write(data, encoding);
153
- };
154
- Request.prototype.pipe = function (stream, options) {
155
- const frame = this.getFrame();
156
- return frame.pipe(stream, options);
157
- };
158
- Request.prototype.end = function (data) {
159
- const frame = this.getFrame();
160
- frame.end(data);
161
- };
162
- Request.prototype.abort = function (data) {
163
- const frame = this.getFrame();
164
- frame.close(NGHTTP2_CANCEL);
165
- this.session.destroy();
166
- };
130
+ mapToHttp2Header(headers) {
131
+ const keys = Object.keys(headers);
132
+ const http2Headers = {};
133
+ for (var _i2 = 0, _keys2 = keys; _i2 < _keys2.length; _i2++) {
134
+ let key = _keys2[_i2];
135
+ let value = headers[key];
136
+ key = key.toLowerCase();
137
+ switch (key) {
138
+ case HTTP2_HEADER_HOST:
139
+ {
140
+ key = HTTP2_HEADER_AUTHORITY;
141
+ value = /^http:\/\/|^https:\/\//.test(value) ? parse(value).host : value;
142
+ break;
143
+ }
144
+ default:
145
+ {
146
+ break;
147
+ }
148
+ }
149
+ http2Headers[key] = value;
150
+ }
151
+ return http2Headers;
152
+ }
153
+ setHeader(name, value) {
154
+ this._headers[name.toLowerCase()] = value;
155
+ }
156
+ getHeader(name) {
157
+ return this._headers[name.toLowerCase()];
158
+ }
159
+ write(data, encoding) {
160
+ const frame = this.getFrame();
161
+ return frame.write(data, encoding);
162
+ }
163
+ pipe(stream, options) {
164
+ const frame = this.getFrame();
165
+ return frame.pipe(stream, options);
166
+ }
167
+ end(data) {
168
+ const frame = this.getFrame();
169
+ frame.end(data);
170
+ }
171
+ abort(data) {
172
+ const frame = this.getFrame();
173
+ frame.close(NGHTTP2_CANCEL);
174
+ this.session.destroy();
175
+ }
176
+ }
167
177
  exports.setProtocol = setProtocol;
168
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdHJlYW0iLCJyZXF1aXJlIiwidXRpbCIsIm5ldCIsInRscyIsInBhcnNlIiwicHJvY2VzcyIsInNlbXZlckd0ZSIsImh0dHAyIiwidmVyc2lvbiIsIkVycm9yIiwiY29uc3RhbnRzIiwiSFRUUDJfSEVBREVSX1BBVEgiLCJIVFRQMl9IRUFERVJfU1RBVFVTIiwiSFRUUDJfSEVBREVSX01FVEhPRCIsIkhUVFAyX0hFQURFUl9BVVRIT1JJVFkiLCJIVFRQMl9IRUFERVJfSE9TVCIsIkhUVFAyX0hFQURFUl9TRVRfQ09PS0lFIiwiTkdIVFRQMl9DQU5DRUwiLCJzZXRQcm90b2NvbCIsInByb3RvY29sIiwicmVxdWVzdCIsIm9wdGlvbnMiLCJSZXF1ZXN0IiwiY2FsbCIsImRlZmF1bHRQb3J0IiwiZGVmYXVsdEhvc3QiLCJwb3J0IiwiaG9zdCIsIm1ldGhvZCIsInBhdGgiLCJzZXNzaW9uT3B0aW9ucyIsInNvY2tldFBhdGgiLCJjcmVhdGVDb25uZWN0aW9uIiwiY3JlYXRlVW5peENvbm5lY3Rpb24iLCJiaW5kIiwiX2hlYWRlcnMiLCJzZXNzaW9uIiwiY29ubmVjdCIsInNldEhlYWRlciIsIm9uIiwiZXJyb3IiLCJlbWl0IiwiaW5oZXJpdHMiLCJwcm90b3R5cGUiLCJhdXRob3JpdHkiLCJBTFBOUHJvdG9jb2xzIiwic2VydmVybmFtZSIsImFsbG93SGFsZk9wZW4iLCJzZXROb0RlbGF5IiwiYm9vbCIsImdldEZyYW1lIiwiZnJhbWUiLCJoZWFkZXJzIiwibWFwVG9IdHRwMkhlYWRlciIsIk9iamVjdCIsImFzc2lnbiIsIm9uY2UiLCJmbGFncyIsIm1hcFRvSHR0cEhlYWRlciIsInN0YXR1c0NvZGUiLCJzdGF0dXMiLCJfaGVhZGVyU2VudCIsImNsb3NlIiwia2V5cyIsImh0dHAySGVhZGVycyIsImtleSIsInZhbHVlIiwidG9Mb3dlckNhc2UiLCJBcnJheSIsImlzQXJyYXkiLCJ0ZXN0IiwibmFtZSIsImdldEhlYWRlciIsIndyaXRlIiwiZGF0YSIsImVuY29kaW5nIiwicGlwZSIsInN0cmVhbSIsImVuZCIsImFib3J0IiwiZGVzdHJveSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbm9kZS9odHRwMndyYXBwZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0Jyk7XG5jb25zdCB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpXG5jb25zdCB7IHBhcnNlIH0gPSByZXF1aXJlKCd1cmwnKTtcbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzJyk7XG5jb25zdCBzZW12ZXJHdGUgPSByZXF1aXJlKCdzZW12ZXIvZnVuY3Rpb25zL2d0ZScpO1xuXG5sZXQgaHR0cDI7XG5cbmlmIChzZW12ZXJHdGUocHJvY2Vzcy52ZXJzaW9uLCAndjEwLjEwLjAnKSkgaHR0cDIgPSByZXF1aXJlKCdodHRwMicpO1xuZWxzZVxuICB0aHJvdyBuZXcgRXJyb3IoJ3N1cGVyYWdlbnQ6IHRoaXMgdmVyc2lvbiBvZiBOb2RlLmpzIGRvZXMgbm90IHN1cHBvcnQgaHR0cDInKTtcblxuY29uc3Qge1xuICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgSFRUUDJfSEVBREVSX1NUQVRVUyxcbiAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgSFRUUDJfSEVBREVSX0FVVEhPUklUWSxcbiAgSFRUUDJfSEVBREVSX0hPU1QsXG4gIEhUVFAyX0hFQURFUl9TRVRfQ09PS0lFLFxuICBOR0hUVFAyX0NBTkNFTFxufSA9IGh0dHAyLmNvbnN0YW50cztcblxuZnVuY3Rpb24gc2V0UHJvdG9jb2wocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHtcbiAgICByZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBuZXcgUmVxdWVzdChwcm90b2NvbCwgb3B0aW9ucyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBSZXF1ZXN0KHByb3RvY29sLCBvcHRpb25zKSB7XG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xuICBjb25zdCBkZWZhdWx0UG9ydCA9IHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwO1xuICBjb25zdCBkZWZhdWx0SG9zdCA9ICdsb2NhbGhvc3QnO1xuICBjb25zdCBwb3J0ID0gb3B0aW9ucy5wb3J0IHx8IGRlZmF1bHRQb3J0O1xuICBjb25zdCBob3N0ID0gb3B0aW9ucy5ob3N0IHx8IGRlZmF1bHRIb3N0O1xuXG4gIGRlbGV0ZSBvcHRpb25zLnBvcnQ7XG4gIGRlbGV0ZSBvcHRpb25zLmhvc3Q7XG5cbiAgdGhpcy5tZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgdGhpcy5wYXRoID0gb3B0aW9ucy5wYXRoO1xuICB0aGlzLnByb3RvY29sID0gcHJvdG9jb2w7XG4gIHRoaXMuaG9zdCA9IGhvc3Q7XG5cbiAgZGVsZXRlIG9wdGlvbnMubWV0aG9kO1xuICBkZWxldGUgb3B0aW9ucy5wYXRoO1xuXG4gIGNvbnN0IHNlc3Npb25PcHRpb25zID0geyAuLi5vcHRpb25zIH07XG4gIGlmIChvcHRpb25zLnNvY2tldFBhdGgpIHtcbiAgICBzZXNzaW9uT3B0aW9ucy5zb2NrZXRQYXRoID0gb3B0aW9ucy5zb2NrZXRQYXRoO1xuICAgIHNlc3Npb25PcHRpb25zLmNyZWF0ZUNvbm5lY3Rpb24gPSB0aGlzLmNyZWF0ZVVuaXhDb25uZWN0aW9uLmJpbmQodGhpcyk7XG4gIH1cblxuICB0aGlzLl9oZWFkZXJzID0ge307XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoYCR7cHJvdG9jb2x9Ly8ke2hvc3R9OiR7cG9ydH1gLCBzZXNzaW9uT3B0aW9ucyk7XG4gIHRoaXMuc2V0SGVhZGVyKCdob3N0JywgYCR7aG9zdH06JHtwb3J0fWApO1xuXG4gIHNlc3Npb24ub24oJ2Vycm9yJywgKGVycm9yKSA9PiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpKTtcblxuICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xufVxuXG4vKipcbiAqIEluaGVyaXQgZnJvbSBgU3RyZWFtYCAod2hpY2ggaW5oZXJpdHMgZnJvbSBgRXZlbnRFbWl0dGVyYCkuXG4gKi9cbnV0aWwuaW5oZXJpdHMoUmVxdWVzdCwgU3RyZWFtKTtcblxuUmVxdWVzdC5wcm90b3R5cGUuY3JlYXRlVW5peENvbm5lY3Rpb24gPSBmdW5jdGlvbiAoYXV0aG9yaXR5LCBvcHRpb25zKSB7XG4gIHN3aXRjaCAodGhpcy5wcm90b2NvbCkge1xuICAgIGNhc2UgJ2h0dHA6JzpcbiAgICAgIHJldHVybiBuZXQuY29ubmVjdChvcHRpb25zLnNvY2tldFBhdGgpO1xuICAgIGNhc2UgJ2h0dHBzOic6XG4gICAgICBvcHRpb25zLkFMUE5Qcm90b2NvbHMgPSBbJ2gyJ107XG4gICAgICBvcHRpb25zLnNlcnZlcm5hbWUgPSB0aGlzLmhvc3Q7XG4gICAgICBvcHRpb25zLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRscy5jb25uZWN0KG9wdGlvbnMuc29ja2V0UGF0aCwgb3B0aW9ucyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wnLCB0aGlzLnByb3RvY29sKTtcbiAgfVxufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuc2V0Tm9EZWxheSA9IGZ1bmN0aW9uIChib29sKSB7XG4gIC8vIFdlIGNhbiBub3QgdXNlIHNldE5vRGVsYXkgd2l0aCBIVFRQLzIuXG4gIC8vIE5vZGUgMTAgbGltaXRzIGh0dHAyc2Vzc2lvbi5zb2NrZXQgbWV0aG9kcyB0byBvbmVzIHNhZmUgdG8gdXNlIHdpdGggSFRUUC8yLlxuICAvLyBTZWUgYWxzbyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAyLmh0bWwjaHR0cDJfaHR0cDJzZXNzaW9uX3NvY2tldFxufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuZ2V0RnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmZyYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSB7XG4gICAgW0hUVFAyX0hFQURFUl9QQVRIXTogdGhpcy5wYXRoLFxuICAgIFtIVFRQMl9IRUFERVJfTUVUSE9EXTogdGhpcy5tZXRob2RcbiAgfTtcblxuICBsZXQgaGVhZGVycyA9IHRoaXMubWFwVG9IdHRwMkhlYWRlcih0aGlzLl9oZWFkZXJzKTtcblxuICBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBtZXRob2QpO1xuXG4gIGNvbnN0IGZyYW1lID0gdGhpcy5zZXNzaW9uLnJlcXVlc3QoaGVhZGVycyk7XG5cbiAgZnJhbWUub25jZSgncmVzcG9uc2UnLCAoaGVhZGVycywgZmxhZ3MpID0+IHtcbiAgICBoZWFkZXJzID0gdGhpcy5tYXBUb0h0dHBIZWFkZXIoaGVhZGVycyk7XG4gICAgZnJhbWUuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgZnJhbWUuc3RhdHVzQ29kZSA9IGhlYWRlcnNbSFRUUDJfSEVBREVSX1NUQVRVU107XG4gICAgZnJhbWUuc3RhdHVzID0gZnJhbWUuc3RhdHVzQ29kZTtcbiAgICB0aGlzLmVtaXQoJ3Jlc3BvbnNlJywgZnJhbWUpO1xuICB9KTtcblxuICB0aGlzLl9oZWFkZXJTZW50ID0gdHJ1ZTtcblxuICBmcmFtZS5vbmNlKCdkcmFpbicsICgpID0+IHRoaXMuZW1pdCgnZHJhaW4nKSk7XG4gIGZyYW1lLm9uKCdlcnJvcicsIChlcnJvcikgPT4gdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKSk7XG4gIGZyYW1lLm9uKCdjbG9zZScsICgpID0+IHRoaXMuc2Vzc2lvbi5jbG9zZSgpKTtcblxuICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gIHJldHVybiBmcmFtZTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLm1hcFRvSHR0cEhlYWRlciA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKTtcbiAgY29uc3QgaHR0cDJIZWFkZXJzID0ge307XG4gIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgbGV0IHZhbHVlID0gaGVhZGVyc1trZXldO1xuICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlIEhUVFAyX0hFQURFUl9TRVRfQ09PS0lFOlxuICAgICAgICB2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGh0dHAySGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gaHR0cDJIZWFkZXJzO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUubWFwVG9IdHRwMkhlYWRlciA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKTtcbiAgY29uc3QgaHR0cDJIZWFkZXJzID0ge307XG4gIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgbGV0IHZhbHVlID0gaGVhZGVyc1trZXldO1xuICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlIEhUVFAyX0hFQURFUl9IT1NUOlxuICAgICAgICBrZXkgPSBIVFRQMl9IRUFERVJfQVVUSE9SSVRZO1xuICAgICAgICB2YWx1ZSA9IC9eaHR0cDpcXC9cXC98Xmh0dHBzOlxcL1xcLy8udGVzdCh2YWx1ZSlcbiAgICAgICAgICA/IHBhcnNlKHZhbHVlKS5ob3N0XG4gICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBodHRwMkhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGh0dHAySGVhZGVycztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnNldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLmdldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB0aGlzLl9oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZykge1xuICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgcmV0dXJuIGZyYW1lLndyaXRlKGRhdGEsIGVuY29kaW5nKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoc3RyZWFtLCBvcHRpb25zKSB7XG4gIGNvbnN0IGZyYW1lID0gdGhpcy5nZXRGcmFtZSgpO1xuICByZXR1cm4gZnJhbWUucGlwZShzdHJlYW0sIG9wdGlvbnMpO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZnJhbWUgPSB0aGlzLmdldEZyYW1lKCk7XG4gIGZyYW1lLmVuZChkYXRhKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZnJhbWUgPSB0aGlzLmdldEZyYW1lKCk7XG4gIGZyYW1lLmNsb3NlKE5HSFRUUDJfQ0FOQ0VMKTtcbiAgdGhpcy5zZXNzaW9uLmRlc3Ryb3koKTtcbn07XG5cbmV4cG9ydHMuc2V0UHJvdG9jb2wgPSBzZXRQcm90b2NvbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLE1BQU1BLE1BQU0sR0FBR0MsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFNQyxJQUFJLEdBQUdELE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTUUsR0FBRyxHQUFHRixPQUFP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
178
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdHJlYW0iLCJyZXF1aXJlIiwibmV0IiwidGxzIiwiX3JlcXVpcmUiLCJwYXJzZSIsInByb2Nlc3MiLCJzZW12ZXJHdGUiLCJodHRwMiIsInZlcnNpb24iLCJFcnJvciIsIl9odHRwMiRjb25zdGFudHMiLCJjb25zdGFudHMiLCJIVFRQMl9IRUFERVJfUEFUSCIsIkhUVFAyX0hFQURFUl9TVEFUVVMiLCJIVFRQMl9IRUFERVJfTUVUSE9EIiwiSFRUUDJfSEVBREVSX0FVVEhPUklUWSIsIkhUVFAyX0hFQURFUl9IT1NUIiwiSFRUUDJfSEVBREVSX1NFVF9DT09LSUUiLCJOR0hUVFAyX0NBTkNFTCIsInNldFByb3RvY29sIiwicHJvdG9jb2wiLCJyZXF1ZXN0Iiwib3B0aW9ucyIsIlJlcXVlc3QiLCJjb25zdHJ1Y3RvciIsImRlZmF1bHRQb3J0IiwiZGVmYXVsdEhvc3QiLCJwb3J0IiwiaG9zdCIsIm1ldGhvZCIsInBhdGgiLCJzZXNzaW9uT3B0aW9ucyIsIl9vYmplY3RTcHJlYWQiLCJzb2NrZXRQYXRoIiwiY3JlYXRlQ29ubmVjdGlvbiIsImNyZWF0ZVVuaXhDb25uZWN0aW9uIiwiYmluZCIsIl9oZWFkZXJzIiwic2Vzc2lvbiIsImNvbm5lY3QiLCJzZXRIZWFkZXIiLCJvbiIsImVycm9yIiwiZW1pdCIsImF1dGhvcml0eSIsIkFMUE5Qcm90b2NvbHMiLCJzZXJ2ZXJuYW1lIiwiYWxsb3dIYWxmT3BlbiIsInNldE5vRGVsYXkiLCJib29sIiwiZ2V0RnJhbWUiLCJmcmFtZSIsImhlYWRlcnMiLCJtYXBUb0h0dHAySGVhZGVyIiwiT2JqZWN0IiwiYXNzaWduIiwib25jZSIsImZsYWdzIiwibWFwVG9IdHRwSGVhZGVyIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsIl9oZWFkZXJTZW50IiwiY2xvc2UiLCJrZXlzIiwiaHR0cDJIZWFkZXJzIiwiX2kiLCJfa2V5cyIsImxlbmd0aCIsImtleSIsInZhbHVlIiwidG9Mb3dlckNhc2UiLCJBcnJheSIsImlzQXJyYXkiLCJfaTIiLCJfa2V5czIiLCJ0ZXN0IiwibmFtZSIsImdldEhlYWRlciIsIndyaXRlIiwiZGF0YSIsImVuY29kaW5nIiwicGlwZSIsInN0cmVhbSIsImVuZCIsImFib3J0IiwiZGVzdHJveSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbm9kZS9odHRwMndyYXBwZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKTtcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25vZGU6bmV0Jyk7XG5jb25zdCB0bHMgPSByZXF1aXJlKCdub2RlOnRscycpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGlcbmNvbnN0IHsgcGFyc2UgfSA9IHJlcXVpcmUoJ25vZGU6dXJsJyk7XG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgnbm9kZTpwcm9jZXNzJyk7XG5jb25zdCBzZW12ZXJHdGUgPSByZXF1aXJlKCdzZW12ZXIvZnVuY3Rpb25zL2d0ZScpO1xuXG5sZXQgaHR0cDI7XG5cbmlmIChzZW12ZXJHdGUocHJvY2Vzcy52ZXJzaW9uLCAndjEwLjEwLjAnKSkgaHR0cDIgPSByZXF1aXJlKCdub2RlOmh0dHAyJyk7XG5lbHNlXG4gIHRocm93IG5ldyBFcnJvcignc3VwZXJhZ2VudDogdGhpcyB2ZXJzaW9uIG9mIE5vZGUuanMgZG9lcyBub3Qgc3VwcG9ydCBodHRwMicpO1xuXG5jb25zdCB7XG4gIEhUVFAyX0hFQURFUl9QQVRILFxuICBIVFRQMl9IRUFERVJfU1RBVFVTLFxuICBIVFRQMl9IRUFERVJfTUVUSE9ELFxuICBIVFRQMl9IRUFERVJfQVVUSE9SSVRZLFxuICBIVFRQMl9IRUFERVJfSE9TVCxcbiAgSFRUUDJfSEVBREVSX1NFVF9DT09LSUUsXG4gIE5HSFRUUDJfQ0FOQ0VMXG59ID0gaHR0cDIuY29uc3RhbnRzO1xuXG5mdW5jdGlvbiBzZXRQcm90b2NvbChwcm90b2NvbCkge1xuICByZXR1cm4ge1xuICAgIHJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHByb3RvY29sLCBvcHRpb25zKTtcbiAgICB9XG4gIH07XG59XG5cbmNsYXNzIFJlcXVlc3QgZXh0ZW5kcyBTdHJlYW0ge1xuICBjb25zdHJ1Y3Rvcihwcm90b2NvbCwgb3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgZGVmYXVsdFBvcnQgPSBwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICBjb25zdCBkZWZhdWx0SG9zdCA9ICdsb2NhbGhvc3QnO1xuICAgIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgfHwgZGVmYXVsdFBvcnQ7XG4gICAgY29uc3QgaG9zdCA9IG9wdGlvbnMuaG9zdCB8fCBkZWZhdWx0SG9zdDtcblxuICAgIGRlbGV0ZSBvcHRpb25zLnBvcnQ7XG4gICAgZGVsZXRlIG9wdGlvbnMuaG9zdDtcblxuICAgIHRoaXMubWV0aG9kID0gb3B0aW9ucy5tZXRob2Q7XG4gICAgdGhpcy5wYXRoID0gb3B0aW9ucy5wYXRoO1xuICAgIHRoaXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICB0aGlzLmhvc3QgPSBob3N0O1xuXG4gICAgZGVsZXRlIG9wdGlvbnMubWV0aG9kO1xuICAgIGRlbGV0ZSBvcHRpb25zLnBhdGg7XG5cbiAgICBjb25zdCBzZXNzaW9uT3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9O1xuICAgIGlmIChvcHRpb25zLnNvY2tldFBhdGgpIHtcbiAgICAgIHNlc3Npb25PcHRpb25zLnNvY2tldFBhdGggPSBvcHRpb25zLnNvY2tldFBhdGg7XG4gICAgICBzZXNzaW9uT3B0aW9ucy5jcmVhdGVDb25uZWN0aW9uID0gdGhpcy5jcmVhdGVVbml4Q29ubmVjdGlvbi5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX2hlYWRlcnMgPSB7fTtcblxuICAgIGNvbnN0IHNlc3Npb24gPSBodHRwMi5jb25uZWN0KFxuICAgICAgYCR7cHJvdG9jb2x9Ly8ke2hvc3R9OiR7cG9ydH1gLFxuICAgICAgc2Vzc2lvbk9wdGlvbnNcbiAgICApO1xuICAgIHRoaXMuc2V0SGVhZGVyKCdob3N0JywgYCR7aG9zdH06JHtwb3J0fWApO1xuXG4gICAgc2Vzc2lvbi5vbignZXJyb3InLCAoZXJyb3IpID0+IHRoaXMuZW1pdCgnZXJyb3InLCBlcnJvcikpO1xuXG4gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgfVxuXG4gIGNyZWF0ZVVuaXhDb25uZWN0aW9uKGF1dGhvcml0eSwgb3B0aW9ucykge1xuICAgIHN3aXRjaCAodGhpcy5wcm90b2NvbCkge1xuICAgICAgY2FzZSAnaHR0cDonOiB7XG4gICAgICAgIHJldHVybiBuZXQuY29ubmVjdChvcHRpb25zLnNvY2tldFBhdGgpO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdodHRwczonOiB7XG4gICAgICAgIG9wdGlvbnMuQUxQTlByb3RvY29scyA9IFsnaDInXTtcbiAgICAgICAgb3B0aW9ucy5zZXJ2ZXJuYW1lID0gdGhpcy5ob3N0O1xuICAgICAgICBvcHRpb25zLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGxzLmNvbm5lY3Qob3B0aW9ucy5zb2NrZXRQYXRoLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sJywgdGhpcy5wcm90b2NvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0Tm9EZWxheShib29sKSB7XG4gICAgLy8gV2UgY2FuIG5vdCB1c2Ugc2V0Tm9EZWxheSB3aXRoIEhUVFAvMi5cbiAgICAvLyBOb2RlIDEwIGxpbWl0cyBodHRwMnNlc3Npb24uc29ja2V0IG1ldGhvZHMgdG8gb25lcyBzYWZlIHRvIHVzZSB3aXRoIEhUVFAvMi5cbiAgICAvLyBTZWUgYWxzbyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAyLmh0bWwjaHR0cDJfaHR0cDJzZXNzaW9uX3NvY2tldFxuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgaWYgKHRoaXMuZnJhbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmZyYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZCA9IHtcbiAgICAgIFtIVFRQMl9IRUFERVJfUEFUSF06IHRoaXMucGF0aCxcbiAgICAgIFtIVFRQMl9IRUFERVJfTUVUSE9EXTogdGhpcy5tZXRob2RcbiAgICB9O1xuXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLm1hcFRvSHR0cDJIZWFkZXIodGhpcy5faGVhZGVycyk7XG5cbiAgICBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBtZXRob2QpO1xuXG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLnNlc3Npb24ucmVxdWVzdChoZWFkZXJzKTtcblxuICAgIGZyYW1lLm9uY2UoJ3Jlc3BvbnNlJywgKGhlYWRlcnMsIGZsYWdzKSA9PiB7XG4gICAgICBoZWFkZXJzID0gdGhpcy5tYXBUb0h0dHBIZWFkZXIoaGVhZGVycyk7XG4gICAgICBmcmFtZS5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgIGZyYW1lLnN0YXR1c0NvZGUgPSBoZWFkZXJzW0hUVFAyX0hFQURFUl9TVEFUVVNdO1xuICAgICAgZnJhbWUuc3RhdHVzID0gZnJhbWUuc3RhdHVzQ29kZTtcbiAgICAgIHRoaXMuZW1pdCgncmVzcG9uc2UnLCBmcmFtZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9oZWFkZXJTZW50ID0gdHJ1ZTtcblxuICAgIGZyYW1lLm9uY2UoJ2RyYWluJywgKCkgPT4gdGhpcy5lbWl0KCdkcmFpbicpKTtcbiAgICBmcmFtZS5vbignZXJyb3InLCAoZXJyb3IpID0+IHRoaXMuZW1pdCgnZXJyb3InLCBlcnJvcikpO1xuICAgIGZyYW1lLm9uKCdjbG9zZScsICgpID0+IHRoaXMuc2Vzc2lvbi5jbG9zZSgpKTtcblxuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBtYXBUb0h0dHBIZWFkZXIoaGVhZGVycykge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKTtcbiAgICBjb25zdCBodHRwMkhlYWRlcnMgPSB7fTtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgbGV0IHZhbHVlID0gaGVhZGVyc1trZXldO1xuICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIEhUVFAyX0hFQURFUl9TRVRfQ09PS0lFOiB7XG4gICAgICAgICAgdmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBodHRwMkhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBodHRwMkhlYWRlcnM7XG4gIH1cblxuICBtYXBUb0h0dHAySGVhZGVyKGhlYWRlcnMpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycyk7XG4gICAgY29uc3QgaHR0cDJIZWFkZXJzID0ge307XG4gICAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICAgIGxldCB2YWx1ZSA9IGhlYWRlcnNba2V5XTtcbiAgICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBIVFRQMl9IRUFERVJfSE9TVDoge1xuICAgICAgICAgIGtleSA9IEhUVFAyX0hFQURFUl9BVVRIT1JJVFk7XG4gICAgICAgICAgdmFsdWUgPSAvXmh0dHA6XFwvXFwvfF5odHRwczpcXC9cXC8vLnRlc3QodmFsdWUpXG4gICAgICAgICAgICA/IHBhcnNlKHZhbHVlKS5ob3N0XG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGh0dHAySGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0dHAySGVhZGVycztcbiAgfVxuXG4gIHNldEhlYWRlcihuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMuX2hlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0SGVhZGVyKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgd3JpdGUoZGF0YSwgZW5jb2RpbmcpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgICByZXR1cm4gZnJhbWUud3JpdGUoZGF0YSwgZW5jb2RpbmcpO1xuICB9XG5cbiAgcGlwZShzdHJlYW0sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgICByZXR1cm4gZnJhbWUucGlwZShzdHJlYW0sIG9wdGlvbnMpO1xuICB9XG5cbiAgZW5kKGRhdGEpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgICBmcmFtZS5lbmQoZGF0YSk7XG4gIH1cblxuICBhYm9ydChkYXRhKSB7XG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLmdldEZyYW1lKCk7XG4gICAgZnJhbWUuY2xvc2UoTkdIVFRQMl9DQU5DRUwpO1xuICAgIHRoaXMuc2Vzc2lvbi5kZXN0cm95KCk7XG4gIH1cbn1cblxuZXhwb3J0cy5zZXRQcm90b2NvbCA9IHNldFByb3RvY29sO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsTUFBTUEsTUFBTSxHQUFHQyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3JDLE1BQU1DLEdBQUcsR0FBR0QsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUMvQixNQUFNRSxHQUFHLEdBQUdGLE9BQU8s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