@pie-element/extended-text-entry 6.6.3 → 6.7.0-annotations.1

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.
@@ -116,6 +116,41 @@
116
116
  "type": "string",
117
117
  "title": "toolbarEditorPosition"
118
118
  },
119
+ "predefinedAnnotations": {
120
+ "description": "Indicates the predefined annotations for the annotation menu",
121
+ "type": "array",
122
+ "items": {
123
+ "title": "PredefinedAnnotation",
124
+ "type": "object",
125
+ "properties": {
126
+ "label": {
127
+ "description": "Indicates the value displayed in the annotation button",
128
+ "type": "string",
129
+ "title": "label"
130
+ },
131
+ "text": {
132
+ "description": "Indicates the annotation value",
133
+ "type": "string",
134
+ "title": "text"
135
+ },
136
+ "type": {
137
+ "description": "Indicates the type of the annotation",
138
+ "enum": [
139
+ "negative",
140
+ "positive"
141
+ ],
142
+ "type": "string",
143
+ "title": "type"
144
+ }
145
+ },
146
+ "required": [
147
+ "label",
148
+ "text",
149
+ "type"
150
+ ]
151
+ },
152
+ "title": "predefinedAnnotations"
153
+ },
119
154
  "id": {
120
155
  "description": "Identifier to identify the Pie Element in html markup, Must be unique within a pie item config.",
121
156
  "type": "string",
@@ -212,6 +247,36 @@
212
247
  "required": [
213
248
  "type"
214
249
  ]
250
+ },
251
+ "PredefinedAnnotation": {
252
+ "title": "PredefinedAnnotation",
253
+ "type": "object",
254
+ "properties": {
255
+ "label": {
256
+ "description": "Indicates the value displayed in the annotation button",
257
+ "type": "string",
258
+ "title": "label"
259
+ },
260
+ "text": {
261
+ "description": "Indicates the annotation value",
262
+ "type": "string",
263
+ "title": "text"
264
+ },
265
+ "type": {
266
+ "description": "Indicates the type of the annotation",
267
+ "enum": [
268
+ "negative",
269
+ "positive"
270
+ ],
271
+ "type": "string",
272
+ "title": "type"
273
+ }
274
+ },
275
+ "required": [
276
+ "label",
277
+ "text",
278
+ "type"
279
+ ]
215
280
  }
216
281
  },
217
282
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -95,6 +95,31 @@ This element must be one of the following enum values:
95
95
  * `bottom`
96
96
  * `top`
97
97
 
98
+ # `predefinedAnnotations` (array)
99
+
100
+ Indicates the predefined annotations for the annotation menu
101
+
102
+ The object is an array with all elements of the type `object`.
103
+
104
+ The array object has the following properties:
105
+
106
+ ## `label` (string, required)
107
+
108
+ Indicates the value displayed in the annotation button
109
+
110
+ ## `text` (string, required)
111
+
112
+ Indicates the annotation value
113
+
114
+ ## `type` (string, enum, required)
115
+
116
+ Indicates the type of the annotation
117
+
118
+ This element must be one of the following enum values:
119
+
120
+ * `negative`
121
+ * `positive`
122
+
98
123
  # `id` (string, required)
99
124
 
100
125
  Identifier to identify the Pie Element in html markup, Must be unique within a pie item config.
@@ -165,4 +190,25 @@ This element must be one of the following enum values:
165
190
 
166
191
  ### `default` (string)
167
192
 
168
- Indicates the feedback value
193
+ Indicates the feedback value
194
+
195
+ ## `PredefinedAnnotation` (object)
196
+
197
+ Properties of the `PredefinedAnnotation` object:
198
+
199
+ ### `label` (string, required)
200
+
201
+ Indicates the value displayed in the annotation button
202
+
203
+ ### `text` (string, required)
204
+
205
+ Indicates the annotation value
206
+
207
+ ### `type` (string, enum, required)
208
+
209
+ Indicates the type of the annotation
210
+
211
+ This element must be one of the following enum values:
212
+
213
+ * `negative`
214
+ * `positive`
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
6
+
7
+ var _index = require("../index");
8
+
9
+ describe('textContent', function () {
10
+ var assertContent = function assertContent() {
11
+ var args = Array.prototype.slice.call(arguments);
12
+
13
+ var _ref = args.length === 2 ? args : [args[0], args[0]],
14
+ _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
15
+ input = _ref2[0],
16
+ expected = _ref2[1];
17
+
18
+ it("".concat(input, " => ").concat(expected), function () {
19
+ var result = (0, _index.textContent)(input);
20
+ expect(result).toEqual(expected);
21
+ });
22
+ };
23
+
24
+ assertContent(undefined);
25
+ assertContent([], undefined);
26
+ assertContent({}, undefined);
27
+ assertContent("", "");
28
+ assertContent("<div></div>", "");
29
+ assertContent("< div ->/div>", "< div ->/div>");
30
+ assertContent("<foo", "");
31
+ assertContent("<foo/ >", "");
32
+ assertContent("<foo />", "");
33
+ });
34
+ describe('Completeness Checker', function () {
35
+ var assertIsComplete = function assertIsComplete(input, expected) {
36
+ it("".concat(input, ": ").concat(expected), function () {
37
+ expect((0, _index.isComplete)(input)).toEqual(expected);
38
+ });
39
+ };
40
+
41
+ assertIsComplete("", false);
42
+ assertIsComplete("<div></div>", false);
43
+ assertIsComplete("<div><p></p><h1></h1></div>", false);
44
+ assertIsComplete("<div><p></p><h1</h1></div>", false);
45
+ assertIsComplete("<div>test</div>", true);
46
+ assertIsComplete("<div><p><a>test</a></p></div>", true);
47
+ assertIsComplete("foo", true);
48
+ });
49
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImFzc2VydENvbnRlbnQiLCJhcmdzIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJpbnB1dCIsImV4cGVjdGVkIiwiaXQiLCJyZXN1bHQiLCJleHBlY3QiLCJ0b0VxdWFsIiwidW5kZWZpbmVkIiwiYXNzZXJ0SXNDb21wbGV0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBRUFBLFFBQVEsQ0FBQyxhQUFELEVBQWdCLFlBQU07QUFFNUIsTUFBTUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixHQUFZO0FBQ2hDLFFBQU1DLElBQUksR0FBR0MsS0FBSyxDQUFDQyxTQUFOLENBQWdCQyxLQUFoQixDQUFzQkMsSUFBdEIsQ0FBMkJDLFNBQTNCLENBQWI7O0FBQ0EsZUFBMEJMLElBQUksQ0FBQ00sTUFBTCxLQUFnQixDQUFoQixHQUFvQk4sSUFBcEIsR0FBMkIsQ0FBQ0EsSUFBSSxDQUFDLENBQUQsQ0FBTCxFQUFVQSxJQUFJLENBQUMsQ0FBRCxDQUFkLENBQXJEO0FBQUE7QUFBQSxRQUFPTyxLQUFQO0FBQUEsUUFBY0MsUUFBZDs7QUFDQUMsSUFBQUEsRUFBRSxXQUFJRixLQUFKLGlCQUFnQkMsUUFBaEIsR0FBNEIsWUFBTTtBQUNsQyxVQUFNRSxNQUFNLEdBQUcsd0JBQVlILEtBQVosQ0FBZjtBQUNBSSxNQUFBQSxNQUFNLENBQUNELE1BQUQsQ0FBTixDQUFlRSxPQUFmLENBQXVCSixRQUF2QjtBQUNELEtBSEMsQ0FBRjtBQUlELEdBUEQ7O0FBUUFULEVBQUFBLGFBQWEsQ0FBQ2MsU0FBRCxDQUFiO0FBQ0FkLEVBQUFBLGFBQWEsQ0FBQyxFQUFELEVBQUtjLFNBQUwsQ0FBYjtBQUNBZCxFQUFBQSxhQUFhLENBQUMsRUFBRCxFQUFLYyxTQUFMLENBQWI7QUFDQWQsRUFBQUEsYUFBYSxDQUFDLEVBQUQsRUFBSyxFQUFMLENBQWI7QUFDQUEsRUFBQUEsYUFBYSxDQUFDLGFBQUQsRUFBZ0IsRUFBaEIsQ0FBYjtBQUNBQSxFQUFBQSxhQUFhLENBQUMsZUFBRCxFQUFrQixlQUFsQixDQUFiO0FBQ0FBLEVBQUFBLGFBQWEsQ0FBQyxNQUFELEVBQVMsRUFBVCxDQUFiO0FBQ0FBLEVBQUFBLGFBQWEsQ0FBQyxTQUFELEVBQVksRUFBWixDQUFiO0FBQ0FBLEVBQUFBLGFBQWEsQ0FBQyxTQUFELEVBQVksRUFBWixDQUFiO0FBQ0QsQ0FuQk8sQ0FBUjtBQXFCQUQsUUFBUSxDQUFDLHNCQUFELEVBQXlCLFlBQU07QUFFckMsTUFBTWdCLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUIsQ0FBQ1AsS0FBRCxFQUFRQyxRQUFSLEVBQXFCO0FBQzVDQyxJQUFBQSxFQUFFLFdBQUlGLEtBQUosZUFBY0MsUUFBZCxHQUEwQixZQUFNO0FBQ2xDRyxNQUFBQSxNQUFNLENBQUMsdUJBQVdKLEtBQVgsQ0FBRCxDQUFOLENBQTBCSyxPQUExQixDQUFrQ0osUUFBbEM7QUFDQyxLQUZDLENBQUY7QUFHRCxHQUpEOztBQUtBTSxFQUFBQSxnQkFBZ0IsQ0FBQyxFQUFELEVBQUssS0FBTCxDQUFoQjtBQUNBQSxFQUFBQSxnQkFBZ0IsQ0FBQyxhQUFELEVBQWdCLEtBQWhCLENBQWhCO0FBQ0FBLEVBQUFBLGdCQUFnQixDQUFDLDZCQUFELEVBQWdDLEtBQWhDLENBQWhCO0FBQ0FBLEVBQUFBLGdCQUFnQixDQUFDLDRCQUFELEVBQStCLEtBQS9CLENBQWhCO0FBQ0FBLEVBQUFBLGdCQUFnQixDQUFDLGlCQUFELEVBQW9CLElBQXBCLENBQWhCO0FBQ0FBLEVBQUFBLGdCQUFnQixDQUFDLCtCQUFELEVBQWtDLElBQWxDLENBQWhCO0FBQ0FBLEVBQUFBLGdCQUFnQixDQUFDLEtBQUQsRUFBUSxJQUFSLENBQWhCO0FBQ0QsQ0FkTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IGlzQ29tcGxldGUsIHRleHRDb250ZW50IH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5kZXNjcmliZSgndGV4dENvbnRlbnQnLCAoKSA9PiB7XG5cbiAgY29uc3QgYXNzZXJ0Q29udGVudCA9IGZ1bmN0aW9uKCkgIHtcbiAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICBjb25zdCBbaW5wdXQsIGV4cGVjdGVkXSA9IGFyZ3MubGVuZ3RoID09PSAyID8gYXJncyA6IFthcmdzWzBdLCBhcmdzWzBdXTtcbiAgICBpdChgJHtpbnB1dH0gPT4gJHtleHBlY3RlZH1gICwoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0Q29udGVudChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkICApO1xuICAgIH0pXG4gIH1cbiAgYXNzZXJ0Q29udGVudCh1bmRlZmluZWQgKTtcbiAgYXNzZXJ0Q29udGVudChbXSwgdW5kZWZpbmVkKTtcbiAgYXNzZXJ0Q29udGVudCh7fSwgdW5kZWZpbmVkKTtcbiAgYXNzZXJ0Q29udGVudChcIlwiLCBcIlwiKTtcbiAgYXNzZXJ0Q29udGVudChcIjxkaXY+PC9kaXY+XCIsIFwiXCIpO1xuICBhc3NlcnRDb250ZW50KFwiPCBkaXYgLT4vZGl2PlwiLCBcIjwgZGl2IC0+L2Rpdj5cIik7XG4gIGFzc2VydENvbnRlbnQoXCI8Zm9vXCIsIFwiXCIpXG4gIGFzc2VydENvbnRlbnQoXCI8Zm9vLyA+XCIsIFwiXCIpXG4gIGFzc2VydENvbnRlbnQoXCI8Zm9vIC8+XCIsIFwiXCIpXG59KTtcblxuZGVzY3JpYmUoJ0NvbXBsZXRlbmVzcyBDaGVja2VyJywgKCkgPT4ge1xuXG4gIGNvbnN0IGFzc2VydElzQ29tcGxldGUgPSAoaW5wdXQsIGV4cGVjdGVkKSA9PiB7XG4gICAgaXQoYCR7aW5wdXR9OiAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICBleHBlY3QoaXNDb21wbGV0ZShpbnB1dCkpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pXG4gIH1cbiAgYXNzZXJ0SXNDb21wbGV0ZShcIlwiLCBmYWxzZSk7XG4gIGFzc2VydElzQ29tcGxldGUoXCI8ZGl2PjwvZGl2PlwiLCBmYWxzZSk7XG4gIGFzc2VydElzQ29tcGxldGUoXCI8ZGl2PjxwPjwvcD48aDE+PC9oMT48L2Rpdj5cIiwgZmFsc2UpO1xuICBhc3NlcnRJc0NvbXBsZXRlKFwiPGRpdj48cD48L3A+PGgxPC9oMT48L2Rpdj5cIiwgZmFsc2UpO1xuICBhc3NlcnRJc0NvbXBsZXRlKFwiPGRpdj50ZXN0PC9kaXY+XCIsIHRydWUpO1xuICBhc3NlcnRJc0NvbXBsZXRlKFwiPGRpdj48cD48YT50ZXN0PC9hPjwvcD48L2Rpdj5cIiwgdHJ1ZSk7XG4gIGFzc2VydElzQ29tcGxldGUoXCJmb29cIiwgdHJ1ZSk7XG59KTsiXX0=
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
+
7
+ var _react = _interopRequireDefault(require("react"));
8
+
9
+ var _main = require("../main");
10
+
11
+ var _enzyme = require("enzyme");
12
+
13
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
14
+
15
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
16
+
17
+ describe('Render Main Component', function () {
18
+ var model = {
19
+ width: 100,
20
+ height: 50
21
+ };
22
+ it('should match snapshot', function () {
23
+ var wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_main.Main, {
24
+ model: model,
25
+ session: {
26
+ value: 'hi',
27
+ annotations: [],
28
+ comment: 'hello'
29
+ },
30
+ onValueChange: function onValueChange() {},
31
+ onAnnotationsChange: function onAnnotationsChange() {},
32
+ onCommentChange: function onCommentChange() {},
33
+ classes: {}
34
+ }));
35
+ expect(wrapper).toMatchSnapshot();
36
+ });
37
+ it('should match snapshot with teacher instructions', function () {
38
+ var wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_main.Main, {
39
+ model: _objectSpread(_objectSpread({}, model), {}, {
40
+ teacherInstructions: 'Teacher Instructions'
41
+ }),
42
+ session: {
43
+ value: 'hi',
44
+ annotations: [],
45
+ comment: 'hello'
46
+ },
47
+ onValueChange: function onValueChange() {},
48
+ onAnnotationsChange: function onAnnotationsChange() {},
49
+ onCommentChange: function onCommentChange() {},
50
+ classes: {}
51
+ }));
52
+ expect(wrapper).toMatchSnapshot();
53
+ });
54
+ });
55
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vbWFpbi50ZXN0LmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwibW9kZWwiLCJ3aWR0aCIsImhlaWdodCIsIml0Iiwid3JhcHBlciIsInZhbHVlIiwiYW5ub3RhdGlvbnMiLCJjb21tZW50IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwidGVhY2hlckluc3RydWN0aW9ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBQSxRQUFRLENBQUMsdUJBQUQsRUFBMEIsWUFBTTtBQUN0QyxNQUFJQyxLQUFLLEdBQUc7QUFBRUMsSUFBQUEsS0FBSyxFQUFFLEdBQVQ7QUFBY0MsSUFBQUEsTUFBTSxFQUFFO0FBQXRCLEdBQVo7QUFFQUMsRUFBQUEsRUFBRSxDQUFDLHVCQUFELEVBQTBCLFlBQU07QUFDaEMsUUFBSUMsT0FBTyxHQUFHLG1DQUNaLGdDQUFDLFVBQUQ7QUFDRSxNQUFBLEtBQUssRUFBRUosS0FEVDtBQUVFLE1BQUEsT0FBTyxFQUFFO0FBQ1BLLFFBQUFBLEtBQUssRUFBRSxJQURBO0FBRVBDLFFBQUFBLFdBQVcsRUFBRSxFQUZOO0FBR1BDLFFBQUFBLE9BQU8sRUFBRTtBQUhGLE9BRlg7QUFPRSxNQUFBLGFBQWEsRUFBRSx5QkFBTSxDQUFFLENBUHpCO0FBUUUsTUFBQSxtQkFBbUIsRUFBRSwrQkFBTSxDQUFFLENBUi9CO0FBU0UsTUFBQSxlQUFlLEVBQUUsMkJBQU0sQ0FBRSxDQVQzQjtBQVVFLE1BQUEsT0FBTyxFQUFFO0FBVlgsTUFEWSxDQUFkO0FBY0FDLElBQUFBLE1BQU0sQ0FBQ0osT0FBRCxDQUFOLENBQWdCSyxlQUFoQjtBQUNELEdBaEJDLENBQUY7QUFrQkFOLEVBQUFBLEVBQUUsQ0FBQyxpREFBRCxFQUFvRCxZQUFNO0FBQzFELFFBQUlDLE9BQU8sR0FBRyxtQ0FDWixnQ0FBQyxVQUFEO0FBQ0UsTUFBQSxLQUFLLGtDQUFPSixLQUFQO0FBQWNVLFFBQUFBLG1CQUFtQixFQUFFO0FBQW5DLFFBRFA7QUFFRSxNQUFBLE9BQU8sRUFBRTtBQUNQTCxRQUFBQSxLQUFLLEVBQUUsSUFEQTtBQUVQQyxRQUFBQSxXQUFXLEVBQUUsRUFGTjtBQUdQQyxRQUFBQSxPQUFPLEVBQUU7QUFIRixPQUZYO0FBT0UsTUFBQSxhQUFhLEVBQUUseUJBQU0sQ0FBRSxDQVB6QjtBQVFFLE1BQUEsbUJBQW1CLEVBQUUsK0JBQU0sQ0FBRSxDQVIvQjtBQVNFLE1BQUEsZUFBZSxFQUFFLDJCQUFNLENBQUUsQ0FUM0I7QUFVRSxNQUFBLE9BQU8sRUFBRTtBQVZYLE1BRFksQ0FBZDtBQWNBQyxJQUFBQSxNQUFNLENBQUNKLE9BQUQsQ0FBTixDQUFnQkssZUFBaEI7QUFDRCxHQWhCQyxDQUFGO0FBa0JELENBdkNPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWFpbiB9IGZyb20gJy4uL21haW4nO1xuaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZSc7XG5cbmRlc2NyaWJlKCdSZW5kZXIgTWFpbiBDb21wb25lbnQnLCAoKSA9PiB7XG4gIGxldCBtb2RlbCA9IHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA1MCB9O1xuXG4gIGl0KCdzaG91bGQgbWF0Y2ggc25hcHNob3QnLCAoKSA9PiB7XG4gICAgbGV0IHdyYXBwZXIgPSBzaGFsbG93KFxuICAgICAgPE1haW5cbiAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICBzZXNzaW9uPXt7XG4gICAgICAgICAgdmFsdWU6ICdoaScsXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgIGNvbW1lbnQ6ICdoZWxsbydcbiAgICAgICAgfX1cbiAgICAgICAgb25WYWx1ZUNoYW5nZT17KCkgPT4ge319XG4gICAgICAgIG9uQW5ub3RhdGlvbnNDaGFuZ2U9eygpID0+IHt9fVxuICAgICAgICBvbkNvbW1lbnRDaGFuZ2U9eygpID0+IHt9fVxuICAgICAgICBjbGFzc2VzPXt7fX1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBleHBlY3Qod3JhcHBlcikudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbWF0Y2ggc25hcHNob3Qgd2l0aCB0ZWFjaGVyIGluc3RydWN0aW9ucycsICgpID0+IHtcbiAgICBsZXQgd3JhcHBlciA9IHNoYWxsb3coXG4gICAgICA8TWFpblxuICAgICAgICBtb2RlbD17eyAuLi5tb2RlbCwgdGVhY2hlckluc3RydWN0aW9uczogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zJyB9fVxuICAgICAgICBzZXNzaW9uPXt7XG4gICAgICAgICAgdmFsdWU6ICdoaScsXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgIGNvbW1lbnQ6ICdoZWxsbydcbiAgICAgICAgfX1cbiAgICAgICAgb25WYWx1ZUNoYW5nZT17KCkgPT4ge319XG4gICAgICAgIG9uQW5ub3RhdGlvbnNDaGFuZ2U9eygpID0+IHt9fVxuICAgICAgICBvbkNvbW1lbnRDaGFuZ2U9eygpID0+IHt9fVxuICAgICAgICBjbGFzc2VzPXt7fX1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBleHBlY3Qod3JhcHBlcikudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0pO1xuXG59KTtcbiJdfQ==