@bitgo-beta/sdk-api 1.10.1-beta.99 → 1.10.1-beta.990

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +905 -0
  2. package/dist/package.json +13 -25
  3. package/dist/src/api.d.ts +3 -3
  4. package/dist/src/api.d.ts.map +1 -1
  5. package/dist/src/api.js +39 -33
  6. package/dist/src/bitgoAPI.d.ts +64 -11
  7. package/dist/src/bitgoAPI.d.ts.map +1 -1
  8. package/dist/src/bitgoAPI.js +357 -121
  9. package/dist/src/encrypt.d.ts +4 -4
  10. package/dist/src/encrypt.d.ts.map +1 -1
  11. package/dist/src/encrypt.js +44 -7
  12. package/dist/src/index.js +6 -2
  13. package/dist/src/types.d.ts +54 -43
  14. package/dist/src/types.d.ts.map +1 -1
  15. package/dist/src/types.js +4 -2
  16. package/dist/src/util.d.ts +12 -0
  17. package/dist/src/util.d.ts.map +1 -1
  18. package/dist/src/util.js +57 -4
  19. package/dist/src/v1/blockchain.js +25 -12
  20. package/dist/src/v1/keychains.js +27 -22
  21. package/dist/src/v1/markets.js +10 -5
  22. package/dist/src/v1/pendingapproval.d.ts.map +1 -1
  23. package/dist/src/v1/pendingapproval.js +57 -18
  24. package/dist/src/v1/pendingapprovals.d.ts.map +1 -1
  25. package/dist/src/v1/pendingapprovals.js +41 -7
  26. package/dist/src/v1/signPsbt.d.ts +14 -0
  27. package/dist/src/v1/signPsbt.d.ts.map +1 -0
  28. package/dist/src/v1/signPsbt.js +69 -0
  29. package/dist/src/v1/transactionBuilder.js +144 -92
  30. package/dist/src/v1/travelRule.js +60 -23
  31. package/dist/src/v1/verifyAddress.d.ts +6 -0
  32. package/dist/src/v1/verifyAddress.d.ts.map +1 -0
  33. package/dist/src/v1/verifyAddress.js +50 -0
  34. package/dist/src/v1/wallet.d.ts.map +1 -1
  35. package/dist/src/v1/wallet.js +428 -224
  36. package/dist/src/v1/wallets.js +93 -37
  37. package/package.json +13 -25
  38. package/dist/web/main.js +0 -2
  39. package/dist/web/main.js.LICENSE.txt +0 -110
@@ -2,6 +2,42 @@
2
2
  /**
3
3
  * @hidden
4
4
  */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
5
41
  /**
6
42
  */
7
43
  // Pending Approval Object
@@ -10,9 +46,9 @@
10
46
  // Copyright 2015, BitGo, Inc. All Rights Reserved.
11
47
  //
12
48
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
13
- const utxolib = require("@bitgo-beta/utxo-lib");
14
- const Bluebird = require("bluebird");
15
- const _ = require("lodash");
49
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
50
+ const lodash_1 = __importDefault(require("lodash"));
51
+ const util_1 = require("../util");
16
52
  //
17
53
  // Constructor
18
54
  //
@@ -121,12 +157,13 @@ PendingApproval.prototype.get = function (params, callback) {
121
157
  params = params || {};
122
158
  sdk_core_1.common.validateParams(params, [], [], callback);
123
159
  const self = this;
124
- return Bluebird.resolve(this.bitgo.get(this.url()).result())
160
+ return Promise.resolve(this.bitgo.get(this.url()).result())
125
161
  .then(function (res) {
126
162
  self.pendingApproval = res;
127
163
  return self;
128
164
  })
129
- .nodeify(callback);
165
+ .then(callback)
166
+ .catch(callback);
130
167
  };
131
168
  //
132
169
  // Helper function to ensure that self.wallet is set
@@ -154,7 +191,7 @@ PendingApproval.prototype.populateWallet = function () {
154
191
  // we should hopefully be able to move this logic server side soon
155
192
  //
156
193
  PendingApproval.prototype.recreateAndSignTransaction = function (params, callback) {
157
- params = _.extend({}, params);
194
+ params = lodash_1.default.extend({}, params);
158
195
  sdk_core_1.common.validateParams(params, ['txHex'], [], callback);
159
196
  const transaction = utxolib.bitgo.createTransactionFromHex(params.txHex, utxolib.networks.bitcoin);
160
197
  if (!transaction.outs) {
@@ -163,7 +200,7 @@ PendingApproval.prototype.recreateAndSignTransaction = function (params, callbac
163
200
  const network = utxolib.networks[sdk_core_1.common.Environments[this.bitgo.getEnv()].network];
164
201
  params.recipients = {};
165
202
  const self = this;
166
- return Bluebird.try(function () {
203
+ return (0, util_1.tryPromise)(function () {
167
204
  if (self.info().transactionRequest.recipients) {
168
205
  // recipients object found on the pending approvals - use it
169
206
  params.recipients = self.info().transactionRequest.recipients;
@@ -182,7 +219,7 @@ PendingApproval.prototype.recreateAndSignTransaction = function (params, callbac
182
219
  // This looks like a sendmany
183
220
  // Attempt to figure out the outputs by choosing all outputs that were not going back to the wallet as change addresses
184
221
  return self.wallet.addresses({ chain: 1, sort: -1, limit: 500 }).then(function (result) {
185
- const changeAddresses = _.keyBy(result.addresses, 'address');
222
+ const changeAddresses = lodash_1.default.keyBy(result.addresses, 'address');
186
223
  transaction.outs.forEach(function (out) {
187
224
  const outAddress = utxolib.address.fromOutputScript(out.script, network);
188
225
  if (!changeAddresses[outAddress]) {
@@ -206,7 +243,7 @@ PendingApproval.prototype.constructApprovalTx = function (params, callback) {
206
243
  throw new Error('wallet passphrase or xprv required to approve a transactionRequest');
207
244
  }
208
245
  if (params.useOriginalFee) {
209
- if (!_.isBoolean(params.useOriginalFee)) {
246
+ if (!lodash_1.default.isBoolean(params.useOriginalFee)) {
210
247
  throw new Error('invalid type for useOriginalFeeRate');
211
248
  }
212
249
  if (params.fee || params.feeRate || params.feeTxConfirmTarget) {
@@ -214,14 +251,14 @@ PendingApproval.prototype.constructApprovalTx = function (params, callback) {
214
251
  }
215
252
  }
216
253
  const self = this;
217
- return Bluebird.try(function () {
254
+ return (0, util_1.tryPromise)(function () {
218
255
  if (self.type() === 'transactionRequest') {
219
256
  const extendParams = { txHex: self.info().transactionRequest.transaction };
220
257
  if (params.useOriginalFee) {
221
258
  extendParams.fee = self.info().transactionRequest.fee;
222
259
  }
223
260
  return self.populateWallet().then(function () {
224
- return self.recreateAndSignTransaction(_.extend(params, extendParams));
261
+ return self.recreateAndSignTransaction(lodash_1.default.extend(params, extendParams));
225
262
  });
226
263
  }
227
264
  });
@@ -239,7 +276,7 @@ PendingApproval.prototype.approve = function (params, callback) {
239
276
  canRecreateTransaction = false;
240
277
  }
241
278
  // check the wallet balance and compare it with the transaction amount and fee
242
- if (_.isUndefined(params.forceRecreate) && _.isObject(_.get(this, 'wallet.wallet'))) {
279
+ if (lodash_1.default.isUndefined(params.forceRecreate) && lodash_1.default.isObject(lodash_1.default.get(this, 'wallet.wallet'))) {
243
280
  const requestedAmount = this.pendingApproval.info.transactionRequest.requestedAmount || 0;
244
281
  const walletBalance = this.wallet.wallet.spendableBalance;
245
282
  const delta = Math.abs(requestedAmount - walletBalance);
@@ -250,7 +287,7 @@ PendingApproval.prototype.approve = function (params, callback) {
250
287
  }
251
288
  }
252
289
  const self = this;
253
- return Bluebird.try(function () {
290
+ return (0, util_1.tryPromise)(function () {
254
291
  if (self.type() === 'transactionRequest') {
255
292
  if (params.tx) {
256
293
  // the approval tx was reconstructed and explicitly specified - pass it through
@@ -265,7 +302,7 @@ PendingApproval.prototype.approve = function (params, callback) {
265
302
  };
266
303
  }
267
304
  return self.populateWallet().then(function () {
268
- const recreationParams = _.extend({}, params, { txHex: self.info().transactionRequest.transaction }, self.info().transactionRequest.buildParams);
305
+ const recreationParams = lodash_1.default.extend({}, params, { txHex: self.info().transactionRequest.transaction }, self.info().transactionRequest.buildParams);
269
306
  // delete the old build params because we want 'recreateAndSign' to recreate the transaction
270
307
  delete recreationParams.fee;
271
308
  delete recreationParams.unspents;
@@ -281,7 +318,7 @@ PendingApproval.prototype.approve = function (params, callback) {
281
318
  if (transaction) {
282
319
  approvalParams.tx = transaction.tx;
283
320
  }
284
- return Bluebird.resolve(self.bitgo.put(self.url()).send(approvalParams).result()).nodeify(callback);
321
+ return Promise.resolve(self.bitgo.put(self.url()).send(approvalParams).result()).then(callback).catch(callback);
285
322
  })
286
323
  .catch(function (error) {
287
324
  if (!canRecreateTransaction &&
@@ -289,7 +326,7 @@ PendingApproval.prototype.approve = function (params, callback) {
289
326
  error.message.indexOf('transaction conflicts with an existing transaction in the send queue') !== -1)) {
290
327
  throw new Error('unspents expired, wallet passphrase or xprv required to recreate transaction');
291
328
  }
292
- if (_.isUndefined(params.forceRecreate) &&
329
+ if (lodash_1.default.isUndefined(params.forceRecreate) &&
293
330
  error.message.indexOf('could not find unspent output for input') !== -1) {
294
331
  // if the unspents can't be found, we must retry with a newly constructed transaction, so we delete the tx and try again
295
332
  // deleting params.tx will force the code to reach the 'recreateAndSignTransaction' function
@@ -309,7 +346,9 @@ PendingApproval.prototype.approve = function (params, callback) {
309
346
  PendingApproval.prototype.reject = function (params, callback) {
310
347
  params = params || {};
311
348
  sdk_core_1.common.validateParams(params, [], [], callback);
312
- return Bluebird.resolve(this.bitgo.put(this.url()).send({ state: 'rejected' }).result()).nodeify(callback);
349
+ return Promise.resolve(this.bitgo.put(this.url()).send({ state: 'rejected' }).result())
350
+ .then(callback)
351
+ .catch(callback);
313
352
  };
314
353
  //
315
354
  // cancel
@@ -319,4 +358,4 @@ PendingApproval.prototype.cancel = function (params, callback) {
319
358
  return this.reject(params, callback);
320
359
  };
321
360
  module.exports = PendingApproval;
322
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ2FwcHJvdmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3YxL3BlbmRpbmdhcHByb3ZhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7QUFFSDtHQUNHO0FBQ0gsMEJBQTBCO0FBQzFCLDRFQUE0RTtBQUM1RSxFQUFFO0FBQ0Ysb0RBQW9EO0FBQ3BELEVBQUU7QUFDRixtREFBOEM7QUFDOUMsZ0RBQWdEO0FBRWhELHFDQUFxQztBQUNyQyw0QkFBNEI7QUFFNUIsRUFBRTtBQUNGLGNBQWM7QUFDZCxFQUFFO0FBQ0YsTUFBTSxlQUFlLEdBQUcsVUFBVSxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU07SUFDOUQsc0NBQXNDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ25CLHNDQUFzQztJQUN0QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN2QyxzQ0FBc0M7SUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLEtBQUs7QUFDTCx1Q0FBdUM7QUFDdkMsRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHO0lBQzdCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLFlBQVk7QUFDWiw0Q0FBNEM7QUFDNUMseUdBQXlHO0FBQ3pHLHNHQUFzRztBQUN0RywrR0FBK0c7QUFDL0csRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFVBQVUsTUFBTSxFQUFFLFFBQVE7SUFDOUQsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEIsaUJBQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFaEQsSUFBSSxJQUFJ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RyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDaEM7YUFBTTtZQUNMLE1BQU0sS0FBSyxDQUFDO1NBQ2I7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixXQUFXO0FBQ1gsZ0RBQWdEO0FBQ2hELEVBQUU7QUFDRixlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLE1BQU0sRUFBRSxRQUFRO0lBQzNELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RCLGlCQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRWhELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3RyxDQUFDLENBQUM7QUFFRixFQUFFO0FBQ0YsU0FBUztBQUNULCtCQUErQjtBQUMvQixFQUFFO0FBQ0YsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUFNLEVBQUUsUUFBUTtJQUMzRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQztBQUVGLGlCQUFTLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGhpZGRlblxuICovXG5cbi8qKlxuICovXG4vLyBQZW5kaW5nIEFwcHJvdmFsIE9iamVjdFxuLy8gSGFuZGxlcyBhcHByb3ZpbmcsIHJlamVjdGluZyBhbmQgZ2V0dGluZyBpbmZvcm1hdGlvbiBvbiBwZW5kaW5nIGFwcHJvdmFsc1xuLy9cbi8vIENvcHlyaWdodCAyMDE1LCBCaXRHbywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vXG5pbXBvcnQgeyBjb21tb24gfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0ICogYXMgQmx1ZWJpcmQgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuXG4vL1xuLy8gQ29uc3RydWN0b3Jcbi8vXG5jb25zdCBQZW5kaW5nQXBwcm92YWwgPSBmdW5jdGlvbiAoYml0Z28sIHBlbmRpbmdBcHByb3ZhbCwgd2FsbGV0KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBubyBpbXBsaWNpdCB0aGlzXG4gIHRoaXMuYml0Z28gPSBiaXRnbztcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy5wZW5kaW5nQXBwcm92YWwgPSBwZW5kaW5nQXBwcm92YWw7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBubyBpbXBsaWNpdCB0aGlzXG4gIHRoaXMud2FsbGV0ID0gd2FsbGV0O1xufTtcblxuLy9cbi8vIGlkXG4vLyBHZXQgdGhlIGlkIG9mIHRoaXMgcGVuZGluZyBhcHByb3ZhbC5cbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmlkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wZW5kaW5nQXBwcm92YWwuaWQ7XG59O1xuXG4vL1xuLy8gb3duZXJUeXBlXG4vLyBHZXQgdGhlIG93bmVyIHR5cGUgKHdhbGxldCBvciBlbnRlcnByaXNlKVxuLy8gUGVuZGluZyBhcHByb3ZhbHMgY2FuIGJlIGFwcHJvdmVkIG9yIG1vZGlmaWVkIGJ5IGRpZmZlcmVudCBzY29wZXMgKGRlcGVuZGluZyBvbiBob3cgdGhleSB3ZXJlIGNyZWF0ZWQpXG4vLyBJZiBhIHBlbmRpbmcgYXBwcm92YWwgaXMgb3duZWQgYnkgYSB3YWxsZXQsIHRoZW4gaXQgY2FuIGJlIGFwcHJvdmVkIGJ5IGFkbWluaXN0cmF0b3JzIG9mIHRoZSB3YWxsZXRcbi8vIElmIGEgcGVuZGluZyBhcHByb3ZhbCBpcyBvd25lZCBieSBhbiBlbnRlcnByaXNlLCB0aGVuIGl0IGNhbiBiZSBhcHByb3ZlZCBieSBhZG1pbmlzdHJhdG9ycyBvZiB0aGUgZW50ZXJwcmlzZVxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUub3duZXJUeXBlID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgW10sIGNhbGxiYWNrKTtcblxuICBpZiAodGhpcy5wZW5kaW5nQXBwcm92YWwud2FsbGV0SWQpIHtcbiAgICByZXR1cm4gJ3dhbGxldCc7XG4gIH0gZWxzZSBpZiAodGhpcy5wZW5kaW5nQXBwcm92YWwuZW50ZXJwcmlzZSkge1xuICAgIHJldHVybiAnZW50ZXJwcmlzZSc7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHBlbmRpbmcgYXBwcm92YWwgb3duZXI6IG5laXRoZXIgd2FsbGV0SWQgbm9yIGVudGVycHJpc2Ugd2FzIHByZXNlbnQnKTtcbiAgfVxufTtcblxuLy9cbi8vIHdhbGxldElkXG4vLyBHZXQgdGhlIHdhbGxldCBJRCB0aGF0IG93bnMgLyBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBlbmRpbmcgYXBwcm92YWxcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLndhbGxldElkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wZW5kaW5nQXBwcm92YWwud2FsbGV0SWQ7XG59O1xuXG4vL1xuLy8gZW50ZXJwcmlzZUlkXG4vLyBHZXQgdGhlIGVudGVycHJpc2UgSUQgdGhhdCBvd25zIC8gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwZW5kaW5nIGFwcHJvdmFsXG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS5lbnRlcnByaXNlSWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBlbmRpbmdBcHByb3ZhbC5lbnRlcnByaXNlO1xufTtcblxuLy9cbi8vIHN0YXRlXG4vLyBHZXQgdGhlIHN0YXRlIG9mIHRoZSBwZW5kaW5nIGFwcHJvdmFsXG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS5zdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGVuZGluZ0FwcHJvdmFsLnN0YXRlO1xufTtcblxuLy9cbi8vIGNyZWF0b3Jcbi8vIEdldCB0aGUgaWQgb2YgdGhlIHVzZXIgdGhhdCBwZXJmb3JtZWQgdGhlIGFjdGlvbiByZXN1bHRpbmcgaW4gdGhpcyBwZW5kaW5nIGFwcHJvdmFsXG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS5jcmVhdG9yID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wZW5kaW5nQXBwcm92YWwuY3JlYXRvcjtcbn07XG5cbi8vXG4vLyB0eXBlXG4vLyBHZXQgdGhlIHR5cGUgb2YgdGhlIHBlbmRpbmcgYXBwcm92YWwgKHdoYXQgaXQgYXBwcm92ZXMpXG4vLyBFeGFtcGxlOiB0cmFuc2FjdGlvblJlcXVlc3QsIHRhZ1VwZGF0ZVJlcXVlc3QsIHBvbGljeVJ1bGVSZXF1ZXN0XG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS50eXBlID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMucGVuZGluZ0FwcHJvdmFsLmluZm8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlbmRpbmcgYXBwcm92YWwgaW5mbyBpcyBub3QgYXZhaWxhYmxlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXMucGVuZGluZ0FwcHJvdmFsLmluZm8udHlwZTtcbn07XG5cbi8vXG4vLyB0eXBlXG4vLyBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlbmRpbmcgYXBwcm92YWxcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBlbmRpbmdBcHByb3ZhbC5pbmZvO1xufTtcblxuLy9cbi8vIGFwcHJvdmFsc1JlcXVpcmVkXG4vLyBnZXQgdGhlIG51bWJlciBvZiBhcHByb3ZhbHMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgcGVuZGluZyBhcHByb3ZhbCB0byBiZSBhcHByb3ZlZC5cbi8vIERlZmF1bHRzIHRvIDEgaWYgYXBwcm92YWxzUmVxdWlyZWQgZG9lc24ndCBleGlzdCBvbiB0aGUgb2JqZWN0XG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS5hcHByb3ZhbHNSZXF1aXJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGVuZGluZ0FwcHJvdmFsLmFwcHJvdmFsc1JlcXVpcmVkIHx8IDE7XG59O1xuXG4vL1xuLy8gdXJsXG4vLyBHZXRzIHRoZSB1cmwgZm9yIHRoaXMgcGVuZGluZyBhcHByb3ZhbFxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUudXJsID0gZnVuY3Rpb24gKGV4dHJhKSB7XG4gIGV4dHJhID0gZXh0cmEgfHwgJyc7XG4gIHJldHVybiB0aGlzLmJpdGdvLnVybCgnL3BlbmRpbmdhcHByb3ZhbHMvJyArIHRoaXMuaWQoKSArIGV4dHJhKTtcbn07XG5cbi8vXG4vLyBnZXRcbi8vIFJlZmV0Y2hlcyB0aGlzIHBlbmRpbmcgYXBwcm92YWwgYW5kIHJldHVybnMgaXRcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFtdLCBjYWxsYmFjayk7XG5cbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHJldHVybiBCbHVlYmlyZC5yZXNvbHZlKHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCkpLnJlc3VsdCgpKVxuICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIHNlbGYucGVuZGluZ0FwcHJvdmFsID0gcmVzO1xuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfSlcbiAgICAubm9kZWlmeShjYWxsYmFjayk7XG59O1xuXG4vL1xuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGF0IHNlbGYud2FsbGV0IGlzIHNldFxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUucG9wdWxhdGVXYWxsZXQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICBpZiAoIXNlbGYud2FsbGV0KSB7XG4gICAgcmV0dXJuIHNlbGYuYml0Z29cbiAgICAgIC53YWxsZXRzKClcbiAgICAgIC5nZXQoeyBpZDogc2VsZi5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0LnNvdXJjZVdhbGxldCB9KVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKHdhbGxldCkge1xuICAgICAgICBpZiAoIXdhbGxldCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCAtIHVuYWJsZSB0byBnZXQgd2FsbGV0IHVzaW5nIHNvdXJjZXdhbGxldCcpO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYud2FsbGV0ID0gd2FsbGV0O1xuICAgICAgfSk7XG4gIH1cblxuICBpZiAoc2VsZi53YWxsZXQuaWQoKSAhPT0gc2VsZi5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0LnNvdXJjZVdhbGxldCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBzb3VyY2Ugd2FsbGV0IGZvciBwZW5kaW5nIGFwcHJvdmFsJyk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7IC8vIG90aGVyd2lzZSByZXR1cm5zIHVuZGVmaW5lZFxufTtcblxuLy9cbi8vIGhlbHBlciBmdW5jdGlvbiB0byByZWNyZWF0ZSBhbmQgc2lnbiBhIHRyYW5zYWN0aW9uIG9uIGEgd2FsbGV0XG4vLyB3ZSBzaG91bGQgaG9wZWZ1bGx5IGJlIGFibGUgdG8gbW92ZSB0aGlzIGxvZ2ljIHNlcnZlciBzaWRlIHNvb25cbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLnJlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gXy5leHRlbmQoe30sIHBhcmFtcyk7XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsndHhIZXgnXSwgW10sIGNhbGxiYWNrKTtcblxuICBjb25zdCB0cmFuc2FjdGlvbiA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4KHBhcmFtcy50eEhleCwgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKTtcbiAgaWYgKCF0cmFuc2FjdGlvbi5vdXRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBoYWQgbm8gb3V0cHV0cyBvciBmYWlsZWQgdG8gcGFyc2Ugc3VjY2Vzc2Z1bGx5Jyk7XG4gIH1cblxuICBjb25zdCBuZXR3b3JrID0gdXR4b2xpYi5uZXR3b3Jrc1tjb21tb24uRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLm5ldHdvcmtdO1xuICBwYXJhbXMucmVjaXBpZW50cyA9IHt9O1xuXG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiBCbHVlYmlyZC50cnkoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3QucmVjaXBpZW50cykge1xuICAgICAgLy8gcmVjaXBpZW50cyBvYmplY3QgZm91bmQgb24gdGhlIHBlbmRpbmcgYXBwcm92YWxzIC0gdXNlIGl0XG4gICAgICBwYXJhbXMucmVjaXBpZW50cyA9IHNlbGYuaW5mbygpLnRyYW5zYWN0aW9uUmVxdWVzdC5yZWNpcGllbnRzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHJhbnNhY3Rpb24ub3V0cy5sZW5ndGggPD0gMikge1xuICAgICAgdHJhbnNhY3Rpb24ub3V0cy5mb3JFYWNoKGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgY29uc3Qgb3V0QWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG91dC5zY3JpcHQsIG5ldHdvcmspO1xuICAgICAgICBpZiAoc2VsZi5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0LmRlc3RpbmF0aW9uQWRkcmVzcyA9PT0gb3V0QWRkcmVzcykge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGRlc3RpbmF0aW9uLCB0aGVuIHNwZW5kIHRvIGl0XG4gICAgICAgICAgcGFyYW1zLnJlY2lwaWVudHNbb3V0QWRkcmVzc10gPSBvdXQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIHNlbmRtYW55XG4gICAgLy8gQXR0ZW1wdCB0byBmaWd1cmUgb3V0IHRoZSBvdXRwdXRzIGJ5IGNob29zaW5nIGFsbCBvdXRwdXRzIHRoYXQgd2VyZSBub3QgZ29pbmcgYmFjayB0byB0aGUgd2FsbGV0IGFzIGNoYW5nZSBhZGRyZXNzZXNcbiAgICByZXR1cm4gc2VsZi53YWxsZXQuYWRkcmVzc2VzKHsgY2hhaW46IDEsIHNvcnQ6IC0xLCBsaW1pdDogNTAwIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgY29uc3QgY2hhbmdlQWRkcmVzc2VzID0gXy5rZXlCeShyZXN1bHQuYWRkcmVzc2VzLCAnYWRkcmVzcycpO1xuICAgICAgdHJhbnNhY3Rpb24ub3V0cy5mb3JFYWNoKGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgY29uc3Qgb3V0QWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG91dC5zY3JpcHQsIG5ldHdvcmspO1xuICAgICAgICBpZiAoIWNoYW5nZUFkZHJlc3Nlc1tvdXRBZGRyZXNzXSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgY2hhbmdlIGFkZHJlc3MsIHRoZW4gc3BlbmQgdG8gaXRcbiAgICAgICAgICBwYXJhbXMucmVjaXBpZW50c1tvdXRBZGRyZXNzXSA9IG91dC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZWxmLndhbGxldC5jcmVhdGVBbmRTaWduVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgfSk7XG59O1xuXG4vL1xuLy8gY29uc3RydWN0QXBwcm92YWxUeFxuLy8gY29uc3RydWN0cy9zaWducyBhIHRyYW5zYWN0aW9uIGZvciB0aGlzIHBlbmRpbmcgYXBwcm92YWwsIHJldHVybmluZyB0aGUgdHhIZXggKGJ1dCBub3Qgc2VuZGluZyBpdClcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmNvbnN0cnVjdEFwcHJvdmFsVHggPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbJ3dhbGxldFBhc3NwaHJhc2UnXSwgY2FsbGJhY2spO1xuXG4gIGlmICh0aGlzLnR5cGUoKSA9PT0gJ3RyYW5zYWN0aW9uUmVxdWVzdCcgJiYgIShwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB8fCBwYXJhbXMueHBydikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3dhbGxldCBwYXNzcGhyYXNlIG9yIHhwcnYgcmVxdWlyZWQgdG8gYXBwcm92ZSBhIHRyYW5zYWN0aW9uUmVxdWVzdCcpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy51c2VPcmlnaW5hbEZlZSkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4ocGFyYW1zLnVzZU9yaWdpbmFsRmVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHR5cGUgZm9yIHVzZU9yaWdpbmFsRmVlUmF0ZScpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmZlZSB8fCBwYXJhbXMuZmVlUmF0ZSB8fCBwYXJhbXMuZmVlVHhDb25maXJtVGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzcGVjaWZ5IGEgZmVlL2ZlZXJhdGUvZmVlVHhDb25maXJtVGFyZ2V0IGFzIHdlbGwgYXMgdXNlT3JpZ2luYWxGZWUnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWxmID0gdGhpcztcbiAgcmV0dXJuIEJsdWViaXJkLnRyeShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNlbGYudHlwZSgpID09PSAndHJhbnNhY3Rpb25SZXF1ZXN0Jykge1xuICAgICAgY29uc3QgZXh0ZW5kUGFyYW1zOiBhbnkgPSB7IHR4SGV4OiBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3QudHJhbnNhY3Rpb24gfTtcbiAgICAgIGlmIChwYXJhbXMudXNlT3JpZ2luYWxGZWUpIHtcbiAgICAgICAgZXh0ZW5kUGFyYW1zLmZlZSA9IHNlbGYuaW5mbygpLnRyYW5zYWN0aW9uUmVxdWVzdC5mZWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VsZi5wb3B1bGF0ZVdhbGxldCgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2VsZi5yZWNyZWF0ZUFuZFNpZ25UcmFuc2FjdGlvbihfLmV4dGVuZChwYXJhbXMsIGV4dGVuZFBhcmFtcykpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8vXG4vLyBhcHByb3ZlXG4vLyBzZXRzIHRoZSBwZW5kaW5nIGFwcHJvdmFsIHRvIGFuIGFwcHJvdmVkIHN0YXRlXG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS5hcHByb3ZlID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgWyd3YWxsZXRQYXNzcGhyYXNlJywgJ290cCddLCBjYWxsYmFjayk7XG5cbiAgbGV0IGNhblJlY3JlYXRlVHJhbnNhY3Rpb24gPSB0cnVlO1xuICBpZiAodGhpcy50eXBlKCkgPT09ICd0cmFuc2FjdGlvblJlcXVlc3QnKSB7XG4gICAgaWYgKCFwYXJhbXMud2FsbGV0UGFzc3BocmFzZSAmJiAhcGFyYW1zLnhwcnYpIHtcbiAgICAgIGNhblJlY3JlYXRlVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aGUgd2FsbGV0IGJhbGFuY2UgYW5kIGNvbXBhcmUgaXQgd2l0aCB0aGUgdHJhbnNhY3Rpb24gYW1vdW50IGFuZCBmZWVcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMuZm9yY2VSZWNyZWF0ZSkgJiYgXy5pc09iamVjdChfLmdldCh0aGlzLCAnd2FsbGV0LndhbGxldCcpKSkge1xuICAgICAgY29uc3QgcmVxdWVzdGVkQW1vdW50ID0gdGhpcy5wZW5kaW5nQXBwcm92YWwuaW5mby50cmFuc2FjdGlvblJlcXVlc3QucmVxdWVzdGVkQW1vdW50IHx8IDA7XG4gICAgICBjb25zdCB3YWxsZXRCYWxhbmNlID0gdGhpcy53YWxsZXQud2FsbGV0LnNwZW5kYWJsZUJhbGFuY2U7XG4gICAgICBjb25zdCBkZWx0YSA9IE1hdGguYWJzKHJlcXVlc3RlZEFtb3VudCAtIHdhbGxldEJhbGFuY2UpO1xuICAgICAgaWYgKGRlbHRhIDw9IDEwMDAwKSB7XG4gICAgICAgIC8vIGl0J3MgYSBzd2VlcCBiZWNhdXNlIHdlJ3JlIHdpdGhpbiAxMGsgc2F0b3NoaXMgb2YgdGhlIHdhbGxldCBiYWxhbmNlXG4gICAgICAgIGNhblJlY3JlYXRlVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWxmID0gdGhpcztcbiAgcmV0dXJuIEJsdWViaXJkLnRyeShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNlbGYudHlwZSgpID09PSAndHJhbnNhY3Rpb25SZXF1ZXN0Jykge1xuICAgICAgaWYgKHBhcmFtcy50eCkge1xuICAgICAgICAvLyB0aGUgYXBwcm92YWwgdHggd2FzIHJlY29uc3RydWN0ZWQgYW5kIGV4cGxpY2l0bHkgc3BlY2lmaWVkIC0gcGFzcyBpdCB0aHJvdWdoXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHg6IHBhcmFtcy50eCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gdGhpcyB1c2VyIG1heSBub3QgaGF2ZSBzcGVuZGluZyBwcml2aWxlZ2VzIG9yIGEgcGFzc3BocmFzZSBtYXkgbm90IGhhdmUgYmVlbiBwYXNzZWQgaW5cbiAgICAgIGlmICghY2FuUmVjcmVhdGVUcmFuc2FjdGlvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR4OiBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3QudHJhbnNhY3Rpb24sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWxmLnBvcHVsYXRlV2FsbGV0KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY3JlYXRpb25QYXJhbXMgPSBfLmV4dGVuZChcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgeyB0eEhleDogc2VsZi5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0LnRyYW5zYWN0aW9uIH0sXG4gICAgICAgICAgc2VsZi5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0LmJ1aWxkUGFyYW1zXG4gICAgICAgICk7XG4gICAgICAgIC8vIGRlbGV0ZSB0aGUgb2xkIGJ1aWxkIHBhcmFtcyBiZWNhdXNlIHdlIHdhbnQgJ3JlY3JlYXRlQW5kU2lnbicgdG8gcmVjcmVhdGUgdGhlIHRyYW5zYWN0aW9uXG4gICAgICAgIGRlbGV0ZSByZWNyZWF0aW9uUGFyYW1zLmZlZTtcbiAgICAgICAgZGVsZXRlIHJlY3JlYXRpb25QYXJhbXMudW5zcGVudHM7XG4gICAgICAgIGRlbGV0ZSByZWNyZWF0aW9uUGFyYW1zLnR4SW5mbztcbiAgICAgICAgZGVsZXRlIHJlY3JlYXRpb25QYXJhbXMuZXN0aW1hdGVkU2l6ZTtcbiAgICAgICAgZGVsZXRlIHJlY3JlYXRpb25QYXJhbXMuY2hhbmdlQWRkcmVzc2VzO1xuICAgICAgICByZXR1cm4gc2VsZi5yZWNyZWF0ZUFuZFNpZ25UcmFuc2FjdGlvbihyZWNyZWF0aW9uUGFyYW1zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSlcbiAgICAudGhlbihmdW5jdGlvbiAodHJhbnNhY3Rpb24pIHtcbiAgICAgIGNvbnN0IGFwcHJvdmFsUGFyYW1zOiBhbnkgPSB7IHN0YXRlOiAnYXBwcm92ZWQnLCBvdHA6IHBhcmFtcy5vdHAgfTtcbiAgICAgIGlmICh0cmFuc2FjdGlvbikge1xuICAgICAgICBhcHByb3ZhbFBhcmFtcy50eCA9IHRyYW5zYWN0aW9uLnR4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIEJsdWViaXJkLnJlc29sdmUoc2VsZi5iaXRnby5wdXQoc2VsZi51cmwoKSkuc2VuZChhcHByb3ZhbFBhcmFtcykucmVzdWx0KCkpLm5vZGVpZnkoY2FsbGJhY2spO1xuICAgIH0pXG4gICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKFxuICAgICAgICAhY2FuUmVjcmVhdGVUcmFuc2FjdGlvbiAmJlxuICAgICAgICAoZXJyb3IubWVzc2FnZS5pbmRleE9mKCdjb3VsZCBub3QgZmluZCB1bnNwZW50IG91dHB1dCBmb3IgaW5wdXQnKSAhPT0gLTEgfHxcbiAgICAgICAgICBlcnJvci5tZXNzYWdlLmluZGV4T2YoJ3RyYW5zYWN0aW9uIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uIGluIHRoZSBzZW5kIHF1ZXVlJykgIT09IC0xKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zcGVudHMgZXhwaXJlZCwgd2FsbGV0IHBhc3NwaHJhc2Ugb3IgeHBydiByZXF1aXJlZCB0byByZWNyZWF0ZSB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBfLmlzVW5kZWZpbmVkKHBhcmFtcy5mb3JjZVJlY3JlYXRlKSAmJlxuICAgICAgICBlcnJvci5tZXNzYWdlLmluZGV4T2YoJ2NvdWxkIG5vdCBmaW5kIHVuc3BlbnQgb3V0cHV0IGZvciBpbnB1dCcpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIC8vIGlmIHRoZSB1bnNwZW50cyBjYW4ndCBiZSBmb3VuZCwgd2UgbXVzdCByZXRyeSB3aXRoIGEgbmV3bHkgY29uc3RydWN0ZWQgdHJhbnNhY3Rpb24sIHNvIHdlIGRlbGV0ZSB0aGUgdHggYW5kIHRyeSBhZ2FpblxuICAgICAgICAvLyBkZWxldGluZyBwYXJhbXMudHggd2lsbCBmb3JjZSB0aGUgY29kZSB0byByZWFjaCB0aGUgJ3JlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uJyBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcGFyYW1zLnR4O1xuICAgICAgICBwYXJhbXMuZm9yY2VSZWNyZWF0ZSA9IHRydWU7XG4gICAgICAgIHNlbGYuYXBwcm92ZShwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pO1xufTtcblxuLy9cbi8vIHJlamVjdGVkXG4vLyBzZXRzIHRoZSBwZW5kaW5nIGFwcHJvdmFsIHRvIGEgcmVqZWN0ZWQgc3RhdGVcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFtdLCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIEJsdWViaXJkLnJlc29sdmUodGhpcy5iaXRnby5wdXQodGhpcy51cmwoKSkuc2VuZCh7IHN0YXRlOiAncmVqZWN0ZWQnIH0pLnJlc3VsdCgpKS5ub2RlaWZ5KGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyBjYW5jZWxcbi8vIHJlamVjdHMgdGhlIHBlbmRpbmcgYXBwcm92YWxcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHJldHVybiB0aGlzLnJlamVjdChwYXJhbXMsIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCA9IFBlbmRpbmdBcHByb3ZhbDtcbiJdfQ==
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ2FwcHJvdmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3YxL3BlbmRpbmdhcHByb3ZhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSDtHQUNHO0FBQ0gsMEJBQTBCO0FBQzFCLDRFQUE0RTtBQUM1RSxFQUFFO0FBQ0Ysb0RBQW9EO0FBQ3BELEVBQUU7QUFDRixtREFBOEM7QUFDOUMsOERBQWdEO0FBRWhELG9EQUF1QjtBQUN2QixrQ0FBcUM7QUFFckMsRUFBRTtBQUNGLGNBQWM7QUFDZCxFQUFFO0FBQ0YsTUFBTSxlQUFlLEdBQUcsVUFBVSxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU07SUFDOUQsc0NBQXNDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ25CLHNDQUFzQztJQUN0QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN2QyxzQ0FBc0M7SUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLEtBQUs7QUFDTCx1Q0FBdUM7QUFDdkMsRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHO0lBQzdCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLFlBQVk7QUFDWiw0Q0FBNEM7QUFDNUMseUdBQXlHO0FBQ3pHLHNHQUFzRztBQUN0RywrR0FBK0c7QUFDL0csRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFVBQVUsTUFBTSxFQUFFLFFBQVE7SUFDOUQsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEIsaUJBQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFaEQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7U0FBTSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0MsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGdGQUFnRixDQUFDLENBQUM7SUFDcEcsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixXQUFXO0FBQ1gsd0VBQXdFO0FBQ3hFLEVBQUU7QUFDRixlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRztJQUNuQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO0FBQ3ZDLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixlQUFlO0FBQ2YsNEVBQTRFO0FBQzVFLEVBQUU7QUFDRixlQUFlLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRztJQUN2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixRQUFRO0FBQ1Isd0NBQXdDO0FBQ3hDLEVBQUU7QUFDRixlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRztJQUNoQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixVQUFVO0FBQ1Ysc0ZBQXNGO0FBQ3RGLEVBQUU7QUFDRixlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRztJQUNsQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixPQUFPO0FBQ1AsMERBQTBEO0FBQzFELG1FQUFtRTtBQUNuRSxFQUFFO0FBQ0YsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUc7SUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixFQUFFO0FBQ0YsT0FBTztBQUNQLDZDQUE2QztBQUM3QyxFQUFFO0FBQ0YsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUc7SUFDL0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztBQUNuQyxDQUFDLENBQUM7QUFFRixFQUFFO0FBQ0Ysb0JBQW9CO0FBQ3BCLDBGQUEwRjtBQUMxRixpRUFBaUU7QUFDakUsRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUc7SUFDNUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFFRixFQUFFO0FBQ0YsTUFBTTtBQUNOLHlDQUF5QztBQUN6QyxFQUFFO0FBQ0YsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsVUFBVSxLQUFLO0lBQzdDLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixNQUFNO0FBQ04saURBQWlEO0FBQ2pELEVBQUU7QUFDRixlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxVQUFVLE1BQU0sRUFBRSxRQUFRO0lBQ3hELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RCLGlCQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRWhELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDeEQsSUFBSSxDQUFDLFVBQVUsR0FBRztRQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxRQUFRLENBQUM7U0FDZCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLG9EQUFvRDtBQUNwRCxFQUFFO0FBQ0YsZUFBZSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEdBQUc7SUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNkLE9BQU8sRUFBRTthQUNULEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDeEQsSUFBSSxDQUFDLFVBQVUsTUFBTTtZQUNwQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1lBQzFFLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyw4QkFBOEI7QUFDMUQsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLGlFQUFpRTtBQUNqRSxrRUFBa0U7QUFDbEUsRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsMEJBQTBCLEdBQUcsVUFBVSxNQUFNLEVBQUUsUUFBUTtJQUMvRSxNQUFNLEdBQUcsZ0JBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLGlCQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV2RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkYsTUFBTSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFFdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBRWxCLE9BQU8sSUFBQSxpQkFBVSxFQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlDLDREQUE0RDtZQUM1RCxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7WUFDOUQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRztnQkFDcEMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDckUsK0NBQStDO29CQUMvQyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQzVDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU87UUFDVCxDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLHVIQUF1SDtRQUN2SCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTTtZQUNwRixNQUFNLGVBQWUsR0FBRyxnQkFBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzdELFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRztnQkFDcEMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLG9EQUFvRDtvQkFDcEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUM1QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixzQkFBc0I7QUFDdEIscUdBQXFHO0FBQ3JHLEVBQUU7QUFDRixlQUFlLENBQUMsU0FBUyxDQUFDLG1CQUFtQixHQUFHLFVBQVUsTUFBTSxFQUFFLFFBQVE7SUFDeEUsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEIsaUJBQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFbEUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssb0JBQW9CLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN0RixNQUFNLElBQUksS0FBSyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsMkVBQTJFLENBQUMsQ0FBQztRQUMvRixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLElBQUEsaUJBQVUsRUFBQztRQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sWUFBWSxHQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoRixJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDMUIsWUFBWSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDO1lBQ3hELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLGdCQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLFVBQVU7QUFDVixpREFBaUQ7QUFDakQsRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFVBQVUsTUFBTSxFQUFFLFFBQVE7SUFDNUQsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEIsaUJBQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXpFLElBQUksc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLG9CQUFvQixFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDakMsQ0FBQztRQUVELDhFQUE4RTtRQUM5RSxJQUFJLGdCQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxnQkFBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUM7WUFDMUYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7WUFDMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLENBQUM7WUFDeEQsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ25CLHVFQUF1RTtnQkFDdkUsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLElBQUEsaUJBQVUsRUFBQztRQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pDLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNkLCtFQUErRTtnQkFDL0UsT0FBTztvQkFDTCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7aUJBQ2QsQ0FBQztZQUNKLENBQUM7WUFFRCx5RkFBeUY7WUFDekYsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQzVCLE9BQU87b0JBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXO2lCQUMvQyxDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBQyxDQUFDLE1BQU0sQ0FDL0IsRUFBRSxFQUNGLE1BQU0sRUFDTixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLEVBQ3JELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQzNDLENBQUM7Z0JBQ0YsNEZBQTRGO2dCQUM1RixPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztnQkFDNUIsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ2pDLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDO2dCQUMvQixPQUFPLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztnQkFDdEMsT0FBTyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUM7Z0JBQ3hDLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO1NBQ0MsSUFBSSxDQUFDLFVBQVUsV0FBVztRQUN6QixNQUFNLGNBQWMsR0FBUSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuRSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLGNBQWMsQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEgsQ0FBQyxDQUFDO1NBQ0QsS0FBSyxDQUFDLFVBQVUsS0FBSztRQUNwQixJQUNFLENBQUMsc0JBQXNCO1lBQ3ZCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMseUNBQXlDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHNFQUFzRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDdkcsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsOEVBQThFLENBQUMsQ0FBQztRQUNsRyxDQUFDO1FBQ0QsSUFDRSxnQkFBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQ25DLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3ZFLENBQUM7WUFDRCx3SEFBd0g7WUFDeEgsNEZBQTRGO1lBQzVGLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLFdBQVc7QUFDWCxnREFBZ0Q7QUFDaEQsRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFVBQVUsTUFBTSxFQUFFLFFBQVE7SUFDM0QsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEIsaUJBQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFaEQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3BGLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDZCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLFNBQVM7QUFDVCwrQkFBK0I7QUFDL0IsRUFBRTtBQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFVBQVUsTUFBTSxFQUFFLFFBQVE7SUFDM0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixpQkFBUyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBoaWRkZW5cbiAqL1xuXG4vKipcbiAqL1xuLy8gUGVuZGluZyBBcHByb3ZhbCBPYmplY3Rcbi8vIEhhbmRsZXMgYXBwcm92aW5nLCByZWplY3RpbmcgYW5kIGdldHRpbmcgaW5mb3JtYXRpb24gb24gcGVuZGluZyBhcHByb3ZhbHNcbi8vXG4vLyBDb3B5cmlnaHQgMjAxNSwgQml0R28sIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vL1xuaW1wb3J0IHsgY29tbW9uIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB0cnlQcm9taXNlIH0gZnJvbSAnLi4vdXRpbCc7XG5cbi8vXG4vLyBDb25zdHJ1Y3RvclxuLy9cbmNvbnN0IFBlbmRpbmdBcHByb3ZhbCA9IGZ1bmN0aW9uIChiaXRnbywgcGVuZGluZ0FwcHJvdmFsLCB3YWxsZXQpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy5iaXRnbyA9IGJpdGdvO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbm8gaW1wbGljaXQgdGhpc1xuICB0aGlzLnBlbmRpbmdBcHByb3ZhbCA9IHBlbmRpbmdBcHByb3ZhbDtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy53YWxsZXQgPSB3YWxsZXQ7XG59O1xuXG4vL1xuLy8gaWRcbi8vIEdldCB0aGUgaWQgb2YgdGhpcyBwZW5kaW5nIGFwcHJvdmFsLlxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUuaWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBlbmRpbmdBcHByb3ZhbC5pZDtcbn07XG5cbi8vXG4vLyBvd25lclR5cGVcbi8vIEdldCB0aGUgb3duZXIgdHlwZSAod2FsbGV0IG9yIGVudGVycHJpc2UpXG4vLyBQZW5kaW5nIGFwcHJvdmFscyBjYW4gYmUgYXBwcm92ZWQgb3IgbW9kaWZpZWQgYnkgZGlmZmVyZW50IHNjb3BlcyAoZGVwZW5kaW5nIG9uIGhvdyB0aGV5IHdlcmUgY3JlYXRlZClcbi8vIElmIGEgcGVuZGluZyBhcHByb3ZhbCBpcyBvd25lZCBieSBhIHdhbGxldCwgdGhlbiBpdCBjYW4gYmUgYXBwcm92ZWQgYnkgYWRtaW5pc3RyYXRvcnMgb2YgdGhlIHdhbGxldFxuLy8gSWYgYSBwZW5kaW5nIGFwcHJvdmFsIGlzIG93bmVkIGJ5IGFuIGVudGVycHJpc2UsIHRoZW4gaXQgY2FuIGJlIGFwcHJvdmVkIGJ5IGFkbWluaXN0cmF0b3JzIG9mIHRoZSBlbnRlcnByaXNlXG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS5vd25lclR5cGUgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbXSwgY2FsbGJhY2spO1xuXG4gIGlmICh0aGlzLnBlbmRpbmdBcHByb3ZhbC53YWxsZXRJZCkge1xuICAgIHJldHVybiAnd2FsbGV0JztcbiAgfSBlbHNlIGlmICh0aGlzLnBlbmRpbmdBcHByb3ZhbC5lbnRlcnByaXNlKSB7XG4gICAgcmV0dXJuICdlbnRlcnByaXNlJztcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgcGVuZGluZyBhcHByb3ZhbCBvd25lcjogbmVpdGhlciB3YWxsZXRJZCBub3IgZW50ZXJwcmlzZSB3YXMgcHJlc2VudCcpO1xuICB9XG59O1xuXG4vL1xuLy8gd2FsbGV0SWRcbi8vIEdldCB0aGUgd2FsbGV0IElEIHRoYXQgb3ducyAvIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGVuZGluZyBhcHByb3ZhbFxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUud2FsbGV0SWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBlbmRpbmdBcHByb3ZhbC53YWxsZXRJZDtcbn07XG5cbi8vXG4vLyBlbnRlcnByaXNlSWRcbi8vIEdldCB0aGUgZW50ZXJwcmlzZSBJRCB0aGF0IG93bnMgLyBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBlbmRpbmcgYXBwcm92YWxcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmVudGVycHJpc2VJZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGVuZGluZ0FwcHJvdmFsLmVudGVycHJpc2U7XG59O1xuXG4vL1xuLy8gc3RhdGVcbi8vIEdldCB0aGUgc3RhdGUgb2YgdGhlIHBlbmRpbmcgYXBwcm92YWxcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLnN0YXRlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wZW5kaW5nQXBwcm92YWwuc3RhdGU7XG59O1xuXG4vL1xuLy8gY3JlYXRvclxuLy8gR2V0IHRoZSBpZCBvZiB0aGUgdXNlciB0aGF0IHBlcmZvcm1lZCB0aGUgYWN0aW9uIHJlc3VsdGluZyBpbiB0aGlzIHBlbmRpbmcgYXBwcm92YWxcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmNyZWF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBlbmRpbmdBcHByb3ZhbC5jcmVhdG9yO1xufTtcblxuLy9cbi8vIHR5cGVcbi8vIEdldCB0aGUgdHlwZSBvZiB0aGUgcGVuZGluZyBhcHByb3ZhbCAod2hhdCBpdCBhcHByb3Zlcylcbi8vIEV4YW1wbGU6IHRyYW5zYWN0aW9uUmVxdWVzdCwgdGFnVXBkYXRlUmVxdWVzdCwgcG9saWN5UnVsZVJlcXVlc3Rcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLnR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5wZW5kaW5nQXBwcm92YWwuaW5mbykge1xuICAgIHRocm93IG5ldyBFcnJvcigncGVuZGluZyBhcHByb3ZhbCBpbmZvIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgfVxuICByZXR1cm4gdGhpcy5wZW5kaW5nQXBwcm92YWwuaW5mby50eXBlO1xufTtcblxuLy9cbi8vIHR5cGVcbi8vIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVuZGluZyBhcHByb3ZhbFxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGVuZGluZ0FwcHJvdmFsLmluZm87XG59O1xuXG4vL1xuLy8gYXBwcm92YWxzUmVxdWlyZWRcbi8vIGdldCB0aGUgbnVtYmVyIG9mIGFwcHJvdmFscyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgdGhpcyBwZW5kaW5nIGFwcHJvdmFsIHRvIGJlIGFwcHJvdmVkLlxuLy8gRGVmYXVsdHMgdG8gMSBpZiBhcHByb3ZhbHNSZXF1aXJlZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBvYmplY3Rcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmFwcHJvdmFsc1JlcXVpcmVkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wZW5kaW5nQXBwcm92YWwuYXBwcm92YWxzUmVxdWlyZWQgfHwgMTtcbn07XG5cbi8vXG4vLyB1cmxcbi8vIEdldHMgdGhlIHVybCBmb3IgdGhpcyBwZW5kaW5nIGFwcHJvdmFsXG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS51cmwgPSBmdW5jdGlvbiAoZXh0cmEpIHtcbiAgZXh0cmEgPSBleHRyYSB8fCAnJztcbiAgcmV0dXJuIHRoaXMuYml0Z28udXJsKCcvcGVuZGluZ2FwcHJvdmFscy8nICsgdGhpcy5pZCgpICsgZXh0cmEpO1xufTtcblxuLy9cbi8vIGdldFxuLy8gUmVmZXRjaGVzIHRoaXMgcGVuZGluZyBhcHByb3ZhbCBhbmQgcmV0dXJucyBpdFxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgW10sIGNhbGxiYWNrKTtcblxuICBjb25zdCBzZWxmID0gdGhpcztcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgpKS5yZXN1bHQoKSlcbiAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICBzZWxmLnBlbmRpbmdBcHByb3ZhbCA9IHJlcztcbiAgICAgIHJldHVybiBzZWxmO1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgc2VsZi53YWxsZXQgaXMgc2V0XG4vL1xuUGVuZGluZ0FwcHJvdmFsLnByb3RvdHlwZS5wb3B1bGF0ZVdhbGxldCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGlmICghc2VsZi53YWxsZXQpIHtcbiAgICByZXR1cm4gc2VsZi5iaXRnb1xuICAgICAgLndhbGxldHMoKVxuICAgICAgLmdldCh7IGlkOiBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3Quc291cmNlV2FsbGV0IH0pXG4gICAgICAudGhlbihmdW5jdGlvbiAod2FsbGV0KSB7XG4gICAgICAgIGlmICghd2FsbGV0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIC0gdW5hYmxlIHRvIGdldCB3YWxsZXQgdXNpbmcgc291cmNld2FsbGV0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi53YWxsZXQgPSB3YWxsZXQ7XG4gICAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxmLndhbGxldC5pZCgpICE9PSBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3Quc291cmNlV2FsbGV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHNvdXJjZSB3YWxsZXQgZm9yIHBlbmRpbmcgYXBwcm92YWwnKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsgLy8gb3RoZXJ3aXNlIHJldHVybnMgdW5kZWZpbmVkXG59O1xuXG4vL1xuLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHJlY3JlYXRlIGFuZCBzaWduIGEgdHJhbnNhY3Rpb24gb24gYSB3YWxsZXRcbi8vIHdlIHNob3VsZCBob3BlZnVsbHkgYmUgYWJsZSB0byBtb3ZlIHRoaXMgbG9naWMgc2VydmVyIHNpZGUgc29vblxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUucmVjcmVhdGVBbmRTaWduVHJhbnNhY3Rpb24gPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBfLmV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWyd0eEhleCddLCBbXSwgY2FsbGJhY2spO1xuXG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXgocGFyYW1zLnR4SGV4LCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICBpZiAoIXRyYW5zYWN0aW9uLm91dHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIGhhZCBubyBvdXRwdXRzIG9yIGZhaWxlZCB0byBwYXJzZSBzdWNjZXNzZnVsbHknKTtcbiAgfVxuXG4gIGNvbnN0IG5ldHdvcmsgPSB1dHhvbGliLm5ldHdvcmtzW2NvbW1vbi5FbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0ubmV0d29ya107XG4gIHBhcmFtcy5yZWNpcGllbnRzID0ge307XG5cbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgcmV0dXJuIHRyeVByb21pc2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3QucmVjaXBpZW50cykge1xuICAgICAgLy8gcmVjaXBpZW50cyBvYmplY3QgZm91bmQgb24gdGhlIHBlbmRpbmcgYXBwcm92YWxzIC0gdXNlIGl0XG4gICAgICBwYXJhbXMucmVjaXBpZW50cyA9IHNlbGYuaW5mbygpLnRyYW5zYWN0aW9uUmVxdWVzdC5yZWNpcGllbnRzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHJhbnNhY3Rpb24ub3V0cy5sZW5ndGggPD0gMikge1xuICAgICAgdHJhbnNhY3Rpb24ub3V0cy5mb3JFYWNoKGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgY29uc3Qgb3V0QWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG91dC5zY3JpcHQsIG5ldHdvcmspO1xuICAgICAgICBpZiAoc2VsZi5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0LmRlc3RpbmF0aW9uQWRkcmVzcyA9PT0gb3V0QWRkcmVzcykge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGRlc3RpbmF0aW9uLCB0aGVuIHNwZW5kIHRvIGl0XG4gICAgICAgICAgcGFyYW1zLnJlY2lwaWVudHNbb3V0QWRkcmVzc10gPSBvdXQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIHNlbmRtYW55XG4gICAgLy8gQXR0ZW1wdCB0byBmaWd1cmUgb3V0IHRoZSBvdXRwdXRzIGJ5IGNob29zaW5nIGFsbCBvdXRwdXRzIHRoYXQgd2VyZSBub3QgZ29pbmcgYmFjayB0byB0aGUgd2FsbGV0IGFzIGNoYW5nZSBhZGRyZXNzZXNcbiAgICByZXR1cm4gc2VsZi53YWxsZXQuYWRkcmVzc2VzKHsgY2hhaW46IDEsIHNvcnQ6IC0xLCBsaW1pdDogNTAwIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgY29uc3QgY2hhbmdlQWRkcmVzc2VzID0gXy5rZXlCeShyZXN1bHQuYWRkcmVzc2VzLCAnYWRkcmVzcycpO1xuICAgICAgdHJhbnNhY3Rpb24ub3V0cy5mb3JFYWNoKGZ1bmN0aW9uIChvdXQpIHtcbiAgICAgICAgY29uc3Qgb3V0QWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG91dC5zY3JpcHQsIG5ldHdvcmspO1xuICAgICAgICBpZiAoIWNoYW5nZUFkZHJlc3Nlc1tvdXRBZGRyZXNzXSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgY2hhbmdlIGFkZHJlc3MsIHRoZW4gc3BlbmQgdG8gaXRcbiAgICAgICAgICBwYXJhbXMucmVjaXBpZW50c1tvdXRBZGRyZXNzXSA9IG91dC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZWxmLndhbGxldC5jcmVhdGVBbmRTaWduVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgfSk7XG59O1xuXG4vL1xuLy8gY29uc3RydWN0QXBwcm92YWxUeFxuLy8gY29uc3RydWN0cy9zaWducyBhIHRyYW5zYWN0aW9uIGZvciB0aGlzIHBlbmRpbmcgYXBwcm92YWwsIHJldHVybmluZyB0aGUgdHhIZXggKGJ1dCBub3Qgc2VuZGluZyBpdClcbi8vXG5QZW5kaW5nQXBwcm92YWwucHJvdG90eXBlLmNvbnN0cnVjdEFwcHJvdmFsVHggPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbJ3dhbGxldFBhc3NwaHJhc2UnXSwgY2FsbGJhY2spO1xuXG4gIGlmICh0aGlzLnR5cGUoKSA9PT0gJ3RyYW5zYWN0aW9uUmVxdWVzdCcgJiYgIShwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB8fCBwYXJhbXMueHBydikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3dhbGxldCBwYXNzcGhyYXNlIG9yIHhwcnYgcmVxdWlyZWQgdG8gYXBwcm92ZSBhIHRyYW5zYWN0aW9uUmVxdWVzdCcpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy51c2VPcmlnaW5hbEZlZSkge1xuICAgIGlmICghXy5pc0Jvb2xlYW4ocGFyYW1zLnVzZU9yaWdpbmFsRmVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHR5cGUgZm9yIHVzZU9yaWdpbmFsRmVlUmF0ZScpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmZlZSB8fCBwYXJhbXMuZmVlUmF0ZSB8fCBwYXJhbXMuZmVlVHhDb25maXJtVGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzcGVjaWZ5IGEgZmVlL2ZlZXJhdGUvZmVlVHhDb25maXJtVGFyZ2V0IGFzIHdlbGwgYXMgdXNlT3JpZ2luYWxGZWUnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWxmID0gdGhpcztcbiAgcmV0dXJuIHRyeVByb21pc2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzZWxmLnR5cGUoKSA9PT0gJ3RyYW5zYWN0aW9uUmVxdWVzdCcpIHtcbiAgICAgIGNvbnN0IGV4dGVuZFBhcmFtczogYW55ID0geyB0eEhleDogc2VsZi5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0LnRyYW5zYWN0aW9uIH07XG4gICAgICBpZiAocGFyYW1zLnVzZU9yaWdpbmFsRmVlKSB7XG4gICAgICAgIGV4dGVuZFBhcmFtcy5mZWUgPSBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3QuZmVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGYucG9wdWxhdGVXYWxsZXQoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYucmVjcmVhdGVBbmRTaWduVHJhbnNhY3Rpb24oXy5leHRlbmQocGFyYW1zLCBleHRlbmRQYXJhbXMpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vL1xuLy8gYXBwcm92ZVxuLy8gc2V0cyB0aGUgcGVuZGluZyBhcHByb3ZhbCB0byBhbiBhcHByb3ZlZCBzdGF0ZVxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUuYXBwcm92ZSA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFsnd2FsbGV0UGFzc3BocmFzZScsICdvdHAnXSwgY2FsbGJhY2spO1xuXG4gIGxldCBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgaWYgKHRoaXMudHlwZSgpID09PSAndHJhbnNhY3Rpb25SZXF1ZXN0Jykge1xuICAgIGlmICghcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgJiYgIXBhcmFtcy54cHJ2KSB7XG4gICAgICBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgdGhlIHdhbGxldCBiYWxhbmNlIGFuZCBjb21wYXJlIGl0IHdpdGggdGhlIHRyYW5zYWN0aW9uIGFtb3VudCBhbmQgZmVlXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zLmZvcmNlUmVjcmVhdGUpICYmIF8uaXNPYmplY3QoXy5nZXQodGhpcywgJ3dhbGxldC53YWxsZXQnKSkpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RlZEFtb3VudCA9IHRoaXMucGVuZGluZ0FwcHJvdmFsLmluZm8udHJhbnNhY3Rpb25SZXF1ZXN0LnJlcXVlc3RlZEFtb3VudCB8fCAwO1xuICAgICAgY29uc3Qgd2FsbGV0QmFsYW5jZSA9IHRoaXMud2FsbGV0LndhbGxldC5zcGVuZGFibGVCYWxhbmNlO1xuICAgICAgY29uc3QgZGVsdGEgPSBNYXRoLmFicyhyZXF1ZXN0ZWRBbW91bnQgLSB3YWxsZXRCYWxhbmNlKTtcbiAgICAgIGlmIChkZWx0YSA8PSAxMDAwMCkge1xuICAgICAgICAvLyBpdCdzIGEgc3dlZXAgYmVjYXVzZSB3ZSdyZSB3aXRoaW4gMTBrIHNhdG9zaGlzIG9mIHRoZSB3YWxsZXQgYmFsYW5jZVxuICAgICAgICBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHJldHVybiB0cnlQcm9taXNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2VsZi50eXBlKCkgPT09ICd0cmFuc2FjdGlvblJlcXVlc3QnKSB7XG4gICAgICBpZiAocGFyYW1zLnR4KSB7XG4gICAgICAgIC8vIHRoZSBhcHByb3ZhbCB0eCB3YXMgcmVjb25zdHJ1Y3RlZCBhbmQgZXhwbGljaXRseSBzcGVjaWZpZWQgLSBwYXNzIGl0IHRocm91Z2hcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eDogcGFyYW1zLnR4LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyB0aGlzIHVzZXIgbWF5IG5vdCBoYXZlIHNwZW5kaW5nIHByaXZpbGVnZXMgb3IgYSBwYXNzcGhyYXNlIG1heSBub3QgaGF2ZSBiZWVuIHBhc3NlZCBpblxuICAgICAgaWYgKCFjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHg6IHNlbGYuaW5mbygpLnRyYW5zYWN0aW9uUmVxdWVzdC50cmFuc2FjdGlvbixcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlbGYucG9wdWxhdGVXYWxsZXQoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjcmVhdGlvblBhcmFtcyA9IF8uZXh0ZW5kKFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICB7IHR4SGV4OiBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3QudHJhbnNhY3Rpb24gfSxcbiAgICAgICAgICBzZWxmLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3QuYnVpbGRQYXJhbXNcbiAgICAgICAgKTtcbiAgICAgICAgLy8gZGVsZXRlIHRoZSBvbGQgYnVpbGQgcGFyYW1zIGJlY2F1c2Ugd2Ugd2FudCAncmVjcmVhdGVBbmRTaWduJyB0byByZWNyZWF0ZSB0aGUgdHJhbnNhY3Rpb25cbiAgICAgICAgZGVsZXRlIHJlY3JlYXRpb25QYXJhbXMuZmVlO1xuICAgICAgICBkZWxldGUgcmVjcmVhdGlvblBhcmFtcy51bnNwZW50cztcbiAgICAgICAgZGVsZXRlIHJlY3JlYXRpb25QYXJhbXMudHhJbmZvO1xuICAgICAgICBkZWxldGUgcmVjcmVhdGlvblBhcmFtcy5lc3RpbWF0ZWRTaXplO1xuICAgICAgICBkZWxldGUgcmVjcmVhdGlvblBhcmFtcy5jaGFuZ2VBZGRyZXNzZXM7XG4gICAgICAgIHJldHVybiBzZWxmLnJlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uKHJlY3JlYXRpb25QYXJhbXMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KVxuICAgIC50aGVuKGZ1bmN0aW9uICh0cmFuc2FjdGlvbikge1xuICAgICAgY29uc3QgYXBwcm92YWxQYXJhbXM6IGFueSA9IHsgc3RhdGU6ICdhcHByb3ZlZCcsIG90cDogcGFyYW1zLm90cCB9O1xuICAgICAgaWYgKHRyYW5zYWN0aW9uKSB7XG4gICAgICAgIGFwcHJvdmFsUGFyYW1zLnR4ID0gdHJhbnNhY3Rpb24udHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNlbGYuYml0Z28ucHV0KHNlbGYudXJsKCkpLnNlbmQoYXBwcm92YWxQYXJhbXMpLnJlc3VsdCgpKS50aGVuKGNhbGxiYWNrKS5jYXRjaChjYWxsYmFjayk7XG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uICYmXG4gICAgICAgIChlcnJvci5tZXNzYWdlLmluZGV4T2YoJ2NvdWxkIG5vdCBmaW5kIHVuc3BlbnQgb3V0cHV0IGZvciBpbnB1dCcpICE9PSAtMSB8fFxuICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5kZXhPZigndHJhbnNhY3Rpb24gY29uZmxpY3RzIHdpdGggYW4gZXhpc3RpbmcgdHJhbnNhY3Rpb24gaW4gdGhlIHNlbmQgcXVldWUnKSAhPT0gLTEpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnNwZW50cyBleHBpcmVkLCB3YWxsZXQgcGFzc3BocmFzZSBvciB4cHJ2IHJlcXVpcmVkIHRvIHJlY3JlYXRlIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIF8uaXNVbmRlZmluZWQocGFyYW1zLmZvcmNlUmVjcmVhdGUpICYmXG4gICAgICAgIGVycm9yLm1lc3NhZ2UuaW5kZXhPZignY291bGQgbm90IGZpbmQgdW5zcGVudCBvdXRwdXQgZm9yIGlucHV0JykgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgLy8gaWYgdGhlIHVuc3BlbnRzIGNhbid0IGJlIGZvdW5kLCB3ZSBtdXN0IHJldHJ5IHdpdGggYSBuZXdseSBjb25zdHJ1Y3RlZCB0cmFuc2FjdGlvbiwgc28gd2UgZGVsZXRlIHRoZSB0eCBhbmQgdHJ5IGFnYWluXG4gICAgICAgIC8vIGRlbGV0aW5nIHBhcmFtcy50eCB3aWxsIGZvcmNlIHRoZSBjb2RlIHRvIHJlYWNoIHRoZSAncmVjcmVhdGVBbmRTaWduVHJhbnNhY3Rpb24nIGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBwYXJhbXMudHg7XG4gICAgICAgIHBhcmFtcy5mb3JjZVJlY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgc2VsZi5hcHByb3ZlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSk7XG59O1xuXG4vL1xuLy8gcmVqZWN0ZWRcbi8vIHNldHMgdGhlIHBlbmRpbmcgYXBwcm92YWwgdG8gYSByZWplY3RlZCBzdGF0ZVxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUucmVqZWN0ID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgW10sIGNhbGxiYWNrKTtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28ucHV0KHRoaXMudXJsKCkpLnNlbmQoeyBzdGF0ZTogJ3JlamVjdGVkJyB9KS5yZXN1bHQoKSlcbiAgICAudGhlbihjYWxsYmFjaylcbiAgICAuY2F0Y2goY2FsbGJhY2spO1xufTtcblxuLy9cbi8vIGNhbmNlbFxuLy8gcmVqZWN0cyB0aGUgcGVuZGluZyBhcHByb3ZhbFxuLy9cblBlbmRpbmdBcHByb3ZhbC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcmV0dXJuIHRoaXMucmVqZWN0KHBhcmFtcywgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0ID0gUGVuZGluZ0FwcHJvdmFsO1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"pendingapprovals.d.ts","sourceRoot":"","sources":["../../../src/v1/pendingapprovals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH,QAAA,MAAM,gBAAgB,sBAGrB,CAAC;AAmDF,SAAS,gBAAgB,CAAC"}
1
+ {"version":3,"file":"pendingapprovals.d.ts","sourceRoot":"","sources":["../../../src/v1/pendingapprovals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,QAAA,MAAM,gBAAgB,sBAGrB,CAAC;AAqDF,SAAS,gBAAgB,CAAC"}
@@ -2,6 +2,39 @@
2
2
  /**
3
3
  * @hidden
4
4
  */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
5
38
  /**
6
39
  */
7
40
  //
@@ -10,8 +43,7 @@
10
43
  //
11
44
  // Copyright 2015, BitGo, Inc. All Rights Reserved.
12
45
  //
13
- const Bluebird = require("bluebird");
14
- const _ = require("lodash");
46
+ const _ = __importStar(require("lodash"));
15
47
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
16
48
  const PendingApproval = require('./pendingapproval');
17
49
  //
@@ -39,14 +71,15 @@ PendingApprovals.prototype.list = function (params, callback) {
39
71
  throw new Error('must provide exactly 1 of walletId or enterpriseId to get pending approvals on');
40
72
  }
41
73
  const self = this;
42
- return Bluebird.resolve(this.bitgo.get(this.bitgo.url('/pendingapprovals')).query(queryParams).result())
74
+ return Promise.resolve(this.bitgo.get(this.bitgo.url('/pendingapprovals')).query(queryParams).result())
43
75
  .then(function (body) {
44
76
  body.pendingApprovals = body.pendingApprovals.map(function (p) {
45
77
  return new PendingApproval(self.bitgo, p);
46
78
  });
47
79
  return body;
48
80
  })
49
- .nodeify(callback);
81
+ .then(callback)
82
+ .catch(callback);
50
83
  };
51
84
  //
52
85
  // get
@@ -58,11 +91,12 @@ PendingApprovals.prototype.get = function (params, callback) {
58
91
  params = params || {};
59
92
  sdk_core_1.common.validateParams(params, ['id'], [], callback);
60
93
  const self = this;
61
- return Bluebird.resolve(this.bitgo.get(this.bitgo.url('/pendingapprovals/' + params.id)).result())
94
+ return Promise.resolve(this.bitgo.get(this.bitgo.url('/pendingapprovals/' + params.id)).result())
62
95
  .then(function (body) {
63
96
  return new PendingApproval(self.bitgo, body);
64
97
  })
65
- .nodeify(callback);
98
+ .then(callback)
99
+ .catch(callback);
66
100
  };
67
101
  module.exports = PendingApprovals;
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ2FwcHJvdmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS9wZW5kaW5nYXBwcm92YWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRztBQUVIO0dBQ0c7QUFDSCxFQUFFO0FBQ0YsbUNBQW1DO0FBQ25DLDJEQUEyRDtBQUMzRCxFQUFFO0FBQ0Ysb0RBQW9EO0FBQ3BELEVBQUU7QUFFRixxQ0FBcUM7QUFDckMsNEJBQTRCO0FBRTVCLG1EQUE4QztBQUM5QyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUVyRCxFQUFFO0FBQ0YsY0FBYztBQUNkLEVBQUU7QUFDRixNQUFNLGdCQUFnQixHQUFHLFVBQVUsS0FBSztJQUN0QyxzQ0FBc0M7SUFDdEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUYsRUFBRTtBQUNGLE9BQU87QUFDUCxtREFBbUQ7QUFDbkQsRUFBRTtBQUNGLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUUsUUFBUTtJQUMxRCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN0QixpQkFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTFFLE1BQU0sV0FBVyxHQUFRLEVBQUUsQ0FBQztJQUM1QixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQy9CLFdBQVcsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztLQUN4QztJQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDbkMsV0FBVyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO0tBQzlDO0lBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO0tBQ25HO0lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3JHLElBQUksQ0FBQyxVQUFVLElBQUk7UUFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQzNELE9BQU8sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO1NBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixNQUFNO0FBQ04scUNBQXFDO0FBQ3JDLHNCQUFzQjtBQUN0QixpQ0FBaUM7QUFDakMsRUFBRTtBQUNGLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsVUFBVSxNQUFNLEVBQUUsUUFBUTtJQUN6RCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN0QixpQkFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUMvRixJQUFJLENBQUMsVUFBVSxJQUFJO1FBQ2xCLE9BQU8sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUM7U0FDRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBRUYsaUJBQVMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBoaWRkZW5cbiAqL1xuXG4vKipcbiAqL1xuLy9cbi8vIFBlbmRpbmcgYXBwcm92YWxzIGxpc3Rpbmcgb2JqZWN0XG4vLyBMaXN0cyBwZW5kaW5nIGFwcHJvdmFscyBhbmQgZ2V0IHBlbmRpbmcgYXBwcm92YWwgb2JqZWN0c1xuLy9cbi8vIENvcHlyaWdodCAyMDE1LCBCaXRHbywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vXG5cbmltcG9ydCAqIGFzIEJsdWViaXJkIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgY29tbW9uIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuY29uc3QgUGVuZGluZ0FwcHJvdmFsID0gcmVxdWlyZSgnLi9wZW5kaW5nYXBwcm92YWwnKTtcblxuLy9cbi8vIENvbnN0cnVjdG9yXG4vL1xuY29uc3QgUGVuZGluZ0FwcHJvdmFscyA9IGZ1bmN0aW9uIChiaXRnbykge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbm8gaW1wbGljaXQgdGhpc1xuICB0aGlzLmJpdGdvID0gYml0Z287XG59O1xuXG4vL1xuLy8gbGlzdFxuLy8gTGlzdCB0aGUgcGVuZGluZyBhcHByb3ZhbHMgYXZhaWxhYmxlIHRvIHRoZSB1c2VyXG4vL1xuUGVuZGluZ0FwcHJvdmFscy5wcm90b3R5cGUubGlzdCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFsnd2FsbGV0SWQnLCAnZW50ZXJwcmlzZUlkJ10sIGNhbGxiYWNrKTtcblxuICBjb25zdCBxdWVyeVBhcmFtczogYW55ID0ge307XG4gIGlmIChfLmlzU3RyaW5nKHBhcmFtcy53YWxsZXRJZCkpIHtcbiAgICBxdWVyeVBhcmFtcy53YWxsZXRJZCA9IHBhcmFtcy53YWxsZXRJZDtcbiAgfVxuICBpZiAoXy5pc1N0cmluZyhwYXJhbXMuZW50ZXJwcmlzZUlkKSkge1xuICAgIHF1ZXJ5UGFyYW1zLmVudGVycHJpc2UgPSBwYXJhbXMuZW50ZXJwcmlzZUlkO1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211c3QgcHJvdmlkZSBleGFjdGx5IDEgb2Ygd2FsbGV0SWQgb3IgZW50ZXJwcmlzZUlkIHRvIGdldCBwZW5kaW5nIGFwcHJvdmFscyBvbicpO1xuICB9XG5cbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHJldHVybiBCbHVlYmlyZC5yZXNvbHZlKHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28udXJsKCcvcGVuZGluZ2FwcHJvdmFscycpKS5xdWVyeShxdWVyeVBhcmFtcykucmVzdWx0KCkpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGJvZHkpIHtcbiAgICAgIGJvZHkucGVuZGluZ0FwcHJvdmFscyA9IGJvZHkucGVuZGluZ0FwcHJvdmFscy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQZW5kaW5nQXBwcm92YWwoc2VsZi5iaXRnbywgcCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBib2R5O1xuICAgIH0pXG4gICAgLm5vZGVpZnkoY2FsbGJhY2spO1xufTtcblxuLy9cbi8vIGdldFxuLy8gRmV0Y2ggYW4gZXhpc3RpbmcgcGVuZGluZyBhcHByb3ZhbFxuLy8gUGFyYW1ldGVycyBpbmNsdWRlOlxuLy8gICBpZDogIHRoZSBwZW5kaW5nIGFwcHJvdmFsIGlkXG4vL1xuUGVuZGluZ0FwcHJvdmFscy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ2lkJ10sIFtdLCBjYWxsYmFjayk7XG5cbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHJldHVybiBCbHVlYmlyZC5yZXNvbHZlKHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28udXJsKCcvcGVuZGluZ2FwcHJvdmFscy8nICsgcGFyYW1zLmlkKSkucmVzdWx0KCkpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGJvZHkpIHtcbiAgICAgIHJldHVybiBuZXcgUGVuZGluZ0FwcHJvdmFsKHNlbGYuYml0Z28sIGJvZHkpO1xuICAgIH0pXG4gICAgLm5vZGVpZnkoY2FsbGJhY2spO1xufTtcblxuZXhwb3J0ID0gUGVuZGluZ0FwcHJvdmFscztcbiJdfQ==
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ2FwcHJvdmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS9wZW5kaW5nYXBwcm92YWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVIO0dBQ0c7QUFDSCxFQUFFO0FBQ0YsbUNBQW1DO0FBQ25DLDJEQUEyRDtBQUMzRCxFQUFFO0FBQ0Ysb0RBQW9EO0FBQ3BELEVBQUU7QUFFRiwwQ0FBNEI7QUFFNUIsbURBQThDO0FBQzlDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRXJELEVBQUU7QUFDRixjQUFjO0FBQ2QsRUFBRTtBQUNGLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxLQUFLO0lBQ3RDLHNDQUFzQztJQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixFQUFFO0FBQ0YsT0FBTztBQUNQLG1EQUFtRDtBQUNuRCxFQUFFO0FBQ0YsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLE1BQU0sRUFBRSxRQUFRO0lBQzFELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RCLGlCQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFMUUsTUFBTSxXQUFXLEdBQVEsRUFBRSxDQUFDO0lBQzVCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxXQUFXLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDekMsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUNwQyxXQUFXLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDcEcsSUFBSSxDQUFDLFVBQVUsSUFBSTtRQUNsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDM0QsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixNQUFNO0FBQ04scUNBQXFDO0FBQ3JDLHNCQUFzQjtBQUN0QixpQ0FBaUM7QUFDakMsRUFBRTtBQUNGLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsVUFBVSxNQUFNLEVBQUUsUUFBUTtJQUN6RCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN0QixpQkFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUM5RixJQUFJLENBQUMsVUFBVSxJQUFJO1FBQ2xCLE9BQU8sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLGlCQUFTLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuLyoqXG4gKi9cbi8vXG4vLyBQZW5kaW5nIGFwcHJvdmFscyBsaXN0aW5nIG9iamVjdFxuLy8gTGlzdHMgcGVuZGluZyBhcHByb3ZhbHMgYW5kIGdldCBwZW5kaW5nIGFwcHJvdmFsIG9iamVjdHNcbi8vXG4vLyBDb3B5cmlnaHQgMjAxNSwgQml0R28sIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vL1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IGNvbW1vbiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmNvbnN0IFBlbmRpbmdBcHByb3ZhbCA9IHJlcXVpcmUoJy4vcGVuZGluZ2FwcHJvdmFsJyk7XG5cbi8vXG4vLyBDb25zdHJ1Y3RvclxuLy9cbmNvbnN0IFBlbmRpbmdBcHByb3ZhbHMgPSBmdW5jdGlvbiAoYml0Z28pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy5iaXRnbyA9IGJpdGdvO1xufTtcblxuLy9cbi8vIGxpc3Rcbi8vIExpc3QgdGhlIHBlbmRpbmcgYXBwcm92YWxzIGF2YWlsYWJsZSB0byB0aGUgdXNlclxuLy9cblBlbmRpbmdBcHByb3ZhbHMucHJvdG90eXBlLmxpc3QgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbJ3dhbGxldElkJywgJ2VudGVycHJpc2VJZCddLCBjYWxsYmFjayk7XG5cbiAgY29uc3QgcXVlcnlQYXJhbXM6IGFueSA9IHt9O1xuICBpZiAoXy5pc1N0cmluZyhwYXJhbXMud2FsbGV0SWQpKSB7XG4gICAgcXVlcnlQYXJhbXMud2FsbGV0SWQgPSBwYXJhbXMud2FsbGV0SWQ7XG4gIH1cbiAgaWYgKF8uaXNTdHJpbmcocGFyYW1zLmVudGVycHJpc2VJZCkpIHtcbiAgICBxdWVyeVBhcmFtcy5lbnRlcnByaXNlID0gcGFyYW1zLmVudGVycHJpc2VJZDtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhxdWVyeVBhcmFtcykubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHByb3ZpZGUgZXhhY3RseSAxIG9mIHdhbGxldElkIG9yIGVudGVycHJpc2VJZCB0byBnZXQgcGVuZGluZyBhcHByb3ZhbHMgb24nKTtcbiAgfVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28udXJsKCcvcGVuZGluZ2FwcHJvdmFscycpKS5xdWVyeShxdWVyeVBhcmFtcykucmVzdWx0KCkpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGJvZHkpIHtcbiAgICAgIGJvZHkucGVuZGluZ0FwcHJvdmFscyA9IGJvZHkucGVuZGluZ0FwcHJvdmFscy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQZW5kaW5nQXBwcm92YWwoc2VsZi5iaXRnbywgcCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBib2R5O1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyBnZXRcbi8vIEZldGNoIGFuIGV4aXN0aW5nIHBlbmRpbmcgYXBwcm92YWxcbi8vIFBhcmFtZXRlcnMgaW5jbHVkZTpcbi8vICAgaWQ6ICB0aGUgcGVuZGluZyBhcHByb3ZhbCBpZFxuLy9cblBlbmRpbmdBcHByb3ZhbHMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWydpZCddLCBbXSwgY2FsbGJhY2spO1xuXG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28udXJsKCcvcGVuZGluZ2FwcHJvdmFscy8nICsgcGFyYW1zLmlkKSkucmVzdWx0KCkpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGJvZHkpIHtcbiAgICAgIHJldHVybiBuZXcgUGVuZGluZ0FwcHJvdmFsKHNlbGYuYml0Z28sIGJvZHkpO1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCA9IFBlbmRpbmdBcHByb3ZhbHM7XG4iXX0=
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Co-sign a PSBT.
3
+ * Simply a wrapper around `utxolib.bitgo.createPsbtFromBuffer` and `psbt.signAllInputsHD`.
4
+ * @param params
5
+ */
6
+ export declare function signPsbtRequest(params: {
7
+ psbt: string;
8
+ keychain: {
9
+ xprv: string;
10
+ };
11
+ } | unknown): {
12
+ psbt: string;
13
+ };
14
+ //# sourceMappingURL=signPsbt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signPsbt.d.ts","sourceRoot":"","sources":["../../../src/v1/signPsbt.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,OAAO,GAAG;IAC/F,IAAI,EAAE,MAAM,CAAC;CACd,CAwBA"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.signPsbtRequest = signPsbtRequest;
40
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
41
+ const debug_1 = __importDefault(require("debug"));
42
+ const debug = (0, debug_1.default)('bitgo:v1:txb');
43
+ /**
44
+ * Co-sign a PSBT.
45
+ * Simply a wrapper around `utxolib.bitgo.createPsbtFromBuffer` and `psbt.signAllInputsHD`.
46
+ * @param params
47
+ */
48
+ function signPsbtRequest(params) {
49
+ if (typeof params !== 'object' || params === null) {
50
+ throw new Error(`invalid argument`);
51
+ }
52
+ if (!('psbt' in params) || typeof params.psbt !== 'string') {
53
+ throw new Error(`invalid params.psbt`);
54
+ }
55
+ if (!('keychain' in params) || typeof params.keychain !== 'object' || params.keychain === null) {
56
+ throw new Error(`invalid params.keychain`);
57
+ }
58
+ if (!('xprv' in params.keychain) || typeof params.keychain.xprv !== 'string') {
59
+ throw new Error(`invalid params.keychain.xprv`);
60
+ }
61
+ const psbt = utxolib.bitgo.createPsbtDecode(params.psbt, utxolib.networks.bitcoin);
62
+ const keypair = utxolib.bip32.fromBase58(params.keychain.xprv, utxolib.networks.bitcoin);
63
+ debug('signing PSBT with keychain %s', keypair.neutered().toBase58());
64
+ utxolib.bitgo.withUnsafeNonSegwit(psbt, () => psbt.signAllInputsHD(keypair));
65
+ return {
66
+ psbt: psbt.toBuffer().toString('hex'),
67
+ };
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdjEvc2lnblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSwwQ0EwQkM7QUFyQ0QsOERBQWdEO0FBRWhELGtEQUErQjtBQUUvQixNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVUsRUFBQyxjQUFjLENBQUMsQ0FBQztBQUV6Qzs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLE1BQThEO0lBRzVGLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQy9GLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkYsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RixLQUFLLENBQUMsK0JBQStCLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEUsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdFLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7S0FDdEMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IGJ1aWxkRGVidWcgZnJvbSAnZGVidWcnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ2JpdGdvOnYxOnR4YicpO1xuXG4vKipcbiAqIENvLXNpZ24gYSBQU0JULlxuICogU2ltcGx5IGEgd3JhcHBlciBhcm91bmQgYHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXJgIGFuZCBgcHNidC5zaWduQWxsSW5wdXRzSERgLlxuICogQHBhcmFtIHBhcmFtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnblBzYnRSZXF1ZXN0KHBhcmFtczogeyBwc2J0OiBzdHJpbmc7IGtleWNoYWluOiB7IHhwcnY6IHN0cmluZyB9IH0gfCB1bmtub3duKToge1xuICBwc2J0OiBzdHJpbmc7XG59IHtcbiAgaWYgKHR5cGVvZiBwYXJhbXMgIT09ICdvYmplY3QnIHx8IHBhcmFtcyA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhcmd1bWVudGApO1xuICB9XG5cbiAgaWYgKCEoJ3BzYnQnIGluIHBhcmFtcykgfHwgdHlwZW9mIHBhcmFtcy5wc2J0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwYXJhbXMucHNidGApO1xuICB9XG5cbiAgaWYgKCEoJ2tleWNoYWluJyBpbiBwYXJhbXMpIHx8IHR5cGVvZiBwYXJhbXMua2V5Y2hhaW4gIT09ICdvYmplY3QnIHx8IHBhcmFtcy5rZXljaGFpbiA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwYXJhbXMua2V5Y2hhaW5gKTtcbiAgfVxuXG4gIGlmICghKCd4cHJ2JyBpbiBwYXJhbXMua2V5Y2hhaW4pIHx8IHR5cGVvZiBwYXJhbXMua2V5Y2hhaW4ueHBydiAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgcGFyYW1zLmtleWNoYWluLnhwcnZgKTtcbiAgfVxuXG4gIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnREZWNvZGUocGFyYW1zLnBzYnQsIHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gIGNvbnN0IGtleXBhaXIgPSB1dHhvbGliLmJpcDMyLmZyb21CYXNlNTgocGFyYW1zLmtleWNoYWluLnhwcnYsIHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gIGRlYnVnKCdzaWduaW5nIFBTQlQgd2l0aCBrZXljaGFpbiAlcycsIGtleXBhaXIubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbiAgdXR4b2xpYi5iaXRnby53aXRoVW5zYWZlTm9uU2Vnd2l0KHBzYnQsICgpID0+IHBzYnQuc2lnbkFsbElucHV0c0hEKGtleXBhaXIpKTtcbiAgcmV0dXJuIHtcbiAgICBwc2J0OiBwc2J0LnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLFxuICB9O1xufVxuIl19