@bitgo-beta/sdk-coin-sui 3.0.3-beta.9 → 3.0.3-beta.900

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 (144) hide show
  1. package/.mocharc.yml +1 -2
  2. package/CHANGELOG.md +874 -0
  3. package/dist/src/index.d.ts +1 -0
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +7 -2
  6. package/dist/src/lib/compareTransactionBlocks.d.ts +8 -0
  7. package/dist/src/lib/compareTransactionBlocks.d.ts.map +1 -0
  8. package/dist/src/lib/compareTransactionBlocks.js +12 -0
  9. package/dist/src/lib/constants.d.ts +10 -2
  10. package/dist/src/lib/constants.d.ts.map +1 -1
  11. package/dist/src/lib/constants.js +19 -2
  12. package/dist/src/lib/customTransaction.d.ts +57 -0
  13. package/dist/src/lib/customTransaction.d.ts.map +1 -0
  14. package/dist/src/lib/customTransaction.js +159 -0
  15. package/dist/src/lib/customTransactionBuilder.d.ts +46 -0
  16. package/dist/src/lib/customTransactionBuilder.d.ts.map +1 -0
  17. package/dist/src/lib/customTransactionBuilder.js +117 -0
  18. package/dist/src/lib/iface.d.ts +77 -10
  19. package/dist/src/lib/iface.d.ts.map +1 -1
  20. package/dist/src/lib/iface.js +40 -5
  21. package/dist/src/lib/index.d.ts +8 -0
  22. package/dist/src/lib/index.d.ts.map +1 -1
  23. package/dist/src/lib/index.js +40 -10
  24. package/dist/src/lib/keyPair.js +24 -10
  25. package/dist/src/lib/mystenlab/builder/Inputs.d.ts +9 -9
  26. package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -1
  27. package/dist/src/lib/mystenlab/builder/Inputs.js +18 -19
  28. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +40 -354
  29. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -1
  30. package/dist/src/lib/mystenlab/builder/TransactionBlock.js +43 -48
  31. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts +74 -74
  32. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -1
  33. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +41 -44
  34. package/dist/src/lib/mystenlab/builder/Transactions.d.ts +133 -188
  35. package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -1
  36. package/dist/src/lib/mystenlab/builder/Transactions.js +52 -53
  37. package/dist/src/lib/mystenlab/builder/bcs.d.ts +1 -1
  38. package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -1
  39. package/dist/src/lib/mystenlab/builder/bcs.js +2 -2
  40. package/dist/src/lib/mystenlab/builder/index.js +6 -2
  41. package/dist/src/lib/mystenlab/builder/serializer.js +6 -8
  42. package/dist/src/lib/mystenlab/builder/utils.d.ts +1 -1
  43. package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -1
  44. package/dist/src/lib/mystenlab/builder/utils.js +4 -4
  45. package/dist/src/lib/mystenlab/cryptography/hash.js +3 -4
  46. package/dist/src/lib/mystenlab/framework/framework.d.ts +6 -6
  47. package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -1
  48. package/dist/src/lib/mystenlab/framework/framework.js +22 -25
  49. package/dist/src/lib/mystenlab/framework/index.js +6 -2
  50. package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts +2 -0
  51. package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts.map +1 -1
  52. package/dist/src/lib/mystenlab/framework/sui-system-state.js +6 -3
  53. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +2 -2
  54. package/dist/src/lib/mystenlab/types/coin.d.ts +14 -14
  55. package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -1
  56. package/dist/src/lib/mystenlab/types/coin.js +19 -19
  57. package/dist/src/lib/mystenlab/types/common.d.ts +8 -8
  58. package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -1
  59. package/dist/src/lib/mystenlab/types/common.js +22 -22
  60. package/dist/src/lib/mystenlab/types/events.d.ts +14 -14
  61. package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -1
  62. package/dist/src/lib/mystenlab/types/events.js +17 -17
  63. package/dist/src/lib/mystenlab/types/index.js +6 -2
  64. package/dist/src/lib/mystenlab/types/normalized.d.ts +21 -21
  65. package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -1
  66. package/dist/src/lib/mystenlab/types/normalized.js +41 -41
  67. package/dist/src/lib/mystenlab/types/objects.d.ts +100 -100
  68. package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -1
  69. package/dist/src/lib/mystenlab/types/objects.js +96 -106
  70. package/dist/src/lib/mystenlab/types/option.d.ts +1 -1
  71. package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -1
  72. package/dist/src/lib/mystenlab/types/option.js +2 -3
  73. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +8 -8
  74. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -1
  75. package/dist/src/lib/mystenlab/types/sui-bcs.js +5 -5
  76. package/dist/src/lib/mystenlab/types/transactions.d.ts +641 -641
  77. package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -1
  78. package/dist/src/lib/mystenlab/types/transactions.js +178 -194
  79. package/dist/src/lib/mystenlab/types/validator.d.ts +13 -13
  80. package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -1
  81. package/dist/src/lib/mystenlab/types/validator.js +124 -124
  82. package/dist/src/lib/resources/walrusConfig.d.ts +22 -0
  83. package/dist/src/lib/resources/walrusConfig.d.ts.map +1 -0
  84. package/dist/src/lib/resources/walrusConfig.js +37 -0
  85. package/dist/src/lib/rpcClient.d.ts +5 -0
  86. package/dist/src/lib/rpcClient.d.ts.map +1 -0
  87. package/dist/src/lib/rpcClient.js +74 -0
  88. package/dist/src/lib/stakingBuilder.d.ts +3 -3
  89. package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
  90. package/dist/src/lib/stakingBuilder.js +47 -28
  91. package/dist/src/lib/stakingTransaction.d.ts +1 -1
  92. package/dist/src/lib/stakingTransaction.d.ts.map +1 -1
  93. package/dist/src/lib/stakingTransaction.js +34 -26
  94. package/dist/src/lib/tokenTransferBuilder.d.ts +38 -0
  95. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  96. package/dist/src/lib/tokenTransferBuilder.js +132 -0
  97. package/dist/src/lib/tokenTransferTransaction.d.ts +57 -0
  98. package/dist/src/lib/tokenTransferTransaction.d.ts.map +1 -0
  99. package/dist/src/lib/tokenTransferTransaction.js +250 -0
  100. package/dist/src/lib/transaction.d.ts +12 -4
  101. package/dist/src/lib/transaction.d.ts.map +1 -1
  102. package/dist/src/lib/transaction.js +91 -18
  103. package/dist/src/lib/transactionBuilder.d.ts +2 -3
  104. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  105. package/dist/src/lib/transactionBuilder.js +4 -4
  106. package/dist/src/lib/transactionBuilderFactory.d.ts +14 -2
  107. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  108. package/dist/src/lib/transactionBuilderFactory.js +42 -1
  109. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  110. package/dist/src/lib/transferBuilder.js +21 -5
  111. package/dist/src/lib/transferTransaction.d.ts +1 -1
  112. package/dist/src/lib/transferTransaction.d.ts.map +1 -1
  113. package/dist/src/lib/transferTransaction.js +31 -8
  114. package/dist/src/lib/unstakingBuilder.d.ts +8 -1
  115. package/dist/src/lib/unstakingBuilder.d.ts.map +1 -1
  116. package/dist/src/lib/unstakingBuilder.js +99 -20
  117. package/dist/src/lib/unstakingTransaction.d.ts +26 -2
  118. package/dist/src/lib/unstakingTransaction.d.ts.map +1 -1
  119. package/dist/src/lib/unstakingTransaction.js +162 -23
  120. package/dist/src/lib/utils.d.ts +27 -5
  121. package/dist/src/lib/utils.d.ts.map +1 -1
  122. package/dist/src/lib/utils.js +297 -25
  123. package/dist/src/lib/walrusStakingBuilder.d.ts +66 -0
  124. package/dist/src/lib/walrusStakingBuilder.d.ts.map +1 -0
  125. package/dist/src/lib/walrusStakingBuilder.js +200 -0
  126. package/dist/src/lib/walrusStakingTransaction.d.ts +52 -0
  127. package/dist/src/lib/walrusStakingTransaction.d.ts.map +1 -0
  128. package/dist/src/lib/walrusStakingTransaction.js +269 -0
  129. package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts +36 -0
  130. package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts.map +1 -0
  131. package/dist/src/lib/walrusWithdrawStakeBuilder.js +173 -0
  132. package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts +21 -0
  133. package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts.map +1 -0
  134. package/dist/src/lib/walrusWithdrawStakeTransaction.js +190 -0
  135. package/dist/src/register.d.ts.map +1 -1
  136. package/dist/src/register.js +5 -1
  137. package/dist/src/sui.d.ts +46 -8
  138. package/dist/src/sui.d.ts.map +1 -1
  139. package/dist/src/sui.js +479 -32
  140. package/dist/src/suiToken.d.ts +22 -0
  141. package/dist/src/suiToken.d.ts.map +1 -0
  142. package/dist/src/suiToken.js +61 -0
  143. package/dist/src/tsui.js +1 -1
  144. package/package.json +14 -10
@@ -1,17 +1,49 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
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
+ })();
5
35
  Object.defineProperty(exports, "__esModule", { value: true });
6
36
  exports.UnstakingTransaction = void 0;
7
37
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
- const utils_1 = __importDefault(require("./utils"));
38
+ const utils_1 = __importStar(require("./utils"));
9
39
  const buffer_1 = require("buffer");
10
40
  const transaction_1 = require("./transaction");
11
41
  const builder_1 = require("./mystenlab/builder");
12
42
  const types_1 = require("./mystenlab/types");
13
43
  const bcs_1 = require("@mysten/bcs");
14
44
  const constants_1 = require("./constants");
45
+ const unstakingBuilder_1 = require("./unstakingBuilder");
46
+ const compareTransactionBlocks_1 = require("./compareTransactionBlocks");
15
47
  class UnstakingTransaction extends transaction_1.Transaction {
16
48
  constructor(_coinConfig) {
17
49
  super(_coinConfig);
@@ -96,6 +128,126 @@ class UnstakingTransaction extends transaction_1.Transaction {
96
128
  transactionType(transactionType) {
97
129
  this._type = transactionType;
98
130
  }
131
+ getEntriesForStakedSuiInput(stakedSuiInput, amount) {
132
+ return {
133
+ inputs: [
134
+ {
135
+ address: (0, types_1.normalizeSuiAddress)(stakedSuiInput.objectId),
136
+ value: amount === undefined ? constants_1.AMOUNT_UNKNOWN_TEXT : amount.toString(),
137
+ coin: this._coinConfig.name,
138
+ },
139
+ ],
140
+ outputs: [
141
+ {
142
+ address: this.suiTransaction.sender,
143
+ value: amount === undefined ? constants_1.AMOUNT_UNKNOWN_TEXT : amount.toString(),
144
+ coin: this._coinConfig.name,
145
+ },
146
+ ],
147
+ };
148
+ }
149
+ /**
150
+ * @param inputs
151
+ * @param transactions
152
+ */
153
+ static parseTransactionPairReserialized(inputs, transactions) {
154
+ const [inputStakedSui, inputAmount, inputSharedObj] = inputs;
155
+ if (!builder_1.ObjectCallArg.is(inputStakedSui)) {
156
+ throw new Error('Invalid input staked sui');
157
+ }
158
+ if (!builder_1.PureCallArg.is(inputAmount)) {
159
+ throw new Error('Invalid input amount');
160
+ }
161
+ if (!builder_1.ObjectCallArg.is(inputSharedObj)) {
162
+ throw new Error('Invalid input shared object');
163
+ }
164
+ const amount = BigInt(types_1.bcs.de(bcs_1.BCS.U64, Uint8Array.from(inputAmount.Pure)));
165
+ if (!(0, utils_1.isImmOrOwnedObj)(inputStakedSui.Object)) {
166
+ throw new Error('Invalid input shared object');
167
+ }
168
+ // make sure we parsed the transaction correctly by rebuilding it and comparing the transaction blocks
169
+ (0, compareTransactionBlocks_1.assertEqualTransactionBlocks)({ inputs, transactions }, unstakingBuilder_1.UnstakingBuilder.getTransactionBlockDataReserialized(inputStakedSui.Object.ImmOrOwned, amount));
170
+ return {
171
+ stakedObjectRef: inputStakedSui.Object.ImmOrOwned,
172
+ amount,
173
+ };
174
+ }
175
+ static parseTransactionPair(inputs, transactions) {
176
+ if (transactions.length !== 2) {
177
+ throw new Error('Invalid transaction pair');
178
+ }
179
+ if (!builder_1.MoveCallTransaction.is(transactions[0]) || !builder_1.MoveCallTransaction.is(transactions[1])) {
180
+ throw new Error('Invalid transaction pair');
181
+ }
182
+ if (!Array.isArray(inputs) || inputs.length !== 3) {
183
+ throw new Error('Invalid inputs');
184
+ }
185
+ const [inputStakedSui, inputAmount, inputSharedObj] = inputs;
186
+ if (!builder_1.TransactionBlockInput.is(inputStakedSui) ||
187
+ !builder_1.TransactionBlockInput.is(inputAmount) ||
188
+ !builder_1.TransactionBlockInput.is(inputSharedObj)) {
189
+ // for unclear reasons there seem to be two different serialization formats that we are dealing with
190
+ // try the other one here
191
+ return this.parseTransactionPairReserialized(
192
+ // we have length checked these earlier
193
+ inputs, transactions);
194
+ }
195
+ if (inputStakedSui.type !== 'object' ||
196
+ inputAmount.type !== 'pure' ||
197
+ typeof inputAmount.value !== 'string' ||
198
+ inputSharedObj.type !== 'object' ||
199
+ !builder_1.ObjectCallArg.is(inputStakedSui.value) ||
200
+ !(0, utils_1.isImmOrOwnedObj)(inputStakedSui.value.Object)) {
201
+ throw new Error('Invalid inputs');
202
+ }
203
+ const amount = BigInt(inputAmount.value);
204
+ // make sure we parsed the transaction correctly by rebuilding it and comparing the transaction blocks
205
+ (0, compareTransactionBlocks_1.assertEqualTransactionBlocks)({ inputs, transactions }, unstakingBuilder_1.UnstakingBuilder.getTransactionBlockData(inputStakedSui.value.Object.ImmOrOwned, amount));
206
+ return {
207
+ stakedObjectRef: inputStakedSui.value.Object.ImmOrOwned,
208
+ amount,
209
+ };
210
+ }
211
+ static parseTransactionSingle(inputs, tx) {
212
+ if (!builder_1.MoveCallTransaction.is(tx) || !builder_1.TransactionBlockInput.is(tx.arguments[1])) {
213
+ throw new Error('Invalid transaction');
214
+ }
215
+ const stakedSuiInputIdx = tx.arguments[1].index;
216
+ let stakedSuiInput = inputs[stakedSuiInputIdx];
217
+ if (!builder_1.TransactionBlockInput.is(stakedSuiInput)) {
218
+ // for unclear reasons, in tests the stakedSuiInput is not a TransactionBlockInput sometimes
219
+ if (!builder_1.ObjectCallArg.is(stakedSuiInput)) {
220
+ throw new Error('Invalid transaction');
221
+ }
222
+ }
223
+ if ('Object' in stakedSuiInput && (0, utils_1.isImmOrOwnedObj)(stakedSuiInput.Object)) {
224
+ stakedSuiInput = stakedSuiInput.Object.ImmOrOwned;
225
+ }
226
+ else if ('value' in stakedSuiInput && (0, utils_1.isImmOrOwnedObj)(stakedSuiInput.value.Object)) {
227
+ stakedSuiInput = stakedSuiInput.value.Object.ImmOrOwned;
228
+ }
229
+ else {
230
+ throw new Error('Invalid transaction');
231
+ }
232
+ if (!types_1.SuiObjectRef.is(stakedSuiInput)) {
233
+ throw new Error('Invalid transaction');
234
+ }
235
+ return {
236
+ stakedObjectRef: stakedSuiInput,
237
+ };
238
+ }
239
+ static parseTransaction(tx) {
240
+ const { inputs, transactions } = tx;
241
+ if (transactions.length === 1) {
242
+ return UnstakingTransaction.parseTransactionSingle(inputs, transactions[0]);
243
+ }
244
+ else if (transactions.length === 2) {
245
+ return UnstakingTransaction.parseTransactionPair(inputs, transactions);
246
+ }
247
+ else {
248
+ throw new sdk_core_1.InvalidTransactionError('Invalid transaction');
249
+ }
250
+ }
99
251
  /**
100
252
  * Load the input and output data on this transaction.
101
253
  */
@@ -103,23 +255,10 @@ class UnstakingTransaction extends transaction_1.Transaction {
103
255
  if (!this.suiTransaction) {
104
256
  return;
105
257
  }
106
- const stakedSuiInputIdx = this.suiTransaction.tx.transactions[0].arguments[1].index;
107
- const stakedSuiInput = this.suiTransaction.tx.inputs[stakedSuiInputIdx];
108
- const stakedSui = 'value' in stakedSuiInput ? stakedSuiInput.value : stakedSuiInput;
109
- this._outputs = [
110
- {
111
- address: this.suiTransaction.sender,
112
- value: constants_1.AMOUNT_UNKNOWN_TEXT,
113
- coin: this._coinConfig.name,
114
- },
115
- ];
116
- this._inputs = [
117
- {
118
- address: types_1.normalizeSuiAddress(builder_1.getIdFromCallArg(stakedSui)),
119
- value: constants_1.AMOUNT_UNKNOWN_TEXT,
120
- coin: this._coinConfig.name,
121
- },
122
- ];
258
+ const parsed = UnstakingTransaction.parseTransaction(this.suiTransaction.tx);
259
+ const { inputs, outputs } = this.getEntriesForStakedSuiInput(parsed.stakedObjectRef, parsed.amount);
260
+ this._inputs = inputs;
261
+ this._outputs = outputs;
123
262
  }
124
263
  /**
125
264
  * Sets this transaction payload
@@ -153,7 +292,7 @@ class UnstakingTransaction extends transaction_1.Transaction {
153
292
  }
154
293
  if (input.hasOwnProperty('Pure')) {
155
294
  if (input.Pure.length === constants_1.SUI_ADDRESS_LENGTH) {
156
- const address = types_1.normalizeSuiAddress(builder_1.builder.de(bcs_1.BCS.ADDRESS, buffer_1.Buffer.from(input.Pure).toString('base64'), 'base64'));
295
+ const address = (0, types_1.normalizeSuiAddress)(builder_1.builder.de(bcs_1.BCS.ADDRESS, buffer_1.Buffer.from(input.Pure).toString('base64'), 'base64'));
157
296
  return builder_1.Inputs.Pure(address, bcs_1.BCS.ADDRESS);
158
297
  }
159
298
  else {
@@ -203,4 +342,4 @@ class UnstakingTransaction extends transaction_1.Transaction {
203
342
  }
204
343
  }
205
344
  exports.UnstakingTransaction = UnstakingTransaction;
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zdGFraW5nVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Vuc3Rha2luZ1RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVE4QjtBQUc5QixvREFBNEI7QUFDNUIsbUNBQWdDO0FBQ2hDLCtDQUE0QztBQUM1QyxpREFBb0g7QUFDcEgsNkNBQWlFO0FBQ2pFLHFDQUFrQztBQUNsQywyQ0FBc0U7QUFFdEUsTUFBYSxvQkFBcUIsU0FBUSx5QkFBNkM7SUFDckYsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQW9EO1FBQ3BFLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBd0IsRUFBRSxTQUFpQjtRQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUI7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixNQUFNLElBQUksa0NBQXVCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN4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LElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTtZQUNuQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87WUFDckMsSUFBSSxFQUFFO2dCQUNKLHVCQUF1QixFQUFFLGNBQWM7YUFDeEM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG1DQUFtQyxDQUFDLElBQVksRUFBRSxpQkFBeUM7UUFDekYsTUFBTSxPQUFPLEdBQTJCO1lBQ3RDO2dCQUNFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU07Z0JBQ25DLE1BQU0sRUFBRSwrQkFBbUI7YUFDNUI7U0FDRixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsK0JBQW1CLENBQUM7UUFFekMsT0FBTztZQUNMLEdBQUcsaUJBQWlCO1lBQ3BCLFlBQVk7WUFDWixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXZORCxvREF1TkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlS2V5LFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXkgYXMgQmFzZVB1YmxpY0tleSxcbiAgU2lnbmF0dXJlLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBVbnN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbiwgU3VpVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sIFR4RGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBidWlsZGVyLCBnZXRJZEZyb21DYWxsQXJnLCBJbnB1dHMsIE1vdmVDYWxsVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCB9IGZyb20gJy4vbXlzdGVubGFiL2J1aWxkZXInO1xuaW1wb3J0IHsgQ2FsbEFyZywgbm9ybWFsaXplU3VpQWRkcmVzcyB9IGZyb20gJy4vbXlzdGVubGFiL3R5cGVzJztcbmltcG9ydCB7IEJDUyB9IGZyb20gJ0BteXN0ZW4vYmNzJztcbmltcG9ydCB7IEFNT1VOVF9VTktOT1dOX1RFWFQsIFNVSV9BRERSRVNTX0xFTkdUSCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNsYXNzIFVuc3Rha2luZ1RyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb248VW5zdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHN1aVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPFVuc3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N1aVRyYW5zYWN0aW9uO1xuICB9XG5cbiAgc2V0U3VpVHJhbnNhY3Rpb24odHg6IFN1aVRyYW5zYWN0aW9uPFVuc3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uPik6IHZvaWQge1xuICAgIHRoaXMuX3N1aVRyYW5zYWN0aW9uID0gdHg7XG4gIH1cblxuICBhZGRTaWduYXR1cmUocHVibGljS2V5OiBCYXNlUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaChzaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB0aGlzLl9zaWduYXR1cmUgPSB7IHB1YmxpY0tleSwgc2lnbmF0dXJlIH07XG4gICAgdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBzdWlTaWduYXR1cmUoKTogU2lnbmF0dXJlIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmF0dXJlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGlmICghdGhpcy5fc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHggPSB0aGlzLl9zdWlUcmFuc2FjdGlvbjtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuX2lkLFxuICAgICAgc2VuZGVyOiB0eC5zZW5kZXIsXG4gICAgICBraW5kOiB7IFByb2dyYW1tYWJsZVRyYW5zYWN0aW9uOiB0eC50eCB9LFxuICAgICAgZ2FzRGF0YTogdHguZ2FzRGF0YSxcbiAgICAgIGV4cGlyYXRpb246IHsgTm9uZTogbnVsbCB9LFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gW1xuICAgICAgJ2lkJyxcbiAgICAgICdvdXRwdXRzJyxcbiAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAnZmVlJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICdtb2R1bGUnLFxuICAgICAgJ2Z1bmN0aW9uJyxcbiAgICAgICd2YWxpZGF0b3JBZGRyZXNzJyxcbiAgICBdO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXTtcblxuICAgIGNvbnN0IGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50OiAnMCcsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5zdWlUcmFuc2FjdGlvbi5nYXNEYXRhLmJ1ZGdldC50b1N0cmluZygpIH0sXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgfTtcblxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW06XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGxhaW5XaXRoZHJhd1N0YWtlZFN1aVRyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIG9uIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFrZWRTdWlJbnB1dElkeCA9IChcbiAgICAgICh0aGlzLnN1aVRyYW5zYWN0aW9uLnR4LnRyYW5zYWN0aW9uc1swXSBhcyBNb3ZlQ2FsbFRyYW5zYWN0aW9uKS5hcmd1bWVudHNbMV0gYXMgVHJhbnNhY3Rpb25CbG9ja0lucHV0XG4gICAgKS5pbmRleDtcbiAgICBjb25zdCBzdGFrZWRTdWlJbnB1dCA9IHRoaXMuc3VpVHJhbnNhY3Rpb24udHguaW5wdXRzW3N0YWtlZFN1aUlucHV0SWR4XSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXQ7XG4gICAgY29uc3Qgc3Rha2VkU3VpID0gJ3ZhbHVlJyBpbiBzdGFrZWRTdWlJbnB1dCA/IHN0YWtlZFN1aUlucHV0LnZhbHVlIDogc3Rha2VkU3VpSW5wdXQ7XG5cbiAgICB0aGlzLl9vdXRwdXRzID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiB0aGlzLnN1aVRyYW5zYWN0aW9uLnNlbmRlcixcbiAgICAgICAgdmFsdWU6IEFNT1VOVF9VTktOT1dOX1RFWFQsXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IG5vcm1hbGl6ZVN1aUFkZHJlc3MoZ2V0SWRGcm9tQ2FsbEFyZyhzdGFrZWRTdWkpKSxcbiAgICAgICAgdmFsdWU6IEFNT1VOVF9VTktOT1dOX1RFWFQsXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb24gcGF5bG9hZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmF3VHJhbnNhY3Rpb25cbiAgICovXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgICB0aGlzLl9zdWlUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uLmRlc2VyaWFsaXplU3VpVHJhbnNhY3Rpb24oXG4gICAgICAgIHJhd1RyYW5zYWN0aW9uXG4gICAgICApIGFzIFN1aVRyYW5zYWN0aW9uPFVuc3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uPjtcbiAgICAgIHRoaXMuX3R5cGUgPSB1dGlscy5nZXRUcmFuc2FjdGlvblR5cGUodGhpcy5fc3VpVHJhbnNhY3Rpb24udHlwZSk7XG4gICAgICB0aGlzLl9pZCA9IHRoaXMuX3N1aVRyYW5zYWN0aW9uLmlkO1xuICAgICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiBmb3Igc2VyaWFsaXplKCkgdG8gZ2V0IHRoZSBjb3JyZWN0IHR4RGF0YSB3aXRoIHRyYW5zYWN0aW9uIHR5cGVcbiAgICpcbiAgICogQHJldHVybiB7VHhEYXRhfVxuICAgKi9cbiAgZ2V0VHhEYXRhKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dHM6IENhbGxBcmdbXSB8IFRyYW5zYWN0aW9uQmxvY2tJbnB1dFtdID0gdGhpcy5fc3VpVHJhbnNhY3Rpb24udHguaW5wdXRzLm1hcCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5wdXQuaGFzT3duUHJvcGVydHkoJ09iamVjdCcpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eSgnUHVyZScpKSB7XG4gICAgICAgIGlmIChpbnB1dC5QdXJlLmxlbmd0aCA9PT0gU1VJX0FERFJFU1NfTEVOR1RIKSB7XG4gICAgICAgICAgY29uc3QgYWRkcmVzcyA9IG5vcm1hbGl6ZVN1aUFkZHJlc3MoXG4gICAgICAgICAgICBidWlsZGVyLmRlKEJDUy5BRERSRVNTLCBCdWZmZXIuZnJvbShpbnB1dC5QdXJlKS50b1N0cmluZygnYmFzZTY0JyksICdiYXNlNjQnKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIElucHV0cy5QdXJlKGFkZHJlc3MsIEJDUy5BRERSRVNTKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBhbW91bnQgPSBidWlsZGVyLmRlKEJDUy5VNjQsIEJ1ZmZlci5mcm9tKGlucHV0LlB1cmUpLnRvU3RyaW5nKCdiYXNlNjQnKSwgJ2Jhc2U2NCcpO1xuICAgICAgICAgIHJldHVybiBJbnB1dHMuUHVyZShhbW91bnQsIEJDUy5VNjQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQua2luZCA9PT0gJ0lucHV0JyAmJiAoaW5wdXQudmFsdWUuaGFzT3duUHJvcGVydHkoJ09iamVjdCcpIHx8IGlucHV0LnZhbHVlLmhhc093blByb3BlcnR5KCdQdXJlJykpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gd2hhdCdzIGxlZnQgaXMgdGhlIHB1cmUgbnVtYmVyIG9yIGFkZHJlc3Mgc3RyaW5nXG4gICAgICByZXR1cm4gSW5wdXRzLlB1cmUoaW5wdXQudmFsdWUsIGlucHV0LnR5cGUgPT09ICdwdXJlJyA/IEJDUy5VNjQgOiBCQ1MuQUREUkVTUyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcm9ncmFtbWFibGVUeCA9IHtcbiAgICAgIGlucHV0czogaW5wdXRzLFxuICAgICAgdHJhbnNhY3Rpb25zOiB0aGlzLl9zdWlUcmFuc2FjdGlvbi50eC50cmFuc2FjdGlvbnMsXG4gICAgfSBhcyBVbnN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbjtcblxuICAgIHJldHVybiB7XG4gICAgICBzZW5kZXI6IHRoaXMuX3N1aVRyYW5zYWN0aW9uLnNlbmRlcixcbiAgICAgIGV4cGlyYXRpb246IHsgTm9uZTogbnVsbCB9LFxuICAgICAgZ2FzRGF0YTogdGhpcy5fc3VpVHJhbnNhY3Rpb24uZ2FzRGF0YSxcbiAgICAgIGtpbmQ6IHtcbiAgICAgICAgUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb246IHByb2dyYW1tYWJsZVR4LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb21wbGV0ZSBleHBsYW5hdGlvbiBmb3IgYSB1bnN0YWtpbmcgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUeERhdGF9IGpzb24gVGhlIHRyYW5zYWN0aW9uIGRhdGEgaW4ganNvbiBmb3JtYXRcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufSBleHBsYW5hdGlvblJlc3VsdCBUaGUgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb24gdG8gYmUgY29tcGxldGVkXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufVxuICAgKi9cbiAgZXhwbGFpbldpdGhkcmF3U3Rha2VkU3VpVHJhbnNhY3Rpb24oanNvbjogVHhEYXRhLCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRoaXMuc3VpVHJhbnNhY3Rpb24uc2VuZGVyLFxuICAgICAgICBhbW91bnQ6IEFNT1VOVF9VTktOT1dOX1RFWFQsXG4gICAgICB9LFxuICAgIF07XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gQU1PVU5UX1VOS05PV05fVEVYVDtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG91dHB1dEFtb3VudCxcbiAgICAgIG91dHB1dHMsXG4gICAgfTtcbiAgfVxufVxuIl19
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zdGFraW5nVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Vuc3Rha2luZ1RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQVM4QjtBQUc5QixpREFBaUQ7QUFDakQsbUNBQWdDO0FBQ2hDLCtDQUE0QztBQUM1QyxpREFPNkI7QUFDN0IsNkNBQW9GO0FBQ3BGLHFDQUFrQztBQUNsQywyQ0FBc0U7QUFDdEUseURBQXNEO0FBQ3RELHlFQUEwRTtBQUUxRSxNQUFhLG9CQUFxQixTQUFRLHlCQUE2QztJQUNyRixZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBb0Q7UUFDcEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUF3QixFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUFDLEdBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsZUFB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Q0osQ0FBQztDQUNGO0FBN1dELG9EQTZXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEVudHJ5LFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXkgYXMgQmFzZVB1YmxpY0tleSxcbiAgU2lnbmF0dXJlLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBVbnN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbiwgU3VpVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sIFR4RGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHV0aWxzLCB7IGlzSW1tT3JPd25lZE9iaiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQge1xuICBidWlsZGVyLFxuICBJbnB1dHMsXG4gIE1vdmVDYWxsVHJhbnNhY3Rpb24sXG4gIE9iamVjdENhbGxBcmcsXG4gIFB1cmVDYWxsQXJnLFxuICBUcmFuc2FjdGlvbkJsb2NrSW5wdXQsXG59IGZyb20gJy4vbXlzdGVubGFiL2J1aWxkZXInO1xuaW1wb3J0IHsgYmNzLCBDYWxsQXJnLCBub3JtYWxpemVTdWlBZGRyZXNzLCBTdWlPYmplY3RSZWYgfSBmcm9tICcuL215c3RlbmxhYi90eXBlcyc7XG5pbXBvcnQgeyBCQ1MgfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5pbXBvcnQgeyBBTU9VTlRfVU5LTk9XTl9URVhULCBTVUlfQUREUkVTU19MRU5HVEggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBVbnN0YWtpbmdCdWlsZGVyIH0gZnJvbSAnLi91bnN0YWtpbmdCdWlsZGVyJztcbmltcG9ydCB7IGFzc2VydEVxdWFsVHJhbnNhY3Rpb25CbG9ja3MgfSBmcm9tICcuL2NvbXBhcmVUcmFuc2FjdGlvbkJsb2Nrcyc7XG5cbmV4cG9ydCBjbGFzcyBVbnN0YWtpbmdUcmFuc2FjdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uPFVuc3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uPiB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldCBzdWlUcmFuc2FjdGlvbigpOiBTdWlUcmFuc2FjdGlvbjxVbnN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9zdWlUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldFN1aVRyYW5zYWN0aW9uKHR4OiBTdWlUcmFuc2FjdGlvbjxVbnN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4pOiB2b2lkIHtcbiAgICB0aGlzLl9zdWlUcmFuc2FjdGlvbiA9IHR4O1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0geyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9O1xuICAgIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICBnZXQgc3VpU2lnbmF0dXJlKCk6IFNpZ25hdHVyZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHR4ID0gdGhpcy5fc3VpVHJhbnNhY3Rpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLl9pZCxcbiAgICAgIHNlbmRlcjogdHguc2VuZGVyLFxuICAgICAga2luZDogeyBQcm9ncmFtbWFibGVUcmFuc2FjdGlvbjogdHgudHggfSxcbiAgICAgIGdhc0RhdGE6IHR4Lmdhc0RhdGEsXG4gICAgICBleHBpcmF0aW9uOiB7IE5vbmU6IG51bGwgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFtcbiAgICAgICdpZCcsXG4gICAgICAnb3V0cHV0cycsXG4gICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICdjaGFuZ2VPdXRwdXRzJyxcbiAgICAgICdjaGFuZ2VBbW91bnQnLFxuICAgICAgJ2ZlZScsXG4gICAgICAndHlwZScsXG4gICAgICAnbW9kdWxlJyxcbiAgICAgICdmdW5jdGlvbicsXG4gICAgICAndmFsaWRhdG9yQWRkcmVzcycsXG4gICAgXTtcbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW107XG5cbiAgICBjb25zdCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IHtcbiAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIG91dHB1dEFtb3VudDogJzAnLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuc3VpVHJhbnNhY3Rpb24uZ2FzRGF0YS5idWRnZXQudG9TdHJpbmcoKSB9LFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltOlxuICAgICAgICByZXR1cm4gdGhpcy5leHBsYWluV2l0aGRyYXdTdGFrZWRTdWlUcmFuc2FjdGlvbihyZXN1bHQsIGV4cGxhbmF0aW9uUmVzdWx0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXQuXG4gICAqL1xuICB0cmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgZ2V0RW50cmllc0ZvclN0YWtlZFN1aUlucHV0KHN0YWtlZFN1aUlucHV0OiBTdWlPYmplY3RSZWYsIGFtb3VudD86IGJpZ2ludCk6IHsgaW5wdXRzOiBFbnRyeVtdOyBvdXRwdXRzOiBFbnRyeVtdIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IG5vcm1hbGl6ZVN1aUFkZHJlc3Moc3Rha2VkU3VpSW5wdXQub2JqZWN0SWQpLFxuICAgICAgICAgIHZhbHVlOiBhbW91bnQgPT09IHVuZGVmaW5lZCA/IEFNT1VOVF9VTktOT1dOX1RFWFQgOiBhbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogdGhpcy5zdWlUcmFuc2FjdGlvbi5zZW5kZXIsXG4gICAgICAgICAgdmFsdWU6IGFtb3VudCA9PT0gdW5kZWZpbmVkID8gQU1PVU5UX1VOS05PV05fVEVYVCA6IGFtb3VudC50b1N0cmluZygpLFxuICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaW5wdXRzXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbnNcbiAgICovXG4gIHN0YXRpYyBwYXJzZVRyYW5zYWN0aW9uUGFpclJlc2VyaWFsaXplZChcbiAgICBpbnB1dHM6IFt1bmtub3duLCB1bmtub3duLCB1bmtub3duXSxcbiAgICB0cmFuc2FjdGlvbnM6IFt1bmtub3duLCB1bmtub3duXVxuICApOiB7XG4gICAgc3Rha2VkT2JqZWN0UmVmOiBTdWlPYmplY3RSZWY7XG4gICAgYW1vdW50OiBiaWdpbnQ7XG4gIH0ge1xuICAgIGNvbnN0IFtpbnB1dFN0YWtlZFN1aSwgaW5wdXRBbW91bnQsIGlucHV0U2hhcmVkT2JqXSA9IGlucHV0cztcblxuICAgIGlmICghT2JqZWN0Q2FsbEFyZy5pcyhpbnB1dFN0YWtlZFN1aSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCBzdGFrZWQgc3VpJyk7XG4gICAgfVxuXG4gICAgaWYgKCFQdXJlQ2FsbEFyZy5pcyhpbnB1dEFtb3VudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCBhbW91bnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdENhbGxBcmcuaXMoaW5wdXRTaGFyZWRPYmopKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQgc2hhcmVkIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFtb3VudCA9IEJpZ0ludChiY3MuZGUoQkNTLlU2NCwgVWludDhBcnJheS5mcm9tKGlucHV0QW1vdW50LlB1cmUpKSk7XG4gICAgaWYgKCFpc0ltbU9yT3duZWRPYmooaW5wdXRTdGFrZWRTdWkuT2JqZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHNoYXJlZCBvYmplY3QnKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgd2UgcGFyc2VkIHRoZSB0cmFuc2FjdGlvbiBjb3JyZWN0bHkgYnkgcmVidWlsZGluZyBpdCBhbmQgY29tcGFyaW5nIHRoZSB0cmFuc2FjdGlvbiBibG9ja3NcbiAgICBhc3NlcnRFcXVhbFRyYW5zYWN0aW9uQmxvY2tzKFxuICAgICAgeyBpbnB1dHMsIHRyYW5zYWN0aW9ucyB9LFxuICAgICAgVW5zdGFraW5nQnVpbGRlci5nZXRUcmFuc2FjdGlvbkJsb2NrRGF0YVJlc2VyaWFsaXplZChpbnB1dFN0YWtlZFN1aS5PYmplY3QuSW1tT3JPd25lZCwgYW1vdW50KVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3Rha2VkT2JqZWN0UmVmOiBpbnB1dFN0YWtlZFN1aS5PYmplY3QuSW1tT3JPd25lZCxcbiAgICAgIGFtb3VudCxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHBhcnNlVHJhbnNhY3Rpb25QYWlyKFxuICAgIGlucHV0czogU3VpVHJhbnNhY3Rpb25bJ3R4J11bJ2lucHV0cyddLFxuICAgIHRyYW5zYWN0aW9uczogdW5rbm93bltdXG4gICk6IHtcbiAgICBzdGFrZWRPYmplY3RSZWY6IFN1aU9iamVjdFJlZjtcbiAgICBhbW91bnQ6IGJpZ2ludDtcbiAgfSB7XG4gICAgaWYgKHRyYW5zYWN0aW9ucy5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbiBwYWlyJyk7XG4gICAgfVxuXG4gICAgaWYgKCFNb3ZlQ2FsbFRyYW5zYWN0aW9uLmlzKHRyYW5zYWN0aW9uc1swXSkgfHwgIU1vdmVDYWxsVHJhbnNhY3Rpb24uaXModHJhbnNhY3Rpb25zWzFdKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uIHBhaXInKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXRzKSB8fCBpbnB1dHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXRzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgW2lucHV0U3Rha2VkU3VpLCBpbnB1dEFtb3VudCwgaW5wdXRTaGFyZWRPYmpdID0gaW5wdXRzO1xuICAgIGlmIChcbiAgICAgICFUcmFuc2FjdGlvbkJsb2NrSW5wdXQuaXMoaW5wdXRTdGFrZWRTdWkpIHx8XG4gICAgICAhVHJhbnNhY3Rpb25CbG9ja0lucHV0LmlzKGlucHV0QW1vdW50KSB8fFxuICAgICAgIVRyYW5zYWN0aW9uQmxvY2tJbnB1dC5pcyhpbnB1dFNoYXJlZE9iailcbiAgICApIHtcbiAgICAgIC8vIGZvciB1bmNsZWFyIHJlYXNvbnMgdGhlcmUgc2VlbSB0byBiZSB0d28gZGlmZmVyZW50IHNlcmlhbGl6YXRpb24gZm9ybWF0cyB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGhcbiAgICAgIC8vIHRyeSB0aGUgb3RoZXIgb25lIGhlcmVcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhbnNhY3Rpb25QYWlyUmVzZXJpYWxpemVkKFxuICAgICAgICAvLyB3ZSBoYXZlIGxlbmd0aCBjaGVja2VkIHRoZXNlIGVhcmxpZXJcbiAgICAgICAgaW5wdXRzIGFzIFt1bmtub3duLCB1bmtub3duLCB1bmtub3duXSxcbiAgICAgICAgdHJhbnNhY3Rpb25zIGFzIFt1bmtub3duLCB1bmtub3duXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpbnB1dFN0YWtlZFN1aS50eXBlICE9PSAnb2JqZWN0JyB8fFxuICAgICAgaW5wdXRBbW91bnQudHlwZSAhPT0gJ3B1cmUnIHx8XG4gICAgICB0eXBlb2YgaW5wdXRBbW91bnQudmFsdWUgIT09ICdzdHJpbmcnIHx8XG4gICAgICBpbnB1dFNoYXJlZE9iai50eXBlICE9PSAnb2JqZWN0JyB8fFxuICAgICAgIU9iamVjdENhbGxBcmcuaXMoaW5wdXRTdGFrZWRTdWkudmFsdWUpIHx8XG4gICAgICAhaXNJbW1Pck93bmVkT2JqKGlucHV0U3Rha2VkU3VpLnZhbHVlLk9iamVjdClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dHMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbW91bnQgPSBCaWdJbnQoaW5wdXRBbW91bnQudmFsdWUpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHBhcnNlZCB0aGUgdHJhbnNhY3Rpb24gY29ycmVjdGx5IGJ5IHJlYnVpbGRpbmcgaXQgYW5kIGNvbXBhcmluZyB0aGUgdHJhbnNhY3Rpb24gYmxvY2tzXG4gICAgYXNzZXJ0RXF1YWxUcmFuc2FjdGlvbkJsb2NrcyhcbiAgICAgIHsgaW5wdXRzLCB0cmFuc2FjdGlvbnMgfSxcbiAgICAgIFVuc3Rha2luZ0J1aWxkZXIuZ2V0VHJhbnNhY3Rpb25CbG9ja0RhdGEoaW5wdXRTdGFrZWRTdWkudmFsdWUuT2JqZWN0LkltbU9yT3duZWQsIGFtb3VudClcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YWtlZE9iamVjdFJlZjogaW5wdXRTdGFrZWRTdWkudmFsdWUuT2JqZWN0LkltbU9yT3duZWQsXG4gICAgICBhbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVRyYW5zYWN0aW9uU2luZ2xlKFxuICAgIGlucHV0czogU3VpVHJhbnNhY3Rpb25bJ3R4J11bJ2lucHV0cyddLFxuICAgIHR4OiB1bmtub3duXG4gICk6IHtcbiAgICBzdGFrZWRPYmplY3RSZWY6IFN1aU9iamVjdFJlZjtcbiAgfSB7XG4gICAgaWYgKCFNb3ZlQ2FsbFRyYW5zYWN0aW9uLmlzKHR4KSB8fCAhVHJhbnNhY3Rpb25CbG9ja0lucHV0LmlzKHR4LmFyZ3VtZW50c1sxXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBzdGFrZWRTdWlJbnB1dElkeCA9IHR4LmFyZ3VtZW50c1sxXS5pbmRleDtcbiAgICBsZXQgc3Rha2VkU3VpSW5wdXQ6IHVua25vd24gfCBTdWlPYmplY3RSZWYgPSBpbnB1dHNbc3Rha2VkU3VpSW5wdXRJZHhdO1xuICAgIGlmICghVHJhbnNhY3Rpb25CbG9ja0lucHV0LmlzKHN0YWtlZFN1aUlucHV0KSkge1xuICAgICAgLy8gZm9yIHVuY2xlYXIgcmVhc29ucywgaW4gdGVzdHMgdGhlIHN0YWtlZFN1aUlucHV0IGlzIG5vdCBhIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCBzb21ldGltZXNcbiAgICAgIGlmICghT2JqZWN0Q2FsbEFyZy5pcyhzdGFrZWRTdWlJbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgnT2JqZWN0JyBpbiBzdGFrZWRTdWlJbnB1dCAmJiBpc0ltbU9yT3duZWRPYmooc3Rha2VkU3VpSW5wdXQuT2JqZWN0KSkge1xuICAgICAgc3Rha2VkU3VpSW5wdXQgPSBzdGFrZWRTdWlJbnB1dC5PYmplY3QuSW1tT3JPd25lZCBhcyBTdWlPYmplY3RSZWY7XG4gICAgfSBlbHNlIGlmICgndmFsdWUnIGluIHN0YWtlZFN1aUlucHV0ICYmIGlzSW1tT3JPd25lZE9iaihzdGFrZWRTdWlJbnB1dC52YWx1ZS5PYmplY3QpKSB7XG4gICAgICBzdGFrZWRTdWlJbnB1dCA9IHN0YWtlZFN1aUlucHV0LnZhbHVlLk9iamVjdC5JbW1Pck93bmVkIGFzIFN1aU9iamVjdFJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICghU3VpT2JqZWN0UmVmLmlzKHN0YWtlZFN1aUlucHV0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzdGFrZWRPYmplY3RSZWY6IHN0YWtlZFN1aUlucHV0LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcGFyc2VUcmFuc2FjdGlvbih0eDogVW5zdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24pOiB7XG4gICAgc3Rha2VkT2JqZWN0UmVmOiBTdWlPYmplY3RSZWY7XG4gICAgYW1vdW50PzogYmlnaW50O1xuICB9IHtcbiAgICBjb25zdCB7IGlucHV0cywgdHJhbnNhY3Rpb25zIH0gPSB0eDtcbiAgICBpZiAodHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIFVuc3Rha2luZ1RyYW5zYWN0aW9uLnBhcnNlVHJhbnNhY3Rpb25TaW5nbGUoaW5wdXRzLCB0cmFuc2FjdGlvbnNbMF0pO1xuICAgIH0gZWxzZSBpZiAodHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIFVuc3Rha2luZ1RyYW5zYWN0aW9uLnBhcnNlVHJhbnNhY3Rpb25QYWlyKGlucHV0cywgdHJhbnNhY3Rpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN1aVRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gVW5zdGFraW5nVHJhbnNhY3Rpb24ucGFyc2VUcmFuc2FjdGlvbih0aGlzLnN1aVRyYW5zYWN0aW9uLnR4KTtcbiAgICBjb25zdCB7IGlucHV0cywgb3V0cHV0cyB9ID0gdGhpcy5nZXRFbnRyaWVzRm9yU3Rha2VkU3VpSW5wdXQocGFyc2VkLnN0YWtlZE9iamVjdFJlZiwgcGFyc2VkLmFtb3VudCk7XG4gICAgdGhpcy5faW5wdXRzID0gaW5wdXRzO1xuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHRoaXMuX3N1aVRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb24uZGVzZXJpYWxpemVTdWlUcmFuc2FjdGlvbihcbiAgICAgICAgcmF3VHJhbnNhY3Rpb25cbiAgICAgICkgYXMgU3VpVHJhbnNhY3Rpb248VW5zdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+O1xuICAgICAgdGhpcy5fdHlwZSA9IHV0aWxzLmdldFRyYW5zYWN0aW9uVHlwZSh0aGlzLl9zdWlUcmFuc2FjdGlvbi50eXBlKTtcbiAgICAgIHRoaXMuX2lkID0gdGhpcy5fc3VpVHJhbnNhY3Rpb24uaWQ7XG4gICAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBzZXJpYWxpemUoKSB0byBnZXQgdGhlIGNvcnJlY3QgdHhEYXRhIHdpdGggdHJhbnNhY3Rpb24gdHlwZVxuICAgKlxuICAgKiBAcmV0dXJuIHtUeERhdGF9XG4gICAqL1xuICBnZXRUeERhdGEoKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ2VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IGlucHV0czogQ2FsbEFyZ1tdIHwgVHJhbnNhY3Rpb25CbG9ja0lucHV0W10gPSB0aGlzLl9zdWlUcmFuc2FjdGlvbi50eC5pbnB1dHMubWFwKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eSgnT2JqZWN0JykpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0Lmhhc093blByb3BlcnR5KCdQdXJlJykpIHtcbiAgICAgICAgaWYgKGlucHV0LlB1cmUubGVuZ3RoID09PSBTVUlfQUREUkVTU19MRU5HVEgpIHtcbiAgICAgICAgICBjb25zdCBhZGRyZXNzID0gbm9ybWFsaXplU3VpQWRkcmVzcyhcbiAgICAgICAgICAgIGJ1aWxkZXIuZGUoQkNTLkFERFJFU1MsIEJ1ZmZlci5mcm9tKGlucHV0LlB1cmUpLnRvU3RyaW5nKCdiYXNlNjQnKSwgJ2Jhc2U2NCcpXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gSW5wdXRzLlB1cmUoYWRkcmVzcywgQkNTLkFERFJFU1MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGFtb3VudCA9IGJ1aWxkZXIuZGUoQkNTLlU2NCwgQnVmZmVyLmZyb20oaW5wdXQuUHVyZSkudG9TdHJpbmcoJ2Jhc2U2NCcpLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgcmV0dXJuIElucHV0cy5QdXJlKGFtb3VudCwgQkNTLlU2NCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dC5raW5kID09PSAnSW5wdXQnICYmIChpbnB1dC52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnT2JqZWN0JykgfHwgaW5wdXQudmFsdWUuaGFzT3duUHJvcGVydHkoJ1B1cmUnKSkpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LnZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyB3aGF0J3MgbGVmdCBpcyB0aGUgcHVyZSBudW1iZXIgb3IgYWRkcmVzcyBzdHJpbmdcbiAgICAgIHJldHVybiBJbnB1dHMuUHVyZShpbnB1dC52YWx1ZSwgaW5wdXQudHlwZSA9PT0gJ3B1cmUnID8gQkNTLlU2NCA6IEJDUy5BRERSRVNTKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb2dyYW1tYWJsZVR4ID0ge1xuICAgICAgaW5wdXRzOiBpbnB1dHMsXG4gICAgICB0cmFuc2FjdGlvbnM6IHRoaXMuX3N1aVRyYW5zYWN0aW9uLnR4LnRyYW5zYWN0aW9ucyxcbiAgICB9IGFzIFVuc3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbmRlcjogdGhpcy5fc3VpVHJhbnNhY3Rpb24uc2VuZGVyLFxuICAgICAgZXhwaXJhdGlvbjogeyBOb25lOiBudWxsIH0sXG4gICAgICBnYXNEYXRhOiB0aGlzLl9zdWlUcmFuc2FjdGlvbi5nYXNEYXRhLFxuICAgICAga2luZDoge1xuICAgICAgICBQcm9ncmFtbWFibGVUcmFuc2FjdGlvbjogcHJvZ3JhbW1hYmxlVHgsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbXBsZXRlIGV4cGxhbmF0aW9uIGZvciBhIHVuc3Rha2luZyB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1R4RGF0YX0ganNvbiBUaGUgdHJhbnNhY3Rpb24gZGF0YSBpbiBqc29uIGZvcm1hdFxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhbmF0aW9uUmVzdWx0IFRoZSB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbiB0byBiZSBjb21wbGV0ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259XG4gICAqL1xuICBleHBsYWluV2l0aGRyYXdTdGFrZWRTdWlUcmFuc2FjdGlvbihqc29uOiBUeERhdGEsIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGhpcy5zdWlUcmFuc2FjdGlvbi5zZW5kZXIsXG4gICAgICAgIGFtb3VudDogQU1PVU5UX1VOS05PV05fVEVYVCxcbiAgICAgIH0sXG4gICAgXTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSBBTU9VTlRfVU5LTk9XTl9URVhUO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgb3V0cHV0QW1vdW50LFxuICAgICAgb3V0cHV0cyxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1,7 +1,12 @@
1
- import { BaseUtils, TransactionType, Recipient } from '@bitgo-beta/sdk-core';
2
- import { SuiTransaction, SuiTransactionType, TransferProgrammableTransaction, StakingProgrammableTransaction } from './iface';
1
+ import { BaseUtils, Recipient, TransactionType } from '@bitgo-beta/sdk-core';
2
+ import BigNumber from 'bignumber.js';
3
+ import { RequestAddStake, RequestWalrusStakeWithPool, RequestWalrusWithdrawStake, StakingProgrammableTransaction, WalrusStakingProgrammableTransaction, WalrusWithdrawStakeProgrammableTransaction, SuiObjectInfo, SuiProgrammableTransaction, SuiTransaction, SuiTransactionType } from './iface';
3
4
  import { SuiJsonValue, SuiObjectRef } from './mystenlab/types';
4
- import { TransactionBlockInput, TransactionType as TransactionCommandType } from './mystenlab/builder';
5
+ import { ObjectCallArg, TransactionBlockInput, TransactionType as TransactionCommandType } from './mystenlab/builder';
6
+ import { BaseNetwork } from '@bitgo-beta/statics';
7
+ export declare function isImmOrOwnedObj(obj: ObjectCallArg['Object']): obj is {
8
+ ImmOrOwned: SuiObjectRef;
9
+ };
5
10
  export declare class Utils implements BaseUtils {
6
11
  /** @inheritdoc */
7
12
  isValidBlockId(hash: string): boolean;
@@ -79,13 +84,30 @@ export declare class Utils implements BaseUtils {
79
84
  * @return {TransactionType}
80
85
  */
81
86
  getSuiTransactionType(command: TransactionCommandType): SuiTransactionType;
82
- getRecipients(tx: SuiTransaction<TransferProgrammableTransaction | StakingProgrammableTransaction>): Recipient[];
87
+ getRecipients(tx: SuiTransaction<SuiProgrammableTransaction>): Recipient[];
88
+ /**
89
+ * Get add staking requests
90
+ *
91
+ * @param {StakingProgrammableTransaction} tx: staking transaction object
92
+ * @return {RequestAddStake[]} add staking requests
93
+ */
94
+ getStakeRequests(tx: StakingProgrammableTransaction): RequestAddStake[];
95
+ getWalrusStakeWithPoolRequests(tx: WalrusStakingProgrammableTransaction): RequestWalrusStakeWithPool[];
96
+ isWalrusRequestWithdrawStakeTx(tx: WalrusWithdrawStakeProgrammableTransaction): boolean;
97
+ getWalrusWithdrawStakeRequests(tx: WalrusWithdrawStakeProgrammableTransaction): RequestWalrusWithdrawStake;
83
98
  getAmount(input: SuiJsonValue | TransactionBlockInput): number;
84
99
  getAddress(input: TransactionBlockInput): string;
85
100
  normalizeCoins(coins: any[]): SuiObjectRef[];
86
101
  normalizeSuiObjectRef(obj: SuiObjectRef): SuiObjectRef;
87
102
  transactionInput(type: 'object' | 'pure', index?: number, value?: unknown): TransactionBlockInput;
88
103
  getAddressFromPublicKey(publicKey: string): string;
104
+ getFeeEstimate(url: string, txHex: string): Promise<BigNumber>;
105
+ getBalance(url: string, owner: string, coinType?: string): Promise<string>;
106
+ getInputCoins(url: string, owner: string, coinType?: string): Promise<SuiObjectInfo[]>;
107
+ executeTransactionBlock(url: string, serializedTx: string, signatures: string[]): Promise<string>;
108
+ validateNonNegativeNumber(defaultVal: number, errorMsg: string, inputVal?: number): number;
109
+ getSuiTokenFromAddress(packageId: string, network: BaseNetwork): Readonly<import("@bitgo-beta/statics").BaseCoin> | undefined;
110
+ selectObjectsInDescOrderOfBalance(objs: SuiObjectInfo[], limit: BigNumber): SuiObjectInfo[];
89
111
  }
90
112
  declare const utils: Utils;
91
113
  export default utils;
@@ -101,5 +123,5 @@ export declare enum IntentScope {
101
123
  CheckpointSummary = 2,
102
124
  PersonalMessage = 3
103
125
  }
104
- export declare type Intent = [IntentScope, IntentVersion, AppId];
126
+ export type Intent = [IntentScope, IntentVersion, AppId];
105
127
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAIT,eAAe,EACf,SAAS,EAEV,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAEL,cAAc,EACd,kBAAkB,EAClB,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,SAAS,CAAC;AAEjB,OAAO,EAIL,YAAY,EACZ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAW,qBAAqB,EAAE,eAAe,IAAI,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAIhH,qBAAa,KAAM,YAAW,SAAS;IACrC,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,kBAAkB;IAClB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC,kBAAkB;IAClB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItC,kBAAkB;IAClB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5C,kBAAkB;IAClB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;;OAKG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAWtD;;;;OAIG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IASpD;;;;;OAKG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAMzD,kBAAkB;IAClB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI7B,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKvC;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO;IAS1C;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAQ/C;;;;;QAKI;IACJ,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIlC;;;;;OAKG;IACH,kBAAkB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,eAAe;IAW3E;;;;;OAKG;IACH,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,kBAAkB;IAiB1E,aAAa,CAAC,EAAE,EAAE,cAAc,CAAC,+BAA+B,GAAG,8BAA8B,CAAC,GAAG,SAAS,EAAE;IAuBhH,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,qBAAqB,GAAG,MAAM;IAM9D,UAAU,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM;IAYhD,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE;IAM5C,qBAAqB,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY;IAQtD,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,KAAK,SAAI,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,qBAAqB;IAS5F,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAanD;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAC1B,eAAe,KAAK,CAAC;AAErB,oBAAY,KAAK;IACf,GAAG,IAAI;CACR;AAED,oBAAY,aAAa;IACvB,EAAE,IAAI;CACP;AAED,oBAAY,WAAW;IACrB,eAAe,IAAI;IACnB,kBAAkB,IAAI;IACtB,iBAAiB,IAAI;IACrB,eAAe,IAAI;CACpB;AAED,oBAAY,MAAM,GAAG,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}