@pie-lib/math-input-mathlive 1.1.5-beta.13 → 1.1.5-beta.15
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/lib/__tests__/keypad-label.test.js +2 -201
- package/lib/__tests__/latex-bridge.test.js +1 -164
- package/lib/__tests__/mathlive-instance.test.js +1 -232
- package/lib/keypad/index.js +12 -8
- package/lib/keypad/index.js.map +1 -1
- package/lib/mathlive-instance.js +31 -14
- package/lib/mathlive-instance.js.map +1 -1
- package/lib/mf/common-styles.js +51 -10
- package/lib/mf/common-styles.js.map +1 -1
- package/package.json +1 -1
- package/src/keypad/index.jsx +12 -8
- package/src/mathlive-instance.js +45 -14
- package/src/mf/common-styles.js +54 -10
|
@@ -101,27 +101,6 @@ describe('latex-bridge', function () {
|
|
|
101
101
|
expect((0, _latexBridge.toNativeCommands)('\\abs{a}+\\abs{b}')).toEqual('\\left|a\\right|+\\left|b\\right|');
|
|
102
102
|
expect((0, _latexBridge.toNativeCommands)('\\longdiv{1}\\longdiv{2}')).toEqual('\\enclose{longdiv}{1}\\enclose{longdiv}{2}');
|
|
103
103
|
});
|
|
104
|
-
|
|
105
|
-
// `%` starts a comment in real LaTeX, so MathLive drops it and everything
|
|
106
|
-
// after it. MathQuill had no comments, so latex authored under it - or by
|
|
107
|
-
// hand - can carry a bare `%` that would silently truncate the expression.
|
|
108
|
-
it('escapes a bare % so it cannot comment out the rest of the line', function () {
|
|
109
|
-
expect((0, _latexBridge.toNativeCommands)('%')).toEqual('\\%');
|
|
110
|
-
expect((0, _latexBridge.toNativeCommands)('50%')).toEqual('50\\%');
|
|
111
|
-
expect((0, _latexBridge.toNativeCommands)('x%y')).toEqual('x\\%y');
|
|
112
|
-
expect((0, _latexBridge.toNativeCommands)('a%b%c')).toEqual('a\\%b\\%c');
|
|
113
|
-
});
|
|
114
|
-
it('leaves an already-escaped % alone', function () {
|
|
115
|
-
expect((0, _latexBridge.toNativeCommands)('\\%')).toEqual('\\%');
|
|
116
|
-
expect((0, _latexBridge.toNativeCommands)('50\\%')).toEqual('50\\%');
|
|
117
|
-
// idempotent: toMathLive may run over latex that came back out of a field
|
|
118
|
-
expect((0, _latexBridge.toNativeCommands)((0, _latexBridge.toNativeCommands)('50%'))).toEqual('50\\%');
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
// `\\` is a line break, not an escape, so the `%` after it is still bare.
|
|
122
|
-
it('counts backslashes to decide whether a % is escaped', function () {
|
|
123
|
-
expect((0, _latexBridge.toNativeCommands)('a\\\\%b')).toEqual('a\\\\\\%b');
|
|
124
|
-
});
|
|
125
104
|
it('leaves other latex untouched', function () {
|
|
126
105
|
['\\frac{1}{2}', '\\pi', '\\sqrt{x}', '\\overline{AB}'].forEach(function (l) {
|
|
127
106
|
expect((0, _latexBridge.toNativeCommands)(l)).toEqual(l);
|
|
@@ -155,119 +134,6 @@ describe('latex-bridge', function () {
|
|
|
155
134
|
expect((0, _latexBridge.fieldIds)(latex)).toEqual(['r1']);
|
|
156
135
|
});
|
|
157
136
|
});
|
|
158
|
-
|
|
159
|
-
// MathQuill registered some keypad names as aliases of a different command:
|
|
160
|
-
// the divide key stored `\div`, not `\divide`. MathLive knows `\divide` only as
|
|
161
|
-
// a pie macro and serialises it under that name, so it reached storage and
|
|
162
|
-
// MathJax (which has no `\divide`) rendered it as red text.
|
|
163
|
-
describe('MathQuill command aliases', function () {
|
|
164
|
-
it('the divide and perpendicular keys insert the command MathQuill stored', function () {
|
|
165
|
-
/* eslint-disable global-require */
|
|
166
|
-
var _require = require('../keys/basic-operators'),
|
|
167
|
-
divide = _require.divide;
|
|
168
|
-
// Exported under a pre-existing misspelling.
|
|
169
|
-
var _require2 = require('../keys/geometry'),
|
|
170
|
-
perpendicular = _require2.perpindicular;
|
|
171
|
-
/* eslint-enable global-require */
|
|
172
|
-
|
|
173
|
-
expect((0, _latexBridge.keyToAction)(divide)).toEqual({
|
|
174
|
-
type: 'insert',
|
|
175
|
-
value: '\\div'
|
|
176
|
-
});
|
|
177
|
-
expect((0, _latexBridge.keyToAction)(perpendicular)).toEqual({
|
|
178
|
-
type: 'insert',
|
|
179
|
-
value: '\\perp'
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
it('stores the canonical command for latex that still carries an alias', function () {
|
|
183
|
-
// Typed into the field, or saved before the keypad resolved the alias.
|
|
184
|
-
expect((0, _latexBridge.fromMathLive)('1\\divide 6')).toEqual('1\\div 6');
|
|
185
|
-
expect((0, _latexBridge.fromMathLive)('a\\perpendicular b')).toEqual('a\\perp b');
|
|
186
|
-
});
|
|
187
|
-
it('only replaces whole command names', function () {
|
|
188
|
-
// \divideontimes is a real AMS symbol and must survive.
|
|
189
|
-
expect((0, _latexBridge.toCanonicalCommands)('a\\divideontimes b')).toEqual('a\\divideontimes b');
|
|
190
|
-
expect((0, _latexBridge.toCanonicalCommands)('\\divide\\divide')).toEqual('\\div\\div');
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
// The double prime key: MathLive serialises `5''` as `5^{\doubleprime}`,
|
|
194
|
-
// which MathJax cannot render (red `\doubleprime`). MathQuill stored `5''`.
|
|
195
|
-
it('stores the double prime key as apostrophes', function () {
|
|
196
|
-
expect((0, _latexBridge.fromMathLive)('5^{\\doubleprime}')).toEqual("5''");
|
|
197
|
-
expect((0, _latexBridge.fromMathLive)('x^{\\prime}')).toEqual("x'");
|
|
198
|
-
expect((0, _latexBridge.fromMathLive)('x^{\\prime\\prime\\prime}')).toEqual("x'''");
|
|
199
|
-
expect((0, _latexBridge.fromMathLive)('\\doubleprime')).toEqual("''");
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
// Typing `'` twice yields two superscript groups - a MathJax double-exponent
|
|
203
|
-
// error - so they collapse into apostrophes too.
|
|
204
|
-
it('collapses adjacent prime superscripts', function () {
|
|
205
|
-
expect((0, _latexBridge.fromMathLive)('x^{\\prime}^{\\prime}')).toEqual("x''");
|
|
206
|
-
expect((0, _latexBridge.fromMathLive)('5^{\\prime}^{\\doubleprime}')).toEqual("5'''");
|
|
207
|
-
});
|
|
208
|
-
it('leaves superscripts that hold more than primes alone', function () {
|
|
209
|
-
expect((0, _latexBridge.fromMathLive)('x^{\\prime 2}')).toEqual('x^{\\prime 2}');
|
|
210
|
-
expect((0, _latexBridge.fromMathLive)('x^{2}')).toEqual('x^{2}');
|
|
211
|
-
});
|
|
212
|
-
it('round-trips stored primes unchanged', function () {
|
|
213
|
-
expect((0, _latexBridge.fromMathLive)("12^{\\circ}30'15''")).toEqual("12^{\\circ}30'15''");
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
// `5′6″` typed or pasted as characters serialises as bare commands. A bare
|
|
217
|
-
// `\prime` is full size in MathJax while `''` is a superscript, so storing
|
|
218
|
-
// `5\prime6''` drew the single prime larger than each stroke of the double.
|
|
219
|
-
it('stores bare primes as apostrophes, so single and double match', function () {
|
|
220
|
-
expect((0, _latexBridge.fromMathLive)('5\\prime6\\doubleprime')).toEqual("5'6''");
|
|
221
|
-
expect((0, _latexBridge.fromMathLive)('5\\prime 6\\doubleprime')).toEqual("5' 6''");
|
|
222
|
-
expect((0, _latexBridge.fromMathLive)('\\prime')).toEqual("'");
|
|
223
|
-
expect((0, _latexBridge.fromMathLive)('\\frac{5\\prime}{2}')).toEqual("\\frac{5'}{2}");
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
// Inside a script a prime is already a superscript; an apostrophe there
|
|
227
|
-
// would be a prime *of* the script.
|
|
228
|
-
it('keeps primes that are inside a superscript or subscript', function () {
|
|
229
|
-
expect((0, _latexBridge.fromMathLive)('x^{\\prime 2}')).toEqual('x^{\\prime 2}');
|
|
230
|
-
expect((0, _latexBridge.fromMathLive)('x^\\prime')).toEqual('x^\\prime');
|
|
231
|
-
expect((0, _latexBridge.fromMathLive)('x_{\\prime}')).toEqual('x_{\\prime}');
|
|
232
|
-
// MathJax has no \doubleprime: spell it out rather than leave red text
|
|
233
|
-
expect((0, _latexBridge.fromMathLive)('x^{\\doubleprime 2}')).toEqual('x^{\\prime\\prime 2}');
|
|
234
|
-
});
|
|
235
|
-
it('closes the script scope at the matching brace', function () {
|
|
236
|
-
expect((0, _latexBridge.fromMathLive)('x^{2}\\prime')).toEqual("x^{2}'");
|
|
237
|
-
expect((0, _latexBridge.fromMathLive)('x^{\\frac{a}{b}}6\\doubleprime')).toEqual("x^{\\frac{a}{b}}6''");
|
|
238
|
-
});
|
|
239
|
-
it('does not touch commands that merely start with "prime"', function () {
|
|
240
|
-
expect((0, _latexBridge.fromMathLive)('\\primes')).toEqual('\\primes');
|
|
241
|
-
expect((0, _latexBridge.fromMathLive)('\\backprime')).toEqual('\\backprime');
|
|
242
|
-
});
|
|
243
|
-
it('no keypad key inserts an alias name', function () {
|
|
244
|
-
/* eslint-disable global-require */
|
|
245
|
-
var fs = require('fs');
|
|
246
|
-
var path = require('path');
|
|
247
|
-
/* eslint-enable global-require */
|
|
248
|
-
var keysDir = path.resolve(__dirname, '../keys');
|
|
249
|
-
var keys = [];
|
|
250
|
-
var _collect = function collect(v) {
|
|
251
|
-
if (Array.isArray(v)) return v.forEach(_collect);
|
|
252
|
-
if (v && (0, _typeof2["default"])(v) === 'object' && (v.command || v.latex || v.write)) keys.push(v);
|
|
253
|
-
};
|
|
254
|
-
fs.readdirSync(keysDir).filter(function (f) {
|
|
255
|
-
return /\.js$/.test(f);
|
|
256
|
-
})
|
|
257
|
-
// eslint-disable-next-line global-require, import/no-dynamic-require
|
|
258
|
-
.forEach(function (f) {
|
|
259
|
-
return Object.values(require(path.join(keysDir, f))).forEach(_collect);
|
|
260
|
-
});
|
|
261
|
-
expect(keys.length).toBeGreaterThan(50);
|
|
262
|
-
keys.forEach(function (k) {
|
|
263
|
-
var action = (0, _latexBridge.keyToAction)(k);
|
|
264
|
-
var value = action && action.value || '';
|
|
265
|
-
Object.keys(_latexBridge.MATHQUILL_ALIASES).forEach(function (alias) {
|
|
266
|
-
expect(new RegExp("\\".concat(alias, "(?![a-zA-Z])")).test(value)).toBe(false);
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
});
|
|
271
137
|
describe('keyToAction', function () {
|
|
272
138
|
it('prefers latex when there is no command', function () {
|
|
273
139
|
expect((0, _latexBridge.keyToAction)({
|
|
@@ -306,35 +172,6 @@ describe('latex-bridge', function () {
|
|
|
306
172
|
value: '^{#?}'
|
|
307
173
|
});
|
|
308
174
|
});
|
|
309
|
-
|
|
310
|
-
// MathQuill's `/` turned the preceding expression into the numerator: type
|
|
311
|
-
// 5, press the key, get 5/_ with the caret in the denominator. `#@` is
|
|
312
|
-
// MathLive's "selection, or the item before the cursor" token, and is what
|
|
313
|
-
// MathLive binds to `/` itself.
|
|
314
|
-
it('division takes the preceding item as the numerator', function () {
|
|
315
|
-
expect((0, _latexBridge.keyToAction)({
|
|
316
|
-
command: '/'
|
|
317
|
-
})).toEqual({
|
|
318
|
-
type: 'insert',
|
|
319
|
-
value: '\\frac{#@}{#?}'
|
|
320
|
-
});
|
|
321
|
-
});
|
|
322
|
-
it('an explicit blank-over-blank fraction stays empty', function () {
|
|
323
|
-
// distinct from `/`: this key is meant to insert two empty slots
|
|
324
|
-
expect((0, _latexBridge.keyToAction)({
|
|
325
|
-
command: '\\frac'
|
|
326
|
-
})).toEqual({
|
|
327
|
-
type: 'insert',
|
|
328
|
-
value: '\\frac{#?}{#?}'
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
it('the x-over-blank key routes through division', function () {
|
|
332
|
-
// eslint-disable-next-line global-require
|
|
333
|
-
var _require3 = require('../keys/fractions'),
|
|
334
|
-
xOverBlank = _require3.xOverBlank;
|
|
335
|
-
expect(xOverBlank.command).toEqual('/');
|
|
336
|
-
expect((0, _latexBridge.keyToAction)(xOverBlank).value).toEqual('\\frac{#@}{#?}');
|
|
337
|
-
});
|
|
338
175
|
it('passes argument-less commands through', function () {
|
|
339
176
|
expect((0, _latexBridge.keyToAction)({
|
|
340
177
|
command: '\\pi'
|
|
@@ -411,4 +248,4 @@ describe('latex-bridge', function () {
|
|
|
411
248
|
});
|
|
412
249
|
});
|
|
413
250
|
});
|
|
414
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF0ZXhCcmlkZ2UiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsImV4cGVjdCIsInRvTWF0aExpdmUiLCJ0b0VxdWFsIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiTkVXTElORV9FTUJFRCIsIkRFRkFVTFRfRklFTERfSUQiLCJmcm9tTWF0aExpdmUiLCJzdG9yZWQiLCJmb3JFYWNoIiwibCIsIm5vdCIsInRvQ29udGFpbiIsInRvTmF0aXZlQ29tbWFuZHMiLCJvdXQiLCJ0b01hdGNoIiwiZmllbGRJZHMiLCJsYXRleCIsIl9yZXF1aXJlIiwiZGl2aWRlIiwiX3JlcXVpcmUyIiwicGVycGVuZGljdWxhciIsInBlcnBpbmRpY3VsYXIiLCJrZXlUb0FjdGlvbiIsInR5cGUiLCJ2YWx1ZSIsInRvQ2Fub25pY2FsQ29tbWFuZHMiLCJmcyIsInBhdGgiLCJrZXlzRGlyIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsImtleXMiLCJjb2xsZWN0IiwidiIsIkFycmF5IiwiaXNBcnJheSIsIl90eXBlb2YyIiwiY29tbWFuZCIsIndyaXRlIiwicHVzaCIsInJlYWRkaXJTeW5jIiwiZmlsdGVyIiwiZiIsInRlc3QiLCJPYmplY3QiLCJ2YWx1ZXMiLCJqb2luIiwibGVuZ3RoIiwidG9CZUdyZWF0ZXJUaGFuIiwiayIsImFjdGlvbiIsIk1BVEhRVUlMTF9BTElBU0VTIiwiYWxpYXMiLCJSZWdFeHAiLCJ0b0JlIiwiX3JlcXVpcmUzIiwieE92ZXJCbGFuayIsImtleXN0cm9rZSIsInRvQmVVbmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2xhdGV4LWJyaWRnZS50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHRvTWF0aExpdmUsXG4gIGZyb21NYXRoTGl2ZSxcbiAgZmllbGRJZHMsXG4gIGtleVRvQWN0aW9uLFxuICB0b05hdGl2ZUNvbW1hbmRzLFxuICB0b0Nhbm9uaWNhbENvbW1hbmRzLFxuICBNQVRIUVVJTExfQUxJQVNFUyxcbiAgTkVXTElORV9FTUJFRCxcbiAgREVGQVVMVF9GSUVMRF9JRCxcbn0gZnJvbSAnLi4vbGF0ZXgtYnJpZGdlJztcblxuZGVzY3JpYmUoJ2xhdGV4LWJyaWRnZScsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3RvTWF0aExpdmUnLCAoKSA9PiB7XG4gICAgaXQoJ3Bhc3NlcyBwbGFpbiBsYXRleCB0aHJvdWdoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUoJ1xcXFxmcmFjezF9ezJ9JykpLnRvRXF1YWwoJ1xcXFxmcmFjezF9ezJ9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBlbXB0eS9udWxsaXNoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUoJycpKS50b0VxdWFsKCcnKTtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKHVuZGVmaW5lZCkpLnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUobnVsbCkpLnRvRXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NvbnZlcnRzIGEgbmV3TGluZSBlbWJlZCB0byBhIG11bHRpbGluZSBlbnZpcm9ubWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKGBhJHtORVdMSU5FX0VNQkVEfWJgKSkudG9FcXVhbCgnXFxcXGRpc3BsYXlsaW5lc3thIFxcXFxcXFxcIGJ9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29udmVydHMgbXVsdGlwbGUgbmV3TGluZSBlbWJlZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZShgYSR7TkVXTElORV9FTUJFRH1iJHtORVdMSU5FX0VNQkVEfWNgKSkudG9FcXVhbCgnXFxcXGRpc3BsYXlsaW5lc3thIFxcXFxcXFxcIGIgXFxcXFxcXFwgY30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb252ZXJ0cyBNYXRoUXVpbGwgYW5zd2VyIGJsb2NrcyB0byBwbGFjZWhvbGRlcnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZSgneD1cXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IxXXt9JykpLnRvRXF1YWwoJ3g9XFxcXHBsYWNlaG9sZGVyW3IxXXt9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJlc2VydmVzIGFuc3dlciBibG9jayBjb250ZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUoJ1xcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjJdezd9JykpLnRvRXF1YWwoJ1xcXFxwbGFjZWhvbGRlcltyMl17N30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWZhdWx0cyBhbiB1bm5hbWVkIGFuc3dlciBibG9jayBpZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKCdcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW117fScpKS50b0VxdWFsKGBcXFxccGxhY2Vob2xkZXJbJHtERUZBVUxUX0ZJRUxEX0lEfV17fWApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgYW5zd2VyIGJsb2NrcyBhbmQgbmV3bGluZXMgdG9nZXRoZXInLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZShgXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fSR7TkVXTElORV9FTUJFRH14YCkpLnRvRXF1YWwoXG4gICAgICAgICdcXFxcZGlzcGxheWxpbmVze1xcXFxwbGFjZWhvbGRlcltyMV17fSBcXFxcXFxcXCB4fScsXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbU1hdGhMaXZlJywgKCkgPT4ge1xuICAgIGl0KCdwYXNzZXMgcGxhaW4gbGF0ZXggdGhyb3VnaCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ1xcXFxmcmFjezF9ezJ9JykpLnRvRXF1YWwoJ1xcXFxmcmFjezF9ezJ9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgndW53cmFwcyBkaXNwbGF5bGluZXMgYmFjayB0byBuZXdMaW5lIGVtYmVkcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ1xcXFxkaXNwbGF5bGluZXN7YSBcXFxcXFxcXCBifScpKS50b0VxdWFsKGBhJHtORVdMSU5FX0VNQkVEfWJgKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb252ZXJ0cyBwbGFjZWhvbGRlcnMgYmFjayB0byBNYXRoUXVpbGwgYW5zd2VyIGJsb2NrcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ3g9XFxcXHBsYWNlaG9sZGVyW3IxXXt9JykpLnRvRXF1YWwoJ3g9XFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdW5kLXRyaXBzIGEgbmV3bGluZSBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGBhJHtORVdMSU5FX0VNQkVEfWIke05FV0xJTkVfRU1CRUR9Y2A7XG5cbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUodG9NYXRoTGl2ZShzdG9yZWQpKSkudG9FcXVhbChzdG9yZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdW5kLXRyaXBzIGFuIGFuc3dlci1ibG9jayBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9ICd4PVxcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjFde30rXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMl17M30nO1xuXG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKHRvTWF0aExpdmUoc3RvcmVkKSkpLnRvRXF1YWwoc3RvcmVkKTtcbiAgICB9KTtcblxuICAgIC8vIE1hdGhMaXZlIHNlcmlhbGlzZXMgZW1wdHkgc2xvdHMgYXMgXFxwbGFjZWhvbGRlcnt9LCB3aGljaCBNYXRoSmF4ICh1c2VkIGJ5XG4gICAgLy8gQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcgZm9yIHByb21wdHMvcHJldmlld3MpIHJlbmRlcnMgYXMgcmVkIGVycm9yIHRleHQuXG4gICAgaXQoJ3N0cmlwcyB1bm5hbWVkIHBsYWNlaG9sZGVycyB0aGF0IE1hdGhMaXZlIGFkZHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxcbG9uZ2RpdntcXFxccGxhY2Vob2xkZXJ7fX0nKSkudG9FcXVhbCgnXFxcXGxvbmdkaXZ7fScpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXGZyYWN7XFxcXHBsYWNlaG9sZGVye319e1xcXFxwbGFjZWhvbGRlcnt9fScpKS50b0VxdWFsKCdcXFxcZnJhY3t9e30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdrZWVwcyBjb250ZW50IGluc2lkZSBhbiB1bm5hbWVkIHBsYWNlaG9sZGVyJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXHNxcnR7XFxcXHBsYWNlaG9sZGVyezd9fScpKS50b0VxdWFsKCdcXFxcc3FydHs3fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgYSBiYXJlIFxcXFxwbGFjZWhvbGRlciB3aXRoIG5vIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXGxvbmdkaXZ7XFxcXHBsYWNlaG9sZGVyfScpKS50b0VxdWFsKCdcXFxcbG9uZ2Rpdnt9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbmV2ZXIgbGVha3MgdGhlIHRva2VuIFxcXFxwbGFjZWhvbGRlcicsICgpID0+IHtcbiAgICAgIFsnXFxcXGxvbmdkaXZ7XFxcXHBsYWNlaG9sZGVye319JywgJ1xcXFxmcmFje1xcXFxwbGFjZWhvbGRlcnt9fXt4fScsICdcXFxccGxhY2Vob2xkZXJ7fSddLmZvckVhY2goKGwpID0+IHtcbiAgICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZShsKSkubm90LnRvQ29udGFpbignXFxcXHBsYWNlaG9sZGVyJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzdGlsbCBtYXBzIE5BTUVEIHBsYWNlaG9sZGVycyB0byBhbnN3ZXIgYmxvY2tzJywgKCkgPT4ge1xuICAgICAgLy8gbmFtZWQgb25lcyBhcmUgYW5zd2VyIGJsb2NrcyBhbmQgbXVzdCBzdXJ2aXZlXG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxccGxhY2Vob2xkZXJbcjFde30nKSkudG9FcXVhbCgnXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdW5kLXRyaXBzIGFuc3dlciBibG9ja3MgY29tYmluZWQgd2l0aCBuZXdsaW5lcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGBcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IxXXt9JHtORVdMSU5FX0VNQkVEfXlgO1xuXG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKHRvTWF0aExpdmUoc3RvcmVkKSkpLnRvRXF1YWwoc3RvcmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQSBNYXRoTGl2ZSBtYWNybyBzZXJpYWxpc2VzIGZyb20gdGhlIGFyZ3VtZW50cyBpdCB3YXMgY3JlYXRlZCB3aXRoLCBzbyB0ZXh0XG4gIC8vIHR5cGVkIGluc2lkZSBpdHMgZXhwYW5zaW9uIG5ldmVyIGNvbWVzIGJhY2sgb3V0IG9mIGdldFZhbHVlKCdsYXRleCcpLlxuICAvLyBBcmd1bWVudC10YWtpbmcgcGllIGNvbW1hbmRzIG11c3QgdGhlcmVmb3JlIGJlY29tZSBuYXRpdmUgY29uc3RydWN0cyBiZWZvcmVcbiAgLy8gdGhleSByZWFjaCBhIG1hdGhmaWVsZC5cbiAgZGVzY3JpYmUoJ3RvTmF0aXZlQ29tbWFuZHMnLCAoKSA9PiB7XG4gICAgaXQoJ2V4cGFuZHMgXFxcXGxvbmdkaXYgdG8gbmF0aXZlIFxcXFxlbmNsb3NlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ1xcXFxsb25nZGl2ezEyMzR9JykpLnRvRXF1YWwoJ1xcXFxlbmNsb3Nle2xvbmdkaXZ9ezEyMzR9Jyk7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGxvbmdkaXZ7fScpKS50b0VxdWFsKCdcXFxcZW5jbG9zZXtsb25nZGl2fXt9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZXhwYW5kcyBcXFxcb3ZlcmFyYyB0byBuYXRpdmUgXFxcXG92ZXJwYXJlbicsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCdcXFxcb3ZlcmFyY3tBQn0nKSkudG9FcXVhbCgnXFxcXG92ZXJwYXJlbntBQn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdleHBhbmRzIFxcXFxhYnMgdG8gbmF0aXZlIFxcXFxsZWZ0fC4uXFxcXHJpZ2h0fCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCdcXFxcYWJze3h9JykpLnRvRXF1YWwoJ1xcXFxsZWZ0fHhcXFxccmlnaHR8Jyk7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGFic3t9JykpLnRvRXF1YWwoJ1xcXFxsZWZ0fFxcXFxyaWdodHwnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIG5lc3RlZCBicmFjZXMgaW5zaWRlIFxcXFxhYnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGFic3tcXFxcZnJhY3sxfXsyfX0nKSkudG9FcXVhbCgnXFxcXGxlZnR8XFxcXGZyYWN7MX17Mn1cXFxccmlnaHR8Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBzZXZlcmFsIG9jY3VycmVuY2VzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ1xcXFxhYnN7YX0rXFxcXGFic3tifScpKS50b0VxdWFsKCdcXFxcbGVmdHxhXFxcXHJpZ2h0fCtcXFxcbGVmdHxiXFxcXHJpZ2h0fCcpO1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ1xcXFxsb25nZGl2ezF9XFxcXGxvbmdkaXZ7Mn0nKSkudG9FcXVhbCgnXFxcXGVuY2xvc2V7bG9uZ2Rpdn17MX1cXFxcZW5jbG9zZXtsb25nZGl2fXsyfScpO1xuICAgIH0pO1xuXG4gICAgLy8gYCVgIHN0YXJ0cyBhIGNvbW1lbnQgaW4gcmVhbCBMYVRlWCwgc28gTWF0aExpdmUgZHJvcHMgaXQgYW5kIGV2ZXJ5dGhpbmdcbiAgICAvLyBhZnRlciBpdC4gTWF0aFF1aWxsIGhhZCBubyBjb21tZW50cywgc28gbGF0ZXggYXV0aG9yZWQgdW5kZXIgaXQgLSBvciBieVxuICAgIC8vIGhhbmQgLSBjYW4gY2FycnkgYSBiYXJlIGAlYCB0aGF0IHdvdWxkIHNpbGVudGx5IHRydW5jYXRlIHRoZSBleHByZXNzaW9uLlxuICAgIGl0KCdlc2NhcGVzIGEgYmFyZSAlIHNvIGl0IGNhbm5vdCBjb21tZW50IG91dCB0aGUgcmVzdCBvZiB0aGUgbGluZScsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCclJykpLnRvRXF1YWwoJ1xcXFwlJyk7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnNTAlJykpLnRvRXF1YWwoJzUwXFxcXCUnKTtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCd4JXknKSkudG9FcXVhbCgneFxcXFwleScpO1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ2ElYiVjJykpLnRvRXF1YWwoJ2FcXFxcJWJcXFxcJWMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdsZWF2ZXMgYW4gYWxyZWFkeS1lc2NhcGVkICUgYWxvbmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXCUnKSkudG9FcXVhbCgnXFxcXCUnKTtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCc1MFxcXFwlJykpLnRvRXF1YWwoJzUwXFxcXCUnKTtcbiAgICAgIC8vIGlkZW1wb3RlbnQ6IHRvTWF0aExpdmUgbWF5IHJ1biBvdmVyIGxhdGV4IHRoYXQgY2FtZSBiYWNrIG91dCBvZiBhIGZpZWxkXG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcyh0b05hdGl2ZUNvbW1hbmRzKCc1MCUnKSkpLnRvRXF1YWwoJzUwXFxcXCUnKTtcbiAgICB9KTtcblxuICAgIC8vIGBcXFxcYCBpcyBhIGxpbmUgYnJlYWssIG5vdCBhbiBlc2NhcGUsIHNvIHRoZSBgJWAgYWZ0ZXIgaXQgaXMgc3RpbGwgYmFyZS5cbiAgICBpdCgnY291bnRzIGJhY2tzbGFzaGVzIHRvIGRlY2lkZSB3aGV0aGVyIGEgJSBpcyBlc2NhcGVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ2FcXFxcXFxcXCViJykpLnRvRXF1YWwoJ2FcXFxcXFxcXFxcXFwlYicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2xlYXZlcyBvdGhlciBsYXRleCB1bnRvdWNoZWQnLCAoKSA9PiB7XG4gICAgICBbJ1xcXFxmcmFjezF9ezJ9JywgJ1xcXFxwaScsICdcXFxcc3FydHt4fScsICdcXFxcb3ZlcmxpbmV7QUJ9J10uZm9yRWFjaCgobCkgPT4ge1xuICAgICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcyhsKSkudG9FcXVhbChsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbnVsbGlzaCBpbnB1dCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKHVuZGVmaW5lZCkpLnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJycpKS50b0VxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyBhcHBsaWVkIGJ5IHRvTWF0aExpdmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZSgnXFxcXGxvbmdkaXZ7NX0nKSkudG9FcXVhbCgnXFxcXGVuY2xvc2V7bG9uZ2Rpdn17NX0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBsZWF2ZSBhIHBpZSBtYWNybyBpbiB3aGF0IHJlYWNoZXMgdGhlIGZpZWxkJywgKCkgPT4ge1xuICAgICAgWydcXFxcbG9uZ2Rpdns3fScsICdcXFxcYWJzezd9JywgJ1xcXFxvdmVyYXJjezd9J10uZm9yRWFjaCgobCkgPT4ge1xuICAgICAgICBjb25zdCBvdXQgPSB0b01hdGhMaXZlKGwpO1xuXG4gICAgICAgIGV4cGVjdChvdXQpLm5vdC50b01hdGNoKC9cXFxcbG9uZ2RpdnxcXFxcYWJzfFxcXFxvdmVyYXJjLyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZpZWxkSWRzJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGlkcyBpbiBkb2N1bWVudCBvcmRlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdChmaWVsZElkcygnXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fStcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IyXXt9JykpLnRvRXF1YWwoWydyMScsICdyMiddKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIFtdIHdoZW4gdGhlcmUgYXJlIG5vbmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZmllbGRJZHMoJ3greScpKS50b0VxdWFsKFtdKTtcbiAgICAgIGV4cGVjdChmaWVsZElkcyh1bmRlZmluZWQpKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyByZXBlYXRhYmxlIChyZWdleCBsYXN0SW5kZXggaXMgcmVzZXQpJywgKCkgPT4ge1xuICAgICAgY29uc3QgbGF0ZXggPSAnXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fSc7XG5cbiAgICAgIGV4cGVjdChmaWVsZElkcyhsYXRleCkpLnRvRXF1YWwoWydyMSddKTtcbiAgICAgIGV4cGVjdChmaWVsZElkcyhsYXRleCkpLnRvRXF1YWwoWydyMSddKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gTWF0aFF1aWxsIHJlZ2lzdGVyZWQgc29tZSBrZXlwYWQgbmFtZXMgYXMgYWxpYXNlcyBvZiBhIGRpZmZlcmVudCBjb21tYW5kOlxuICAvLyB0aGUgZGl2aWRlIGtleSBzdG9yZWQgYFxcZGl2YCwgbm90IGBcXGRpdmlkZWAuIE1hdGhMaXZlIGtub3dzIGBcXGRpdmlkZWAgb25seSBhc1xuICAvLyBhIHBpZSBtYWNybyBhbmQgc2VyaWFsaXNlcyBpdCB1bmRlciB0aGF0IG5hbWUsIHNvIGl0IHJlYWNoZWQgc3RvcmFnZSBhbmRcbiAgLy8gTWF0aEpheCAod2hpY2ggaGFzIG5vIGBcXGRpdmlkZWApIHJlbmRlcmVkIGl0IGFzIHJlZCB0ZXh0LlxuICBkZXNjcmliZSgnTWF0aFF1aWxsIGNvbW1hbmQgYWxpYXNlcycsICgpID0+IHtcbiAgICBpdCgndGhlIGRpdmlkZSBhbmQgcGVycGVuZGljdWxhciBrZXlzIGluc2VydCB0aGUgY29tbWFuZCBNYXRoUXVpbGwgc3RvcmVkJywgKCkgPT4ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgZ2xvYmFsLXJlcXVpcmUgKi9cbiAgICAgIGNvbnN0IHsgZGl2aWRlIH0gPSByZXF1aXJlKCcuLi9rZXlzL2Jhc2ljLW9wZXJhdG9ycycpO1xuICAgICAgLy8gRXhwb3J0ZWQgdW5kZXIgYSBwcmUtZXhpc3RpbmcgbWlzc3BlbGxpbmcuXG4gICAgICBjb25zdCB7IHBlcnBpbmRpY3VsYXI6IHBlcnBlbmRpY3VsYXIgfSA9IHJlcXVpcmUoJy4uL2tleXMvZ2VvbWV0cnknKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgZ2xvYmFsLXJlcXVpcmUgKi9cblxuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKGRpdmlkZSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcZGl2JyB9KTtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbihwZXJwZW5kaWN1bGFyKSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ1xcXFxwZXJwJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzdG9yZXMgdGhlIGNhbm9uaWNhbCBjb21tYW5kIGZvciBsYXRleCB0aGF0IHN0aWxsIGNhcnJpZXMgYW4gYWxpYXMnLCAoKSA9PiB7XG4gICAgICAvLyBUeXBlZCBpbnRvIHRoZSBmaWVsZCwgb3Igc2F2ZWQgYmVmb3JlIHRoZSBrZXlwYWQgcmVzb2x2ZWQgdGhlIGFsaWFzLlxuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnMVxcXFxkaXZpZGUgNicpKS50b0VxdWFsKCcxXFxcXGRpdiA2Jyk7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdhXFxcXHBlcnBlbmRpY3VsYXIgYicpKS50b0VxdWFsKCdhXFxcXHBlcnAgYicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ29ubHkgcmVwbGFjZXMgd2hvbGUgY29tbWFuZCBuYW1lcycsICgpID0+IHtcbiAgICAgIC8vIFxcZGl2aWRlb250aW1lcyBpcyBhIHJlYWwgQU1TIHN5bWJvbCBhbmQgbXVzdCBzdXJ2aXZlLlxuICAgICAgZXhwZWN0KHRvQ2Fub25pY2FsQ29tbWFuZHMoJ2FcXFxcZGl2aWRlb250aW1lcyBiJykpLnRvRXF1YWwoJ2FcXFxcZGl2aWRlb250aW1lcyBiJyk7XG4gICAgICBleHBlY3QodG9DYW5vbmljYWxDb21tYW5kcygnXFxcXGRpdmlkZVxcXFxkaXZpZGUnKSkudG9FcXVhbCgnXFxcXGRpdlxcXFxkaXYnKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBkb3VibGUgcHJpbWUga2V5OiBNYXRoTGl2ZSBzZXJpYWxpc2VzIGA1JydgIGFzIGA1XntcXGRvdWJsZXByaW1lfWAsXG4gICAgLy8gd2hpY2ggTWF0aEpheCBjYW5ub3QgcmVuZGVyIChyZWQgYFxcZG91YmxlcHJpbWVgKS4gTWF0aFF1aWxsIHN0b3JlZCBgNScnYC5cbiAgICBpdCgnc3RvcmVzIHRoZSBkb3VibGUgcHJpbWUga2V5IGFzIGFwb3N0cm9waGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnNV57XFxcXGRvdWJsZXByaW1lfScpKS50b0VxdWFsKFwiNScnXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57XFxcXHByaW1lfScpKS50b0VxdWFsKFwieCdcIik7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCd4XntcXFxccHJpbWVcXFxccHJpbWVcXFxccHJpbWV9JykpLnRvRXF1YWwoXCJ4JycnXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXGRvdWJsZXByaW1lJykpLnRvRXF1YWwoXCInJ1wiKTtcbiAgICB9KTtcblxuICAgIC8vIFR5cGluZyBgJ2AgdHdpY2UgeWllbGRzIHR3byBzdXBlcnNjcmlwdCBncm91cHMgLSBhIE1hdGhKYXggZG91YmxlLWV4cG9uZW50XG4gICAgLy8gZXJyb3IgLSBzbyB0aGV5IGNvbGxhcHNlIGludG8gYXBvc3Ryb3BoZXMgdG9vLlxuICAgIGl0KCdjb2xsYXBzZXMgYWRqYWNlbnQgcHJpbWUgc3VwZXJzY3JpcHRzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57XFxcXHByaW1lfV57XFxcXHByaW1lfScpKS50b0VxdWFsKFwieCcnXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnNV57XFxcXHByaW1lfV57XFxcXGRvdWJsZXByaW1lfScpKS50b0VxdWFsKFwiNScnJ1wiKTtcbiAgICB9KTtcblxuICAgIGl0KCdsZWF2ZXMgc3VwZXJzY3JpcHRzIHRoYXQgaG9sZCBtb3JlIHRoYW4gcHJpbWVzIGFsb25lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57XFxcXHByaW1lIDJ9JykpLnRvRXF1YWwoJ3hee1xcXFxwcmltZSAyfScpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57Mn0nKSkudG9FcXVhbCgneF57Mn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdyb3VuZC10cmlwcyBzdG9yZWQgcHJpbWVzIHVuY2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoXCIxMl57XFxcXGNpcmN9MzAnMTUnJ1wiKSkudG9FcXVhbChcIjEyXntcXFxcY2lyY30zMCcxNScnXCIpO1xuICAgIH0pO1xuXG4gICAgLy8gYDXigLI24oCzYCB0eXBlZCBvciBwYXN0ZWQgYXMgY2hhcmFjdGVycyBzZXJpYWxpc2VzIGFzIGJhcmUgY29tbWFuZHMuIEEgYmFyZVxuICAgIC8vIGBcXHByaW1lYCBpcyBmdWxsIHNpemUgaW4gTWF0aEpheCB3aGlsZSBgJydgIGlzIGEgc3VwZXJzY3JpcHQsIHNvIHN0b3JpbmdcbiAgICAvLyBgNVxccHJpbWU2JydgIGRyZXcgdGhlIHNpbmdsZSBwcmltZSBsYXJnZXIgdGhhbiBlYWNoIHN0cm9rZSBvZiB0aGUgZG91YmxlLlxuICAgIGl0KCdzdG9yZXMgYmFyZSBwcmltZXMgYXMgYXBvc3Ryb3BoZXMsIHNvIHNpbmdsZSBhbmQgZG91YmxlIG1hdGNoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnNVxcXFxwcmltZTZcXFxcZG91YmxlcHJpbWUnKSkudG9FcXVhbChcIjUnNicnXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnNVxcXFxwcmltZSA2XFxcXGRvdWJsZXByaW1lJykpLnRvRXF1YWwoXCI1JyA2JydcIik7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxccHJpbWUnKSkudG9FcXVhbChcIidcIik7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxcZnJhY3s1XFxcXHByaW1lfXsyfScpKS50b0VxdWFsKFwiXFxcXGZyYWN7NSd9ezJ9XCIpO1xuICAgIH0pO1xuXG4gICAgLy8gSW5zaWRlIGEgc2NyaXB0IGEgcHJpbWUgaXMgYWxyZWFkeSBhIHN1cGVyc2NyaXB0OyBhbiBhcG9zdHJvcGhlIHRoZXJlXG4gICAgLy8gd291bGQgYmUgYSBwcmltZSAqb2YqIHRoZSBzY3JpcHQuXG4gICAgaXQoJ2tlZXBzIHByaW1lcyB0aGF0IGFyZSBpbnNpZGUgYSBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCd4XntcXFxccHJpbWUgMn0nKSkudG9FcXVhbCgneF57XFxcXHByaW1lIDJ9Jyk7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCd4XlxcXFxwcmltZScpKS50b0VxdWFsKCd4XlxcXFxwcmltZScpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF97XFxcXHByaW1lfScpKS50b0VxdWFsKCd4X3tcXFxccHJpbWV9Jyk7XG4gICAgICAvLyBNYXRoSmF4IGhhcyBubyBcXGRvdWJsZXByaW1lOiBzcGVsbCBpdCBvdXQgcmF0aGVyIHRoYW4gbGVhdmUgcmVkIHRleHRcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ3hee1xcXFxkb3VibGVwcmltZSAyfScpKS50b0VxdWFsKCd4XntcXFxccHJpbWVcXFxccHJpbWUgMn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdjbG9zZXMgdGhlIHNjcmlwdCBzY29wZSBhdCB0aGUgbWF0Y2hpbmcgYnJhY2UnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCd4XnsyfVxcXFxwcmltZScpKS50b0VxdWFsKFwieF57Mn0nXCIpO1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneF57XFxcXGZyYWN7YX17Yn19NlxcXFxkb3VibGVwcmltZScpKS50b0VxdWFsKFwieF57XFxcXGZyYWN7YX17Yn19NicnXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IHRvdWNoIGNvbW1hbmRzIHRoYXQgbWVyZWx5IHN0YXJ0IHdpdGggXCJwcmltZVwiJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXHByaW1lcycpKS50b0VxdWFsKCdcXFxccHJpbWVzJyk7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxcYmFja3ByaW1lJykpLnRvRXF1YWwoJ1xcXFxiYWNrcHJpbWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdubyBrZXlwYWQga2V5IGluc2VydHMgYW4gYWxpYXMgbmFtZScsICgpID0+IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGdsb2JhbC1yZXF1aXJlICovXG4gICAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gICAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBnbG9iYWwtcmVxdWlyZSAqL1xuICAgICAgY29uc3Qga2V5c0RpciA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9rZXlzJyk7XG4gICAgICBjb25zdCBrZXlzID0gW107XG5cbiAgICAgIGNvbnN0IGNvbGxlY3QgPSAodikgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkgcmV0dXJuIHYuZm9yRWFjaChjb2xsZWN0KTtcbiAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICh2LmNvbW1hbmQgfHwgdi5sYXRleCB8fCB2LndyaXRlKSkga2V5cy5wdXNoKHYpO1xuICAgICAgfTtcblxuICAgICAgZnMucmVhZGRpclN5bmMoa2V5c0RpcilcbiAgICAgICAgLmZpbHRlcigoZikgPT4gL1xcLmpzJC8udGVzdChmKSlcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlLCBpbXBvcnQvbm8tZHluYW1pYy1yZXF1aXJlXG4gICAgICAgIC5mb3JFYWNoKChmKSA9PiBPYmplY3QudmFsdWVzKHJlcXVpcmUocGF0aC5qb2luKGtleXNEaXIsIGYpKSkuZm9yRWFjaChjb2xsZWN0KSk7XG5cbiAgICAgIGV4cGVjdChrZXlzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDUwKTtcblxuICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGtleVRvQWN0aW9uKGspO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChhY3Rpb24gJiYgYWN0aW9uLnZhbHVlKSB8fCAnJztcblxuICAgICAgICBPYmplY3Qua2V5cyhNQVRIUVVJTExfQUxJQVNFUykuZm9yRWFjaCgoYWxpYXMpID0+IHtcbiAgICAgICAgICBleHBlY3QobmV3IFJlZ0V4cChgXFxcXCR7YWxpYXN9KD8hW2EtekEtWl0pYCkudGVzdCh2YWx1ZSkpLnRvQmUoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgna2V5VG9BY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3ByZWZlcnMgbGF0ZXggd2hlbiB0aGVyZSBpcyBubyBjb21tYW5kJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgbGF0ZXg6ICdcXFxccGknLCB3cml0ZTogJ3AnIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXFxcXHBpJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd1c2VzIHdyaXRlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgd3JpdGU6ICd4JyB9KSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ3gnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2V4cGFuZHMgY29tbWFuZHMgdGhhdCB0YWtlIGFyZ3VtZW50cyBpbnRvIHBsYWNlaG9sZGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6ICdcXFxcZnJhYycgfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcZnJhY3sjP317Iz99JyB9KTtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6ICdcXFxcc3FydCcgfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcc3FydHsjP30nIH0pO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgY29tbWFuZDogJ14nIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXnsjP30nIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gTWF0aFF1aWxsJ3MgYC9gIHR1cm5lZCB0aGUgcHJlY2VkaW5nIGV4cHJlc3Npb24gaW50byB0aGUgbnVtZXJhdG9yOiB0eXBlXG4gICAgLy8gNSwgcHJlc3MgdGhlIGtleSwgZ2V0IDUvXyB3aXRoIHRoZSBjYXJldCBpbiB0aGUgZGVub21pbmF0b3IuIGAjQGAgaXNcbiAgICAvLyBNYXRoTGl2ZSdzIFwic2VsZWN0aW9uLCBvciB0aGUgaXRlbSBiZWZvcmUgdGhlIGN1cnNvclwiIHRva2VuLCBhbmQgaXMgd2hhdFxuICAgIC8vIE1hdGhMaXZlIGJpbmRzIHRvIGAvYCBpdHNlbGYuXG4gICAgaXQoJ2RpdmlzaW9uIHRha2VzIHRoZSBwcmVjZWRpbmcgaXRlbSBhcyB0aGUgbnVtZXJhdG9yJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgY29tbWFuZDogJy8nIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXFxcXGZyYWN7I0B9eyM/fScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gZXhwbGljaXQgYmxhbmstb3Zlci1ibGFuayBmcmFjdGlvbiBzdGF5cyBlbXB0eScsICgpID0+IHtcbiAgICAgIC8vIGRpc3RpbmN0IGZyb20gYC9gOiB0aGlzIGtleSBpcyBtZWFudCB0byBpbnNlcnQgdHdvIGVtcHR5IHNsb3RzXG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBjb21tYW5kOiAnXFxcXGZyYWMnIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXFxcXGZyYWN7Iz99eyM/fScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhlIHgtb3Zlci1ibGFuayBrZXkgcm91dGVzIHRocm91Z2ggZGl2aXNpb24nLCAoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICAgIGNvbnN0IHsgeE92ZXJCbGFuayB9ID0gcmVxdWlyZSgnLi4va2V5cy9mcmFjdGlvbnMnKTtcblxuICAgICAgZXhwZWN0KHhPdmVyQmxhbmsuY29tbWFuZCkudG9FcXVhbCgnLycpO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHhPdmVyQmxhbmspLnZhbHVlKS50b0VxdWFsKCdcXFxcZnJhY3sjQH17Iz99Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIGFyZ3VtZW50LWxlc3MgY29tbWFuZHMgdGhyb3VnaCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6ICdcXFxccGknIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXFxcXHBpJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdjb25jYXRlbmF0ZXMgYXJyYXkgY29tbWFuZHMgKE1hdGhRdWlsbCBjbWQoKSBhcHBsaWVkIHRoZW0gaW4gc2VxdWVuY2UpJywgKCkgPT4ge1xuICAgICAgLy8gTWVhc3VyZWQgQW5nbGVcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6IFsnbScsICdcXFxcYW5nbGUnXSB9KSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ21cXFxcYW5nbGUnIH0pO1xuICAgICAgLy8gbG9nIGJhc2UgbiAtIHRoZSBgX2AgcGFydCBtdXN0IHN0aWxsIGV4cGFuZCB0byBhIHBsYWNlaG9sZGVyXG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBjb21tYW5kOiBbJ1xcXFxsb2cnLCAnXyddIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXFxcXGxvZ197Iz99JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdhbHdheXMgcmV0dXJucyBhIHN0cmluZyB2YWx1ZSBmb3IgaW5zZXJ0IGFjdGlvbnMnLCAoKSA9PiB7XG4gICAgICBbeyBjb21tYW5kOiBbJ20nLCAnXFxcXGFuZ2xlJ10gfSwgeyBjb21tYW5kOiAnXFxcXGZyYWMnIH0sIHsgd3JpdGU6ICd4JyB9LCB7IGxhdGV4OiAnXFxcXHBpJyB9XS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0eXBlb2Yga2V5VG9BY3Rpb24oaykudmFsdWUpLnRvQmUoJ3N0cmluZycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWFwcyBrZXlzdHJva2VzIHRvIE1hdGhMaXZlIHNlbGVjdG9ycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGtleXN0cm9rZTogJ0xlZnQnIH0pKS50b0VxdWFsKHsgdHlwZTogJ2NvbW1hbmQnLCB2YWx1ZTogJ21vdmVUb1ByZXZpb3VzQ2hhcicgfSk7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBrZXlzdHJva2U6ICdSaWdodCcgfSkpLnRvRXF1YWwoeyB0eXBlOiAnY29tbWFuZCcsIHZhbHVlOiAnbW92ZVRvTmV4dENoYXInIH0pO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsga2V5c3Ryb2tlOiAnQmFja3NwYWNlJyB9KSkudG9FcXVhbCh7IHR5cGU6ICdjb21tYW5kJywgdmFsdWU6ICdkZWxldGVCYWNrd2FyZCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyB1bmRlZmluZWQgZm9yIHVua25vd24vZW1wdHkgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24odW5kZWZpbmVkKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHt9KSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsga2V5c3Ryb2tlOiAnTm9wZScgfSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdsYXRleCB3aW5zIG92ZXIgY29tbWFuZCBvbmx5IHdoZW4gY29tbWFuZCBpcyBhYnNlbnQnLCAoKSA9PiB7XG4gICAgICAvLyBhIGtleSB3aXRoIGJvdGggc2hvdWxkIHVzZSB0aGUgY29tbWFuZCBwYXRoIChtYXRjaGVzIE1hdGhJbnB1dC5rZXlwYWRQcmVzcylcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGxhdGV4OiAnXFxcXGZyYWN7fXt9JywgY29tbWFuZDogJ1xcXFxmcmFjJyB9KSkudG9FcXVhbCh7XG4gICAgICAgIHR5cGU6ICdpbnNlcnQnLFxuICAgICAgICB2YWx1ZTogJ1xcXFxmcmFjeyM/fXsjP30nLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxZQUFBLEdBQUFDLE9BQUE7QUFZQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxZ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
|
|
251
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF0ZXhCcmlkZ2UiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsImV4cGVjdCIsInRvTWF0aExpdmUiLCJ0b0VxdWFsIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiTkVXTElORV9FTUJFRCIsIkRFRkFVTFRfRklFTERfSUQiLCJmcm9tTWF0aExpdmUiLCJzdG9yZWQiLCJmb3JFYWNoIiwibCIsIm5vdCIsInRvQ29udGFpbiIsInRvTmF0aXZlQ29tbWFuZHMiLCJvdXQiLCJ0b01hdGNoIiwiZmllbGRJZHMiLCJsYXRleCIsImtleVRvQWN0aW9uIiwid3JpdGUiLCJ0eXBlIiwidmFsdWUiLCJjb21tYW5kIiwiayIsIl90eXBlb2YyIiwidG9CZSIsImtleXN0cm9rZSIsInRvQmVVbmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2xhdGV4LWJyaWRnZS50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHRvTWF0aExpdmUsXG4gIGZyb21NYXRoTGl2ZSxcbiAgZmllbGRJZHMsXG4gIGtleVRvQWN0aW9uLFxuICB0b05hdGl2ZUNvbW1hbmRzLFxuICBORVdMSU5FX0VNQkVELFxuICBERUZBVUxUX0ZJRUxEX0lELFxufSBmcm9tICcuLi9sYXRleC1icmlkZ2UnO1xuXG5kZXNjcmliZSgnbGF0ZXgtYnJpZGdlJywgKCkgPT4ge1xuICBkZXNjcmliZSgndG9NYXRoTGl2ZScsICgpID0+IHtcbiAgICBpdCgncGFzc2VzIHBsYWluIGxhdGV4IHRocm91Z2gnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZSgnXFxcXGZyYWN7MX17Mn0nKSkudG9FcXVhbCgnXFxcXGZyYWN7MX17Mn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIGVtcHR5L251bGxpc2gnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZSgnJykpLnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUodW5kZWZpbmVkKSkudG9FcXVhbCgnJyk7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZShudWxsKSkudG9FcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29udmVydHMgYSBuZXdMaW5lIGVtYmVkIHRvIGEgbXVsdGlsaW5lIGVudmlyb25tZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUoYGEke05FV0xJTkVfRU1CRUR9YmApKS50b0VxdWFsKCdcXFxcZGlzcGxheWxpbmVze2EgXFxcXFxcXFwgYn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb252ZXJ0cyBtdWx0aXBsZSBuZXdMaW5lIGVtYmVkcycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKGBhJHtORVdMSU5FX0VNQkVEfWIke05FV0xJTkVfRU1CRUR9Y2ApKS50b0VxdWFsKCdcXFxcZGlzcGxheWxpbmVze2EgXFxcXFxcXFwgYiBcXFxcXFxcXCBjfScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NvbnZlcnRzIE1hdGhRdWlsbCBhbnN3ZXIgYmxvY2tzIHRvIHBsYWNlaG9sZGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKCd4PVxcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjFde30nKSkudG9FcXVhbCgneD1cXFxccGxhY2Vob2xkZXJbcjFde30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcmVzZXJ2ZXMgYW5zd2VyIGJsb2NrIGNvbnRlbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9NYXRoTGl2ZSgnXFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMl17N30nKSkudG9FcXVhbCgnXFxcXHBsYWNlaG9sZGVyW3IyXXs3fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlZmF1bHRzIGFuIHVubmFtZWQgYW5zd2VyIGJsb2NrIGlkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTWF0aExpdmUoJ1xcXFxNYXRoUXVpbGxNYXRoRmllbGRbXXt9JykpLnRvRXF1YWwoYFxcXFxwbGFjZWhvbGRlclske0RFRkFVTFRfRklFTERfSUR9XXt9YCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBhbnN3ZXIgYmxvY2tzIGFuZCBuZXdsaW5lcyB0b2dldGhlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKGBcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IxXXt9JHtORVdMSU5FX0VNQkVEfXhgKSkudG9FcXVhbChcbiAgICAgICAgJ1xcXFxkaXNwbGF5bGluZXN7XFxcXHBsYWNlaG9sZGVyW3IxXXt9IFxcXFxcXFxcIHh9JyxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmcm9tTWF0aExpdmUnLCAoKSA9PiB7XG4gICAgaXQoJ3Bhc3NlcyBwbGFpbiBsYXRleCB0aHJvdWdoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXGZyYWN7MX17Mn0nKSkudG9FcXVhbCgnXFxcXGZyYWN7MX17Mn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCd1bndyYXBzIGRpc3BsYXlsaW5lcyBiYWNrIHRvIG5ld0xpbmUgZW1iZWRzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgnXFxcXGRpc3BsYXlsaW5lc3thIFxcXFxcXFxcIGJ9JykpLnRvRXF1YWwoYGEke05FV0xJTkVfRU1CRUR9YmApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NvbnZlcnRzIHBsYWNlaG9sZGVycyBiYWNrIHRvIE1hdGhRdWlsbCBhbnN3ZXIgYmxvY2tzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSgneD1cXFxccGxhY2Vob2xkZXJbcjFde30nKSkudG9FcXVhbCgneD1cXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IxXXt9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgncm91bmQtdHJpcHMgYSBuZXdsaW5lIGRvY3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVkID0gYGEke05FV0xJTkVfRU1CRUR9YiR7TkVXTElORV9FTUJFRH1jYDtcblxuICAgICAgZXhwZWN0KGZyb21NYXRoTGl2ZSh0b01hdGhMaXZlKHN0b3JlZCkpKS50b0VxdWFsKHN0b3JlZCk7XG4gICAgfSk7XG5cbiAgICBpdCgncm91bmQtdHJpcHMgYW4gYW5zd2VyLWJsb2NrIGRvY3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVkID0gJ3g9XFxcXE1hdGhRdWlsbE1hdGhGaWVsZFtyMV17fStcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IyXXszfSc7XG5cbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUodG9NYXRoTGl2ZShzdG9yZWQpKSkudG9FcXVhbChzdG9yZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gTWF0aExpdmUgc2VyaWFsaXNlcyBlbXB0eSBzbG90cyBhcyBcXHBsYWNlaG9sZGVye30sIHdoaWNoIE1hdGhKYXggKHVzZWQgYnlcbiAgICAvLyBAcGllLWxpYi9tYXRoLXJlbmRlcmluZyBmb3IgcHJvbXB0cy9wcmV2aWV3cykgcmVuZGVycyBhcyByZWQgZXJyb3IgdGV4dC5cbiAgICBpdCgnc3RyaXBzIHVubmFtZWQgcGxhY2Vob2xkZXJzIHRoYXQgTWF0aExpdmUgYWRkcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ1xcXFxsb25nZGl2e1xcXFxwbGFjZWhvbGRlcnt9fScpKS50b0VxdWFsKCdcXFxcbG9uZ2Rpdnt9Jyk7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxcZnJhY3tcXFxccGxhY2Vob2xkZXJ7fX17XFxcXHBsYWNlaG9sZGVye319JykpLnRvRXF1YWwoJ1xcXFxmcmFje317fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2tlZXBzIGNvbnRlbnQgaW5zaWRlIGFuIHVubmFtZWQgcGxhY2Vob2xkZXInLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxcc3FydHtcXFxccGxhY2Vob2xkZXJ7N319JykpLnRvRXF1YWwoJ1xcXFxzcXJ0ezd9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBhIGJhcmUgXFxcXHBsYWNlaG9sZGVyIHdpdGggbm8gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKCdcXFxcbG9uZ2RpdntcXFxccGxhY2Vob2xkZXJ9JykpLnRvRXF1YWwoJ1xcXFxsb25nZGl2e30nKTtcbiAgICB9KTtcblxuICAgIGl0KCduZXZlciBsZWFrcyB0aGUgdG9rZW4gXFxcXHBsYWNlaG9sZGVyJywgKCkgPT4ge1xuICAgICAgWydcXFxcbG9uZ2RpdntcXFxccGxhY2Vob2xkZXJ7fX0nLCAnXFxcXGZyYWN7XFxcXHBsYWNlaG9sZGVye319e3h9JywgJ1xcXFxwbGFjZWhvbGRlcnt9J10uZm9yRWFjaCgobCkgPT4ge1xuICAgICAgICBleHBlY3QoZnJvbU1hdGhMaXZlKGwpKS5ub3QudG9Db250YWluKCdcXFxccGxhY2Vob2xkZXInKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3N0aWxsIG1hcHMgTkFNRUQgcGxhY2Vob2xkZXJzIHRvIGFuc3dlciBibG9ja3MnLCAoKSA9PiB7XG4gICAgICAvLyBuYW1lZCBvbmVzIGFyZSBhbnN3ZXIgYmxvY2tzIGFuZCBtdXN0IHN1cnZpdmVcbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUoJ1xcXFxwbGFjZWhvbGRlcltyMV17fScpKS50b0VxdWFsKCdcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IxXXt9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgncm91bmQtdHJpcHMgYW5zd2VyIGJsb2NrcyBjb21iaW5lZCB3aXRoIG5ld2xpbmVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVkID0gYFxcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjFde30ke05FV0xJTkVfRU1CRUR9eWA7XG5cbiAgICAgIGV4cGVjdChmcm9tTWF0aExpdmUodG9NYXRoTGl2ZShzdG9yZWQpKSkudG9FcXVhbChzdG9yZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBBIE1hdGhMaXZlIG1hY3JvIHNlcmlhbGlzZXMgZnJvbSB0aGUgYXJndW1lbnRzIGl0IHdhcyBjcmVhdGVkIHdpdGgsIHNvIHRleHRcbiAgLy8gdHlwZWQgaW5zaWRlIGl0cyBleHBhbnNpb24gbmV2ZXIgY29tZXMgYmFjayBvdXQgb2YgZ2V0VmFsdWUoJ2xhdGV4JykuXG4gIC8vIEFyZ3VtZW50LXRha2luZyBwaWUgY29tbWFuZHMgbXVzdCB0aGVyZWZvcmUgYmVjb21lIG5hdGl2ZSBjb25zdHJ1Y3RzIGJlZm9yZVxuICAvLyB0aGV5IHJlYWNoIGEgbWF0aGZpZWxkLlxuICBkZXNjcmliZSgndG9OYXRpdmVDb21tYW5kcycsICgpID0+IHtcbiAgICBpdCgnZXhwYW5kcyBcXFxcbG9uZ2RpdiB0byBuYXRpdmUgXFxcXGVuY2xvc2UnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGxvbmdkaXZ7MTIzNH0nKSkudG9FcXVhbCgnXFxcXGVuY2xvc2V7bG9uZ2Rpdn17MTIzNH0nKTtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCdcXFxcbG9uZ2Rpdnt9JykpLnRvRXF1YWwoJ1xcXFxlbmNsb3Nle2xvbmdkaXZ9e30nKTtcbiAgICB9KTtcblxuICAgIGl0KCdleHBhbmRzIFxcXFxvdmVyYXJjIHRvIG5hdGl2ZSBcXFxcb3ZlcnBhcmVuJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ1xcXFxvdmVyYXJje0FCfScpKS50b0VxdWFsKCdcXFxcb3ZlcnBhcmVue0FCfScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2V4cGFuZHMgXFxcXGFicyB0byBuYXRpdmUgXFxcXGxlZnR8Li5cXFxccmlnaHR8JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHMoJ1xcXFxhYnN7eH0nKSkudG9FcXVhbCgnXFxcXGxlZnR8eFxcXFxyaWdodHwnKTtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCdcXFxcYWJze30nKSkudG9FcXVhbCgnXFxcXGxlZnR8XFxcXHJpZ2h0fCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbmVzdGVkIGJyYWNlcyBpbnNpZGUgXFxcXGFicycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKCdcXFxcYWJze1xcXFxmcmFjezF9ezJ9fScpKS50b0VxdWFsKCdcXFxcbGVmdHxcXFxcZnJhY3sxfXsyfVxcXFxyaWdodHwnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIHNldmVyYWwgb2NjdXJyZW5jZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGFic3thfStcXFxcYWJze2J9JykpLnRvRXF1YWwoJ1xcXFxsZWZ0fGFcXFxccmlnaHR8K1xcXFxsZWZ0fGJcXFxccmlnaHR8Jyk7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnXFxcXGxvbmdkaXZ7MX1cXFxcbG9uZ2RpdnsyfScpKS50b0VxdWFsKCdcXFxcZW5jbG9zZXtsb25nZGl2fXsxfVxcXFxlbmNsb3Nle2xvbmdkaXZ9ezJ9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbGVhdmVzIG90aGVyIGxhdGV4IHVudG91Y2hlZCcsICgpID0+IHtcbiAgICAgIFsnXFxcXGZyYWN7MX17Mn0nLCAnXFxcXHBpJywgJ1xcXFxzcXJ0e3h9JywgJ1xcXFxvdmVybGluZXtBQn0nXS5mb3JFYWNoKChsKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0b05hdGl2ZUNvbW1hbmRzKGwpKS50b0VxdWFsKGwpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBudWxsaXNoIGlucHV0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRvTmF0aXZlQ29tbWFuZHModW5kZWZpbmVkKSkudG9FcXVhbCgnJyk7XG4gICAgICBleHBlY3QodG9OYXRpdmVDb21tYW5kcygnJykpLnRvRXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lzIGFwcGxpZWQgYnkgdG9NYXRoTGl2ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0b01hdGhMaXZlKCdcXFxcbG9uZ2Rpdns1fScpKS50b0VxdWFsKCdcXFxcZW5jbG9zZXtsb25nZGl2fXs1fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGxlYXZlIGEgcGllIG1hY3JvIGluIHdoYXQgcmVhY2hlcyB0aGUgZmllbGQnLCAoKSA9PiB7XG4gICAgICBbJ1xcXFxsb25nZGl2ezd9JywgJ1xcXFxhYnN7N30nLCAnXFxcXG92ZXJhcmN7N30nXS5mb3JFYWNoKChsKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dCA9IHRvTWF0aExpdmUobCk7XG5cbiAgICAgICAgZXhwZWN0KG91dCkubm90LnRvTWF0Y2goL1xcXFxsb25nZGl2fFxcXFxhYnN8XFxcXG92ZXJhcmMvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmllbGRJZHMnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgaWRzIGluIGRvY3VtZW50IG9yZGVyJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZpZWxkSWRzKCdcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IxXXt9K1xcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjJde30nKSkudG9FcXVhbChbJ3IxJywgJ3IyJ10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgW10gd2hlbiB0aGVyZSBhcmUgbm9uZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChmaWVsZElkcygneCt5JykpLnRvRXF1YWwoW10pO1xuICAgICAgZXhwZWN0KGZpZWxkSWRzKHVuZGVmaW5lZCkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lzIHJlcGVhdGFibGUgKHJlZ2V4IGxhc3RJbmRleCBpcyByZXNldCknLCAoKSA9PiB7XG4gICAgICBjb25zdCBsYXRleCA9ICdcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3IxXXt9JztcblxuICAgICAgZXhwZWN0KGZpZWxkSWRzKGxhdGV4KSkudG9FcXVhbChbJ3IxJ10pO1xuICAgICAgZXhwZWN0KGZpZWxkSWRzKGxhdGV4KSkudG9FcXVhbChbJ3IxJ10pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgna2V5VG9BY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3ByZWZlcnMgbGF0ZXggd2hlbiB0aGVyZSBpcyBubyBjb21tYW5kJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgbGF0ZXg6ICdcXFxccGknLCB3cml0ZTogJ3AnIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXFxcXHBpJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd1c2VzIHdyaXRlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgd3JpdGU6ICd4JyB9KSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ3gnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2V4cGFuZHMgY29tbWFuZHMgdGhhdCB0YWtlIGFyZ3VtZW50cyBpbnRvIHBsYWNlaG9sZGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6ICdcXFxcZnJhYycgfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcZnJhY3sjP317Iz99JyB9KTtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGNvbW1hbmQ6ICdcXFxcc3FydCcgfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdcXFxcc3FydHsjP30nIH0pO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgY29tbWFuZDogJ14nIH0pKS50b0VxdWFsKHsgdHlwZTogJ2luc2VydCcsIHZhbHVlOiAnXnsjP30nIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyBhcmd1bWVudC1sZXNzIGNvbW1hbmRzIHRocm91Z2gnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBjb21tYW5kOiAnXFxcXHBpJyB9KSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ1xcXFxwaScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29uY2F0ZW5hdGVzIGFycmF5IGNvbW1hbmRzIChNYXRoUXVpbGwgY21kKCkgYXBwbGllZCB0aGVtIGluIHNlcXVlbmNlKScsICgpID0+IHtcbiAgICAgIC8vIE1lYXN1cmVkIEFuZ2xlXG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBjb21tYW5kOiBbJ20nLCAnXFxcXGFuZ2xlJ10gfSkpLnRvRXF1YWwoeyB0eXBlOiAnaW5zZXJ0JywgdmFsdWU6ICdtXFxcXGFuZ2xlJyB9KTtcbiAgICAgIC8vIGxvZyBiYXNlIG4gLSB0aGUgYF9gIHBhcnQgbXVzdCBzdGlsbCBleHBhbmQgdG8gYSBwbGFjZWhvbGRlclxuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsgY29tbWFuZDogWydcXFxcbG9nJywgJ18nXSB9KSkudG9FcXVhbCh7IHR5cGU6ICdpbnNlcnQnLCB2YWx1ZTogJ1xcXFxsb2dfeyM/fScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWx3YXlzIHJldHVybnMgYSBzdHJpbmcgdmFsdWUgZm9yIGluc2VydCBhY3Rpb25zJywgKCkgPT4ge1xuICAgICAgW3sgY29tbWFuZDogWydtJywgJ1xcXFxhbmdsZSddIH0sIHsgY29tbWFuZDogJ1xcXFxmcmFjJyB9LCB7IHdyaXRlOiAneCcgfSwgeyBsYXRleDogJ1xcXFxwaScgfV0uZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICBleHBlY3QodHlwZW9mIGtleVRvQWN0aW9uKGspLnZhbHVlKS50b0JlKCdzdHJpbmcnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hcHMga2V5c3Ryb2tlcyB0byBNYXRoTGl2ZSBzZWxlY3RvcnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBrZXlzdHJva2U6ICdMZWZ0JyB9KSkudG9FcXVhbCh7IHR5cGU6ICdjb21tYW5kJywgdmFsdWU6ICdtb3ZlVG9QcmV2aW91c0NoYXInIH0pO1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHsga2V5c3Ryb2tlOiAnUmlnaHQnIH0pKS50b0VxdWFsKHsgdHlwZTogJ2NvbW1hbmQnLCB2YWx1ZTogJ21vdmVUb05leHRDaGFyJyB9KTtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGtleXN0cm9rZTogJ0JhY2tzcGFjZScgfSkpLnRvRXF1YWwoeyB0eXBlOiAnY29tbWFuZCcsIHZhbHVlOiAnZGVsZXRlQmFja3dhcmQnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgdW5kZWZpbmVkIGZvciB1bmtub3duL2VtcHR5IGlucHV0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGtleVRvQWN0aW9uKHVuZGVmaW5lZCkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7fSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIGV4cGVjdChrZXlUb0FjdGlvbih7IGtleXN0cm9rZTogJ05vcGUnIH0pKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnbGF0ZXggd2lucyBvdmVyIGNvbW1hbmQgb25seSB3aGVuIGNvbW1hbmQgaXMgYWJzZW50JywgKCkgPT4ge1xuICAgICAgLy8gYSBrZXkgd2l0aCBib3RoIHNob3VsZCB1c2UgdGhlIGNvbW1hbmQgcGF0aCAobWF0Y2hlcyBNYXRoSW5wdXQua2V5cGFkUHJlc3MpXG4gICAgICBleHBlY3Qoa2V5VG9BY3Rpb24oeyBsYXRleDogJ1xcXFxmcmFje317fScsIGNvbW1hbmQ6ICdcXFxcZnJhYycgfSkpLnRvRXF1YWwoe1xuICAgICAgICB0eXBlOiAnaW5zZXJ0JyxcbiAgICAgICAgdmFsdWU6ICdcXFxcZnJhY3sjP317Iz99JyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBVUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBTTtFQUM3QkEsUUFBUSxDQUFDLFlBQVksRUFBRSxZQUFNO0lBQzNCQyxF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
|