@pie-element/multiple-choice 13.3.5-ng.0 → 13.4.0-beta.0

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.
Files changed (133) hide show
  1. package/CHANGELOG.json +1972 -0
  2. package/CHANGELOG.md +2741 -0
  3. package/LICENSE.md +5 -0
  4. package/PRINT.md +35 -0
  5. package/README.md +56 -0
  6. package/choice.png +0 -0
  7. package/configure/CHANGELOG.json +1387 -0
  8. package/configure/CHANGELOG.md +2081 -0
  9. package/configure/lib/__tests__/root.test.js +279 -0
  10. package/configure/lib/defaults.js +203 -0
  11. package/configure/lib/defaults.js.map +1 -0
  12. package/configure/lib/index.js +203 -0
  13. package/configure/lib/index.js.map +1 -0
  14. package/configure/lib/main.js +484 -0
  15. package/configure/lib/main.js.map +1 -0
  16. package/configure/lib/utils.js +18 -0
  17. package/configure/lib/utils.js.map +1 -0
  18. package/configure/package.json +22 -0
  19. package/controller/CHANGELOG.json +527 -0
  20. package/controller/CHANGELOG.md +1412 -0
  21. package/controller/lib/__tests__/index.test.js +561 -0
  22. package/controller/lib/__tests__/utils.test.js +8 -0
  23. package/controller/lib/defaults.js +33 -0
  24. package/controller/lib/defaults.js.map +1 -0
  25. package/controller/lib/index.js +298 -0
  26. package/controller/lib/index.js.map +1 -0
  27. package/controller/lib/utils.js +15 -0
  28. package/controller/lib/utils.js.map +1 -0
  29. package/controller/package.json +15 -0
  30. package/docs/config-schema.json +2993 -0
  31. package/docs/config-schema.json.md +2217 -0
  32. package/docs/demo/config.js +8 -0
  33. package/docs/demo/generate.js +61 -0
  34. package/docs/demo/index.html +1 -0
  35. package/docs/demo/pie.manifest.json +11 -0
  36. package/docs/demo/session.js +7 -0
  37. package/docs/pie-schema.json +1332 -0
  38. package/docs/pie-schema.json.md +1015 -0
  39. package/lib/__tests__/choice-input-test.js +49 -0
  40. package/lib/__tests__/choice-input.test.js +49 -0
  41. package/lib/__tests__/index-test.js +206 -0
  42. package/lib/__tests__/index.test.js +221 -0
  43. package/lib/__tests__/key-events-test.js +95 -0
  44. package/lib/__tests__/key-events.test.js +107 -0
  45. package/lib/__tests__/multiple-choice-test.js +101 -0
  46. package/lib/__tests__/multiple-choice.test.js +256 -0
  47. package/lib/__tests__/session-updater-test.js +70 -0
  48. package/lib/__tests__/session-updater.test.js +70 -0
  49. package/lib/choice-input.js +383 -0
  50. package/lib/choice-input.js.map +1 -0
  51. package/lib/choice.js +192 -0
  52. package/lib/choice.js.map +1 -0
  53. package/lib/feedback-tick.js +134 -0
  54. package/lib/feedback-tick.js.map +1 -0
  55. package/lib/index.js +405 -0
  56. package/lib/index.js.map +1 -0
  57. package/lib/main.js +63 -0
  58. package/lib/main.js.map +1 -0
  59. package/lib/multiple-choice.js +399 -0
  60. package/lib/multiple-choice.js.map +1 -0
  61. package/lib/print.js +94 -0
  62. package/lib/print.js.map +1 -0
  63. package/lib/session-updater.js +37 -0
  64. package/lib/session-updater.js.map +1 -0
  65. package/lib/utils.js +14 -0
  66. package/lib/utils.js.map +1 -0
  67. package/module/configure.js +1 -0
  68. package/module/controller.js +3045 -0
  69. package/module/demo.js +86 -0
  70. package/module/element.js +1 -0
  71. package/module/index.html +21 -0
  72. package/module/manifest.json +14 -0
  73. package/module/print-demo.js +124 -0
  74. package/module/print.html +18 -0
  75. package/module/print.js +1 -17945
  76. package/package.json +28 -94
  77. package/configure.js +0 -2
  78. package/controller.js +0 -1
  79. package/dist/author/defaults.d.ts +0 -205
  80. package/dist/author/defaults.js +0 -151
  81. package/dist/author/index.d.ts +0 -26
  82. package/dist/author/index.js +0 -119
  83. package/dist/author/main.d.ts +0 -34
  84. package/dist/author/main.js +0 -287
  85. package/dist/author/utils.d.ts +0 -9
  86. package/dist/author/utils.js +0 -7
  87. package/dist/browser/Radio-Bbu0BH_k.js +0 -9581
  88. package/dist/browser/Radio-Bbu0BH_k.js.map +0 -1
  89. package/dist/browser/author/index.js +0 -37436
  90. package/dist/browser/author/index.js.map +0 -1
  91. package/dist/browser/controller/index.js +0 -204
  92. package/dist/browser/controller/index.js.map +0 -1
  93. package/dist/browser/delivery/index.js +0 -251
  94. package/dist/browser/delivery/index.js.map +0 -1
  95. package/dist/browser/dist-CHbLnyuX.js +0 -111
  96. package/dist/browser/dist-CHbLnyuX.js.map +0 -1
  97. package/dist/browser/main-DahQxQZC.js +0 -2451
  98. package/dist/browser/main-DahQxQZC.js.map +0 -1
  99. package/dist/browser/multiple-choice.css +0 -2
  100. package/dist/browser/print/index.js +0 -43
  101. package/dist/browser/print/index.js.map +0 -1
  102. package/dist/controller/defaults.d.ts +0 -35
  103. package/dist/controller/defaults.js +0 -29
  104. package/dist/controller/index.d.ts +0 -65
  105. package/dist/controller/index.js +0 -129
  106. package/dist/controller/utils.d.ts +0 -10
  107. package/dist/controller/utils.js +0 -8
  108. package/dist/delivery/choice-input.d.ts +0 -44
  109. package/dist/delivery/choice-input.js +0 -280
  110. package/dist/delivery/choice.d.ts +0 -20
  111. package/dist/delivery/choice.js +0 -105
  112. package/dist/delivery/feedback-tick.d.ts +0 -20
  113. package/dist/delivery/feedback-tick.js +0 -104
  114. package/dist/delivery/index.d.ts +0 -37
  115. package/dist/delivery/index.js +0 -215
  116. package/dist/delivery/main.d.ts +0 -31
  117. package/dist/delivery/main.js +0 -51
  118. package/dist/delivery/multiple-choice.d.ts +0 -61
  119. package/dist/delivery/multiple-choice.js +0 -245
  120. package/dist/delivery/session-updater.d.ts +0 -10
  121. package/dist/delivery/session-updater.js +0 -9
  122. package/dist/delivery/utils.d.ts +0 -10
  123. package/dist/delivery/utils.js +0 -4
  124. package/dist/index.d.ts +0 -1
  125. package/dist/index.iife.d.ts +0 -8
  126. package/dist/index.iife.js +0 -148
  127. package/dist/index.js +0 -2
  128. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +0 -16
  129. package/dist/print/index.d.ts +0 -15
  130. package/dist/print/index.js +0 -43
  131. package/dist/runtime-support.d.ts +0 -12
  132. package/dist/runtime-support.js +0 -12
  133. package/module/print.js.map +0 -1
package/lib/index.js ADDED
@@ -0,0 +1,405 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.isComplete = exports.default = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _main = _interopRequireDefault(require("./main"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _client = require("react-dom/client");
12
+ var _lodashEs = require("lodash-es");
13
+ var _debug = _interopRequireDefault(require("debug"));
14
+ var _piePlayerEvents = require("@pie-framework/pie-player-events");
15
+ var _mathRendering = require("@pie-lib/math-rendering");
16
+ var _renderUi = require("@pie-lib/render-ui");
17
+ var _sessionUpdater = require("./session-updater");
18
+ var _utils = require("./utils");
19
+ const log = (0, _debug.default)('pie-ui:multiple-choice');
20
+ const isComplete = (session, model, audioComplete, elementContext) => {
21
+ const {
22
+ autoplayAudioEnabled,
23
+ completeAudioEnabled
24
+ } = model || {};
25
+
26
+ // check audio completion if audio settings are enabled and audio actually exists
27
+ if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {
28
+ if (elementContext) {
29
+ const audio = elementContext.querySelector('audio');
30
+ const isInsidePrompt = audio && audio.closest('#preview-prompt');
31
+
32
+ // only require audio completion if audio exists and is inside the prompt
33
+ if (audio && isInsidePrompt) {
34
+ return false;
35
+ }
36
+ }
37
+ }
38
+ if (!session || !session.value) {
39
+ return false;
40
+ }
41
+ const {
42
+ choiceMode,
43
+ minSelections = 1,
44
+ maxSelections
45
+ } = model || {};
46
+ const selections = session.value.length || 0;
47
+ if (choiceMode === 'radio') {
48
+ return !!selections;
49
+ }
50
+ if (selections < minSelections || (0, _utils.exceedsMaxSelections)(selections, maxSelections)) {
51
+ return false;
52
+ }
53
+ return true;
54
+ };
55
+ exports.isComplete = isComplete;
56
+ function getPlayerAttributes(element) {
57
+ const player = element.closest('pie-player') || element.closest('pie-item-player');
58
+ if (!player) {
59
+ return {
60
+ baseHeadingLevel: undefined,
61
+ includeSrHeading: true
62
+ };
63
+ }
64
+ const getRaw = (camelCaseName, hyphenatedName, allLowerName) => {
65
+ let raw = player[camelCaseName];
66
+
67
+ // fallback in case someone sets via HTML attribute manually
68
+ if (raw == null) {
69
+ raw = player.getAttribute(hyphenatedName) ?? player.getAttribute(allLowerName);
70
+ }
71
+ return raw;
72
+ };
73
+ const levelRaw = getRaw('baseHeadingLevel', 'base-heading-level', 'baseheadinglevel');
74
+ const level = parseInt(levelRaw, 10);
75
+ const baseHeadingLevel = Number.isFinite(level) && level >= 1 && level <= 6 ? level : undefined;
76
+ const srRaw = getRaw('includeSrHeading', 'include-sr-heading', 'includesrheading');
77
+ const includeSrHeading = srRaw == null ? true : srRaw !== false && srRaw !== 'false';
78
+ return {
79
+ baseHeadingLevel,
80
+ includeSrHeading
81
+ };
82
+ }
83
+
84
+ // Resolves heading attributes for a custom element, preferring explicit instance
85
+ // properties (set by a parent element such as EBSR) over player-level attributes.
86
+ function resolveHeadingProps(element) {
87
+ const fromPlayer = getPlayerAttributes(element);
88
+ return {
89
+ baseHeadingLevel: element._baseHeadingLevel !== undefined ? element._baseHeadingLevel : fromPlayer.baseHeadingLevel,
90
+ includeSrHeading: element._includeSrHeading !== undefined ? element._includeSrHeading : fromPlayer.includeSrHeading
91
+ };
92
+ }
93
+ class MultipleChoice extends HTMLElement {
94
+ constructor() {
95
+ super();
96
+ (0, _defineProperty2.default)(this, "_scheduleMathRender", () => {
97
+ if (this._mathRenderPending) return;
98
+ this._mathRenderPending = true;
99
+ requestAnimationFrame(() => {
100
+ if (this._mathObserver) {
101
+ this._mathObserver.disconnect();
102
+ }
103
+ log('render complete - render math');
104
+ (0, _mathRendering.renderMath)(this);
105
+ this._mathRenderPending = false;
106
+ setTimeout(() => {
107
+ if (this._mathObserver) {
108
+ this._mathObserver.observe(this, {
109
+ childList: true,
110
+ subtree: true
111
+ });
112
+ }
113
+ }, 50);
114
+ });
115
+ });
116
+ this._model = null;
117
+ this._session = null;
118
+ this._options = null; // added for ebsr print mode detection
119
+ this.audioComplete = false;
120
+ this._boundHandleKeyDown = this.handleKeyDown.bind(this);
121
+ this._keyboardEventsEnabled = false;
122
+ this._audioInitialized = false;
123
+ this._root = null;
124
+ this._mathObserver = null;
125
+ this._mathRenderPending = false;
126
+ this._rerender = (0, _lodashEs.debounce)(() => {
127
+ if (this._model && this._session) {
128
+ var element = /*#__PURE__*/_react.default.createElement(_main.default, {
129
+ model: this._model,
130
+ session: this._session,
131
+ options: this._options,
132
+ onChoiceChanged: this._onChange.bind(this),
133
+ onShowCorrectToggle: this.onShowCorrectToggle.bind(this),
134
+ ...resolveHeadingProps(this)
135
+ });
136
+
137
+ //TODO: aria-label is set in the _rerender because we need to change it when the model.choiceMode is updated. Consider revisiting the placement of the aria-label setting in the _rerender
138
+ this.setAttribute('aria-label', this._model.choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Correct Answer Question');
139
+ this.setAttribute('role', 'region');
140
+ this.setLangAttribute();
141
+ this._initMathObserver();
142
+ if (!this._root) {
143
+ this._root = (0, _client.createRoot)(this);
144
+ }
145
+ this._root.render(element);
146
+ if (this._model.keyboardEventsEnabled === true && !this._keyboardEventsEnabled) {
147
+ this.enableKeyboardEvents();
148
+ }
149
+ } else {
150
+ log('skip');
151
+ }
152
+ }, 50, {
153
+ leading: false,
154
+ trailing: true
155
+ });
156
+ this._dispatchResponseChanged = (0, _lodashEs.debounce)(() => {
157
+ this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model, this.audioComplete, this)));
158
+ });
159
+ this._dispatchModelSet = (0, _lodashEs.debounce)(() => {
160
+ this.dispatchEvent(new _piePlayerEvents.ModelSetEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model, this.audioComplete, this), this._model !== undefined));
161
+ }, 50, {
162
+ leading: false,
163
+ trailing: true
164
+ });
165
+ }
166
+ _initMathObserver() {
167
+ if (this._mathObserver) return;
168
+ this._mathObserver = new MutationObserver(this._scheduleMathRender);
169
+ this._mathObserver.observe(this, {
170
+ childList: true,
171
+ subtree: true
172
+ });
173
+ }
174
+ _disconnectMathObserver() {
175
+ if (this._mathObserver) {
176
+ this._mathObserver.disconnect();
177
+ this._mathObserver = null;
178
+ }
179
+ }
180
+ onShowCorrectToggle() {
181
+ (0, _mathRendering.renderMath)(this);
182
+ }
183
+ setLangAttribute() {
184
+ const language = this._model && typeof this._model.language ? this._model.language : '';
185
+ const lang = language ? language.slice(0, 2) : 'en';
186
+ this.setAttribute('lang', lang);
187
+ }
188
+ set model(s) {
189
+ this._model = s;
190
+ this._rerender();
191
+ // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio
192
+ this._audioInitialized = false;
193
+ this._dispatchModelSet();
194
+ }
195
+ get session() {
196
+ return this._session;
197
+ }
198
+ get options() {
199
+ return this._options;
200
+ }
201
+ set options(o) {
202
+ this._options = o;
203
+ this._rerender();
204
+ }
205
+ set baseHeadingLevel(level) {
206
+ this._baseHeadingLevel = level;
207
+ this._rerender();
208
+ }
209
+ set includeSrHeading(value) {
210
+ this._includeSrHeading = value;
211
+ this._rerender();
212
+ }
213
+ set session(s) {
214
+ this._session = s;
215
+ this._rerender();
216
+ //TODO: remove this session-changed should only be emit on user change
217
+ this._dispatchResponseChanged();
218
+ }
219
+ _onChange(data) {
220
+ (0, _sessionUpdater.updateSessionValue)(this._session, this._model.choiceMode, data);
221
+ this._dispatchResponseChanged();
222
+ this._rerender();
223
+ }
224
+ _createAudioInfoToast() {
225
+ const info = document.createElement('div');
226
+ info.id = 'play-audio-info';
227
+ Object.assign(info.style, {
228
+ position: 'absolute',
229
+ top: 0,
230
+ width: '100%',
231
+ height: '100%',
232
+ display: 'flex',
233
+ justifyContent: 'center',
234
+ alignItems: 'center',
235
+ background: 'white',
236
+ zIndex: '1000',
237
+ cursor: 'pointer'
238
+ });
239
+ const img = document.createElement('img');
240
+ img.src = _renderUi.EnableAudioAutoplayImage;
241
+ img.alt = 'Click anywhere to enable audio autoplay';
242
+ img.width = 500;
243
+ img.height = 300;
244
+ info.appendChild(img);
245
+ return info;
246
+ }
247
+ connectedCallback() {
248
+ this._initMathObserver();
249
+ this._initPlayerObserver();
250
+ this._rerender();
251
+
252
+ // Observation: audio in Chrome will have the autoplay attribute,
253
+ // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio
254
+ // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox
255
+ const observer = new MutationObserver((mutationsList, observer) => {
256
+ mutationsList.forEach(mutation => {
257
+ if (mutation.type === 'childList') {
258
+ if (this._audioInitialized) return;
259
+ const audio = this.querySelector('audio');
260
+ const isInsidePrompt = audio && audio.closest('#preview-prompt');
261
+ if (!this._model) return;
262
+ if (!this._model.autoplayAudioEnabled) return;
263
+ if (audio && !isInsidePrompt) return;
264
+ if (!audio) return;
265
+ const info = this._createAudioInfoToast();
266
+ const container = this.querySelector('#main-container');
267
+ const enableAudio = () => {
268
+ if (this.querySelector('#play-audio-info')) {
269
+ audio.play();
270
+ container.removeChild(info);
271
+ }
272
+ document.removeEventListener('click', enableAudio);
273
+ };
274
+
275
+ // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play
276
+ // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked
277
+ setTimeout(() => {
278
+ if (audio.paused && !this.querySelector('#play-audio-info')) {
279
+ // add info message as a toast to enable audio playback
280
+ container.appendChild(info);
281
+ document.addEventListener('click', enableAudio);
282
+ } else {
283
+ document.removeEventListener('click', enableAudio);
284
+ }
285
+ }, 500);
286
+
287
+ // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering
288
+ const handlePlaying = () => {
289
+ (0, _sessionUpdater.updateSessionMetadata)(this._session, {
290
+ audioStartTime: new Date().getTime()
291
+ });
292
+ const info = this.querySelector('#play-audio-info');
293
+ if (info) {
294
+ container.removeChild(info);
295
+ }
296
+ audio.removeEventListener('playing', handlePlaying);
297
+ };
298
+ audio.addEventListener('playing', handlePlaying);
299
+
300
+ // we need to listen for the ended event to update the isComplete state
301
+ const handleEnded = () => {
302
+ (0, _sessionUpdater.updateSessionMetadata)(this._session, {
303
+ audioEndTime: new Date().getTime()
304
+ });
305
+ this.audioComplete = true;
306
+ this._dispatchResponseChanged();
307
+ audio.removeEventListener('ended', handleEnded);
308
+ };
309
+ audio.addEventListener('ended', handleEnded);
310
+
311
+ // store references to remove later
312
+ this._audio = audio;
313
+ this._handlePlaying = handlePlaying;
314
+ this._handleEnded = handleEnded;
315
+ this._enableAudio = enableAudio;
316
+ // set to true to prevent multiple initializations
317
+ this._audioInitialized = true;
318
+ observer.disconnect();
319
+ }
320
+ });
321
+ });
322
+ observer.observe(this, {
323
+ childList: true,
324
+ subtree: true
325
+ });
326
+ }
327
+ enableKeyboardEvents() {
328
+ if (!this._keyboardEventsEnabled) {
329
+ window.addEventListener('keydown', this._boundHandleKeyDown);
330
+ this._keyboardEventsEnabled = true;
331
+ }
332
+ }
333
+ _initPlayerObserver() {
334
+ const player = this.closest('pie-player') || this.closest('pie-item-player');
335
+ if (!player) return;
336
+ this._playerObserver = new MutationObserver(() => {
337
+ this._rerender();
338
+ });
339
+ this._playerObserver.observe(player, {
340
+ attributes: true,
341
+ attributeFilter: ['base-heading-level', 'baseheadinglevel', 'include-sr-heading', 'includesrheading']
342
+ });
343
+ }
344
+ _disconnectPlayerObserver() {
345
+ if (this._playerObserver) {
346
+ this._playerObserver.disconnect();
347
+ this._playerObserver = null;
348
+ }
349
+ }
350
+ disconnectedCallback() {
351
+ this._disconnectMathObserver();
352
+ this._disconnectPlayerObserver();
353
+ if (this._keyboardEventsEnabled) {
354
+ window.removeEventListener('keydown', this._boundHandleKeyDown);
355
+ this._keyboardEventsEnabled = false;
356
+ }
357
+ document.removeEventListener('click', this._enableAudio);
358
+ if (this._audio) {
359
+ this._audio.removeEventListener('playing', this._handlePlaying);
360
+ this._audio.removeEventListener('ended', this._handleEnded);
361
+ this._audio = null;
362
+ }
363
+ if (this._root) {
364
+ this._root.unmount();
365
+ this._root = null;
366
+ }
367
+ }
368
+
369
+ /**
370
+ * Handles global keyboard events for selecting or toggling multiple-choice answers.
371
+ * Maps keys (1-9, 0, a-j, A-J) to choices and updates the session state accordingly.
372
+ * Ensures valid key presses toggle or select the appropriate choice based on the model.
373
+ */
374
+ handleKeyDown(event) {
375
+ if (!this._model || !this._session) {
376
+ return;
377
+ }
378
+ const {
379
+ mode
380
+ } = this._model;
381
+ if (mode !== 'gather') {
382
+ return;
383
+ }
384
+ const keyToIndex = key => {
385
+ const numOffset = key >= '1' && key <= '9' ? key - '1' : key === '0' ? 9 : -1;
386
+ const letterOffset = /^[a-jA-J]$/.test(key) ? key.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0) : -1;
387
+ return numOffset >= 0 ? numOffset : letterOffset;
388
+ };
389
+ const choiceIndex = keyToIndex(event.key);
390
+ if (choiceIndex === undefined || choiceIndex <= -1 || choiceIndex >= this._model.choices?.length) {
391
+ return;
392
+ }
393
+ const currentValue = this._session.value || [];
394
+ const choiceId = this._model.choices[choiceIndex].value;
395
+ const alreadySelected = currentValue.includes(choiceId);
396
+ const newValue = {
397
+ value: choiceId,
398
+ selected: this._model.choiceMode === 'radio' ? true : !alreadySelected,
399
+ selector: 'Keyboard'
400
+ };
401
+ this._onChange(newValue);
402
+ }
403
+ }
404
+ exports.default = MultipleChoice;
405
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWFpbiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2NsaWVudCIsIl9sb2Rhc2hFcyIsIl9kZWJ1ZyIsIl9waWVQbGF5ZXJFdmVudHMiLCJfbWF0aFJlbmRlcmluZyIsIl9yZW5kZXJVaSIsIl9zZXNzaW9uVXBkYXRlciIsIl91dGlscyIsImxvZyIsImRlYnVnIiwiaXNDb21wbGV0ZSIsInNlc3Npb24iLCJtb2RlbCIsImF1ZGlvQ29tcGxldGUiLCJlbGVtZW50Q29udGV4dCIsImF1dG9wbGF5QXVkaW9FbmFibGVkIiwiY29tcGxldGVBdWRpb0VuYWJsZWQiLCJhdWRpbyIsInF1ZXJ5U2VsZWN0b3IiLCJpc0luc2lkZVByb21wdCIsImNsb3Nlc3QiLCJ2YWx1ZSIsImNob2ljZU1vZGUiLCJtaW5TZWxlY3Rpb25zIiwibWF4U2VsZWN0aW9ucyIsInNlbGVjdGlvbnMiLCJsZW5ndGgiLCJleGNlZWRzTWF4U2VsZWN0aW9ucyIsImV4cG9ydHMiLCJnZXRQbGF5ZXJBdHRyaWJ1dGVzIiwiZWxlbWVudCIsInBsYXllciIsImJhc2VIZWFkaW5nTGV2ZWwiLCJ1bmRlZmluZWQiLCJpbmNsdWRlU3JIZWFkaW5nIiwiZ2V0UmF3IiwiY2FtZWxDYXNlTmFtZSIsImh5cGhlbmF0ZWROYW1lIiwiYWxsTG93ZXJOYW1lIiwicmF3IiwiZ2V0QXR0cmlidXRlIiwibGV2ZWxSYXciLCJsZXZlbCIsInBhcnNlSW50IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJzclJhdyIsInJlc29sdmVIZWFkaW5nUHJvcHMiLCJmcm9tUGxheWVyIiwiX2Jhc2VIZWFkaW5nTGV2ZWwiLCJfaW5jbHVkZVNySGVhZGluZyIsIk11bHRpcGxlQ2hvaWNlIiwiSFRNTEVsZW1lbnQiLCJjb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiX21hdGhSZW5kZXJQZW5kaW5nIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiX21hdGhPYnNlcnZlciIsImRpc2Nvbm5lY3QiLCJyZW5kZXJNYXRoIiwic2V0VGltZW91dCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwiX21vZGVsIiwiX3Nlc3Npb24iLCJfb3B0aW9ucyIsIl9ib3VuZEhhbmRsZUtleURvd24iLCJoYW5kbGVLZXlEb3duIiwiYmluZCIsIl9rZXlib2FyZEV2ZW50c0VuYWJsZWQiLCJfYXVkaW9Jbml0aWFsaXplZCIsIl9yb290IiwiX3JlcmVuZGVyIiwiZGVib3VuY2UiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJNYWluIiwib3B0aW9ucyIsIm9uQ2hvaWNlQ2hhbmdlZCIsIl9vbkNoYW5nZSIsIm9uU2hvd0NvcnJlY3RUb2dnbGUiLCJzZXRBdHRyaWJ1dGUiLCJzZXRMYW5nQXR0cmlidXRlIiwiX2luaXRNYXRoT2JzZXJ2ZXIiLCJjcmVhdGVSb290IiwicmVuZGVyIiwia2V5Ym9hcmRFdmVudHNFbmFibGVkIiwiZW5hYmxlS2V5Ym9hcmRFdmVudHMiLCJsZWFkaW5nIiwidHJhaWxpbmciLCJfZGlzcGF0Y2hSZXNwb25zZUNoYW5nZWQiLCJkaXNwYXRjaEV2ZW50IiwiU2Vzc2lvbkNoYW5nZWRFdmVudCIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsIl9kaXNwYXRjaE1vZGVsU2V0IiwiTW9kZWxTZXRFdmVudCIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJfc2NoZWR1bGVNYXRoUmVuZGVyIiwiX2Rpc2Nvbm5lY3RNYXRoT2JzZXJ2ZXIiLCJsYW5ndWFnZSIsImxhbmciLCJzbGljZSIsInMiLCJvIiwiZGF0YSIsInVwZGF0ZVNlc3Npb25WYWx1ZSIsIl9jcmVhdGVBdWRpb0luZm9Ub2FzdCIsImluZm8iLCJkb2N1bWVudCIsImlkIiwiT2JqZWN0IiwiYXNzaWduIiwic3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsIndpZHRoIiwiaGVpZ2h0IiwiZGlzcGxheSIsImp1c3RpZnlDb250ZW50IiwiYWxpZ25JdGVtcyIsImJhY2tncm91bmQiLCJ6SW5kZXgiLCJjdXJzb3IiLCJpbWciLCJzcmMiLCJFbmFibGVBdWRpb0F1dG9wbGF5SW1hZ2UiLCJhbHQiLCJhcHBlbmRDaGlsZCIsImNvbm5lY3RlZENhbGxiYWNrIiwiX2luaXRQbGF5ZXJPYnNlcnZlciIsIm9ic2VydmVyIiwibXV0YXRpb25zTGlzdCIsImZvckVhY2giLCJtdXRhdGlvbiIsInR5cGUiLCJjb250YWluZXIiLCJlbmFibGVBdWRpbyIsInBsYXkiLCJyZW1vdmVDaGlsZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJwYXVzZWQiLCJhZGRFdmVudExpc3RlbmVyIiwiaGFuZGxlUGxheWluZyIsInVwZGF0ZVNlc3Npb25NZXRhZGF0YSIsImF1ZGlvU3RhcnRUaW1lIiwiRGF0ZSIsImdldFRpbWUiLCJoYW5kbGVFbmRlZCIsImF1ZGlvRW5kVGltZSIsIl9hdWRpbyIsIl9oYW5kbGVQbGF5aW5nIiwiX2hhbmRsZUVuZGVkIiwiX2VuYWJsZUF1ZGlvIiwid2luZG93IiwiX3BsYXllck9ic2VydmVyIiwiYXR0cmlidXRlcyIsImF0dHJpYnV0ZUZpbHRlciIsIl9kaXNjb25uZWN0UGxheWVyT2JzZXJ2ZXIiLCJkaXNjb25uZWN0ZWRDYWxsYmFjayIsInVubW91bnQiLCJldmVudCIsIm1vZGUiLCJrZXlUb0luZGV4Iiwia2V5IiwibnVtT2Zmc2V0IiwibGV0dGVyT2Zmc2V0IiwidGVzdCIsImNoYXJDb2RlQXQiLCJjaG9pY2VJbmRleCIsImNob2ljZXMiLCJjdXJyZW50VmFsdWUiLCJjaG9pY2VJZCIsImFscmVhZHlTZWxlY3RlZCIsImluY2x1ZGVzIiwibmV3VmFsdWUiLCJzZWxlY3RlZCIsInNlbGVjdG9yIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNYWluIGZyb20gJy4vbWFpbic7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IE1vZGVsU2V0RXZlbnQsIFNlc3Npb25DaGFuZ2VkRXZlbnQgfSBmcm9tICdAcGllLWZyYW1ld29yay9waWUtcGxheWVyLWV2ZW50cyc7XG5pbXBvcnQgeyByZW5kZXJNYXRoIH0gZnJvbSAnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnO1xuaW1wb3J0IHsgRW5hYmxlQXVkaW9BdXRvcGxheUltYWdlIH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcbmltcG9ydCB7IHVwZGF0ZVNlc3Npb25WYWx1ZSwgdXBkYXRlU2Vzc2lvbk1ldGFkYXRhIH0gZnJvbSAnLi9zZXNzaW9uLXVwZGF0ZXInO1xuaW1wb3J0IHsgZXhjZWVkc01heFNlbGVjdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgbG9nID0gZGVidWcoJ3BpZS11aTptdWx0aXBsZS1jaG9pY2UnKTtcblxuZXhwb3J0IGNvbnN0IGlzQ29tcGxldGUgPSAoc2Vzc2lvbiwgbW9kZWwsIGF1ZGlvQ29tcGxldGUsIGVsZW1lbnRDb250ZXh0KSA9PiB7XG4gIGNvbnN0IHsgYXV0b3BsYXlBdWRpb0VuYWJsZWQsIGNvbXBsZXRlQXVkaW9FbmFibGVkIH0gPSBtb2RlbCB8fCB7fTtcblxuICAvLyBjaGVjayBhdWRpbyBjb21wbGV0aW9uIGlmIGF1ZGlvIHNldHRpbmdzIGFyZSBlbmFibGVkIGFuZCBhdWRpbyBhY3R1YWxseSBleGlzdHNcbiAgaWYgKGF1dG9wbGF5QXVkaW9FbmFibGVkICYmIGNvbXBsZXRlQXVkaW9FbmFibGVkICYmICFhdWRpb0NvbXBsZXRlKSB7XG4gICAgaWYgKGVsZW1lbnRDb250ZXh0KSB7XG4gICAgICBjb25zdCBhdWRpbyA9IGVsZW1lbnRDb250ZXh0LnF1ZXJ5U2VsZWN0b3IoJ2F1ZGlvJyk7XG4gICAgICBjb25zdCBpc0luc2lkZVByb21wdCA9IGF1ZGlvICYmIGF1ZGlvLmNsb3Nlc3QoJyNwcmV2aWV3LXByb21wdCcpO1xuXG4gICAgICAvLyBvbmx5IHJlcXVpcmUgYXVkaW8gY29tcGxldGlvbiBpZiBhdWRpbyBleGlzdHMgYW5kIGlzIGluc2lkZSB0aGUgcHJvbXB0XG4gICAgICBpZiAoYXVkaW8gJiYgaXNJbnNpZGVQcm9tcHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghc2Vzc2lvbiB8fCAhc2Vzc2lvbi52YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHsgY2hvaWNlTW9kZSwgbWluU2VsZWN0aW9ucyA9IDEsIG1heFNlbGVjdGlvbnMgfSA9IG1vZGVsIHx8IHt9O1xuICBjb25zdCBzZWxlY3Rpb25zID0gc2Vzc2lvbi52YWx1ZS5sZW5ndGggfHwgMDtcblxuICBpZiAoY2hvaWNlTW9kZSA9PT0gJ3JhZGlvJykge1xuICAgIHJldHVybiAhIXNlbGVjdGlvbnM7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9ucyA8IG1pblNlbGVjdGlvbnMgfHwgZXhjZWVkc01heFNlbGVjdGlvbnMoc2VsZWN0aW9ucywgbWF4U2VsZWN0aW9ucykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIGdldFBsYXllckF0dHJpYnV0ZXMoZWxlbWVudCkge1xuICBjb25zdCBwbGF5ZXIgPVxuICAgIGVsZW1lbnQuY2xvc2VzdCgncGllLXBsYXllcicpIHx8XG4gICAgZWxlbWVudC5jbG9zZXN0KCdwaWUtaXRlbS1wbGF5ZXInKTtcblxuICBpZiAoIXBsYXllcikge1xuICAgIHJldHVybiB7IGJhc2VIZWFkaW5nTGV2ZWw6IHVuZGVmaW5lZCwgaW5jbHVkZVNySGVhZGluZzogdHJ1ZSB9O1xuICB9XG5cbiAgY29uc3QgZ2V0UmF3ID0gKGNhbWVsQ2FzZU5hbWUsIGh5cGhlbmF0ZWROYW1lLCBhbGxMb3dlck5hbWUpID0+IHtcbiAgICBsZXQgcmF3ID0gcGxheWVyW2NhbWVsQ2FzZU5hbWVdO1xuXG4gICAgLy8gZmFsbGJhY2sgaW4gY2FzZSBzb21lb25lIHNldHMgdmlhIEhUTUwgYXR0cmlidXRlIG1hbnVhbGx5XG4gICAgaWYgKHJhdyA9PSBudWxsKSB7XG4gICAgICByYXcgPVxuICAgICAgICBwbGF5ZXIuZ2V0QXR0cmlidXRlKGh5cGhlbmF0ZWROYW1lKSA/P1xuICAgICAgICBwbGF5ZXIuZ2V0QXR0cmlidXRlKGFsbExvd2VyTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhdztcbiAgfTtcblxuICBjb25zdCBsZXZlbFJhdyA9IGdldFJhdygnYmFzZUhlYWRpbmdMZXZlbCcsICdiYXNlLWhlYWRpbmctbGV2ZWwnLCAnYmFzZWhlYWRpbmdsZXZlbCcpO1xuICBjb25zdCBsZXZlbCA9IHBhcnNlSW50KGxldmVsUmF3LCAxMCk7XG4gIGNvbnN0IGJhc2VIZWFkaW5nTGV2ZWwgPSBOdW1iZXIuaXNGaW5pdGUobGV2ZWwpICYmIGxldmVsID49IDEgJiYgbGV2ZWwgPD0gNiA/IGxldmVsIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNyUmF3ID0gZ2V0UmF3KCdpbmNsdWRlU3JIZWFkaW5nJywgJ2luY2x1ZGUtc3ItaGVhZGluZycsICdpbmNsdWRlc3JoZWFkaW5nJyk7XG4gIGNvbnN0IGluY2x1ZGVTckhlYWRpbmcgPSBzclJhdyA9PSBudWxsID8gdHJ1ZSA6IHNyUmF3ICE9PSBmYWxzZSAmJiBzclJhdyAhPT0gJ2ZhbHNlJztcblxuICByZXR1cm4geyBiYXNlSGVhZGluZ0xldmVsLCBpbmNsdWRlU3JIZWFkaW5nIH07XG59XG5cbi8vIFJlc29sdmVzIGhlYWRpbmcgYXR0cmlidXRlcyBmb3IgYSBjdXN0b20gZWxlbWVudCwgcHJlZmVycmluZyBleHBsaWNpdCBpbnN0YW5jZVxuLy8gcHJvcGVydGllcyAoc2V0IGJ5IGEgcGFyZW50IGVsZW1lbnQgc3VjaCBhcyBFQlNSKSBvdmVyIHBsYXllci1sZXZlbCBhdHRyaWJ1dGVzLlxuZnVuY3Rpb24gcmVzb2x2ZUhlYWRpbmdQcm9wcyhlbGVtZW50KSB7XG4gIGNvbnN0IGZyb21QbGF5ZXIgPSBnZXRQbGF5ZXJBdHRyaWJ1dGVzKGVsZW1lbnQpO1xuXG4gIHJldHVybiB7XG4gICAgYmFzZUhlYWRpbmdMZXZlbDogZWxlbWVudC5fYmFzZUhlYWRpbmdMZXZlbCAhPT0gdW5kZWZpbmVkID8gZWxlbWVudC5fYmFzZUhlYWRpbmdMZXZlbCA6IGZyb21QbGF5ZXIuYmFzZUhlYWRpbmdMZXZlbCxcbiAgICBpbmNsdWRlU3JIZWFkaW5nOiBlbGVtZW50Ll9pbmNsdWRlU3JIZWFkaW5nICE9PSB1bmRlZmluZWQgPyBlbGVtZW50Ll9pbmNsdWRlU3JIZWFkaW5nIDogZnJvbVBsYXllci5pbmNsdWRlU3JIZWFkaW5nLFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aXBsZUNob2ljZSBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9tb2RlbCA9IG51bGw7XG4gICAgdGhpcy5fc2Vzc2lvbiA9IG51bGw7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG51bGw7IC8vIGFkZGVkIGZvciBlYnNyIHByaW50IG1vZGUgZGV0ZWN0aW9uXG4gICAgdGhpcy5hdWRpb0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdGhpcy5fYm91bmRIYW5kbGVLZXlEb3duID0gdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXVkaW9Jbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuICAgIHRoaXMuX21hdGhPYnNlcnZlciA9IG51bGw7XG4gICAgdGhpcy5fbWF0aFJlbmRlclBlbmRpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuX3JlcmVuZGVyID0gZGVib3VuY2UoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tb2RlbCAmJiB0aGlzLl9zZXNzaW9uKSB7XG4gICAgICAgICAgdmFyIGVsZW1lbnQgPSBSZWFjdC5jcmVhdGVFbGVtZW50KE1haW4sIHtcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLl9tb2RlbCxcbiAgICAgICAgICAgIHNlc3Npb246IHRoaXMuX3Nlc3Npb24sXG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLl9vcHRpb25zLFxuICAgICAgICAgICAgb25DaG9pY2VDaGFuZ2VkOiB0aGlzLl9vbkNoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgb25TaG93Q29ycmVjdFRvZ2dsZTogdGhpcy5vblNob3dDb3JyZWN0VG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAuLi5yZXNvbHZlSGVhZGluZ1Byb3BzKHRoaXMpLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy9UT0RPOiBhcmlhLWxhYmVsIGlzIHNldCBpbiB0aGUgX3JlcmVuZGVyIGJlY2F1c2Ugd2UgbmVlZCB0byBjaGFuZ2UgaXQgd2hlbiB0aGUgbW9kZWwuY2hvaWNlTW9kZSBpcyB1cGRhdGVkLiBDb25zaWRlciByZXZpc2l0aW5nIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGFyaWEtbGFiZWwgc2V0dGluZyBpbiB0aGUgX3JlcmVuZGVyXG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnYXJpYS1sYWJlbCcsXG4gICAgICAgICAgICB0aGlzLl9tb2RlbC5jaG9pY2VNb2RlID09PSAncmFkaW8nID8gJ011bHRpcGxlIENob2ljZSBRdWVzdGlvbicgOiAnTXVsdGlwbGUgQ29ycmVjdCBBbnN3ZXIgUXVlc3Rpb24nLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAncmVnaW9uJyk7XG4gICAgICAgICAgdGhpcy5zZXRMYW5nQXR0cmlidXRlKCk7XG5cbiAgICAgICAgICB0aGlzLl9pbml0TWF0aE9ic2VydmVyKCk7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuX3Jvb3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBjcmVhdGVSb290KHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9yb290LnJlbmRlcihlbGVtZW50KTtcblxuICAgICAgICAgIGlmICh0aGlzLl9tb2RlbC5rZXlib2FyZEV2ZW50c0VuYWJsZWQgPT09IHRydWUgJiYgIXRoaXMuX2tleWJvYXJkRXZlbnRzRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVLZXlib2FyZEV2ZW50cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coJ3NraXAnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIDUwLFxuICAgICAgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSxcbiAgICApO1xuXG4gICAgdGhpcy5fZGlzcGF0Y2hSZXNwb25zZUNoYW5nZWQgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBTZXNzaW9uQ2hhbmdlZEV2ZW50KFxuICAgICAgICAgIHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIGlzQ29tcGxldGUodGhpcy5fc2Vzc2lvbiwgdGhpcy5fbW9kZWwsIHRoaXMuYXVkaW9Db21wbGV0ZSwgdGhpcyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcGF0Y2hNb2RlbFNldCA9IGRlYm91bmNlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IE1vZGVsU2V0RXZlbnQoXG4gICAgICAgICAgICB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIGlzQ29tcGxldGUodGhpcy5fc2Vzc2lvbiwgdGhpcy5fbW9kZWwsIHRoaXMuYXVkaW9Db21wbGV0ZSwgdGhpcyksXG4gICAgICAgICAgICB0aGlzLl9tb2RlbCAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgNTAsXG4gICAgICB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICBfc2NoZWR1bGVNYXRoUmVuZGVyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLl9tYXRoUmVuZGVyUGVuZGluZykgcmV0dXJuO1xuICAgIHRoaXMuX21hdGhSZW5kZXJQZW5kaW5nID0gdHJ1ZTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fbWF0aE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuX21hdGhPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgICBsb2coJ3JlbmRlciBjb21wbGV0ZSAtIHJlbmRlciBtYXRoJyk7XG4gICAgICByZW5kZXJNYXRoKHRoaXMpO1xuICAgICAgdGhpcy5fbWF0aFJlbmRlclBlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fbWF0aE9ic2VydmVyKSB7XG4gICAgICAgICAgdGhpcy5fbWF0aE9ic2VydmVyLm9ic2VydmUodGhpcywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwKTtcbiAgICB9KTtcbiAgfTtcblxuICBfaW5pdE1hdGhPYnNlcnZlcigpIHtcbiAgICBpZiAodGhpcy5fbWF0aE9ic2VydmVyKSByZXR1cm47XG4gICAgdGhpcy5fbWF0aE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5fc2NoZWR1bGVNYXRoUmVuZGVyKTtcbiAgICB0aGlzLl9tYXRoT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIF9kaXNjb25uZWN0TWF0aE9ic2VydmVyKCkge1xuICAgIGlmICh0aGlzLl9tYXRoT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX21hdGhPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLl9tYXRoT2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIG9uU2hvd0NvcnJlY3RUb2dnbGUoKSB7XG4gICAgcmVuZGVyTWF0aCh0aGlzKTtcbiAgfVxuXG4gIHNldExhbmdBdHRyaWJ1dGUoKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLl9tb2RlbCAmJiB0eXBlb2YgdGhpcy5fbW9kZWwubGFuZ3VhZ2UgPyB0aGlzLl9tb2RlbC5sYW5ndWFnZSA6ICcnO1xuICAgIGNvbnN0IGxhbmcgPSBsYW5ndWFnZSA/IGxhbmd1YWdlLnNsaWNlKDAsIDIpIDogJ2VuJztcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnbGFuZycsIGxhbmcpO1xuICB9XG5cbiAgc2V0IG1vZGVsKHMpIHtcbiAgICB0aGlzLl9tb2RlbCA9IHM7XG4gICAgdGhpcy5fcmVyZW5kZXIoKTtcbiAgICAvLyByZXNldCB0aGUgYXVkaW9Jbml0aWFsaXplZCB0byBmYWxzZSBzaW5jZSB0aGUgbW9kZWwgY2hhbmdlZCwgYW5kIHdlIG1pZ2h0IG5lZWQgdG8gcmVpbml0aWFsaXplIHRoZSBhdWRpb1xuICAgIHRoaXMuX2F1ZGlvSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXNwYXRjaE1vZGVsU2V0KCk7XG4gIH1cblxuICBnZXQgc2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbjtcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgc2V0IG9wdGlvbnMobykge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvO1xuICAgIHRoaXMuX3JlcmVuZGVyKCk7XG4gIH1cblxuICBzZXQgYmFzZUhlYWRpbmdMZXZlbChsZXZlbCkge1xuICAgIHRoaXMuX2Jhc2VIZWFkaW5nTGV2ZWwgPSBsZXZlbDtcbiAgICB0aGlzLl9yZXJlbmRlcigpO1xuICB9XG5cbiAgc2V0IGluY2x1ZGVTckhlYWRpbmcodmFsdWUpIHtcbiAgICB0aGlzLl9pbmNsdWRlU3JIZWFkaW5nID0gdmFsdWU7XG4gICAgdGhpcy5fcmVyZW5kZXIoKTtcbiAgfVxuXG4gIHNldCBzZXNzaW9uKHMpIHtcbiAgICB0aGlzLl9zZXNzaW9uID0gcztcbiAgICB0aGlzLl9yZXJlbmRlcigpO1xuICAgIC8vVE9ETzogcmVtb3ZlIHRoaXMgc2Vzc2lvbi1jaGFuZ2VkIHNob3VsZCBvbmx5IGJlIGVtaXQgb24gdXNlciBjaGFuZ2VcbiAgICB0aGlzLl9kaXNwYXRjaFJlc3BvbnNlQ2hhbmdlZCgpO1xuICB9XG5cbiAgX29uQ2hhbmdlKGRhdGEpIHtcbiAgICB1cGRhdGVTZXNzaW9uVmFsdWUodGhpcy5fc2Vzc2lvbiwgdGhpcy5fbW9kZWwuY2hvaWNlTW9kZSwgZGF0YSk7XG4gICAgdGhpcy5fZGlzcGF0Y2hSZXNwb25zZUNoYW5nZWQoKTtcbiAgICB0aGlzLl9yZXJlbmRlcigpO1xuICB9XG5cbiAgX2NyZWF0ZUF1ZGlvSW5mb1RvYXN0KCkge1xuICAgIGNvbnN0IGluZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBpbmZvLmlkID0gJ3BsYXktYXVkaW8taW5mbyc7XG5cbiAgICBPYmplY3QuYXNzaWduKGluZm8uc3R5bGUsIHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdG9wOiAwLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICBiYWNrZ3JvdW5kOiAnd2hpdGUnLFxuICAgICAgekluZGV4OiAnMTAwMCcsXG4gICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIGltZy5zcmMgPSBFbmFibGVBdWRpb0F1dG9wbGF5SW1hZ2U7XG4gICAgaW1nLmFsdCA9ICdDbGljayBhbnl3aGVyZSB0byBlbmFibGUgYXVkaW8gYXV0b3BsYXknO1xuICAgIGltZy53aWR0aCA9IDUwMDtcbiAgICBpbWcuaGVpZ2h0ID0gMzAwO1xuXG4gICAgaW5mby5hcHBlbmRDaGlsZChpbWcpO1xuICAgIHJldHVybiBpbmZvO1xuICB9XG5cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5faW5pdE1hdGhPYnNlcnZlcigpO1xuICAgIHRoaXMuX2luaXRQbGF5ZXJPYnNlcnZlcigpO1xuICAgIHRoaXMuX3JlcmVuZGVyKCk7XG5cbiAgICAvLyBPYnNlcnZhdGlvbjogIGF1ZGlvIGluIENocm9tZSB3aWxsIGhhdmUgdGhlIGF1dG9wbGF5IGF0dHJpYnV0ZSxcbiAgICAvLyB3aGlsZSBvdGhlciBicm93c2VycyB3aWxsIG5vdCBoYXZlIHRoZSBhdXRvcGxheSBhdHRyaWJ1dGUgYW5kIHdpbGwgbmVlZCBhIHVzZXIgaW50ZXJhY3Rpb24gdG8gcGxheSB0aGUgYXVkaW9cbiAgICAvLyBUaGlzIHdvcmthcm91bmQgZml4ZXMgdGhlIGlzc3VlIG9mIGF1ZGlvIGJlaW5nIGNhY2hlZCBhbmQgcGxheWVkIG9uIGFueSB1c2VyIGludGVyYWN0aW9uIGluIFNhZmFyaSBhbmQgRmlyZWZveFxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uc0xpc3QsIG9ic2VydmVyKSA9PiB7XG4gICAgICBtdXRhdGlvbnNMaXN0LmZvckVhY2goKG11dGF0aW9uKSA9PiB7XG4gICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0Jykge1xuICAgICAgICAgIGlmICh0aGlzLl9hdWRpb0luaXRpYWxpemVkKSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBhdWRpbyA9IHRoaXMucXVlcnlTZWxlY3RvcignYXVkaW8nKTtcbiAgICAgICAgICBjb25zdCBpc0luc2lkZVByb21wdCA9IGF1ZGlvICYmIGF1ZGlvLmNsb3Nlc3QoJyNwcmV2aWV3LXByb21wdCcpO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLl9tb2RlbCkgcmV0dXJuO1xuICAgICAgICAgIGlmICghdGhpcy5fbW9kZWwuYXV0b3BsYXlBdWRpb0VuYWJsZWQpIHJldHVybjtcbiAgICAgICAgICBpZiAoYXVkaW8gJiYgIWlzSW5zaWRlUHJvbXB0KSByZXR1cm47XG4gICAgICAgICAgaWYgKCFhdWRpbykgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuX2NyZWF0ZUF1ZGlvSW5mb1RvYXN0KCk7XG4gICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5xdWVyeVNlbGVjdG9yKCcjbWFpbi1jb250YWluZXInKTtcbiAgICAgICAgICBjb25zdCBlbmFibGVBdWRpbyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5U2VsZWN0b3IoJyNwbGF5LWF1ZGlvLWluZm8nKSkge1xuICAgICAgICAgICAgICBhdWRpby5wbGF5KCk7XG4gICAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChpbmZvKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlbmFibGVBdWRpbyk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIGlmIHRoZSBhdWRpbyBpcyBwYXVzZWQsIGl0IG1lYW5zIHRoZSB1c2VyIGhhcyBub3QgaW50ZXJhY3RlZCB3aXRoIHRoZSBwYWdlIHlldCBhbmQgdGhlIGF1ZGlvIHdpbGwgbm90IHBsYXlcbiAgICAgICAgICAvLyBGSVggRk9SIFNBRkFSSTogcGxheSB3aXRoIGEgc2xpZ2h0IGRlbGF5IHRvIGNoZWNrIGlmIGF1dG9wbGF5IHdhcyBibG9ja2VkXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXVkaW8ucGF1c2VkICYmICF0aGlzLnF1ZXJ5U2VsZWN0b3IoJyNwbGF5LWF1ZGlvLWluZm8nKSkge1xuICAgICAgICAgICAgICAvLyBhZGQgaW5mbyBtZXNzYWdlIGFzIGEgdG9hc3QgdG8gZW5hYmxlIGF1ZGlvIHBsYXliYWNrXG4gICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChpbmZvKTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlbmFibGVBdWRpbyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGVuYWJsZUF1ZGlvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCA1MDApO1xuXG4gICAgICAgICAgLy8gd2UgbmVlZCB0byBsaXN0ZW4gZm9yIHRoZSBwbGF5aW5nIGV2ZW50IHRvIHJlbW92ZSB0aGUgdG9hc3QgaW4gY2FzZSB0aGUgYXVkaW8gcGxheXMgYmVjYXVzZSBvZiByZS1yZW5kZXJpbmdcbiAgICAgICAgICBjb25zdCBoYW5kbGVQbGF5aW5nID0gKCkgPT4ge1xuICAgICAgICAgICAgdXBkYXRlU2Vzc2lvbk1ldGFkYXRhKHRoaXMuX3Nlc3Npb24sIHsgYXVkaW9TdGFydFRpbWU6IG5ldyBEYXRlKCkuZ2V0VGltZSgpIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5xdWVyeVNlbGVjdG9yKCcjcGxheS1hdWRpby1pbmZvJyk7XG4gICAgICAgICAgICBpZiAoaW5mbykge1xuICAgICAgICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoaW5mbyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF1ZGlvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCBoYW5kbGVQbGF5aW5nKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgYXVkaW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIGhhbmRsZVBsYXlpbmcpO1xuXG4gICAgICAgICAgLy8gd2UgbmVlZCB0byBsaXN0ZW4gZm9yIHRoZSBlbmRlZCBldmVudCB0byB1cGRhdGUgdGhlIGlzQ29tcGxldGUgc3RhdGVcbiAgICAgICAgICBjb25zdCBoYW5kbGVFbmRlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHVwZGF0ZVNlc3Npb25NZXRhZGF0YSh0aGlzLl9zZXNzaW9uLCB7IGF1ZGlvRW5kVGltZTogbmV3IERhdGUoKS5nZXRUaW1lKCkgfSk7XG4gICAgICAgICAgICB0aGlzLmF1ZGlvQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hSZXNwb25zZUNoYW5nZWQoKTtcbiAgICAgICAgICAgIGF1ZGlvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgaGFuZGxlRW5kZWQpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhdWRpby5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIGhhbmRsZUVuZGVkKTtcblxuICAgICAgICAgIC8vIHN0b3JlIHJlZmVyZW5jZXMgdG8gcmVtb3ZlIGxhdGVyXG4gICAgICAgICAgdGhpcy5fYXVkaW8gPSBhdWRpbztcbiAgICAgICAgICB0aGlzLl9oYW5kbGVQbGF5aW5nID0gaGFuZGxlUGxheWluZztcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFbmRlZCA9IGhhbmRsZUVuZGVkO1xuICAgICAgICAgIHRoaXMuX2VuYWJsZUF1ZGlvID0gZW5hYmxlQXVkaW87XG4gICAgICAgICAgLy8gc2V0IHRvIHRydWUgdG8gcHJldmVudCBtdWx0aXBsZSBpbml0aWFsaXphdGlvbnNcbiAgICAgICAgICB0aGlzLl9hdWRpb0luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICB9XG5cbiAgZW5hYmxlS2V5Ym9hcmRFdmVudHMoKSB7XG4gICAgaWYgKCF0aGlzLl9rZXlib2FyZEV2ZW50c0VuYWJsZWQpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fYm91bmRIYW5kbGVLZXlEb3duKTtcbiAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzRW5hYmxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgX2luaXRQbGF5ZXJPYnNlcnZlcigpIHtcbiAgICBjb25zdCBwbGF5ZXIgPSB0aGlzLmNsb3Nlc3QoJ3BpZS1wbGF5ZXInKSB8fCB0aGlzLmNsb3Nlc3QoJ3BpZS1pdGVtLXBsYXllcicpO1xuICAgIGlmICghcGxheWVyKSByZXR1cm47XG5cbiAgICB0aGlzLl9wbGF5ZXJPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgIHRoaXMuX3JlcmVuZGVyKCk7XG4gICAgfSk7XG4gICAgdGhpcy5fcGxheWVyT2JzZXJ2ZXIub2JzZXJ2ZShwbGF5ZXIsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnYmFzZS1oZWFkaW5nLWxldmVsJywgJ2Jhc2VoZWFkaW5nbGV2ZWwnLCAnaW5jbHVkZS1zci1oZWFkaW5nJywgJ2luY2x1ZGVzcmhlYWRpbmcnXSxcbiAgICB9KTtcbiAgfVxuXG4gIF9kaXNjb25uZWN0UGxheWVyT2JzZXJ2ZXIoKSB7XG4gICAgaWYgKHRoaXMuX3BsYXllck9ic2VydmVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXJPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLl9wbGF5ZXJPYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fZGlzY29ubmVjdE1hdGhPYnNlcnZlcigpO1xuICAgIHRoaXMuX2Rpc2Nvbm5lY3RQbGF5ZXJPYnNlcnZlcigpO1xuICAgIGlmICh0aGlzLl9rZXlib2FyZEV2ZW50c0VuYWJsZWQpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fYm91bmRIYW5kbGVLZXlEb3duKTtcbiAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzRW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fZW5hYmxlQXVkaW8pO1xuXG4gICAgaWYgKHRoaXMuX2F1ZGlvKSB7XG4gICAgICB0aGlzLl9hdWRpby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5faGFuZGxlUGxheWluZyk7XG4gICAgICB0aGlzLl9hdWRpby5yZW1vdmVFdmVudExpc3RlbmVyKCdlbmRlZCcsIHRoaXMuX2hhbmRsZUVuZGVkKTtcbiAgICAgIHRoaXMuX2F1ZGlvID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcm9vdCkge1xuICAgICAgdGhpcy5fcm9vdC51bm1vdW50KCk7XG4gICAgICB0aGlzLl9yb290ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBnbG9iYWwga2V5Ym9hcmQgZXZlbnRzIGZvciBzZWxlY3Rpbmcgb3IgdG9nZ2xpbmcgbXVsdGlwbGUtY2hvaWNlIGFuc3dlcnMuXG4gICAqIE1hcHMga2V5cyAoMS05LCAwLCBhLWosIEEtSikgdG8gY2hvaWNlcyBhbmQgdXBkYXRlcyB0aGUgc2Vzc2lvbiBzdGF0ZSBhY2NvcmRpbmdseS5cbiAgICogRW5zdXJlcyB2YWxpZCBrZXkgcHJlc3NlcyB0b2dnbGUgb3Igc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBjaG9pY2UgYmFzZWQgb24gdGhlIG1vZGVsLlxuICAgKi9cbiAgaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgIGlmICghdGhpcy5fbW9kZWwgfHwgIXRoaXMuX3Nlc3Npb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IG1vZGUgfSA9IHRoaXMuX21vZGVsO1xuICAgIGlmIChtb2RlICE9PSAnZ2F0aGVyJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGtleVRvSW5kZXggPSAoa2V5KSA9PiB7XG4gICAgICBjb25zdCBudW1PZmZzZXQgPSBrZXkgPj0gJzEnICYmIGtleSA8PSAnOScgPyBrZXkgLSAnMScgOiBrZXkgPT09ICcwJyA/IDkgOiAtMTtcbiAgICAgIGNvbnN0IGxldHRlck9mZnNldCA9IC9eW2EtakEtSl0kLy50ZXN0KGtleSkgPyBrZXkudG9Mb3dlckNhc2UoKS5jaGFyQ29kZUF0KDApIC0gJ2EnLmNoYXJDb2RlQXQoMCkgOiAtMTtcbiAgICAgIHJldHVybiBudW1PZmZzZXQgPj0gMCA/IG51bU9mZnNldCA6IGxldHRlck9mZnNldDtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hvaWNlSW5kZXggPSBrZXlUb0luZGV4KGV2ZW50LmtleSk7XG5cbiAgICBpZiAoY2hvaWNlSW5kZXggPT09IHVuZGVmaW5lZCB8fCBjaG9pY2VJbmRleCA8PSAtMSB8fCBjaG9pY2VJbmRleCA+PSB0aGlzLl9tb2RlbC5jaG9pY2VzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLl9zZXNzaW9uLnZhbHVlIHx8IFtdO1xuICAgIGNvbnN0IGNob2ljZUlkID0gdGhpcy5fbW9kZWwuY2hvaWNlc1tjaG9pY2VJbmRleF0udmFsdWU7XG5cbiAgICBjb25zdCBhbHJlYWR5U2VsZWN0ZWQgPSBjdXJyZW50VmFsdWUuaW5jbHVkZXMoY2hvaWNlSWQpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0ge1xuICAgICAgdmFsdWU6IGNob2ljZUlkLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuX21vZGVsLmNob2ljZU1vZGUgPT09ICdyYWRpbycgPyB0cnVlIDogIWFscmVhZHlTZWxlY3RlZCxcbiAgICAgIHNlbGVjdG9yOiAnS2V5Ym9hcmQnLFxuICAgIH07XG5c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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_main","_interopRequireDefault","require","_react","_client","_lodashEs","_debug","_piePlayerEvents","_mathRendering","_renderUi","_sessionUpdater","_utils","log","debug","isComplete","session","model","audioComplete","elementContext","autoplayAudioEnabled","completeAudioEnabled","audio","querySelector","isInsidePrompt","closest","value","choiceMode","minSelections","maxSelections","selections","length","exceedsMaxSelections","exports","getPlayerAttributes","element","player","baseHeadingLevel","undefined","includeSrHeading","getRaw","camelCaseName","hyphenatedName","allLowerName","raw","getAttribute","levelRaw","level","parseInt","Number","isFinite","srRaw","resolveHeadingProps","fromPlayer","_baseHeadingLevel","_includeSrHeading","MultipleChoice","HTMLElement","constructor","_defineProperty2","default","_mathRenderPending","requestAnimationFrame","_mathObserver","disconnect","renderMath","setTimeout","observe","childList","subtree","_model","_session","_options","_boundHandleKeyDown","handleKeyDown","bind","_keyboardEventsEnabled","_audioInitialized","_root","_rerender","debounce","React","createElement","Main","options","onChoiceChanged","_onChange","onShowCorrectToggle","setAttribute","setLangAttribute","_initMathObserver","createRoot","render","keyboardEventsEnabled","enableKeyboardEvents","leading","trailing","_dispatchResponseChanged","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","_dispatchModelSet","ModelSetEvent","MutationObserver","_scheduleMathRender","_disconnectMathObserver","language","lang","slice","s","o","data","updateSessionValue","_createAudioInfoToast","info","document","id","Object","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","connectedCallback","_initPlayerObserver","observer","mutationsList","forEach","mutation","type","container","enableAudio","play","removeChild","removeEventListener","paused","addEventListener","handlePlaying","updateSessionMetadata","audioStartTime","Date","getTime","handleEnded","audioEndTime","_audio","_handlePlaying","_handleEnded","_enableAudio","window","_playerObserver","attributes","attributeFilter","_disconnectPlayerObserver","disconnectedCallback","unmount","event","mode","keyToIndex","key","numOffset","letterOffset","test","charCodeAt","choiceIndex","choices","currentValue","choiceId","alreadySelected","includes","newValue","selected","selector"],"sources":["../src/index.js"],"sourcesContent":["import Main from './main';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { debounce } from 'lodash-es';\nimport debug from 'debug';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/render-ui';\nimport { updateSessionValue, updateSessionMetadata } from './session-updater';\nimport { exceedsMaxSelections } from './utils';\n\nconst log = debug('pie-ui:multiple-choice');\n\nexport const isComplete = (session, model, audioComplete, elementContext) => {\n const { autoplayAudioEnabled, completeAudioEnabled } = model || {};\n\n // check audio completion if audio settings are enabled and audio actually exists\n if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {\n if (elementContext) {\n const audio = elementContext.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n // only require audio completion if audio exists and is inside the prompt\n if (audio && isInsidePrompt) {\n return false;\n }\n }\n }\n\n if (!session || !session.value) {\n return false;\n }\n\n const { choiceMode, minSelections = 1, maxSelections } = model || {};\n const selections = session.value.length || 0;\n\n if (choiceMode === 'radio') {\n return !!selections;\n }\n\n if (selections < minSelections || exceedsMaxSelections(selections, maxSelections)) {\n return false;\n }\n\n return true;\n};\n\nfunction getPlayerAttributes(element) {\n const player =\n element.closest('pie-player') ||\n element.closest('pie-item-player');\n\n if (!player) {\n return { baseHeadingLevel: undefined, includeSrHeading: true };\n }\n\n const getRaw = (camelCaseName, hyphenatedName, allLowerName) => {\n let raw = player[camelCaseName];\n\n // fallback in case someone sets via HTML attribute manually\n if (raw == null) {\n raw =\n player.getAttribute(hyphenatedName) ??\n player.getAttribute(allLowerName);\n }\n\n return raw;\n };\n\n const levelRaw = getRaw('baseHeadingLevel', 'base-heading-level', 'baseheadinglevel');\n const level = parseInt(levelRaw, 10);\n const baseHeadingLevel = Number.isFinite(level) && level >= 1 && level <= 6 ? level : undefined;\n\n const srRaw = getRaw('includeSrHeading', 'include-sr-heading', 'includesrheading');\n const includeSrHeading = srRaw == null ? true : srRaw !== false && srRaw !== 'false';\n\n return { baseHeadingLevel, includeSrHeading };\n}\n\n// Resolves heading attributes for a custom element, preferring explicit instance\n// properties (set by a parent element such as EBSR) over player-level attributes.\nfunction resolveHeadingProps(element) {\n const fromPlayer = getPlayerAttributes(element);\n\n return {\n baseHeadingLevel: element._baseHeadingLevel !== undefined ? element._baseHeadingLevel : fromPlayer.baseHeadingLevel,\n includeSrHeading: element._includeSrHeading !== undefined ? element._includeSrHeading : fromPlayer.includeSrHeading,\n };\n}\n\nexport default class MultipleChoice extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n this._options = null; // added for ebsr print mode detection\n this.audioComplete = false;\n this._boundHandleKeyDown = this.handleKeyDown.bind(this);\n this._keyboardEventsEnabled = false;\n this._audioInitialized = false;\n this._root = null;\n this._mathObserver = null;\n this._mathRenderPending = false;\n\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n var element = React.createElement(Main, {\n model: this._model,\n session: this._session,\n options: this._options,\n onChoiceChanged: this._onChange.bind(this),\n onShowCorrectToggle: this.onShowCorrectToggle.bind(this),\n ...resolveHeadingProps(this),\n });\n\n //TODO: aria-label is set in the _rerender because we need to change it when the model.choiceMode is updated. Consider revisiting the placement of the aria-label setting in the _rerender\n this.setAttribute(\n 'aria-label',\n this._model.choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Correct Answer Question',\n );\n this.setAttribute('role', 'region');\n this.setLangAttribute();\n\n this._initMathObserver();\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n\n if (this._model.keyboardEventsEnabled === true && !this._keyboardEventsEnabled) {\n this.enableKeyboardEvents();\n }\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n\n this._dispatchResponseChanged = debounce(() => {\n this.dispatchEvent(\n new SessionChangedEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n ),\n );\n });\n\n this._dispatchModelSet = debounce(\n () => {\n this.dispatchEvent(\n new ModelSetEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n this._model !== undefined,\n ),\n );\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n\n _scheduleMathRender = () => {\n if (this._mathRenderPending) return;\n this._mathRenderPending = true;\n\n requestAnimationFrame(() => {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n }\n log('render complete - render math');\n renderMath(this);\n this._mathRenderPending = false;\n setTimeout(() => {\n if (this._mathObserver) {\n this._mathObserver.observe(this, { childList: true, subtree: true });\n }\n }, 50);\n });\n };\n\n _initMathObserver() {\n if (this._mathObserver) return;\n this._mathObserver = new MutationObserver(this._scheduleMathRender);\n this._mathObserver.observe(this, { childList: true, subtree: true });\n }\n\n _disconnectMathObserver() {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n this._mathObserver = null;\n }\n }\n\n onShowCorrectToggle() {\n renderMath(this);\n }\n\n setLangAttribute() {\n const language = this._model && typeof this._model.language ? this._model.language : '';\n const lang = language ? language.slice(0, 2) : 'en';\n this.setAttribute('lang', lang);\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n this._dispatchModelSet();\n }\n\n get session() {\n return this._session;\n }\n\n get options() {\n return this._options;\n }\n\n set options(o) {\n this._options = o;\n this._rerender();\n }\n\n set baseHeadingLevel(level) {\n this._baseHeadingLevel = level;\n this._rerender();\n }\n\n set includeSrHeading(value) {\n this._includeSrHeading = value;\n this._rerender();\n }\n\n set session(s) {\n this._session = s;\n this._rerender();\n //TODO: remove this session-changed should only be emit on user change\n this._dispatchResponseChanged();\n }\n\n _onChange(data) {\n updateSessionValue(this._session, this._model.choiceMode, data);\n this._dispatchResponseChanged();\n this._rerender();\n }\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._initMathObserver();\n this._initPlayerObserver();\n this._rerender();\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n updateSessionMetadata(this._session, { audioStartTime: new Date().getTime() });\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n updateSessionMetadata(this._session, { audioEndTime: new Date().getTime() });\n this.audioComplete = true;\n this._dispatchResponseChanged();\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n enableKeyboardEvents() {\n if (!this._keyboardEventsEnabled) {\n window.addEventListener('keydown', this._boundHandleKeyDown);\n this._keyboardEventsEnabled = true;\n }\n }\n\n _initPlayerObserver() {\n const player = this.closest('pie-player') || this.closest('pie-item-player');\n if (!player) return;\n\n this._playerObserver = new MutationObserver(() => {\n this._rerender();\n });\n this._playerObserver.observe(player, {\n attributes: true,\n attributeFilter: ['base-heading-level', 'baseheadinglevel', 'include-sr-heading', 'includesrheading'],\n });\n }\n\n _disconnectPlayerObserver() {\n if (this._playerObserver) {\n this._playerObserver.disconnect();\n this._playerObserver = null;\n }\n }\n\n disconnectedCallback() {\n this._disconnectMathObserver();\n this._disconnectPlayerObserver();\n if (this._keyboardEventsEnabled) {\n window.removeEventListener('keydown', this._boundHandleKeyDown);\n this._keyboardEventsEnabled = false;\n }\n\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n\n if (this._root) {\n this._root.unmount();\n this._root = null;\n }\n }\n\n /**\n * Handles global keyboard events for selecting or toggling multiple-choice answers.\n * Maps keys (1-9, 0, a-j, A-J) to choices and updates the session state accordingly.\n * Ensures valid key presses toggle or select the appropriate choice based on the model.\n */\n handleKeyDown(event) {\n if (!this._model || !this._session) {\n return;\n }\n\n const { mode } = this._model;\n if (mode !== 'gather') {\n return;\n }\n\n const keyToIndex = (key) => {\n const numOffset = key >= '1' && key <= '9' ? key - '1' : key === '0' ? 9 : -1;\n const letterOffset = /^[a-jA-J]$/.test(key) ? key.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0) : -1;\n return numOffset >= 0 ? numOffset : letterOffset;\n };\n\n const choiceIndex = keyToIndex(event.key);\n\n if (choiceIndex === undefined || choiceIndex <= -1 || choiceIndex >= this._model.choices?.length) {\n return;\n }\n\n const currentValue = this._session.value || [];\n const choiceId = this._model.choices[choiceIndex].value;\n\n const alreadySelected = currentValue.includes(choiceId);\n const newValue = {\n value: choiceId,\n selected: this._model.choiceMode === 'radio' ? true : !alreadySelected,\n selector: 'Keyboard',\n };\n\n this._onChange(newValue);\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/main.js ADDED
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _renderUi = require("@pie-lib/render-ui");
13
+ var _multipleChoice = _interopRequireDefault(require("./multiple-choice"));
14
+ class Main extends _react.default.Component {
15
+ render() {
16
+ const {
17
+ model,
18
+ onChoiceChanged,
19
+ session,
20
+ onShowCorrectToggle,
21
+ options,
22
+ baseHeadingLevel,
23
+ includeSrHeading
24
+ } = this.props;
25
+ const {
26
+ extraCSSRules,
27
+ fontSizeFactor
28
+ } = model;
29
+
30
+ // model.partLabel is a property used for ebsr
31
+ return /*#__PURE__*/_react.default.createElement(_renderUi.PreviewLayout, {
32
+ extraCSSRules: extraCSSRules,
33
+ fontSizeFactor: fontSizeFactor,
34
+ classes: {}
35
+ }, /*#__PURE__*/_react.default.createElement(_multipleChoice.default, (0, _extends2.default)({}, model, {
36
+ options: options,
37
+ session: session,
38
+ onChoiceChanged: onChoiceChanged,
39
+ onShowCorrectToggle: onShowCorrectToggle,
40
+ baseHeadingLevel: baseHeadingLevel,
41
+ includeSrHeading: includeSrHeading
42
+ })));
43
+ }
44
+ }
45
+ (0, _defineProperty2.default)(Main, "propTypes", {
46
+ model: _propTypes.default.object,
47
+ session: _propTypes.default.object,
48
+ options: _propTypes.default.object,
49
+ onChoiceChanged: _propTypes.default.func,
50
+ onShowCorrectToggle: _propTypes.default.func,
51
+ extraCSSRules: _propTypes.default.shape({
52
+ names: _propTypes.default.arrayOf(_propTypes.default.string),
53
+ rules: _propTypes.default.string
54
+ }),
55
+ baseHeadingLevel: _propTypes.default.number,
56
+ includeSrHeading: _propTypes.default.bool
57
+ });
58
+ (0, _defineProperty2.default)(Main, "defaultProps", {
59
+ model: {},
60
+ session: {}
61
+ });
62
+ var _default = exports.default = Main;
63
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfcmVuZGVyVWkiLCJfbXVsdGlwbGVDaG9pY2UiLCJNYWluIiwiUmVhY3QiLCJDb21wb25lbnQiLCJyZW5kZXIiLCJtb2RlbCIsIm9uQ2hvaWNlQ2hhbmdlZCIsInNlc3Npb24iLCJvblNob3dDb3JyZWN0VG9nZ2xlIiwib3B0aW9ucyIsImJhc2VIZWFkaW5nTGV2ZWwiLCJpbmNsdWRlU3JIZWFkaW5nIiwicHJvcHMiLCJleHRyYUNTU1J1bGVzIiwiZm9udFNpemVGYWN0b3IiLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsIlByZXZpZXdMYXlvdXQiLCJjbGFzc2VzIiwiX2V4dGVuZHMyIiwiX2RlZmluZVByb3BlcnR5MiIsIlByb3BUeXBlcyIsIm9iamVjdCIsImZ1bmMiLCJzaGFwZSIsIm5hbWVzIiwiYXJyYXlPZiIsInN0cmluZyIsInJ1bGVzIiwibnVtYmVyIiwiYm9vbCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFByZXZpZXdMYXlvdXQgfSBmcm9tICdAcGllLWxpYi9yZW5kZXItdWknO1xuaW1wb3J0IE11bHRpcGxlQ2hvaWNlIGZyb20gJy4vbXVsdGlwbGUtY2hvaWNlJztcblxuY2xhc3MgTWFpbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbW9kZWw6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc2Vzc2lvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG9uQ2hvaWNlQ2hhbmdlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25TaG93Q29ycmVjdFRvZ2dsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZXh0cmFDU1NSdWxlczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG5hbWVzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICAgIHJ1bGVzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIGJhc2VIZWFkaW5nTGV2ZWw6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgaW5jbHVkZVNySGVhZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBtb2RlbDoge30sXG4gICAgc2Vzc2lvbjoge30sXG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgbW9kZWwsIG9uQ2hvaWNlQ2hhbmdlZCwgc2Vzc2lvbiwgb25TaG93Q29ycmVjdFRvZ2dsZSwgb3B0aW9ucywgYmFzZUhlYWRpbmdMZXZlbCwgaW5jbHVkZVNySGVhZGluZyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGV4dHJhQ1NTUnVsZXMsIGZvbnRTaXplRmFjdG9yIH0gPSBtb2RlbDtcblxuICAgIC8vIG1vZGVsLnBhcnRMYWJlbCBpcyBhIHByb3BlcnR5IHVzZWQgZm9yIGVic3JcbiAgICByZXR1cm4gKFxuICAgICAgPFByZXZpZXdMYXlvdXQgZXh0cmFDU1NSdWxlcz17ZXh0cmFDU1NSdWxlc30gZm9udFNpemVGYWN0b3I9e2ZvbnRTaXplRmFjdG9yfSBjbGFzc2VzPXt7fX0+XG4gICAgICAgIDxNdWx0aXBsZUNob2ljZVxuICAgICAgICAgIHsuLi5tb2RlbH1cbiAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgIHNlc3Npb249e3Nlc3Npb259XG4gICAgICAgICAgb25DaG9pY2VDaGFuZ2VkPXtvbkNob2ljZUNoYW5nZWR9XG4gICAgICAgICAgb25TaG93Q29ycmVjdFRvZ2dsZT17b25TaG93Q29ycmVjdFRvZ2dsZX1cbiAgICAgICAgICBiYXNlSGVhZGluZ0xldmVsPXtiYXNlSGVhZGluZ0xldmVsfVxuICAgICAgICAgIGluY2x1ZGVTckhlYWRpbmc9e2luY2x1ZGVTckhlYWRpbmd9XG4gICAgICAgIC8+XG4gICAgICA8L1ByZXZpZXdMYXlvdXQ+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYWluO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxlQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxNQUFNSSxJQUFJLFNBQVNDLGNBQUssQ0FBQ0MsU0FBUyxDQUFDO0VBb0JqQ0MsTUFBTUEsQ0FBQSxFQUFHO0lBQ1AsTUFBTTtNQUFFQyxLQUFLO01BQUVDLGVBQWU7TUFBRUMsT0FBTztNQUFFQyxtQkFBbUI7TUFBRUMsT0FBTztNQUFFQyxnQkFBZ0I7TUFBRUM7SUFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQ0MsS0FBSztJQUN4SCxNQUFNO01BQUVDLGFBQWE7TUFBRUM7SUFBZSxDQUFDLEdBQUdULEtBQUs7O0lBRS9DO0lBQ0Esb0JBQ0VWLE1BQUEsQ0FBQW9CLE9BQUEsQ0FBQUMsYUFBQSxDQUFDakIsU0FBQSxDQUFBa0IsYUFBYTtNQUFDSixhQUFhLEVBQUVBLGFBQWM7TUFBQ0MsY0FBYyxFQUFFQSxjQUFlO01BQUNJLE9BQU8sRUFBRSxDQUFDO0lBQUUsZ0JBQ3ZGdkIsTUFBQSxDQUFBb0IsT0FBQSxDQUFBQyxhQUFBLENBQUNoQixlQUFBLENBQUFlLE9BQWMsTUFBQUksU0FBQSxDQUFBSixPQUFBLE1BQ1RWLEtBQUs7TUFDVEksT0FBTyxFQUFFQSxPQUFRO01BQ2pCRixPQUFPLEVBQUVBLE9BQVE7TUFDakJELGVBQWUsRUFBRUEsZUFBZ0I7TUFDakNFLG1CQUFtQixFQUFFQSxtQkFBb0I7TUFDekNFLGdCQUFnQixFQUFFQSxnQkFBaUI7TUFDbkNDLGdCQUFnQixFQUFFQTtJQUFpQixFQUNwQyxDQUNZLENBQUM7RUFFcEI7QUFDRjtBQUFDLElBQUFTLGdCQUFBLENBQUFMLE9BQUEsRUF2Q0tkLElBQUksZUFDVztFQUNqQkksS0FBSyxFQUFFZ0Isa0JBQVMsQ0FBQ0MsTUFBTTtFQUN2QmYsT0FBTyxFQUFFYyxrQkFBUyxDQUFDQyxNQUFNO0VBQ3pCYixPQUFPLEVBQUVZLGtCQUFTLENBQUNDLE1BQU07RUFDekJoQixlQUFlLEVBQUVlLGtCQUFTLENBQUNFLElBQUk7RUFDL0JmLG1CQUFtQixFQUFFYSxrQkFBUyxDQUFDRSxJQUFJO0VBQ25DVixhQUFhLEVBQUVRLGtCQUFTLENBQUNHLEtBQUssQ0FBQztJQUM3QkMsS0FBSyxFQUFFSixrQkFBUyxDQUFDSyxPQUFPLENBQUNMLGtCQUFTLENBQUNNLE1BQU0sQ0FBQztJQUMxQ0MsS0FBSyxFQUFFUCxrQkFBUyxDQUFDTTtFQUNuQixDQUFDLENBQUM7RUFDRmpCLGdCQUFnQixFQUFFVyxrQkFBUyxDQUFDUSxNQUFNO0VBQ2xDbEIsZ0JBQWdCLEVBQUVVLGtCQUFTLENBQUNTO0FBQzlCLENBQUM7QUFBQSxJQUFBVixnQkFBQSxDQUFBTCxPQUFBLEVBYkdkLElBQUksa0JBZWM7RUFDcEJJLEtBQUssRUFBRSxDQUFDLENBQUM7RUFDVEUsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBQUEsSUFBQXdCLFFBQUEsR0FBQUMsT0FBQSxDQUFBakIsT0FBQSxHQXVCWWQsSUFBSSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","names":["_react","_interopRequireDefault","require","_propTypes","_renderUi","_multipleChoice","Main","React","Component","render","model","onChoiceChanged","session","onShowCorrectToggle","options","baseHeadingLevel","includeSrHeading","props","extraCSSRules","fontSizeFactor","default","createElement","PreviewLayout","classes","_extends2","_defineProperty2","PropTypes","object","func","shape","names","arrayOf","string","rules","number","bool","_default","exports"],"sources":["../src/main.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { PreviewLayout } from '@pie-lib/render-ui';\nimport MultipleChoice from './multiple-choice';\n\nclass Main extends React.Component {\n static propTypes = {\n model: PropTypes.object,\n session: PropTypes.object,\n options: PropTypes.object,\n onChoiceChanged: PropTypes.func,\n onShowCorrectToggle: PropTypes.func,\n extraCSSRules: PropTypes.shape({\n names: PropTypes.arrayOf(PropTypes.string),\n rules: PropTypes.string,\n }),\n baseHeadingLevel: PropTypes.number,\n includeSrHeading: PropTypes.bool,\n };\n\n static defaultProps = {\n model: {},\n session: {},\n };\n\n render() {\n const { model, onChoiceChanged, session, onShowCorrectToggle, options, baseHeadingLevel, includeSrHeading } = this.props;\n const { extraCSSRules, fontSizeFactor } = model;\n\n // model.partLabel is a property used for ebsr\n return (\n <PreviewLayout extraCSSRules={extraCSSRules} fontSizeFactor={fontSizeFactor} classes={{}}>\n <MultipleChoice\n {...model}\n options={options}\n session={session}\n onChoiceChanged={onChoiceChanged}\n onShowCorrectToggle={onShowCorrectToggle}\n baseHeadingLevel={baseHeadingLevel}\n includeSrHeading={includeSrHeading}\n />\n </PreviewLayout>\n );\n }\n}\n\nexport default Main;\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAEA,MAAMI,IAAI,SAASC,cAAK,CAACC,SAAS,CAAC;EAoBjCC,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,KAAK;MAAEC,eAAe;MAAEC,OAAO;MAAEC,mBAAmB;MAAEC,OAAO;MAAEC,gBAAgB;MAAEC;IAAiB,CAAC,GAAG,IAAI,CAACC,KAAK;IACxH,MAAM;MAAEC,aAAa;MAAEC;IAAe,CAAC,GAAGT,KAAK;;IAE/C;IACA,oBACEV,MAAA,CAAAoB,OAAA,CAAAC,aAAA,CAACjB,SAAA,CAAAkB,aAAa;MAACJ,aAAa,EAAEA,aAAc;MAACC,cAAc,EAAEA,cAAe;MAACI,OAAO,EAAE,CAAC;IAAE,gBACvFvB,MAAA,CAAAoB,OAAA,CAAAC,aAAA,CAAChB,eAAA,CAAAe,OAAc,MAAAI,SAAA,CAAAJ,OAAA,MACTV,KAAK;MACTI,OAAO,EAAEA,OAAQ;MACjBF,OAAO,EAAEA,OAAQ;MACjBD,eAAe,EAAEA,eAAgB;MACjCE,mBAAmB,EAAEA,mBAAoB;MACzCE,gBAAgB,EAAEA,gBAAiB;MACnCC,gBAAgB,EAAEA;IAAiB,EACpC,CACY,CAAC;EAEpB;AACF;AAAC,IAAAS,gBAAA,CAAAL,OAAA,EAvCKd,IAAI,eACW;EACjBI,KAAK,EAAEgB,kBAAS,CAACC,MAAM;EACvBf,OAAO,EAAEc,kBAAS,CAACC,MAAM;EACzBb,OAAO,EAAEY,kBAAS,CAACC,MAAM;EACzBhB,eAAe,EAAEe,kBAAS,CAACE,IAAI;EAC/Bf,mBAAmB,EAAEa,kBAAS,CAACE,IAAI;EACnCV,aAAa,EAAEQ,kBAAS,CAACG,KAAK,CAAC;IAC7BC,KAAK,EAAEJ,kBAAS,CAACK,OAAO,CAACL,kBAAS,CAACM,MAAM,CAAC;IAC1CC,KAAK,EAAEP,kBAAS,CAACM;EACnB,CAAC,CAAC;EACFjB,gBAAgB,EAAEW,kBAAS,CAACQ,MAAM;EAClClB,gBAAgB,EAAEU,kBAAS,CAACS;AAC9B,CAAC;AAAA,IAAAV,gBAAA,CAAAL,OAAA,EAbGd,IAAI,kBAec;EACpBI,KAAK,EAAE,CAAC,CAAC;EACTE,OAAO,EAAE,CAAC;AACZ,CAAC;AAAA,IAAAwB,QAAA,GAAAC,OAAA,CAAAjB,OAAA,GAuBYd,IAAI","ignoreList":[]}