@bitgo-beta/sdk-core 8.2.1-beta.2020 → 8.2.1-beta.2022
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.
- package/dist/src/bitgo/defi/defiVault.d.ts +35 -1
- package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/defiVault.js +67 -1
- package/dist/src/bitgo/defi/iDefiVault.d.ts +15 -0
- package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/iDefiVault.js +1 -1
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +15 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.js +13 -1
- package/dist/src/bitgo/wallet/safeKeychain.d.ts +24 -1
- package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.js +68 -14
- package/dist/src/bitgo/wallet/wallet.d.ts +2 -0
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +59 -12
- package/dist/test/unit/bitgo/defi/defiVault.js +163 -1
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +70 -1
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +33 -1
- package/dist/test/unit/bitgo/wallet/safeShareWallet.d.ts +9 -0
- package/dist/test/unit/bitgo/wallet/safeShareWallet.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/safeShareWallet.js +303 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GetVaultResponse, VaultProtocol } from '@bitgo/public-types';
|
|
2
|
-
import { DefiOperation, DefiOperationListResult, DepositResult, DepositToVaultOptions, GetOperationOptions, GetVaultConfigOptions, IDefiVault, ListOperationsOptions, ResumeDepositOptions, WithdrawFromVaultOptions, WithdrawResult } from './iDefiVault';
|
|
2
|
+
import { DefiOperation, DefiOperationListResult, DepositResult, DepositToVaultOptions, GetOperationOptions, GetVaultConfigOptions, IDefiVault, ListOperationsOptions, ResumeDepositOptions, WithdrawFromVaultOptions, WithdrawResult, WrapOptions, WrapResult } from './iDefiVault';
|
|
3
3
|
import { IWallet } from '../wallet';
|
|
4
4
|
/**
|
|
5
5
|
* Error thrown when a concurrent active deposit already exists for the (wallet, vault) pair.
|
|
@@ -107,6 +107,40 @@ export declare class DefiVault implements IDefiVault {
|
|
|
107
107
|
* @param params.walletPassphrase - required for hot wallets, omit for custody
|
|
108
108
|
*/
|
|
109
109
|
withdrawFromVault(params: WithdrawFromVaultOptions): Promise<WithdrawResult>;
|
|
110
|
+
/**
|
|
111
|
+
* Wrap native currency into its canonical wrapped-native ERC-20
|
|
112
|
+
* (ETH → WETH via the WETH9 `deposit()` call).
|
|
113
|
+
*
|
|
114
|
+
* A thin orchestrator over a single sendMany, like {@link withdrawFromVault}.
|
|
115
|
+
* WP builds the calldata and resolves the WETH9 address server-side from the
|
|
116
|
+
* vault binding; the SDK only forwards vaultId and amount.
|
|
117
|
+
*
|
|
118
|
+
* @param params.vaultId - DeFi-service vault identifier. Required in v1: binding
|
|
119
|
+
* the wrap to a vault is what supplies the per-enterprise authorization gate
|
|
120
|
+
* and the address-whitelist path server-side (TDD §3.6). M7 makes it optional,
|
|
121
|
+
* which is backward-compatible.
|
|
122
|
+
* @param params.amount - amount in base units of the native coin (18dp for ETH)
|
|
123
|
+
* @param params.walletPassphrase - required for hot wallets, omit for custody
|
|
124
|
+
*/
|
|
125
|
+
wrap(params: WrapOptions): Promise<WrapResult>;
|
|
126
|
+
/**
|
|
127
|
+
* Unwrap the canonical wrapped-native ERC-20 back to native currency
|
|
128
|
+
* (WETH → ETH via the WETH9 `withdraw(uint256)` call).
|
|
129
|
+
*
|
|
130
|
+
* @param params.vaultId - DeFi-service vault identifier (see {@link wrap})
|
|
131
|
+
* @param params.amount - amount in base units of the wrapped token (18dp for WETH)
|
|
132
|
+
* @param params.walletPassphrase - required for hot wallets, omit for custody
|
|
133
|
+
*/
|
|
134
|
+
unwrap(params: WrapOptions): Promise<WrapResult>;
|
|
135
|
+
/**
|
|
136
|
+
* Shared body of {@link wrap} and {@link unwrap} — the two differ only in the
|
|
137
|
+
* sendMany type they issue.
|
|
138
|
+
*
|
|
139
|
+
* Deliberately does not call {@link extractOperationId}: no operation is minted
|
|
140
|
+
* for wrap/unwrap in v1, so it would only ever return undefined. Operation
|
|
141
|
+
* tracking arrives in milestone M5.
|
|
142
|
+
*/
|
|
143
|
+
private sendWrapIntent;
|
|
110
144
|
/**
|
|
111
145
|
* Extract txRequestId from a sendMany result.
|
|
112
146
|
* sendMany returns different shapes depending on wallet type:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defiVault.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/defi/defiVault.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defiVault.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/defi/defiVault.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAGL,aAAa,EACb,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACd,WAAW,EACX,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,WAAW,EAAE,MAAM;CAKhC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,SAAU,YAAW,UAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;gBAEtB,MAAM,EAAE,OAAO;IAK3B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAEhF;;;OAGG;YACW,aAAa;IAU3B;;;OAGG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI9E;;;;;OAKG;IACG,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;IAS7E;;;;;;;;;;OAUG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;IAmB3E;;;;OAIG;YACW,sBAAsB;IAcpC;;;OAGG;YACW,oBAAoB;IAkDlC;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAoCzE;;;;OAIG;IACG,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAQvE;;;;;;;;OAQG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAgBrF;;;;;;;;;;OAUG;IACG,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC;IA2BlF;;;;;;;;;;;;;;OAcG;IACG,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAIpD;;;;;;;OAOG;IACG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAMtD;;;;;;;OAOG;YACW,cAAc;IA+B5B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAWpC,OAAO,CAAC,aAAa;CAGtB"}
|
|
@@ -38,6 +38,7 @@ exports.DefiVault = exports.ActiveOperationExistsError = void 0;
|
|
|
38
38
|
* @prettier
|
|
39
39
|
*/
|
|
40
40
|
const t = __importStar(require("io-ts"));
|
|
41
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
41
42
|
const public_types_1 = require("@bitgo/public-types");
|
|
42
43
|
const utils_1 = require("../utils");
|
|
43
44
|
/**
|
|
@@ -298,7 +299,72 @@ class DefiVault {
|
|
|
298
299
|
}
|
|
299
300
|
return { operationId, txRequestId };
|
|
300
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* Wrap native currency into its canonical wrapped-native ERC-20
|
|
304
|
+
* (ETH → WETH via the WETH9 `deposit()` call).
|
|
305
|
+
*
|
|
306
|
+
* A thin orchestrator over a single sendMany, like {@link withdrawFromVault}.
|
|
307
|
+
* WP builds the calldata and resolves the WETH9 address server-side from the
|
|
308
|
+
* vault binding; the SDK only forwards vaultId and amount.
|
|
309
|
+
*
|
|
310
|
+
* @param params.vaultId - DeFi-service vault identifier. Required in v1: binding
|
|
311
|
+
* the wrap to a vault is what supplies the per-enterprise authorization gate
|
|
312
|
+
* and the address-whitelist path server-side (TDD §3.6). M7 makes it optional,
|
|
313
|
+
* which is backward-compatible.
|
|
314
|
+
* @param params.amount - amount in base units of the native coin (18dp for ETH)
|
|
315
|
+
* @param params.walletPassphrase - required for hot wallets, omit for custody
|
|
316
|
+
*/
|
|
317
|
+
async wrap(params) {
|
|
318
|
+
return this.sendWrapIntent('wrapNative', params);
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Unwrap the canonical wrapped-native ERC-20 back to native currency
|
|
322
|
+
* (WETH → ETH via the WETH9 `withdraw(uint256)` call).
|
|
323
|
+
*
|
|
324
|
+
* @param params.vaultId - DeFi-service vault identifier (see {@link wrap})
|
|
325
|
+
* @param params.amount - amount in base units of the wrapped token (18dp for WETH)
|
|
326
|
+
* @param params.walletPassphrase - required for hot wallets, omit for custody
|
|
327
|
+
*/
|
|
328
|
+
async unwrap(params) {
|
|
329
|
+
return this.sendWrapIntent('unwrapNative', params);
|
|
330
|
+
}
|
|
301
331
|
// ── Internal helpers ────────────────────────────────────────────────
|
|
332
|
+
/**
|
|
333
|
+
* Shared body of {@link wrap} and {@link unwrap} — the two differ only in the
|
|
334
|
+
* sendMany type they issue.
|
|
335
|
+
*
|
|
336
|
+
* Deliberately does not call {@link extractOperationId}: no operation is minted
|
|
337
|
+
* for wrap/unwrap in v1, so it would only ever return undefined. Operation
|
|
338
|
+
* tracking arrives in milestone M5.
|
|
339
|
+
*/
|
|
340
|
+
async sendWrapIntent(type, params) {
|
|
341
|
+
const vaultId = params.vaultId?.trim();
|
|
342
|
+
if (!vaultId) {
|
|
343
|
+
throw new Error('vaultId is required');
|
|
344
|
+
}
|
|
345
|
+
// The downstream BigIntFromString codec (wallet.ts) accepts anything JS's BigInt() constructor
|
|
346
|
+
// does - negative amounts, hex strings like '0xabc', and zero - and this amount forwards
|
|
347
|
+
// straight into a value-moving WETH9 deposit()/withdraw() call. Require a positive unsigned
|
|
348
|
+
// decimal integer string here; zero is deliberately rejected too, since a zero-amount wrap/
|
|
349
|
+
// unwrap has no on-chain effect but would still spend gas.
|
|
350
|
+
if (!params.amount || !/^\d+$/.test(params.amount) || BigInt(params.amount) === 0n) {
|
|
351
|
+
throw new Error('amount must be a positive unsigned decimal integer string');
|
|
352
|
+
}
|
|
353
|
+
// Wrapped-native vaults (WETH9 deposit()/withdraw()) only exist on EVM chains. Fail fast here
|
|
354
|
+
// instead of letting an unsupported coin reach wallet-platform and return an opaque prebuild error.
|
|
355
|
+
if (!this.wallet.baseCoin.getConfig().features.includes(statics_1.CoinFeature.EVM_COIN)) {
|
|
356
|
+
throw new Error(`wrap/unwrap is not supported for ${this.wallet.baseCoin.getFamily()} wallets`);
|
|
357
|
+
}
|
|
358
|
+
const result = await this.wallet.sendMany({
|
|
359
|
+
type,
|
|
360
|
+
defiParams: {
|
|
361
|
+
vaultId,
|
|
362
|
+
amount: params.amount,
|
|
363
|
+
},
|
|
364
|
+
...(params.walletPassphrase ? { walletPassphrase: params.walletPassphrase } : {}),
|
|
365
|
+
});
|
|
366
|
+
return { txRequestId: this.extractTxRequestId(result) };
|
|
367
|
+
}
|
|
302
368
|
/**
|
|
303
369
|
* Extract txRequestId from a sendMany result.
|
|
304
370
|
* sendMany returns different shapes depending on wallet type:
|
|
@@ -376,4 +442,4 @@ exports.DefiVault = DefiVault;
|
|
|
376
442
|
* consume.
|
|
377
443
|
*/
|
|
378
444
|
DefiVault.VaultDispatch = t.type({ protocol: public_types_1.VaultProtocolType });
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaVZhdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2RlZmkvZGVmaVZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gseUNBQTJCO0FBQzNCLHNEQUF5RjtBQWtCekYsb0NBQTJDO0FBRTNDOztHQUVHO0FBQ0gsTUFBYSwwQkFBMkIsU0FBUSxLQUFLO0lBR25ELFlBQVksV0FBbUI7UUFDN0IsS0FBSyxDQUFDLCtDQUErQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxJQUFJLEdBQUcsNEJBQTRCLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBUkQsZ0VBUUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBYSxTQUFTO0lBSXBCLFlBQVksTUFBZTtRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQVdEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBZTtRQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSzthQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQywrQkFBK0IsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUMxRSxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDO2FBQ3JELE1BQU0sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FH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QUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzVGLENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUEsdUJBQWUsRUFBQyx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztRQUM1RyxPQUFPO1lBQ0wsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQzdDLEtBQUssRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssSUFBSSxtQkFBbUI7U0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFTyxhQUFhO1FBQ25CLE9BQU8sZ0NBQWdDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQztJQUN2RSxDQUFDOztBQS9WSCw4QkFnV0M7QUF2VkM7Ozs7OztHQU1HO0FBQ3FCLHVCQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxnQ0FBaUIsRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IEdldFZhdWx0UmVzcG9uc2UsIFZhdWx0UHJvdG9jb2wsIFZhdWx0UHJvdG9jb2xUeXBlIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQge1xuICBDb25jcmV0ZURlcG9zaXRSZXN1bHQsXG4gIE1vcnBob0RlcG9zaXRSZXN1bHQsXG4gIERlZmlPcGVyYXRpb24sXG4gIERlZmlPcGVyYXRpb25MaXN0UmVzdWx0LFxuICBEZXBvc2l0UmVzdWx0LFxuICBEZXBvc2l0VG9WYXVsdE9wdGlvbnMsXG4gIEdldE9wZXJhdGlvbk9wdGlvbnMsXG4gIEdldFZhdWx0Q29uZmlnT3B0aW9ucyxcbiAgSURlZmlWYXVsdCxcbiAgTGlzdE9wZXJhdGlvbnNPcHRpb25zLFxuICBSZXN1bWVEZXBvc2l0T3B0aW9ucyxcbiAgV2l0aGRyYXdGcm9tVmF1bHRPcHRpb25zLFxuICBXaXRoZHJhd1Jlc3VsdCxcbn0gZnJvbSAnLi9pRGVmaVZhdWx0JztcbmltcG9ydCB7IElXYWxsZXQgfSBmcm9tICcuLi93YWxsZXQnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IGRlY29kZVdpdGhDb2RlYyB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiBhIGNvbmN1cnJlbnQgYWN0aXZlIGRlcG9zaXQgYWxyZWFkeSBleGlzdHMgZm9yIHRoZSAod2FsbGV0LCB2YXVsdCkgcGFpci5cbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGl2ZU9wZXJhdGlvbkV4aXN0c0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgb3BlcmF0aW9uSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcGVyYXRpb25JZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoYEFuIGFjdGl2ZSBkZXBvc2l0IG9wZXJhdGlvbiBhbHJlYWR5IGV4aXN0czogJHtvcGVyYXRpb25JZH1gKTtcbiAgICB0aGlzLm5hbWUgPSAnQWN0aXZlT3BlcmF0aW9uRXhpc3RzRXJyb3InO1xuICAgIHRoaXMub3BlcmF0aW9uSWQgPSBvcGVyYXRpb25JZDtcbiAgfVxufVxuXG4vKipcbiAqIE9yY2hlc3RyYXRlcyBFUkMtNDYyNiB2YXVsdCBkZXBvc2l0IGFuZCB3aXRoZHJhdyBmbG93cyBmb3IgYSB3YWxsZXQuXG4gKlxuICogRXhwb3NlZCBhcyBgd2FsbGV0LmRlZmlgIG9uIHRoZSBXYWxsZXQgY2xhc3MuIFNlZSBUREQgwqc2LjMuMSBmb3IgdGhlIGZ1bGxcbiAqIGRlc2lnbjogdGhlIFNESyBzZXF1ZW5jZXMgdHdvIHNlbmRNYW55IGNhbGxzIChhcHByb3ZlICsgZGVwb3NpdCkgYW5kXG4gKiByZXR1cm5zIGFuIG9wZXJhdGlvbklkIHRoYXQgdGhlIFVJIHVzZXMgZm9yIHN0YXR1cyB0cmFja2luZyBhbmQgcmVjb3ZlcnkuXG4gKlxuICogVXNlcyB3YWxsZXQuc2VuZE1hbnkoKSB1bmRlciB0aGUgaG9vZCBzbyB0aGF0IGJvdGggY3VzdG9keSB3YWxsZXRzXG4gKiAodHhSZXF1ZXN0IGNyZWF0aW9uIG9ubHkpIGFuZCBob3Qgd2FsbGV0cyAoY3JlYXRlICsgc2lnbiArIGJyb2FkY2FzdClcbiAqIGFyZSBoYW5kbGVkIGJ5IHRoZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERlZmlWYXVsdCBpbXBsZW1lbnRzIElEZWZpVmF1bHQge1xuICBwcml2YXRlIHJlYWRvbmx5IHdhbGxldDogSVdhbGxldDtcbiAgcHJpdmF0ZSByZWFkb25seSBiaXRnbzogQml0R29CYXNlO1xuXG4gIGNvbnN0cnVjdG9yKHdhbGxldDogSVdhbGxldCkge1xuICAgIHRoaXMud2FsbGV0ID0gd2FsbGV0O1xuICAgIHRoaXMuYml0Z28gPSB3YWxsZXQuYml0Z287XG4gIH1cblxuICAvKipcbiAgICogTWluaW1hbCBkaXNwYXRjaCBjb2RlYy4gVGhlIGRlcG9zaXQgcGF0aCByZWFkcyBvbmx5IGBwcm90b2NvbGAgdG8gY2hvb3NlXG4gICAqIGJldHdlZW4gdGhlIGNvbmNyZXRlIGFuZCBtb3JwaG8gZmxvd3MsIHNvIGl0IG11c3Qgbm90IGhhcmQtZmFpbCBvbiB0aGVcbiAgICogdmFsaWRpdHkgb2YgdW5yZWxhdGVkIHJlc3BvbnNlIGZpZWxkcyAoZS5nLiBgY29tcG9zaXRpb25bXWApIGl0IG5ldmVyXG4gICAqIGNvbnN1bWVzLiBBIGNvZGUgcGF0aCBtdXN0IG5vdCBmYWlsIG9uIHRoZSB2YWxpZGl0eSBvZiBkYXRhIGl0IGRvZXMgbm90XG4gICAqIGNvbnN1bWUuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBWYXVsdERpc3BhdGNoID0gdC50eXBlKHsgcHJvdG9jb2w6IFZhdWx0UHJvdG9jb2xUeXBlIH0pO1xuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgcmF3IHZhdWx0IGNvbmZpZyBmcm9tIGRlZmktc2VydmljZS4gU2hhcmVkIGJ5IGNhbGxlcnMgdGhhdFxuICAgKiBkZWNvZGUgdGhlIGZ1bGwgcmVzcG9uc2UgYW5kIGNhbGxlcnMgdGhhdCBkZWNvZGUgb25seSB3aGF0IHRoZXkgdXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFZhdWx0UmF3KHZhdWx0SWQ6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YXVsdElkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAuZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybChgL2FwaS9kZWZpLXNlcnZpY2UvdjEvdmF1bHRzLyR7dmF1bHRJZH1gKSlcbiAgICAgIC5zZXQoJ2VudGVycHJpc2UtaWQnLCB0aGlzLndhbGxldC50b0pTT04oKS5lbnRlcnByaXNlKVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHZhdWx0IGNvbmZpZyBmcm9tIGRlZmktc2VydmljZS4gVXNlZCBpbnRlcm5hbGx5IHRvIGRldGVybWluZVxuICAgKiB3aGljaCBkZXBvc2l0IHBhdGggdG8gdGFrZSAoQ29uY3JldGUgdnMgTW9ycGhvKS5cbiAgICovXG4gIGFzeW5jIGdldFZhdWx0Q29uZmlnKHBhcmFtczogR2V0VmF1bHRDb25maWdPcHRpb25zKTogUHJvbWlzZTxHZXRWYXVsdFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGRlY29kZVdpdGhDb2RlYyhHZXRWYXVsdFJlc3BvbnNlLCBhd2FpdCB0aGlzLmZldGNoVmF1bHRSYXcocGFyYW1zLnZhdWx0SWQpLCAnZ2V0VmF1bHRDb25maWcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBvbmx5IHRoZSB2YXVsdCBwcm90b2NvbCBmcm9tIGRlZmktc2VydmljZS4gRGVjb2RlcyB0aGUgbWluaW1hbFxuICAgKiBgVmF1bHREaXNwYXRjaGAgc2hhcGUgcmF0aGVyIHRoYW4gdGhlIGZ1bGwgYEdldFZhdWx0UmVzcG9uc2VgLCBzbyBjYWxsZXJzXG4gICAqIHRoYXQgbmVlZCBvbmx5IHRoZSBwcm90b2NvbCBhcmUgbm90IGhvc3RhZ2UgdG8gdGhlIHZhbGlkaXR5IG9mIHVucmVsYXRlZFxuICAgKiByZXNwb25zZSBmaWVsZHMgKGUuZy4gYGNvbXBvc2l0aW9uW11gKSB0aGV5IG5ldmVyIGNvbnN1bWUuXG4gICAqL1xuICBhc3luYyBnZXRWYXVsdFByb3RvY29sKHBhcmFtczogR2V0VmF1bHRDb25maWdPcHRpb25zKTogUHJvbWlzZTxWYXVsdFByb3RvY29sPiB7XG4gICAgY29uc3QgeyBwcm90b2NvbCB9ID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgRGVmaVZhdWx0LlZhdWx0RGlzcGF0Y2gsXG4gICAgICBhd2FpdCB0aGlzLmZldGNoVmF1bHRSYXcocGFyYW1zLnZhdWx0SWQpLFxuICAgICAgJ3ZhdWx0RGlzcGF0Y2gnXG4gICAgKTtcbiAgICByZXR1cm4gcHJvdG9jb2w7XG4gIH1cblxuICAvKipcbiAgICogRGVwb3NpdCBhbiBhbW91bnQgb2YgdW5kZXJseWluZyBhc3NldCBpbnRvIGEgdmF1bHQuXG4gICAqXG4gICAqIERpc3BhdGNoZXMgdG8gdGhlIGNvbmNyZXRlIG9yIG1vcnBobyBwYXRoIGJhc2VkIG9uIHZhdWx0IHByb3ZpZGVyLlxuICAgKiBUaGUgY29uY3JldGUgcGF0aCByZXR1cm5zIGEgcGVuZGluZ0FwcHJvdmFsIChjdXN0b2RpYWwgd2FsbGV0KS5cbiAgICogVGhlIG1vcnBobyBwYXRoIGlzc3VlcyB0d28gc2VuZE1hbnkgY2FsbHMgKGFwcHJvdmUgKyBkZXBvc2l0KS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy52YXVsdElkIC0gRGVGaS1zZXJ2aWNlIHZhdWx0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHBhcmFtcy5hbW91bnQgLSBhbW91bnQgaW4gYmFzZSB1bml0cyBvZiB0aGUgdW5kZXJseWluZyBhc3NldFxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSByZXF1aXJlZCBmb3IgaG90IHdhbGxldHMsIG9taXQgZm9yIGN1c3RvZHlcbiAgICovXG4gIGFzeW5jIGRlcG9zaXRUb1ZhdWx0KHBhcmFtczogRGVwb3NpdFRvVmF1bHRPcHRpb25zKTogUHJvbWlzZTxEZXBvc2l0UmVzdWx0PiB7XG4gICAgaWYgKCFwYXJhbXMudmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YXVsdElkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghcGFyYW1zLmFtb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhbW91bnQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IGF3YWl0IHRoaXMuZ2V0VmF1bHRQcm90b2NvbCh7IHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkIH0pO1xuXG4gICAgaWYgKHByb3RvY29sID09PSBWYXVsdFByb3RvY29sLkNPTkNSRVRFX0JUQ0NYKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXBvc2l0VG9Db25jcmV0ZVZhdWx0KHBhcmFtcyk7XG4gICAgfSBlbHNlIGlmIChwcm90b2NvbCA9PT0gVmF1bHRQcm90b2NvbC5NT1JQSE8pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlcG9zaXRUb01vcnBob1ZhdWx0KHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdmF1bHQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbmNyZXRlIEJUQyB2YXVsdCBkZXBvc2l0IHBhdGguIFRoZSBjbGllbnQgQlRDIHdhbGxldCBpcyBjdXN0b2RpYWwsIHNvXG4gICAqIHNlbmRNYW55IHJldHVybnMgYSBwZW5kaW5nQXBwcm92YWwgcmF0aGVyIHRoYW4gYSBzaWduZWQgdHJhbnNmZXIuXG4gICAqIE5vIHJlY2lwaWVudHMgYXJlIHNlbnQg4oCUIFdQIHJlc29sdmVzIHRoZSBlc2Nyb3cgZGVzdGluYXRpb24gc2VydmVyLXNpZGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRlcG9zaXRUb0NvbmNyZXRlVmF1bHQocGFyYW1zOiBEZXBvc2l0VG9WYXVsdE9wdGlvbnMpOiBQcm9taXNlPENvbmNyZXRlRGVwb3NpdFJlc3VsdD4ge1xuICAgIGNvbnN0IHNlbmRNYW55UmVzdWx0ID0gYXdhaXQgdGhpcy53YWxsZXQuc2VuZE1hbnkoe1xuICAgICAgdHlwZTogJ2RlZmktZGVwb3NpdCcsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IHBhcmFtcy5hbW91bnQsXG4gICAgICAgIGFjdGlvblR5cGU6ICdkZWZpLWRlcG9zaXQnLFxuICAgICAgfSxcbiAgICAgIC4uLihwYXJhbXMud2FsbGV0UGFzc3BocmFzZSA/IHsgd2FsbGV0UGFzc3BocmFzZTogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgfSA6IHt9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmV4dHJhY3RDb25jcmV0ZURlcG9zaXRSZXN1bHQoc2VuZE1hbnlSZXN1bHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vcnBobyB2YXVsdCBkZXBvc2l0IHBhdGguIElzc3VlcyB0d28gc2VuZE1hbnkgY2FsbHMgKGFwcHJvdmUgKyBkZXBvc2l0KVxuICAgKiBhbmQgcmV0dXJucyB0aGUgb3BlcmF0aW9uSWQgdGhhdCBsaW5rcyB0aGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZXBvc2l0VG9Nb3JwaG9WYXVsdChwYXJhbXM6IERlcG9zaXRUb1ZhdWx0T3B0aW9ucyk6IFByb21pc2U8TW9ycGhvRGVwb3NpdFJlc3VsdD4ge1xuICAgIC8vIFRPRE8oQ0dELTE3MDkpOiBSZS1lbmFibGUgYWN0aXZlIG9wZXJhdGlvbiBwcmUtZmxpZ2h0IGNoZWNrIG9uY2UgdGhlXG4gICAgLy8gZGVmaS1zZXJ2aWNlIG9wZXJhdGlvbnMgZW5kcG9pbnQgaXMgZGVwbG95ZWQgYW5kIHJldHVybmluZyBhY3RpdmUgc3RhdGUuXG4gICAgLy8gY29uc3QgYWN0aXZlT3BzOiBEZWZpT3BlcmF0aW9uTGlzdFJlc3VsdCA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAvLyAgIC5nZXQodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKHRoaXMub3BlcmF0aW9uc1VybCgpKSlcbiAgICAvLyAgIC5xdWVyeSh7IHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLCBzdGF0ZTogJ2FjdGl2ZScgfSlcbiAgICAvLyAgIC5yZXN1bHQoKTtcbiAgICAvL1xuICAgIC8vIGlmIChhY3RpdmVPcHMuaXRlbXMgJiYgYWN0aXZlT3BzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgIHRocm93IG5ldyBBY3RpdmVPcGVyYXRpb25FeGlzdHNFcnJvcihhY3RpdmVPcHMuaXRlbXNbMF0ub3BlcmF0aW9uSWQpO1xuICAgIC8vIH1cblxuICAgIC8vIFN0ZXAgMTogQXBwcm92ZSB0eFJlcXVlc3QgdmlhIHNlbmRNYW55XG4gICAgY29uc3QgYXBwcm92ZVJlc3VsdCA9IGF3YWl0IHRoaXMud2FsbGV0LnNlbmRNYW55KHtcbiAgICAgIHR5cGU6ICdkZWZpQXBwcm92ZScsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IHBhcmFtcy5hbW91bnQsXG4gICAgICB9LFxuICAgICAgLi4uKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8geyB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9IDoge30pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXBwcm92ZVR4UmVxdWVzdElkID0gdGhpcy5leHRyYWN0VHhSZXF1ZXN0SWQoYXBwcm92ZVJlc3VsdCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSB0aGlzLmV4dHJhY3RPcGVyYXRpb25JZChhcHByb3ZlUmVzdWx0KTtcblxuICAgIGlmICghb3BlcmF0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3BlcmF0aW9uSWQgbm90IGZvdW5kIGluIGFwcHJvdmUgdHhSZXF1ZXN0IHJlc3BvbnNlJyk7XG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBEZXBvc2l0IHR4UmVxdWVzdCB2aWEgc2VuZE1hbnlcbiAgICBjb25zdCBkZXBvc2l0UmVzdWx0ID0gYXdhaXQgdGhpcy53YWxsZXQuc2VuZE1hbnkoe1xuICAgICAgdHlwZTogJ2RlZmlEZXBvc2l0JyxcbiAgICAgIGRlZmlQYXJhbXM6IHtcbiAgICAgICAgdmF1bHRJZDogcGFyYW1zLnZhdWx0SWQsXG4gICAgICAgIGFtb3VudDogcGFyYW1zLmFtb3VudCxcbiAgICAgICAgb3BlcmF0aW9uSWQsXG4gICAgICB9LFxuICAgICAgLi4uKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8geyB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9IDoge30pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRlcG9zaXRUeFJlcXVlc3RJZCA9IHRoaXMuZXh0cmFjdFR4UmVxdWVzdElkKGRlcG9zaXRSZXN1bHQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdGlvbklkLFxuICAgICAgdHhSZXF1ZXN0SWRzOiB7XG4gICAgICAgIGFwcHJvdmU6IGFwcHJvdmVUeFJlcXVlc3RJZCxcbiAgICAgICAgZGVwb3NpdDogZGVwb3NpdFR4UmVxdWVzdElkLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBhIHBhcnRpYWxseS1jb21wbGV0ZWQgZGVwb3NpdC4gQ2FsbCB0aGlzIHdoZW4gdGhlIFNESyBwcm9jZXNzIGRpZWRcbiAgICogYmV0d2VlbiB0aGUgYXBwcm92ZSBhbmQgZGVwb3NpdCB0eFJlcXVlc3QgY3JlYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMub3BlcmF0aW9uSWQgLSB0aGUgb3BlcmF0aW9uSWQgZnJvbSB0aGUgb3JpZ2luYWwgZGVwb3NpdFRvVmF1bHQgY2FsbFxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSByZXF1aXJlZCBmb3IgaG90IHdhbGxldHMsIG9taXQgZm9yIGN1c3RvZHlcbiAgICovXG4gIGFzeW5jIHJlc3VtZURlcG9zaXQocGFyYW1zOiBSZXN1bWVEZXBvc2l0T3B0aW9ucyk6IFByb21pc2U8RGVwb3NpdFJlc3VsdD4ge1xuICAgIGlmICghcGFyYW1zLm9wZXJhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZXJhdGlvbklkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggdGhlIG9wZXJhdGlvbiB0byBnZXQgdGhlIHZhdWx0IGFuZCBhbW91bnQgZGV0YWlsc1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGF3YWl0IHRoaXMuZ2V0T3BlcmF0aW9uKHsgb3BlcmF0aW9uSWQ6IHBhcmFtcy5vcGVyYXRpb25JZCB9KTtcblxuICAgIGlmIChvcGVyYXRpb24uYXNzb2NpYXRlZFR4UmVxdWVzdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcG9zaXQgdHhSZXF1ZXN0IGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIG9wZXJhdGlvbjsgbm90aGluZyB0byByZXN1bWUnKTtcbiAgICB9XG5cbiAgICBpZiAoIW9wZXJhdGlvbi50eFJlcXVlc3RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcHByb3ZlIHR4UmVxdWVzdCBub3QgZm91bmQgZm9yIHRoaXMgb3BlcmF0aW9uOyBjYW5ub3QgcmVzdW1lJyk7XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgdGhlIGRlcG9zaXQgdHhSZXF1ZXN0IHVzaW5nIHRoZSBleGlzdGluZyBvcGVyYXRpb24ncyBkZXRhaWxzXG4gICAgY29uc3QgZGVwb3NpdFJlc3VsdCA9IGF3YWl0IHRoaXMud2FsbGV0LnNlbmRNYW55KHtcbiAgICAgIHR5cGU6ICdkZWZpRGVwb3NpdCcsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IG9wZXJhdGlvbi52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IG9wZXJhdGlvbi5hc3NldEFtb3VudCxcbiAgICAgICAgb3BlcmF0aW9uSWQ6IHBhcmFtcy5vcGVyYXRpb25JZCxcbiAgICAgIH0sXG4gICAgICAuLi4ocGFyYW1zLndhbGxldFBhc3NwaHJhc2UgPyB7IHdhbGxldFBhc3NwaHJhc2U6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIH0gOiB7fSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0aW9uSWQ6IHBhcmFtcy5vcGVyYXRpb25JZCxcbiAgICAgIHR4UmVxdWVzdElkczoge1xuICAgICAgICBhcHByb3ZlOiBvcGVyYXRpb24udHhSZXF1ZXN0SWQsXG4gICAgICAgIGRlcG9zaXQ6IHRoaXMuZXh0cmFjdFR4UmVxdWVzdElkKGRlcG9zaXRSZXN1bHQpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIERlRmkgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zLm9wZXJhdGlvbklkIC0gdGhlIG9wZXJhdGlvbiB0byByZXRyaWV2ZVxuICAgKi9cbiAgYXN5bmMgZ2V0T3BlcmF0aW9uKHBhcmFtczogR2V0T3BlcmF0aW9uT3B0aW9ucyk6IFByb21pc2U8RGVmaU9wZXJhdGlvbj4ge1xuICAgIGlmICghcGFyYW1zLm9wZXJhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZXJhdGlvbklkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLm9wZXJhdGlvbnNVcmwoKSArICcvJyArIHBhcmFtcy5vcGVyYXRpb25JZCkpLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgb3BlcmF0aW9ucyBmb3IgYSB2YXVsdCBmaWx0ZXJlZCBieSB3YWxsZXRJZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy52YXVsdElkIC0gdmF1bHQgdG8gbGlzdCBvcGVyYXRpb25zIGZvclxuICAgKiBAcGFyYW0gcGFyYW1zLnN0YXRlIC0gb3B0aW9uYWwgc3RhdGUgZmlsdGVyXG4gICAqIEBwYXJhbSBwYXJhbXMudHlwZSAtIG9wdGlvbmFsIHR5cGUgZmlsdGVyIChERVBPU0lUIHwgV0lUSERSQVcpXG4gICAqIEBwYXJhbSBwYXJhbXMubGltaXQgLSBwYWdlIHNpemVcbiAgICogQHBhcmFtIHBhcmFtcy5jdXJzb3IgLSBwYWdpbmF0aW9uIGN1cnNvclxuICAgKi9cbiAgYXN5bmMgbGlzdE9wZXJhdGlvbnMocGFyYW1zOiBMaXN0T3BlcmF0aW9uc09wdGlvbnMpOiBQcm9taXNlPERlZmlPcGVyYXRpb25MaXN0UmVzdWx0PiB7XG4gICAgaWYgKCFwYXJhbXMudmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YXVsdElkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gPSB7XG4gICAgICB2YXVsdElkOiBwYXJhbXMudmF1bHRJZCxcbiAgICB9O1xuICAgIGlmIChwYXJhbXMuc3RhdGUpIHF1ZXJ5LnN0YXRlID0gcGFyYW1zLnN0YXRlO1xuICAgIGlmIChwYXJhbXMudHlwZSkgcXVlcnkudHlwZSA9IHBhcmFtcy50eXBlO1xuICAgIGlmIChwYXJhbXMubGltaXQpIHF1ZXJ5LmxpbWl0ID0gcGFyYW1zLmxpbWl0O1xuICAgIGlmIChwYXJhbXMuY3Vyc29yKSBxdWVyeS5jdXJzb3IgPSBwYXJhbXMuY3Vyc29yO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLm9wZXJhdGlvbnNVcmwoKSkpLnF1ZXJ5KHF1ZXJ5KS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyB2YXVsdCBzaGFyZXMgZnJvbSBhIERlRmkgdmF1bHQuXG4gICAqXG4gICAqIElzc3VlcyBhIHNpbmdsZSBzZW5kTWFueSBjYWxsIChkZWZpV2l0aGRyYXcpIGFuZCByZXR1cm5zIHRoZSBvcGVyYXRpb25JZFxuICAgKiBhbmQgdHhSZXF1ZXN0SWQuIFRoZSBzdGF0ZSBtYWNoaW5lIGZvciB3aXRoZHJhd2FsIGlzIHNpbXBsZXIgdGhhbiBkZXBvc2l0OlxuICAgKiBDUkVBVEVEIOKGkiBXSVRIRFJBV19UWF9SRVFVRVNURUQg4oaSIFdJVEhEUkFXX1NJR05FRCDihpIgV0lUSERSQVdfQ09ORklSTUVEIOKGkiBDT01QTEVURURcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy52YXVsdElkIC0gRGVGaS1zZXJ2aWNlIHZhdWx0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHBhcmFtcy5hbW91bnQgLSBhbW91bnQgaW4gYmFzZSB1bml0cyBvZiB0aGUgdmF1bHQgc2hhcmUgdG9rZW5cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIC0gcmVxdWlyZWQgZm9yIGhvdCB3YWxsZXRzLCBvbWl0IGZvciBjdXN0b2R5XG4gICAqL1xuICBhc3luYyB3aXRoZHJhd0Zyb21WYXVsdChwYXJhbXM6IFdpdGhkcmF3RnJvbVZhdWx0T3B0aW9ucyk6IFByb21pc2U8V2l0aGRyYXdSZXN1bHQ+IHtcbiAgICBpZiAoIXBhcmFtcy52YXVsdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhdWx0SWQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCFwYXJhbXMuYW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Ftb3VudCBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHdpdGhkcmF3UmVzdWx0ID0gYXdhaXQgdGhpcy53YWxsZXQuc2VuZE1hbnkoe1xuICAgICAgdHlwZTogJ2RlZmlXaXRoZHJhdycsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IHBhcmFtcy5hbW91bnQsXG4gICAgICB9LFxuICAgICAgLi4uKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8geyB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9IDoge30pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0SWQgPSB0aGlzLmV4dHJhY3RUeFJlcXVlc3RJZCh3aXRoZHJhd1Jlc3VsdCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSB0aGlzLmV4dHJhY3RPcGVyYXRpb25JZCh3aXRoZHJhd1Jlc3VsdCk7XG5cbiAgICBpZiAoIW9wZXJhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZXJhdGlvbklkIG5vdCBmb3VuZCBpbiB3aXRoZHJhdyB0eFJlcXVlc3QgcmVzcG9uc2UnKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBvcGVyYXRpb25JZCwgdHhSZXF1ZXN0SWQgfTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbnRlcm5hbCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHR4UmVxdWVzdElkIGZyb20gYSBzZW5kTWFueSByZXN1bHQuXG4gICAqIHNlbmRNYW55IHJldHVybnMgZGlmZmVyZW50IHNoYXBlcyBkZXBlbmRpbmcgb24gd2FsbGV0IHR5cGU6XG4gICAqIC0gVFNTIGZ1bGw6IHsgdHhSZXF1ZXN0OiB7IHR4UmVxdWVzdElkIH0gfSBvciB7IHBlbmRpbmdBcHByb3ZhbCwgdHhSZXF1ZXN0IH1cbiAgICogLSBUU1MgbGl0ZTogcmVzdWx0IGZyb20gdHNzVXRpbHMuc2VuZFR4UmVxdWVzdFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0VHhSZXF1ZXN0SWQoc2VuZE1hbnlSZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eFJlcXVlc3QgPSBzZW5kTWFueVJlc3VsdC50eFJlcXVlc3QgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHR4UmVxdWVzdD8udHhSZXF1ZXN0SWQpIHtcbiAgICAgIHJldHVybiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQgYXMgc3RyaW5nO1xuICAgIH1cbiAgICBpZiAoc2VuZE1hbnlSZXN1bHQudHhSZXF1ZXN0SWQpIHtcbiAgICAgIHJldHVybiBzZW5kTWFueVJlc3VsdC50eFJlcXVlc3RJZCBhcyBzdHJpbmc7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcigndHhSZXF1ZXN0SWQgbm90IGZvdW5kIGluIHNlbmRNYW55IHJlc3BvbnNlJyk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBvcGVyYXRpb25JZCBmcm9tIGEgc2VuZE1hbnkgcmVzdWx0LlxuICAgKlxuICAgKiBUaGUgV1Agd3JpdGVzIHRoZSBkZWZpLXNlcnZpY2UtbWludGVkIG9wZXJhdGlvbklkIGludG8gdGhlIGJ1aWx0XG4gICAqIHRyYW5zYWN0aW9uJ3MgYGNvaW5TcGVjaWZpY2AgKGFsb25nc2lkZSBgYXNzaWduZWROb25jZWApLCBub3QgaW50byB0aGVcbiAgICogaW50ZW50LiBSZWFkIGl0IGZyb20gdGhlcmU6IHRoZSBgZnVsbGAgYXBpVmVyc2lvbiBzdXJmYWNlcyBpdCBhdFxuICAgKiBgdHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pblNwZWNpZmljLm9wZXJhdGlvbklkYCwgdGhlIGBsaXRlYCB2ZXJzaW9uXG4gICAqIGF0IGB1bnNpZ25lZFR4c1swXS5jb2luU3BlY2lmaWMub3BlcmF0aW9uSWRgLiBGYWxsIGJhY2sgdG9cbiAgICogYGludGVudC5vcGVyYXRpb25JZGAgZm9yIGZvcndhcmQtY29tcGF0IGluIGNhc2UgdGhlIFdQIGxhdGVyIGFsc29cbiAgICogcG9wdWxhdGVzIHRoZSBpbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RPcGVyYXRpb25JZChzZW5kTWFueVJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHR4UmVxdWVzdCA9IHNlbmRNYW55UmVzdWx0LnR4UmVxdWVzdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXR4UmVxdWVzdCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBmdWxsIGFwaVZlcnNpb246IHRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LmNvaW5TcGVjaWZpYy5vcGVyYXRpb25JZFxuICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IHR4UmVxdWVzdC50cmFuc2FjdGlvbnMgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGZ1bGxVbnNpZ25lZFR4ID0gdHJhbnNhY3Rpb25zPy5bMF0/LnVuc2lnbmVkVHggYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZnVsbENvaW5TcGVjaWZpYyA9IGZ1bGxVbnNpZ25lZFR4Py5jb2luU3BlY2lmaWMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKGZ1bGxDb2luU3BlY2lmaWM/Lm9wZXJhdGlvbklkKSB7XG4gICAgICByZXR1cm4gZnVsbENvaW5TcGVjaWZpYy5vcGVyYXRpb25JZCBhcyBzdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gbGl0ZSBhcGlWZXJzaW9uOiB1bnNpZ25lZFR4c1swXS5jb2luU3BlY2lmaWMub3BlcmF0aW9uSWRcbiAgICBjb25zdCB1bnNpZ25lZFR4cyA9IHR4UmVxdWVzdC51bnNpZ25lZFR4cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGl0ZUNvaW5TcGVjaWZpYyA9IHVuc2lnbmVkVHhzPy5bMF0/LmNvaW5TcGVjaWZpYyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAobGl0ZUNvaW5TcGVjaWZpYz8ub3BlcmF0aW9uSWQpIHtcbiAgICAgIHJldHVybiBsaXRlQ29pblNwZWNpZmljLm9wZXJhdGlvbklkIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICAvLyBmb3J3YXJkLWNvbXBhdDogaW50ZW50Lm9wZXJhdGlvbklkIChpbiBjYXNlIHRoZSBXUCBsYXRlciBwb3B1bGF0ZXMgdGhlIGludGVudClcbiAgICBjb25zdCBpbnRlbnQgPSB0eFJlcXVlc3QuaW50ZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBpbnRlbnQ/Lm9wZXJhdGlvbklkIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyB7QGxpbmsgQ29uY3JldGVEZXBvc2l0UmVzdWx0fSBmcm9tIGEgY3VzdG9kaWFsIHNlbmRNYW55IHJlc3BvbnNlLlxuICAgKiBDb25jcmV0ZSBCVEMgZGVwb3NpdHMgcmV0dXJuIGEgYHBlbmRpbmdBcHByb3ZhbGAgaW5zdGVhZCBvZiBhIHR4UmVxdWVzdCDigJRcbiAgICogdGhyb3dzIGlmIGBwZW5kaW5nQXBwcm92YWwuaWRgIGlzIGFic2VudCwgaW5kaWNhdGluZyBhbiB1bmV4cGVjdGVkIHNoYXBlLlxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0Q29uY3JldGVEZXBvc2l0UmVzdWx0KHNlbmRNYW55UmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IENvbmNyZXRlRGVwb3NpdFJlc3VsdCB7XG4gICAgY29uc3QgU2VuZE1hbnlDb25jcmV0ZVJlc3BvbnNlID0gdC50eXBlKHtcbiAgICAgIHBlbmRpbmdBcHByb3ZhbDogdC5pbnRlcnNlY3Rpb24oW3QudHlwZSh7IGlkOiB0LnN0cmluZyB9KSwgdC5wYXJ0aWFsKHsgc3RhdGU6IHQuc3RyaW5nIH0pXSksXG4gICAgfSk7XG4gICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVdpdGhDb2RlYyhTZW5kTWFueUNvbmNyZXRlUmVzcG9uc2UsIHNlbmRNYW55UmVzdWx0LCAnZGVmaS1kZXBvc2l0IHNlbmRNYW55IHJlc3BvbnNlJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiBkZWNvZGVkLnBlbmRpbmdBcHByb3ZhbC5pZCxcbiAgICAgIHN0YXRlOiBkZWNvZGVkLnBlbmRpbmdBcHByb3ZhbC5zdGF0ZSA/PyAnYXdhaXRpbmdTaWduYXR1cmUnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG9wZXJhdGlvbnNVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYC9hcGkvZGVmaS1zZXJ2aWNlL3YxL3dhbGxldHMvJHt0aGlzLndhbGxldC5pZCgpfS9vcGVyYXRpb25zYDtcbiAgfVxufVxuIl19
|
|
445
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaVZhdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2RlZmkvZGVmaVZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gseUNBQTJCO0FBQzNCLGlEQUFrRDtBQUNsRCxzREFBeUY7QUFvQnpGLG9DQUEyQztBQUUzQzs7R0FFRztBQUNILE1BQWEsMEJBQTJCLFNBQVEsS0FBSztJQUduRCxZQUFZLFdBQW1CO1FBQzdCLEtBQUssQ0FBQywrQ0FBK0MsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQVJELGdFQVFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsU0FBUztJQUlwQixZQUFZLE1BQWU7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFXRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQWU7UUFDekMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUs7YUFDcEIsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsK0JBQStCLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDMUUsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQzthQUNyRCxNQUFNLEVBQUUsQ0FBQztJQUNkLENB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RSxRQUFRLEVBQUUsZ0NBQWlCLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5pbXBvcnQgeyBDb2luRmVhdHVyZSB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgR2V0VmF1bHRSZXNwb25zZSwgVmF1bHRQcm90b2NvbCwgVmF1bHRQcm90b2NvbFR5cGUgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7XG4gIENvbmNyZXRlRGVwb3NpdFJlc3VsdCxcbiAgTW9ycGhvRGVwb3NpdFJlc3VsdCxcbiAgRGVmaU9wZXJhdGlvbixcbiAgRGVmaU9wZXJhdGlvbkxpc3RSZXN1bHQsXG4gIERlcG9zaXRSZXN1bHQsXG4gIERlcG9zaXRUb1ZhdWx0T3B0aW9ucyxcbiAgR2V0T3BlcmF0aW9uT3B0aW9ucyxcbiAgR2V0VmF1bHRDb25maWdPcHRpb25zLFxuICBJRGVmaVZhdWx0LFxuICBMaXN0T3BlcmF0aW9uc09wdGlvbnMsXG4gIFJlc3VtZURlcG9zaXRPcHRpb25zLFxuICBXaXRoZHJhd0Zyb21WYXVsdE9wdGlvbnMsXG4gIFdpdGhkcmF3UmVzdWx0LFxuICBXcmFwT3B0aW9ucyxcbiAgV3JhcFJlc3VsdCxcbn0gZnJvbSAnLi9pRGVmaVZhdWx0JztcbmltcG9ydCB7IElXYWxsZXQgfSBmcm9tICcuLi93YWxsZXQnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IGRlY29kZVdpdGhDb2RlYyB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiBhIGNvbmN1cnJlbnQgYWN0aXZlIGRlcG9zaXQgYWxyZWFkeSBleGlzdHMgZm9yIHRoZSAod2FsbGV0LCB2YXVsdCkgcGFpci5cbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGl2ZU9wZXJhdGlvbkV4aXN0c0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgb3BlcmF0aW9uSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcGVyYXRpb25JZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoYEFuIGFjdGl2ZSBkZXBvc2l0IG9wZXJhdGlvbiBhbHJlYWR5IGV4aXN0czogJHtvcGVyYXRpb25JZH1gKTtcbiAgICB0aGlzLm5hbWUgPSAnQWN0aXZlT3BlcmF0aW9uRXhpc3RzRXJyb3InO1xuICAgIHRoaXMub3BlcmF0aW9uSWQgPSBvcGVyYXRpb25JZDtcbiAgfVxufVxuXG4vKipcbiAqIE9yY2hlc3RyYXRlcyBFUkMtNDYyNiB2YXVsdCBkZXBvc2l0IGFuZCB3aXRoZHJhdyBmbG93cyBmb3IgYSB3YWxsZXQuXG4gKlxuICogRXhwb3NlZCBhcyBgd2FsbGV0LmRlZmlgIG9uIHRoZSBXYWxsZXQgY2xhc3MuIFNlZSBUREQgwqc2LjMuMSBmb3IgdGhlIGZ1bGxcbiAqIGRlc2lnbjogdGhlIFNESyBzZXF1ZW5jZXMgdHdvIHNlbmRNYW55IGNhbGxzIChhcHByb3ZlICsgZGVwb3NpdCkgYW5kXG4gKiByZXR1cm5zIGFuIG9wZXJhdGlvbklkIHRoYXQgdGhlIFVJIHVzZXMgZm9yIHN0YXR1cyB0cmFja2luZyBhbmQgcmVjb3ZlcnkuXG4gKlxuICogVXNlcyB3YWxsZXQuc2VuZE1hbnkoKSB1bmRlciB0aGUgaG9vZCBzbyB0aGF0IGJvdGggY3VzdG9keSB3YWxsZXRzXG4gKiAodHhSZXF1ZXN0IGNyZWF0aW9uIG9ubHkpIGFuZCBob3Qgd2FsbGV0cyAoY3JlYXRlICsgc2lnbiArIGJyb2FkY2FzdClcbiAqIGFyZSBoYW5kbGVkIGJ5IHRoZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERlZmlWYXVsdCBpbXBsZW1lbnRzIElEZWZpVmF1bHQge1xuICBwcml2YXRlIHJlYWRvbmx5IHdhbGxldDogSVdhbGxldDtcbiAgcHJpdmF0ZSByZWFkb25seSBiaXRnbzogQml0R29CYXNlO1xuXG4gIGNvbnN0cnVjdG9yKHdhbGxldDogSVdhbGxldCkge1xuICAgIHRoaXMud2FsbGV0ID0gd2FsbGV0O1xuICAgIHRoaXMuYml0Z28gPSB3YWxsZXQuYml0Z287XG4gIH1cblxuICAvKipcbiAgICogTWluaW1hbCBkaXNwYXRjaCBjb2RlYy4gVGhlIGRlcG9zaXQgcGF0aCByZWFkcyBvbmx5IGBwcm90b2NvbGAgdG8gY2hvb3NlXG4gICAqIGJldHdlZW4gdGhlIGNvbmNyZXRlIGFuZCBtb3JwaG8gZmxvd3MsIHNvIGl0IG11c3Qgbm90IGhhcmQtZmFpbCBvbiB0aGVcbiAgICogdmFsaWRpdHkgb2YgdW5yZWxhdGVkIHJlc3BvbnNlIGZpZWxkcyAoZS5nLiBgY29tcG9zaXRpb25bXWApIGl0IG5ldmVyXG4gICAqIGNvbnN1bWVzLiBBIGNvZGUgcGF0aCBtdXN0IG5vdCBmYWlsIG9uIHRoZSB2YWxpZGl0eSBvZiBkYXRhIGl0IGRvZXMgbm90XG4gICAqIGNvbnN1bWUuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBWYXVsdERpc3BhdGNoID0gdC50eXBlKHsgcHJvdG9jb2w6IFZhdWx0UHJvdG9jb2xUeXBlIH0pO1xuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgcmF3IHZhdWx0IGNvbmZpZyBmcm9tIGRlZmktc2VydmljZS4gU2hhcmVkIGJ5IGNhbGxlcnMgdGhhdFxuICAgKiBkZWNvZGUgdGhlIGZ1bGwgcmVzcG9uc2UgYW5kIGNhbGxlcnMgdGhhdCBkZWNvZGUgb25seSB3aGF0IHRoZXkgdXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFZhdWx0UmF3KHZhdWx0SWQ6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YXVsdElkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAuZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybChgL2FwaS9kZWZpLXNlcnZpY2UvdjEvdmF1bHRzLyR7dmF1bHRJZH1gKSlcbiAgICAgIC5zZXQoJ2VudGVycHJpc2UtaWQnLCB0aGlzLndhbGxldC50b0pTT04oKS5lbnRlcnByaXNlKVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHZhdWx0IGNvbmZpZyBmcm9tIGRlZmktc2VydmljZS4gVXNlZCBpbnRlcm5hbGx5IHRvIGRldGVybWluZVxuICAgKiB3aGljaCBkZXBvc2l0IHBhdGggdG8gdGFrZSAoQ29uY3JldGUgdnMgTW9ycGhvKS5cbiAgICovXG4gIGFzeW5jIGdldFZhdWx0Q29uZmlnKHBhcmFtczogR2V0VmF1bHRDb25maWdPcHRpb25zKTogUHJvbWlzZTxHZXRWYXVsdFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGRlY29kZVdpdGhDb2RlYyhHZXRWYXVsdFJlc3BvbnNlLCBhd2FpdCB0aGlzLmZldGNoVmF1bHRSYXcocGFyYW1zLnZhdWx0SWQpLCAnZ2V0VmF1bHRDb25maWcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBvbmx5IHRoZSB2YXVsdCBwcm90b2NvbCBmcm9tIGRlZmktc2VydmljZS4gRGVjb2RlcyB0aGUgbWluaW1hbFxuICAgKiBgVmF1bHREaXNwYXRjaGAgc2hhcGUgcmF0aGVyIHRoYW4gdGhlIGZ1bGwgYEdldFZhdWx0UmVzcG9uc2VgLCBzbyBjYWxsZXJzXG4gICAqIHRoYXQgbmVlZCBvbmx5IHRoZSBwcm90b2NvbCBhcmUgbm90IGhvc3RhZ2UgdG8gdGhlIHZhbGlkaXR5IG9mIHVucmVsYXRlZFxuICAgKiByZXNwb25zZSBmaWVsZHMgKGUuZy4gYGNvbXBvc2l0aW9uW11gKSB0aGV5IG5ldmVyIGNvbnN1bWUuXG4gICAqL1xuICBhc3luYyBnZXRWYXVsdFByb3RvY29sKHBhcmFtczogR2V0VmF1bHRDb25maWdPcHRpb25zKTogUHJvbWlzZTxWYXVsdFByb3RvY29sPiB7XG4gICAgY29uc3QgeyBwcm90b2NvbCB9ID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgRGVmaVZhdWx0LlZhdWx0RGlzcGF0Y2gsXG4gICAgICBhd2FpdCB0aGlzLmZldGNoVmF1bHRSYXcocGFyYW1zLnZhdWx0SWQpLFxuICAgICAgJ3ZhdWx0RGlzcGF0Y2gnXG4gICAgKTtcbiAgICByZXR1cm4gcHJvdG9jb2w7XG4gIH1cblxuICAvKipcbiAgICogRGVwb3NpdCBhbiBhbW91bnQgb2YgdW5kZXJseWluZyBhc3NldCBpbnRvIGEgdmF1bHQuXG4gICAqXG4gICAqIERpc3BhdGNoZXMgdG8gdGhlIGNvbmNyZXRlIG9yIG1vcnBobyBwYXRoIGJhc2VkIG9uIHZhdWx0IHByb3ZpZGVyLlxuICAgKiBUaGUgY29uY3JldGUgcGF0aCByZXR1cm5zIGEgcGVuZGluZ0FwcHJvdmFsIChjdXN0b2RpYWwgd2FsbGV0KS5cbiAgICogVGhlIG1vcnBobyBwYXRoIGlzc3VlcyB0d28gc2VuZE1hbnkgY2FsbHMgKGFwcHJvdmUgKyBkZXBvc2l0KS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy52YXVsdElkIC0gRGVGaS1zZXJ2aWNlIHZhdWx0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHBhcmFtcy5hbW91bnQgLSBhbW91bnQgaW4gYmFzZSB1bml0cyBvZiB0aGUgdW5kZXJseWluZyBhc3NldFxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSByZXF1aXJlZCBmb3IgaG90IHdhbGxldHMsIG9taXQgZm9yIGN1c3RvZHlcbiAgICovXG4gIGFzeW5jIGRlcG9zaXRUb1ZhdWx0KHBhcmFtczogRGVwb3NpdFRvVmF1bHRPcHRpb25zKTogUHJvbWlzZTxEZXBvc2l0UmVzdWx0PiB7XG4gICAgaWYgKCFwYXJhbXMudmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YXVsdElkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghcGFyYW1zLmFtb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhbW91bnQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IGF3YWl0IHRoaXMuZ2V0VmF1bHRQcm90b2NvbCh7IHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkIH0pO1xuXG4gICAgaWYgKHByb3RvY29sID09PSBWYXVsdFByb3RvY29sLkNPTkNSRVRFX0JUQ0NYKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXBvc2l0VG9Db25jcmV0ZVZhdWx0KHBhcmFtcyk7XG4gICAgfSBlbHNlIGlmIChwcm90b2NvbCA9PT0gVmF1bHRQcm90b2NvbC5NT1JQSE8pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlcG9zaXRUb01vcnBob1ZhdWx0KHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdmF1bHQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbmNyZXRlIEJUQyB2YXVsdCBkZXBvc2l0IHBhdGguIFRoZSBjbGllbnQgQlRDIHdhbGxldCBpcyBjdXN0b2RpYWwsIHNvXG4gICAqIHNlbmRNYW55IHJldHVybnMgYSBwZW5kaW5nQXBwcm92YWwgcmF0aGVyIHRoYW4gYSBzaWduZWQgdHJhbnNmZXIuXG4gICAqIE5vIHJlY2lwaWVudHMgYXJlIHNlbnQg4oCUIFdQIHJlc29sdmVzIHRoZSBlc2Nyb3cgZGVzdGluYXRpb24gc2VydmVyLXNpZGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRlcG9zaXRUb0NvbmNyZXRlVmF1bHQocGFyYW1zOiBEZXBvc2l0VG9WYXVsdE9wdGlvbnMpOiBQcm9taXNlPENvbmNyZXRlRGVwb3NpdFJlc3VsdD4ge1xuICAgIGNvbnN0IHNlbmRNYW55UmVzdWx0ID0gYXdhaXQgdGhpcy53YWxsZXQuc2VuZE1hbnkoe1xuICAgICAgdHlwZTogJ2RlZmktZGVwb3NpdCcsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IHBhcmFtcy5hbW91bnQsXG4gICAgICAgIGFjdGlvblR5cGU6ICdkZWZpLWRlcG9zaXQnLFxuICAgICAgfSxcbiAgICAgIC4uLihwYXJhbXMud2FsbGV0UGFzc3BocmFzZSA/IHsgd2FsbGV0UGFzc3BocmFzZTogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgfSA6IHt9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmV4dHJhY3RDb25jcmV0ZURlcG9zaXRSZXN1bHQoc2VuZE1hbnlSZXN1bHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vcnBobyB2YXVsdCBkZXBvc2l0IHBhdGguIElzc3VlcyB0d28gc2VuZE1hbnkgY2FsbHMgKGFwcHJvdmUgKyBkZXBvc2l0KVxuICAgKiBhbmQgcmV0dXJucyB0aGUgb3BlcmF0aW9uSWQgdGhhdCBsaW5rcyB0aGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZXBvc2l0VG9Nb3JwaG9WYXVsdChwYXJhbXM6IERlcG9zaXRUb1ZhdWx0T3B0aW9ucyk6IFByb21pc2U8TW9ycGhvRGVwb3NpdFJlc3VsdD4ge1xuICAgIC8vIFRPRE8oQ0dELTE3MDkpOiBSZS1lbmFibGUgYWN0aXZlIG9wZXJhdGlvbiBwcmUtZmxpZ2h0IGNoZWNrIG9uY2UgdGhlXG4gICAgLy8gZGVmaS1zZXJ2aWNlIG9wZXJhdGlvbnMgZW5kcG9pbnQgaXMgZGVwbG95ZWQgYW5kIHJldHVybmluZyBhY3RpdmUgc3RhdGUuXG4gICAgLy8gY29uc3QgYWN0aXZlT3BzOiBEZWZpT3BlcmF0aW9uTGlzdFJlc3VsdCA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAvLyAgIC5nZXQodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKHRoaXMub3BlcmF0aW9uc1VybCgpKSlcbiAgICAvLyAgIC5xdWVyeSh7IHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLCBzdGF0ZTogJ2FjdGl2ZScgfSlcbiAgICAvLyAgIC5yZXN1bHQoKTtcbiAgICAvL1xuICAgIC8vIGlmIChhY3RpdmVPcHMuaXRlbXMgJiYgYWN0aXZlT3BzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgIHRocm93IG5ldyBBY3RpdmVPcGVyYXRpb25FeGlzdHNFcnJvcihhY3RpdmVPcHMuaXRlbXNbMF0ub3BlcmF0aW9uSWQpO1xuICAgIC8vIH1cblxuICAgIC8vIFN0ZXAgMTogQXBwcm92ZSB0eFJlcXVlc3QgdmlhIHNlbmRNYW55XG4gICAgY29uc3QgYXBwcm92ZVJlc3VsdCA9IGF3YWl0IHRoaXMud2FsbGV0LnNlbmRNYW55KHtcbiAgICAgIHR5cGU6ICdkZWZpQXBwcm92ZScsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IHBhcmFtcy5hbW91bnQsXG4gICAgICB9LFxuICAgICAgLi4uKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8geyB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9IDoge30pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXBwcm92ZVR4UmVxdWVzdElkID0gdGhpcy5leHRyYWN0VHhSZXF1ZXN0SWQoYXBwcm92ZVJlc3VsdCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSB0aGlzLmV4dHJhY3RPcGVyYXRpb25JZChhcHByb3ZlUmVzdWx0KTtcblxuICAgIGlmICghb3BlcmF0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3BlcmF0aW9uSWQgbm90IGZvdW5kIGluIGFwcHJvdmUgdHhSZXF1ZXN0IHJlc3BvbnNlJyk7XG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBEZXBvc2l0IHR4UmVxdWVzdCB2aWEgc2VuZE1hbnlcbiAgICBjb25zdCBkZXBvc2l0UmVzdWx0ID0gYXdhaXQgdGhpcy53YWxsZXQuc2VuZE1hbnkoe1xuICAgICAgdHlwZTogJ2RlZmlEZXBvc2l0JyxcbiAgICAgIGRlZmlQYXJhbXM6IHtcbiAgICAgICAgdmF1bHRJZDogcGFyYW1zLnZhdWx0SWQsXG4gICAgICAgIGFtb3VudDogcGFyYW1zLmFtb3VudCxcbiAgICAgICAgb3BlcmF0aW9uSWQsXG4gICAgICB9LFxuICAgICAgLi4uKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8geyB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9IDoge30pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRlcG9zaXRUeFJlcXVlc3RJZCA9IHRoaXMuZXh0cmFjdFR4UmVxdWVzdElkKGRlcG9zaXRSZXN1bHQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdGlvbklkLFxuICAgICAgdHhSZXF1ZXN0SWRzOiB7XG4gICAgICAgIGFwcHJvdmU6IGFwcHJvdmVUeFJlcXVlc3RJZCxcbiAgICAgICAgZGVwb3NpdDogZGVwb3NpdFR4UmVxdWVzdElkLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBhIHBhcnRpYWxseS1jb21wbGV0ZWQgZGVwb3NpdC4gQ2FsbCB0aGlzIHdoZW4gdGhlIFNESyBwcm9jZXNzIGRpZWRcbiAgICogYmV0d2VlbiB0aGUgYXBwcm92ZSBhbmQgZGVwb3NpdCB0eFJlcXVlc3QgY3JlYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMub3BlcmF0aW9uSWQgLSB0aGUgb3BlcmF0aW9uSWQgZnJvbSB0aGUgb3JpZ2luYWwgZGVwb3NpdFRvVmF1bHQgY2FsbFxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSByZXF1aXJlZCBmb3IgaG90IHdhbGxldHMsIG9taXQgZm9yIGN1c3RvZHlcbiAgICovXG4gIGFzeW5jIHJlc3VtZURlcG9zaXQocGFyYW1zOiBSZXN1bWVEZXBvc2l0T3B0aW9ucyk6IFByb21pc2U8RGVwb3NpdFJlc3VsdD4ge1xuICAgIGlmICghcGFyYW1zLm9wZXJhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZXJhdGlvbklkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggdGhlIG9wZXJhdGlvbiB0byBnZXQgdGhlIHZhdWx0IGFuZCBhbW91bnQgZGV0YWlsc1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGF3YWl0IHRoaXMuZ2V0T3BlcmF0aW9uKHsgb3BlcmF0aW9uSWQ6IHBhcmFtcy5vcGVyYXRpb25JZCB9KTtcblxuICAgIGlmIChvcGVyYXRpb24uYXNzb2NpYXRlZFR4UmVxdWVzdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcG9zaXQgdHhSZXF1ZXN0IGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIG9wZXJhdGlvbjsgbm90aGluZyB0byByZXN1bWUnKTtcbiAgICB9XG5cbiAgICBpZiAoIW9wZXJhdGlvbi50eFJlcXVlc3RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcHByb3ZlIHR4UmVxdWVzdCBub3QgZm91bmQgZm9yIHRoaXMgb3BlcmF0aW9uOyBjYW5ub3QgcmVzdW1lJyk7XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgdGhlIGRlcG9zaXQgdHhSZXF1ZXN0IHVzaW5nIHRoZSBleGlzdGluZyBvcGVyYXRpb24ncyBkZXRhaWxzXG4gICAgY29uc3QgZGVwb3NpdFJlc3VsdCA9IGF3YWl0IHRoaXMud2FsbGV0LnNlbmRNYW55KHtcbiAgICAgIHR5cGU6ICdkZWZpRGVwb3NpdCcsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IG9wZXJhdGlvbi52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IG9wZXJhdGlvbi5hc3NldEFtb3VudCxcbiAgICAgICAgb3BlcmF0aW9uSWQ6IHBhcmFtcy5vcGVyYXRpb25JZCxcbiAgICAgIH0sXG4gICAgICAuLi4ocGFyYW1zLndhbGxldFBhc3NwaHJhc2UgPyB7IHdhbGxldFBhc3NwaHJhc2U6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIH0gOiB7fSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0aW9uSWQ6IHBhcmFtcy5vcGVyYXRpb25JZCxcbiAgICAgIHR4UmVxdWVzdElkczoge1xuICAgICAgICBhcHByb3ZlOiBvcGVyYXRpb24udHhSZXF1ZXN0SWQsXG4gICAgICAgIGRlcG9zaXQ6IHRoaXMuZXh0cmFjdFR4UmVxdWVzdElkKGRlcG9zaXRSZXN1bHQpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIERlRmkgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zLm9wZXJhdGlvbklkIC0gdGhlIG9wZXJhdGlvbiB0byByZXRyaWV2ZVxuICAgKi9cbiAgYXN5bmMgZ2V0T3BlcmF0aW9uKHBhcmFtczogR2V0T3BlcmF0aW9uT3B0aW9ucyk6IFByb21pc2U8RGVmaU9wZXJhdGlvbj4ge1xuICAgIGlmICghcGFyYW1zLm9wZXJhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZXJhdGlvbklkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLm9wZXJhdGlvbnNVcmwoKSArICcvJyArIHBhcmFtcy5vcGVyYXRpb25JZCkpLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgb3BlcmF0aW9ucyBmb3IgYSB2YXVsdCBmaWx0ZXJlZCBieSB3YWxsZXRJZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy52YXVsdElkIC0gdmF1bHQgdG8gbGlzdCBvcGVyYXRpb25zIGZvclxuICAgKiBAcGFyYW0gcGFyYW1zLnN0YXRlIC0gb3B0aW9uYWwgc3RhdGUgZmlsdGVyXG4gICAqIEBwYXJhbSBwYXJhbXMudHlwZSAtIG9wdGlvbmFsIHR5cGUgZmlsdGVyIChERVBPU0lUIHwgV0lUSERSQVcpXG4gICAqIEBwYXJhbSBwYXJhbXMubGltaXQgLSBwYWdlIHNpemVcbiAgICogQHBhcmFtIHBhcmFtcy5jdXJzb3IgLSBwYWdpbmF0aW9uIGN1cnNvclxuICAgKi9cbiAgYXN5bmMgbGlzdE9wZXJhdGlvbnMocGFyYW1zOiBMaXN0T3BlcmF0aW9uc09wdGlvbnMpOiBQcm9taXNlPERlZmlPcGVyYXRpb25MaXN0UmVzdWx0PiB7XG4gICAgaWYgKCFwYXJhbXMudmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YXVsdElkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gPSB7XG4gICAgICB2YXVsdElkOiBwYXJhbXMudmF1bHRJZCxcbiAgICB9O1xuICAgIGlmIChwYXJhbXMuc3RhdGUpIHF1ZXJ5LnN0YXRlID0gcGFyYW1zLnN0YXRlO1xuICAgIGlmIChwYXJhbXMudHlwZSkgcXVlcnkudHlwZSA9IHBhcmFtcy50eXBlO1xuICAgIGlmIChwYXJhbXMubGltaXQpIHF1ZXJ5LmxpbWl0ID0gcGFyYW1zLmxpbWl0O1xuICAgIGlmIChwYXJhbXMuY3Vyc29yKSBxdWVyeS5jdXJzb3IgPSBwYXJhbXMuY3Vyc29yO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLm9wZXJhdGlvbnNVcmwoKSkpLnF1ZXJ5KHF1ZXJ5KS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyB2YXVsdCBzaGFyZXMgZnJvbSBhIERlRmkgdmF1bHQuXG4gICAqXG4gICAqIElzc3VlcyBhIHNpbmdsZSBzZW5kTWFueSBjYWxsIChkZWZpV2l0aGRyYXcpIGFuZCByZXR1cm5zIHRoZSBvcGVyYXRpb25JZFxuICAgKiBhbmQgdHhSZXF1ZXN0SWQuIFRoZSBzdGF0ZSBtYWNoaW5lIGZvciB3aXRoZHJhd2FsIGlzIHNpbXBsZXIgdGhhbiBkZXBvc2l0OlxuICAgKiBDUkVBVEVEIOKGkiBXSVRIRFJBV19UWF9SRVFVRVNURUQg4oaSIFdJVEhEUkFXX1NJR05FRCDihpIgV0lUSERSQVdfQ09ORklSTUVEIOKGkiBDT01QTEVURURcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy52YXVsdElkIC0gRGVGaS1zZXJ2aWNlIHZhdWx0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHBhcmFtcy5hbW91bnQgLSBhbW91bnQgaW4gYmFzZSB1bml0cyBvZiB0aGUgdmF1bHQgc2hhcmUgdG9rZW5cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIC0gcmVxdWlyZWQgZm9yIGhvdCB3YWxsZXRzLCBvbWl0IGZvciBjdXN0b2R5XG4gICAqL1xuICBhc3luYyB3aXRoZHJhd0Zyb21WYXVsdChwYXJhbXM6IFdpdGhkcmF3RnJvbVZhdWx0T3B0aW9ucyk6IFByb21pc2U8V2l0aGRyYXdSZXN1bHQ+IHtcbiAgICBpZiAoIXBhcmFtcy52YXVsdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhdWx0SWQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCFwYXJhbXMuYW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Ftb3VudCBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHdpdGhkcmF3UmVzdWx0ID0gYXdhaXQgdGhpcy53YWxsZXQuc2VuZE1hbnkoe1xuICAgICAgdHlwZTogJ2RlZmlXaXRoZHJhdycsXG4gICAgICBkZWZpUGFyYW1zOiB7XG4gICAgICAgIHZhdWx0SWQ6IHBhcmFtcy52YXVsdElkLFxuICAgICAgICBhbW91bnQ6IHBhcmFtcy5hbW91bnQsXG4gICAgICB9LFxuICAgICAgLi4uKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8geyB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9IDoge30pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0SWQgPSB0aGlzLmV4dHJhY3RUeFJlcXVlc3RJZCh3aXRoZHJhd1Jlc3VsdCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSB0aGlzLmV4dHJhY3RPcGVyYXRpb25JZCh3aXRoZHJhd1Jlc3VsdCk7XG5cbiAgICBpZiAoIW9wZXJhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZXJhdGlvbklkIG5vdCBmb3VuZCBpbiB3aXRoZHJhdyB0eFJlcXVlc3QgcmVzcG9uc2UnKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBvcGVyYXRpb25JZCwgdHhSZXF1ZXN0SWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwIG5hdGl2ZSBjdXJyZW5jeSBpbnRvIGl0cyBjYW5vbmljYWwgd3JhcHBlZC1uYXRpdmUgRVJDLTIwXG4gICAqIChFVEgg4oaSIFdFVEggdmlhIHRoZSBXRVRIOSBgZGVwb3NpdCgpYCBjYWxsKS5cbiAgICpcbiAgICogQSB0aGluIG9yY2hlc3RyYXRvciBvdmVyIGEgc2luZ2xlIHNlbmRNYW55LCBsaWtlIHtAbGluayB3aXRoZHJhd0Zyb21WYXVsdH0uXG4gICAqIFdQIGJ1aWxkcyB0aGUgY2FsbGRhdGEgYW5kIHJlc29sdmVzIHRoZSBXRVRIOSBhZGRyZXNzIHNlcnZlci1zaWRlIGZyb20gdGhlXG4gICAqIHZhdWx0IGJpbmRpbmc7IHRoZSBTREsgb25seSBmb3J3YXJkcyB2YXVsdElkIGFuZCBhbW91bnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMudmF1bHRJZCAtIERlRmktc2VydmljZSB2YXVsdCBpZGVudGlmaWVyLiBSZXF1aXJlZCBpbiB2MTogYmluZGluZ1xuICAgKiAgIHRoZSB3cmFwIHRvIGEgdmF1bHQgaXMgd2hhdCBzdXBwbGllcyB0aGUgcGVyLWVudGVycHJpc2UgYXV0aG9yaXphdGlvbiBnYXRlXG4gICAqICAgYW5kIHRoZSBhZGRyZXNzLXdoaXRlbGlzdCBwYXRoIHNlcnZlci1zaWRlIChUREQgwqczLjYpLiBNNyBtYWtlcyBpdCBvcHRpb25hbCxcbiAgICogICB3aGljaCBpcyBiYWNrd2FyZC1jb21wYXRpYmxlLlxuICAgKiBAcGFyYW0gcGFyYW1zLmFtb3VudCAtIGFtb3VudCBpbiBiYXNlIHVuaXRzIG9mIHRoZSBuYXRpdmUgY29pbiAoMThkcCBmb3IgRVRIKVxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSByZXF1aXJlZCBmb3IgaG90IHdhbGxldHMsIG9taXQgZm9yIGN1c3RvZHlcbiAgICovXG4gIGFzeW5jIHdyYXAocGFyYW1zOiBXcmFwT3B0aW9ucyk6IFByb21pc2U8V3JhcFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmRXcmFwSW50ZW50KCd3cmFwTmF0aXZlJywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbndyYXAgdGhlIGNhbm9uaWNhbCB3cmFwcGVkLW5hdGl2ZSBFUkMtMjAgYmFjayB0byBuYXRpdmUgY3VycmVuY3lcbiAgICogKFdFVEgg4oaSIEVUSCB2aWEgdGhlIFdFVEg5IGB3aXRoZHJhdyh1aW50MjU2KWAgY2FsbCkuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMudmF1bHRJZCAtIERlRmktc2VydmljZSB2YXVsdCBpZGVudGlmaWVyIChzZWUge0BsaW5rIHdyYXB9KVxuICAgKiBAcGFyYW0gcGFyYW1zLmFtb3VudCAtIGFtb3VudCBpbiBiYXNlIHVuaXRzIG9mIHRoZSB3cmFwcGVkIHRva2VuICgxOGRwIGZvciBXRVRIKVxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSByZXF1aXJlZCBmb3IgaG90IHdhbGxldHMsIG9taXQgZm9yIGN1c3RvZHlcbiAgICovXG4gIGFzeW5jIHVud3JhcChwYXJhbXM6IFdyYXBPcHRpb25zKTogUHJvbWlzZTxXcmFwUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZFdyYXBJbnRlbnQoJ3Vud3JhcE5hdGl2ZScsIHBhcmFtcyk7XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWwgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogU2hhcmVkIGJvZHkgb2Yge0BsaW5rIHdyYXB9IGFuZCB7QGxpbmsgdW53cmFwfSDigJQgdGhlIHR3byBkaWZmZXIgb25seSBpbiB0aGVcbiAgICogc2VuZE1hbnkgdHlwZSB0aGV5IGlzc3VlLlxuICAgKlxuICAgKiBEZWxpYmVyYXRlbHkgZG9lcyBub3QgY2FsbCB7QGxpbmsgZXh0cmFjdE9wZXJhdGlvbklkfTogbm8gb3BlcmF0aW9uIGlzIG1pbnRlZFxuICAgKiBmb3Igd3JhcC91bndyYXAgaW4gdjEsIHNvIGl0IHdvdWxkIG9ubHkgZXZlciByZXR1cm4gdW5kZWZpbmVkLiBPcGVyYXRpb25cbiAgICogdHJhY2tpbmcgYXJyaXZlcyBpbiBtaWxlc3RvbmUgTTUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNlbmRXcmFwSW50ZW50KHR5cGU6ICd3cmFwTmF0aXZlJyB8ICd1bndyYXBOYXRpdmUnLCBwYXJhbXM6IFdyYXBPcHRpb25zKTogUHJvbWlzZTxXcmFwUmVzdWx0PiB7XG4gICAgY29uc3QgdmF1bHRJZCA9IHBhcmFtcy52YXVsdElkPy50cmltKCk7XG4gICAgaWYgKCF2YXVsdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhdWx0SWQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgLy8gVGhlIGRvd25zdHJlYW0gQmlnSW50RnJvbVN0cmluZyBjb2RlYyAod2FsbGV0LnRzKSBhY2NlcHRzIGFueXRoaW5nIEpTJ3MgQmlnSW50KCkgY29uc3RydWN0b3JcbiAgICAvLyBkb2VzIC0gbmVnYXRpdmUgYW1vdW50cywgaGV4IHN0cmluZ3MgbGlrZSAnMHhhYmMnLCBhbmQgemVybyAtIGFuZCB0aGlzIGFtb3VudCBmb3J3YXJkc1xuICAgIC8vIHN0cmFpZ2h0IGludG8gYSB2YWx1ZS1tb3ZpbmcgV0VUSDkgZGVwb3NpdCgpL3dpdGhkcmF3KCkgY2FsbC4gUmVxdWlyZSBhIHBvc2l0aXZlIHVuc2lnbmVkXG4gICAgLy8gZGVjaW1hbCBpbnRlZ2VyIHN0cmluZyBoZXJlOyB6ZXJvIGlzIGRlbGliZXJhdGVseSByZWplY3RlZCB0b28sIHNpbmNlIGEgemVyby1hbW91bnQgd3JhcC9cbiAgICAvLyB1bndyYXAgaGFzIG5vIG9uLWNoYWluIGVmZmVjdCBidXQgd291bGQgc3RpbGwgc3BlbmQgZ2FzLlxuICAgIGlmICghcGFyYW1zLmFtb3VudCB8fCAhL15cXGQrJC8udGVzdChwYXJhbXMuYW1vdW50KSB8fCBCaWdJbnQocGFyYW1zLmFtb3VudCkgPT09IDBuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Ftb3VudCBtdXN0IGJlIGEgcG9zaXRpdmUgdW5zaWduZWQgZGVjaW1hbCBpbnRlZ2VyIHN0cmluZycpO1xuICAgIH1cbiAgICAvLyBXcmFwcGVkLW5hdGl2ZSB2YXVsdHMgKFdFVEg5IGRlcG9zaXQoKS93aXRoZHJhdygpKSBvbmx5IGV4aXN0IG9uIEVWTSBjaGFpbnMuIEZhaWwgZmFzdCBoZXJlXG4gICAgLy8gaW5zdGVhZCBvZiBsZXR0aW5nIGFuIHVuc3VwcG9ydGVkIGNvaW4gcmVhY2ggd2FsbGV0LXBsYXRmb3JtIGFuZCByZXR1cm4gYW4gb3BhcXVlIHByZWJ1aWxkIGVycm9yLlxuICAgIGlmICghdGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0Q29uZmlnKCkuZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuRVZNX0NPSU4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHdyYXAvdW53cmFwIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICR7dGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCl9IHdhbGxldHNgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLndhbGxldC5zZW5kTWFueSh7XG4gICAgICB0eXBlLFxuICAgICAgZGVmaVBhcmFtczoge1xuICAgICAgICB2YXVsdElkLFxuICAgICAgICBhbW91bnQ6IHBhcmFtcy5hbW91bnQsXG4gICAgICB9LFxuICAgICAgLi4uKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8geyB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9IDoge30pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgdHhSZXF1ZXN0SWQ6IHRoaXMuZXh0cmFjdFR4UmVxdWVzdElkKHJlc3VsdCkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHR4UmVxdWVzdElkIGZyb20gYSBzZW5kTWFueSByZXN1bHQuXG4gICAqIHNlbmRNYW55IHJldHVybnMgZGlmZmVyZW50IHNoYXBlcyBkZXBlbmRpbmcgb24gd2FsbGV0IHR5cGU6XG4gICAqIC0gVFNTIGZ1bGw6IHsgdHhSZXF1ZXN0OiB7IHR4UmVxdWVzdElkIH0gfSBvciB7IHBlbmRpbmdBcHByb3ZhbCwgdHhSZXF1ZXN0IH1cbiAgICogLSBUU1MgbGl0ZTogcmVzdWx0IGZyb20gdHNzVXRpbHMuc2VuZFR4UmVxdWVzdFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0VHhSZXF1ZXN0SWQoc2VuZE1hbnlSZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eFJlcXVlc3QgPSBzZW5kTWFueVJlc3VsdC50eFJlcXVlc3QgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHR4UmVxdWVzdD8udHhSZXF1ZXN0SWQpIHtcbiAgICAgIHJldHVybiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQgYXMgc3RyaW5nO1xuICAgIH1cbiAgICBpZiAoc2VuZE1hbnlSZXN1bHQudHhSZXF1ZXN0SWQpIHtcbiAgICAgIHJldHVybiBzZW5kTWFueVJlc3VsdC50eFJlcXVlc3RJZCBhcyBzdHJpbmc7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcigndHhSZXF1ZXN0SWQgbm90IGZvdW5kIGluIHNlbmRNYW55IHJlc3BvbnNlJyk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBvcGVyYXRpb25JZCBmcm9tIGEgc2VuZE1hbnkgcmVzdWx0LlxuICAgKlxuICAgKiBUaGUgV1Agd3JpdGVzIHRoZSBkZWZpLXNlcnZpY2UtbWludGVkIG9wZXJhdGlvbklkIGludG8gdGhlIGJ1aWx0XG4gICAqIHRyYW5zYWN0aW9uJ3MgYGNvaW5TcGVjaWZpY2AgKGFsb25nc2lkZSBgYXNzaWduZWROb25jZWApLCBub3QgaW50byB0aGVcbiAgICogaW50ZW50LiBSZWFkIGl0IGZyb20gdGhlcmU6IHRoZSBgZnVsbGAgYXBpVmVyc2lvbiBzdXJmYWNlcyBpdCBhdFxuICAgKiBgdHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguY29pblNwZWNpZmljLm9wZXJhdGlvbklkYCwgdGhlIGBsaXRlYCB2ZXJzaW9uXG4gICAqIGF0IGB1bnNpZ25lZFR4c1swXS5jb2luU3BlY2lmaWMub3BlcmF0aW9uSWRgLiBGYWxsIGJhY2sgdG9cbiAgICogYGludGVudC5vcGVyYXRpb25JZGAgZm9yIGZvcndhcmQtY29tcGF0IGluIGNhc2UgdGhlIFdQIGxhdGVyIGFsc29cbiAgICogcG9wdWxhdGVzIHRoZSBpbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RPcGVyYXRpb25JZChzZW5kTWFueVJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHR4UmVxdWVzdCA9IHNlbmRNYW55UmVzdWx0LnR4UmVxdWVzdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXR4UmVxdWVzdCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBmdWxsIGFwaVZlcnNpb246IHRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LmNvaW5TcGVjaWZpYy5vcGVyYXRpb25JZFxuICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IHR4UmVxdWVzdC50cmFuc2FjdGlvbnMgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGZ1bGxVbnNpZ25lZFR4ID0gdHJhbnNhY3Rpb25zPy5bMF0/LnVuc2lnbmVkVHggYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZnVsbENvaW5TcGVjaWZpYyA9IGZ1bGxVbnNpZ25lZFR4Py5jb2luU3BlY2lmaWMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKGZ1bGxDb2luU3BlY2lmaWM/Lm9wZXJhdGlvbklkKSB7XG4gICAgICByZXR1cm4gZnVsbENvaW5TcGVjaWZpYy5vcGVyYXRpb25JZCBhcyBzdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gbGl0ZSBhcGlWZXJzaW9uOiB1bnNpZ25lZFR4c1swXS5jb2luU3BlY2lmaWMub3BlcmF0aW9uSWRcbiAgICBjb25zdCB1bnNpZ25lZFR4cyA9IHR4UmVxdWVzdC51bnNpZ25lZFR4cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGl0ZUNvaW5TcGVjaWZpYyA9IHVuc2lnbmVkVHhzPy5bMF0/LmNvaW5TcGVjaWZpYyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAobGl0ZUNvaW5TcGVjaWZpYz8ub3BlcmF0aW9uSWQpIHtcbiAgICAgIHJldHVybiBsaXRlQ29pblNwZWNpZmljLm9wZXJhdGlvbklkIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICAvLyBmb3J3YXJkLWNvbXBhdDogaW50ZW50Lm9wZXJhdGlvbklkIChpbiBjYXNlIHRoZSBXUCBsYXRlciBwb3B1bGF0ZXMgdGhlIGludGVudClcbiAgICBjb25zdCBpbnRlbnQgPSB0eFJlcXVlc3QuaW50ZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBpbnRlbnQ/Lm9wZXJhdGlvbklkIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyB7QGxpbmsgQ29uY3JldGVEZXBvc2l0UmVzdWx0fSBmcm9tIGEgY3VzdG9kaWFsIHNlbmRNYW55IHJlc3BvbnNlLlxuICAgKiBDb25jcmV0ZSBCVEMgZGVwb3NpdHMgcmV0dXJuIGEgYHBlbmRpbmdBcHByb3ZhbGAgaW5zdGVhZCBvZiBhIHR4UmVxdWVzdCDigJRcbiAgICogdGhyb3dzIGlmIGBwZW5kaW5nQXBwcm92YWwuaWRgIGlzIGFic2VudCwgaW5kaWNhdGluZyBhbiB1bmV4cGVjdGVkIHNoYXBlLlxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0Q29uY3JldGVEZXBvc2l0UmVzdWx0KHNlbmRNYW55UmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IENvbmNyZXRlRGVwb3NpdFJlc3VsdCB7XG4gICAgY29uc3QgU2VuZE1hbnlDb25jcmV0ZVJlc3BvbnNlID0gdC50eXBlKHtcbiAgICAgIHBlbmRpbmdBcHByb3ZhbDogdC5pbnRlcnNlY3Rpb24oW3QudHlwZSh7IGlkOiB0LnN0cmluZyB9KSwgdC5wYXJ0aWFsKHsgc3RhdGU6IHQuc3RyaW5nIH0pXSksXG4gICAgfSk7XG4gICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVdpdGhDb2RlYyhTZW5kTWFueUNvbmNyZXRlUmVzcG9uc2UsIHNlbmRNYW55UmVzdWx0LCAnZGVmaS1kZXBvc2l0IHNlbmRNYW55IHJlc3BvbnNlJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiBkZWNvZGVkLnBlbmRpbmdBcHByb3ZhbC5pZCxcbiAgICAgIHN0YXRlOiBkZWNvZGVkLnBlbmRpbmdBcHByb3ZhbC5zdGF0ZSA/PyAnYXdhaXRpbmdTaWduYXR1cmUnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG9wZXJhdGlvbnNVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYC9hcGkvZGVmaS1zZXJ2aWNlL3YxL3dhbGxldHMvJHt0aGlzLndhbGxldC5pZCgpfS9vcGVyYXRpb25zYDtcbiAgfVxufVxuIl19
|
|
@@ -69,6 +69,19 @@ export interface WithdrawResult {
|
|
|
69
69
|
operationId: string;
|
|
70
70
|
txRequestId: string;
|
|
71
71
|
}
|
|
72
|
+
export interface WrapOptions {
|
|
73
|
+
/** DeFi-service vault identifier — required in v1, see note below */
|
|
74
|
+
vaultId: string;
|
|
75
|
+
/** Amount in base units (18dp for ETH/WETH) */
|
|
76
|
+
amount: string;
|
|
77
|
+
/** Wallet passphrase — required for hot wallets, omit for custody */
|
|
78
|
+
walletPassphrase?: string;
|
|
79
|
+
}
|
|
80
|
+
export interface WrapResult {
|
|
81
|
+
txRequestId: string;
|
|
82
|
+
/** Reserved — populated from milestone M5 onward, absent in v1 */
|
|
83
|
+
operationId?: string;
|
|
84
|
+
}
|
|
72
85
|
export interface IDefiVault {
|
|
73
86
|
depositToVault(params: DepositToVaultOptions): Promise<DepositResult>;
|
|
74
87
|
resumeDeposit(params: ResumeDepositOptions): Promise<DepositResult>;
|
|
@@ -77,5 +90,7 @@ export interface IDefiVault {
|
|
|
77
90
|
getVaultConfig(params: GetVaultConfigOptions): Promise<GetVaultResponse>;
|
|
78
91
|
getVaultProtocol(params: GetVaultConfigOptions): Promise<VaultProtocol>;
|
|
79
92
|
withdrawFromVault(params: WithdrawFromVaultOptions): Promise<WithdrawResult>;
|
|
93
|
+
wrap(params: WrapOptions): Promise<WrapResult>;
|
|
94
|
+
unwrap(params: WrapOptions): Promise<WrapResult>;
|
|
80
95
|
}
|
|
81
96
|
//# sourceMappingURL=iDefiVault.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iDefiVault.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/defi/iDefiVault.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEtE,MAAM,WAAW,qBAAqB;IACpC,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAED,MAAM,MAAM,aAAa,GAAG,qBAAqB,GAAG,mBAAmB,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACtE,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACpE,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAClE,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAChF,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzE,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACxE,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"iDefiVault.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/defi/iDefiVault.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* @prettier
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaURlZmlWYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9kZWZpL2lEZWZpVmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuXG5pbXBvcnQgeyBHZXRWYXVsdFJlc3BvbnNlLCBWYXVsdFByb3RvY29sIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwb3NpdFRvVmF1bHRPcHRpb25zIHtcbiAgLyoqIERlRmktc2VydmljZSB2YXVsdCBpZGVudGlmaWVyICovXG4gIHZhdWx0SWQ6IHN0cmluZztcbiAgLyoqIEFtb3VudCBpbiBiYXNlIHVuaXRzIG9mIHRoZSB1bmRlcmx5aW5nIGFzc2V0ICovXG4gIGFtb3VudDogc3RyaW5nO1xuICAvKiogV2FsbGV0IHBhc3NwaHJhc2Ug4oCUIHJlcXVpcmVkIGZvciBob3Qgd2FsbGV0cywgb21pdCBmb3IgY3VzdG9keSAqL1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VtZURlcG9zaXRPcHRpb25zIHtcbiAgLyoqIG9wZXJhdGlvbklkIG9mIHRoZSBwYXJ0aWFsbHktY29tcGxldGVkIGRlcG9zaXQgKi9cbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgLyoqIFdhbGxldCBwYXNzcGhyYXNlIOKAlCByZXF1aXJlZCBmb3IgaG90IHdhbGxldHMsIG9taXQgZm9yIGN1c3RvZHkgKi9cbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRPcGVyYXRpb25PcHRpb25zIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0T3BlcmF0aW9uc09wdGlvbnMge1xuICB2YXVsdElkOiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICBsaW1pdD86IG51bWJlcjtcbiAgY3Vyc29yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFZhdWx0Q29uZmlnT3B0aW9ucyB7XG4gIHZhdWx0SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZpT3BlcmF0aW9uIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgdmF1bHRJZDogc3RyaW5nO1xuICB0eXBlOiAnREVQT1NJVCcgfCAnV0lUSERSQVcnO1xuICBhc3NldEFtb3VudDogc3RyaW5nO1xuICBzdGF0ZTogc3RyaW5nO1xuICB0eFJlcXVlc3RJZD86IHN0cmluZztcbiAgYXNzb2NpYXRlZFR4UmVxdWVzdElkPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uY3JldGVEZXBvc2l0UmVzdWx0IHtcbiAgcGVuZGluZ0FwcHJvdmFsSWQ6IHN0cmluZztcbiAgc3RhdGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3JwaG9EZXBvc2l0UmVzdWx0IHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgdHhSZXF1ZXN0SWRzOiB7IGFwcHJvdmU6IHN0cmluZzsgZGVwb3NpdDogc3RyaW5nIH07XG59XG5cbmV4cG9ydCB0eXBlIERlcG9zaXRSZXN1bHQgPSBDb25jcmV0ZURlcG9zaXRSZXN1bHQgfCBNb3JwaG9EZXBvc2l0UmVzdWx0O1xuXG5leHBvcnQgaW50ZXJmYWNlIERlZmlPcGVyYXRpb25MaXN0UmVzdWx0IHtcbiAgaXRlbXM6IERlZmlPcGVyYXRpb25bXTtcbiAgbmV4dEN1cnNvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoZHJhd0Zyb21WYXVsdE9wdGlvbnMge1xuICAvKiogRGVGaS1zZXJ2aWNlIHZhdWx0IGlkZW50aWZpZXIgKi9cbiAgdmF1bHRJZDogc3RyaW5nO1xuICAvKiogQW1vdW50IGluIGJhc2UgdW5pdHMgb2YgdGhlIHZhdWx0IHNoYXJlIHRva2VuICovXG4gIGFtb3VudDogc3RyaW5nO1xuICAvKiogV2FsbGV0IHBhc3NwaHJhc2Ug4oCUIHJlcXVpcmVkIGZvciBob3Qgd2FsbGV0cywgb21pdCBmb3IgY3VzdG9keSAqL1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhkcmF3UmVzdWx0IHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXcmFwT3B0aW9ucyB7XG4gIC8qKiBEZUZpLXNlcnZpY2UgdmF1bHQgaWRlbnRpZmllciDigJQgcmVxdWlyZWQgaW4gdjEsIHNlZSBub3RlIGJlbG93ICovXG4gIHZhdWx0SWQ6IHN0cmluZztcbiAgLyoqIEFtb3VudCBpbiBiYXNlIHVuaXRzICgxOGRwIGZvciBFVEgvV0VUSCkgKi9cbiAgYW1vdW50OiBzdHJpbmc7XG4gIC8qKiBXYWxsZXQgcGFzc3BocmFzZSDigJQgcmVxdWlyZWQgZm9yIGhvdCB3YWxsZXRzLCBvbWl0IGZvciBjdXN0b2R5ICovXG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JhcFJlc3VsdCB7XG4gIHR4UmVxdWVzdElkOiBzdHJpbmc7XG4gIC8qKiBSZXNlcnZlZCDigJQgcG9wdWxhdGVkIGZyb20gbWlsZXN0b25lIE01IG9ud2FyZCwgYWJzZW50IGluIHYxICovXG4gIG9wZXJhdGlvbklkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEZWZpVmF1bHQge1xuICBkZXBvc2l0VG9WYXVsdChwYXJhbXM6IERlcG9zaXRUb1ZhdWx0T3B0aW9ucyk6IFByb21pc2U8RGVwb3NpdFJlc3VsdD47XG4gIHJlc3VtZURlcG9zaXQocGFyYW1zOiBSZXN1bWVEZXBvc2l0T3B0aW9ucyk6IFByb21pc2U8RGVwb3NpdFJlc3VsdD47XG4gIGdldE9wZXJhdGlvbihwYXJhbXM6IEdldE9wZXJhdGlvbk9wdGlvbnMpOiBQcm9taXNlPERlZmlPcGVyYXRpb24+O1xuICBsaXN0T3BlcmF0aW9ucyhwYXJhbXM6IExpc3RPcGVyYXRpb25zT3B0aW9ucyk6IFByb21pc2U8RGVmaU9wZXJhdGlvbkxpc3RSZXN1bHQ+O1xuICBnZXRWYXVsdENvbmZpZyhwYXJhbXM6IEdldFZhdWx0Q29uZmlnT3B0aW9ucyk6IFByb21pc2U8R2V0VmF1bHRSZXNwb25zZT47XG4gIGdldFZhdWx0UHJvdG9jb2wocGFyYW1zOiBHZXRWYXVsdENvbmZpZ09wdGlvbnMpOiBQcm9taXNlPFZhdWx0UHJvdG9jb2w+O1xuICB3aXRoZHJhd0Zyb21WYXVsdChwYXJhbXM6IFdpdGhkcmF3RnJvbVZhdWx0T3B0aW9ucyk6IFByb21pc2U8V2l0aGRyYXdSZXN1bHQ+O1xuICB3cmFwKHBhcmFtczogV3JhcE9wdGlvbnMpOiBQcm9taXNlPFdyYXBSZXN1bHQ+O1xuICB1bndyYXAocGFyYW1zOiBXcmFwT3B0aW9ucyk6IFByb21pc2U8V3JhcFJlc3VsdD47XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mpcUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/mpcUtils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwC,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAsB,QAAQ,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE/F,OAAO,EAEL,eAAe,EACf,oCAAoC,EACpC,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAIzB,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAElB,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;cAKjC,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;cAiBjG,uBAAuB,CACrC,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACvC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC;IAsCpB;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,YAAY,CAAC,EAAE,yBAAyB,CAAC;KAC1C,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAE7B;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,oCAAoC,GAAG,eAAe;
|
|
1
|
+
{"version":3,"file":"mpcUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/mpcUtils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwC,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAsB,QAAQ,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE/F,OAAO,EAEL,eAAe,EACf,oCAAoC,EACpC,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAIzB,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAElB,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;cAKjC,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;cAiBjG,uBAAuB,CACrC,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACvC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC;IAsCpB;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,YAAY,CAAC,EAAE,yBAAyB,CAAC;KAC1C,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAE7B;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,oCAAoC,GAAG,eAAe;IAyRlG,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,4BAA4B,GAAG,MAAM,GAAG,SAAS;CAY/F"}
|
|
@@ -144,6 +144,8 @@ class MpcUtils {
|
|
|
144
144
|
'defi-approve',
|
|
145
145
|
'defi-deposit',
|
|
146
146
|
'defi-withdraw',
|
|
147
|
+
'wrap-native',
|
|
148
|
+
'unwrap-native',
|
|
147
149
|
'wrapApprove',
|
|
148
150
|
'wrap',
|
|
149
151
|
].includes(params.intentType)) {
|
|
@@ -251,6 +253,18 @@ class MpcUtils {
|
|
|
251
253
|
shareTokenAmount: params.defiParams.amount,
|
|
252
254
|
};
|
|
253
255
|
}
|
|
256
|
+
case 'wrap-native':
|
|
257
|
+
case 'unwrap-native': {
|
|
258
|
+
(0, assert_1.default)(params.defiParams, `'defiParams' is required for ${params.intentType} intent`);
|
|
259
|
+
// WrapNativeIntent / UnwrapNativeIntent carry a plain `amount` (base units
|
|
260
|
+
// of the native coin when wrapping, of the wrapped token when unwrapping),
|
|
261
|
+
// not the `shareTokenAmount` that defi-withdraw uses for vault shares.
|
|
262
|
+
return {
|
|
263
|
+
...baseIntent,
|
|
264
|
+
vaultId: params.defiParams.vaultId,
|
|
265
|
+
amount: params.defiParams.amount,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
254
268
|
case 'wrapApprove':
|
|
255
269
|
case 'wrap': {
|
|
256
270
|
(0, assert_1.default)(params.wrapParams, `'wrapParams' is required for ${params.intentType} intent`);
|
|
@@ -301,4 +315,4 @@ class MpcUtils {
|
|
|
301
315
|
}
|
|
302
316
|
}
|
|
303
317
|
exports.MpcUtils = MpcUtils;
|
|
304
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBjVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvbXBjVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxvREFBNEI7QUFDNUIscUNBQWtGO0FBSWxGLGlEQUFnRTtBQU9oRSxzREFBd0Y7QUFDeEYsaURBQXlEO0FBU3pELE1BQXNCLFFBQVE7SUFJNUIsWUFBWSxLQUFnQixFQUFFLFFBQW1CO1FBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFUyxLQUFLLENBQUMsbUJBQW1CLENBQUMsWUFBb0IsRUFBRSxVQUFxQztRQUM3RixNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBQSxxQkFBVyxFQUFDO1lBQzVDLGNBQWMsRUFBRSxZQUFZO1NBQzdCLENBQUMsQ0FBQztRQUNILE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFBLHdCQUFjLEVBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFdEYsTUFBTSxxQkFBcUIsR0FBRyxDQUM1QixNQUFNLElBQUEsaUJBQU8sRUFBQztZQUNaLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsY0FBYyxFQUFFLENBQUMsaUJBQWlCLENBQUM7WUFDbkMsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQ0gsQ0FBQyxJQUFJLENBQUM7UUFFUCxPQUFPLHFCQUFxQixDQUFDO0lBQy9CLENBQUM7SUFFUyxLQUFLLENBQUMsdUJBQXVCLENBQ3JDLFVBQXFDLEVBQ3JDLFlBQXVDLEVBQ3ZDLFlBQXlCLEVBQ3pCLGNBQTJCLEVBQzNCLE9BQWdCLEVBQ2hCLFVBQW1CO1FBRW5CLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxJQUFBLGdDQUFpQixFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMs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QUM7SUFDN0IsQ0FBQztDQUNGO0FBblhELDRCQW1YQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGRlY3J5cHQsIHJlYWRNZXNzYWdlLCByZWFkUHJpdmF0ZUtleSwgU2VyaWFsaXplZEtleVBhaXIgfSBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IElCYXNlQ29pbiwgS2V5Y2hhaW5zVHJpcGxldCB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBBZGRLZXljaGFpbk9wdGlvbnMsIEtleWNoYWluLCBLZXlUeXBlLCBXZWJhdXRobktleUVuY3J5cHRpb25JbmZvIH0gZnJvbSAnLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZW5jcnlwdFRleHQsIGdldEJpdGdvR3BnUHViS2V5IH0gZnJvbSAnLi9vcGVuZ3BnVXRpbHMnO1xuaW1wb3J0IHtcbiAgSW50ZW50UmVjaXBpZW50LFxuICBQb3B1bGF0ZWRJbnRlbnQsXG4gIFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyxcbiAgVG9rZW5UcmFuc2ZlclJlY2lwaWVudFBhcmFtcyxcbn0gZnJvbSAnLi90c3MvYmFzZVR5cGVzJztcbmltcG9ydCB7IGVudlJlcXVpcmVzQml0Z29QdWJHcGdLZXlDb25maWcsIGlzQml0Z29NcGNQdWJLZXkgfSBmcm9tICcuLi90c3MvYml0Z29QdWJLZXlzJztcbmltcG9ydCB7IGNvaW5zLCBOZXR3b3JrVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1wY0tleVNoYXJlIHtcbiAgcHVibGljU2hhcmU6IHN0cmluZztcbiAgcHJpdmF0ZVNoYXJlOiBzdHJpbmc7XG4gIHByaXZhdGVTaGFyZVByb29mPzogc3RyaW5nO1xuICB2c3NQcm9vZj86IHN0cmluZztcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1wY1V0aWxzIHtcbiAgcHJvdGVjdGVkIGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHByb3RlY3RlZCBiYXNlQ29pbjogSUJhc2VDb2luO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGJhc2VDb2luOiBJQmFzZUNvaW4pIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5iYXNlQ29pbiA9IGJhc2VDb2luO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRlY3J5cHRQcml2YXRlU2hhcmUocHJpdmF0ZVNoYXJlOiBzdHJpbmcsIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHByaXZhdGVTaGFyZU1lc3NhZ2UgPSBhd2FpdCByZWFkTWVzc2FnZSh7XG4gICAgICBhcm1vcmVkTWVzc2FnZTogcHJpdmF0ZVNoYXJlLFxuICAgIH0pO1xuICAgIGNvbnN0IHVzZXJHcGdQcml2YXRlS2V5ID0gYXdhaXQgcmVhZFByaXZhdGVLZXkoeyBhcm1vcmVkS2V5OiB1c2VyR3BnS2V5LnByaXZhdGVLZXkgfSk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRQcml2YXRlU2hhcmUgPSAoXG4gICAgICBhd2FpdCBkZWNyeXB0KHtcbiAgICAgICAgbWVzc2FnZTogcHJpdmF0ZVNoYXJlTWVzc2FnZSxcbiAgICAgICAgZGVjcnlwdGlvbktleXM6IFt1c2VyR3BnUHJpdmF0ZUtleV0sXG4gICAgICAgIGZvcm1hdDogJ3V0ZjgnLFxuICAgICAgfSlcbiAgICApLmRhdGE7XG5cbiAgICByZXR1cm4gZGVjcnlwdGVkUHJpdmF0ZVNoYXJlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZUJpdGdvS2V5Y2hhaW5JbldQKFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgYmFja3VwR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIHVzZXJLZXlTaGFyZTogTXBjS2V5U2hhcmUsXG4gICAgYmFja3VwS2V5U2hhcmU6IE1wY0tleVNoYXJlLFxuICAgIGtleVR5cGU6IEtleVR5cGUsXG4gICAgZW50ZXJwcmlzZT86IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgYml0Z29LZXkgPSAoYXdhaXQgZ2V0Qml0Z29HcGdQdWJLZXkodGhpcy5iaXRnbykpLm1wY1YxO1xuICAgIGlmIChlbnZSZXF1aXJlc0JpdGdvUHViR3BnS2V5Q29uZmlnKHRoaXMuYml0Z28uZ2V0RW52KCkpKSB7XG4gICAgICAvLyBFbnN1cmUgdGhlIHB1YmxpYyBrZXkgaXMgb25lIG9mIHRoZSBleHBlY3RlZCBCaXRHbyBwdWJsaWMga2V5cyB3aGVuIGluIHRlc3Qgb3IgcHJvZC5cbiAgICAgIGFzc2VydChpc0JpdGdvTXBjUHViS2V5KGJpdGdvS2V5LmFybW9yKCksICdtcGN2MScpLCAnSW52YWxpZCBCaXRHbyBHUEcgcHVibGljIGtleScpO1xuICAgIH1cbiAgICBjb25zdCBlbmNVc2VyVG9CaXRHb01lc3NhZ2UgPSBhd2FpdCBlbmNyeXB0VGV4dCh1c2VyS2V5U2hhcmUucHJpdmF0ZVNoYXJlLCBiaXRnb0tleSk7XG4gICAgY29uc3QgZW5jQmFja3VwVG9CaXRHb01lc3NhZ2UgPSBhd2FpdCBlbmNyeXB0VGV4dChiYWNrdXBLZXlTaGFyZS5wcml2YXRlU2hhcmUsIGJpdGdvS2V5KTtcblxuICAgIGNvbnN0IGNyZWF0ZUJpdEdvTVBDUGFyYW1zOiBBZGRLZXljaGFpbk9wdGlvbnMgPSB7XG4gICAgICBrZXlUeXBlLFxuICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAga2V5U2hhcmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiAndXNlcicsXG4gICAgICAgICAgdG86ICdiaXRnbycsXG4gICAgICAgICAgcHVibGljU2hhcmU6IHVzZXJLZXlTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICBwcml2YXRlU2hhcmU6IGVuY1VzZXJUb0JpdEdvTWVzc2FnZSxcbiAgICAgICAgICBwcml2YXRlU2hhcmVQcm9vZjogdXNlcktleVNoYXJlLnByaXZhdGVTaGFyZVByb29mLFxuICAgICAgICAgIHZzc1Byb29mOiB1c2VyS2V5U2hhcmUudnNzUHJvb2YsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiAnYmFja3VwJyxcbiAgICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgICBwdWJsaWNTaGFyZTogYmFja3VwS2V5U2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlOiBlbmNCYWNrdXBUb0JpdEdvTWVzc2FnZSxcbiAgICAgICAgICBwcml2YXRlU2hhcmVQcm9vZjogYmFja3VwS2V5U2hhcmUucHJpdmF0ZVNoYXJlUHJvb2YsXG4gICAgICAgICAgdnNzUHJvb2Y6IGJhY2t1cEtleVNoYXJlLnZzc1Byb29mLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHVzZXJHUEdQdWJsaWNLZXk6IHVzZXJHcGdLZXkucHVibGljS2V5LFxuICAgICAgYmFja3VwR1BHUHVibGljS2V5OiBiYWNrdXBHcGdLZXkucHVibGljS2V5LFxuICAgICAgZW50ZXJwcmlzZTogZW50ZXJwcmlzZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYmFzZUNvaW4ua2V5Y2hhaW5zKCkuYWRkKGNyZWF0ZUJpdEdvTVBDUGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIFVzZXIsIEJhY2t1cCwgYW5kIEJpdEdvIE1QQyBLZXljaGFpbnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMucGFzc3BocmFzZSAtIHBhc3NwaHJhc2UgdXNlZCB0byBlbmNyeXB0IHNpZ25pbmcgbWF0ZXJpYWxzIGNyZWF0ZWQgZm9yIFVzZXIgYW5kIEJhY2t1cFxuICAgKiBAcGFyYW0gcGFyYW1zLmVudGVycHJpc2UgLSBvcHRpb25hbCBlbnRlcnByaXNlIGlkIHRoYXQgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUgQml0R28gS2V5Y2hhaW5cbiAgICogQHBhcmFtIHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUgLSBvcHRpb25hbCBlbmNyeXB0aW9uIGNvZGUgdXNlZCB0byByZXNldCB0aGUgdXNlcidzIHBhc3N3b3JkLCBpZiBhYnNlbnQsIHBhc3N3b3JkIHJlY292ZXJ5IHdpbGwgbm90IHdvcmtcbiAgICovXG4gIGFic3RyYWN0IGNyZWF0ZUtleWNoYWlucyhwYXJhbXM6IHtcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW50ZXJwcmlzZT86IHN0cmluZztcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmc7XG4gICAgd2ViYXV0aG5JbmZvPzogV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbztcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD47XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gd291bGQgYmUgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgaW50ZW50c1xuICAgKiBiYXNlZCBvbiB0aGUgdHlwZSBvZiBjb2luIC8gc2lnIHNjaGVtZSB0aGUgY29pbiB1c2VzXG4gICAqIEBwYXJhbSB7SUJhc2VDb2lufSBiYXNlQ29pblxuICAgKiBAcGFyYW0ge1ByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9uc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn1cbiAgICovXG4gIHBvcHVsYXRlSW50ZW50KGJhc2VDb2luOiBJQmFzZUNvaW4sIHBhcmFtczogUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zKTogUG9wdWxhdGVkSW50ZW50IHtcbiAgICBjb25zdCBjaGFpbiA9IHRoaXMuYmFzZUNvaW4uZ2V0Q2hhaW4oKTtcblxuICAgIGlmIChwYXJhbXMuaW50ZW50VHlwZSA9PT0gJ2N1c3RvbVR4JyAmJiBiYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gJ3NvbCcpIHtcbiAgICAgIGNvbnN0IGhhc1NvbEluc3RydWN0aW9ucyA9IHBhcmFtcy5zb2xJbnN0cnVjdGlvbnMgJiYgcGFyYW1zLnNvbEluc3RydWN0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgaGFzVmVyc2lvbmVkRGF0YSA9XG4gICAgICAgIHBhcmFtcy5zb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgJiZcbiAgICAgICAgcGFyYW1zLnNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YS52ZXJzaW9uZWRJbnN0cnVjdGlvbnMgJiZcbiAgICAgICAgcGFyYW1zLnNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YS52ZXJzaW9uZWRJbnN0cnVjdGlvbnMubGVuZ3RoID4gMDtcblxuICAgICAgYXNzZXJ0KFxuICAgICAgICBoYXNTb2xJbnN0cnVjdGlvbnMgfHwgaGFzVmVyc2lvbmVkRGF0YSxcbiAgICAgICAgYCdzb2xJbnN0cnVjdGlvbnMnIG9yICdzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEnIGlzIHJlcXVpcmVkIGZvciBjdXN0b21UeCBpbnRlbnRgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuaW50ZW50VHlwZSA9PT0gJ2N1c3RvbVR4JyAmJiBiYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gJ2FwdCcpIHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgcGFyYW1zLmFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgIGAnYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtcycgaXMgYSByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yIGN1c3RvbVR4IGludGVudGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICAndHJhbnNmZXJBY2NlcHQnLFxuICAgICAgICAndHJhbnNmZXJSZWplY3QnLFxuICAgICAgICAnY29zaWduRGVsZWdhdGlvbkFjY2VwdCcsXG4gICAgICAgICdhbGxvY2F0aW9uQWxsb2NhdGUnLFxuICAgICAgICAnY2FudG9uRW5kSW52ZXN0b3JPbmJvYXJkaW5nQWNjZXB0JyxcbiAgICAgICAgJ2NhbnRvbkVuZEludmVzdG9yT25ib2FyZGluZ1JlamVjdCcsXG4gICAgICBdLmluY2x1ZGVzKHBhcmFtcy5pbnRlbnRUeXBlKSAmJlxuICAgICAgYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdjYW50b24nXG4gICAgKSB7XG4gICAgICBhc3NlcnQocGFyYW1zLnR4UmVxdWVzdElkLCBgJ3R4UmVxdWVzdElkJyBpcyByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuaW50ZW50VHlwZSA9PT0gJ2NhbnRvbkVuZEludmVzdG9yT25ib2FyZGluZ09mZmVyJykge1xuICAgICAgYXNzZXJ0KHBhcmFtcy5lbmRJbnZlc3RvclBhcnR5SWQsIGAnZW5kSW52ZXN0b3JQYXJ0eUlkJyBpcyByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuaW50ZW50VHlwZSA9PT0gJ2NhbnRvbkVuZEludmVzdG9yT25ib2FyZGluZ1JlamVjdCcpIHtcbiAgICAgIGFzc2VydChwYXJhbXMucmVhc29uLCBgJ3JlYXNvbicgaXMgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciAke3BhcmFtcy5pbnRlbnRUeXBlfSBpbnRlbnRgKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmludGVudFR5cGUgPT09ICdjYW50b25QYXJ0aWNpcGFudE9uYm9hcmRpbmdSZXF1ZXN0Jykge1xuICAgICAgYXNzZXJ0KHBhcmFtcy5vcGVyYXRvciwgYCdvcGVyYXRvcicgaXMgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciAke3BhcmFtcy5pbnRlbnRUeXBlfSBpbnRlbnRgKTtcbiAgICAgIGFzc2VydChwYXJhbXMucHJvdmlkZXIsIGAncHJvdmlkZXInIGlzIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgJHtwYXJhbXMuaW50ZW50VHlwZX0gaW50ZW50YCk7XG4gICAgICBhc3NlcnQocGFyYW1zLmNvbXBsaWFuY2UsIGAnY29tcGxpYW5jZScgaXMgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciAke3BhcmFtcy5pbnRlbnRUeXBlfSBpbnRlbnRgKTtcbiAgICAgIGFzc2VydChwYXJhbXMucmVnaXN0cmFyLCBgJ3JlZ2lzdHJhcicgaXMgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciAke3BhcmFtcy5pbnRlbnRUeXBlfSBpbnRlbnRgKTtcbiAgICAgIGFzc2VydChwYXJhbXMuY2xpZW50T25ib2FyZGVyLCBgJ2NsaWVudE9uYm9hcmRlcicgaXMgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciAke3BhcmFtcy5pbnRlbnRUeXBlfSBpbnRlbnRgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbJ3RyYW5zZmVyT2ZmZXJXaXRoZHJhd24nLCAnYWxsb2NhdGlvbk9mZmVyV2l0aGRyYXduJ10uaW5jbHVkZXMocGFyYW1zLmludGVudFR5cGUpICYmXG4gICAgICBiYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gJ2NhbnRvbidcbiAgICApIHtcbiAgICAgIGFzc2VydChwYXJhbXMudHJhbnNmZXJPZmZlcklkLCBgJ3RyYW5zZmVyT2ZmZXJJZCcgaXMgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciAke3BhcmFtcy5pbnRlbnRUeXBlfSBpbnRlbnRgKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmludGVudFR5cGUgPT09ICdjYW50b25Db21tYW5kJykge1xuICAgICAgYXNzZXJ0KGJhc2VDb2luLmdldEZhbWlseSgpID09PSAnY2FudG9uJywgYCdjYW50b25Db21tYW5kJyBpbnRlbnQgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRoZSBjYW50b24gY29pbiBmYW1pbHlgKTtcblxuICAgICAgY29uc3QgeyBjYW50b25Db21tYW5kUGFyYW1zIH0gPSBwYXJhbXM7XG4gICAgICBhc3NlcnQoY2FudG9uQ29tbWFuZFBhcmFtcywgYCdjYW50b25Db21tYW5kUGFyYW1zJyBpcyByZXF1aXJlZCBmb3IgJHtwYXJhbXMuaW50ZW50VHlwZX0gaW50ZW50YCk7XG5cbiAgICAgIGNvbnN0IGlzUGxhaW5PYmplY3QgPSAodjogdW5rbm93bik6IGJvb2xlYW4gPT5cbiAgICAgICAgdiAhPT0gbnVsbCAmJiB2ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpO1xuXG4gICAgICBjb25zdCB7IGNvbW1hbmQsIGFjdEFzIH0gPSBjYW50b25Db21tYW5kUGFyYW1zO1xuICAgICAgYXNzZXJ0KGlzUGxhaW5PYmplY3QoY29tbWFuZCksIGAnY2FudG9uQ29tbWFuZFBhcmFtcy5jb21tYW5kJyBtdXN0IGJlIGEgbm9uLW51bGwgcGxhaW4gb2JqZWN0YCk7XG5cbiAgICAgIGNvbnN0IGhhc0NyZWF0ZSA9ICdDcmVhdGVDb21tYW5kJyBpbiBjb21tYW5kICYmIGlzUGxhaW5PYmplY3QoY29tbWFuZFsnQ3JlYXRlQ29tbWFuZCddKTtcbiAgICAgIGNvbnN0IGhhc0V4ZXJjaXNlID0gJ0V4ZXJjaXNlQ29tbWFuZCcgaW4gY29tbWFuZCAmJiBpc1BsYWluT2JqZWN0KGNvbW1hbmRbJ0V4ZXJjaXNlQ29tbWFuZCddKTtcbiAgICAgIGFzc2VydChcbiAgICAgICAgaGFzQ3JlYXRlICE9PSBoYXNFeGVyY2lzZSxcbiAgICAgICAgYCdjYW50b25Db21tYW5kUGFyYW1zLmNvbW1hbmQnIG11c3QgY29udGFpbiBleGFjdGx5IG9uZSBvZiBDcmVhdGVDb21tYW5kIG9yIEV4ZXJjaXNlQ29tbWFuZCBhcyBhIG5vbi1udWxsIHBsYWluIG9iamVjdGBcbiAgICAgICk7XG5cbiAgICAgIGFzc2VydChcbiAgICAgICAgQXJyYXkuaXNBcnJheShhY3RBcykgJiYgYWN0QXMubGVuZ3RoID4gMCAmJiBhY3RBcy5ldmVyeSgocCkgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnICYmIHAudHJpbSgpICE9PSAnJyksXG4gICAgICAgIGAnY2FudG9uQ29tbWFuZFBhcmFtcy5hY3RBcycgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyBmb3IgJHtwYXJhbXMuaW50ZW50VHlwZX0gaW50ZW50YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhW1xuICAgICAgICAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgJ2ZpbGxOb25jZScsXG4gICAgICAgICd0cmFuc2ZlclRva2VuJyxcbiAgICAgICAgJ3Rva2VuQXBwcm92YWwnLFxuICAgICAgICAnY3VzdG9tVHgnLFxuICAgICAgICAndHJhbnNmZXJBY2NlcHQnLFxuICAgICAgICAndHJhbnNmZXJSZWplY3QnLFxuICAgICAgICAndHJhbnNmZXJPZmZlcldpdGhkcmF3bicsXG4gICAgICAgICdjb3NpZ25EZWxlZ2F0aW9uQWNjZXB0JyxcbiAgICAgICAgJ2FsbG9jYXRpb25BbGxvY2F0ZScsXG4gICAgICAgICdhbGxvY2F0aW9uT2ZmZXJXaXRoZHJhd24nLFxuICAgICAgICAnYnJpZGdlRnVuZHMnLFxuICAgICAgICAnY2FudG9uQ29tbWFuZCcsXG4gICAgICAgICdjYW50b25FbmRJbnZlc3Rvck9uYm9hcmRpbmdPZmZlcicsXG4gICAgICAgICdjYW50b25FbmRJbnZlc3Rvck9uYm9hcmRpbmdBY2NlcHQnLFxuICAgICAgICAnY2FudG9uRW5kSW52ZXN0b3JPbmJvYXJkaW5nUmVqZWN0JyxcbiAgICAgICAgJ2NhbnRvblBhcnRpY2lwYW50T25ib2FyZGluZ1JlcXVlc3QnLFxuICAgICAgICAnZGVmaS1hcHByb3ZlJyxcbiAgICAgICAgJ2RlZmktZGVwb3NpdCcsXG4gICAgICAgICdkZWZpLXdpdGhkcmF3JyxcbiAgICAgICAgJ3dyYXBBcHByb3ZlJyxcbiAgICAgICAgJ3dyYXAnLFxuICAgICAgXS5pbmNsdWRlcyhwYXJhbXMuaW50ZW50VHlwZSlcbiAgICApIHtcbiAgICAgIGFzc2VydChwYXJhbXMucmVjaXBpZW50cywgYCdyZWNpcGllbnRzJyBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgJHtwYXJhbXMuaW50ZW50VHlwZX0gaW50ZW50YCk7XG4gICAgfVxuICAgIGNvbnN0IGludGVudFJlY2lwaWVudHMgPSBwYXJhbXMucmVjaXBpZW50cz8ubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFJlY2lwaWVudDogSW50ZW50UmVjaXBpZW50ID0ge1xuICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6IHJlY2lwaWVudC5hZGRyZXNzIH0sXG4gICAgICAgIGFtb3VudDogeyB2YWx1ZTogYCR7cmVjaXBpZW50LmFtb3VudH1gLCBzeW1ib2w6IHJlY2lwaWVudC50b2tlbk5hbWUgPyByZWNpcGllbnQudG9rZW5OYW1lIDogY2hhaW4gfSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZWNpcGllbnQuZGF0YSkge1xuICAgICAgICBmb3JtYXR0ZWRSZWNpcGllbnQuZGF0YSA9IHJlY2lwaWVudC5kYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHRva2VuRGF0YSB9ID0gcmVjaXBpZW50O1xuICAgICAgaWYgKHRva2VuRGF0YSAmJiAodG9rZW5EYXRhLnRva2VuQ29udHJhY3RBZGRyZXNzIHx8IHRva2VuRGF0YS50b2tlbk5hbWUpKSB7XG4gICAgICAgIC8vIHRva2VuIHJlbGF0ZWQgcmVjaXBpZW50IGRhdGEgZ2V0cyB2YWxpZGF0ZWQgaW4gV1BcbiAgICAgICAgaWYgKCEodG9rZW5EYXRhLnRva2VuVHlwZSAmJiB0b2tlbkRhdGEudG9rZW5RdWFudGl0eSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAndG9rZW4gdHlwZSBhbmQgcXVhbnRpdHkgaXMgcmVxdWlyZWQgdG8gcmVxdWVzdCBhIHRyYW5zYWN0aW9uIHdpdGggaW50ZW50IHRvIHRyYW5zZmVyIGEgdG9rZW4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbkRhdGEudG9rZW5OYW1lID0gdGhpcy5nZXRUb2tlbk5hbWUoYmFzZUNvaW4sIHRva2VuRGF0YSk7XG4gICAgICAgIGlmICh0b2tlbkRhdGEudG9rZW5OYW1lKSB7XG4gICAgICAgICAgZm9ybWF0dGVkUmVjaXBpZW50LmFtb3VudC5zeW1ib2wgPSB0b2tlbkRhdGEudG9rZW5OYW1lO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1hdHRlZFJlY2lwaWVudC50b2tlbkRhdGEgPSB0b2tlbkRhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVkUmVjaXBpZW50O1xuICAgIH0pO1xuXG4gICAgY29uc3QgYmFzZUludGVudDogUG9wdWxhdGVkSW50ZW50ID0ge1xuICAgICAgaW50ZW50VHlwZTogcGFyYW1zLmludGVudFR5cGUsXG4gICAgICBzZXF1ZW5jZUlkOiBwYXJhbXMuc2VxdWVuY2VJZCxcbiAgICAgIGNvbW1lbnQ6IHBhcmFtcy5jb21tZW50LFxuICAgICAgbm9uY2U6IHBhcmFtcy5ub25jZSxcbiAgICAgIHJlY2lwaWVudHM6IGludGVudFJlY2lwaWVudHMsXG4gICAgICB0b2tlbk5hbWU6IHBhcmFtcy50b2tlbk5hbWUsXG4gICAgICBpc1Rlc3RUcmFuc2FjdGlvbjogcGFyYW1zLmlzVGVzdFRyYW5zYWN0aW9uLFxuICAgIH07XG5cbiAgICBpZiAoYmFzZUNvaW4uaXNFVk0oKSAmJiBiYXNlQ29pbi5zdXBwb3J0c1RzcygpKSB7XG4gICAgICBzd2l0Y2ggKHBhcmFtcy5pbnRlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3BheW1lbnQnOlxuICAgICAgICBjYXNlICd0cmFuc2ZlclRva2VuJzpcbiAgICAgICAgY2FzZSAnZmlsbE5vbmNlJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZUludGVudCxcbiAgICAgICAgICAgIHNlbGZTZW5kOiBwYXJhbXMuc2VsZlNlbmQsXG4gICAgICAgICAgICBmZWVPcHRpb25zOiBwYXJhbXMuZmVlT3B0aW9ucyxcbiAgICAgICAgICAgIGZlZVRva2VuOiBwYXJhbXMuZmVlVG9rZW4sXG4gICAgICAgICAgICBob3BQYXJhbXM6IHBhcmFtcy5ob3BQYXJhbXMsXG4gICAgICAgICAgICBpc1RzczogcGFyYW1zLmlzVHNzLFxuICAgICAgICAgICAgbm9uY2U6IHBhcmFtcy5ub25jZSxcbiAgICAgICAgICAgIGN1c3RvZGlhblRyYW5zYWN0aW9uSWQ6IHBhcmFtcy5jdXN0b2RpYW5UcmFuc2FjdGlvbklkLFxuICAgICAgICAgICAgcmVjZWl2ZUFkZHJlc3M6IHBhcmFtcy5yZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdhY2NlbGVyYXRpb24nOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlSW50ZW50LFxuICAgICAgICAgICAgdHhpZDogcGFyYW1zLmxvd0ZlZVR4aWQsXG4gICAgICAgICAgICByZWNlaXZlQWRkcmVzczogcGFyYW1zLnJlY2VpdmVBZGRyZXNzLFxuICAgICAgICAgICAgZmVlT3B0aW9uczogcGFyYW1zLmZlZU9wdGlvbnMsXG4gICAgICAgICAgICBmZWVUb2tlbjogcGFyYW1zLmZlZVRva2VuLFxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgJ3Rva2VuQXBwcm92YWwnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlSW50ZW50LFxuICAgICAgICAgICAgdG9rZW5OYW1lOiBwYXJhbXMudG9rZW5OYW1lLFxuICAgICAgICAgICAgZmVlT3B0aW9uczogcGFyYW1zLmZlZU9wdGlvbnMsXG4gICAgICAgICAgICBmZWVUb2tlbjogcGFyYW1zLmZlZVRva2VuLFxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgJ2JyaWRnZUZ1bmRzJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZUludGVudCxcbiAgICAgICAgICAgIGFtb3VudDogcGFyYW1zLmFtb3VudCxcbiAgICAgICAgICAgIGZlZU9wdGlvbnM6IHBhcmFtcy5mZWVPcHRpb25zLFxuICAgICAgICAgICAgZmVlVG9rZW46IHBhcmFtcy5mZWVUb2tlbixcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdleHBvcnQnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlSW50ZW50LFxuICAgICAgICAgICAgZmVlT3B0aW9uczogcGFyYW1zLmZlZU9wdGlvbnMsXG4gICAgICAgICAgICBmZWVUb2tlbjogcGFyYW1zLmZlZVRva2VuLFxuICAgICAgICAgICAgbm9uY2U6IHBhcmFtcy5ub25jZSxcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdlbmFibGVUb2tlbic6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2VJbnRlbnQsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IHBhcmFtcy5lbmFibGVUb2tlbnMsXG4gICAgICAgICAgICBmZWVPcHRpb25zOiBwYXJhbXMuZmVlT3B0aW9ucyxcbiAgICAgICAgICAgIGZlZVRva2VuOiBwYXJhbXMuZmVlVG9rZW4sXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnZGVmaS1hcHByb3ZlJzpcbiAgICAgICAgY2FzZSAnZGVmaS1kZXBvc2l0Jzoge1xuICAgICAgICAgIGFzc2VydChwYXJhbXMuZGVmaVBhcmFtcywgYCdkZWZpUGFyYW1zJyBpcyByZXF1aXJlZCBmb3IgJHtwYXJhbXMuaW50ZW50VHlwZX0gaW50ZW50YCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2VJbnRlbnQsXG4gICAgICAgICAgICB2YXVsdElkOiBwYXJhbXMuZGVmaVBhcmFtcy52YXVsdElkLFxuICAgICAgICAgICAgYW1vdW50OiBwYXJhbXMuZGVmaVBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgICAuLi4ocGFyYW1zLmRlZmlQYXJhbXMub3BlcmF0aW9uSWQgJiYgeyBvcGVyYXRpb25JZDogcGFyYW1zLmRlZmlQYXJhbXMub3BlcmF0aW9uSWQgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdkZWZpLXdpdGhkcmF3Jzoge1xuICAgICAgICAgIGFzc2VydChwYXJhbXMuZGVmaVBhcmFtcywgYCdkZWZpUGFyYW1zJyBpcyByZXF1aXJlZCBmb3IgJHtwYXJhbXMuaW50ZW50VHlwZX0gaW50ZW50YCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2VJbnRlbnQsXG4gICAgICAgICAgICB2YXVsdElkOiBwYXJhbXMuZGVmaVBhcmFtcy52YXVsdElkLFxuICAgICAgICAgICAgLy8gRGVmaVdpdGhkcmF3SW50ZW50IHVzZXMgc2hhcmVUb2tlbkFtb3VudCAodmF1bHQgc2hhcmVzLCBiYXNlIHVuaXRzKVxuICAgICAgICAgICAgc2hhcmVUb2tlbkFtb3VudDogcGFyYW1zLmRlZmlQYXJhbXMuYW1vdW50LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnd3JhcEFwcHJvdmUnOlxuICAgICAgICBjYXNlICd3cmFwJzoge1xuICAgICAgICAgIGFzc2VydChwYXJhbXMud3JhcFBhcmFtcywgYCd3cmFwUGFyYW1zJyBpcyByZXF1aXJlZCBmb3IgJHtwYXJhbXMuaW50ZW50VHlwZX0gaW50ZW50YCk7XG4gICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgdHlwZW9mIHBhcmFtcy53cmFwUGFyYW1zLnRva2VuTmFtZSA9PT0gJ3N0cmluZycgJiYgcGFyYW1zLndyYXBQYXJhbXMudG9rZW5OYW1lLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBgJ3dyYXBQYXJhbXMudG9rZW5OYW1lJyBpcyByZXF1aXJlZCBmb3IgJHtwYXJhbXMuaW50ZW50VHlwZX0gaW50ZW50YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgdHlwZW9mIHBhcmFtcy53cmFwUGFyYW1zLmFtb3VudCA9PT0gJ3N0cmluZycgJiYgL15bMS05XVxcZCokLy50ZXN0KHBhcmFtcy53cmFwUGFyYW1zLmFtb3VudCksXG4gICAgICAgICAgICBgJ3dyYXBQYXJhbXMuYW1vdW50JyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBzdHJpbmcgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlSW50ZW50LFxuICAgICAgICAgICAgdG9rZW5OYW1lOiBwYXJhbXMud3JhcFBhcmFtcy50b2tlbk5hbWUsXG4gICAgICAgICAgICBhbW91bnQ6IHBhcmFtcy53cmFwUGFyYW1zLmFtb3VudCxcbiAgICAgICAgICAgIGZlZU9wdGlvbnM6IHBhcmFtcy5mZWVPcHRpb25zLFxuICAgICAgICAgICAgZmVlVG9rZW46IHBhcmFtcy5mZWVUb2tlbixcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbnRlbnQgdHlwZSAke3BhcmFtcy5pbnRlbnRUeXBlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYmFzZUNvaW4uc2V0Q29pblNwZWNpZmljRmllbGRzSW5JbnRlbnQoYmFzZUludGVudCwgcGFyYW1zKTtcblxuICAgIGlmIChwYXJhbXMuZmVlT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlSW50ZW50LFxuICAgICAgICBtZW1vOiBwYXJhbXMubWVtbz8udmFsdWUsXG4gICAgICAgIHRva2VuOiBwYXJhbXMudG9rZW5OYW1lLFxuICAgICAgICBlbmFibGVUb2tlbnM6IHBhcmFtcy5lbmFibGVUb2tlbnMsXG4gICAgICAgIGZlZU9wdGlvbnM6IHBhcmFtcy5mZWVPcHRpb25zLFxuICAgICAgICBmZWVUb2tlbjogcGFyYW1zLmZlZVRva2VuLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZUludGVudCxcbiAgICAgIG1lbW86IHBhcmFtcy5tZW1vPy52YWx1ZSxcbiAgICAgIHRva2VuOiBwYXJhbXMudG9rZW5OYW1lLFxuICAgICAgZW5hYmxlVG9rZW5zOiBwYXJhbXMuZW5hYmxlVG9rZW5zLFxuICAgICAgZmVlVG9rZW46IHBhcmFtcy5mZWVUb2tlbixcbiAgICB9O1xuICB9XG5cbiAgZ2V0VG9rZW5OYW1lKGJhc2VDb2luOiBJQmFzZUNvaW4sIHRva2VuRGF0YTogVG9rZW5UcmFuc2ZlclJlY2lwaWVudFBhcmFtcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRva2VuRGF0YS50b2tlbk5hbWUpIHtcbiAgICAgIHJldHVybiB0b2tlbkRhdGEudG9rZW5OYW1lO1xuICAgIH1cbiAgICBjb25zdCBuZXR3b3JrUHJlZml4ID0gYmFzZUNvaW4uZ2V0Q29uZmlnKCkubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5URVNUTkVUID8gJ3QnIDogJyc7XG4gICAgY29uc3QgdG9rZW5TdGF0aWNzS2V5ID0gYCR7bmV0d29ya1ByZWZpeH0ke2Jhc2VDb2luLmdldEZhbWlseSgpfToke3Rva2VuRGF0YS50b2tlbkNvbnRyYWN0QWRkcmVzc31gO1xuICAgIGlmIChjb2lucy5oYXModG9rZW5TdGF0aWNzS2V5KSkge1xuICAgICAgY29uc3QgdG9rZW5TdGF0aWNzID0gY29pbnMuZ2V0KHRva2VuU3RhdGljc0tleSk7XG4gICAgICB0b2tlbkRhdGEudG9rZW5OYW1lID0gdG9rZW5TdGF0aWNzLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbkRhdGEudG9rZW5OYW1lO1xuICB9XG59XG4iXX0=
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBjVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvbXBjVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxvREFBNEI7QUFDNUIscUNBQWtGO0FBSWxGLGlEQUFnRTtBQU9oRSxzREFBd0Y7QUFDeEYsaURBQXlEO0FBU3pELE1BQXNCLFFBQVE7SUFJNUIsWUFBWSxLQUFnQixFQUFFLFFBQW1CO1FBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFUyxLQUFLLENBQUMsbUJBQW1CLENBQUMsWUFBb0IsRUFBRSxVQUFxQztRQUM3RixNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBQSxxQkFBVyxFQUFDO1lBQzVDLGNBQWMsRUFBRSxZQUFZO1NBQzdCLENBQUMsQ0FBQztRQUNILE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFBLHdCQUFjLEVBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFdEYsTUFBTSxxQkFBcUIsR0FBRyxDQUM1QixNQUFNLElBQUEsaUJBQU8sRUFBQztZQUNaLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsY0FBYyxFQUFFLENBQUMsaUJBQWlCLENBQUM7WUFDbkMsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQ0gsQ0FBQyxJQUFJLENBQUM7UUFFUCxPQUFPLHFCQUFxQixDQUFDO0lBQy9CLENBQUM7SUFFUyxLQUFLLENBQUMsdUJBQXVCLENBQ3JDLFVBQXFDLEVBQ3JDLFlBQXVDLEVBQ3ZDLFlBQXlCLEVBQ3pCLGNBQTJCLEVBQzNCLE9BQWdCLEVBQ2hCLFVBQW1CO1FBRW5CLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxJQUFBLGdDQUFpQixFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMs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T0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzRixNQUFNLGVBQWUsR0FBRyxHQUFHLGFBQWEsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksU0FBUyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDcEcsSUFBSSxlQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxZQUFZLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoRCxTQUFTLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDMUMsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUFqWUQsNEJBaVlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgZGVjcnlwdCwgcmVhZE1lc3NhZ2UsIHJlYWRQcml2YXRlS2V5LCBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgSUJhc2VDb2luLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEFkZEtleWNoYWluT3B0aW9ucywgS2V5Y2hhaW4sIEtleVR5cGUsIFdlYmF1dGhuS2V5RW5jcnlwdGlvbkluZm8gfSBmcm9tICcuLi9rZXljaGFpbic7XG5pbXBvcnQgeyBlbmNyeXB0VGV4dCwgZ2V0Qml0Z29HcGdQdWJLZXkgfSBmcm9tICcuL29wZW5ncGdVdGlscyc7XG5pbXBvcnQge1xuICBJbnRlbnRSZWNpcGllbnQsXG4gIFBvcHVsYXRlZEludGVudCxcbiAgUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zLFxuICBUb2tlblRyYW5zZmVyUmVjaXBpZW50UGFyYW1zLFxufSBmcm9tICcuL3Rzcy9iYXNlVHlwZXMnO1xuaW1wb3J0IHsgZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZywgaXNCaXRnb01wY1B1YktleSB9IGZyb20gJy4uL3Rzcy9iaXRnb1B1YktleXMnO1xuaW1wb3J0IHsgY29pbnMsIE5ldHdvcmtUeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXBjS2V5U2hhcmUge1xuICBwdWJsaWNTaGFyZTogc3RyaW5nO1xuICBwcml2YXRlU2hhcmU6IHN0cmluZztcbiAgcHJpdmF0ZVNoYXJlUHJvb2Y/OiBzdHJpbmc7XG4gIHZzc1Byb29mPzogc3RyaW5nO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTXBjVXRpbHMge1xuICBwcm90ZWN0ZWQgYml0Z286IEJpdEdvQmFzZTtcbiAgcHJvdGVjdGVkIGJhc2VDb2luOiBJQmFzZUNvaW47XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgYmFzZUNvaW46IElCYXNlQ29pbikge1xuICAgIHRoaXMuYml0Z28gPSBiaXRnbztcbiAgICB0aGlzLmJhc2VDb2luID0gYmFzZUNvaW47XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZGVjcnlwdFByaXZhdGVTaGFyZShwcml2YXRlU2hhcmU6IHN0cmluZywgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcHJpdmF0ZVNoYXJlTWVzc2FnZSA9IGF3YWl0IHJlYWRNZXNzYWdlKHtcbiAgICAgIGFybW9yZWRNZXNzYWdlOiBwcml2YXRlU2hhcmUsXG4gICAgfSk7XG4gICAgY29uc3QgdXNlckdwZ1ByaXZhdGVLZXkgPSBhd2FpdCByZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IHVzZXJHcGdLZXkucHJpdmF0ZUtleSB9KTtcblxuICAgIGNvbnN0IGRlY3J5cHRlZFByaXZhdGVTaGFyZSA9IChcbiAgICAgIGF3YWl0IGRlY3J5cHQoe1xuICAgICAgICBtZXNzYWdlOiBwcml2YXRlU2hhcmVNZXNzYWdlLFxuICAgICAgICBkZWNyeXB0aW9uS2V5czogW3VzZXJHcGdQcml2YXRlS2V5XSxcbiAgICAgICAgZm9ybWF0OiAndXRmOCcsXG4gICAgICB9KVxuICAgICkuZGF0YTtcblxuICAgIHJldHVybiBkZWNyeXB0ZWRQcml2YXRlU2hhcmU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlQml0Z29LZXljaGFpbkluV1AoXG4gICAgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICBiYWNrdXBHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlcktleVNoYXJlOiBNcGNLZXlTaGFyZSxcbiAgICBiYWNrdXBLZXlTaGFyZTogTXBjS2V5U2hhcmUsXG4gICAga2V5VHlwZTogS2V5VHlwZSxcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiaXRnb0tleSA9IChhd2FpdCBnZXRCaXRnb0dwZ1B1YktleSh0aGlzLmJpdGdvKSkubXBjVjE7XG4gICAgaWYgKGVudlJlcXVpcmVzQml0Z29QdWJHcGdLZXlDb25maWcodGhpcy5iaXRnby5nZXRFbnYoKSkpIHtcbiAgICAgIC8vIEVuc3VyZSB0aGUgcHVibGljIGtleSBpcyBvbmUgb2YgdGhlIGV4cGVjdGVkIEJpdEdvIHB1YmxpYyBrZXlzIHdoZW4gaW4gdGVzdCBvciBwcm9kLlxuICAgICAgYXNzZXJ0KGlzQml0Z29NcGNQdWJLZXkoYml0Z29LZXkuYXJtb3IoKSwgJ21wY3YxJyksICdJbnZhbGlkIEJpdEdvIEdQRyBwdWJsaWMga2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IGVuY1VzZXJUb0JpdEdvTWVzc2FnZSA9IGF3YWl0IGVuY3J5cHRUZXh0KHVzZXJLZXlTaGFyZS5wcml2YXRlU2hhcmUsIGJpdGdvS2V5KTtcbiAgICBjb25zdCBlbmNCYWNrdXBUb0JpdEdvTWVzc2FnZSA9IGF3YWl0IGVuY3J5cHRUZXh0KGJhY2t1cEtleVNoYXJlLnByaXZhdGVTaGFyZSwgYml0Z29LZXkpO1xuXG4gICAgY29uc3QgY3JlYXRlQml0R29NUENQYXJhbXM6IEFkZEtleWNoYWluT3B0aW9ucyA9IHtcbiAgICAgIGtleVR5cGUsXG4gICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICBrZXlTaGFyZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZyb206ICd1c2VyJyxcbiAgICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgICBwdWJsaWNTaGFyZTogdXNlcktleVNoYXJlLnB1YmxpY1NoYXJlLFxuICAgICAgICAgIHByaXZhdGVTaGFyZTogZW5jVXNlclRvQml0R29NZXNzYWdlLFxuICAgICAgICAgIHByaXZhdGVTaGFyZVByb29mOiB1c2VyS2V5U2hhcmUucHJpdmF0ZVNoYXJlUHJvb2YsXG4gICAgICAgICAgdnNzUHJvb2Y6IHVzZXJLZXlTaGFyZS52c3NQcm9vZixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZyb206ICdiYWNrdXAnLFxuICAgICAgICAgIHRvOiAnYml0Z28nLFxuICAgICAgICAgIHB1YmxpY1NoYXJlOiBiYWNrdXBLZXlTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICBwcml2YXRlU2hhcmU6IGVuY0JhY2t1cFRvQml0R29NZXNzYWdlLFxuICAgICAgICAgIHByaXZhdGVTaGFyZVByb29mOiBiYWNrdXBLZXlTaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICAgICAgICB2c3NQcm9vZjogYmFja3VwS2V5U2hhcmUudnNzUHJvb2YsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdXNlckdQR1B1YmxpY0tleTogdXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBiYWNrdXBHUEdQdWJsaWNLZXk6IGJhY2t1cEdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBlbnRlcnByaXNlOiBlbnRlcnByaXNlLFxuICAgIH07XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKS5hZGQoY3JlYXRlQml0R29NUENQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgVXNlciwgQmFja3VwLCBhbmQgQml0R28gTVBDIEtleWNoYWlucy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy5wYXNzcGhyYXNlIC0gcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgc2lnbmluZyBtYXRlcmlhbHMgY3JlYXRlZCBmb3IgVXNlciBhbmQgQmFja3VwXG4gICAqIEBwYXJhbSBwYXJhbXMuZW50ZXJwcmlzZSAtIG9wdGlvbmFsIGVudGVycHJpc2UgaWQgdGhhdCB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBCaXRHbyBLZXljaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSAtIG9wdGlvbmFsIGVuY3J5cHRpb24gY29kZSB1c2VkIHRvIHJlc2V0IHRoZSB1c2VyJ3MgcGFzc3dvcmQsIGlmIGFic2VudCwgcGFzc3dvcmQgcmVjb3Zlcnkgd2lsbCBub3Qgd29ya1xuICAgKi9cbiAgYWJzdHJhY3QgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgICB3ZWJhdXRobkluZm8/OiBXZWJhdXRobktleUVuY3J5cHRpb25JbmZvO1xuICB9KTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PjtcblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiB3b3VsZCBiZSByZXNwb25zaWJsZSBmb3IgcG9wdWxhdGluZyBpbnRlbnRzXG4gICAqIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGNvaW4gLyBzaWcgc2NoZW1lIHRoZSBjb2luIHVzZXNcbiAgICogQHBhcmFtIHtJQmFzZUNvaW59IGJhc2VDb2luXG4gICAqIEBwYXJhbSB7UHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zfSBwYXJhbXNcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHVua25vd24+fVxuICAgKi9cbiAgcG9wdWxhdGVJbnRlbnQoYmFzZUNvaW46IElCYXNlQ29pbiwgcGFyYW1zOiBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMpOiBQb3B1bGF0ZWRJbnRlbnQge1xuICAgIGNvbnN0IGNoYWluID0gdGhpcy5iYXNlQ29pbi5nZXRDaGFpbigpO1xuXG4gICAgaWYgKHBhcmFtcy5pbnRlbnRUeXBlID09PSAnY3VzdG9tVHgnICYmIGJhc2VDb2luLmdldEZhbWlseSgpID09PSAnc29sJykge1xuICAgICAgY29uc3QgaGFzU29sSW5zdHJ1Y3Rpb25zID0gcGFyYW1zLnNvbEluc3RydWN0aW9ucyAmJiBwYXJhbXMuc29sSW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBoYXNWZXJzaW9uZWREYXRhID1cbiAgICAgICAgcGFyYW1zLnNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSAmJlxuICAgICAgICBwYXJhbXMuc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLnZlcnNpb25lZEluc3RydWN0aW9ucyAmJlxuICAgICAgICBwYXJhbXMuc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLnZlcnNpb25lZEluc3RydWN0aW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICBhc3NlcnQoXG4gICAgICAgIGhhc1NvbEluc3RydWN0aW9ucyB8fCBoYXNWZXJzaW9uZWREYXRhLFxuICAgICAgICBgJ3NvbEluc3RydWN0aW9ucycgb3IgJ3NvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YScgaXMgcmVxdWlyZWQgZm9yIGN1c3RvbVR4IGludGVudGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5pbnRlbnRUeXBlID09PSAnY3VzdG9tVHgnICYmIGJhc2VDb2luLmdldEZhbWlseSgpID09PSAnYXB0Jykge1xuICAgICAgYXNzZXJ0KFxuICAgICAgICBwYXJhbXMuYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgYCdhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zJyBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgY3VzdG9tVHggaW50ZW50YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgICd0cmFuc2ZlckFjY2VwdCcsXG4gICAgICAgICd0cmFuc2ZlclJlamVjdCcsXG4gICAgICAgICdjb3NpZ25EZWxlZ2F0aW9uQWNjZXB0JyxcbiAgICAgICAgJ2FsbG9jYXRpb25BbGxvY2F0ZScsXG4gICAgICAgICdjYW50b25FbmRJbnZlc3Rvck9uYm9hcmRpbmdBY2NlcHQnLFxuICAgICAgICAnY2FudG9uRW5kSW52ZXN0b3JPbmJvYXJkaW5nUmVqZWN0JyxcbiAgICAgIF0uaW5jbHVkZXMocGFyYW1zLmludGVudFR5cGUpICYmXG4gICAgICBiYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gJ2NhbnRvbidcbiAgICApIHtcbiAgICAgIGFzc2VydChwYXJhbXMudHhSZXF1ZXN0SWQsIGAndHhSZXF1ZXN0SWQnIGlzIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgJHtwYXJhbXMuaW50ZW50VHlwZX0gaW50ZW50YCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5pbnRlbnRUeXBlID09PSAnY2FudG9uRW5kSW52ZXN0b3JPbmJvYXJkaW5nT2ZmZXInKSB7XG4gICAgICBhc3NlcnQocGFyYW1zLmVuZEludmVzdG9yUGFydHlJZCwgYCdlbmRJbnZlc3RvclBhcnR5SWQnIGlzIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgJHtwYXJhbXMuaW50ZW50VHlwZX0gaW50ZW50YCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5pbnRlbnRUeXBlID09PSAnY2FudG9uRW5kSW52ZXN0b3JPbmJvYXJkaW5nUmVqZWN0Jykge1xuICAgICAgYXNzZXJ0KHBhcmFtcy5yZWFzb24sIGAncmVhc29uJyBpcyByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuaW50ZW50VHlwZSA9PT0gJ2NhbnRvblBhcnRpY2lwYW50T25ib2FyZGluZ1JlcXVlc3QnKSB7XG4gICAgICBhc3NlcnQocGFyYW1zLm9wZXJhdG9yLCBgJ29wZXJhdG9yJyBpcyByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgICAgYXNzZXJ0KHBhcmFtcy5wcm92aWRlciwgYCdwcm92aWRlcicgaXMgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciAke3BhcmFtcy5pbnRlbnRUeXBlfSBpbnRlbnRgKTtcbiAgICAgIGFzc2VydChwYXJhbXMuY29tcGxpYW5jZSwgYCdjb21wbGlhbmNlJyBpcyByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgICAgYXNzZXJ0KHBhcmFtcy5yZWdpc3RyYXIsIGAncmVnaXN0cmFyJyBpcyByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgICAgYXNzZXJ0KHBhcmFtcy5jbGllbnRPbmJvYXJkZXIsIGAnY2xpZW50T25ib2FyZGVyJyBpcyByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFsndHJhbnNmZXJPZmZlcldpdGhkcmF3bicsICdhbGxvY2F0aW9uT2ZmZXJXaXRoZHJhd24nXS5pbmNsdWRlcyhwYXJhbXMuaW50ZW50VHlwZSkgJiZcbiAgICAgIGJhc2VDb2luLmdldEZhbWlseSgpID09PSAnY2FudG9uJ1xuICAgICkge1xuICAgICAgYXNzZXJ0KHBhcmFtcy50cmFuc2Zlck9mZmVySWQsIGAndHJhbnNmZXJPZmZlcklkJyBpcyByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuaW50ZW50VHlwZSA9PT0gJ2NhbnRvbkNvbW1hbmQnKSB7XG4gICAgICBhc3NlcnQoYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdjYW50b24nLCBgJ2NhbnRvbkNvbW1hbmQnIGludGVudCBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGNhbnRvbiBjb2luIGZhbWlseWApO1xuXG4gICAgICBjb25zdCB7IGNhbnRvbkNvbW1hbmRQYXJhbXMgfSA9IHBhcmFtcztcbiAgICAgIGFzc2VydChjYW50b25Db21tYW5kUGFyYW1zLCBgJ2NhbnRvbkNvbW1hbmRQYXJhbXMnIGlzIHJlcXVpcmVkIGZvciAke3BhcmFtcy5pbnRlbnRUeXBlfSBpbnRlbnRgKTtcblxuICAgICAgY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2OiB1bmtub3duKTogYm9vbGVhbiA9PlxuICAgICAgICB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodik7XG5cbiAgICAgIGNvbnN0IHsgY29tbWFuZCwgYWN0QXMgfSA9IGNhbnRvbkNvbW1hbmRQYXJhbXM7XG4gICAgICBhc3NlcnQoaXNQbGFpbk9iamVjdChjb21tYW5kKSwgYCdjYW50b25Db21tYW5kUGFyYW1zLmNvbW1hbmQnIG11c3QgYmUgYSBub24tbnVsbCBwbGFpbiBvYmplY3RgKTtcblxuICAgICAgY29uc3QgaGFzQ3JlYXRlID0gJ0NyZWF0ZUNvbW1hbmQnIGluIGNvbW1hbmQgJiYgaXNQbGFpbk9iamVjdChjb21tYW5kWydDcmVhdGVDb21tYW5kJ10pO1xuICAgICAgY29uc3QgaGFzRXhlcmNpc2UgPSAnRXhlcmNpc2VDb21tYW5kJyBpbiBjb21tYW5kICYmIGlzUGxhaW5PYmplY3QoY29tbWFuZFsnRXhlcmNpc2VDb21tYW5kJ10pO1xuICAgICAgYXNzZXJ0KFxuICAgICAgICBoYXNDcmVhdGUgIT09IGhhc0V4ZXJjaXNlLFxuICAgICAgICBgJ2NhbnRvbkNvbW1hbmRQYXJhbXMuY29tbWFuZCcgbXVzdCBjb250YWluIGV4YWN0bHkgb25lIG9mIENyZWF0ZUNvbW1hbmQgb3IgRXhlcmNpc2VDb21tYW5kIGFzIGEgbm9uLW51bGwgcGxhaW4gb2JqZWN0YFxuICAgICAgKTtcblxuICAgICAgYXNzZXJ0KFxuICAgICAgICBBcnJheS5pc0FycmF5KGFjdEFzKSAmJiBhY3RBcy5sZW5ndGggPiAwICYmIGFjdEFzLmV2ZXJ5KChwKSA9PiB0eXBlb2YgcCA9PT0gJ3N0cmluZycgJiYgcC50cmltKCkgIT09ICcnKSxcbiAgICAgICAgYCdjYW50b25Db21tYW5kUGFyYW1zLmFjdEFzJyBtdXN0IGJlIGEgbm9uLWVtcHR5IGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIGZvciAke3BhcmFtcy5pbnRlbnRUeXBlfSBpbnRlbnRgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICFbXG4gICAgICAgICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAnZmlsbE5vbmNlJyxcbiAgICAgICAgJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgICAndG9rZW5BcHByb3ZhbCcsXG4gICAgICAgICdjdXN0b21UeCcsXG4gICAgICAgICd0cmFuc2ZlckFjY2VwdCcsXG4gICAgICAgICd0cmFuc2ZlclJlamVjdCcsXG4gICAgICAgICd0cmFuc2Zlck9mZmVyV2l0aGRyYXduJyxcbiAgICAgICAgJ2Nvc2lnbkRlbGVnYXRpb25BY2NlcHQnLFxuICAgICAgICAnYWxsb2NhdGlvbkFsbG9jYXRlJyxcbiAgICAgICAgJ2FsbG9jYXRpb25PZmZlcldpdGhkcmF3bicsXG4gICAgICAgICdicmlkZ2VGdW5kcycsXG4gICAgICAgICdjYW50b25Db21tYW5kJyxcbiAgICAgICAgJ2NhbnRvbkVuZEludmVzdG9yT25ib2FyZGluZ09mZmVyJyxcbiAgICAgICAgJ2NhbnRvbkVuZEludmVzdG9yT25ib2FyZGluZ0FjY2VwdCcsXG4gICAgICAgICdjYW50b25FbmRJbnZlc3Rvck9uYm9hcmRpbmdSZWplY3QnLFxuICAgICAgICAnY2FudG9uUGFydGljaXBhbnRPbmJvYXJkaW5nUmVxdWVzdCcsXG4gICAgICAgICdkZWZpLWFwcHJvdmUnLFxuICAgICAgICAnZGVmaS1kZXBvc2l0JyxcbiAgICAgICAgJ2RlZmktd2l0aGRyYXcnLFxuICAgICAgICAnd3JhcC1uYXRpdmUnLFxuICAgICAgICAndW53cmFwLW5hdGl2ZScsXG4gICAgICAgICd3cmFwQXBwcm92ZScsXG4gICAgICAgICd3cmFwJyxcbiAgICAgIF0uaW5jbHVkZXMocGFyYW1zLmludGVudFR5cGUpXG4gICAgKSB7XG4gICAgICBhc3NlcnQocGFyYW1zLnJlY2lwaWVudHMsIGAncmVjaXBpZW50cycgaXMgYSByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgIH1cbiAgICBjb25zdCBpbnRlbnRSZWNpcGllbnRzID0gcGFyYW1zLnJlY2lwaWVudHM/Lm1hcCgocmVjaXBpZW50KSA9PiB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRSZWNpcGllbnQ6IEludGVudFJlY2lwaWVudCA9IHtcbiAgICAgICAgYWRkcmVzczogeyBhZGRyZXNzOiByZWNpcGllbnQuYWRkcmVzcyB9LFxuICAgICAgICBhbW91bnQ6IHsgdmFsdWU6IGAke3JlY2lwaWVudC5hbW91bnR9YCwgc3ltYm9sOiByZWNpcGllbnQudG9rZW5OYW1lID8gcmVjaXBpZW50LnRva2VuTmFtZSA6IGNoYWluIH0sXG4gICAgICB9O1xuXG4gICAgICBpZiAocmVjaXBpZW50LmRhdGEpIHtcbiAgICAgICAgZm9ybWF0dGVkUmVjaXBpZW50LmRhdGEgPSByZWNpcGllbnQuZGF0YTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyB0b2tlbkRhdGEgfSA9IHJlY2lwaWVudDtcbiAgICAgIGlmICh0b2tlbkRhdGEgJiYgKHRva2VuRGF0YS50b2tlbkNvbnRyYWN0QWRkcmVzcyB8fCB0b2tlbkRhdGEudG9rZW5OYW1lKSkge1xuICAgICAgICAvLyB0b2tlbiByZWxhdGVkIHJlY2lwaWVudCBkYXRhIGdldHMgdmFsaWRhdGVkIGluIFdQXG4gICAgICAgIGlmICghKHRva2VuRGF0YS50b2tlblR5cGUgJiYgdG9rZW5EYXRhLnRva2VuUXVhbnRpdHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ3Rva2VuIHR5cGUgYW5kIHF1YW50aXR5IGlzIHJlcXVpcmVkIHRvIHJlcXVlc3QgYSB0cmFuc2FjdGlvbiB3aXRoIGludGVudCB0byB0cmFuc2ZlciBhIHRva2VuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5EYXRhLnRva2VuTmFtZSA9IHRoaXMuZ2V0VG9rZW5OYW1lKGJhc2VDb2luLCB0b2tlbkRhdGEpO1xuICAgICAgICBpZiAodG9rZW5EYXRhLnRva2VuTmFtZSkge1xuICAgICAgICAgIGZvcm1hdHRlZFJlY2lwaWVudC5hbW91bnQuc3ltYm9sID0gdG9rZW5EYXRhLnRva2VuTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtYXR0ZWRSZWNpcGllbnQudG9rZW5EYXRhID0gdG9rZW5EYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdHRlZFJlY2lwaWVudDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGJhc2VJbnRlbnQ6IFBvcHVsYXRlZEludGVudCA9IHtcbiAgICAgIGludGVudFR5cGU6IHBhcmFtcy5pbnRlbnRUeXBlLFxuICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgICBjb21tZW50OiBwYXJhbXMuY29tbWVudCxcbiAgICAgIG5vbmNlOiBwYXJhbXMubm9uY2UsXG4gICAgICByZWNpcGllbnRzOiBpbnRlbnRSZWNpcGllbnRzLFxuICAgICAgdG9rZW5OYW1lOiBwYXJhbXMudG9rZW5OYW1lLFxuICAgICAgaXNUZXN0VHJhbnNhY3Rpb246IHBhcmFtcy5pc1Rlc3RUcmFuc2FjdGlvbixcbiAgICB9O1xuXG4gICAgaWYgKGJhc2VDb2luLmlzRVZNKCkgJiYgYmFzZUNvaW4uc3VwcG9ydHNUc3MoKSkge1xuICAgICAgc3dpdGNoIChwYXJhbXMuaW50ZW50VHlwZSkge1xuICAgICAgICBjYXNlICdwYXltZW50JzpcbiAgICAgICAgY2FzZSAndHJhbnNmZXJUb2tlbic6XG4gICAgICAgIGNhc2UgJ2ZpbGxOb25jZSc6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2VJbnRlbnQsXG4gICAgICAgICAgICBzZWxmU2VuZDogcGFyYW1zLnNlbGZTZW5kLFxuICAgICAgICAgICAgZmVlT3B0aW9uczogcGFyYW1zLmZlZU9wdGlvbnMsXG4gICAgICAgICAgICBmZWVUb2tlbjogcGFyYW1zLmZlZVRva2VuLFxuICAgICAgICAgICAgaG9wUGFyYW1zOiBwYXJhbXMuaG9wUGFyYW1zLFxuICAgICAgICAgICAgaXNUc3M6IHBhcmFtcy5pc1RzcyxcbiAgICAgICAgICAgIG5vbmNlOiBwYXJhbXMubm9uY2UsXG4gICAgICAgICAgICBjdXN0b2RpYW5UcmFuc2FjdGlvbklkOiBwYXJhbXMuY3VzdG9kaWFuVHJhbnNhY3Rpb25JZCxcbiAgICAgICAgICAgIHJlY2VpdmVBZGRyZXNzOiBwYXJhbXMucmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnYWNjZWxlcmF0aW9uJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZUludGVudCxcbiAgICAgICAgICAgIHR4aWQ6IHBhcmFtcy5sb3dGZWVUeGlkLFxuICAgICAgICAgICAgcmVjZWl2ZUFkZHJlc3M6IHBhcmFtcy5yZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgICAgIGZlZU9wdGlvbnM6IHBhcmFtcy5mZWVPcHRpb25zLFxuICAgICAgICAgICAgZmVlVG9rZW46IHBhcmFtcy5mZWVUb2tlbixcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlICd0b2tlbkFwcHJvdmFsJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZUludGVudCxcbiAgICAgICAgICAgIHRva2VuTmFtZTogcGFyYW1zLnRva2VuTmFtZSxcbiAgICAgICAgICAgIGZlZU9wdGlvbnM6IHBhcmFtcy5mZWVPcHRpb25zLFxuICAgICAgICAgICAgZmVlVG9rZW46IHBhcmFtcy5mZWVUb2tlbixcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdicmlkZ2VGdW5kcyc6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2VJbnRlbnQsXG4gICAgICAgICAgICBhbW91bnQ6IHBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgICBmZWVPcHRpb25zOiBwYXJhbXMuZmVlT3B0aW9ucyxcbiAgICAgICAgICAgIGZlZVRva2VuOiBwYXJhbXMuZmVlVG9rZW4sXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnZXhwb3J0JzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZUludGVudCxcbiAgICAgICAgICAgIGZlZU9wdGlvbnM6IHBhcmFtcy5mZWVPcHRpb25zLFxuICAgICAgICAgICAgZmVlVG9rZW46IHBhcmFtcy5mZWVUb2tlbixcbiAgICAgICAgICAgIG5vbmNlOiBwYXJhbXMubm9uY2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnZW5hYmxlVG9rZW4nOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlSW50ZW50LFxuICAgICAgICAgICAgZW5hYmxlVG9rZW5zOiBwYXJhbXMuZW5hYmxlVG9rZW5zLFxuICAgICAgICAgICAgZmVlT3B0aW9uczogcGFyYW1zLmZlZU9wdGlvbnMsXG4gICAgICAgICAgICBmZWVUb2tlbjogcGFyYW1zLmZlZVRva2VuLFxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgJ2RlZmktYXBwcm92ZSc6XG4gICAgICAgIGNhc2UgJ2RlZmktZGVwb3NpdCc6IHtcbiAgICAgICAgICBhc3NlcnQocGFyYW1zLmRlZmlQYXJhbXMsIGAnZGVmaVBhcmFtcycgaXMgcmVxdWlyZWQgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlSW50ZW50LFxuICAgICAgICAgICAgdmF1bHRJZDogcGFyYW1zLmRlZmlQYXJhbXMudmF1bHRJZCxcbiAgICAgICAgICAgIGFtb3VudDogcGFyYW1zLmRlZmlQYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgLi4uKHBhcmFtcy5kZWZpUGFyYW1zLm9wZXJhdGlvbklkICYmIHsgb3BlcmF0aW9uSWQ6IHBhcmFtcy5kZWZpUGFyYW1zLm9wZXJhdGlvbklkIH0pLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnZGVmaS13aXRoZHJhdyc6IHtcbiAgICAgICAgICBhc3NlcnQocGFyYW1zLmRlZmlQYXJhbXMsIGAnZGVmaVBhcmFtcycgaXMgcmVxdWlyZWQgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlSW50ZW50LFxuICAgICAgICAgICAgdmF1bHRJZDogcGFyYW1zLmRlZmlQYXJhbXMudmF1bHRJZCxcbiAgICAgICAgICAgIC8vIERlZmlXaXRoZHJhd0ludGVudCB1c2VzIHNoYXJlVG9rZW5BbW91bnQgKHZhdWx0IHNoYXJlcywgYmFzZSB1bml0cylcbiAgICAgICAgICAgIHNoYXJlVG9rZW5BbW91bnQ6IHBhcmFtcy5kZWZpUGFyYW1zLmFtb3VudCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3dyYXAtbmF0aXZlJzpcbiAgICAgICAgY2FzZSAndW53cmFwLW5hdGl2ZSc6IHtcbiAgICAgICAgICBhc3NlcnQocGFyYW1zLmRlZmlQYXJhbXMsIGAnZGVmaVBhcmFtcycgaXMgcmVxdWlyZWQgZm9yICR7cGFyYW1zLmludGVudFR5cGV9IGludGVudGApO1xuICAgICAgICAgIC8vIFdyYXBOYXRpdmVJbnRlbnQgLyBVbndyYXBOYXRpdmVJbnRlbnQgY2FycnkgYSBwbGFpbiBgYW1vdW50YCAoYmFzZSB1bml0c1xuICAgICAgICAgIC8vIG9mIHRoZSBuYXRpdmUgY29pbiB3aGVuIHdyYXBwaW5nLCBvZiB0aGUgd3JhcHBlZCB0b2tlbiB3aGVuIHVud3JhcHBpbmcpLFxuICAgICAgICAgIC8vIG5vdCB0aGUgYHNoYXJlVG9rZW5BbW91bnRgIHRoYXQgZGVmaS13aXRoZHJhdyB1c2VzIGZvciB2YXVsdCBzaGFyZXMuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2VJbnRlbnQsXG4gICAgICAgICAgICB2YXVsdElkOiBwYXJhbXMuZGVmaVBhcmFtcy52YXVsdElkLFxuICAgICAgICAgICAgYW1vdW50OiBwYXJhbXMuZGVmaVBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICd3cmFwQXBwcm92ZSc6XG4gICAgICAgIGNhc2UgJ3dyYXAnOiB7XG4gICAgICAgICAgYXNzZXJ0KHBhcmFtcy53cmFwUGFyYW1zLCBgJ3dyYXBQYXJhbXMnIGlzIHJlcXVpcmVkIGZvciAke3BhcmFtcy5pbnRlbnRUeXBlfSBpbnRlbnRgKTtcbiAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zLndyYXBQYXJhbXMudG9rZW5OYW1lID09PSAnc3RyaW5nJyAmJiBwYXJhbXMud3JhcFBhcmFtcy50b2tlbk5hbWUubGVuZ3RoID4gMCxcbiAgICAgICAgICAgIGAnd3JhcFBhcmFtcy50b2tlbk5hbWUnIGlzIHJlcXVpcmVkIGZvciAke3BhcmFtcy5pbnRlbnRUeXBlfSBpbnRlbnRgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zLndyYXBQYXJhbXMuYW1vdW50ID09PSAnc3RyaW5nJyAmJiAvXlsxLTldXFxkKiQvLnRlc3QocGFyYW1zLndyYXBQYXJhbXMuYW1vdW50KSxcbiAgICAgICAgICAgIGAnd3JhcFBhcmFtcy5hbW91bnQnIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHN0cmluZyBmb3IgJHtwYXJhbXMuaW50ZW50VHlwZX0gaW50ZW50YFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2VJbnRlbnQsXG4gICAgICAgICAgICB0b2tlbk5hbWU6IHBhcmFtcy53cmFwUGFyYW1zLnRva2VuTmFtZSxcbiAgICAgICAgICAgIGFtb3VudDogcGFyYW1zLndyYXBQYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgZmVlT3B0aW9uczogcGFyYW1zLmZlZU9wdGlvbnMsXG4gICAgICAgICAgICBmZWVUb2tlbjogcGFyYW1zLmZlZVRva2VuLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGludGVudCB0eXBlICR7cGFyYW1zLmludGVudFR5cGV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlQ29pbi5zZXRDb2luU3BlY2lmaWNGaWVsZHNJbkludGVudChiYXNlSW50ZW50LCBwYXJhbXMpO1xuXG4gICAgaWYgKHBhcmFtcy5mZWVPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2VJbnRlbnQsXG4gICAgICAgIG1lbW86IHBhcmFtcy5tZW1vPy52YWx1ZSxcbiAgICAgICAgdG9rZW46IHBhcmFtcy50b2tlbk5hbWUsXG4gICAgICAgIGVuYWJsZVRva2VuczogcGFyYW1zLmVuYWJsZVRva2VucyxcbiAgICAgICAgZmVlT3B0aW9uczogcGFyYW1zLmZlZU9wdGlvbnMsXG4gICAgICAgIGZlZVRva2VuOiBwYXJhbXMuZmVlVG9rZW4sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5iYXNlSW50ZW50LFxuICAgICAgbWVtbzogcGFyYW1zLm1lbW8/LnZhbHVlLFxuICAgICAgdG9rZW46IHBhcmFtcy50b2tlbk5hbWUsXG4gICAgICBlbmFibGVUb2tlbnM6IHBhcmFtcy5lbmFibGVUb2tlbnMsXG4gICAgICBmZWVUb2tlbjogcGFyYW1zLmZlZVRva2VuLFxuICAgIH07XG4gIH1cblxuICBnZXRUb2tlbk5hbWUoYmFzZUNvaW46IElCYXNlQ29pbiwgdG9rZW5EYXRhOiBUb2tlblRyYW5zZmVyUmVjaXBpZW50UGFyYW1zKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodG9rZW5EYXRhLnRva2VuTmFtZSkge1xuICAgICAgcmV0dXJuIHRva2VuRGF0YS50b2tlbk5hbWU7XG4gICAgfVxuICAgIGNvbnN0IG5ldHdvcmtQcmVmaXggPSBiYXNlQ29pbi5nZXRDb25maWcoKS5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLlRFU1RORVQgPyAndCcgOiAnJztcbiAgICBjb25zdCB0b2tlblN0YXRpY3NLZXkgPSBgJHtuZXR3b3JrUHJlZml4fSR7YmFzZUNvaW4uZ2V0RmFtaWx5KCl9OiR7dG9rZW5EYXRhLnRva2VuQ29udHJhY3RBZGRyZXNzfWA7XG4gICAgaWYgKGNvaW5zLmhhcyh0b2tlblN0YXRpY3NLZXkpKSB7XG4gICAgICBjb25zdCB0b2tlblN0YXRpY3MgPSBjb2lucy5nZXQodG9rZW5TdGF0aWNzS2V5KTtcbiAgICAgIHRva2VuRGF0YS50b2tlbk5hbWUgPSB0b2tlblN0YXRpY3MubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuRGF0YS50b2tlbk5hbWU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -368,7 +368,7 @@ export interface PrebuildTransactionWithIntentOptions extends IntentOptionsBase
|
|
|
368
368
|
feeToken?: string;
|
|
369
369
|
/** Canton-specific params for the cantonCommand intent. */
|
|
370
370
|
cantonCommandParams?: CantonCommandParams;
|
|
371
|
-
/** DeFi vault intent fields for defi-
|
|
371
|
+
/** DeFi vault intent fields for defi-* and wrap-native / unwrap-native intents. */
|
|
372
372
|
defiParams?: DefiIntentParams;
|
|
373
373
|
/** ERC-7984 wrap / wrapApprove fields flattened onto the WP intent. */
|
|
374
374
|
wrapParams?: WrapIntentParams;
|