@bitgo-beta/statics 15.1.1-beta.15 → 15.1.1-beta.1500
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/account.d.ts +917 -73
- package/dist/src/account.d.ts.map +1 -1
- package/dist/src/account.js +1470 -175
- package/dist/src/ada.d.ts.map +1 -1
- package/dist/src/ada.js +9 -3
- package/dist/src/allCoinsAndTokens.d.ts +2 -0
- package/dist/src/allCoinsAndTokens.d.ts.map +1 -0
- package/dist/src/allCoinsAndTokens.js +1072 -0
- package/dist/src/avaxp.d.ts.map +1 -1
- package/dist/src/avaxp.js +10 -3
- package/dist/src/base.d.ts +2125 -35
- package/dist/src/base.d.ts.map +1 -1
- package/dist/src/base.js +2225 -51
- package/dist/src/canton.d.ts +34 -0
- package/dist/src/canton.d.ts.map +1 -0
- package/dist/src/canton.js +51 -0
- package/dist/src/coinFeatures.d.ts +110 -0
- package/dist/src/coinFeatures.d.ts.map +1 -0
- package/dist/src/coinFeatures.js +699 -0
- package/dist/src/coins/adaTokens.d.ts +2 -0
- package/dist/src/coins/adaTokens.d.ts.map +1 -0
- package/dist/src/coins/adaTokens.js +18 -0
- package/dist/src/coins/avaxTokens.d.ts +2 -0
- package/dist/src/coins/avaxTokens.d.ts.map +1 -0
- package/dist/src/coins/avaxTokens.js +126 -0
- package/dist/src/coins/botOfcTokens.d.ts +2 -0
- package/dist/src/coins/botOfcTokens.d.ts.map +1 -0
- package/dist/src/coins/botOfcTokens.js +5 -0
- package/dist/src/coins/botTokens.d.ts +3 -0
- package/dist/src/coins/botTokens.d.ts.map +1 -0
- package/dist/src/coins/botTokens.js +43 -0
- package/dist/src/coins/bscTokens.d.ts +2 -0
- package/dist/src/coins/bscTokens.d.ts.map +1 -0
- package/dist/src/coins/bscTokens.js +191 -0
- package/dist/src/coins/cosmosTokens.d.ts +2 -0
- package/dist/src/coins/cosmosTokens.d.ts.map +1 -0
- package/dist/src/coins/cosmosTokens.js +12 -0
- package/dist/src/coins/erc20Coins.d.ts +2 -0
- package/dist/src/coins/erc20Coins.d.ts.map +1 -0
- package/dist/src/coins/erc20Coins.js +1954 -0
- package/dist/src/coins/jettonTokens.d.ts +2 -0
- package/dist/src/coins/jettonTokens.d.ts.map +1 -0
- package/dist/src/coins/jettonTokens.js +18 -0
- package/dist/src/coins/nep141Tokens.d.ts +2 -0
- package/dist/src/coins/nep141Tokens.d.ts.map +1 -0
- package/dist/src/coins/nep141Tokens.js +16 -0
- package/dist/src/coins/ofcCoins.d.ts +2 -0
- package/dist/src/coins/ofcCoins.d.ts.map +1 -0
- package/dist/src/coins/ofcCoins.js +815 -0
- package/dist/src/coins/ofcErc20Coins.d.ts +3 -0
- package/dist/src/coins/ofcErc20Coins.d.ts.map +1 -0
- package/dist/src/coins/ofcErc20Coins.js +1626 -0
- package/dist/src/coins/polygonTokens.d.ts +2 -0
- package/dist/src/coins/polygonTokens.d.ts.map +1 -0
- package/dist/src/coins/polygonTokens.js +160 -0
- package/dist/src/coins/polyxTokens.d.ts +2 -0
- package/dist/src/coins/polyxTokens.d.ts.map +1 -0
- package/dist/src/coins/polyxTokens.js +21 -0
- package/dist/src/coins/sip10Tokens.d.ts +2 -0
- package/dist/src/coins/sip10Tokens.d.ts.map +1 -0
- package/dist/src/coins/sip10Tokens.js +25 -0
- package/dist/src/coins/solTokens.d.ts +3 -0
- package/dist/src/coins/solTokens.d.ts.map +1 -0
- package/dist/src/coins/solTokens.js +427 -0
- package/dist/src/coins/vetTokens.d.ts +2 -0
- package/dist/src/coins/vetTokens.d.ts.map +1 -0
- package/dist/src/coins/vetTokens.js +11 -0
- package/dist/src/coins.d.ts +11 -1
- package/dist/src/coins.d.ts.map +1 -1
- package/dist/src/coins.js +369 -1412
- package/dist/src/constants.d.ts +1 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +3 -2
- package/dist/src/flrp.d.ts +40 -0
- package/dist/src/flrp.d.ts.map +1 -0
- package/dist/src/flrp.js +65 -0
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +26 -3
- package/dist/src/lightning.d.ts +43 -0
- package/dist/src/lightning.d.ts.map +1 -0
- package/dist/src/lightning.js +60 -0
- package/dist/src/map.d.ts +10 -0
- package/dist/src/map.d.ts.map +1 -1
- package/dist/src/map.js +147 -17
- package/dist/src/networkFeatureMapForTokens.d.ts +3 -0
- package/dist/src/networkFeatureMapForTokens.d.ts.map +1 -0
- package/dist/src/networkFeatureMapForTokens.js +31 -0
- package/dist/src/networks.d.ts +1548 -60
- package/dist/src/networks.d.ts.map +1 -1
- package/dist/src/networks.js +1901 -65
- package/dist/src/ofc.d.ts +597 -3
- package/dist/src/ofc.d.ts.map +1 -1
- package/dist/src/ofc.js +1419 -28
- package/dist/src/tokenConfig.d.ts +257 -102
- package/dist/src/tokenConfig.d.ts.map +1 -1
- package/dist/src/tokenConfig.js +950 -202
- package/dist/src/utxo.d.ts +3 -1
- package/dist/src/utxo.d.ts.map +1 -1
- package/dist/src/utxo.js +85 -3
- package/dist/tsconfig.tsbuildinfo +1 -2744
- package/package.json +6 -3
- package/.mocharc.js +0 -10
- package/.prettierignore +0 -2
- package/CHANGELOG.md +0 -552
- package/dist/resources/dot/index.d.ts +0 -3
- package/dist/resources/dot/index.d.ts.map +0 -1
- package/dist/resources/dot/index.js +0 -15
- package/dist/resources/dot/mainnet.d.ts +0 -2
- package/dist/resources/dot/mainnet.d.ts.map +0 -1
- package/dist/resources/dot/mainnet.js +0 -5
- package/dist/resources/dot/westend.d.ts +0 -2
- package/dist/resources/dot/westend.d.ts.map +0 -1
- package/dist/resources/dot/westend.js +0 -5
- package/resources/dot/index.ts +0 -2
- package/resources/dot/mainnet.ts +0 -2
- package/resources/dot/westend.ts +0 -2
package/dist/src/tokenConfig.js
CHANGED
|
@@ -1,313 +1,949 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.testnetTokens = exports.mainnetTokens = exports.tokens = exports.
|
|
3
|
+
exports.testnetTokens = exports.mainnetTokens = exports.formattedAlgoTokens = exports.tokens = exports.getFormattedTokens = exports.getEthLikeTokens = exports.getFormattedEthLikeTokenConfig = exports.TokenTypeEnum = exports.getFormattedAlgoTokens = exports.ethGasConfigs = void 0;
|
|
4
|
+
exports.getFormattedTokenConfigForCoin = getFormattedTokenConfigForCoin;
|
|
4
5
|
const account_1 = require("./account");
|
|
5
6
|
const base_1 = require("./base");
|
|
6
7
|
const coins_1 = require("./coins");
|
|
7
8
|
const networks_1 = require("./networks");
|
|
8
9
|
const ofc_1 = require("./ofc");
|
|
10
|
+
function getErc20TokenConfig(coin) {
|
|
11
|
+
let baseCoin;
|
|
12
|
+
switch (coin.network.name) {
|
|
13
|
+
case networks_1.Networks.main.ethereum.name:
|
|
14
|
+
baseCoin = 'eth';
|
|
15
|
+
break;
|
|
16
|
+
case networks_1.Networks.test.kovan.name:
|
|
17
|
+
baseCoin = 'teth';
|
|
18
|
+
break;
|
|
19
|
+
case networks_1.Networks.test.goerli.name:
|
|
20
|
+
baseCoin = 'gteth';
|
|
21
|
+
break;
|
|
22
|
+
case networks_1.Networks.test.holesky.name:
|
|
23
|
+
case networks_1.Networks.test.hoodi.name:
|
|
24
|
+
baseCoin = 'hteth';
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
throw new Error(`Erc20 token ${coin.name} has an unsupported network`);
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
type: coin.name,
|
|
31
|
+
coin: baseCoin,
|
|
32
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
33
|
+
name: coin.fullName,
|
|
34
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
35
|
+
decimalPlaces: coin.decimalPlaces,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
9
38
|
// Get the list of ERC-20 tokens from statics and format it properly
|
|
10
|
-
const
|
|
39
|
+
const getFormattedErc20Tokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
11
40
|
if (coin instanceof account_1.Erc20Coin) {
|
|
12
|
-
|
|
13
|
-
switch (coin.network) {
|
|
14
|
-
case networks_1.Networks.main.ethereum:
|
|
15
|
-
baseCoin = 'eth';
|
|
16
|
-
break;
|
|
17
|
-
case networks_1.Networks.test.kovan:
|
|
18
|
-
baseCoin = 'teth';
|
|
19
|
-
break;
|
|
20
|
-
case networks_1.Networks.test.goerli:
|
|
21
|
-
baseCoin = 'gteth';
|
|
22
|
-
break;
|
|
23
|
-
default:
|
|
24
|
-
throw new Error(`Erc20 token ${coin.name} has an unsupported network`);
|
|
25
|
-
}
|
|
26
|
-
acc.push({
|
|
27
|
-
type: coin.name,
|
|
28
|
-
coin: baseCoin,
|
|
29
|
-
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
30
|
-
name: coin.fullName,
|
|
31
|
-
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
32
|
-
decimalPlaces: coin.decimalPlaces,
|
|
33
|
-
});
|
|
41
|
+
acc.push(getErc20TokenConfig(coin));
|
|
34
42
|
}
|
|
35
43
|
return acc;
|
|
36
44
|
}, []);
|
|
37
45
|
exports.ethGasConfigs = {
|
|
38
|
-
minimumGasPrice: 1000000000,
|
|
39
|
-
defaultGasPrice: 20000000000,
|
|
40
|
-
maximumGasPrice: 2500000000000,
|
|
41
|
-
defaultGasLimit: 500000,
|
|
42
|
-
defaultGasLimitTokenSend: 1000000,
|
|
43
|
-
minimumGasLimit: 30000,
|
|
46
|
+
minimumGasPrice: 1000000000, // minimum gas price a user can provide (1 Gwei)
|
|
47
|
+
defaultGasPrice: 20000000000, // default gas price if estimation fails (20 Gwei)
|
|
48
|
+
maximumGasPrice: 2500000000000, // minimum gas price a user can provide (2500 Gwei)
|
|
49
|
+
defaultGasLimit: 500000, // Default gas limit we set for contract send
|
|
50
|
+
defaultGasLimitTokenSend: 1000000, // Default gas limit we set for token send
|
|
51
|
+
minimumGasLimit: 30000, // minimum gas limit a user can set for a send
|
|
44
52
|
maximumGasLimit: 20000000, // Customers cannot set gas limits beyond this amount
|
|
53
|
+
newEthLikeCoinsMinGasLimit: 400000, // minimum gas limit a user can set for a send for eth like coins like arbitrum, optimism, etc
|
|
54
|
+
opethGasL1Fees: 1000000000000000, // Buffer for opeth L1 gas fees
|
|
45
55
|
};
|
|
56
|
+
function getStellarTokenConfig(coin) {
|
|
57
|
+
return {
|
|
58
|
+
type: coin.name,
|
|
59
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'xlm' : 'txlm',
|
|
60
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
61
|
+
name: coin.fullName,
|
|
62
|
+
decimalPlaces: coin.decimalPlaces,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
46
65
|
// Get the list of Stellar tokens from statics and format it properly
|
|
47
|
-
const
|
|
66
|
+
const getFormattedStellarTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
48
67
|
if (coin instanceof account_1.StellarCoin) {
|
|
49
|
-
acc.push(
|
|
50
|
-
type: coin.name,
|
|
51
|
-
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'xlm' : 'txlm',
|
|
52
|
-
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
53
|
-
name: coin.fullName,
|
|
54
|
-
decimalPlaces: coin.decimalPlaces,
|
|
55
|
-
});
|
|
68
|
+
acc.push(getStellarTokenConfig(coin));
|
|
56
69
|
}
|
|
57
70
|
return acc;
|
|
58
71
|
}, []);
|
|
72
|
+
function getOfcTokenConfig(coin) {
|
|
73
|
+
return {
|
|
74
|
+
type: coin.name,
|
|
75
|
+
coin: 'ofc',
|
|
76
|
+
backingCoin: coin.asset,
|
|
77
|
+
name: coin.fullName,
|
|
78
|
+
decimalPlaces: coin.decimalPlaces,
|
|
79
|
+
isFiat: coin.kind === base_1.CoinKind.FIAT,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
59
82
|
// Get the list of OFC tokens from statics and format it properly
|
|
60
|
-
const
|
|
83
|
+
const getFormattedOfcCoins = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
61
84
|
if (coin instanceof ofc_1.OfcCoin) {
|
|
62
|
-
acc.push(
|
|
63
|
-
type: coin.name,
|
|
64
|
-
coin: 'ofc',
|
|
65
|
-
backingCoin: coin.asset,
|
|
66
|
-
name: coin.fullName,
|
|
67
|
-
decimalPlaces: coin.decimalPlaces,
|
|
68
|
-
isFiat: coin.kind === base_1.CoinKind.FIAT,
|
|
69
|
-
});
|
|
85
|
+
acc.push(getOfcTokenConfig(coin));
|
|
70
86
|
}
|
|
71
87
|
return acc;
|
|
72
88
|
}, []);
|
|
73
|
-
|
|
89
|
+
function getCeloTokenConfig(coin) {
|
|
90
|
+
return {
|
|
91
|
+
type: coin.name,
|
|
92
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'celo' : 'tcelo',
|
|
93
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
94
|
+
name: coin.fullName,
|
|
95
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
96
|
+
decimalPlaces: coin.decimalPlaces,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const getFormattedCeloTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
74
100
|
if (coin instanceof account_1.CeloCoin) {
|
|
75
|
-
acc.push(
|
|
76
|
-
type: coin.name,
|
|
77
|
-
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'celo' : 'tcelo',
|
|
78
|
-
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
79
|
-
name: coin.fullName,
|
|
80
|
-
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
81
|
-
decimalPlaces: coin.decimalPlaces,
|
|
82
|
-
});
|
|
101
|
+
acc.push(getCeloTokenConfig(coin));
|
|
83
102
|
}
|
|
84
103
|
return acc;
|
|
85
104
|
}, []);
|
|
86
|
-
|
|
105
|
+
function getBscTokenConfig(coin) {
|
|
106
|
+
return {
|
|
107
|
+
type: coin.name,
|
|
108
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'bsc' : 'tbsc',
|
|
109
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
110
|
+
name: coin.fullName,
|
|
111
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
112
|
+
decimalPlaces: coin.decimalPlaces,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const getFormattedBscTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
87
116
|
if (coin instanceof account_1.BscCoin) {
|
|
88
|
-
acc.push(
|
|
89
|
-
type: coin.name,
|
|
90
|
-
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'bsc' : 'tbsc',
|
|
91
|
-
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
92
|
-
name: coin.fullName,
|
|
93
|
-
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
94
|
-
decimalPlaces: coin.decimalPlaces,
|
|
95
|
-
});
|
|
117
|
+
acc.push(getBscTokenConfig(coin));
|
|
96
118
|
}
|
|
97
119
|
return acc;
|
|
98
120
|
}, []);
|
|
99
|
-
|
|
121
|
+
function getEosTokenConfig(coin) {
|
|
122
|
+
return {
|
|
123
|
+
type: coin.name,
|
|
124
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'eos' : 'teos',
|
|
125
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
126
|
+
name: coin.fullName,
|
|
127
|
+
tokenContractAddress: coin.contractName.toString().toLowerCase(),
|
|
128
|
+
decimalPlaces: coin.decimalPlaces,
|
|
129
|
+
contractName: coin.contractName,
|
|
130
|
+
contractAddress: coin.contractAddress,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const getFormattedEosTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
100
134
|
if (coin instanceof account_1.EosCoin) {
|
|
101
|
-
acc.push(
|
|
102
|
-
type: coin.name,
|
|
103
|
-
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'eos' : 'teos',
|
|
104
|
-
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
105
|
-
name: coin.fullName,
|
|
106
|
-
tokenContractAddress: coin.contractName.toString().toLowerCase(),
|
|
107
|
-
decimalPlaces: coin.decimalPlaces,
|
|
108
|
-
});
|
|
135
|
+
acc.push(getEosTokenConfig(coin));
|
|
109
136
|
}
|
|
110
137
|
return acc;
|
|
111
138
|
}, []);
|
|
112
|
-
|
|
139
|
+
function getAvaxCTokenConfig(coin) {
|
|
140
|
+
return {
|
|
141
|
+
type: coin.name,
|
|
142
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'avaxc' : 'tavaxc',
|
|
143
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
144
|
+
name: coin.fullName,
|
|
145
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
146
|
+
decimalPlaces: coin.decimalPlaces,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
const getFormattedAvaxCTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
113
150
|
if (coin instanceof account_1.AvaxERC20Token) {
|
|
114
|
-
acc.push(
|
|
115
|
-
type: coin.name,
|
|
116
|
-
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'avaxc' : 'tavaxc',
|
|
117
|
-
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
118
|
-
name: coin.fullName,
|
|
119
|
-
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
120
|
-
decimalPlaces: coin.decimalPlaces,
|
|
121
|
-
});
|
|
151
|
+
acc.push(getAvaxCTokenConfig(coin));
|
|
122
152
|
}
|
|
123
153
|
return acc;
|
|
124
154
|
}, []);
|
|
125
|
-
|
|
155
|
+
function getPolygonTokenConfig(coin) {
|
|
156
|
+
return {
|
|
157
|
+
type: coin.name,
|
|
158
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'polygon' : 'tpolygon',
|
|
159
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
160
|
+
name: coin.fullName,
|
|
161
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
162
|
+
decimalPlaces: coin.decimalPlaces,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
const getFormattedPolygonTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
126
166
|
if (coin instanceof account_1.PolygonERC20Token ||
|
|
127
167
|
((coin instanceof account_1.Erc721Coin || coin instanceof account_1.Erc1155Coin) && coin.family === base_1.CoinFamily.POLYGON)) {
|
|
128
|
-
acc.push(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
168
|
+
acc.push(getPolygonTokenConfig(coin));
|
|
169
|
+
}
|
|
170
|
+
return acc;
|
|
171
|
+
}, []);
|
|
172
|
+
function getSoneiumTokenConfig(coin) {
|
|
173
|
+
return {
|
|
174
|
+
type: coin.name,
|
|
175
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'soneium' : 'tsoneium',
|
|
176
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
177
|
+
name: coin.fullName,
|
|
178
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
179
|
+
decimalPlaces: coin.decimalPlaces,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const getFormattedSoneiumTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
183
|
+
if ((coin instanceof account_1.Erc721Coin || coin instanceof account_1.Erc1155Coin) && coin.family === base_1.CoinFamily.SONEIUM) {
|
|
184
|
+
acc.push(getSoneiumTokenConfig(coin));
|
|
185
|
+
}
|
|
186
|
+
return acc;
|
|
187
|
+
}, []);
|
|
188
|
+
function getErc721TokenConfig(coin) {
|
|
189
|
+
return {
|
|
190
|
+
type: coin.name,
|
|
191
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'eth' : 'hteth',
|
|
192
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
193
|
+
name: coin.fullName,
|
|
194
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
195
|
+
decimalPlaces: coin.decimalPlaces,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
const getFormattedErc721Tokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
199
|
+
if (coin instanceof account_1.Erc721Coin && coin.family === base_1.CoinFamily.ETH) {
|
|
200
|
+
acc.push(getErc721TokenConfig(coin));
|
|
201
|
+
}
|
|
202
|
+
return acc;
|
|
203
|
+
}, []);
|
|
204
|
+
function getArbethTokenConfig(coin) {
|
|
205
|
+
return {
|
|
206
|
+
type: coin.name,
|
|
207
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'arbeth' : 'tarbeth',
|
|
208
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
209
|
+
name: coin.fullName,
|
|
210
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
211
|
+
decimalPlaces: coin.decimalPlaces,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
const getFormattedArbethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
215
|
+
if (coin instanceof account_1.ArbethERC20Token) {
|
|
216
|
+
acc.push(getArbethTokenConfig(coin));
|
|
217
|
+
}
|
|
218
|
+
return acc;
|
|
219
|
+
}, []);
|
|
220
|
+
function getOpethTokenConfig(coin) {
|
|
221
|
+
return {
|
|
222
|
+
type: coin.name,
|
|
223
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'opeth' : 'topeth',
|
|
224
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
225
|
+
name: coin.fullName,
|
|
226
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
227
|
+
decimalPlaces: coin.decimalPlaces,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
const getFormattedOpethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
231
|
+
if (coin instanceof account_1.OpethERC20Token) {
|
|
232
|
+
acc.push(getOpethTokenConfig(coin));
|
|
136
233
|
}
|
|
137
234
|
return acc;
|
|
138
235
|
}, []);
|
|
139
|
-
|
|
236
|
+
function getBaseethTokenConfig(coin) {
|
|
237
|
+
return {
|
|
238
|
+
type: coin.name,
|
|
239
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'baseeth' : 'tbaseeth',
|
|
240
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
241
|
+
name: coin.fullName,
|
|
242
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
243
|
+
decimalPlaces: coin.decimalPlaces,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
const getFormattedBaseethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
247
|
+
if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('baseeth:') || coin.name.includes('tbaseeth:'))) {
|
|
248
|
+
acc.push(getBaseethTokenConfig(coin));
|
|
249
|
+
}
|
|
250
|
+
return acc;
|
|
251
|
+
}, []);
|
|
252
|
+
function getOgTokenConfig(coin) {
|
|
253
|
+
return {
|
|
254
|
+
type: coin.name,
|
|
255
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'og' : 'tog',
|
|
256
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
257
|
+
name: coin.fullName,
|
|
258
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
259
|
+
decimalPlaces: coin.decimalPlaces,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
const getFormattedOgTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
263
|
+
if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('og:') || coin.name.includes('tog:'))) {
|
|
264
|
+
acc.push(getOgTokenConfig(coin));
|
|
265
|
+
}
|
|
266
|
+
return acc;
|
|
267
|
+
}, []);
|
|
268
|
+
function getSeievmTokenConfig(coin) {
|
|
269
|
+
return {
|
|
270
|
+
type: coin.name,
|
|
271
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'seievm' : 'tseievm',
|
|
272
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
273
|
+
name: coin.fullName,
|
|
274
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
275
|
+
decimalPlaces: coin.decimalPlaces,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
const getFormattedSeievmTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
279
|
+
if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('seievm:') || coin.name.includes('tseievm:'))) {
|
|
280
|
+
acc.push(getSeievmTokenConfig(coin));
|
|
281
|
+
}
|
|
282
|
+
return acc;
|
|
283
|
+
}, []);
|
|
284
|
+
function getMonadTokenConfig(coin) {
|
|
285
|
+
return {
|
|
286
|
+
type: coin.name,
|
|
287
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'mon' : 'tmon',
|
|
288
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
289
|
+
name: coin.fullName,
|
|
290
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
291
|
+
decimalPlaces: coin.decimalPlaces,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
const getFormattedMonadTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
295
|
+
if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('mon:') || coin.name.includes('tmon:'))) {
|
|
296
|
+
acc.push(getMonadTokenConfig(coin));
|
|
297
|
+
}
|
|
298
|
+
return acc;
|
|
299
|
+
}, []);
|
|
300
|
+
function getXdcTokenConfig(coin) {
|
|
301
|
+
return {
|
|
302
|
+
type: coin.name,
|
|
303
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'xdc' : 'txdc',
|
|
304
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
305
|
+
name: coin.fullName,
|
|
306
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
307
|
+
decimalPlaces: coin.decimalPlaces,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
const getFormattedXdcTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
311
|
+
if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('xdc:') || coin.name.includes('txdc:'))) {
|
|
312
|
+
acc.push(getXdcTokenConfig(coin));
|
|
313
|
+
}
|
|
314
|
+
return acc;
|
|
315
|
+
}, []);
|
|
316
|
+
function getFlowTokenConfig(coin) {
|
|
317
|
+
return {
|
|
318
|
+
type: coin.name,
|
|
319
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'flow' : 'tflow',
|
|
320
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
321
|
+
name: coin.fullName,
|
|
322
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
323
|
+
decimalPlaces: coin.decimalPlaces,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
const getFormattedFlowTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
327
|
+
if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('flow:') || coin.name.includes('tflow:'))) {
|
|
328
|
+
acc.push(getFlowTokenConfig(coin));
|
|
329
|
+
}
|
|
330
|
+
return acc;
|
|
331
|
+
}, []);
|
|
332
|
+
function getLineaethTokenConfig(coin) {
|
|
333
|
+
return {
|
|
334
|
+
type: coin.name,
|
|
335
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'lineaeth' : 'tlineaeth',
|
|
336
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
337
|
+
name: coin.fullName,
|
|
338
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
339
|
+
decimalPlaces: coin.decimalPlaces,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
const getFormattedLineaethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
343
|
+
if (coin instanceof account_1.EthLikeERC20Token && (coin.name.includes('lineaeth:') || coin.name.includes('tlineaeth:'))) {
|
|
344
|
+
acc.push(getLineaethTokenConfig(coin));
|
|
345
|
+
}
|
|
346
|
+
return acc;
|
|
347
|
+
}, []);
|
|
348
|
+
function getZkethTokenConfig(coin) {
|
|
349
|
+
return {
|
|
350
|
+
type: coin.name,
|
|
351
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'zketh' : 'tzketh',
|
|
352
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
353
|
+
name: coin.fullName,
|
|
354
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
355
|
+
decimalPlaces: coin.decimalPlaces,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
const getFormattedZkethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
359
|
+
if (coin instanceof account_1.ZkethERC20Token) {
|
|
360
|
+
acc.push(getZkethTokenConfig(coin));
|
|
361
|
+
}
|
|
362
|
+
return acc;
|
|
363
|
+
}, []);
|
|
364
|
+
function getBeraTokenConfig(coin) {
|
|
365
|
+
return {
|
|
366
|
+
type: coin.name,
|
|
367
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'bera' : 'tbera',
|
|
368
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
369
|
+
name: coin.fullName,
|
|
370
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
371
|
+
decimalPlaces: coin.decimalPlaces,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
const getFormattedBeraTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
375
|
+
if (coin instanceof account_1.BeraERC20Token) {
|
|
376
|
+
acc.push(getBeraTokenConfig(coin));
|
|
377
|
+
}
|
|
378
|
+
return acc;
|
|
379
|
+
}, []);
|
|
380
|
+
function getCoredaoTokenConfig(coin) {
|
|
381
|
+
return {
|
|
382
|
+
type: coin.name,
|
|
383
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'coredao' : 'tcoredao',
|
|
384
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
385
|
+
name: coin.fullName,
|
|
386
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
387
|
+
decimalPlaces: coin.decimalPlaces,
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
const getFormattedCoredaoTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
391
|
+
if (coin instanceof account_1.CoredaoERC20Token) {
|
|
392
|
+
acc.push(getCoredaoTokenConfig(coin));
|
|
393
|
+
}
|
|
394
|
+
return acc;
|
|
395
|
+
}, []);
|
|
396
|
+
function getWorldTokenConfig(coin) {
|
|
397
|
+
return {
|
|
398
|
+
type: coin.name,
|
|
399
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'world' : 'tworld',
|
|
400
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
401
|
+
name: coin.fullName,
|
|
402
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
403
|
+
decimalPlaces: coin.decimalPlaces,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
const getFormattedWorldTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
407
|
+
if (coin instanceof account_1.WorldERC20Token) {
|
|
408
|
+
acc.push(getWorldTokenConfig(coin));
|
|
409
|
+
}
|
|
410
|
+
return acc;
|
|
411
|
+
}, []);
|
|
412
|
+
function getFlrTokenConfig(coin) {
|
|
413
|
+
return {
|
|
414
|
+
type: coin.name,
|
|
415
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'flr' : 'tflr',
|
|
416
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
417
|
+
name: coin.fullName,
|
|
418
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
419
|
+
decimalPlaces: coin.decimalPlaces,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
const getFormattedFlrTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
423
|
+
if (coin instanceof account_1.FlrERC20Token) {
|
|
424
|
+
acc.push(getFlrTokenConfig(coin));
|
|
425
|
+
}
|
|
426
|
+
return acc;
|
|
427
|
+
}, []);
|
|
428
|
+
function getSolTokenConfig(coin) {
|
|
429
|
+
return {
|
|
430
|
+
type: coin.name,
|
|
431
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'sol' : 'tsol',
|
|
432
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
433
|
+
name: coin.fullName,
|
|
434
|
+
tokenAddress: coin.tokenAddress,
|
|
435
|
+
decimalPlaces: coin.decimalPlaces,
|
|
436
|
+
contractAddress: coin.contractAddress,
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
const getFormattedSolTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
140
440
|
if (coin instanceof account_1.SolCoin) {
|
|
141
|
-
acc.push(
|
|
142
|
-
type: coin.name,
|
|
143
|
-
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'sol' : 'tsol',
|
|
144
|
-
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
145
|
-
name: coin.fullName,
|
|
146
|
-
tokenAddress: coin.tokenAddress,
|
|
147
|
-
decimalPlaces: coin.decimalPlaces,
|
|
148
|
-
});
|
|
441
|
+
acc.push(getSolTokenConfig(coin));
|
|
149
442
|
}
|
|
150
443
|
return acc;
|
|
151
444
|
}, []);
|
|
152
|
-
|
|
445
|
+
function getAlgoTokenConfig(coin) {
|
|
446
|
+
return {
|
|
447
|
+
type: coin.name,
|
|
448
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'algo' : 'talgo',
|
|
449
|
+
alias: coin.alias,
|
|
450
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
451
|
+
name: coin.fullName,
|
|
452
|
+
decimalPlaces: coin.decimalPlaces,
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
const getFormattedAlgoTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
153
456
|
if (coin instanceof account_1.AlgoCoin) {
|
|
154
|
-
acc.push(
|
|
155
|
-
type: coin.name,
|
|
156
|
-
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'algo' : 'talgo',
|
|
157
|
-
alias: coin.alias,
|
|
158
|
-
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
159
|
-
name: coin.fullName,
|
|
160
|
-
decimalPlaces: coin.decimalPlaces,
|
|
161
|
-
});
|
|
457
|
+
acc.push(getAlgoTokenConfig(coin));
|
|
162
458
|
}
|
|
163
459
|
return acc;
|
|
164
460
|
}, []);
|
|
165
|
-
|
|
461
|
+
exports.getFormattedAlgoTokens = getFormattedAlgoTokens;
|
|
462
|
+
function getHbarTokenConfig(coin) {
|
|
463
|
+
return {
|
|
464
|
+
type: coin.name,
|
|
465
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'hbar' : 'thbar',
|
|
466
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
467
|
+
name: coin.fullName,
|
|
468
|
+
decimalPlaces: coin.decimalPlaces,
|
|
469
|
+
nodeAccountId: coin.nodeAccountId,
|
|
470
|
+
tokenId: coin.tokenId,
|
|
471
|
+
contractAddress: coin.contractAddress,
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
const getFormattedHbarTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
166
475
|
if (coin instanceof account_1.HederaToken) {
|
|
167
|
-
acc.push(
|
|
168
|
-
type: coin.name,
|
|
169
|
-
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'hbar' : 'thbar',
|
|
170
|
-
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
171
|
-
name: coin.fullName,
|
|
172
|
-
decimalPlaces: coin.decimalPlaces,
|
|
173
|
-
});
|
|
476
|
+
acc.push(getHbarTokenConfig(coin));
|
|
174
477
|
}
|
|
175
478
|
return acc;
|
|
176
479
|
}, []);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
480
|
+
function getAdaTokenConfig(coin) {
|
|
481
|
+
return {
|
|
482
|
+
type: coin.name,
|
|
483
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'ada' : 'tada',
|
|
484
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
485
|
+
name: coin.fullName,
|
|
486
|
+
policyId: coin.policyId,
|
|
487
|
+
assetName: coin.assetName,
|
|
488
|
+
decimalPlaces: coin.decimalPlaces,
|
|
489
|
+
contractAddress: coin.contractAddress,
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
const getFormattedAdaTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
493
|
+
if (coin instanceof account_1.AdaToken) {
|
|
494
|
+
acc.push(getAdaTokenConfig(coin));
|
|
188
495
|
}
|
|
189
496
|
return acc;
|
|
190
497
|
}, []);
|
|
191
|
-
|
|
498
|
+
function getTrxTokenConfig(coin) {
|
|
499
|
+
return {
|
|
500
|
+
type: coin.name,
|
|
501
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'trx' : 'ttrx',
|
|
502
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
503
|
+
name: coin.fullName,
|
|
504
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
505
|
+
decimalPlaces: coin.decimalPlaces,
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
const getFormattedTrxTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
192
509
|
if (coin instanceof account_1.TronErc20Coin) {
|
|
193
|
-
acc.push(
|
|
194
|
-
type: coin.name,
|
|
195
|
-
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'trx' : 'ttrx',
|
|
196
|
-
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
197
|
-
name: coin.fullName,
|
|
198
|
-
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
199
|
-
decimalPlaces: coin.decimalPlaces,
|
|
200
|
-
});
|
|
510
|
+
acc.push(getTrxTokenConfig(coin));
|
|
201
511
|
}
|
|
202
512
|
return acc;
|
|
203
513
|
}, []);
|
|
204
|
-
|
|
514
|
+
function getXrpTokenConfig(coin) {
|
|
515
|
+
return {
|
|
516
|
+
type: coin.name,
|
|
517
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'xrp' : 'txrp',
|
|
518
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
519
|
+
name: coin.fullName,
|
|
520
|
+
decimalPlaces: coin.decimalPlaces,
|
|
521
|
+
issuerAddress: coin.issuerAddress,
|
|
522
|
+
currencyCode: coin.currencyCode,
|
|
523
|
+
domain: coin.domain,
|
|
524
|
+
contractAddress: coin.contractAddress,
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
const getFormattedXrpTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
205
528
|
if (coin instanceof account_1.XrpCoin) {
|
|
206
|
-
acc.push(
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
529
|
+
acc.push(getXrpTokenConfig(coin));
|
|
530
|
+
}
|
|
531
|
+
return acc;
|
|
532
|
+
}, []);
|
|
533
|
+
function getSuiTokenConfig(coin) {
|
|
534
|
+
return {
|
|
535
|
+
type: coin.name,
|
|
536
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'sui' : 'tsui',
|
|
537
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
538
|
+
name: coin.fullName,
|
|
539
|
+
decimalPlaces: coin.decimalPlaces,
|
|
540
|
+
packageId: coin.packageId,
|
|
541
|
+
module: coin.module,
|
|
542
|
+
symbol: coin.symbol,
|
|
543
|
+
contractAddress: coin.contractAddress,
|
|
544
|
+
};
|
|
545
|
+
}
|
|
546
|
+
const getFormattedSuiTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
547
|
+
if (coin instanceof account_1.SuiCoin) {
|
|
548
|
+
acc.push(getSuiTokenConfig(coin));
|
|
549
|
+
}
|
|
550
|
+
return acc;
|
|
551
|
+
}, []);
|
|
552
|
+
function getTaoTokenConfig(coin) {
|
|
553
|
+
return {
|
|
554
|
+
type: coin.name,
|
|
555
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'tao' : 'ttao',
|
|
556
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
557
|
+
name: coin.fullName,
|
|
558
|
+
decimalPlaces: coin.decimalPlaces,
|
|
559
|
+
subnetId: coin.subnetId,
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
const getFormattedTaoTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
563
|
+
if (coin instanceof account_1.TaoCoin) {
|
|
564
|
+
acc.push(getTaoTokenConfig(coin));
|
|
565
|
+
}
|
|
566
|
+
return acc;
|
|
567
|
+
}, []);
|
|
568
|
+
function getPolyxTokenConfig(coin) {
|
|
569
|
+
return {
|
|
570
|
+
type: coin.name,
|
|
571
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'polyx' : 'tpolyx',
|
|
572
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
573
|
+
name: coin.fullName,
|
|
574
|
+
decimalPlaces: coin.decimalPlaces,
|
|
575
|
+
ticker: coin.ticker,
|
|
576
|
+
assetId: coin.assetId,
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
const getFormattedPolyxTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
580
|
+
if (coin instanceof account_1.PolyxCoin) {
|
|
581
|
+
acc.push(getPolyxTokenConfig(coin));
|
|
582
|
+
}
|
|
583
|
+
return acc;
|
|
584
|
+
}, []);
|
|
585
|
+
function getAptTokenConfig(coin) {
|
|
586
|
+
return {
|
|
587
|
+
type: coin.name,
|
|
588
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'apt' : 'tapt',
|
|
589
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
590
|
+
name: coin.fullName,
|
|
591
|
+
assetId: coin.assetId,
|
|
592
|
+
decimalPlaces: coin.decimalPlaces,
|
|
593
|
+
};
|
|
594
|
+
}
|
|
595
|
+
const getFormattedAptTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
596
|
+
if (coin instanceof account_1.AptCoin) {
|
|
597
|
+
acc.push(getAptTokenConfig(coin));
|
|
598
|
+
}
|
|
599
|
+
return acc;
|
|
600
|
+
}, []);
|
|
601
|
+
function getAptNFTCollectionConfig(coin) {
|
|
602
|
+
return {
|
|
603
|
+
type: coin.name,
|
|
604
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'apt' : 'tapt',
|
|
605
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
606
|
+
name: coin.fullName,
|
|
607
|
+
nftCollectionId: coin.nftCollectionId,
|
|
608
|
+
decimalPlaces: coin.decimalPlaces,
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
function getVetNFTCollectionConfig(coin) {
|
|
612
|
+
return {
|
|
613
|
+
type: coin.name,
|
|
614
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'vet' : 'tvet',
|
|
615
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
616
|
+
name: coin.fullName,
|
|
617
|
+
nftCollectionId: coin.nftCollectionId,
|
|
618
|
+
decimalPlaces: coin.decimalPlaces,
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
const getFormattedAptNFTCollections = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
622
|
+
if (coin instanceof account_1.AptNFTCollection) {
|
|
623
|
+
acc.push(getAptNFTCollectionConfig(coin));
|
|
624
|
+
}
|
|
625
|
+
return acc;
|
|
626
|
+
}, []);
|
|
627
|
+
const getFormattedVetNFTCollections = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
628
|
+
if (coin instanceof account_1.VetNFTCollection) {
|
|
629
|
+
acc.push(getVetNFTCollectionConfig(coin));
|
|
630
|
+
}
|
|
631
|
+
return acc;
|
|
632
|
+
}, []);
|
|
633
|
+
function getSip10TokenConfig(coin) {
|
|
634
|
+
return {
|
|
635
|
+
type: coin.name,
|
|
636
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'stx' : 'tstx',
|
|
637
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
638
|
+
name: coin.fullName,
|
|
639
|
+
assetId: coin.assetId,
|
|
640
|
+
decimalPlaces: coin.decimalPlaces,
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
const getFormattedSip10Tokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
644
|
+
if (coin instanceof account_1.Sip10Token) {
|
|
645
|
+
acc.push(getSip10TokenConfig(coin));
|
|
646
|
+
}
|
|
647
|
+
return acc;
|
|
648
|
+
}, []);
|
|
649
|
+
function getNep141TokenConfig(coin) {
|
|
650
|
+
return {
|
|
651
|
+
type: coin.name,
|
|
652
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'near' : 'tnear',
|
|
653
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
654
|
+
name: coin.fullName,
|
|
655
|
+
contractAddress: coin.contractAddress,
|
|
656
|
+
storageDepositAmount: coin.storageDepositAmount,
|
|
657
|
+
decimalPlaces: coin.decimalPlaces,
|
|
658
|
+
};
|
|
659
|
+
}
|
|
660
|
+
const getFormattedNep141Tokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
661
|
+
if (coin instanceof account_1.Nep141Token) {
|
|
662
|
+
acc.push(getNep141TokenConfig(coin));
|
|
663
|
+
}
|
|
664
|
+
return acc;
|
|
665
|
+
}, []);
|
|
666
|
+
function getVetTokenConfig(coin) {
|
|
667
|
+
return {
|
|
668
|
+
type: coin.name,
|
|
669
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'vet' : 'tvet',
|
|
670
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
671
|
+
name: coin.fullName,
|
|
672
|
+
contractAddress: coin.contractAddress,
|
|
673
|
+
decimalPlaces: coin.decimalPlaces,
|
|
674
|
+
};
|
|
675
|
+
}
|
|
676
|
+
const getFormattedVetTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
677
|
+
if (coin instanceof account_1.VetToken) {
|
|
678
|
+
acc.push(getVetTokenConfig(coin));
|
|
216
679
|
}
|
|
217
680
|
return acc;
|
|
218
681
|
}, []);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
682
|
+
const getFormattedCosmosChainTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
683
|
+
if (coin instanceof account_1.CosmosChainToken) {
|
|
684
|
+
acc.push(getCosmosTokenConfig(coin));
|
|
685
|
+
}
|
|
686
|
+
return acc;
|
|
687
|
+
}, []);
|
|
688
|
+
function getCosmosTokenConfig(coin) {
|
|
689
|
+
return {
|
|
690
|
+
type: coin.name,
|
|
691
|
+
coin: coin.name.split(':')[0].toLowerCase(),
|
|
692
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
693
|
+
name: coin.fullName,
|
|
694
|
+
denom: coin.denom,
|
|
695
|
+
decimalPlaces: coin.decimalPlaces,
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
function getJettonTokenConfig(coin) {
|
|
699
|
+
return {
|
|
700
|
+
type: coin.name,
|
|
701
|
+
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'ton' : 'tton',
|
|
702
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
703
|
+
name: coin.fullName,
|
|
704
|
+
contractAddress: coin.contractAddress,
|
|
705
|
+
decimalPlaces: coin.decimalPlaces,
|
|
706
|
+
};
|
|
707
|
+
}
|
|
708
|
+
const getFormattedJettonTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
|
|
709
|
+
if (coin instanceof account_1.JettonToken) {
|
|
710
|
+
acc.push(getJettonTokenConfig(coin));
|
|
711
|
+
}
|
|
712
|
+
return acc;
|
|
713
|
+
}, []);
|
|
714
|
+
var TokenTypeEnum;
|
|
715
|
+
(function (TokenTypeEnum) {
|
|
716
|
+
TokenTypeEnum["ERC20"] = "erc20";
|
|
717
|
+
TokenTypeEnum["ERC721"] = "erc721";
|
|
718
|
+
})(TokenTypeEnum || (exports.TokenTypeEnum = TokenTypeEnum = {}));
|
|
719
|
+
function getEthLikeTokenConfig(coin) {
|
|
720
|
+
return {
|
|
721
|
+
type: coin.name,
|
|
722
|
+
coin: coin.name.split(':')[0].toLowerCase(),
|
|
723
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
724
|
+
name: coin.fullName,
|
|
725
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
726
|
+
decimalPlaces: coin.decimalPlaces,
|
|
727
|
+
};
|
|
728
|
+
}
|
|
729
|
+
function getEthLikeERC721TokenConfig(coin) {
|
|
730
|
+
return {
|
|
731
|
+
type: coin.name,
|
|
732
|
+
coin: coin.name.split(':')[0].toLowerCase(),
|
|
733
|
+
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
|
|
734
|
+
name: coin.fullName,
|
|
735
|
+
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
|
|
736
|
+
decimalPlaces: coin.decimalPlaces,
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
const getFormattedEthLikeTokenConfig = (customCoinMap = coins_1.coins, tokenType) => {
|
|
740
|
+
let className;
|
|
741
|
+
if (tokenType === TokenTypeEnum.ERC20) {
|
|
742
|
+
className = account_1.EthLikeERC20Token;
|
|
743
|
+
}
|
|
744
|
+
else if (tokenType === TokenTypeEnum.ERC721) {
|
|
745
|
+
className = account_1.EthLikeERC721Token;
|
|
746
|
+
}
|
|
747
|
+
else {
|
|
748
|
+
throw new Error(`Unsupported token type: ${tokenType}`);
|
|
749
|
+
}
|
|
750
|
+
return customCoinMap.reduce((acc, coin) => {
|
|
751
|
+
if (coin instanceof className) {
|
|
752
|
+
if (tokenType === TokenTypeEnum.ERC20) {
|
|
753
|
+
acc.push(getEthLikeTokenConfig(coin));
|
|
754
|
+
}
|
|
755
|
+
else if (tokenType === TokenTypeEnum.ERC721) {
|
|
756
|
+
acc.push(getEthLikeERC721TokenConfig(coin));
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
return acc;
|
|
760
|
+
}, []);
|
|
761
|
+
};
|
|
762
|
+
exports.getFormattedEthLikeTokenConfig = getFormattedEthLikeTokenConfig;
|
|
763
|
+
/* Get all tokens of a given eth like coin for a given network */
|
|
764
|
+
const getEthLikeTokens = (network, tokenType) => {
|
|
765
|
+
let feature;
|
|
766
|
+
const networkTokens = (0, exports.getFormattedEthLikeTokenConfig)(coins_1.coins, tokenType).filter((token) => token.network === network);
|
|
767
|
+
if (tokenType === TokenTypeEnum.ERC20) {
|
|
768
|
+
feature = base_1.CoinFeature.SUPPORTS_ERC20;
|
|
769
|
+
}
|
|
770
|
+
else if (tokenType === TokenTypeEnum.ERC721) {
|
|
771
|
+
feature = base_1.CoinFeature.SUPPORTS_ERC721;
|
|
772
|
+
}
|
|
773
|
+
const ethLikeTokenMap = {};
|
|
774
|
+
// TODO: add IP token here and test changes (Ticket: https://bitgoinc.atlassian.net/browse/WIN-7835)
|
|
775
|
+
const enabledChains = ['ip', 'hypeevm', 'plume'];
|
|
776
|
+
coins_1.coins.forEach((coin) => {
|
|
777
|
+
// TODO: remove enabled chains once changes are done (Ticket: https://bitgoinc.atlassian.net/browse/WIN-7835)
|
|
778
|
+
if (coin instanceof account_1.AccountCoin && coin.features.includes(feature) && enabledChains.includes(coin.family)) {
|
|
779
|
+
const coinName = coin.family;
|
|
780
|
+
const coinNameForNetwork = network === 'Testnet' ? `t${coinName}` : coinName;
|
|
781
|
+
ethLikeTokenMap[coin.family] = {
|
|
782
|
+
tokens: networkTokens.filter((token) => token.coin === coinNameForNetwork),
|
|
783
|
+
};
|
|
784
|
+
}
|
|
785
|
+
});
|
|
786
|
+
return ethLikeTokenMap;
|
|
787
|
+
};
|
|
788
|
+
exports.getEthLikeTokens = getEthLikeTokens;
|
|
789
|
+
const mergeEthLikeTokenMap = (...maps) => {
|
|
790
|
+
const mergedMap = {};
|
|
791
|
+
maps.forEach((map) => {
|
|
792
|
+
Object.keys(map).forEach((key) => {
|
|
793
|
+
if (!mergedMap[key]) {
|
|
794
|
+
mergedMap[key] = { tokens: [] };
|
|
795
|
+
}
|
|
796
|
+
mergedMap[key].tokens.push(...map[key].tokens);
|
|
797
|
+
});
|
|
798
|
+
});
|
|
799
|
+
return mergedMap;
|
|
800
|
+
};
|
|
801
|
+
const getFormattedTokensByNetwork = (network, coinMap) => {
|
|
802
|
+
const networkType = network === 'Mainnet' ? networks_1.NetworkType.MAINNET : networks_1.NetworkType.TESTNET;
|
|
803
|
+
const ethLikeTokenMap = (0, exports.getEthLikeTokens)(network, TokenTypeEnum.ERC20);
|
|
804
|
+
const ethLikeErc721TokenMap = (0, exports.getEthLikeTokens)(network, TokenTypeEnum.ERC721);
|
|
805
|
+
return {
|
|
806
|
+
...mergeEthLikeTokenMap(ethLikeTokenMap, ethLikeErc721TokenMap),
|
|
222
807
|
eth: {
|
|
223
|
-
tokens:
|
|
808
|
+
tokens: getFormattedErc20Tokens(coinMap).filter((token) => token.network === network),
|
|
809
|
+
nfts: getFormattedErc721Tokens(coinMap).filter((token) => token.network === network),
|
|
224
810
|
},
|
|
225
811
|
xlm: {
|
|
226
|
-
tokens:
|
|
812
|
+
tokens: getFormattedStellarTokens(coinMap).filter((token) => token.network === network),
|
|
227
813
|
},
|
|
228
814
|
algo: {
|
|
229
|
-
tokens: exports.
|
|
815
|
+
tokens: (0, exports.getFormattedAlgoTokens)(coinMap).filter((token) => token.network === network),
|
|
230
816
|
},
|
|
231
817
|
ofc: {
|
|
232
|
-
tokens:
|
|
818
|
+
tokens: getFormattedOfcCoins(coinMap).filter((token) => coinMap.get(token.type).network.type === networkType),
|
|
233
819
|
},
|
|
234
820
|
celo: {
|
|
235
|
-
tokens:
|
|
821
|
+
tokens: getFormattedCeloTokens(coinMap).filter((token) => token.network === network),
|
|
236
822
|
},
|
|
237
823
|
bsc: {
|
|
238
|
-
tokens:
|
|
824
|
+
tokens: getFormattedBscTokens(coinMap).filter((token) => token.network === network),
|
|
239
825
|
},
|
|
240
826
|
eos: {
|
|
241
|
-
tokens:
|
|
827
|
+
tokens: getFormattedEosTokens(coinMap).filter((token) => token.network === network),
|
|
242
828
|
},
|
|
243
829
|
avaxc: {
|
|
244
|
-
tokens:
|
|
830
|
+
tokens: getFormattedAvaxCTokens(coinMap).filter((token) => token.network === network),
|
|
245
831
|
},
|
|
246
832
|
polygon: {
|
|
247
|
-
tokens:
|
|
833
|
+
tokens: getFormattedPolygonTokens(coinMap).filter((token) => token.network === network),
|
|
834
|
+
},
|
|
835
|
+
soneium: {
|
|
836
|
+
tokens: getFormattedSoneiumTokens(coinMap).filter((token) => token.network === network),
|
|
837
|
+
},
|
|
838
|
+
arbeth: {
|
|
839
|
+
tokens: getFormattedArbethTokens(coinMap).filter((token) => token.network === network),
|
|
840
|
+
},
|
|
841
|
+
opeth: {
|
|
842
|
+
tokens: getFormattedOpethTokens(coinMap).filter((token) => token.network === network),
|
|
843
|
+
},
|
|
844
|
+
baseeth: {
|
|
845
|
+
tokens: getFormattedBaseethTokens(coinMap).filter((token) => token.network === network),
|
|
846
|
+
},
|
|
847
|
+
og: {
|
|
848
|
+
tokens: getFormattedOgTokens(coinMap).filter((token) => token.network === network),
|
|
849
|
+
},
|
|
850
|
+
flow: {
|
|
851
|
+
tokens: getFormattedFlowTokens(coinMap).filter((token) => token.network === network),
|
|
852
|
+
},
|
|
853
|
+
mon: {
|
|
854
|
+
tokens: getFormattedMonadTokens(coinMap).filter((token) => token.network === network),
|
|
855
|
+
},
|
|
856
|
+
xdc: {
|
|
857
|
+
tokens: getFormattedXdcTokens(coinMap).filter((token) => token.network === network),
|
|
858
|
+
},
|
|
859
|
+
lineaeth: {
|
|
860
|
+
tokens: getFormattedLineaethTokens(coinMap).filter((token) => token.network === network),
|
|
861
|
+
},
|
|
862
|
+
seievm: {
|
|
863
|
+
tokens: getFormattedSeievmTokens(coinMap).filter((token) => token.network === network),
|
|
864
|
+
},
|
|
865
|
+
zketh: {
|
|
866
|
+
tokens: getFormattedZkethTokens(coinMap).filter((token) => token.network === network),
|
|
248
867
|
},
|
|
249
868
|
sol: {
|
|
250
|
-
tokens:
|
|
869
|
+
tokens: getFormattedSolTokens(coinMap).filter((token) => token.network === network),
|
|
251
870
|
},
|
|
252
871
|
hbar: {
|
|
253
|
-
tokens:
|
|
872
|
+
tokens: getFormattedHbarTokens(coinMap).filter((token) => token.network === network),
|
|
254
873
|
},
|
|
255
874
|
ada: {
|
|
256
|
-
tokens:
|
|
875
|
+
tokens: getFormattedAdaTokens(coinMap).filter((token) => token.network === network),
|
|
257
876
|
},
|
|
258
877
|
trx: {
|
|
259
|
-
tokens:
|
|
878
|
+
tokens: getFormattedTrxTokens(coinMap).filter((token) => token.network === network),
|
|
260
879
|
},
|
|
261
880
|
xrp: {
|
|
262
|
-
tokens:
|
|
881
|
+
tokens: getFormattedXrpTokens(coinMap).filter((token) => token.network === network),
|
|
263
882
|
},
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
testnet: {
|
|
267
|
-
eth: {
|
|
268
|
-
tokens: formattedErc20Tokens.filter((token) => token.network === 'Testnet'),
|
|
883
|
+
sui: {
|
|
884
|
+
tokens: getFormattedSuiTokens(coinMap).filter((token) => token.network === network),
|
|
269
885
|
},
|
|
270
|
-
|
|
271
|
-
tokens:
|
|
886
|
+
tao: {
|
|
887
|
+
tokens: getFormattedTaoTokens(coinMap).filter((token) => token.network === network),
|
|
272
888
|
},
|
|
273
|
-
|
|
274
|
-
tokens:
|
|
889
|
+
polyx: {
|
|
890
|
+
tokens: getFormattedPolyxTokens(coinMap).filter((token) => token.network === network),
|
|
275
891
|
},
|
|
276
|
-
|
|
277
|
-
tokens:
|
|
892
|
+
bera: {
|
|
893
|
+
tokens: getFormattedBeraTokens(coinMap).filter((token) => token.network === network),
|
|
278
894
|
},
|
|
279
|
-
|
|
280
|
-
tokens:
|
|
895
|
+
coredao: {
|
|
896
|
+
tokens: getFormattedCoredaoTokens(coinMap).filter((token) => token.network === network),
|
|
281
897
|
},
|
|
282
|
-
|
|
283
|
-
tokens:
|
|
898
|
+
world: {
|
|
899
|
+
tokens: getFormattedWorldTokens(coinMap).filter((token) => token.network === network),
|
|
284
900
|
},
|
|
285
|
-
|
|
286
|
-
tokens:
|
|
901
|
+
flr: {
|
|
902
|
+
tokens: getFormattedFlrTokens(coinMap).filter((token) => token.network === network),
|
|
287
903
|
},
|
|
288
|
-
|
|
289
|
-
tokens:
|
|
904
|
+
stx: {
|
|
905
|
+
tokens: getFormattedSip10Tokens(coinMap).filter((token) => token.network === network),
|
|
290
906
|
},
|
|
291
|
-
|
|
292
|
-
tokens:
|
|
907
|
+
near: {
|
|
908
|
+
tokens: getFormattedNep141Tokens(coinMap).filter((token) => token.network === network),
|
|
293
909
|
},
|
|
294
|
-
|
|
295
|
-
tokens:
|
|
910
|
+
cosmos: {
|
|
911
|
+
tokens: getFormattedCosmosChainTokens(coinMap).filter((token) => token.network === network),
|
|
296
912
|
},
|
|
297
|
-
|
|
298
|
-
tokens:
|
|
299
|
-
},
|
|
300
|
-
ada: {
|
|
301
|
-
tokens: formattedAdaTokens.filter((token) => token.network === 'Testnet'),
|
|
913
|
+
ton: {
|
|
914
|
+
tokens: getFormattedJettonTokens(coinMap).filter((token) => token.network === network),
|
|
302
915
|
},
|
|
303
|
-
|
|
304
|
-
|
|
916
|
+
};
|
|
917
|
+
};
|
|
918
|
+
const getFormattedTokens = (coinMap = coins_1.coins) => {
|
|
919
|
+
const formattedAptNFTCollections = getFormattedAptNFTCollections(coinMap);
|
|
920
|
+
const formattedVetNFTCollections = getFormattedVetNFTCollections(coinMap);
|
|
921
|
+
return {
|
|
922
|
+
bitcoin: {
|
|
923
|
+
...getFormattedTokensByNetwork('Mainnet', coinMap),
|
|
924
|
+
apt: {
|
|
925
|
+
tokens: getFormattedAptTokens(coinMap).filter((token) => token.network === 'Mainnet'),
|
|
926
|
+
nftCollections: formattedAptNFTCollections.filter((nftCollection) => nftCollection.network === 'Mainnet'),
|
|
927
|
+
},
|
|
928
|
+
vet: {
|
|
929
|
+
tokens: getFormattedVetTokens(coinMap).filter((token) => token.network === 'Mainnet'),
|
|
930
|
+
nftCollections: formattedVetNFTCollections.filter((nftCollection) => nftCollection.network === 'Mainnet'),
|
|
931
|
+
},
|
|
305
932
|
},
|
|
306
|
-
|
|
307
|
-
|
|
933
|
+
testnet: {
|
|
934
|
+
...getFormattedTokensByNetwork('Testnet', coinMap),
|
|
935
|
+
apt: {
|
|
936
|
+
tokens: getFormattedAptTokens(coinMap).filter((token) => token.network === 'Testnet'),
|
|
937
|
+
nftCollections: formattedAptNFTCollections.filter((nftCollection) => nftCollection.network === 'Testnet'),
|
|
938
|
+
},
|
|
939
|
+
vet: {
|
|
940
|
+
tokens: getFormattedVetTokens(coinMap).filter((token) => token.network === 'Testnet'),
|
|
941
|
+
nftCollections: formattedVetNFTCollections.filter((nftCollection) => nftCollection.network === 'Testnet'),
|
|
942
|
+
},
|
|
308
943
|
},
|
|
309
|
-
}
|
|
944
|
+
};
|
|
310
945
|
};
|
|
946
|
+
exports.getFormattedTokens = getFormattedTokens;
|
|
311
947
|
/**
|
|
312
948
|
* Verify mainnet or testnet tokens
|
|
313
949
|
* @param tokens
|
|
@@ -327,10 +963,122 @@ const verifyTokens = function (tokens) {
|
|
|
327
963
|
});
|
|
328
964
|
return verifiedTokens;
|
|
329
965
|
};
|
|
966
|
+
exports.tokens = (0, exports.getFormattedTokens)();
|
|
967
|
+
exports.formattedAlgoTokens = (0, exports.getFormattedAlgoTokens)();
|
|
330
968
|
const mainnetErc20Tokens = verifyTokens(exports.tokens.bitcoin.eth.tokens);
|
|
969
|
+
const mainnetErc721Tokens = verifyTokens(exports.tokens.bitcoin.eth.nfts);
|
|
331
970
|
const mainnetStellarTokens = verifyTokens(exports.tokens.bitcoin.xlm.tokens);
|
|
332
|
-
exports.mainnetTokens = { ...mainnetErc20Tokens, ...mainnetStellarTokens };
|
|
971
|
+
exports.mainnetTokens = { ...mainnetErc20Tokens, ...mainnetErc721Tokens, ...mainnetStellarTokens };
|
|
333
972
|
const testnetErc20Tokens = verifyTokens(exports.tokens.testnet.eth.tokens);
|
|
973
|
+
const testnetErc721Tokens = verifyTokens(exports.tokens.testnet.eth.nfts);
|
|
334
974
|
const testnetStellarTokens = verifyTokens(exports.tokens.testnet.xlm.tokens);
|
|
335
|
-
exports.testnetTokens = { ...testnetErc20Tokens, ...testnetStellarTokens };
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5Db25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW5Db25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBZ0JtQjtBQUNuQixpQ0FBOEM7QUFDOUMsbUNBQWdDO0FBQ2hDLHlDQUFtRDtBQUNuRCwrQkFBZ0M7QUE4SWhDLG9FQUFvRTtBQUNwRSxNQUFNLG9CQUFvQixHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUF1QixFQUFFLElBQUksRUFBRSxFQUFFO0lBQzFFLElBQUksSUFBSSxZQUFZLG1CQUFTLEVBQUU7UUFDN0IsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNwQixLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQ3pCLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ2pCLE1BQU07WUFDUixLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7Z0JBQ3RCLFFBQVEsR0FBRyxNQUFNLENBQUM7Z0JBQ2xCLE1BQU07WUFDUixLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQ3ZCLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQ25CLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksNkJBQTZCLENBQUMsQ0FBQztTQUMxRTtRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixJQUFJLEVBQUUsUUFBUTtZQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxzQkFBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFD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LFFBQUEsYUFBYSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFcmMyMENvaW4sXG4gIFN0ZWxsYXJDb2luLFxuICBDZWxvQ29pbixcbiAgRW9zQ29pbixcbiAgQXZheEVSQzIwVG9rZW4sXG4gIEFsZ29Db2luLFxuICBTb2xDb2luLFxuICBIZWRlcmFUb2tlbixcbiAgUG9seWdvbkVSQzIwVG9rZW4sXG4gIEJzY0NvaW4sXG4gIEFkYUNvaW4sXG4gIEVyYzcyMUNvaW4sXG4gIEVyYzExNTVDb2luLFxuICBUcm9uRXJjMjBDb2luLFxuICBYcnBDb2luLFxufSBmcm9tICcuL2FjY291bnQnO1xuaW1wb3J0IHsgQ29pbkZhbWlseSwgQ29pbktpbmQgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICcuL2NvaW5zJztcbmltcG9ydCB7IE5ldHdvcmtzLCBOZXR3b3JrVHlwZSB9IGZyb20gJy4vbmV0d29ya3MnO1xuaW1wb3J0IHsgT2ZjQ29pbiB9IGZyb20gJy4vb2ZjJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlVG9rZW5Db25maWcge1xuICBjb2luOiBzdHJpbmc7XG4gIGRlY2ltYWxQbGFjZXM6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU5ldHdvcmtDb25maWcgZXh0ZW5kcyBCYXNlVG9rZW5Db25maWcge1xuICBuZXR3b3JrOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZyBleHRlbmRzIEJhc2VOZXR3b3JrQ29uZmlnIHtcbiAgdG9rZW5Db250cmFjdEFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQXZheGNUb2tlbkNvbmZpZyA9IEJhc2VDb250cmFjdEFkZHJlc3NDb25maWc7XG5leHBvcnQgdHlwZSBDZWxvVG9rZW5Db25maWcgPSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnO1xuZXhwb3J0IHR5cGUgRXRoTGlrZVRva2VuQ29uZmlnID0gQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZztcbmV4cG9ydCB0eXBlIEVvc1Rva2VuQ29uZmlnID0gQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZztcbmV4cG9ydCB0eXBlIEVyYzIwVG9rZW5Db25maWcgPSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnO1xuZXhwb3J0IHR5cGUgVHJ4VG9rZW5Db25maWcgPSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnO1xuZXhwb3J0IHR5cGUgU3RlbGxhclRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWc7XG5cbmV4cG9ydCB0eXBlIFNvbFRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIHRva2VuQWRkcmVzczogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQWRhVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgcG9saWN5SWQ6IHN0cmluZztcbiAgYXNzZXROYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBbGdvVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgYWxpYXM/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBPZmNUb2tlbkNvbmZpZyA9IEJhc2VUb2tlbkNvbmZpZyAmIHtcbiAgYmFja2luZ0NvaW46IHN0cmluZztcbiAgaXNGaWF0OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgSGJhclRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWc7XG5cbmV4cG9ydCB0eXBlIFhycFRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIGlzc3VlckFkZHJlc3M6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gIGRvbWFpbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5zIHtcbiAgYml0Y29pbjoge1xuICAgIGV0aDoge1xuICAgICAgdG9rZW5zOiBFcmMyMFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICB4bG06IHtcbiAgICAgIHRva2VuczogU3RlbGxhclRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBhbGdvOiB7XG4gICAgICB0b2tlbnM6IEFsZ29Ub2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgb2ZjOiB7XG4gICAgICB0b2tlbnM6IE9mY1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBjZWxvOiB7XG4gICAgICB0b2tlbnM6IENlbG9Ub2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgZW9zOiB7XG4gICAgICB0b2tlbnM6IEVvc1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBhdmF4Yzoge1xuICAgICAgdG9rZW5zOiBBdmF4Y1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBwb2x5Z29uOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYnNjOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgc29sOiB7XG4gICAgICB0b2tlbnM6IFNvbFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBoYmFyOiB7XG4gICAgICB0b2tlbnM6IEhiYXJUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYWRhOiB7XG4gICAgICB0b2tlbnM6IEFkYVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICB0cng6IHtcbiAgICAgIHRva2VuczogVHJ4VG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHhycDoge1xuICAgICAgdG9rZW5zOiBYcnBUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gIH07XG4gIHRlc3RuZXQ6IHtcbiAgICBldGg6IHtcbiAgICAgIHRva2VuczogRXJjMjBUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgeGxtOiB7XG4gICAgICB0b2tlbnM6IFN0ZWxsYXJUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYWxnbzoge1xuICAgICAgdG9rZW5zOiBBbGdvVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIG9mYzoge1xuICAgICAgdG9rZW5zOiBPZmNUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgY2Vsbzoge1xuICAgICAgdG9rZW5zOiBDZWxvVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGJzYzoge1xuICAgICAgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGVvczoge1xuICAgICAgdG9rZW5zOiBFb3NUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYXZheGM6IHtcbiAgICAgIHRva2VuczogQXZheGNUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgcG9seWdvbjoge1xuICAgICAgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHNvbDoge1xuICAgICAgdG9rZW5zOiBTb2xUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgaGJhcjoge1xuICAgICAgdG9rZW5zOiBIYmFyVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGFkYToge1xuICAgICAgdG9rZW5zOiBBZGFUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgdHJ4OiB7XG4gICAgICB0b2tlbnM6IFRyeFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICB4cnA6IHtcbiAgICAgIHRva2VuczogWHJwVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICB9O1xufVxuXG4vLyBHZXQgdGhlIGxpc3Qgb2YgRVJDLTIwIHRva2VucyBmcm9tIHN0YXRpY3MgYW5kIGZvcm1hdCBpdCBwcm9wZXJseVxuY29uc3QgZm9ybWF0dGVkRXJjMjBUb2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogRXJjMjBUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgRXJjMjBDb2luKSB7XG4gICAgbGV0IGJhc2VDb2luOiBzdHJpbmc7XG4gICAgc3dpdGNoIChjb2luLm5ldHdvcmspIHtcbiAgICAgIGNhc2UgTmV0d29ya3MubWFpbi5ldGhlcmV1bTpcbiAgICAgICAgYmFzZUNvaW4gPSAnZXRoJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5ldHdvcmtzLnRlc3Qua292YW46XG4gICAgICAgIGJhc2VDb2luID0gJ3RldGgnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTmV0d29ya3MudGVzdC5nb2VybGk6XG4gICAgICAgIGJhc2VDb2luID0gJ2d0ZXRoJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVyYzIwIHRva2VuICR7Y29pbi5uYW1lfSBoYXMgYW4gdW5zdXBwb3J0ZWQgbmV0d29ya2ApO1xuICAgIH1cblxuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGJhc2VDb2luLFxuICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYWNjO1xufSwgW10pO1xuXG5leHBvcnQgY29uc3QgZXRoR2FzQ29uZmlncyA9IHtcbiAgbWluaW11bUdhc1ByaWNlOiAxMDAwMDAwMDAwLCAvLyBtaW5pbXVtIGdhcyBwcmljZSBhIHVzZXIgY2FuIHByb3ZpZGUgKDEgR3dlaSlcbiAgZGVmYXVsdEdhc1ByaWNlOiAyMDAwMDAwMDAwMCwgLy8gZGVmYXVsdCBnYXMgcHJpY2UgaWYgZXN0aW1hdGlvbiBmYWlscyAoMjAgR3dlaSlcbiAgbWF4aW11bUdhc1ByaWNlOiAyNTAwMDAwMDAwMDAwLCAvLyBtaW5pbXVtIGdhcyBwcmljZSBhIHVzZXIgY2FuIHByb3ZpZGUgKDI1MDAgR3dlaSlcbiAgZGVmYXVsdEdhc0xpbWl0OiA1MDAwMDAsIC8vIERlZmF1bHQgZ2FzIGxpbWl0IHdlIHNldCBmb3IgY29udHJhY3Qgc2VuZFxuICBkZWZhdWx0R2FzTGltaXRUb2tlblNlbmQ6IDEwMDAwMDAsIC8vIERlZmF1bHQgZ2FzIGxpbWl0IHdlIHNldCBmb3IgdG9rZW4gc2VuZFxuICBtaW5pbXVtR2FzTGltaXQ6IDMwMDAwLCAvLyBtaW5pbXVtIGdhcyBsaW1pdCBhIHVzZXIgY2FuIHNldCBmb3IgYSBzZW5kXG4gIG1heGltdW1HYXNMaW1pdDogMjAwMDAwMDAsIC8vIEN1c3RvbWVycyBjYW5ub3Qgc2V0IGdhcyBsaW1pdHMgYmV5b25kIHRoaXMgYW1vdW50XG59O1xuLy8gR2V0IHRoZSBsaXN0IG9mIFN0ZWxsYXIgdG9rZW5zIGZyb20gc3RhdGljcyBhbmQgZm9ybWF0IGl0IHByb3Blcmx5XG5jb25zdCBmb3JtYXR0ZWRTdGVsbGFyVG9rZW5zID0gY29pbnMucmVkdWNlKChhY2M6IFN0ZWxsYXJUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgU3RlbGxhckNvaW4pIHtcbiAgICBhY2MucHVzaCh7XG4gICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICd4bG0nIDogJ3R4bG0nLFxuICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBhY2M7XG59LCBbXSk7XG5cbi8vIEdldCB0aGUgbGlzdCBvZiBPRkMgdG9rZW5zIGZyb20gc3RhdGljcyBhbmQgZm9ybWF0IGl0IHByb3Blcmx5XG5jb25zdCBmb3JtYXR0ZWRPZmNDb2lucyA9IGNvaW5zLnJlZHVjZSgoYWNjOiBPZmNUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgT2ZjQ29pbikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgYmFja2luZ0NvaW46IGNvaW4uYXNzZXQsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgICAgaXNGaWF0OiBjb2luLmtpbmQgPT09IENvaW5LaW5kLkZJQVQsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuY29uc3QgZm9ybWF0dGVkQ2Vsb1Rva2VucyA9IGNvaW5zLnJlZHVjZSgoYWNjOiBDZWxvVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICBpZiAoY29pbiBpbnN0YW5jZW9mIENlbG9Db2luKSB7XG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnY2VsbycgOiAndGNlbG8nLFxuICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYWNjO1xufSwgW10pO1xuXG5jb25zdCBmb3JtYXR0ZWRCc2NUb2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgaWYgKGNvaW4gaW5zdGFuY2VvZiBCc2NDb2luKSB7XG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnYnNjJyA6ICd0YnNjJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuY29uc3QgZm9ybWF0dGVkRW9zVG9rZW5zID0gY29pbnMucmVkdWNlKChhY2M6IEVvc1Rva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgaWYgKGNvaW4gaW5zdGFuY2VvZiBFb3NDb2luKSB7XG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnZW9zJyA6ICd0ZW9zJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0TmFtZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuY29uc3QgZm9ybWF0dGVkQXZheENUb2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogQXZheGNUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgQXZheEVSQzIwVG9rZW4pIHtcbiAgICBhY2MucHVzaCh7XG4gICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdhdmF4YycgOiAndGF2YXhjJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuY29uc3QgZm9ybWF0dGVkUG9seWdvblRva2VucyA9IGNvaW5zLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICBpZiAoXG4gICAgY29pbiBpbnN0YW5jZW9mIFBvbHlnb25FUkMyMFRva2VuIHx8XG4gICAgKChjb2luIGluc3RhbmNlb2YgRXJjNzIxQ29pbiB8fCBjb2luIGluc3RhbmNlb2YgRXJjMTE1NUNvaW4pICYmIGNvaW4uZmFtaWx5ID09PSBDb2luRmFtaWx5LlBPTFlHT04pXG4gICkge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3BvbHlnb24nIDogJ3Rwb2x5Z29uJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuY29uc3QgZm9ybWF0dGVkU29sVG9rZW5zID0gY29pbnMucmVkdWNlKChhY2M6IFNvbFRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgaWYgKGNvaW4gaW5zdGFuY2VvZiBTb2xDb2luKSB7XG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnc29sJyA6ICd0c29sJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIHRva2VuQWRkcmVzczogY29pbi50b2tlbkFkZHJlc3MsXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdHRlZEFsZ29Ub2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogQWxnb1Rva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgaWYgKGNvaW4gaW5zdGFuY2VvZiBBbGdvQ29pbikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2FsZ28nIDogJ3RhbGdvJyxcbiAgICAgIGFsaWFzOiBjb2luLmFsaWFzLFxuICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBhY2M7XG59LCBbXSk7XG5cbmNvbnN0IGZvcm1hdHRlZEhiYXJUb2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogSGJhclRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgaWYgKGNvaW4gaW5zdGFuY2VvZiBIZWRlcmFUb2tlbikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2hiYXInIDogJ3RoYmFyJyxcbiAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYWNjO1xufSwgW10pO1xuXG5jb25zdCBmb3JtYXR0ZWRBZGFUb2tlbnMgPSBjb2lucy5yZWR1Y2UoKGFjYzogQWRhVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICBpZiAoY29pbiBpbnN0YW5jZW9mIEFkYUNvaW4pIHtcbiAgICBhY2MucHVzaCh7XG4gICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdhZGEnIDogJ3RhZGEnLFxuICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgcG9saWN5SWQ6IGNvaW4ucG9saWN5SWQsXG4gICAgICBhc3NldE5hbWU6IGNvaW4uYXNzZXROYW1lLFxuICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBhY2M7XG59LCBbXSk7XG5cbmNvbnN0IGZvcm1hdHRlZFRyeFRva2VucyA9IGNvaW5zLnJlZHVjZSgoYWNjOiBUcnhUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgVHJvbkVyYzIwQ29pbikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3RyeCcgOiAndHRyeCcsXG4gICAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBhY2M7XG59LCBbXSk7XG5cbmNvbnN0IGZvcm1hdHRlZFhycFRva2VucyA9IGNvaW5zLnJlZHVjZSgoYWNjOiBYcnBUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgWHJwQ29pbikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3hycCcgOiAndHhycCcsXG4gICAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgICBpc3N1ZXJBZGRyZXNzOiBjb2luLmlzc3VlckFkZHJlc3MsXG4gICAgICBjdXJyZW5jeUNvZGU6IGNvaW4uY3VycmVuY3lDb2RlLFxuICAgICAgZG9tYWluOiBjb2luLmRvbWFpbixcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYWNjO1xufSwgW10pO1xuXG5leHBvcnQgY29uc3QgdG9rZW5zOiBUb2tlbnMgPSB7XG4gIC8vIG5ldHdvcmsgbmFtZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHNcbiAgYml0Y29pbjoge1xuICAgIGV0aDoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRFcmMyMFRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgIH0sXG4gICAgeGxtOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZFN0ZWxsYXJUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICB9LFxuICAgIGFsZ286IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkQWxnb1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgIH0sXG4gICAgb2ZjOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZE9mY0NvaW5zLmZpbHRlcigodG9rZW4pID0+IGNvaW5zLmdldCh0b2tlbi50eXBlKS5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQpLFxuICAgIH0sXG4gICAgY2Vsbzoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRDZWxvVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgfSxcbiAgICBic2M6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkQnNjVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgfSxcbiAgICBlb3M6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkRW9zVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgfSxcbiAgICBhdmF4Yzoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRBdmF4Q1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgIH0sXG4gICAgcG9seWdvbjoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRQb2x5Z29uVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgfSxcbiAgICBzb2w6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkU29sVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgfSxcbiAgICBoYmFyOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZEhiYXJUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICB9LFxuICAgIGFkYToge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRBZGFUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICB9LFxuICAgIHRyeDoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRUcnhUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICB9LFxuICAgIHhycDoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRYcnBUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICB9LFxuICB9LFxuICAvLyBuZXR3b3JrIG5hbWUgZm9yIHRlc3QgZW52aXJvbm1lbnRzXG4gIHRlc3RuZXQ6IHtcbiAgICBldGg6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkRXJjMjBUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICB9LFxuICAgIHhsbToge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRTdGVsbGFyVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgfSxcbiAgICBhbGdvOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZEFsZ29Ub2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICB9LFxuICAgIG9mYzoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRPZmNDb2lucy5maWx0ZXIoKHRva2VuKSA9PiBjb2lucy5nZXQodG9rZW4udHlwZSkubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5URVNUTkVUKSxcbiAgICB9LFxuICAgIGNlbG86IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkQ2Vsb1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgIH0sXG4gICAgYnNjOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZEJzY1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgIH0sXG4gICAgZW9zOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZEVvc1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgIH0sXG4gICAgYXZheGM6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkQXZheENUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICB9LFxuICAgIHBvbHlnb246IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkUG9seWdvblRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgIH0sXG4gICAgc29sOiB7XG4gICAgICB0b2tlbnM6IGZvcm1hdHRlZFNvbFRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgIH0sXG4gICAgaGJhcjoge1xuICAgICAgdG9rZW5zOiBmb3JtYXR0ZWRIYmFyVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgfSxcbiAgICBhZGE6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkQWRhVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgfSxcbiAgICB0cng6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkVHJ4VG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgfSxcbiAgICB4cnA6IHtcbiAgICAgIHRva2VuczogZm9ybWF0dGVkWHJwVG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKlxuICogVmVyaWZ5IG1haW5uZXQgb3IgdGVzdG5ldCB0b2tlbnNcbiAqIEBwYXJhbSB0b2tlbnNcbiAqL1xuY29uc3QgdmVyaWZ5VG9rZW5zID0gZnVuY3Rpb24gKHRva2VuczogQmFzZVRva2VuQ29uZmlnW10pIHtcbiAgY29uc3QgdmVyaWZpZWRUb2tlbnM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgIGlmICh2ZXJpZmllZFRva2Vuc1t0b2tlbi50eXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b2tlbiA6ICcgKyB0b2tlbi50eXBlICsgJyBkdXBsaWNhdGVkLicpO1xuICAgIH1cbiAgICB2ZXJpZmllZFRva2Vuc1t0b2tlbi50eXBlXSA9IHRydWU7XG5cbiAgICBpZiAoXG4gICAgICAodG9rZW4gYXMgQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZykudG9rZW5Db250cmFjdEFkZHJlc3MgJiZcbiAgICAgICh0b2tlbiBhcyBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnKS50b2tlbkNvbnRyYWN0QWRkcmVzcyAhPT1cbiAgICAgICAgKHRva2VuIGFzIEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcpLnRva2VuQ29udHJhY3RBZGRyZXNzLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3Rva2VuIGNvbnRyYWN0OiAnICsgdG9rZW4udHlwZSArICcgaXMgbm90IGFsbCBsb3dlciBjYXNlOiAnICsgKHRva2VuIGFzIEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcpXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZlcmlmaWVkVG9rZW5zO1xufTtcblxuY29uc3QgbWFpbm5ldEVyYzIwVG9rZW5zID0gdmVyaWZ5VG9rZW5zKHRva2Vucy5iaXRjb2luLmV0aC50b2tlbnMpO1xuY29uc3QgbWFpbm5ldFN0ZWxsYXJUb2tlbnMgPSB2ZXJpZnlUb2tlbnModG9rZW5zLmJpdGNvaW4ueGxtLnRva2Vucyk7XG5leHBvcnQgY29uc3QgbWFpbm5ldFRva2VucyA9IHsgLi4ubWFpbm5ldEVyYzIwVG9rZW5zLCAuLi5tYWlubmV0U3RlbGxhclRva2VucyB9O1xuXG5jb25zdCB0ZXN0bmV0RXJjMjBUb2tlbnMgPSB2ZXJpZnlUb2tlbnModG9rZW5zLnRlc3RuZXQuZXRoLnRva2Vucyk7XG5jb25zdCB0ZXN0bmV0U3RlbGxhclRva2VucyA9IHZlcmlmeVRva2Vucyh0b2tlbnMudGVzdG5ldC54bG0udG9rZW5zKTtcbmV4cG9ydCBjb25zdCB0ZXN0bmV0VG9rZW5zID0geyAuLi50ZXN0bmV0RXJjMjBUb2tlbnMsIC4uLnRlc3RuZXRTdGVsbGFyVG9rZW5zIH07XG4iXX0=
|
|
975
|
+
exports.testnetTokens = { ...testnetErc20Tokens, ...testnetErc721Tokens, ...testnetStellarTokens };
|
|
976
|
+
/**
|
|
977
|
+
* Get formatted token configuration for a single coin
|
|
978
|
+
* @param coin - Static Base coin instance
|
|
979
|
+
* @returns The formatted token configuration for the coin, or undefined if not supported
|
|
980
|
+
*/
|
|
981
|
+
function getFormattedTokenConfigForCoin(coin) {
|
|
982
|
+
if (coin instanceof account_1.Erc20Coin) {
|
|
983
|
+
return getErc20TokenConfig(coin);
|
|
984
|
+
}
|
|
985
|
+
else if (coin instanceof account_1.StellarCoin) {
|
|
986
|
+
return getStellarTokenConfig(coin);
|
|
987
|
+
}
|
|
988
|
+
else if (coin instanceof ofc_1.OfcCoin) {
|
|
989
|
+
return getOfcTokenConfig(coin);
|
|
990
|
+
}
|
|
991
|
+
else if (coin instanceof account_1.CeloCoin) {
|
|
992
|
+
return getCeloTokenConfig(coin);
|
|
993
|
+
}
|
|
994
|
+
else if (coin instanceof account_1.BscCoin) {
|
|
995
|
+
return getBscTokenConfig(coin);
|
|
996
|
+
}
|
|
997
|
+
else if (coin instanceof account_1.EosCoin) {
|
|
998
|
+
return getEosTokenConfig(coin);
|
|
999
|
+
}
|
|
1000
|
+
else if (coin instanceof account_1.AvaxERC20Token) {
|
|
1001
|
+
return getAvaxCTokenConfig(coin);
|
|
1002
|
+
}
|
|
1003
|
+
else if (coin instanceof account_1.PolygonERC20Token ||
|
|
1004
|
+
((coin instanceof account_1.Erc721Coin || coin instanceof account_1.Erc1155Coin) && coin.family === base_1.CoinFamily.POLYGON)) {
|
|
1005
|
+
return getPolygonTokenConfig(coin);
|
|
1006
|
+
}
|
|
1007
|
+
else if ((coin instanceof account_1.Erc721Coin || coin instanceof account_1.Erc1155Coin) && coin.family === base_1.CoinFamily.SONEIUM) {
|
|
1008
|
+
return getSoneiumTokenConfig(coin);
|
|
1009
|
+
}
|
|
1010
|
+
else if (coin instanceof account_1.Erc721Coin && coin.family === base_1.CoinFamily.ETH) {
|
|
1011
|
+
return getErc721TokenConfig(coin);
|
|
1012
|
+
}
|
|
1013
|
+
else if (coin instanceof account_1.ArbethERC20Token) {
|
|
1014
|
+
return getArbethTokenConfig(coin);
|
|
1015
|
+
}
|
|
1016
|
+
else if (coin instanceof account_1.OpethERC20Token) {
|
|
1017
|
+
return getOpethTokenConfig(coin);
|
|
1018
|
+
}
|
|
1019
|
+
else if (coin instanceof account_1.ZkethERC20Token) {
|
|
1020
|
+
return getZkethTokenConfig(coin);
|
|
1021
|
+
}
|
|
1022
|
+
else if (coin instanceof account_1.SolCoin) {
|
|
1023
|
+
return getSolTokenConfig(coin);
|
|
1024
|
+
}
|
|
1025
|
+
else if (coin instanceof account_1.HederaToken) {
|
|
1026
|
+
return getHbarTokenConfig(coin);
|
|
1027
|
+
}
|
|
1028
|
+
else if (coin instanceof account_1.AdaToken) {
|
|
1029
|
+
return getAdaTokenConfig(coin);
|
|
1030
|
+
}
|
|
1031
|
+
else if (coin instanceof account_1.TronErc20Coin) {
|
|
1032
|
+
return getTrxTokenConfig(coin);
|
|
1033
|
+
}
|
|
1034
|
+
else if (coin instanceof account_1.XrpCoin) {
|
|
1035
|
+
return getXrpTokenConfig(coin);
|
|
1036
|
+
}
|
|
1037
|
+
else if (coin instanceof account_1.SuiCoin) {
|
|
1038
|
+
return getSuiTokenConfig(coin);
|
|
1039
|
+
}
|
|
1040
|
+
else if (coin instanceof account_1.TaoCoin) {
|
|
1041
|
+
return getTaoTokenConfig(coin);
|
|
1042
|
+
}
|
|
1043
|
+
else if (coin instanceof account_1.PolyxCoin) {
|
|
1044
|
+
return getPolyxTokenConfig(coin);
|
|
1045
|
+
}
|
|
1046
|
+
else if (coin instanceof account_1.AptCoin) {
|
|
1047
|
+
return getAptTokenConfig(coin);
|
|
1048
|
+
}
|
|
1049
|
+
else if (coin instanceof account_1.AptNFTCollection) {
|
|
1050
|
+
return getAptNFTCollectionConfig(coin);
|
|
1051
|
+
}
|
|
1052
|
+
else if (coin instanceof account_1.Sip10Token) {
|
|
1053
|
+
return getSip10TokenConfig(coin);
|
|
1054
|
+
}
|
|
1055
|
+
else if (coin instanceof account_1.Nep141Token) {
|
|
1056
|
+
return getNep141TokenConfig(coin);
|
|
1057
|
+
}
|
|
1058
|
+
else if (coin instanceof account_1.CosmosChainToken) {
|
|
1059
|
+
return getCosmosTokenConfig(coin);
|
|
1060
|
+
}
|
|
1061
|
+
else if (coin instanceof account_1.VetToken) {
|
|
1062
|
+
return getVetTokenConfig(coin);
|
|
1063
|
+
}
|
|
1064
|
+
else if (coin instanceof account_1.VetNFTCollection) {
|
|
1065
|
+
return getVetNFTCollectionConfig(coin);
|
|
1066
|
+
}
|
|
1067
|
+
else if (coin instanceof account_1.CoredaoERC20Token) {
|
|
1068
|
+
return getCoredaoTokenConfig(coin);
|
|
1069
|
+
}
|
|
1070
|
+
else if (coin instanceof account_1.JettonToken) {
|
|
1071
|
+
return getJettonTokenConfig(coin);
|
|
1072
|
+
}
|
|
1073
|
+
else if (coin instanceof account_1.FlrERC20Token) {
|
|
1074
|
+
return getFlrTokenConfig(coin);
|
|
1075
|
+
}
|
|
1076
|
+
else if (coin instanceof account_1.EthLikeERC20Token) {
|
|
1077
|
+
return getEthLikeTokenConfig(coin);
|
|
1078
|
+
}
|
|
1079
|
+
else if (coin instanceof account_1.EthLikeERC721Token) {
|
|
1080
|
+
return getEthLikeERC721TokenConfig(coin);
|
|
1081
|
+
}
|
|
1082
|
+
return undefined;
|
|
1083
|
+
}
|
|
1084
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5Db25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW5Db25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBczJDQSx3RUF3RUM7QUE5NkNELHVDQXFDbUI7QUFDbkIsaUNBQXFFO0FBQ3JFLG1DQUFnQztBQUNoQyx5Q0FBbUQ7QUFDbkQsK0JBQWdDO0FBbVBoQyxTQUFTLG1CQUFtQixDQUFDLElBQWU7SUFDMUMsSUFBSSxRQUFnQixDQUFDO0lBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQzlCLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDakIsTUFBTTtRQUNSLEtBQUssbUJBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDM0IsUUFBUSxHQUFHLE1BQU0sQ0FBQztZQUNsQixNQUFNO1FBQ1IsS0FBSyxtQkFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUM1QixRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ25CLE1BQU07UUFDUixLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDaEMsS0FBSyxtQkFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUMzQixRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ25CLE1BQU07UUFDUjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSw2QkFBNkIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ2YsSUFBSSxFQUFFLFFBQVE7UUFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssc0JBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMs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QUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztTQUFNLElBQUksSUFBSSxZQUFZLDJCQUFpQixFQUFFLENBQUM7UUFDN0MsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO1NBQU0sSUFBSSxJQUFJLFlBQVkscUJBQVcsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztTQUFNLElBQUksSUFBSSxZQUFZLHVCQUFhLEVBQUUsQ0FBQztRQUN6QyxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7U0FBTSxJQUFJLElBQUksWUFBWSwyQkFBaUIsRUFBRSxDQUFDO1FBQzdDLE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztTQUFNLElBQUksSUFBSSxZQUFZLDRCQUFrQixFQUFFLENBQUM7UUFDOUMsT0FBTywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFsZ29Db2luLFxuICBBcHRDb2luLFxuICBBcHRORlRDb2xsZWN0aW9uLFxuICBBcmJldGhFUkMyMFRva2VuLFxuICBBdmF4RVJDMjBUb2tlbixcbiAgQmVyYUVSQzIwVG9rZW4sXG4gIEJzY0NvaW4sXG4gIENlbG9Db2luLFxuICBDb3JlZGFvRVJDMjBUb2tlbixcbiAgQ29zbW9zQ2hhaW5Ub2tlbixcbiAgRW9zQ29pbixcbiAgRXJjMTE1NUNvaW4sXG4gIEVyYzIwQ29pbixcbiAgRXJjNzIxQ29pbixcbiAgRXRoTGlrZUVSQzIwVG9rZW4sXG4gIEV0aExpa2VFUkM3MjFUb2tlbixcbiAgRmxyRVJDMjBUb2tlbixcbiAgSGVkZXJhVG9rZW4sXG4gIE5lcDE0MVRva2VuLFxuICBPcGV0aEVSQzIwVG9rZW4sXG4gIFBvbHlnb25FUkMyMFRva2VuLFxuICBTaXAxMFRva2VuLFxuICBTb2xDb2luLFxuICBTdGVsbGFyQ29pbixcbiAgU3VpQ29pbixcbiAgVGFvQ29pbixcbiAgUG9seXhDb2luLFxuICBUcm9uRXJjMjBDb2luLFxuICBWZXRUb2tlbixcbiAgV29ybGRFUkMyMFRva2VuLFxuICBYcnBDb2luLFxuICBaa2V0aEVSQzIwVG9rZW4sXG4gIFZldE5GVENvbGxlY3Rpb24sXG4gIEFkYVRva2VuLFxuICBKZXR0b25Ub2tlbixcbiAgQWNjb3VudENvaW4sXG59IGZyb20gJy4vYWNjb3VudCc7XG5pbXBvcnQgeyBDb2luRmFtaWx5LCBDb2luS2luZCwgQmFzZUNvaW4sIENvaW5GZWF0dXJlIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnLi9jb2lucyc7XG5pbXBvcnQgeyBOZXR3b3JrcywgTmV0d29ya1R5cGUgfSBmcm9tICcuL25ldHdvcmtzJztcbmltcG9ydCB7IE9mY0NvaW4gfSBmcm9tICcuL29mYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVRva2VuQ29uZmlnIHtcbiAgY29pbjogc3RyaW5nO1xuICBkZWNpbWFsUGxhY2VzOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VOZXR3b3JrQ29uZmlnIGV4dGVuZHMgQmFzZVRva2VuQ29uZmlnIHtcbiAgbmV0d29yazogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcgZXh0ZW5kcyBCYXNlTmV0d29ya0NvbmZpZyB7XG4gIHRva2VuQ29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEF2YXhjVG9rZW5Db25maWcgPSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnO1xuZXhwb3J0IHR5cGUgQ2Vsb1Rva2VuQ29uZmlnID0gQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZztcbmV4cG9ydCB0eXBlIEV0aExpa2VUb2tlbkNvbmZpZyA9IEJhc2VDb250cmFjdEFkZHJlc3NDb25maWc7XG5leHBvcnQgdHlwZSBFb3NUb2tlbkNvbmZpZyA9IEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcgJiB7XG4gIGNvbnRyYWN0TmFtZTogc3RyaW5nO1xuICBjb250cmFjdEFkZHJlc3M6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBFcmMyMFRva2VuQ29uZmlnID0gQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZztcbmV4cG9ydCB0eXBlIFRyeFRva2VuQ29uZmlnID0gQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZztcbmV4cG9ydCB0eXBlIFN0ZWxsYXJUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnO1xuXG5leHBvcnQgdHlwZSBTb2xUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICB0b2tlbkFkZHJlc3M6IHN0cmluZztcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBZGFUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBwb2xpY3lJZDogc3RyaW5nO1xuICBhc3NldE5hbWU6IHN0cmluZztcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBbGdvVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgYWxpYXM/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBPZmNUb2tlbkNvbmZpZyA9IEJhc2VUb2tlbkNvbmZpZyAmIHtcbiAgYmFja2luZ0NvaW46IHN0cmluZztcbiAgaXNGaWF0OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgSGJhclRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIG5vZGVBY2NvdW50SWQ6IHN0cmluZztcbiAgdG9rZW5JZDogc3RyaW5nO1xuICBjb250cmFjdEFkZHJlc3M6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFhycFRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIGlzc3VlckFkZHJlc3M6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gIGRvbWFpbj86IHN0cmluZztcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTdWlUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBwYWNrYWdlSWQ6IHN0cmluZztcbiAgbW9kdWxlOiBzdHJpbmc7XG4gIHN5bWJvbDogc3RyaW5nO1xuICBjb250cmFjdEFkZHJlc3M6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFwdFRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIGFzc2V0SWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFwdE5GVENvbGxlY3Rpb25Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgbmZ0Q29sbGVjdGlvbklkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTaXAxMFRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIGFzc2V0SWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhb1Rva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIHN1Ym5ldElkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQb2x5eFRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIHRpY2tlcjogc3RyaW5nO1xuICBhc3NldElkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBOZXAxNDFUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBjb250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgc3RvcmFnZURlcG9zaXRBbW91bnQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFZldFRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIGNvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVmV0TkZUQ29sbGVjdGlvbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBuZnRDb2xsZWN0aW9uSWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvc21vc1Rva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIGRlbm9tOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBKZXR0b25Ub2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBjb250cmFjdEFkZHJlc3M6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEV0aExpa2VFUkM3MjFUb2tlbkNvbmZpZyA9IEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcgJiB7XG4gIG5ldHdvcms6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRva2VuQ29uZmlnID1cbiAgfCBFcmMyMFRva2VuQ29uZmlnXG4gIHwgU3RlbGxhclRva2VuQ29uZmlnXG4gIHwgT2ZjVG9rZW5Db25maWdcbiAgfCBDZWxvVG9rZW5Db25maWdcbiAgfCBFdGhMaWtlVG9rZW5Db25maWdcbiAgfCBFb3NUb2tlbkNvbmZpZ1xuICB8IEF2YXhjVG9rZW5Db25maWdcbiAgfCBTb2xUb2tlbkNvbmZpZ1xuICB8IEhiYXJUb2tlbkNvbmZpZ1xuICB8IEFkYVRva2VuQ29uZmlnXG4gIHwgQWxnb1Rva2VuQ29uZmlnXG4gIHwgVHJ4VG9rZW5Db25maWdcbiAgfCBYcnBUb2tlbkNvbmZpZ1xuICB8IFN1aVRva2VuQ29uZmlnXG4gIHwgQXB0VG9rZW5Db25maWdcbiAgfCBBcHRORlRDb2xsZWN0aW9uQ29uZmlnXG4gIHwgU2lwMTBUb2tlbkNvbmZpZ1xuICB8IE5lcDE0MVRva2VuQ29uZmlnXG4gIHwgQ29zbW9zVG9rZW5Db25maWdcbiAgfCBWZXRUb2tlbkNvbmZpZ1xuICB8IFZldE5GVENvbGxlY3Rpb25Db25maWdcbiAgfCBUYW9Ub2tlbkNvbmZpZ1xuICB8IFBvbHl4VG9rZW5Db25maWdcbiAgfCBKZXR0b25Ub2tlbkNvbmZpZ1xuICB8IEV0aExpa2VFUkM3MjFUb2tlbkNvbmZpZztcblxuZXhwb3J0IGludGVyZmFjZSBUb2tlbk5ldHdvcmsge1xuICBldGg6IHtcbiAgICB0b2tlbnM6IEVyYzIwVG9rZW5Db25maWdbXTtcbiAgICBuZnRzOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgfTtcbiAgeGxtOiB7IHRva2VuczogU3RlbGxhclRva2VuQ29uZmlnW10gfTtcbiAgYWxnbzogeyB0b2tlbnM6IEFsZ29Ub2tlbkNvbmZpZ1tdIH07XG4gIG9mYzogeyB0b2tlbnM6IE9mY1Rva2VuQ29uZmlnW10gfTtcbiAgY2VsbzogeyB0b2tlbnM6IENlbG9Ub2tlbkNvbmZpZ1tdIH07XG4gIGVvczogeyB0b2tlbnM6IEVvc1Rva2VuQ29uZmlnW10gfTtcbiAgYXZheGM6IHsgdG9rZW5zOiBBdmF4Y1Rva2VuQ29uZmlnW10gfTtcbiAgcG9seWdvbjogeyB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdIH07XG4gIHNvbmVpdW06IHsgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXSB9O1xuICBic2M6IHsgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXSB9O1xuICBhcmJldGg6IHsgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXSB9O1xuICBvcGV0aDogeyB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdIH07XG4gIGJhc2VldGg6IHsgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXSB9O1xuICBvZzogeyB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdIH07XG4gIGZsb3c6IHsgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXSB9O1xuICBsaW5lYWV0aDogeyB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdIH07XG4gIHNlaWV2bTogeyB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdIH07XG4gIGNvcmVkYW86IHsgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXSB9O1xuICB3b3JsZDogeyB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdIH07XG4gIGZscjogeyB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdIH07XG4gIHNvbDogeyB0b2tlbnM6IFNvbFRva2VuQ29uZmlnW10gfTtcbiAgaGJhcjogeyB0b2tlbnM6IEhiYXJUb2tlbkNvbmZpZ1tdIH07XG4gIGFkYTogeyB0b2tlbnM6IEFkYVRva2VuQ29uZmlnW10gfTtcbiAgdHJ4OiB7IHRva2VuczogVHJ4VG9rZW5Db25maWdbXSB9O1xuICB4cnA6IHsgdG9rZW5zOiBYcnBUb2tlbkNvbmZpZ1tdIH07XG4gIHprZXRoOiB7IHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW10gfTtcbiAgc3VpOiB7IHRva2VuczogU3VpVG9rZW5Db25maWdbXSB9O1xuICB0YW86IHsgdG9rZW5zOiBUYW9Ub2tlbkNvbmZpZ1tdIH07XG4gIHBvbHl4OiB7IHRva2VuczogUG9seXhUb2tlbkNvbmZpZ1tdIH07XG4gIGJlcmE6IHsgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXSB9O1xuICBtb246IHsgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXSB9O1xuICB4ZGM6IHsgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXSB9O1xuICBpcDogeyB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdIH07XG4gIGFwdDoge1xuICAgIHRva2VuczogQXB0VG9rZW5Db25maWdbXTtcbiAgICBuZnRDb2xsZWN0aW9uczogQXB0TkZUQ29sbGVjdGlvbkNvbmZpZ1tdO1xuICB9O1xuICBzdHg6IHsgdG9rZW5zOiBTaXAxMFRva2VuQ29uZmlnW10gfTtcbiAgbmVhcjogeyB0b2tlbnM6IE5lcDE0MVRva2VuQ29uZmlnW10gfTtcbiAgdmV0OiB7XG4gICAgdG9rZW5zOiBWZXRUb2tlbkNvbmZpZ1tdO1xuICAgIG5mdENvbGxlY3Rpb25zOiBWZXRORlRDb2xsZWN0aW9uQ29uZmlnW107XG4gIH07XG4gIGNvc21vczogeyB0b2tlbnM6IENvc21vc1Rva2VuQ29uZmlnW10gfTtcbiAgdG9uOiB7IHRva2VuczogSmV0dG9uVG9rZW5Db25maWdbXSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VucyB7XG4gIGJpdGNvaW46IFRva2VuTmV0d29yaztcbiAgdGVzdG5ldDogVG9rZW5OZXR3b3JrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtc1Rva2VuQ29uZmlnIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBmdWxsTmFtZTogc3RyaW5nO1xuICBmYW1pbHk6IHN0cmluZztcbiAgZGVjaW1hbFBsYWNlczogbnVtYmVyO1xuICBhc3NldDogc3RyaW5nO1xuICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICBwcmVmaXg/OiBzdHJpbmc7XG4gIHN1ZmZpeD86IHN0cmluZztcbiAgbmV0d29yaz86IHVua25vd247XG4gIHByaW1hcnlLZXlDdXJ2ZT86IHN0cmluZztcbiAgY29udHJhY3RBZGRyZXNzPzogc3RyaW5nO1xuICB0b2tlbkFkZHJlc3M/OiBzdHJpbmc7XG4gIG5mdENvbGxlY3Rpb25JZD86IHN0cmluZztcbiAgYWxpYXM/OiBzdHJpbmc7XG4gIGNvbnRyYWN0TmFtZT86IHN0cmluZztcbiAgdG9rZW5JZD86IHN0cmluZztcbiAgcGFja2FnZUlkPzogc3RyaW5nO1xuICBtb2R1bGU/OiBzdHJpbmc7XG4gIHN5bWJvbD86IHN0cmluZztcbiAgaXNzdWVyQWRkcmVzcz86IHN0cmluZztcbiAgY3VycmVjbnljb2RlPzogc3RyaW5nO1xuICBkb21haW4/OiBzdHJpbmc7XG4gIGFzc2V0SWQ/OiBzdHJpbmc7XG4gIGRlbm9tPzogc3RyaW5nO1xuICBpc1Rva2VuOiBib29sZWFuO1xuICBiYXNlVW5pdD86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbiAgc3VibmV0SWQ/OiBzdHJpbmc7XG4gIHRpY2tlcj86IHN0cmluZztcbiAgcHJvZ3JhbUlkPzogc3RyaW5nO1xuICBhZGRyZXNzQ29pbj86IHN0cmluZztcbiAgYXNzZXROYW1lPzogc3RyaW5nO1xuICBwb2xpY3lJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmltbWVkQW1zTmV0d29ya0NvbmZpZyB7XG4gIG5hbWU6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVHJpbW1lZEFtc1Rva2VuQ29uZmlnIGV4dGVuZHMgT21pdDxBbXNUb2tlbkNvbmZpZywgJ2ZlYXR1cmVzJyB8ICduZXR3b3JrJz4ge1xuICBuZXR3b3JrOiBUcmltbWVkQW1zTmV0d29ya0NvbmZpZztcbiAgZXhjbHVkZWRGZWF0dXJlcz86IHN0cmluZ1tdO1xuICBhZGRpdGlvbmFsRmVhdHVyZXM/OiBzdHJpbmdbXTtcbn1cblxuZnVuY3Rpb24gZ2V0RXJjMjBUb2tlbkNvbmZpZyhjb2luOiBFcmMyMENvaW4pOiBFcmMyMFRva2VuQ29uZmlnIHtcbiAgbGV0IGJhc2VDb2luOiBzdHJpbmc7XG4gIHN3aXRjaCAoY29pbi5uZXR3b3JrLm5hbWUpIHtcbiAgICBjYXNlIE5ldHdvcmtzLm1haW4uZXRoZXJldW0ubmFtZTpcbiAgICAgIGJhc2VDb2luID0gJ2V0aCc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE5ldHdvcmtzLnRlc3Qua292YW4ubmFtZTpcbiAgICAgIGJhc2VDb2luID0gJ3RldGgnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBOZXR3b3Jrcy50ZXN0LmdvZXJsaS5uYW1lOlxuICAgICAgYmFzZUNvaW4gPSAnZ3RldGgnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBOZXR3b3Jrcy50ZXN0LmhvbGVza3kubmFtZTpcbiAgICBjYXNlIE5ldHdvcmtzLnRlc3QuaG9vZGkubmFtZTpcbiAgICAgIGJhc2VDb2luID0gJ2h0ZXRoJztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVyYzIwIHRva2VuICR7Y29pbi5uYW1lfSBoYXMgYW4gdW5zdXBwb3J0ZWQgbmV0d29ya2ApO1xuICB9XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGJhc2VDb2luLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5cbi8vIEdldCB0aGUgbGlzdCBvZiBFUkMtMjAgdG9rZW5zIGZyb20gc3RhdGljcyBhbmQgZm9ybWF0IGl0IHByb3Blcmx5XG5jb25zdCBnZXRGb3JtYXR0ZWRFcmMyMFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEVyYzIwVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgRXJjMjBDb2luKSB7XG4gICAgICBhY2MucHVzaChnZXRFcmMyMFRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5leHBvcnQgY29uc3QgZXRoR2FzQ29uZmlncyA9IHtcbiAgbWluaW11bUdhc1ByaWNlOiAxMDAwMDAwMDAwLCAvLyBtaW5pbXVtIGdhcyBwcmljZSBhIHVzZXIgY2FuIHByb3ZpZGUgKDEgR3dlaSlcbiAgZGVmYXVsdEdhc1ByaWNlOiAyMDAwMDAwMDAwMCwgLy8gZGVmYXVsdCBnYXMgcHJpY2UgaWYgZXN0aW1hdGlvbiBmYWlscyAoMjAgR3dlaSlcbiAgbWF4aW11bUdhc1ByaWNlOiAyNTAwMDAwMDAwMDAwLCAvLyBtaW5pbXVtIGdhcyBwcmljZSBhIHVzZXIgY2FuIHByb3ZpZGUgKDI1MDAgR3dlaSlcbiAgZGVmYXVsdEdhc0xpbWl0OiA1MDAwMDAsIC8vIERlZmF1bHQgZ2FzIGxpbWl0IHdlIHNldCBmb3IgY29udHJhY3Qgc2VuZFxuICBkZWZhdWx0R2FzTGltaXRUb2tlblNlbmQ6IDEwMDAwMDAsIC8vIERlZmF1bHQgZ2FzIGxpbWl0IHdlIHNldCBmb3IgdG9rZW4gc2VuZFxuICBtaW5pbXVtR2FzTGltaXQ6IDMwMDAwLCAvLyBtaW5pbXVtIGdhcyBsaW1pdCBhIHVzZXIgY2FuIHNldCBmb3IgYSBzZW5kXG4gIG1heGltdW1HYXNMaW1pdDogMjAwMDAwMDAsIC8vIEN1c3RvbWVycyBjYW5ub3Qgc2V0IGdhcyBsaW1pdHMgYmV5b25kIHRoaXMgYW1vdW50XG4gIG5ld0V0aExpa2VDb2luc01pbkdhc0xpbWl0OiA0MDAwMDAsIC8vIG1pbmltdW0gZ2FzIGxpbWl0IGEgdXNlciBjYW4gc2V0IGZvciBhIHNlbmQgZm9yIGV0aCBsaWtlIGNvaW5zIGxpa2UgYXJiaXRydW0sIG9wdGltaXNtLCBldGNcbiAgb3BldGhHYXNMMUZlZXM6IDEwMDAwMDAwMDAwMDAwMDAsIC8vIEJ1ZmZlciBmb3Igb3BldGggTDEgZ2FzIGZlZXNcbn07XG5cbmZ1bmN0aW9uIGdldFN0ZWxsYXJUb2tlbkNvbmZpZyhjb2luOiBTdGVsbGFyQ29pbik6IFN0ZWxsYXJUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3hsbScgOiAndHhsbScsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG4vLyBHZXQgdGhlIGxpc3Qgb2YgU3RlbGxhciB0b2tlbnMgZnJvbSBzdGF0aWNzIGFuZCBmb3JtYXQgaXQgcHJvcGVybHlcbmNvbnN0IGdldEZvcm1hdHRlZFN0ZWxsYXJUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBTdGVsbGFyVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgU3RlbGxhckNvaW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldFN0ZWxsYXJUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0T2ZjVG9rZW5Db25maWcoY29pbjogT2ZjQ29pbik6IE9mY1Rva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogJ29mYycsXG4gICAgYmFja2luZ0NvaW46IGNvaW4uYXNzZXQsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgaXNGaWF0OiBjb2luLmtpbmQgPT09IENvaW5LaW5kLkZJQVQsXG4gIH07XG59XG4vLyBHZXQgdGhlIGxpc3Qgb2YgT0ZDIHRva2VucyBmcm9tIHN0YXRpY3MgYW5kIGZvcm1hdCBpdCBwcm9wZXJseVxuY29uc3QgZ2V0Rm9ybWF0dGVkT2ZjQ29pbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBPZmNUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBPZmNDb2luKSB7XG4gICAgICBhY2MucHVzaChnZXRPZmNUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0Q2Vsb1Rva2VuQ29uZmlnKGNvaW46IENlbG9Db2luKTogQ2Vsb1Rva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnY2VsbycgOiAndGNlbG8nLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRDZWxvVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogQ2Vsb1Rva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIENlbG9Db2luKSB7XG4gICAgICBhY2MucHVzaChnZXRDZWxvVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldEJzY1Rva2VuQ29uZmlnKGNvaW46IEJzY0NvaW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdic2MnIDogJ3Ric2MnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRCc2NUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgQnNjQ29pbikge1xuICAgICAgYWNjLnB1c2goZ2V0QnNjVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldEVvc1Rva2VuQ29uZmlnKGNvaW46IEVvc0NvaW4pOiBFb3NUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2VvcycgOiAndGVvcycsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdE5hbWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICBjb250cmFjdE5hbWU6IGNvaW4uY29udHJhY3ROYW1lLFxuICAgIGNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRFb3NUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFb3NUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBFb3NDb2luKSB7XG4gICAgICBhY2MucHVzaChnZXRFb3NUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0QXZheENUb2tlbkNvbmZpZyhjb2luOiBBdmF4RVJDMjBUb2tlbik6IEF2YXhjVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdhdmF4YycgOiAndGF2YXhjJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkQXZheENUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBBdmF4Y1Rva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEF2YXhFUkMyMFRva2VuKSB7XG4gICAgICBhY2MucHVzaChnZXRBdmF4Q1Rva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRQb2x5Z29uVG9rZW5Db25maWcoY29pbjogUG9seWdvbkVSQzIwVG9rZW4gfCBFcmM3MjFDb2luIHwgRXJjMTE1NUNvaW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdwb2x5Z29uJyA6ICd0cG9seWdvbicsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZFBvbHlnb25Ub2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChcbiAgICAgIGNvaW4gaW5zdGFuY2VvZiBQb2x5Z29uRVJDMjBUb2tlbiB8fFxuICAgICAgKChjb2luIGluc3RhbmNlb2YgRXJjNzIxQ29pbiB8fCBjb2luIGluc3RhbmNlb2YgRXJjMTE1NUNvaW4pICYmIGNvaW4uZmFtaWx5ID09PSBDb2luRmFtaWx5LlBPTFlHT04pXG4gICAgKSB7XG4gICAgICBhY2MucHVzaChnZXRQb2x5Z29uVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldFNvbmVpdW1Ub2tlbkNvbmZpZyhjb2luOiBFcmM3MjFDb2luIHwgRXJjMTE1NUNvaW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdzb25laXVtJyA6ICd0c29uZWl1bScsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZFNvbmVpdW1Ub2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmICgoY29pbiBpbnN0YW5jZW9mIEVyYzcyMUNvaW4gfHwgY29pbiBpbnN0YW5jZW9mIEVyYzExNTVDb2luKSAmJiBjb2luLmZhbWlseSA9PT0gQ29pbkZhbWlseS5TT05FSVVNKSB7XG4gICAgICBhY2MucHVzaChnZXRTb25laXVtVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldEVyYzcyMVRva2VuQ29uZmlnKGNvaW46IEVyYzcyMUNvaW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdldGgnIDogJ2h0ZXRoJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkRXJjNzIxVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEVyYzcyMUNvaW4gJiYgY29pbi5mYW1pbHkgPT09IENvaW5GYW1pbHkuRVRIKSB7XG4gICAgICBhY2MucHVzaChnZXRFcmM3MjFUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0QXJiZXRoVG9rZW5Db25maWcoY29pbjogQXJiZXRoRVJDMjBUb2tlbik6IEV0aExpa2VUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2FyYmV0aCcgOiAndGFyYmV0aCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZEFyYmV0aFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEV0aExpa2VUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBBcmJldGhFUkMyMFRva2VuKSB7XG4gICAgICBhY2MucHVzaChnZXRBcmJldGhUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0T3BldGhUb2tlbkNvbmZpZyhjb2luOiBPcGV0aEVSQzIwVG9rZW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdvcGV0aCcgOiAndG9wZXRoJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkT3BldGhUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgT3BldGhFUkMyMFRva2VuKSB7XG4gICAgICBhY2MucHVzaChnZXRPcGV0aFRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRCYXNlZXRoVG9rZW5Db25maWcoY29pbjogRXRoTGlrZUVSQzIwVG9rZW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdiYXNlZXRoJyA6ICd0YmFzZWV0aCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZEJhc2VldGhUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgRXRoTGlrZUVSQzIwVG9rZW4gJiYgKGNvaW4ubmFtZS5pbmNsdWRlcygnYmFzZWV0aDonKSB8fCBjb2luLm5hbWUuaW5jbHVkZXMoJ3RiYXNlZXRoOicpKSkge1xuICAgICAgYWNjLnB1c2goZ2V0QmFzZWV0aFRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRPZ1Rva2VuQ29uZmlnKGNvaW46IEV0aExpa2VFUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnb2cnIDogJ3RvZycsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZE9nVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEV0aExpa2VFUkMyMFRva2VuICYmIChjb2luLm5hbWUuaW5jbHVkZXMoJ29nOicpIHx8IGNvaW4ubmFtZS5pbmNsdWRlcygndG9nOicpKSkge1xuICAgICAgYWNjLnB1c2goZ2V0T2dUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0U2VpZXZtVG9rZW5Db25maWcoY29pbjogRXRoTGlrZUVSQzIwVG9rZW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdzZWlldm0nIDogJ3RzZWlldm0nLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRTZWlldm1Ub2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgRXRoTGlrZUVSQzIwVG9rZW4gJiYgKGNvaW4ubmFtZS5pbmNsdWRlcygnc2VpZXZtOicpIHx8IGNvaW4ubmFtZS5pbmNsdWRlcygndHNlaWV2bTonKSkpIHtcbiAgICAgIGFjYy5wdXNoKGdldFNlaWV2bVRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRNb25hZFRva2VuQ29uZmlnKGNvaW46IEV0aExpa2VFUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnbW9uJyA6ICd0bW9uJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkTW9uYWRUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgRXRoTGlrZUVSQzIwVG9rZW4gJiYgKGNvaW4ubmFtZS5pbmNsdWRlcygnbW9uOicpIHx8IGNvaW4ubmFtZS5pbmNsdWRlcygndG1vbjonKSkpIHtcbiAgICAgIGFjYy5wdXNoKGdldE1vbmFkVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldFhkY1Rva2VuQ29uZmlnKGNvaW46IEV0aExpa2VFUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAneGRjJyA6ICd0eGRjJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuXG5jb25zdCBnZXRGb3JtYXR0ZWRYZGNUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgRXRoTGlrZUVSQzIwVG9rZW4gJiYgKGNvaW4ubmFtZS5pbmNsdWRlcygneGRjOicpIHx8IGNvaW4ubmFtZS5pbmNsdWRlcygndHhkYzonKSkpIHtcbiAgICAgIGFjYy5wdXNoKGdldFhkY1Rva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRGbG93VG9rZW5Db25maWcoY29pbjogRXRoTGlrZUVSQzIwVG9rZW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdmbG93JyA6ICd0ZmxvdycsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZEZsb3dUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgRXRoTGlrZUVSQzIwVG9rZW4gJiYgKGNvaW4ubmFtZS5pbmNsdWRlcygnZmxvdzonKSB8fCBjb2luLm5hbWUuaW5jbHVkZXMoJ3RmbG93OicpKSkge1xuICAgICAgYWNjLnB1c2goZ2V0Rmxvd1Rva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRMaW5lYWV0aFRva2VuQ29uZmlnKGNvaW46IEV0aExpa2VFUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnbGluZWFldGgnIDogJ3RsaW5lYWV0aCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZExpbmVhZXRoVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEV0aExpa2VFUkMyMFRva2VuICYmIChjb2luLm5hbWUuaW5jbHVkZXMoJ2xpbmVhZXRoOicpIHx8IGNvaW4ubmFtZS5pbmNsdWRlcygndGxpbmVhZXRoOicpKSkge1xuICAgICAgYWNjLnB1c2goZ2V0TGluZWFldGhUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0WmtldGhUb2tlbkNvbmZpZyhjb2luOiBaa2V0aEVSQzIwVG9rZW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICd6a2V0aCcgOiAndHprZXRoJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkWmtldGhUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgWmtldGhFUkMyMFRva2VuKSB7XG4gICAgICBhY2MucHVzaChnZXRaa2V0aFRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRCZXJhVG9rZW5Db25maWcoY29pbjogQmVyYUVSQzIwVG9rZW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdiZXJhJyA6ICd0YmVyYScsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZEJlcmFUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgQmVyYUVSQzIwVG9rZW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldEJlcmFUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0Q29yZWRhb1Rva2VuQ29uZmlnKGNvaW46IENvcmVkYW9FUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnY29yZWRhbycgOiAndGNvcmVkYW8nLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRDb3JlZGFvVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIENvcmVkYW9FUkMyMFRva2VuKSB7XG4gICAgICBhY2MucHVzaChnZXRDb3JlZGFvVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldFdvcmxkVG9rZW5Db25maWcoY29pbjogV29ybGRFUkMyMFRva2VuKTogRXRoTGlrZVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnd29ybGQnIDogJ3R3b3JsZCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZFdvcmxkVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIFdvcmxkRVJDMjBUb2tlbikge1xuICAgICAgYWNjLnB1c2goZ2V0V29ybGRUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0RmxyVG9rZW5Db25maWcoY29pbjogRmxyRVJDMjBUb2tlbik6IEV0aExpa2VUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2ZscicgOiAndGZscicsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZEZsclRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEV0aExpa2VUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBGbHJFUkMyMFRva2VuKSB7XG4gICAgICBhY2MucHVzaChnZXRGbHJUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0U29sVG9rZW5Db25maWcoY29pbjogU29sQ29pbik6IFNvbFRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnc29sJyA6ICd0c29sJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIHRva2VuQWRkcmVzczogY29pbi50b2tlbkFkZHJlc3MsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIGNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRTb2xUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBTb2xUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBTb2xDb2luKSB7XG4gICAgICBhY2MucHVzaChnZXRTb2xUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0QWxnb1Rva2VuQ29uZmlnKGNvaW46IEFsZ29Db2luKTogQWxnb1Rva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnYWxnbycgOiAndGFsZ28nLFxuICAgIGFsaWFzOiBjb2luLmFsaWFzLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuZXhwb3J0IGNvbnN0IGdldEZvcm1hdHRlZEFsZ29Ub2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBBbGdvVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgQWxnb0NvaW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldEFsZ29Ub2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0SGJhclRva2VuQ29uZmlnKGNvaW46IEhlZGVyYVRva2VuKTogSGJhclRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnaGJhcicgOiAndGhiYXInLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgIG5vZGVBY2NvdW50SWQ6IGNvaW4ubm9kZUFjY291bnRJZCxcbiAgICB0b2tlbklkOiBjb2luLnRva2VuSWQsXG4gICAgY29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZEhiYXJUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBIYmFyVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgSGVkZXJhVG9rZW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldEhiYXJUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0QWRhVG9rZW5Db25maWcoY29pbjogQWRhVG9rZW4pOiBBZGFUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2FkYScgOiAndGFkYScsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBwb2xpY3lJZDogY29pbi5wb2xpY3lJZCxcbiAgICBhc3NldE5hbWU6IGNvaW4uYXNzZXROYW1lLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICBjb250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkQWRhVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogQWRhVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgQWRhVG9rZW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldEFkYVRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRUcnhUb2tlbkNvbmZpZyhjb2luOiBUcm9uRXJjMjBDb2luKTogVHJ4VG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICd0cngnIDogJ3R0cngnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRUcnhUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBUcnhUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBUcm9uRXJjMjBDb2luKSB7XG4gICAgICBhY2MucHVzaChnZXRUcnhUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0WHJwVG9rZW5Db25maWcoY29pbjogWHJwQ29pbik6IFhycFRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAneHJwJyA6ICd0eHJwJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICBpc3N1ZXJBZGRyZXNzOiBjb2luLmlzc3VlckFkZHJlc3MsXG4gICAgY3VycmVuY3lDb2RlOiBjb2luLmN1cnJlbmN5Q29kZSxcbiAgICBkb21haW46IGNvaW4uZG9tYWluLFxuICAgIGNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRYcnBUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBYcnBUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBYcnBDb2luKSB7XG4gICAgICBhY2MucHVzaChnZXRYcnBUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0U3VpVG9rZW5Db25maWcoY29pbjogU3VpQ29pbik6IFN1aVRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnc3VpJyA6ICd0c3VpJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICBwYWNrYWdlSWQ6IGNvaW4ucGFja2FnZUlkLFxuICAgIG1vZHVsZTogY29pbi5tb2R1bGUsXG4gICAgc3ltYm9sOiBjb2luLnN5bWJvbCxcbiAgICBjb250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkU3VpVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogU3VpVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgU3VpQ29pbikge1xuICAgICAgYWNjLnB1c2goZ2V0U3VpVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldFRhb1Rva2VuQ29uZmlnKGNvaW46IFRhb0NvaW4pOiBUYW9Ub2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3RhbycgOiAndHRhbycsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgc3VibmV0SWQ6IGNvaW4uc3VibmV0SWQsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRUYW9Ub2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBUYW9Ub2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBUYW9Db2luKSB7XG4gICAgICBhY2MucHVzaChnZXRUYW9Ub2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0UG9seXhUb2tlbkNvbmZpZyhjb2luOiBQb2x5eENvaW4pOiBQb2x5eFRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAncG9seXgnIDogJ3Rwb2x5eCcsXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgdGlja2VyOiBjb2luLnRpY2tlcixcbiAgICBhc3NldElkOiBjb2luLmFzc2V0SWQsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRQb2x5eFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IFBvbHl4VG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgUG9seXhDb2luKSB7XG4gICAgICBhY2MucHVzaChnZXRQb2x5eFRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRBcHRUb2tlbkNvbmZpZyhjb2luOiBBcHRDb2luKTogQXB0VG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdhcHQnIDogJ3RhcHQnLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgYXNzZXRJZDogY29pbi5hc3NldElkLFxuICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgfTtcbn1cbmNvbnN0IGdldEZvcm1hdHRlZEFwdFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEFwdFRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEFwdENvaW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldEFwdFRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRBcHRORlRDb2xsZWN0aW9uQ29uZmlnKGNvaW46IEFwdE5GVENvbGxlY3Rpb24pOiBBcHRORlRDb2xsZWN0aW9uQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnYXB0JyA6ICd0YXB0JyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIG5mdENvbGxlY3Rpb25JZDogY29pbi5uZnRDb2xsZWN0aW9uSWQsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRWZXRORlRDb2xsZWN0aW9uQ29uZmlnKGNvaW46IFZldE5GVENvbGxlY3Rpb24pOiBWZXRORlRDb2xsZWN0aW9uQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAndmV0JyA6ICd0dmV0JyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIG5mdENvbGxlY3Rpb25JZDogY29pbi5uZnRDb2xsZWN0aW9uSWQsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkQXB0TkZUQ29sbGVjdGlvbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBBcHRORlRDb2xsZWN0aW9uQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEFwdE5GVENvbGxlY3Rpb24pIHtcbiAgICAgIGFjYy5wdXNoKGdldEFwdE5GVENvbGxlY3Rpb25Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmNvbnN0IGdldEZvcm1hdHRlZFZldE5GVENvbGxlY3Rpb25zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogVmV0TkZUQ29sbGVjdGlvbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBWZXRORlRDb2xsZWN0aW9uKSB7XG4gICAgICBhY2MucHVzaChnZXRWZXRORlRDb2xsZWN0aW9uQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRTaXAxMFRva2VuQ29uZmlnKGNvaW46IFNpcDEwVG9rZW4pOiBTaXAxMFRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnc3R4JyA6ICd0c3R4JyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIGFzc2V0SWQ6IGNvaW4uYXNzZXRJZCxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5jb25zdCBnZXRGb3JtYXR0ZWRTaXAxMFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IFNpcDEwVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgU2lwMTBUb2tlbikge1xuICAgICAgYWNjLnB1c2goZ2V0U2lwMTBUb2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZnVuY3Rpb24gZ2V0TmVwMTQxVG9rZW5Db25maWcoY29pbjogTmVwMTQxVG9rZW4pOiBOZXAxNDFUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ25lYXInIDogJ3RuZWFyJyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIGNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MsXG4gICAgc3RvcmFnZURlcG9zaXRBbW91bnQ6IGNvaW4uc3RvcmFnZURlcG9zaXRBbW91bnQsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuY29uc3QgZ2V0Rm9ybWF0dGVkTmVwMTQxVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogTmVwMTQxVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgTmVwMTQxVG9rZW4pIHtcbiAgICAgIGFjYy5wdXNoKGdldE5lcDE0MVRva2VuQ29uZmlnKGNvaW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5mdW5jdGlvbiBnZXRWZXRUb2tlbkNvbmZpZyhjb2luOiBWZXRUb2tlbik6IFZldFRva2VuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAndmV0JyA6ICd0dmV0JyxcbiAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgIGNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MsXG4gICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICB9O1xufVxuXG5jb25zdCBnZXRGb3JtYXR0ZWRWZXRUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBWZXRUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBWZXRUb2tlbikge1xuICAgICAgYWNjLnB1c2goZ2V0VmV0VG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmNvbnN0IGdldEZvcm1hdHRlZENvc21vc0NoYWluVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogQ29zbW9zVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgQ29zbW9zQ2hhaW5Ub2tlbikge1xuICAgICAgYWNjLnB1c2goZ2V0Q29zbW9zVG9rZW5Db25maWcoY29pbikpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmZ1bmN0aW9uIGdldENvc21vc1Rva2VuQ29uZmlnKGNvaW46IENvc21vc0NoYWluVG9rZW4pOiBDb3Ntb3NUb2tlbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogY29pbi5uYW1lLFxuICAgIGNvaW46IGNvaW4ubmFtZS5zcGxpdCgnOicpWzBdLnRvTG93ZXJDYXNlKCksXG4gICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICBkZW5vbTogY29pbi5kZW5vbSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEpldHRvblRva2VuQ29uZmlnKGNvaW46IEpldHRvblRva2VuKTogSmV0dG9uVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICd0b24nIDogJ3R0b24nLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgY29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcyxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5cbmNvbnN0IGdldEZvcm1hdHRlZEpldHRvblRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEpldHRvblRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEpldHRvblRva2VuKSB7XG4gICAgICBhY2MucHVzaChnZXRKZXR0b25Ub2tlbkNvbmZpZyhjb2luKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxudHlwZSBFdGhMaWtlVG9rZW5NYXAgPSB7XG4gIFtLIGluIENvaW5GYW1pbHldOiB7IHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW10gfTtcbn07XG5cbmV4cG9ydCBlbnVtIFRva2VuVHlwZUVudW0ge1xuICBFUkMyMCA9ICdlcmMyMCcsXG4gIEVSQzcyMSA9ICdlcmM3MjEnLFxufVxuXG5mdW5jdGlvbiBnZXRFdGhMaWtlVG9rZW5Db25maWcoY29pbjogRXRoTGlrZUVSQzIwVG9rZW4pOiBFdGhMaWtlVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5hbWUuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEV0aExpa2VFUkM3MjFUb2tlbkNvbmZpZyhjb2luOiBFdGhMaWtlRVJDNzIxVG9rZW4pOiBFdGhMaWtlRVJDNzIxVG9rZW5Db25maWcge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICBjb2luOiBjb2luLm5hbWUuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpLFxuICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWRFdGhMaWtlVG9rZW5Db25maWcgPSAoXG4gIGN1c3RvbUNvaW5NYXAgPSBjb2lucyxcbiAgdG9rZW5UeXBlOiBUb2tlblR5cGVFbnVtXG4pOiBFdGhMaWtlVG9rZW5Db25maWdbXSA9PiB7XG4gIGxldCBjbGFzc05hbWU6IHR5cGVvZiBFdGhMaWtlRVJDMjBUb2tlbiB8IHR5cGVvZiBFdGhMaWtlRVJDNzIxVG9rZW47XG4gIGlmICh0b2tlblR5cGUgPT09IFRva2VuVHlwZUVudW0uRVJDMjApIHtcbiAgICBjbGFzc05hbWUgPSBFdGhMaWtlRVJDMjBUb2tlbjtcbiAgfSBlbHNlIGlmICh0b2tlblR5cGUgPT09IFRva2VuVHlwZUVudW0uRVJDNzIxKSB7XG4gICAgY2xhc3NOYW1lID0gRXRoTGlrZUVSQzcyMVRva2VuO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdG9rZW4gdHlwZTogJHt0b2tlblR5cGV9YCk7XG4gIH1cblxuICByZXR1cm4gY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIGNsYXNzTmFtZSkge1xuICAgICAgaWYgKHRva2VuVHlwZSA9PT0gVG9rZW5UeXBlRW51bS5FUkMyMCkge1xuICAgICAgICBhY2MucHVzaChnZXRFdGhMaWtlVG9rZW5Db25maWcoY29pbiBhcyBFdGhMaWtlRVJDMjBUb2tlbikpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlblR5cGUgPT09IFRva2VuVHlwZUVudW0uRVJDNzIxKSB7XG4gICAgICAgIGFjYy5wdXNoKGdldEV0aExpa2VFUkM3MjFUb2tlbkNvbmZpZyhjb2luIGFzIEV0aExpa2VFUkM3MjFUb2tlbikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG59O1xuXG4vKiBHZXQgYWxsIHRva2VucyBvZiBhIGdpdmVuIGV0aCBsaWtlIGNvaW4gZm9yIGEgZ2l2ZW4gbmV0d29yayAqL1xuZXhwb3J0IGNvbnN0IGdldEV0aExpa2VUb2tlbnMgPSAobmV0d29yazogJ01haW5uZXQnIHwgJ1Rlc3RuZXQnLCB0b2tlblR5cGU6IFRva2VuVHlwZUVudW0pOiBFdGhMaWtlVG9rZW5NYXAgPT4ge1xuICBsZXQgZmVhdHVyZTogQ29pbkZlYXR1cmU7XG4gIGNvbnN0IG5ldHdvcmtUb2tlbnMgPSBnZXRGb3JtYXR0ZWRFdGhMaWtlVG9rZW5Db25maWcoY29pbnMsIHRva2VuVHlwZSkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayk7XG5cbiAgaWYgKHRva2VuVHlwZSA9PT0gVG9rZW5UeXBlRW51bS5FUkMyMCkge1xuICAgIGZlYXR1cmUgPSBDb2luRmVhdHVyZS5TVVBQT1JUU19FUkMyMDtcbiAgfSBlbHNlIGlmICh0b2tlblR5cGUgPT09IFRva2VuVHlwZUVudW0uRVJDNzIxKSB7XG4gICAgZmVhdHVyZSA9IENvaW5GZWF0dXJlLlNVUFBPUlRTX0VSQzcyMTtcbiAgfVxuXG4gIGNvbnN0IGV0aExpa2VUb2tlbk1hcCA9IHt9IGFzIEV0aExpa2VUb2tlbk1hcDtcbiAgLy8gVE9ETzogYWRkIElQIHRva2VuIGhlcmUgYW5kIHRlc3QgY2hhbmdlcyAoVGlja2V0OiBodHRwczovL2JpdGdvaW5jLmF0bGFzc2lhbi5uZXQvYnJvd3NlL1dJTi03ODM1KVxuICBjb25zdCBlbmFibGVkQ2hhaW5zID0gWydpcCcsICdoeXBlZXZtJywgJ3BsdW1lJ10gYXMgc3RyaW5nW107XG5cbiAgY29pbnMuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgIC8vIFRPRE86IHJlbW92ZSBlbmFibGVkIGNoYWlucyBvbmNlIGNoYW5nZXMgYXJlIGRvbmUgKFRpY2tldDogaHR0cHM6Ly9iaXRnb2luYy5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9XSU4tNzgzNSlcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEFjY291bnRDb2luICYmIGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoZmVhdHVyZSkgJiYgZW5hYmxlZENoYWlucy5pbmNsdWRlcyhjb2luLmZhbWlseSkpIHtcbiAgICAgIGNvbnN0IGNvaW5OYW1lID0gY29pbi5mYW1pbHk7XG4gICAgICBjb25zdCBjb2luTmFtZUZvck5ldHdvcmsgPSBuZXR3b3JrID09PSAnVGVzdG5ldCcgPyBgdCR7Y29pbk5hbWV9YCA6IGNvaW5OYW1lO1xuXG4gICAgICBldGhMaWtlVG9rZW5NYXBbY29pbi5mYW1pbHldID0ge1xuICAgICAgICB0b2tlbnM6IG5ldHdvcmtUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4uY29pbiA9PT0gY29pbk5hbWVGb3JOZXR3b3JrKSxcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXRoTGlrZVRva2VuTWFwO1xufTtcblxuY29uc3QgbWVyZ2VFdGhMaWtlVG9rZW5NYXAgPSAoLi4ubWFwczogRXRoTGlrZVRva2VuTWFwW10pOiBFdGhMaWtlVG9rZW5NYXAgPT4ge1xuICBjb25zdCBtZXJnZWRNYXA6IEV0aExpa2VUb2tlbk1hcCA9IHt9IGFzIEV0aExpa2VUb2tlbk1hcDtcblxuICBtYXBzLmZvckVhY2goKG1hcCkgPT4ge1xuICAgIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoIW1lcmdlZE1hcFtrZXkgYXMgQ29pbkZhbWlseV0pIHtcbiAgICAgICAgbWVyZ2VkTWFwW2tleSBhcyBDb2luRmFtaWx5XSA9IHsgdG9rZW5zOiBbXSB9O1xuICAgICAgfVxuICAgICAgbWVyZ2VkTWFwW2tleSBhcyBDb2luRmFtaWx5XS50b2tlbnMucHVzaCguLi5tYXBba2V5IGFzIENvaW5GYW1pbHldLnRva2Vucyk7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbWVyZ2VkTWFwO1xufTtcblxuY29uc3QgZ2V0Rm9ybWF0dGVkVG9rZW5zQnlOZXR3b3JrID0gKG5ldHdvcms6ICdNYWlubmV0JyB8ICdUZXN0bmV0JywgY29pbk1hcDogdHlwZW9mIGNvaW5zKSA9PiB7XG4gIGNvbnN0IG5ldHdvcmtUeXBlID0gbmV0d29yayA9PT0gJ01haW5uZXQnID8gTmV0d29ya1R5cGUuTUFJTk5FVCA6IE5ldHdvcmtUeXBlLlRFU1RORVQ7XG5cbiAgY29uc3QgZXRoTGlrZVRva2VuTWFwID0gZ2V0RXRoTGlrZVRva2VucyhuZXR3b3JrLCBUb2tlblR5cGVFbnVtLkVSQzIwKTtcbiAgY29uc3QgZXRoTGlrZUVyYzcyMVRva2VuTWFwID0gZ2V0RXRoTGlrZVRva2VucyhuZXR3b3JrLCBUb2tlblR5cGVFbnVtLkVSQzcyMSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5tZXJnZUV0aExpa2VUb2tlbk1hcChldGhMaWtlVG9rZW5NYXAsIGV0aExpa2VFcmM3MjFUb2tlbk1hcCksXG4gICAgZXRoOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEVyYzIwVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgICAgbmZ0czogZ2V0Rm9ybWF0dGVkRXJjNzIxVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgeGxtOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFN0ZWxsYXJUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICBhbGdvOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEFsZ29Ub2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICBvZmM6IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkT2ZjQ29pbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gY29pbk1hcC5nZXQodG9rZW4udHlwZSkubmV0d29yay50eXBlID09PSBuZXR3b3JrVHlwZSksXG4gICAgfSxcbiAgICBjZWxvOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZENlbG9Ub2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICBic2M6IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQnNjVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgZW9zOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEVvc1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSBuZXR3b3JrKSxcbiAgICB9LFxuICAgIGF2YXhjOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEF2YXhDVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgcG9seWdvbjoge1xuICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRQb2x5Z29uVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgc29uZWl1bToge1xuICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRTb25laXVtVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgYXJiZXRoOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEFyYmV0aFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSBuZXR3b3JrKSxcbiAgICB9LFxuICAgIG9wZXRoOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZE9wZXRoVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgYmFzZWV0aDoge1xuICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRCYXNlZXRoVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgb2c6IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkT2dUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICBmbG93OiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEZsb3dUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICBtb246IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkTW9uYWRUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICB4ZGM6IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkWGRjVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgbGluZWFldGg6IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkTGluZWFldGhUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICBzZWlldm06IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkU2VpZXZtVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgemtldGg6IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkWmtldGhUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICBzb2w6IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkU29sVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgaGJhcjoge1xuICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRIYmFyVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgYWRhOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEFkYVRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSBuZXR3b3JrKSxcbiAgICB9LFxuICAgIHRyeDoge1xuICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRUcnhUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICB4cnA6IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkWHJwVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgc3VpOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFN1aVRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSBuZXR3b3JrKSxcbiAgICB9LFxuICAgIHRhbzoge1xuICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRUYW9Ub2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICBwb2x5eDoge1xuICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRQb2x5eFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSBuZXR3b3JrKSxcbiAgICB9LFxuICAgIGJlcmE6IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQmVyYVRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSBuZXR3b3JrKSxcbiAgICB9LFxuICAgIGNvcmVkYW86IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQ29yZWRhb1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSBuZXR3b3JrKSxcbiAgICB9LFxuICAgIHdvcmxkOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFdvcmxkVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgZmxyOiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEZsclRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSBuZXR3b3JrKSxcbiAgICB9LFxuXG4gICAgc3R4OiB7XG4gICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFNpcDEwVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gICAgbmVhcjoge1xuICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWROZXAxNDFUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICBjb3Ntb3M6IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQ29zbW9zQ2hhaW5Ub2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gbmV0d29yayksXG4gICAgfSxcbiAgICB0b246IHtcbiAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkSmV0dG9uVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09IG5ldHdvcmspLFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rm9ybWF0dGVkVG9rZW5zID0gKGNvaW5NYXAgPSBjb2lucyk6IFRva2VucyA9PiB7XG4gIGNvbnN0IGZvcm1hdHRlZEFwdE5GVENvbGxlY3Rpb25zID0gZ2V0Rm9ybWF0dGVkQXB0TkZUQ29sbGVjdGlvbnMoY29pbk1hcCk7XG4gIGNvbnN0IGZvcm1hdHRlZFZldE5GVENvbGxlY3Rpb25zID0gZ2V0Rm9ybWF0dGVkVmV0TkZUQ29sbGVjdGlvbnMoY29pbk1hcCk7XG5cbiAgcmV0dXJuIHtcbiAgICBiaXRjb2luOiB7XG4gICAgICAuLi5nZXRGb3JtYXR0ZWRUb2tlbnNCeU5ldHdvcmsoJ01haW5uZXQnLCBjb2luTWFwKSxcbiAgICAgIGFwdDoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEFwdFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgICBuZnRDb2xsZWN0aW9uczogZm9ybWF0dGVkQXB0TkZUQ29sbGVjdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIChuZnRDb2xsZWN0aW9uOiBBcHRORlRDb2xsZWN0aW9uQ29uZmlnKSA9PiBuZnRDb2xsZWN0aW9uLm5ldHdvcmsgPT09ICdNYWlubmV0J1xuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHZldDoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFZldFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgICBuZnRDb2xsZWN0aW9uczogZm9ybWF0dGVkVmV0TkZUQ29sbGVjdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIChuZnRDb2xsZWN0aW9uOiBWZXRORlRDb2xsZWN0aW9uQ29uZmlnKSA9PiBuZnRDb2xsZWN0aW9uLm5ldHdvcmsgPT09ICdNYWlubmV0J1xuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHRlc3RuZXQ6IHtcbiAgICAgIC4uLmdldEZvcm1hdHRlZFRva2Vuc0J5TmV0d29yaygnVGVzdG5ldCcsIGNvaW5NYXApLFxuICAgICAgYXB0OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQXB0VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICAgIG5mdENvbGxlY3Rpb25zOiBmb3JtYXR0ZWRBcHRORlRDb2xsZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKG5mdENvbGxlY3Rpb246IEFwdE5GVENvbGxlY3Rpb25Db25maWcpID0+IG5mdENvbGxlY3Rpb24ubmV0d29yayA9PT0gJ1Rlc3RuZXQnXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgdmV0OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkVmV0VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICAgIG5mdENvbGxlY3Rpb25zOiBmb3JtYXR0ZWRWZXRORlRDb2xsZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKG5mdENvbGxlY3Rpb246IFZldE5GVENvbGxlY3Rpb25Db25maWcpID0+IG5mdENvbGxlY3Rpb24ubmV0d29yayA9PT0gJ1Rlc3RuZXQnXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuXG4vKipcbiAqIFZlcmlmeSBtYWlubmV0IG9yIHRlc3RuZXQgdG9rZW5zXG4gKiBAcGFyYW0gdG9rZW5zXG4gKi9cbmNvbnN0IHZlcmlmeVRva2VucyA9IGZ1bmN0aW9uICh0b2tlbnM6IEJhc2VUb2tlbkNvbmZpZ1tdKSB7XG4gIGNvbnN0IHZlcmlmaWVkVG9rZW5zOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICBpZiAodmVyaWZpZWRUb2tlbnNbdG9rZW4udHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndG9rZW4gOiAnICsgdG9rZW4udHlwZSArICcgZHVwbGljYXRlZC4nKTtcbiAgICB9XG4gICAgdmVyaWZpZWRUb2tlbnNbdG9rZW4udHlwZV0gPSB0cnVlO1xuXG4gICAgaWYgKFxuICAgICAgKHRva2VuIGFzIEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcpLnRva2VuQ29udHJhY3RBZGRyZXNzICYmXG4gICAgICAodG9rZW4gYXMgQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZykudG9rZW5Db250cmFjdEFkZHJlc3MgIT09XG4gICAgICAgICh0b2tlbiBhcyBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnKS50b2tlbkNvbnRyYWN0QWRkcmVzcy50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0b2tlbiBjb250cmFjdDogJyArIHRva2VuLnR5cGUgKyAnIGlzIG5vdCBhbGwgbG93ZXIgY2FzZTogJyArICh0b2tlbiBhcyBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB2ZXJpZmllZFRva2Vucztcbn07XG5cbmV4cG9ydCBjb25zdCB0b2tlbnMgPSBnZXRGb3JtYXR0ZWRUb2tlbnMoKTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdHRlZEFsZ29Ub2tlbnMgPSBnZXRGb3JtYXR0ZWRBbGdvVG9rZW5zKCk7XG5cbmNvbnN0IG1haW5uZXRFcmMyMFRva2VucyA9IHZlcmlmeVRva2Vucyh0b2tlbnMuYml0Y29pbi5ldGgudG9rZW5zKTtcbmNvbnN0IG1haW5uZXRFcmM3MjFUb2tlbnMgPSB2ZXJpZnlUb2tlbnModG9rZW5zLmJpdGNvaW4uZXRoLm5mdHMpO1xuY29uc3QgbWFpbm5ldFN0ZWxsYXJUb2tlbnMgPSB2ZXJpZnlUb2tlbnModG9rZW5zLmJpdGNvaW4ueGxtLnRva2Vucyk7XG5leHBvcnQgY29uc3QgbWFpbm5ldFRva2VucyA9IHsgLi4ubWFpbm5ldEVyYzIwVG9rZW5zLCAuLi5tYWlubmV0RXJjNzIxVG9rZW5zLCAuLi5tYWlubmV0U3RlbGxhclRva2VucyB9O1xuXG5jb25zdCB0ZXN0bmV0RXJjMjBUb2tlbnMgPSB2ZXJpZnlUb2tlbnModG9rZW5zLnRlc3RuZXQuZXRoLnRva2Vucyk7XG5jb25zdCB0ZXN0bmV0RXJjNzIxVG9rZW5zID0gdmVyaWZ5VG9rZW5zKHRva2Vucy50ZXN0bmV0LmV0aC5uZnRzKTtcbmNvbnN0IHRlc3RuZXRTdGVsbGFyVG9rZW5zID0gdmVyaWZ5VG9rZW5zKHRva2Vucy50ZXN0bmV0LnhsbS50b2tlbnMpO1xuZXhwb3J0IGNvbnN0IHRlc3RuZXRUb2tlbnMgPSB7IC4uLnRlc3RuZXRFcmMyMFRva2VucywgLi4udGVzdG5ldEVyYzcyMVRva2VucywgLi4udGVzdG5ldFN0ZWxsYXJUb2tlbnMgfTtcblxuLyoqXG4gKiBHZXQgZm9ybWF0dGVkIHRva2VuIGNvbmZpZ3VyYXRpb24gZm9yIGEgc2luZ2xlIGNvaW5cbiAqIEBwYXJhbSBjb2luIC0gU3RhdGljIEJhc2UgY29pbiBpbnN0YW5jZVxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCB0b2tlbiBjb25maWd1cmF0aW9uIGZvciB0aGUgY29pbiwgb3IgdW5kZWZpbmVkIGlmIG5vdCBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdHRlZFRva2VuQ29uZmlnRm9yQ29pbihjb2luOiBSZWFkb25seTxCYXNlQ29pbj4pOiBUb2tlbkNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjb2luIGluc3RhbmNlb2YgRXJjMjBDb2luKSB7XG4gICAgcmV0dXJuIGdldEVyYzIwVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIFN0ZWxsYXJDb2luKSB7XG4gICAgcmV0dXJuIGdldFN0ZWxsYXJUb2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgT2ZjQ29pbikge1xuICAgIHJldHVybiBnZXRPZmNUb2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgQ2Vsb0NvaW4pIHtcbiAgICByZXR1cm4gZ2V0Q2Vsb1Rva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBCc2NDb2luKSB7XG4gICAgcmV0dXJuIGdldEJzY1Rva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBFb3NDb2luKSB7XG4gICAgcmV0dXJuIGdldEVvc1Rva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBBdmF4RVJDMjBUb2tlbikge1xuICAgIHJldHVybiBnZXRBdmF4Q1Rva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKFxuICAgIGNvaW4gaW5zdGFuY2VvZiBQb2x5Z29uRVJDMjBUb2tlbiB8fFxuICAgICgoY29pbiBpbnN0YW5jZW9mIEVyYzcyMUNvaW4gfHwgY29pbiBpbnN0YW5jZW9mIEVyYzExNTVDb2luKSAmJiBjb2luLmZhbWlseSA9PT0gQ29pbkZhbWlseS5QT0xZR09OKVxuICApIHtcbiAgICByZXR1cm4gZ2V0UG9seWdvblRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKChjb2luIGluc3RhbmNlb2YgRXJjNzIxQ29pbiB8fCBjb2luIGluc3RhbmNlb2YgRXJjMTE1NUNvaW4pICYmIGNvaW4uZmFtaWx5ID09PSBDb2luRmFtaWx5LlNPTkVJVU0pIHtcbiAgICByZXR1cm4gZ2V0U29uZWl1bVRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBFcmM3MjFDb2luICYmIGNvaW4uZmFtaWx5ID09PSBDb2luRmFtaWx5LkVUSCkge1xuICAgIHJldHVybiBnZXRFcmM3MjFUb2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgQXJiZXRoRVJDMjBUb2tlbikge1xuICAgIHJldHVybiBnZXRBcmJldGhUb2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgT3BldGhFUkMyMFRva2VuKSB7XG4gICAgcmV0dXJuIGdldE9wZXRoVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIFprZXRoRVJDMjBUb2tlbikge1xuICAgIHJldHVybiBnZXRaa2V0aFRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBTb2xDb2luKSB7XG4gICAgcmV0dXJuIGdldFNvbFRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBIZWRlcmFUb2tlbikge1xuICAgIHJldHVybiBnZXRIYmFyVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIEFkYVRva2VuKSB7XG4gICAgcmV0dXJuIGdldEFkYVRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBUcm9uRXJjMjBDb2luKSB7XG4gICAgcmV0dXJuIGdldFRyeFRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBYcnBDb2luKSB7XG4gICAgcmV0dXJuIGdldFhycFRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBTdWlDb2luKSB7XG4gICAgcmV0dXJuIGdldFN1aVRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBUYW9Db2luKSB7XG4gICAgcmV0dXJuIGdldFRhb1Rva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBQb2x5eENvaW4pIHtcbiAgICByZXR1cm4gZ2V0UG9seXhUb2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgQXB0Q29pbikge1xuICAgIHJldHVybiBnZXRBcHRUb2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgQXB0TkZUQ29sbGVjdGlvbikge1xuICAgIHJldHVybiBnZXRBcHRORlRDb2xsZWN0aW9uQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBTaXAxMFRva2VuKSB7XG4gICAgcmV0dXJuIGdldFNpcDEwVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIE5lcDE0MVRva2VuKSB7XG4gICAgcmV0dXJuIGdldE5lcDE0MVRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBDb3Ntb3NDaGFpblRva2VuKSB7XG4gICAgcmV0dXJuIGdldENvc21vc1Rva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBWZXRUb2tlbikge1xuICAgIHJldHVybiBnZXRWZXRUb2tlbkNvbmZpZyhjb2luKTtcbiAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgVmV0TkZUQ29sbGVjdGlvbikge1xuICAgIHJldHVybiBnZXRWZXRORlRDb2xsZWN0aW9uQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBDb3JlZGFvRVJDMjBUb2tlbikge1xuICAgIHJldHVybiBnZXRDb3JlZGFvVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIEpldHRvblRva2VuKSB7XG4gICAgcmV0dXJuIGdldEpldHRvblRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBGbHJFUkMyMFRva2VuKSB7XG4gICAgcmV0dXJuIGdldEZsclRva2VuQ29uZmlnKGNvaW4pO1xuICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBFdGhMaWtlRVJDMjBUb2tlbikge1xuICAgIHJldHVybiBnZXRFdGhMaWtlVG9rZW5Db25maWcoY29pbik7XG4gIH0gZWxzZSBpZiAoY29pbiBpbnN0YW5jZW9mIEV0aExpa2VFUkM3MjFUb2tlbikge1xuICAgIHJldHVybiBnZXRFdGhMaWtlRVJDNzIxVG9rZW5Db25maWcoY29pbik7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
|