@witnet/sdk 1.1.5 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/.env_witnet +13 -1
  2. package/dist/package.json +31 -24
  3. package/dist/src/bin/helpers.d.ts +59 -49
  4. package/dist/src/bin/helpers.d.ts.map +1 -1
  5. package/dist/src/bin/helpers.js +228 -229
  6. package/dist/src/index.d.ts +3 -4
  7. package/dist/src/index.d.ts.map +1 -1
  8. package/dist/src/index.js +4 -47
  9. package/dist/src/lib/crypto/account.d.ts +3 -3
  10. package/dist/src/lib/crypto/account.d.ts.map +1 -1
  11. package/dist/src/lib/crypto/account.js +31 -25
  12. package/dist/src/lib/crypto/coinbase.d.ts +4 -4
  13. package/dist/src/lib/crypto/coinbase.d.ts.map +1 -1
  14. package/dist/src/lib/crypto/coinbase.js +8 -13
  15. package/dist/src/lib/crypto/index.d.ts +7 -7
  16. package/dist/src/lib/crypto/index.d.ts.map +1 -1
  17. package/dist/src/lib/crypto/index.js +7 -30
  18. package/dist/src/lib/crypto/interfaces.d.ts +5 -5
  19. package/dist/src/lib/crypto/interfaces.d.ts.map +1 -1
  20. package/dist/src/lib/crypto/interfaces.js +2 -3
  21. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +5 -5
  22. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -1
  23. package/dist/src/lib/crypto/payloads/DataRequestPayload.js +98 -85
  24. package/dist/src/lib/crypto/payloads/StakePayload.d.ts +3 -4
  25. package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -1
  26. package/dist/src/lib/crypto/payloads/StakePayload.js +81 -71
  27. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +4 -5
  28. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -1
  29. package/dist/src/lib/crypto/payloads/UnstakePayload.js +36 -43
  30. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +3 -4
  31. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -1
  32. package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +46 -48
  33. package/dist/src/lib/crypto/payloads.d.ts +5 -5
  34. package/dist/src/lib/crypto/payloads.d.ts.map +1 -1
  35. package/dist/src/lib/crypto/payloads.js +44 -45
  36. package/dist/src/lib/crypto/signer.d.ts +3 -3
  37. package/dist/src/lib/crypto/signer.d.ts.map +1 -1
  38. package/dist/src/lib/crypto/signer.js +45 -88
  39. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +6 -6
  40. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -1
  41. package/dist/src/lib/crypto/transmitters/DataRequests.js +6 -10
  42. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +5 -5
  43. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -1
  44. package/dist/src/lib/crypto/transmitters/StakeDeposits.js +7 -11
  45. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +6 -7
  46. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -1
  47. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +9 -13
  48. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +5 -5
  49. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -1
  50. package/dist/src/lib/crypto/transmitters/ValueTransfers.js +6 -10
  51. package/dist/src/lib/crypto/transmitters.d.ts +6 -6
  52. package/dist/src/lib/crypto/transmitters.d.ts.map +1 -1
  53. package/dist/src/lib/crypto/transmitters.js +89 -76
  54. package/dist/src/lib/crypto/types.d.ts +1 -2
  55. package/dist/src/lib/crypto/types.d.ts.map +1 -1
  56. package/dist/src/lib/crypto/types.js +71 -67
  57. package/dist/src/lib/crypto/utils.d.ts +5 -5
  58. package/dist/src/lib/crypto/utils.d.ts.map +1 -1
  59. package/dist/src/lib/crypto/utils.js +48 -66
  60. package/dist/src/lib/crypto/wallet.d.ts +3 -3
  61. package/dist/src/lib/crypto/wallet.d.ts.map +1 -1
  62. package/dist/src/lib/crypto/wallet.js +72 -89
  63. package/dist/src/lib/index.d.ts +5 -4
  64. package/dist/src/lib/index.d.ts.map +1 -1
  65. package/dist/src/lib/index.js +6 -44
  66. package/dist/src/lib/radon/ccdr/eth.d.ts +1 -1
  67. package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -1
  68. package/dist/src/lib/radon/ccdr/eth.js +95 -83
  69. package/dist/src/lib/radon/ccdr/index.d.ts +2 -2
  70. package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -1
  71. package/dist/src/lib/radon/ccdr/index.js +3 -39
  72. package/dist/src/lib/radon/ccdr/wit.d.ts +2 -2
  73. package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -1
  74. package/dist/src/lib/radon/ccdr/wit.js +17 -19
  75. package/dist/src/lib/radon/filters.d.ts.map +1 -1
  76. package/dist/src/lib/radon/filters.js +23 -19
  77. package/dist/src/lib/radon/index.d.ts +10 -11
  78. package/dist/src/lib/radon/index.d.ts.map +1 -1
  79. package/dist/src/lib/radon/index.js +205 -187
  80. package/dist/src/lib/radon/reducers.d.ts +2 -2
  81. package/dist/src/lib/radon/reducers.d.ts.map +1 -1
  82. package/dist/src/lib/radon/reducers.js +48 -34
  83. package/dist/src/lib/radon/types.d.ts +2 -2
  84. package/dist/src/lib/radon/types.d.ts.map +1 -1
  85. package/dist/src/lib/radon/types.js +80 -110
  86. package/dist/src/lib/radon/utils.d.ts +3 -3
  87. package/dist/src/lib/radon/utils.d.ts.map +1 -1
  88. package/dist/src/lib/radon/utils.js +49 -52
  89. package/dist/src/lib/rest/kermit.d.ts +20 -0
  90. package/dist/src/lib/rest/kermit.d.ts.map +1 -0
  91. package/dist/src/lib/rest/kermit.js +68 -0
  92. package/dist/src/lib/rest/types.d.ts +5 -0
  93. package/dist/src/lib/rest/types.d.ts.map +1 -0
  94. package/dist/src/lib/rest/types.js +2 -0
  95. package/dist/src/lib/rpc/index.d.ts +2 -2
  96. package/dist/src/lib/rpc/index.d.ts.map +1 -1
  97. package/dist/src/lib/rpc/index.js +3 -19
  98. package/dist/src/lib/rpc/nodes.d.ts +13 -13
  99. package/dist/src/lib/rpc/nodes.d.ts.map +1 -1
  100. package/dist/src/lib/rpc/nodes.js +69 -98
  101. package/dist/src/lib/rpc/provider.d.ts +4 -4
  102. package/dist/src/lib/rpc/provider.d.ts.map +1 -1
  103. package/dist/src/lib/rpc/provider.js +106 -122
  104. package/dist/src/lib/rpc/types.d.ts +2 -2
  105. package/dist/src/lib/rpc/types.d.ts.map +1 -1
  106. package/dist/src/lib/rpc/types.js +13 -16
  107. package/dist/src/lib/types.d.ts +5 -4
  108. package/dist/src/lib/types.d.ts.map +1 -1
  109. package/dist/src/lib/types.js +3 -9
  110. package/dist/src/lib/utils.d.ts +5 -5
  111. package/dist/src/lib/utils.d.ts.map +1 -1
  112. package/dist/src/lib/utils.js +40 -99
  113. package/dist/witnet/assets/index.cjs +6 -0
  114. package/dist/witnet/assets/index.d.cts +29 -0
  115. package/dist/witnet/assets/index.d.cts.map +1 -0
  116. package/dist/witnet/assets/modals/index.cjs +9 -0
  117. package/dist/witnet/assets/modals/index.d.cts +16 -0
  118. package/dist/witnet/assets/modals/index.d.cts.map +1 -0
  119. package/dist/witnet/assets/modals/web3/eth.cjs +23 -0
  120. package/dist/witnet/assets/modals/web3/eth.d.cts +4 -0
  121. package/dist/witnet/assets/modals/web3/eth.d.cts.map +1 -0
  122. package/dist/witnet/assets/modals/web3/ipfs.cjs +18 -0
  123. package/dist/witnet/assets/modals/web3/ipfs.d.cts +3 -0
  124. package/dist/witnet/assets/modals/web3/ipfs.d.cts.map +1 -0
  125. package/dist/witnet/assets/modals/web3/wit.cjs +24 -0
  126. package/dist/witnet/assets/modals/web3/wit.d.cts +3 -0
  127. package/dist/witnet/assets/modals/web3/wit.d.cts.map +1 -0
  128. package/dist/witnet/assets/requests.cjs +43 -0
  129. package/dist/witnet/assets/requests.d.cts +10 -0
  130. package/dist/witnet/assets/requests.d.cts.map +1 -0
  131. package/package.json +31 -24
  132. package/src/bin/bots/watcher.cjs +354 -0
  133. package/src/bin/cli/history.cjs +31 -0
  134. package/src/bin/cli/inspect.js +545 -471
  135. package/src/bin/cli/network.js +658 -557
  136. package/src/bin/cli/nodes.js +392 -332
  137. package/src/bin/cli/radon.js +1071 -844
  138. package/src/bin/cli/wallet.js +1317 -1074
  139. package/src/bin/helpers.js +969 -868
  140. package/src/bin/index.js +329 -0
  141. package/witnet/assets/_index.cjs +5 -0
  142. package/witnet/assets/_requests.cjs +25 -0
  143. package/witnet/assets/_sources.cjs +36 -0
  144. package/witnet/assets/_templates.cjs +36 -0
  145. package/witnet/assets/index.cjs +4 -0
  146. package/witnet/assets/modals/index.cjs +7 -0
  147. package/witnet/assets/modals/web3/eth.cjs +27 -0
  148. package/witnet/assets/modals/web3/ipfs.cjs +22 -0
  149. package/witnet/assets/modals/web3/wit.cjs +28 -0
  150. package/witnet/assets/requests.cjs +49 -0
  151. package/witnet/witnet copy.proto +457 -0
  152. package/witnet/witnet.proto +456 -0
  153. package/witnet/witnet_toolkit-1.6.7-x86_64-pc-windows-msvc.exe +0 -0
  154. package/witnet/witnet_toolkit-1.7.1-x86_64-pc-windows-msvc.exe +0 -0
  155. package/witnet/witnet_toolkit-2.0.0-rc.7-x86_64-pc-windows-msvc.exe +0 -0
  156. package/witnet/witnet_toolkit-2.0.2-x86_64-pc-windows-msvc.exe +0 -0
  157. package/witnet/witnet_toolkit-2.0.21-x86_64-pc-windows-msvc.exe +0 -0
  158. package/witnet/witnet_toolkit-2.0.7-x86_64-pc-windows-msvc.exe +0 -0
  159. package/witnet/witnet_toolkit-2.0.8-x86_64-pc-windows-msvc.exe +0 -0
  160. package/dist/witnet/assets/index.d.ts +0 -29
  161. package/dist/witnet/assets/index.d.ts.map +0 -1
  162. package/dist/witnet/assets/index.js +0 -6
  163. package/dist/witnet/assets/modals/index.d.ts +0 -16
  164. package/dist/witnet/assets/modals/index.d.ts.map +0 -1
  165. package/dist/witnet/assets/modals/index.js +0 -11
  166. package/dist/witnet/assets/modals/web3/eth.d.ts +0 -5
  167. package/dist/witnet/assets/modals/web3/eth.d.ts.map +0 -1
  168. package/dist/witnet/assets/modals/web3/eth.js +0 -26
  169. package/dist/witnet/assets/modals/web3/ipfs.d.ts +0 -4
  170. package/dist/witnet/assets/modals/web3/ipfs.d.ts.map +0 -1
  171. package/dist/witnet/assets/modals/web3/ipfs.js +0 -18
  172. package/dist/witnet/assets/modals/web3/wit.d.ts +0 -4
  173. package/dist/witnet/assets/modals/web3/wit.d.ts.map +0 -1
  174. package/dist/witnet/assets/modals/web3/wit.js +0 -17
  175. package/dist/witnet/assets/requests.d.ts +0 -11
  176. package/dist/witnet/assets/requests.d.ts.map +0 -1
  177. package/dist/witnet/assets/requests.js +0 -43
  178. package/src/bin/cli/history.js +0 -31
  179. package/src/bin/postinstall.js +0 -9
  180. package/src/bin/toolkit.js +0 -290
  181. package/witnet/assets/_index.js +0 -8
  182. package/witnet/assets/_requests.js +0 -25
  183. package/witnet/assets/_sources.js +0 -36
  184. package/witnet/assets/_templates.js +0 -36
  185. package/witnet/assets/index.js +0 -4
  186. package/witnet/assets/modals/index.js +0 -9
  187. package/witnet/assets/modals/web3/eth.js +0 -29
  188. package/witnet/assets/modals/web3/ipfs.js +0 -22
  189. package/witnet/assets/modals/web3/wit.js +0 -21
  190. package/witnet/assets/requests.js +0 -49
  191. /package/witnet/assets/modals/web3/{btc.js → btc.cjs} +0 -0
  192. /package/witnet/assets/modals/web3/{sol.js → sol.cjs} +0 -0
@@ -1,55 +1,16 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.JsonRpcNodeFarm = void 0;
40
- const axios_1 = __importDefault(require("axios"));
41
- const utils = __importStar(require("../utils"));
42
- const types_1 = require("../crypto/types");
43
- const provider_1 = require("./provider");
44
- const types_2 = require("./types");
1
+ import { default as axios } from "axios";
2
+ import { PublicKey, PublicKeyHash, RecoverableSignature, } from "../crypto/types.js";
3
+ import * as utils from "../utils.js";
4
+ import { JsonRpcProvider, JsonRpcProviderError, } from "./provider.js";
5
+ import { Methods, } from "./types.js";
45
6
  function isPrivateURL(url) {
46
- const [, host,] = utils.parseURL(url);
47
- return utils.ipIsPrivateOrLocalhost(host.split(':')[0]);
7
+ const [, host] = utils.parseURL(url);
8
+ return utils.ipIsPrivateOrLocalhost(host.split(":")[0]);
48
9
  }
49
- class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
10
+ export class JsonRpcNodeFarm extends JsonRpcProvider {
50
11
  constructor(url) {
51
12
  super(url || process.env.WITNET_TOOLKIT_FARM_NODES || "http://127.0.0.1:21339");
52
- this.endpoints.forEach(url => {
13
+ this.endpoints.forEach((url) => {
53
14
  if (!isPrivateURL(url)) {
54
15
  throw Error(`Witnet.JsonRpcNodeFarm: only local host or private IPs can be provided: ${url}`);
55
16
  }
@@ -59,14 +20,17 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
59
20
  return this.addresses()
60
21
  .then(async (addresses) => {
61
22
  const promises = Object.entries(addresses).map(async ([url, pkh]) => [
62
- url, [
23
+ url,
24
+ [
63
25
  pkh,
64
- pkh instanceof Error ? undefined : await this.callApiMethod(url, method, { pkh, ...params })
26
+ pkh instanceof Error
27
+ ? undefined
28
+ : await this.callApiMethod(url, method, { pkh, ...params }),
65
29
  ],
66
30
  ]);
67
31
  return Promise.all(promises);
68
32
  })
69
- .then(entries => Object.fromEntries(entries.map(([url, [pkh, value]]) => {
33
+ .then((entries) => Object.fromEntries(entries.map(([url, [pkh, value]]) => {
70
34
  if (value && value instanceof Error) {
71
35
  if (value?.error?.message) {
72
36
  value = new Error(value?.error?.message);
@@ -80,14 +44,17 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
80
44
  return this.addresses()
81
45
  .then(async (addresses) => {
82
46
  const promises = Object.entries(addresses).map(async ([url, pkh]) => [
83
- url, [
47
+ url,
48
+ [
84
49
  pkh,
85
- pkh instanceof Error ? undefined : await this.callApiMethod(url, method, params)
50
+ pkh instanceof Error
51
+ ? undefined
52
+ : await this.callApiMethod(url, method, params),
86
53
  ],
87
54
  ]);
88
55
  return Promise.all(promises);
89
56
  })
90
- .then(entries => Object.fromEntries(entries.map(([url, [pkh, value]]) => {
57
+ .then((entries) => Object.fromEntries(entries.map(([url, [pkh, value]]) => {
91
58
  if (value && value instanceof Error) {
92
59
  if (value?.error?.message) {
93
60
  value = new Error(value?.error?.message);
@@ -98,17 +65,21 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
98
65
  })));
99
66
  }
100
67
  async batchApiMethod(method, params) {
101
- const promises = this.endpoints.map(async (url) => axios_1.default
68
+ const promises = this.endpoints.map(async (url) => axios
102
69
  .post(url, {
103
- jsonrpc: '2.0',
104
- id: +new Date(),
70
+ jsonrpc: "2.0",
71
+ id: Date.now(),
105
72
  method,
106
73
  params,
107
74
  }, {
108
75
  headers: this._headers,
109
- }).then((response) => {
76
+ })
77
+ .then((response) => {
110
78
  if (response?.error || response?.data?.error) {
111
- return [url, new provider_1.JsonRpcProviderError(method, params, response?.error || response?.data?.error)];
79
+ return [
80
+ url,
81
+ new JsonRpcProviderError(method, params, response?.error || response?.data?.error),
82
+ ];
112
83
  }
113
84
  else {
114
85
  return [url, response?.data?.result];
@@ -119,20 +90,21 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
119
90
  delete error.stack;
120
91
  return [url, error];
121
92
  }));
122
- return Promise.all(promises).then(values => Object.fromEntries(values));
93
+ return Promise.all(promises).then((values) => Object.fromEntries(values));
123
94
  }
124
95
  async callApiMethod(url, method, params) {
125
- return (axios_1.default
96
+ return axios
126
97
  .post(url, {
127
- jsonrpc: '2.0',
128
- id: +new Date(),
98
+ jsonrpc: "2.0",
99
+ id: Date.now(),
129
100
  method,
130
101
  params,
131
102
  }, {
132
103
  headers: this._headers,
133
- }).then((response) => {
104
+ })
105
+ .then((response) => {
134
106
  if (response?.error || response?.data?.error) {
135
- const error = new provider_1.JsonRpcProviderError(method, params, response?.error || response?.data?.error);
107
+ const error = new JsonRpcProviderError(method, params, response?.error || response?.data?.error);
136
108
  delete error?.stack;
137
109
  return error;
138
110
  }
@@ -144,21 +116,20 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
144
116
  const error = new Error(exception?.message || exception?.error || exception);
145
117
  delete error?.stack;
146
118
  return error;
147
- }));
119
+ });
148
120
  }
149
121
  /// ---------------------------------------------------------------------------------------------------------------
150
122
  async addresses() {
151
- return this.batchApiMethod(types_2.Methods.GetPkh);
123
+ return this.batchApiMethod(Methods.GetPkh);
152
124
  }
153
125
  async balances() {
154
- return this.batchApiPkhMethod(types_2.Methods.GetBalance2);
126
+ return this.batchApiPkhMethod(Methods.GetBalance2);
155
127
  }
156
128
  async masterKeys() {
157
- return this.batchApiPkhMethodNoPkh(types_2.Methods.MasterKeyExport);
129
+ return this.batchApiPkhMethodNoPkh(Methods.MasterKeyExport);
158
130
  }
159
131
  async publicKeys() {
160
- return this.batchApiPkhMethodNoPkh(types_2.Methods.GetPublicKey)
161
- .then((results) => Object.fromEntries(Object.entries(results).map(([url, [pkh, raw]]) => {
132
+ return this.batchApiPkhMethodNoPkh(Methods.GetPublicKey).then((results) => Object.fromEntries(Object.entries(results).map(([url, [pkh, raw]]) => {
162
133
  if (raw && raw instanceof Error) {
163
134
  if (raw?.error?.message) {
164
135
  raw = new Error(raw?.error?.message);
@@ -167,17 +138,19 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
167
138
  return [url, [pkh, raw]];
168
139
  }
169
140
  else {
170
- return [url, [pkh, raw ? types_1.PublicKey.fromUint8Array(raw) : undefined]];
141
+ return [
142
+ url,
143
+ [pkh, raw ? PublicKey.fromUint8Array(raw) : undefined],
144
+ ];
171
145
  }
172
146
  })));
173
147
  }
174
148
  async peers() {
175
- return this.batchApiMethod(types_2.Methods.Peers)
176
- .then((results) => {
177
- let peers = [];
149
+ return this.batchApiMethod(Methods.Peers).then((results) => {
150
+ const peers = [];
178
151
  Object.values(results).forEach((morePeers) => {
179
152
  if (!(morePeers instanceof Error)) {
180
- morePeers.forEach(peer => {
153
+ morePeers.forEach((peer) => {
181
154
  if (!peers.includes(peer)) {
182
155
  peers.push(peer);
183
156
  }
@@ -188,10 +161,10 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
188
161
  });
189
162
  }
190
163
  async stats() {
191
- return this.batchApiMethod(types_2.Methods.NodeStats);
164
+ return this.batchApiMethod(Methods.NodeStats);
192
165
  }
193
166
  async syncStatus() {
194
- return this.batchApiMethod(types_2.Methods.SyncStatus);
167
+ return this.batchApiMethod(Methods.SyncStatus);
195
168
  }
196
169
  async withdrawers(limit, offset) {
197
170
  return this.addresses()
@@ -200,34 +173,35 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
200
173
  url,
201
174
  validator instanceof Error
202
175
  ? undefined
203
- : await this.callApiMethod(url, types_2.Methods.QueryStakes, {
176
+ : await this.callApiMethod(url, Methods.QueryStakes, {
204
177
  filter: { validator },
205
178
  params: {
206
- limit, offset,
179
+ limit,
180
+ offset,
207
181
  since: 0,
208
- }
182
+ },
209
183
  }),
210
184
  ]);
211
185
  return Promise.all(promises);
212
186
  })
213
- .then(entries => Object.fromEntries(entries.map(([url, stakes]) => {
187
+ .then((entries) => Object.fromEntries(entries.map(([url, stakes]) => {
214
188
  if (stakes && stakes instanceof Error) {
215
189
  if (stakes?.error?.message) {
216
190
  stakes = new Error(stakes?.error?.message);
217
191
  delete stakes.stack;
218
192
  }
219
- return [url,];
193
+ return [url];
220
194
  }
221
195
  else {
222
196
  }
223
197
  return [url, stakes];
224
198
  })))
225
199
  .then((results) => {
226
- const max = (a, b) => a > b ? a : b;
200
+ const max = (a, b) => (a > b ? a : b);
227
201
  const withdrawers = {};
228
- Object.values(results).forEach(moreEntries => {
202
+ Object.values(results).forEach((moreEntries) => {
229
203
  if (moreEntries && !(moreEntries instanceof Error)) {
230
- moreEntries.forEach(entry => {
204
+ moreEntries.forEach((entry) => {
231
205
  if (withdrawers[entry.key.withdrawer]) {
232
206
  withdrawers[entry.key.withdrawer][0] += entry.value.coins;
233
207
  withdrawers[entry.key.withdrawer][1] = max(entry.value.nonce, withdrawers[entry.key.withdrawer][1]);
@@ -243,8 +217,7 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
243
217
  });
244
218
  }
245
219
  });
246
- return Object.fromEntries(Object.entries(withdrawers)
247
- .sort(([, [a, ,]], [, [b, ,]]) => {
220
+ return Object.fromEntries(Object.entries(withdrawers).sort(([, [a, ,]], [, [b, ,]]) => {
248
221
  if (a > b)
249
222
  return 1;
250
223
  else if (a < b)
@@ -256,12 +229,11 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
256
229
  }
257
230
  /// ---------------------------------------------------------------------------------------------------------------
258
231
  async addPeers(peers) {
259
- return this.batchApiMethod(types_2.Methods.AddPeers, peers);
232
+ return this.batchApiMethod(Methods.AddPeers, peers);
260
233
  }
261
234
  async authorizeStakes(withdrawer) {
262
- const msg = types_1.PublicKeyHash.fromBech32(withdrawer).toBytes32();
263
- return this.batchApiPkhMethodNoPkh(types_2.Methods.AuthorizeStake, withdrawer)
264
- .then((records) => Object.fromEntries(Object.entries(records).map(([url, [pkh, authorization]]) => {
235
+ const msg = PublicKeyHash.fromBech32(withdrawer).toBytes32();
236
+ return this.batchApiPkhMethodNoPkh(Methods.AuthorizeStake, withdrawer).then((records) => Object.fromEntries(Object.entries(records).map(([url, [pkh, authorization]]) => {
265
237
  if (authorization && authorization instanceof Error) {
266
238
  if (authorization?.error?.message) {
267
239
  authorization = new Error(authorization?.error?.message);
@@ -270,7 +242,7 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
270
242
  return [url, [pkh, authorization]];
271
243
  }
272
244
  else if (authorization) {
273
- const signature = types_1.RecoverableSignature.fromKeyedSignature(authorization.signature, msg);
245
+ const signature = RecoverableSignature.fromKeyedSignature(authorization.signature, msg);
274
246
  const authcode = signature.pubKey.hash().toHexString() + signature.toHexString();
275
247
  return [url, [pkh, authcode]];
276
248
  }
@@ -280,14 +252,13 @@ class JsonRpcNodeFarm extends provider_1.JsonRpcProvider {
280
252
  })));
281
253
  }
282
254
  async clearPeers() {
283
- return this.batchApiMethod(types_2.Methods.ClearPeers);
255
+ return this.batchApiMethod(Methods.ClearPeers);
284
256
  }
285
257
  async initializePeers() {
286
- return this.batchApiMethod(types_2.Methods.InitializePeers);
258
+ return this.batchApiMethod(Methods.InitializePeers);
287
259
  }
288
260
  async rewind(epoch) {
289
- return this.batchApiMethod(types_2.Methods.Rewind, [epoch,]);
261
+ return this.batchApiMethod(Methods.Rewind, [epoch]);
290
262
  }
291
263
  }
292
- exports.JsonRpcNodeFarm = JsonRpcNodeFarm;
293
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9ub2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBd0M7QUFDeEMsZ0RBQWlDO0FBRWpDLDJDQUt3QjtBQUV4Qix5Q0FBb0Y7QUFFcEYsbUNBUWdCO0FBMEJoQixTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQzdCLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdEMsT0FBTyxLQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzNELENBQUM7QUFFRCxNQUFhLGVBQWdCLFNBQVEsMEJBQWU7SUFDaEQsWUFBWSxHQUFZO1FBQ3BCLEtBQUssQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsSUFBSSx3QkFBd0IsQ0FBQyxDQUFBO1FBQy9FLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxLQUFLLENBQUMsMkVBQTJFLEdBQUcsRUFBRSxDQUFDLENBQUE7WUFDakcsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVTLEtBQUssQ0FBQyxpQkFBaUIsQ0FBSSxNQUFjLEVBQUUsTUFBWTtRQUM3RCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUU7YUFDbEIsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUF5QyxFQUFFLEVBQUU7WUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENB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OUIsQ0FBQztnQkFDRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7WUFDdEMsQ0FBQztpQkFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixNQUFNLFNBQVMsR0FBRyw0QkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUN2RixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtnQkFDaEYsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBQ2pDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUE7WUFDbEMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQVUsZUFBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzNELENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQVUsZUFBTyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQVk7UUFDNUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFVLGVBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7Q0FDSjtBQWhSRCwwQ0FnUkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZhdWx0IGFzIGF4aW9zIH0gZnJvbSBcImF4aW9zXCJcclxuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4uL3V0aWxzXCJcclxuXHJcbmltcG9ydCB7XHJcbiAgICBQdWJsaWNLZXksIFxyXG4gICAgUHVibGljS2V5SGFzaCwgXHJcbiAgICBQdWJsaWNLZXlIYXNoU3RyaW5nLCBcclxuICAgIFJlY292ZXJhYmxlU2lnbmF0dXJlIFxyXG59IGZyb20gXCIuLi9jcnlwdG8vdHlwZXNcIlxyXG5cclxuaW1wb3J0IHsgSUpzb25ScGNQcm92aWRlciwgSnNvblJwY1Byb3ZpZGVyLCBKc29uUnBjUHJvdmlkZXJFcnJvciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgQmFsYW5jZTIsIFxyXG4gICAgTWV0aG9kcywgXHJcbiAgICBOb2RlU3RhdHMsIFxyXG4gICAgUGVlckFkZHIsIFxyXG4gICAgU3Rha2VBdXRob3JpemF0aW9uLCBcclxuICAgIFN0YWtlRW50cnksXHJcbiAgICBTeW5jU3RhdHVzLFxyXG59IGZyb20gXCIuL3R5cGVzXCJcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgRXBvY2gsIFxyXG4gICAgSGV4U3RyaW5nLCBcclxuICAgIE5vbmNlXHJcbn0gZnJvbSBcIi4uL3R5cGVzXCJcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUpzb25ScGNOb2RlRmFybSBleHRlbmRzIElKc29uUnBjUHJvdmlkZXIge1xyXG4gICAgYWRkcmVzc2VzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgUHVibGljS2V5SGFzaFN0cmluZz4+XHJcbiAgICBiYWxhbmNlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMl0+PlxyXG4gICAgbWFzdGVyS2V5cygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBzdHJpbmddPj5cclxuICAgIHB1YmxpY0tleXMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgUHVibGljS2V5XT4+XHJcbiAgICBzeW5jU3RhdHVzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgU3luY1N0YXR1cz4+XHJcblxyXG4gICAgcGVlcnModmFsaWRhdG9yPzogUHVibGljS2V5SGFzaFN0cmluZyk6IFByb21pc2U8QXJyYXk8UGVlckFkZHI+PjtcclxuICAgIHN0YXRzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgTm9kZVN0YXRzPj47XHJcbiAgICB3aXRoZHJhd2VycygpOiBQcm9taXNlPFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBbQmlnSW50LCBOb25jZSwgbnVtYmVyXT4+O1xyXG5cclxuICAgIGFkZFBlZXJzKHBlZXJzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj47XHJcbiAgICBhdXRob3JpemVTdGFrZXMod2l0aGRyYXdlcjogUHVibGljS2V5SGFzaFN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIEhleFN0cmluZ10+PjtcclxuICAgIGNsZWFyUGVlcnMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj47XHJcbiAgICBpbml0aWFsaXplUGVlcnMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj47XHJcbiAgICByZXdpbmQoZXBvY2g6IEVwb2NoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzUHJpdmF0ZVVSTCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgWywgaG9zdCwgXSA9IHV0aWxzLnBhcnNlVVJMKHVybClcclxuICAgIHJldHVybiB1dGlscy5pcElzUHJpdmF0ZU9yTG9jYWxob3N0KGhvc3Quc3BsaXQoJzonKVswXSlcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25ScGNOb2RlRmFybSBleHRlbmRzIEpzb25ScGNQcm92aWRlciBpbXBsZW1lbnRzIElKc29uUnBjTm9kZUZhcm0ge1xyXG4gICAgY29uc3RydWN0b3IodXJsPzogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIodXJsIHx8IHByb2Nlc3MuZW52LldJVE5FVF9UT09MS0lUX0ZBUk1fTk9ERVMgfHwgXCJodHRwOi8vMTI3LjAuMC4xOjIxMzM5XCIpXHJcbiAgICAgICAgdGhpcy5lbmRwb2ludHMuZm9yRWFjaCh1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWlzUHJpdmF0ZVVSTCh1cmwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgV2l0bmV0Lkpzb25ScGNOb2RlRmFybTogb25seSBsb2NhbCBob3N0IG9yIHByaXZhdGUgSVBzIGNhbiBiZSBwcm92aWRlZDogJHt1cmx9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJhdGNoQXBpUGtoTWV0aG9kPFQ+KG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBUXT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRyZXNzZXMoKVxyXG4gICAgICAgICAgICAudGhlbihhc3luYyAoYWRkcmVzc2VzOiBSZWNvcmQ8c3RyaW5nLCBFcnJvciB8IHN0cmluZz4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LmVudHJpZXMoYWRkcmVzc2VzKS5tYXAoYXN5bmMgKFt1cmwsIHBraF0pID0+IFtcclxuICAgICAgICAgICAgICAgICAgICB1cmwsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGtoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwa2ggaW5zdGFuY2VvZiBFcnJvciA/IHVuZGVmaW5lZCA6IGF3YWl0IHRoaXMuY2FsbEFwaU1ldGhvZDxUPih1cmwsIG1ldGhvZCwgeyBwa2gsIC4uLnBhcmFtcyB9KVxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcylcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oZW50cmllcyA9PiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5tYXAoKFt1cmwsIFtwa2gsIHZhbHVlXV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZSBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IEVycm9yKCh2YWx1ZSBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUuc3RhY2tcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybCwgW3BraCwgdmFsdWUgfHwgXCJcIl1dXHJcbiAgICAgICAgICAgIH0pKSlcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgYmF0Y2hBcGlQa2hNZXRob2ROb1BraDxUPihtZXRob2Q6IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTxhbnk+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgVF0+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkcmVzc2VzKClcclxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKGFkZHJlc3NlczogUmVjb3JkPHN0cmluZywgRXJyb3IgfCBzdHJpbmc+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5lbnRyaWVzKGFkZHJlc3NlcykubWFwKGFzeW5jIChbdXJsLCBwa2hdKSA9PiBbXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBraCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGtoIGluc3RhbmNlb2YgRXJyb3IgPyB1bmRlZmluZWQgOiBhd2FpdCB0aGlzLmNhbGxBcGlNZXRob2Q8VD4odXJsLCBtZXRob2QsIHBhcmFtcylcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKGVudHJpZXMgPT4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMubWFwKChbdXJsLCBbcGtoLCB2YWx1ZV1dKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUgYXMgSnNvblJwY1Byb3ZpZGVyRXJyb3IpPy5lcnJvcj8ubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBFcnJvcigodmFsdWUgYXMgSnNvblJwY1Byb3ZpZGVyRXJyb3IpPy5lcnJvcj8ubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLnN0YWNrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIFtwa2gsIHZhbHVlIHx8IFwiXCJdXSAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KSkpXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJhdGNoQXBpTWV0aG9kPFQ+KG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBBcnJheTxhbnk+IHwgYW55ICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgVD4+IHtcclxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMuZW5kcG9pbnRzLm1hcChhc3luYyAodXJsKSA9PiBcclxuICAgICAgICAgICAgYXhpb3NcclxuICAgICAgICAgICAgICAgIC5wb3N0KFxyXG4gICAgICAgICAgICAgICAgICAgIHVybCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29ucnBjOiAnMi4wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICsgbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLl9oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICkudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uZXJyb3IgfHwgcmVzcG9uc2U/LmRhdGE/LmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCBuZXcgSnNvblJwY1Byb3ZpZGVyRXJyb3IobWV0aG9kLCBwYXJhbXMsIHJlc3BvbnNlPy5lcnJvciB8fCByZXNwb25zZT8uZGF0YT8uZXJyb3IpXVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCByZXNwb25zZT8uZGF0YT8ucmVzdWx0IGFzIFRdXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXhjZXB0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihleGNlcHRpb24/Lm1lc3NhZ2UgfHwgZXhjZXB0aW9uPy5lcnJvciB8fCBleGNlcHRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yLnN0YWNrXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIGVycm9yXVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKHZhbHVlcyA9PiBPYmplY3QuZnJvbUVudHJpZXModmFsdWVzKSlcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgY2FsbEFwaU1ldGhvZDxUPih1cmw6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IEFycmF5PGFueT4gfCBhbnkgKTogUHJvbWlzZTxFcnJvciB8IGFueT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGF4aW9zXHJcbiAgICAgICAgICAgICAgICAucG9zdChcclxuICAgICAgICAgICAgICAgICAgICB1cmwsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAganNvbnJwYzogJzIuMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiArIG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5faGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBKc29uUnBjUHJvdmlkZXJFcnJvcihtZXRob2QsIHBhcmFtcywgcmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yPy5zdGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U/LmRhdGE/LnJlc3VsdCBhcyBUXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXhjZXB0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihleGNlcHRpb24/Lm1lc3NhZ2UgfHwgZXhjZXB0aW9uPy5lcnJvciB8fCBleGNlcHRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yPy5zdGFja1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIFxyXG4gICAgcHVibGljIGFzeW5jIGFkZHJlc3NlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFB1YmxpY0tleUhhc2hTdHJpbmc+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8UHVibGljS2V5SGFzaFN0cmluZz4oTWV0aG9kcy5HZXRQa2gpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGJhbGFuY2VzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIEJhbGFuY2UyXT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXRjaEFwaVBraE1ldGhvZDxCYWxhbmNlMj4oTWV0aG9kcy5HZXRCYWxhbmNlMilcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgbWFzdGVyS2V5cygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBzdHJpbmddPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpUGtoTWV0aG9kTm9Qa2g8c3RyaW5nPihNZXRob2RzLk1hc3RlcktleUV4cG9ydClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgcHVibGljS2V5cygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBQdWJsaWNLZXldPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpUGtoTWV0aG9kTm9Qa2g8VWludDhBcnJheT4oTWV0aG9kcy5HZXRQdWJsaWNLZXkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgRXJyb3IgfCBVaW50OEFycmF5XT4pID0+IE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMpLm1hcCgoW3VybCwgW3BraCwgcmF3XV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmF3ICYmIHJhdyBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmF3IGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdyA9IG5ldyBFcnJvcigocmF3IGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmF3LnN0YWNrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIFtwa2gsIHJhd11dXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIFtwa2gsIHJhdyA/IFB1YmxpY0tleS5mcm9tVWludDhBcnJheShyYXcpIDogdW5kZWZpbmVkXV1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBwZWVycygpOiBQcm9taXNlPEFycmF5PFBlZXJBZGRyPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPEFycmF5PFBlZXJBZGRyPj4oTWV0aG9kcy5QZWVycylcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIFBlZXJBZGRyW10+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGVlcnM6IFBlZXJBZGRyW10gPSBbXVxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhyZXN1bHRzKS5mb3JFYWNoKChtb3JlUGVlcnM6IEVycm9yIHwgUGVlckFkZHJbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKG1vcmVQZWVycyBpbnN0YW5jZW9mIEVycm9yKSkgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZVBlZXJzLmZvckVhY2gocGVlciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBlZXJzLmluY2x1ZGVzKHBlZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcnMucHVzaChwZWVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVlcnNcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc3RhdHMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBOb2RlU3RhdHM+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8Tm9kZVN0YXRzPihNZXRob2RzLk5vZGVTdGF0cylcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc3luY1N0YXR1cygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPFN5bmNTdGF0dXM+KE1ldGhvZHMuU3luY1N0YXR1cylcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgd2l0aGRyYXdlcnMobGltaXQ/OiBudW1iZXIsIG9mZnNldD86IG51bWJlcik6IFByb21pc2U8UmVjb3JkPFB1YmxpY0tleUhhc2hTdHJpbmcsIFtiaWdpbnQsIE5vbmNlLCBudW1iZXJdPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZHJlc3NlcygpXHJcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIChhZGRyZXNzZXM6IFJlY29yZDxzdHJpbmcsIEVycm9yIHwgc3RyaW5nPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3QuZW50cmllcyhhZGRyZXNzZXMpLm1hcChhc3luYyAoW3VybCwgdmFsaWRhdG9yXSkgPT4gW1xyXG4gICAgICAgICAgICAgICAgICAgIHVybCwgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yIGluc3RhbmNlb2YgRXJyb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGF3YWl0IHRoaXMuY2FsbEFwaU1ldGhvZDxBcnJheTxTdGFrZUVudHJ5Pj4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kcy5RdWVyeVN0YWtlcywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogeyB2YWxpZGF0b3IgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQsIG9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luY2U6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihlbnRyaWVzID0+IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLm1hcCgoW3VybCwgc3Rha2VzXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YWtlcyAmJiBzdGFrZXMgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoc3Rha2VzIGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VzID0gbmV3IEVycm9yKChzdGFrZXMgYXMgSnNvblJwY1Byb3ZpZGVyRXJyb3IpPy5lcnJvcj8ubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHN0YWtlcy5zdGFja1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3VybCwgXVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybCwgc3Rha2VzXVxyXG4gICAgICAgICAgICB9KSkpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBFcnJvciB8IEFycmF5PFN0YWtlRW50cnk+PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhID4gYiA/IGEgOiBiO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2l0aGRyYXdlcnM6IFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBbYmlnaW50LCBOb25jZSwgbnVtYmVyXT4gPSB7fVxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhyZXN1bHRzKS5mb3JFYWNoKG1vcmVFbnRyaWVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9yZUVudHJpZXMgJiYgIShtb3JlRW50cmllcyBpbnN0YW5jZW9mIEVycm9yKSkgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZUVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2l0aGRyYXdlcnNbZW50cnkua2V5LndpdGhkcmF3ZXJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGRyYXdlcnNbZW50cnkua2V5LndpdGhkcmF3ZXJdWzBdICs9IGVudHJ5LnZhbHVlLmNvaW5zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhkcmF3ZXJzW2VudHJ5LmtleS53aXRoZHJhd2VyXVsxXSA9IG1heChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkudmFsdWUubm9uY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhkcmF3ZXJzW2VudHJ5LmtleS53aXRoZHJhd2VyXVsxXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGRyYXdlcnNbZW50cnkua2V5LndpdGhkcmF3ZXJdWzJdICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhkcmF3ZXJzW2VudHJ5LmtleS53aXRoZHJhd2VyXSA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkudmFsdWUuY29pbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlLm5vbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMod2l0aGRyYXdlcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKFssIFthLCwgXV0sIFssIFtiLCxdXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhIDwgYikgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBhZGRQZWVycyhwZWVyczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgQm9vbGVhbj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iYXRjaEFwaU1ldGhvZDxCb29sZWFuPihNZXRob2RzLkFkZFBlZXJzLCBwZWVycylcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgYXV0aG9yaXplU3Rha2VzKHdpdGhkcmF3ZXI6IFB1YmxpY0tleUhhc2hTdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBIZXhTdHJpbmddPj4ge1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih3aXRoZHJhd2VyKS50b0J5dGVzMzIoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpUGtoTWV0aG9kTm9Qa2g8U3Rha2VBdXRob3JpemF0aW9uPihNZXRob2RzLkF1dGhvcml6ZVN0YWtlLCB3aXRoZHJhd2VyKVxyXG4gICAgICAgICAgICAudGhlbigocmVjb3JkczogUmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIEVycm9yIHwgU3Rha2VBdXRob3JpemF0aW9uXT4pID0+IE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlY29yZHMpLm1hcCgoW3VybCwgW3BraCwgYXV0aG9yaXphdGlvbl1dKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml6YXRpb24gJiYgYXV0aG9yaXphdGlvbiBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYXV0aG9yaXphdGlvbiBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uID0gbmV3IEVycm9yKChhdXRob3JpemF0aW9uIGFzIEpzb25ScGNQcm92aWRlckVycm9yKT8uZXJyb3I/Lm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXV0aG9yaXphdGlvbi5zdGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCBbcGtoLCBhdXRob3JpemF0aW9uXV1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF1dGhvcml6YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gUmVjb3ZlcmFibGVTaWduYXR1cmUuZnJvbUtleWVkU2lnbmF0dXJlKGF1dGhvcml6YXRpb24uc2lnbmF0dXJlLCBtc2cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhjb2RlID0gc2lnbmF0dXJlLnB1YktleS5oYXNoKCkudG9IZXhTdHJpbmcoKSArIHNpZ25hdHVyZS50b0hleFN0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdXJsLCBbcGtoLCBhdXRoY29kZV1dXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt1cmwsIFtwa2gsIHVuZGVmaW5lZF1dXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgY2xlYXJQZWVycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIEJvb2xlYW4+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8Qm9vbGVhbj4oTWV0aG9kcy5DbGVhclBlZXJzKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBpbml0aWFsaXplUGVlcnMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPEJvb2xlYW4+KE1ldGhvZHMuSW5pdGlhbGl6ZVBlZXJzKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyByZXdpbmQoZXBvY2g6IEVwb2NoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBCb29sZWFuPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPEJvb2xlYW4+KE1ldGhvZHMuUmV3aW5kLCBbZXBvY2gsIF0pXHJcbiAgICB9XHJcbn1cclxuIl19
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9ub2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN6QyxPQUFPLEVBQ04sU0FBUyxFQUNULGFBQWEsRUFFYixvQkFBb0IsR0FDcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEtBQUssS0FBSyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBRU4sZUFBZSxFQUNmLG9CQUFvQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRU4sT0FBTyxHQU1QLE1BQU0sWUFBWSxDQUFDO0FBc0JwQixTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQ2hDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsT0FBTyxLQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxNQUFNLE9BQU8sZUFDWixTQUFRLGVBQWU7SUFHdkIsWUFBWSxHQUFZO1FBQ3ZCLEtBQUssQ0FDSixHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsSUFBSSx3QkFBd0IsQ0FDeEUsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLEtBQUssQ0FDViwyRUFBMkUsR0FBRyxFQUFFLENBQ2hGLENBQUM7WUFDSCxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRVMsS0FBSyxDQUFDLGlCQUFpQixDQUNo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S0FBWTtRQUMvQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQVUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmYXVsdCBhcyBheGlvcyB9IGZyb20gXCJheGlvc1wiO1xyXG5pbXBvcnQge1xyXG5cdFB1YmxpY0tleSxcclxuXHRQdWJsaWNLZXlIYXNoLFxyXG5cdHR5cGUgUHVibGljS2V5SGFzaFN0cmluZyxcclxuXHRSZWNvdmVyYWJsZVNpZ25hdHVyZSxcclxufSBmcm9tIFwiLi4vY3J5cHRvL3R5cGVzLmpzXCI7XHJcbmltcG9ydCB0eXBlIHsgRXBvY2gsIEhleFN0cmluZywgTm9uY2UgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcclxuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XHJcbmltcG9ydCB7XHJcblx0dHlwZSBJSnNvblJwY1Byb3ZpZGVyLFxyXG5cdEpzb25ScGNQcm92aWRlcixcclxuXHRKc29uUnBjUHJvdmlkZXJFcnJvcixcclxufSBmcm9tIFwiLi9wcm92aWRlci5qc1wiO1xyXG5pbXBvcnQge1xyXG5cdHR5cGUgQmFsYW5jZTIsXHJcblx0TWV0aG9kcyxcclxuXHR0eXBlIE5vZGVTdGF0cyxcclxuXHR0eXBlIFBlZXJBZGRyLFxyXG5cdHR5cGUgU3Rha2VBdXRob3JpemF0aW9uLFxyXG5cdHR5cGUgU3Rha2VFbnRyeSxcclxuXHR0eXBlIFN5bmNTdGF0dXMsXHJcbn0gZnJvbSBcIi4vdHlwZXMuanNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUpzb25ScGNOb2RlRmFybSBleHRlbmRzIElKc29uUnBjUHJvdmlkZXIge1xyXG5cdGFkZHJlc3NlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFB1YmxpY0tleUhhc2hTdHJpbmc+PjtcclxuXHRiYWxhbmNlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMl0+PjtcclxuXHRtYXN0ZXJLZXlzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIHN0cmluZ10+PjtcclxuXHRwdWJsaWNLZXlzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIFB1YmxpY0tleV0+PjtcclxuXHRzeW5jU3RhdHVzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgU3luY1N0YXR1cz4+O1xyXG5cclxuXHRwZWVycyh2YWxpZGF0b3I/OiBQdWJsaWNLZXlIYXNoU3RyaW5nKTogUHJvbWlzZTxBcnJheTxQZWVyQWRkcj4+O1xyXG5cdHN0YXRzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgTm9kZVN0YXRzPj47XHJcblx0d2l0aGRyYXdlcnMoKTogUHJvbWlzZTxSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgW2JpZ2ludCwgTm9uY2UsIG51bWJlcl0+PjtcclxuXHJcblx0YWRkUGVlcnMocGVlcnM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PjtcclxuXHRhdXRob3JpemVTdGFrZXMoXHJcblx0XHR3aXRoZHJhd2VyOiBQdWJsaWNLZXlIYXNoU3RyaW5nLFxyXG5cdCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIEhleFN0cmluZ10+PjtcclxuXHRjbGVhclBlZXJzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+O1xyXG5cdGluaXRpYWxpemVQZWVycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PjtcclxuXHRyZXdpbmQoZXBvY2g6IEVwb2NoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzUHJpdmF0ZVVSTCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IFssIGhvc3RdID0gdXRpbHMucGFyc2VVUkwodXJsKTtcclxuXHRyZXR1cm4gdXRpbHMuaXBJc1ByaXZhdGVPckxvY2FsaG9zdChob3N0LnNwbGl0KFwiOlwiKVswXSk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uUnBjTm9kZUZhcm1cclxuXHRleHRlbmRzIEpzb25ScGNQcm92aWRlclxyXG5cdGltcGxlbWVudHMgSUpzb25ScGNOb2RlRmFybVxyXG57XHJcblx0Y29uc3RydWN0b3IodXJsPzogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihcclxuXHRcdFx0dXJsIHx8IHByb2Nlc3MuZW52LldJVE5FVF9UT09MS0lUX0ZBUk1fTk9ERVMgfHwgXCJodHRwOi8vMTI3LjAuMC4xOjIxMzM5XCIsXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5lbmRwb2ludHMuZm9yRWFjaCgodXJsKSA9PiB7XHJcblx0XHRcdGlmICghaXNQcml2YXRlVVJMKHVybCkpIHtcclxuXHRcdFx0XHR0aHJvdyBFcnJvcihcclxuXHRcdFx0XHRcdGBXaXRuZXQuSnNvblJwY05vZGVGYXJtOiBvbmx5IGxvY2FsIGhvc3Qgb3IgcHJpdmF0ZSBJUHMgY2FuIGJlIHByb3ZpZGVkOiAke3VybH1gLFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIGFzeW5jIGJhdGNoQXBpUGtoTWV0aG9kPFQ+KFxyXG5cdFx0bWV0aG9kOiBzdHJpbmcsXHJcblx0XHRwYXJhbXM/OiBhbnksXHJcblx0KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgVF0+PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRyZXNzZXMoKVxyXG5cdFx0XHQudGhlbihhc3luYyAoYWRkcmVzc2VzOiBSZWNvcmQ8c3RyaW5nLCBFcnJvciB8IHN0cmluZz4pID0+IHtcclxuXHRcdFx0XHRjb25zdCBwcm9taXNlcyA9IE9iamVjdC5lbnRyaWVzKGFkZHJlc3NlcykubWFwKGFzeW5jIChbdXJsLCBwa2hdKSA9PiBbXHJcblx0XHRcdFx0XHR1cmwsXHJcblx0XHRcdFx0XHRbXHJcblx0XHRcdFx0XHRcdHBraCxcclxuXHRcdFx0XHRcdFx0cGtoIGluc3RhbmNlb2YgRXJyb3JcclxuXHRcdFx0XHRcdFx0XHQ/IHVuZGVmaW5lZFxyXG5cdFx0XHRcdFx0XHRcdDogYXdhaXQgdGhpcy5jYWxsQXBpTWV0aG9kPFQ+KHVybCwgbWV0aG9kLCB7IHBraCwgLi4ucGFyYW1zIH0pLFxyXG5cdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRdKTtcclxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG5cdFx0XHR9KVxyXG5cdFx0XHQudGhlbigoZW50cmllcykgPT5cclxuXHRcdFx0XHRPYmplY3QuZnJvbUVudHJpZXMoXHJcblx0XHRcdFx0XHRlbnRyaWVzLm1hcCgoW3VybCwgW3BraCwgdmFsdWVdXSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGlmICgodmFsdWUgYXMgSnNvblJwY1Byb3ZpZGVyRXJyb3IpPy5lcnJvcj8ubWVzc2FnZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBuZXcgRXJyb3IoXHJcblx0XHRcdFx0XHRcdFx0XHRcdCh2YWx1ZSBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlLFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSB2YWx1ZS5zdGFjaztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIFt1cmwsIFtwa2gsIHZhbHVlIHx8IFwiXCJdXTtcclxuXHRcdFx0XHRcdH0pLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgYXN5bmMgYmF0Y2hBcGlQa2hNZXRob2ROb1BraDxUPihcclxuXHRcdG1ldGhvZDogc3RyaW5nLFxyXG5cdFx0Li4ucGFyYW1zOiBBcnJheTxhbnk+XHJcblx0KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBbUHVibGljS2V5SGFzaFN0cmluZywgVF0+PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRyZXNzZXMoKVxyXG5cdFx0XHQudGhlbihhc3luYyAoYWRkcmVzc2VzOiBSZWNvcmQ8c3RyaW5nLCBFcnJvciB8IHN0cmluZz4pID0+IHtcclxuXHRcdFx0XHRjb25zdCBwcm9taXNlcyA9IE9iamVjdC5lbnRyaWVzKGFkZHJlc3NlcykubWFwKGFzeW5jIChbdXJsLCBwa2hdKSA9PiBbXHJcblx0XHRcdFx0XHR1cmwsXHJcblx0XHRcdFx0XHRbXHJcblx0XHRcdFx0XHRcdHBraCxcclxuXHRcdFx0XHRcdFx0cGtoIGluc3RhbmNlb2YgRXJyb3JcclxuXHRcdFx0XHRcdFx0XHQ/IHVuZGVmaW5lZFxyXG5cdFx0XHRcdFx0XHRcdDogYXdhaXQgdGhpcy5jYWxsQXBpTWV0aG9kPFQ+KHVybCwgbWV0aG9kLCBwYXJhbXMpLFxyXG5cdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRdKTtcclxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG5cdFx0XHR9KVxyXG5cdFx0XHQudGhlbigoZW50cmllcykgPT5cclxuXHRcdFx0XHRPYmplY3QuZnJvbUVudHJpZXMoXHJcblx0XHRcdFx0XHRlbnRyaWVzLm1hcCgoW3VybCwgW3BraCwgdmFsdWVdXSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGlmICgodmFsdWUgYXMgSnNvblJwY1Byb3ZpZGVyRXJyb3IpPy5lcnJvcj8ubWVzc2FnZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBuZXcgRXJyb3IoXHJcblx0XHRcdFx0XHRcdFx0XHRcdCh2YWx1ZSBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlLFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSB2YWx1ZS5zdGFjaztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIFt1cmwsIFtwa2gsIHZhbHVlIHx8IFwiXCJdXTtcclxuXHRcdFx0XHRcdH0pLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgYXN5bmMgYmF0Y2hBcGlNZXRob2Q8VD4oXHJcblx0XHRtZXRob2Q6IHN0cmluZyxcclxuXHRcdHBhcmFtcz86IEFycmF5PGFueT4gfCBhbnksXHJcblx0KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBUPj4ge1xyXG5cdFx0Y29uc3QgcHJvbWlzZXMgPSB0aGlzLmVuZHBvaW50cy5tYXAoYXN5bmMgKHVybCkgPT5cclxuXHRcdFx0YXhpb3NcclxuXHRcdFx0XHQucG9zdChcclxuXHRcdFx0XHRcdHVybCxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0anNvbnJwYzogXCIyLjBcIixcclxuXHRcdFx0XHRcdFx0aWQ6IERhdGUubm93KCksXHJcblx0XHRcdFx0XHRcdG1ldGhvZCxcclxuXHRcdFx0XHRcdFx0cGFyYW1zLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0aGVhZGVyczogdGhpcy5faGVhZGVycyxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRpZiAocmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcikge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gW1xyXG5cdFx0XHRcdFx0XHRcdHVybCxcclxuXHRcdFx0XHRcdFx0XHRuZXcgSnNvblJwY1Byb3ZpZGVyRXJyb3IoXHJcblx0XHRcdFx0XHRcdFx0XHRtZXRob2QsXHJcblx0XHRcdFx0XHRcdFx0XHRwYXJhbXMsXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZT8uZXJyb3IgfHwgcmVzcG9uc2U/LmRhdGE/LmVycm9yLFxyXG5cdFx0XHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gW3VybCwgcmVzcG9uc2U/LmRhdGE/LnJlc3VsdCBhcyBUXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5jYXRjaCgoZXhjZXB0aW9uOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxyXG5cdFx0XHRcdFx0XHRleGNlcHRpb24/Lm1lc3NhZ2UgfHwgZXhjZXB0aW9uPy5lcnJvciB8fCBleGNlcHRpb24sXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGVycm9yLnN0YWNrO1xyXG5cdFx0XHRcdFx0cmV0dXJuIFt1cmwsIGVycm9yXTtcclxuXHRcdFx0XHR9KSxcclxuXHRcdCk7XHJcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKHZhbHVlcykgPT4gT2JqZWN0LmZyb21FbnRyaWVzKHZhbHVlcykpO1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIGFzeW5jIGNhbGxBcGlNZXRob2Q8VD4oXHJcblx0XHR1cmw6IHN0cmluZyxcclxuXHRcdG1ldGhvZDogc3RyaW5nLFxyXG5cdFx0cGFyYW1zPzogQXJyYXk8YW55PiB8IGFueSxcclxuXHQpOiBQcm9taXNlPEVycm9yIHwgYW55PiB7XHJcblx0XHRyZXR1cm4gYXhpb3NcclxuXHRcdFx0LnBvc3QoXHJcblx0XHRcdFx0dXJsLFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGpzb25ycGM6IFwiMi4wXCIsXHJcblx0XHRcdFx0XHRpZDogRGF0ZS5ub3coKSxcclxuXHRcdFx0XHRcdG1ldGhvZCxcclxuXHRcdFx0XHRcdHBhcmFtcyxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGhlYWRlcnM6IHRoaXMuX2hlYWRlcnMsXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0KVxyXG5cdFx0XHQudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG5cdFx0XHRcdGlmIChyZXNwb25zZT8uZXJyb3IgfHwgcmVzcG9uc2U/LmRhdGE/LmVycm9yKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvciA9IG5ldyBKc29uUnBjUHJvdmlkZXJFcnJvcihcclxuXHRcdFx0XHRcdFx0bWV0aG9kLFxyXG5cdFx0XHRcdFx0XHRwYXJhbXMsXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlPy5lcnJvciB8fCByZXNwb25zZT8uZGF0YT8uZXJyb3IsXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGVycm9yPy5zdGFjaztcclxuXHRcdFx0XHRcdHJldHVybiBlcnJvcjtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlPy5kYXRhPy5yZXN1bHQgYXMgVDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHRcdC5jYXRjaCgoZXhjZXB0aW9uOiBhbnkpID0+IHtcclxuXHRcdFx0XHRjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcclxuXHRcdFx0XHRcdGV4Y2VwdGlvbj8ubWVzc2FnZSB8fCBleGNlcHRpb24/LmVycm9yIHx8IGV4Y2VwdGlvbixcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGRlbGV0ZSBlcnJvcj8uc3RhY2s7XHJcblx0XHRcdFx0cmV0dXJuIGVycm9yO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0cHVibGljIGFzeW5jIGFkZHJlc3NlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFB1YmxpY0tleUhhc2hTdHJpbmc+PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5iYXRjaEFwaU1ldGhvZDxQdWJsaWNLZXlIYXNoU3RyaW5nPihNZXRob2RzLkdldFBraCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgYmFsYW5jZXMoKTogUHJvbWlzZTxcclxuXHRcdFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMl0+XHJcblx0PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5iYXRjaEFwaVBraE1ldGhvZDxCYWxhbmNlMj4oTWV0aG9kcy5HZXRCYWxhbmNlMik7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgbWFzdGVyS2V5cygpOiBQcm9taXNlPFxyXG5cdFx0UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIHN0cmluZ10+XHJcblx0PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5iYXRjaEFwaVBraE1ldGhvZE5vUGtoPHN0cmluZz4oTWV0aG9kcy5NYXN0ZXJLZXlFeHBvcnQpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHB1YmxpY0tleXMoKTogUHJvbWlzZTxcclxuXHRcdFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBQdWJsaWNLZXldPlxyXG5cdD4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmF0Y2hBcGlQa2hNZXRob2ROb1BraDxVaW50OEFycmF5PihNZXRob2RzLkdldFB1YmxpY0tleSkudGhlbihcclxuXHRcdFx0KHJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIFtQdWJsaWNLZXlIYXNoU3RyaW5nLCBFcnJvciB8IFVpbnQ4QXJyYXldPikgPT5cclxuXHRcdFx0XHRPYmplY3QuZnJvbUVudHJpZXMoXHJcblx0XHRcdFx0XHRPYmplY3QuZW50cmllcyhyZXN1bHRzKS5tYXAoKFt1cmwsIFtwa2gsIHJhd11dKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChyYXcgJiYgcmF3IGluc3RhbmNlb2YgRXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoKHJhdyBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRyYXcgPSBuZXcgRXJyb3IoKHJhdyBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKTtcclxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSByYXcuc3RhY2s7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBbdXJsLCBbcGtoLCByYXddXTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gW1xyXG5cdFx0XHRcdFx0XHRcdFx0dXJsLFxyXG5cdFx0XHRcdFx0XHRcdFx0W3BraCwgcmF3ID8gUHVibGljS2V5LmZyb21VaW50OEFycmF5KHJhdykgOiB1bmRlZmluZWRdLFxyXG5cdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pLFxyXG5cdFx0XHRcdCksXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHBlZXJzKCk6IFByb21pc2U8QXJyYXk8UGVlckFkZHI+PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5iYXRjaEFwaU1ldGhvZDxBcnJheTxQZWVyQWRkcj4+KE1ldGhvZHMuUGVlcnMpLnRoZW4oXHJcblx0XHRcdChyZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBQZWVyQWRkcltdPikgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHBlZXJzOiBQZWVyQWRkcltdID0gW107XHJcblx0XHRcdFx0T2JqZWN0LnZhbHVlcyhyZXN1bHRzKS5mb3JFYWNoKChtb3JlUGVlcnM6IEVycm9yIHwgUGVlckFkZHJbXSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCEobW9yZVBlZXJzIGluc3RhbmNlb2YgRXJyb3IpKSB7XHJcblx0XHRcdFx0XHRcdG1vcmVQZWVycy5mb3JFYWNoKChwZWVyKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCFwZWVycy5pbmNsdWRlcyhwZWVyKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cGVlcnMucHVzaChwZWVyKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHJldHVybiBwZWVycztcclxuXHRcdFx0fSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgc3RhdHMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBOb2RlU3RhdHM+PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5iYXRjaEFwaU1ldGhvZDxOb2RlU3RhdHM+KE1ldGhvZHMuTm9kZVN0YXRzKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBzeW5jU3RhdHVzKCk6IFByb21pc2U8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5iYXRjaEFwaU1ldGhvZDxTeW5jU3RhdHVzPihNZXRob2RzLlN5bmNTdGF0dXMpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHdpdGhkcmF3ZXJzKFxyXG5cdFx0bGltaXQ/OiBudW1iZXIsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXIsXHJcblx0KTogUHJvbWlzZTxSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgW2JpZ2ludCwgTm9uY2UsIG51bWJlcl0+PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRyZXNzZXMoKVxyXG5cdFx0XHQudGhlbihhc3luYyAoYWRkcmVzc2VzOiBSZWNvcmQ8c3RyaW5nLCBFcnJvciB8IHN0cmluZz4pID0+IHtcclxuXHRcdFx0XHRjb25zdCBwcm9taXNlcyA9IE9iamVjdC5lbnRyaWVzKGFkZHJlc3NlcykubWFwKFxyXG5cdFx0XHRcdFx0YXN5bmMgKFt1cmwsIHZhbGlkYXRvcl0pID0+IFtcclxuXHRcdFx0XHRcdFx0dXJsLFxyXG5cdFx0XHRcdFx0XHR2YWxpZGF0b3IgaW5zdGFuY2VvZiBFcnJvclxyXG5cdFx0XHRcdFx0XHRcdD8gdW5kZWZpbmVkXHJcblx0XHRcdFx0XHRcdFx0OiBhd2FpdCB0aGlzLmNhbGxBcGlNZXRob2Q8QXJyYXk8U3Rha2VFbnRyeT4+KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR1cmwsXHJcblx0XHRcdFx0XHRcdFx0XHRcdE1ldGhvZHMuUXVlcnlTdGFrZXMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWx0ZXI6IHsgdmFsaWRhdG9yIH0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsaW1pdCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9mZnNldCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNpbmNlOiAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0XSxcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcblx0XHRcdH0pXHJcblx0XHRcdC50aGVuKChlbnRyaWVzKSA9PlxyXG5cdFx0XHRcdE9iamVjdC5mcm9tRW50cmllcyhcclxuXHRcdFx0XHRcdGVudHJpZXMubWFwKChbdXJsLCBzdGFrZXNdKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChzdGFrZXMgJiYgc3Rha2VzIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoKHN0YWtlcyBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzdGFrZXMgPSBuZXcgRXJyb3IoXHJcblx0XHRcdFx0XHRcdFx0XHRcdChzdGFrZXMgYXMgSnNvblJwY1Byb3ZpZGVyRXJyb3IpPy5lcnJvcj8ubWVzc2FnZSxcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgc3Rha2VzLnN0YWNrO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gW3VybF07XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIFt1cmwsIHN0YWtlc107XHJcblx0XHRcdFx0XHR9KSxcclxuXHRcdFx0XHQpLFxyXG5cdFx0XHQpXHJcblx0XHRcdC50aGVuKChyZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBFcnJvciB8IEFycmF5PFN0YWtlRW50cnk+PikgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IG1heCA9IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgPiBiID8gYSA6IGIpO1xyXG5cdFx0XHRcdGNvbnN0IHdpdGhkcmF3ZXJzOiBSZWNvcmQ8XHJcblx0XHRcdFx0XHRQdWJsaWNLZXlIYXNoU3RyaW5nLFxyXG5cdFx0XHRcdFx0W2JpZ2ludCwgTm9uY2UsIG51bWJlcl1cclxuXHRcdFx0XHQ+ID0ge307XHJcblx0XHRcdFx0T2JqZWN0LnZhbHVlcyhyZXN1bHRzKS5mb3JFYWNoKChtb3JlRW50cmllcykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKG1vcmVFbnRyaWVzICYmICEobW9yZUVudHJpZXMgaW5zdGFuY2VvZiBFcnJvcikpIHtcclxuXHRcdFx0XHRcdFx0bW9yZUVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAod2l0aGRyYXdlcnNbZW50cnkua2V5LndpdGhkcmF3ZXJdKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR3aXRoZHJhd2Vyc1tlbnRyeS5rZXkud2l0aGRyYXdlcl1bMF0gKz0gZW50cnkudmFsdWUuY29pbnM7XHJcblx0XHRcdFx0XHRcdFx0XHR3aXRoZHJhd2Vyc1tlbnRyeS5rZXkud2l0aGRyYXdlcl1bMV0gPSBtYXgoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVudHJ5LnZhbHVlLm5vbmNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR3aXRoZHJhd2Vyc1tlbnRyeS5rZXkud2l0aGRyYXdlcl1bMV0sXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0d2l0aGRyYXdlcnNbZW50cnkua2V5LndpdGhkcmF3ZXJdWzJdICs9IDE7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHdpdGhkcmF3ZXJzW2VudHJ5LmtleS53aXRoZHJhd2VyXSA9IFtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZW50cnkudmFsdWUuY29pbnMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVudHJ5LnZhbHVlLm5vbmNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXHJcblx0XHRcdFx0XHRPYmplY3QuZW50cmllcyh3aXRoZHJhd2Vycykuc29ydCgoWywgW2EsICxdXSwgWywgW2IsICxdXSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoYSA+IGIpIHJldHVybiAxO1xyXG5cdFx0XHRcdFx0XHRlbHNlIGlmIChhIDwgYikgcmV0dXJuIC0xO1xyXG5cdFx0XHRcdFx0XHRlbHNlIHJldHVybiAwO1xyXG5cdFx0XHRcdFx0fSksXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdHB1YmxpYyBhc3luYyBhZGRQZWVycyhcclxuXHRcdHBlZXJzOiBBcnJheTxzdHJpbmc+LFxyXG5cdCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+IHtcclxuXHRcdHJldHVybiB0aGlzLmJhdGNoQXBpTWV0aG9kPGJvb2xlYW4+KE1ldGhvZHMuQWRkUGVlcnMsIHBlZXJzKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBhdXRob3JpemVTdGFrZXMoXHJcblx0XHR3aXRoZHJhd2VyOiBQdWJsaWNLZXlIYXNoU3RyaW5nLFxyXG5cdCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgW1B1YmxpY0tleUhhc2hTdHJpbmcsIEhleFN0cmluZ10+PiB7XHJcblx0XHRjb25zdCBtc2cgPSBQdWJsaWNLZXlIYXNoLmZyb21CZWNoMzIod2l0aGRyYXdlcikudG9CeXRlczMyKCk7XHJcblx0XHRyZXR1cm4gdGhpcy5iYXRjaEFwaVBraE1ldGhvZE5vUGtoPFN0YWtlQXV0aG9yaXphdGlvbj4oXHJcblx0XHRcdE1ldGhvZHMuQXV0aG9yaXplU3Rha2UsXHJcblx0XHRcdHdpdGhkcmF3ZXIsXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChcclxuXHRcdFx0XHRyZWNvcmRzOiBSZWNvcmQ8XHJcblx0XHRcdFx0XHRzdHJpbmcsXHJcblx0XHRcdFx0XHRbUHVibGljS2V5SGFzaFN0cmluZywgRXJyb3IgfCBTdGFrZUF1dGhvcml6YXRpb25dXHJcblx0XHRcdFx0PixcclxuXHRcdFx0KSA9PlxyXG5cdFx0XHRcdE9iamVjdC5mcm9tRW50cmllcyhcclxuXHRcdFx0XHRcdE9iamVjdC5lbnRyaWVzKHJlY29yZHMpLm1hcCgoW3VybCwgW3BraCwgYXV0aG9yaXphdGlvbl1dKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChhdXRob3JpemF0aW9uICYmIGF1dGhvcml6YXRpb24gaW5zdGFuY2VvZiBFcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGlmICgoYXV0aG9yaXphdGlvbiBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhdXRob3JpemF0aW9uID0gbmV3IEVycm9yKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoYXV0aG9yaXphdGlvbiBhcyBKc29uUnBjUHJvdmlkZXJFcnJvcik/LmVycm9yPy5tZXNzYWdlLFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBhdXRob3JpemF0aW9uLnN0YWNrO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gW3VybCwgW3BraCwgYXV0aG9yaXphdGlvbl1dO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGF1dGhvcml6YXRpb24pIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBzaWduYXR1cmUgPSBSZWNvdmVyYWJsZVNpZ25hdHVyZS5mcm9tS2V5ZWRTaWduYXR1cmUoXHJcblx0XHRcdFx0XHRcdFx0XHRhdXRob3JpemF0aW9uLnNpZ25hdHVyZSxcclxuXHRcdFx0XHRcdFx0XHRcdG1zZyxcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGF1dGhjb2RlID1cclxuXHRcdFx0XHRcdFx0XHRcdHNpZ25hdHVyZS5wdWJLZXkuaGFzaCgpLnRvSGV4U3RyaW5nKCkgKyBzaWduYXR1cmUudG9IZXhTdHJpbmcoKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gW3VybCwgW3BraCwgYXV0aGNvZGVdXTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gW3VybCwgW3BraCwgdW5kZWZpbmVkXV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pLFxyXG5cdFx0XHRcdCksXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIGNsZWFyUGVlcnMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8Ym9vbGVhbj4oTWV0aG9kcy5DbGVhclBlZXJzKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBpbml0aWFsaXplUGVlcnMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmF0Y2hBcGlNZXRob2Q8Ym9vbGVhbj4oTWV0aG9kcy5Jbml0aWFsaXplUGVlcnMpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHJld2luZChlcG9jaDogRXBvY2gpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5iYXRjaEFwaU1ldGhvZDxib29sZWFuPihNZXRob2RzLlJld2luZCwgW2Vwb2NoXSk7XHJcblx0fVxyXG59XHJcbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { AxiosHeaders } from "axios";
2
- import { PublicKeyHashString, TransactionReceipt } from "../crypto/types";
3
- import { Epoch, Hash, Network, UtxoMetadata } from "../types";
4
- import { Balance2, Block, ConsensusConstants, GetDataRequestFullReport, GetDataRequestEtherealReport, GetDataRequestMode, Mempool, PeerAddr, Priorities, ProtocolInfo, QueryStakes, QueryStakingPowers, TransactionReport, SignalingInfo, StakeEntry, StakingPower, SuperblockReport, SupplyInfo, SyncStatus } from "./types";
2
+ import { type PublicKeyHashString, type TransactionReceipt } from "../crypto/types.js";
3
+ import type { Epoch, Hash, Network, UtxoMetadata } from "../types.js";
4
+ import { type Balance2, type Block, type ConsensusConstants, type GetDataRequestEtherealReport, type GetDataRequestFullReport, type GetDataRequestMode, type Mempool, type PeerAddr, type Priorities, type ProtocolInfo, type QueryStakes, type QueryStakingPowers, type SignalingInfo, type StakeEntry, type StakingPower, type SuperblockReport, type SupplyInfo, type SyncStatus, type TransactionReport } from "./types.js";
5
5
  export interface IJsonRpcProvider {
6
6
  network?: Network;
7
7
  networkId?: number;
@@ -66,7 +66,7 @@ export declare class JsonRpcProvider implements IJsonRpcProvider {
66
66
  /**
67
67
  * Get the list of block hashes within given range, as known by the provider.
68
68
  * @param {number} since - First epoch for which to return block hashes. If negative, return block hashes from the last n epochs.
69
- * @param {number} limit - Number of block hashes to return. If negative, return the last n block hashes from this epoch range.
69
+ * @param {number} limit - Number of block hashes to return. If negative, return the last n block hashes from this epoch range.
70
70
  */
71
71
  blocks(since?: number, limit?: number): Promise<Array<[number, Hash]>>;
72
72
  constants(): Promise<ConsensusConstants>;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/lib/rpc/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/lib/rpc/provider.ts"],"names":[],"mappings":"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"}