@witnet/sdk 1.0.4 → 1.0.6

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 (213) hide show
  1. package/.env_witnet +6 -6
  2. package/LICENSE +21 -21
  3. package/README.md +103 -103
  4. package/dist/package.json +3 -4
  5. package/dist/src/bin/helpers.js +2 -2
  6. package/dist/src/index.js +1 -1
  7. package/dist/src/lib/crypto/account.d.ts +3 -1
  8. package/dist/src/lib/crypto/account.d.ts.map +1 -1
  9. package/dist/src/lib/crypto/account.js +7 -1
  10. package/dist/src/lib/crypto/coinbase.js +1 -1
  11. package/dist/src/lib/crypto/index.js +1 -1
  12. package/dist/src/lib/crypto/interfaces.d.ts +2 -0
  13. package/dist/src/lib/crypto/interfaces.d.ts.map +1 -1
  14. package/dist/src/lib/crypto/interfaces.js +1 -1
  15. package/dist/src/lib/crypto/payloads/DataRequestPayload.js +1 -1
  16. package/dist/src/lib/crypto/payloads/StakePayload.js +1 -1
  17. package/dist/src/lib/crypto/payloads/UnstakePayload.js +1 -1
  18. package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +1 -1
  19. package/dist/src/lib/crypto/payloads.d.ts.map +1 -1
  20. package/dist/src/lib/crypto/payloads.js +12 -1
  21. package/dist/src/lib/crypto/signer.d.ts +1 -0
  22. package/dist/src/lib/crypto/signer.d.ts.map +1 -1
  23. package/dist/src/lib/crypto/signer.js +18 -1
  24. package/dist/src/lib/crypto/transmitters/DataRequests.js +1 -1
  25. package/dist/src/lib/crypto/transmitters/StakeDeposits.js +1 -1
  26. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +1 -1
  27. package/dist/src/lib/crypto/transmitters/ValueTransfers.js +1 -1
  28. package/dist/src/lib/crypto/transmitters.d.ts +1 -1
  29. package/dist/src/lib/crypto/transmitters.d.ts.map +1 -1
  30. package/dist/src/lib/crypto/transmitters.js +4 -4
  31. package/dist/src/lib/crypto/types.d.ts.map +1 -1
  32. package/dist/src/lib/crypto/types.js +2 -1
  33. package/dist/src/lib/crypto/utils.js +1 -1
  34. package/dist/src/lib/crypto/wallet.d.ts +3 -1
  35. package/dist/src/lib/crypto/wallet.d.ts.map +1 -1
  36. package/dist/src/lib/crypto/wallet.js +10 -1
  37. package/dist/src/lib/index.js +1 -1
  38. package/dist/src/lib/radon/ccdr/eth.js +1 -1
  39. package/dist/src/lib/radon/ccdr/index.js +1 -1
  40. package/dist/src/lib/radon/ccdr/wit.js +1 -1
  41. package/dist/src/lib/radon/filters.js +1 -1
  42. package/dist/src/lib/radon/index.js +1 -1
  43. package/dist/src/lib/radon/reducers.js +1 -1
  44. package/dist/src/lib/radon/types.js +1 -1
  45. package/dist/src/lib/radon/utils.js +1 -1
  46. package/dist/src/lib/rpc/index.js +1 -1
  47. package/dist/src/lib/rpc/nodes.js +1 -1
  48. package/dist/src/lib/rpc/provider.js +1 -1
  49. package/dist/src/lib/rpc/types.d.ts +6 -4
  50. package/dist/src/lib/rpc/types.d.ts.map +1 -1
  51. package/dist/src/lib/rpc/types.js +1 -1
  52. package/dist/src/lib/types.d.ts +0 -1
  53. package/dist/src/lib/types.d.ts.map +1 -1
  54. package/dist/src/lib/types.js +1 -1
  55. package/dist/src/lib/utils.js +1 -1
  56. package/dist/witnet/assets/index.js +1 -1
  57. package/dist/witnet/assets/modals/index.js +1 -1
  58. package/dist/witnet/assets/modals/web3/eth.js +1 -1
  59. package/dist/witnet/assets/modals/web3/ipfs.js +1 -1
  60. package/dist/witnet/assets/modals/web3/wit.js +1 -1
  61. package/dist/witnet/assets/requests.js +1 -1
  62. package/package.json +3 -4
  63. package/src/bin/cli/history.js +31 -31
  64. package/src/bin/cli/inspect.js +405 -405
  65. package/src/bin/cli/network.js +594 -594
  66. package/src/bin/cli/nodes.js +364 -364
  67. package/src/bin/cli/radon.js +817 -815
  68. package/src/bin/cli/wallet.js +1121 -1117
  69. package/src/bin/helpers.js +840 -840
  70. package/src/bin/postinstall.js +9 -9
  71. package/src/bin/toolkit.js +295 -295
  72. package/witnet/assets/_index.js +8 -8
  73. package/witnet/assets/_requests.js +25 -25
  74. package/witnet/assets/_sources.js +36 -36
  75. package/witnet/assets/_templates.js +36 -36
  76. package/witnet/assets/index.js +4 -4
  77. package/witnet/assets/modals/index.js +9 -9
  78. package/witnet/assets/modals/web3/eth.js +29 -29
  79. package/witnet/assets/modals/web3/ipfs.js +19 -19
  80. package/witnet/assets/modals/web3/wit.js +21 -21
  81. package/witnet/assets/requests.js +95 -95
  82. package/dist/bin/helpers.d.ts +0 -88
  83. package/dist/bin/helpers.d.ts.map +0 -1
  84. package/dist/bin/helpers.js +0 -866
  85. package/dist/index.d.ts +0 -4
  86. package/dist/index.d.ts.map +0 -1
  87. package/dist/index.js +0 -42
  88. package/dist/lib/crypto/account.d.ts +0 -18
  89. package/dist/lib/crypto/account.d.ts.map +0 -1
  90. package/dist/lib/crypto/account.js +0 -152
  91. package/dist/lib/crypto/coinbase.d.ts +0 -9
  92. package/dist/lib/crypto/coinbase.d.ts.map +0 -1
  93. package/dist/lib/crypto/coinbase.js +0 -39
  94. package/dist/lib/crypto/index.d.ts +0 -7
  95. package/dist/lib/crypto/index.d.ts.map +0 -1
  96. package/dist/lib/crypto/index.js +0 -28
  97. package/dist/lib/crypto/interfaces.d.ts +0 -80
  98. package/dist/lib/crypto/interfaces.d.ts.map +0 -1
  99. package/dist/lib/crypto/interfaces.js +0 -3
  100. package/dist/lib/crypto/payloads/DataRequestPayload.d.ts +0 -47
  101. package/dist/lib/crypto/payloads/DataRequestPayload.d.ts.map +0 -1
  102. package/dist/lib/crypto/payloads/DataRequestPayload.js +0 -384
  103. package/dist/lib/crypto/payloads/StakePayload.d.ts +0 -27
  104. package/dist/lib/crypto/payloads/StakePayload.d.ts.map +0 -1
  105. package/dist/lib/crypto/payloads/StakePayload.js +0 -184
  106. package/dist/lib/crypto/payloads/UnstakePayload.d.ts +0 -35
  107. package/dist/lib/crypto/payloads/UnstakePayload.d.ts.map +0 -1
  108. package/dist/lib/crypto/payloads/UnstakePayload.js +0 -244
  109. package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts +0 -24
  110. package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts.map +0 -1
  111. package/dist/lib/crypto/payloads/ValueTransferPayload.js +0 -182
  112. package/dist/lib/crypto/payloads.d.ts +0 -54
  113. package/dist/lib/crypto/payloads.d.ts.map +0 -1
  114. package/dist/lib/crypto/payloads.js +0 -224
  115. package/dist/lib/crypto/signer.d.ts +0 -26
  116. package/dist/lib/crypto/signer.d.ts.map +0 -1
  117. package/dist/lib/crypto/signer.js +0 -299
  118. package/dist/lib/crypto/transmitters/DataRequests.d.ts +0 -14
  119. package/dist/lib/crypto/transmitters/DataRequests.d.ts.map +0 -1
  120. package/dist/lib/crypto/transmitters/DataRequests.js +0 -62
  121. package/dist/lib/crypto/transmitters/StakeDeposits.d.ts +0 -11
  122. package/dist/lib/crypto/transmitters/StakeDeposits.d.ts.map +0 -1
  123. package/dist/lib/crypto/transmitters/StakeDeposits.js +0 -48
  124. package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts +0 -17
  125. package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +0 -1
  126. package/dist/lib/crypto/transmitters/StakeWithdrawals.js +0 -115
  127. package/dist/lib/crypto/transmitters/ValueTransfers.d.ts +0 -10
  128. package/dist/lib/crypto/transmitters/ValueTransfers.d.ts.map +0 -1
  129. package/dist/lib/crypto/transmitters/ValueTransfers.js +0 -47
  130. package/dist/lib/crypto/transmitters.d.ts +0 -46
  131. package/dist/lib/crypto/transmitters.d.ts.map +0 -1
  132. package/dist/lib/crypto/transmitters.js +0 -506
  133. package/dist/lib/crypto/types.d.ts +0 -127
  134. package/dist/lib/crypto/types.d.ts.map +0 -1
  135. package/dist/lib/crypto/types.js +0 -261
  136. package/dist/lib/crypto/utils.d.ts +0 -10
  137. package/dist/lib/crypto/utils.d.ts.map +0 -1
  138. package/dist/lib/crypto/utils.js +0 -97
  139. package/dist/lib/crypto/wallet.d.ts +0 -26
  140. package/dist/lib/crypto/wallet.d.ts.map +0 -1
  141. package/dist/lib/crypto/wallet.js +0 -327
  142. package/dist/lib/helpers.d.ts +0 -90
  143. package/dist/lib/helpers.d.ts.map +0 -1
  144. package/dist/lib/helpers.js +0 -1031
  145. package/dist/lib/index.d.ts +0 -5
  146. package/dist/lib/index.d.ts.map +0 -1
  147. package/dist/lib/index.js +0 -21
  148. package/dist/lib/radon/artifacts.d.ts +0 -55
  149. package/dist/lib/radon/artifacts.d.ts.map +0 -1
  150. package/dist/lib/radon/artifacts.js +0 -347
  151. package/dist/lib/radon/ccdr/eth.d.ts +0 -100
  152. package/dist/lib/radon/ccdr/eth.d.ts.map +0 -1
  153. package/dist/lib/radon/ccdr/eth.js +0 -237
  154. package/dist/lib/radon/ccdr/index.d.ts +0 -34
  155. package/dist/lib/radon/ccdr/index.d.ts.map +0 -1
  156. package/dist/lib/radon/ccdr/index.js +0 -63
  157. package/dist/lib/radon/ccdr/wit.d.ts +0 -29
  158. package/dist/lib/radon/ccdr/wit.d.ts.map +0 -1
  159. package/dist/lib/radon/ccdr/wit.js +0 -60
  160. package/dist/lib/radon/filters.d.ts +0 -14
  161. package/dist/lib/radon/filters.d.ts.map +0 -1
  162. package/dist/lib/radon/filters.js +0 -47
  163. package/dist/lib/radon/index.d.ts +0 -36
  164. package/dist/lib/radon/index.d.ts.map +0 -1
  165. package/dist/lib/radon/index.js +0 -154
  166. package/dist/lib/radon/reducers.d.ts +0 -29
  167. package/dist/lib/radon/reducers.d.ts.map +0 -1
  168. package/dist/lib/radon/reducers.js +0 -101
  169. package/dist/lib/radon/retrievals.d.ts +0 -120
  170. package/dist/lib/radon/retrievals.d.ts.map +0 -1
  171. package/dist/lib/radon/retrievals.js +0 -358
  172. package/dist/lib/radon/sources.d.ts +0 -102
  173. package/dist/lib/radon/sources.d.ts.map +0 -1
  174. package/dist/lib/radon/sources.js +0 -294
  175. package/dist/lib/radon/types.d.ts +0 -521
  176. package/dist/lib/radon/types.d.ts.map +0 -1
  177. package/dist/lib/radon/types.js +0 -1066
  178. package/dist/lib/radon/utils.d.ts +0 -55
  179. package/dist/lib/radon/utils.d.ts.map +0 -1
  180. package/dist/lib/radon/utils.js +0 -181
  181. package/dist/lib/rpc/farm.d.ts +0 -66
  182. package/dist/lib/rpc/farm.d.ts.map +0 -1
  183. package/dist/lib/rpc/farm.js +0 -808
  184. package/dist/lib/rpc/index.d.ts +0 -3
  185. package/dist/lib/rpc/index.d.ts.map +0 -1
  186. package/dist/lib/rpc/index.js +0 -19
  187. package/dist/lib/rpc/node.d.ts +0 -38
  188. package/dist/lib/rpc/node.d.ts.map +0 -1
  189. package/dist/lib/rpc/node.js +0 -335
  190. package/dist/lib/rpc/nodes.d.ts +0 -40
  191. package/dist/lib/rpc/nodes.d.ts.map +0 -1
  192. package/dist/lib/rpc/nodes.js +0 -531
  193. package/dist/lib/rpc/provider.d.ts +0 -72
  194. package/dist/lib/rpc/provider.d.ts.map +0 -1
  195. package/dist/lib/rpc/provider.js +0 -402
  196. package/dist/lib/rpc/reporter.d.ts +0 -18
  197. package/dist/lib/rpc/reporter.d.ts.map +0 -1
  198. package/dist/lib/rpc/reporter.js +0 -99
  199. package/dist/lib/rpc/types.d.ts +0 -396
  200. package/dist/lib/rpc/types.d.ts.map +0 -1
  201. package/dist/lib/rpc/types.js +0 -81
  202. package/dist/lib/rpc/wallet.d.ts +0 -72
  203. package/dist/lib/rpc/wallet.d.ts.map +0 -1
  204. package/dist/lib/rpc/wallet.js +0 -41
  205. package/dist/lib/types.d.ts +0 -19
  206. package/dist/lib/types.d.ts.map +0 -1
  207. package/dist/lib/types.js +0 -7
  208. package/dist/lib/utils.d.ts +0 -5
  209. package/dist/lib/utils.d.ts.map +0 -1
  210. package/dist/lib/utils.js +0 -51
  211. package/dist/src/lib/rpc/reporter.d.ts +0 -17
  212. package/dist/src/lib/rpc/reporter.d.ts.map +0 -1
  213. package/dist/src/lib/rpc/reporter.js +0 -27
@@ -1,866 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- var __read = (this && this.__read) || function (o, n) {
39
- var m = typeof Symbol === "function" && o[Symbol.iterator];
40
- if (!m) return o;
41
- var i = m.call(o), r, ar = [], e;
42
- try {
43
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
- }
45
- catch (error) { e = { error: error }; }
46
- finally {
47
- try {
48
- if (r && !r.done && (m = i["return"])) m.call(i);
49
- }
50
- finally { if (e) throw e.error; }
51
- }
52
- return ar;
53
- };
54
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
55
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
56
- if (ar || !(i in from)) {
57
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
58
- ar[i] = from[i];
59
- }
60
- }
61
- return to.concat(ar || Array.prototype.slice.call(from));
62
- };
63
- var cbor = require("cbor");
64
- var exec = require("child_process").exec;
65
- var net = require("net");
66
- var os = require("os");
67
- var readline = require('readline');
68
- var colorstrip = function (str) { return str.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, ''); };
69
- var commas = function (number) {
70
- parts = number.toString().split('.');
71
- var result = parts.length <= 1
72
- ? "".concat(parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","))
73
- : "".concat(parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","), ".").concat(parts[1]);
74
- return result;
75
- };
76
- var fromNanowits = function (x, d) { return (parseInt(x) / Math.pow(10, 9)).toFixed(d || 2); };
77
- var fromWits = function (x) { return Math.floor(parseFloat(x) * Math.pow(10, 9)); };
78
- function toFixedTrunc(x, n) {
79
- var v = (typeof x === 'string' ? x : x.toString()).split('.');
80
- if (n <= 0)
81
- return v[0];
82
- var f = v[1] || '';
83
- if (f.length > n)
84
- return "".concat(v[0], ".").concat(f.substr(0, n));
85
- while (f.length < n)
86
- f += '0';
87
- return "".concat(v[0], ".").concat(f);
88
- }
89
- ;
90
- var whole_wits = function (number, digits) {
91
- var lookup = [
92
- { value: 1, symbol: " nWits" },
93
- { value: 1e3, symbol: " μWits" },
94
- { value: 1e6, symbol: " mWits" },
95
- { value: 1e9, symbol: " Wits" },
96
- { value: 1e12, symbol: " KWits" },
97
- { value: 1e15, symbol: " MWits" },
98
- ];
99
- var regexp = /\.0+$|(?<=\.[0-9])0+$/;
100
- var item = lookup.findLast(function (item) { return number >= item.value; });
101
- return item ? toFixedTrunc(commas(number / item.value), digits). /*replace(regexp, "")*/concat(item.symbol) : "(no Wits)";
102
- };
103
- var bblue = function (str) { return "\u001B[1;98;44m".concat(str, "\u001B[0;0;0m"); };
104
- var bcyan = function (str) { return "\u001B[38;46m".concat(str, "\u001B[0;0m"); };
105
- var bgreen = function (str) { return "\u001B[30;42m".concat(str, "\u001B[0;0m"); };
106
- var bred = function (str) { return "\u001B[30;41m".concat(str, "\u001B[0;0m"); };
107
- var bviolet = function (str) { return "\u001B[30;45m".concat(str, "\u001B[0;0m"); };
108
- var lcyan = function (str) { return "\u001B[1;96m".concat(str, "\u001B[0m"); };
109
- var lgray = function (str) { return "\u001B[1;90m".concat(str, "\u001B[0m"); };
110
- var lgreen = function (str) { return "\u001B[1;92m".concat(str, "\u001B[0m"); };
111
- var lmagenta = function (str) { return "\u001B[1;95m".concat(str, "\u001B[0m"); };
112
- var lyellow = function (str) { return "\u001B[1;93m".concat(str, "\u001B[0m"); };
113
- var mblue = function (str) { return "\u001B[94m".concat(str, "\u001B[0m"); };
114
- var mcyan = function (str) { return "\u001B[96m".concat(str, "\u001B[0m"); };
115
- var mgreen = function (str) { return "\u001B[92m".concat(str, "\u001B[0m"); };
116
- var mmagenta = function (str) { return "\u001B[0;95m".concat(str, "\u001B[0m"); };
117
- var mred = function (str) { return "\u001B[91m".concat(str, "\u001B[0m"); };
118
- var myellow = function (str) { return "\u001B[93m".concat(str, "\u001B[0m"); };
119
- var blue = function (str) { return "\u001B[34m".concat(str, "\u001B[0m"); };
120
- var cyan = function (str) { return "\u001B[36m".concat(str, "\u001B[0m"); };
121
- var gray = function (str) { return "\u001B[90m".concat(str, "\u001B[0m"); };
122
- var green = function (str) { return "\u001B[32m".concat(str, "\u001B[0m"); };
123
- var magenta = function (str) { return "\u001B[0;35m".concat(str, "\u001B[0m"); };
124
- var normal = function (str) { return "\u001B[98m".concat(str, "\u001B[0m"); };
125
- var red = function (str) { return "\u001B[31m".concat(str, "\u001B[0m"); };
126
- var white = function (str) { return "\u001B[1;98m".concat(str, "\u001B[0m"); };
127
- var yellow = function (str) { return "\u001B[33m".concat(str, "\u001B[0m"); };
128
- function countLeaves(t, obj) {
129
- if (!obj)
130
- return 0;
131
- if (obj instanceof t)
132
- return 1;
133
- if (Array.isArray(obj))
134
- return obj.reduce(function (sum, item) { return sum + countLeaves(t, item); }, 0);
135
- else
136
- return Object.values(obj).reduce(function (sum, item) { return sum + countLeaves(t, item); }, 0);
137
- }
138
- function deleteExtraFlags(args) {
139
- return args.filter(function (arg) { return !arg.startsWith('--'); });
140
- }
141
- function cmd() {
142
- var command = [];
143
- for (var _i = 0; _i < arguments.length; _i++) {
144
- command[_i] = arguments[_i];
145
- }
146
- return new Promise(function (resolve, reject) {
147
- exec(command.join(" "), { maxBuffer: 1024 * 1024 * 10 }, function (error, stdout, stderr) {
148
- if (error) {
149
- reject(error);
150
- }
151
- if (stderr) {
152
- reject(stderr);
153
- }
154
- resolve(stdout);
155
- });
156
- });
157
- }
158
- ;
159
- function execRadonBytecode(bytecode) {
160
- var flags = [];
161
- for (var _i = 1; _i < arguments.length; _i++) {
162
- flags[_i - 1] = arguments[_i];
163
- }
164
- return __awaiter(this, void 0, void 0, function () {
165
- var npx;
166
- return __generator(this, function (_a) {
167
- if (!isHexString(bytecode)) {
168
- throw EvalError("invalid hex string");
169
- }
170
- else {
171
- npx = os.type() === "Windows_NT" ? "npx.cmd" : "npx";
172
- return [2 /*return*/, cmd.apply(void 0, __spreadArray([npx, "witnet", "radon", "dryrun", bytecode], __read(flags), false)).catch(function (err) {
173
- var errorMessage = err.message.split('\n').slice(1).join('\n').trim();
174
- var errorRegex = /.*^error: (?<message>.*)$.*/gm;
175
- var matched = errorRegex.exec(err.message);
176
- if (matched) {
177
- errorMessage = matched.groups.message;
178
- }
179
- console.error(errorMessage || err);
180
- })];
181
- }
182
- return [2 /*return*/];
183
- });
184
- });
185
- }
186
- function extractFromArgs(args, flags) {
187
- var curated = {};
188
- if (args && flags) {
189
- Object.keys(flags).forEach(function (flag) {
190
- var flagIndex = args.indexOf("--".concat(flag));
191
- if (flagIndex >= 0) {
192
- if (flags[flag].param) {
193
- curated[flag] = args[flagIndex];
194
- if (!args[flagIndex + 1] || args[flagIndex + 1].startsWith('--')) {
195
- throw "Missing required parameter for --".concat(flag);
196
- }
197
- else {
198
- curated[flag] = args[flagIndex + 1];
199
- args.splice(flagIndex, 2);
200
- }
201
- }
202
- else {
203
- curated[flag] = true;
204
- args.splice(flagIndex, 1);
205
- }
206
- }
207
- });
208
- }
209
- return [args, curated,];
210
- }
211
- function fromHexString(hexString) {
212
- if (hexString.startsWith("0x"))
213
- hexString = hexString.slice(2);
214
- return Uint8Array.from(hexString.match(/.{1,2}/g).map(function (byte) { return parseInt(byte, 16); }));
215
- }
216
- function ipIsPrivateOrLocalhost(ip) {
217
- if (ip.substring(0, 7) === "::ffff:")
218
- ip = ip.substring(7);
219
- if (net.isIPv4(ip)) {
220
- // check localhost
221
- if (ip === '127.0.0.1')
222
- return true;
223
- // 10.0.0.0 - 10.255.255.255 || 172.16.0.0 - 172.31.255.255 || 192.168.0.0 - 192.168.255.255
224
- return /^(10)\.(.*)\.(.*)\.(.*)$/.test(ip) || /^(172)\.(1[6-9]|2[0-9]|3[0-1])\.(.*)\.(.*)$/.test(ip) || /^(192)\.(168)\.(.*)\.(.*)$/.test(ip);
225
- }
226
- // else: ip is IPv6
227
- var firstWord = ip.split(":").find(function (el) { return !!el; }); //get first not empty word
228
- // equivalent of 127.0.0.1 in IPv6
229
- if (ip === "::1")
230
- return true;
231
- // The original IPv6 Site Local addresses (fec0::/10) are deprecated. Range: fec0 - feff
232
- else if (/^fe[c-f][0-f]$/.test(firstWord))
233
- return true;
234
- // These days Unique Local Addresses (ULA) are used in place of Site Local.
235
- // Range: fc00 - fcff
236
- else if (/^fc[0-f]{2}$/.test(firstWord))
237
- return true;
238
- // Range: fd00 - fcff
239
- else if (/^fd[0-f]{2}$/.test(firstWord))
240
- return true;
241
- // Link local addresses (prefixed with fe80) are not routable
242
- else if (firstWord === "fe80")
243
- return true;
244
- // Discard Prefix
245
- else if (firstWord === "100")
246
- return true;
247
- // Any other IP address is not Unique Local Address (ULA)
248
- return false;
249
- }
250
- function isHexStringOfLength(str, length) {
251
- return (isHexString(str)
252
- && ((str.startsWith('0x') && str.slice(2).length === length * 2)
253
- || str.length === length * 2)) || isWildcard(str);
254
- }
255
- function isHexString(str) {
256
- return (typeof str === 'string'
257
- && ((str.startsWith("0x") && /^[a-fA-F0-9]+$/i.test(str.slice(2)))
258
- || /^[a-fA-F0-9]+$/i.test(str))) || isWildcard(str);
259
- }
260
- function toHexString(buffer, prefix0x) {
261
- if (prefix0x === void 0) { prefix0x = false; }
262
- if (buffer instanceof Uint8Array)
263
- buffer = Buffer.from(buffer);
264
- return (prefix0x ? "0x" : "") + Array.prototype.map.call(buffer, function (x) { return ('00' + x.toString(16)).slice(-2); })
265
- .join('')
266
- .match(/[a-fA-F0-9]{2}/g)
267
- .join('');
268
- }
269
- function parseURL(url) {
270
- try {
271
- var parsedUrl = new URL(url);
272
- return [
273
- parsedUrl.protocol + "//",
274
- parsedUrl.host,
275
- parsedUrl.pathname.slice(1),
276
- parsedUrl.search.slice(1)
277
- ];
278
- }
279
- catch (_a) {
280
- throw new TypeError("Invalid URL was provided: ".concat(url));
281
- }
282
- }
283
- function showUsage(cmd, module) {
284
- showUsageHeadline(cmd);
285
- if (module === null || module === void 0 ? void 0 : module.flags)
286
- showUsageFlags(module.flags);
287
- if (module === null || module === void 0 ? void 0 : module.router)
288
- showUsageRouter(module.router);
289
- if (module === null || module === void 0 ? void 0 : module.envars)
290
- showUsageEnvars(module.envars);
291
- }
292
- function showUsageRouter(router) {
293
- var cmds = Object.entries(router);
294
- if (cmds.length > 0) {
295
- console.info("\nSUBCOMMANDS:");
296
- var maxLength_1 = Math.max.apply(Math, __spreadArray([], __read(cmds.map(function (_a) {
297
- var _b = __read(_a, 1), cmd = _b[0];
298
- return cmd.length;
299
- })), false));
300
- cmds.forEach(function (cmd) {
301
- console.info(" ", "".concat(cmd[0]).concat(" ".repeat(maxLength_1 - cmd[0].length)), " ", cmd[1].hint);
302
- });
303
- }
304
- }
305
- function showUsageError(cmd, subcmd, module, flags, error) {
306
- var _a;
307
- if (flags === void 0) { flags = {}; }
308
- showUsageSubcommand(cmd, subcmd, module, error);
309
- if (error) {
310
- console.info("\nERROR:");
311
- if (flags === null || flags === void 0 ? void 0 : flags.debug) {
312
- console.error(error);
313
- }
314
- else {
315
- console.error(((_a = error === null || error === void 0 ? void 0 : error.stack) === null || _a === void 0 ? void 0 : _a.split('\n')[0]) || error);
316
- }
317
- }
318
- }
319
- function showUsageEnvars(envars) {
320
- envars = Object.entries(envars);
321
- if (envars.length > 0) {
322
- console.info("\nENVARS:");
323
- var maxWidth_1 = Math.max.apply(Math, __spreadArray([], __read(envars.map(function (_a) {
324
- var _b = __read(_a, 1), envar = _b[0];
325
- return envar.length;
326
- })), false));
327
- envars.forEach(function (_a) {
328
- var _b = __read(_a, 2), envar = _b[0], hint = _b[1];
329
- if (envar.toUpperCase().indexOf("KEY") < 0 && process.env[envar]) {
330
- console.info(" ", "".concat(yellow(envar.toUpperCase())).concat(" ".repeat(maxWidth_1 - envar.length)), " => Settled to \"".concat(myellow(process.env[envar]), "\""));
331
- }
332
- else {
333
- console.info(" ", "".concat(yellow(envar.toUpperCase())).concat(" ".repeat(maxWidth_1 - envar.length)), " ".concat(hint));
334
- }
335
- });
336
- }
337
- }
338
- function showUsageFlags(flags) {
339
- flags = Object.entries(flags);
340
- if (flags.length > 0) {
341
- console.info("\nFLAGS:");
342
- var maxLength_2 = Math.max.apply(Math, __spreadArray([], __read(flags.filter(function (_a) {
343
- var _b = __read(_a, 2), hint = _b[1].hint;
344
- return hint;
345
- }).map(function (_a) {
346
- var _b = __read(_a, 2), key = _b[0], param = _b[1].param;
347
- return param ? key.length + param.length + 3 : key.length;
348
- })), false));
349
- flags.forEach(function (flag) {
350
- var str = "".concat(flag[0]).concat(flag[1].param ? gray(" <".concat(flag[1].param, ">")) : "");
351
- if (flag[1].hint) {
352
- console.info(" ", "--".concat(str).concat(" ".repeat(maxLength_2 - colorstrip(str).length)), " ", flag[1].hint);
353
- }
354
- });
355
- }
356
- }
357
- function showUsageHeadline(cmd, subcmd, module) {
358
- var _a, _b, _c;
359
- console.info("USAGE:");
360
- if (subcmd) {
361
- var params = (_a = module.router[subcmd]) === null || _a === void 0 ? void 0 : _a.params;
362
- var options = (_b = module.router[subcmd]) === null || _b === void 0 ? void 0 : _b.options;
363
- if (params) {
364
- var optionalize_1 = function (str) { return str.endsWith(' ...]') ? "[<".concat(str.slice(1, -5), "> ...]") : (str[0] === '[' ? "[<".concat(str.slice(1, -1), ">]") : "<".concat(str, ">")); };
365
- if (Array.isArray(params)) {
366
- params = params.map(function (param) { return optionalize_1(param); }).join(' ') + " ";
367
- }
368
- else {
369
- params = optionalize_1(params);
370
- }
371
- }
372
- console.info(" ".concat(white("npx witnet ".concat(cmd)), " [FLAGS] ").concat(white(subcmd), " ").concat(params ? green(params) + " " : "").concat(options && Object.keys(options).length > 0 ? "[OPTIONS]" : ""));
373
- if ((_c = module === null || module === void 0 ? void 0 : module.router[subcmd]) === null || _c === void 0 ? void 0 : _c.hint) {
374
- console.info("\nDESCRIPTION:");
375
- console.info(" ".concat(module.router[subcmd].hint));
376
- }
377
- }
378
- else {
379
- console.info(" ".concat(white("npx witnet ".concat(cmd)), " [FLAGS] <SUBCOMMAND> ... [OPTIONS]"));
380
- }
381
- }
382
- function showUsageOptions(options) {
383
- options = Object.entries(options);
384
- if (options.length > 0) {
385
- console.info("\nOPTIONS:");
386
- var maxLength_3 = options
387
- .map(function (option) { return option[1].param ? option[1].param.length + option[0].length + 3 : option[0].length; })
388
- .reduce(function (prev, curr) { return curr > prev ? curr : prev; });
389
- options.forEach(function (option) {
390
- if (option[1].hint) {
391
- var str = "".concat(option[0]).concat(option[1].param ? gray(" <".concat(option[1].param, ">")) : "");
392
- console.info(" ", "--".concat(str).concat(" ".repeat(maxLength_3 - colorstrip(str).length)), " ", option[1].hint);
393
- }
394
- });
395
- }
396
- }
397
- function showUsageSubcommand(cmd, subcmd, module) {
398
- var _a, _b;
399
- showUsageHeadline(cmd, subcmd, module);
400
- if (module === null || module === void 0 ? void 0 : module.flags)
401
- showUsageFlags(module === null || module === void 0 ? void 0 : module.flags);
402
- if ((_a = module === null || module === void 0 ? void 0 : module.router[subcmd]) === null || _a === void 0 ? void 0 : _a.options)
403
- showUsageOptions((_b = module.router[subcmd]) === null || _b === void 0 ? void 0 : _b.options);
404
- if (module === null || module === void 0 ? void 0 : module.envars)
405
- showUsageEnvars(module === null || module === void 0 ? void 0 : module.envars);
406
- }
407
- function showVersion() {
408
- console.info("".concat(mcyan("Wit/Oracle Toolkit CLI v".concat(require("../../package.json").version))));
409
- }
410
- function getWildcardsCountFromString(str) {
411
- var maxArgsIndex = 0;
412
- if (str) {
413
- var match = void 0;
414
- var regexp = /\\\d\\/g;
415
- while ((match = regexp.exec(str)) !== null) {
416
- var argsIndex = parseInt(match[0][1]) + 1;
417
- if (argsIndex > maxArgsIndex)
418
- maxArgsIndex = argsIndex;
419
- }
420
- }
421
- return maxArgsIndex;
422
- }
423
- function isWildcard(str) {
424
- return str.length == 3 && /\\\d\\/g.test(str);
425
- }
426
- function replaceWildcards(obj, args) {
427
- if (args.length > 10)
428
- args = args.slice(0, 10);
429
- if (obj && typeof obj === "string") {
430
- for (var argIndex = 0; argIndex < args.length; argIndex++) {
431
- var wildcard = "\\".concat(argIndex, "\\");
432
- obj = obj.replaceAll(wildcard, args[argIndex]);
433
- }
434
- }
435
- else if (obj && Array.isArray(obj)) {
436
- obj = obj.map(function (value) { return typeof value === "string" || Array.isArray(value)
437
- ? replaceWildcards(value, args)
438
- : value; });
439
- }
440
- return obj;
441
- }
442
- function spliceWildcard(obj, argIndex, argValue, argsCount) {
443
- if (obj && typeof obj === "string") {
444
- var wildcard = "\\".concat(argIndex, "\\");
445
- obj = obj.replaceAll(wildcard, argValue);
446
- for (var j = argIndex + 1; j < argsCount; j++) {
447
- obj = obj.replaceAll("\\".concat(j, "\\"), "\\".concat(j - 1, "\\"));
448
- }
449
- }
450
- else if (obj && Array.isArray(obj)) {
451
- obj = obj.map(function (value) { return typeof value === "string" || Array.isArray(value)
452
- ? spliceWildcard(value, argIndex, argValue, argsCount)
453
- : value; });
454
- }
455
- return obj;
456
- }
457
- function toolkitRun(settings, args) {
458
- return __awaiter(this, void 0, void 0, function () {
459
- var cmd;
460
- return __generator(this, function (_a) {
461
- cmd = "".concat(settings.paths.toolkitBinPath, " ").concat(args.join(' '));
462
- return [2 /*return*/, new Promise(function (resolve, reject) {
463
- exec(cmd, { maxBuffer: 1024 * 1024 * 10 }, function (error, stdout, stderr) {
464
- if (error) {
465
- reject(error);
466
- }
467
- if (stderr) {
468
- reject(stderr);
469
- }
470
- resolve(stdout);
471
- });
472
- })];
473
- });
474
- });
475
- }
476
- function toUpperCamelCase(str) {
477
- return str.replace(/\b(\w)/g, function (match, capture) {
478
- return capture.toUpperCase();
479
- }).replace(/\s+/g, '');
480
- }
481
- function toUtf8Array(str) {
482
- var utf8 = [];
483
- for (var i = 0; i < str.length; i++) {
484
- var charcode = str.charCodeAt(i);
485
- if (charcode < 0x80)
486
- utf8.push(charcode);
487
- else if (charcode < 0x800) {
488
- utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));
489
- }
490
- else if (charcode < 0xd800 || charcode >= 0xe000) {
491
- utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
492
- }
493
- // surrogate pair
494
- else {
495
- i++;
496
- // UTF-16 encodes 0x10000-0x10FFFF by
497
- // subtracting 0x10000 and splitting the
498
- // 20 bits of 0x0-0xFFFFF into two halves
499
- charcode = 0x10000 + (((charcode & 0x3ff) << 10)
500
- | (str.charCodeAt(i) & 0x3ff));
501
- utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
502
- }
503
- }
504
- return utf8;
505
- }
506
- function utf8ArrayToStr(array) {
507
- var out, i, len, c;
508
- var char2, char3;
509
- out = "";
510
- len = array.length;
511
- i = 0;
512
- while (i < len) {
513
- c = array[i++];
514
- switch (c >> 4) {
515
- case 0:
516
- case 1:
517
- case 2:
518
- case 3:
519
- case 4:
520
- case 5:
521
- case 6:
522
- case 7:
523
- // 0xxxxxxx
524
- out += String.fromCharCode(c);
525
- break;
526
- case 12:
527
- case 13:
528
- // 110x xxxx 10xx xxxx
529
- char2 = array[i++];
530
- out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
531
- break;
532
- case 14:
533
- // 1110 xxxx 10xx xxxx 10xx xxxx
534
- char2 = array[i++];
535
- char3 = array[i++];
536
- out += String.fromCharCode(((c & 0x0F) << 12) |
537
- ((char2 & 0x3F) << 6) |
538
- ((char3 & 0x3F) << 0));
539
- break;
540
- }
541
- }
542
- return out;
543
- }
544
- function prompt(question) {
545
- return __awaiter(this, void 0, void 0, function () {
546
- var readlineInterface;
547
- return __generator(this, function (_a) {
548
- readlineInterface = readline.createInterface({
549
- input: process.stdin,
550
- output: process.stdout
551
- });
552
- return [2 /*return*/, new Promise(function (resolve, _) {
553
- readlineInterface.question("".concat(question, " "), function (response) {
554
- readlineInterface.close();
555
- resolve(response.trim());
556
- });
557
- })];
558
- });
559
- });
560
- }
561
- function prompter(promise) {
562
- return __awaiter(this, void 0, void 0, function () {
563
- var loading;
564
- return __generator(this, function (_a) {
565
- loading = (function () {
566
- var h = ['|', '/', '-', '\\'];
567
- var i = 0;
568
- return setInterval(function () {
569
- i = (i > 3) ? 0 : i;
570
- process.stdout.write("\b\b".concat(h[i], " "));
571
- i++;
572
- }, 50);
573
- })();
574
- return [2 /*return*/, promise
575
- .then(function (result) {
576
- clearInterval(loading);
577
- process.stdout.write('\b\b');
578
- return result;
579
- })];
580
- });
581
- });
582
- }
583
- function traceChecklists(checklists) {
584
- if (checklists && Object.keys(checklists).length > 0) {
585
- var headlines = __spreadArray(["NODES"], __read(Object.keys(checklists).map(function (key) { return ":".concat(key); })), false);
586
- checklists = Object.values(checklists);
587
- var urls = Object.keys(checklists[0]);
588
- var records = urls.map(function (url) {
589
- var errors = checklists.filter(function (checklist) { return checklist[url] instanceof Error; }).length;
590
- return __spreadArray([
591
- errors === checklists.length ? red(url) : (errors > 0 ? myellow(url) : mcyan(url))
592
- ], __read(checklists.map(function (checklist) { return checklist[url] instanceof Error
593
- ? red(checklist[url])
594
- : (checklist[url] === true ? lcyan("Aye") : cyan("Nay")); })), false);
595
- });
596
- traceTable(records, {
597
- headlines: headlines,
598
- maxColumnWidth: 31,
599
- });
600
- }
601
- }
602
- function traceHeader(headline, color, indent) {
603
- if (color === void 0) { color = normal; }
604
- if (indent === void 0) { indent = ""; }
605
- console.info("".concat(indent, "\u250C\u2500").concat("─".repeat(headline.length), "\u2500\u2510"));
606
- console.info("".concat(indent, "\u2502 ").concat(color(headline), " \u2502"));
607
- console.info("".concat(indent, "\u2514\u2500").concat("─".repeat(headline.length), "\u2500\u2518"));
608
- }
609
- function traceTable(records, options) {
610
- var stringify = function (data, humanizers, index) { var _a; return humanizers && humanizers[index] ? humanizers[index](data).toString() : (_a = data === null || data === void 0 ? void 0 : data.toString()) !== null && _a !== void 0 ? _a : ""; };
611
- var max = function (a, b) { return a > b ? a : b; };
612
- var reduceMax = function (numbers) { return numbers.reduce(function (curr, prev) { return prev > curr ? prev : curr; }, 0); };
613
- if (!options)
614
- options = {};
615
- var indent = (options === null || options === void 0 ? void 0 : options.indent) || "";
616
- var numColumns = reduceMax(records.map(function (record) { return (record === null || record === void 0 ? void 0 : record.length) || 1; }));
617
- var maxColumnWidth = (options === null || options === void 0 ? void 0 : options.maxColumnWidth) || 80;
618
- var table = transpose(records, numColumns);
619
- options.widths = (options === null || options === void 0 ? void 0 : options.widths) || table.map(function (column, index) {
620
- var maxWidth = reduceMax(column.map(function (field) { return colorstrip(stringify(field, options === null || options === void 0 ? void 0 : options.humanizers, index)).length; }));
621
- if ((options === null || options === void 0 ? void 0 : options.headlines) && options.headlines[index]) {
622
- maxWidth = max(maxWidth, colorstrip(options.headlines[index].replaceAll(':', '')).length);
623
- }
624
- return Math.min(maxWidth, maxColumnWidth);
625
- });
626
- var headline = options.widths.map(function (maxWidth) { return "─".repeat(maxWidth); });
627
- console.info("".concat(indent, "\u250C\u2500").concat(headline.join("─┬─"), "\u2500\u2510"));
628
- if (options === null || options === void 0 ? void 0 : options.headlines) {
629
- headline = options.widths.map(function (maxWidth, index) {
630
- var caption = options.headlines[index].replaceAll(':', '');
631
- var captionLength = colorstrip(caption).length;
632
- return "".concat(white(caption)).concat(" ".repeat(maxWidth - captionLength));
633
- });
634
- console.info("".concat(indent, "\u2502 ").concat(headline.join(" │ "), " \u2502"));
635
- headline = options.widths.map(function (maxWidth) { return "─".repeat(maxWidth); });
636
- console.info("".concat(indent, "\u251C\u2500").concat(headline.join("─┼─"), "\u2500\u2524"));
637
- }
638
- for (var i = 0; i < records.length; i++) {
639
- var line = "";
640
- for (var j = 0; j < numColumns; j++) {
641
- var data = table[j][i];
642
- var color = void 0;
643
- if ((options === null || options === void 0 ? void 0 : options.colors) && options.colors[j]) {
644
- color = options.colors[j];
645
- }
646
- else {
647
- color = typeof data === 'string'
648
- ? green
649
- : (Number(data) === data && data % 1 !== 0 // is float number?
650
- ? yellow
651
- : function (x) { return x; });
652
- }
653
- data = stringify(data, options === null || options === void 0 ? void 0 : options.humanizers, j);
654
- if (colorstrip(data).length > maxColumnWidth) {
655
- while (colorstrip(data).length > maxColumnWidth - 3) {
656
- data = data.slice(0, -1);
657
- }
658
- data += "...";
659
- }
660
- var dataLength = colorstrip(data).length;
661
- if ((options === null || options === void 0 ? void 0 : options.headlines) && options.headlines[j][0] === ':') {
662
- data = "".concat(color(data)).concat(" ".repeat(options.widths[j] - dataLength));
663
- }
664
- else {
665
- data = "".concat(" ".repeat(options.widths[j] - dataLength)).concat(color(data));
666
- }
667
- line += "\u2502 ".concat(data, " ");
668
- }
669
- console.info("".concat(indent).concat(line, "\u2502"));
670
- }
671
- headline = options.widths.map(function (maxWidth) { return "─".repeat(maxWidth); });
672
- console.info("".concat(indent, "\u2514\u2500").concat(headline.join("─┴─"), "\u2500\u2518"));
673
- }
674
- function transpose(records, numColumns) {
675
- var columns = [];
676
- var _loop_1 = function (index) {
677
- columns.push(records.map(function (row) { return row[index]; }));
678
- };
679
- for (var index = 0; index < numColumns; index++) {
680
- _loop_1(index);
681
- }
682
- return columns;
683
- }
684
- function txJsonReplacer(key, value) {
685
- switch (key) {
686
- case 'bytes':
687
- case 'der':
688
- return toHexString(value, true);
689
- case 'tx':
690
- return JSON.stringify(value, txJsonReplacer);
691
- default:
692
- return value;
693
- }
694
- }
695
- function traceTransactionOnCheckpoint(receipt) {
696
- if (receipt === null || receipt === void 0 ? void 0 : receipt.confirmations) {
697
- console.info(" > Checkpoint: ".concat(commas(receipt.blockEpoch + receipt.confirmations)));
698
- }
699
- }
700
- function traceTransactionOnStatusChange(receipt) {
701
- if (receipt.status === "mined" && (receipt === null || receipt === void 0 ? void 0 : receipt.blockHash)
702
- || (receipt.status === "confirmed" && !(receipt === null || receipt === void 0 ? void 0 : receipt.confirmations))) {
703
- console.info(" > Block hash: ".concat(gray(receipt === null || receipt === void 0 ? void 0 : receipt.blockHash)));
704
- console.info(" > Block miner: ".concat(mcyan(receipt === null || receipt === void 0 ? void 0 : receipt.blockMiner)));
705
- console.info(" > Block epoch: ".concat(white(commas(receipt === null || receipt === void 0 ? void 0 : receipt.blockEpoch))));
706
- }
707
- var captions = {
708
- "pending": "Awaiting relay...",
709
- "confirmed": (receipt === null || receipt === void 0 ? void 0 : receipt.confirmations) ? "Transaction confirmed." : "Transaction mined.",
710
- "finalized": "Transaction finalized.",
711
- "relayed": "Awaiting inclusion...",
712
- "mined": "Awaiting confirmations...",
713
- };
714
- var caption = captions[receipt.status];
715
- if (caption)
716
- console.info(" > ".concat(captions[receipt.status]));
717
- }
718
- function traceTransactionReceipt(receipt) {
719
- var captions = {
720
- "DataRequests": " > DR TX hash: ",
721
- "ValueTransfer": " > VTT hash: ",
722
- };
723
- console.info("".concat(captions[receipt.type] || " > TX hash: ").concat(white(receipt.hash)));
724
- if (receipt === null || receipt === void 0 ? void 0 : receipt.droHash)
725
- console.info(" > DRO hash: ".concat(green(receipt.droHash)));
726
- if (receipt === null || receipt === void 0 ? void 0 : receipt.radHash)
727
- console.info(" > RAD hash: ".concat(mgreen(receipt.radHash)));
728
- if (receipt === null || receipt === void 0 ? void 0 : receipt.droSLA)
729
- console.info(" > SLA params: ".concat(JSON.stringify(receipt.droSLA)));
730
- if (receipt === null || receipt === void 0 ? void 0 : receipt.withdrawer) {
731
- if (receipt === null || receipt === void 0 ? void 0 : receipt.validator) {
732
- console.info(" > Validator: ".concat(mcyan(receipt.validator)));
733
- }
734
- console.info(" > Withdrawer: ".concat(mmagenta(receipt.withdrawer)));
735
- }
736
- else {
737
- console.info(" > Account/s: ".concat(mmagenta(receipt.from)));
738
- }
739
- if (receipt === null || receipt === void 0 ? void 0 : receipt.recipients) {
740
- console.info(" > Recipient/s: ".concat(mmagenta(receipt.recipients.filter(function (pkh, index, array) { return index === array.indexOf(pkh); }))));
741
- }
742
- console.info(" > Fees: ".concat(yellow(whole_wits(receipt.fees, 2))));
743
- console.info(" > Value: ".concat(myellow(whole_wits(receipt.value, 2))));
744
- console.info(" > Weight: ".concat(mgreen(commas(receipt.weight))));
745
- }
746
- function traceTransaction(transmitter, options) {
747
- return __awaiter(this, void 0, void 0, function () {
748
- var color, receipt, err_1;
749
- var _a;
750
- return __generator(this, function (_b) {
751
- switch (_b.label) {
752
- case 0:
753
- color = (options === null || options === void 0 ? void 0 : options.color) || (function (x) { return "\u001B[30;45m".concat(x, "\u001B[0m"); });
754
- return [4 /*yield*/, transmitter.signTransaction(options, options === null || options === void 0 ? void 0 : options.strategy)];
755
- case 1:
756
- receipt = _b.sent();
757
- if ((options === null || options === void 0 ? void 0 : options.dryrun) || (options === null || options === void 0 ? void 0 : options.verbose)) {
758
- console.info("\n".concat(gray(JSON.stringify(receipt.tx, txJsonReplacer))));
759
- }
760
- if (options === null || options === void 0 ? void 0 : options.headline) {
761
- console.info("\n ".concat(color(" ".concat(options.headline, " ")), "\n"));
762
- }
763
- traceTransactionReceipt(receipt);
764
- if (!!(options === null || options === void 0 ? void 0 : options.dryrun)) return [3 /*break*/, 9];
765
- _b.label = 2;
766
- case 2:
767
- _b.trys.push([2, 7, , 8]);
768
- if (!((options === null || options === void 0 ? void 0 : options.confirmations) !== undefined)) return [3 /*break*/, 4];
769
- return [4 /*yield*/, transmitter.waitTransaction({
770
- confirmations: options === null || options === void 0 ? void 0 : options.confirmations,
771
- onCheckpoint: traceTransactionOnCheckpoint,
772
- onStatusChange: traceTransactionOnStatusChange,
773
- })];
774
- case 3:
775
- receipt = _b.sent();
776
- return [3 /*break*/, 6];
777
- case 4: return [4 /*yield*/, transmitter.sendTransaction(options, options === null || options === void 0 ? void 0 : options.strategy)];
778
- case 5:
779
- receipt = _b.sent();
780
- _b.label = 6;
781
- case 6: return [3 /*break*/, 8];
782
- case 7:
783
- err_1 = _b.sent();
784
- if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.inFlight) && err_1.inFlight) {
785
- console.info("\n".concat(gray(JSON.stringify((_a = err_1.inFligt) === null || _a === void 0 ? void 0 : _a.message, txJsonReplacer))));
786
- }
787
- throw err_1;
788
- case 8:
789
- if (options === null || options === void 0 ? void 0 : options.verbose) {
790
- console.info("\n".concat(yellow(JSON.stringify(receipt, txJsonReplacer))));
791
- }
792
- return [3 /*break*/, 10];
793
- case 9:
794
- console.info("\n".concat(mred(" ^^^ DRY-RUN ^^^ ")));
795
- _b.label = 10;
796
- case 10: return [2 /*return*/, receipt];
797
- }
798
- });
799
- });
800
- }
801
- module.exports = {
802
- colors: {
803
- bblue: bblue,
804
- bcyan: bcyan,
805
- bgreen: bgreen,
806
- bred: bred,
807
- bviolet: bviolet,
808
- cyan: cyan,
809
- gray: gray,
810
- green: green,
811
- magenta: magenta,
812
- red: red,
813
- white: white,
814
- yellow: yellow,
815
- normal: normal,
816
- lcyan: lcyan,
817
- lgray: lgray,
818
- lgreen: lgreen,
819
- lmagenta: lmagenta,
820
- lyellow: lyellow,
821
- mcyan: mcyan,
822
- mgreen: mgreen,
823
- mmagenta: mmagenta,
824
- mred: mred,
825
- myellow: myellow,
826
- },
827
- colorstrip: colorstrip,
828
- commas: commas,
829
- whole_wits: whole_wits,
830
- toFixedTrunc: toFixedTrunc,
831
- fromNanowits: fromNanowits,
832
- fromWits: fromWits,
833
- countLeaves: countLeaves,
834
- execRadonBytecode: execRadonBytecode,
835
- deleteExtraFlags: deleteExtraFlags,
836
- extractFromArgs: extractFromArgs,
837
- fromHexString: fromHexString,
838
- isHexString: isHexString,
839
- isHexStringOfLength: isHexStringOfLength,
840
- toHexString: toHexString,
841
- parseURL: parseURL,
842
- ipIsPrivateOrLocalhost: ipIsPrivateOrLocalhost,
843
- showUsage: showUsage,
844
- showUsageError: showUsageError,
845
- showUsageSubcommand: showUsageSubcommand,
846
- showVersion: showVersion,
847
- toolkitRun: toolkitRun,
848
- toUpperCamelCase: toUpperCamelCase,
849
- toUtf8Array: toUtf8Array,
850
- utf8ArrayToStr: utf8ArrayToStr,
851
- prompt: prompt,
852
- prompter: prompter,
853
- traceChecklists: traceChecklists,
854
- traceHeader: traceHeader,
855
- traceTable: traceTable,
856
- traceTransaction: traceTransaction,
857
- traceTransactionOnStatusChange: traceTransactionOnStatusChange,
858
- traceTransactionOnCheckpoint: traceTransactionOnCheckpoint,
859
- traceTransactionReceipt: traceTransactionReceipt,
860
- isWildcard: isWildcard,
861
- getWildcardsCountFromString: getWildcardsCountFromString,
862
- replaceWildcards: replaceWildcards,
863
- spliceWildcard: spliceWildcard,
864
- txJsonReplacer: txJsonReplacer,
865
- };
866
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vaGVscGVycy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNwQixJQUFBLElBQUksR0FBSyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQTdCLENBQThCO0FBQzFDLElBQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMxQixJQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDeEIsSUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBRXBDLElBQU0sVUFBVSxHQUFHLFVBQUMsR0FBRyxJQUFLLE9BQUEsR0FBRyxDQUFDLE9BQU8sQ0FDbkMsNkVBQTZFLEVBQUUsRUFBRSxDQUNwRixFQUYyQixDQUUzQixDQUFDO0FBRUYsSUFBTSxNQUFNLEdBQUcsVUFBQyxNQUFNO0lBQ2xCLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3BDLElBQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUMsVUFBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFFO1FBQ3JELENBQUMsQ0FBQyxVQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLGNBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUE7SUFDckUsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQyxDQUFDO0FBRUYsSUFBTSxZQUFZ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QUE7UUFBRSxJQUFJLE1BQUE7UUFBRSxPQUFPLFNBQUE7S0FDekM7SUFDRCxVQUFVLFlBQUE7SUFBRSxNQUFNLFFBQUE7SUFBRSxVQUFVLFlBQUE7SUFBRSxZQUFZLGNBQUE7SUFDNUMsWUFBWSxjQUFBO0lBQUUsUUFBUSxVQUFBO0lBQ3RCLFdBQVcsYUFBQTtJQUNYLGlCQUFpQixtQkFBQTtJQUNqQixnQkFBZ0Isa0JBQUE7SUFBRSxlQUFlLGlCQUFBO0lBQ2pDLGFBQWEsZUFBQTtJQUFFLFdBQVcsYUFBQTtJQUFFLG1CQUFtQixxQkFBQTtJQUFFLFdBQVcsYUFBQTtJQUM1RCxRQUFRLFVBQUE7SUFBRSxzQkFBc0Isd0JBQUE7SUFDaEMsU0FBUyxXQUFBO0lBQUUsY0FBYyxnQkFBQTtJQUFFLG1CQUFtQixxQkFBQTtJQUFFLFdBQVcsYUFBQTtJQUMzRCxVQUFVLFlBQUE7SUFDVixnQkFBZ0Isa0JBQUE7SUFBRSxXQUFXLGFBQUE7SUFBRSxjQUFjLGdCQUFBO0lBQzdDLE1BQU0sUUFBQTtJQUFFLFFBQVEsVUFBQTtJQUNoQixlQUFlLGlCQUFBO0lBQUUsV0FBVyxhQUFBO0lBQUUsVUFBVSxZQUFBO0lBQ3hDLGdCQUFnQixrQkFBQTtJQUFFLDhCQUE4QixnQ0FBQTtJQUFFLDRCQUE0Qiw4QkFBQTtJQUFFLHVCQUF1Qix5QkFBQTtJQUN2RyxVQUFVLFlBQUE7SUFBRSwyQkFBMkIsNkJBQUE7SUFBRSxnQkFBZ0Isa0JBQUE7SUFBRSxjQUFjLGdCQUFBO0lBQ3pFLGNBQWMsZ0JBQUE7Q0FDakIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNib3IgPSByZXF1aXJlKFwiY2JvclwiKVxuY29uc3QgeyBleGVjIH0gPSByZXF1aXJlKFwiY2hpbGRfcHJvY2Vzc1wiKTtcbmNvbnN0IG5ldCA9IHJlcXVpcmUoXCJuZXRcIilcbmNvbnN0IG9zID0gcmVxdWlyZShcIm9zXCIpXG5jb25zdCByZWFkbGluZSA9IHJlcXVpcmUoJ3JlYWRsaW5lJylcblxuY29uc3QgY29sb3JzdHJpcCA9IChzdHIpID0+IHN0ci5yZXBsYWNlKFxuICAgIC9bXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL2csICcnXG4pO1xuXG5jb25zdCBjb21tYXMgPSAobnVtYmVyKSA9PiB7XG4gICAgcGFydHMgPSBudW1iZXIudG9TdHJpbmcoKS5zcGxpdCgnLicpXG4gICAgY29uc3QgcmVzdWx0ID0gcGFydHMubGVuZ3RoIDw9IDFcbiAgICAgICAgPyBgJHtwYXJ0c1swXS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCBcIixcIil9YFxuICAgICAgICA6IGAke3BhcnRzWzBdLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKX0uJHtwYXJ0c1sxXX1gXG4gICAgcmV0dXJuIHJlc3VsdFxufTtcblxuY29uc3QgZnJvbU5hbm93aXRzID0gKHgsIGQpID0+IChwYXJzZUludCh4KSAvIDEwICoqIDkpLnRvRml4ZWQoZCB8fCAyKVxuY29uc3QgZnJvbVdpdHMgPSAoeCkgPT4gTWF0aC5mbG9vcihwYXJzZUZsb2F0KHgpICogMTAgKiogOSlcblxuZnVuY3Rpb24gdG9GaXhlZFRydW5jKHgsIG4pIHtcbiAgICBjb25zdCB2ID0gKHR5cGVvZiB4ID09PSAnc3RyaW5nJyA/IHggOiB4LnRvU3RyaW5nKCkpLnNwbGl0KCcuJyk7XG4gICAgaWYgKG4gPD0gMCkgcmV0dXJuIHZbMF07XG4gICAgbGV0IGYgPSB2WzFdIHx8ICcnO1xuICAgIGlmIChmLmxlbmd0aCA+IG4pIHJldHVybiBgJHt2WzBdfS4ke2Yuc3Vic3RyKDAsIG4pfWA7XG4gICAgd2hpbGUgKGYubGVuZ3RoIDwgbikgZiArPSAnMCc7XG4gICAgcmV0dXJuIGAke3ZbMF19LiR7Zn1gXG59O1xuXG5jb25zdCB3aG9sZV93aXRzID0gKG51bWJlciwgZGlnaXRzKSA9PiB7XG4gICAgY29uc3QgbG9va3VwID0gW1xuICAgICAgICB7IHZhbHVlOiAxLCBzeW1ib2w6IFwiIG5XaXRzXCIgfSxcbiAgICAgICAgeyB2YWx1ZTogMWUzLCBzeW1ib2w6IFwiIM68V2l0c1wiIH0sXG4gICAgICAgIHsgdmFsdWU6IDFlNiwgc3ltYm9sOiBcIiBtV2l0c1wiIH0sXG4gICAgICAgIHsgdmFsdWU6IDFlOSwgc3ltYm9sOiBcIiAgV2l0c1wiIH0sXG4gICAgICAgIHsgdmFsdWU6IDFlMTIsIHN5bWJvbDogXCIgS1dpdHNcIiB9LFxuICAgICAgICB7IHZhbHVlOiAxZTE1LCBzeW1ib2w6IFwiIE1XaXRzXCIgfSxcbiAgICBdO1xuICAgIGNvbnN0IHJlZ2V4cCA9IC9cXC4wKyR8KD88PVxcLlswLTldKTArJC87XG4gICAgY29uc3QgaXRlbSA9IGxvb2t1cC5maW5kTGFzdChpdGVtID0+IG51bWJlciA+PSBpdGVtLnZhbHVlKTtcbiAgICByZXR1cm4gaXRlbSA/IHRvRml4ZWRUcnVuYyhjb21tYXMobnVtYmVyIC8gaXRlbS52YWx1ZSksIGRpZ2l0cykuLypyZXBsYWNlKHJlZ2V4cCwgXCJcIikqL2NvbmNhdChpdGVtLnN5bWJvbCkgOiBcIihubyBXaXRzKVwiO1xufTtcblxuY29uc3QgYmJsdWUgPSAoc3RyKSA9PiBgXFx4MWJbMTs5ODs0NG0ke3N0cn1cXHgxYlswOzA7MG1gXG5jb25zdCBiY3lhbiA9IChzdHIpID0+IGBcXHgxYlszODs0Nm0ke3N0cn1cXHgxYlswOzBtYFxuY29uc3QgYmdyZWVuID0gKHN0cikgPT4gYFxceDFiWzMwOzQybSR7c3RyfVxceDFiWzA7MG1gXG5jb25zdCBicmVkID0gKHN0cikgPT4gYFxceDFiWzMwOzQxbSR7c3RyfVxceDFiWzA7MG1gXG5jb25zdCBidmlvbGV0ID0gKHN0cikgPT4gYFxceDFiWzMwOzQ1bSR7c3RyfVxceDFiWzA7MG1gXG5cbmNvbnN0IGxjeWFuID0gKHN0cikgPT4gYFxceDFiWzE7OTZtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBsZ3JheSA9IChzdHIpID0+IGBcXHgxYlsxOzkwbSR7c3RyfVxceDFiWzBtYFxuY29uc3QgbGdyZWVuID0gKHN0cikgPT4gYFxceDFiWzE7OTJtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBsbWFnZW50YSA9IChzdHIpID0+IGBcXHgxYlsxOzk1bSR7c3RyfVxceDFiWzBtYFxuY29uc3QgbHllbGxvdyA9IChzdHIpID0+IGBcXHgxYlsxOzkzbSR7c3RyfVxceDFiWzBtYFxuY29uc3QgbWJsdWUgPSAoc3RyKSA9PiBgXFx4MWJbOTRtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBtY3lhbiA9IChzdHIpID0+IGBcXHgxYls5Nm0ke3N0cn1cXHgxYlswbWBcbmNvbnN0IG1ncmVlbiA9IChzdHIpID0+IGBcXHgxYls5Mm0ke3N0cn1cXHgxYlswbWBcbmNvbnN0IG1tYWdlbnRhID0gKHN0cikgPT4gYFxceDFiWzA7OTVtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBtcmVkID0gKHN0cikgPT4gYFxceDFiWzkxbSR7c3RyfVxceDFiWzBtYFxuY29uc3QgbXllbGxvdyA9IChzdHIpID0+IGBcXHgxYls5M20ke3N0cn1cXHgxYlswbWBcblxuY29uc3QgYmx1ZSA9IChzdHIpID0+IGBcXHgxYlszNG0ke3N0cn1cXHgxYlswbWBcbmNvbnN0IGN5YW4gPSAoc3RyKSA9PiBgXFx4MWJbMzZtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBncmF5ID0gKHN0cikgPT4gYFxceDFiWzkwbSR7c3RyfVxceDFiWzBtYFxuY29uc3QgZ3JlZW4gPSAoc3RyKSA9PiBgXFx4MWJbMzJtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBtYWdlbnRhID0gKHN0cikgPT4gYFxceDFiWzA7MzVtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBub3JtYWwgPSAoc3RyKSA9PiBgXFx4MWJbOThtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCByZWQgPSAoc3RyKSA9PiBgXFx4MWJbMzFtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCB3aGl0ZSA9IChzdHIpID0+IGBcXHgxYlsxOzk4bSR7c3RyfVxceDFiWzBtYFxuY29uc3QgeWVsbG93ID0gKHN0cikgPT4gYFxceDFiWzMzbSR7c3RyfVxceDFiWzBtYFxuXG5mdW5jdGlvbiBjb3VudExlYXZlcyh0LCBvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIDA7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIHQpIHJldHVybiAxO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIGNvdW50TGVhdmVzKHQsIGl0ZW0pLCAwKVxuICAgIGVsc2UgcmV0dXJuIE9iamVjdC52YWx1ZXMob2JqKS5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgY291bnRMZWF2ZXModCwgaXRlbSksIDApO1xufVxuXG5mdW5jdGlvbiBkZWxldGVFeHRyYUZsYWdzKGFyZ3MpIHtcbiAgICByZXR1cm4gYXJncy5maWx0ZXIoYXJnID0+ICFhcmcuc3RhcnRzV2l0aCgnLS0nKSlcbn1cblxuZnVuY3Rpb24gY21kKC4uLmNvbW1hbmQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBleGVjKGNvbW1hbmQuam9pbihcIiBcIiksIHsgbWF4QnVmZmVyOiAxMDI0ICogMTAyNCAqIDEwIH0sIChlcnJvciwgc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3Qoc3RkZXJyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShzdGRvdXQpXG4gICAgICAgIH0pXG4gICAgfSlcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNSYWRvbkJ5dGVjb2RlKGJ5dGVjb2RlLCAuLi5mbGFncykge1xuICAgIGlmICghaXNIZXhTdHJpbmcoYnl0ZWNvZGUpKSB7XG4gICAgICAgIHRocm93IEV2YWxFcnJvcihcImludmFsaWQgaGV4IHN0cmluZ1wiKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5weCA9IG9zLnR5cGUoKSA9PT0gXCJXaW5kb3dzX05UXCIgPyBcIm5weC5jbWRcIiA6IFwibnB4XCJcbiAgICAgICAgcmV0dXJuIGNtZChucHgsIFwid2l0bmV0XCIsIFwicmFkb25cIiwgXCJkcnlydW5cIiwgYnl0ZWNvZGUsIC4uLmZsYWdzKVxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gZXJyLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpLnNsaWNlKDEpLmpvaW4oJ1xcbicpLnRyaW0oKVxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yUmVnZXggPSAvLipeZXJyb3I6ICg/PG1lc3NhZ2U+LiopJC4qL2dtXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGVycm9yUmVnZXguZXhlYyhlcnIubWVzc2FnZSlcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBtYXRjaGVkLmdyb3Vwcy5tZXNzYWdlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlIHx8IGVycilcbiAgICAgICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RnJvbUFyZ3MoYXJncywgZmxhZ3MpIHtcbiAgICBjb25zdCBjdXJhdGVkID0ge31cbiAgICBpZiAoYXJncyAmJiBmbGFncykge1xuICAgICAgICBPYmplY3Qua2V5cyhmbGFncykuZm9yRWFjaChmbGFnID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZsYWdJbmRleCA9IGFyZ3MuaW5kZXhPZihgLS0ke2ZsYWd9YClcbiAgICAgICAgICAgIGlmIChmbGFnSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChmbGFnc1tmbGFnXS5wYXJhbSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJhdGVkW2ZsYWddID0gYXJnc1tmbGFnSW5kZXhdXG4gICAgICAgICAgICAgICAgICAgIGlmICghYXJnc1tmbGFnSW5kZXggKyAxXSB8fCBhcmdzW2ZsYWdJbmRleCArIDFdLnN0YXJ0c1dpdGgoJy0tJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGBNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgLS0ke2ZsYWd9YFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyYXRlZFtmbGFnXSA9IGFyZ3NbZmxhZ0luZGV4ICsgMV1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Muc3BsaWNlKGZsYWdJbmRleCwgMilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cmF0ZWRbZmxhZ10gPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIGFyZ3Muc3BsaWNlKGZsYWdJbmRleCwgMSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBbYXJncywgY3VyYXRlZCxdXG59XG5cbmZ1bmN0aW9uIGZyb21IZXhTdHJpbmcoaGV4U3RyaW5nKSB7XG4gICAgaWYgKGhleFN0cmluZy5zdGFydHNXaXRoKFwiMHhcIikpIGhleFN0cmluZyA9IGhleFN0cmluZy5zbGljZSgyKVxuICAgIHJldHVybiBVaW50OEFycmF5LmZyb20oaGV4U3RyaW5nLm1hdGNoKC8uezEsMn0vZykubWFwKChieXRlKSA9PiBwYXJzZUludChieXRlLCAxNikpKVxufVxuXG5mdW5jdGlvbiBpcElzUHJpdmF0ZU9yTG9jYWxob3N0KGlwKSB7XG4gICAgaWYgKGlwLnN1YnN0cmluZygwLCA3KSA9PT0gXCI6OmZmZmY6XCIpXG4gICAgICAgIGlwID0gaXAuc3Vic3RyaW5nKDcpO1xuXG4gICAgaWYgKG5ldC5pc0lQdjQoaXApKSB7XG4gICAgICAgIC8vIGNoZWNrIGxvY2FsaG9zdFxuICAgICAgICBpZiAoaXAgPT09ICcxMjcuMC4wLjEnKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy8gICAgICAgICAxMC4wLjAuMCAtIDEwLjI1NS4yNTUuMjU1ICAgICAgICB8fCAgIDE3Mi4xNi4wLjAgLSAxNzIuMzEuMjU1LjI1NSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgICAgMTkyLjE2OC4wLjAgLSAxOTIuMTY4LjI1NS4yNTVcbiAgICAgICAgcmV0dXJuIC9eKDEwKVxcLiguKilcXC4oLiopXFwuKC4qKSQvLnRlc3QoaXApIHx8IC9eKDE3MilcXC4oMVs2LTldfDJbMC05XXwzWzAtMV0pXFwuKC4qKVxcLiguKikkLy50ZXN0KGlwKSB8fCAvXigxOTIpXFwuKDE2OClcXC4oLiopXFwuKC4qKSQvLnRlc3QoaXApXG4gICAgfVxuXG4gICAgLy8gZWxzZTogaXAgaXMgSVB2NlxuICAgIGNvbnN0IGZpcnN0V29yZCA9IGlwLnNwbGl0KFwiOlwiKS5maW5kKGVsID0+ICEhZWwpOyAvL2dldCBmaXJzdCBub3QgZW1wdHkgd29yZFxuXG4gICAgLy8gZXF1aXZhbGVudCBvZiAxMjcuMC4wLjEgaW4gSVB2NlxuICAgIGlmIChpcCA9PT0gXCI6OjFcIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBUaGUgb3JpZ2luYWwgSVB2NiBTaXRlIExvY2FsIGFkZHJlc3NlcyAoZmVjMDo6LzEwKSBhcmUgZGVwcmVjYXRlZC4gUmFuZ2U6IGZlYzAgLSBmZWZmXG4gICAgZWxzZSBpZiAoL15mZVtjLWZdWzAtZl0kLy50ZXN0KGZpcnN0V29yZCkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgLy8gVGhlc2UgZGF5cyBVbmlxdWUgTG9jYWwgQWRkcmVzc2VzIChVTEEpIGFyZSB1c2VkIGluIHBsYWNlIG9mIFNpdGUgTG9jYWwuXG4gICAgLy8gUmFuZ2U6IGZjMDAgLSBmY2ZmXG4gICAgZWxzZSBpZiAoL15mY1swLWZdezJ9JC8udGVzdChmaXJzdFdvcmQpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIC8vIFJhbmdlOiBmZDAwIC0gZmNmZlxuICAgIGVsc2UgaWYgKC9eZmRbMC1mXXsyfSQvLnRlc3QoZmlyc3RXb3JkKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBMaW5rIGxvY2FsIGFkZHJlc3NlcyAocHJlZml4ZWQgd2l0aCBmZTgwKSBhcmUgbm90IHJvdXRhYmxlXG4gICAgZWxzZSBpZiAoZmlyc3RXb3JkID09PSBcImZlODBcIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBEaXNjYXJkIFByZWZpeFxuICAgIGVsc2UgaWYgKGZpcnN0V29yZCA9PT0gXCIxMDBcIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBBbnkgb3RoZXIgSVAgYWRkcmVzcyBpcyBub3QgVW5pcXVlIExvY2FsIEFkZHJlc3MgKFVMQSlcbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzSGV4U3RyaW5nT2ZMZW5ndGgoc3RyLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gKGlzSGV4U3RyaW5nKHN0cilcbiAgICAgICAgJiYgKFxuICAgICAgICAgICAgKHN0ci5zdGFydHNXaXRoKCcweCcpICYmIHN0ci5zbGljZSgyKS5sZW5ndGggPT09IGxlbmd0aCAqIDIpXG4gICAgICAgICAgICB8fCBzdHIubGVuZ3RoID09PSBsZW5ndGggKiAyXG4gICAgICAgIClcbiAgICApIHx8IGlzV2lsZGNhcmQoc3RyKTtcbn1cblxuZnVuY3Rpb24gaXNIZXhTdHJpbmcoc3RyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgdHlwZW9mIHN0ciA9PT0gJ3N0cmluZydcbiAgICAgICAgJiYgKFxuICAgICAgICAgICAgKHN0ci5zdGFydHNXaXRoKFwiMHhcIikgJiYgL15bYS1mQS1GMC05XSskL2kudGVzdChzdHIuc2xpY2UoMikpKVxuICAgICAgICAgICAgfHwgL15bYS1mQS1GMC05XSskL2kudGVzdChzdHIpXG4gICAgICAgIClcbiAgICApIHx8IGlzV2lsZGNhcmQoc3RyKTtcbn1cblxuZnVuY3Rpb24gdG9IZXhTdHJpbmcoYnVmZmVyLCBwcmVmaXgweCA9IGZhbHNlKSB7XG4gICAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAgICByZXR1cm4gKHByZWZpeDB4ID8gXCIweFwiIDogXCJcIikgKyBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoYnVmZmVyLCB4ID0+ICgnMDAnICsgeC50b1N0cmluZygxNikpLnNsaWNlKC0yKSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgICAgIC5tYXRjaCgvW2EtZkEtRjAtOV17Mn0vZylcbiAgICAgICAgLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMKHVybCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgcGFyc2VkVXJsLnByb3RvY29sICsgXCIvL1wiLFxuICAgICAgICAgICAgcGFyc2VkVXJsLmhvc3QsXG4gICAgICAgICAgICBwYXJzZWRVcmwucGF0aG5hbWUuc2xpY2UoMSksXG4gICAgICAgICAgICBwYXJzZWRVcmwuc2VhcmNoLnNsaWNlKDEpXG4gICAgICAgIF1cbiAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBVUkwgd2FzIHByb3ZpZGVkOiAke3VybH1gKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2hvd1VzYWdlKGNtZCwgbW9kdWxlKSB7XG4gICAgc2hvd1VzYWdlSGVhZGxpbmUoY21kKVxuICAgIGlmIChtb2R1bGU/LmZsYWdzKSBzaG93VXNhZ2VGbGFncyhtb2R1bGUuZmxhZ3MpXG4gICAgaWYgKG1vZHVsZT8ucm91dGVyKSBzaG93VXNhZ2VSb3V0ZXIobW9kdWxlLnJvdXRlcilcbiAgICBpZiAobW9kdWxlPy5lbnZhcnMpIHNob3dVc2FnZUVudmFycyhtb2R1bGUuZW52YXJzKVxufVxuXG5mdW5jdGlvbiBzaG93VXNhZ2VSb3V0ZXIocm91dGVyKSB7XG4gICAgY29uc3QgY21kcyA9IE9iamVjdC5lbnRyaWVzKHJvdXRlcilcbiAgICBpZiAoY21kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuU1VCQ09NTUFORFM6YClcbiAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gTWF0aC5tYXgoLi4uY21kcy5tYXAoKFtjbWRdKSA9PiBjbWQubGVuZ3RoKSlcbiAgICAgICAgY21kcy5mb3JFYWNoKGNtZCA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCIgIFwiLCBgJHtjbWRbMF19JHtcIiBcIi5yZXBlYXQobWF4TGVuZ3RoIC0gY21kWzBdLmxlbmd0aCl9YCwgXCIgIFwiLCBjbWRbMV0uaGludClcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNob3dVc2FnZUVycm9yKGNtZCwgc3ViY21kLCBtb2R1bGUsIGZsYWdzID0ge30sIGVycm9yKSB7XG4gICAgc2hvd1VzYWdlU3ViY29tbWFuZChjbWQsIHN1YmNtZCwgbW9kdWxlLCBlcnJvcilcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBcXG5FUlJPUjpgKVxuICAgICAgICBpZiAoZmxhZ3M/LmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcj8uc3RhY2s/LnNwbGl0KCdcXG4nKVswXSB8fCBlcnJvcilcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2hvd1VzYWdlRW52YXJzKGVudmFycykge1xuICAgIGVudmFycyA9IE9iamVjdC5lbnRyaWVzKGVudmFycylcbiAgICBpZiAoZW52YXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBcXG5FTlZBUlM6YClcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSBNYXRoLm1heCguLi5lbnZhcnMubWFwKChbZW52YXJdKSA9PiBlbnZhci5sZW5ndGgpKVxuICAgICAgICBlbnZhcnMuZm9yRWFjaCgoW2VudmFyLCBoaW50XSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVudmFyLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihcIktFWVwiKSA8IDAgJiYgcHJvY2Vzcy5lbnZbZW52YXJdKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiICBcIiwgYCR7eWVsbG93KGVudmFyLnRvVXBwZXJDYXNlKCkpfSR7XCIgXCIucmVwZWF0KG1heFdpZHRoIC0gZW52YXIubGVuZ3RoKX1gLCBgID0+IFNldHRsZWQgdG8gXCIke215ZWxsb3cocHJvY2Vzcy5lbnZbZW52YXJdKX1cImApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIiAgXCIsIGAke3llbGxvdyhlbnZhci50b1VwcGVyQ2FzZSgpKX0ke1wiIFwiLnJlcGVhdChtYXhXaWR0aCAtIGVudmFyLmxlbmd0aCl9YCwgYCAke2hpbnR9YClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNob3dVc2FnZUZsYWdzKGZsYWdzKSB7XG4gICAgZmxhZ3MgPSBPYmplY3QuZW50cmllcyhmbGFncylcbiAgICBpZiAoZmxhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFxcbkZMQUdTOmApXG4gICAgICAgIGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KC4uLmZsYWdzLmZpbHRlcigoWyx7aGludH1dKSA9PiBoaW50KS5tYXAoKFtrZXksIHsgcGFyYW0gfV0pID0+IHBhcmFtID8ga2V5Lmxlbmd0aCArIHBhcmFtLmxlbmd0aCArIDMgOiBrZXkubGVuZ3RoKSlcbiAgICAgICAgZmxhZ3MuZm9yRWFjaChmbGFnID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IGAke2ZsYWdbMF19JHtmbGFnWzFdLnBhcmFtID8gZ3JheShgIDwke2ZsYWdbMV0ucGFyYW19PmApIDogXCJcIn1gXG4gICAgICAgICAgICBpZiAoZmxhZ1sxXS5oaW50KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiICBcIiwgYC0tJHtzdHJ9JHtcIiBcIi5yZXBlYXQobWF4TGVuZ3RoIC0gY29sb3JzdHJpcChzdHIpLmxlbmd0aCl9YCwgXCIgIFwiLCBmbGFnWzFdLmhpbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiBzaG93VXNhZ2VIZWFkbGluZShjbWQsIHN1YmNtZCwgbW9kdWxlKSB7XG4gICAgY29uc29sZS5pbmZvKFwiVVNBR0U6XCIpXG4gICAgaWYgKHN1YmNtZCkge1xuICAgICAgICBsZXQgcGFyYW1zID0gbW9kdWxlLnJvdXRlcltzdWJjbWRdPy5wYXJhbXNcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG1vZHVsZS5yb3V0ZXJbc3ViY21kXT8ub3B0aW9uc1xuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25hbGl6ZSA9IChzdHIpID0+IHN0ci5lbmRzV2l0aCgnIC4uLl0nKSA/IGBbPCR7c3RyLnNsaWNlKDEsIC01KX0+IC4uLl1gIDogKFxuICAgICAgICAgICAgICAgIHN0clswXSA9PT0gJ1snID8gYFs8JHtzdHIuc2xpY2UoMSwgLTEpfT5dYCA6IGA8JHtzdHJ9PmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMubWFwKHBhcmFtID0+IG9wdGlvbmFsaXplKHBhcmFtKSkuam9pbignICcpICsgXCIgXCJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gb3B0aW9uYWxpemUocGFyYW1zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgICAgJHt3aGl0ZShgbnB4IHdpdG5ldCAke2NtZH1gKX0gW0ZMQUdTXSAke3doaXRlKHN1YmNtZCl9ICR7cGFyYW1zID8gZ3JlZW4ocGFyYW1zKSArIFwiIFwiIDogXCJcIn0ke29wdGlvbnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCA/IFwiW09QVElPTlNdXCIgOiBcIlwifWApXG4gICAgICAgIGlmIChtb2R1bGU/LnJvdXRlcltzdWJjbWRdPy5oaW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFxcbkRFU0NSSVBUSU9OOmApXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYCAgICR7bW9kdWxlLnJvdXRlcltzdWJjbWRdLmhpbnR9YClcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgICAgJHt3aGl0ZShgbnB4IHdpdG5ldCAke2NtZH1gKX0gW0ZMQUdTXSA8U1VCQ09NTUFORD4gLi4uIFtPUFRJT05TXWApXG4gICAgfVxufVxuXG5mdW5jdGlvbiBzaG93VXNhZ2VPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucylcbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuT1BUSU9OUzpgKVxuICAgICAgICBjb25zdCBtYXhMZW5ndGggPSBvcHRpb25zXG4gICAgICAgICAgICAubWFwKG9wdGlvbiA9PiBvcHRpb25bMV0ucGFyYW0gPyBvcHRpb25bMV0ucGFyYW0ubGVuZ3RoICsgb3B0aW9uWzBdLmxlbmd0aCArIDMgOiBvcHRpb25bMF0ubGVuZ3RoKVxuICAgICAgICAgICAgLnJlZHVjZSgocHJldiwgY3VycikgPT4gY3VyciA+IHByZXYgPyBjdXJyIDogcHJldik7XG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvblsxXS5oaW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyID0gYCR7b3B0aW9uWzBdfSR7b3B0aW9uWzFdLnBhcmFtID8gZ3JheShgIDwke29wdGlvblsxXS5wYXJhbX0+YCkgOiBcIlwifWBcbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCIgIFwiLCBgLS0ke3N0cn0ke1wiIFwiLnJlcGVhdChtYXhMZW5ndGggLSBjb2xvcnN0cmlwKHN0cikubGVuZ3RoKX1gLCBcIiAgXCIsIG9wdGlvblsxXS5oaW50KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2hvd1VzYWdlU3ViY29tbWFuZChjbWQsIHN1YmNtZCwgbW9kdWxlKSB7XG4gICAgc2hvd1VzYWdlSGVhZGxpbmUoY21kLCBzdWJjbWQsIG1vZHVsZSlcbiAgICBpZiAobW9kdWxlPy5mbGFncykgc2hvd1VzYWdlRmxhZ3MobW9kdWxlPy5mbGFncylcbiAgICBpZiAobW9kdWxlPy5yb3V0ZXJbc3ViY21kXT8ub3B0aW9ucykgc2hvd1VzYWdlT3B0aW9ucyhtb2R1bGUucm91dGVyW3N1YmNtZF0/Lm9wdGlvbnMpXG4gICAgaWYgKG1vZHVsZT8uZW52YXJzKSBzaG93VXNhZ2VFbnZhcnMobW9kdWxlPy5lbnZhcnMpXG59XG5cbmZ1bmN0aW9uIHNob3dWZXJzaW9uKCkge1xuICAgIGNvbnNvbGUuaW5mbyhgJHttY3lhbihgV2l0L09yYWNsZSBUb29sa2l0IENMSSB2JHtyZXF1aXJlKFwiLi4vLi4vcGFja2FnZS5qc29uXCIpLnZlcnNpb259YCl9YClcbn1cblxuZnVuY3Rpb24gZ2V0V2lsZGNhcmRzQ291bnRGcm9tU3RyaW5nKHN0cikge1xuICAgIGxldCBtYXhBcmdzSW5kZXggPSAwXG4gICAgaWYgKHN0cikge1xuICAgICAgICBsZXQgbWF0Y2hcbiAgICAgICAgY29uc3QgcmVnZXhwID0gL1xcXFxcXGRcXFxcL2dcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgYXJnc0luZGV4ID0gcGFyc2VJbnQobWF0Y2hbMF1bMV0pICsgMVxuICAgICAgICAgICAgaWYgKGFyZ3NJbmRleCA+IG1heEFyZ3NJbmRleCkgbWF4QXJnc0luZGV4ID0gYXJnc0luZGV4XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1heEFyZ3NJbmRleFxufVxuXG5cbmZ1bmN0aW9uIGlzV2lsZGNhcmQoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5sZW5ndGggPT0gMyAmJiAvXFxcXFxcZFxcXFwvZy50ZXN0KHN0cilcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVdpbGRjYXJkcyhvYmosIGFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAxMCkgYXJncyA9IGFyZ3Muc2xpY2UoMCwgMTApO1xuICAgIGlmIChvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBmb3IgKGxldCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgYXJncy5sZW5ndGg7IGFyZ0luZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHdpbGRjYXJkID0gYFxcXFwke2FyZ0luZGV4fVxcXFxgXG4gICAgICAgICAgICBvYmogPSBvYmoucmVwbGFjZUFsbCh3aWxkY2FyZCwgYXJnc1thcmdJbmRleF0pXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9iaiAmJiBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgb2JqID0gb2JqLm1hcCh2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgID8gcmVwbGFjZVdpbGRjYXJkcyh2YWx1ZSwgYXJncylcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBzcGxpY2VXaWxkY2FyZChvYmosIGFyZ0luZGV4LCBhcmdWYWx1ZSwgYXJnc0NvdW50KSB7XG4gICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IHdpbGRjYXJkID0gYFxcXFwke2FyZ0luZGV4fVxcXFxgXG4gICAgICAgIG9iaiA9IG9iai5yZXBsYWNlQWxsKHdpbGRjYXJkLCBhcmdWYWx1ZSlcbiAgICAgICAgZm9yIChsZXQgaiA9IGFyZ0luZGV4ICsgMTsgaiA8IGFyZ3NDb3VudDsgaisrKSB7XG4gICAgICAgICAgICBvYmogPSBvYmoucmVwbGFjZUFsbChgXFxcXCR7an1cXFxcYCwgYFxcXFwke2ogLSAxfVxcXFxgKVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChvYmogJiYgQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIG9iaiA9IG9iai5tYXAodmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/IHNwbGljZVdpbGRjYXJkKHZhbHVlLCBhcmdJbmRleCwgYXJnVmFsdWUsIGFyZ3NDb3VudClcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuXG5hc3luYyBmdW5jdGlvbiB0b29sa2l0UnVuKHNldHRpbmdzLCBhcmdzKSB7XG4gICAgY29uc3QgY21kID0gYCR7c2V0dGluZ3MucGF0aHMudG9vbGtpdEJpblBhdGh9ICR7YXJncy5qb2luKCcgJyl9YFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGV4ZWMoY21kLCB7IG1heEJ1ZmZlcjogMTAyNCAqIDEwMjQgKiAxMCB9LCAoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHN0ZGVycilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoc3Rkb3V0KVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHRvVXBwZXJDYW1lbENhc2Uoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXGIoXFx3KS9nLCBmdW5jdGlvbiAobWF0Y2gsIGNhcHR1cmUpIHtcbiAgICAgICAgcmV0dXJuIGNhcHR1cmUudG9VcHBlckNhc2UoKTtcbiAgICB9KS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbn1cblxuZnVuY3Rpb24gdG9VdGY4QXJyYXkoc3RyKSB7XG4gICAgY29uc3QgdXRmOCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoYXJjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjaGFyY29kZSA8IDB4ODApIHV0ZjgucHVzaChjaGFyY29kZSk7XG4gICAgICAgIGVsc2UgaWYgKGNoYXJjb2RlIDwgMHg4MDApIHtcbiAgICAgICAgICAgIHV0ZjgucHVzaCgweGMwIHwgKGNoYXJjb2RlID4+IDYpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hhcmNvZGUgPCAweGQ4MDAgfHwgY2hhcmNvZGUgPj0gMHhlMDAwKSB7XG4gICAgICAgICAgICB1dGY4LnB1c2goMHhlMCB8IChjaGFyY29kZSA+PiAxMiksXG4gICAgICAgICAgICAgICAgMHg4MCB8ICgoY2hhcmNvZGUgPj4gNikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKGNoYXJjb2RlICYgMHgzZikpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgLy8gVVRGLTE2IGVuY29kZXMgMHgxMDAwMC0weDEwRkZGRiBieVxuICAgICAgICAgICAgLy8gc3VidHJhY3RpbmcgMHgxMDAwMCBhbmQgc3BsaXR0aW5nIHRoZVxuICAgICAgICAgICAgLy8gMjAgYml0cyBvZiAweDAtMHhGRkZGRiBpbnRvIHR3byBoYWx2ZXNcbiAgICAgICAgICAgIGNoYXJjb2RlID0gMHgxMDAwMCArICgoKGNoYXJjb2RlICYgMHgzZmYpIDw8IDEwKVxuICAgICAgICAgICAgICAgIHwgKHN0ci5jaGFyQ29kZUF0KGkpICYgMHgzZmYpKTtcbiAgICAgICAgICAgIHV0ZjgucHVzaCgweGYwIHwgKGNoYXJjb2RlID4+IDE4KSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKChjaGFyY29kZSA+PiAxMikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKChjaGFyY29kZSA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHV0Zjg7XG59XG5cbmZ1bmN0aW9uIHV0ZjhBcnJheVRvU3RyKGFycmF5KSB7XG4gICAgbGV0IG91dCwgaSwgbGVuLCBjO1xuICAgIGxldCBjaGFyMiwgY2hhcjM7XG5cbiAgICBvdXQgPSBcIlwiO1xuICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBjID0gYXJyYXlbaSsrXTtcbiAgICAgICAgc3dpdGNoIChjID4+IDQpIHtcbiAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiBjYXNlIDI6IGNhc2UgMzogY2FzZSA0OiBjYXNlIDU6IGNhc2UgNjogY2FzZSA3OlxuICAgICAgICAgICAgICAgIC8vIDB4eHh4eHh4XG4gICAgICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEyOiBjYXNlIDEzOlxuICAgICAgICAgICAgICAgIC8vIDExMHggeHh4eCAgIDEweHggeHh4eFxuICAgICAgICAgICAgICAgIGNoYXIyID0gYXJyYXlbaSsrXTtcbiAgICAgICAgICAgICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAweDFGKSA8PCA2KSB8IChjaGFyMiAmIDB4M0YpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgLy8gMTExMCB4eHh4ICAxMHh4IHh4eHggIDEweHggeHh4eFxuICAgICAgICAgICAgICAgIGNoYXIyID0gYXJyYXlbaSsrXTtcbiAgICAgICAgICAgICAgICBjaGFyMyA9IGFycmF5W2krK107XG4gICAgICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjICYgMHgwRikgPDwgMTIpIHxcbiAgICAgICAgICAgICAgICAgICAgKChjaGFyMiAmIDB4M0YpIDw8IDYpIHxcbiAgICAgICAgICAgICAgICAgICAgKChjaGFyMyAmIDB4M0YpIDw8IDApKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9tcHQocXVlc3Rpb24pIHtcbiAgICBjb25zdCByZWFkbGluZUludGVyZmFjZSA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgICAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0XG4gICAgfSlcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF8pID0+IHtcbiAgICAgICAgcmVhZGxpbmVJbnRlcmZhY2UucXVlc3Rpb24oYCR7cXVlc3Rpb259IGAsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgcmVhZGxpbmVJbnRlcmZhY2UuY2xvc2UoKVxuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS50cmltKCkpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0ZXIocHJvbWlzZSkge1xuICAgIGNvbnN0IGxvYWRpbmcgPSAoKCkgPT4ge1xuICAgICAgICBjb25zdCBoID0gWyd8JywgJy8nLCAnLScsICdcXFxcJ107XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGkgPSAoaSA+IDMpID8gMCA6IGlcbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXGJcXGIke2hbaV19IGApXG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH0sIDUwKTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGxvYWRpbmcpXG4gICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxiXFxiJylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSlcbn1cblxuZnVuY3Rpb24gdHJhY2VDaGVja2xpc3RzKGNoZWNrbGlzdHMpIHtcbiAgICBpZiAoY2hlY2tsaXN0cyAmJiBPYmplY3Qua2V5cyhjaGVja2xpc3RzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGhlYWRsaW5lcyA9IFtcIk5PREVTXCIsIC4uLk9iamVjdC5rZXlzKGNoZWNrbGlzdHMpLm1hcChrZXkgPT4gYDoke2tleX1gKSxdXG4gICAgICAgIGNoZWNrbGlzdHMgPSBPYmplY3QudmFsdWVzKGNoZWNrbGlzdHMpXG4gICAgICAgIGNvbnN0IHVybHMgPSBPYmplY3Qua2V5cyhjaGVja2xpc3RzWzBdKVxuICAgICAgICBjb25zdCByZWNvcmRzID0gdXJscy5tYXAodXJsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IGNoZWNrbGlzdHMuZmlsdGVyKGNoZWNrbGlzdCA9PiBjaGVja2xpc3RbdXJsXSBpbnN0YW5jZW9mIEVycm9yKS5sZW5ndGhcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZXJyb3JzID09PSBjaGVja2xpc3RzLmxlbmd0aCA/IHJlZCh1cmwpIDogKGVycm9ycyA+IDAgPyBteWVsbG93KHVybCkgOiBtY3lhbih1cmwpKSxcbiAgICAgICAgICAgICAgICAuLi5jaGVja2xpc3RzLm1hcChjaGVja2xpc3QgPT4gY2hlY2tsaXN0W3VybF0gaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgICAgICA/IHJlZChjaGVja2xpc3RbdXJsXSlcbiAgICAgICAgICAgICAgICAgICAgOiAoY2hlY2tsaXN0W3VybF0gPT09IHRydWUgPyBsY3lhbihcIkF5ZVwiKSA6IGN5YW4oXCJOYXlcIikpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICAgICAgdHJhY2VUYWJsZShyZWNvcmRzLCB7XG4gICAgICAgICAgICBoZWFkbGluZXMsXG4gICAgICAgICAgICBtYXhDb2x1bW5XaWR0aDogMzEsXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiB0cmFjZUhlYWRlcihoZWFkbGluZSwgY29sb3IgPSBub3JtYWwsIGluZGVudCA9IFwiXCIsKSB7XG4gICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilIzilIAke1wi4pSAXCIucmVwZWF0KGhlYWRsaW5lLmxlbmd0aCl94pSA4pSQYClcbiAgICBjb25zb2xlLmluZm8oYCR7aW5kZW50feKUgiAke2NvbG9yKGhlYWRsaW5lKX0g4pSCYClcbiAgICBjb25zb2xlLmluZm8oYCR7aW5kZW50feKUlOKUgCR7XCLilIBcIi5yZXBlYXQoaGVhZGxpbmUubGVuZ3RoKX3ilIDilJhgKVxufVxuXG5mdW5jdGlvbiB0cmFjZVRhYmxlKHJlY29yZHMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzdHJpbmdpZnkgPSAoZGF0YSwgaHVtYW5pemVycywgaW5kZXgpID0+IGh1bWFuaXplcnMgJiYgaHVtYW5pemVyc1tpbmRleF0gPyBodW1hbml6ZXJzW2luZGV4XShkYXRhKS50b1N0cmluZygpIDogZGF0YT8udG9TdHJpbmcoKSA/PyBcIlwiXG4gICAgY29uc3QgbWF4ID0gKGEsIGIpID0+IGEgPiBiID8gYSA6IGJcbiAgICBjb25zdCByZWR1Y2VNYXggPSAobnVtYmVycykgPT4gbnVtYmVycy5yZWR1Y2UoKGN1cnIsIHByZXYpID0+IHByZXYgPiBjdXJyID8gcHJldiA6IGN1cnIsIDApXG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge31cbiAgICBjb25zdCBpbmRlbnQgPSBvcHRpb25zPy5pbmRlbnQgfHwgXCJcIlxuICAgIGNvbnN0IG51bUNvbHVtbnMgPSByZWR1Y2VNYXgocmVjb3Jkcy5tYXAocmVjb3JkID0+IHJlY29yZD8ubGVuZ3RoIHx8IDEpKVxuICAgIGNvbnN0IG1heENvbHVtbldpZHRoID0gb3B0aW9ucz8ubWF4Q29sdW1uV2lkdGggfHwgODBcbiAgICBjb25zdCB0YWJsZSA9IHRyYW5zcG9zZShyZWNvcmRzLCBudW1Db2x1bW5zKVxuICAgIG9wdGlvbnMud2lkdGhzID0gb3B0aW9ucz8ud2lkdGhzIHx8IHRhYmxlLm1hcCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgbWF4V2lkdGggPSByZWR1Y2VNYXgoY29sdW1uLm1hcChmaWVsZCA9PiBjb2xvcnN0cmlwKHN0cmluZ2lmeShmaWVsZCwgb3B0aW9ucz8uaHVtYW5pemVycywgaW5kZXgpKS5sZW5ndGgpKVxuICAgICAgICBpZiAob3B0aW9ucz8uaGVhZGxpbmVzICYmIG9wdGlvbnMuaGVhZGxpbmVzW2luZGV4XSkge1xuICAgICAgICAgICAgbWF4V2lkdGggPSBtYXgobWF4V2lkdGgsIGNvbG9yc3RyaXAob3B0aW9ucy5oZWFkbGluZXNbaW5kZXhdLnJlcGxhY2VBbGwoJzonLCAnJykpLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5taW4obWF4V2lkdGgsIG1heENvbHVtbldpZHRoKVxuICAgIH0pXG4gICAgbGV0IGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKG1heFdpZHRoID0+IFwi4pSAXCIucmVwZWF0KG1heFdpZHRoKSlcbiAgICBjb25zb2xlLmluZm8oYCR7aW5kZW50feKUjOKUgCR7aGVhZGxpbmUuam9pbihcIuKUgOKUrOKUgFwiKX3ilIDilJBgKVxuICAgIGlmIChvcHRpb25zPy5oZWFkbGluZXMpIHtcbiAgICAgICAgaGVhZGxpbmUgPSBvcHRpb25zLndpZHRocy5tYXAoKG1heFdpZHRoLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FwdGlvbiA9IG9wdGlvbnMuaGVhZGxpbmVzW2luZGV4XS5yZXBsYWNlQWxsKCc6JywgJycpXG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uTGVuZ3RoID0gY29sb3JzdHJpcChjYXB0aW9uKS5sZW5ndGhcbiAgICAgICAgICAgIHJldHVybiBgJHt3aGl0ZShjYXB0aW9uKX0ke1wiIFwiLnJlcGVhdChtYXhXaWR0aCAtIGNhcHRpb25MZW5ndGgpfWBcbiAgICAgICAgfSlcbiAgICAgICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilIIgJHtoZWFkbGluZS5qb2luKFwiIOKUgiBcIil9IOKUgmApXG4gICAgICAgIGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKG1heFdpZHRoID0+IFwi4pSAXCIucmVwZWF0KG1heFdpZHRoKSlcbiAgICAgICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilJzilIAke2hlYWRsaW5lLmpvaW4oXCLilIDilLzilIBcIil94pSA4pSkYClcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWNvcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBsaW5lID0gXCJcIlxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUNvbHVtbnM7IGorKykge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSB0YWJsZVtqXVtpXVxuICAgICAgICAgICAgbGV0IGNvbG9yXG4gICAgICAgICAgICBpZiAob3B0aW9ucz8uY29sb3JzICYmIG9wdGlvbnMuY29sb3JzW2pdKSB7XG4gICAgICAgICAgICAgICAgY29sb3IgPSBvcHRpb25zLmNvbG9yc1tqXVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2xvciA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IGdyZWVuXG4gICAgICAgICAgICAgICAgICAgIDogKE51bWJlcihkYXRhKSA9PT0gZGF0YSAmJiBkYXRhICUgMSAhPT0gMCAvLyBpcyBmbG9hdCBudW1iZXI/XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHllbGxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAoeCkgPT4geFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnM/Lmh1bWFuaXplcnMsIGopXG4gICAgICAgICAgICBpZiAoY29sb3JzdHJpcChkYXRhKS5sZW5ndGggPiBtYXhDb2x1bW5XaWR0aCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChjb2xvcnN0cmlwKGRhdGEpLmxlbmd0aCA+IG1heENvbHVtbldpZHRoIC0gMykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YSArPSBcIi4uLlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZGF0YUxlbmd0aCA9IGNvbG9yc3RyaXAoZGF0YSkubGVuZ3RoXG4gICAgICAgICAgICBpZiAob3B0aW9ucz8uaGVhZGxpbmVzICYmIG9wdGlvbnMuaGVhZGxpbmVzW2pdWzBdID09PSAnOicpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gYCR7Y29sb3IoZGF0YSl9JHtcIiBcIi5yZXBlYXQob3B0aW9ucy53aWR0aHNbal0gLSBkYXRhTGVuZ3RoKX1gXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBgJHtcIiBcIi5yZXBlYXQob3B0aW9ucy53aWR0aHNbal0gLSBkYXRhTGVuZ3RoKX0ke2NvbG9yKGRhdGEpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmUgKz0gYOKUgiAke2RhdGF9IGBcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmluZm8oYCR7aW5kZW50fSR7bGluZX3ilIJgKVxuICAgIH1cbiAgICBoZWFkbGluZSA9IG9wdGlvbnMud2lkdGhzLm1hcChtYXhXaWR0aCA9PiBcIuKUgFwiLnJlcGVhdChtYXhXaWR0aCkpXG4gICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilJTilIAke2hlYWRsaW5lLmpvaW4oXCLilIDilLTilIBcIil94pSA4pSYYClcbn1cblxuZnVuY3Rpb24gdHJhbnNwb3NlKHJlY29yZHMsIG51bUNvbHVtbnMpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gW11cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbnVtQ29sdW1uczsgaW5kZXgrKykge1xuICAgICAgICBjb2x1bW5zLnB1c2gocmVjb3Jkcy5tYXAocm93ID0+IHJvd1tpbmRleF0pKVxuICAgIH1cbiAgICByZXR1cm4gY29sdW1uc1xufVxuXG5mdW5jdGlvbiB0eEpzb25SZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSAnYnl0ZXMnOlxuICAgICAgICBjYXNlICdkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKHZhbHVlLCB0cnVlKVxuICAgICAgICBjYXNlICd0eCc6XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIHR4SnNvblJlcGxhY2VyKVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxufVxuXG5mdW5jdGlvbiB0cmFjZVRyYW5zYWN0aW9uT25DaGVja3BvaW50KHJlY2VpcHQpIHtcbiAgICBpZiAocmVjZWlwdD8uY29uZmlybWF0aW9ucykge1xuICAgICAgICBjb25zb2xlLmluZm8oYCA+IENoZWNrcG9pbnQ6ICAke2NvbW1hcyhyZWNlaXB0LmJsb2NrRXBvY2ggKyByZWNlaXB0LmNvbmZpcm1hdGlvbnMpfWApXG4gICAgfVxufVxuXG5mdW5jdGlvbiB0cmFjZVRyYW5zYWN0aW9uT25TdGF0dXNDaGFuZ2UocmVjZWlwdCkge1xuICAgIGlmIChcbiAgICAgICAgcmVjZWlwdC5zdGF0dXMgPT09IFwibWluZWRcIiAmJiByZWNlaXB0Py5ibG9ja0hhc2hcbiAgICAgICAgICAgIHx8IChyZWNlaXB0LnN0YXR1cyA9PT0gXCJjb25maXJtZWRcIiAmJiAhcmVjZWlwdD8uY29uZmlybWF0aW9ucylcbiAgICApIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGAgPiBCbG9jayBoYXNoOiAgJHtncmF5KHJlY2VpcHQ/LmJsb2NrSGFzaCl9YCkgXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgID4gQmxvY2sgbWluZXI6ICR7bWN5YW4ocmVjZWlwdD8uYmxvY2tNaW5lcil9YCkgXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgID4gQmxvY2sgZXBvY2g6ICR7d2hpdGUoY29tbWFzKHJlY2VpcHQ/LmJsb2NrRXBvY2gpKX1gKVxuICAgIH1cbiAgICBjb25zdCBjYXB0aW9ucyA9IHtcbiAgICAgICAgXCJwZW5kaW5nXCI6IFwiQXdhaXRpbmcgcmVsYXkuLi5cIixcbiAgICAgICAgXCJjb25maXJtZWRcIjogcmVjZWlwdD8uY29uZmlybWF0aW9ucyA/IFwiVHJhbnNhY3Rpb24gY29uZmlybWVkLlwiIDogXCJUcmFuc2FjdGlvbiBtaW5lZC5cIixcbiAgICAgICAgXCJmaW5hbGl6ZWRcIjogXCJUcmFuc2FjdGlvbiBmaW5hbGl6ZWQuXCIsXG4gICAgICAgIFwicmVsYXllZFwiOiBcIkF3YWl0aW5nIGluY2x1c2lvbi4uLlwiLFxuICAgICAgICBcIm1pbmVkXCI6IFwiQXdhaXRpbmcgY29uZmlybWF0aW9ucy4uLlwiLFxuICAgIH1cbiAgICBjb25zdCBjYXB0aW9uID0gY2FwdGlvbnNbcmVjZWlwdC5zdGF0dXNdXG4gICAgaWYgKGNhcHRpb24pIGNvbnNvbGUuaW5mbyhgID4gJHtjYXB0aW9uc1tyZWNlaXB0LnN0YXR1c119YClcbn1cblxuZnVuY3Rpb24gdHJhY2VUcmFuc2FjdGlvblJlY2VpcHQocmVjZWlwdCkge1xuICAgIGNvbnN0IGNhcHRpb25zID0ge1xuICAgICAgICBcIkRhdGFSZXF1ZXN0c1wiOiBgID4gRFIgVFggaGFzaDogIGAsXG4gICAgICAgIFwiVmFsdWVUcmFuc2ZlclwiOiBgID4gVlRUIGhhc2g6ICAgIGAsXG4gICAgfVxuICAgIGNvbnNvbGUuaW5mbyhgJHtjYXB0aW9uc1tyZWNlaXB0LnR5cGVdIHx8IGAgPiBUWCBoYXNoOiAgICAgYH0ke3doaXRlKHJlY2VpcHQuaGFzaCl9YClcbiAgICBpZiAocmVjZWlwdD8uZHJvSGFzaCkgY29uc29sZS5pbmZvKGAgPiBEUk8gaGFzaDogICAgJHtncmVlbihyZWNlaXB0LmRyb0hhc2gpfWApXG4gICAgaWYgKHJlY2VpcHQ/LnJhZEhhc2gpIGNvbnNvbGUuaW5mbyhgID4gUkFEIGhhc2g6ICAgICR7bWdyZWVuKHJlY2VpcHQucmFkSGFzaCl9YClcbiAgICBpZiAocmVjZWlwdD8uZHJvU0xBKSAgY29uc29sZS5pbmZvKGAgPiBTTEEgcGFyYW1zOiAgJHtKU09OLnN0cmluZ2lmeShyZWNlaXB0LmRyb1NMQSl9YClcbiAgICBpZiAocmVjZWlwdD8ud2l0aGRyYXdlcikge1xuICAgICAgICBpZiAocmVjZWlwdD8udmFsaWRhdG9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYCA+IFZhbGlkYXRvcjogICAke21jeWFuKHJlY2VpcHQudmFsaWRhdG9yKX1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgID4gV2l0aGRyYXdlcjogICR7bW1hZ2VudGEocmVjZWlwdC53aXRoZHJhd2VyKX1gKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgID4gQWNjb3VudC9zOiAgICR7bW1hZ2VudGEocmVjZWlwdC5mcm9tKX1gKVxuICAgIH1cbiAgICBpZiAocmVjZWlwdD8ucmVjaXBpZW50cykge1xuICAgICAgICBjb25zb2xlLmluZm8oYCA+IFJlY2lwaWVudC9zOiAke1xuICAgICAgICAgICAgbW1hZ2VudGEocmVjZWlwdC5yZWNpcGllbnRzLmZpbHRlcigocGtoLCBpbmRleCwgYXJyYXkpID0+IGluZGV4ID09PSBhcnJheS5pbmRleE9mKHBraCkpKVxuICAgICAgICB9YClcbiAgICB9XG4gICAgY29uc29sZS5pbmZvKGAgPiBGZWVzOiAgICAgICAgJHt5ZWxsb3cod2hvbGVfd2l0cyhyZWNlaXB0LmZlZXMsIDIpKX1gKVxuICAgIGNvbnNvbGUuaW5mbyhgID4gVmFsdWU6ICAgICAgICR7bXllbGxvdyh3aG9sZV93aXRzKHJlY2VpcHQudmFsdWUsIDIpKX1gKVxuICAgIGNvbnNvbGUuaW5mbyhgID4gV2VpZ2h0OiAgICAgICR7bWdyZWVuKGNvbW1hcyhyZWNlaXB0LndlaWdodCkpfWApIFxufVxuXG5hc3luYyBmdW5jdGlvbiB0cmFjZVRyYW5zYWN0aW9uKHRyYW5zbWl0dGVyLCBvcHRpb25zKSB7XG4gICAgY29uc3QgY29sb3IgPSBvcHRpb25zPy5jb2xvciB8fCAoKHgpID0+IGBcXHgxYlszMDs0NW0ke3h9XFx4MWJbMG1gKVxuICAgIGxldCByZWNlaXB0ID0gYXdhaXQgdHJhbnNtaXR0ZXIuc2lnblRyYW5zYWN0aW9uKG9wdGlvbnMsIG9wdGlvbnM/LnN0cmF0ZWd5KVxuICAgIGlmIChvcHRpb25zPy5kcnlydW4gfHwgb3B0aW9ucz8udmVyYm9zZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICBgXFxuJHtncmF5KEpTT04uc3RyaW5naWZ5KHJlY2VpcHQudHgsIHR4SnNvblJlcGxhY2VyKSl9YFxuICAgICAgICApXG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5oZWFkbGluZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFxcbiAke2NvbG9yKGAgICR7b3B0aW9ucy5oZWFkbGluZX0gIGApfVxcbmApXG4gICAgfVxuICAgIHRyYWNlVHJhbnNhY3Rpb25SZWNlaXB0KHJlY2VpcHQpXG4gICAgaWYgKCFvcHRpb25zPy5kcnlydW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zPy5jb25maXJtYXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgdHJhbnNtaXR0ZXIud2FpdFRyYW5zYWN0aW9uKHsgXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1hdGlvbnM6IG9wdGlvbnM/LmNvbmZpcm1hdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2twb2ludDogdHJhY2VUcmFuc2FjdGlvbk9uQ2hlY2twb2ludCxcbiAgICAgICAgICAgICAgICAgICAgb25TdGF0dXNDaGFuZ2U6IHRyYWNlVHJhbnNhY3Rpb25PblN0YXR1c0NoYW5nZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgdHJhbnNtaXR0ZXIuc2VuZFRyYW5zYWN0aW9uKG9wdGlvbnMsIG9wdGlvbnM/LnN0cmF0ZWd5KVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnI/LmluRmxpZ2h0ICYmIGVyci5pbkZsaWdodCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuJHtncmF5KEpTT04uc3RyaW5naWZ5KGVyci5pbkZsaWd0Py5tZXNzYWdlLCB0eEpzb25SZXBsYWNlcikpfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucz8udmVyYm9zZSkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKGBcXG4ke3llbGxvdyhKU09OLnN0cmluZ2lmeShyZWNlaXB0LCB0eEpzb25SZXBsYWNlcikpfWApXG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmluZm8oYFxcbiR7bXJlZChgIF5eXiBEUlktUlVOIF5eXiBgKX1gKVxuICAgIH1cbiAgICByZXR1cm4gcmVjZWlwdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBjb2xvcnM6IHtcbiAgICAgICAgYmJsdWUsIGJjeWFuLCBiZ3JlZW4sIGJyZWQsIGJ2aW9sZXQsXG4gICAgICAgIGN5YW4sIGdyYXksIGdyZWVuLCBtYWdlbnRhLCByZWQsIHdoaXRlLCB5ZWxsb3csIG5vcm1hbCxcbiAgICAgICAgbGN5YW4sIGxncmF5LCBsZ3JlZW4sIGxtYWdlbnRhLCBseWVsbG93LFxuICAgICAgICBtY3lhbiwgbWdyZWVuLCBtbWFnZW50YSwgbXJlZCwgbXllbGxvdyxcbiAgICB9LFxuICAgIGNvbG9yc3RyaXAsIGNvbW1hcywgd2hvbGVfd2l0cywgdG9GaXhlZFRydW5jLCBcbiAgICBmcm9tTmFub3dpdHMsIGZyb21XaXRzLFxuICAgIGNvdW50TGVhdmVzLFxuICAgIGV4ZWNSYWRvbkJ5dGVjb2RlLFxuICAgIGRlbGV0ZUV4dHJhRmxhZ3MsIGV4dHJhY3RGcm9tQXJncyxcbiAgICBmcm9tSGV4U3RyaW5nLCBpc0hleFN0cmluZywgaXNIZXhTdHJpbmdPZkxlbmd0aCwgdG9IZXhTdHJpbmcsXG4gICAgcGFyc2VVUkwsIGlwSXNQcml2YXRlT3JMb2NhbGhvc3QsXG4gICAgc2hvd1VzYWdlLCBzaG93VXNhZ2VFcnJvciwgc2hvd1VzYWdlU3ViY29tbWFuZCwgc2hvd1ZlcnNpb24sXG4gICAgdG9vbGtpdFJ1bixcbiAgICB0b1VwcGVyQ2FtZWxDYXNlLCB0b1V0ZjhBcnJheSwgdXRmOEFycmF5VG9TdHIsXG4gICAgcHJvbXB0LCBwcm9tcHRlcixcbiAgICB0cmFjZUNoZWNrbGlzdHMsIHRyYWNlSGVhZGVyLCB0cmFjZVRhYmxlLCBcbiAgICB0cmFjZVRyYW5zYWN0aW9uLCB0cmFjZVRyYW5zYWN0aW9uT25TdGF0dXNDaGFuZ2UsIHRyYWNlVHJhbnNhY3Rpb25PbkNoZWNrcG9pbnQsIHRyYWNlVHJhbnNhY3Rpb25SZWNlaXB0LCBcbiAgICBpc1dpbGRjYXJkLCBnZXRXaWxkY2FyZHNDb3VudEZyb21TdHJpbmcsIHJlcGxhY2VXaWxkY2FyZHMsIHNwbGljZVdpbGRjYXJkLFxuICAgIHR4SnNvblJlcGxhY2VyLCBcbn1cbiJdfQ==