@pie-element/multiple-choice 13.3.6 → 13.3.8

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.
@@ -1,561 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _index = require("../index");
5
- var _utils = require("../utils");
6
- var _defaults = _interopRequireDefault(require("../defaults"));
7
- jest.mock('../utils', () => ({
8
- isResponseCorrect: jest.fn()
9
- }));
10
- describe('controller', () => {
11
- let result, question, session, env;
12
- beforeEach(() => {
13
- question = {
14
- id: '1',
15
- element: 'multiple-choice',
16
- prompt: 'prompt',
17
- promptEnabled: true,
18
- choicePrefix: 'letters',
19
- choiceMode: 'radio',
20
- feedbackEnabled: true,
21
- choices: [{
22
- label: 'a',
23
- value: 'apple',
24
- correct: true,
25
- feedback: {
26
- type: 'custom',
27
- value: 'foo'
28
- }
29
- }, {
30
- label: 'b',
31
- value: 'banana',
32
- feedback: {
33
- type: 'default'
34
- }
35
- }]
36
- };
37
- });
38
- const {
39
- stringify
40
- } = JSON;
41
- describe('model', () => {
42
- describe('mode: gather', () => {
43
- beforeEach(async () => {
44
- session = {};
45
- env = {
46
- mode: 'gather'
47
- };
48
- result = await (0, _index.model)(question, session, env);
49
- });
50
- it('returns disabled', () => {
51
- expect(result.disabled).toEqual(false);
52
- });
53
- it('returns mode', () => {
54
- expect(result.mode).toEqual('gather');
55
- });
56
- it('returns prompt', () => {
57
- expect(result.prompt).toEqual('prompt');
58
- });
59
- it('returns choiceMode', () => {
60
- expect(result.choiceMode).toEqual('radio');
61
- });
62
- it('returns choicePrefix', () => {
63
- expect(result.keyMode).toEqual('letters');
64
- });
65
- it('returns choices', () => {
66
- expect(result.choices).toEqual(expect.arrayContaining([{
67
- label: 'a',
68
- value: 'apple',
69
- rationale: null
70
- }, {
71
- label: 'b',
72
- value: 'banana',
73
- rationale: null
74
- }]));
75
- });
76
- it('does not return responseCorrect', () => {
77
- expect(result.responseCorrect).toBe(undefined);
78
- });
79
- });
80
- describe('model - with updateSession', () => {
81
- it('calls updateSession', async () => {
82
- session = {
83
- id: '1',
84
- element: 'multiple-choice'
85
- };
86
- env = {
87
- mode: 'gather'
88
- };
89
- question = {
90
- ...question,
91
- lockChoiceOrder: false
92
- };
93
- const updateSession = jest.fn().mockResolvedValue();
94
- await (0, _index.model)(question, session, env, updateSession);
95
- expect(updateSession).toHaveBeenCalledWith('1', 'multiple-choice', {
96
- shuffledValues: expect.arrayContaining(['apple', 'banana'])
97
- });
98
- });
99
- });
100
- describe('mode: view', () => {
101
- beforeEach(async () => {
102
- session = {};
103
- env = {
104
- mode: 'view'
105
- };
106
- result = await (0, _index.model)(question, session, env);
107
- });
108
- it('returns disabled', () => {
109
- expect(result.disabled).toEqual(true);
110
- });
111
- });
112
- describe('mode: evaluate', () => {
113
- beforeEach(async () => {
114
- session = {};
115
- env = {
116
- mode: 'evaluate'
117
- };
118
- _utils.isResponseCorrect.mockReturnValue(false);
119
- result = await (0, _index.model)(question, session, env);
120
- return result;
121
- });
122
- it('returns choices w/ correct', () => {
123
- expect(result.choices).toEqual(expect.arrayContaining([{
124
- label: 'a',
125
- value: 'apple',
126
- correct: true,
127
- feedback: 'foo',
128
- rationale: null
129
- }, {
130
- label: 'b',
131
- value: 'banana',
132
- correct: false,
133
- feedback: 'Incorrect',
134
- rationale: null
135
- }]));
136
- });
137
- it('returns choices w/ correct even if feedbackEnabled is false', async () => {
138
- result = await (0, _index.model)({
139
- ...question,
140
- feedbackEnabled: false
141
- }, session, env, jest.fn());
142
- expect(result.choices).toEqual(expect.arrayContaining([{
143
- label: 'a',
144
- value: 'apple',
145
- correct: true,
146
- feedback: undefined,
147
- rationale: null
148
- }, {
149
- label: 'b',
150
- value: 'banana',
151
- correct: false,
152
- feedback: undefined,
153
- rationale: null
154
- }]));
155
- });
156
- it('returns feedback undefined if feedbackEnabled is false', async () => {
157
- result = await (0, _index.model)({
158
- ...question,
159
- feedbackEnabled: false
160
- }, session, env, jest.fn());
161
- expect(result.choices).toEqual(expect.arrayContaining([{
162
- label: 'a',
163
- value: 'apple',
164
- correct: true,
165
- feedback: undefined,
166
- rationale: null
167
- }, {
168
- label: 'b',
169
- value: 'banana',
170
- correct: false,
171
- feedback: undefined,
172
- rationale: null
173
- }]));
174
- });
175
- it('returns proper feedback if feedbackEnabled is true', async () => {
176
- result = await (0, _index.model)({
177
- ...question,
178
- feedbackEnabled: true
179
- }, session, env, jest.fn());
180
- expect(result.choices).toEqual(expect.arrayContaining([{
181
- label: 'a',
182
- value: 'apple',
183
- correct: true,
184
- feedback: 'foo',
185
- rationale: null
186
- }, {
187
- label: 'b',
188
- value: 'banana',
189
- correct: false,
190
- feedback: 'Incorrect',
191
- rationale: null
192
- }]));
193
- });
194
- it('returns is response correct', () => {
195
- expect(result.responseCorrect).toEqual(false);
196
- });
197
- const returnsCorrectness = sess => {
198
- it(`returns responseCorrect: false if session is ${stringify(sess)}`, async () => {
199
- const o = await (0, _index.model)(question, sess, env);
200
- expect(o.responseCorrect).toEqual(false);
201
- });
202
- };
203
- returnsCorrectness(undefined);
204
- returnsCorrectness(null);
205
- returnsCorrectness({});
206
- });
207
- describe('choicePrefix is undefined', () => {
208
- const question = {
209
- id: '1',
210
- element: 'multiple-choice',
211
- prompt: 'prompt',
212
- promptEnabled: true,
213
- choiceMode: 'radio',
214
- feedbackEnabled: true,
215
- choices: [{
216
- label: 'a',
217
- value: 'apple',
218
- correct: true,
219
- feedback: {
220
- type: 'custom',
221
- value: 'foo'
222
- }
223
- }, {
224
- label: 'b',
225
- value: 'banana',
226
- feedback: {
227
- type: 'default'
228
- }
229
- }]
230
- };
231
- beforeEach(async () => {
232
- session = {};
233
- env = {
234
- mode: 'gather'
235
- };
236
- result = await (0, _index.model)(question, session, env);
237
- });
238
- it('returns default letters', () => {
239
- expect(result.keyMode).toEqual('letters');
240
- });
241
- });
242
- });
243
- describe('getScore', () => {
244
- it.each`
245
- sessionValue | expectedDychotomous | expectedPartialScoring
246
- ${undefined} | ${0} | ${0}
247
- ${null} | ${0} | ${0}
248
- ${[]} | ${0} | ${0}
249
- ${['a']} | ${0} | ${0.5}
250
- ${['e']} | ${0} | ${0.5}
251
- ${['a', 'b']} | ${0} | ${0.5}
252
- ${['a', 'c']} | ${0} | ${0.5}
253
- ${['a', 'd']} | ${0} | ${0.5}
254
- ${['a', 'e']} | ${1} | ${1}
255
- ${['a', 'b', 'c']} | ${0} | ${0}
256
- ${['a', 'b', 'd']} | ${0} | ${0}
257
- ${['a', 'b', 'e']} | ${0} | ${0.5}
258
- ${['a', 'b', 'c', 'd']} | ${0} | ${0}
259
- ${['a', 'b', 'c', 'e']} | ${0} | ${0}
260
- ${['a', 'b', 'c', 'd', 'e']} | ${0} | ${0}
261
- ${['a', 'c', 'd', 'e']} | ${0} | ${0}
262
- ${['a', 'd', 'e']} | ${0} | ${0.5}
263
- `('session = $sessionValue; partial scoring = true => score = $expectedPartialScoring / partial scoring = false => score = $expectedDychotomous', async ({
264
- sessionValue,
265
- expectedPartialScoring,
266
- expectedDychotomous
267
- }) => {
268
- const q = {
269
- choiceMode: 'checkbox',
270
- choices: [{
271
- label: 'a',
272
- value: 'a',
273
- correct: true
274
- }, {
275
- label: 'b',
276
- value: 'b'
277
- }, {
278
- label: 'c',
279
- value: 'c'
280
- }, {
281
- label: 'd',
282
- value: 'd'
283
- }, {
284
- label: 'e',
285
- value: 'e',
286
- correct: true
287
- }]
288
- };
289
- const resultPS = await (0, _index.outcome)(q, {
290
- value: sessionValue
291
- }, {
292
- mode: 'evaluate '
293
- });
294
- expect(resultPS.score).toEqual(expectedPartialScoring);
295
- const resultD = await (0, _index.outcome)({
296
- ...q,
297
- partialScoring: false
298
- }, {
299
- value: sessionValue
300
- }, {
301
- mode: 'evaluate '
302
- });
303
- expect(resultD.score).toEqual(expectedDychotomous);
304
- });
305
- });
306
- describe('outcome', () => {
307
- it('returns score of 0', async () => {
308
- const result = await (0, _index.outcome)(question, {
309
- value: ['banana']
310
- }, {
311
- mode: 'gather'
312
- });
313
- expect(result.score).toEqual(0);
314
- });
315
- it('returns score of 1', async () => {
316
- const result = await (0, _index.outcome)(question, {
317
- value: ['apple']
318
- }, {
319
- mode: 'gather'
320
- });
321
- expect(result.score).toEqual(1);
322
- });
323
- describe('partial scoring', () => {
324
- describe('choiceMode:radio is disabled', () => {
325
- it('with defaults', async () => {
326
- const result = await (0, _index.outcome)(question, {}, {});
327
- expect(result.score).toEqual(0);
328
- });
329
- it('with defaults and correct', async () => {
330
- const result = await (0, _index.outcome)(question, {
331
- value: ['apple']
332
- }, {});
333
- expect(result.score).toEqual(1);
334
- });
335
- it('with env.partialScoring: true', async () => {
336
- const result = await (0, _index.outcome)(question, {
337
- partialScoring: true
338
- }, {});
339
- expect(result.score).toEqual(0);
340
- });
341
- it('with env.partialScoring: true + config.partialScoring: true', async () => {
342
- const result = await (0, _index.outcome)({
343
- ...question,
344
- partialScoring: true
345
- }, {
346
- partialScoring: true
347
- }, {});
348
- expect(result.score).toEqual(0);
349
- });
350
- });
351
- describe('checkbox', () => {
352
- beforeEach(() => {
353
- const choices = question.choices.concat({
354
- value: 'c',
355
- correct: true
356
- });
357
- question = {
358
- ...question,
359
- choiceMode: 'checkbox',
360
- partialScoring: true,
361
- choices
362
- };
363
- });
364
- it.each`
365
- sessionValue | expected
366
- ${undefined} | ${0}
367
- ${null} | ${0}
368
- ${[]} | ${0}
369
- ${['apple']} | ${0.25}
370
- ${['apple', 'cherry']} | ${0.5}
371
- ${['apple', 'banana']} | ${0.5}
372
- ${['apple', 'banana', 'cherry']} | ${0.75}
373
- ${['apple', 'banana', 'grapes']} | ${0.75}
374
- ${['apple', 'banana', 'grapes', 'cherry']} | ${1}
375
- ${['cherry', 'banana', 'grapes']} | ${0.75}
376
- ${['apple', 'durian']} | ${0.25}
377
- ${['apple', 'durian', 'elderberries']} | ${0.25}
378
- ${['apple', 'durian', 'feijoa', 'elderberries', 'jackfruit']} | ${0}
379
- ${['apple', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi']} | ${0}
380
- ${['apple', 'cherry', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi']} | ${0}
381
- ${['apple', 'cherry', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi']} | ${0}
382
- ${['apple', 'cherry', 'banana', 'durian', 'feijoa', 'elderberries', 'jackfruit', 'kiwi']} | ${0}
383
- ${['apple', 'cherry', 'banana', 'durian', 'feijoa', 'jackfruit', 'kiwi']} | ${0}
384
- ${['apple', 'cherry', 'banana', 'grapes', 'durian', 'jackfruit', 'kiwi']} | ${0.25}
385
- ${['apple', 'cherry', 'banana', 'grapes', 'durian', 'jackfruit']} | ${0.5}
386
- ${['apple', 'cherry', 'banana', 'grapes', 'durian']} | ${0.75}
387
- `('outcome: partial scoring = true, sessionValue = $sessionValue => expected = $expected', async ({
388
- sessionValue,
389
- expected
390
- }) => {
391
- const q = {
392
- choiceMode: 'checkbox',
393
- choices: [{
394
- label: 'a',
395
- value: 'apple',
396
- correct: true
397
- }, {
398
- label: 'b',
399
- value: 'banana',
400
- correct: true
401
- }, {
402
- label: 'c',
403
- value: 'cherry',
404
- correct: true
405
- }, {
406
- label: 'd',
407
- value: 'durian'
408
- }, {
409
- label: 'e',
410
- value: 'elderberries'
411
- }, {
412
- label: 'f',
413
- value: 'feijoa'
414
- }, {
415
- label: 'g',
416
- value: 'grapes',
417
- correct: true
418
- }, {
419
- label: 'j',
420
- value: 'jackfruit'
421
- }, {
422
- label: 'k',
423
- value: 'kiwi'
424
- }]
425
- };
426
- const result = await (0, _index.outcome)(q, {
427
- value: sessionValue
428
- }, {
429
- mode: 'evaluate '
430
- });
431
- expect(result.score).toEqual(expected);
432
- });
433
- });
434
- });
435
- it.each`
436
- session | empty
437
- ${undefined} | ${true}
438
- ${null} | ${true}
439
- ${{}} | ${true}
440
- ${{
441
- value: []
442
- }} | ${false}
443
- `('returns score: 0 and empty: true if session is $session', async ({
444
- session,
445
- empty
446
- }) => {
447
- const o = await (0, _index.outcome)(question, session, {
448
- mode: 'evaluate'
449
- });
450
- expect(o.score).toEqual(0);
451
- expect(o.empty).toEqual(empty);
452
- });
453
- });
454
- describe('correct response', () => {
455
- it('returns correct response if env is correct', async () => {
456
- const sess = await (0, _index.createCorrectResponseSession)(question, {
457
- mode: 'gather',
458
- role: 'instructor'
459
- });
460
- expect(sess).toEqual({
461
- id: '1',
462
- value: ['apple']
463
- });
464
- });
465
- it('returns null env is student', async () => {
466
- const noResult = await (0, _index.createCorrectResponseSession)(question, {
467
- mode: 'gather',
468
- role: 'student'
469
- });
470
- expect(noResult).toBeNull();
471
- });
472
- });
473
- describe('normalize', () => {
474
- it('sets choicesLayout: horizontal if verticalMode: false', async () => {
475
- const sess = await (0, _index.normalize)({
476
- ...question,
477
- verticalMode: false
478
- });
479
- expect(sess).toEqual({
480
- ..._defaults.default,
481
- ...question,
482
- choicesLayout: 'horizontal'
483
- });
484
- });
485
- it('sets choicesLayout: vertical if verticalMode: true', async () => {
486
- const sess = await (0, _index.normalize)({
487
- ...question,
488
- verticalMode: true
489
- });
490
- expect(sess).toEqual({
491
- ..._defaults.default,
492
- ...question,
493
- choicesLayout: 'vertical'
494
- });
495
- });
496
- it('sets choicesLayout: grid if verticalMode: true && choicesLayout: grid', async () => {
497
- const sess = await (0, _index.normalize)({
498
- ...question,
499
- verticalMode: true,
500
- choicesLayout: 'grid'
501
- });
502
- expect(sess).toEqual({
503
- ..._defaults.default,
504
- ...question,
505
- choicesLayout: 'grid'
506
- });
507
- });
508
- it('sets choicesLayout: vertical', async () => {
509
- const sess = await (0, _index.normalize)(question);
510
- expect(sess).toEqual({
511
- ..._defaults.default,
512
- ...question,
513
- choicesLayout: 'vertical'
514
- });
515
- });
516
- });
517
- describe('validate', () => {
518
- const makeChoice = (value, correct = false) => ({
519
- value,
520
- label: value,
521
- correct
522
- });
523
- const config = {
524
- minAnswerChoices: 2,
525
- maxAnswerChoices: 5
526
- };
527
- it('returns no error when maxSelections >= correctCount', () => {
528
- const m = {
529
- choiceMode: 'checkbox',
530
- maxSelections: 2,
531
- choices: [makeChoice('A', true), makeChoice('B', true), makeChoice('C')]
532
- };
533
- expect((0, _index.validate)(m, config).correctResponse).toBeUndefined();
534
- });
535
- it('returns error when maxSelections < correctCount', () => {
536
- const m = {
537
- choiceMode: 'checkbox',
538
- maxSelections: 1,
539
- choices: [makeChoice('A', true), makeChoice('B', true), makeChoice('C')]
540
- };
541
- expect((0, _index.validate)(m, config).correctResponse).toMatch(/exceeds max selections/);
542
- });
543
- it('does not error in radio mode even if maxSelections < correctCount', () => {
544
- const m = {
545
- choiceMode: 'radio',
546
- maxSelections: 1,
547
- choices: [makeChoice('A', true), makeChoice('B', true), makeChoice('C')]
548
- };
549
- expect((0, _index.validate)(m, config).correctResponse).toBeUndefined();
550
- });
551
- it('does not error when maxSelections is null', () => {
552
- const m = {
553
- choiceMode: 'checkbox',
554
- maxSelections: null,
555
- choices: [makeChoice('A', true), makeChoice('B', true), makeChoice('C')]
556
- };
557
- expect((0, _index.validate)(m, config).correctResponse).toBeUndefined();
558
- });
559
- });
560
- });
561
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiX3V0aWxzIiwiX2RlZmF1bHRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImplc3QiLCJtb2NrIiwiaXNSZXNwb25zZUNvcnJlY3QiLCJmbiIsImRlc2NyaWJlIiwicmVzdWx0IiwicXVlc3Rpb24iLCJzZXNzaW9uIiwiZW52IiwiYmVmb3JlRWFjaCIsImlkIiwiZWxlbWVudCIsInByb21wdCIsInByb21wdEVuYWJsZWQiLCJjaG9pY2VQcmVmaXgiLCJjaG9pY2VNb2RlIiwiZmVlZGJhY2tFbmFibGVkIiwiY2hvaWNlcyIsImxhYmVsIiwidmFsdWUiLCJjb3JyZWN0IiwiZmVlZGJhY2siLCJ0eXBlIiwic3RyaW5naWZ5IiwiSlNPTiIsIm1vZGUiLCJtb2RlbCIsIml0IiwiZXhwZWN0IiwiZGlzYWJsZWQiLCJ0b0VxdWFsIiwia2V5TW9kZSIsImFycmF5Q29udGFpbmluZyIsInJhdGlvbmFsZSIsInJlc3BvbnNlQ29ycmVjdCIsInRvQmUiLCJ1bmRlZmluZWQiLCJsb2NrQ2hvaWNlT3JkZXIiLCJ1cGRhdGVTZXNzaW9uIiwibW9ja1Jlc29sdmVkVmFsdWUiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInNodWZmbGVkVmFsdWVzIiwibW9ja1JldHVyblZhbHVlIiwicmV0dXJuc0NvcnJlY3RuZXNzIiwic2VzcyIsIm8iLCJlYWNoIiwic2Vzc2lvblZhbHVlIiwiZXhwZWN0ZWRQYXJ0aWFsU2NvcmluZyIsImV4cGVjdGVkRHljaG90b21vdXMiLCJxIiwicmVzdWx0UFMiLCJvdXRjb21lIiwic2NvcmUiLCJyZXN1bHREIiwicGFydGlhbFNjb3JpbmciLCJjb25jYXQiLCJleHBlY3RlZCIsImVtcHR5IiwiY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiIsInJvbGUiLCJub1Jlc3VsdCIsInRvQmVOdWxsIiwibm9ybWFsaXplIiwidmVydGljYWxNb2RlIiwiZGVmYXVsdHMiLCJjaG9pY2VzTGF5b3V0IiwibWFrZUNob2ljZSIsImNvbmZpZyIsIm1pbkFuc3dlckNob2ljZXMiLCJtYXhBbnN3ZXJDaG9pY2VzIiwibSIsIm1heFNlbGVjdGlvbnMiLCJ2YWxpZGF0ZSIsImNvcnJlY3RSZXNwb25zZSIsInRvQmVVbmRlZmluZWQiLCJ0b01hdGNoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9pbmRleC50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vZGVsLCBvdXRjb21lLCBnZXRTY29yZSwgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiwgbm9ybWFsaXplLCB2YWxpZGF0ZSB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IGlzUmVzcG9uc2VDb3JyZWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzJztcblxuamVzdC5tb2NrKCcuLi91dGlscycsICgpID0+ICh7XG4gIGlzUmVzcG9uc2VDb3JyZWN0OiBqZXN0LmZuKCksXG59KSk7XG5cbmRlc2NyaWJlKCdjb250cm9sbGVyJywgKCkgPT4ge1xuICBsZXQgcmVzdWx0LCBxdWVzdGlvbiwgc2Vzc2lvbiwgZW52O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHF1ZXN0aW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGVsZW1lbnQ6ICdtdWx0aXBsZS1jaG9pY2UnLFxuICAgICAgcHJvbXB0OiAncHJvbXB0JyxcbiAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICBjaG9pY2VQcmVmaXg6ICdsZXR0ZXJzJyxcbiAgICAgIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gICAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgIHZhbHVlOiAnYXBwbGUnLFxuICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgZmVlZGJhY2s6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b20nLFxuICAgICAgICAgICAgdmFsdWU6ICdmb28nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ2InLFxuICAgICAgICAgIHZhbHVlOiAnYmFuYW5hJyxcbiAgICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0IHsgc3RyaW5naWZ5IH0gPSBKU09OO1xuXG4gIGRlc2NyaWJlKCdtb2RlbCcsICgpID0+IHtcbiAgICBkZXNjcmliZSgnbW9kZTogZ2F0aGVyJywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICAgIHNlc3Npb24gPSB7fTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAnZ2F0aGVyJyB9O1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5kaXNhYmxlZCkudG9FcXVhbChmYWxzZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgbW9kZScsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5tb2RlKS50b0VxdWFsKCdnYXRoZXInKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBwcm9tcHQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQucHJvbXB0KS50b0VxdWFsKCdwcm9tcHQnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBjaG9pY2VNb2RlJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmNob2ljZU1vZGUpLnRvRXF1YWwoJ3JhZGlvJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgY2hvaWNlUHJlZml4JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleU1vZGUpLnRvRXF1YWwoJ2xldHRlcnMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBjaG9pY2VzJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmNob2ljZXMpLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICAgICAgICB7IGxhYmVsOiAnYScsIHZhbHVlOiAnYXBwbGUnLCByYXRpb25hbGU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdiJywgdmFsdWU6ICdiYW5hbmEnLCByYXRpb25hbGU6IG51bGwgfSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgcmV0dXJuIHJlc3BvbnNlQ29ycmVjdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZUNvcnJlY3QpLnRvQmUodW5kZWZpbmVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGVsIC0gd2l0aCB1cGRhdGVTZXNzaW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ2NhbGxzIHVwZGF0ZVNlc3Npb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHNlc3Npb24gPSB7IGlkOiAnMScsIGVsZW1lbnQ6ICdtdWx0aXBsZS1jaG9pY2UnIH07XG4gICAgICAgIGVudiA9IHsgbW9kZTogJ2dhdGhlcicgfTtcbiAgICAgICAgcXVlc3Rpb24gPSB7IC4uLnF1ZXN0aW9uLCBsb2NrQ2hvaWNlT3JkZXI6IGZhbHNlIH07XG4gICAgICAgIGNvbnN0IHVwZGF0ZVNlc3Npb24gPSBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoKTtcblxuICAgICAgICBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52LCB1cGRhdGVTZXNzaW9uKTtcblxuICAgICAgICBleHBlY3QodXBkYXRlU2Vzc2lvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAnbXVsdGlwbGUtY2hvaWNlJywge1xuICAgICAgICAgIHNodWZmbGVkVmFsdWVzOiBleHBlY3QuYXJyYXlDb250YWluaW5nKFsnYXBwbGUnLCAnYmFuYW5hJ10pLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGU6IHZpZXcnLCAoKSA9PiB7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICd2aWV3JyB9O1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5kaXNhYmxlZCkudG9FcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGU6IGV2YWx1YXRlJywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICAgIHNlc3Npb24gPSB7fTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgICAgIGlzUmVzcG9uc2VDb3JyZWN0Lm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGNob2ljZXMgdy8gY29ycmVjdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6ICdmb28nLFxuICAgICAgICAgICAgICByYXRpb25hbGU6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2InLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2JhbmFuYScsXG4gICAgICAgICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBmZWVkYmFjazogJ0luY29ycmVjdCcsXG4gICAgICAgICAgICAgIHJhdGlvbmFsZTogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgY2hvaWNlcyB3LyBjb3JyZWN0IGV2ZW4gaWYgZmVlZGJhY2tFbmFibGVkIGlzIGZhbHNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uLFxuICAgICAgICAgIGVudixcbiAgICAgICAgICBqZXN0LmZuKCksXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdiJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdiYW5hbmEnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBmZWVkYmFjayB1bmRlZmluZWQgaWYgZmVlZGJhY2tFbmFibGVkIGlzIGZhbHNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uLFxuICAgICAgICAgIGVudixcbiAgICAgICAgICBqZXN0LmZuKCksXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogJ2EnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdiJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdiYW5hbmEnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBwcm9wZXIgZmVlZGJhY2sgaWYgZmVlZGJhY2tFbmFibGVkIGlzIHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgamVzdC5mbigpLFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQuY2hvaWNlcykudG9FcXVhbChcbiAgICAgICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdhJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdhcHBsZScsXG4gICAgICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgICAgIGZlZWRiYWNrOiAnZm9vJyxcbiAgICAgICAgICAgICAgcmF0aW9uYWxlOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdiJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdiYW5hbmEnLFxuICAgICAgICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZmVlZGJhY2s6ICdJbmNvcnJlY3QnLFxuICAgICAgICAgICAgICByYXRpb25hbGU6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGlzIHJlc3BvbnNlIGNvcnJlY3QnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQucmVzcG9uc2VDb3JyZWN0KS50b0VxdWFsKGZhbHNlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXR1cm5zQ29ycmVjdG5lc3MgPSAoc2VzcykgPT4ge1xuICAgICAgICBpdChgcmV0dXJucyByZXNwb25zZUNvcnJlY3Q6IGZhbHNlIGlmIHNlc3Npb24gaXMgJHtzdHJpbmdpZnkoc2Vzcyl9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG8gPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2VzcywgZW52KTtcblxuICAgICAgICAgIGV4cGVjdChvLnJlc3BvbnNlQ29ycmVjdCkudG9FcXVhbChmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuc0NvcnJlY3RuZXNzKHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm5zQ29ycmVjdG5lc3MobnVsbCk7XG4gICAgICByZXR1cm5zQ29ycmVjdG5lc3Moe30pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Nob2ljZVByZWZpeCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgZWxlbWVudDogJ211bHRpcGxlLWNob2ljZScsXG4gICAgICAgIHByb21wdDogJ3Byb21wdCcsXG4gICAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gICAgICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnYScsXG4gICAgICAgICAgICB2YWx1ZTogJ2FwcGxlJyxcbiAgICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICdmb28nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnYicsXG4gICAgICAgICAgICB2YWx1ZTogJ2JhbmFuYScsXG4gICAgICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICdnYXRoZXInIH07XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgICAgfSk7XG4gICAgICBpdCgncmV0dXJucyBkZWZhdWx0IGxldHRlcnMnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5TW9kZSkudG9FcXVhbCgnbGV0dGVycycpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTY29yZScsICgpID0+IHtcbiAgICBpdC5lYWNoYFxuICAgICAgc2Vzc2lvblZhbHVlICAgICAgICAgICAgICAgICB8IGV4cGVjdGVkRHljaG90b21vdXMgfCBleHBlY3RlZFBhcnRpYWxTY29yaW5nXG4gICAgICAke3VuZGVmaW5lZH0gICAgICAgICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7bnVsbH0gICAgICAgICAgICAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswfVxuICAgICAgJHtbXX0gICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAke1snYSddfSAgICAgICAgICAgICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MC41fVxuICAgICAgJHtbJ2UnXX0gICAgICAgICAgICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezAuNX1cbiAgICAgICR7WydhJywgJ2InXX0gICAgICAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgICAke1snYScsICdjJ119ICAgICAgICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MC41fVxuICAgICAgJHtbJ2EnLCAnZCddfSAgICAgICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezAuNX1cbiAgICAgICR7WydhJywgJ2UnXX0gICAgICAgICAgICAgICAgfCAkezF9ICAgICAgICAgICAgICAgIHwgJHsxfVxuICAgICAgJHtbJ2EnLCAnYicsICdjJ119ICAgICAgICAgICB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAke1snYScsICdiJywgJ2QnXX0gICAgICAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7WydhJywgJ2InLCAnZSddfSAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgICAke1snYScsICdiJywgJ2MnLCAnZCddfSAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7WydhJywgJ2InLCAnYycsICdlJ119ICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswfVxuICAgICAgJHtbJ2EnLCAnYicsICdjJywgJ2QnLCAnZSddfSB8ICR7MH0gICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAke1snYScsICdjJywgJ2QnLCAnZSddfSAgICAgIHwgJHswfSAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICR7WydhJywgJ2QnLCAnZSddfSAgICAgICAgICAgfCAkezB9ICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgYChcbiAgICAgICdzZXNzaW9uID0gJHNlc3Npb25WYWx1ZTsgcGFydGlhbCBzY29yaW5nID0gdHJ1ZSA9PiBzY29yZSA9ICRleHBlY3RlZFBhcnRpYWxTY29yaW5nIC8gcGFydGlhbCBzY29yaW5nID0gZmFsc2UgPT4gc2NvcmUgPSAkZXhwZWN0ZWREeWNob3RvbW91cycsXG4gICAgICBhc3luYyAoeyBzZXNzaW9uVmFsdWUsIGV4cGVjdGVkUGFydGlhbFNjb3JpbmcsIGV4cGVjdGVkRHljaG90b21vdXMgfSkgPT4ge1xuICAgICAgICBjb25zdCBxID0ge1xuICAgICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ2EnLCB2YWx1ZTogJ2EnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnYicsIHZhbHVlOiAnYicgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdjJywgdmFsdWU6ICdjJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ2QnLCB2YWx1ZTogJ2QnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnZScsIHZhbHVlOiAnZScsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdFBTID0gYXdhaXQgb3V0Y29tZShxLCB7IHZhbHVlOiBzZXNzaW9uVmFsdWUgfSwgeyBtb2RlOiAnZXZhbHVhdGUgJyB9KTtcblxuICAgICAgICBleHBlY3QocmVzdWx0UFMuc2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWRQYXJ0aWFsU2NvcmluZyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0RCA9IGF3YWl0IG91dGNvbWUoeyAuLi5xLCBwYXJ0aWFsU2NvcmluZzogZmFsc2UgfSwgeyB2YWx1ZTogc2Vzc2lvblZhbHVlIH0sIHsgbW9kZTogJ2V2YWx1YXRlICcgfSk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdEQuc2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWREeWNob3RvbW91cyk7XG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdvdXRjb21lJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHNjb3JlIG9mIDAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCB7IHZhbHVlOiBbJ2JhbmFuYSddIH0sIHsgbW9kZTogJ2dhdGhlcicgfSk7XG4gICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgc2NvcmUgb2YgMScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHsgdmFsdWU6IFsnYXBwbGUnXSB9LCB7IG1vZGU6ICdnYXRoZXInIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgxKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwYXJ0aWFsIHNjb3JpbmcnLCAoKSA9PiB7XG4gICAgICBkZXNjcmliZSgnY2hvaWNlTW9kZTpyYWRpbyBpcyBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgICAgaXQoJ3dpdGggZGVmYXVsdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge30sIHt9KTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3dpdGggZGVmYXVsdHMgYW5kIGNvcnJlY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwgeyB2YWx1ZTogWydhcHBsZSddIH0sIHt9KTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3dpdGggZW52LnBhcnRpYWxTY29yaW5nOiB0cnVlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHsgcGFydGlhbFNjb3Jpbmc6IHRydWUgfSwge30pO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnd2l0aCBlbnYucGFydGlhbFNjb3Jpbmc6IHRydWUgKyBjb25maWcucGFydGlhbFNjb3Jpbmc6IHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZSh7IC4uLnF1ZXN0aW9uLCBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LCB7IHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sIHt9KTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnY2hlY2tib3gnLCAoKSA9PiB7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNob2ljZXMgPSBxdWVzdGlvbi5jaG9pY2VzLmNvbmNhdCh7XG4gICAgICAgICAgICB2YWx1ZTogJ2MnLFxuICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBxdWVzdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgY2hvaWNlTW9kZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICAgICAgY2hvaWNlcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBpdC5lYWNoYFxuICAgICAgICAgIHNlc3Npb25WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhwZWN0ZWRcbiAgICAgICAgICAke3VuZGVmaW5lZH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICAgICAke251bGx9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICAgICAke1tdfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MH1cbiAgICAgICAgICAke1snYXBwbGUnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MC4yNX1cbiAgICAgICAgICAke1snYXBwbGUnLCAnY2hlcnJ5J119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MC41fVxuICAgICAgICAgICR7WydhcHBsZScsICdiYW5hbmEnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJHswLjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2JhbmFuYScsICdjaGVycnknXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2JhbmFuYScsICdncmFwZXMnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2JhbmFuYScsICdncmFwZXMnLCAnY2hlcnJ5J119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezF9XG4gICAgICAgICAgJHtbJ2NoZXJyeScsICdiYW5hbmEnLCAnZ3JhcGVzJ119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbiddfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuMjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbicsICdlbGRlcmJlcnJpZXMnXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuMjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbicsICdmZWlqb2EnLCAnZWxkZXJiZXJyaWVzJywgJ2phY2tmcnVpdCddfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2R1cmlhbicsICdmZWlqb2EnLCAnZWxkZXJiZXJyaWVzJywgJ2phY2tmcnVpdCcsICdraXdpJ119ICAgICAgICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdkdXJpYW4nLCAnZmVpam9hJywgJ2VsZGVyYmVycmllcycsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdkdXJpYW4nLCAnZmVpam9hJywgJ2VsZGVyYmVycmllcycsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZHVyaWFuJywgJ2ZlaWpvYScsICdlbGRlcmJlcnJpZXMnLCAnamFja2ZydWl0JywgJ2tpd2knXX0gfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZHVyaWFuJywgJ2ZlaWpvYScsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgICAgICAgfCAkezB9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZ3JhcGVzJywgJ2R1cmlhbicsICdqYWNrZnJ1aXQnLCAna2l3aSddfSAgICAgICAgICAgICAgICAgfCAkezAuMjV9XG4gICAgICAgICAgJHtbJ2FwcGxlJywgJ2NoZXJyeScsICdiYW5hbmEnLCAnZ3JhcGVzJywgJ2R1cmlhbicsICdqYWNrZnJ1aXQnXX0gICAgICAgICAgICAgICAgICAgICAgICAgfCAkezAuNX1cbiAgICAgICAgICAke1snYXBwbGUnLCAnY2hlcnJ5JywgJ2JhbmFuYScsICdncmFwZXMnLCAnZHVyaWFuJ119ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7MC43NX1cbiAgICAgICAgYChcbiAgICAgICAgICAnb3V0Y29tZTogcGFydGlhbCBzY29yaW5nID0gdHJ1ZSwgc2Vzc2lvblZhbHVlID0gJHNlc3Npb25WYWx1ZSA9PiBleHBlY3RlZCA9ICRleHBlY3RlZCcsXG4gICAgICAgICAgYXN5bmMgKHsgc2Vzc2lvblZhbHVlLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBxID0ge1xuICAgICAgICAgICAgICBjaG9pY2VNb2RlOiAnY2hlY2tib3gnLFxuICAgICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2EnLCB2YWx1ZTogJ2FwcGxlJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdiJywgdmFsdWU6ICdiYW5hbmEnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2MnLCB2YWx1ZTogJ2NoZXJyeScsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnZCcsIHZhbHVlOiAnZHVyaWFuJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdlJywgdmFsdWU6ICdlbGRlcmJlcnJpZXMnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2YnLCB2YWx1ZTogJ2ZlaWpvYScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnZycsIHZhbHVlOiAnZ3JhcGVzJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdqJywgdmFsdWU6ICdqYWNrZnJ1aXQnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2snLCB2YWx1ZTogJ2tpd2knIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHEsIHsgdmFsdWU6IHNlc3Npb25WYWx1ZSB9LCB7IG1vZGU6ICdldmFsdWF0ZSAnIH0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQuZWFjaGBcbiAgICAgIHNlc3Npb24gICAgICAgICAgfCBlbXB0eVxuICAgICAgJHt1bmRlZmluZWR9ICAgICB8ICR7dHJ1ZX1cbiAgICAgICR7bnVsbH0gICAgICAgICAgfCAke3RydWV9XG4gICAgICAke3t9fSAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICAgJHt7IHZhbHVlOiBbXSB9fSB8ICR7ZmFsc2V9XG4gICAgYCgncmV0dXJucyBzY29yZTogMCBhbmQgZW1wdHk6IHRydWUgaWYgc2Vzc2lvbiBpcyAkc2Vzc2lvbicsIGFzeW5jICh7IHNlc3Npb24sIGVtcHR5IH0pID0+IHtcbiAgICAgIGNvbnN0IG8gPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uLCB7IG1vZGU6ICdldmFsdWF0ZScgfSk7XG5cbiAgICAgIGV4cGVjdChvLnNjb3JlKS50b0VxdWFsKDApO1xuICAgICAgZXhwZWN0KG8uZW1wdHkpLnRvRXF1YWwoZW1wdHkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29ycmVjdCByZXNwb25zZScsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBjb3JyZWN0IHJlc3BvbnNlIGlmIGVudiBpcyBjb3JyZWN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VzcyA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHsgbW9kZTogJ2dhdGhlcicsIHJvbGU6ICdpbnN0cnVjdG9yJyB9KTtcbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgaWQ6ICcxJywgdmFsdWU6IFsnYXBwbGUnXSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIG51bGwgZW52IGlzIHN0dWRlbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBub1Jlc3VsdCA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHsgbW9kZTogJ2dhdGhlcicsIHJvbGU6ICdzdHVkZW50JyB9KTtcbiAgICAgIGV4cGVjdChub1Jlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ25vcm1hbGl6ZScsICgpID0+IHtcbiAgICBpdCgnc2V0cyBjaG9pY2VzTGF5b3V0OiBob3Jpem9udGFsIGlmIHZlcnRpY2FsTW9kZTogZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgbm9ybWFsaXplKHsgLi4ucXVlc3Rpb24sIHZlcnRpY2FsTW9kZTogZmFsc2UgfSk7XG5cbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgLi4uZGVmYXVsdHMsIC4uLnF1ZXN0aW9uLCBjaG9pY2VzTGF5b3V0OiAnaG9yaXpvbnRhbCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2V0cyBjaG9pY2VzTGF5b3V0OiB2ZXJ0aWNhbCBpZiB2ZXJ0aWNhbE1vZGU6IHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgbm9ybWFsaXplKHsgLi4ucXVlc3Rpb24sIHZlcnRpY2FsTW9kZTogdHJ1ZSB9KTtcblxuICAgICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoeyAuLi5kZWZhdWx0cywgLi4ucXVlc3Rpb24sIGNob2ljZXNMYXlvdXQ6ICd2ZXJ0aWNhbCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2V0cyBjaG9pY2VzTGF5b3V0OiBncmlkIGlmIHZlcnRpY2FsTW9kZTogdHJ1ZSAmJiBjaG9pY2VzTGF5b3V0OiBncmlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VzcyA9IGF3YWl0IG5vcm1hbGl6ZSh7IC4uLnF1ZXN0aW9uLCB2ZXJ0aWNhbE1vZGU6IHRydWUsIGNob2ljZXNMYXlvdXQ6ICdncmlkJyB9KTtcblxuICAgICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoeyAuLi5kZWZhdWx0cywgLi4ucXVlc3Rpb24sIGNob2ljZXNMYXlvdXQ6ICdncmlkJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzZXRzIGNob2ljZXNMYXlvdXQ6IHZlcnRpY2FsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VzcyA9IGF3YWl0IG5vcm1hbGl6ZShxdWVzdGlvbik7XG5cbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgLi4uZGVmYXVsdHMsIC4uLnF1ZXN0aW9uLCBjaG9pY2VzTGF5b3V0OiAndmVydGljYWwnIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmFsaWRhdGUnLCAoKSA9PiB7XG4gICAgY29uc3QgbWFrZUNob2ljZSA9ICh2YWx1ZSwgY29ycmVjdCA9IGZhbHNlKSA9PiAoeyB2YWx1ZSwgbGFiZWw6IHZhbHVlLCBjb3JyZWN0IH0pO1xuICAgIGNvbnN0IGNvbmZpZyA9IHsgbWluQW5zd2VyQ2hvaWNlczogMiwgbWF4QW5zd2VyQ2hvaWNlczogNSB9O1xuXG4gICAgaXQoJ3JldHVybnMgbm8gZXJyb3Igd2hlbiBtYXhTZWxlY3Rpb25zID49IGNvcnJlY3RDb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgIG1heFNlbGVjdGlvbnM6IDIsXG4gICAgICAgIGNob2ljZXM6IFttYWtlQ2hvaWNlKCdBJywgdHJ1ZSksIG1ha2VDaG9pY2UoJ0InLCB0cnVlKSwgbWFrZUNob2ljZSgnQycpXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QodmFsaWRhdGUobSwgY29uZmlnKS5jb3JyZWN0UmVzcG9uc2UpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGVycm9yIHdoZW4gbWF4U2VsZWN0aW9ucyA8IGNvcnJlY3RDb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgIG1heFNlbGVjdGlvbnM6IDEsXG4gICAgICAgIGNob2ljZXM6IFttYWtlQ2hvaWNlKCdBJywgdHJ1ZSksIG1ha2VDaG9pY2UoJ0InLCB0cnVlKSwgbWFrZUNob2ljZSgnQycpXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QodmFsaWRhdGUobSwgY29uZmlnKS5jb3JyZWN0UmVzcG9uc2UpLnRvTWF0Y2goL2V4Y2VlZHMgbWF4IHNlbGVjdGlvbnMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBlcnJvciBpbiByYWRpbyBtb2RlIGV2ZW4gaWYgbWF4U2VsZWN0aW9ucyA8IGNvcnJlY3RDb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gICAgICAgIG1heFNlbGVjdGlvbnM6IDEsXG4gICAgICAgIGNob2ljZXM6IFttYWtlQ2hvaWNlKCdBJywgdHJ1ZSksIG1ha2VDaG9pY2UoJ0InLCB0cnVlKSwgbWFrZUNob2ljZSgnQycpXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QodmFsaWRhdGUobSwgY29uZmlnKS5jb3JyZWN0UmVzcG9uc2UpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBlcnJvciB3aGVuIG1heFNlbGVjdGlvbnMgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgIG1heFNlbGVjdGlvbnM6IG51bGwsXG4gICAgICAgIGNob2ljZXM6IFttYWtlQ2hvaWNlKCdBJywgdHJ1ZSksIG1ha2VDaG9pY2UoJ0InLCB0cnVlKSwgbWFrZUNob2ljZSgnQycpXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QodmFsaWRhdGUobSwgY29uZmlnKS5jb3JyZWN0UmVzcG9uc2UpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsU0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBRUFJLElBQUksQ0FBQ0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPO0VBQzNCQyxpQkFBaUIsRUFBRUYsSUFBSSxDQUFDRyxFQUFFLENBQUM7QUFDN0IsQ0FBQyxDQUFDLENBQUM7QUFFSEMsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNO0VBQzNCLElBQUlDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLEdBQUc7RUFFbENDLFVBQVUsQ0FBQyxNQUFNO0lBQ2ZILFFBQVEsR0FBRztNQUNUSSxFQUFFLEVBQUUsR0FBRztNQUNQQyxPQUFPLEVBQUUsaUJB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
@@ -1,8 +0,0 @@
1
- "use strict";
2
-
3
- describe('utils', () => {
4
- xit('todo', () => {
5
- expect(true).toEqual(false);
6
- });
7
- });
8
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsInhpdCIsImV4cGVjdCIsInRvRXF1YWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3V0aWxzLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZGVzY3JpYmUoJ3V0aWxzJywgKCkgPT4ge1xuICB4aXQoJ3RvZG8nLCAoKSA9PiB7XG4gICAgZXhwZWN0KHRydWUpLnRvRXF1YWwoZmFsc2UpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU07RUFDdEJDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTTtJQUNoQkMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDQyxPQUFPLENBQUMsS0FBSyxDQUFDO0VBQzdCLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==