@pie-element/charting 8.7.2-beta.1 → 8.7.2-beta.2

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.
@@ -0,0 +1,1807 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
+
7
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
8
+
9
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
10
+
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+
13
+ var _index = require("../index");
14
+
15
+ var _templateObject, _templateObject2;
16
+
17
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18
+
19
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
20
+
21
+ describe('setCorrectness', function () {
22
+ it('sets correctness on answers for partial scoring: incorrect', function () {
23
+ var corectnessAnswers = (0, _index.setCorrectness)([{
24
+ value: 0,
25
+ label: 'A'
26
+ }, {
27
+ value: 1,
28
+ label: 'B'
29
+ }, {
30
+ value: 2,
31
+ label: 'C'
32
+ }], true);
33
+ expect(corectnessAnswers).toEqual([{
34
+ value: 0,
35
+ label: 'A',
36
+ correctness: {
37
+ value: 'incorrect',
38
+ label: 'incorrect'
39
+ }
40
+ }, {
41
+ value: 1,
42
+ label: 'B',
43
+ correctness: {
44
+ value: 'incorrect',
45
+ label: 'incorrect'
46
+ }
47
+ }, {
48
+ value: 2,
49
+ label: 'C',
50
+ correctness: {
51
+ value: 'incorrect',
52
+ label: 'incorrect'
53
+ }
54
+ }]);
55
+ });
56
+ it('sets correctness on answers for all or nothing: correct', function () {
57
+ var corectnessAnswers = (0, _index.setCorrectness)([{
58
+ value: 0,
59
+ label: 'A'
60
+ }, {
61
+ value: 1,
62
+ label: 'B'
63
+ }, {
64
+ value: 2,
65
+ label: 'C'
66
+ }]);
67
+ expect(corectnessAnswers).toEqual([{
68
+ value: 0,
69
+ label: 'A',
70
+ correctness: {
71
+ value: 'correct',
72
+ label: 'correct'
73
+ }
74
+ }, {
75
+ value: 1,
76
+ label: 'B',
77
+ correctness: {
78
+ value: 'correct',
79
+ label: 'correct'
80
+ }
81
+ }, {
82
+ value: 2,
83
+ label: 'C',
84
+ correctness: {
85
+ value: 'correct',
86
+ label: 'correct'
87
+ }
88
+ }]);
89
+ });
90
+ it('sets correctness on answers if answers not set', function () {
91
+ expect((0, _index.setCorrectness)([])).toEqual([]);
92
+ expect((0, _index.setCorrectness)()).toEqual([]);
93
+ });
94
+ });
95
+ describe('checkLabelsEquality', function () {
96
+ it('returns equality between labels', function () {
97
+ expect((0, _index.checkLabelsEquality)('label', 'Label')).toEqual(true);
98
+ expect((0, _index.checkLabelsEquality)('label', 'LABEL')).toEqual(true);
99
+ expect((0, _index.checkLabelsEquality)('label', 'lAbEl')).toEqual(true);
100
+ expect((0, _index.checkLabelsEquality)('label', 'Test')).toEqual(false);
101
+ expect((0, _index.checkLabelsEquality)('label', 'Test')).not.toEqual(true);
102
+ });
103
+ });
104
+ describe('filterCategories', function () {
105
+ it('returns categories filtered with correct values', function () {
106
+ expect((0, _index.filterCategories)(null)).toEqual([]);
107
+ expect((0, _index.filterCategories)([{
108
+ value: 0,
109
+ label: 'A',
110
+ interactive: true,
111
+ editable: true
112
+ }, {
113
+ value: 1,
114
+ label: 'B',
115
+ interactive: true,
116
+ editable: true
117
+ }, {
118
+ value: 2,
119
+ label: 'C',
120
+ interactive: true,
121
+ editable: true
122
+ }])).toEqual([{
123
+ value: 0,
124
+ label: 'A',
125
+ interactive: true,
126
+ editable: true
127
+ }, {
128
+ value: 1,
129
+ label: 'B',
130
+ interactive: true,
131
+ editable: true
132
+ }, {
133
+ value: 2,
134
+ label: 'C',
135
+ interactive: true,
136
+ editable: true
137
+ }]);
138
+ expect((0, _index.filterCategories)([{
139
+ value: 0,
140
+ label: 'A',
141
+ interactive: true,
142
+ editable: false
143
+ }, {
144
+ value: 1,
145
+ label: 'B',
146
+ interactive: true,
147
+ editable: false
148
+ }, {
149
+ value: 2,
150
+ label: 'C',
151
+ interactive: true,
152
+ editable: false
153
+ }])).toEqual([{
154
+ value: 0,
155
+ label: 'A',
156
+ interactive: true,
157
+ editable: false
158
+ }, {
159
+ value: 1,
160
+ label: 'B',
161
+ interactive: true,
162
+ editable: false
163
+ }, {
164
+ value: 2,
165
+ label: 'C',
166
+ interactive: true,
167
+ editable: false
168
+ }]);
169
+ });
170
+ });
171
+ describe('getScore partialScoring test', function () {
172
+ var mkQuestion = function mkQuestion(extras) {
173
+ return _objectSpread({
174
+ correctAnswer: {
175
+ data: [{
176
+ label: 'A',
177
+ value: 0,
178
+ editable: true
179
+ }, {
180
+ label: 'B',
181
+ value: 1,
182
+ editable: true
183
+ }, {
184
+ label: 'C',
185
+ value: 2,
186
+ editable: true
187
+ }]
188
+ },
189
+ data: []
190
+ }, extras);
191
+ }; // if model.scoringType = 'all or nothing'
192
+ // if env.partialScoring = false => dichotomous
193
+ // else env.partialScoring = true || env.partialScoring = undefined => dichotomous
194
+ // else model.scoringType = 'partial scoring' || model.scoringType = undefined
195
+ // if env.partialScoring = false => dichotomous
196
+ // else env.partialScoring = true || model.partialScoring = undefined => partial-credit scoring
197
+
198
+
199
+ it.each(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n mode | partialScoring | scoringType | expected\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n "])), 'evaluate', false, 'all or nothing', 0, 'evaluate', true, 'all or nothing', 0, 'evaluate', undefined, 'all or nothing', 0, 'evaluate', false, 'partial scoring', 0, 'evaluate', true, 'partial scoring', 0.33, 'evaluate', undefined, 'partial scoring', 0.33, 'evaluate', false, undefined, 0, 'evaluate', true, undefined, 0.33, 'evaluate', undefined, undefined, 0.33)('env: { mode $mode, partialScoring $partialScoring }, model.scoringType = $scoringType => $expected', /*#__PURE__*/function () {
200
+ var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) {
201
+ var mode, partialScoring, scoringType, expected, env, session, mod, result;
202
+ return _regenerator["default"].wrap(function _callee$(_context) {
203
+ while (1) {
204
+ switch (_context.prev = _context.next) {
205
+ case 0:
206
+ mode = _ref.mode, partialScoring = _ref.partialScoring, scoringType = _ref.scoringType, expected = _ref.expected;
207
+ env = {
208
+ mode: mode,
209
+ partialScoring: partialScoring
210
+ };
211
+ session = {
212
+ answer: (0, _index.filterCategories)([{
213
+ label: 'A',
214
+ value: 0
215
+ }, {
216
+ label: 'C',
217
+ value: 2
218
+ }])
219
+ };
220
+ _context.next = 5;
221
+ return (0, _index.model)(mkQuestion({
222
+ scoringType: scoringType
223
+ }), session, env);
224
+
225
+ case 5:
226
+ mod = _context.sent;
227
+ _context.next = 8;
228
+ return (0, _index.outcome)(mod, session, env);
229
+
230
+ case 8:
231
+ result = _context.sent;
232
+ expect(result.score).toEqual(expected);
233
+
234
+ case 10:
235
+ case "end":
236
+ return _context.stop();
237
+ }
238
+ }
239
+ }, _callee);
240
+ }));
241
+
242
+ return function (_x) {
243
+ return _ref2.apply(this, arguments);
244
+ };
245
+ }());
246
+ });
247
+ describe('getScore all or nothing', function () {
248
+ var scoringType = 'all or nothing';
249
+ var question = {
250
+ correctAnswer: {
251
+ data: [{
252
+ label: 'A',
253
+ value: 0
254
+ }, {
255
+ label: 'B',
256
+ value: 1
257
+ }, {
258
+ label: 'C',
259
+ value: 2
260
+ }]
261
+ },
262
+ data: [],
263
+ scoringType: scoringType
264
+ };
265
+
266
+ var assertGetScore = function assertGetScore(message, session, expected) {
267
+ it(message, function () {
268
+ expect((0, _index.getScore)(question, session)).toEqual(expected);
269
+ });
270
+ };
271
+
272
+ assertGetScore('response is correct', {
273
+ answer: (0, _index.filterCategories)([{
274
+ label: 'A',
275
+ value: 0
276
+ }, {
277
+ label: 'B',
278
+ value: 1
279
+ }, {
280
+ label: 'C',
281
+ value: 2
282
+ }])
283
+ }, {
284
+ score: 1,
285
+ answers: (0, _index.filterCategories)([{
286
+ label: 'A',
287
+ value: 0,
288
+ correctness: {
289
+ value: 'correct',
290
+ label: 'correct'
291
+ }
292
+ }, {
293
+ label: 'B',
294
+ value: 1,
295
+ correctness: {
296
+ value: 'correct',
297
+ label: 'correct'
298
+ }
299
+ }, {
300
+ label: 'C',
301
+ value: 2,
302
+ correctness: {
303
+ value: 'correct',
304
+ label: 'correct'
305
+ }
306
+ }])
307
+ });
308
+ assertGetScore('response is incorrect: incorrect value', {
309
+ answer: (0, _index.filterCategories)([{
310
+ label: 'A',
311
+ value: 0
312
+ }, {
313
+ label: 'B',
314
+ value: 2
315
+ }, {
316
+ label: 'C',
317
+ value: 2
318
+ }])
319
+ }, {
320
+ score: 0,
321
+ answers: (0, _index.filterCategories)([{
322
+ label: 'A',
323
+ value: 0,
324
+ correctness: {
325
+ value: 'correct',
326
+ label: 'correct'
327
+ }
328
+ }, {
329
+ label: 'B',
330
+ value: 2,
331
+ correctness: {
332
+ value: 'incorrect',
333
+ label: 'correct'
334
+ }
335
+ }, {
336
+ label: 'C',
337
+ value: 2,
338
+ correctness: {
339
+ value: 'correct',
340
+ label: 'correct'
341
+ }
342
+ }])
343
+ });
344
+ assertGetScore('response is incorrect: incorrect label', {
345
+ answer: (0, _index.filterCategories)([{
346
+ label: 'A',
347
+ value: 0
348
+ }, {
349
+ label: 'D',
350
+ value: 1
351
+ }, {
352
+ label: 'C',
353
+ value: 2
354
+ }])
355
+ }, {
356
+ score: 0,
357
+ answers: (0, _index.filterCategories)([{
358
+ label: 'A',
359
+ value: 0,
360
+ correctness: {
361
+ value: 'correct',
362
+ label: 'correct'
363
+ }
364
+ }, {
365
+ label: 'D',
366
+ value: 1,
367
+ correctness: {
368
+ value: 'correct',
369
+ label: 'incorrect'
370
+ }
371
+ }, {
372
+ label: 'C',
373
+ value: 2,
374
+ correctness: {
375
+ value: 'correct',
376
+ label: 'correct'
377
+ }
378
+ }])
379
+ });
380
+ assertGetScore('response is incorrect: incorrect value & label', {
381
+ answer: (0, _index.filterCategories)([{
382
+ label: 'A',
383
+ value: 0
384
+ }, {
385
+ label: 'D',
386
+ value: 2
387
+ }, {
388
+ label: 'C',
389
+ value: 2
390
+ }])
391
+ }, {
392
+ score: 0,
393
+ answers: (0, _index.filterCategories)([{
394
+ label: 'A',
395
+ value: 0,
396
+ correctness: {
397
+ value: 'correct',
398
+ label: 'correct'
399
+ }
400
+ }, {
401
+ label: 'D',
402
+ value: 2,
403
+ correctness: {
404
+ value: 'incorrect',
405
+ label: 'incorrect'
406
+ }
407
+ }, {
408
+ label: 'C',
409
+ value: 2,
410
+ correctness: {
411
+ value: 'correct',
412
+ label: 'correct'
413
+ }
414
+ }])
415
+ });
416
+ assertGetScore('response is incorrect: more categories in given answer', {
417
+ answer: (0, _index.filterCategories)([{
418
+ label: 'A',
419
+ value: 0
420
+ }, {
421
+ label: 'B',
422
+ value: 1
423
+ }, {
424
+ label: 'C',
425
+ value: 2
426
+ }, {
427
+ label: 'D',
428
+ value: 3
429
+ }])
430
+ }, {
431
+ score: 0,
432
+ answers: (0, _index.filterCategories)([{
433
+ label: 'A',
434
+ value: 0,
435
+ correctness: {
436
+ value: 'correct',
437
+ label: 'correct'
438
+ }
439
+ }, {
440
+ label: 'B',
441
+ value: 1,
442
+ correctness: {
443
+ value: 'correct',
444
+ label: 'correct'
445
+ }
446
+ }, {
447
+ label: 'C',
448
+ value: 2,
449
+ correctness: {
450
+ value: 'correct',
451
+ label: 'correct'
452
+ }
453
+ }, {
454
+ label: 'D',
455
+ value: 3,
456
+ correctness: {
457
+ value: 'incorrect',
458
+ label: 'incorrect'
459
+ }
460
+ }])
461
+ });
462
+ assertGetScore('response is incorrect: less categories in given answer', {
463
+ answer: (0, _index.filterCategories)([{
464
+ label: 'A',
465
+ value: 0
466
+ }, {
467
+ label: 'B',
468
+ value: 1
469
+ }])
470
+ }, {
471
+ score: 0,
472
+ answers: (0, _index.filterCategories)([{
473
+ label: 'A',
474
+ value: 0,
475
+ correctness: {
476
+ value: 'correct',
477
+ label: 'correct'
478
+ }
479
+ }, {
480
+ label: 'B',
481
+ value: 1,
482
+ correctness: {
483
+ value: 'correct',
484
+ label: 'correct'
485
+ }
486
+ }])
487
+ });
488
+ assertGetScore('session is undefined', undefined, {
489
+ score: 0,
490
+ answers: []
491
+ });
492
+ assertGetScore('session is null', null, {
493
+ score: 0,
494
+ answers: []
495
+ });
496
+ assertGetScore('session is empty', {}, {
497
+ score: 0,
498
+ answers: []
499
+ });
500
+ });
501
+ describe('getScore partial scoring - editable - interactive', function () {
502
+ var scoringType = 'partial scoring';
503
+ var question = {
504
+ correctAnswer: {
505
+ data: [{
506
+ label: 'A',
507
+ value: 0,
508
+ editable: true
509
+ }, {
510
+ label: 'B',
511
+ value: 1,
512
+ editable: true
513
+ }, {
514
+ label: 'C',
515
+ value: 2,
516
+ editable: true
517
+ }]
518
+ },
519
+ data: (0, _index.filterCategories)([{
520
+ label: 'A',
521
+ value: 0,
522
+ interactive: true,
523
+ editable: true
524
+ }, {
525
+ label: 'B',
526
+ value: 1,
527
+ interactive: true,
528
+ editable: true
529
+ }]),
530
+ scoringType: scoringType
531
+ };
532
+
533
+ var assertGetScore = function assertGetScore(message, questionExtra, session, expected) {
534
+ it(message, function () {
535
+ expect((0, _index.getScore)(_objectSpread(_objectSpread({}, question), questionExtra), session)).toEqual(expected);
536
+ });
537
+ };
538
+
539
+ assertGetScore('Answer is default answer, 4/6 correct answers', {}, {}, {
540
+ score: 0.67,
541
+ answers: (0, _index.filterCategories)([{
542
+ label: 'A',
543
+ value: 0,
544
+ interactive: true,
545
+ editable: true,
546
+ correctness: {
547
+ value: 'correct',
548
+ label: 'correct'
549
+ }
550
+ }, {
551
+ label: 'B',
552
+ value: 1,
553
+ interactive: true,
554
+ editable: true,
555
+ correctness: {
556
+ value: 'correct',
557
+ label: 'correct'
558
+ }
559
+ }])
560
+ });
561
+ assertGetScore('5/6 correct answers', {}, {
562
+ answer: (0, _index.filterCategories)([{
563
+ label: 'A',
564
+ value: 0,
565
+ interactive: true,
566
+ editable: true
567
+ }, {
568
+ label: 'B',
569
+ value: 1,
570
+ interactive: true,
571
+ editable: true
572
+ }, {
573
+ label: 'C',
574
+ value: 1,
575
+ interactive: true,
576
+ editable: true
577
+ }])
578
+ }, {
579
+ score: 0.83,
580
+ answers: (0, _index.filterCategories)([{
581
+ label: 'A',
582
+ value: 0,
583
+ interactive: true,
584
+ editable: true,
585
+ correctness: {
586
+ value: 'correct',
587
+ label: 'correct'
588
+ }
589
+ }, {
590
+ label: 'B',
591
+ value: 1,
592
+ interactive: true,
593
+ editable: true,
594
+ correctness: {
595
+ value: 'correct',
596
+ label: 'correct'
597
+ }
598
+ }, {
599
+ label: 'C',
600
+ value: 1,
601
+ interactive: true,
602
+ editable: true,
603
+ correctness: {
604
+ value: 'incorrect',
605
+ label: 'correct'
606
+ }
607
+ }])
608
+ });
609
+ assertGetScore('Default answer edited with incorrect answer, 4/6 correct answers', {}, {
610
+ answer: (0, _index.filterCategories)([{
611
+ label: 'A',
612
+ value: 0,
613
+ interactive: true,
614
+ editable: true
615
+ }, {
616
+ label: 'D',
617
+ value: 1,
618
+ interactive: true,
619
+ editable: true
620
+ }, {
621
+ label: 'C',
622
+ value: 1,
623
+ interactive: true,
624
+ editable: true
625
+ }])
626
+ }, {
627
+ score: 0.67,
628
+ answers: (0, _index.filterCategories)([{
629
+ label: 'A',
630
+ value: 0,
631
+ interactive: true,
632
+ editable: true,
633
+ correctness: {
634
+ value: 'correct',
635
+ label: 'correct'
636
+ }
637
+ }, {
638
+ label: 'D',
639
+ value: 1,
640
+ interactive: true,
641
+ editable: true,
642
+ correctness: {
643
+ value: 'correct',
644
+ label: 'incorrect'
645
+ }
646
+ }, {
647
+ label: 'C',
648
+ value: 1,
649
+ interactive: true,
650
+ editable: true,
651
+ correctness: {
652
+ value: 'incorrect',
653
+ label: 'correct'
654
+ }
655
+ }])
656
+ });
657
+ assertGetScore('Default answer was incorrect and edited, 4/6 correct answers', {
658
+ data: (0, _index.filterCategories)([{
659
+ label: 'A-wrong',
660
+ value: 0,
661
+ interactive: true,
662
+ editable: true
663
+ }, {
664
+ label: 'B',
665
+ value: 1,
666
+ interactive: true,
667
+ editable: true
668
+ }])
669
+ }, {
670
+ answer: (0, _index.filterCategories)([{
671
+ label: 'A',
672
+ value: 0,
673
+ interactive: true,
674
+ editable: true
675
+ }, {
676
+ label: 'B',
677
+ value: 1,
678
+ interactive: true,
679
+ editable: true
680
+ }, {
681
+ label: 'C',
682
+ value: 2,
683
+ interactive: true,
684
+ editable: true
685
+ }])
686
+ }, {
687
+ score: 1,
688
+ answers: (0, _index.filterCategories)([{
689
+ label: 'A',
690
+ value: 0,
691
+ interactive: true,
692
+ editable: true,
693
+ correctness: {
694
+ value: 'correct',
695
+ label: 'correct'
696
+ }
697
+ }, {
698
+ label: 'B',
699
+ value: 1,
700
+ interactive: true,
701
+ editable: true,
702
+ correctness: {
703
+ value: 'correct',
704
+ label: 'correct'
705
+ }
706
+ }, {
707
+ label: 'C',
708
+ value: 2,
709
+ interactive: true,
710
+ editable: true,
711
+ correctness: {
712
+ value: 'correct',
713
+ label: 'correct'
714
+ }
715
+ }])
716
+ });
717
+ });
718
+ describe('getScore partial scoring - NOT editable - interactive', function () {
719
+ var scoringType = 'partial scoring';
720
+ var question = {
721
+ correctAnswer: {
722
+ data: [{
723
+ label: 'A',
724
+ value: 0
725
+ }, {
726
+ label: 'B',
727
+ value: 1
728
+ }, {
729
+ label: 'C',
730
+ value: 2
731
+ }]
732
+ },
733
+ data: (0, _index.filterCategories)([{
734
+ label: 'A',
735
+ value: 0,
736
+ interactive: true
737
+ }, {
738
+ label: 'B',
739
+ value: 1,
740
+ interactive: true
741
+ }]),
742
+ scoringType: scoringType
743
+ };
744
+
745
+ var assertGetScore = function assertGetScore(message, questionExtra, session, expected) {
746
+ it(message, function () {
747
+ expect((0, _index.getScore)(_objectSpread(_objectSpread({}, question), questionExtra), session)).toEqual(expected);
748
+ });
749
+ };
750
+
751
+ assertGetScore('Answer is default answer, 2/4 correct answers (3 values + 1 label)', {}, {}, {
752
+ score: 0.5,
753
+ answers: (0, _index.filterCategories)([{
754
+ label: 'A',
755
+ value: 0,
756
+ interactive: true,
757
+ correctness: {
758
+ value: 'correct',
759
+ label: 'correct'
760
+ }
761
+ }, {
762
+ label: 'B',
763
+ value: 1,
764
+ interactive: true,
765
+ correctness: {
766
+ value: 'correct',
767
+ label: 'correct'
768
+ }
769
+ }])
770
+ });
771
+ assertGetScore('2/4 correct answers (3 values + 1 label)', {}, {
772
+ answer: (0, _index.filterCategories)([{
773
+ label: 'A',
774
+ value: 0,
775
+ interactive: true
776
+ }, {
777
+ label: 'B',
778
+ value: 1,
779
+ interactive: true
780
+ }, {
781
+ label: 'C',
782
+ value: 1,
783
+ interactive: true
784
+ }])
785
+ }, {
786
+ score: 0.75,
787
+ answers: (0, _index.filterCategories)([{
788
+ label: 'A',
789
+ value: 0,
790
+ interactive: true,
791
+ correctness: {
792
+ value: 'correct',
793
+ label: 'correct'
794
+ }
795
+ }, {
796
+ label: 'B',
797
+ value: 1,
798
+ interactive: true,
799
+ correctness: {
800
+ value: 'correct',
801
+ label: 'correct'
802
+ }
803
+ }, {
804
+ label: 'C',
805
+ value: 1,
806
+ interactive: true,
807
+ correctness: {
808
+ value: 'incorrect',
809
+ label: 'correct'
810
+ }
811
+ }])
812
+ });
813
+ assertGetScore('Default answer plus extra incorrect answer, 2/4 correct answers (3 values + 1 label)', {}, {
814
+ answer: (0, _index.filterCategories)([{
815
+ label: 'A',
816
+ value: 0,
817
+ interactive: true
818
+ }, {
819
+ label: 'B',
820
+ value: 1,
821
+ interactive: true
822
+ }, {
823
+ label: 'D',
824
+ value: 1,
825
+ interactive: true
826
+ }])
827
+ }, {
828
+ score: 0.5,
829
+ answers: (0, _index.filterCategories)([{
830
+ label: 'A',
831
+ value: 0,
832
+ interactive: true,
833
+ correctness: {
834
+ value: 'correct',
835
+ label: 'correct'
836
+ }
837
+ }, {
838
+ label: 'B',
839
+ value: 1,
840
+ interactive: true,
841
+ correctness: {
842
+ value: 'correct',
843
+ label: 'correct'
844
+ }
845
+ }, {
846
+ label: 'D',
847
+ value: 1,
848
+ interactive: true,
849
+ correctness: {
850
+ value: 'incorrect',
851
+ label: 'incorrect'
852
+ }
853
+ }])
854
+ });
855
+ assertGetScore('Default answer was incorrect, 4/4 correct answers (3 values + 1 label)', {
856
+ data: (0, _index.filterCategories)([{
857
+ label: 'A-wrong',
858
+ value: 0,
859
+ interactive: true
860
+ }, {
861
+ label: 'B',
862
+ value: 1,
863
+ interactive: true
864
+ }])
865
+ }, {
866
+ answer: (0, _index.filterCategories)([{
867
+ label: 'A-wrong',
868
+ value: 0,
869
+ interactive: true
870
+ }, {
871
+ label: 'B',
872
+ value: 1,
873
+ interactive: true
874
+ }, {
875
+ label: 'C',
876
+ value: 2,
877
+ interactive: true
878
+ }])
879
+ }, {
880
+ score: 1,
881
+ answers: (0, _index.filterCategories)([{
882
+ label: 'A-wrong',
883
+ value: 0,
884
+ interactive: true,
885
+ correctness: {
886
+ value: 'correct',
887
+ label: 'correct'
888
+ }
889
+ }, {
890
+ label: 'B',
891
+ value: 1,
892
+ interactive: true,
893
+ correctness: {
894
+ value: 'correct',
895
+ label: 'correct'
896
+ }
897
+ }, {
898
+ label: 'C',
899
+ value: 2,
900
+ interactive: true,
901
+ correctness: {
902
+ value: 'correct',
903
+ label: 'correct'
904
+ }
905
+ }])
906
+ });
907
+ });
908
+ describe('getScore partial scoring - editable - randomly interactive', function () {
909
+ var scoringType = 'partial scoring';
910
+ var question = {
911
+ correctAnswer: {
912
+ data: [{
913
+ label: 'A',
914
+ value: 0
915
+ }, {
916
+ label: 'B',
917
+ value: 1
918
+ }, {
919
+ label: 'C',
920
+ value: 2
921
+ }]
922
+ },
923
+ data: (0, _index.filterCategories)([{
924
+ label: 'A',
925
+ value: 0,
926
+ interactive: false,
927
+ editable: true
928
+ }, {
929
+ label: 'B',
930
+ value: 1,
931
+ interactive: true,
932
+ editable: true
933
+ }]),
934
+ scoringType: scoringType
935
+ };
936
+
937
+ var assertGetScore = function assertGetScore(message, questionExtra, session, expected) {
938
+ it(message, function () {
939
+ expect((0, _index.getScore)(_objectSpread(_objectSpread({}, question), questionExtra), session)).toEqual(expected);
940
+ });
941
+ };
942
+
943
+ assertGetScore('Answer is default answer, 2/4 correct answers (2 values + 2 labels)', {}, {}, {
944
+ score: 0.5,
945
+ answers: (0, _index.filterCategories)([{
946
+ label: 'A',
947
+ value: 0,
948
+ interactive: false,
949
+ editable: true,
950
+ correctness: {
951
+ value: 'correct',
952
+ label: 'correct'
953
+ }
954
+ }, {
955
+ label: 'B',
956
+ value: 1,
957
+ interactive: true,
958
+ editable: true,
959
+ correctness: {
960
+ value: 'correct',
961
+ label: 'correct'
962
+ }
963
+ }])
964
+ });
965
+ assertGetScore(' correct answers 3/4 (2 values + 2 labels)', {}, {
966
+ answer: (0, _index.filterCategories)([{
967
+ label: 'A',
968
+ value: 0,
969
+ interactive: false,
970
+ editable: true
971
+ }, {
972
+ label: 'B',
973
+ value: 1,
974
+ interactive: true,
975
+ editable: true
976
+ }, {
977
+ label: 'C',
978
+ value: 1,
979
+ interactive: true,
980
+ editable: true
981
+ }])
982
+ }, {
983
+ score: 0.75,
984
+ answers: (0, _index.filterCategories)([{
985
+ label: 'A',
986
+ value: 0,
987
+ interactive: false,
988
+ editable: true,
989
+ correctness: {
990
+ value: 'correct',
991
+ label: 'correct'
992
+ }
993
+ }, {
994
+ label: 'B',
995
+ value: 1,
996
+ interactive: true,
997
+ editable: true,
998
+ correctness: {
999
+ value: 'correct',
1000
+ label: 'correct'
1001
+ }
1002
+ }, {
1003
+ label: 'C',
1004
+ value: 1,
1005
+ interactive: true,
1006
+ editable: true,
1007
+ correctness: {
1008
+ value: 'incorrect',
1009
+ label: 'correct'
1010
+ }
1011
+ }])
1012
+ });
1013
+ assertGetScore('Default answer edited with incorrect answer, 2/4 correct answers (2 labels + 2 values)', {}, {
1014
+ answer: (0, _index.filterCategories)([{
1015
+ label: 'A',
1016
+ value: 0,
1017
+ interactive: false,
1018
+ editable: true
1019
+ }, {
1020
+ label: 'D',
1021
+ value: 1,
1022
+ interactive: true,
1023
+ editable: true
1024
+ }, {
1025
+ label: 'C',
1026
+ value: 1,
1027
+ interactive: true,
1028
+ editable: true
1029
+ }])
1030
+ }, {
1031
+ score: 0.5,
1032
+ answers: (0, _index.filterCategories)([{
1033
+ label: 'A',
1034
+ value: 0,
1035
+ interactive: false,
1036
+ editable: true,
1037
+ correctness: {
1038
+ value: 'correct',
1039
+ label: 'correct'
1040
+ }
1041
+ }, {
1042
+ label: 'D',
1043
+ value: 1,
1044
+ interactive: true,
1045
+ editable: true,
1046
+ correctness: {
1047
+ value: 'correct',
1048
+ label: 'incorrect'
1049
+ }
1050
+ }, {
1051
+ label: 'C',
1052
+ value: 1,
1053
+ interactive: true,
1054
+ editable: true,
1055
+ correctness: {
1056
+ value: 'incorrect',
1057
+ label: 'correct'
1058
+ }
1059
+ }])
1060
+ });
1061
+ assertGetScore('Default answer was incorrect and edited, 4/4 correct answers (2 labels + 2 values)', {
1062
+ data: (0, _index.filterCategories)([{
1063
+ label: 'A-wrong',
1064
+ value: 0,
1065
+ interactive: false,
1066
+ editable: true
1067
+ }, {
1068
+ label: 'B',
1069
+ value: 1,
1070
+ interactive: true,
1071
+ editable: true
1072
+ }])
1073
+ }, {
1074
+ answer: (0, _index.filterCategories)([{
1075
+ label: 'A-wrong',
1076
+ value: 0,
1077
+ interactive: false,
1078
+ editable: true
1079
+ }, {
1080
+ label: 'B',
1081
+ value: 1,
1082
+ interactive: true,
1083
+ editable: true
1084
+ }, {
1085
+ label: 'C',
1086
+ value: 2,
1087
+ interactive: true,
1088
+ editable: true
1089
+ }])
1090
+ }, {
1091
+ score: 1,
1092
+ answers: (0, _index.filterCategories)([{
1093
+ label: 'A-wrong',
1094
+ value: 0,
1095
+ interactive: false,
1096
+ editable: true,
1097
+ correctness: {
1098
+ value: 'correct',
1099
+ label: 'correct'
1100
+ }
1101
+ }, {
1102
+ label: 'B',
1103
+ value: 1,
1104
+ interactive: true,
1105
+ editable: true,
1106
+ correctness: {
1107
+ value: 'correct',
1108
+ label: 'correct'
1109
+ }
1110
+ }, {
1111
+ label: 'C',
1112
+ value: 2,
1113
+ interactive: true,
1114
+ editable: true,
1115
+ correctness: {
1116
+ value: 'correct',
1117
+ label: 'correct'
1118
+ }
1119
+ }])
1120
+ });
1121
+ });
1122
+ describe('getScore partial scoring - NOT editable - randomly interactive', function () {
1123
+ var scoringType = 'partial scoring';
1124
+ var question = {
1125
+ correctAnswer: {
1126
+ data: [{
1127
+ label: 'A',
1128
+ value: 0
1129
+ }, {
1130
+ label: 'B',
1131
+ value: 1
1132
+ }, {
1133
+ label: 'C',
1134
+ value: 2
1135
+ }]
1136
+ },
1137
+ data: (0, _index.filterCategories)([{
1138
+ label: 'A',
1139
+ value: 0,
1140
+ interactive: false,
1141
+ editable: false
1142
+ }, {
1143
+ label: 'B',
1144
+ value: 1,
1145
+ interactive: true,
1146
+ editable: false
1147
+ }]),
1148
+ scoringType: scoringType
1149
+ };
1150
+
1151
+ var assertGetScore = function assertGetScore(message, questionExtra, session, expected) {
1152
+ it(message, function () {
1153
+ expect((0, _index.getScore)(_objectSpread(_objectSpread({}, question), questionExtra), session)).toEqual(expected);
1154
+ });
1155
+ };
1156
+
1157
+ assertGetScore('Answer is default answer, 1/3 correct answers (2 values + 1 label)', {}, {}, {
1158
+ score: 0.33,
1159
+ answers: (0, _index.filterCategories)([{
1160
+ label: 'A',
1161
+ value: 0,
1162
+ interactive: false,
1163
+ editable: false,
1164
+ correctness: {
1165
+ value: 'correct',
1166
+ label: 'correct'
1167
+ }
1168
+ }, {
1169
+ label: 'B',
1170
+ value: 1,
1171
+ interactive: true,
1172
+ editable: false,
1173
+ correctness: {
1174
+ value: 'correct',
1175
+ label: 'correct'
1176
+ }
1177
+ }])
1178
+ });
1179
+ assertGetScore(' correct answers 2/3 (2 values + 1 label)', {}, {
1180
+ answer: (0, _index.filterCategories)([{
1181
+ label: 'A',
1182
+ value: 0,
1183
+ interactive: false,
1184
+ editable: false
1185
+ }, {
1186
+ label: 'B',
1187
+ value: 1,
1188
+ interactive: true,
1189
+ editable: false
1190
+ }, {
1191
+ label: 'C',
1192
+ value: 1,
1193
+ interactive: true,
1194
+ editable: false
1195
+ }])
1196
+ }, {
1197
+ score: 0.67,
1198
+ answers: (0, _index.filterCategories)([{
1199
+ label: 'A',
1200
+ value: 0,
1201
+ interactive: false,
1202
+ editable: false,
1203
+ correctness: {
1204
+ value: 'correct',
1205
+ label: 'correct'
1206
+ }
1207
+ }, {
1208
+ label: 'B',
1209
+ value: 1,
1210
+ interactive: true,
1211
+ editable: false,
1212
+ correctness: {
1213
+ value: 'correct',
1214
+ label: 'correct'
1215
+ }
1216
+ }, {
1217
+ label: 'C',
1218
+ value: 1,
1219
+ interactive: true,
1220
+ editable: false,
1221
+ correctness: {
1222
+ value: 'incorrect',
1223
+ label: 'correct'
1224
+ }
1225
+ }])
1226
+ });
1227
+ assertGetScore('Default answer edited with incorrect answer, 2/3 correct answers (2 values + 1 label)', {}, {
1228
+ answer: (0, _index.filterCategories)([{
1229
+ label: 'A',
1230
+ value: 0,
1231
+ interactive: false,
1232
+ editable: false
1233
+ }, {
1234
+ label: 'D',
1235
+ value: 1,
1236
+ interactive: true,
1237
+ editable: false
1238
+ }, {
1239
+ label: 'C',
1240
+ value: 1,
1241
+ interactive: true,
1242
+ editable: false
1243
+ }])
1244
+ }, {
1245
+ score: 0.67,
1246
+ answers: (0, _index.filterCategories)([{
1247
+ label: 'A',
1248
+ value: 0,
1249
+ interactive: false,
1250
+ editable: false,
1251
+ correctness: {
1252
+ value: 'correct',
1253
+ label: 'correct'
1254
+ }
1255
+ }, {
1256
+ label: 'D',
1257
+ value: 1,
1258
+ interactive: true,
1259
+ editable: false,
1260
+ correctness: {
1261
+ value: 'correct',
1262
+ label: 'correct'
1263
+ }
1264
+ }, {
1265
+ label: 'C',
1266
+ value: 1,
1267
+ interactive: true,
1268
+ editable: false,
1269
+ correctness: {
1270
+ value: 'incorrect',
1271
+ label: 'correct'
1272
+ }
1273
+ }])
1274
+ });
1275
+ assertGetScore('Default answer was incorrect and edited, 3/3 correct answers (1 label + 2 values)', {
1276
+ data: (0, _index.filterCategories)([{
1277
+ label: 'A-wrong',
1278
+ value: 0,
1279
+ interactive: false,
1280
+ editable: false
1281
+ }, {
1282
+ label: 'B',
1283
+ value: 1,
1284
+ interactive: true,
1285
+ editable: false
1286
+ }])
1287
+ }, {
1288
+ answer: (0, _index.filterCategories)([{
1289
+ label: 'A-wrong',
1290
+ value: 0,
1291
+ interactive: false,
1292
+ editable: false
1293
+ }, {
1294
+ label: 'B',
1295
+ value: 1,
1296
+ interactive: true,
1297
+ editable: false
1298
+ }, {
1299
+ label: 'C',
1300
+ value: 2,
1301
+ interactive: true,
1302
+ editable: false
1303
+ }])
1304
+ }, {
1305
+ score: 1,
1306
+ answers: (0, _index.filterCategories)([{
1307
+ label: 'A-wrong',
1308
+ value: 0,
1309
+ interactive: false,
1310
+ editable: false,
1311
+ correctness: {
1312
+ value: 'correct',
1313
+ label: 'correct'
1314
+ }
1315
+ }, {
1316
+ label: 'B',
1317
+ value: 1,
1318
+ interactive: true,
1319
+ editable: false,
1320
+ correctness: {
1321
+ value: 'correct',
1322
+ label: 'correct'
1323
+ }
1324
+ }, {
1325
+ label: 'C',
1326
+ value: 2,
1327
+ interactive: true,
1328
+ editable: false,
1329
+ correctness: {
1330
+ value: 'correct',
1331
+ label: 'correct'
1332
+ }
1333
+ }])
1334
+ });
1335
+ });
1336
+ describe('createCorrectResponseSession', function () {
1337
+ var question = {
1338
+ studentNewCategoryDefaultLabel: 'Category',
1339
+ chartType: 'lineCross',
1340
+ correctAnswer: {
1341
+ data: [{
1342
+ label: 'A',
1343
+ value: 1,
1344
+ interactive: false,
1345
+ editable: true
1346
+ }, {
1347
+ label: 'B',
1348
+ value: 1,
1349
+ interactive: true,
1350
+ editable: true
1351
+ }, {
1352
+ label: 'C',
1353
+ value: 1,
1354
+ interactive: true,
1355
+ editable: true
1356
+ }]
1357
+ },
1358
+ data: [{
1359
+ label: 'A',
1360
+ value: 1,
1361
+ interactive: false,
1362
+ editable: true
1363
+ }, {
1364
+ label: 'B',
1365
+ value: 1,
1366
+ interactive: true,
1367
+ editable: true
1368
+ }, {
1369
+ label: 'D',
1370
+ value: 1,
1371
+ interactive: true,
1372
+ editable: true
1373
+ }],
1374
+ domain: {
1375
+ label: 'Fruits'
1376
+ },
1377
+ graph: {
1378
+ width: 480,
1379
+ height: 480
1380
+ },
1381
+ prompt: 'Here goes item stem!',
1382
+ rationale: 'Rationale goes here!',
1383
+ range: {
1384
+ label: 'Amount',
1385
+ max: 5.5,
1386
+ min: 0,
1387
+ labelStep: 1
1388
+ },
1389
+ scoringType: 'partial scoring',
1390
+ title: 'This is a chart!'
1391
+ };
1392
+ it('returns correct response if role is instructor and mode is gather', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
1393
+ var sess;
1394
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
1395
+ while (1) {
1396
+ switch (_context2.prev = _context2.next) {
1397
+ case 0:
1398
+ _context2.next = 2;
1399
+ return (0, _index.createCorrectResponseSession)(question, {
1400
+ mode: 'gather',
1401
+ role: 'instructor'
1402
+ });
1403
+
1404
+ case 2:
1405
+ sess = _context2.sent;
1406
+ expect(sess).toEqual({
1407
+ answer: [{
1408
+ label: 'A',
1409
+ value: 1,
1410
+ interactive: false,
1411
+ editable: true
1412
+ }, {
1413
+ label: 'B',
1414
+ value: 1,
1415
+ interactive: true,
1416
+ editable: true
1417
+ }, {
1418
+ label: 'C',
1419
+ value: 1,
1420
+ interactive: true,
1421
+ editable: true
1422
+ }],
1423
+ id: '1'
1424
+ });
1425
+
1426
+ case 4:
1427
+ case "end":
1428
+ return _context2.stop();
1429
+ }
1430
+ }
1431
+ }, _callee2);
1432
+ })));
1433
+ it('returns correct response if role is instructor and mode is view', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
1434
+ var sess;
1435
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
1436
+ while (1) {
1437
+ switch (_context3.prev = _context3.next) {
1438
+ case 0:
1439
+ _context3.next = 2;
1440
+ return (0, _index.createCorrectResponseSession)(question, {
1441
+ mode: 'view',
1442
+ role: 'instructor'
1443
+ });
1444
+
1445
+ case 2:
1446
+ sess = _context3.sent;
1447
+ expect(sess).toEqual({
1448
+ answer: [{
1449
+ label: 'A',
1450
+ value: 1,
1451
+ interactive: false,
1452
+ editable: true
1453
+ }, {
1454
+ label: 'B',
1455
+ value: 1,
1456
+ interactive: true,
1457
+ editable: true
1458
+ }, {
1459
+ label: 'C',
1460
+ value: 1,
1461
+ interactive: true,
1462
+ editable: true
1463
+ }],
1464
+ id: '1'
1465
+ });
1466
+
1467
+ case 4:
1468
+ case "end":
1469
+ return _context3.stop();
1470
+ }
1471
+ }
1472
+ }, _callee3);
1473
+ })));
1474
+ it('returns null if mode is evaluate', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
1475
+ var noResult;
1476
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
1477
+ while (1) {
1478
+ switch (_context4.prev = _context4.next) {
1479
+ case 0:
1480
+ _context4.next = 2;
1481
+ return (0, _index.createCorrectResponseSession)(question, {
1482
+ mode: 'evaluate',
1483
+ role: 'instructor'
1484
+ });
1485
+
1486
+ case 2:
1487
+ noResult = _context4.sent;
1488
+ expect(noResult).toBeNull();
1489
+
1490
+ case 4:
1491
+ case "end":
1492
+ return _context4.stop();
1493
+ }
1494
+ }
1495
+ }, _callee4);
1496
+ })));
1497
+ it('returns null if role is student', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
1498
+ var noResult;
1499
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
1500
+ while (1) {
1501
+ switch (_context5.prev = _context5.next) {
1502
+ case 0:
1503
+ _context5.next = 2;
1504
+ return (0, _index.createCorrectResponseSession)(question, {
1505
+ mode: 'gather',
1506
+ role: 'student'
1507
+ });
1508
+
1509
+ case 2:
1510
+ noResult = _context5.sent;
1511
+ expect(noResult).toBeNull();
1512
+
1513
+ case 4:
1514
+ case "end":
1515
+ return _context5.stop();
1516
+ }
1517
+ }
1518
+ }, _callee5);
1519
+ })));
1520
+ });
1521
+ var mockFetchSession = jest.fn();
1522
+ var question = {
1523
+ addCategoryEnabled: true,
1524
+ chartType: 'bar',
1525
+ data: [{
1526
+ interactive: true,
1527
+ value: 3,
1528
+ label: 'Three'
1529
+ }, {
1530
+ interactive: true,
1531
+ value: 0,
1532
+ label: 'Four'
1533
+ }, {
1534
+ interactive: true,
1535
+ value: 0,
1536
+ label: 'Five'
1537
+ }],
1538
+ correctAnswer: {
1539
+ data: [{
1540
+ value: 3,
1541
+ label: 'Three'
1542
+ }, {
1543
+ value: 2,
1544
+ label: 'Four'
1545
+ }, {
1546
+ value: 4,
1547
+ label: 'Five'
1548
+ }, {
1549
+ value: 0,
1550
+ label: 'Six'
1551
+ }, {
1552
+ value: 1,
1553
+ label: 'Seven'
1554
+ }, {
1555
+ value: 1,
1556
+ label: 'Eight'
1557
+ }]
1558
+ },
1559
+ domain: {
1560
+ label: 'Number of Letters'
1561
+ },
1562
+ graph: {
1563
+ height: 500,
1564
+ width: 500
1565
+ },
1566
+ prompt: '<p>Ms. Byrd shows her third grade students how to make a bar graph. She uses the number of letters in some of her students&#39; first names. The students&#39; names she uses for the bar graph are shown below.</p><p><img alt="image 2eade8e8a2fa445dae432c417e8a2731" id="2eade8e8a2fa445dae432c417e8a2731" src="https://storage.googleapis.com/pie-prod-221718-assets/image/cf2c334e-340c-4523-9a47-cb835fddfefe"></p><p>Ms. Byrd starts the bar graph by writing some of the labels.&#160;Finish the bar graph below by dragging the bars to show the correct number of first name letters of all the students and adding labels as needed.</p><p></p><p></p><p></p>',
1567
+ range: {
1568
+ label: 'Number of Students',
1569
+ max: 6,
1570
+ labelStep: 0.25,
1571
+ step: 0.25,
1572
+ min: 0
1573
+ },
1574
+ rationale: null,
1575
+ title: 'Number of Letters in First Name',
1576
+ disabled: false,
1577
+ teacherInstructions: null
1578
+ };
1579
+ mockFetchSession.mockResolvedValue({
1580
+ answer: [{
1581
+ interactive: false,
1582
+ value: 3,
1583
+ label: 'Three'
1584
+ }, {
1585
+ value: 2,
1586
+ label: 'Four',
1587
+ interactive: false
1588
+ }, {
1589
+ value: 4,
1590
+ label: 'Five',
1591
+ interactive: false
1592
+ }, {
1593
+ interactive: false,
1594
+ value: 0.25,
1595
+ label: 'six'
1596
+ }, {
1597
+ value: 1,
1598
+ label: 'seven',
1599
+ interactive: false
1600
+ }, {
1601
+ interactive: false,
1602
+ value: 1,
1603
+ label: 'eight'
1604
+ }]
1605
+ }); // Test to check if getScore correctly processes the session data from API
1606
+
1607
+ describe('getScore with API session data', function () {
1608
+ it('correctly processes session data from API in evaluate mode', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
1609
+ var session, env, mod, scoreResult;
1610
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
1611
+ while (1) {
1612
+ switch (_context6.prev = _context6.next) {
1613
+ case 0:
1614
+ _context6.next = 2;
1615
+ return mockFetchSession();
1616
+
1617
+ case 2:
1618
+ session = _context6.sent;
1619
+ env = {
1620
+ mode: 'evaluate',
1621
+ partialScoring: true
1622
+ };
1623
+ _context6.next = 6;
1624
+ return (0, _index.model)(question, session, env);
1625
+
1626
+ case 6:
1627
+ mod = _context6.sent;
1628
+ // Simulate the API call and process the data
1629
+ scoreResult = (0, _index.getScore)(mod, session, env); // Check if the answers from getScore match the correctedAnswer in mod
1630
+
1631
+ expect(scoreResult.answers).toEqual(mod.correctedAnswer);
1632
+
1633
+ case 9:
1634
+ case "end":
1635
+ return _context6.stop();
1636
+ }
1637
+ }
1638
+ }, _callee6);
1639
+ })));
1640
+ it('correctly processes session data from API in view mode', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
1641
+ var session, env, mod, scoreResult;
1642
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
1643
+ while (1) {
1644
+ switch (_context7.prev = _context7.next) {
1645
+ case 0:
1646
+ _context7.next = 2;
1647
+ return mockFetchSession();
1648
+
1649
+ case 2:
1650
+ session = _context7.sent;
1651
+ env = {
1652
+ mode: 'view',
1653
+ partialScoring: true
1654
+ };
1655
+ _context7.next = 6;
1656
+ return (0, _index.model)(question, session, env);
1657
+
1658
+ case 6:
1659
+ mod = _context7.sent;
1660
+ // Simulate the API call and process the data
1661
+ scoreResult = (0, _index.getScore)(mod, session, env); // Check if the answers from getScore match the correctedAnswer in mod
1662
+
1663
+ expect(scoreResult.answers).toEqual((0, _index.setCorrectness)(mod.correctedAnswer, true));
1664
+
1665
+ case 9:
1666
+ case "end":
1667
+ return _context7.stop();
1668
+ }
1669
+ }
1670
+ }, _callee7);
1671
+ })));
1672
+ });
1673
+ describe('outcome', function () {
1674
+ var session = {
1675
+ answer: [{
1676
+ interactive: true,
1677
+ value: 3,
1678
+ label: 'Three'
1679
+ }, {
1680
+ value: 2,
1681
+ label: 'Four',
1682
+ interactive: true
1683
+ }, {
1684
+ value: 4,
1685
+ label: 'Five',
1686
+ interactive: true
1687
+ }, {
1688
+ interactive: true,
1689
+ editable: true,
1690
+ value: 0.25,
1691
+ label: 'six'
1692
+ }, {
1693
+ value: 1,
1694
+ label: 'seven',
1695
+ interactive: true,
1696
+ editable: true
1697
+ }, {
1698
+ interactive: true,
1699
+ editable: true,
1700
+ value: 1,
1701
+ label: 'eight'
1702
+ }],
1703
+ id: '4028e4a24e6f8eaf014ed1b0833635d3'
1704
+ };
1705
+ var question = {
1706
+ addCategoryEnabled: true,
1707
+ chartType: 'bar',
1708
+ data: [{
1709
+ interactive: true,
1710
+ value: 3,
1711
+ label: 'Three'
1712
+ }, {
1713
+ interactive: true,
1714
+ value: 0,
1715
+ label: 'Four'
1716
+ }, {
1717
+ interactive: true,
1718
+ value: 0,
1719
+ label: 'Five'
1720
+ }],
1721
+ correctAnswer: {
1722
+ data: [{
1723
+ value: 3,
1724
+ label: 'Three'
1725
+ }, {
1726
+ value: 2,
1727
+ label: 'Four'
1728
+ }, {
1729
+ value: 4,
1730
+ label: 'Five'
1731
+ }, {
1732
+ value: 0,
1733
+ label: 'Six'
1734
+ }, {
1735
+ value: 1,
1736
+ label: 'Seven'
1737
+ }, {
1738
+ value: 1,
1739
+ label: 'Eight'
1740
+ }]
1741
+ },
1742
+ domain: {
1743
+ label: 'Number of Letters'
1744
+ },
1745
+ graph: {
1746
+ height: 500,
1747
+ width: 500
1748
+ },
1749
+ prompt: '<p>Ms. Byrd shows her third grade students how to make a bar graph. She uses the number of letters in some of her students&#39; first names. The students&#39; names she uses for the bar graph are shown below.</p><p><img alt="image 2eade8e8a2fa445dae432c417e8a2731" id="2eade8e8a2fa445dae432c417e8a2731" src="https://storage.googleapis.com/pie-prod-221718-assets/image/cf2c334e-340c-4523-9a47-cb835fddfefe"></p><p>Ms. Byrd starts the bar graph by writing some of the labels.&#160;Finish the bar graph below by dragging the bars to show the correct number of first name letters of all the students and adding labels as needed.</p><p></p><p></p><p></p>',
1750
+ range: {
1751
+ label: 'Number of Students',
1752
+ max: 6,
1753
+ labelStep: 0.25,
1754
+ step: 0.25,
1755
+ min: 0
1756
+ },
1757
+ rationale: null,
1758
+ title: 'Number of Letters in First Name',
1759
+ disabled: false,
1760
+ teacherInstructions: null
1761
+ }; // if model.scoringType = 'all or nothing'
1762
+ // if env.partialScoring = false => dichotomous
1763
+ // else env.partialScoring = true || env.partialScoring = undefined => dichotomous
1764
+ // else model.scoringType = 'partial scoring' || model.scoringType = undefined
1765
+ // if env.partialScoring = false => dichotomous
1766
+ // else env.partialScoring = true || model.partialScoring = undefined => partial-credit scoring
1767
+
1768
+ it.each(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n mode | partialScoring | scoringType | expected\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n "])), 'evaluate', false, 'all or nothing', 0, 'evaluate', true, 'all or nothing', 0, 'evaluate', undefined, 'all or nothing', 0, 'evaluate', false, 'partial scoring', 0, 'evaluate', true, 'partial scoring', 0.89, 'evaluate', undefined, 'partial scoring', 0.89, 'evaluate', false, undefined, 0, 'evaluate', true, undefined, 0.89, 'evaluate', undefined, undefined, 0.89, 'gather', false, 'partial scoring', 0, 'gather', true, 'partial scoring', 0, 'gather', undefined, 'partial scoring', 0)('env.mode $mode, env.partialScoring $partialScoring, model.scoringType $scoringType => $expected', /*#__PURE__*/function () {
1769
+ var _ref10 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(_ref9) {
1770
+ var mode, partialScoring, scoringType, expected, env, mod, result;
1771
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
1772
+ while (1) {
1773
+ switch (_context8.prev = _context8.next) {
1774
+ case 0:
1775
+ mode = _ref9.mode, partialScoring = _ref9.partialScoring, scoringType = _ref9.scoringType, expected = _ref9.expected;
1776
+ env = {
1777
+ mode: mode,
1778
+ partialScoring: partialScoring
1779
+ };
1780
+ _context8.next = 4;
1781
+ return (0, _index.model)(_objectSpread(_objectSpread({}, question), {}, {
1782
+ scoringType: scoringType
1783
+ }), session, env);
1784
+
1785
+ case 4:
1786
+ mod = _context8.sent;
1787
+ _context8.next = 7;
1788
+ return (0, _index.outcome)(mod, session, env);
1789
+
1790
+ case 7:
1791
+ result = _context8.sent;
1792
+ expect(result.score).toEqual(expected);
1793
+
1794
+ case 9:
1795
+ case "end":
1796
+ return _context8.stop();
1797
+ }
1798
+ }
1799
+ }, _callee8);
1800
+ }));
1801
+
1802
+ return function (_x2) {
1803
+ return _ref10.apply(this, arguments);
1804
+ };
1805
+ }());
1806
+ });
1807
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsIml0IiwiY29yZWN0bmVzc0Fuc3dlcnMiLCJ2YWx1ZSIsImxhYmVsIiwiZXhwZWN0IiwidG9FcXVhbCIsImNvcnJlY3RuZXNzIiwibm90IiwiaW50ZXJhY3RpdmUiLCJlZGl0YWJsZSIsIm1rUXVlc3Rpb24iLCJleHRyYXMiLCJjb3JyZWN0QW5zd2VyIiwiZGF0YSIsImVhY2giLCJ1bmRlZmluZWQiLCJtb2RlIiwicGFydGlhbFNjb3JpbmciLCJzY29yaW5nVHlwZSIsImV4cGVjdGVkIiwiZW52Iiwic2Vzc2lvbiIsImFuc3dlciIsIm1vZCIsInJlc3VsdCIsInNjb3JlIiwicXVlc3Rpb24iLCJhc3NlcnRHZXRTY29yZSIsIm1lc3NhZ2UiLCJhbnN3ZXJzIiwicXVlc3Rpb25FeHRyYSIsInN0dWRlbnROZXdDYXRlZ29yeURlZmF1bHRMYWJlbCIsImNoYXJ0VHlwZSIsImRvbWFpbiIsImdyYXBoIiwid2lkdGgiLCJoZWlnaHQiLCJwcm9tcHQiLCJyYXRpb25hbGUiLCJyYW5nZSIsIm1heCIsIm1pbiIsImxhYmVsU3RlcCIsInRpdGxlIiwicm9sZSIsInNlc3MiLCJpZCIsIm5vUmVzdWx0IiwidG9CZU51bGwiLCJtb2NrRmV0Y2hTZXNzaW9uIiwiamVzdCIsImZuIiwiYWRkQ2F0ZWdvcnlFbmFibGVkIiwic3RlcCIsImRpc2FibGVkIiwidGVhY2hlckluc3RydWN0aW9ucyIsIm1vY2tSZXNvbHZlZFZhbHVlIiwic2NvcmVSZXN1bHQiLCJjb3JyZWN0ZWRBbnN3ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7OztBQVVBQSxRQUFRLENBQUMsZ0JBQUQsRUFBbUIsWUFBTTtBQUMvQkMsRUFBQUEsRUFBRSxDQUFDLDREQUFELEVBQStELFlBQU07QUFDckUsUUFBTUMsaUJBQWlCLEdBQUcsMkJBQ3hCLENBQ0U7QUFBRUMsTUFBQUEsS0FBSyxF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QUhjLGtCQUtoQkcsT0FMZ0IsRUFNaEJELEdBTmdCLENBSHBCOztBQUFBO0FBR1FHLGNBQUFBLEdBSFI7QUFBQTtBQUFBLHFCQVl1QixvQkFBUUEsR0FBUixFQUFhRixPQUFiLEVBQXNCRCxHQUF0QixDQVp2Qjs7QUFBQTtBQVlRSSxjQUFBQSxNQVpSO0FBY0VwQixjQUFBQSxNQUFNLENBQUNvQixNQUFNLENBQUNDLEtBQVIsQ0FBTixDQUFxQnBCLE9BQXJCLENBQTZCYyxRQUE3Qjs7QUFkRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQWhCRjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlDRCxDQXJKTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgc2V0Q29ycmVjdG5lc3MsXG4gIGNoZWNrTGFiZWxzRXF1YWxpdHksXG4gIGZpbHRlckNhdGVnb3JpZXMsXG4gIGdldFNjb3JlLFxuICBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uLFxuICBvdXRjb21lLFxuICBtb2RlbCxcbn0gZnJvbSAnLi4vaW5kZXgnO1xuXG5kZXNjcmliZSgnc2V0Q29ycmVjdG5lc3MnLCAoKSA9PiB7XG4gIGl0KCdzZXRzIGNvcnJlY3RuZXNzIG9uIGFuc3dlcnMgZm9yIHBhcnRpYWwgc2NvcmluZzogaW5jb3JyZWN0JywgKCkgPT4ge1xuICAgIGNvbnN0IGNvcmVjdG5lc3NBbnN3ZXJzID0gc2V0Q29ycmVjdG5lc3MoXG4gICAgICBbXG4gICAgICAgIHsgdmFsdWU6IDAsIGxhYmVsOiAnQScgfSxcbiAgICAgICAgeyB2YWx1ZTogMSwgbGFiZWw6ICdCJyB9LFxuICAgICAgICB7IHZhbHVlOiAyLCBsYWJlbDogJ0MnIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGNvcmVjdG5lc3NBbnN3ZXJzKS50b0VxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnaW5jb3JyZWN0JywgbGFiZWw6ICdpbmNvcnJlY3QnIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnLCBsYWJlbDogJ2luY29ycmVjdCcgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAyLFxuICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcsIGxhYmVsOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoJ3NldHMgY29ycmVjdG5lc3Mgb24gYW5zd2VycyBmb3IgYWxsIG9yIG5vdGhpbmc6IGNvcnJlY3QnLCAoKSA9PiB7XG4gICAgY29uc3QgY29yZWN0bmVzc0Fuc3dlcnMgPSBzZXRDb3JyZWN0bmVzcyhbXG4gICAgICB7IHZhbHVlOiAwLCBsYWJlbDogJ0EnIH0sXG4gICAgICB7IHZhbHVlOiAxLCBsYWJlbDogJ0InIH0sXG4gICAgICB7IHZhbHVlOiAyLCBsYWJlbDogJ0MnIH0sXG4gICAgXSk7XG5cbiAgICBleHBlY3QoY29yZWN0bmVzc0Fuc3dlcnMpLnRvRXF1YWwoW1xuICAgICAge1xuICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAyLFxuICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9KTtcblxuICBpdCgnc2V0cyBjb3JyZWN0bmVzcyBvbiBhbnN3ZXJzIGlmIGFuc3dlcnMgbm90IHNldCcsICgpID0+IHtcbiAgICBleHBlY3Qoc2V0Q29ycmVjdG5lc3MoW10pKS50b0VxdWFsKFtdKTtcbiAgICBleHBlY3Qoc2V0Q29ycmVjdG5lc3MoKSkudG9FcXVhbChbXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdjaGVja0xhYmVsc0VxdWFsaXR5JywgKCkgPT4ge1xuICBpdCgncmV0dXJucyBlcXVhbGl0eSBiZXR3ZWVuIGxhYmVscycsICgpID0+IHtcbiAgICBleHBlY3QoY2hlY2tMYWJlbHNFcXVhbGl0eSgnbGFiZWwnLCAnTGFiZWwnKSkudG9FcXVhbCh0cnVlKTtcbiAgICBleHBlY3QoY2hlY2tMYWJlbHNFcXVhbGl0eSgnbGFiZWwnLCAnTEFCRUwnKSkudG9FcXVhbCh0cnVlKTtcbiAgICBleHBlY3QoY2hlY2tMYWJlbHNFcXVhbGl0eSgnbGFiZWwnLCAnbEFiRWwnKSkudG9FcXVhbCh0cnVlKTtcbiAgICBleHBlY3QoY2hlY2tMYWJlbHNFcXVhbGl0eSgnbGFiZWwnLCAnVGVzdCcpKS50b0VxdWFsKGZhbHNlKTtcbiAgICBleHBlY3QoY2hlY2tMYWJlbHNFcXVhbGl0eSgnbGFiZWwnLCAnVGVzdCcpKS5ub3QudG9FcXVhbCh0cnVlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2ZpbHRlckNhdGVnb3JpZXMnLCAoKSA9PiB7XG4gIGl0KCdyZXR1cm5zIGNhdGVnb3JpZXMgZmlsdGVyZWQgd2l0aCBjb3JyZWN0IHZhbHVlcycsICgpID0+IHtcbiAgICBleHBlY3QoZmlsdGVyQ2F0ZWdvcmllcyhudWxsKSkudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KFxuICAgICAgZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgdmFsdWU6IDAsIGxhYmVsOiAnQScsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IHZhbHVlOiAxLCBsYWJlbDogJ0InLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyB2YWx1ZTogMiwgbGFiZWw6ICdDJywgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICBdKSxcbiAgICApLnRvRXF1YWwoW1xuICAgICAge1xuICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAyLFxuICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICB9LFxuICAgIF0pO1xuICAgIGV4cGVjdChcbiAgICAgIGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IHZhbHVlOiAwLCBsYWJlbDogJ0EnLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlIH0sXG4gICAgICAgIHsgdmFsdWU6IDEsIGxhYmVsOiAnQicsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICAgICAgeyB2YWx1ZTogMiwgbGFiZWw6ICdDJywgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgXSksXG4gICAgKS50b0VxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAyLFxuICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2dldFNjb3JlIHBhcnRpYWxTY29yaW5nIHRlc3QnLCAoKSA9PiB7XG4gIGNvbnN0IG1rUXVlc3Rpb24gPSAoZXh0cmFzKSA9PiAoe1xuICAgIGNvcnJlY3RBbnN3ZXI6IHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkYXRhOiBbXSxcbiAgICAuLi5leHRyYXMsXG4gIH0pO1xuXG4gIC8vIGlmIG1vZGVsLnNjb3JpbmdUeXBlID0gJ2FsbCBvciBub3RoaW5nJ1xuICAvLyAgICBpZiBlbnYucGFydGlhbFNjb3JpbmcgPSBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IGRpY2hvdG9tb3VzXG4gIC8vICAgIGVsc2UgZW52LnBhcnRpYWxTY29yaW5nID0gdHJ1ZSB8fCBlbnYucGFydGlhbFNjb3JpbmcgPSB1bmRlZmluZWQgICAgPT4gZGljaG90b21vdXNcbiAgLy8gZWxzZSBtb2RlbC5zY29yaW5nVHlwZSA9ICdwYXJ0aWFsIHNjb3JpbmcnIHx8IG1vZGVsLnNjb3JpbmdUeXBlID0gdW5kZWZpbmVkXG4gIC8vICAgIGlmIGVudi5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gZGljaG90b21vdXNcbiAgLy8gICAgZWxzZSBlbnYucGFydGlhbFNjb3JpbmcgPSB0cnVlIHx8IG1vZGVsLnBhcnRpYWxTY29yaW5nID0gdW5kZWZpbmVkICA9PiBwYXJ0aWFsLWNyZWRpdCBzY29yaW5nXG4gIGl0LmVhY2hgXG4gICAgbW9kZSAgICAgICAgICB8IHBhcnRpYWxTY29yaW5nIHwgc2NvcmluZ1R5cGUgICAgICAgICAgfCBleHBlY3RlZFxuICAgICR7J2V2YWx1YXRlJ30gfCAke2ZhbHNlfSAgICAgICB8ICR7J2FsbCBvciBub3RoaW5nJ30gIHwgJHswfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3RydWV9ICAgICAgICB8ICR7J2FsbCBvciBub3RoaW5nJ30gIHwgJHswfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3VuZGVmaW5lZH0gICB8ICR7J2FsbCBvciBub3RoaW5nJ30gIHwgJHswfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke2ZhbHNlfSAgICAgICB8ICR7J3BhcnRpYWwgc2NvcmluZyd9IHwgJHswfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3RydWV9ICAgICAgICB8ICR7J3BhcnRpYWwgc2NvcmluZyd9IHwgJHswLjMzfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3VuZGVmaW5lZH0gICB8ICR7J3BhcnRpYWwgc2NvcmluZyd9IHwgJHswLjMzfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke2ZhbHNlfSAgICAgICB8ICR7dW5kZWZpbmVkfSAgICAgICAgIHwgJHswfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3RydWV9ICAgICAgICB8ICR7dW5kZWZpbmVkfSAgICAgICAgIHwgJHswLjMzfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3VuZGVmaW5lZH0gICB8ICR7dW5kZWZpbmVkfSAgICAgICAgIHwgJHswLjMzfVxuICBgKFxuICAgICdlbnY6IHsgbW9kZSAkbW9kZSwgcGFydGlhbFNjb3JpbmcgJHBhcnRpYWxTY29yaW5nIH0sIG1vZGVsLnNjb3JpbmdUeXBlID0gJHNjb3JpbmdUeXBlID0+ICRleHBlY3RlZCcsXG4gICAgYXN5bmMgKHsgbW9kZSwgcGFydGlhbFNjb3JpbmcsIHNjb3JpbmdUeXBlLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICBjb25zdCBlbnYgPSB7IG1vZGUsIHBhcnRpYWxTY29yaW5nIH07XG4gICAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyIH0sXG4gICAgICAgIF0pLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9kID0gYXdhaXQgbW9kZWwobWtRdWVzdGlvbih7IHNjb3JpbmdUeXBlIH0pLCBzZXNzaW9uLCBlbnYpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShtb2QsIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0sXG4gICk7XG59KTtcblxuZGVzY3JpYmUoJ2dldFNjb3JlIGFsbCBvciBub3RoaW5nJywgKCkgPT4ge1xuICBjb25zdCBzY29yaW5nVHlwZSA9ICdhbGwgb3Igbm90aGluZyc7XG4gIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgIGNvcnJlY3RBbnN3ZXI6IHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDIgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkYXRhOiBbXSxcbiAgICBzY29yaW5nVHlwZSxcbiAgfTtcblxuICBjb25zdCBhc3NlcnRHZXRTY29yZSA9IChtZXNzYWdlLCBzZXNzaW9uLCBleHBlY3RlZCkgPT4ge1xuICAgIGl0KG1lc3NhZ2UsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRTY29yZShxdWVzdGlvbiwgc2Vzc2lvbikpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICdyZXNwb25zZSBpcyBjb3JyZWN0JyxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMSxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAncmVzcG9uc2UgaXMgaW5jb3JyZWN0OiBpbmNvcnJlY3QgdmFsdWUnLFxuICAgIHtcbiAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMiB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAwLFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ3Jlc3BvbnNlIGlzIGluY29ycmVjdDogaW5jb3JyZWN0IGxhYmVsJyxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEJywgdmFsdWU6IDEgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMCxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0QnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICdyZXNwb25zZSBpcyBpbmNvcnJlY3Q6IGluY29ycmVjdCB2YWx1ZSAmIGxhYmVsJyxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEJywgdmFsdWU6IDIgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMCxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0QnLFxuICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnaW5jb3JyZWN0JywgbGFiZWw6ICdpbmNvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ3Jlc3BvbnNlIGlzIGluY29ycmVjdDogbW9yZSBjYXRlZ29yaWVzIGluIGdpdmVuIGFuc3dlcicsXG4gICAge1xuICAgICAgYW5zd2VyOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDIgfSxcbiAgICAgICAgeyBsYWJlbDogJ0QnLCB2YWx1ZTogMyB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMCxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdEJyxcbiAgICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcsIGxhYmVsOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAncmVzcG9uc2UgaXMgaW5jb3JyZWN0OiBsZXNzIGNhdGVnb3JpZXMgaW4gZ2l2ZW4gYW5zd2VyJyxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDAsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xuXG4gIGFzc2VydEdldFNjb3JlKCdzZXNzaW9uIGlzIHVuZGVmaW5lZCcsIHVuZGVmaW5lZCwgeyBzY29yZTogMCwgYW5zd2VyczogW10gfSk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoJ3Nlc3Npb24gaXMgbnVsbCcsIG51bGwsIHsgc2NvcmU6IDAsIGFuc3dlcnM6IFtdIH0pO1xuXG4gIGFzc2VydEdldFNjb3JlKCdzZXNzaW9uIGlzIGVtcHR5Jywge30sIHsgc2NvcmU6IDAsIGFuc3dlcnM6IFtdIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdnZXRTY29yZSBwYXJ0aWFsIHNjb3JpbmcgLSBlZGl0YWJsZSAtIGludGVyYWN0aXZlJywgKCkgPT4ge1xuICBjb25zdCBzY29yaW5nVHlwZSA9ICdwYXJ0aWFsIHNjb3JpbmcnO1xuICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICBjb3JyZWN0QW5zd2VyOiB7XG4gICAgICBkYXRhOiBbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDIsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGF0YTogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgIF0pLFxuICAgIHNjb3JpbmdUeXBlLFxuICB9O1xuXG4gIGNvbnN0IGFzc2VydEdldFNjb3JlID0gKG1lc3NhZ2UsIHF1ZXN0aW9uRXh0cmEsIHNlc3Npb24sIGV4cGVjdGVkKSA9PiB7XG4gICAgaXQobWVzc2FnZSwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldFNjb3JlKHsgLi4ucXVlc3Rpb24sIC4uLnF1ZXN0aW9uRXh0cmEgfSwgc2Vzc2lvbikpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICdBbnN3ZXIgaXMgZGVmYXVsdCBhbnN3ZXIsIDQvNiBjb3JyZWN0IGFuc3dlcnMnLFxuICAgIHt9LFxuICAgIHt9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAwLjY3LFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAnNS82IGNvcnJlY3QgYW5zd2VycycsXG4gICAge30sXG4gICAge1xuICAgICAgYW5zd2VyOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDAuODMsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnaW5jb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAnRGVmYXVsdCBhbnN3ZXIgZWRpdGVkIHdpdGggaW5jb3JyZWN0IGFuc3dlciwgNC82IGNvcnJlY3QgYW5zd2VycycsXG4gICAge30sXG4gICAge1xuICAgICAgYW5zd2VyOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDAuNjcsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdEJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICdEZWZhdWx0IGFuc3dlciB3YXMgaW5jb3JyZWN0IGFuZCBlZGl0ZWQsIDQvNiBjb3JyZWN0IGFuc3dlcnMnLFxuICAgIHtcbiAgICAgIGRhdGE6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQS13cm9uZycsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAxLFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xufSk7XG5cbmRlc2NyaWJlKCdnZXRTY29yZSBwYXJ0aWFsIHNjb3JpbmcgLSBOT1QgZWRpdGFibGUgLSBpbnRlcmFjdGl2ZScsICgpID0+IHtcbiAgY29uc3Qgc2NvcmluZ1R5cGUgPSAncGFydGlhbCBzY29yaW5nJztcbiAgY29uc3QgcXVlc3Rpb24gPSB7XG4gICAgY29ycmVjdEFuc3dlcjoge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRhdGE6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IHRydWUgfSxcbiAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlIH0sXG4gICAgXSksXG4gICAgc2NvcmluZ1R5cGUsXG4gIH07XG5cbiAgY29uc3QgYXNzZXJ0R2V0U2NvcmUgPSAobWVzc2FnZSwgcXVlc3Rpb25FeHRyYSwgc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICBpdChtZXNzYWdlLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0U2NvcmUoeyAuLi5xdWVzdGlvbiwgLi4ucXVlc3Rpb25FeHRyYSB9LCBzZXNzaW9uKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG4gIH07XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ0Fuc3dlciBpcyBkZWZhdWx0IGFuc3dlciwgMi80IGNvcnJlY3QgYW5zd2VycyAoMyB2YWx1ZXMgKyAxIGxhYmVsKScsXG4gICAge30sXG4gICAge30sXG4gICAge1xuICAgICAgc2NvcmU6IDAuNSxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJzIvNCBjb3JyZWN0IGFuc3dlcnMgKDMgdmFsdWVzICsgMSBsYWJlbCknLFxuICAgIHt9LFxuICAgIHtcbiAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAsIGludGVyYWN0aXZlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAwLjc1LFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ0RlZmF1bHQgYW5zd2VyIHBsdXMgZXh0cmEgaW5jb3JyZWN0IGFuc3dlciwgMi80IGNvcnJlY3QgYW5zd2VycyAoMyB2YWx1ZXMgKyAxIGxhYmVsKScsXG4gICAge30sXG4gICAge1xuICAgICAgYW5zd2VyOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0QnLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDAuNSxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRCcsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnLCBsYWJlbDogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ0RlZmF1bHQgYW5zd2VyIHdhcyBpbmNvcnJlY3QsIDQvNCBjb3JyZWN0IGFuc3dlcnMgKDMgdmFsdWVzICsgMSBsYWJlbCknLFxuICAgIHtcbiAgICAgIGRhdGE6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQS13cm9uZycsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQS13cm9uZycsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyLCBpbnRlcmFjdGl2ZTogdHJ1ZSB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMSxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBLXdyb25nJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcbn0pO1xuXG5kZXNjcmliZSgnZ2V0U2NvcmUgcGFydGlhbCBzY29yaW5nIC0gZWRpdGFibGUgLSByYW5kb21seSBpbnRlcmFjdGl2ZScsICgpID0+IHtcbiAgY29uc3Qgc2NvcmluZ1R5cGUgPSAncGFydGlhbCBzY29yaW5nJztcbiAgY29uc3QgcXVlc3Rpb24gPSB7XG4gICAgY29ycmVjdEFuc3dlcjoge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRhdGE6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IGZhbHNlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgXSksXG4gICAgc2NvcmluZ1R5cGUsXG4gIH07XG5cbiAgY29uc3QgYXNzZXJ0R2V0U2NvcmUgPSAobWVzc2FnZSwgcXVlc3Rpb25FeHRyYSwgc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICBpdChtZXNzYWdlLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0U2NvcmUoeyAuLi5xdWVzdGlvbiwgLi4ucXVlc3Rpb25FeHRyYSB9LCBzZXNzaW9uKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG4gIH07XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ0Fuc3dlciBpcyBkZWZhdWx0IGFuc3dlciwgMi80IGNvcnJlY3QgYW5zd2VycyAoMiB2YWx1ZXMgKyAyIGxhYmVscyknLFxuICAgIHt9LFxuICAgIHt9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAwLjUsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAnIGNvcnJlY3QgYW5zd2VycyAzLzQgKDIgdmFsdWVzICsgMiBsYWJlbHMpJyxcbiAgICB7fSxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogZmFsc2UsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDAuNzUsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ0RlZmF1bHQgYW5zd2VyIGVkaXRlZCB3aXRoIGluY29ycmVjdCBhbnN3ZXIsIDIvNCBjb3JyZWN0IGFuc3dlcnMgKDIgbGFiZWxzICsgMiB2YWx1ZXMpJyxcbiAgICB7fSxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogZmFsc2UsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDAuNSxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdEJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICdEZWZhdWx0IGFuc3dlciB3YXMgaW5jb3JyZWN0IGFuZCBlZGl0ZWQsIDQvNCBjb3JyZWN0IGFuc3dlcnMgKDIgbGFiZWxzICsgMiB2YWx1ZXMpJyxcbiAgICB7XG4gICAgICBkYXRhOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0Etd3JvbmcnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IGZhbHNlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgYW5zd2VyOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0Etd3JvbmcnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IGZhbHNlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAxLFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0Etd3JvbmcnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcbn0pO1xuXG5kZXNjcmliZSgnZ2V0U2NvcmUgcGFydGlhbCBzY29yaW5nIC0gTk9UIGVkaXRhYmxlIC0gcmFuZG9tbHkgaW50ZXJhY3RpdmUnLCAoKSA9PiB7XG4gIGNvbnN0IHNjb3JpbmdUeXBlID0gJ3BhcnRpYWwgc2NvcmluZyc7XG4gIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgIGNvcnJlY3RBbnN3ZXI6IHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDIgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkYXRhOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAsIGludGVyYWN0aXZlOiBmYWxzZSwgZWRpdGFibGU6IGZhbHNlIH0sXG4gICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlIH0sXG4gICAgXSksXG4gICAgc2NvcmluZ1R5cGUsXG4gIH07XG5cbiAgY29uc3QgYXNzZXJ0R2V0U2NvcmUgPSAobWVzc2FnZSwgcXVlc3Rpb25FeHRyYSwgc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICBpdChtZXNzYWdlLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0U2NvcmUoeyAuLi5xdWVzdGlvbiwgLi4ucXVlc3Rpb25FeHRyYSB9LCBzZXNzaW9uKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG4gIH07XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ0Fuc3dlciBpcyBkZWZhdWx0IGFuc3dlciwgMS8zIGNvcnJlY3QgYW5zd2VycyAoMiB2YWx1ZXMgKyAxIGxhYmVsKScsXG4gICAge30sXG4gICAge30sXG4gICAge1xuICAgICAgc2NvcmU6IDAuMzMsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICcgY29ycmVjdCBhbnN3ZXJzIDIvMyAoMiB2YWx1ZXMgKyAxIGxhYmVsKScsXG4gICAge30sXG4gICAge1xuICAgICAgYW5zd2VyOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IGZhbHNlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAwLjY3LFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICdEZWZhdWx0IGFuc3dlciBlZGl0ZWQgd2l0aCBpbmNvcnJlY3QgYW5zd2VyLCAyLzMgY29ycmVjdCBhbnN3ZXJzICgyIHZhbHVlcyArIDEgbGFiZWwpJyxcbiAgICB7fSxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogZmFsc2UsIGVkaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgICB7IGxhYmVsOiAnRCcsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDAuNjcsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0QnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ0RlZmF1bHQgYW5zd2VyIHdhcyBpbmNvcnJlY3QgYW5kIGVkaXRlZCwgMy8zIGNvcnJlY3QgYW5zd2VycyAoMSBsYWJlbCArIDIgdmFsdWVzKScsXG4gICAge1xuICAgICAgZGF0YTogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBLXdyb25nJywgdmFsdWU6IDAsIGludGVyYWN0aXZlOiBmYWxzZSwgZWRpdGFibGU6IGZhbHNlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgYW5zd2VyOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0Etd3JvbmcnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IGZhbHNlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAxLFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0Etd3JvbmcnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcbn0pO1xuXG5kZXNjcmliZSgnY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbicsICgpID0+IHtcbiAgY29uc3QgcXVlc3Rpb24gPSB7XG4gICAgc3R1ZGVudE5ld0NhdGVnb3J5RGVmYXVsdExhYmVsOiAnQ2F0ZWdvcnknLFxuICAgIGNoYXJ0VHlwZTogJ2xpbmVDcm9zcycsXG4gICAgY29ycmVjdEFuc3dlcjoge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkYXRhOiBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnRCcsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZG9tYWluOiB7XG4gICAgICBsYWJlbDogJ0ZydWl0cycsXG4gICAgfSxcbiAgICBncmFwaDoge1xuICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgIGhlaWdodDogNDgwLFxuICAgIH0sXG4gICAgcHJvbXB0OiAnSGVyZSBnb2VzIGl0ZW0gc3RlbSEnLFxuICAgIHJhdGlvbmFsZTogJ1JhdGlvbmFsZSBnb2VzIGhlcmUhJyxcbiAgICByYW5nZToge1xuICAgICAgbGFiZWw6ICdBbW91bnQnLFxuICAgICAgbWF4OiA1LjUsXG4gICAgICBtaW46IDAsXG4gICAgICBsYWJlbFN0ZXA6IDEsXG4gICAgfSxcbiAgICBzY29yaW5nVHlwZTogJ3BhcnRpYWwgc2NvcmluZycsXG4gICAgdGl0bGU6ICdUaGlzIGlzIGEgY2hhcnQhJyxcbiAgfTtcblxuICBpdCgncmV0dXJucyBjb3JyZWN0IHJlc3BvbnNlIGlmIHJvbGUgaXMgaW5zdHJ1Y3RvciBhbmQgbW9kZSBpcyBnYXRoZXInLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VzcyA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHtcbiAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgcm9sZTogJ2luc3RydWN0b3InLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoe1xuICAgICAgYW5zd2VyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGlkOiAnMScsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgcm9sZSBpcyBpbnN0cnVjdG9yIGFuZCBtb2RlIGlzIHZpZXcnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VzcyA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHtcbiAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIHJvbGU6ICdpbnN0cnVjdG9yJyxcbiAgICB9KTtcblxuICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHtcbiAgICAgIGFuc3dlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBpZDogJzEnLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgncmV0dXJucyBudWxsIGlmIG1vZGUgaXMgZXZhbHVhdGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICBtb2RlOiAnZXZhbHVhdGUnLFxuICAgICAgcm9sZTogJ2luc3RydWN0b3InLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KG5vUmVzdWx0KS50b0JlTnVsbCgpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyBudWxsIGlmIHJvbGUgaXMgc3R1ZGVudCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBub1Jlc3VsdCA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHtcbiAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgcm9sZTogJ3N0dWRlbnQnLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KG5vUmVzdWx0KS50b0JlTnVsbCgpO1xuICB9KTtcbn0pO1xuXG5jb25zdCBtb2NrRmV0Y2hTZXNzaW9uID0gamVzdC5mbigpO1xuY29uc3QgcXVlc3Rpb24gPSB7XG4gIGFkZENhdGVnb3J5RW5hYmxlZDogdHJ1ZSxcbiAgY2hhcnRUeXBlOiAnYmFyJyxcbiAgZGF0YTogW1xuICAgIHtcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgdmFsdWU6IDMsXG4gICAgICBsYWJlbDogJ1RocmVlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgdmFsdWU6IDAsXG4gICAgICBsYWJlbDogJ0ZvdXInLFxuICAgIH0sXG4gICAge1xuICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICB2YWx1ZTogMCxcbiAgICAgIGxhYmVsOiAnRml2ZScsXG4gICAgfSxcbiAgXSxcbiAgY29ycmVjdEFuc3dlcjoge1xuICAgIGRhdGE6IFtcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGxhYmVsOiAnVGhyZWUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgIGxhYmVsOiAnRm91cicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogNCxcbiAgICAgICAgbGFiZWw6ICdGaXZlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAwLFxuICAgICAgICBsYWJlbDogJ1NpeCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgbGFiZWw6ICdTZXZlbicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgbGFiZWw6ICdFaWdodCcsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIGRvbWFpbjoge1xuICAgIGxhYmVsOiAnTnVtYmVyIG9mIExldHRlcnMnLFxuICB9LFxuICBncmFwaDoge1xuICAgIGhlaWdodDogNTAwLFxuICAgIHdpZHRoOiA1MDAsXG4gIH0sXG4gIHByb21wdDpcbiAgICAnPHA+TXMuIEJ5cmQgc2hvd3MgaGVyIHRoaXJkIGdyYWRlIHN0dWRlbnRzIGhvdyB0byBtYWtlIGEgYmFyIGdyYXBoLiBTaGUgdXNlcyB0aGUgbnVtYmVyIG9mIGxldHRlcnMgaW4gc29tZSBvZiBoZXIgc3R1ZGVudHMmIzM5OyBmaXJzdCBuYW1lcy4gVGhlIHN0dWRlbnRzJiMzOTsgbmFtZXMgc2hlIHVzZXMgZm9yIHRoZSBiYXIgZ3JhcGggYXJlIHNob3duIGJlbG93LjwvcD48cD48aW1nIGFsdD1cImltYWdlIDJlYWRlOGU4YTJmYTQ0NWRhZTQzMmM0MTdlOGEyNzMxXCIgaWQ9XCIyZWFkZThlOGEyZmE0NDVkYWU0MzJjNDE3ZThhMjczMVwiIHNyYz1cImh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9waWUtcHJvZC0yMjE3MTgtYXNzZXRzL2ltYWdlL2NmMmMzMzRlLTM0MGMtNDUyMy05YTQ3LWNiODM1ZmRkZmVmZVwiPjwvcD48cD5Ncy4gQnlyZCBzdGFydHMgdGhlIGJhciBncmFwaCBieSB3cml0aW5nIHNvbWUgb2YgdGhlIGxhYmVscy4mIzE2MDtGaW5pc2ggdGhlIGJhciBncmFwaCBiZWxvdyBieSBkcmFnZ2luZyB0aGUgYmFycyB0byBzaG93IHRoZSBjb3JyZWN0IG51bWJlciBvZiBmaXJzdCBuYW1lIGxldHRlcnMgb2YgYWxsIHRoZSBzdHVkZW50cyBhbmQgYWRkaW5nIGxhYmVscyBhcyBuZWVkZWQuPC9wPjxwPjwvcD48cD48L3A+PHA+PC9wPicsXG4gIHJhbmdlOiB7XG4gICAgbGFiZWw6ICdOdW1iZXIgb2YgU3R1ZGVudHMnLFxuICAgIG1heDogNixcbiAgICBsYWJlbFN0ZXA6IDAuMjUsXG4gICAgc3RlcDogMC4yNSxcbiAgICBtaW46IDAsXG4gIH0sXG4gIHJhdGlvbmFsZTogbnVsbCxcbiAgdGl0bGU6ICdOdW1iZXIgb2YgTGV0dGVycyBpbiBGaXJzdCBOYW1lJyxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBudWxsLFxufTtcblxubW9ja0ZldGNoU2Vzc2lvbi5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gIGFuc3dlcjogW1xuICAgIHtcbiAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiAzLFxuICAgICAgbGFiZWw6ICdUaHJlZScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogMixcbiAgICAgIGxhYmVsOiAnRm91cicsXG4gICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogNCxcbiAgICAgIGxhYmVsOiAnRml2ZScsXG4gICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICB2YWx1ZTogMC4yNSxcbiAgICAgIGxhYmVsOiAnc2l4JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgbGFiZWw6ICdzZXZlbicsXG4gICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIGxhYmVsOiAnZWlnaHQnLFxuICAgIH0sXG4gIF0sXG59KTtcblxuLy8gVGVzdCB0byBjaGVjayBpZiBnZXRTY29yZSBjb3JyZWN0bHkgcHJvY2Vzc2VzIHRoZSBzZXNzaW9uIGRhdGEgZnJvbSBBUElcbmRlc2NyaWJlKCdnZXRTY29yZSB3aXRoIEFQSSBzZXNzaW9uIGRhdGEnLCAoKSA9PiB7XG4gIGl0KCdjb3JyZWN0bHkgcHJvY2Vzc2VzIHNlc3Npb24gZGF0YSBmcm9tIEFQSSBpbiBldmFsdWF0ZSBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBtb2NrRmV0Y2hTZXNzaW9uKCk7XG4gICAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnLCBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9O1xuICAgIGNvbnN0IG1vZCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgLy8gU2ltdWxhdGUgdGhlIEFQSSBjYWxsIGFuZCBwcm9jZXNzIHRoZSBkYXRhXG4gICAgY29uc3Qgc2NvcmVSZXN1bHQgPSBnZXRTY29yZShtb2QsIHNlc3Npb24sIGVudik7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgYW5zd2VycyBmcm9tIGdldFNjb3JlIG1hdGNoIHRoZSBjb3JyZWN0ZWRBbnN3ZXIgaW4gbW9kXG4gICAgZXhwZWN0KHNjb3JlUmVzdWx0LmFuc3dlcnMpLnRvRXF1YWwobW9kLmNvcnJlY3RlZEFuc3dlcik7XG4gIH0pO1xuXG4gIGl0KCdjb3JyZWN0bHkgcHJvY2Vzc2VzIHNlc3Npb24gZGF0YSBmcm9tIEFQSSBpbiB2aWV3IG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IG1vY2tGZXRjaFNlc3Npb24oKTtcbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICd2aWV3JywgcGFydGlhbFNjb3Jpbmc6IHRydWUgfTtcbiAgICBjb25zdCBtb2QgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcblxuICAgIC8vIFNpbXVsYXRlIHRoZSBBUEkgY2FsbCBhbmQgcHJvY2VzcyB0aGUgZGF0YVxuICAgIGNvbnN0IHNjb3JlUmVzdWx0ID0gZ2V0U2NvcmUobW9kLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGFuc3dlcnMgZnJvbSBnZXRTY29yZSBtYXRjaCB0aGUgY29ycmVjdGVkQW5zd2VyIGluIG1vZFxuICAgIGV4cGVjdChzY29yZVJlc3VsdC5hbnN3ZXJzKS50b0VxdWFsKHNldENvcnJlY3RuZXNzKG1vZC5jb3JyZWN0ZWRBbnN3ZXIsIHRydWUpKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ291dGNvbWUnLCAoKSA9PiB7XG4gIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgYW5zd2VyOiBbXG4gICAgICB7XG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgbGFiZWw6ICdUaHJlZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgbGFiZWw6ICdGb3VyJyxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogNCxcbiAgICAgICAgbGFiZWw6ICdGaXZlJyxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiAwLjI1LFxuICAgICAgICBsYWJlbDogJ3NpeCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgbGFiZWw6ICdzZXZlbicsXG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIGxhYmVsOiAnZWlnaHQnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAnNDAyOGU0YTI0ZTZmOGVhZjAxNGVkMWIwODMzNjM1ZDMnLFxuICB9O1xuICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICBhZGRDYXRlZ29yeUVuYWJsZWQ6IHRydWUsXG4gICAgY2hhcnRUeXBlOiAnYmFyJyxcbiAgICBkYXRhOiBbXG4gICAgICB7XG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgbGFiZWw6ICdUaHJlZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgIGxhYmVsOiAnRm91cicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgIGxhYmVsOiAnRml2ZScsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY29ycmVjdEFuc3dlcjoge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgICAgbGFiZWw6ICdUaHJlZScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBsYWJlbDogJ0ZvdXInLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IDQsXG4gICAgICAgICAgbGFiZWw6ICdGaXZlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGxhYmVsOiAnU2l4JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGxhYmVsOiAnU2V2ZW4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgbGFiZWw6ICdFaWdodCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZG9tYWluOiB7XG4gICAgICBsYWJlbDogJ051bWJlciBvZiBMZXR0ZXJzJyxcbiAgICB9LFxuICAgIGdyYXBoOiB7XG4gICAgICBoZWlnaHQ6IDUwMCxcbiAgICAgIHdpZHRoOiA1MDAsXG4gICAgfSxcbiAgICBwcm9tcHQ6XG4gICAgICAnPHA+TXMuIEJ5cmQgc2hvd3MgaGVyIHRoaXJkIGdyYWRlIHN0dWRlbnRzIGhvdyB0byBtYWtlIGEgYmFyIGdyYXBoLiBTaGUgdXNlcyB0aGUgbnVtYmVyIG9mIGxldHRlcnMgaW4gc29tZSBvZiBoZXIgc3R1ZGVudHMmIzM5OyBmaXJzdCBuYW1lcy4gVGhlIHN0dWRlbnRzJiMzOTsgbmFtZXMgc2hlIHVzZXMgZm9yIHRoZSBiYXIgZ3JhcGggYXJlIHNob3duIGJlbG93LjwvcD48cD48aW1nIGFsdD1cImltYWdlIDJlYWRlOGU4YTJmYTQ0NWRhZTQzMmM0MTdlOGEyNzMxXCIgaWQ9XCIyZWFkZThlOGEyZmE0NDVkYWU0MzJjNDE3ZThhMjczMVwiIHNyYz1cImh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9waWUtcHJvZC0yMjE3MTgtYXNzZXRzL2ltYWdlL2NmMmMzMzRlLTM0MGMtNDUyMy05YTQ3LWNiODM1ZmRkZmVmZVwiPjwvcD48cD5Ncy4gQnlyZCBzdGFydHMgdGhlIGJhciBncmFwaCBieSB3cml0aW5nIHNvbWUgb2YgdGhlIGxhYmVscy4mIzE2MDtGaW5pc2ggdGhlIGJhciBncmFwaCBiZWxvdyBieSBkcmFnZ2luZyB0aGUgYmFycyB0byBzaG93IHRoZSBjb3JyZWN0IG51bWJlciBvZiBmaXJzdCBuYW1lIGxldHRlcnMgb2YgYWxsIHRoZSBzdHVkZW50cyBhbmQgYWRkaW5nIGxhYmVscyBhcyBuZWVkZWQuPC9wPjxwPjwvcD48cD48L3A+PHA+PC9wPicsXG4gICAgcmFuZ2U6IHtcbiAgICAgIGxhYmVsOiAnTnVtYmVyIG9mIFN0dWRlbnRzJyxcbiAgICAgIG1heDogNixcbiAgICAgIGxhYmVsU3RlcDogMC4yNSxcbiAgICAgIHN0ZXA6IDAuMjUsXG4gICAgICBtaW46IDAsXG4gICAgfSxcbiAgICByYXRpb25hbGU6IG51bGwsXG4gICAgdGl0bGU6ICdOdW1iZXIgb2YgTGV0dGVycyBpbiBGaXJzdCBOYW1lJyxcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogbnVsbCxcbiAgfTtcblxuICAvLyBpZiBtb2RlbC5zY29yaW5nVHlwZSA9ICdhbGwgb3Igbm90aGluZydcbiAgLy8gICAgaWYgZW52LnBhcnRpYWxTY29yaW5nID0gZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBkaWNob3RvbW91c1xuICAvLyAgICBlbHNlIGVudi5wYXJ0aWFsU2NvcmluZyA9IHRydWUgfHwgZW52LnBhcnRpYWxTY29yaW5nID0gdW5kZWZpbmVkICAgID0+IGRpY2hvdG9tb3VzXG4gIC8vIGVsc2UgbW9kZWwuc2NvcmluZ1R5cGUgPSAncGFydGlhbCBzY29yaW5nJyB8fCBtb2RlbC5zY29yaW5nVHlwZSA9IHVuZGVmaW5lZFxuICAvLyAgICBpZiBlbnYucGFydGlhbFNjb3JpbmcgPSBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IGRpY2hvdG9tb3VzXG4gIC8vICAgIGVsc2UgZW52LnBhcnRpYWxTY29yaW5nID0gdHJ1ZSB8fCBtb2RlbC5wYXJ0aWFsU2NvcmluZyA9IHVuZGVmaW5lZCAgPT4gcGFydGlhbC1jcmVkaXQgc2NvcmluZ1xuXG4gIGl0LmVhY2hgXG4gICAgbW9kZSAgICAgICAgICB8IHBhcnRpYWxTY29yaW5nIHwgc2NvcmluZ1R5cGUgICAgICAgICAgfCBleHBlY3RlZFxuICAgICR7J2V2YWx1YXRlJ30gfCAke2ZhbHNlfSAgICAgICB8ICR7J2FsbCBvciBub3RoaW5nJ30gIHwgJHswfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3RydWV9ICAgICAgICB8ICR7J2FsbCBvciBub3RoaW5nJ30gIHwgJHswfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3VuZGVmaW5lZH0gICB8ICR7J2FsbCBvciBub3RoaW5nJ30gIHwgJHswfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke2ZhbHNlfSAgICAgICB8ICR7J3BhcnRpYWwgc2NvcmluZyd9IHwgJHswfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3RydWV9ICAgICAgICB8ICR7J3BhcnRpYWwgc2NvcmluZyd9IHwgJHswLjg5fVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3VuZGVmaW5lZH0gICB8ICR7J3BhcnRpYWwgc2NvcmluZyd9IHwgJHswLjg5fVxuICAgICR7J2V2YWx1YXRlJ30gfCAke2ZhbHNlfSAgICAgICB8ICR7dW5kZWZpbmVkfSAgICAgICAgIHwgJHswfVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3RydWV9ICAgICAgICB8ICR7dW5kZWZpbmVkfSAgICAgICAgIHwgJHswLjg5fVxuICAgICR7J2V2YWx1YXRlJ30gfCAke3VuZGVmaW5lZH0gICB8ICR7dW5kZWZpbmVkfSAgICAgICAgIHwgJHswLjg5fVxuICAgICR7J2dhdGhlcid9ICAgfCAke2ZhbHNlfSAgICAgICB8ICR7J3BhcnRpYWwgc2NvcmluZyd9IHwgJHswfVxuICAgICR7J2dhdGhlcid9ICAgfCAke3RydWV9ICAgICAgICB8ICR7J3BhcnRpYWwgc2NvcmluZyd9IHwgJHswfVxuICAgICR7J2dhdGhlcid9ICAgfCAke3VuZGVmaW5lZH0gICB8ICR7J3BhcnRpYWwgc2NvcmluZyd9IHwgJHswfVxuICBgKFxuICAgICdlbnYubW9kZSAkbW9kZSwgZW52LnBhcnRpYWxTY29yaW5nICRwYXJ0aWFsU2NvcmluZywgbW9kZWwuc2NvcmluZ1R5cGUgJHNjb3JpbmdUeXBlID0+ICRleHBlY3RlZCcsXG4gICAgYXN5bmMgKHsgbW9kZSwgcGFydGlhbFNjb3JpbmcsIHNjb3JpbmdUeXBlLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICBjb25zdCBlbnYgPSB7IG1vZGUsIHBhcnRpYWxTY29yaW5nIH07XG5cbiAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IG1vZGVsKFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgc2NvcmluZ1R5cGUsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb24sXG4gICAgICAgIGVudixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUobW9kLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9LFxuICApO1xufSk7XG4iXX0=