@pie-element/hotspot 4.10.16-next.1 → 4.11.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 (52) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/LICENSE.md +5 -0
  3. package/configure/CHANGELOG.md +75 -0
  4. package/configure/lib/button.js +1 -1
  5. package/configure/lib/defaults.js +3 -2
  6. package/configure/lib/defaults.js.map +1 -1
  7. package/configure/lib/hotspot-container.js +1 -1
  8. package/configure/lib/hotspot-drawable.js +2 -2
  9. package/configure/lib/hotspot-palette.js +1 -1
  10. package/configure/lib/hotspot-polygon.js +1 -1
  11. package/configure/lib/hotspot-rectangle.js +1 -1
  12. package/configure/lib/index.js +1 -1
  13. package/configure/lib/root.js +23 -18
  14. package/configure/lib/root.js.map +1 -1
  15. package/configure/lib/upload-control.js +1 -1
  16. package/configure/lib/utils.js +14 -2
  17. package/configure/lib/utils.js.map +1 -1
  18. package/configure/package.json +3 -3
  19. package/configure/src/__tests__/__snapshots__/root.test.js.snap +32 -4
  20. package/configure/src/defaults.js +2 -1
  21. package/configure/src/hotspot-drawable.jsx +1 -1
  22. package/configure/src/root.jsx +33 -26
  23. package/configure/src/utils.js +23 -1
  24. package/controller/CHANGELOG.md +12 -0
  25. package/controller/lib/defaults.js +1 -1
  26. package/controller/lib/index.js +1 -1
  27. package/controller/lib/index.js.map +1 -1
  28. package/controller/lib/utils.js +1 -1
  29. package/controller/package.json +1 -1
  30. package/lib/hotspot/container.js +1 -1
  31. package/lib/hotspot/icons.js +1 -1
  32. package/lib/hotspot/image.js +1 -1
  33. package/lib/hotspot/index.js +1 -1
  34. package/lib/hotspot/polygon.js +1 -1
  35. package/lib/hotspot/rectangle.js +1 -1
  36. package/lib/index.js +4 -1
  37. package/lib/session-updater.js +1 -1
  38. package/package.json +4 -4
  39. package/src/index.js +5 -0
  40. package/configure/lib/__tests__/hotspot-container.test.js +0 -281
  41. package/configure/lib/__tests__/hotspot-drawable.test.js +0 -241
  42. package/configure/lib/__tests__/index.test.js +0 -224
  43. package/configure/lib/__tests__/root.test.js +0 -443
  44. package/configure/lib/__tests__/utils.test.js +0 -335
  45. package/controller/lib/__tests__/index.test.js +0 -921
  46. package/controller/lib/__tests__/utils.test.js +0 -8
  47. package/docs/demo/pie.manifest.json +0 -11
  48. package/lib/__tests__/container-test.js +0 -185
  49. package/lib/__tests__/image-test.js +0 -63
  50. package/lib/__tests__/polygon-test.js +0 -99
  51. package/lib/__tests__/rectangle-test.js +0 -92
  52. package/lib/__tests__/session-updater-test.js +0 -78
@@ -1,335 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
-
7
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
8
-
9
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
10
-
11
- var _react = _interopRequireDefault(require("react"));
12
-
13
- var _utils = require("../utils");
14
-
15
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
16
-
17
- var width = 200;
18
- var height = 100;
19
- var imageDimensions = {
20
- width: width,
21
- height: height
22
- };
23
- describe('updateImageDimensions', function () {
24
- it.each(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n initialDimensions | nextDimensions | keepAspectRatio | resizeType | expectedWidth | expectedHeight\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", " | ", " | ", "\n ", " | ", "| ", " | ", " | ", " | ", "\n "])), imageDimensions, {
25
- width: width,
26
- height: 300
27
- }, true, 'height', 600, 300, imageDimensions, {
28
- width: 400,
29
- height: height
30
- }, true, 'width', 400, 200, imageDimensions, {
31
- width: width,
32
- height: 300
33
- }, true, undefined, 200, 100, imageDimensions, {
34
- width: 600,
35
- height: height
36
- }, true, undefined, 600, 300, imageDimensions, {
37
- width: width,
38
- height: 300
39
- }, false, 'height', 200, 300, imageDimensions, {
40
- width: 600,
41
- height: height
42
- }, false, 'width', 600, 100, imageDimensions, {
43
- width: 10,
44
- height: 10
45
- }, false, undefined, 10, 10)('initialDimensions = $initialDimensions, nextDimensions = $nextDimensions, keepAspectRatio = $keepAspectRatio, resizeType = $resizeType => width = $expectedWidth & height = $expectedHeight', /*#__PURE__*/function () {
46
- var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) {
47
- var initialDimensions, nextDimensions, keepAspectRatio, resizeType, expectedWidth, expectedHeight, result;
48
- return _regenerator["default"].wrap(function _callee$(_context) {
49
- while (1) {
50
- switch (_context.prev = _context.next) {
51
- case 0:
52
- initialDimensions = _ref.initialDimensions, nextDimensions = _ref.nextDimensions, keepAspectRatio = _ref.keepAspectRatio, resizeType = _ref.resizeType, expectedWidth = _ref.expectedWidth, expectedHeight = _ref.expectedHeight;
53
- result = (0, _utils.updateImageDimensions)(initialDimensions, nextDimensions, keepAspectRatio, resizeType);
54
- expect(result).toEqual({
55
- width: expectedWidth,
56
- height: expectedHeight
57
- });
58
-
59
- case 3:
60
- case "end":
61
- return _context.stop();
62
- }
63
- }
64
- }, _callee);
65
- }));
66
-
67
- return function (_x) {
68
- return _ref2.apply(this, arguments);
69
- };
70
- }());
71
- });
72
- describe('getUpdatedRectangle', function () {
73
- var rectangle = function rectangle(x, y, w, h) {
74
- return {
75
- x: x,
76
- y: y,
77
- width: w,
78
- height: h
79
- };
80
- };
81
-
82
- var heightUpdateLarge = {
83
- width: width,
84
- height: 300
85
- };
86
- var heightUpdateSmall = {
87
- width: width,
88
- height: 50
89
- };
90
- var widthUpdateLarge = {
91
- width: 300,
92
- height: height
93
- };
94
- var widthUpdateSmall = {
95
- width: 100,
96
- height: height
97
- };
98
- var bothUpdate = {
99
- width: 20,
100
- height: 50
101
- };
102
- it.each(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n initialDimensions | nextDimensions | shape | expected\n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n "])), imageDimensions, heightUpdateLarge, rectangle(10, 10, 100, 50), rectangle(10, 30, 100, 150), imageDimensions, heightUpdateSmall, rectangle(10, 10, 100, 50), rectangle(10, 5, 100, 25), imageDimensions, bothUpdate, rectangle(10, 10, 100, 50), rectangle(1, 5, 10, 25), imageDimensions, widthUpdateLarge, rectangle(10, 10, 100, 50), rectangle(15, 10, 150, 50), imageDimensions, widthUpdateSmall, rectangle(10, 10, 100, 50), rectangle(5, 10, 50, 50))('initialDimensions = $initialDimensions, nextDimensions = $nextDimensions, shape = $shape => $expected', /*#__PURE__*/function () {
103
- var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_ref3) {
104
- var initialDimensions, nextDimensions, shape, expected, result;
105
- return _regenerator["default"].wrap(function _callee2$(_context2) {
106
- while (1) {
107
- switch (_context2.prev = _context2.next) {
108
- case 0:
109
- initialDimensions = _ref3.initialDimensions, nextDimensions = _ref3.nextDimensions, shape = _ref3.shape, expected = _ref3.expected;
110
- result = (0, _utils.getUpdatedRectangle)(initialDimensions, nextDimensions, shape);
111
- expect(result).toEqual(expected);
112
-
113
- case 3:
114
- case "end":
115
- return _context2.stop();
116
- }
117
- }
118
- }, _callee2);
119
- }));
120
-
121
- return function (_x2) {
122
- return _ref4.apply(this, arguments);
123
- };
124
- }());
125
- });
126
- describe('getUpdatedPolygon', function () {
127
- var updatedDimensions = {
128
- width: width / 2,
129
- height: height * 2
130
- };
131
-
132
- var point = function point(x, y) {
133
- return {
134
- x: x,
135
- y: y
136
- };
137
- };
138
-
139
- var updatedPoint = function updatedPoint(x, y) {
140
- return {
141
- x: x / 2,
142
- y: y * 2
143
- };
144
- };
145
-
146
- var triangle = [point(10, 10), point(100, 10), point(100, 100)];
147
- var triangleUpdated = [updatedPoint(10, 10), updatedPoint(100, 10), updatedPoint(100, 100)];
148
- var square = [point(10, 10), point(100, 10), point(100, 100), point(10, 100)];
149
- var squareUpdated = [updatedPoint(10, 10), updatedPoint(100, 10), updatedPoint(100, 100), updatedPoint(10, 100)];
150
- var pentagon = [point(10, 10), point(20, 0), point(30, 0), point(40, 10), point(25, 20)];
151
- var pentagonUpdated = [updatedPoint(10, 10), updatedPoint(20, 0), updatedPoint(30, 0), updatedPoint(40, 10), updatedPoint(25, 20)];
152
- var hexagon = [point(10, 10), point(20, 0), point(30, 0), point(40, 10), point(30, 20), point(20, 20)];
153
- var hexagonUpdated = [updatedPoint(10, 10), updatedPoint(20, 0), updatedPoint(30, 0), updatedPoint(40, 10), updatedPoint(30, 20), updatedPoint(20, 20)];
154
-
155
- var polygon = function polygon(points) {
156
- return {
157
- points: points
158
- };
159
- };
160
-
161
- it.each(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n initialDimensions | nextDimensions | shape | expected\n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n ", " | ", " | ", " | ", " \n "])), imageDimensions, updatedDimensions, polygon(triangle), polygon(triangleUpdated), imageDimensions, updatedDimensions, polygon(square), polygon(squareUpdated), imageDimensions, updatedDimensions, polygon(pentagon), polygon(pentagonUpdated), imageDimensions, updatedDimensions, polygon(hexagon), polygon(hexagonUpdated))('initialDimensions = $initialDimensions, nextDimensions = $nextDimensions, shape = $shape => $expected', /*#__PURE__*/function () {
162
- var _ref6 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref5) {
163
- var initialDimensions, nextDimensions, shape, expected, result;
164
- return _regenerator["default"].wrap(function _callee3$(_context3) {
165
- while (1) {
166
- switch (_context3.prev = _context3.next) {
167
- case 0:
168
- initialDimensions = _ref5.initialDimensions, nextDimensions = _ref5.nextDimensions, shape = _ref5.shape, expected = _ref5.expected;
169
- result = (0, _utils.getUpdatedPlygon)(initialDimensions, nextDimensions, shape);
170
- expect(result).toEqual(expected);
171
-
172
- case 3:
173
- case "end":
174
- return _context3.stop();
175
- }
176
- }
177
- }, _callee3);
178
- }));
179
-
180
- return function (_x3) {
181
- return _ref6.apply(this, arguments);
182
- };
183
- }());
184
- });
185
- var shapesArray = [{
186
- height: 100,
187
- width: 100,
188
- x: 1,
189
- y: 1,
190
- group: 'rectangles',
191
- index: 0
192
- }, {
193
- height: 200,
194
- width: 200,
195
- x: 200,
196
- y: 1,
197
- group: 'rectangles',
198
- index: 1
199
- }, {
200
- points: [{
201
- x: 1,
202
- y: 200
203
- }, {
204
- x: 1,
205
- y: 200
206
- }, {
207
- y: 200,
208
- x: 200
209
- }, {
210
- y: 200,
211
- x: 200
212
- }],
213
- group: 'polygons',
214
- index: 2
215
- }, {
216
- points: [{
217
- x: 200,
218
- y: 100
219
- }, {
220
- x: 200,
221
- y: 200
222
- }, {
223
- x: 400,
224
- y: 200
225
- }, {
226
- x: 400,
227
- y: 200
228
- }],
229
- group: 'polygons',
230
- index: 3
231
- }];
232
- var shapesMap = {
233
- rectangles: [{
234
- height: 100,
235
- width: 100,
236
- x: 1,
237
- y: 1,
238
- index: 0
239
- }, {
240
- height: 200,
241
- width: 200,
242
- x: 200,
243
- y: 1,
244
- index: 1
245
- }],
246
- polygons: [{
247
- points: [{
248
- x: 1,
249
- y: 200
250
- }, {
251
- x: 1,
252
- y: 200
253
- }, {
254
- y: 200,
255
- x: 200
256
- }, {
257
- y: 200,
258
- x: 200
259
- }],
260
- index: 2
261
- }, {
262
- points: [{
263
- x: 200,
264
- y: 100
265
- }, {
266
- x: 200,
267
- y: 200
268
- }, {
269
- x: 400,
270
- y: 200
271
- }, {
272
- x: 400,
273
- y: 200
274
- }],
275
- index: 3
276
- }]
277
- };
278
- describe('getAllShapes', function () {
279
- it.each(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n shapesMap | expected\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n "])), shapesMap, shapesArray, null, [], undefined, [], {}, [])('TURNS shapes = $shapesMap INTO $expected', /*#__PURE__*/function () {
280
- var _ref8 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref7) {
281
- var shapesMap, expected;
282
- return _regenerator["default"].wrap(function _callee4$(_context4) {
283
- while (1) {
284
- switch (_context4.prev = _context4.next) {
285
- case 0:
286
- shapesMap = _ref7.shapesMap, expected = _ref7.expected;
287
- expect((0, _utils.getAllShapes)(shapesMap)).toEqual(expected);
288
-
289
- case 2:
290
- case "end":
291
- return _context4.stop();
292
- }
293
- }
294
- }, _callee4);
295
- }));
296
-
297
- return function (_x4) {
298
- return _ref8.apply(this, arguments);
299
- };
300
- }());
301
- });
302
- describe('groupShapes', function () {
303
- it.each(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n shapesArray | expected\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n "])), shapesArray, shapesMap, null, {
304
- rectangles: [],
305
- polygons: []
306
- }, undefined, {
307
- rectangles: [],
308
- polygons: []
309
- }, [], {
310
- rectangles: [],
311
- polygons: []
312
- })('TURNS shapes = $shapesArray INTO $expected', /*#__PURE__*/function () {
313
- var _ref10 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(_ref9) {
314
- var shapesArray, expected;
315
- return _regenerator["default"].wrap(function _callee5$(_context5) {
316
- while (1) {
317
- switch (_context5.prev = _context5.next) {
318
- case 0:
319
- shapesArray = _ref9.shapesArray, expected = _ref9.expected;
320
- expect((0, _utils.groupShapes)(shapesArray)).toEqual(expected);
321
-
322
- case 2:
323
- case "end":
324
- return _context5.stop();
325
- }
326
- }
327
- }, _callee5);
328
- }));
329
-
330
- return function (_x5) {
331
- return _ref10.apply(this, arguments);
332
- };
333
- }());
334
- });
335
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdXRpbHMudGVzdC5qcyJdLCJuYW1lcyI6WyJ3aWR0aCIsImhlaWdodCIsImltYWdlRGltZW5zaW9ucyIsImRlc2NyaWJlIiwiaXQiLCJlYWNoIiwidW5kZWZpbmVkIiwiaW5pdGlhbERpbWVuc2lvbnMiLCJuZXh0RGltZW5zaW9ucyIsImtlZXBBc3BlY3RSYXRpbyIsInJlc2l6ZVR5cGUiLCJleHBlY3RlZFdpZHRoIiwiZXhwZWN0ZWRIZWlnaHQiLCJyZXN1bHQiLCJleHBlY3QiLCJ0b0VxdWFsIiwicmVjdGFuZ2xlIiwieCIsInkiLCJ3IiwiaCIsImhlaWdodFVwZGF0ZUxhcmdlIiwiaGVpZ2h0VXBkYXRlU21hbGwiLCJ3aWR0aFVwZGF0ZUxhcmdlIiwid2lkdGhVcGRhdGVTbWFsbCIsImJvdGhVcGRhdGUiLCJzaGFwZSIsImV4cGVjdGVkIiwidXBkYXRlZERpbWVuc2lvbnMiLCJwb2ludCIsInVwZGF0ZWRQb2ludCIsInRyaWFuZ2xlIiwidHJpYW5nbGVVcGRhdGVkIiwic3F1YXJlIiwic3F1YXJlVXBkYXRlZCIsInBlbnRhZ29uIiwicGVudGFnb25VcGRhdGVkIiwiaGV4YWdvbiIsImhleGFnb25VcGRhdGVkIiwicG9seWdvbiIsInBvaW50cyIsInNoYXBlc0FycmF5IiwiZ3JvdXAiLCJpbmRleCIsInNoYXBlc01hcCIsInJlY3RhbmdsZXMiLCJwb2x5Z29ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7O0FBRUEsSUFBTUEsS0FBSyxHQUFHLEdBQWQ7QUFDQSxJQUFNQyxNQUFNLEdBQUcsR0FBZjtBQUNBLElBQU1DLGVBQWUsR0FBRztBQUFFRixFQUFBQSxLQUFLLEVBQUxBLEtBQUY7QUFBU0MsRUFBQUEsTUFBTSxFQUFOQTtBQUFULENBQXhCO0FBRUFFLFFBQVEsQ0FBQyx1QkFBRCxFQUEwQixZQUFNO0FBQ3RDQyxFQUFBQSxFQUFFLENBQUNDLElBQUgsZ3ZCQUVNSCxlQUZOLEVBRTRCO0FB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QUMsd0JBQVkyQixXQUFaLENBQUQsQ0FBTixDQUFpQzFCLE9BQWpDLENBQXlDWSxRQUF6Qzs7QUFERjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQVBGOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUQsQ0FYTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVwZGF0ZUltYWdlRGltZW5zaW9ucywgZ2V0VXBkYXRlZFJlY3RhbmdsZSwgZ2V0VXBkYXRlZFBseWdvbiwgZ2V0QWxsU2hhcGVzLCBncm91cFNoYXBlcyB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3Qgd2lkdGggPSAyMDA7XG5jb25zdCBoZWlnaHQgPSAxMDA7XG5jb25zdCBpbWFnZURpbWVuc2lvbnMgPSB7IHdpZHRoLCBoZWlnaHQgfTtcblxuZGVzY3JpYmUoJ3VwZGF0ZUltYWdlRGltZW5zaW9ucycsICgpID0+IHtcbiAgaXQuZWFjaGBcbiAgICAgIGluaXRpYWxEaW1lbnNpb25zICB8ICBuZXh0RGltZW5zaW9ucyAgICAgICAgICAgICAgfCAgIGtlZXBBc3BlY3RSYXRpbyAgfCAgcmVzaXplVHlwZSAgICAgfCAgICBleHBlY3RlZFdpZHRoICB8IGV4cGVjdGVkSGVpZ2h0XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiAzMDBcbiAgfX0gICB8ICAgICAke3RydWV9ICAgICAgICB8ICAkeydoZWlnaHQnfSAgICB8ICAgICR7NjAwfSAgICAgICAgIHwgJHszMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGg6IDQwMCxcbiAgICBoZWlnaHRcbiAgfX0gICB8ICAgICAke3RydWV9ICAgICAgICB8ICAkeyd3aWR0aCd9ICAgICB8ICAgICR7NDAwfSAgICAgICAgIHwgJHsyMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiAzMDBcbiAgfX0gICB8ICAgICAke3RydWV9ICAgICAgICB8ICAke3VuZGVmaW5lZH0gICB8ICAgICR7MjAwfSAgICAgICAgIHwgJHsxMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGg6IDYwMCxcbiAgICBoZWlnaHRcbiAgfX0gICB8ICAgICAke3RydWV9ICAgICAgICB8ICAke3VuZGVmaW5lZH0gICB8ICAgICR7NjAwfSAgICAgICAgIHwgJHszMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiAzMDBcbiAgfX0gICB8ICAgICAke2ZhbHNlfSAgICAgICB8ICAkeydoZWlnaHQnfSAgICB8ICAgICR7MjAwfSAgICAgICAgIHwgJHszMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGg6IDYwMCxcbiAgICBoZWlnaHRcbiAgfX0gICB8ICAgICAke2ZhbHNlfSAgICAgICB8ICAkeyd3aWR0aCd9ICAgICB8ICAgICR7NjAwfSAgICAgICAgIHwgJHsxMDB9XG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt7XG4gICAgd2lkdGg6IDEwLFxuICAgIGhlaWdodDogMTBcbiAgfX18ICAgICAke2ZhbHNlfSAgICAgICB8ICAke3VuZGVmaW5lZH0gICB8ICAgICR7MTB9ICAgICAgICAgIHwgJHsxMH1cbiAgICBgKCdpbml0aWFsRGltZW5zaW9ucyA9ICRpbml0aWFsRGltZW5zaW9ucywgbmV4dERpbWVuc2lvbnMgPSAkbmV4dERpbWVuc2lvbnMsIGtlZXBBc3BlY3RSYXRpbyA9ICRrZWVwQXNwZWN0UmF0aW8sIHJlc2l6ZVR5cGUgPSAkcmVzaXplVHlwZSA9PiB3aWR0aCA9ICRleHBlY3RlZFdpZHRoICYgaGVpZ2h0ID0gJGV4cGVjdGVkSGVpZ2h0JyxcbiAgICBhc3luYyAoeyBpbml0aWFsRGltZW5zaW9ucywgbmV4dERpbWVuc2lvbnMsIGtlZXBBc3BlY3RSYXRpbywgcmVzaXplVHlwZSwgZXhwZWN0ZWRXaWR0aCwgZXhwZWN0ZWRIZWlnaHQgfSkgPT4ge1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB1cGRhdGVJbWFnZURpbWVuc2lvbnMoaW5pdGlhbERpbWVuc2lvbnMsIG5leHREaW1lbnNpb25zLCBrZWVwQXNwZWN0UmF0aW8sIHJlc2l6ZVR5cGUpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICAgICAgd2lkdGg6IGV4cGVjdGVkV2lkdGgsXG4gICAgICAgIGhlaWdodDogZXhwZWN0ZWRIZWlnaHRcbiAgICAgIH0pO1xuICAgIH0pO1xufSk7XG5cblxuZGVzY3JpYmUoJ2dldFVwZGF0ZWRSZWN0YW5nbGUnLCAoKSA9PiB7XG4gIGNvbnN0IHJlY3RhbmdsZSA9ICh4LCB5LCB3LCBoKSA9PiAoeyB4LCB5LCB3aWR0aDogdywgaGVpZ2h0OiBoIH0pO1xuICBjb25zdCBoZWlnaHRVcGRhdGVMYXJnZSA9IHsgd2lkdGgsIGhlaWdodDogMzAwIH07XG4gIGNvbnN0IGhlaWdodFVwZGF0ZVNtYWxsID0geyB3aWR0aCwgaGVpZ2h0OiA1MCB9O1xuICBjb25zdCB3aWR0aFVwZGF0ZUxhcmdlID0geyB3aWR0aDogMzAwLCBoZWlnaHQgfTtcbiAgY29uc3Qgd2lkdGhVcGRhdGVTbWFsbCA9IHsgd2lkdGg6IDEwMCwgaGVpZ2h0IH07XG4gIGNvbnN0IGJvdGhVcGRhdGUgPSB7IHdpZHRoOiAyMCwgaGVpZ2h0OiA1MCB9O1xuXG4gIGl0LmVhY2hgXG4gICAgICBpbml0aWFsRGltZW5zaW9ucyAgfCAgbmV4dERpbWVuc2lvbnMgICAgICAgIHwgICBzaGFwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4cGVjdGVkXG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHtoZWlnaHRVcGRhdGVMYXJnZX0gIHwgICAke3JlY3RhbmdsZSgxMCwgMTAsIDEwMCwgNTApfSAgICAgfCAgJHtyZWN0YW5nbGUoMTAsIDMwLCAxMDAsIDE1MCl9IFxuICAgICAgJHtpbWFnZURpbWVuc2lvbnN9IHwgICR7aGVpZ2h0VXBkYXRlU21hbGx9ICB8ICAgJHtyZWN0YW5nbGUoMTAsIDEwLCAxMDAsIDUwKX0gICAgIHwgICR7cmVjdGFuZ2xlKDEwLCA1LCAxMDAsIDI1KX0gXG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHtib3RoVXBkYXRlfSAgICAgICAgIHwgICAke3JlY3RhbmdsZSgxMCwgMTAsIDEwMCwgNTApfSAgICAgfCAgJHtyZWN0YW5nbGUoMSwgNSwgMTAsIDI1KX0gXG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt3aWR0aFVwZGF0ZUxhcmdlfSAgIHwgICAke3JlY3RhbmdsZSgxMCwgMTAsIDEwMCwgNTApfSAgICAgfCAgJHtyZWN0YW5nbGUoMTUsIDEwLCAxNTAsIDUwKX0gXG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt3aWR0aFVwZGF0ZVNtYWxsfSAgIHwgICAke3JlY3RhbmdsZSgxMCwgMTAsIDEwMCwgNTApfSAgICAgfCAgJHtyZWN0YW5nbGUoNSwgMTAsIDUwLCA1MCl9IFxuICAgIGAoJ2luaXRpYWxEaW1lbnNpb25zID0gJGluaXRpYWxEaW1lbnNpb25zLCBuZXh0RGltZW5zaW9ucyA9ICRuZXh0RGltZW5zaW9ucywgc2hhcGUgPSAkc2hhcGUgPT4gJGV4cGVjdGVkJyxcbiAgICBhc3luYyAoeyBpbml0aWFsRGltZW5zaW9ucywgbmV4dERpbWVuc2lvbnMsIHNoYXBlLCBleHBlY3RlZCB9KSA9PiB7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFVwZGF0ZWRSZWN0YW5nbGUoaW5pdGlhbERpbWVuc2lvbnMsIG5leHREaW1lbnNpb25zLCBzaGFwZSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xufSk7XG5cblxuZGVzY3JpYmUoJ2dldFVwZGF0ZWRQb2x5Z29uJywgKCkgPT4ge1xuICBjb25zdCB1cGRhdGVkRGltZW5zaW9ucyA9IHsgd2lkdGg6IHdpZHRoIC8gMiwgaGVpZ2h0OiBoZWlnaHQgKiAyIH07XG5cbiAgY29uc3QgcG9pbnQgPSAoeCwgeSkgPT4gKHsgeCwgeSB9KTtcbiAgY29uc3QgdXBkYXRlZFBvaW50ID0gKHgsIHkpID0+ICh7IHg6IHggLyAyLCB5OiB5ICogMiB9KTtcblxuICBjb25zdCB0cmlhbmdsZSA9IFtwb2ludCgxMCwgMTApLCBwb2ludCgxMDAsIDEwKSwgcG9pbnQoMTAwLCAxMDApXTtcbiAgY29uc3QgdHJpYW5nbGVVcGRhdGVkID0gW3VwZGF0ZWRQb2ludCgxMCwgMTApLCB1cGRhdGVkUG9pbnQoMTAwLCAxMCksIHVwZGF0ZWRQb2ludCgxMDAsIDEwMCldO1xuXG4gIGNvbnN0IHNxdWFyZSA9IFtwb2ludCgxMCwgMTApLCBwb2ludCgxMDAsIDEwKSwgcG9pbnQoMTAwLCAxMDApLCBwb2ludCgxMCwgMTAwKV07XG4gIGNvbnN0IHNxdWFyZVVwZGF0ZWQgPSBbdXBkYXRlZFBvaW50KDEwLCAxMCksIHVwZGF0ZWRQb2ludCgxMDAsIDEwKSwgdXBkYXRlZFBvaW50KDEwMCwgMTAwKSwgdXBkYXRlZFBvaW50KDEwLCAxMDApXTtcblxuICBjb25zdCBwZW50YWdvbiA9IFtwb2ludCgxMCwgMTApLCBwb2ludCgyMCwgMCksIHBvaW50KDMwLCAwKSwgcG9pbnQoNDAsIDEwKSwgcG9pbnQoMjUsIDIwKV07XG4gIGNvbnN0IHBlbnRhZ29uVXBkYXRlZCA9IFt1cGRhdGVkUG9pbnQoMTAsIDEwKSwgdXBkYXRlZFBvaW50KDIwLCAwKSwgdXBkYXRlZFBvaW50KDMwLCAwKSwgdXBkYXRlZFBvaW50KDQwLCAxMCksIHVwZGF0ZWRQb2ludCgyNSwgMjApXTtcblxuICBjb25zdCBoZXhhZ29uID0gW3BvaW50KDEwLCAxMCksIHBvaW50KDIwLCAwKSwgcG9pbnQoMzAsIDApLCBwb2ludCg0MCwgMTApLCBwb2ludCgzMCwgMjApLCBwb2ludCgyMCwgMjApXTtcbiAgY29uc3QgaGV4YWdvblVwZGF0ZWQgPSBbdXBkYXRlZFBvaW50KDEwLCAxMCksIHVwZGF0ZWRQb2ludCgyMCwgMCksIHVwZGF0ZWRQb2ludCgzMCwgMCksIHVwZGF0ZWRQb2ludCg0MCwgMTApLCB1cGRhdGVkUG9pbnQoMzAsIDIwKSwgdXBkYXRlZFBvaW50KDIwLCAyMCldO1xuXG4gIGNvbnN0IHBvbHlnb24gPSBwb2ludHMgPT4gKHsgcG9pbnRzIH0pO1xuXG4gIGl0LmVhY2hgXG4gICAgICBpbml0aWFsRGltZW5zaW9ucyAgfCAgbmV4dERpbWVuc2lvbnMgICAgICAgICB8ICAgc2hhcGUgICAgICAgICAgICAgICAgICAgIHwgZXhwZWN0ZWRcbiAgICAgICR7aW1hZ2VEaW1lbnNpb25zfSB8ICAke3VwZGF0ZWREaW1lbnNpb25zfSAgIHwgICAke3BvbHlnb24odHJpYW5nbGUpfSAgICAgfCAgJHtwb2x5Z29uKHRyaWFuZ2xlVXBkYXRlZCl9IFxuICAgICAgJHtpbWFnZURpbWVuc2lvbnN9IHwgICR7dXBkYXRlZERpbWVuc2lvbnN9ICAgfCAgICR7cG9seWdvbihzcXVhcmUpfSAgICAgICB8ICAke3BvbHlnb24oc3F1YXJlVXBkYXRlZCl9IFxuICAgICAgJHtpbWFnZURpbWVuc2lvbnN9IHwgICR7dXBkYXRlZERpbWVuc2lvbnN9ICAgfCAgICR7cG9seWdvbihwZW50YWdvbil9ICAgICB8ICAke3BvbHlnb24ocGVudGFnb25VcGRhdGVkKX0gXG4gICAgICAke2ltYWdlRGltZW5zaW9uc30gfCAgJHt1cGRhdGVkRGltZW5zaW9uc30gICB8ICAgJHtwb2x5Z29uKGhleGFnb24pfSAgICAgIHwgICR7cG9seWdvbihoZXhhZ29uVXBkYXRlZCl9IFxuICAgIGAoJ2luaXRpYWxEaW1lbnNpb25zID0gJGluaXRpYWxEaW1lbnNpb25zLCBuZXh0RGltZW5zaW9ucyA9ICRuZXh0RGltZW5zaW9ucywgc2hhcGUgPSAkc2hhcGUgPT4gJGV4cGVjdGVkJyxcbiAgICBhc3luYyAoeyBpbml0aWFsRGltZW5zaW9ucywgbmV4dERpbWVuc2lvbnMsIHNoYXBlLCBleHBlY3RlZCB9KSA9PiB7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFVwZGF0ZWRQbHlnb24oaW5pdGlhbERpbWVuc2lvbnMsIG5leHREaW1lbnNpb25zLCBzaGFwZSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xufSk7XG5cblxuY29uc3Qgc2hhcGVzQXJyYXkgPSBbXG4gIHtcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICB3aWR0aDogMTAwLFxuICAgIHg6IDEsXG4gICAgeTogMSxcbiAgICBncm91cDogJ3JlY3RhbmdsZXMnLFxuICAgIGluZGV4OiAwXG4gIH0sIHtcbiAgICBoZWlnaHQ6IDIwMCxcbiAgICB3aWR0aDogMjAwLFxuICAgIHg6IDIwMCxcbiAgICB5OiAxLFxuICAgIGdyb3VwOiAncmVjdGFuZ2xlcycsXG4gICAgaW5kZXg6IDFcbiAgfSxcbiAge1xuICAgIHBvaW50czogW1xuICAgICAgeyB4OiAxLCB5OiAyMDAgfSxcbiAgICAgIHsgeDogMSwgeTogMjAwIH0sXG4gICAgICB7IHk6IDIwMCwgeDogMjAwIH0sXG4gICAgICB7IHk6IDIwMCwgeDogMjAwIH1dLFxuICAgIGdyb3VwOiAncG9seWdvbnMnLFxuICAgIGluZGV4OiAyXG4gIH0sIHtcbiAgICBwb2ludHM6IFtcbiAgICAgIHsgeDogMjAwLCB5OiAxMDAgfSxcbiAgICAgIHsgeDogMjAwLCB5OiAyMDAgfSxcbiAgICAgIHsgeDogNDAwLCB5OiAyMDAgfSxcbiAgICAgIHsgeDogNDAwLCB5OiAyMDAgfVxuICAgIF0sXG4gICAgZ3JvdXA6ICdwb2x5Z29ucycsXG4gICAgaW5kZXg6IDNcbiAgfVxuXTtcblxuXG5jb25zdCBzaGFwZXNNYXAgPSB7XG4gIHJlY3RhbmdsZXM6IFtcbiAgICB7XG4gICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgIHdpZHRoOiAxMDAsXG4gICAgICB4OiAxLFxuICAgICAgeTogMSxcbiAgICAgIGluZGV4OiAwXG4gICAgfSwge1xuICAgICAgaGVpZ2h0OiAyMDAsXG4gICAgICB3aWR0aDogMjAwLFxuICAgICAgeDogMjAwLFxuICAgICAgeTogMSxcbiAgICAgIGluZGV4OiAxXG4gICAgfVxuICBdLCBwb2x5Z29uczogW1xuICAgIHtcbiAgICAgIHBvaW50czogW1xuICAgICAgICB7IHg6IDEsIHk6IDIwMCB9LFxuICAgICAgICB7IHg6IDEsIHk6IDIwMCB9LFxuICAgICAgICB7IHk6IDIwMCwgeDogMjAwIH0sXG4gICAgICAgIHsgeTogMjAwLCB4OiAyMDAgfV0sXG4gICAgICBpbmRleDogMixcbiAgICB9LCB7XG4gICAgICBwb2ludHM6IFtcbiAgICAgICAgeyB4OiAyMDAsIHk6IDEwMCB9LFxuICAgICAgICB7IHg6IDIwMCwgeTogMjAwIH0sXG4gICAgICAgIHsgeDogNDAwLCB5OiAyMDAgfSxcbiAgICAgICAgeyB4OiA0MDAsIHk6IDIwMCB9XG4gICAgICBdLFxuICAgICAgaW5kZXg6IDNcbiAgICB9XG4gIF1cbn07XG5cblxuZGVzY3JpYmUoJ2dldEFsbFNoYXBlcycsICgpID0+IHtcbiAgaXQuZWFjaGBcbiAgICAgIHNoYXBlc01hcCAgICAgfCAgZXhwZWN0ZWRcbiAgICAgICR7c2hhcGVzTWFwfSAgfCAgJHtzaGFwZXNBcnJheX1cbiAgICAgICR7bnVsbH0gICAgICAgfCAgJHtbXX1cbiAgICAgICR7dW5kZWZpbmVkfSAgfCAgJHtbXX1cbiAgICAgICR7e319ICAgICAgICAgfCAgJHtbXX1cbiAgICBgKCdUVVJOUyBzaGFwZXMgPSAkc2hhcGVzTWFwIElOVE8gJGV4cGVjdGVkJyxcbiAgICBhc3luYyAoeyBzaGFwZXNNYXAsIGV4cGVjdGVkIH0pID0+IHtcbiAgICAgIGV4cGVjdChnZXRBbGxTaGFwZXMoc2hhcGVzTWFwKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbn0pO1xuXG5kZXNjcmliZSgnZ3JvdXBTaGFwZXMnLCAoKSA9PiB7XG4gIGl0LmVhY2hgXG4gICAgICBzaGFwZXNBcnJheSAgICAgfCAgZXhwZWN0ZWRcbiAgICAgICR7c2hhcGVzQXJyYXl9ICB8ICAke3NoYXBlc01hcH1cbiAgICAgICR7bnVsbH0gICAgICAgICB8ICAke3sgcmVjdGFuZ2xlczogW10sIHBvbHlnb25zOiBbXSB9fVxuICAgICAgJHt1bmRlZmluZWR9ICAgIHwgICR7eyByZWN0YW5nbGVzOiBbXSwgcG9seWdvbnM6IFtdIH19XG4gICAgICAke1tdfSAgICAgICAgICAgfCAgJHt7IHJlY3RhbmdsZXM6IFtdLCBwb2x5Z29uczogW10gfX1cbiAgICBgKCdUVVJOUyBzaGFwZXMgPSAkc2hhcGVzQXJyYXkgSU5UTyAkZXhwZWN0ZWQnLFxuICAgIGFzeW5jICh7IHNoYXBlc0FycmF5LCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICBleHBlY3QoZ3JvdXBTaGFwZXMoc2hhcGVzQXJyYXkpKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbn0pO1xuXG4iXX0=