@secrecy/lib 1.0.0-dev.39 → 1.0.0-dev.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BaseClient.d.ts +33 -53
- package/dist/BaseClient.js +886 -2093
- package/dist/PopupTools.js +20 -21
- package/dist/ZeusThunder.js +50 -84
- package/dist/cache.d.ts +2 -3
- package/dist/cache.js +4 -5
- package/dist/client/admin/index.js +77 -165
- package/dist/client/convert/file.d.ts +3 -3
- package/dist/client/convert/file.js +18 -23
- package/dist/client/convert/mail.js +13 -13
- package/dist/client/convert/node.d.ts +9 -0
- package/dist/client/convert/node.js +101 -0
- package/dist/client/helpers.js +41 -41
- package/dist/client/index.d.ts +63 -74
- package/dist/client/index.js +2727 -5759
- package/dist/client/storage.js +7 -7
- package/dist/client/types/File.d.ts +6 -13
- package/dist/client/types/File.js +1 -1
- package/dist/client/types/Inputs.d.ts +2 -7
- package/dist/client/types/Inputs.js +1 -1
- package/dist/client/types/Node.d.ts +49 -0
- package/dist/client/types/Node.js +3 -0
- package/dist/client/types/UserAppNotifications.d.ts +1 -1
- package/dist/client/types/UserAppNotifications.js +1 -1
- package/dist/client/types/UserAppSettings.js +1 -1
- package/dist/client/types/index.d.ts +7 -13
- package/dist/client/types/index.js +2 -4
- package/dist/client/types/selectors.d.ts +476 -0
- package/dist/client/types/selectors.js +125 -0
- package/dist/crypto/file.js +122 -203
- package/dist/crypto/index.js +14 -12
- package/dist/error.js +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +2 -34
- package/dist/minify/index.js +7 -7
- package/dist/minify/lz4.js +87 -93
- package/dist/sodium.js +3 -25
- package/dist/utils/store-buddy.js +11 -15
- package/dist/utils/time.js +4 -12
- package/dist/{utils.d.ts → utils/utils.d.ts} +0 -0
- package/dist/utils/utils.js +57 -0
- package/dist/worker/__mock__/sodium.worker.js +35 -32
- package/dist/worker/md5.js +21 -39
- package/dist/worker/sodium.js +95 -130
- package/dist/worker/workerCodes.js +3 -3
- package/dist/zeus/const.d.ts +5 -0
- package/dist/zeus/const.js +303 -1360
- package/dist/zeus/index.d.ts +1805 -1817
- package/dist/zeus/index.js +542 -434
- package/package.json +40 -39
- package/dist/client/convert/folder.d.ts +0 -8
- package/dist/client/convert/folder.js +0 -264
- package/dist/client/convert/vFile.d.ts +0 -5
- package/dist/client/convert/vFile.js +0 -164
- package/dist/client/types/FilesOnUsersOnApplications.d.ts +0 -9
- package/dist/client/types/FilesOnUsersOnApplications.js +0 -3
- package/dist/client/types/Folder.d.ts +0 -68
- package/dist/client/types/Folder.js +0 -7
- package/dist/client/types/VFile.d.ts +0 -62
- package/dist/client/types/VFile.js +0 -4
- package/dist/client/types/queries.d.ts +0 -535
- package/dist/client/types/queries.js +0 -192
- package/dist/utils.js +0 -188
package/dist/crypto/file.js
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
-
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
-
|
|
4
|
-
function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
5
|
-
|
|
6
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
7
|
-
|
|
8
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
9
|
-
|
|
10
1
|
import { setup, sodium } from "../sodium.js";
|
|
11
2
|
import SparkMD5 from "spark-md5";
|
|
12
|
-
import { chunks } from "../utils.js";
|
|
3
|
+
import { chunks } from "../utils/utils.js";
|
|
13
4
|
|
|
14
5
|
function assert(c, message) {
|
|
15
6
|
if (!c) {
|
|
@@ -22,13 +13,13 @@ export function secretstreamKeygen() {
|
|
|
22
13
|
}
|
|
23
14
|
|
|
24
15
|
function encrypt(key) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
16
|
+
let destroyed = false;
|
|
17
|
+
const {
|
|
18
|
+
state,
|
|
19
|
+
header
|
|
20
|
+
} = sodium.crypto_secretstream_xchacha20poly1305_init_push(key);
|
|
30
21
|
|
|
31
|
-
|
|
22
|
+
const encrypt = (tag, plaintext) => {
|
|
32
23
|
assert(destroyed === false, "state already destroyed");
|
|
33
24
|
return sodium.crypto_secretstream_xchacha20poly1305_push(state, plaintext, null, tag);
|
|
34
25
|
};
|
|
@@ -39,19 +30,19 @@ function encrypt(key) {
|
|
|
39
30
|
}
|
|
40
31
|
|
|
41
32
|
return {
|
|
42
|
-
encrypt
|
|
43
|
-
destroy
|
|
44
|
-
header
|
|
33
|
+
encrypt,
|
|
34
|
+
destroy,
|
|
35
|
+
header
|
|
45
36
|
};
|
|
46
37
|
}
|
|
47
38
|
|
|
48
39
|
function decrypt(header, key) {
|
|
49
40
|
assert(header.byteLength >= sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES, "header must be at least HEADERBYTES (" + sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES + ") long");
|
|
50
41
|
assert(key.byteLength >= sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES, "key must be at least KEYBYTES (" + sodium.crypto_secretstream_xchacha20poly1305_KEYBYTES + ") long");
|
|
51
|
-
|
|
52
|
-
|
|
42
|
+
let destroyed = false;
|
|
43
|
+
const state = sodium.crypto_secretstream_xchacha20poly1305_init_pull(header, key);
|
|
53
44
|
|
|
54
|
-
|
|
45
|
+
const decrypt = ciphertext => {
|
|
55
46
|
assert(destroyed === false, "state already destroyed");
|
|
56
47
|
return sodium.crypto_secretstream_xchacha20poly1305_pull(state, ciphertext);
|
|
57
48
|
};
|
|
@@ -62,112 +53,120 @@ function decrypt(header, key) {
|
|
|
62
53
|
}
|
|
63
54
|
|
|
64
55
|
return {
|
|
65
|
-
decrypt
|
|
66
|
-
destroy
|
|
56
|
+
decrypt,
|
|
57
|
+
destroy
|
|
67
58
|
};
|
|
68
59
|
}
|
|
69
60
|
|
|
70
|
-
export
|
|
71
|
-
export function encryptSecretstream(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
throw new Error("Encrypt aborted");
|
|
123
|
-
|
|
124
|
-
case 19:
|
|
125
|
-
spark.append(chunk);
|
|
126
|
-
_tag = chunk.length < CHUNK_SIZE ? sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL : sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE;
|
|
127
|
-
crypted = crypt(_tag, chunk);
|
|
128
|
-
sparkEncrypted.append(crypted);
|
|
129
|
-
final.set(crypted, total);
|
|
130
|
-
total += crypted.byteLength;
|
|
131
|
-
percent = total / max;
|
|
132
|
-
|
|
133
|
-
if (percent > lastPercent + 0.01) {
|
|
134
|
-
progress == null ? void 0 : progress({
|
|
135
|
-
percent: percent,
|
|
136
|
-
total: max,
|
|
137
|
-
current: total
|
|
138
|
-
});
|
|
139
|
-
lastPercent = percent;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
case 27:
|
|
143
|
-
_context.next = 15;
|
|
144
|
-
break;
|
|
145
|
-
|
|
146
|
-
case 29:
|
|
147
|
-
destroy();
|
|
148
|
-
progress == null ? void 0 : progress({
|
|
149
|
-
percent: 1,
|
|
150
|
-
total: total,
|
|
151
|
-
current: total
|
|
152
|
-
});
|
|
153
|
-
return _context.abrupt("return", {
|
|
154
|
-
data: final.slice(0, total),
|
|
155
|
-
md5Encrypted: sparkEncrypted.end(),
|
|
156
|
-
md5: spark.end()
|
|
157
|
-
});
|
|
61
|
+
export const CHUNK_SIZE = 8192;
|
|
62
|
+
export async function encryptSecretstream(key, data, progress, abort) {
|
|
63
|
+
await setup();
|
|
64
|
+
const {
|
|
65
|
+
encrypt: crypt,
|
|
66
|
+
destroy,
|
|
67
|
+
header
|
|
68
|
+
} = encrypt(key);
|
|
69
|
+
const cryptedChunk = CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;
|
|
70
|
+
const max = Math.ceil(data.byteLength / CHUNK_SIZE) * cryptedChunk + header.byteLength;
|
|
71
|
+
progress == null ? void 0 : progress({
|
|
72
|
+
percent: 0,
|
|
73
|
+
total: max,
|
|
74
|
+
current: 0
|
|
75
|
+
});
|
|
76
|
+
const final = new Uint8Array(max);
|
|
77
|
+
const sparkEncrypted = new SparkMD5.ArrayBuffer();
|
|
78
|
+
const spark = new SparkMD5.ArrayBuffer();
|
|
79
|
+
final.set(header);
|
|
80
|
+
sparkEncrypted.append(header);
|
|
81
|
+
let total = header.byteLength;
|
|
82
|
+
progress == null ? void 0 : progress({
|
|
83
|
+
percent: total / max,
|
|
84
|
+
total: max,
|
|
85
|
+
current: total
|
|
86
|
+
});
|
|
87
|
+
let lastPercent = total / max;
|
|
88
|
+
|
|
89
|
+
for (const chunk of chunks(data, CHUNK_SIZE)) {
|
|
90
|
+
if (abort != null && abort.signal.aborted) {
|
|
91
|
+
throw new Error("Encrypt aborted");
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
spark.append(chunk);
|
|
95
|
+
const tag = chunk.length < CHUNK_SIZE ? sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL : sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE;
|
|
96
|
+
const crypted = crypt(tag, chunk);
|
|
97
|
+
sparkEncrypted.append(crypted);
|
|
98
|
+
final.set(crypted, total);
|
|
99
|
+
total += crypted.byteLength;
|
|
100
|
+
const percent = total / max;
|
|
101
|
+
|
|
102
|
+
if (percent > lastPercent + 0.01) {
|
|
103
|
+
progress == null ? void 0 : progress({
|
|
104
|
+
percent,
|
|
105
|
+
total: max,
|
|
106
|
+
current: total
|
|
107
|
+
});
|
|
108
|
+
lastPercent = percent;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
158
111
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
112
|
+
destroy();
|
|
113
|
+
progress == null ? void 0 : progress({
|
|
114
|
+
percent: 1,
|
|
115
|
+
total,
|
|
116
|
+
current: total
|
|
117
|
+
});
|
|
118
|
+
return {
|
|
119
|
+
data: final.slice(0, total),
|
|
120
|
+
md5Encrypted: sparkEncrypted.end(),
|
|
121
|
+
md5: spark.end()
|
|
122
|
+
};
|
|
167
123
|
}
|
|
124
|
+
export async function decryptSecretstream(key, data, progress, abort) {
|
|
125
|
+
await setup();
|
|
126
|
+
const header = data.slice(0, sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);
|
|
127
|
+
data = data.slice(sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);
|
|
128
|
+
const {
|
|
129
|
+
decrypt: decryptt,
|
|
130
|
+
destroy
|
|
131
|
+
} = decrypt(header, key);
|
|
132
|
+
const chunkSize = CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;
|
|
133
|
+
const max = Math.ceil(data.byteLength / chunkSize) * CHUNK_SIZE;
|
|
134
|
+
progress == null ? void 0 : progress({
|
|
135
|
+
percent: 0,
|
|
136
|
+
total: max,
|
|
137
|
+
current: 0
|
|
138
|
+
});
|
|
139
|
+
const final = new Uint8Array(max);
|
|
140
|
+
let total = 0;
|
|
141
|
+
let lastPercent = total / max;
|
|
142
|
+
|
|
143
|
+
for (const chunk of chunks(data, chunkSize)) {
|
|
144
|
+
if (abort != null && abort.signal.aborted) {
|
|
145
|
+
throw new Error("Decrypt aborted");
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const tmp = decryptt(chunk);
|
|
149
|
+
final.set(tmp.message, total);
|
|
150
|
+
total += tmp.message.byteLength;
|
|
151
|
+
const percent = total / max;
|
|
152
|
+
|
|
153
|
+
if (percent > lastPercent + 0.01) {
|
|
154
|
+
progress == null ? void 0 : progress({
|
|
155
|
+
percent,
|
|
156
|
+
total: max,
|
|
157
|
+
current: total
|
|
158
|
+
});
|
|
159
|
+
lastPercent = percent;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
168
162
|
|
|
169
|
-
|
|
170
|
-
|
|
163
|
+
destroy();
|
|
164
|
+
progress == null ? void 0 : progress({
|
|
165
|
+
percent: 1,
|
|
166
|
+
total,
|
|
167
|
+
current: total
|
|
168
|
+
});
|
|
169
|
+
return final.slice(0, total);
|
|
171
170
|
} // async function mainSecretstream(random: Uint8Array): Promise<void> {
|
|
172
171
|
// const key = secretstreamKeygen();
|
|
173
172
|
// console.time("secretstream_encrypt");
|
|
@@ -208,84 +207,4 @@ export function decryptSecretstream(_x5, _x6, _x7, _x8) {
|
|
|
208
207
|
// await Promise.all([mainSecretstream(random), mainSecretbox(random)]);
|
|
209
208
|
// }
|
|
210
209
|
// main();
|
|
211
|
-
|
|
212
|
-
function _decryptSecretstream() {
|
|
213
|
-
_decryptSecretstream = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(key, data, progress, abort) {
|
|
214
|
-
var header, _decrypt, decryptt, destroy, chunkSize, max, final, total, lastPercent, _iterator2, _step2, chunk, tmp, percent;
|
|
215
|
-
|
|
216
|
-
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
217
|
-
while (1) {
|
|
218
|
-
switch (_context2.prev = _context2.next) {
|
|
219
|
-
case 0:
|
|
220
|
-
_context2.next = 2;
|
|
221
|
-
return setup();
|
|
222
|
-
|
|
223
|
-
case 2:
|
|
224
|
-
header = data.slice(0, sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);
|
|
225
|
-
data = data.slice(sodium.crypto_secretstream_xchacha20poly1305_HEADERBYTES);
|
|
226
|
-
_decrypt = decrypt(header, key), decryptt = _decrypt.decrypt, destroy = _decrypt.destroy;
|
|
227
|
-
chunkSize = CHUNK_SIZE + sodium.crypto_secretstream_xchacha20poly1305_ABYTES;
|
|
228
|
-
max = Math.ceil(data.byteLength / chunkSize) * CHUNK_SIZE;
|
|
229
|
-
progress == null ? void 0 : progress({
|
|
230
|
-
percent: 0,
|
|
231
|
-
total: max,
|
|
232
|
-
current: 0
|
|
233
|
-
});
|
|
234
|
-
final = new Uint8Array(max);
|
|
235
|
-
total = 0;
|
|
236
|
-
lastPercent = total / max;
|
|
237
|
-
_iterator2 = _createForOfIteratorHelperLoose(chunks(data, chunkSize));
|
|
238
|
-
|
|
239
|
-
case 12:
|
|
240
|
-
if ((_step2 = _iterator2()).done) {
|
|
241
|
-
_context2.next = 23;
|
|
242
|
-
break;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
chunk = _step2.value;
|
|
246
|
-
|
|
247
|
-
if (!(abort != null && abort.signal.aborted)) {
|
|
248
|
-
_context2.next = 16;
|
|
249
|
-
break;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
throw new Error("Decrypt aborted");
|
|
253
|
-
|
|
254
|
-
case 16:
|
|
255
|
-
tmp = decryptt(chunk);
|
|
256
|
-
final.set(tmp.message, total);
|
|
257
|
-
total += tmp.message.byteLength;
|
|
258
|
-
percent = total / max;
|
|
259
|
-
|
|
260
|
-
if (percent > lastPercent + 0.01) {
|
|
261
|
-
progress == null ? void 0 : progress({
|
|
262
|
-
percent: percent,
|
|
263
|
-
total: max,
|
|
264
|
-
current: total
|
|
265
|
-
});
|
|
266
|
-
lastPercent = percent;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
case 21:
|
|
270
|
-
_context2.next = 12;
|
|
271
|
-
break;
|
|
272
|
-
|
|
273
|
-
case 23:
|
|
274
|
-
destroy();
|
|
275
|
-
progress == null ? void 0 : progress({
|
|
276
|
-
percent: 1,
|
|
277
|
-
total: total,
|
|
278
|
-
current: total
|
|
279
|
-
});
|
|
280
|
-
return _context2.abrupt("return", final.slice(0, total));
|
|
281
|
-
|
|
282
|
-
case 26:
|
|
283
|
-
case "end":
|
|
284
|
-
return _context2.stop();
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
}, _callee2);
|
|
288
|
-
}));
|
|
289
|
-
return _decryptSecretstream.apply(this, arguments);
|
|
290
|
-
}
|
|
291
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jcnlwdG8vZmlsZS50cyJdLCJuYW1lcyI6WyJzZXR1cCIsInNvZGl1bSIsIlNwYXJrTUQ1IiwiY2h1bmtzIiwiYXNzZXJ0IiwiYyIsIm1lc3NhZ2UiLCJFcnJvciIsInNlY3JldHN0cmVhbUtleWdlbiIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfa2V5Z2VuIiwiZW5jcnlwdCIsImtleSIsImRlc3Ryb3llZCIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfaW5pdF9wdXNoIiwic3RhdGUiLCJoZWFkZXIiLCJ0YWciLCJwbGFpbnRleHQiLCJjcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X3B1c2giLCJkZXN0cm95IiwiZGVjcnlwdCIsImJ5dGVMZW5ndGgiLCJjcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X0hFQURFUkJZVEVTIiwiY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9LRVlCWVRFUyIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfaW5pdF9wdWxsIiwiY2lwaGVydGV4dCIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfcHVsbCIsIkNIVU5LX1NJWkUiLCJlbmNyeXB0U2VjcmV0c3RyZWFtIiwiZGF0YSIsInByb2dyZXNzIiwiYWJvcnQiLCJjcnlwdCIsImNyeXB0ZWRDaHVuayIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfQUJZVEVTIiwibWF4IiwiTWF0aCIsImNlaWwiLCJwZXJjZW50IiwidG90YWwiLCJjdXJyZW50IiwiZmluYWwiLCJVaW50OEFycmF5Iiwic3BhcmtFbmNyeXB0ZWQiLCJBcnJheUJ1ZmZlciIsInNwYXJrIiwic2V0IiwiYXBwZW5kIiwibGFzdFBlcmNlbnQiLCJjaHVuayIsInNpZ25hbCIsImFib3J0ZWQiLCJsZW5ndGgiLCJjcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X1RBR19GSU5BTCIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfVEFHX01FU1NBR0UiLCJjcnlwdGVkIiwic2xpY2UiLCJtZDVFbmNyeXB0ZWQiLCJlbmQiLCJtZDUiLCJkZWNyeXB0U2VjcmV0c3RyZWFtIiwiZGVjcnlwdHQiLCJjaHVua1NpemUiLCJ0bXAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLFNBQVNBLEtBQVQsRUFBZ0JDLE1BQWhCLFFBQThCLGNBQTlCO0FBQ0EsT0FBT0MsUUFBUCxNQUFxQixXQUFyQjtBQUNBLFNBQVNDLE1BQVQsUUFBdUIsYUFBdkI7O0FBUUEsU0FBU0MsTUFBVCxDQUFnQkMsQ0FBaEIsRUFBNEJDLE9BQTVCLEVBQW1EO0FBQ2pELE1BQUksQ0FBQ0QsQ0FBTCxFQUFRO0FBQ04sVUFBTSxJQUFJRSxLQUFKLENBQVVELE9BQVYsQ0FBTjtBQUNEO0FBQ0Y7O0FBTUQsT0FBTyxTQUFTRSxrQkFBVCxHQUEwQztBQUMvQyxTQUFPUCxNQUFNLENBQUNRLDRDQUFQLEVBQVA7QUFDRDs7QUFFRCxTQUFTQyxPQUFULENBQWlCQyxHQUFqQixFQUlFO0FBQ0EsTUFBSUMsU0FBUyxHQUFHLEtBQWhCOztBQUNBLDhCQUNFWCxNQUFNLENBQUNZLCtDQUFQLENBQXVERixHQUF2RCxDQURGO0FBQUEsTUFBUUcsS0FBUix5QkFBUUEsS0FBUjtBQUFBLE1BQWVDLE1BQWYseUJBQWVBLE1BQWY7O0FBR0EsTUFBTUwsT0FBa0IsR0FBRyxTQUFyQkEsT0FBcUIsQ0FBQ00sR0FBRCxFQUFNQyxTQUFOLEVBQW9CO0FBQzdDYixJQUFBQSxNQUFNLENBQUNRLFNBQVMsS0FBSyxLQUFmLEVBQXNCLHlCQUF0QixDQUFOO0FBRUEsV0FBT1gsTUFBTSxDQUFDaUIsMENBQVAsQ0FDTEosS0FESyxFQUVMRyxTQUZLLEVBR0wsSUFISyxFQUlMRCxHQUpLLENBQVA7QUFNRCxHQVREOztBQVdBLFdBQVNHLE9BQVQsR0FBeUI7QUFDdkJmLElBQUFBLE1BQU0sQ0FBQ1EsU0FBUyxLQUFLLEtBQWYsRUFBc0IseUJBQXRCLENBQU47QUFDQUEsSUFBQUEsU0FBUyxHQUFHLElBQVo7QUFDRDs7QUFFRCxTQUFPO0FBQ0xGLElBQUFBLE9BQU8sRUFBUEEsT0FESztBQUVMUyxJQUFBQSxPQUFPLEVBQVBBLE9BRks7QUFHTEosSUFBQUEsTUFBTSxFQUFOQTtBQUhLLEdBQVA7QUFLRDs7QUFFRCxTQUFTSyxPQUFULENBQ0VMLE1BREYsRUFFRUosR0FGRixFQU1FO0FBQ0FQLEVBQUFBLE1BQU0sQ0FDSlcsTUFBTSxDQUFDTSxVQUFQLElBQ0VwQixNQUFNLENBQUNxQixpREFGTCw0Q0FHb0NyQixNQUFNLENBQUNxQixpREFIM0MsWUFBTjtBQUtBbEIsRUFBQUEsTUFBTSxDQUNKTyxHQUFHLENBQUNVLFVBQUosSUFBa0JwQixNQUFNLENBQUNzQiw4Q0FEckIsc0NBRThCdEIsTUFBTSxDQUFDc0IsOENBRnJDLFlBQU47QUFLQSxNQUFJWCxTQUFTLEdBQUcsS0FBaEI7QUFDQSxNQUFNRSxLQUFLLEdBQUdiLE1BQU0sQ0FBQ3VCLCtDQUFQLENBQ1pULE1BRFksRUFFWkosR0FGWSxDQUFkOztBQUtBLE1BQU1TLE9BQWtCLEdBQUcsU0FBckJBLE9BQXFCLENBQUFLLFVBQVUsRUFBSTtBQUN2Q3JCLElBQUFBLE1BQU0sQ0FBQ1EsU0FBUyxLQUFLLEtBQWYsRUFBc0IseUJBQXRCLENBQU47QUFFQSxXQUFPWCxNQUFNLENBQUN5QiwwQ0FBUCxDQUFrRFosS0FBbEQsRUFBeURXLFVBQXpELENBQVA7QUFDRCxHQUpEOztBQU1BLFdBQVNOLE9BQVQsR0FBeUI7QUFDdkJmLElBQUFBLE1BQU0sQ0FBQ1EsU0FBUyxLQUFLLEtBQWYsRUFBc0IseUJBQXRCLENBQU47QUFDQUEsSUFBQUEsU0FBUyxHQUFHLElBQVo7QUFDRDs7QUFFRCxTQUFPO0FBQ0xRLElBQUFBLE9BQU8sRUFBUEEsT0FESztBQUVMRCxJQUFBQSxPQUFPLEVBQVBBO0FBRkssR0FBUDtBQUlEOztBQUVELE9BQU8sSUFBTVEsVUFBVSxHQUFHLElBQW5CO0FBUVAsZ0JBQXNCQyxtQkFBdEI7QUFBQTtBQUFBOzs7a0ZBQU8saUJBQ0xqQixHQURLLEVBRUxrQixJQUZLLEVBR0xDLFFBSEssRUFJTEMsS0FKSztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFNQy9CLEtBQUssRUFOTjs7QUFBQTtBQUFBLHVCQU91Q1UsT0FBTyxDQUFDQyxHQUFELENBUDlDLEVBT1lxQixLQVBaLFlBT0d0QixPQVBILEVBT21CUyxPQVBuQixZQU9tQkEsT0FQbkIsRUFPNEJKLE1BUDVCLFlBTzRCQSxNQVA1QjtBQVFDa0IsWUFBQUEsWUFSRCxHQVNITixVQUFVLEdBQUcxQixNQUFNLENBQUNpQyw0Q0FUakI7QUFVQ0MsWUFBQUEsR0FWRCxHQVdIQyxJQUFJLENBQUNDLElBQUwsQ0FBVVIsSUFBSSxDQUFDUixVQUFMLEdBQWtCTSxVQUE1QixJQUEwQ00sWUFBMUMsR0FBeURsQixNQUFNLENBQUNNLFVBWDdEO0FBYUxTLFlBQUFBLFFBQVEsUUFBUixZQUFBQSxRQUFRLENBQUc7QUFDVFEsY0FBQUEsT0FBTyxFQUFFLENBREE7QUFFVEMsY0FBQUEsS0FBSyxFQUFFSixHQUZFO0FBR1RLLGNBQUFBLE9BQU8sRUFBRTtBQUhBLGFBQUgsQ0FBUjtBQUtNQyxZQUFBQSxLQWxCRCxHQWtCUyxJQUFJQyxVQUFKLENBQWVQLEdBQWYsQ0FsQlQ7QUFtQkNRLFlBQUFBLGNBbkJELEdBbUJrQixJQUFJekMsUUFBUSxDQUFDMEMsV0FBYixFQW5CbEI7QUFvQkNDLFlBQUFBLEtBcEJELEdBb0JTLElBQUkzQyxRQUFRLENBQUMwQyxXQUFiLEVBcEJUO0FBc0JMSCxZQUFBQSxLQUFLLENBQUNLLEdBQU4sQ0FBVS9CLE1BQVY7QUFDQTRCLFlBQUFBLGNBQWMsQ0FBQ0ksTUFBZixDQUFzQmhDLE1BQXRCO0FBQ0l3QixZQUFBQSxLQXhCQyxHQXdCT3hCLE1BQU0sQ0FBQ00sVUF4QmQ7QUF5QkxTLFlBQUFBLFFBQVEsUUFBUixZQUFBQSxRQUFRLENBQUc7QUFDVFEsY0FBQUEsT0FBTyxFQUFFQyxLQUFLLEdBQUdKLEdBRFI7QUFFVEksY0FBQUEsS0FBSyxFQUFFSixHQUZFO0FBR1RLLGNBQUFBLE9BQU8sRUFBRUQ7QUFIQSxhQUFILENBQVI7QUFLSVMsWUFBQUEsV0E5QkMsR0E4QmFULEtBQUssR0FBR0osR0E5QnJCO0FBQUEsd0RBZ0NlaEMsTUFBTSxDQUFDMEIsSUFBRCxFQUFPRixVQUFQLENBaENyQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWdDTXNCLFlBQUFBLEtBaENOOztBQUFBLGtCQWlDQ2xCLEtBakNELFlBaUNDQSxLQUFLLENBQUVtQixNQUFQLENBQWNDLE9BakNmO0FBQUE7QUFBQTtBQUFBOztBQUFBLGtCQWtDSyxJQUFJNUMsS0FBSixtQkFsQ0w7O0FBQUE7QUFvQ0hzQyxZQUFBQSxLQUFLLENBQUNFLE1BQU4sQ0FBYUUsS0FBYjtBQUNNakMsWUFBQUEsSUFyQ0gsR0FzQ0RpQyxLQUFLLENBQUNHLE1BQU4sR0FBZXpCLFVBQWYsR0FDSTFCLE1BQU0sQ0FBQ29ELCtDQURYLEdBRUlwRCxNQUFNLENBQUNxRCxpREF4Q1Y7QUF5Q0dDLFlBQUFBLE9BekNILEdBeUNhdkIsS0FBSyxDQUFDaEIsSUFBRCxFQUFNaUMsS0FBTixDQXpDbEI7QUEwQ0hOLFlBQUFBLGNBQWMsQ0FBQ0ksTUFBZixDQUFzQlEsT0FBdEI7QUFDQWQsWUFBQUEsS0FBSyxDQUFDSyxHQUFOLENBQVVTLE9BQVYsRUFBbUJoQixLQUFuQjtBQUNBQSxZQUFBQSxLQUFLLElBQUlnQixPQUFPLENBQUNsQyxVQUFqQjtBQUNNaUIsWUFBQUEsT0E3Q0gsR0E2Q2FDLEtBQUssR0FBR0osR0E3Q3JCOztBQThDSCxnQkFBSUcsT0FBTyxHQUFHVSxXQUFXLEdBQUcsSUFBNUIsRUFBa0M7QUFDaENsQixjQUFBQSxRQUFRLFFBQVIsWUFBQUEsUUFBUSxDQUFHO0FBQ1RRLGdCQUFBQSxPQUFPLEVBQVBBLE9BRFM7QUFFVEMsZ0JBQUFBLEtBQUssRUFBRUosR0FGRTtBQUdUSyxnQkFBQUEsT0FBTyxFQUFFRDtBQUhBLGVBQUgsQ0FBUjtBQUtBUyxjQUFBQSxXQUFXLEdBQUdWLE9BQWQ7QUFDRDs7QUFyREU7QUFBQTtBQUFBOztBQUFBO0FBd0RMbkIsWUFBQUEsT0FBTztBQUNQVyxZQUFBQSxRQUFRLFFBQVIsWUFBQUEsUUFBUSxDQUFHO0FBQ1RRLGNBQUFBLE9BQU8sRUFBRSxDQURBO0FBRVRDLGNBQUFBLEtBQUssRUFBTEEsS0FGUztBQUdUQyxjQUFBQSxPQUFPLEVBQUVEO0FBSEEsYUFBSCxDQUFSO0FBekRLLDZDQThERTtBQUNMVixjQUFBQSxJQUFJLEVBQUVZLEtBQUssQ0FBQ2UsS0FBTixDQUFZLENBQVosRUFBZWpCLEtBQWYsQ0FERDtBQUVMa0IsY0FBQUEsWUFBWSxFQUFFZCxjQUFjLENBQUNlLEdBQWYsRUFGVDtBQUdMQyxjQUFBQSxHQUFHLEVBQUVkLEtBQUssQ0FBQ2EsR0FBTjtBQUhBLGFBOURGOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEc7Ozs7QUFxRVAsZ0JBQXNCRSxtQkFBdEI7QUFBQTtBQUFBLEMsQ0F1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7OztrRkFoR08sa0JBQ0xqRCxHQURLLEVBRUxrQixJQUZLLEVBR0xDLFFBSEssRUFJTEMsS0FKSztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFNQy9CLEtBQUssRUFOTjs7QUFBQTtBQU9DZSxZQUFBQSxNQVBELEdBT1VjLElBQUksQ0FBQzJCLEtBQUwsQ0FDYixDQURhLEVBRWJ2RCxNQUFNLENBQUNxQixpREFGTSxDQVBWO0FBV0xPLFlBQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDMkIsS0FBTCxDQUFXdkQsTUFBTSxDQUFDcUIsaURBQWxCLENBQVA7QUFYSyx1QkFha0NGLE9BQU8sQ0FBQ0wsTUFBRCxFQUFTSixHQUFULENBYnpDLEVBYVlrRCxRQWJaLFlBYUd6QyxPQWJILEVBYXNCRCxPQWJ0QixZQWFzQkEsT0FidEI7QUFjQzJDLFlBQUFBLFNBZEQsR0FlSG5DLFVBQVUsR0FBRzFCLE1BQU0sQ0FBQ2lDLDRDQWZqQjtBQWdCQ0MsWUFBQUEsR0FoQkQsR0FnQk9DLElBQUksQ0FBQ0MsSUFBTCxDQUFVUixJQUFJLENBQUNSLFVBQUwsR0FBa0J5QyxTQUE1QixJQUF5Q25DLFVBaEJoRDtBQWtCTEcsWUFBQUEsUUFBUSxRQUFSLFlBQUFBLFFBQVEsQ0FBRztBQUNUUSxjQUFBQSxPQUFPLEVBQUUsQ0FEQTtBQUVUQyxjQUFBQSxLQUFLLEVBQUVKLEdBRkU7QUFHVEssY0FBQUEsT0FBTyxFQUFFO0FBSEEsYUFBSCxDQUFSO0FBS01DLFlBQUFBLEtBdkJELEdBdUJTLElBQUlDLFVBQUosQ0FBZVAsR0FBZixDQXZCVDtBQXdCREksWUFBQUEsS0F4QkMsR0F3Qk8sQ0F4QlA7QUEwQkRTLFlBQUFBLFdBMUJDLEdBMEJhVCxLQUFLLEdBQUdKLEdBMUJyQjtBQUFBLHlEQTRCZWhDLE1BQU0sQ0FBQzBCLElBQUQsRUFBT2lDLFNBQVAsQ0E1QnJCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBNEJNYixZQUFBQSxLQTVCTjs7QUFBQSxrQkE2QkNsQixLQTdCRCxZQTZCQ0EsS0FBSyxDQUFFbUIsTUFBUCxDQUFjQyxPQTdCZjtBQUFBO0FBQUE7QUFBQTs7QUFBQSxrQkE4QkssSUFBSTVDLEtBQUosbUJBOUJMOztBQUFBO0FBZ0NHd0QsWUFBQUEsR0FoQ0gsR0FnQ1NGLFFBQVEsQ0FBQ1osS0FBRCxDQWhDakI7QUFpQ0hSLFlBQUFBLEtBQUssQ0FBQ0ssR0FBTixDQUFVaUIsR0FBRyxDQUFDekQsT0FBZCxFQUF1QmlDLEtBQXZCO0FBQ0FBLFlBQUFBLEtBQUssSUFBSXdCLEdBQUcsQ0FBQ3pELE9BQUosQ0FBWWUsVUFBckI7QUFDTWlCLFlBQUFBLE9BbkNILEdBbUNhQyxLQUFLLEdBQUdKLEdBbkNyQjs7QUFvQ0gsZ0JBQUlHLE9BQU8sR0FBR1UsV0FBVyxHQUFHLElBQTVCLEVBQWtDO0FBQ2hDbEIsY0FBQUEsUUFBUSxRQUFSLFlBQUFBLFFBQVEsQ0FBRztBQUNUUSxnQkFBQUEsT0FBTyxFQUFQQSxPQURTO0FBRVRDLGdCQUFBQSxLQUFLLEVBQUVKLEdBRkU7QUFHVEssZ0JBQUFBLE9BQU8sRUFBRUQ7QUFIQSxlQUFILENBQVI7QUFLQVMsY0FBQUEsV0FBVyxHQUFHVixPQUFkO0FBQ0Q7O0FBM0NFO0FBQUE7QUFBQTs7QUFBQTtBQThDTG5CLFlBQUFBLE9BQU87QUFDUFcsWUFBQUEsUUFBUSxRQUFSLFlBQUFBLFFBQVEsQ0FBRztBQUNUUSxjQUFBQSxPQUFPLEVBQUUsQ0FEQTtBQUVUQyxjQUFBQSxLQUFLLEVBQUxBLEtBRlM7QUFHVEMsY0FBQUEsT0FBTyxFQUFFRDtBQUhBLGFBQUgsQ0FBUjtBQS9DSyw4Q0FvREVFLEtBQUssQ0FBQ2UsS0FBTixDQUFZLENBQVosRUFBZWpCLEtBQWYsQ0FwREY7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWVzc2FnZVRhZyB9IGZyb20gXCJsaWJzb2RpdW0td3JhcHBlcnNcIjtcbmltcG9ydCB7IHNldHVwLCBzb2RpdW0gfSBmcm9tIFwiLi4vc29kaXVtLmpzXCI7XG5pbXBvcnQgU3BhcmtNRDUgZnJvbSBcInNwYXJrLW1kNVwiO1xuaW1wb3J0IHsgY2h1bmtzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEVuY3J5cHRlZEZpbGUgPSB7XG4gIGRhdGE6IFVpbnQ4QXJyYXk7XG4gIG1kNTogc3RyaW5nO1xuICBtZDVFbmNyeXB0ZWQ6IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGFzc2VydChjOiBib29sZWFuLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFjKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG59XG5cbnR5cGUgRW5jcnlwdEZuID0gKHRhZzogbnVtYmVyLCBwbGFpbnRleHQ6IFVpbnQ4QXJyYXkpID0+IFVpbnQ4QXJyYXk7XG5cbnR5cGUgRGVjcnlwdEZuID0gKGNpcGhlcnRleHQ6IFVpbnQ4QXJyYXkpID0+IE1lc3NhZ2VUYWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNyZXRzdHJlYW1LZXlnZW4oKTogVWludDhBcnJheSB7XG4gIHJldHVybiBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9rZXlnZW4oKTtcbn1cblxuZnVuY3Rpb24gZW5jcnlwdChrZXk6IFVpbnQ4QXJyYXkpOiB7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIGVuY3J5cHQ6IEVuY3J5cHRGbjtcbiAgaGVhZGVyOiBVaW50OEFycmF5O1xufSB7XG4gIGxldCBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgY29uc3QgeyBzdGF0ZSwgaGVhZGVyIH0gPVxuICAgIHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X2luaXRfcHVzaChrZXkpO1xuXG4gIGNvbnN0IGVuY3J5cHQ6IEVuY3J5cHRGbiA9ICh0YWcsIHBsYWludGV4dCkgPT4ge1xuICAgIGFzc2VydChkZXN0cm95ZWQgPT09IGZhbHNlLCBcInN0YXRlIGFscmVhZHkgZGVzdHJveWVkXCIpO1xuXG4gICAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X3B1c2goXG4gICAgICBzdGF0ZSxcbiAgICAgIHBsYWludGV4dCxcbiAgICAgIG51bGwsXG4gICAgICB0YWdcbiAgICApO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgYXNzZXJ0KGRlc3Ryb3llZCA9PT0gZmFsc2UsIFwic3RhdGUgYWxyZWFkeSBkZXN0cm95ZWRcIik7XG4gICAgZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW5jcnlwdCxcbiAgICBkZXN0cm95LFxuICAgIGhlYWRlclxuICB9O1xufVxuXG5mdW5jdGlvbiBkZWNyeXB0KFxuICBoZWFkZXI6IFVpbnQ4QXJyYXksXG4gIGtleTogVWludDhBcnJheVxuKToge1xuICBkZXN0cm95OiAoKSA9PiB2b2lkO1xuICBkZWNyeXB0OiBEZWNyeXB0Rm47XG59IHtcbiAgYXNzZXJ0KFxuICAgIGhlYWRlci5ieXRlTGVuZ3RoID49XG4gICAgICBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9IRUFERVJCWVRFUyxcbiAgICBgaGVhZGVyIG11c3QgYmUgYXQgbGVhc3QgSEVBREVSQllURVMgKCR7c29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfSEVBREVSQllURVN9KSBsb25nYFxuICApO1xuICBhc3NlcnQoXG4gICAga2V5LmJ5dGVMZW5ndGggPj0gc29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfS0VZQllURVMsXG4gICAgYGtleSBtdXN0IGJlIGF0IGxlYXN0IEtFWUJZVEVTICgke3NvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X0tFWUJZVEVTfSkgbG9uZ2BcbiAgKTtcblxuICBsZXQgZGVzdHJveWVkID0gZmFsc2U7XG4gIGNvbnN0IHN0YXRlID0gc29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfaW5pdF9wdWxsKFxuICAgIGhlYWRlcixcbiAgICBrZXlcbiAgKTtcblxuICBjb25zdCBkZWNyeXB0OiBEZWNyeXB0Rm4gPSBjaXBoZXJ0ZXh0ID0+IHtcbiAgICBhc3NlcnQoZGVzdHJveWVkID09PSBmYWxzZSwgXCJzdGF0ZSBhbHJlYWR5IGRlc3Ryb3llZFwiKTtcblxuICAgIHJldHVybiBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9wdWxsKHN0YXRlLCBjaXBoZXJ0ZXh0KTtcbiAgfTtcblxuICBmdW5jdGlvbiBkZXN0cm95KCk6IHZvaWQge1xuICAgIGFzc2VydChkZXN0cm95ZWQgPT09IGZhbHNlLCBcInN0YXRlIGFscmVhZHkgZGVzdHJveWVkXCIpO1xuICAgIGRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRlY3J5cHQsXG4gICAgZGVzdHJveVxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgQ0hVTktfU0laRSA9IDgxOTI7XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzID0ge1xuICBwZXJjZW50OiBudW1iZXI7XG4gIHRvdGFsOiBudW1iZXI7XG4gIGN1cnJlbnQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0U2VjcmV0c3RyZWFtKFxuICBrZXk6IFVpbnQ4QXJyYXksXG4gIGRhdGE6IFVpbnQ4QXJyYXksXG4gIHByb2dyZXNzPzogKHByb2dyZXNzOiBQcm9ncmVzcykgPT4gUHJvbWlzZTx2b2lkPixcbiAgYWJvcnQ/OiBBYm9ydENvbnRyb2xsZXJcbik6IFByb21pc2U8RW5jcnlwdGVkRmlsZT4ge1xuICBhd2FpdCBzZXR1cCgpO1xuICBjb25zdCB7IGVuY3J5cHQ6IGNyeXB0LCBkZXN0cm95LCBoZWFkZXIgfSA9IGVuY3J5cHQoa2V5KTtcbiAgY29uc3QgY3J5cHRlZENodW5rID1cbiAgICBDSFVOS19TSVpFICsgc29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfQUJZVEVTO1xuICBjb25zdCBtYXggPVxuICAgIE1hdGguY2VpbChkYXRhLmJ5dGVMZW5ndGggLyBDSFVOS19TSVpFKSAqIGNyeXB0ZWRDaHVuayArIGhlYWRlci5ieXRlTGVuZ3RoO1xuXG4gIHByb2dyZXNzPy4oe1xuICAgIHBlcmNlbnQ6IDAsXG4gICAgdG90YWw6IG1heCxcbiAgICBjdXJyZW50OiAwXG4gIH0pO1xuICBjb25zdCBmaW5hbCA9IG5ldyBVaW50OEFycmF5KG1heCk7XG4gIGNvbnN0IHNwYXJrRW5jcnlwdGVkID0gbmV3IFNwYXJrTUQ1LkFycmF5QnVmZmVyKCk7XG4gIGNvbnN0IHNwYXJrID0gbmV3IFNwYXJrTUQ1LkFycmF5QnVmZmVyKCk7XG5cbiAgZmluYWwuc2V0KGhlYWRlcik7XG4gIHNwYXJrRW5jcnlwdGVkLmFwcGVuZChoZWFkZXIpO1xuICBsZXQgdG90YWwgPSBoZWFkZXIuYnl0ZUxlbmd0aDtcbiAgcHJvZ3Jlc3M/Lih7XG4gICAgcGVyY2VudDogdG90YWwgLyBtYXgsXG4gICAgdG90YWw6IG1heCxcbiAgICBjdXJyZW50OiB0b3RhbFxuICB9KTtcbiAgbGV0IGxhc3RQZXJjZW50ID0gdG90YWwgLyBtYXg7XG5cbiAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MoZGF0YSwgQ0hVTktfU0laRSkpIHtcbiAgICBpZiAoYWJvcnQ/LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuY3J5cHQgYWJvcnRlZGApO1xuICAgIH1cbiAgICBzcGFyay5hcHBlbmQoY2h1bmspO1xuICAgIGNvbnN0IHRhZyA9XG4gICAgICBjaHVuay5sZW5ndGggPCBDSFVOS19TSVpFXG4gICAgICAgID8gc29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfVEFHX0ZJTkFMXG4gICAgICAgIDogc29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfVEFHX01FU1NBR0U7XG4gICAgY29uc3QgY3J5cHRlZCA9IGNyeXB0KHRhZywgY2h1bmspO1xuICAgIHNwYXJrRW5jcnlwdGVkLmFwcGVuZChjcnlwdGVkKTtcbiAgICBmaW5hbC5zZXQoY3J5cHRlZCwgdG90YWwpO1xuICAgIHRvdGFsICs9IGNyeXB0ZWQuYnl0ZUxlbmd0aDtcbiAgICBjb25zdCBwZXJjZW50ID0gdG90YWwgLyBtYXg7XG4gICAgaWYgKHBlcmNlbnQgPiBsYXN0UGVyY2VudCArIDAuMDEpIHtcbiAgICAgIHByb2dyZXNzPy4oe1xuICAgICAgICBwZXJjZW50LFxuICAgICAgICB0b3RhbDogbWF4LFxuICAgICAgICBjdXJyZW50OiB0b3RhbFxuICAgICAgfSk7XG4gICAgICBsYXN0UGVyY2VudCA9IHBlcmNlbnQ7XG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSgpO1xuICBwcm9ncmVzcz8uKHtcbiAgICBwZXJjZW50OiAxLFxuICAgIHRvdGFsLFxuICAgIGN1cnJlbnQ6IHRvdGFsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGRhdGE6IGZpbmFsLnNsaWNlKDAsIHRvdGFsKSxcbiAgICBtZDVFbmNyeXB0ZWQ6IHNwYXJrRW5jcnlwdGVkLmVuZCgpLFxuICAgIG1kNTogc3BhcmsuZW5kKClcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHRTZWNyZXRzdHJlYW0oXG4gIGtleTogVWludDhBcnJheSxcbiAgZGF0YTogVWludDhBcnJheSxcbiAgcHJvZ3Jlc3M/OiAocHJvZ3Jlc3M6IFByb2dyZXNzKSA9PiBQcm9taXNlPHZvaWQ+LFxuICBhYm9ydD86IEFib3J0Q29udHJvbGxlclxuKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGF3YWl0IHNldHVwKCk7XG4gIGNvbnN0IGhlYWRlciA9IGRhdGEuc2xpY2UoXG4gICAgMCxcbiAgICBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9IRUFERVJCWVRFU1xuICApO1xuICBkYXRhID0gZGF0YS5zbGljZShzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9IRUFERVJCWVRFUyk7XG5cbiAgY29uc3QgeyBkZWNyeXB0OiBkZWNyeXB0dCwgZGVzdHJveSB9ID0gZGVjcnlwdChoZWFkZXIsIGtleSk7XG4gIGNvbnN0IGNodW5rU2l6ZSA9XG4gICAgQ0hVTktfU0laRSArIHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X0FCWVRFUztcbiAgY29uc3QgbWF4ID0gTWF0aC5jZWlsKGRhdGEuYnl0ZUxlbmd0aCAvIGNodW5rU2l6ZSkgKiBDSFVOS19TSVpFO1xuXG4gIHByb2dyZXNzPy4oe1xuICAgIHBlcmNlbnQ6IDAsXG4gICAgdG90YWw6IG1heCxcbiAgICBjdXJyZW50OiAwXG4gIH0pO1xuICBjb25zdCBmaW5hbCA9IG5ldyBVaW50OEFycmF5KG1heCk7XG4gIGxldCB0b3RhbCA9IDA7XG5cbiAgbGV0IGxhc3RQZXJjZW50ID0gdG90YWwgLyBtYXg7XG5cbiAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MoZGF0YSwgY2h1bmtTaXplKSkge1xuICAgIGlmIChhYm9ydD8uc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGVjcnlwdCBhYm9ydGVkYCk7XG4gICAgfVxuICAgIGNvbnN0IHRtcCA9IGRlY3J5cHR0KGNodW5rKTtcbiAgICBmaW5hbC5zZXQodG1wLm1lc3NhZ2UsIHRvdGFsKTtcbiAgICB0b3RhbCArPSB0bXAubWVzc2FnZS5ieXRlTGVuZ3RoO1xuICAgIGNvbnN0IHBlcmNlbnQgPSB0b3RhbCAvIG1heDtcbiAgICBpZiAocGVyY2VudCA+IGxhc3RQZXJjZW50ICsgMC4wMSkge1xuICAgICAgcHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQsXG4gICAgICAgIHRvdGFsOiBtYXgsXG4gICAgICAgIGN1cnJlbnQ6IHRvdGFsXG4gICAgICB9KTtcbiAgICAgIGxhc3RQZXJjZW50ID0gcGVyY2VudDtcbiAgICB9XG4gIH1cblxuICBkZXN0cm95KCk7XG4gIHByb2dyZXNzPy4oe1xuICAgIHBlcmNlbnQ6IDEsXG4gICAgdG90YWwsXG4gICAgY3VycmVudDogdG90YWxcbiAgfSk7XG4gIHJldHVybiBmaW5hbC5zbGljZSgwLCB0b3RhbCk7XG59XG5cbi8vIGFzeW5jIGZ1bmN0aW9uIG1haW5TZWNyZXRzdHJlYW0ocmFuZG9tOiBVaW50OEFycmF5KTogUHJvbWlzZTx2b2lkPiB7XG4vLyAgIGNvbnN0IGtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuLy8gICBjb25zb2xlLnRpbWUoXCJzZWNyZXRzdHJlYW1fZW5jcnlwdFwiKTtcbi8vICAgY29uc3QgY3J5cHRlZCA9IGVuY3J5cHRTZWNyZXRzdHJlYW0oa2V5LCByYW5kb20pO1xuLy8gICBjb25zb2xlLnRpbWVFbmQoXCJzZWNyZXRzdHJlYW1fZW5jcnlwdFwiKTtcbi8vICAgY29uc29sZS50aW1lKFwic2VjcmV0c3RyZWFtX2RlY3J5cHRcIik7XG4vLyAgIGNvbnN0IGRlY3J5cHRlZCA9IGRlY3J5cHRTZWNyZXRzdHJlYW0oa2V5LCBjcnlwdGVkKTtcbi8vICAgY29uc29sZS50aW1lRW5kKFwic2VjcmV0c3RyZWFtX2RlY3J5cHRcIik7XG4vLyAgIGNvbnN0IGZpcnN0ID0gdG9faGV4KHJhbmRvbSkuc2xpY2UoMCwgMzIpO1xuLy8gICBjb25zdCBmaW5hbCA9IHRvX2hleChkZWNyeXB0ZWQpLnNsaWNlKDAsIDMyKTtcbi8vICAgY29uc29sZS5sb2coe1xuLy8gICAgIGZpcnN0LFxuLy8gICAgIGZpbmFsLFxuLy8gICAgIGVxdWFsczogZmlyc3QgPT09IGZpbmFsXG4vLyAgIH0pO1xuLy8gfVxuLy8gYXN5bmMgZnVuY3Rpb24gbWFpblNlY3JldGJveChyYW5kb206IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHZvaWQ+IHtcbi8vICAgY29uc3Qga2V5ID0gZ2VuZXJhdGVTZWNyZXRCb3goKTtcbi8vICAgY29uc29sZS50aW1lKFwic2VjcmV0Ym94X2VuY3J5cHRcIik7XG4vLyAgIGNvbnN0IGNyeXB0ZWQgPSBlbmNyeXB0RmlsZShyYW5kb20sIGtleSk7XG4vLyAgIGNvbnNvbGUudGltZUVuZChcInNlY3JldGJveF9lbmNyeXB0XCIpO1xuLy8gICBjb25zb2xlLnRpbWUoXCJzZWNyZXRib3hfZGVjcnlwdFwiKTtcbi8vICAgY29uc3QgZGVjcnlwdGVkID0gZGVjcnlwdEZpbGUoY3J5cHRlZCwga2V5KTtcbi8vICAgY29uc29sZS50aW1lRW5kKFwic2VjcmV0Ym94X2RlY3J5cHRcIik7XG4vLyAgIGNvbnN0IGZpcnN0ID0gdG9faGV4KHJhbmRvbSkuc2xpY2UoMCwgMzIpO1xuLy8gICBjb25zdCBmaW5hbCA9IHRvX2hleChkZWNyeXB0ZWQpLnNsaWNlKDAsIDMyKTtcbi8vICAgY29uc29sZS5sb2coe1xuLy8gICAgIGZpcnN0LFxuLy8gICAgIGZpbmFsLFxuLy8gICAgIGVxdWFsczogZmlyc3QgPT09IGZpbmFsXG4vLyAgIH0pO1xuLy8gfVxuXG4vLyBhc3luYyBmdW5jdGlvbiBtYWluKCk6IFByb21pc2U8dm9pZD4ge1xuLy8gICBhd2FpdCByZWFkeTtcbi8vICAgY29uc29sZS50aW1lKFwicmFuZG9tYnl0ZXNfYnVmXCIpO1xuLy8gICBjb25zdCByYW5kb20gPSByYW5kb21ieXRlc19idWYoMV8wMDBfMDAwICogMTAyNCk7XG4vLyAgIGNvbnNvbGUudGltZUVuZChcInJhbmRvbWJ5dGVzX2J1ZlwiKTtcbi8vICAgYXdhaXQgUHJvbWlzZS5hbGwoW21haW5TZWNyZXRzdHJlYW0ocmFuZG9tKSwgbWFpblNlY3JldGJveChyYW5kb20pXSk7XG4vLyB9XG5cbi8vIG1haW4oKTtcbiJdfQ==
|
|
210
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZXR1cCIsInNvZGl1bSIsIlNwYXJrTUQ1IiwiY2h1bmtzIiwiYXNzZXJ0IiwiYyIsIm1lc3NhZ2UiLCJFcnJvciIsInNlY3JldHN0cmVhbUtleWdlbiIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfa2V5Z2VuIiwiZW5jcnlwdCIsImtleSIsImRlc3Ryb3llZCIsInN0YXRlIiwiaGVhZGVyIiwiY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9pbml0X3B1c2giLCJ0YWciLCJwbGFpbnRleHQiLCJjcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X3B1c2giLCJkZXN0cm95IiwiZGVjcnlwdCIsImJ5dGVMZW5ndGgiLCJjcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X0hFQURFUkJZVEVTIiwiY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9LRVlCWVRFUyIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfaW5pdF9wdWxsIiwiY2lwaGVydGV4dCIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfcHVsbCIsIkNIVU5LX1NJWkUiLCJlbmNyeXB0U2VjcmV0c3RyZWFtIiwiZGF0YSIsInByb2dyZXNzIiwiYWJvcnQiLCJjcnlwdCIsImNyeXB0ZWRDaHVuayIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfQUJZVEVTIiwibWF4IiwiTWF0aCIsImNlaWwiLCJwZXJjZW50IiwidG90YWwiLCJjdXJyZW50IiwiZmluYWwiLCJVaW50OEFycmF5Iiwic3BhcmtFbmNyeXB0ZWQiLCJBcnJheUJ1ZmZlciIsInNwYXJrIiwic2V0IiwiYXBwZW5kIiwibGFzdFBlcmNlbnQiLCJjaHVuayIsInNpZ25hbCIsImFib3J0ZWQiLCJsZW5ndGgiLCJjcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X1RBR19GSU5BTCIsImNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfVEFHX01FU1NBR0UiLCJjcnlwdGVkIiwic2xpY2UiLCJtZDVFbmNyeXB0ZWQiLCJlbmQiLCJtZDUiLCJkZWNyeXB0U2VjcmV0c3RyZWFtIiwiZGVjcnlwdHQiLCJjaHVua1NpemUiLCJ0bXAiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY3J5cHRvL2ZpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNZXNzYWdlVGFnIH0gZnJvbSBcImxpYnNvZGl1bS13cmFwcGVyc1wiO1xuaW1wb3J0IHsgc2V0dXAsIHNvZGl1bSB9IGZyb20gXCIuLi9zb2RpdW0uanNcIjtcbmltcG9ydCBTcGFya01ENSBmcm9tIFwic3BhcmstbWQ1XCI7XG5pbXBvcnQgeyBjaHVua3MgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHMuanNcIjtcblxuZXhwb3J0IHR5cGUgRW5jcnlwdGVkRmlsZSA9IHtcbiAgZGF0YTogVWludDhBcnJheTtcbiAgbWQ1OiBzdHJpbmc7XG4gIG1kNUVuY3J5cHRlZDogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0KGM6IGJvb2xlYW4sIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoIWMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH1cbn1cblxudHlwZSBFbmNyeXB0Rm4gPSAodGFnOiBudW1iZXIsIHBsYWludGV4dDogVWludDhBcnJheSkgPT4gVWludDhBcnJheTtcblxudHlwZSBEZWNyeXB0Rm4gPSAoY2lwaGVydGV4dDogVWludDhBcnJheSkgPT4gTWVzc2FnZVRhZztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3JldHN0cmVhbUtleWdlbigpOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X2tleWdlbigpO1xufVxuXG5mdW5jdGlvbiBlbmNyeXB0KGtleTogVWludDhBcnJheSk6IHtcbiAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgZW5jcnlwdDogRW5jcnlwdEZuO1xuICBoZWFkZXI6IFVpbnQ4QXJyYXk7XG59IHtcbiAgbGV0IGRlc3Ryb3llZCA9IGZhbHNlO1xuICBjb25zdCB7IHN0YXRlLCBoZWFkZXIgfSA9XG4gICAgc29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfaW5pdF9wdXNoKGtleSk7XG5cbiAgY29uc3QgZW5jcnlwdDogRW5jcnlwdEZuID0gKHRhZywgcGxhaW50ZXh0KSA9PiB7XG4gICAgYXNzZXJ0KGRlc3Ryb3llZCA9PT0gZmFsc2UsIFwic3RhdGUgYWxyZWFkeSBkZXN0cm95ZWRcIik7XG5cbiAgICByZXR1cm4gc29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfcHVzaChcbiAgICAgIHN0YXRlLFxuICAgICAgcGxhaW50ZXh0LFxuICAgICAgbnVsbCxcbiAgICAgIHRhZ1xuICAgICk7XG4gIH07XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpOiB2b2lkIHtcbiAgICBhc3NlcnQoZGVzdHJveWVkID09PSBmYWxzZSwgXCJzdGF0ZSBhbHJlYWR5IGRlc3Ryb3llZFwiKTtcbiAgICBkZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbmNyeXB0LFxuICAgIGRlc3Ryb3ksXG4gICAgaGVhZGVyXG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlY3J5cHQoXG4gIGhlYWRlcjogVWludDhBcnJheSxcbiAga2V5OiBVaW50OEFycmF5XG4pOiB7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIGRlY3J5cHQ6IERlY3J5cHRGbjtcbn0ge1xuICBhc3NlcnQoXG4gICAgaGVhZGVyLmJ5dGVMZW5ndGggPj1cbiAgICAgIHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X0hFQURFUkJZVEVTLFxuICAgIGBoZWFkZXIgbXVzdCBiZSBhdCBsZWFzdCBIRUFERVJCWVRFUyAoJHtzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9IRUFERVJCWVRFU30pIGxvbmdgXG4gICk7XG4gIGFzc2VydChcbiAgICBrZXkuYnl0ZUxlbmd0aCA+PSBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9LRVlCWVRFUyxcbiAgICBga2V5IG11c3QgYmUgYXQgbGVhc3QgS0VZQllURVMgKCR7c29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfS0VZQllURVN9KSBsb25nYFxuICApO1xuXG4gIGxldCBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgY29uc3Qgc3RhdGUgPSBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9pbml0X3B1bGwoXG4gICAgaGVhZGVyLFxuICAgIGtleVxuICApO1xuXG4gIGNvbnN0IGRlY3J5cHQ6IERlY3J5cHRGbiA9IGNpcGhlcnRleHQgPT4ge1xuICAgIGFzc2VydChkZXN0cm95ZWQgPT09IGZhbHNlLCBcInN0YXRlIGFscmVhZHkgZGVzdHJveWVkXCIpO1xuXG4gICAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X3B1bGwoc3RhdGUsIGNpcGhlcnRleHQpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgYXNzZXJ0KGRlc3Ryb3llZCA9PT0gZmFsc2UsIFwic3RhdGUgYWxyZWFkeSBkZXN0cm95ZWRcIik7XG4gICAgZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGVjcnlwdCxcbiAgICBkZXN0cm95XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBDSFVOS19TSVpFID0gODE5MjtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3MgPSB7XG4gIHBlcmNlbnQ6IG51bWJlcjtcbiAgdG90YWw6IG51bWJlcjtcbiAgY3VycmVudDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY3J5cHRTZWNyZXRzdHJlYW0oXG4gIGtleTogVWludDhBcnJheSxcbiAgZGF0YTogVWludDhBcnJheSxcbiAgcHJvZ3Jlc3M/OiAocHJvZ3Jlc3M6IFByb2dyZXNzKSA9PiBQcm9taXNlPHZvaWQ+LFxuICBhYm9ydD86IEFib3J0Q29udHJvbGxlclxuKTogUHJvbWlzZTxFbmNyeXB0ZWRGaWxlPiB7XG4gIGF3YWl0IHNldHVwKCk7XG4gIGNvbnN0IHsgZW5jcnlwdDogY3J5cHQsIGRlc3Ryb3ksIGhlYWRlciB9ID0gZW5jcnlwdChrZXkpO1xuICBjb25zdCBjcnlwdGVkQ2h1bmsgPVxuICAgIENIVU5LX1NJWkUgKyBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9BQllURVM7XG4gIGNvbnN0IG1heCA9XG4gICAgTWF0aC5jZWlsKGRhdGEuYnl0ZUxlbmd0aCAvIENIVU5LX1NJWkUpICogY3J5cHRlZENodW5rICsgaGVhZGVyLmJ5dGVMZW5ndGg7XG5cbiAgcHJvZ3Jlc3M/Lih7XG4gICAgcGVyY2VudDogMCxcbiAgICB0b3RhbDogbWF4LFxuICAgIGN1cnJlbnQ6IDBcbiAgfSk7XG4gIGNvbnN0IGZpbmFsID0gbmV3IFVpbnQ4QXJyYXkobWF4KTtcbiAgY29uc3Qgc3BhcmtFbmNyeXB0ZWQgPSBuZXcgU3BhcmtNRDUuQXJyYXlCdWZmZXIoKTtcbiAgY29uc3Qgc3BhcmsgPSBuZXcgU3BhcmtNRDUuQXJyYXlCdWZmZXIoKTtcblxuICBmaW5hbC5zZXQoaGVhZGVyKTtcbiAgc3BhcmtFbmNyeXB0ZWQuYXBwZW5kKGhlYWRlcik7XG4gIGxldCB0b3RhbCA9IGhlYWRlci5ieXRlTGVuZ3RoO1xuICBwcm9ncmVzcz8uKHtcbiAgICBwZXJjZW50OiB0b3RhbCAvIG1heCxcbiAgICB0b3RhbDogbWF4LFxuICAgIGN1cnJlbnQ6IHRvdGFsXG4gIH0pO1xuICBsZXQgbGFzdFBlcmNlbnQgPSB0b3RhbCAvIG1heDtcblxuICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcyhkYXRhLCBDSFVOS19TSVpFKSkge1xuICAgIGlmIChhYm9ydD8uc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5jcnlwdCBhYm9ydGVkYCk7XG4gICAgfVxuICAgIHNwYXJrLmFwcGVuZChjaHVuayk7XG4gICAgY29uc3QgdGFnID1cbiAgICAgIGNodW5rLmxlbmd0aCA8IENIVU5LX1NJWkVcbiAgICAgICAgPyBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9UQUdfRklOQUxcbiAgICAgICAgOiBzb2RpdW0uY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9UQUdfTUVTU0FHRTtcbiAgICBjb25zdCBjcnlwdGVkID0gY3J5cHQodGFnLCBjaHVuayk7XG4gICAgc3BhcmtFbmNyeXB0ZWQuYXBwZW5kKGNyeXB0ZWQpO1xuICAgIGZpbmFsLnNldChjcnlwdGVkLCB0b3RhbCk7XG4gICAgdG90YWwgKz0gY3J5cHRlZC5ieXRlTGVuZ3RoO1xuICAgIGNvbnN0IHBlcmNlbnQgPSB0b3RhbCAvIG1heDtcbiAgICBpZiAocGVyY2VudCA+IGxhc3RQZXJjZW50ICsgMC4wMSkge1xuICAgICAgcHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQsXG4gICAgICAgIHRvdGFsOiBtYXgsXG4gICAgICAgIGN1cnJlbnQ6IHRvdGFsXG4gICAgICB9KTtcbiAgICAgIGxhc3RQZXJjZW50ID0gcGVyY2VudDtcbiAgICB9XG4gIH1cblxuICBkZXN0cm95KCk7XG4gIHByb2dyZXNzPy4oe1xuICAgIHBlcmNlbnQ6IDEsXG4gICAgdG90YWwsXG4gICAgY3VycmVudDogdG90YWxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZGF0YTogZmluYWwuc2xpY2UoMCwgdG90YWwpLFxuICAgIG1kNUVuY3J5cHRlZDogc3BhcmtFbmNyeXB0ZWQuZW5kKCksXG4gICAgbWQ1OiBzcGFyay5lbmQoKVxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVjcnlwdFNlY3JldHN0cmVhbShcbiAga2V5OiBVaW50OEFycmF5LFxuICBkYXRhOiBVaW50OEFycmF5LFxuICBwcm9ncmVzcz86IChwcm9ncmVzczogUHJvZ3Jlc3MpID0+IFByb21pc2U8dm9pZD4sXG4gIGFib3J0PzogQWJvcnRDb250cm9sbGVyXG4pOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgYXdhaXQgc2V0dXAoKTtcbiAgY29uc3QgaGVhZGVyID0gZGF0YS5zbGljZShcbiAgICAwLFxuICAgIHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X0hFQURFUkJZVEVTXG4gICk7XG4gIGRhdGEgPSBkYXRhLnNsaWNlKHNvZGl1bS5jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X0hFQURFUkJZVEVTKTtcblxuICBjb25zdCB7IGRlY3J5cHQ6IGRlY3J5cHR0LCBkZXN0cm95IH0gPSBkZWNyeXB0KGhlYWRlciwga2V5KTtcbiAgY29uc3QgY2h1bmtTaXplID1cbiAgICBDSFVOS19TSVpFICsgc29kaXVtLmNyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfQUJZVEVTO1xuICBjb25zdCBtYXggPSBNYXRoLmNlaWwoZGF0YS5ieXRlTGVuZ3RoIC8gY2h1bmtTaXplKSAqIENIVU5LX1NJWkU7XG5cbiAgcHJvZ3Jlc3M/Lih7XG4gICAgcGVyY2VudDogMCxcbiAgICB0b3RhbDogbWF4LFxuICAgIGN1cnJlbnQ6IDBcbiAgfSk7XG4gIGNvbnN0IGZpbmFsID0gbmV3IFVpbnQ4QXJyYXkobWF4KTtcbiAgbGV0IHRvdGFsID0gMDtcblxuICBsZXQgbGFzdFBlcmNlbnQgPSB0b3RhbCAvIG1heDtcblxuICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcyhkYXRhLCBjaHVua1NpemUpKSB7XG4gICAgaWYgKGFib3J0Py5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZWNyeXB0IGFib3J0ZWRgKTtcbiAgICB9XG4gICAgY29uc3QgdG1wID0gZGVjcnlwdHQoY2h1bmspO1xuICAgIGZpbmFsLnNldCh0bXAubWVzc2FnZSwgdG90YWwpO1xuICAgIHRvdGFsICs9IHRtcC5tZXNzYWdlLmJ5dGVMZW5ndGg7XG4gICAgY29uc3QgcGVyY2VudCA9IHRvdGFsIC8gbWF4O1xuICAgIGlmIChwZXJjZW50ID4gbGFzdFBlcmNlbnQgKyAwLjAxKSB7XG4gICAgICBwcm9ncmVzcz8uKHtcbiAgICAgICAgcGVyY2VudCxcbiAgICAgICAgdG90YWw6IG1heCxcbiAgICAgICAgY3VycmVudDogdG90YWxcbiAgICAgIH0pO1xuICAgICAgbGFzdFBlcmNlbnQgPSBwZXJjZW50O1xuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3koKTtcbiAgcHJvZ3Jlc3M/Lih7XG4gICAgcGVyY2VudDogMSxcbiAgICB0b3RhbCxcbiAgICBjdXJyZW50OiB0b3RhbFxuICB9KTtcbiAgcmV0dXJuIGZpbmFsLnNsaWNlKDAsIHRvdGFsKTtcbn1cblxuLy8gYXN5bmMgZnVuY3Rpb24gbWFpblNlY3JldHN0cmVhbShyYW5kb206IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHZvaWQ+IHtcbi8vICAgY29uc3Qga2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4vLyAgIGNvbnNvbGUudGltZShcInNlY3JldHN0cmVhbV9lbmNyeXB0XCIpO1xuLy8gICBjb25zdCBjcnlwdGVkID0gZW5jcnlwdFNlY3JldHN0cmVhbShrZXksIHJhbmRvbSk7XG4vLyAgIGNvbnNvbGUudGltZUVuZChcInNlY3JldHN0cmVhbV9lbmNyeXB0XCIpO1xuLy8gICBjb25zb2xlLnRpbWUoXCJzZWNyZXRzdHJlYW1fZGVjcnlwdFwiKTtcbi8vICAgY29uc3QgZGVjcnlwdGVkID0gZGVjcnlwdFNlY3JldHN0cmVhbShrZXksIGNyeXB0ZWQpO1xuLy8gICBjb25zb2xlLnRpbWVFbmQoXCJzZWNyZXRzdHJlYW1fZGVjcnlwdFwiKTtcbi8vICAgY29uc3QgZmlyc3QgPSB0b19oZXgocmFuZG9tKS5zbGljZSgwLCAzMik7XG4vLyAgIGNvbnN0IGZpbmFsID0gdG9faGV4KGRlY3J5cHRlZCkuc2xpY2UoMCwgMzIpO1xuLy8gICBjb25zb2xlLmxvZyh7XG4vLyAgICAgZmlyc3QsXG4vLyAgICAgZmluYWwsXG4vLyAgICAgZXF1YWxzOiBmaXJzdCA9PT0gZmluYWxcbi8vICAgfSk7XG4vLyB9XG4vLyBhc3luYyBmdW5jdGlvbiBtYWluU2VjcmV0Ym94KHJhbmRvbTogVWludDhBcnJheSk6IFByb21pc2U8dm9pZD4ge1xuLy8gICBjb25zdCBrZXkgPSBnZW5lcmF0ZVNlY3JldEJveCgpO1xuLy8gICBjb25zb2xlLnRpbWUoXCJzZWNyZXRib3hfZW5jcnlwdFwiKTtcbi8vICAgY29uc3QgY3J5cHRlZCA9IGVuY3J5cHRGaWxlKHJhbmRvbSwga2V5KTtcbi8vICAgY29uc29sZS50aW1lRW5kKFwic2VjcmV0Ym94X2VuY3J5cHRcIik7XG4vLyAgIGNvbnNvbGUudGltZShcInNlY3JldGJveF9kZWNyeXB0XCIpO1xuLy8gICBjb25zdCBkZWNyeXB0ZWQgPSBkZWNyeXB0RmlsZShjcnlwdGVkLCBrZXkpO1xuLy8gICBjb25zb2xlLnRpbWVFbmQoXCJzZWNyZXRib3hfZGVjcnlwdFwiKTtcbi8vICAgY29uc3QgZmlyc3QgPSB0b19oZXgocmFuZG9tKS5zbGljZSgwLCAzMik7XG4vLyAgIGNvbnN0IGZpbmFsID0gdG9faGV4KGRlY3J5cHRlZCkuc2xpY2UoMCwgMzIpO1xuLy8gICBjb25zb2xlLmxvZyh7XG4vLyAgICAgZmlyc3QsXG4vLyAgICAgZmluYWwsXG4vLyAgICAgZXF1YWxzOiBmaXJzdCA9PT0gZmluYWxcbi8vICAgfSk7XG4vLyB9XG5cbi8vIGFzeW5jIGZ1bmN0aW9uIG1haW4oKTogUHJvbWlzZTx2b2lkPiB7XG4vLyAgIGF3YWl0IHJlYWR5O1xuLy8gICBjb25zb2xlLnRpbWUoXCJyYW5kb21ieXRlc19idWZcIik7XG4vLyAgIGNvbnN0IHJhbmRvbSA9IHJhbmRvbWJ5dGVzX2J1ZigxXzAwMF8wMDAgKiAxMDI0KTtcbi8vICAgY29uc29sZS50aW1lRW5kKFwicmFuZG9tYnl0ZXNfYnVmXCIpO1xuLy8gICBhd2FpdCBQcm9taXNlLmFsbChbbWFpblNlY3JldHN0cmVhbShyYW5kb20pLCBtYWluU2VjcmV0Ym94KHJhbmRvbSldKTtcbi8vIH1cblxuLy8gbWFpbigpO1xuIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxLQUFULEVBQWdCQyxNQUFoQixRQUE4QixjQUE5QjtBQUNBLE9BQU9DLFFBQVAsTUFBcUIsV0FBckI7QUFDQSxTQUFTQyxNQUFULFFBQXVCLG1CQUF2Qjs7QUFRQSxTQUFTQyxNQUFULENBQWdCQyxDQUFoQixFQUE0QkMsT0FBNUIsRUFBbUQ7RUFDakQsSUFBSSxDQUFDRCxDQUFMLEVBQVE7SUFDTixNQUFNLElBQUlFLEtBQUosQ0FBVUQsT0FBVixDQUFOO0VBQ0Q7QUFDRjs7QUFNRCxPQUFPLFNBQVNFLGtCQUFULEdBQTBDO0VBQy9DLE9BQU9QLE1BQU0sQ0FBQ1EsNENBQVAsRUFBUDtBQUNEOztBQUVELFNBQVNDLE9BQVQsQ0FBaUJDLEdBQWpCLEVBSUU7RUFDQSxJQUFJQyxTQUFTLEdBQUcsS0FBaEI7RUFDQSxNQUFNO0lBQUVDLEtBQUY7SUFBU0M7RUFBVCxJQUNKYixNQUFNLENBQUNjLCtDQUFQLENBQXVESixHQUF2RCxDQURGOztFQUdBLE1BQU1ELE9BQWtCLEdBQUcsQ0FBQ00sR0FBRCxFQUFNQyxTQUFOLEtBQW9CO0lBQzdDYixNQUFNLENBQUNRLFNBQVMsS0FBSyxLQUFmLEVBQXNCLHlCQUF0QixDQUFOO0lBRUEsT0FBT1gsTUFBTSxDQUFDaUIsMENBQVAsQ0FDTEwsS0FESyxFQUVMSSxTQUZLLEVBR0wsSUFISyxFQUlMRCxHQUpLLENBQVA7RUFNRCxDQVREOztFQVdBLFNBQVNHLE9BQVQsR0FBeUI7SUFDdkJmLE1BQU0sQ0FBQ1EsU0FBUyxLQUFLLEtBQWYsRUFBc0IseUJBQXRCLENBQU47SUFDQUEsU0FBUyxHQUFHLElB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
|
package/dist/crypto/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { concatenate } from "../utils.js";
|
|
1
|
+
import { concatenate } from "../utils/utils.js";
|
|
2
2
|
import { sodium } from "../sodium.js";
|
|
3
3
|
export function encryptCryptoBox(data, publicKeyBob, privateKeyAlice) {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const nonce = sodium.randombytes_buf(sodium.crypto_box_NONCEBYTES);
|
|
5
|
+
const crypt = sodium.crypto_box_easy(data, nonce, sodium.from_hex(publicKeyBob), sodium.from_hex(privateKeyAlice));
|
|
6
6
|
return concatenate(nonce, crypt);
|
|
7
7
|
}
|
|
8
8
|
export function generateCryptoBoxKeyPair() {
|
|
@@ -13,16 +13,16 @@ export function decryptCryptoBox(data, publicKeyAlice, privateKeyBob) {
|
|
|
13
13
|
throw "data too short";
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
const nonce = data.slice(0, sodium.crypto_box_NONCEBYTES);
|
|
17
|
+
const cipher = data.slice(sodium.crypto_box_NONCEBYTES);
|
|
18
18
|
return sodium.crypto_box_open_easy(cipher, nonce, sodium.from_hex(publicKeyAlice), sodium.from_hex(privateKeyBob));
|
|
19
19
|
}
|
|
20
20
|
export function generateSecretBoxKey() {
|
|
21
21
|
return sodium.randombytes_buf(sodium.crypto_secretbox_KEYBYTES, "hex");
|
|
22
22
|
}
|
|
23
23
|
export function encryptSecretBox(data, key) {
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES);
|
|
25
|
+
const crypt = sodium.crypto_secretbox_easy(data, nonce, sodium.from_hex(key));
|
|
26
26
|
return concatenate(nonce, crypt);
|
|
27
27
|
}
|
|
28
28
|
export function decryptSecretBox(data, key) {
|
|
@@ -30,16 +30,18 @@ export function decryptSecretBox(data, key) {
|
|
|
30
30
|
throw "data too short";
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
const nonce = data.slice(0, sodium.crypto_secretbox_NONCEBYTES);
|
|
34
|
+
const cipher = data.slice(sodium.crypto_secretbox_NONCEBYTES);
|
|
35
35
|
return sodium.crypto_secretbox_open_easy(cipher, nonce, sodium.from_hex(key));
|
|
36
36
|
}
|
|
37
37
|
export function encryptAnonymous(data, receiverPublicKey) {
|
|
38
38
|
return sodium.crypto_box_seal(data, sodium.from_hex(receiverPublicKey));
|
|
39
39
|
}
|
|
40
40
|
export function decryptAnonymous(data, _ref) {
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
let {
|
|
42
|
+
privateKey,
|
|
43
|
+
publicKey
|
|
44
|
+
} = _ref;
|
|
43
45
|
return sodium.crypto_box_seal_open(data, sodium.from_hex(publicKey), sodium.from_hex(privateKey));
|
|
44
46
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25jYXRlbmF0ZSIsInNvZGl1bSIsImVuY3J5cHRDcnlwdG9Cb3giLCJkYXRhIiwicHVibGljS2V5Qm9iIiwicHJpdmF0ZUtleUFsaWNlIiwibm9uY2UiLCJyYW5kb21ieXRlc19idWYiLCJjcnlwdG9fYm94X05PTkNFQllURVMiLCJjcnlwdCIsImNyeXB0b19ib3hfZWFzeSIsImZyb21faGV4IiwiZ2VuZXJhdGVDcnlwdG9Cb3hLZXlQYWlyIiwiY3J5cHRvX2JveF9rZXlwYWlyIiwiZGVjcnlwdENyeXB0b0JveCIsInB1YmxpY0tleUFsaWNlIiwicHJpdmF0ZUtleUJvYiIsImxlbmd0aCIsImNyeXB0b19ib3hfTUFDQllURVMiLCJzbGljZSIsImNpcGhlciIsImNyeXB0b19ib3hfb3Blbl9lYXN5IiwiZ2VuZXJhdGVTZWNyZXRCb3hLZXkiLCJjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTIiwiZW5jcnlwdFNlY3JldEJveCIsImtleSIsImNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyIsImNyeXB0b19zZWNyZXRib3hfZWFzeSIsImRlY3J5cHRTZWNyZXRCb3giLCJjcnlwdG9fc2VjcmV0Ym94X01BQ0JZVEVTIiwiY3J5cHRvX3NlY3JldGJveF9vcGVuX2Vhc3kiLCJlbmNyeXB0QW5vbnltb3VzIiwicmVjZWl2ZXJQdWJsaWNLZXkiLCJjcnlwdG9fYm94X3NlYWwiLCJkZWNyeXB0QW5vbnltb3VzIiwicHJpdmF0ZUtleSIsInB1YmxpY0tleSIsImNyeXB0b19ib3hfc2VhbF9vcGVuIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NyeXB0by9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25jYXRlbmF0ZSB9IGZyb20gXCIuLi91dGlscy91dGlscy5qc1wiO1xuaW1wb3J0IHsgc29kaXVtIH0gZnJvbSBcIi4uL3NvZGl1bS5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEtleVBhaXIge1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgcHJpdmF0ZUtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdENyeXB0b0JveChcbiAgZGF0YTogVWludDhBcnJheSxcbiAgcHVibGljS2V5Qm9iOiBzdHJpbmcsXG4gIHByaXZhdGVLZXlBbGljZTogc3RyaW5nXG4pOiBVaW50OEFycmF5IHtcbiAgY29uc3Qgbm9uY2UgPSBzb2RpdW0ucmFuZG9tYnl0ZXNfYnVmKHNvZGl1bS5jcnlwdG9fYm94X05PTkNFQllURVMpO1xuICBjb25zdCBjcnlwdCA9IHNvZGl1bS5jcnlwdG9fYm94X2Vhc3koXG4gICAgZGF0YSxcbiAgICBub25jZSxcbiAgICBzb2RpdW0uZnJvbV9oZXgocHVibGljS2V5Qm9iKSxcbiAgICBzb2RpdW0uZnJvbV9oZXgocHJpdmF0ZUtleUFsaWNlKVxuICApO1xuICByZXR1cm4gY29uY2F0ZW5hdGUobm9uY2UsIGNyeXB0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ3J5cHRvQm94S2V5UGFpcigpOiBLZXlQYWlyIHtcbiAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fYm94X2tleXBhaXIoXCJoZXhcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNyeXB0Q3J5cHRvQm94KFxuICBkYXRhOiBVaW50OEFycmF5LFxuICBwdWJsaWNLZXlBbGljZTogc3RyaW5nLFxuICBwcml2YXRlS2V5Qm9iOiBzdHJpbmdcbik6IFVpbnQ4QXJyYXkge1xuICBpZiAoZGF0YS5sZW5ndGggPCBzb2RpdW0uY3J5cHRvX2JveF9OT05DRUJZVEVTICsgc29kaXVtLmNyeXB0b19ib3hfTUFDQllURVMpIHtcbiAgICB0aHJvdyBcImRhdGEgdG9vIHNob3J0XCI7XG4gIH1cbiAgY29uc3Qgbm9uY2UgPSBkYXRhLnNsaWNlKDAsIHNvZGl1bS5jcnlwdG9fYm94X05PTkNFQllURVMpO1xuICBjb25zdCBjaXBoZXIgPSBkYXRhLnNsaWNlKHNvZGl1bS5jcnlwdG9fYm94X05PTkNFQllURVMpO1xuICByZXR1cm4gc29kaXVtLmNyeXB0b19ib3hfb3Blbl9lYXN5KFxuICAgIGNpcGhlcixcbiAgICBub25jZSxcbiAgICBzb2RpdW0uZnJvbV9oZXgocHVibGljS2V5QWxpY2UpLFxuICAgIHNvZGl1bS5mcm9tX2hleChwcml2YXRlS2V5Qm9iKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTZWNyZXRCb3hLZXkoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNvZGl1bS5yYW5kb21ieXRlc19idWYoc29kaXVtLmNyeXB0b19zZWNyZXRib3hfS0VZQllURVMsIFwiaGV4XCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFNlY3JldEJveChkYXRhOiBVaW50OEFycmF5LCBrZXk6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICBjb25zdCBub25jZSA9IHNvZGl1bS5yYW5kb21ieXRlc19idWYoc29kaXVtLmNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyk7XG4gIGNvbnN0IGNyeXB0ID0gc29kaXVtLmNyeXB0b19zZWNyZXRib3hfZWFzeShkYXRhLCBub25jZSwgc29kaXVtLmZyb21faGV4KGtleSkpO1xuICByZXR1cm4gY29uY2F0ZW5hdGUobm9uY2UsIGNyeXB0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRTZWNyZXRCb3goZGF0YTogVWludDhBcnJheSwga2V5OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgaWYgKFxuICAgIGRhdGEubGVuZ3RoIDxcbiAgICBzb2RpdW0uY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTICsgc29kaXVtLmNyeXB0b19zZWNyZXRib3hfTUFDQllURVNcbiAgKSB7XG4gICAgdGhyb3cgXCJkYXRhIHRvbyBzaG9ydFwiO1xuICB9XG4gIGNvbnN0IG5vbmNlID0gZGF0YS5zbGljZSgwLCBzb2RpdW0uY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTKTtcbiAgY29uc3QgY2lwaGVyID0gZGF0YS5zbGljZShzb2RpdW0uY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTKTtcbiAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fc2VjcmV0Ym94X29wZW5fZWFzeShjaXBoZXIsIG5vbmNlLCBzb2RpdW0uZnJvbV9oZXgoa2V5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0QW5vbnltb3VzKFxuICBkYXRhOiBVaW50OEFycmF5LFxuICByZWNlaXZlclB1YmxpY0tleTogc3RyaW5nXG4pOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fYm94X3NlYWwoZGF0YSwgc29kaXVtLmZyb21faGV4KHJlY2VpdmVyUHVibGljS2V5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNyeXB0QW5vbnltb3VzKFxuICBkYXRhOiBVaW50OEFycmF5LFxuICB7IHByaXZhdGVLZXksIHB1YmxpY0tleSB9OiBLZXlQYWlyXG4pOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fYm94X3NlYWxfb3BlbihcbiAgICBkYXRhLFxuICAgIHNvZGl1bS5mcm9tX2hleChwdWJsaWNLZXkpLFxuICAgIHNvZGl1bS5mcm9tX2hleChwcml2YXRlS2V5KVxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxXQUFULFFBQTRCLG1CQUE1QjtBQUNBLFNBQVNDLE1BQVQsUUFBdUIsY0FBdkI7QUFPQSxPQUFPLFNBQVNDLGdCQUFULENBQ0xDLElBREssRUFFTEMsWUFGSyxFQUdMQyxlQUhLLEVBSU87RUFDWixNQUFNQyxLQUFLLEdBQUdMLE1BQU0sQ0FBQ00sZUFBUCxDQUF1Qk4sTUFBTSxDQUFDTyxxQkFBOUIsQ0FBZDtFQUNBLE1BQU1DLEtBQUssR0FBR1IsTUFBTSxDQUFDUyxlQUFQLENBQ1pQLElBRFksRUFFWkcsS0FGWSxFQUdaTCxNQUFNLENBQUNVLFFBQVAsQ0FBZ0JQLFlBQWhCLENBSFksRUFJWkgsTUFBTSxDQUFDVSxRQUFQLENBQWdCTixlQUFoQixDQUpZLENBQWQ7RUFNQSxPQUFPTCxXQUFXLENBQUNNLEtBQUQsRUFBUUcsS0FBUixDQUFsQjtBQUNEO0FB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
|
package/dist/error.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export {};
|
|
2
2
|
export {};
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEVycm9yVHlwZSA9XG4gIHwgXCJFcnJvclVwZ3JhZGVQbGFuXCJcbiAgfCBcIkVycm9yTm90Rm91bmRcIlxuICB8IFwiRXJyb3JOb3RFeGlzdFwiXG4gIHwgXCJFcnJvckFjY2Vzc0RlbmllZFwiXG4gIHwgXCJFcnJvckxhbmdOb3RFeGlzdFwiXG4gIHwgXCJFcnJvckxpbWl0XCJcbiAgfCBcIkVycm9yQmFzaWNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFcnJvckJhc2Uge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIF9fdHlwZW5hbWU6IEVycm9yVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvclVwZ3JhZGVQbGFuIGV4dGVuZHMgRXJyb3JCYXNlIHtcbiAgX190eXBlbmFtZTogXCJFcnJvclVwZ3JhZGVQbGFuXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JOb3RGb3VuZCBleHRlbmRzIEVycm9yQmFzZSB7XG4gIF9fdHlwZW5hbWU6IFwiRXJyb3JOb3RGb3VuZFwiO1xuICBmaWVsZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck5vdEV4aXN0IGV4dGVuZHMgRXJyb3JCYXNlIHtcbiAgX190eXBlbmFtZTogXCJFcnJvck5vdEV4aXN0XCI7XG4gIGZpZWxkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQWNjZXNzRGVuaWVkIGV4dGVuZHMgRXJyb3JCYXNlIHtcbiAgX190eXBlbmFtZTogXCJFcnJvckFjY2Vzc0RlbmllZFwiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTGFuZ05vdEV4aXN0IGV4dGVuZHMgRXJyb3JCYXNlIHtcbiAgX190eXBlbmFtZTogXCJFcnJvckxhbmdOb3RFeGlzdFwiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTGltaXQgZXh0ZW5kcyBFcnJvckJhc2Uge1xuICBfX3R5cGVuYW1lOiBcIkVycm9yTGltaXRcIjtcbiAgZmllbGQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JCYXNpYyBleHRlbmRzIEVycm9yQmFzZSB7XG4gIF9fdHlwZW5hbWU6IFwiRXJyb3JCYXNpY1wiO1xufVxuXG5leHBvcnQgdHlwZSBTZWNyZWN5RXJyb3IgPVxuICB8IEVycm9yVXBncmFkZVBsYW5cbiAgfCBFcnJvck5vdEZvdW5kXG4gIHwgRXJyb3JOb3RFeGlzdFxuICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gIHwgRXJyb3JMYW5nTm90RXhpc3RcbiAgfCBFcnJvckxpbWl0XG4gIHwgRXJyb3JCYXNpYztcbiJdLCJtYXBwaW5ncyI6IiJ9
|
package/dist/index.d.ts
CHANGED
|
@@ -4,8 +4,7 @@ export * from "./crypto/index.js";
|
|
|
4
4
|
export type { Progress } from "./crypto/file.js";
|
|
5
5
|
export type { User, QueryLimits, DownloadProgress, UserData, FolderSize, MailLimitsValues, CloudLimits, FaqItem, BlogItem, SecrecyPlansCodes, Limits, MailLimits, Plan, PaymentInfos, Subscription, RecurlyInvoices, SubscriptionCollectionMethod, SubscriptionState, SendReport, PayInput, SuccessResponse } from "./BaseClient.js";
|
|
6
6
|
export { BaseClient, isValidPlan } from "./BaseClient.js";
|
|
7
|
-
export type {
|
|
8
|
-
export { isFolder, isVFile } from "./client/types/index.js";
|
|
7
|
+
export type { FileMetadata, SecrecyUserApp, BaseMail, ReceivedMail, SentMail, PublicUser, UserAppSettings, UserAppNotifications, Session, UserSession, AppSession, MailFile, MailIntegrity, DraftMail, Mail, WaitingReceivedMail, MailRecipientInput } from "./client/types/index.js";
|
|
9
8
|
export * from "./client/helpers.js";
|
|
10
9
|
export * from "./sodium.js";
|
|
11
10
|
export * from "./utils/store-buddy.js";
|
package/dist/index.js
CHANGED
|
@@ -2,41 +2,9 @@ export * from "./client/index.js";
|
|
|
2
2
|
export * from "./client/admin/index.js";
|
|
3
3
|
export * from "./crypto/index.js";
|
|
4
4
|
export { BaseClient, isValidPlan } from "./BaseClient.js";
|
|
5
|
-
export { isFolder, isVFile } from "./client/types/index.js";
|
|
6
5
|
export * from "./client/helpers.js";
|
|
7
6
|
export * from "./sodium.js";
|
|
8
7
|
export * from "./utils/store-buddy.js";
|
|
9
8
|
export { Lang, FileContentType, MailType, PlanKind, Rights, PayInputType, UserRole } from "./zeus/index.js";
|
|
10
|
-
export * from "./error.js";
|
|
11
|
-
|
|
12
|
-
// /* Constant Generic Types */
|
|
13
|
-
// type OperationType<T, Operation extends keyof ValueTypes> =
|
|
14
|
-
// | T
|
|
15
|
-
// | ValueTypes[Operation];
|
|
16
|
-
// type OperationInputType<T, Operation extends keyof ValueTypes> = InputType<
|
|
17
|
-
// GraphQLTypes[Operation],
|
|
18
|
-
// T
|
|
19
|
-
// >;
|
|
20
|
-
// /*---------------------------------------------------------------------*/
|
|
21
|
-
// /* User Specific Types */
|
|
22
|
-
// type QueryRoot = "Query";
|
|
23
|
-
// // type MutationRoot = "Mutation";
|
|
24
|
-
// // type SubscriptionRoot = "Subscription";
|
|
25
|
-
// /*---------------------------------------------------------------------*/
|
|
26
|
-
// /* Type Aliases */
|
|
27
|
-
// type Query<Z> = OperationType<Z, QueryRoot>;
|
|
28
|
-
// // type Mutation<Z> = OperationType<Z, MutationRoot>;
|
|
29
|
-
// // type Subscription<Z> = OperationType<Z, SubscriptionRoot>;
|
|
30
|
-
// type QueryInput<Z> = OperationInputType<Z, QueryRoot>;
|
|
31
|
-
// // type MutationInput<Z> = OperationInputType<Z, MutationRoot>;
|
|
32
|
-
// // type SubscriptionInput<Z> = OperationInputType<Z, SubscriptionRoot>;
|
|
33
|
-
// declare function testFn<Z>(query: Query<Z>): QueryInput<Z>;
|
|
34
|
-
// const ok = testFn({ file: [{ id: "COUCOU" }, { md5: true }] });
|
|
35
|
-
// import type { InputType, GraphQLTypes } from "./zeus/index.js";
|
|
36
|
-
// import { Selectors } from "./zeus/index.js";
|
|
37
|
-
// export const query = Selectors.query({
|
|
38
|
-
// limits: { cloud: { count: true } }
|
|
39
|
-
// });
|
|
40
|
-
// type InferredResponseType = InputType<typeof query, GraphQLTypes["Query"]>;
|
|
41
|
-
// declare const test: InferredResponseType;
|
|
42
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6WyJCYXNlQ2xpZW50IiwiaXNWYWxpZFBsYW4iLCJpc0ZvbGRlciIsImlzVkZpbGUiLCJMYW5nIiwiRmlsZUNvbnRlbnRUeXBlIiwiTWFpbFR5cGUiLCJQbGFuS2luZCIsIlJpZ2h0cyIsIlBheUlucHV0VHlwZSIsIlVzZXJSb2xlIl0sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFkO0FBQ0EsY0FBYyx5QkFBZDtBQUNBLGNBQWMsbUJBQWQ7QUF5QkEsU0FBU0EsVUFBVCxFQUFxQkMsV0FBckIsUUFBd0MsaUJBQXhDO0FBeUJBLFNBQVNDLFFBQVQsRUFBbUJDLE9BQW5CLFFBQWtDLHlCQUFsQztBQUNBLGNBQWMscUJBQWQ7QUFDQSxjQUFjLGFBQWQ7QUFDQSxjQUFjLHdCQUFkO0FBQ0EsU0FDRUMsSUFERixFQUVFQyxlQUZGLEVBR0VDLFFBSEYsRUFJRUMsUUFKRixFQUtFQyxNQUxGLEVBTUVDLFlBTkYsRUFPRUMsUUFQRixRQVFPLGlCQVJQO0FBVUEsY0FBYyxZQUFkLEMsQ0FFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY2xpZW50L2luZGV4LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jbGllbnQvYWRtaW4vaW5kZXguanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NyeXB0by9pbmRleC5qc1wiO1xuZXhwb3J0IHR5cGUgeyBQcm9ncmVzcyB9IGZyb20gXCIuL2NyeXB0by9maWxlLmpzXCI7XG5leHBvcnQgdHlwZSB7XG4gIFVzZXIsXG4gIFF1ZXJ5TGltaXRzLFxuICBEb3dubG9hZFByb2dyZXNzLFxuICBVc2VyRGF0YSxcbiAgRm9sZGVyU2l6ZSxcbiAgTWFpbExpbWl0c1ZhbHVlcyxcbiAgQ2xvdWRMaW1pdHMsXG4gIEZhcUl0ZW0sXG4gIEJsb2dJdGVtLFxuICBTZWNyZWN5UGxhbnNDb2RlcyxcbiAgTGltaXRzLFxuICBNYWlsTGltaXRzLFxuICBQbGFuLFxuICBQYXltZW50SW5mb3MsXG4gIFN1YnNjcmlwdGlvbixcbiAgUmVjdXJseUludm9pY2VzLFxuICBTdWJzY3JpcHRpb25Db2xsZWN0aW9uTWV0aG9kLFxuICBTdWJzY3JpcHRpb25TdGF0ZSxcbiAgU2VuZFJlcG9ydCxcbiAgUGF5SW5wdXQsXG4gIFN1Y2Nlc3NSZXNwb25zZVxufSBmcm9tIFwiLi9CYXNlQ2xpZW50LmpzXCI7XG5leHBvcnQgeyBCYXNlQ2xpZW50LCBpc1ZhbGlkUGxhbiB9IGZyb20gXCIuL0Jhc2VDbGllbnQuanNcIjtcbmV4cG9ydCB0eXBlIHtcbiAgRmlsZSxcbiAgRm9sZGVyLFxuICBGb2xkZXJGdWxsLFxuICBWRmlsZSxcbiAgRm9sZGVyQnJlYWRjcnVtYkl0ZW0sXG4gIFZGaWxlV2l0aEZvbGRlcixcbiAgU2VjcmVjeVVzZXJBcHAsXG4gIEJhc2VNYWlsLFxuICBSZWNlaXZlZE1haWwsXG4gIFNlbnRNYWlsLFxuICBQdWJsaWNVc2VyLFxuICBVc2VyQXBwU2V0dGluZ3MsXG4gIFVzZXJBcHBOb3RpZmljYXRpb25zLFxuICBTZXNzaW9uLFxuICBVc2VyU2Vzc2lvbixcbiAgQXBwU2Vzc2lvbixcbiAgTWFpbEZpbGUsXG4gIE1haWxJbnRlZ3JpdHksXG4gIERyYWZ0TWFpbCxcbiAgTWFpbCxcbiAgV2FpdGluZ1JlY2VpdmVkTWFpbCxcbiAgTWFpbFJlY2lwaWVudElucHV0XG59IGZyb20gXCIuL2NsaWVudC90eXBlcy9pbmRleC5qc1wiO1xuZXhwb3J0IHsgaXNGb2xkZXIsIGlzVkZpbGUgfSBmcm9tIFwiLi9jbGllbnQvdHlwZXMvaW5kZXguanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NsaWVudC9oZWxwZXJzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zb2RpdW0uanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL3N0b3JlLWJ1ZGR5LmpzXCI7XG5leHBvcnQge1xuICBMYW5nLFxuICBGaWxlQ29udGVudFR5cGUsXG4gIE1haWxUeXBlLFxuICBQbGFuS2luZCxcbiAgUmlnaHRzLFxuICBQYXlJbnB1dFR5cGUsXG4gIFVzZXJSb2xlXG59IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3IuanNcIjtcblxuLy8gaW1wb3J0IHR5cGUgeyBWYWx1ZVR5cGVzLCBJbnB1dFR5cGUsIEdyYXBoUUxUeXBlcyB9IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcblxuLy8gLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLy8gLyogQ29uc3RhbnQgR2VuZXJpYyBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy8gdHlwZSBPcGVyYXRpb25UeXBlPFQsIE9wZXJhdGlvbiBleHRlbmRzIGtleW9mIFZhbHVlVHlwZXM+ID1cbi8vICAgfCBUXG4vLyAgIHwgVmFsdWVUeXBlc1tPcGVyYXRpb25dO1xuLy8gdHlwZSBPcGVyYXRpb25JbnB1dFR5cGU8VCwgT3BlcmF0aW9uIGV4dGVuZHMga2V5b2YgVmFsdWVUeXBlcz4gPSBJbnB1dFR5cGU8XG4vLyAgIEdyYXBoUUxUeXBlc1tPcGVyYXRpb25dLFxuLy8gICBUXG4vLyA+O1xuXG4vLyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vLyAvKiBVc2VyIFNwZWNpZmljIFR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vLyB0eXBlIFF1ZXJ5Um9vdCA9IFwiUXVlcnlcIjtcbi8vIC8vIHR5cGUgTXV0YXRpb25Sb290ID0gXCJNdXRhdGlvblwiO1xuLy8gLy8gdHlwZSBTdWJzY3JpcHRpb25Sb290ID0gXCJTdWJzY3JpcHRpb25cIjtcblxuLy8gLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLy8gLyogVHlwZSBBbGlhc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy8gdHlwZSBRdWVyeTxaPiA9IE9wZXJhdGlvblR5cGU8WiwgUXVlcnlSb290Pjtcbi8vIC8vIHR5cGUgTXV0YXRpb248Wj4gPSBPcGVyYXRpb25UeXBlPFosIE11dGF0aW9uUm9vdD47XG4vLyAvLyB0eXBlIFN1YnNjcmlwdGlvbjxaPiA9IE9wZXJhdGlvblR5cGU8WiwgU3Vic2NyaXB0aW9uUm9vdD47XG5cbi8vIHR5cGUgUXVlcnlJbnB1dDxaPiA9IE9wZXJhdGlvbklucHV0VHlwZTxaLCBRdWVyeVJvb3Q+O1xuLy8gLy8gdHlwZSBNdXRhdGlvbklucHV0PFo+ID0gT3BlcmF0aW9uSW5wdXRUeXBlPFosIE11dGF0aW9uUm9vdD47XG4vLyAvLyB0eXBlIFN1YnNjcmlwdGlvbklucHV0PFo+ID0gT3BlcmF0aW9uSW5wdXRUeXBlPFosIFN1YnNjcmlwdGlvblJvb3Q+O1xuXG4vLyBkZWNsYXJlIGZ1bmN0aW9uIHRlc3RGbjxaPihxdWVyeTogUXVlcnk8Wj4pOiBRdWVyeUlucHV0PFo+O1xuXG4vLyBjb25zdCBvayA9IHRlc3RGbih7IGZpbGU6IFt7IGlkOiBcIkNPVUNPVVwiIH0sIHsgbWQ1OiB0cnVlIH1dIH0pO1xuXG4vLyBpbXBvcnQgdHlwZSB7IElucHV0VHlwZSwgR3JhcGhRTFR5cGVzIH0gZnJvbSBcIi4vemV1cy9pbmRleC5qc1wiO1xuLy8gaW1wb3J0IHsgU2VsZWN0b3JzIH0gZnJvbSBcIi4vemV1cy9pbmRleC5qc1wiO1xuXG4vLyBleHBvcnQgY29uc3QgcXVlcnkgPSBTZWxlY3RvcnMucXVlcnkoe1xuLy8gICBsaW1pdHM6IHsgY2xvdWQ6IHsgY291bnQ6IHRydWUgfSB9XG4vLyB9KTtcblxuLy8gdHlwZSBJbmZlcnJlZFJlc3BvbnNlVHlwZSA9IElucHV0VHlwZTx0eXBlb2YgcXVlcnksIEdyYXBoUUxUeXBlc1tcIlF1ZXJ5XCJdPjtcblxuLy8gZGVjbGFyZSBjb25zdCB0ZXN0OiBJbmZlcnJlZFJlc3BvbnNlVHlwZTtcbiJdfQ==
|
|
9
|
+
export * from "./error.js";
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ2xpZW50IiwiaXNWYWxpZFBsYW4iLCJMYW5nIiwiRmlsZUNvbnRlbnRUeXBlIiwiTWFpbFR5cGUiLCJQbGFuS2luZCIsIlJpZ2h0cyIsIlBheUlucHV0VHlwZSIsIlVzZXJSb2xlIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NsaWVudC9pbmRleC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xpZW50L2FkbWluL2luZGV4LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jcnlwdG8vaW5kZXguanNcIjtcbmV4cG9ydCB0eXBlIHsgUHJvZ3Jlc3MgfSBmcm9tIFwiLi9jcnlwdG8vZmlsZS5qc1wiO1xuZXhwb3J0IHR5cGUge1xuICBVc2VyLFxuICBRdWVyeUxpbWl0cyxcbiAgRG93bmxvYWRQcm9ncmVzcyxcbiAgVXNlckRhdGEsXG4gIEZvbGRlclNpemUsXG4gIE1haWxMaW1pdHNWYWx1ZXMsXG4gIENsb3VkTGltaXRzLFxuICBGYXFJdGVtLFxuICBCbG9nSXRlbSxcbiAgU2VjcmVjeVBsYW5zQ29kZXMsXG4gIExpbWl0cyxcbiAgTWFpbExpbWl0cyxcbiAgUGxhbixcbiAgUGF5bWVudEluZm9zLFxuICBTdWJzY3JpcHRpb24sXG4gIFJlY3VybHlJbnZvaWNlcyxcbiAgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCxcbiAgU3Vic2NyaXB0aW9uU3RhdGUsXG4gIFNlbmRSZXBvcnQsXG4gIFBheUlucHV0LFxuICBTdWNjZXNzUmVzcG9uc2Vcbn0gZnJvbSBcIi4vQmFzZUNsaWVudC5qc1wiO1xuZXhwb3J0IHsgQmFzZUNsaWVudCwgaXNWYWxpZFBsYW4gfSBmcm9tIFwiLi9CYXNlQ2xpZW50LmpzXCI7XG5leHBvcnQgdHlwZSB7XG4gIEZpbGVNZXRhZGF0YSxcbiAgU2VjcmVjeVVzZXJBcHAsXG4gIEJhc2VNYWlsLFxuICBSZWNlaXZlZE1haWwsXG4gIFNlbnRNYWlsLFxuICBQdWJsaWNVc2VyLFxuICBVc2VyQXBwU2V0dGluZ3MsXG4gIFVzZXJBcHBOb3RpZmljYXRpb25zLFxuICBTZXNzaW9uLFxuICBVc2VyU2Vzc2lvbixcbiAgQXBwU2Vzc2lvbixcbiAgTWFpbEZpbGUsXG4gIE1haWxJbnRlZ3JpdHksXG4gIERyYWZ0TWFpbCxcbiAgTWFpbCxcbiAgV2FpdGluZ1JlY2VpdmVkTWFpbCxcbiAgTWFpbFJlY2lwaWVudElucHV0XG59IGZyb20gXCIuL2NsaWVudC90eXBlcy9pbmRleC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xpZW50L2hlbHBlcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NvZGl1bS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvc3RvcmUtYnVkZHkuanNcIjtcbmV4cG9ydCB7XG4gIExhbmcsXG4gIEZpbGVDb250ZW50VHlwZSxcbiAgTWFpbFR5cGUsXG4gIFBsYW5LaW5kLFxuICBSaWdodHMsXG4gIFBheUlucHV0VHlwZSxcbiAgVXNlclJvbGVcbn0gZnJvbSBcIi4vemV1cy9pbmRleC5qc1wiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvci5qc1wiO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFkO0FBQ0EsY0FBYyx5QkFBZDtBQUNBLGNBQWMsbUJBQWQ7QUF5QkEsU0FBU0EsVUFBVCxFQUFxQkMsV0FBckIsUUFBd0MsaUJBQXhDO0FBb0JBLGNBQWMscUJBQWQ7QUFDQSxjQUFjLGFBQWQ7QUFDQSxjQUFjLHdCQUFkO0FBQ0EsU0FDRUMsSUFERixFQUVFQyxlQUZGLEVBR0VDLFFBSEYsRUFJRUMsUUFKRixFQUtFQyxNQUxGLEVBTUVDLFlBTkYsRUFPRUMsUUFQRixRQVFPLGlCQVJQO0FBVUEsY0FBYyxZQUFkIn0=
|