@witnet/solidity 3.2.0 → 3.2.2

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.
@@ -9,6 +9,12 @@ const DEFAULT_LIMIT = 64;
9
9
  const DEFAULT_SINCE = -5000;
10
10
  const WITNET_SDK_RADON_ASSETS_PATH = process.env.WITNET_SDK_RADON_ASSETS_PATH || "../../../../witnet/assets";
11
11
  const isModuleInitialized = fs.existsSync("./witnet/assets/index.cjs");
12
+ function camelize(str) {
13
+ return str
14
+ .split(/[\s-_]+/)
15
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())
16
+ .join("");
17
+ }
12
18
  function* chunks(arr, n) {
13
19
  for (let i = 0; i < arr.length; i += n) {
14
20
  yield arr.slice(i, i + n);
@@ -112,18 +118,19 @@ function flattenObject(ob) {
112
118
  return toReturn;
113
119
  }
114
120
  function getNetworkAddresses(network) {
115
- let res = addresses?.default;
116
- getNetworkTagsFromString(network).forEach((net) => {
117
- res = merge(res, addresses[net]);
121
+ let res = merge({}, addresses?.default || {});
122
+ const tags = getNetworkTagsFromString(network);
123
+ tags.forEach((net) => {
124
+ res = merge({}, res, addresses?.[net] || {});
118
125
  });
119
- return merge(res, fs.existsSync(`${WITNET_SDK_RADON_ASSETS_PATH}/../addresses.json`)
126
+ return merge({}, res, fs.existsSync(`${WITNET_SDK_RADON_ASSETS_PATH}/../addresses.json`)
120
127
  ? require(`${WITNET_SDK_RADON_ASSETS_PATH}/../addresses.json`)[network.toLowerCase()]
121
128
  : {});
122
129
  }
123
130
  function getNetworkArtifacts(network) {
124
- let res = artifacts?.default;
131
+ let res = merge({}, artifacts?.default || {});
125
132
  getNetworkTagsFromString(network).forEach((net) => {
126
- res = merge(res, artifacts[net]);
133
+ res = merge({}, res, artifacts?.[net] || {});
127
134
  });
128
135
  return res;
129
136
  }
@@ -206,14 +213,29 @@ function supportedNetworks(ecosystem) {
206
213
  .sort()
207
214
  .filter((network) => network.indexOf(":") >= 0 && (!ecosystem || network.startsWith(ecosystem.toLowerCase())))
208
215
  .map((network) => {
216
+ const addrs = { ...getNetworkAddresses(network) };
217
+ const _artfs = { ...getNetworkArtifacts(network) };
218
+ const { core: { WitOracle }, apps: { WitRandomnessV2, WitRandomnessV3, WitPriceFeeds }, } = addrs;
209
219
  return [
210
220
  network,
211
221
  {
222
+ addresses: {
223
+ WitOracle,
224
+ WitRandomness: WitRandomnessV3 || WitRandomnessV2,
225
+ WitPriceFeeds,
226
+ },
227
+ chainId: networks[network].network_id,
228
+ ecosystem: network.split(":")[0].toLowerCase(),
229
+ explorerUrl: networks[network]?.verify?.explorerUrl,
212
230
  mainnet: networks[network]?.mainnet || false,
213
- network_id: networks[network].network_id,
231
+ name: networks[network]?.name ||
232
+ network
233
+ .split(":")
234
+ .map((part) => camelize(part))
235
+ .join(" "),
214
236
  port: networks[network].port,
237
+ pushOnly: getNetworkArtifacts(network)?.core?.WitOracle.indexOf("PushOnly") >= 0 ?? false,
215
238
  symbol: networks[network]?.symbol || "ETH",
216
- verified: networks[network]?.verify?.explorerUrl,
217
239
  },
218
240
  ];
219
241
  }));
@@ -340,4 +362,4 @@ module.exports = {
340
362
  colorstrip,
341
363
  prompter,
342
364
  };
343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5janMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmluL2hlbHBlcnMuY2pzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRXRDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQzdELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUM1RSxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUV6RSxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM5QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDNUIsTUFBTSw0QkFBNEIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixJQUFJLDJCQUEyQixDQUFDO0FBRTdHLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBRXZFLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztBQUNGLENBQUM7QUFFRCxNQUFNLE1BQU0sR0FBRztJQUNkLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLFNBQVM7SUFDdEMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsU0FBUztJQUN0QyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTO0lBQ3RDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLFNBQVM7SUFDdkMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsU0FBUztJQUMzQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTO0lBQ3JDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLFNBQVM7SUFDeEMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsU0FBUztJQUN6QyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxTQUFTO0lBQ3pDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsYUFBYSxHQUFHLFNBQVM7SUFDekMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsU0FBUztJQUMxQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxTQUFTO0lBQzVDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsZUFBZSxHQUFHLFNBQVM7SUFDNUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsU0FBUztJQUMzQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTO0lBQ3ZDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLFNBQVM7SUFDdkMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsU0FBUztJQUN4QyxRQUFRLEVBQUUs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QUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQUksS0FBSztRQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxHQUFHO0lBQ2hCLGtCQUFrQjtJQUNsQixhQUFhO0lBQ2IsYUFBYTtJQUNiLE1BQU07SUFDTixNQUFNO0lBQ04sZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQixzQkFBc0I7SUFDdEIsYUFBYTtJQUNiLFNBQVM7SUFDVCxTQUFTO0lBQ1QsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIseUJBQXlCO0lBQ3pCLHdCQUF3QjtJQUN4QixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLFVBQVU7SUFDVixNQUFNO0lBQ04sVUFBVTtJQUNWLFFBQVE7Q0FDUixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZnMgPSByZXF1aXJlKFwibm9kZTpmc1wiKTtcbmNvbnN0IG1lcmdlID0gcmVxdWlyZShcImxvZGFzaC5tZXJnZVwiKTtcblxuY29uc3QgYWRkcmVzc2VzID0gcmVxdWlyZShcIi4uLy4uL21pZ3JhdGlvbnMvYWRkcmVzc2VzLmpzb25cIik7XG5jb25zdCBhcnRpZmFjdHMgPSByZXF1aXJlKFwiLi4vLi4vbWlncmF0aW9ucy9zZXR0aW5ncy9hcnRpZmFjdHMuanNcIikuZGVmYXVsdDtcbmNvbnN0IGNvbnN0cnVjdG9yQXJncyA9IHJlcXVpcmUoXCIuLi8uLi9taWdyYXRpb25zL2NvbnN0cnVjdG9yQXJncy5qc29uXCIpO1xuXG5jb25zdCBERUZBVUxUX0JBVENIX1NJWkUgPSA2NDtcbmNvbnN0IERFRkFVTFRfTElNSVQgPSA2NDtcbmNvbnN0IERFRkFVTFRfU0lOQ0UgPSAtNTAwMDtcbmNvbnN0IFdJVE5FVF9TREtfUkFET05fQVNTRVRTX1BBVEggPSBwcm9jZXNzLmVudi5XSVRORVRfU0RLX1JBRE9OX0FTU0VUU19QQVRIIHx8IFwiLi4vLi4vLi4vLi4vd2l0bmV0L2Fzc2V0c1wiO1xuXG5jb25zdCBpc01vZHVsZUluaXRpYWxpemVkID0gZnMuZXhpc3RzU3luYyhcIi4vd2l0bmV0L2Fzc2V0cy9pbmRleC5janNcIik7XG5cbmZ1bmN0aW9uKiBjaHVua3MoYXJyLCBuKSB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSBuKSB7XG5cdFx0eWllbGQgYXJyLnNsaWNlKGksIGkgKyBuKTtcblx0fVxufVxuXG5jb25zdCBjb2xvcnMgPSB7XG5cdGJsdWU6IChzdHIpID0+IGBcXHgxYlszNG0ke3N0cn1cXHgxYlswbWAsXG5cdGN5YW46IChzdHIpID0+IGBcXHgxYlszNm0ke3N0cn1cXHgxYlswbWAsXG5cdGdyYXk6IChzdHIpID0+IGBcXHgxYls5MG0ke3N0cn1cXHgxYlswbWAsXG5cdGdyZWVuOiAoc3RyKSA9PiBgXFx4MWJbMzJtJHtzdHJ9XFx4MWJbMG1gLFxuXHRtYWdlbnRhOiAoc3RyKSA9PiBgXFx4MWJbMDszNW0ke3N0cn1cXHgxYlswbWAsXG5cdHJlZDogKHN0cikgPT4gYFxceDFiWzMxbSR7c3RyfVxceDFiWzBtYCxcblx0eWVsbG93OiAoc3RyKSA9PiBgXFx4MWJbMzNtJHtzdHJ9XFx4MWJbMG1gLFxuXHR3aGl0ZTogKHN0cikgPT4gYFxceDFiWzA7MzhtJHtzdHJ9XFx4MWJbMG1gLFxuXHRsYmx1ZTogKHN0cikgPT4gYFxceDFiWzE7OTRtJHtzdHJ9XFx4MWJbMG1gLFxuXHRsY3lhbjogKHN0cikgPT4gYFxceDFiWzE7OTZtJHtzdHJ9XFx4MWJbMG1gLFxuXHRsZ3JlZW46IChzdHIpID0+IGBcXHgxYlsxOzkybSR7c3RyfVxceDFiWzBtYCxcblx0bG1hZ2VudGE6IChzdHIpID0+IGBcXHgxYlsxOzk1bSR7c3RyfVxceDFiWzBtYCxcblx0bHdoaXRlOiAoc3RyKSA9PiBgXFx4MWJbMDsxOzk4bSR7c3RyfVxceDFiWzBtYCxcblx0bHllbGxvdzogKHN0cikgPT4gYFxceDFiWzE7OTNtJHtzdHJ9XFx4MWJbMG1gLFxuXHRtYmx1ZTogKHN0cikgPT4gYFxceDFiWzk0bSR7c3RyfVxceDFiWzBtYCxcblx0bWN5YW46IChzdHIpID0+IGBcXHgxYls5Nm0ke3N0cn1cXHgxYlswbWAsXG5cdG1ncmVlbjogKHN0cikgPT4gYFxceDFiWzkybSR7c3RyfVxceDFiWzBtYCxcblx0bW1hZ2VudGE6IChzdHIpID0+IGBcXHgxYlswOzk1bSR7c3RyfVxceDFiWzBtYCxcblx0bXJlZDogKHN0cikgPT4gYFxceDFiWzkxbSR7c3RyfVxceDFiWzBtYCxcblx0bXllbGxvdzogKHN0cikgPT4gYFxceDFiWzkzbSR7c3RyfVxceDFiWzBtYCxcbn07XG5cbmNvbnN0IGNvbG9yc3RyaXAgPSAoc3RyKSA9PlxuXHRzdHIucmVwbGFjZSgvW1xcdTAwMWJcXHUwMDliXVtbKCkjOz9dKig/OlswLTldezEsNH0oPzo7WzAtOV17MCw0fSkqKT9bMC05QS1PUlpjZi1ucXJ5PT48XS9nLCBcIlwiKTtcblxuY29uc3QgY29tbWFzID0gKG51bWJlcikgPT4ge1xuXHRjb25zdCBwYXJ0cyA9IG51bWJlcj8udG9TdHJpbmcoKS5zcGxpdChcIi5cIikgfHwgW1wiXCJdO1xuXHRjb25zdCByZXN1bHQgPVxuXHRcdHBhcnRzLmxlbmd0aCA8PSAxXG5cdFx0XHQ/IGAke3BhcnRzWzBdLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKX1gXG5cdFx0XHQ6IGAke3BhcnRzWzBdLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKX0uJHtwYXJ0c1sxXX1gO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuZnVuY3Rpb24gZGVsZXRlRXh0cmFGbGFncyhhcmdzKSB7XG5cdGNvbnN0IGRlbGV0ZWQgPSBbXTtcblx0cmV0dXJuIFtcblx0XHRhcmdzPy5maWx0ZXIoKGFyZykgPT4ge1xuXHRcdFx0aWYgKGFyZy5zdGFydHNXaXRoKFwiLS1cIikpIHtcblx0XHRcdFx0ZGVsZXRlZC5wdXNoKGFyZy5zbGljZSgyKSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdGRlbGV0ZWQsXG5cdF07XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RGbGFnc0Zyb21BcmdzKGFyZ3MsIGZsYWdzKSB7XG5cdGNvbnN0IGN1cmF0ZWQgPSB7fTtcblx0aWYgKGFyZ3MgJiYgQXJyYXkuaXNBcnJheShhcmdzKSAmJiBmbGFncykge1xuXHRcdGZsYWdzLmZvckVhY2goKGZsYWcpID0+IHtcblx0XHRcdGNvbnN0IGluZGV4ID0gYXJncy5pbmRleE9mKGAtLSR7ZmxhZ31gKTtcblx0XHRcdGlmIChpbmRleCA+PSAwKSB7XG5cdFx0XHRcdGN1cmF0ZWRbZmxhZ10gPSB0cnVlO1xuXHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIFthcmdzIHx8IFtdLCBjdXJhdGVkXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdE9wdGlvbnNGcm9tQXJncyhhcmdzLCBvcHRpb25zKSB7XG5cdGNvbnN0IGN1cmF0ZWQgPSB7fTtcblx0aWYgKGFyZ3MgJiYgQXJyYXkuaXNBcnJheShhcmdzKSAmJiBvcHRpb25zKSB7XG5cdFx0b3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcblx0XHRcdGNvbnN0IGluZGV4ID0gYXJncy5pbmRleE9mKGAtLSR7b3B0aW9ufWApO1xuXHRcdFx0aWYgKGluZGV4ID49IDApIHtcblx0XHRcdFx0Y3VyYXRlZFtvcHRpb25dID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdGlmICghYXJnc1tpbmRleCArIDFdIHx8IGFyZ3NbaW5kZXggKyAxXS5zdGFydHNXaXRoKFwiLS1cIikpIHtcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0Y3VyYXRlZFtvcHRpb25dID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGN1cmF0ZWRbb3B0aW9uXSA9IGFyZ3NbaW5kZXggKyAxXTtcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gW2FyZ3MgfHwgW10sIGN1cmF0ZWRdO1xufVxuXG5mdW5jdGlvbiBmbGF0dGVuT2JqZWN0KG9iKSB7XG5cdGNvbnN0IHRvUmV0dXJuID0ge307XG5cdGZvciAoY29uc3QgaSBpbiBvYikge1xuXHRcdGlmICghT2JqZWN0Lmhhc093bihvYiwgaSkpIGNvbnRpbnVlO1xuXHRcdGlmICh0eXBlb2Ygb2JbaV0gPT09IFwib2JqZWN0XCIgJiYgb2JbaV0gIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGZsYXRPYmplY3QgPSBmbGF0dGVuT2JqZWN0KG9iW2ldKTtcblx0XHRcdGZvciAoY29uc3QgeCBpbiBmbGF0T2JqZWN0KSB7XG5cdFx0XHRcdGlmICghT2JqZWN0Lmhhc093bihmbGF0T2JqZWN0LCB4KSkgY29udGludWU7XG5cdFx0XHRcdHRvUmV0dXJuW2Ake2l9LiR7eH1gXSA9IGZsYXRPYmplY3RbeF07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRvUmV0dXJuW2ldID0gb2JbaV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0b1JldHVybjtcbn1cblxuZnVuY3Rpb24gZ2V0TmV0d29ya0FkZHJlc3NlcyhuZXR3b3JrKSB7XG5cdGxldCByZXMgPSBhZGRyZXNzZXM/LmRlZmF1bHQ7XG5cdGdldE5ldHdvcmtUYWdzRnJvbVN0cmluZyhuZXR3b3JrKS5mb3JFYWNoKChuZXQpID0+IHtcblx0XHRyZXMgPSBtZXJnZShyZXMsIGFkZHJlc3Nlc1tuZXRdKTtcblx0fSk7XG5cdHJldHVybiBtZXJnZShcblx0XHRyZXMsXG5cdFx0ZnMuZXhpc3RzU3luYyhgJHtXSVRORVRfU0RLX1JBRE9OX0FTU0VUU19QQVRIfS8uLi9hZGRyZXNzZXMuanNvbmApXG5cdFx0XHQ/IHJlcXVpcmUoYCR7V0lUTkVUX1NES19SQURPTl9BU1NFVFNfUEFUSH0vLi4vYWRkcmVzc2VzLmpzb25gKVtuZXR3b3JrLnRvTG93ZXJDYXNlKCldXG5cdFx0XHQ6IHt9LFxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXROZXR3b3JrQXJ0aWZhY3RzKG5ldHdvcmspIHtcblx0bGV0IHJlcyA9IGFydGlmYWN0cz8uZGVmYXVsdDtcblx0Z2V0TmV0d29ya1RhZ3NGcm9tU3RyaW5nKG5ldHdvcmspLmZvckVhY2goKG5ldCkgPT4ge1xuXHRcdHJlcyA9IG1lcmdlKHJlcywgYXJ0aWZhY3RzW25ldF0pO1xuXHR9KTtcblx0cmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0TmV0d29ya0NvbnN0cnVjdG9yQXJncyhuZXR3b3JrKSB7XG5cdGxldCByZXMgPSB7fTtcblx0Z2V0TmV0d29ya1RhZ3NGcm9tU3RyaW5nKG5ldHdvcmspLmZvckVhY2goKG5ldCkgPT4ge1xuXHRcdHJlcyA9IG1lcmdlKHJlcywgY29uc3RydWN0b3JBcmdzW25ldF0pO1xuXHR9KTtcblx0cmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0TmV0d29ya1RhZ3NGcm9tU3RyaW5nKG5ldHdvcmspIHtcblx0bmV0d29yayA9IG5ldHdvcmsgPyBuZXR3b3JrLnRvTG93ZXJDYXNlKCkgOiBcImRldmVsb3BtZW50XCI7XG5cdGNvbnN0IHRhZ3MgPSBbXTtcblx0Y29uc3QgcGFydHMgPSBuZXR3b3JrLnNwbGl0KFwiOlwiKTtcblx0Zm9yIChsZXQgaXggPSAwOyBpeCA8IHBhcnRzLmxlbmd0aDsgaXgrKykge1xuXHRcdHRhZ3MucHVzaChwYXJ0cy5zbGljZSgwLCBpeCArIDEpLmpvaW4oXCI6XCIpKTtcblx0fVxuXHRyZXR1cm4gdGFncztcbn1cblxuZnVuY3Rpb24gaW1wb3J0UmFkb25Bc3NldHMob3B0aW9ucykge1xuXHRjb25zdCBhc3NldHMgPSBvcHRpb25zPy5sZWdhY3kgPyB7fSA6IHJlcXVpcmUoXCJAd2l0bmV0L3Nkay9hc3NldHNcIik7XG5cdHJldHVybiBpc01vZHVsZUluaXRpYWxpemVkICYmIGZzLmV4aXN0c1N5bmMoYCR7V0lUTkVUX1NES19SQURPTl9BU1NFVFNfUEFUSH0vaW5kZXguY2pzYClcblx0XHQ/IG1lcmdlKGFzc2V0cywgcmVxdWlyZShgJHtXSVRORVRfU0RLX1JBRE9OX0FTU0VUU19QQVRIfS9pbmRleC5janNgKSlcblx0XHQ6IGFzc2V0cztcbn1cblxuZnVuY3Rpb24gb3JkZXJLZXlzKG9iaikge1xuXHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKS5zb3J0KGZ1bmN0aW9uIGtleU9yZGVyKGsxLCBrMikge1xuXHRcdGlmIChrMSA8IGsyKSByZXR1cm4gLTE7XG5cdFx0ZWxzZSBpZiAoazEgPiBrMikgcmV0dXJuICsxO1xuXHRcdGVsc2UgcmV0dXJuIDA7XG5cdH0pO1xuXHRsZXQgaTtcblx0Y29uc3QgYWZ0ZXIgPSB7fTtcblx0Zm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRhZnRlcltrZXlzW2ldXSA9IG9ialtrZXlzW2ldXTtcblx0XHRkZWxldGUgb2JqW2tleXNbaV1dO1xuXHR9XG5cdGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0b2JqW2tleXNbaV1dID0gYWZ0ZXJba2V5c1tpXV07XG5cdH1cblx0cmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gcHJvbXB0ZXIocHJvbWlzZSkge1xuXHRjb25zdCBsb2FkaW5nID0gKCgpID0+IHtcblx0XHRjb25zdCBoID0gW1wifFwiLCBcIi9cIiwgXCItXCIsIFwiXFxcXFwiXTtcblx0XHRsZXQgaSA9IDA7XG5cdFx0cmV0dXJuIHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdGkgPSBpID4gMyA/IDAgOiBpO1xuXHRcdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxcYlxcYiR7aFtpXX0gYCk7XG5cdFx0XHRpKys7XG5cdFx0fSwgNTApO1xuXHR9KSgpO1xuXHRyZXR1cm4gcHJvbWlzZS50aGVuKChyZXN1bHQpID0+IHtcblx0XHRjbGVhckludGVydmFsKGxvYWRpbmcpO1xuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiXFxiXFxiXCIpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiByZWFkV2l0bmV0SnNvbkZpbGVzKC4uLmZpbGVuYW1lcykge1xuXHRyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdGZpbGVuYW1lcy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0Y29uc3QgZmlsZXBhdGggPSBgLi93aXRuZXQvJHtrZXl9Lmpzb25gO1xuXHRcdFx0cmV0dXJuIFtrZXksIGZzLmV4aXN0c1N5bmMoZmlsZXBhdGgpID8gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZXBhdGgpKSA6IHt9XTtcblx0XHR9KSxcblx0KTtcbn1cblxuZnVuY3Rpb24gc2F2ZVdpdG5ldEpzb25GaWxlcyhkYXRhKSB7XG5cdE9iamVjdC5lbnRyaWVzKGRhdGEpLmZvckVhY2goKFtrZXksIG9ial0pID0+IHtcblx0XHRjb25zdCBmaWxlcGF0aCA9IGAuL3dpdG5ldC8ke2tleX0uanNvbmA7XG5cdFx0aWYgKCFmcy5leGlzdHNTeW5jKGZpbGVwYXRoKSkgZnMud3JpdGVGaWxlU3luYyhmaWxlcGF0aCwgXCJ7fVwiKTtcblx0XHRjb25zdCBqc29uID0gbWVyZ2UoSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZXBhdGgpKSwgb2JqKTtcblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVwYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCA0KSwgeyBmbGFnOiBcIncrXCIgfSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0ZWROZXR3b3JrcyhlY29zeXN0ZW0pIHtcblx0Y29uc3QgbmV0d29ya3MgPSByZXF1aXJlKFwiLi4vLi4vbWlncmF0aW9ucy9zZXR0aW5ncy9uZXR3b3Jrcy5qc1wiKS5kZWZhdWx0O1xuXHRyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdE9iamVjdC5rZXlzKGNvbnN0cnVjdG9yQXJncylcblx0XHRcdC5zb3J0KClcblx0XHRcdC5maWx0ZXIoKG5ldHdvcmspID0+IG5ldHdvcmsuaW5kZXhPZihcIjpcIikgPj0gMCAmJiAoIWVjb3N5c3RlbSB8fCBuZXR3b3JrLnN0YXJ0c1dpdGgoZWNvc3lzdGVtLnRvTG93ZXJDYXNlKCkpKSlcblx0XHRcdC5tYXAoKG5ldHdvcmspID0+IHtcblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRuZXR3b3JrLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG1haW5uZXQ6IG5ldHdvcmtzW25ldHdvcmtdPy5tYWlubmV0IHx8IGZhbHNlLFxuXHRcdFx0XHRcdFx0bmV0d29ya19pZDogbmV0d29ya3NbbmV0d29ya10ubmV0d29ya19pZCxcblx0XHRcdFx0XHRcdHBvcnQ6IG5ldHdvcmtzW25ldHdvcmtdLnBvcnQsXG5cdFx0XHRcdFx0XHRzeW1ib2w6IG5ldHdvcmtzW25ldHdvcmtdPy5zeW1ib2wgfHwgXCJFVEhcIixcblx0XHRcdFx0XHRcdHZlcmlmaWVkOiBuZXR3b3Jrc1tuZXR3b3JrXT8udmVyaWZ5Py5leHBsb3JlclVybCxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdO1xuXHRcdFx0fSksXG5cdCk7XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzTmV0d29yayhuZXR3b3JrKSB7XG5cdHJldHVybiBuZXR3b3JrICYmIE9iamVjdC5rZXlzKGNvbnN0cnVjdG9yQXJncykuaW5jbHVkZXMobmV0d29yay50b0xvd2VyQ2FzZSgpKTtcbn1cblxuZnVuY3Rpb24gdHJhY2VIZWFkZXIoaGVhZGVyLCBjb2xvciA9IGNvbG9ycy53aGl0ZSwgaW5kZW50ID0gXCJcIikge1xuXHRjb25zb2xlLmluZm8oYCR7aW5kZW50feKUjOKUgCR7XCLilIBcIi5yZXBlYXQoaGVhZGVyLmxlbmd0aCl94pSA4pSQYCk7XG5cdGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSCICR7Y29sb3IoaGVhZGVyKX0g4pSCYCk7XG5cdGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSU4pSAJHtcIuKUgFwiLnJlcGVhdChoZWFkZXIubGVuZ3RoKX3ilIDilJhgKTtcbn1cblxuZnVuY3Rpb24gdHJhY2VUYWJsZShyZWNvcmRzLCBvcHRpb25zKSB7XG5cdGNvbnN0IHN0cmluZ2lmeSA9IChkYXRhLCBodW1hbml6ZXJzLCBpbmRleCkgPT5cblx0XHRodW1hbml6ZXJzPy5baW5kZXhdID8gaHVtYW5pemVyc1tpbmRleF0oZGF0YSkudG9TdHJpbmcoKSA6IChkYXRhPy50b1N0cmluZygpID8/IFwiXCIpO1xuXHRjb25zdCByZWR1Y2VNYXggPSAobnVtYmVycykgPT4gbnVtYmVycy5yZWR1Y2UoKGN1cnIsIHByZXYpID0+IE1hdGgubWF4KGN1cnIsIHByZXYpLCAwKTtcblx0aWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG5cdGNvbnN0IGluZGVudCA9IG9wdGlvbnM/LmluZGVudCB8fCBcIlwiO1xuXHRjb25zdCBudW1Db2x1bW5zID0gcmVkdWNlTWF4KHJlY29yZHMubWFwKChyZWNvcmQpID0+IHJlY29yZD8ubGVuZ3RoIHx8IDEpKTtcblx0Y29uc3QgbWF4Q29sdW1uV2lkdGggPSBvcHRpb25zPy5tYXhDb2x1bW5XaWR0aCB8fCA4MDtcblx0Y29uc3QgdGFibGUgPSB0cmFuc3Bvc2UocmVjb3JkcywgbnVtQ29sdW1ucyk7XG5cdG9wdGlvbnMud2lkdGhzID1cblx0XHRvcHRpb25zPy53aWR0aHMgfHxcblx0XHR0YWJsZS5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IHtcblx0XHRcdGxldCBtYXhXaWR0aCA9IHJlZHVjZU1heChjb2x1bW4ubWFwKChmaWVsZCkgPT4gY29sb3JzdHJpcChzdHJpbmdpZnkoZmllbGQsIG9wdGlvbnM/Lmh1bWFuaXplcnMsIGluZGV4KSkubGVuZ3RoKSk7XG5cdFx0XHRpZiAob3B0aW9ucz8uaGVhZGxpbmVzPy5baW5kZXhdKSB7XG5cdFx0XHRcdG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIGNvbG9yc3RyaXAob3B0aW9ucy5oZWFkbGluZXNbaW5kZXhdLnJlcGxhY2VBbGwoXCI6XCIsIFwiXCIpKS5sZW5ndGgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE1hdGgubWluKG1heFdpZHRoLCBtYXhDb2x1bW5XaWR0aCk7XG5cdFx0fSk7XG5cdGxldCBoZWFkbGluZSA9IG9wdGlvbnMud2lkdGhzLm1hcCgobWF4V2lkdGgpID0+IFwi4pSAXCIucmVwZWF0KG1heFdpZHRoKSk7XG5cdGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSM4pSAJHtoZWFkbGluZS5qb2luKFwi4pSA4pSs4pSAXCIpfeKUgOKUkGApO1xuXHRpZiAob3B0aW9ucz8uaGVhZGxpbmVzKSB7XG5cdFx0aGVhZGxpbmUgPSBvcHRpb25zLndpZHRocy5tYXAoKG1heFdpZHRoLCBpbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgY2FwdGlvbiA9IG9wdGlvbnMuaGVhZGxpbmVzW2luZGV4XS5yZXBsYWNlQWxsKFwiOlwiLCBcIlwiKTtcblx0XHRcdGNvbnN0IGNhcHRpb25MZW5ndGggPSBjb2xvcnN0cmlwKGNhcHRpb24pLmxlbmd0aDtcblx0XHRcdHJldHVybiBgJHtjb2xvcnMud2hpdGUoY2FwdGlvbil9JHtcIiBcIi5yZXBlYXQobWF4V2lkdGggLSBjYXB0aW9uTGVuZ3RoKX1gO1xuXHRcdH0pO1xuXHRcdGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSCICR7aGVhZGxpbmUuam9pbihcIiDilIIgXCIpfSDilIJgKTtcblx0XHRoZWFkbGluZSA9IG9wdGlvbnMud2lkdGhzLm1hcCgobWF4V2lkdGgpID0+IFwi4pSAXCIucmVwZWF0KG1heFdpZHRoKSk7XG5cdFx0Y29uc29sZS5pbmZvKGAke2luZGVudH3ilJzilIAke2hlYWRsaW5lLmpvaW4oXCLilIDilLzilIBcIil94pSA4pSkYCk7XG5cdH1cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCByZWNvcmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGV0IGxpbmUgPSBcIlwiO1xuXHRcdGZvciAobGV0IGogPSAwOyBqIDwgbnVtQ29sdW1uczsgaisrKSB7XG5cdFx0XHRsZXQgZGF0YSA9IHRhYmxlW2pdW2ldO1xuXHRcdFx0bGV0IGNvbG9yO1xuXHRcdFx0aWYgKG9wdGlvbnM/LmNvbG9ycz8uW2pdKSB7XG5cdFx0XHRcdGNvbG9yID0gb3B0aW9ucy5jb2xvcnNbal07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb2xvciA9XG5cdFx0XHRcdFx0dHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHRcdD8gY29sb3JzLmdyZWVuXG5cdFx0XHRcdFx0XHQ6IE51bWJlcihkYXRhKSA9PT0gZGF0YSAmJiBkYXRhICUgMSAhPT0gMCAvLyBpcyBmbG9hdCBudW1iZXI/XG5cdFx0XHRcdFx0XHRcdD8gY29sb3JzLnllbGxvd1xuXHRcdFx0XHRcdFx0XHQ6ICh4KSA9PiB4O1xuXHRcdFx0fVxuXHRcdFx0ZGF0YSA9IHN0cmluZ2lmeShkYXRhLCBvcHRpb25zPy5odW1hbml6ZXJzLCBqKTtcblx0XHRcdGlmIChjb2xvcnN0cmlwKGRhdGEpLmxlbmd0aCA+IG1heENvbHVtbldpZHRoKSB7XG5cdFx0XHRcdHdoaWxlIChjb2xvcnN0cmlwKGRhdGEpLmxlbmd0aCA+IG1heENvbHVtbldpZHRoIC0gMykge1xuXHRcdFx0XHRcdGRhdGEgPSBkYXRhLnNsaWNlKDAsIC0xKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhICs9IFwiLi4uXCI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBkYXRhTGVuZ3RoID0gY29sb3JzdHJpcChkYXRhKS5sZW5ndGg7XG5cdFx0XHRpZiAob3B0aW9ucz8uaGVhZGxpbmVzICYmIG9wdGlvbnMuaGVhZGxpbmVzW2pdWzBdID09PSBcIjpcIikge1xuXHRcdFx0XHRkYXRhID0gYCR7Y29sb3IoZGF0YSl9JHtcIiBcIi5yZXBlYXQob3B0aW9ucy53aWR0aHNbal0gLSBkYXRhTGVuZ3RoKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YSA9IGAke1wiIFwiLnJlcGVhdChvcHRpb25zLndpZHRoc1tqXSAtIGRhdGFMZW5ndGgpfSR7Y29sb3IoZGF0YSl9YDtcblx0XHRcdH1cblx0XHRcdGxpbmUgKz0gYOKUgiAke2RhdGF9IGA7XG5cdFx0fVxuXHRcdGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR9JHtsaW5lfeKUgmApO1xuXHR9XG5cdGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKChtYXhXaWR0aCkgPT4gXCLilIBcIi5yZXBlYXQobWF4V2lkdGgpKTtcblx0Y29uc29sZS5pbmZvKGAke2luZGVudH3ilJTilIAke2hlYWRsaW5lLmpvaW4oXCLilIDilLTilIBcIil94pSA4pSYYCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zcG9zZShyZWNvcmRzLCBudW1Db2x1bW5zKSB7XG5cdGNvbnN0IGNvbHVtbnMgPSBbXTtcblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG51bUNvbHVtbnM7IGluZGV4KyspIHtcblx0XHRjb2x1bW5zLnB1c2gocmVjb3Jkcy5tYXAoKHJvdykgPT4gcm93W2luZGV4XSkpO1xuXHR9XG5cdHJldHVybiBjb2x1bW5zO1xufVxuXG5mdW5jdGlvbiB0cmFjZURhdGEoaGVhZGVyLCBkYXRhLCB3aWR0aCwgY29sb3IpIHtcblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoaGVhZGVyKTtcblx0aWYgKGNvbG9yKSBwcm9jZXNzLnN0ZG91dC53cml0ZShjb2xvcik7XG5cdGZvciAobGV0IGl4ID0gMDsgaXggPCBkYXRhLmxlbmd0aCAvIHdpZHRoOyBpeCsrKSB7XG5cdFx0aWYgKGl4ID4gMCkgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXCIgXCIucmVwZWF0KGhlYWRlci5sZW5ndGgpKTtcblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShkYXRhLnNsaWNlKHdpZHRoICogaXgsIHdpZHRoICogKGl4ICsgMSkpKTtcblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcblwiKTtcblx0fVxuXHRpZiAoY29sb3IpIHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiXFx4MWJbMG1cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRERUZBVUxUX0JBVENIX1NJWkUsXG5cdERFRkFVTFRfTElNSVQsXG5cdERFRkFVTFRfU0lOQ0UsXG5cdGNvbG9ycyxcblx0Y2h1bmtzLFxuXHRkZWxldGVFeHRyYUZsYWdzLFxuXHRleHRyYWN0RmxhZ3NGcm9tQXJncyxcblx0ZXh0cmFjdE9wdGlvbnNGcm9tQXJncyxcblx0ZmxhdHRlbk9iamVjdCxcblx0b3JkZXJLZXlzLFxuXHR0cmFjZURhdGEsXG5cdHRyYWNlSGVhZGVyLFxuXHRnZXROZXR3b3JrQWRkcmVzc2VzLFxuXHRnZXROZXR3b3JrQXJ0aWZhY3RzLFxuXHRnZXROZXR3b3JrQ29uc3RydWN0b3JBcmdzLFxuXHRnZXROZXR3b3JrVGFnc0Zyb21TdHJpbmcsXG5cdHN1cHBvcnRlZE5ldHdvcmtzLFxuXHRzdXBwb3J0c05ldHdvcmssXG5cdGltcG9ydFJhZG9uQXNzZXRzLFxuXHRyZWFkV2l0bmV0SnNvbkZpbGVzLFxuXHRzYXZlV2l0bmV0SnNvbkZpbGVzLFxuXHR0cmFjZVRhYmxlLFxuXHRjb21tYXMsXG5cdGNvbG9yc3RyaXAsXG5cdHByb21wdGVyLFxufTtcbiJdfQ==
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5janMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmluL2hlbHBlcnMuY2pzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRXRDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQzdELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUM1RSxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUV6RSxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM5QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDNUIsTUFBTSw0QkFBNEIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixJQUFJLDJCQUEyQixDQUFDO0FBRTdHLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBRXZFLFNBQVMsUUFBUSxDQUFDLEdBQUc7SUFDcEIsT0FBTyxHQUFHO1NBQ1IsS0FBSyxDQUFDLFNBQVMsQ0FBQztTQUNoQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN6RSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDWixDQUFDO0FBRUQsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLEtBQUssSUFBSSxD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Q2pELElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRztJQUNoQixrQkFBa0I7SUFDbEIsYUFBYTtJQUNiLGFBQWE7SUFDYixNQUFNO0lBQ04sTUFBTTtJQUNOLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsc0JBQXNCO0lBQ3RCLGFBQWE7SUFDYixTQUFTO0lBQ1QsU0FBUztJQUNULFdBQVc7SUFDWCxtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLHlCQUF5QjtJQUN6Qix3QkFBd0I7SUFDeEIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsTUFBTTtJQUNOLFVBQVU7SUFDVixRQUFRO0NBQ1IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGZzID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG5jb25zdCBtZXJnZSA9IHJlcXVpcmUoXCJsb2Rhc2gubWVyZ2VcIik7XG5cbmNvbnN0IGFkZHJlc3NlcyA9IHJlcXVpcmUoXCIuLi8uLi9taWdyYXRpb25zL2FkZHJlc3Nlcy5qc29uXCIpO1xuY29uc3QgYXJ0aWZhY3RzID0gcmVxdWlyZShcIi4uLy4uL21pZ3JhdGlvbnMvc2V0dGluZ3MvYXJ0aWZhY3RzLmpzXCIpLmRlZmF1bHQ7XG5jb25zdCBjb25zdHJ1Y3RvckFyZ3MgPSByZXF1aXJlKFwiLi4vLi4vbWlncmF0aW9ucy9jb25zdHJ1Y3RvckFyZ3MuanNvblwiKTtcblxuY29uc3QgREVGQVVMVF9CQVRDSF9TSVpFID0gNjQ7XG5jb25zdCBERUZBVUxUX0xJTUlUID0gNjQ7XG5jb25zdCBERUZBVUxUX1NJTkNFID0gLTUwMDA7XG5jb25zdCBXSVRORVRfU0RLX1JBRE9OX0FTU0VUU19QQVRIID0gcHJvY2Vzcy5lbnYuV0lUTkVUX1NES19SQURPTl9BU1NFVFNfUEFUSCB8fCBcIi4uLy4uLy4uLy4uL3dpdG5ldC9hc3NldHNcIjtcblxuY29uc3QgaXNNb2R1bGVJbml0aWFsaXplZCA9IGZzLmV4aXN0c1N5bmMoXCIuL3dpdG5ldC9hc3NldHMvaW5kZXguY2pzXCIpO1xuXG5mdW5jdGlvbiBjYW1lbGl6ZShzdHIpIHtcblx0cmV0dXJuIHN0clxuXHRcdC5zcGxpdCgvW1xccy1fXSsvKVxuXHRcdC5tYXAoKHBhcnQpID0+IHBhcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwYXJ0LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCkpXG5cdFx0LmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uKiBjaHVua3MoYXJyLCBuKSB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSBuKSB7XG5cdFx0eWllbGQgYXJyLnNsaWNlKGksIGkgKyBuKTtcblx0fVxufVxuXG5jb25zdCBjb2xvcnMgPSB7XG5cdGJsdWU6IChzdHIpID0+IGBcXHgxYlszNG0ke3N0cn1cXHgxYlswbWAsXG5cdGN5YW46IChzdHIpID0+IGBcXHgxYlszNm0ke3N0cn1cXHgxYlswbWAsXG5cdGdyYXk6IChzdHIpID0+IGBcXHgxYls5MG0ke3N0cn1cXHgxYlswbWAsXG5cdGdyZWVuOiAoc3RyKSA9PiBgXFx4MWJbMzJtJHtzdHJ9XFx4MWJbMG1gLFxuXHRtYWdlbnRhOiAoc3RyKSA9PiBgXFx4MWJbMDszNW0ke3N0cn1cXHgxYlswbWAsXG5cdHJlZDogKHN0cikgPT4gYFxceDFiWzMxbSR7c3RyfVxceDFiWzBtYCxcblx0eWVsbG93OiAoc3RyKSA9PiBgXFx4MWJbMzNtJHtzdHJ9XFx4MWJbMG1gLFxuXHR3aGl0ZTogKHN0cikgPT4gYFxceDFiWzA7MzhtJHtzdHJ9XFx4MWJbMG1gLFxuXHRsYmx1ZTogKHN0cikgPT4gYFxceDFiWzE7OTRtJHtzdHJ9XFx4MWJbMG1gLFxuXHRsY3lhbjogKHN0cikgPT4gYFxceDFiWzE7OTZtJHtzdHJ9XFx4MWJbMG1gLFxuXHRsZ3JlZW46IChzdHIpID0+IGBcXHgxYlsxOzkybSR7c3RyfVxceDFiWzBtYCxcblx0bG1hZ2VudGE6IChzdHIpID0+IGBcXHgxYlsxOzk1bSR7c3RyfVxceDFiWzBtYCxcblx0bHdoaXRlOiAoc3RyKSA9PiBgXFx4MWJbMDsxOzk4bSR7c3RyfVxceDFiWzBtYCxcblx0bHllbGxvdzogKHN0cikgPT4gYFxceDFiWzE7OTNtJHtzdHJ9XFx4MWJbMG1gLFxuXHRtYmx1ZTogKHN0cikgPT4gYFxceDFiWzk0bSR7c3RyfVxceDFiWzBtYCxcblx0bWN5YW46IChzdHIpID0+IGBcXHgxYls5Nm0ke3N0cn1cXHgxYlswbWAsXG5cdG1ncmVlbjogKHN0cikgPT4gYFxceDFiWzkybSR7c3RyfVxceDFiWzBtYCxcblx0bW1hZ2VudGE6IChzdHIpID0+IGBcXHgxYlswOzk1bSR7c3RyfVxceDFiWzBtYCxcblx0bXJlZDogKHN0cikgPT4gYFxceDFiWzkxbSR7c3RyfVxceDFiWzBtYCxcblx0bXllbGxvdzogKHN0cikgPT4gYFxceDFiWzkzbSR7c3RyfVxceDFiWzBtYCxcbn07XG5cbmNvbnN0IGNvbG9yc3RyaXAgPSAoc3RyKSA9PlxuXHRzdHIucmVwbGFjZSgvW1xcdTAwMWJcXHUwMDliXVtbKCkjOz9dKig/OlswLTldezEsNH0oPzo7WzAtOV17MCw0fSkqKT9bMC05QS1PUlpjZi1ucXJ5PT48XS9nLCBcIlwiKTtcblxuY29uc3QgY29tbWFzID0gKG51bWJlcikgPT4ge1xuXHRjb25zdCBwYXJ0cyA9IG51bWJlcj8udG9TdHJpbmcoKS5zcGxpdChcIi5cIikgfHwgW1wiXCJdO1xuXHRjb25zdCByZXN1bHQgPVxuXHRcdHBhcnRzLmxlbmd0aCA8PSAxXG5cdFx0XHQ/IGAke3BhcnRzWzBdLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKX1gXG5cdFx0XHQ6IGAke3BhcnRzWzBdLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKX0uJHtwYXJ0c1sxXX1gO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuZnVuY3Rpb24gZGVsZXRlRXh0cmFGbGFncyhhcmdzKSB7XG5cdGNvbnN0IGRlbGV0ZWQgPSBbXTtcblx0cmV0dXJuIFtcblx0XHRhcmdzPy5maWx0ZXIoKGFyZykgPT4ge1xuXHRcdFx0aWYgKGFyZy5zdGFydHNXaXRoKFwiLS1cIikpIHtcblx0XHRcdFx0ZGVsZXRlZC5wdXNoKGFyZy5zbGljZSgyKSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdGRlbGV0ZWQsXG5cdF07XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RGbGFnc0Zyb21BcmdzKGFyZ3MsIGZsYWdzKSB7XG5cdGNvbnN0IGN1cmF0ZWQgPSB7fTtcblx0aWYgKGFyZ3MgJiYgQXJyYXkuaXNBcnJheShhcmdzKSAmJiBmbGFncykge1xuXHRcdGZsYWdzLmZvckVhY2goKGZsYWcpID0+IHtcblx0XHRcdGNvbnN0IGluZGV4ID0gYXJncy5pbmRleE9mKGAtLSR7ZmxhZ31gKTtcblx0XHRcdGlmIChpbmRleCA+PSAwKSB7XG5cdFx0XHRcdGN1cmF0ZWRbZmxhZ10gPSB0cnVlO1xuXHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIFthcmdzIHx8IFtdLCBjdXJhdGVkXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdE9wdGlvbnNGcm9tQXJncyhhcmdzLCBvcHRpb25zKSB7XG5cdGNvbnN0IGN1cmF0ZWQgPSB7fTtcblx0aWYgKGFyZ3MgJiYgQXJyYXkuaXNBcnJheShhcmdzKSAmJiBvcHRpb25zKSB7XG5cdFx0b3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcblx0XHRcdGNvbnN0IGluZGV4ID0gYXJncy5pbmRleE9mKGAtLSR7b3B0aW9ufWApO1xuXHRcdFx0aWYgKGluZGV4ID49IDApIHtcblx0XHRcdFx0Y3VyYXRlZFtvcHRpb25dID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdGlmICghYXJnc1tpbmRleCArIDFdIHx8IGFyZ3NbaW5kZXggKyAxXS5zdGFydHNXaXRoKFwiLS1cIikpIHtcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0Y3VyYXRlZFtvcHRpb25dID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGN1cmF0ZWRbb3B0aW9uXSA9IGFyZ3NbaW5kZXggKyAxXTtcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gW2FyZ3MgfHwgW10sIGN1cmF0ZWRdO1xufVxuXG5mdW5jdGlvbiBmbGF0dGVuT2JqZWN0KG9iKSB7XG5cdGNvbnN0IHRvUmV0dXJuID0ge307XG5cdGZvciAoY29uc3QgaSBpbiBvYikge1xuXHRcdGlmICghT2JqZWN0Lmhhc093bihvYiwgaSkpIGNvbnRpbnVlO1xuXHRcdGlmICh0eXBlb2Ygb2JbaV0gPT09IFwib2JqZWN0XCIgJiYgb2JbaV0gIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGZsYXRPYmplY3QgPSBmbGF0dGVuT2JqZWN0KG9iW2ldKTtcblx0XHRcdGZvciAoY29uc3QgeCBpbiBmbGF0T2JqZWN0KSB7XG5cdFx0XHRcdGlmICghT2JqZWN0Lmhhc093bihmbGF0T2JqZWN0LCB4KSkgY29udGludWU7XG5cdFx0XHRcdHRvUmV0dXJuW2Ake2l9LiR7eH1gXSA9IGZsYXRPYmplY3RbeF07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRvUmV0dXJuW2ldID0gb2JbaV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0b1JldHVybjtcbn1cblxuZnVuY3Rpb24gZ2V0TmV0d29ya0FkZHJlc3NlcyhuZXR3b3JrKSB7XG5cdGxldCByZXMgPSBtZXJnZSh7fSwgYWRkcmVzc2VzPy5kZWZhdWx0IHx8IHt9KTtcblx0Y29uc3QgdGFncyA9IGdldE5ldHdvcmtUYWdzRnJvbVN0cmluZyhuZXR3b3JrKTtcblx0dGFncy5mb3JFYWNoKChuZXQpID0+IHtcblx0XHRyZXMgPSBtZXJnZSh7fSwgcmVzLCBhZGRyZXNzZXM/LltuZXRdIHx8IHt9KTtcblx0fSk7XG5cdHJldHVybiBtZXJnZShcblx0XHR7fSxcblx0XHRyZXMsXG5cdFx0ZnMuZXhpc3RzU3luYyhgJHtXSVRORVRfU0RLX1JBRE9OX0FTU0VUU19QQVRIfS8uLi9hZGRyZXNzZXMuanNvbmApXG5cdFx0XHQ/IHJlcXVpcmUoYCR7V0lUTkVUX1NES19SQURPTl9BU1NFVFNfUEFUSH0vLi4vYWRkcmVzc2VzLmpzb25gKVtuZXR3b3JrLnRvTG93ZXJDYXNlKCldXG5cdFx0XHQ6IHt9LFxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXROZXR3b3JrQXJ0aWZhY3RzKG5ldHdvcmspIHtcblx0bGV0IHJlcyA9IG1lcmdlKHt9LCBhcnRpZmFjdHM/LmRlZmF1bHQgfHwge30pO1xuXHRnZXROZXR3b3JrVGFnc0Zyb21TdHJpbmcobmV0d29yaykuZm9yRWFjaCgobmV0KSA9PiB7XG5cdFx0cmVzID0gbWVyZ2Uoe30sIHJlcywgYXJ0aWZhY3RzPy5bbmV0XSB8fCB7fSk7XG5cdH0pO1xuXHRyZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBnZXROZXR3b3JrQ29uc3RydWN0b3JBcmdzKG5ldHdvcmspIHtcblx0bGV0IHJlcyA9IHt9O1xuXHRnZXROZXR3b3JrVGFnc0Zyb21TdHJpbmcobmV0d29yaykuZm9yRWFjaCgobmV0KSA9PiB7XG5cdFx0cmVzID0gbWVyZ2UocmVzLCBjb25zdHJ1Y3RvckFyZ3NbbmV0XSk7XG5cdH0pO1xuXHRyZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBnZXROZXR3b3JrVGFnc0Zyb21TdHJpbmcobmV0d29yaykge1xuXHRuZXR3b3JrID0gbmV0d29yayA/IG5ldHdvcmsudG9Mb3dlckNhc2UoKSA6IFwiZGV2ZWxvcG1lbnRcIjtcblx0Y29uc3QgdGFncyA9IFtdO1xuXHRjb25zdCBwYXJ0cyA9IG5ldHdvcmsuc3BsaXQoXCI6XCIpO1xuXHRmb3IgKGxldCBpeCA9IDA7IGl4IDwgcGFydHMubGVuZ3RoOyBpeCsrKSB7XG5cdFx0dGFncy5wdXNoKHBhcnRzLnNsaWNlKDAsIGl4ICsgMSkuam9pbihcIjpcIikpO1xuXHR9XG5cdHJldHVybiB0YWdzO1xufVxuXG5mdW5jdGlvbiBpbXBvcnRSYWRvbkFzc2V0cyhvcHRpb25zKSB7XG5cdGNvbnN0IGFzc2V0cyA9IG9wdGlvbnM/LmxlZ2FjeSA/IHt9IDogcmVxdWlyZShcIkB3aXRuZXQvc2RrL2Fzc2V0c1wiKTtcblx0cmV0dXJuIGlzTW9kdWxlSW5pdGlhbGl6ZWQgJiYgZnMuZXhpc3RzU3luYyhgJHtXSVRORVRfU0RLX1JBRE9OX0FTU0VUU19QQVRIfS9pbmRleC5janNgKVxuXHRcdD8gbWVyZ2UoYXNzZXRzLCByZXF1aXJlKGAke1dJVE5FVF9TREtfUkFET05fQVNTRVRTX1BBVEh9L2luZGV4LmNqc2ApKVxuXHRcdDogYXNzZXRzO1xufVxuXG5mdW5jdGlvbiBvcmRlcktleXMob2JqKSB7XG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopLnNvcnQoZnVuY3Rpb24ga2V5T3JkZXIoazEsIGsyKSB7XG5cdFx0aWYgKGsxIDwgazIpIHJldHVybiAtMTtcblx0XHRlbHNlIGlmIChrMSA+IGsyKSByZXR1cm4gKzE7XG5cdFx0ZWxzZSByZXR1cm4gMDtcblx0fSk7XG5cdGxldCBpO1xuXHRjb25zdCBhZnRlciA9IHt9O1xuXHRmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdGFmdGVyW2tleXNbaV1dID0gb2JqW2tleXNbaV1dO1xuXHRcdGRlbGV0ZSBvYmpba2V5c1tpXV07XG5cdH1cblx0Zm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRvYmpba2V5c1tpXV0gPSBhZnRlcltrZXlzW2ldXTtcblx0fVxuXHRyZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBwcm9tcHRlcihwcm9taXNlKSB7XG5cdGNvbnN0IGxvYWRpbmcgPSAoKCkgPT4ge1xuXHRcdGNvbnN0IGggPSBbXCJ8XCIsIFwiL1wiLCBcIi1cIiwgXCJcXFxcXCJdO1xuXHRcdGxldCBpID0gMDtcblx0XHRyZXR1cm4gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0aSA9IGkgPiAzID8gMCA6IGk7XG5cdFx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxiXFxiJHtoW2ldfSBgKTtcblx0XHRcdGkrKztcblx0XHR9LCA1MCk7XG5cdH0pKCk7XG5cdHJldHVybiBwcm9taXNlLnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdGNsZWFySW50ZXJ2YWwobG9hZGluZyk7XG5cdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCJcXGJcXGJcIik7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRXaXRuZXRKc29uRmlsZXMoLi4uZmlsZW5hbWVzKSB7XG5cdHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG5cdFx0ZmlsZW5hbWVzLm1hcCgoa2V5KSA9PiB7XG5cdFx0XHRjb25zdCBmaWxlcGF0aCA9IGAuL3dpdG5ldC8ke2tleX0uanNvbmA7XG5cdFx0XHRyZXR1cm4gW2tleSwgZnMuZXhpc3RzU3luYyhmaWxlcGF0aCkgPyBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlcGF0aCkpIDoge31dO1xuXHRcdH0pLFxuXHQpO1xufVxuXG5mdW5jdGlvbiBzYXZlV2l0bmV0SnNvbkZpbGVzKGRhdGEpIHtcblx0T2JqZWN0LmVudHJpZXMoZGF0YSkuZm9yRWFjaCgoW2tleSwgb2JqXSkgPT4ge1xuXHRcdGNvbnN0IGZpbGVwYXRoID0gYC4vd2l0bmV0LyR7a2V5fS5qc29uYDtcblx0XHRpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZXBhdGgpKSBmcy53cml0ZUZpbGVTeW5jKGZpbGVwYXRoLCBcInt9XCIpO1xuXHRcdGNvbnN0IGpzb24gPSBtZXJnZShKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlcGF0aCkpLCBvYmopO1xuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZXBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDQpLCB7IGZsYWc6IFwidytcIiB9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRlZE5ldHdvcmtzKGVjb3N5c3RlbSkge1xuXHRjb25zdCBuZXR3b3JrcyA9IHJlcXVpcmUoXCIuLi8uLi9taWdyYXRpb25zL3NldHRpbmdzL25ldHdvcmtzLmpzXCIpLmRlZmF1bHQ7XG5cdHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG5cdFx0T2JqZWN0LmtleXMoY29uc3RydWN0b3JBcmdzKVxuXHRcdFx0LnNvcnQoKVxuXHRcdFx0LmZpbHRlcigobmV0d29yaykgPT4gbmV0d29yay5pbmRleE9mKFwiOlwiKSA+PSAwICYmICghZWNvc3lzdGVtIHx8IG5ldHdvcmsuc3RhcnRzV2l0aChlY29zeXN0ZW0udG9Mb3dlckNhc2UoKSkpKVxuXHRcdFx0Lm1hcCgobmV0d29yaykgPT4ge1xuXHRcdFx0XHRjb25zdCBhZGRycyA9IHsgLi4uZ2V0TmV0d29ya0FkZHJlc3NlcyhuZXR3b3JrKSB9O1xuXHRcdFx0XHRjb25zdCBfYXJ0ZnMgPSB7IC4uLmdldE5ldHdvcmtBcnRpZmFjdHMobmV0d29yaykgfTtcblx0XHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRcdGNvcmU6IHsgV2l0T3JhY2xlIH0sXG5cdFx0XHRcdFx0YXBwczogeyBXaXRSYW5kb21uZXNzVjIsIFdpdFJhbmRvbW5lc3NWMywgV2l0UHJpY2VGZWVkcyB9LFxuXHRcdFx0XHR9ID0gYWRkcnM7XG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0bmV0d29yayxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRhZGRyZXNzZXM6IHtcblx0XHRcdFx0XHRcdFx0V2l0T3JhY2xlLFxuXHRcdFx0XHRcdFx0XHRXaXRSYW5kb21uZXNzOiBXaXRSYW5kb21uZXNzVjMgfHwgV2l0UmFuZG9tbmVzc1YyLFxuXHRcdFx0XHRcdFx0XHRXaXRQcmljZUZlZWRzLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNoYWluSWQ6IG5ldHdvcmtzW25ldHdvcmtdLm5ldHdvcmtfaWQsXG5cdFx0XHRcdFx0XHRlY29zeXN0ZW06IG5ldHdvcmsuc3BsaXQoXCI6XCIpWzBdLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHRleHBsb3JlclVybDogbmV0d29ya3NbbmV0d29ya10/LnZlcmlmeT8uZXhwbG9yZXJVcmwsXG5cdFx0XHRcdFx0XHRtYWlubmV0OiBuZXR3b3Jrc1tuZXR3b3JrXT8ubWFpbm5ldCB8fCBmYWxzZSxcblx0XHRcdFx0XHRcdG5hbWU6XG5cdFx0XHRcdFx0XHRcdG5ldHdvcmtzW25ldHdvcmtdPy5uYW1lIHx8XG5cdFx0XHRcdFx0XHRcdG5ldHdvcmtcblx0XHRcdFx0XHRcdFx0XHQuc3BsaXQoXCI6XCIpXG5cdFx0XHRcdFx0XHRcdFx0Lm1hcCgocGFydCkgPT4gY2FtZWxpemUocGFydCkpXG5cdFx0XHRcdFx0XHRcdFx0LmpvaW4oXCIgXCIpLFxuXHRcdFx0XHRcdFx0cG9ydDogbmV0d29ya3NbbmV0d29ya10ucG9ydCxcblx0XHRcdFx0XHRcdHB1c2hPbmx5OiBnZXROZXR3b3JrQXJ0aWZhY3RzKG5ldHdvcmspPy5jb3JlPy5XaXRPcmFjbGUuaW5kZXhPZihcIlB1c2hPbmx5XCIpID49IDAgPz8gZmFsc2UsXG5cdFx0XHRcdFx0XHRzeW1ib2w6IG5ldHdvcmtzW25ldHdvcmtdPy5zeW1ib2wgfHwgXCJFVEhcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdO1xuXHRcdFx0fSksXG5cdCk7XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzTmV0d29yayhuZXR3b3JrKSB7XG5cdHJldHVybiBuZXR3b3JrICYmIE9iamVjdC5rZXlzKGNvbnN0cnVjdG9yQXJncykuaW5jbHVkZXMobmV0d29yay50b0xvd2VyQ2FzZSgpKTtcbn1cblxuZnVuY3Rpb24gdHJhY2VIZWFkZXIoaGVhZGVyLCBjb2xvciA9IGNvbG9ycy53aGl0ZSwgaW5kZW50ID0gXCJcIikge1xuXHRjb25zb2xlLmluZm8oYCR7aW5kZW50feKUjOKUgCR7XCLilIBcIi5yZXBlYXQoaGVhZGVyLmxlbmd0aCl94pSA4pSQYCk7XG5cdGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSCICR7Y29sb3IoaGVhZGVyKX0g4pSCYCk7XG5cdGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSU4pSAJHtcIuKUgFwiLnJlcGVhdChoZWFkZXIubGVuZ3RoKX3ilIDilJhgKTtcbn1cblxuZnVuY3Rpb24gdHJhY2VUYWJsZShyZWNvcmRzLCBvcHRpb25zKSB7XG5cdGNvbnN0IHN0cmluZ2lmeSA9IChkYXRhLCBodW1hbml6ZXJzLCBpbmRleCkgPT5cblx0XHRodW1hbml6ZXJzPy5baW5kZXhdID8gaHVtYW5pemVyc1tpbmRleF0oZGF0YSkudG9TdHJpbmcoKSA6IChkYXRhPy50b1N0cmluZygpID8/IFwiXCIpO1xuXHRjb25zdCByZWR1Y2VNYXggPSAobnVtYmVycykgPT4gbnVtYmVycy5yZWR1Y2UoKGN1cnIsIHByZXYpID0+IE1hdGgubWF4KGN1cnIsIHByZXYpLCAwKTtcblx0aWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG5cdGNvbnN0IGluZGVudCA9IG9wdGlvbnM/LmluZGVudCB8fCBcIlwiO1xuXHRjb25zdCBudW1Db2x1bW5zID0gcmVkdWNlTWF4KHJlY29yZHMubWFwKChyZWNvcmQpID0+IHJlY29yZD8ubGVuZ3RoIHx8IDEpKTtcblx0Y29uc3QgbWF4Q29sdW1uV2lkdGggPSBvcHRpb25zPy5tYXhDb2x1bW5XaWR0aCB8fCA4MDtcblx0Y29uc3QgdGFibGUgPSB0cmFuc3Bvc2UocmVjb3JkcywgbnVtQ29sdW1ucyk7XG5cdG9wdGlvbnMud2lkdGhzID1cblx0XHRvcHRpb25zPy53aWR0aHMgfHxcblx0XHR0YWJsZS5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IHtcblx0XHRcdGxldCBtYXhXaWR0aCA9IHJlZHVjZU1heChjb2x1bW4ubWFwKChmaWVsZCkgPT4gY29sb3JzdHJpcChzdHJpbmdpZnkoZmllbGQsIG9wdGlvbnM/Lmh1bWFuaXplcnMsIGluZGV4KSkubGVuZ3RoKSk7XG5cdFx0XHRpZiAob3B0aW9ucz8uaGVhZGxpbmVzPy5baW5kZXhdKSB7XG5cdFx0XHRcdG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIGNvbG9yc3RyaXAob3B0aW9ucy5oZWFkbGluZXNbaW5kZXhdLnJlcGxhY2VBbGwoXCI6XCIsIFwiXCIpKS5sZW5ndGgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE1hdGgubWluKG1heFdpZHRoLCBtYXhDb2x1bW5XaWR0aCk7XG5cdFx0fSk7XG5cdGxldCBoZWFkbGluZSA9IG9wdGlvbnMud2lkdGhzLm1hcCgobWF4V2lkdGgpID0+IFwi4pSAXCIucmVwZWF0KG1heFdpZHRoKSk7XG5cdGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSM4pSAJHtoZWFkbGluZS5qb2luKFwi4pSA4pSs4pSAXCIpfeKUgOKUkGApO1xuXHRpZiAob3B0aW9ucz8uaGVhZGxpbmVzKSB7XG5cdFx0aGVhZGxpbmUgPSBvcHRpb25zLndpZHRocy5tYXAoKG1heFdpZHRoLCBpbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgY2FwdGlvbiA9IG9wdGlvbnMuaGVhZGxpbmVzW2luZGV4XS5yZXBsYWNlQWxsKFwiOlwiLCBcIlwiKTtcblx0XHRcdGNvbnN0IGNhcHRpb25MZW5ndGggPSBjb2xvcnN0cmlwKGNhcHRpb24pLmxlbmd0aDtcblx0XHRcdHJldHVybiBgJHtjb2xvcnMud2hpdGUoY2FwdGlvbil9JHtcIiBcIi5yZXBlYXQobWF4V2lkdGggLSBjYXB0aW9uTGVuZ3RoKX1gO1xuXHRcdH0pO1xuXHRcdGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSCICR7aGVhZGxpbmUuam9pbihcIiDilIIgXCIpfSDilIJgKTtcblx0XHRoZWFkbGluZSA9IG9wdGlvbnMud2lkdGhzLm1hcCgobWF4V2lkdGgpID0+IFwi4pSAXCIucmVwZWF0KG1heFdpZHRoKSk7XG5cdFx0Y29uc29sZS5pbmZvKGAke2luZGVudH3ilJzilIAke2hlYWRsaW5lLmpvaW4oXCLilIDilLzilIBcIil94pSA4pSkYCk7XG5cdH1cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCByZWNvcmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGV0IGxpbmUgPSBcIlwiO1xuXHRcdGZvciAobGV0IGogPSAwOyBqIDwgbnVtQ29sdW1uczsgaisrKSB7XG5cdFx0XHRsZXQgZGF0YSA9IHRhYmxlW2pdW2ldO1xuXHRcdFx0bGV0IGNvbG9yO1xuXHRcdFx0aWYgKG9wdGlvbnM/LmNvbG9ycz8uW2pdKSB7XG5cdFx0XHRcdGNvbG9yID0gb3B0aW9ucy5jb2xvcnNbal07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb2xvciA9XG5cdFx0XHRcdFx0dHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHRcdD8gY29sb3JzLmdyZWVuXG5cdFx0XHRcdFx0XHQ6IE51bWJlcihkYXRhKSA9PT0gZGF0YSAmJiBkYXRhICUgMSAhPT0gMCAvLyBpcyBmbG9hdCBudW1iZXI/XG5cdFx0XHRcdFx0XHRcdD8gY29sb3JzLnllbGxvd1xuXHRcdFx0XHRcdFx0XHQ6ICh4KSA9PiB4O1xuXHRcdFx0fVxuXHRcdFx0ZGF0YSA9IHN0cmluZ2lmeShkYXRhLCBvcHRpb25zPy5odW1hbml6ZXJzLCBqKTtcblx0XHRcdGlmIChjb2xvcnN0cmlwKGRhdGEpLmxlbmd0aCA+IG1heENvbHVtbldpZHRoKSB7XG5cdFx0XHRcdHdoaWxlIChjb2xvcnN0cmlwKGRhdGEpLmxlbmd0aCA+IG1heENvbHVtbldpZHRoIC0gMykge1xuXHRcdFx0XHRcdGRhdGEgPSBkYXRhLnNsaWNlKDAsIC0xKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhICs9IFwiLi4uXCI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBkYXRhTGVuZ3RoID0gY29sb3JzdHJpcChkYXRhKS5sZW5ndGg7XG5cdFx0XHRpZiAob3B0aW9ucz8uaGVhZGxpbmVzICYmIG9wdGlvbnMuaGVhZGxpbmVzW2pdWzBdID09PSBcIjpcIikge1xuXHRcdFx0XHRkYXRhID0gYCR7Y29sb3IoZGF0YSl9JHtcIiBcIi5yZXBlYXQob3B0aW9ucy53aWR0aHNbal0gLSBkYXRhTGVuZ3RoKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YSA9IGAke1wiIFwiLnJlcGVhdChvcHRpb25zLndpZHRoc1tqXSAtIGRhdGFMZW5ndGgpfSR7Y29sb3IoZGF0YSl9YDtcblx0XHRcdH1cblx0XHRcdGxpbmUgKz0gYOKUgiAke2RhdGF9IGA7XG5cdFx0fVxuXHRcdGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR9JHtsaW5lfeKUgmApO1xuXHR9XG5cdGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKChtYXhXaWR0aCkgPT4gXCLilIBcIi5yZXBlYXQobWF4V2lkdGgpKTtcblx0Y29uc29sZS5pbmZvKGAke2luZGVudH3ilJTilIAke2hlYWRsaW5lLmpvaW4oXCLilIDilLTilIBcIil94pSA4pSYYCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zcG9zZShyZWNvcmRzLCBudW1Db2x1bW5zKSB7XG5cdGNvbnN0IGNvbHVtbnMgPSBbXTtcblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG51bUNvbHVtbnM7IGluZGV4KyspIHtcblx0XHRjb2x1bW5zLnB1c2gocmVjb3Jkcy5tYXAoKHJvdykgPT4gcm93W2luZGV4XSkpO1xuXHR9XG5cdHJldHVybiBjb2x1bW5zO1xufVxuXG5mdW5jdGlvbiB0cmFjZURhdGEoaGVhZGVyLCBkYXRhLCB3aWR0aCwgY29sb3IpIHtcblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoaGVhZGVyKTtcblx0aWYgKGNvbG9yKSBwcm9jZXNzLnN0ZG91dC53cml0ZShjb2xvcik7XG5cdGZvciAobGV0IGl4ID0gMDsgaXggPCBkYXRhLmxlbmd0aCAvIHdpZHRoOyBpeCsrKSB7XG5cdFx0aWYgKGl4ID4gMCkgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXCIgXCIucmVwZWF0KGhlYWRlci5sZW5ndGgpKTtcblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShkYXRhLnNsaWNlKHdpZHRoICogaXgsIHdpZHRoICogKGl4ICsgMSkpKTtcblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcblwiKTtcblx0fVxuXHRpZiAoY29sb3IpIHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiXFx4MWJbMG1cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRERUZBVUxUX0JBVENIX1NJWkUsXG5cdERFRkFVTFRfTElNSVQsXG5cdERFRkFVTFRfU0lOQ0UsXG5cdGNvbG9ycyxcblx0Y2h1bmtzLFxuXHRkZWxldGVFeHRyYUZsYWdzLFxuXHRleHRyYWN0RmxhZ3NGcm9tQXJncyxcblx0ZXh0cmFjdE9wdGlvbnNGcm9tQXJncyxcblx0ZmxhdHRlbk9iamVjdCxcblx0b3JkZXJLZXlzLFxuXHR0cmFjZURhdGEsXG5cdHRyYWNlSGVhZGVyLFxuXHRnZXROZXR3b3JrQWRkcmVzc2VzLFxuXHRnZXROZXR3b3JrQXJ0aWZhY3RzLFxuXHRnZXROZXR3b3JrQ29uc3RydWN0b3JBcmdzLFxuXHRnZXROZXR3b3JrVGFnc0Zyb21TdHJpbmcsXG5cdHN1cHBvcnRlZE5ldHdvcmtzLFxuXHRzdXBwb3J0c05ldHdvcmssXG5cdGltcG9ydFJhZG9uQXNzZXRzLFxuXHRyZWFkV2l0bmV0SnNvbkZpbGVzLFxuXHRzYXZlV2l0bmV0SnNvbkZpbGVzLFxuXHR0cmFjZVRhYmxlLFxuXHRjb21tYXMsXG5cdGNvbG9yc3RyaXAsXG5cdHByb21wdGVyLFxufTtcbiJdfQ==
@@ -58,11 +58,19 @@ export function getNetworkConstructorArgs(network: any): {};
58
58
  export function getNetworkTagsFromString(network: any): any[];
59
59
  export function supportedNetworks(ecosystem: any): {
60
60
  [k: string]: {
61
+ addresses: {
62
+ WitOracle: any;
63
+ WitRandomness: any;
64
+ WitPriceFeeds: any;
65
+ };
66
+ chainId: any;
67
+ ecosystem: string;
68
+ explorerUrl: any;
61
69
  mainnet: any;
62
- network_id: any;
70
+ name: any;
63
71
  port: any;
72
+ pushOnly: boolean;
64
73
  symbol: any;
65
- verified: any;
66
74
  };
67
75
  };
68
76
  export function supportsNetwork(network: any): any;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.cts","sourceRoot":"","sources":["../../../src/bin/helpers.cjs"],"names":[],"mappings":"AAOA,iCAA2B,EAAE,CAAC;AAC9B,4BAAsB,EAAE,CAAC;AACzB,4BAAsB,CAAC,IAAI,CAAC;;IAYrB,gCAAgC;IAChC,gCAAgC;IAChC,gCAAgC;IAC/B,iCAAgC;IAC9B,mCAAkC;IACtC,+BAAgC;IAC7B,kCAAgC;IACjC,iCAAkC;IAClC,iCAAkC;IAClC,iCAAkC;IACjC,kCAAkC;IAChC,oCAAkC;IACpC,kCAAoC;IACnC,mCAAkC;IACpC,iCAAgC;IAChC,iCAAgC;IAC/B,kCAAgC;IAC9B,oCAAkC;IACtC,gCAAgC;IAC7B,mCAAgC;;AA1B1C,wEAIC;AAqCD,mDAaC;AAED,mEAYC;AAED,uEAkBC;AAED,2CAeC;AAgDD,yCAgBC;AA8ID,gFASC;AAzFD,8FAIC;AAhID,uDAWC;AAED;;;;;;;;;;;;;;;;;;;;;EAMC;AAED,4DAMC;AAED,8DAQC;AA8DD;;;;;;;;EAmBC;AAED,mDAEC;AAnFD,qDAKC;AAqCD,8DAOC;AAED,qDAOC;AAiCD,6DAgEC;AA7QD,4CAOC;AAVD,0CAC+F;AA6I/F,4CAeC"}
1
+ {"version":3,"file":"helpers.d.cts","sourceRoot":"","sources":["../../../src/bin/helpers.cjs"],"names":[],"mappings":"AAOA,iCAA2B,EAAE,CAAC;AAC9B,4BAAsB,EAAE,CAAC;AACzB,4BAAsB,CAAC,IAAI,CAAC;;IAmBrB,gCAAgC;IAChC,gCAAgC;IAChC,gCAAgC;IAC/B,iCAAgC;IAC9B,mCAAkC;IACtC,+BAAgC;IAC7B,kCAAgC;IACjC,iCAAkC;IAClC,iCAAkC;IAClC,iCAAkC;IACjC,kCAAkC;IAChC,oCAAkC;IACpC,kCAAoC;IACnC,mCAAkC;IACpC,iCAAgC;IAChC,iCAAgC;IAC/B,kCAAgC;IAC9B,oCAAkC;IACtC,gCAAgC;IAC7B,mCAAgC;;AA1B1C,wEAIC;AAqCD,mDAaC;AAED,mEAYC;AAED,uEAkBC;AAED,2CAeC;AAkDD,yCAgBC;AAiKD,gFASC;AAzFD,8FAIC;AArJD,uDAaC;AAED;;;;;;;;;;;;;;;;;;;;;EAMC;AAED,4DAMC;AAED,8DAQC;AA8DD;;;;;;;;;;;;;;;;EAsCC;AAED,mDAEC;AAtGD,qDAKC;AAqCD,8DAOC;AAED,qDAOC;AAoDD,6DAgEC;AAlSD,4CAOC;AAVD,0CAC+F;AA+I/F,4CAeC"}
@@ -14,9 +14,21 @@ export declare function getEvmNetworkAddresses(network: string): any;
14
14
  export declare function getEvmNetworkByChainId(chainId: number): string | undefined;
15
15
  export declare function getEvmNetworkId(network: string): number | undefined;
16
16
  export declare function getEvmNetworkSymbol(network: string): string;
17
- export declare function getEvmNetworks(): string[];
17
+ export declare function getEvmNetworks(): {
18
+ [key: string]: {
19
+ name: string;
20
+ chainId: number;
21
+ ecosystem: string;
22
+ mainnet: boolean;
23
+ port: number;
24
+ pushOnly: boolean;
25
+ symbol: string;
26
+ addresses?: any;
27
+ };
28
+ };
18
29
  export declare function isEvmNetworkMainnet(network: string): boolean;
19
30
  export declare function isEvmNetworkSupported(network: string): boolean;
31
+ export declare function isValidEvmAddress(address?: string): boolean;
20
32
  export declare function abiDecodeQueryStatus(status: bigint): WitOracleQueryStatus;
21
33
  export declare function abiEncodeDataPushReport(report: Witnet.DataPushReport): any;
22
34
  export declare function abiEncodeDataPushReportMessage(report: Witnet.DataPushReport): Witnet.HexString;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,OAAO,EAAsB,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAA2B,MAAM,QAAQ,CAAC;AAKpH,OAAO,KAAK,EACX,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,MAAM,YAAY,CAAC;AAGpB,cAAc,mBAAmB,CAAC;AAElC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,SAEvD;AAED,wBAAsB,uBAAuB,CAC5C,QAAQ,EAAE,eAAe,GACvB,OAAO,CAAC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;CAAE,CAAC,CAkI/C;AAgBD,wBAAsB,2BAA2B,CAChD,QAAQ,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CASnD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM1E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMnE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAiBzE;AA0CD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,GAAG,CAS1E;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS,CAK9F;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS,CAE7F;AAED,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,yBAAyB,GAAG,GAAG,CAS7F;AAED,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,oBAAoB,GAAG,GAAG,CAEpF;AACD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAoBnD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,OAAO,EAIN,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAEpB,MAAM,QAAQ,CAAC;AAKhB,OAAO,KAAK,EACX,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,MAAM,YAAY,CAAC;AAGpB,cAAc,mBAAmB,CAAC;AAElC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,SAEvD;AAED,wBAAsB,uBAAuB,CAC5C,QAAQ,EAAE,eAAe,GACvB,OAAO,CAAC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;CAAE,CAAC,CAkI/C;AAgBD,wBAAsB,2BAA2B,CAChD,QAAQ,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CASnD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM1E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMnE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAgB,cAAc,IAAI;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,GAAG,CAAC;KAChB,CAAC;CACF,CAEA;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAO3D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAiBzE;AA0CD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,GAAG,CAS1E;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS,CAK9F;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS,CAE7F;AAED,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,yBAAyB,GAAG,GAAG,CAS7F;AAED,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,oBAAoB,GAAG,GAAG,CAEpF;AACD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAoBnD"}
@@ -1,6 +1,6 @@
1
1
  import { Witnet } from "@witnet/sdk";
2
2
  import { default as cbor } from "cbor";
3
- import { AbiCoder, Contract, solidityPackedKeccak256 } from "ethers";
3
+ import { AbiCoder, Contract, isAddress, solidityPackedKeccak256, } from "ethers";
4
4
  import { default as merge } from "lodash.merge";
5
5
  import { default as helpers } from "../bin/helpers.cjs";
6
6
  import { ABIs } from "../index.js";
@@ -180,7 +180,7 @@ export function getEvmNetworkSymbol(network) {
180
180
  return "ETH";
181
181
  }
182
182
  export function getEvmNetworks() {
183
- return Object.keys(helpers.supportedNetworks());
183
+ return helpers.supportedNetworks();
184
184
  }
185
185
  export function isEvmNetworkMainnet(network) {
186
186
  const found = Object.entries(helpers.supportedNetworks()).find(([key]) => network && key === network.toLowerCase());
@@ -189,6 +189,12 @@ export function isEvmNetworkMainnet(network) {
189
189
  export function isEvmNetworkSupported(network) {
190
190
  return helpers.supportsNetwork(network);
191
191
  }
192
+ export function isValidEvmAddress(address) {
193
+ return (address !== undefined &&
194
+ address !== "0x0000000000000000000000000000000000000000" &&
195
+ /^0x[0-9a-fA-F]{40}$/.test(address) &&
196
+ isAddress(address));
197
+ }
192
198
  export function abiDecodeQueryStatus(status) {
193
199
  switch (status) {
194
200
  case 1n:
@@ -274,4 +280,4 @@ export function abiEncodeRadonAsset(asset) {
274
280
  throw new TypeError(`Not a Radon asset: ${asset}`);
275
281
  }
276
282
  }
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckMsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQWlELHVCQUF1QixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxPQUFPLElBQUksS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLElBQUksT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVFuQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE9BQWU7SUFDdkQsT0FBTyxPQUFPLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzVDLFFBQXlCO0lBRXpCLE9BQU8sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDakQsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLFVBQVUsR0FBRyxDQUFDLG9DQUFvQyxFQUFFLHVDQUF1QyxDQUFDLENBQUM7WUFDbkcsTUFBTSxPQUFPLEdBQUc7Z0JBQ2YsV0FBVztnQkFDWCx3QkFBd0I7Z0JBQ3hCLDhCQUE4QjtnQkFDOUIs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Q0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdpdG5ldCB9IGZyb20gXCJAd2l0bmV0L3Nka1wiO1xuXG5pbXBvcnQgeyBkZWZhdWx0IGFzIGNib3IgfSBmcm9tIFwiY2JvclwiO1xuXG5pbXBvcnQgeyBBYmlDb2RlciwgQ29udHJhY3QsIHR5cGUgSnNvblJwY0FwaVByb3ZpZGVyLCB0eXBlIEpzb25ScGNQcm92aWRlciwgc29saWRpdHlQYWNrZWRLZWNjYWsyNTYgfSBmcm9tIFwiZXRoZXJzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIG1lcmdlIH0gZnJvbSBcImxvZGFzaC5tZXJnZVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBoZWxwZXJzIH0gZnJvbSBcIi4uL2Jpbi9oZWxwZXJzLmNqc1wiO1xuaW1wb3J0IHsgQUJJcyB9IGZyb20gXCIuLi9pbmRleC5qc1wiO1xuXG5pbXBvcnQgdHlwZSB7XG5cdFByaWNlRmVlZFVwZGF0ZUNvbmRpdGlvbnMsXG5cdFdpdE9yYWNsZUFydGlmYWN0LFxuXHRXaXRPcmFjbGVRdWVyeVBhcmFtcyxcblx0V2l0T3JhY2xlUXVlcnlTdGF0dXMsXG59IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBXaXRPcmFjbGUgfSBmcm9tIFwiLi93cmFwcGVycy5qc1wiO1xuXG5leHBvcnQgKiBmcm9tIFwiQHdpdG5ldC9zZGsvdXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ldHdvcmtUYWdzRnJvbVN0cmluZyhuZXR3b3JrOiBzdHJpbmcpIHtcblx0cmV0dXJuIGhlbHBlcnMuZ2V0TmV0d29ya1RhZ3NGcm9tU3RyaW5nKG5ldHdvcmspO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hXaXRPcmFjbGVGcmFtZXdvcmsoXG5cdHByb3ZpZGVyOiBKc29uUnBjUHJvdmlkZXIsXG4pOiBQcm9taXNlPHsgW2tleTogc3RyaW5nXTogV2l0T3JhY2xlQXJ0aWZhY3QgfT4ge1xuXHRyZXR1cm4gcHJvdmlkZXIuZ2V0TmV0d29yaygpLnRoZW4oYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0Y29uc3QgbmV0d29yayA9IGdldEV2bU5ldHdvcmtCeUNoYWluSWQoTnVtYmVyKHZhbHVlLmNoYWluSWQpKTtcblx0XHRpZiAobmV0d29yaykge1xuXHRcdFx0Y29uc3QgZXhjbHVzaW9ucyA9IFtcIldpdE9yYWNsZVJhZG9uUmVxdWVzdEZhY3RvcnlNb2RhbHNcIiwgXCJXaXRPcmFjbGVSYWRvblJlcXVlc3RGYWN0b3J5VGVtcGxhdGVzXCJdO1xuXHRcdFx0Y29uc3QgdGFyZ2V0cyA9IFtcblx0XHRcdFx0XCJXaXRPcmFjbGVcIixcblx0XHRcdFx0XCJXaXRPcmFjbGVSYWRvblJlZ2lzdHJ5XCIsXG5cdFx0XHRcdFwiV2l0T3JhY2xlUmFkb25SZXF1ZXN0RmFjdG9yeVwiLFxuXHRcdFx0XHRcIldpdFByaWNlRmVlZHNcIixcblx0XHRcdFx0XCJXaXRQcmljZUZlZWRzTGVnYWN5XCIsXG5cdFx0XHRcdFwiV2l0UmFuZG9tbmVzc1YyXCIsXG5cdFx0XHRcdFwiV2l0UmFuZG9tbmVzc1YzXCIsXG5cdFx0XHRdO1xuXHRcdFx0Y29uc3QgY29udHJhY3RzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdFx0XHRPYmplY3QuZW50cmllcyhoZWxwZXJzLmZsYXR0ZW5PYmplY3QoaGVscGVycy5nZXROZXR3b3JrQXJ0aWZhY3RzKG5ldHdvcmspKSkubWFwKChba2V5LCB2YWx1ZV0pID0+IFtcblx0XHRcdFx0XHRrZXkuc3BsaXQoXCIuXCIpLnBvcCgpLFxuXHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRdKSxcblx0XHRcdCk7XG5cdFx0XHRsZXQgeyBhZGRyZXNzZXMgfSA9IGhlbHBlcnMucmVhZFdpdG5ldEpzb25GaWxlcyhcImFkZHJlc3Nlc1wiKTtcblx0XHRcdGFkZHJlc3NlcyA9IG1lcmdlKGhlbHBlcnMuZ2V0TmV0d29ya0FkZHJlc3NlcyhuZXR3b3JrKSwgYWRkcmVzc2VzW25ldHdvcmtdKTtcblx0XHRcdHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0T2JqZWN0LmVudHJpZXMoaGVscGVycy5mbGF0dGVuT2JqZWN0KGFkZHJlc3NlcykpXG5cdFx0XHRcdFx0Lm1hcCgoW2tleSwgYWRkcmVzc10pID0+IFtrZXkuc3BsaXQoXCIuXCIpLnBvcCgpLCBhZGRyZXNzXSlcblx0XHRcdFx0XHQuc29ydCgoW2FdLCBbYl0pID0+IChhIGFzIHN0cmluZykubG9jYWxlQ29tcGFyZShiKSlcblx0XHRcdFx0XHQuZmlsdGVyKChba2V5LCBhZGRyZXNzXSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYmFzZSA9IF9maW5kQmFzZShjb250cmFjdHMsIGtleSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRhZGRyZXNzICYmXG5cdFx0XHRcdFx0XHRcdGFkZHJlc3MgIT09IFwiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIgJiZcblx0XHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmNsdWRlcyhrZXkpICYmXG5cdFx0XHRcdFx0XHRcdCFleGNsdXNpb25zLmluY2x1ZGVzKGJhc2UpICYmXG5cdFx0XHRcdFx0XHRcdChBQklzW2tleV0gfHwgQUJJc1tiYXNlXSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQubWFwKGFzeW5jIChba2V5LCBhZGRyZXNzXSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYnl0ZWNvZGUgPSBhd2FpdCBwcm92aWRlci5nZXRDb2RlKGFkZHJlc3MpLmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihgV2FybmluZzogJHtrZXl9OiAke2Vycn1gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKCFieXRlY29kZT8ubGVuZ3RoIHx8IGJ5dGVjb2RlLmxlbmd0aCA8PSAyKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBba2V5LCB1bmRlZmluZWRdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBhcHBsaWFuY2UgPSBuZXcgQ29udHJhY3QoYWRkcmVzcywgQUJJcy5XaXRBcHBsaWFuY2UsIHByb3ZpZGVyKTtcblx0XHRcdFx0XHRcdGNvbnN0IHVwZ3JhZGFibGUgPSBuZXcgQ29udHJhY3QoYWRkcmVzcywgQUJJcy5XaXRuZXRVcGdyYWRhYmxlQmFzZSwgcHJvdmlkZXIpO1xuXG5cdFx0XHRcdFx0XHQvLyBFeGVjdXRlIGFsbCBjb250cmFjdCBjYWxscyBpbiBwYXJhbGxlbCBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG5cdFx0XHRcdFx0XHRjb25zdCBbaW1wbCwgaW50ZXJmYWNlSWQsIGlzVXBncmFkYWJsZSwgdmVyc2lvbl0gPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuXHRcdFx0XHRcdFx0XHRhcHBsaWFuY2UuY2xhc3Muc3RhdGljQ2FsbCgpLFxuXHRcdFx0XHRcdFx0XHRhcHBsaWFuY2Uuc3BlY3Muc3RhdGljQ2FsbCgpLFxuXHRcdFx0XHRcdFx0XHR1cGdyYWRhYmxlLmlzVXBncmFkYWJsZS5zdGF0aWNDYWxsKCksXG5cdFx0XHRcdFx0XHRcdHVwZ3JhZGFibGUudmVyc2lvbi5zdGF0aWNDYWxsKCksXG5cdFx0XHRcdFx0XHRdKS50aGVuKChyZXN1bHRzKSA9PiBbXG5cdFx0XHRcdFx0XHRcdChyZXN1bHRzWzBdLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIiA/IHJlc3VsdHNbMF0udmFsdWUgOiBrZXkpIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdFx0KHJlc3VsdHNbMV0uc3RhdHVzID09PSBcImZ1bGZpbGxlZFwiID8gcmVzdWx0c1sxXS52YWx1ZSA6IHVuZGVmaW5lZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHQocmVzdWx0c1syXS5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIgPyByZXN1bHRzWzJdLnZhbHVlIDogZmFsc2UpIGFzIGJvb2xlYW4sXG5cdFx0XHRcdFx0XHRcdChyZXN1bHRzWzNdLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIiA/IHJlc3VsdHNbM10udmFsdWUgOiB1bmRlZmluZWQpIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdF0pO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRhYmk6IEFCSXNba2V5XSB8fCAodHlwZW9mIGltcGwgPT09IFwic3RyaW5nXCIgPyBBQklzW2ltcGxdIDogdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdFx0XHRhZGRyZXNzLFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzOiBpbXBsLFxuXHRcdFx0XHRcdFx0XHRcdGdpdEhhc2g6IF92ZXJzaW9uTGFzdENvbW1pdE9mKHZlcnNpb24/LnRvU3RyaW5nKCkpLFxuXHRcdFx0XHRcdFx0XHRcdGludGVyZmFjZUlkLFxuXHRcdFx0XHRcdFx0XHRcdGlzVXBncmFkYWJsZSxcblx0XHRcdFx0XHRcdFx0XHRzZW1WZXI6IF92ZXJzaW9uVGFnT2YodmVyc2lvbj8udG9TdHJpbmcoKSksXG5cdFx0XHRcdFx0XHRcdFx0dmVyc2lvbixcblx0XHRcdFx0XHRcdFx0fSBhcyBXaXRPcmFjbGVBcnRpZmFjdCxcblx0XHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0fSksXG5cdFx0XHQpXG5cdFx0XHRcdC50aGVuKChhcnRpZmFjdHMpID0+IGFydGlmYWN0cy5maWx0ZXIoKFssIGFydGlmYWN0XSkgPT4gYXJ0aWZhY3QgIT09IHVuZGVmaW5lZCkpXG5cdFx0XHRcdC50aGVuKGFzeW5jIChhcnRpZmFjdHMpID0+IHtcblx0XHRcdFx0XHRjb25zdCBhcnRpZmFjdE1hcCA9IE9iamVjdC5mcm9tRW50cmllcyhhcnRpZmFjdHMpO1xuXHRcdFx0XHRcdGlmIChhcnRpZmFjdE1hcC5XaXRPcmFjbGUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHdpdE9yYWNsZSA9IGF3YWl0IFdpdE9yYWNsZS5mcm9tRXRoUnBjUHJvdmlkZXIocHJvdmlkZXIpO1xuXHRcdFx0XHRcdFx0YXJ0aWZhY3RzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0XHRcdGFydGlmYWN0cy5tYXAoYXN5bmMgKFtrZXksIGFydGlmYWN0XSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGxldCB3cmFwcGVyOiBhbnk7XG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChrZXkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJXaXRPcmFjbGVcIjpcblx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBlciA9IHdpdE9yYWNsZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiV2l0T3JhY2xlUmFkb25SZWdpc3RyeVwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3cmFwcGVyID0gYXdhaXQgd2l0T3JhY2xlLl9nZXRXaXRPcmFjbGVSYWRvblJlZ2lzdHJ5KCkuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciBnZXR0aW5nIFdpdE9yYWNsZVJhZG9uUmVnaXN0cnkgd3JhcHBlcjpcIiwgZXJyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiV2l0T3JhY2xlUmFkb25SZXF1ZXN0RmFjdG9yeVwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3cmFwcGVyID0gYXdhaXQgd2l0T3JhY2xlLl9nZXRXaXRPcmFjbGVSYWRvblJlcXVlc3RGYWN0b3J5KCkuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciBnZXR0aW5nIFdpdE9yYWNsZVJhZG9uUmVxdWVzdEZhY3Rvcnkgd3JhcHBlcjpcIiwgZXJyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiV2l0UHJpY2VGZWVkc1wiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3cmFwcGVyID0gYXdhaXQgd2l0T3JhY2xlLl9nZXRXaXRQcmljZUZlZWRzKGFydGlmYWN0LmFkZHJlc3MpLmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3IgZ2V0dGluZyBXaXRQcmljZUZlZWRzIHdyYXBwZXI6XCIsIGVycik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIldpdFByaWNlRmVlZHNMZWdhY3lcIjpcblx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBlciA9IGF3YWl0IHdpdE9yYWNsZS5fZ2V0V2l0UHJpY2VGZWVkc0xlZ2FjeShhcnRpZmFjdC5hZGRyZXNzKS5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIkVycm9yIGdldHRpbmcgV2l0UHJpY2VGZWVkc0xlZ2FjeSB3cmFwcGVyOlwiLCBlcnIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChrZXkuc3RhcnRzV2l0aChcIldpdFJhbmRvbW5lc3NcIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJXaXRuZXRSYW5kb21uZXNzXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBlciA9IGF3YWl0IHdpdE9yYWNsZS5fZ2V0V2l0UmFuZG9tbmVzcyhhcnRpZmFjdC5hZGRyZXNzKS5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBFcnJvciBnZXR0aW5nICR7a2V5fSB3cmFwcGVyOmAsIGVycik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBba2V5LCB3cmFwcGVyID8geyAuLi5hcnRpZmFjdCwgd3JhcHBlciB9IDogYXJ0aWZhY3RdO1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoYXJ0aWZhY3RzKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBfZmluZEJhc2Uob2JqOiB7IFtrOiBzdHJpbmddOiBhbnkgfSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBPYmplY3QuZW50cmllcyhvYmopLmZpbmQoKFssIGltcGxdKSA9PiBpbXBsID09PSB2YWx1ZSk/LlswXSB8fCBcIlwiO1xufVxuZnVuY3Rpb24gX3ZlcnNpb25UYWdPZih2ZXJzaW9uPzogc3RyaW5nKSB7XG5cdHJldHVybiB2ZXJzaW9uPy5zbGljZSgwLCA1KTtcbn1cbmZ1bmN0aW9uIF92ZXJzaW9uTGFzdENvbW1pdE9mKHZlcnNpb24/OiBzdHJpbmcpIHtcblx0aWYgKHZlcnNpb24pIHtcblx0XHRyZXR1cm4gdmVyc2lvbj8ubGVuZ3RoID49IDIxID8gdmVyc2lvbj8uc2xpY2UoLTE1LCAtOCkgOiBcIlwiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoRXZtTmV0d29ya0Zyb21Qcm92aWRlcihcblx0cHJvdmlkZXI6IEpzb25ScGNBcGlQcm92aWRlcixcbik6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGlkOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuXHRyZXR1cm4gcHJvdmlkZXIuZ2V0TmV0d29yaygpLnRoZW4oKHZhbHVlKSA9PiB7XG5cdFx0Y29uc3QgbmV0d29yayA9IGdldEV2bU5ldHdvcmtCeUNoYWluSWQoTnVtYmVyKHZhbHVlLmNoYWluSWQpKTtcblx0XHRpZiAobmV0d29yaykge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogbmV0d29yaywgaWQ6IE51bWJlcih2YWx1ZS5jaGFpbklkKSB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdm1OZXR3b3JrQWRkcmVzc2VzKG5ldHdvcms6IHN0cmluZyk6IGFueSB7XG5cdHJldHVybiBoZWxwZXJzLmdldE5ldHdvcmtBZGRyZXNzZXMobmV0d29yayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdm1OZXR3b3JrQnlDaGFpbklkKGNoYWluSWQ6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGZvdW5kID0gT2JqZWN0LmVudHJpZXMoaGVscGVycy5zdXBwb3J0ZWROZXR3b3JrcygpKS5maW5kKFxuXHRcdChbLCBjb25maWddOiBbc3RyaW5nLCBhbnldKSA9PiBjb25maWc/Lm5ldHdvcmtfaWQudG9TdHJpbmcoKSA9PT0gY2hhaW5JZC50b1N0cmluZygpLFxuXHQpO1xuXHRpZiAoZm91bmQpIHJldHVybiBmb3VuZFswXTtcblx0ZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXZtTmV0d29ya0lkKG5ldHdvcms6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGZvdW5kID0gT2JqZWN0LmVudHJpZXMoaGVscGVycy5zdXBwb3J0ZWROZXR3b3JrcygpKS5maW5kKFxuXHRcdChba2V5XTogW3N0cmluZywgYW55XSkgPT4gbmV0d29yayAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gbmV0d29yay50b0xvd2VyQ2FzZSgpLFxuXHQpO1xuXHRpZiAoZm91bmQpIHJldHVybiAoZm91bmRbMV0gYXMgYW55KT8ubmV0d29ya19pZDtcblx0ZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXZtTmV0d29ya1N5bWJvbChuZXR3b3JrOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBmb3VuZCA9IE9iamVjdC5lbnRyaWVzKGhlbHBlcnMuc3VwcG9ydGVkTmV0d29ya3MoKSkuZmluZChcblx0XHQoW2tleV06IFtzdHJpbmcsIGFueV0pID0+IG5ldHdvcmsgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09IG5ldHdvcmsudG9Mb3dlckNhc2UoKSxcblx0KTtcblx0aWYgKGZvdW5kKSByZXR1cm4gKGZvdW5kWzFdIGFzIGFueSk/LnN5bWJvbDtcblx0ZWxzZSByZXR1cm4gXCJFVEhcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV2bU5ldHdvcmtzKCk6IHN0cmluZ1tdIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKGhlbHBlcnMuc3VwcG9ydGVkTmV0d29ya3MoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V2bU5ldHdvcmtNYWlubmV0KG5ldHdvcms6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRjb25zdCBmb3VuZCA9IE9iamVjdC5lbnRyaWVzKGhlbHBlcnMuc3VwcG9ydGVkTmV0d29ya3MoKSkuZmluZCgoW2tleV0pID0+IG5ldHdvcmsgJiYga2V5ID09PSBuZXR3b3JrLnRvTG93ZXJDYXNlKCkpO1xuXHRyZXR1cm4gKGZvdW5kIGFzIGFueSk/LlsxXS5tYWlubmV0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFdm1OZXR3b3JrU3VwcG9ydGVkKG5ldHdvcms6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaGVscGVycy5zdXBwb3J0c05ldHdvcmsobmV0d29yayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhYmlEZWNvZGVRdWVyeVN0YXR1cyhzdGF0dXM6IGJpZ2ludCk6IFdpdE9yYWNsZVF1ZXJ5U3RhdHVzIHtcblx0c3dpdGNoIChzdGF0dXMpIHtcblx0XHRjYXNlIDFuOlxuXHRcdFx0cmV0dXJuIFwiUG9zdGVkXCI7XG5cdFx0Y2FzZSAybjpcblx0XHRcdHJldHVybiBcIlJlcG9ydGVkXCI7XG5cdFx0Y2FzZSAzbjpcblx0XHRcdHJldHVybiBcIkZpbmFsaXplZFwiO1xuXHRcdGNhc2UgNG46XG5cdFx0XHRyZXR1cm4gXCJEZWxheWVkXCI7XG5cdFx0Y2FzZSA1bjpcblx0XHRcdHJldHVybiBcIkV4cGlyZWRcIjtcblx0XHRjYXNlIDZuOlxuXHRcdFx0cmV0dXJuIFwiRGlzcHV0ZWRcIjtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIFwiVm9pZFwiO1xuXHR9XG59XG5cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlc29sdXRpb24gb2Ygc29tZSBEYXRhIFJlcXVlc3QgVHJhbnNhY3Rpb24gaW4gdGhlIFdpdG5ldCBibG9ja2NoYWluLlxuICovXG50eXBlIF9EYXRhUHVzaFJlcG9ydFNvbGlkaXR5ID0ge1xuXHQvKipcblx0ICogVW5pcXVlIGhhc2ggb2YgdGhlIERhdGEgUmVxdWVzdCBUcmFuc2FjdGlvbiB0aGF0IHByb2R1Y2VkIHRoZSBvdXRjb21pbmcgcmVzdWx0LlxuXHQgKi9cblx0ZHJUeEhhc2g6IFdpdG5ldC5IYXNoO1xuXHQvKipcblx0ICogUkFEIGhhc2ggb2YgdGhlIFJhZG9uIFJlcXVlc3QgYmVpbmcgc29sdmVkLlxuXHQgKi9cblx0cXVlcnlSYWRIYXNoOiBXaXRuZXQuSGFzaDtcblx0LyoqXG5cdCAqIFNMQSBwYXJhbWV0ZXJzIHJlcXVpcmVkIHRvIGJlIGZ1bGZpbGxlZCBieSB0aGUgV2l0bmV0IGJsb2NrY2hhaW4uXG5cdCAqL1xuXHRxdWVyeVBhcmFtczogV2l0T3JhY2xlUXVlcnlQYXJhbXM7XG5cdC8qKlxuXHQgKiBUaW1lc3RhbXAgd2hlbiB0aGUgZGF0YSBzb3VyY2VzIHdoZXJlIHF1ZXJpZWQgYW5kIHRoZSBjb250YWluZWQgcmVzdWx0IHByb2R1Y2VkLlxuXHQgKi9cblx0cmVzdWx0VGltZXN0YW1wOiBudW1iZXI7XG5cdC8qKlxuXHQgKiBDQk9SLWVuY29kZWQgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGFjdHVhbCByZXN1bHQgZGF0YSB0byBzb21lIHF1ZXJ5IGFzIHNvbHZlZCBieSB0aGUgV2l0bmV0IGJsb2NrY2hhaW4uXG5cdCAqL1xuXHRyZXN1bHRDYm9yQnl0ZXM6IFdpdG5ldC5IZXhTdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBfaW50b0RhdGFQdXNoUmVwb3J0U29saWRpdHkocmVwb3J0OiBXaXRuZXQuRGF0YVB1c2hSZXBvcnQpOiBfRGF0YVB1c2hSZXBvcnRTb2xpZGl0eSB7XG5cdHJldHVybiB7XG5cdFx0ZHJUeEhhc2g6IGAweCR7cmVwb3J0Lmhhc2h9YCxcblx0XHRxdWVyeVBhcmFtczoge1xuXHRcdFx0d2l0bmVzc2VzOiByZXBvcnQucXVlcnk/LndpdG5lc3NlcyB8fCAwLFxuXHRcdFx0dW5pdGFyeVJld2FyZDogcmVwb3J0LnF1ZXJ5Py51bml0YXJ5X3Jld2FyZCB8fCAwbixcblx0XHRcdHJlc3VsdE1heFNpemU6IDAsXG5cdFx0fSxcblx0XHRxdWVyeVJhZEhhc2g6IGAweCR7cmVwb3J0LnF1ZXJ5Py5yYWRfaGFzaH1gLFxuXHRcdHJlc3VsdENib3JCeXRlczogYDB4JHtyZXBvcnQucmVzdWx0Py5jYm9yX2J5dGVzfWAsXG5cdFx0cmVzdWx0VGltZXN0YW1wOiByZXBvcnQucmVzdWx0Py50aW1lc3RhbXAgfHwgMCxcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFiaUVuY29kZURhdGFQdXNoUmVwb3J0KHJlcG9ydDogV2l0bmV0LkRhdGFQdXNoUmVwb3J0KTogYW55IHtcblx0Y29uc3QgaW50ZXJuYWwgPSBfaW50b0RhdGFQdXNoUmVwb3J0U29saWRpdHkocmVwb3J0KTtcblx0cmV0dXJuIFtcblx0XHRpbnRlcm5hbC5kclR4SGFzaCxcblx0XHRpbnRlcm5hbC5xdWVyeVJhZEhhc2gsXG5cdFx0YWJpRW5jb2RlV2l0T3JhY2xlUXVlcnlQYXJhbXMoaW50ZXJuYWwucXVlcnlQYXJhbXMpLFxuXHRcdGludGVybmFsLnJlc3VsdFRpbWVzdGFtcCxcblx0XHRpbnRlcm5hbC5yZXN1bHRDYm9yQnl0ZXMsXG5cdF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhYmlFbmNvZGVEYXRhUHVzaFJlcG9ydE1lc3NhZ2UocmVwb3J0OiBXaXRuZXQuRGF0YVB1c2hSZXBvcnQpOiBXaXRuZXQuSGV4U3RyaW5nIHtcblx0cmV0dXJuIEFiaUNvZGVyLmRlZmF1bHRBYmlDb2RlcigpLmVuY29kZShcblx0XHRbXCJieXRlczMyXCIsIFwiYnl0ZXMzMlwiLCBcIih1aW50MTYsIHVpbnQxNiwgdWludDY0KVwiLCBcInVpbnQ2NFwiLCBcImJ5dGVzXCJdLFxuXHRcdGFiaUVuY29kZURhdGFQdXNoUmVwb3J0KHJlcG9ydCksXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhYmlFbmNvZGVEYXRhUHVzaFJlcG9ydERpZ2VzdChyZXBvcnQ6IFdpdG5ldC5EYXRhUHVzaFJlcG9ydCk6IFdpdG5ldC5IZXhTdHJpbmcge1xuXHRyZXR1cm4gc29saWRpdHlQYWNrZWRLZWNjYWsyNTYoW1wiYnl0ZXNcIl0sIFthYmlFbmNvZGVEYXRhUHVzaFJlcG9ydE1lc3NhZ2UocmVwb3J0KV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWJpRW5jb2RlUHJpY2VGZWVkVXBkYXRlQ29uZGl0aW9ucyhjb25kaXRpb25zOiBQcmljZUZlZWRVcGRhdGVDb25kaXRpb25zKTogYW55IHtcblx0cmV0dXJuIFtcblx0XHRjb25kaXRpb25zLmNhbGxiYWNrR2FzLFxuXHRcdGNvbmRpdGlvbnMuY29tcHV0ZUVNQSxcblx0XHRjb25kaXRpb25zLmNvb2xkb3duU2Vjcyxcblx0XHRjb25kaXRpb25zLmhlYXJ0YmVhdFNlY3MsXG5cdFx0TWF0aC5mbG9vcihjb25kaXRpb25zLm1heERldmlhdGlvblBlcmNlbnRhZ2UgKiAxMCksXG5cdFx0Y29uZGl0aW9ucy5taW5XaXRuZXNzZXMsXG5cdF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhYmlFbmNvZGVXaXRPcmFjbGVRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogV2l0T3JhY2xlUXVlcnlQYXJhbXMpOiBhbnkge1xuXHRyZXR1cm4gW3F1ZXJ5UGFyYW1zPy5yZXN1bHRNYXhTaXplIHx8IDAsIHF1ZXJ5UGFyYW1zPy53aXRuZXNzZXMgfHwgMCwgcXVlcnlQYXJhbXM/LnVuaXRhcnlSZXdhcmQgfHwgMF07XG59XG5leHBvcnQgZnVuY3Rpb24gYWJpRW5jb2RlUmFkb25Bc3NldChhc3NldDogYW55KTogYW55IHtcblx0aWYgKGFzc2V0IGluc3RhbmNlb2YgV2l0bmV0LlJhZG9uLlJhZG9uUmV0cmlldmFsKSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdGFzc2V0LnVybCB8fCBcIlwiLFxuXHRcdFx0W1xuXHRcdFx0XHRhc3NldC5tZXRob2QsXG5cdFx0XHRcdGFzc2V0LmJvZHkgfHwgXCJcIixcblx0XHRcdFx0YXNzZXQ/LmhlYWRlcnMgPyBPYmplY3QuZW50cmllcyhhc3NldC5oZWFkZXJzKSA6IFtdLFxuXHRcdFx0XHRhYmlFbmNvZGVSYWRvbkFzc2V0KGFzc2V0LnNjcmlwdCkgfHwgXCIweDgwXCIsXG5cdFx0XHRdLFxuXHRcdF07XG5cdH0gZWxzZSBpZiAoYXNzZXQgaW5zdGFuY2VvZiBXaXRuZXQuUmFkb24udHlwZXMuUmFkb25TY3JpcHQpIHtcblx0XHRyZXR1cm4gYXNzZXQudG9CeXRlY29kZSgpO1xuXHR9IGVsc2UgaWYgKGFzc2V0IGluc3RhbmNlb2YgV2l0bmV0LlJhZG9uLnJlZHVjZXJzLkNsYXNzKSB7XG5cdFx0cmV0dXJuIFthc3NldC5vcGNvZGUsIGFzc2V0LmZpbHRlcnM/Lm1hcCgoZmlsdGVyKSA9PiBhYmlFbmNvZGVSYWRvbkFzc2V0KGZpbHRlcikpIHx8IFtdXTtcblx0fSBlbHNlIGlmIChhc3NldCBpbnN0YW5jZW9mIFdpdG5ldC5SYWRvbi5maWx0ZXJzLkNsYXNzKSB7XG5cdFx0cmV0dXJuIFthc3NldC5vcGNvZGUsIGAweCR7YXNzZXQuYXJncyA/IGNib3IuZW5jb2RlKGFzc2V0LmFyZ3MpLnRvU3RyaW5nKFwiaGV4XCIpIDogXCJcIn1gXTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBOb3QgYSBSYWRvbiBhc3NldDogJHthc3NldH1gKTtcblx0fVxufVxuIl19
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckMsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsU0FBUyxFQUdULHVCQUF1QixHQUN2QixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFRbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxjQUFjLG1CQUFtQixDQUFDO0FBRWxDLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxPQUFlO0lBQ3ZELE9BQU8sT0FBTyxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QixDQUM1QyxRQUF5QjtJQUV6QixPQUFPLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2pELE1BQU0sT0FBTyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxVQUFVLEdBQUcsQ0FBQyxvQ0FBb0MsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO1lBQ25HLE1BQU0sT0FBTyxHQUFHO2dCQUNmLFdBQVc7Z0JBQ1gsd0JBQXdCO2dCQUN4Qiw4QkFB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LElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RixDQUFDO1NBQU0sQ0FBQztRQUNQLE1BQU0sSUFBSSxTQUFTLENBQUMsc0JBQXNCLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztBQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXaXRuZXQgfSBmcm9tIFwiQHdpdG5ldC9zZGtcIjtcblxuaW1wb3J0IHsgZGVmYXVsdCBhcyBjYm9yIH0gZnJvbSBcImNib3JcIjtcblxuaW1wb3J0IHtcblx0QWJpQ29kZXIsXG5cdENvbnRyYWN0LFxuXHRpc0FkZHJlc3MsXG5cdHR5cGUgSnNvblJwY0FwaVByb3ZpZGVyLFxuXHR0eXBlIEpzb25ScGNQcm92aWRlcixcblx0c29saWRpdHlQYWNrZWRLZWNjYWsyNTYsXG59IGZyb20gXCJldGhlcnNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgbWVyZ2UgfSBmcm9tIFwibG9kYXNoLm1lcmdlXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIGhlbHBlcnMgfSBmcm9tIFwiLi4vYmluL2hlbHBlcnMuY2pzXCI7XG5pbXBvcnQgeyBBQklzIH0gZnJvbSBcIi4uL2luZGV4LmpzXCI7XG5cbmltcG9ydCB0eXBlIHtcblx0UHJpY2VGZWVkVXBkYXRlQ29uZGl0aW9ucyxcblx0V2l0T3JhY2xlQXJ0aWZhY3QsXG5cdFdpdE9yYWNsZVF1ZXJ5UGFyYW1zLFxuXHRXaXRPcmFjbGVRdWVyeVN0YXR1cyxcbn0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IFdpdE9yYWNsZSB9IGZyb20gXCIuL3dyYXBwZXJzLmpzXCI7XG5cbmV4cG9ydCAqIGZyb20gXCJAd2l0bmV0L3Nkay91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV0d29ya1RhZ3NGcm9tU3RyaW5nKG5ldHdvcms6IHN0cmluZykge1xuXHRyZXR1cm4gaGVscGVycy5nZXROZXR3b3JrVGFnc0Zyb21TdHJpbmcobmV0d29yayk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFdpdE9yYWNsZUZyYW1ld29yayhcblx0cHJvdmlkZXI6IEpzb25ScGNQcm92aWRlcixcbik6IFByb21pc2U8eyBba2V5OiBzdHJpbmddOiBXaXRPcmFjbGVBcnRpZmFjdCB9PiB7XG5cdHJldHVybiBwcm92aWRlci5nZXROZXR3b3JrKCkudGhlbihhc3luYyAodmFsdWUpID0+IHtcblx0XHRjb25zdCBuZXR3b3JrID0gZ2V0RXZtTmV0d29ya0J5Q2hhaW5JZChOdW1iZXIodmFsdWUuY2hhaW5JZCkpO1xuXHRcdGlmIChuZXR3b3JrKSB7XG5cdFx0XHRjb25zdCBleGNsdXNpb25zID0gW1wiV2l0T3JhY2xlUmFkb25SZXF1ZXN0RmFjdG9yeU1vZGFsc1wiLCBcIldpdE9yYWNsZVJhZG9uUmVxdWVzdEZhY3RvcnlUZW1wbGF0ZXNcIl07XG5cdFx0XHRjb25zdCB0YXJnZXRzID0gW1xuXHRcdFx0XHRcIldpdE9yYWNsZVwiLFxuXHRcdFx0XHRcIldpdE9yYWNsZVJhZG9uUmVnaXN0cnlcIixcblx0XHRcdFx0XCJXaXRPcmFjbGVSYWRvblJlcXVlc3RGYWN0b3J5XCIsXG5cdFx0XHRcdFwiV2l0UHJpY2VGZWVkc1wiLFxuXHRcdFx0XHRcIldpdFByaWNlRmVlZHNMZWdhY3lcIixcblx0XHRcdFx0XCJXaXRSYW5kb21uZXNzVjJcIixcblx0XHRcdFx0XCJXaXRSYW5kb21uZXNzVjNcIixcblx0XHRcdF07XG5cdFx0XHRjb25zdCBjb250cmFjdHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG5cdFx0XHRcdE9iamVjdC5lbnRyaWVzKGhlbHBlcnMuZmxhdHRlbk9iamVjdChoZWxwZXJzLmdldE5ldHdvcmtBcnRpZmFjdHMobmV0d29yaykpKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuXHRcdFx0XHRcdGtleS5zcGxpdChcIi5cIikucG9wKCksXG5cdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdF0pLFxuXHRcdFx0KTtcblx0XHRcdGxldCB7IGFkZHJlc3NlcyB9ID0gaGVscGVycy5yZWFkV2l0bmV0SnNvbkZpbGVzKFwiYWRkcmVzc2VzXCIpO1xuXHRcdFx0YWRkcmVzc2VzID0gbWVyZ2UoaGVscGVycy5nZXROZXR3b3JrQWRkcmVzc2VzKG5ldHdvcmspLCBhZGRyZXNzZXNbbmV0d29ya10pO1xuXHRcdFx0cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRPYmplY3QuZW50cmllcyhoZWxwZXJzLmZsYXR0ZW5PYmplY3QoYWRkcmVzc2VzKSlcblx0XHRcdFx0XHQubWFwKChba2V5LCBhZGRyZXNzXSkgPT4gW2tleS5zcGxpdChcIi5cIikucG9wKCksIGFkZHJlc3NdKVxuXHRcdFx0XHRcdC5zb3J0KChbYV0sIFtiXSkgPT4gKGEgYXMgc3RyaW5nKS5sb2NhbGVDb21wYXJlKGIpKVxuXHRcdFx0XHRcdC5maWx0ZXIoKFtrZXksIGFkZHJlc3NdKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBiYXNlID0gX2ZpbmRCYXNlKGNvbnRyYWN0cywga2V5KTtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdGFkZHJlc3MgJiZcblx0XHRcdFx0XHRcdFx0YWRkcmVzcyAhPT0gXCIweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIiAmJlxuXHRcdFx0XHRcdFx0XHR0YXJnZXRzLmluY2x1ZGVzKGtleSkgJiZcblx0XHRcdFx0XHRcdFx0IWV4Y2x1c2lvbnMuaW5jbHVkZXMoYmFzZSkgJiZcblx0XHRcdFx0XHRcdFx0KEFCSXNba2V5XSB8fCBBQklzW2Jhc2VdKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5tYXAoYXN5bmMgKFtrZXksIGFkZHJlc3NdKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBieXRlY29kZSA9IGF3YWl0IHByb3ZpZGVyLmdldENvZGUoYWRkcmVzcykuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBXYXJuaW5nOiAke2tleX06ICR7ZXJyfWApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAoIWJ5dGVjb2RlPy5sZW5ndGggfHwgYnl0ZWNvZGUubGVuZ3RoIDw9IDIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFtrZXksIHVuZGVmaW5lZF07XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGFwcGxpYW5jZSA9IG5ldyBDb250cmFjdChhZGRyZXNzLCBBQklzLldpdEFwcGxpYW5jZSwgcHJvdmlkZXIpO1xuXHRcdFx0XHRcdFx0Y29uc3QgdXBncmFkYWJsZSA9IG5ldyBDb250cmFjdChhZGRyZXNzLCBBQklzLldpdG5ldFVwZ3JhZGFibGVCYXNlLCBwcm92aWRlcik7XG5cblx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgYWxsIGNvbnRyYWN0IGNhbGxzIGluIHBhcmFsbGVsIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2Vcblx0XHRcdFx0XHRcdGNvbnN0IFtpbXBsLCBpbnRlcmZhY2VJZCwgaXNVcGdyYWRhYmxlLCB2ZXJzaW9uXSA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG5cdFx0XHRcdFx0XHRcdGFwcGxpYW5jZS5jbGFzcy5zdGF0aWNDYWxsKCksXG5cdFx0XHRcdFx0XHRcdGFwcGxpYW5jZS5zcGVjcy5zdGF0aWNDYWxsKCksXG5cdFx0XHRcdFx0XHRcdHVwZ3JhZGFibGUuaXNVcGdyYWRhYmxlLnN0YXRpY0NhbGwoKSxcblx0XHRcdFx0XHRcdFx0dXBncmFkYWJsZS52ZXJzaW9uLnN0YXRpY0NhbGwoKSxcblx0XHRcdFx0XHRcdF0pLnRoZW4oKHJlc3VsdHMpID0+IFtcblx0XHRcdFx0XHRcdFx0KHJlc3VsdHNbMF0uc3RhdHVzID09PSBcImZ1bGZpbGxlZFwiID8gcmVzdWx0c1swXS52YWx1ZSA6IGtleSkgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0XHQocmVzdWx0c1sxXS5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIgPyByZXN1bHRzWzFdLnZhbHVlIDogdW5kZWZpbmVkKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdChyZXN1bHRzWzJdLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIiA/IHJlc3VsdHNbMl0udmFsdWUgOiBmYWxzZSkgYXMgYm9vbGVhbixcblx0XHRcdFx0XHRcdFx0KHJlc3VsdHNbM10uc3RhdHVzID09PSBcImZ1bGZpbGxlZFwiID8gcmVzdWx0c1szXS52YWx1ZSA6IHVuZGVmaW5lZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XSk7XG5cblx0XHRcdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0XHRcdGtleSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGFiaTogQUJJc1trZXldIHx8ICh0eXBlb2YgaW1wbCA9PT0gXCJzdHJpbmdcIiA/IEFCSXNbaW1wbF0gOiB1bmRlZmluZWQpLFxuXHRcdFx0XHRcdFx0XHRcdGFkZHJlc3MsXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M6IGltcGwsXG5cdFx0XHRcdFx0XHRcdFx0Z2l0SGFzaDogX3ZlcnNpb25MYXN0Q29tbWl0T2YodmVyc2lvbj8udG9TdHJpbmcoKSksXG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJmYWNlSWQsXG5cdFx0XHRcdFx0XHRcdFx0aXNVcGdyYWRhYmxlLFxuXHRcdFx0XHRcdFx0XHRcdHNlbVZlcjogX3ZlcnNpb25UYWdPZih2ZXJzaW9uPy50b1N0cmluZygpKSxcblx0XHRcdFx0XHRcdFx0XHR2ZXJzaW9uLFxuXHRcdFx0XHRcdFx0XHR9IGFzIFdpdE9yYWNsZUFydGlmYWN0LFxuXHRcdFx0XHRcdFx0XTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdClcblx0XHRcdFx0LnRoZW4oKGFydGlmYWN0cykgPT4gYXJ0aWZhY3RzLmZpbHRlcigoWywgYXJ0aWZhY3RdKSA9PiBhcnRpZmFjdCAhPT0gdW5kZWZpbmVkKSlcblx0XHRcdFx0LnRoZW4oYXN5bmMgKGFydGlmYWN0cykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGFydGlmYWN0TWFwID0gT2JqZWN0LmZyb21FbnRyaWVzKGFydGlmYWN0cyk7XG5cdFx0XHRcdFx0aWYgKGFydGlmYWN0TWFwLldpdE9yYWNsZSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgd2l0T3JhY2xlID0gYXdhaXQgV2l0T3JhY2xlLmZyb21FdGhScGNQcm92aWRlcihwcm92aWRlcik7XG5cdFx0XHRcdFx0XHRhcnRpZmFjdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRcdFx0YXJ0aWZhY3RzLm1hcChhc3luYyAoW2tleSwgYXJ0aWZhY3RdKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHdyYXBwZXI6IGFueTtcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGtleSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIldpdE9yYWNsZVwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3cmFwcGVyID0gd2l0T3JhY2xlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJXaXRPcmFjbGVSYWRvblJlZ2lzdHJ5XCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXBwZXIgPSBhd2FpdCB3aXRPcmFjbGUuX2dldFdpdE9yYWNsZVJhZG9uUmVnaXN0cnkoKS5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIkVycm9yIGdldHRpbmcgV2l0T3JhY2xlUmFkb25SZWdpc3RyeSB3cmFwcGVyOlwiLCBlcnIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJXaXRPcmFjbGVSYWRvblJlcXVlc3RGYWN0b3J5XCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXBwZXIgPSBhd2FpdCB3aXRPcmFjbGUuX2dldFdpdE9yYWNsZVJhZG9uUmVxdWVzdEZhY3RvcnkoKS5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIkVycm9yIGdldHRpbmcgV2l0T3JhY2xlUmFkb25SZXF1ZXN0RmFjdG9yeSB3cmFwcGVyOlwiLCBlcnIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJXaXRQcmljZUZlZWRzXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXBwZXIgPSBhd2FpdCB3aXRPcmFjbGUuX2dldFdpdFByaWNlRmVlZHMoYXJ0aWZhY3QuYWRkcmVzcykuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciBnZXR0aW5nIFdpdFByaWNlRmVlZHMgd3JhcHBlcjpcIiwgZXJyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiV2l0UHJpY2VGZWVkc0xlZ2FjeVwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3cmFwcGVyID0gYXdhaXQgd2l0T3JhY2xlLl9nZXRXaXRQcmljZUZlZWRzTGVnYWN5KGFydGlmYWN0LmFkZHJlc3MpLmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3IgZ2V0dGluZyBXaXRQcmljZUZlZWRzTGVnYWN5IHdyYXBwZXI6XCIsIGVycik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGtleS5zdGFydHNXaXRoKFwiV2l0UmFuZG9tbmVzc1wiKSB8fCBrZXkuc3RhcnRzV2l0aChcIldpdG5ldFJhbmRvbW5lc3NcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3cmFwcGVyID0gYXdhaXQgd2l0T3JhY2xlLl9nZXRXaXRSYW5kb21uZXNzKGFydGlmYWN0LmFkZHJlc3MpLmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIGdldHRpbmcgJHtrZXl9IHdyYXBwZXI6YCwgZXJyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFtrZXksIHdyYXBwZXIgPyB7IC4uLmFydGlmYWN0LCB3cmFwcGVyIH0gOiBhcnRpZmFjdF07XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhhcnRpZmFjdHMpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIF9maW5kQmFzZShvYmo6IHsgW2s6IHN0cmluZ106IGFueSB9LCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iaikuZmluZCgoWywgaW1wbF0pID0+IGltcGwgPT09IHZhbHVlKT8uWzBdIHx8IFwiXCI7XG59XG5mdW5jdGlvbiBfdmVyc2lvblRhZ09mKHZlcnNpb24/OiBzdHJpbmcpIHtcblx0cmV0dXJuIHZlcnNpb24/LnNsaWNlKDAsIDUpO1xufVxuZnVuY3Rpb24gX3ZlcnNpb25MYXN0Q29tbWl0T2YodmVyc2lvbj86IHN0cmluZykge1xuXHRpZiAodmVyc2lvbikge1xuXHRcdHJldHVybiB2ZXJzaW9uPy5sZW5ndGggPj0gMjEgPyB2ZXJzaW9uPy5zbGljZSgtMTUsIC04KSA6IFwiXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hFdm1OZXR3b3JrRnJvbVByb3ZpZGVyKFxuXHRwcm92aWRlcjogSnNvblJwY0FwaVByb3ZpZGVyLFxuKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgaWQ6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG5cdHJldHVybiBwcm92aWRlci5nZXROZXR3b3JrKCkudGhlbigodmFsdWUpID0+IHtcblx0XHRjb25zdCBuZXR3b3JrID0gZ2V0RXZtTmV0d29ya0J5Q2hhaW5JZChOdW1iZXIodmFsdWUuY2hhaW5JZCkpO1xuXHRcdGlmIChuZXR3b3JrKSB7XG5cdFx0XHRyZXR1cm4geyBuYW1lOiBuZXR3b3JrLCBpZDogTnVtYmVyKHZhbHVlLmNoYWluSWQpIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV2bU5ldHdvcmtBZGRyZXNzZXMobmV0d29yazogc3RyaW5nKTogYW55IHtcblx0cmV0dXJuIGhlbHBlcnMuZ2V0TmV0d29ya0FkZHJlc3NlcyhuZXR3b3JrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV2bU5ldHdvcmtCeUNoYWluSWQoY2hhaW5JZDogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZm91bmQgPSBPYmplY3QuZW50cmllcyhoZWxwZXJzLnN1cHBvcnRlZE5ldHdvcmtzKCkpLmZpbmQoXG5cdFx0KFssIGNvbmZpZ106IFtzdHJpbmcsIGFueV0pID0+IGNvbmZpZz8ubmV0d29ya19pZC50b1N0cmluZygpID09PSBjaGFpbklkLnRvU3RyaW5nKCksXG5cdCk7XG5cdGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kWzBdO1xuXHRlbHNlIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdm1OZXR3b3JrSWQobmV0d29yazogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZm91bmQgPSBPYmplY3QuZW50cmllcyhoZWxwZXJzLnN1cHBvcnRlZE5ldHdvcmtzKCkpLmZpbmQoXG5cdFx0KFtrZXldOiBbc3RyaW5nLCBhbnldKSA9PiBuZXR3b3JrICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSBuZXR3b3JrLnRvTG93ZXJDYXNlKCksXG5cdCk7XG5cdGlmIChmb3VuZCkgcmV0dXJuIChmb3VuZFsxXSBhcyBhbnkpPy5uZXR3b3JrX2lkO1xuXHRlbHNlIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdm1OZXR3b3JrU3ltYm9sKG5ldHdvcms6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IGZvdW5kID0gT2JqZWN0LmVudHJpZXMoaGVscGVycy5zdXBwb3J0ZWROZXR3b3JrcygpKS5maW5kKFxuXHRcdChba2V5XTogW3N0cmluZywgYW55XSkgPT4gbmV0d29yayAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gbmV0d29yay50b0xvd2VyQ2FzZSgpLFxuXHQpO1xuXHRpZiAoZm91bmQpIHJldHVybiAoZm91bmRbMV0gYXMgYW55KT8uc3ltYm9sO1xuXHRlbHNlIHJldHVybiBcIkVUSFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXZtTmV0d29ya3MoKToge1xuXHRba2V5OiBzdHJpbmddOiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGNoYWluSWQ6IG51bWJlcjtcblx0XHRlY29zeXN0ZW06IHN0cmluZztcblx0XHRtYWlubmV0OiBib29sZWFuO1xuXHRcdHBvcnQ6IG51bWJlcjtcblx0XHRwdXNoT25seTogYm9vbGVhbjtcblx0XHRzeW1ib2w6IHN0cmluZztcblx0XHRhZGRyZXNzZXM/OiBhbnk7XG5cdH07XG59IHtcblx0cmV0dXJuIGhlbHBlcnMuc3VwcG9ydGVkTmV0d29ya3MoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXZtTmV0d29ya01haW5uZXQobmV0d29yazogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGNvbnN0IGZvdW5kID0gT2JqZWN0LmVudHJpZXMoaGVscGVycy5zdXBwb3J0ZWROZXR3b3JrcygpKS5maW5kKChba2V5XSkgPT4gbmV0d29yayAmJiBrZXkgPT09IG5ldHdvcmsudG9Mb3dlckNhc2UoKSk7XG5cdHJldHVybiAoZm91bmQgYXMgYW55KT8uWzFdLm1haW5uZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V2bU5ldHdvcmtTdXBwb3J0ZWQobmV0d29yazogc3RyaW5nKTogYm9vbGVhbiB7XG5cdHJldHVybiBoZWxwZXJzLnN1cHBvcnRzTmV0d29yayhuZXR3b3JrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFdm1BZGRyZXNzKGFkZHJlc3M/OiBzdHJpbmcpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRhZGRyZXNzICE9PSB1bmRlZmluZWQgJiZcblx0XHRhZGRyZXNzICE9PSBcIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiICYmXG5cdFx0L14weFswLTlhLWZBLUZdezQwfSQvLnRlc3QoYWRkcmVzcykgJiZcblx0XHRpc0FkZHJlc3MoYWRkcmVzcylcblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFiaURlY29kZVF1ZXJ5U3RhdHVzKHN0YXR1czogYmlnaW50KTogV2l0T3JhY2xlUXVlcnlTdGF0dXMge1xuXHRzd2l0Y2ggKHN0YXR1cykge1xuXHRcdGNhc2UgMW46XG5cdFx0XHRyZXR1cm4gXCJQb3N0ZWRcIjtcblx0XHRjYXNlIDJuOlxuXHRcdFx0cmV0dXJuIFwiUmVwb3J0ZWRcIjtcblx0XHRjYXNlIDNuOlxuXHRcdFx0cmV0dXJuIFwiRmluYWxpemVkXCI7XG5cdFx0Y2FzZSA0bjpcblx0XHRcdHJldHVybiBcIkRlbGF5ZWRcIjtcblx0XHRjYXNlIDVuOlxuXHRcdFx0cmV0dXJuIFwiRXhwaXJlZFwiO1xuXHRcdGNhc2UgNm46XG5cdFx0XHRyZXR1cm4gXCJEaXNwdXRlZFwiO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gXCJWb2lkXCI7XG5cdH1cbn1cblxuLyoqXG4gKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVzb2x1dGlvbiBvZiBzb21lIERhdGEgUmVxdWVzdCBUcmFuc2FjdGlvbiBpbiB0aGUgV2l0bmV0IGJsb2NrY2hhaW4uXG4gKi9cbnR5cGUgX0RhdGFQdXNoUmVwb3J0U29saWRpdHkgPSB7XG5cdC8qKlxuXHQgKiBVbmlxdWUgaGFzaCBvZiB0aGUgRGF0YSBSZXF1ZXN0IFRyYW5zYWN0aW9uIHRoYXQgcHJvZHVjZWQgdGhlIG91dGNvbWluZyByZXN1bHQuXG5cdCAqL1xuXHRkclR4SGFzaDogV2l0bmV0Lkhhc2g7XG5cdC8qKlxuXHQgKiBSQUQgaGFzaCBvZiB0aGUgUmFkb24gUmVxdWVzdCBiZWluZyBzb2x2ZWQuXG5cdCAqL1xuXHRxdWVyeVJhZEhhc2g6IFdpdG5ldC5IYXNoO1xuXHQvKipcblx0ICogU0xBIHBhcmFtZXRlcnMgcmVxdWlyZWQgdG8gYmUgZnVsZmlsbGVkIGJ5IHRoZSBXaXRuZXQgYmxvY2tjaGFpbi5cblx0ICovXG5cdHF1ZXJ5UGFyYW1zOiBXaXRPcmFjbGVRdWVyeVBhcmFtcztcblx0LyoqXG5cdCAqIFRpbWVzdGFtcCB3aGVuIHRoZSBkYXRhIHNvdXJjZXMgd2hlcmUgcXVlcmllZCBhbmQgdGhlIGNvbnRhaW5lZCByZXN1bHQgcHJvZHVjZWQuXG5cdCAqL1xuXHRyZXN1bHRUaW1lc3RhbXA6IG51bWJlcjtcblx0LyoqXG5cdCAqIENCT1ItZW5jb2RlZCBidWZmZXIgY29udGFpbmluZyB0aGUgYWN0dWFsIHJlc3VsdCBkYXRhIHRvIHNvbWUgcXVlcnkgYXMgc29sdmVkIGJ5IHRoZSBXaXRuZXQgYmxvY2tjaGFpbi5cblx0ICovXG5cdHJlc3VsdENib3JCeXRlczogV2l0bmV0LkhleFN0cmluZztcbn07XG5cbmZ1bmN0aW9uIF9pbnRvRGF0YVB1c2hSZXBvcnRTb2xpZGl0eShyZXBvcnQ6IFdpdG5ldC5EYXRhUHVzaFJlcG9ydCk6IF9EYXRhUHVzaFJlcG9ydFNvbGlkaXR5IHtcblx0cmV0dXJuIHtcblx0XHRkclR4SGFzaDogYDB4JHtyZXBvcnQuaGFzaH1gLFxuXHRcdHF1ZXJ5UGFyYW1zOiB7XG5cdFx0XHR3aXRuZXNzZXM6IHJlcG9ydC5xdWVyeT8ud2l0bmVzc2VzIHx8IDAsXG5cdFx0XHR1bml0YXJ5UmV3YXJkOiByZXBvcnQucXVlcnk/LnVuaXRhcnlfcmV3YXJkIHx8IDBuLFxuXHRcdFx0cmVzdWx0TWF4U2l6ZTogMCxcblx0XHR9LFxuXHRcdHF1ZXJ5UmFkSGFzaDogYDB4JHtyZXBvcnQucXVlcnk/LnJhZF9oYXNofWAsXG5cdFx0cmVzdWx0Q2JvckJ5dGVzOiBgMHgke3JlcG9ydC5yZXN1bHQ/LmNib3JfYnl0ZXN9YCxcblx0XHRyZXN1bHRUaW1lc3RhbXA6IHJlcG9ydC5yZXN1bHQ/LnRpbWVzdGFtcCB8fCAwLFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWJpRW5jb2RlRGF0YVB1c2hSZXBvcnQocmVwb3J0OiBXaXRuZXQuRGF0YVB1c2hSZXBvcnQpOiBhbnkge1xuXHRjb25zdCBpbnRlcm5hbCA9IF9pbnRvRGF0YVB1c2hSZXBvcnRTb2xpZGl0eShyZXBvcnQpO1xuXHRyZXR1cm4gW1xuXHRcdGludGVybmFsLmRyVHhIYXNoLFxuXHRcdGludGVybmFsLnF1ZXJ5UmFkSGFzaCxcblx0XHRhYmlFbmNvZGVXaXRPcmFjbGVRdWVyeVBhcmFtcyhpbnRlcm5hbC5xdWVyeVBhcmFtcyksXG5cdFx0aW50ZXJuYWwucmVzdWx0VGltZXN0YW1wLFxuXHRcdGludGVybmFsLnJlc3VsdENib3JCeXRlcyxcblx0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFiaUVuY29kZURhdGFQdXNoUmVwb3J0TWVzc2FnZShyZXBvcnQ6IFdpdG5ldC5EYXRhUHVzaFJlcG9ydCk6IFdpdG5ldC5IZXhTdHJpbmcge1xuXHRyZXR1cm4gQWJpQ29kZXIuZGVmYXVsdEFiaUNvZGVyKCkuZW5jb2RlKFxuXHRcdFtcImJ5dGVzMzJcIiwgXCJieXRlczMyXCIsIFwiKHVpbnQxNiwgdWludDE2LCB1aW50NjQpXCIsIFwidWludDY0XCIsIFwiYnl0ZXNcIl0sXG5cdFx0YWJpRW5jb2RlRGF0YVB1c2hSZXBvcnQocmVwb3J0KSxcblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFiaUVuY29kZURhdGFQdXNoUmVwb3J0RGlnZXN0KHJlcG9ydDogV2l0bmV0LkRhdGFQdXNoUmVwb3J0KTogV2l0bmV0LkhleFN0cmluZyB7XG5cdHJldHVybiBzb2xpZGl0eVBhY2tlZEtlY2NhazI1NihbXCJieXRlc1wiXSwgW2FiaUVuY29kZURhdGFQdXNoUmVwb3J0TWVzc2FnZShyZXBvcnQpXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhYmlFbmNvZGVQcmljZUZlZWRVcGRhdGVDb25kaXRpb25zKGNvbmRpdGlvbnM6IFByaWNlRmVlZFVwZGF0ZUNvbmRpdGlvbnMpOiBhbnkge1xuXHRyZXR1cm4gW1xuXHRcdGNvbmRpdGlvbnMuY2FsbGJhY2tHYXMsXG5cdFx0Y29uZGl0aW9ucy5jb21wdXRlRU1BLFxuXHRcdGNvbmRpdGlvbnMuY29vbGRvd25TZWNzLFxuXHRcdGNvbmRpdGlvbnMuaGVhcnRiZWF0U2Vjcyxcblx0XHRNYXRoLmZsb29yKGNvbmRpdGlvbnMubWF4RGV2aWF0aW9uUGVyY2VudGFnZSAqIDEwKSxcblx0XHRjb25kaXRpb25zLm1pbldpdG5lc3Nlcyxcblx0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFiaUVuY29kZVdpdE9yYWNsZVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBXaXRPcmFjbGVRdWVyeVBhcmFtcyk6IGFueSB7XG5cdHJldHVybiBbcXVlcnlQYXJhbXM/LnJlc3VsdE1heFNpemUgfHwgMCwgcXVlcnlQYXJhbXM/LndpdG5lc3NlcyB8fCAwLCBxdWVyeVBhcmFtcz8udW5pdGFyeVJld2FyZCB8fCAwXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhYmlFbmNvZGVSYWRvbkFzc2V0KGFzc2V0OiBhbnkpOiBhbnkge1xuXHRpZiAoYXNzZXQgaW5zdGFuY2VvZiBXaXRuZXQuUmFkb24uUmFkb25SZXRyaWV2YWwpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0YXNzZXQudXJsIHx8IFwiXCIsXG5cdFx0XHRbXG5cdFx0XHRcdGFzc2V0Lm1ldGhvZCxcblx0XHRcdFx0YXNzZXQuYm9keSB8fCBcIlwiLFxuXHRcdFx0XHRhc3NldD8uaGVhZGVycyA/IE9iamVjdC5lbnRyaWVzKGFzc2V0LmhlYWRlcnMpIDogW10sXG5cdFx0XHRcdGFiaUVuY29kZVJhZG9uQXNzZXQoYXNzZXQuc2NyaXB0KSB8fCBcIjB4ODBcIixcblx0XHRcdF0sXG5cdFx0XTtcblx0fSBlbHNlIGlmIChhc3NldCBpbnN0YW5jZW9mIFdpdG5ldC5SYWRvbi50eXBlcy5SYWRvblNjcmlwdCkge1xuXHRcdHJldHVybiBhc3NldC50b0J5dGVjb2RlKCk7XG5cdH0gZWxzZSBpZiAoYXNzZXQgaW5zdGFuY2VvZiBXaXRuZXQuUmFkb24ucmVkdWNlcnMuQ2xhc3MpIHtcblx0XHRyZXR1cm4gW2Fzc2V0Lm9wY29kZSwgYXNzZXQuZmlsdGVycz8ubWFwKChmaWx0ZXIpID0+IGFiaUVuY29kZVJhZG9uQXNzZXQoZmlsdGVyKSkgfHwgW11dO1xuXHR9IGVsc2UgaWYgKGFzc2V0IGluc3RhbmNlb2YgV2l0bmV0LlJhZG9uLmZpbHRlcnMuQ2xhc3MpIHtcblx0XHRyZXR1cm4gW2Fzc2V0Lm9wY29kZSwgYDB4JHthc3NldC5hcmdzID8gY2Jvci5lbmNvZGUoYXNzZXQuYXJncykudG9TdHJpbmcoXCJoZXhcIikgOiBcIlwifWBdO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYE5vdCBhIFJhZG9uIGFzc2V0OiAke2Fzc2V0fWApO1xuXHR9XG59XG4iXX0=