@pie-element/placement-ordering 14.1.7 → 14.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/configure/CHANGELOG.md +12 -0
- package/configure/lib/__tests__/choice-editor.test.js +376 -0
- package/configure/lib/__tests__/choice-tile.test.js +283 -0
- package/configure/lib/__tests__/design.test.js +268 -0
- package/configure/lib/__tests__/help.test.js +64 -0
- package/configure/lib/__tests__/index.test.js +77 -0
- package/configure/lib/__tests__/utils.test.js +493 -0
- package/configure/lib/choice-editor.js +1 -1
- package/configure/lib/choice-editor.js.map +1 -1
- package/configure/lib/choice-tile.js +2 -1
- package/configure/lib/choice-tile.js.map +1 -1
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +4 -0
- package/controller/lib/__tests__/index.test.js +401 -0
- package/controller/lib/__tests__/scoring.test.js +165 -0
- package/controller/package.json +1 -1
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/index-test.js +90 -0
- package/lib/__tests__/ordering.test.js +133 -0
- package/lib/__tests__/placement-ordering.test.js +445 -0
- package/package.json +2 -2
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _utils = require("../utils");
|
|
4
|
+
describe('utils', () => {
|
|
5
|
+
describe('generateValidationMessage', () => {
|
|
6
|
+
it('should return a validation message string', () => {
|
|
7
|
+
const message = (0, _utils.generateValidationMessage)();
|
|
8
|
+
expect(typeof message).toBe('string');
|
|
9
|
+
});
|
|
10
|
+
it('should contain validation requirements heading', () => {
|
|
11
|
+
const message = (0, _utils.generateValidationMessage)();
|
|
12
|
+
expect(message).toContain('Validation requirements:');
|
|
13
|
+
});
|
|
14
|
+
it('should mention minimum token requirement', () => {
|
|
15
|
+
const message = (0, _utils.generateValidationMessage)();
|
|
16
|
+
expect(message).toContain('There should be at least 3 tokens.');
|
|
17
|
+
});
|
|
18
|
+
it('should mention tokens should not be empty', () => {
|
|
19
|
+
const message = (0, _utils.generateValidationMessage)();
|
|
20
|
+
expect(message).toContain('The tokens should not be empty and should be unique.');
|
|
21
|
+
});
|
|
22
|
+
it('should mention correct ordering requirement', () => {
|
|
23
|
+
const message = (0, _utils.generateValidationMessage)();
|
|
24
|
+
expect(message).toContain('The correct ordering should not be identical to the initial ordering.');
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('normalizeIndex', () => {
|
|
28
|
+
const ordering = {
|
|
29
|
+
response: [{
|
|
30
|
+
id: 'r1'
|
|
31
|
+
}, {
|
|
32
|
+
id: 'r2'
|
|
33
|
+
}, {
|
|
34
|
+
id: 'r3'
|
|
35
|
+
}],
|
|
36
|
+
choices: [{
|
|
37
|
+
id: 'c1'
|
|
38
|
+
}, {
|
|
39
|
+
id: 'c2'
|
|
40
|
+
}, {
|
|
41
|
+
id: 'c3'
|
|
42
|
+
}]
|
|
43
|
+
};
|
|
44
|
+
it('should return correct index for target type', () => {
|
|
45
|
+
const tile = {
|
|
46
|
+
id: 'r2',
|
|
47
|
+
type: 'target'
|
|
48
|
+
};
|
|
49
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
50
|
+
expect(index).toBe(1);
|
|
51
|
+
});
|
|
52
|
+
it('should return correct index for choice type', () => {
|
|
53
|
+
const tile = {
|
|
54
|
+
id: 'c3',
|
|
55
|
+
type: 'choice'
|
|
56
|
+
};
|
|
57
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
58
|
+
expect(index).toBe(2);
|
|
59
|
+
});
|
|
60
|
+
it('should return -1 for unknown type', () => {
|
|
61
|
+
const tile = {
|
|
62
|
+
id: 'x1',
|
|
63
|
+
type: 'unknown'
|
|
64
|
+
};
|
|
65
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
66
|
+
expect(index).toBe(-1);
|
|
67
|
+
});
|
|
68
|
+
it('should return -1 when tile not found in response', () => {
|
|
69
|
+
const tile = {
|
|
70
|
+
id: 'r99',
|
|
71
|
+
type: 'target'
|
|
72
|
+
};
|
|
73
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
74
|
+
expect(index).toBe(-1);
|
|
75
|
+
});
|
|
76
|
+
it('should return -1 when tile not found in choices', () => {
|
|
77
|
+
const tile = {
|
|
78
|
+
id: 'c99',
|
|
79
|
+
type: 'choice'
|
|
80
|
+
};
|
|
81
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
82
|
+
expect(index).toBe(-1);
|
|
83
|
+
});
|
|
84
|
+
it('should return correct index for first element', () => {
|
|
85
|
+
const tile = {
|
|
86
|
+
id: 'r1',
|
|
87
|
+
type: 'target'
|
|
88
|
+
};
|
|
89
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
90
|
+
expect(index).toBe(0);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe('updateResponseOrChoices', () => {
|
|
94
|
+
describe('moving within response (target to target)', () => {
|
|
95
|
+
it('should move item within response array', () => {
|
|
96
|
+
const response = [{
|
|
97
|
+
id: 'r1'
|
|
98
|
+
}, {
|
|
99
|
+
id: 'r2'
|
|
100
|
+
}, {
|
|
101
|
+
id: 'r3'
|
|
102
|
+
}];
|
|
103
|
+
const choices = [{
|
|
104
|
+
id: 'c1'
|
|
105
|
+
}, {
|
|
106
|
+
id: 'c2'
|
|
107
|
+
}];
|
|
108
|
+
const from = {
|
|
109
|
+
type: 'target',
|
|
110
|
+
index: 0,
|
|
111
|
+
id: 'r1'
|
|
112
|
+
};
|
|
113
|
+
const to = {
|
|
114
|
+
type: 'target',
|
|
115
|
+
index: 2,
|
|
116
|
+
id: 'r3'
|
|
117
|
+
};
|
|
118
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
119
|
+
expect(result.response).toEqual([{
|
|
120
|
+
id: 'r2'
|
|
121
|
+
}, {
|
|
122
|
+
id: 'r3'
|
|
123
|
+
}, {
|
|
124
|
+
id: 'r1'
|
|
125
|
+
}]);
|
|
126
|
+
expect(result.choices).toEqual(choices);
|
|
127
|
+
});
|
|
128
|
+
it('should move item to beginning of response', () => {
|
|
129
|
+
const response = [{
|
|
130
|
+
id: 'r1'
|
|
131
|
+
}, {
|
|
132
|
+
id: 'r2'
|
|
133
|
+
}, {
|
|
134
|
+
id: 'r3'
|
|
135
|
+
}];
|
|
136
|
+
const choices = [{
|
|
137
|
+
id: 'c1'
|
|
138
|
+
}];
|
|
139
|
+
const from = {
|
|
140
|
+
type: 'target',
|
|
141
|
+
index: 2,
|
|
142
|
+
id: 'r3'
|
|
143
|
+
};
|
|
144
|
+
const to = {
|
|
145
|
+
type: 'target',
|
|
146
|
+
index: 0,
|
|
147
|
+
id: 'r1'
|
|
148
|
+
};
|
|
149
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
150
|
+
expect(result.response).toEqual([{
|
|
151
|
+
id: 'r3'
|
|
152
|
+
}, {
|
|
153
|
+
id: 'r1'
|
|
154
|
+
}, {
|
|
155
|
+
id: 'r2'
|
|
156
|
+
}]);
|
|
157
|
+
});
|
|
158
|
+
it('should move item to end of response', () => {
|
|
159
|
+
const response = [{
|
|
160
|
+
id: 'r1'
|
|
161
|
+
}, {
|
|
162
|
+
id: 'r2'
|
|
163
|
+
}, {
|
|
164
|
+
id: 'r3'
|
|
165
|
+
}];
|
|
166
|
+
const choices = [{
|
|
167
|
+
id: 'c1'
|
|
168
|
+
}];
|
|
169
|
+
const from = {
|
|
170
|
+
type: 'target',
|
|
171
|
+
index: 0,
|
|
172
|
+
id: 'r1'
|
|
173
|
+
};
|
|
174
|
+
const to = {
|
|
175
|
+
type: 'target',
|
|
176
|
+
index: 2,
|
|
177
|
+
id: 'r3'
|
|
178
|
+
};
|
|
179
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
180
|
+
expect(result.response[result.response.length - 1]).toEqual({
|
|
181
|
+
id: 'r1'
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe('moving within choices (choice to choice)', () => {
|
|
186
|
+
it('should move item within choices array', () => {
|
|
187
|
+
const response = [{
|
|
188
|
+
id: 'r1'
|
|
189
|
+
}];
|
|
190
|
+
const choices = [{
|
|
191
|
+
id: 'c1'
|
|
192
|
+
}, {
|
|
193
|
+
id: 'c2'
|
|
194
|
+
}, {
|
|
195
|
+
id: 'c3'
|
|
196
|
+
}];
|
|
197
|
+
const from = {
|
|
198
|
+
type: 'choice',
|
|
199
|
+
index: 0,
|
|
200
|
+
id: 'c1'
|
|
201
|
+
};
|
|
202
|
+
const to = {
|
|
203
|
+
type: 'choice',
|
|
204
|
+
index: 2,
|
|
205
|
+
id: 'c3'
|
|
206
|
+
};
|
|
207
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
208
|
+
expect(result.choices).toEqual([{
|
|
209
|
+
id: 'c2'
|
|
210
|
+
}, {
|
|
211
|
+
id: 'c3'
|
|
212
|
+
}, {
|
|
213
|
+
id: 'c1'
|
|
214
|
+
}]);
|
|
215
|
+
expect(result.response).toEqual(response);
|
|
216
|
+
});
|
|
217
|
+
it('should handle moving to beginning of choices', () => {
|
|
218
|
+
const response = [{
|
|
219
|
+
id: 'r1'
|
|
220
|
+
}];
|
|
221
|
+
const choices = [{
|
|
222
|
+
id: 'c1'
|
|
223
|
+
}, {
|
|
224
|
+
id: 'c2'
|
|
225
|
+
}, {
|
|
226
|
+
id: 'c3'
|
|
227
|
+
}];
|
|
228
|
+
const from = {
|
|
229
|
+
type: 'choice',
|
|
230
|
+
index: 2,
|
|
231
|
+
id: 'c3'
|
|
232
|
+
};
|
|
233
|
+
const to = {
|
|
234
|
+
type: 'choice',
|
|
235
|
+
index: 0,
|
|
236
|
+
id: 'c1'
|
|
237
|
+
};
|
|
238
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
239
|
+
expect(result.choices[0]).toEqual({
|
|
240
|
+
id: 'c3'
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
describe('mixed type movements', () => {
|
|
245
|
+
it('should return unchanged arrays when moving from choice to target', () => {
|
|
246
|
+
const response = [{
|
|
247
|
+
id: 'r1'
|
|
248
|
+
}];
|
|
249
|
+
const choices = [{
|
|
250
|
+
id: 'c1'
|
|
251
|
+
}];
|
|
252
|
+
const from = {
|
|
253
|
+
type: 'choice',
|
|
254
|
+
index: 0,
|
|
255
|
+
id: 'c1'
|
|
256
|
+
};
|
|
257
|
+
const to = {
|
|
258
|
+
type: 'target',
|
|
259
|
+
index: 0,
|
|
260
|
+
id: 'r1'
|
|
261
|
+
};
|
|
262
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
263
|
+
expect(result.response).toEqual(response);
|
|
264
|
+
expect(result.choices).toEqual(choices);
|
|
265
|
+
});
|
|
266
|
+
it('should return unchanged arrays when moving from target to choice', () => {
|
|
267
|
+
const response = [{
|
|
268
|
+
id: 'r1'
|
|
269
|
+
}];
|
|
270
|
+
const choices = [{
|
|
271
|
+
id: 'c1'
|
|
272
|
+
}];
|
|
273
|
+
const from = {
|
|
274
|
+
type: 'target',
|
|
275
|
+
index: 0,
|
|
276
|
+
id: 'r1'
|
|
277
|
+
};
|
|
278
|
+
const to = {
|
|
279
|
+
type: 'choice',
|
|
280
|
+
index: 0,
|
|
281
|
+
id: 'c1'
|
|
282
|
+
};
|
|
283
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
284
|
+
expect(result.response).toEqual(response);
|
|
285
|
+
expect(result.choices).toEqual(choices);
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
describe('edge cases', () => {
|
|
289
|
+
it('should handle single item arrays', () => {
|
|
290
|
+
const response = [{
|
|
291
|
+
id: 'r1'
|
|
292
|
+
}];
|
|
293
|
+
const choices = [{
|
|
294
|
+
id: 'c1'
|
|
295
|
+
}];
|
|
296
|
+
const from = {
|
|
297
|
+
type: 'target',
|
|
298
|
+
index: 0,
|
|
299
|
+
id: 'r1'
|
|
300
|
+
};
|
|
301
|
+
const to = {
|
|
302
|
+
type: 'target',
|
|
303
|
+
index: 0,
|
|
304
|
+
id: 'r1'
|
|
305
|
+
};
|
|
306
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
307
|
+
expect(result.response).toHaveLength(1);
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
describe('buildTiles', () => {
|
|
312
|
+
it('should create tiles from choices and response', () => {
|
|
313
|
+
const choices = [{
|
|
314
|
+
id: 'c1',
|
|
315
|
+
label: 'Choice 1'
|
|
316
|
+
}, {
|
|
317
|
+
id: 'c2',
|
|
318
|
+
label: 'Choice 2'
|
|
319
|
+
}];
|
|
320
|
+
const response = [{
|
|
321
|
+
id: 'c1'
|
|
322
|
+
}, {
|
|
323
|
+
id: 'c2'
|
|
324
|
+
}];
|
|
325
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
326
|
+
expect(tiles).toHaveLength(4); // 2 choices + 2 targets
|
|
327
|
+
});
|
|
328
|
+
it('should mark choice tiles as editable and draggable', () => {
|
|
329
|
+
const choices = [{
|
|
330
|
+
id: 'c1',
|
|
331
|
+
label: 'Choice 1'
|
|
332
|
+
}];
|
|
333
|
+
const response = [{
|
|
334
|
+
id: 'c1'
|
|
335
|
+
}];
|
|
336
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
337
|
+
const choiceTile = tiles.find(t => t.type === 'choice');
|
|
338
|
+
expect(choiceTile).toMatchObject({
|
|
339
|
+
type: 'choice',
|
|
340
|
+
editable: true,
|
|
341
|
+
draggable: true,
|
|
342
|
+
droppable: false
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
it('should mark target tiles as draggable but not editable', () => {
|
|
346
|
+
const choices = [{
|
|
347
|
+
id: 'c1',
|
|
348
|
+
label: 'Choice 1'
|
|
349
|
+
}];
|
|
350
|
+
const response = [{
|
|
351
|
+
id: 'c1'
|
|
352
|
+
}];
|
|
353
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
354
|
+
const targetTile = tiles.find(t => t.type === 'target');
|
|
355
|
+
expect(targetTile).toMatchObject({
|
|
356
|
+
type: 'target',
|
|
357
|
+
editable: false,
|
|
358
|
+
draggable: true
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
it('should match target tiles with corresponding choices by id', () => {
|
|
362
|
+
const choices = [{
|
|
363
|
+
id: 'c1',
|
|
364
|
+
label: 'Choice 1'
|
|
365
|
+
}, {
|
|
366
|
+
id: 'c2',
|
|
367
|
+
label: 'Choice 2'
|
|
368
|
+
}];
|
|
369
|
+
const response = [{
|
|
370
|
+
id: 'c2'
|
|
371
|
+
}, {
|
|
372
|
+
id: 'c1'
|
|
373
|
+
}];
|
|
374
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
375
|
+
const targetTiles = tiles.filter(t => t.type === 'target');
|
|
376
|
+
expect(targetTiles[0]).toMatchObject({
|
|
377
|
+
id: 'c2',
|
|
378
|
+
label: 'Choice 2'
|
|
379
|
+
});
|
|
380
|
+
expect(targetTiles[1]).toMatchObject({
|
|
381
|
+
id: 'c1',
|
|
382
|
+
label: 'Choice 1'
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
it('should assign correct index to target tiles', () => {
|
|
386
|
+
const choices = [{
|
|
387
|
+
id: 'c1',
|
|
388
|
+
label: 'Choice 1'
|
|
389
|
+
}];
|
|
390
|
+
const response = [{
|
|
391
|
+
id: 'c1'
|
|
392
|
+
}];
|
|
393
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
394
|
+
const targetTile = tiles.find(t => t.type === 'target');
|
|
395
|
+
expect(targetTile.index).toBe(0);
|
|
396
|
+
});
|
|
397
|
+
it('should handle response with null or undefined ids', () => {
|
|
398
|
+
const choices = [{
|
|
399
|
+
id: 'c1',
|
|
400
|
+
label: 'Choice 1'
|
|
401
|
+
}, {
|
|
402
|
+
id: 'c2',
|
|
403
|
+
label: 'Choice 2'
|
|
404
|
+
}];
|
|
405
|
+
const response = [{
|
|
406
|
+
id: null
|
|
407
|
+
}, {
|
|
408
|
+
id: undefined
|
|
409
|
+
}, {
|
|
410
|
+
id: 'c1'
|
|
411
|
+
}];
|
|
412
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
413
|
+
const targetTiles = tiles.filter(t => t.type === 'target');
|
|
414
|
+
expect(targetTiles).toHaveLength(3);
|
|
415
|
+
expect(targetTiles[2].id).toBe('c1');
|
|
416
|
+
});
|
|
417
|
+
it('should preserve choice properties in choice tiles', () => {
|
|
418
|
+
const choices = [{
|
|
419
|
+
id: 'c1',
|
|
420
|
+
label: 'Choice 1',
|
|
421
|
+
customProp: 'value'
|
|
422
|
+
}];
|
|
423
|
+
const response = [];
|
|
424
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
425
|
+
const choiceTile = tiles.find(t => t.type === 'choice');
|
|
426
|
+
expect(choiceTile.customProp).toBe('value');
|
|
427
|
+
expect(choiceTile.label).toBe('Choice 1');
|
|
428
|
+
});
|
|
429
|
+
it('should preserve choice properties in target tiles', () => {
|
|
430
|
+
const choices = [{
|
|
431
|
+
id: 'c1',
|
|
432
|
+
label: 'Choice 1',
|
|
433
|
+
customProp: 'value'
|
|
434
|
+
}];
|
|
435
|
+
const response = [{
|
|
436
|
+
id: 'c1'
|
|
437
|
+
}];
|
|
438
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
439
|
+
const targetTile = tiles.find(t => t.type === 'target');
|
|
440
|
+
expect(targetTile.customProp).toBe('value');
|
|
441
|
+
expect(targetTile.label).toBe('Choice 1');
|
|
442
|
+
});
|
|
443
|
+
it('should handle empty choices array', () => {
|
|
444
|
+
const choices = [];
|
|
445
|
+
const response = [];
|
|
446
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
447
|
+
expect(tiles).toEqual([]);
|
|
448
|
+
});
|
|
449
|
+
it('should handle empty response array', () => {
|
|
450
|
+
const choices = [{
|
|
451
|
+
id: 'c1',
|
|
452
|
+
label: 'Choice 1'
|
|
453
|
+
}];
|
|
454
|
+
const response = [];
|
|
455
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
456
|
+
expect(tiles).toHaveLength(1);
|
|
457
|
+
expect(tiles[0].type).toBe('choice');
|
|
458
|
+
});
|
|
459
|
+
it('should maintain order of choices in choice tiles', () => {
|
|
460
|
+
const choices = [{
|
|
461
|
+
id: 'c1',
|
|
462
|
+
label: 'First'
|
|
463
|
+
}, {
|
|
464
|
+
id: 'c2',
|
|
465
|
+
label: 'Second'
|
|
466
|
+
}, {
|
|
467
|
+
id: 'c3',
|
|
468
|
+
label: 'Third'
|
|
469
|
+
}];
|
|
470
|
+
const response = [];
|
|
471
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
472
|
+
const choiceTiles = tiles.filter(t => t.type === 'choice');
|
|
473
|
+
expect(choiceTiles.map(t => t.label)).toEqual(['First', 'Second', 'Third']);
|
|
474
|
+
});
|
|
475
|
+
it('should place choice tiles before target tiles', () => {
|
|
476
|
+
const choices = [{
|
|
477
|
+
id: 'c1',
|
|
478
|
+
label: 'Choice 1'
|
|
479
|
+
}, {
|
|
480
|
+
id: 'c2',
|
|
481
|
+
label: 'Choice 2'
|
|
482
|
+
}];
|
|
483
|
+
const response = [{
|
|
484
|
+
id: 'c1'
|
|
485
|
+
}];
|
|
486
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
487
|
+
expect(tiles[0].type).toBe('choice');
|
|
488
|
+
expect(tiles[1].type).toBe('choice');
|
|
489
|
+
expect(tiles[2].type).toBe('target');
|
|
490
|
+
});
|
|
491
|
+
});
|
|
492
|
+
});
|
|
493
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsIm1lc3NhZ2UiLCJnZW5lcmF0ZVZhbGlkYXRpb25NZXNzYWdlIiwiZXhwZWN0IiwidG9CZSIsInRvQ29udGFpbiIsIm9yZGVyaW5nIiwicmVzcG9uc2UiLCJpZCIsImNob2ljZXMiLCJ0aWxlIiwidHlwZSIsImluZGV4Iiwibm9ybWFsaXplSW5kZXgiLCJmcm9tIiwidG8iLCJyZXN1bHQiLCJ1cGRhdGVSZXNwb25zZU9yQ2hvaWNlcyIsInRvRXF1YWwiLCJsZW5ndGgiLCJ0b0hhdmVMZW5ndGgiLCJsYWJlbCIsInRpbGVzIiwiYnVpbGRUaWxlcyIsImNob2ljZVRpbGUiLCJmaW5kIiwidCIsInRvTWF0Y2hPYmplY3QiLCJlZGl0YWJsZSIsImRyYWdnYWJsZSIsImRyb3BwYWJsZSIsInRhcmdldFRpbGUiLCJ0YXJnZXRUaWxlcyIsImZpbHRlciIsInVuZGVmaW5lZCIsImN1c3RvbVByb3AiLCJjaG9pY2VUaWxlcyIsIm1hcCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdXRpbHMudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBnZW5lcmF0ZVZhbGlkYXRpb25NZXNzYWdlLFxuICBub3JtYWxpemVJbmRleCxcbiAgdXBkYXRlUmVzcG9uc2VPckNob2ljZXMsXG4gIGJ1aWxkVGlsZXMsXG59IGZyb20gJy4uL3V0aWxzJztcblxuZGVzY3JpYmUoJ3V0aWxzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZ2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIHZhbGlkYXRpb24gbWVzc2FnZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZ2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBtZXNzYWdlKS50b0JlKCdzdHJpbmcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udGFpbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50cyBoZWFkaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGdlbmVyYXRlVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIGV4cGVjdChtZXNzYWdlKS50b0NvbnRhaW4oJ1ZhbGlkYXRpb24gcmVxdWlyZW1lbnRzOicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtZW50aW9uIG1pbmltdW0gdG9rZW4gcmVxdWlyZW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZ2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgZXhwZWN0KG1lc3NhZ2UpLnRvQ29udGFpbignVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IDMgdG9rZW5zLicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtZW50aW9uIHRva2VucyBzaG91bGQgbm90IGJlIGVtcHR5JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGdlbmVyYXRlVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIGV4cGVjdChtZXNzYWdlKS50b0NvbnRhaW4oJ1RoZSB0b2tlbnMgc2hvdWxkIG5vdCBiZSBlbXB0eSBhbmQgc2hvdWxkIGJlIHVuaXF1ZS4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWVudGlvbiBjb3JyZWN0IG9yZGVyaW5nIHJlcXVpcmVtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGdlbmVyYXRlVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIGV4cGVjdChtZXNzYWdlKS50b0NvbnRhaW4oJ1RoZSBjb3JyZWN0IG9yZGVyaW5nIHNob3VsZCBub3QgYmUgaWRlbnRpY2FsIHRvIHRoZSBpbml0aWFsIG9yZGVyaW5nLicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbm9ybWFsaXplSW5kZXgnLCAoKSA9PiB7XG4gICAgY29uc3Qgb3JkZXJpbmcgPSB7XG4gICAgICByZXNwb25zZTogW3sgaWQ6ICdyMScgfSwgeyBpZDogJ3IyJyB9LCB7IGlkOiAncjMnIH1dLFxuICAgICAgY2hvaWNlczogW3sgaWQ6ICdjMScgfSwgeyBpZDogJ2MyJyB9LCB7IGlkOiAnYzMnIH1dLFxuICAgIH07XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0IGluZGV4IGZvciB0YXJnZXQgdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbGUgPSB7IGlkOiAncjInLCB0eXBlOiAndGFyZ2V0JyB9O1xuICAgICAgY29uc3QgaW5kZXggPSBub3JtYWxpemVJbmRleCh0aWxlLCBvcmRlcmluZyk7XG4gICAgICBleHBlY3QoaW5kZXgpLnRvQmUoMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0IGluZGV4IGZvciBjaG9pY2UgdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbGUgPSB7IGlkOiAnYzMnLCB0eXBlOiAnY2hvaWNlJyB9O1xuICAgICAgY29uc3QgaW5kZXggPSBub3JtYWxpemVJbmRleCh0aWxlLCBvcmRlcmluZyk7XG4gICAgICBleHBlY3QoaW5kZXgpLnRvQmUoMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiAtMSBmb3IgdW5rbm93biB0eXBlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdGlsZSA9IHsgaWQ6ICd4MScsIHR5cGU6ICd1bmtub3duJyB9O1xuICAgICAgY29uc3QgaW5kZXggPSBub3JtYWxpemVJbmRleCh0aWxlLCBvcmRlcmluZyk7XG4gICAgICBleHBlY3QoaW5kZXgpLnRvQmUoLTEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gLTEgd2hlbiB0aWxlIG5vdCBmb3VuZCBpbiByZXNwb25zZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbGUgPSB7IGlkOiAncjk5JywgdHlwZTogJ3RhcmdldCcgfTtcbiAgICAgIGNvbnN0IGluZGV4ID0gbm9ybWFsaXplSW5kZXgodGlsZSwgb3JkZXJpbmcpO1xuICAgICAgZXhwZWN0KGluZGV4KS50b0JlKC0xKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIC0xIHdoZW4gdGlsZSBub3QgZm91bmQgaW4gY2hvaWNlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbGUgPSB7IGlkOiAnYzk5JywgdHlwZTogJ2Nob2ljZScgfTtcbiAgICAgIGNvbnN0IGluZGV4ID0gbm9ybWFsaXplSW5kZXgodGlsZSwgb3JkZXJpbmcpO1xuICAgICAgZXhwZWN0KGluZGV4KS50b0JlKC0xKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGNvcnJlY3QgaW5kZXggZm9yIGZpcnN0IGVsZW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0aWxlID0geyBpZDogJ3IxJywgdHlwZTogJ3RhcmdldCcgfTtcbiAgICAgIGNvbnN0IGluZGV4ID0gbm9ybWFsaXplSW5kZXgodGlsZSwgb3JkZXJpbmcpO1xuICAgICAgZXhwZWN0KGluZGV4KS50b0JlKDApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXBkYXRlUmVzcG9uc2VPckNob2ljZXMnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ21vdmluZyB3aXRoaW4gcmVzcG9uc2UgKHRhcmdldCB0byB0YXJnZXQpJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBtb3ZlIGl0ZW0gd2l0aGluIHJlc3BvbnNlIGFycmF5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IFt7IGlkOiAncjEnIH0sIHsgaWQ6ICdyMicgfSwgeyBpZDogJ3IzJyB9XTtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IFt7IGlkOiAnYzEnIH0sIHsgaWQ6ICdjMicgfV07XG4gICAgICAgIGNvbnN0IGZyb20gPSB7IHR5cGU6ICd0YXJnZXQnLCBpbmRleDogMCwgaWQ6ICdyMScgfTtcbiAgICAgICAgY29uc3QgdG8gPSB7IHR5cGU6ICd0YXJnZXQnLCBpbmRleDogMiwgaWQ6ICdyMycgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSB1cGRhdGVSZXNwb25zZU9yQ2hvaWNlcyhyZXNwb25zZSwgY2hvaWNlcywgZnJvbSwgdG8pO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQucmVzcG9uc2UpLnRvRXF1YWwoW3sgaWQ6ICdyMicgfSwgeyBpZDogJ3IzJyB9LCB7IGlkOiAncjEnIH1dKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKGNob2ljZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbW92ZSBpdGVtIHRvIGJlZ2lubmluZyBvZiByZXNwb25zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ3IxJyB9LCB7IGlkOiAncjInIH0sIHsgaWQ6ICdyMycgfV07XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAyLCBpZDogJ3IzJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAwLCBpZDogJ3IxJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZSkudG9FcXVhbChbeyBpZDogJ3IzJyB9LCB7IGlkOiAncjEnIH0sIHsgaWQ6ICdyMicgfV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbW92ZSBpdGVtIHRvIGVuZCBvZiByZXNwb25zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ3IxJyB9LCB7IGlkOiAncjInIH0sIHsgaWQ6ICdyMycgfV07XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAwLCBpZDogJ3IxJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAyLCBpZDogJ3IzJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZVtyZXN1bHQucmVzcG9uc2UubGVuZ3RoIC0gMV0pLnRvRXF1YWwoeyBpZDogJ3IxJyB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vdmluZyB3aXRoaW4gY2hvaWNlcyAoY2hvaWNlIHRvIGNob2ljZSknLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIG1vdmUgaXRlbSB3aXRoaW4gY2hvaWNlcyBhcnJheScsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ3IxJyB9XTtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IFt7IGlkOiAnYzEnIH0sIHsgaWQ6ICdjMicgfSwgeyBpZDogJ2MzJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ2Nob2ljZScsIGluZGV4OiAwLCBpZDogJ2MxJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ2Nob2ljZScsIGluZGV4OiAyLCBpZDogJ2MzJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKFt7IGlkOiAnYzInIH0sIHsgaWQ6ICdjMycgfSwgeyBpZDogJ2MxJyB9XSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQucmVzcG9uc2UpLnRvRXF1YWwocmVzcG9uc2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIG1vdmluZyB0byBiZWdpbm5pbmcgb2YgY2hvaWNlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ3IxJyB9XTtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IFt7IGlkOiAnYzEnIH0sIHsgaWQ6ICdjMicgfSwgeyBpZDogJ2MzJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ2Nob2ljZScsIGluZGV4OiAyLCBpZDogJ2MzJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ2Nob2ljZScsIGluZGV4OiAwLCBpZDogJ2MxJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzWzBdKS50b0VxdWFsKHsgaWQ6ICdjMycgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdtaXhlZCB0eXBlIG1vdmVtZW50cycsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuY2hhbmdlZCBhcnJheXMgd2hlbiBtb3ZpbmcgZnJvbSBjaG9pY2UgdG8gdGFyZ2V0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IFt7IGlkOiAncjEnIH1dO1xuICAgICAgICBjb25zdCBjaG9pY2VzID0gW3sgaWQ6ICdjMScgfV07XG4gICAgICAgIGNvbnN0IGZyb20gPSB7IHR5cGU6ICdjaG9pY2UnLCBpbmRleDogMCwgaWQ6ICdjMScgfTtcbiAgICAgICAgY29uc3QgdG8gPSB7IHR5cGU6ICd0YXJnZXQnLCBpbmRleDogMCwgaWQ6ICdyMScgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSB1cGRhdGVSZXNwb25zZU9yQ2hvaWNlcyhyZXNwb25zZSwgY2hvaWNlcywgZnJvbSwgdG8pO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQucmVzcG9uc2UpLnRvRXF1YWwocmVzcG9uc2UpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmNob2ljZXMpLnRvRXF1YWwoY2hvaWNlcyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5jaGFuZ2VkIGFycmF5cyB3aGVuIG1vdmluZyBmcm9tIHRhcmdldCB0byBjaG9pY2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gW3sgaWQ6ICdyMScgfV07XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAwLCBpZDogJ3IxJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ2Nob2ljZScsIGluZGV4OiAwLCBpZDogJ2MxJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZSkudG9FcXVhbChyZXNwb25zZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuY2hvaWNlcykudG9FcXVhbChjaG9pY2VzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2VkZ2UgY2FzZXMnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzaW5nbGUgaXRlbSBhcnJheXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gW3sgaWQ6ICdyMScgfV07XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAwLCBpZDogJ3IxJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAwLCBpZDogJ3IxJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZSkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZFRpbGVzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY3JlYXRlIHRpbGVzIGZyb20gY2hvaWNlcyBhbmQgcmVzcG9uc2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gW1xuICAgICAgICB7IGlkOiAnYzEnLCBsYWJlbDogJ0Nob2ljZSAxJyB9LFxuICAgICAgICB7IGlkOiAnYzInLCBsYWJlbDogJ0Nob2ljZSAyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gW3sgaWQ6ICdjMScgfSwgeyBpZDogJ2MyJyB9XTtcblxuICAgICAgY29uc3QgdGlsZXMgPSBidWlsZFRpbGVzKGNob2ljZXMsIHJlc3BvbnNlKTtcblxuICAgICAgZXhwZWN0KHRpbGVzKS50b0hhdmVMZW5ndGgoNCk7IC8vIDIgY2hvaWNlcyArIDIgdGFyZ2V0c1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXJrIGNob2ljZSB0aWxlcyBhcyBlZGl0YWJsZSBhbmQgZHJhZ2dhYmxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2hvaWNlcyA9IFt7IGlkOiAnYzEnLCBsYWJlbDogJ0Nob2ljZSAxJyB9XTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gW3sgaWQ6ICdjMScgfV07XG5cbiAgICAgIGNvbnN0IHRpbGVzID0gYnVpbGRUaWxlcyhjaG9pY2VzLCByZXNwb25zZSk7XG4gICAgICBjb25zdCBjaG9pY2VUaWxlID0gdGlsZXMuZmluZCgodCkgPT4gdC50eXBlID09PSAnY2hvaWNlJyk7XG5cbiAgICAgIGV4cGVjdChjaG9pY2VUaWxlKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgdHlwZTogJ2Nob2ljZScsXG4gICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICAgIGRyb3BwYWJsZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWFyayB0YXJnZXQgdGlsZXMgYXMgZHJhZ2dhYmxlIGJ1dCBub3QgZWRpdGFibGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gW3sgaWQ6ICdjMScsIGxhYmVsOiAnQ2hvaWNlIDEnIH1dO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ2MxJyB9XTtcblxuICAgICAgY29uc3QgdGlsZXMgPSBidWlsZFRpbGVzKGNob2ljZXMsIHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IHRhcmdldFRpbGUgPSB0aWxlcy5maW5kKCh0KSA9PiB0LnR5cGUgPT09ICd0YXJnZXQnKTtcblxuICAgICAgZXhwZWN0KHRhcmdldFRpbGUpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICB0eXBlOiAndGFyZ2V0JyxcbiAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggdGFyZ2V0IHRpbGVzIHdpdGggY29ycmVzcG9uZGluZyBjaG9pY2VzIGJ5IGlkJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2hvaWNlcyA9IFtcbiAgICAgICAgeyBpZDogJ2MxJywgbGFiZWw6ICdDaG9pY2UgMScgfSxcbiAgICAgICAgeyBpZDogJ2MyJywgbGFiZWw6ICdDaG9pY2UgMicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFt7IGlkOiAnYzInIH0sIHsgaWQ6ICdjMScgfV07XG5cbiAgICAgIGNvbnN0IHRpbGVzID0gYnVpbGRUaWxlcyhjaG9pY2VzLCByZXNwb25zZSk7XG4gICAgICBjb25zdCB0YXJnZXRUaWxlcyA9IHRpbGVzLmZpbHRlcigodCkgPT4gdC50eXBlID09PSAndGFyZ2V0Jyk7XG5cbiAgICAgIGV4cGVjdCh0YXJnZXRUaWxlc1swXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGlkOiAnYzInLFxuICAgICAgICBsYWJlbDogJ0Nob2ljZSAyJyxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHRhcmdldFRpbGVzWzFdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgaWQ6ICdjMScsXG4gICAgICAgIGxhYmVsOiAnQ2hvaWNlIDEnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFzc2lnbiBjb3JyZWN0IGluZGV4IHRvIHRhcmdldCB0aWxlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJywgbGFiZWw6ICdDaG9pY2UgMScgfV07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFt7IGlkOiAnYzEnIH1dO1xuXG4gICAgICBjb25zdCB0aWxlcyA9IGJ1aWxkVGlsZXMoY2hvaWNlcywgcmVzcG9uc2UpO1xuICAgICAgY29uc3QgdGFyZ2V0VGlsZSA9IHRpbGVzLmZpbmQoKHQpID0+IHQudHlwZSA9PT0gJ3RhcmdldCcpO1xuXG4gICAgICBleHBlY3QodGFyZ2V0VGlsZS5pbmRleCkudG9CZSgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHJlc3BvbnNlIHdpdGggbnVsbCBvciB1bmRlZmluZWQgaWRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2hvaWNlcyA9IFtcbiAgICAgICAgeyBpZDogJ2MxJywgbGFiZWw6ICdDaG9pY2UgMScgfSxcbiAgICAgICAgeyBpZDogJ2MyJywgbGFiZWw6ICdDaG9pY2UgMicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFt7IGlkOiBudWxsIH0sIHsgaWQ6IHVuZGVmaW5lZCB9LCB7IGlkOiAnYzEnIH1dO1xuXG4gICAgICBjb25zdCB0aWxlcyA9IGJ1aWxkVGlsZXMoY2hvaWNlcywgcmVzcG9uc2UpO1xuICAgICAgY29uc3QgdGFyZ2V0VGlsZXMgPSB0aWxlcy5maWx0ZXIoKHQpID0+IHQudHlwZSA9PT0gJ3RhcmdldCcpO1xuXG4gICAgICBleHBlY3QodGFyZ2V0VGlsZXMpLnRvSGF2ZUxlbmd0aCgzKTtcbiAgICAgIGV4cGVjdCh0YXJnZXRUaWxlc1syXS5pZCkudG9CZSgnYzEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJlc2VydmUgY2hvaWNlIHByb3BlcnRpZXMgaW4gY2hvaWNlIHRpbGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2hvaWNlcyA9IFtcbiAgICAgICAgeyBpZDogJ2MxJywgbGFiZWw6ICdDaG9pY2UgMScsIGN1c3RvbVByb3A6ICd2YWx1ZScgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFtdO1xuXG4gICAgICBjb25zdCB0aWxlcyA9IGJ1aWxkVGlsZXMoY2hvaWNlcywgcmVzcG9uc2UpO1xuICAgICAgY29uc3QgY2hvaWNlVGlsZSA9IHRpbGVzLmZpbmQoKHQpID0+IHQudHlwZSA9PT0gJ2Nob2ljZScpO1xuXG4gICAgICBleHBlY3QoY2hvaWNlVGlsZS5jdXN0b21Qcm9wKS50b0JlKCd2YWx1ZScpO1xuICAgICAgZXhwZWN0KGNob2ljZVRpbGUubGFiZWwpLnRvQmUoJ0Nob2ljZSAxJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIGNob2ljZSBwcm9wZXJ0aWVzIGluIHRhcmdldCB0aWxlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBbXG4gICAgICAgIHsgaWQ6ICdjMScsIGxhYmVsOiAnQ2hvaWNlIDEnLCBjdXN0b21Qcm9wOiAndmFsdWUnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ2MxJyB9XTtcblxuICAgICAgY29uc3QgdGlsZXMgPSBidWlsZFRpbGVzKGNob2ljZXMsIHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IHRhcmdldFRpbGUgPSB0aWxlcy5maW5kKCh0KSA9PiB0LnR5cGUgPT09ICd0YXJnZXQnKTtcblxuICAgICAgZXhwZWN0KHRhcmdldFRpbGUuY3VzdG9tUHJvcCkudG9CZSgndmFsdWUnKTtcbiAgICAgIGV4cGVjdCh0YXJnZXRUaWxlLmxhYmVsKS50b0JlKCdDaG9pY2UgMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgY2hvaWNlcyBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBbXTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gW107XG5cbiAgICAgIGNvbnN0IHRpbGVzID0gYnVpbGRUaWxlcyhjaG9pY2VzLCByZXNwb25zZSk7XG5cbiAgICAgIGV4cGVjdCh0aWxlcykudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBlbXB0eSByZXNwb25zZSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJywgbGFiZWw6ICdDaG9pY2UgMScgfV07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFtdO1xuXG4gICAgICBjb25zdCB0aWxlcyA9IGJ1aWxkVGlsZXMoY2hvaWNlcywgcmVzcG9uc2UpO1xuXG4gICAgICBleHBlY3QodGlsZXMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICAgIGV4cGVjdCh0aWxlc1swXS50eXBlKS50b0JlKCdjaG9pY2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWFpbnRhaW4gb3JkZXIgb2YgY2hvaWNlcyBpbiBjaG9pY2UgdGlsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gW1xuICAgICAgICB7IGlkOiAnYzEnLCBsYWJlbDogJ0ZpcnN0JyB9LFxuICAgICAgICB7IGlkOiAnYzInLCBsYWJlbDogJ1NlY29uZCcgfSxcbiAgICAgICAgeyBpZDogJ2MzJywgbGFiZWw6ICdUaGlyZCcgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFtdO1xuXG4gICAgICBjb25zdCB0aWxlcyA9IGJ1aWxkVGlsZXMoY2hvaWNlcywgcmVzcG9uc2UpO1xuICAgICAgY29uc3QgY2hvaWNlVGlsZXMgPSB0aWxlcy5maWx0ZXIoKHQpID0+IHQudHlwZSA9PT0gJ2Nob2ljZScpO1xuXG4gICAgICBleHBlY3QoY2hvaWNlVGlsZXMubWFwKCh0KSA9PiB0LmxhYmVsKSkudG9FcXVhbChbJ0ZpcnN0JywgJ1NlY29uZCcsICdUaGlyZCddKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGxhY2UgY2hvaWNlIHRpbGVzIGJlZm9yZSB0YXJnZXQgdGlsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gW1xuICAgICAgICB7IGlkOiAnYzEnLCBsYWJlbDogJ0Nob2ljZSAxJyB9LFxuICAgICAgICB7IGlkOiAnYzInLCBsYWJlbDogJ0Nob2ljZSAyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gW3sgaWQ6ICdjMScgfV07XG5cbiAgICAgIGNvbnN0IHRpbGVzID0gYnVpbGRUaWxlcyhjaG9pY2VzLCByZXNwb25zZSk7XG5cbiAgICAgIGV4cGVjdCh0aWxlc1swXS50eXBlKS50b0JlKCdjaG9pY2UnKTtcbiAgICAgIGV4cGVjdCh0aWxlc1sxXS50eXBlKS50b0JlKCdjaG9pY2UnKTtcbiAgICAgIGV4cGVjdCh0aWxlc1syXS50eXBlKS50b0JlKCd0YXJnZXQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFPQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNO0VBQ3RCQSxRQUFRLENBQUMsMkJBQTJCLEVBQUUsTUFBTTtJQUMxQ0MsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLE1BQU07TUFDcEQsTUFBTUMsT0FBTyxHQUFHLElBQUFDLGdDQUF5QixFQUFDLENBQUM7TUFDM0NDLE1BQU0sQ0FBQyxPQUFPRixPQUFPLENBQUMsQ0FBQ0csSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QyxDQUFDLENBQUM7SUFFRkosRUFBRSxDQUFDLGdEQUFnRCxFQUFFLE1BQU07TUFDekQsTUFBTUMsT0FBTyxHQUFHLElBQUFDLGdDQUF5QixFQUFDLENBQUM7TUFDM0NDLE1BQU0sQ0FBQ0YsT0FBTyxDQUFDLENBQUNJLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQztJQUN2RCxDQUFDLENBQUM7SUFFRkwsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLE1BQU07TUFDbkQsTUFBTUMsT0FBTyxHQUFHLElBQUFDLGdDQUF5QixFQUFDLENBQUM7TUFDM0NDLE1BQU0sQ0FBQ0YsT0FBTyxDQUFDLENBQUNJLFNBQVMsQ0FBQyxvQ0FBb0MsQ0FBQztJQUNqRSxDQUFDLENBQUM7SUFFRkwsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLE1BQU07TUFDcEQsTUFBTUMsT0FBTyxHQUFHLElBQUFDLGdDQUF5QixFQUFDLENBQUM7TUFDM0NDLE1BQU0sQ0FBQ0YsT0FBTyxDQUFDLENBQUNJLFNBQVMsQ0FBQyxzREFBc0QsQ0FBQztJQUNuRixDQUFDLENBQUM7SUFFRkwsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLE1BQU07TUFDdEQsTUFBTUMsT0FBTyxHQUFHLElBQUFDLGdDQUF5QixFQUFDLENBQUM7TUFDM0NDLE1BQU0sQ0FBQ0YsT0FBTyxDQUFDLENBQUNJLFNBQVMsQ0FBQyx1RUFBdUUsQ0FBQztJQUNwRyxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRk4sUUFBUSxDQUFDLGdCQUFnQixFQUFFLE1BQU07SUFDL0IsTUFBTU8sUUFBUSxHQUFHO01BQ2ZDLFFBQVEsRUFBRSxDQUFDO1FBQUVDLEVBQUUsRUFBRTtNQUFLLENBQUMsRUFBRTtRQUFFQSxFQUFFLEVBQUU7TUFBSyxDQUFDLEVBQUU7UUFBRUEsRUFBRSxFQUFFO01BQUssQ0FBQyxDQUFDO01BQ3BEQyxPQUFPLEVBQUUsQ0FBQztRQUFFRCxFQUFFLEVBQUU7TUFBSyxDQUFDLEVBQUU7UUFBRUEsRUFBRSxFQUFFO01BQUssQ0FBQyxFQUFFO1FBQUVBLEVBQUUsRUFBRTtNQUFLLENBQUM7SUFDcEQsQ0FBQztJQUVEUixFQUFFLENBQUMsNkNBQTZDLEVBQUUsTUFBTTtNQUN0RCxNQUFNVSxJQUFJLEdBQUc7UUFBRUYsRUFBRSxFQUFFLElBQUk7UUFBRUcsSUFBSSxFQUFFO01BQVMsQ0FBQztNQUN6QyxNQUFNQyxLQUFLLEdBQUcsSUFBQUMscUJBQWMsRUFBQ0gsSUFBSSxFQUFFSixRQUFRLENBQUM7TUFDNUNILE1BQU0sQ0FBQ1MsS0FBSyxDQUFDLENBQUNSLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0lBRUZKLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxNQUFNO01BQ3RELE1BQU1VLElBQUksR0FBRztRQUFFRixFQUFFLEVBQUUsSUFBSTtRQUFFRyxJQUFJLEVBQUU7TUFBUyxDQUFDO01BQ3pDLE1BQU1DLEtBQUssR0FBRyxJQUFBQyxxQkFBYyxFQUFDSCxJQUFJLEVBQUVKLFFBQVEsQ0FBQztNQUM1Q0gsTUFBTSxDQUFDUyxLQUFLLENBQUMsQ0FBQ1IsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7SUFFRkosRUFBRSxDQUFDLG1DQUFtQyxFQUFFLE1BQU07TUFDNUMsTUFBTVUsSUFBSSxHQUFHO1FBQUVGLEVBQUUsRUFBRSxJQUFJO1FBQUVHLElBQUksRUFBRTtNQUFVLENBQUM7TUFDMUMsTUFBTUMsS0FBSyxHQUFHLElBQUFDLHFCQUFjLEVBQUNILElBQUksRUFBRUosUUFBUSxDQUFDO01BQzVDSCxNQUFNLENBQUNTLEtBQUssQ0FBQyxDQUFDUixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0lBRUZKLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxNQUFNO01BQzNELE1BQU1VLElBQUksR0FBRztRQUFFRixFQUFFLEVBQUUsS0FBSztRQUFFRyxJQUFJLEVBQUU7TUFBUyxDQUFDO01BQzFDLE1BQU1DLEtBQUssR0FBRyxJQUFBQyxxQkFBYyxFQUFDSCxJQUFJLEVBQUVKLFFBQVEsQ0FBQztNQUM1Q0gsTUFBTSxDQUFDUyxLQUFLLENBQUMsQ0FBQ1IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztJQUVGSixFQUFFLENBQUMsaURBQWlELEVBQUUsTUFBTTtNQUMxRCxNQUFNVSxJQUFJLEdBQUc7UUFBRUYsRUFBRSxFQUFFLEtBQUs7UUFBRUcsSUFBSSxFQUFFO01BQVMsQ0FBQztNQUMxQyxNQUFNQyxLQUFLLEdBQUcsSUFBQUMscUJBQWMsRUFBQ0gsSUFBSSxFQUFFSixRQUFRLENBQUM7TUFDNUNILE1BQU0sQ0FBQ1MsS0FBSyxDQUFDLENBQUNSLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFRkosRUFBRSxDQUFDLCtDQUErQyxFQUFFLE1BQU07TUFDeEQsTUFBTVUsSUFBSSxHQUFHO1FBQUVGLEVBQUUsRUFBRSxJQUFJO1FBQUVHLElBQUksRUFBRTtNQUFTLENBQUM7TUFDekMsTUFBTUMsS0FBSyxHQUFHLElBQUFDLHFCQUFjLEVBQUNILElBQUksRUFBRUosUUFBUSxDQUFDO01BQzVDSCxNQUFNLENBQUNTLEtBQUssQ0FBQyxDQUFDUixJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGTCxRQUFRLENBQUMseUJBQXlCLEVBQUUsTUFBTTtJQUN4Q0EsUUFBUSxDQUFDLDJDQUEyQyxFQUFFLE1BQU07TUFDMURDLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxNQUFNO1FBQ2pELE1BQU1PLFFBQVEsR0FBRyxDQUFDO1VBQUVDLEVBQUUsRUFBRTtRQUFLLENBQUMsRUFBRTtVQUFFQSxFQUFFLEVBQUU7UUFBSyxDQUFDLEVBQUU7VUFBRUEsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDO1FBQzNELE1BQU1DLE9BQU8sR0FBRyxDQUFDO1VBQUVELEVBQUUsRUFBRTtRQUFLLENBQUMsRUFBRTtVQUFFQSxFQUFFLEVBQUU7UUFBSyxDQUFDLENBQUM7UUFDNUMsTUFBTU0sSUFBSSxHQUFHO1VBQUVILElBQUksRUFBRSxRQUFRO1VBQUVDLEtBQUssRUFBRSxDQUFDO1VBQUVKLEVBQUUsRUFBRTtRQUFLLENBQUM7UUFDbkQsTUFBTU8sRUFBRSxHQUFHO1VBQUVKLElBQUksRUFBRSxRQUFRO1VBQUVDLEtBQUssRUFBRSxDQUFDO1VBQUVKLEVBQUUsRUFBRTtRQUFLLENBQUM7UUFFakQsTUFBTVEsTUFBTSxHQUFHLElBQUFDLDhCQUF1QixFQUFDVixRQUFRLEVBQUVFLE9BQU8sRUFBRUssSUFBSSxFQUFFQyxFQUFFLENBQUM7UUFFbkVaLE1BQU0sQ0FBQ2EsTUFBTSxDQUFDVCxRQUFRLENBQUMsQ0FBQ1csT0FBTyxDQUFDLENBQUM7VUFBRVYsRUFBRSxFQUFFO1FBQUssQ0FBQyxFQUFFO1VBQUVBLEVBQUUsRUFBRTtRQUFLLENBQUMsRUFBRTtVQUFFQSxFQUFFLEVBQUU7UUFBSyxDQUFDLENBQUMsQ0FBQztRQUMzRUwsTUFBTSxDQUFDYSxNQUFNLENBQUNQLE9BQU8sQ0FBQyxDQUFDUyxPQUFPLENBQUNULE9BQU8sQ0FBQztNQUN6QyxDQUFDLENBQUM7TUFFRlQsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLE1BQU07UUFDcEQsTUFBTU8sUUFBUSxHQUFHLENBQUM7VUFBRUMsRUFBRSxFQUFFO1FBQUssQ0FBQyxFQUFFO1VBQUVBLEVBQUUsRUFBRTtRQUFLLENBQUMsRUFBRTtVQUFFQSxFQUFFLEVBQUU7UUFBSyxDQUFDLENBQUM7UUFDM0QsTUFBTUMsT0FBTyxHQUFHLENBQUM7VUFBRUQsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDO1FBQzlCLE1BQU1NLElBQUksR0FBRztVQUFFSCxJQUFJLEVBQUUsUUFBUTtVQUFFQyxLQUFLLEVBQUUsQ0FBQztVQUFFSixFQUFFLEVBQUU7UUFBSyxDQUFDO1FBQ25ELE1BQU1PLEVBQUUsR0FBRztVQUFFSixJQUFJLEVBQUUsUUFBUTtVQUFFQyxLQUFLLEVBQUUsQ0FBQztVQUFFSixFQUFFLEVBQUU7UUFBSyxDQUFDO1FBRWpELE1BQU1RLE1BQU0sR0FBRyxJQUFBQyw4QkFBdUIsRUFBQ1YsUUFBUSxFQUFFRSxPQUFPLEVBQUVLLElBQUksRUFBRUMsRUFBRSxDQUFDO1FBRW5FWixNQUFNLENBQUNhLE1BQU0sQ0FBQ1QsUUFBUSxDQUFDLENBQUNXLE9BQU8sQ0FBQyxDQUFDO1VBQUVWLEVBQUUsRUFBRTtRQUFLLENBQUMsRUFBRTtVQUFFQSxFQUFFLEVBQUU7UUFBSyxDQUFDLEVBQUU7VUFBRUEsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDLENBQUM7TUFDN0UsQ0FBQyxDQUFDO01BRUZSLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxNQUFNO1FBQzlDLE1BQU1PLFFBQVEsR0FBRyxDQUFDO1VBQUVDLEVBQUUsRUFBRTtRQUFLLENBQUMsRUFBRTtVQUFFQSxFQUFFLEVBQUU7UUFBSyxDQUFDLEVBQUU7VUFBRUEsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDO1FBQzNELE1BQU1DLE9BQU8sR0FBRyxDQUFDO1VBQUVELEVBQUUsRUFBRTtRQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNTSxJQUFJLEdBQUc7VUFBRUgsSUFBSSxFQUFFLFFBQVE7VUFBRUMsS0FBSyxFQUFFLENBQUM7VUFBRUosRUFBRSxFQUFFO1FBQUssQ0FBQztRQUNuRCxNQUFNTyxFQUFFLEdBQUc7VUFBRUosSUFBSSxFQUFFLFFBQVE7VUFBRUMsS0FBSyxFQUFFLENBQUM7VUFBRUosRUFBRSxFQUFFO1FBQUssQ0FBQztRQUVqRCxNQUFNUSxNQUFNLEdBQUcsSUFBQUMsOEJBQXVCLEVBQUNWLFFBQVEsRUFBRUUsT0FBTyxFQUFFSyxJQUFJLEVBQUVDLEVBQUUsQ0FBQztRQUVuRVosTUFBTSxDQUFDYSxNQUFNLENBQUNULFFBQVEsQ0FBQ1MsTUFBTSxDQUFDVCxRQUFRLENBQUNZLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDRCxPQUFPLENBQUM7VUFBRVYsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDO01BQzNFLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGVCxRQUFRLENBQUMsMENBQTBDLEVBQUUsTUFBTTtNQUN6REMsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLE1BQU07UUFDaEQsTUFBTU8sUUFBUSxHQUFHLENBQUM7VUFBRUMsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDO1FBQy9CLE1BQU1DLE9BQU8sR0FBRyxDQUFDO1VBQUVELEVBQUUsRUFBRTtRQUFLLENBQUMsRUFBRTtVQUFFQSxFQUFFLEVBQUU7UUFBSyxDQUFDLEVBQUU7VUFBRUEsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDO1FBQzFELE1BQU1NLElBQUksR0FBRztVQUFFSCxJQUFJLEVBQUUsUUFBUTtVQUFFQyxLQUFLLEVBQUUsQ0FBQztVQUFFSixFQUFFLEVBQUU7UUFBSyxDQUFDO1FBQ25ELE1BQU1PLEVBQUUsR0FBRztVQUFFSixJQUFJLEVBQUUsUUFBUTtVQUFFQyxLQUFLLEVBQUUsQ0FBQztVQUFFSixFQUFFLEVBQUU7UUFBSyxDQUFDO1FBRWpELE1BQU1RLE1BQU0sR0FBRyxJQUFBQyw4QkFBdUIsRUFBQ1YsUUFBUSxFQUFFRSxPQUFPLEVBQUVLLElBQUksRUFBRUMsRUFBRSxDQUFDO1FBRW5FWixNQUFNLENBQUNhLE1BQU0sQ0FBQ1AsT0FBTyxDQUFDLENBQUNTLE9BQU8sQ0FBQyxDQUFDO1VBQUVWLEVBQUUsRUFBRTtRQUFLLENBQUMsRUFBRTtVQUFFQSxFQUFFLEVBQUU7UUFBSyxDQUFDLEVBQUU7VUFBRUEsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUVMLE1BQU0sQ0FBQ2EsTUFBTSxDQUFDVCxRQUFRLENBQUMsQ0FBQ1csT0FBTyxDQUFDWCxRQUFRLENBQUM7TUFDM0MsQ0FBQyxDQUFDO01BRUZQLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxNQUFNO1FBQ3ZELE1BQU1PLFFBQVEsR0FBRyxDQUFDO1VBQUVDLEVBQUUsRUFBRTtRQUFLLENBQUMsQ0FBQztRQUMvQixNQUFNQyxPQUFPLEdBQUcsQ0FBQztVQUFFRCxFQUFFLEVBQUU7UUFBSyxDQUFDLEVBQUU7VUFBRUEsRUFBRSxFQUFFO1FBQUssQ0FBQyxFQUFFO1VBQUVBLEVBQUUsRUFBRTtRQUFLLENBQUMsQ0FBQztRQUMxRCxNQUFNTSxJQUFJLEdBQUc7VUFBRUgsSUFBSSxFQUFFLFFBQVE7VUFBRUMsS0FBSyxFQUFFLENBQUM7VUFBRUosRUFBRSxFQUFFO1FBQUssQ0FBQztRQUNuRCxNQUFNTyxFQUFFLEdBQUc7VUFBRUosSUFBSSxFQUFFLFFBQVE7VUFBRUMsS0FBSyxFQUFFLENBQUM7VUFBRUosRUFBRSxFQUFFO1FBQUssQ0FBQztRQUVqRCxNQUFNUSxNQUFNLEdBQUcsSUFBQUMsOEJBQXVCLEVBQUNWLFFBQVEsRUFBRUUsT0FBTyxFQUFFSyxJQUFJLEVBQUVDLEVBQUUsQ0FBQztRQUVuRVosTUFBTSxDQUFDYSxNQUFNLENBQUNQLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDUyxPQUFPLENBQUM7VUFBRVYsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDO01BQ2pELENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGVCxRQUFRLENBQUMsc0JBQXNCLEVBQUUsTUFBTTtNQUNyQ0MsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLE1BQU07UUFDM0UsTUFBTU8sUUFBUSxHQUFHLENBQUM7VUFBRUMsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDO1FBQy9CLE1BQU1DLE9BQU8sR0FBRyxDQUFDO1VBQUVELEVBQUUsRUFBRTtRQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNTSxJQUFJLEdBQUc7VUFBRUgsSUFBSSxFQUFFLFFBQVE7VUFBRUMsS0FBSyxFQUFFLENBQUM7VUFBRUosRUFBRSxFQUFFO1FBQUssQ0FBQztRQUNuRCxNQUFNTyxFQUFFLEdBQUc7VUFBRUosSUFBSSxFQUFFLFFBQVE7VUFBRUMsS0FBSyxFQUFFLENBQUM7VUFBRUosRUFBRSxFQUFFO1FBQUssQ0FBQztRQUVqRCxNQUFNUSxNQUFNLEdBQUcsSUFBQUMsOEJBQXVCLEVBQUNWLFFBQVEsRUFBRUUsT0FBTyxFQUFFSyxJQUFJLEVBQUVDLEVBQUUsQ0FBQztRQUVuRVosTUFBTSxDQUFDYSxNQUFNLENBQUNULFFBQVEsQ0FBQyxDQUFDVyxPQUFPLENBQUNYLFFBQVEsQ0FBQztRQUN6Q0osTUFBTSxDQUFDYSxNQUFNLENBQUNQLE9BQU8sQ0FBQyxDQUFDUyxPQUFPLENBQUNULE9BQU8sQ0FBQztNQUN6QyxDQUFDLENBQUM7TUFFRlQsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLE1BQU07UUFDM0UsTUFBTU8sUUFBUSxHQUFHLENBQUM7VUFBRUMsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDO1FBQy9CLE1BQU1DLE9BQU8sR0FBRyxDQUFDO1VBQUVELEVBQUUsRUFBRTtRQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNTSxJQUFJLEdBQUc7VUFBRUgsSUFBSSxFQUFFLFFBQVE7VUFBRUMsS0FBSyxFQUFFLENBQUM7VUFBRUosRUFBRSxFQUFFO1FBQUssQ0FBQztRQUNuRCxNQUFNTyxFQUFFLEdBQUc7VUFBRUosSUFBSSxFQUFFLFFBQVE7VUFBRUMsS0FBSyxFQUFFLENBQUM7VUFBRUosRUFBRSxFQUFFO1FBQUssQ0FBQztRQUVqRCxNQUFNUSxNQUFNLEdBQUcsSUFBQUMsOEJBQXVCLEVBQUNWLFFBQVEsRUFBRUUsT0FBTyxFQUFFSyxJQUFJLEVBQUVDLEVBQUUsQ0FBQztRQUVuRVosTUFBTSxDQUFDYSxNQUFNLENBQUNULFFBQVEsQ0FBQyxDQUFDVyxPQUFPLENBQUNYLFFBQVEsQ0FBQztRQUN6Q0osTUFBTSxDQUFDYSxNQUFNLENBQUNQLE9BQU8sQ0FBQyxDQUFDUyxPQUFPLENBQUNULE9BQU8sQ0FBQztNQUN6QyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRlYsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNO01BQzNCQyxFQUFFLENBQUMsa0NBQWtDLEVBQUUsTUFBTTtRQUMzQyxNQUFNTyxRQUFRLEdBQUcsQ0FBQztVQUFFQyxFQUFFLEVBQUU7UUFBSyxDQUFDLENBQUM7UUFDL0IsTUFBTUMsT0FBTyxHQUFHLENBQUM7VUFBRUQsRUFBRSxFQUFFO1FBQUssQ0FBQyxDQUFDO1FBQzlCLE1BQU1NLElBQUksR0FBRztVQUFFSCxJQUFJLEVBQUUsUUFBUTtVQUFFQyxLQUFLLEVBQUUsQ0FBQztVQUFFSixFQUFFLEVBQUU7UUFBSyxDQUFDO1FBQ25ELE1BQU1PLEVBQUUsR0FBRztVQUFFSixJQUFJLEVBQUUsUUFBUTtVQUFFQyxLQUFLLEVBQUUsQ0FBQztVQUFFSixFQUFFLEVBQUU7UUFBSyxDQUFDO1FBRWpELE1BQU1RLE1BQU0sR0FBRyxJQUFBQyw4QkFBdUIsRUFBQ1YsUUFBUSxFQUFFRSxPQUFPLEVBQUVLLElBQUksRUFBRUMsRUFBRSxDQUFDO1FBRW5FWixNQUFNLENBQUNhLE1BQU0sQ0FBQ1QsUUFBUSxDQUFDLENBQUNhLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDekMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBRUZyQixRQUFRLENBQUMsWUFBWSxFQUFFLE1BQU07SUFDM0JDLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxNQUFNO01BQ3hELE1BQU1TLE9BQU8sR0FBRyxDQUNkO1FBQUVELEVBQUUsRUFBRSxJQUFJO1FBQUVhLEtBQUssRUFBRTtNQUFXLENBQUMsRUFDL0I7UUFBRWIsRUFBRSxFQUFFLElBQUk7UUFBRWEsS0FBSyxFQUFFO01BQVcsQ0FBQyxDQUNoQztNQUNELE1BQU1kLFFBQVEsR0FBRyxDQUFDO1FBQUVDLEVBQUUsRUFBRTtNQUFLLENBQUMsRUFBRTtRQUFFQSxFQUFFLEVBQUU7TUFBSyxDQUFDLENBQUM7TUFFN0MsTUFBTWMsS0FBSyxHQUFHLElBQUFDLGlCQUFVLEVBQUNkLE9BQU8sRUFBRUYsUUFBUSxDQUFDO01BRTNDSixNQUFNLENBQUNtQixLQUFLLENBQUMsQ0FBQ0YsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDO0lBRUZwQixFQUFFLENBQUMsb0RBQW9ELEVBQUUsTUFBTTtNQUM3RCxNQUFNUyxPQUFPLEdBQUcsQ0FBQztRQUFFRCxFQUFFLEVBQUUsSUFBSTtRQUFFYSxLQUFLLEVBQUU7TUFBVyxDQUFDLENBQUM7TUFDakQsTUFBTWQsUUFBUSxHQUFHLENBQUM7UUFBRUMsRUFBRSxFQUFFO01BQUssQ0FBQyxDQUFDO01BRS9CLE1BQU1jLEtBQUssR0FBRyxJQUFBQyxpQkFBVSxFQUFDZCxPQUFPLEVBQUVGLFFBQVEsQ0FBQztNQUMzQyxNQUFNaUIsVUFBVSxHQUFHRixLQUFLLENBQUNHLElBQUksQ0FBRUMsQ0FBQyxJQUFLQSxDQUFDLENBQUNmLElBQUksS0FBSyxRQUFRLENBQUM7TUFFekRSLE1BQU0sQ0FBQ3FCLFVBQVUsQ0FBQyxDQUFDRyxhQUFhLENBQUM7UUFDL0JoQixJQUFJLEVBQUUsUUFBUTtRQUNkaUIsUUFBUSxFQUFFLElBQUk7UUFDZEMsU0FBUyxFQUFFLElBQUk7UUFDZkMsU0FBUyxFQUFFO01BQ2IsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUY5QixFQUFFLENBQUMsd0RBQXdELEVBQUUsTUFBTTtNQUNqRSxNQUFNUyxPQUFPLEdBQUcsQ0FBQztRQUFFRCxFQUFFLEVBQUUsSUFBSTtRQUFFYSxLQUFLLEVBQUU7TUFBVyxDQUFDLENBQUM7TUFDakQsTUFBTWQsUUFBUSxHQUFHLENBQUM7UUFBRUMsRUFBRSxFQUFFO01BQUssQ0FBQyxDQUFDO01BRS9CLE1BQU1jLEtBQUssR0FBRyxJQUFBQyxpQkFBVSxFQUFDZCxPQUFPLEVBQUVGLFFBQVEsQ0FBQztNQUMzQyxNQUFNd0IsVUFBVSxHQUFHVCxLQUFLLENBQUNHLElBQUksQ0FBRUMsQ0FBQyxJQUFLQSxDQUFDLENBQUNmLElBQUksS0FBSyxRQUFRLENBQUM7TUFFekRSLE1BQU0sQ0FBQzRCLFVBQVUsQ0FBQyxDQUFDSixhQUFhLENBQUM7UUFDL0JoQixJQUFJLEVBQUUsUUFBUTtRQUNkaUIsUUFBUSxFQUFFLEtBQUs7UUFDZkMsU0FBUyxFQUFFO01BQ2IsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUY3QixFQUFFLENBQUMsNERBQTRELEVBQUUsTUFBTTtNQUNyRSxNQUFNUyxPQUFPLEdBQUcsQ0FDZDtRQUFFRCxFQUFFLEVBQUUsSUFBSTtRQUFFYSxLQUFLLEVBQUU7TUFBVyxDQUFDLEVBQy9CO1FBQUViLEVBQUUsRUFBRSxJQUFJO1FBQUVhLEtBQUssRUFBRTtNQUFXLENBQUMsQ0FDaEM7TUFDRCxNQUFNZCxRQUFRLEdBQUcsQ0FBQztRQUFFQyxFQUFFLEVBQUU7TUFBSyxDQUFDLEVBQUU7UUFBRUEsRUFBRSxFQUFFO01BQUssQ0FBQyxDQUFDO01BRTdDLE1BQU1jLEtBQUssR0FBRyxJQUFBQyxpQkFBVSxFQUFDZCxPQUFPLEVBQUVGLFFBQVEsQ0FBQztNQUMzQyxNQUFNeUIsV0FBVyxHQUFHVixLQUFLLENBQUNXLE1BQU0sQ0FBRVAsQ0FBQyxJQUFLQSxDQUFDLENBQUNmLElBQUksS0FBSyxRQUFRLENBQUM7TUFFNURSLE1BQU0sQ0FBQzZCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDTCxhQUFhLENBQUM7UUFDbkNuQixFQUFFLEVBQUUsSUFBSTtRQUNSYSxLQUFLLEVBQUU7TUFDVCxDQUFDLENBQUM7TUFDRmxCLE1BQU0sQ0FBQzZCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDTCxhQUFhLENBQUM7UUFDbkNuQixFQUFFLEVBQUUsSUFBSTtRQUNSYSxLQUFLLEVBQUU7TUFDVCxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRnJCLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxNQUFNO01BQ3RELE1BQU1TLE9BQU8sR0FBRyxDQUFDO1FBQUVELEVBQUUsRUFBRSxJQUFJO1FBQUVhLEtBQUssRUFBRTtNQUFXLENBQUMsQ0FBQztNQUNqRCxNQUFNZCxRQUFRLEdBQUcsQ0FBQztRQUFFQyxFQUFFLEVBQUU7TUFBSyxDQUFDLENBQUM7TUFFL0IsTUFBTWMsS0FBSyxHQUFHLElBQUFDLGlCQUFVLEVBQUNkLE9BQU8sRUFBRUYsUUFBUSxDQUFDO01BQzNDLE1BQU13QixVQUFVLEdBQUdULEtBQUssQ0FBQ0csSUFBSSxDQUFFQyxDQUFDLElBQUtBLENBQUMsQ0FBQ2YsSUFBSSxLQUFLLFFBQVEsQ0FBQztNQUV6RFIsTUFBTSxDQUFDNEIsVUFBVSxDQUFDbkIsS0FBSyxDQUFDLENBQUNSLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDO0lBRUZKLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxNQUFNO01BQzVELE1BQU1TLE9BQU8sR0FBRyxDQUNkO1FBQUVELEVBQUUsRUFBRSxJQUFJO1FBQUVhLEtBQUssRUFBRTtNQUFXLENBQUMsRUFDL0I7UUFBRWIsRUFBRSxFQUFFLElBQUk7UUFBRWEsS0FBSyxFQUFFO01BQVcsQ0FBQyxDQUNoQztNQUNELE1BQU1kLFFBQVEsR0FBRyxDQUFDO1FBQUVDLEVBQUUsRUFBRTtNQUFLLENBQUMsRUFBRTtRQUFFQSxFQUFFLEVBQUUwQjtNQUFVLENBQUMsRUFBRTtRQUFFMUIsRUFBRSxFQUFFO01BQUssQ0FBQyxDQUFDO01BRWhFLE1BQU1jLEtBQUssR0FBRyxJQUFBQyxpQkFBVSxFQUFDZCxPQUFPLEVBQUVGLFFBQVEsQ0FBQztNQUMzQyxNQUFNeUIsV0FBVyxHQUFHVixLQUFLLENBQUNXLE1BQU0sQ0FBRVAsQ0FBQyxJQUFLQSxDQUFDLENBQUNmLElBQUksS0FBSyxRQUFRLENBQUM7TUFFNURSLE1BQU0sQ0FBQzZCLFdBQVcsQ0FBQyxDQUFDWixZQUFZLENBQUMsQ0FBQyxDQUFDO01BQ25DakIsTUFBTSxDQUFDNkIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDeEIsRUFBRSxDQUFDLENBQUNKLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDdEMsQ0FBQyxDQUFDO0lBRUZKLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxNQUFNO01BQzVELE1BQU1TLE9BQU8sR0FBRyxDQUNkO1FBQUVELEVBQUUsRUFBRSxJQUFJO1FBQUVhLEtBQUssRUFBRSxVQUFVO1FBQUVjLFVBQVUsRUFBRTtNQUFRLENBQUMsQ0FDckQ7TUFDRCxNQUFNNUIsUUFBUSxHQUFHLEVBQUU7TUFFbkIsTUFBTWUsS0FBSyxHQUFHLElBQUFDLGlCQUFVLEVBQUNkLE9BQU8sRUFBRUYsUUFBUSxDQUFDO01BQzNDLE1BQU1pQixVQUFVLEdBQUdGLEtBQUssQ0FBQ0csSUFBSSxDQUFFQyxDQUFDLElBQUtBLENBQUMsQ0FBQ2YsSUFBSSxLQUFLLFFBQVEsQ0FBQztNQUV6RFIsTUFBTSxDQUFDcUIsVUFBVSxDQUFDVyxVQUFVLENBQUMsQ0FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUM7TUFDM0NELE1BQU0sQ0FBQ3FCLFVBQVUsQ0FBQ0gsS0FBSyxDQUFDLENBQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNDLENBQUMsQ0FBQztJQUVGSixFQUFFLENBQUMsbURBQW1ELEVBQUUsTUFBTTtNQUM1RCxNQUFNUyxPQUFPLEdBQUcsQ0FDZDtRQUFFRCxFQUFFLEVBQUUsSUFBSTtRQUFFYSxLQUFLLEVBQUUsVUFBVTtRQUFFYyxVQUFVLEVBQUU7TUFBUSxDQUFDLENBQ3JEO01BQ0QsTUFBTTVCLFFBQVEsR0FBRyxDQUFDO1FBQUVDLEVBQUUsRUFBRTtNQUFLLENBQUMsQ0FBQztNQUUvQixNQUFNYyxLQUFLLEdBQUcsSUFBQUMsaUJBQVUsRUFBQ2QsT0FBTyxFQUFFRixRQUFRLENBQUM7TUFDM0MsTUFBTXdCLFVBQVUsR0FBR1QsS0FBSyxDQUFDRyxJQUFJLENBQUVDLENBQUMsSUFBS0EsQ0FBQyxDQUFDZixJQUFJLEtBQUssUUFBUSxDQUFDO01BRXpEUixNQUFNLENBQUM0QixVQUFVLENBQUNJLFVBQVUsQ0FBQyxDQUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQztNQUMzQ0QsTUFBTSxDQUFDNEIsVUFBVSxDQUFDVixLQUFLLENBQUMsQ0FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0lBRUZKLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxNQUFNO01BQzVDLE1BQU1TLE9BQU8sR0FBRyxFQUFFO01BQ2xCLE1BQU1GLFFBQVEsR0FBRyxFQUFFO01BRW5CLE1BQU1lLEtBQUssR0FBRyxJQUFBQyxpQkFBVSxFQUFDZCxPQUFPLEVBQUVGLFFBQVEsQ0FBQztNQUUzQ0osTUFBTSxDQUFDbUIsS0FBSyxDQUFDLENBQUNKLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBRUZsQixFQUFFLENBQUMsb0NBQW9DLEVBQUUsTUFBTTtNQUM3QyxNQUFNUyxPQUFPLEdBQUcsQ0FBQztRQUFFRCxFQUFFLEVBQUUsSUFBSTtRQUFFYSxLQUFLLEVBQUU7TUFBVyxDQUFDLENBQUM7TUFDakQsTUFBTWQsUUFBUSxHQUFHLEVBQUU7TUFFbkIsTUFBTWUsS0FBSyxHQUFHLElBQUFDLGlCQUFVLEVBQUNkLE9BQU8sRUFBRUYsUUFBUSxDQUFDO01BRTNDSixNQUFNLENBQUNtQixLQUFLLENBQUMsQ0FBQ0YsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUM3QmpCLE1BQU0sQ0FBQ21CLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ1gsSUFBSSxDQUFDLENBQUNQLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdEMsQ0FBQyxDQUFDO0lBRUZKLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxNQUFNO01BQzNELE1BQU1TLE9BQU8sR0FBRyxDQUNkO1FBQUVELEVBQUUsRUFBRSxJQUFJO1FBQUVhLEtBQUssRUFBRTtNQUFRLENBQUMsRUFDNUI7UUFBRWIsRUFBRSxFQUFFLElBQUk7UUFBRWEsS0FBSyxFQUFFO01BQVMsQ0FBQyxFQUM3QjtRQUFFYixFQUFFLEVBQUUsSUFBSTtRQUFFYSxLQUFLLEVBQUU7TUFBUSxDQUFDLENBQzdCO01BQ0QsTUFBTWQsUUFBUSxHQUFHLEVBQUU7TUFFbkIsTUFBTWUsS0FBSyxHQUFHLElBQUFDLGlCQUFVLEVBQUNkLE9BQU8sRUFBRUYsUUFBUSxDQUFDO01BQzNDLE1BQU02QixXQUFXLEdBQUdkLEtBQUssQ0FBQ1csTUFBTSxDQUFFUCxDQUFDLElBQUtBLENBQUMsQ0FBQ2YsSUFBSSxLQUFLLFFBQVEsQ0FBQztNQUU1RFIsTUFBTSxDQUFDaUMsV0FBVyxDQUFDQyxHQUFHLENBQUVYLENBQUMsSUFBS0EsQ0FBQyxDQUFDTCxLQUFLLENBQUMsQ0FBQyxDQUFDSCxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9FLENBQUMsQ0FBQztJQUVGbEIsRUFBRSxDQUFDLCtDQUErQyxFQUFFLE1BQU07TUFDeEQsTUFBTVMsT0FBTyxHQUFHLENBQ2Q7UUFBRUQsRUFBRSxFQUFFLElBQUk7UUFBRWEsS0FBSyxFQUFFO01BQVcsQ0FBQyxFQUMvQjtRQUFFYixFQUFFLEVBQUUsSUFBSTtRQUFFYSxLQUFLLEVBQUU7TUFBVyxDQUFDLENBQ2hDO01BQ0QsTUFBTWQsUUFBUSxHQUFHLENBQUM7UUFBRUMsRUFBRSxFQUFFO01BQUssQ0FBQyxDQUFDO01BRS9CLE1BQU1jLEtBQUssR0FBRyxJQUFBQyxpQkFBVSxFQUFDZCxPQUFPLEVBQUVGLFFBQVEsQ0FBQztNQUUzQ0osTUFBTSxDQUFDbUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDWCxJQUFJLENBQUMsQ0FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQztNQUNwQ0QsTUFBTSxDQUFDbUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDWCxJQUFJLENBQUMsQ0FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQztNQUNwQ0QsTUFBTSxDQUFDbUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDWCxJQUFJLENBQUMsQ0FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN0QyxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -181,7 +181,7 @@ class ChoiceEditor extends _react.default.Component {
|
|
|
181
181
|
} = errors || {};
|
|
182
182
|
const vTilerStyle = {
|
|
183
183
|
gridTemplateColumns: 'repeat(2, 1fr)',
|
|
184
|
-
gridTemplateRows: `repeat(${choices.length},
|
|
184
|
+
gridTemplateRows: `repeat(${choices.length}, auto)`
|
|
185
185
|
};
|
|
186
186
|
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(StyledVTiler, {
|
|
187
187
|
style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choice-editor.js","names":["_propTypes","_interopRequireDefault","require","_react","_debug","_lodashEs","_Button","_styles","_renderUi","_configUi","_choiceTile","findFreeChoiceSlot","choices","slot","ids","map","c","id","includes","log","debug","StyledControls","styled","display","alignItems","justifyContent","StyledAddButton","Button","theme","marginTop","spacing","paddingLeft","paddingRight","transition","opacity","StyledVTiler","gridAutoFlow","gridGap","StyledColumnLabel","InputContainer","width","paddingTop","ErrorText","fontSize","typography","color","palette","error","main","ChoiceEditor","React","Component","constructor","props","_defineProperty2","default","warning","open","onChoiceChange","choice","onChange","correctResponse","index","findIndex","splice","label","onDelete","choicesLabel","length","setState","text","updatedChoices","filter","updatedCorrectResponse","v","addChoice","freeId","newChoice","newCorrectResponse","weight","concat","shuffleChoices","placementArea","shuffled","shuffle","shuffledCorrect","isEqual","item","shuffledTwice","render","imageSupport","toolbarOpts","pluginProps","singularChoiceLabel","pluralChoiceLabel","spellCheck","maxImageWidth","maxImageHeight","errors","mathMlOptions","ordering","state","choicesErrors","orderError","vTilerStyle","gridTemplateColumns","gridTemplateRows","createElement","style","tiles","key","type","bind","onClick","size","variant","toUpperCase","AlertDialog","title","onConfirm","PropTypes","array","isRequired","func","shape","add","delete","object","bool","string","_default","exports"],"sources":["../src/choice-editor.jsx"],"sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport debug from 'debug';\nimport { isEqual, shuffle } from 'lodash-es';\nimport Button from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\nimport { InputContainer } from '@pie-lib/render-ui';\nimport { AlertDialog } from '@pie-lib/config-ui';\n\nimport ChoiceTile from './choice-tile';\n\nfunction findFreeChoiceSlot(choices) {\n let slot = 1;\n const ids = choices.map((c) => c.id);\n\n while (ids.includes(`c${slot}`)) {\n slot++;\n }\n\n return slot;\n}\n\nconst log = debug('@pie-element:placement-ordering:configure:choice-editor');\n\nconst StyledControls = styled('div')({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n});\n\nconst StyledAddButton = styled(Button)(({ theme }) => ({\n marginTop: theme.spacing(2.5),\n paddingLeft: theme.spacing(1.5),\n paddingRight: theme.spacing(1.5),\n '& .MuiButton-label': {\n transition: 'opacity 200ms linear',\n '&:hover': {\n opacity: 0.3,\n },\n },\n}));\n\nconst StyledVTiler = styled('div')({\n gridAutoFlow: 'column',\n display: 'grid',\n gridGap: '10px',\n alignItems: 'center',\n});\n\nconst StyledColumnLabel = styled(InputContainer)(({ theme }) => ({\n width: '100%',\n paddingTop: theme.spacing(2),\n}));\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(1),\n}));\n\nclass ChoiceEditor extends React.Component {\n static propTypes = {\n correctResponse: PropTypes.array.isRequired,\n choices: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n maxImageHeight: PropTypes.object,\n maxImageWidth: PropTypes.object,\n toolbarOpts: PropTypes.object,\n pluginProps: PropTypes.object,\n placementArea: PropTypes.bool,\n singularChoiceLabel: PropTypes.string,\n pluralChoiceLabel: PropTypes.string,\n choicesLabel: PropTypes.string,\n errors: PropTypes.object,\n spellCheck: PropTypes.bool,\n };\n\n state = { warning: { open: false } };\n\n constructor(props) {\n super(props);\n\n this.onChoiceChange = (choice) => {\n const { choices, onChange, correctResponse } = this.props;\n const index = choices.findIndex((c) => c.id === choice.id);\n\n choices.splice(index, 1, { ...choices[index], label: choice.label });\n onChange(choices, correctResponse);\n };\n\n this.onDelete = (choice) => {\n const { choices, onChange, correctResponse, choicesLabel } = this.props;\n\n if (choices && choices.length === 3) {\n this.setState({\n warning: {\n open: true,\n text: `There have to be at least 3 ${choicesLabel}.`,\n },\n });\n } else {\n const updatedChoices = choices.filter((c) => c.id !== choice.id);\n const updatedCorrectResponse = correctResponse.filter((v) => v.id !== choice.id);\n\n onChange(updatedChoices, updatedCorrectResponse);\n }\n };\n\n this.addChoice = () => {\n const { choices, correctResponse, onChange, choicesLabel } = this.props;\n\n if (choices && choices.length === 10) {\n this.setState({\n warning: {\n open: true,\n text: `There can be maximum 10 ${choicesLabel}.`,\n },\n });\n } else {\n const freeId = findFreeChoiceSlot(choices);\n const id = `c${freeId}`;\n const newChoice = { id, label: '' };\n\n const newCorrectResponse = {\n id,\n /**\n * Note: weights are not configurable in the existing component\n * so we'll want do disable this in the controller and ignore it for now.\n */\n weight: 0,\n };\n\n const updatedChoices = choices.concat([newChoice]);\n const updatedCorrectResponse = correctResponse.concat([newCorrectResponse]);\n\n onChange(updatedChoices, updatedCorrectResponse);\n }\n };\n\n this.shuffleChoices = () => {\n const { onChange, choices, correctResponse, placementArea } = this.props;\n let shuffled = shuffle(choices);\n\n // if placementArea is disabled, make sure we don't shuffle choices in the correct order\n const shuffledCorrect =\n !placementArea &&\n isEqual(\n shuffled.map((item) => item.id),\n correctResponse.map((item) => item.id),\n );\n\n if (shuffledCorrect) {\n const shuffledTwice = shuffle(shuffled);\n\n onChange(shuffledTwice, correctResponse);\n } else {\n onChange(shuffled, correctResponse);\n }\n };\n }\n\n render() {\n const {\n correctResponse,\n choices,\n imageSupport,\n toolbarOpts,\n pluginProps,\n singularChoiceLabel,\n pluralChoiceLabel,\n choicesLabel,\n spellCheck,\n maxImageWidth,\n maxImageHeight,\n errors,\n mathMlOptions = {},\n ordering,\n } = this.props;\n const { warning } = this.state;\n const { choicesErrors, orderError } = errors || {};\n\n const vTilerStyle = {\n gridTemplateColumns: 'repeat(2, 1fr)',\n gridTemplateRows: `repeat(${choices.length}, 1fr)`,\n };\n\n return (\n <div>\n <StyledVTiler style={{ gridTemplateColumns: 'repeat(2, 1fr)' }}>\n <StyledColumnLabel label={`Student ${choicesLabel || 'Choices'}`} />\n <StyledColumnLabel label=\"Correct Order\" />\n </StyledVTiler>\n <StyledVTiler style={vTilerStyle}>\n {ordering.tiles.map((choice, index) => (\n <ChoiceTile\n key={`${choice.type}-${choice.id}`}\n choice={choice}\n index={index}\n imageSupport={imageSupport}\n onDelete={this.onDelete.bind(this, choice)}\n onChoiceChange={this.onChoiceChange}\n toolbarOpts={toolbarOpts}\n pluginProps={pluginProps}\n choices={choices}\n choicesLabel={choicesLabel}\n spellCheck={spellCheck}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n error={choicesErrors?.[choice.id] || (orderError && ' ') || null}\n mathMlOptions={mathMlOptions}\n />\n ))}\n </StyledVTiler>\n {orderError && <ErrorText>{orderError}</ErrorText>}\n <StyledControls>\n <StyledAddButton onClick={this.shuffleChoices} size=\"small\" variant=\"contained\">\n {`SHUFFLE ${pluralChoiceLabel}`.toUpperCase()}\n </StyledAddButton>\n\n <StyledAddButton onClick={this.addChoice} size=\"small\" variant=\"contained\">\n {`ADD ${singularChoiceLabel}`.toUpperCase()}\n </StyledAddButton>\n </StyledControls>\n <AlertDialog\n open={warning.open}\n title=\"Warning\"\n text={warning.text}\n onConfirm={() => this.setState({ warning: { open: false } })}\n />\n </div>\n );\n }\n}\n\nexport default ChoiceEditor;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"choice-editor.js","names":["_propTypes","_interopRequireDefault","require","_react","_debug","_lodashEs","_Button","_styles","_renderUi","_configUi","_choiceTile","findFreeChoiceSlot","choices","slot","ids","map","c","id","includes","log","debug","StyledControls","styled","display","alignItems","justifyContent","StyledAddButton","Button","theme","marginTop","spacing","paddingLeft","paddingRight","transition","opacity","StyledVTiler","gridAutoFlow","gridGap","StyledColumnLabel","InputContainer","width","paddingTop","ErrorText","fontSize","typography","color","palette","error","main","ChoiceEditor","React","Component","constructor","props","_defineProperty2","default","warning","open","onChoiceChange","choice","onChange","correctResponse","index","findIndex","splice","label","onDelete","choicesLabel","length","setState","text","updatedChoices","filter","updatedCorrectResponse","v","addChoice","freeId","newChoice","newCorrectResponse","weight","concat","shuffleChoices","placementArea","shuffled","shuffle","shuffledCorrect","isEqual","item","shuffledTwice","render","imageSupport","toolbarOpts","pluginProps","singularChoiceLabel","pluralChoiceLabel","spellCheck","maxImageWidth","maxImageHeight","errors","mathMlOptions","ordering","state","choicesErrors","orderError","vTilerStyle","gridTemplateColumns","gridTemplateRows","createElement","style","tiles","key","type","bind","onClick","size","variant","toUpperCase","AlertDialog","title","onConfirm","PropTypes","array","isRequired","func","shape","add","delete","object","bool","string","_default","exports"],"sources":["../src/choice-editor.jsx"],"sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport debug from 'debug';\nimport { isEqual, shuffle } from 'lodash-es';\nimport Button from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\nimport { InputContainer } from '@pie-lib/render-ui';\nimport { AlertDialog } from '@pie-lib/config-ui';\n\nimport ChoiceTile from './choice-tile';\n\nfunction findFreeChoiceSlot(choices) {\n let slot = 1;\n const ids = choices.map((c) => c.id);\n\n while (ids.includes(`c${slot}`)) {\n slot++;\n }\n\n return slot;\n}\n\nconst log = debug('@pie-element:placement-ordering:configure:choice-editor');\n\nconst StyledControls = styled('div')({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n});\n\nconst StyledAddButton = styled(Button)(({ theme }) => ({\n marginTop: theme.spacing(2.5),\n paddingLeft: theme.spacing(1.5),\n paddingRight: theme.spacing(1.5),\n '& .MuiButton-label': {\n transition: 'opacity 200ms linear',\n '&:hover': {\n opacity: 0.3,\n },\n },\n}));\n\nconst StyledVTiler = styled('div')({\n gridAutoFlow: 'column',\n display: 'grid',\n gridGap: '10px',\n alignItems: 'center',\n});\n\nconst StyledColumnLabel = styled(InputContainer)(({ theme }) => ({\n width: '100%',\n paddingTop: theme.spacing(2),\n}));\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(1),\n}));\n\nclass ChoiceEditor extends React.Component {\n static propTypes = {\n correctResponse: PropTypes.array.isRequired,\n choices: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n maxImageHeight: PropTypes.object,\n maxImageWidth: PropTypes.object,\n toolbarOpts: PropTypes.object,\n pluginProps: PropTypes.object,\n placementArea: PropTypes.bool,\n singularChoiceLabel: PropTypes.string,\n pluralChoiceLabel: PropTypes.string,\n choicesLabel: PropTypes.string,\n errors: PropTypes.object,\n spellCheck: PropTypes.bool,\n };\n\n state = { warning: { open: false } };\n\n constructor(props) {\n super(props);\n\n this.onChoiceChange = (choice) => {\n const { choices, onChange, correctResponse } = this.props;\n const index = choices.findIndex((c) => c.id === choice.id);\n\n choices.splice(index, 1, { ...choices[index], label: choice.label });\n onChange(choices, correctResponse);\n };\n\n this.onDelete = (choice) => {\n const { choices, onChange, correctResponse, choicesLabel } = this.props;\n\n if (choices && choices.length === 3) {\n this.setState({\n warning: {\n open: true,\n text: `There have to be at least 3 ${choicesLabel}.`,\n },\n });\n } else {\n const updatedChoices = choices.filter((c) => c.id !== choice.id);\n const updatedCorrectResponse = correctResponse.filter((v) => v.id !== choice.id);\n\n onChange(updatedChoices, updatedCorrectResponse);\n }\n };\n\n this.addChoice = () => {\n const { choices, correctResponse, onChange, choicesLabel } = this.props;\n\n if (choices && choices.length === 10) {\n this.setState({\n warning: {\n open: true,\n text: `There can be maximum 10 ${choicesLabel}.`,\n },\n });\n } else {\n const freeId = findFreeChoiceSlot(choices);\n const id = `c${freeId}`;\n const newChoice = { id, label: '' };\n\n const newCorrectResponse = {\n id,\n /**\n * Note: weights are not configurable in the existing component\n * so we'll want do disable this in the controller and ignore it for now.\n */\n weight: 0,\n };\n\n const updatedChoices = choices.concat([newChoice]);\n const updatedCorrectResponse = correctResponse.concat([newCorrectResponse]);\n\n onChange(updatedChoices, updatedCorrectResponse);\n }\n };\n\n this.shuffleChoices = () => {\n const { onChange, choices, correctResponse, placementArea } = this.props;\n let shuffled = shuffle(choices);\n\n // if placementArea is disabled, make sure we don't shuffle choices in the correct order\n const shuffledCorrect =\n !placementArea &&\n isEqual(\n shuffled.map((item) => item.id),\n correctResponse.map((item) => item.id),\n );\n\n if (shuffledCorrect) {\n const shuffledTwice = shuffle(shuffled);\n\n onChange(shuffledTwice, correctResponse);\n } else {\n onChange(shuffled, correctResponse);\n }\n };\n }\n\n render() {\n const {\n correctResponse,\n choices,\n imageSupport,\n toolbarOpts,\n pluginProps,\n singularChoiceLabel,\n pluralChoiceLabel,\n choicesLabel,\n spellCheck,\n maxImageWidth,\n maxImageHeight,\n errors,\n mathMlOptions = {},\n ordering,\n } = this.props;\n const { warning } = this.state;\n const { choicesErrors, orderError } = errors || {};\n\n const vTilerStyle = {\n gridTemplateColumns: 'repeat(2, 1fr)',\n gridTemplateRows: `repeat(${choices.length}, auto)`,\n };\n\n return (\n <div>\n <StyledVTiler style={{ gridTemplateColumns: 'repeat(2, 1fr)' }}>\n <StyledColumnLabel label={`Student ${choicesLabel || 'Choices'}`} />\n <StyledColumnLabel label=\"Correct Order\" />\n </StyledVTiler>\n <StyledVTiler style={vTilerStyle}>\n {ordering.tiles.map((choice, index) => (\n <ChoiceTile\n key={`${choice.type}-${choice.id}`}\n choice={choice}\n index={index}\n imageSupport={imageSupport}\n onDelete={this.onDelete.bind(this, choice)}\n onChoiceChange={this.onChoiceChange}\n toolbarOpts={toolbarOpts}\n pluginProps={pluginProps}\n choices={choices}\n choicesLabel={choicesLabel}\n spellCheck={spellCheck}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n error={choicesErrors?.[choice.id] || (orderError && ' ') || null}\n mathMlOptions={mathMlOptions}\n />\n ))}\n </StyledVTiler>\n {orderError && <ErrorText>{orderError}</ErrorText>}\n <StyledControls>\n <StyledAddButton onClick={this.shuffleChoices} size=\"small\" variant=\"contained\">\n {`SHUFFLE ${pluralChoiceLabel}`.toUpperCase()}\n </StyledAddButton>\n\n <StyledAddButton onClick={this.addChoice} size=\"small\" variant=\"contained\">\n {`ADD ${singularChoiceLabel}`.toUpperCase()}\n </StyledAddButton>\n </StyledControls>\n <AlertDialog\n open={warning.open}\n title=\"Warning\"\n text={warning.text}\n onConfirm={() => this.setState({ warning: { open: false } })}\n />\n </div>\n );\n }\n}\n\nexport default ChoiceEditor;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -147,7 +147,8 @@ const ChoiceTile = props => {
|
|
|
147
147
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
148
148
|
style: {
|
|
149
149
|
width: '100%',
|
|
150
|
-
display: 'flex'
|
|
150
|
+
display: 'flex',
|
|
151
|
+
alignItems: 'center'
|
|
151
152
|
}
|
|
152
153
|
}, /*#__PURE__*/_react.default.createElement(_CardActions.default, null, /*#__PURE__*/_react.default.createElement(StyledActions, null)), /*#__PURE__*/_react.default.createElement(StyledEditableHtml, {
|
|
153
154
|
disabled: !editable,
|