@macrostrat/cesium-martini 1.2.3 → 1.4.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.
package/dist/index.cjs ADDED
@@ -0,0 +1,1099 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var cesium = require('cesium');
6
+
7
+ function _assertThisInitialized(e) {
8
+ if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
9
+ return e;
10
+ }
11
+ function asyncGeneratorStep(n, t, e, r, o, a, c) {
12
+ try {
13
+ var i = n[a](c),
14
+ u = i.value;
15
+ } catch (n) {
16
+ return void e(n);
17
+ }
18
+ i.done ? t(u) : Promise.resolve(u).then(r, o);
19
+ }
20
+ function _asyncToGenerator(n) {
21
+ return function () {
22
+ var t = this,
23
+ e = arguments;
24
+ return new Promise(function (r, o) {
25
+ var a = n.apply(t, e);
26
+ function _next(n) {
27
+ asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
28
+ }
29
+ function _throw(n) {
30
+ asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
31
+ }
32
+ _next(void 0);
33
+ });
34
+ };
35
+ }
36
+ function _callSuper(t, o, e) {
37
+ return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));
38
+ }
39
+ function _classCallCheck(a, n) {
40
+ if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
41
+ }
42
+ function _defineProperties(e, r) {
43
+ for (var t = 0; t < r.length; t++) {
44
+ var o = r[t];
45
+ o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);
46
+ }
47
+ }
48
+ function _createClass(e, r, t) {
49
+ return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
50
+ writable: !1
51
+ }), e;
52
+ }
53
+ function _defineProperty(e, r, t) {
54
+ return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
55
+ value: t,
56
+ enumerable: !0,
57
+ configurable: !0,
58
+ writable: !0
59
+ }) : e[r] = t, e;
60
+ }
61
+ function _get() {
62
+ return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) {
63
+ var p = _superPropBase(e, t);
64
+ if (p) {
65
+ var n = Object.getOwnPropertyDescriptor(p, t);
66
+ return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value;
67
+ }
68
+ }, _get.apply(null, arguments);
69
+ }
70
+ function _getPrototypeOf(t) {
71
+ return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
72
+ return t.__proto__ || Object.getPrototypeOf(t);
73
+ }, _getPrototypeOf(t);
74
+ }
75
+ function _inherits(t, e) {
76
+ if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
77
+ t.prototype = Object.create(e && e.prototype, {
78
+ constructor: {
79
+ value: t,
80
+ writable: !0,
81
+ configurable: !0
82
+ }
83
+ }), Object.defineProperty(t, "prototype", {
84
+ writable: !1
85
+ }), e && _setPrototypeOf(t, e);
86
+ }
87
+ function _isNativeReflectConstruct() {
88
+ try {
89
+ var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
90
+ } catch (t) {}
91
+ return (_isNativeReflectConstruct = function () {
92
+ return !!t;
93
+ })();
94
+ }
95
+ function ownKeys(e, r) {
96
+ var t = Object.keys(e);
97
+ if (Object.getOwnPropertySymbols) {
98
+ var o = Object.getOwnPropertySymbols(e);
99
+ r && (o = o.filter(function (r) {
100
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
101
+ })), t.push.apply(t, o);
102
+ }
103
+ return t;
104
+ }
105
+ function _objectSpread2(e) {
106
+ for (var r = 1; r < arguments.length; r++) {
107
+ var t = null != arguments[r] ? arguments[r] : {};
108
+ r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
109
+ _defineProperty(e, r, t[r]);
110
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
111
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
112
+ });
113
+ }
114
+ return e;
115
+ }
116
+ function _possibleConstructorReturn(t, e) {
117
+ if (e && ("object" == typeof e || "function" == typeof e)) return e;
118
+ if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
119
+ return _assertThisInitialized(t);
120
+ }
121
+ function _regeneratorRuntime() {
122
+ _regeneratorRuntime = function () {
123
+ return e;
124
+ };
125
+ var t,
126
+ e = {},
127
+ r = Object.prototype,
128
+ n = r.hasOwnProperty,
129
+ o = Object.defineProperty || function (t, e, r) {
130
+ t[e] = r.value;
131
+ },
132
+ i = "function" == typeof Symbol ? Symbol : {},
133
+ a = i.iterator || "@@iterator",
134
+ c = i.asyncIterator || "@@asyncIterator",
135
+ u = i.toStringTag || "@@toStringTag";
136
+ function define(t, e, r) {
137
+ return Object.defineProperty(t, e, {
138
+ value: r,
139
+ enumerable: !0,
140
+ configurable: !0,
141
+ writable: !0
142
+ }), t[e];
143
+ }
144
+ try {
145
+ define({}, "");
146
+ } catch (t) {
147
+ define = function (t, e, r) {
148
+ return t[e] = r;
149
+ };
150
+ }
151
+ function wrap(t, e, r, n) {
152
+ var i = e && e.prototype instanceof Generator ? e : Generator,
153
+ a = Object.create(i.prototype),
154
+ c = new Context(n || []);
155
+ return o(a, "_invoke", {
156
+ value: makeInvokeMethod(t, r, c)
157
+ }), a;
158
+ }
159
+ function tryCatch(t, e, r) {
160
+ try {
161
+ return {
162
+ type: "normal",
163
+ arg: t.call(e, r)
164
+ };
165
+ } catch (t) {
166
+ return {
167
+ type: "throw",
168
+ arg: t
169
+ };
170
+ }
171
+ }
172
+ e.wrap = wrap;
173
+ var h = "suspendedStart",
174
+ l = "suspendedYield",
175
+ f = "executing",
176
+ s = "completed",
177
+ y = {};
178
+ function Generator() {}
179
+ function GeneratorFunction() {}
180
+ function GeneratorFunctionPrototype() {}
181
+ var p = {};
182
+ define(p, a, function () {
183
+ return this;
184
+ });
185
+ var d = Object.getPrototypeOf,
186
+ v = d && d(d(values([])));
187
+ v && v !== r && n.call(v, a) && (p = v);
188
+ var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
189
+ function defineIteratorMethods(t) {
190
+ ["next", "throw", "return"].forEach(function (e) {
191
+ define(t, e, function (t) {
192
+ return this._invoke(e, t);
193
+ });
194
+ });
195
+ }
196
+ function AsyncIterator(t, e) {
197
+ function invoke(r, o, i, a) {
198
+ var c = tryCatch(t[r], t, o);
199
+ if ("throw" !== c.type) {
200
+ var u = c.arg,
201
+ h = u.value;
202
+ return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
203
+ invoke("next", t, i, a);
204
+ }, function (t) {
205
+ invoke("throw", t, i, a);
206
+ }) : e.resolve(h).then(function (t) {
207
+ u.value = t, i(u);
208
+ }, function (t) {
209
+ return invoke("throw", t, i, a);
210
+ });
211
+ }
212
+ a(c.arg);
213
+ }
214
+ var r;
215
+ o(this, "_invoke", {
216
+ value: function (t, n) {
217
+ function callInvokeWithMethodAndArg() {
218
+ return new e(function (e, r) {
219
+ invoke(t, n, e, r);
220
+ });
221
+ }
222
+ return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
223
+ }
224
+ });
225
+ }
226
+ function makeInvokeMethod(e, r, n) {
227
+ var o = h;
228
+ return function (i, a) {
229
+ if (o === f) throw Error("Generator is already running");
230
+ if (o === s) {
231
+ if ("throw" === i) throw a;
232
+ return {
233
+ value: t,
234
+ done: !0
235
+ };
236
+ }
237
+ for (n.method = i, n.arg = a;;) {
238
+ var c = n.delegate;
239
+ if (c) {
240
+ var u = maybeInvokeDelegate(c, n);
241
+ if (u) {
242
+ if (u === y) continue;
243
+ return u;
244
+ }
245
+ }
246
+ if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
247
+ if (o === h) throw o = s, n.arg;
248
+ n.dispatchException(n.arg);
249
+ } else "return" === n.method && n.abrupt("return", n.arg);
250
+ o = f;
251
+ var p = tryCatch(e, r, n);
252
+ if ("normal" === p.type) {
253
+ if (o = n.done ? s : l, p.arg === y) continue;
254
+ return {
255
+ value: p.arg,
256
+ done: n.done
257
+ };
258
+ }
259
+ "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
260
+ }
261
+ };
262
+ }
263
+ function maybeInvokeDelegate(e, r) {
264
+ var n = r.method,
265
+ o = e.iterator[n];
266
+ if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
267
+ var i = tryCatch(o, e.iterator, r.arg);
268
+ if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
269
+ var a = i.arg;
270
+ return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
271
+ }
272
+ function pushTryEntry(t) {
273
+ var e = {
274
+ tryLoc: t[0]
275
+ };
276
+ 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
277
+ }
278
+ function resetTryEntry(t) {
279
+ var e = t.completion || {};
280
+ e.type = "normal", delete e.arg, t.completion = e;
281
+ }
282
+ function Context(t) {
283
+ this.tryEntries = [{
284
+ tryLoc: "root"
285
+ }], t.forEach(pushTryEntry, this), this.reset(!0);
286
+ }
287
+ function values(e) {
288
+ if (e || "" === e) {
289
+ var r = e[a];
290
+ if (r) return r.call(e);
291
+ if ("function" == typeof e.next) return e;
292
+ if (!isNaN(e.length)) {
293
+ var o = -1,
294
+ i = function next() {
295
+ for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
296
+ return next.value = t, next.done = !0, next;
297
+ };
298
+ return i.next = i;
299
+ }
300
+ }
301
+ throw new TypeError(typeof e + " is not iterable");
302
+ }
303
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
304
+ value: GeneratorFunctionPrototype,
305
+ configurable: !0
306
+ }), o(GeneratorFunctionPrototype, "constructor", {
307
+ value: GeneratorFunction,
308
+ configurable: !0
309
+ }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
310
+ var e = "function" == typeof t && t.constructor;
311
+ return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
312
+ }, e.mark = function (t) {
313
+ return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
314
+ }, e.awrap = function (t) {
315
+ return {
316
+ __await: t
317
+ };
318
+ }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
319
+ return this;
320
+ }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
321
+ void 0 === i && (i = Promise);
322
+ var a = new AsyncIterator(wrap(t, r, n, o), i);
323
+ return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
324
+ return t.done ? t.value : a.next();
325
+ });
326
+ }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
327
+ return this;
328
+ }), define(g, "toString", function () {
329
+ return "[object Generator]";
330
+ }), e.keys = function (t) {
331
+ var e = Object(t),
332
+ r = [];
333
+ for (var n in e) r.push(n);
334
+ return r.reverse(), function next() {
335
+ for (; r.length;) {
336
+ var t = r.pop();
337
+ if (t in e) return next.value = t, next.done = !1, next;
338
+ }
339
+ return next.done = !0, next;
340
+ };
341
+ }, e.values = values, Context.prototype = {
342
+ constructor: Context,
343
+ reset: function (e) {
344
+ if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
345
+ },
346
+ stop: function () {
347
+ this.done = !0;
348
+ var t = this.tryEntries[0].completion;
349
+ if ("throw" === t.type) throw t.arg;
350
+ return this.rval;
351
+ },
352
+ dispatchException: function (e) {
353
+ if (this.done) throw e;
354
+ var r = this;
355
+ function handle(n, o) {
356
+ return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
357
+ }
358
+ for (var o = this.tryEntries.length - 1; o >= 0; --o) {
359
+ var i = this.tryEntries[o],
360
+ a = i.completion;
361
+ if ("root" === i.tryLoc) return handle("end");
362
+ if (i.tryLoc <= this.prev) {
363
+ var c = n.call(i, "catchLoc"),
364
+ u = n.call(i, "finallyLoc");
365
+ if (c && u) {
366
+ if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
367
+ if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
368
+ } else if (c) {
369
+ if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
370
+ } else {
371
+ if (!u) throw Error("try statement without catch or finally");
372
+ if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
373
+ }
374
+ }
375
+ }
376
+ },
377
+ abrupt: function (t, e) {
378
+ for (var r = this.tryEntries.length - 1; r >= 0; --r) {
379
+ var o = this.tryEntries[r];
380
+ if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
381
+ var i = o;
382
+ break;
383
+ }
384
+ }
385
+ i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
386
+ var a = i ? i.completion : {};
387
+ return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
388
+ },
389
+ complete: function (t, e) {
390
+ if ("throw" === t.type) throw t.arg;
391
+ return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
392
+ },
393
+ finish: function (t) {
394
+ for (var e = this.tryEntries.length - 1; e >= 0; --e) {
395
+ var r = this.tryEntries[e];
396
+ if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
397
+ }
398
+ },
399
+ catch: function (t) {
400
+ for (var e = this.tryEntries.length - 1; e >= 0; --e) {
401
+ var r = this.tryEntries[e];
402
+ if (r.tryLoc === t) {
403
+ var n = r.completion;
404
+ if ("throw" === n.type) {
405
+ var o = n.arg;
406
+ resetTryEntry(r);
407
+ }
408
+ return o;
409
+ }
410
+ }
411
+ throw Error("illegal catch attempt");
412
+ },
413
+ delegateYield: function (e, r, n) {
414
+ return this.delegate = {
415
+ iterator: values(e),
416
+ resultName: r,
417
+ nextLoc: n
418
+ }, "next" === this.method && (this.arg = t), y;
419
+ }
420
+ }, e;
421
+ }
422
+ function _setPrototypeOf(t, e) {
423
+ return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
424
+ return t.__proto__ = e, t;
425
+ }, _setPrototypeOf(t, e);
426
+ }
427
+ function _superPropBase(t, o) {
428
+ for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t)););
429
+ return t;
430
+ }
431
+ function _superPropGet(t, o, e, r) {
432
+ var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e);
433
+ return 2 & r && "function" == typeof p ? function (t) {
434
+ return p.apply(e, t);
435
+ } : p;
436
+ }
437
+ function _toPrimitive(t, r) {
438
+ if ("object" != typeof t || !t) return t;
439
+ var e = t[Symbol.toPrimitive];
440
+ if (void 0 !== e) {
441
+ var i = e.call(t, r || "default");
442
+ if ("object" != typeof i) return i;
443
+ throw new TypeError("@@toPrimitive must return a primitive value.");
444
+ }
445
+ return ("string" === r ? String : Number)(t);
446
+ }
447
+ function _toPropertyKey(t) {
448
+ var i = _toPrimitive(t, "string");
449
+ return "symbol" == typeof i ? i : i + "";
450
+ }
451
+
452
+ var loadImage = function loadImage(url) {
453
+ return new Promise(function (resolve, reject) {
454
+ var img = new Image();
455
+ img.addEventListener("load", function () {
456
+ return resolve(img);
457
+ });
458
+ img.addEventListener("error", function (err) {
459
+ return reject(err);
460
+ });
461
+ img.crossOrigin = "anonymous";
462
+ img.src = url;
463
+ });
464
+ };
465
+ var DefaultHeightmapResource = /*#__PURE__*/function () {
466
+ function DefaultHeightmapResource() {
467
+ var _this = this,
468
+ _opts$skipOddLevels,
469
+ _opts$tileSize,
470
+ _opts$maxZoom;
471
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
472
+ _classCallCheck(this, DefaultHeightmapResource);
473
+ _defineProperty(this, "resource", null);
474
+ _defineProperty(this, "tileSize", 256);
475
+ _defineProperty(this, "skipOddLevels", false);
476
+ _defineProperty(this, "getTilePixels", /*#__PURE__*/function () {
477
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(coords) {
478
+ var url, img;
479
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
480
+ while (1) switch (_context.prev = _context.next) {
481
+ case 0:
482
+ url = _this.buildTileURL(coords);
483
+ _context.next = 3;
484
+ return loadImage(url);
485
+ case 3:
486
+ img = _context.sent;
487
+ return _context.abrupt("return", _this.getPixels(img));
488
+ case 5:
489
+ case "end":
490
+ return _context.stop();
491
+ }
492
+ }, _callee);
493
+ }));
494
+ return function (_x) {
495
+ return _ref.apply(this, arguments);
496
+ };
497
+ }());
498
+ if (opts.url) {
499
+ this.resource = cesium.Resource.createIfNeeded(opts.url);
500
+ }
501
+ this.skipOddLevels = (_opts$skipOddLevels = opts.skipOddLevels) !== null && _opts$skipOddLevels !== void 0 ? _opts$skipOddLevels : false;
502
+ this.tileSize = (_opts$tileSize = opts.tileSize) !== null && _opts$tileSize !== void 0 ? _opts$tileSize : 256;
503
+ this.maxZoom = (_opts$maxZoom = opts.maxZoom) !== null && _opts$maxZoom !== void 0 ? _opts$maxZoom : 15;
504
+ this.contextQueue = [];
505
+ }
506
+ return _createClass(DefaultHeightmapResource, [{
507
+ key: "getCanvas",
508
+ value: function getCanvas() {
509
+ var ctx = this.contextQueue.pop();
510
+ if (ctx == null) {
511
+ var canvas = document.createElement("canvas");
512
+ canvas.width = this.tileSize;
513
+ canvas.height = this.tileSize;
514
+ var context = canvas.getContext("2d");
515
+ ctx = {
516
+ canvas: canvas,
517
+ context: context
518
+ };
519
+ }
520
+ return ctx;
521
+ }
522
+ }, {
523
+ key: "getPixels",
524
+ value: function getPixels(img) {
525
+ var canvasRef = this.getCanvas();
526
+ var context = canvasRef.context;
527
+ //context.scale(1, -1);
528
+ // Chrome appears to vertically flip the image for reasons that are unclear
529
+ // We can make it work in Chrome by drawing the image upside-down at this step.
530
+ context.drawImage(img, 0, 0, this.tileSize, this.tileSize);
531
+ var pixels = context.getImageData(0, 0, this.tileSize, this.tileSize);
532
+ context.clearRect(0, 0, this.tileSize, this.tileSize);
533
+ this.contextQueue.push(canvasRef);
534
+ return pixels;
535
+ }
536
+ }, {
537
+ key: "buildTileURL",
538
+ value: function buildTileURL(tileCoords) {
539
+ var _this$resource;
540
+ // reverseY for TMS tiling (https://gist.github.com/tmcw/4954720)
541
+ // See tiling schemes here: https://www.maptiler.com/google-maps-coordinates-tile-bounds-projection/
542
+ var z = tileCoords.z,
543
+ y = tileCoords.y;
544
+ return (_this$resource = this.resource) === null || _this$resource === void 0 ? void 0 : _this$resource.getDerivedResource({
545
+ templateValues: _objectSpread2(_objectSpread2({}, tileCoords), {}, {
546
+ reverseY: Math.pow(2, z) - y - 1
547
+ }),
548
+ preserveQueryParameters: true
549
+ }).getUrlComponent(true);
550
+ }
551
+ }, {
552
+ key: "getTileDataAvailable",
553
+ value: function getTileDataAvailable(_ref2) {
554
+ var z = _ref2.z;
555
+ if (z == this.maxZoom) return true;
556
+ if (z % 2 == 1 && this.skipOddLevels) return false;
557
+ if (z > this.maxZoom) return false;
558
+ return true;
559
+ }
560
+ }]);
561
+ }();
562
+
563
+ var ImageFormat = /*#__PURE__*/function (ImageFormat) {
564
+ ImageFormat["WEBP"] = "webp";
565
+ ImageFormat["PNG"] = "png";
566
+ ImageFormat["PNGRAW"] = "pngraw";
567
+ return ImageFormat;
568
+ }({});
569
+ var MapboxTerrainResource = /*#__PURE__*/function (_DefaultHeightmapReso) {
570
+ function MapboxTerrainResource() {
571
+ var _opts$highResolution, _opts$imageFormat;
572
+ var _this;
573
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
574
+ _classCallCheck(this, MapboxTerrainResource);
575
+ _this = _callSuper(this, MapboxTerrainResource, [opts]);
576
+ _defineProperty(_this, "resource", null);
577
+ _defineProperty(_this, "credit", new cesium.Credit("Mapbox"));
578
+ var highResolution = (_opts$highResolution = opts.highResolution) !== null && _opts$highResolution !== void 0 ? _opts$highResolution : false;
579
+ var format = (_opts$imageFormat = opts.imageFormat) !== null && _opts$imageFormat !== void 0 ? _opts$imageFormat : ImageFormat.WEBP;
580
+
581
+ // overrides based on highResolution flag
582
+ if (highResolution) {
583
+ if (opts.maxZoom === undefined) {
584
+ _this.maxZoom = 14;
585
+ }
586
+ if (opts.tileSize === undefined) {
587
+ _this.tileSize = 512;
588
+ }
589
+ }
590
+ _this.resource = cesium.Resource.createIfNeeded("https://api.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}".concat(highResolution ? "@2x" : "", ".").concat(format));
591
+ if (opts.accessToken) {
592
+ _this.resource.setQueryParameters({
593
+ access_token: opts.accessToken
594
+ });
595
+ }
596
+ return _this;
597
+ }
598
+ _inherits(MapboxTerrainResource, _DefaultHeightmapReso);
599
+ return _createClass(MapboxTerrainResource);
600
+ }(DefaultHeightmapResource);
601
+
602
+ function _emptyMesh(n) {
603
+ n = Math.max(n, 2);
604
+ var nTriangles = Math.pow(n - 1, 2) * 2;
605
+ var nVertices = Math.pow(n, 2);
606
+ var quantizedVertices = new Uint16Array(nVertices * 3);
607
+ var indices = new Uint16Array(nTriangles * 3);
608
+ var westIndices = [];
609
+ var southIndices = [];
610
+ var eastIndices = [];
611
+ var northIndices = [];
612
+ var tix = 0;
613
+ for (var i = 0; i < nVertices; i++) {
614
+ var rx = i % n; //* 32767) / (n - 1);
615
+ var ry = Math.floor(i / n); //* 32767) / (n - 1);
616
+ var ix = n * rx + ry;
617
+ quantizedVertices[ix] = rx * 32768 / (n - 1);
618
+ quantizedVertices[nVertices + ix] = ry * 32768 / (n - 1);
619
+ quantizedVertices[2 * nVertices + ix] = 0;
620
+ if (ry == 0) westIndices.push(ix);
621
+ if (rx == 0) southIndices.push(ix);
622
+ if (rx == n - 1) eastIndices.push(ix);
623
+ if (ry == n - 1) northIndices.push(ix);
624
+
625
+ // Add triangles
626
+ var rix = i - ry * n;
627
+ if (rix != n - 1) {
628
+ indices[tix * 3] = i;
629
+ indices[tix * 3 + 1] = i + n + 1;
630
+ indices[tix * 3 + 2] = i + 1;
631
+ tix++;
632
+ }
633
+ if (rix != 0) {
634
+ indices[tix * 3] = i - 1;
635
+ indices[tix * 3 + 1] = i + n - 1;
636
+ indices[tix * 3 + 2] = i + n;
637
+ tix++;
638
+ }
639
+ }
640
+ return {
641
+ minimumHeight: 0,
642
+ maximumHeight: 0,
643
+ quantizedVertices: quantizedVertices,
644
+ indices: indices,
645
+ westIndices: westIndices,
646
+ southIndices: southIndices,
647
+ eastIndices: eastIndices,
648
+ northIndices: northIndices
649
+ };
650
+ }
651
+ var _meshCache = [];
652
+ function emptyMesh(n) {
653
+ // A memoized function to return empty meshes
654
+ if (n in _meshCache) {
655
+ return _meshCache[n];
656
+ } else {
657
+ var result = _emptyMesh(n);
658
+ _meshCache[n] = result;
659
+ return result;
660
+ }
661
+ }
662
+
663
+ var resolves = {};
664
+ var rejects = {};
665
+ var globalMsgId = 0; // Activate calculation in the worker, returning a promise
666
+ function sendMessage(_x, _x2, _x3) {
667
+ return _sendMessage.apply(this, arguments);
668
+ } // Handle incoming calculation result
669
+ function _sendMessage() {
670
+ _sendMessage = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(worker, payload, transferableObjects) {
671
+ var msgId, msg;
672
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
673
+ while (1) switch (_context2.prev = _context2.next) {
674
+ case 0:
675
+ msgId = globalMsgId++;
676
+ msg = {
677
+ id: msgId,
678
+ payload: payload
679
+ };
680
+ return _context2.abrupt("return", new Promise(function (resolve, reject) {
681
+ // save callbacks for later
682
+ resolves[msgId] = resolve;
683
+ rejects[msgId] = reject;
684
+ worker.postMessage(msg, transferableObjects);
685
+ }));
686
+ case 3:
687
+ case "end":
688
+ return _context2.stop();
689
+ }
690
+ }, _callee2);
691
+ }));
692
+ return _sendMessage.apply(this, arguments);
693
+ }
694
+ function handleMessage(msg) {
695
+ var _msg$data = msg.data,
696
+ id = _msg$data.id,
697
+ err = _msg$data.err,
698
+ payload = _msg$data.payload;
699
+ if (payload) {
700
+ var resolve = resolves[id];
701
+ if (resolve) {
702
+ resolve(payload);
703
+ }
704
+ } else {
705
+ // error condition
706
+ var reject = rejects[id];
707
+ if (reject) {
708
+ if (err) {
709
+ reject(err);
710
+ } else {
711
+ reject("Got nothing");
712
+ }
713
+ }
714
+ }
715
+
716
+ // purge used callbacks
717
+ delete resolves[id];
718
+ delete rejects[id];
719
+ }
720
+ var WorkerFarm = /*#__PURE__*/function () {
721
+ function WorkerFarm(opts) {
722
+ _classCallCheck(this, WorkerFarm);
723
+ this.worker = opts.worker;
724
+ this.worker.onmessage = handleMessage;
725
+ }
726
+ return _createClass(WorkerFarm, [{
727
+ key: "scheduleTask",
728
+ value: function () {
729
+ var _scheduleTask = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(params, transferableObjects) {
730
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
731
+ while (1) switch (_context.prev = _context.next) {
732
+ case 0:
733
+ _context.next = 2;
734
+ return sendMessage(this.worker, params, transferableObjects);
735
+ case 2:
736
+ return _context.abrupt("return", _context.sent);
737
+ case 3:
738
+ case "end":
739
+ return _context.stop();
740
+ }
741
+ }, _callee, this);
742
+ }));
743
+ function scheduleTask(_x4, _x5) {
744
+ return _scheduleTask.apply(this, arguments);
745
+ }
746
+ return scheduleTask;
747
+ }()
748
+ }]);
749
+ }();
750
+
751
+ var DefaultTerrainDecoder = /*#__PURE__*/function () {
752
+ function DefaultTerrainDecoder() {
753
+ _classCallCheck(this, DefaultTerrainDecoder);
754
+ _defineProperty(this, "inProgress", 0);
755
+ _defineProperty(this, "maxRequests", 2);
756
+ }
757
+ return _createClass(DefaultTerrainDecoder, [{
758
+ key: "requestTileGeometry",
759
+ value: function requestTileGeometry(coords, processFunction) {
760
+ var _this = this;
761
+ if (this.inProgress > this.maxRequests) return undefined;
762
+ this.inProgress += 1;
763
+ return processFunction(coords)["finally"](function () {
764
+ _this.inProgress -= 1;
765
+ });
766
+ }
767
+ }, {
768
+ key: "decodeTerrain",
769
+ value: function decodeTerrain(params, data) {
770
+ return Promise.resolve(null);
771
+ }
772
+ }]);
773
+ }();
774
+ var WorkerFarmTerrainDecoder = /*#__PURE__*/function (_DefaultTerrainDecode) {
775
+ function WorkerFarmTerrainDecoder(opts) {
776
+ var _opts$maxWorkers;
777
+ var _this2;
778
+ _classCallCheck(this, WorkerFarmTerrainDecoder);
779
+ _this2 = _callSuper(this, WorkerFarmTerrainDecoder);
780
+ _this2.farm = new WorkerFarm({
781
+ worker: opts.worker
782
+ });
783
+ _this2.maxRequests = (_opts$maxWorkers = opts.maxWorkers) !== null && _opts$maxWorkers !== void 0 ? _opts$maxWorkers : 5;
784
+ return _this2;
785
+ }
786
+ _inherits(WorkerFarmTerrainDecoder, _DefaultTerrainDecode);
787
+ return _createClass(WorkerFarmTerrainDecoder, [{
788
+ key: "decodeTerrain",
789
+ value: function decodeTerrain(params, data) {
790
+ return this.farm.scheduleTask(params, [data]);
791
+ }
792
+ }]);
793
+ }(DefaultTerrainDecoder);
794
+
795
+ // https://github.com/CesiumGS/cesium/blob/1.68/Source/Scene/MapboxImageryProvider.js#L42
796
+ var StretchedTilingScheme = /*#__PURE__*/function (_WebMercatorTilingSch) {
797
+ function StretchedTilingScheme() {
798
+ _classCallCheck(this, StretchedTilingScheme);
799
+ return _callSuper(this, StretchedTilingScheme, arguments);
800
+ }
801
+ _inherits(StretchedTilingScheme, _WebMercatorTilingSch);
802
+ return _createClass(StretchedTilingScheme, [{
803
+ key: "tileXYToRectangle",
804
+ value: function tileXYToRectangle(x, y, level, res) {
805
+ var result = _superPropGet(StretchedTilingScheme, "tileXYToRectangle", this, 3)([x, y, level]);
806
+ if (y == 0) {
807
+ //console.log("Top row", res, y, level);
808
+ result.north = Math.PI / 2;
809
+ }
810
+ if (y + 1 == Math.pow(2, level)) {
811
+ result.south = -Math.PI / 2;
812
+ }
813
+ return result;
814
+ }
815
+ }]);
816
+ }(cesium.WebMercatorTilingScheme);
817
+ var MartiniTerrainProvider = /*#__PURE__*/function () {
818
+ // @ts-ignore
819
+ function MartiniTerrainProvider() {
820
+ var _this$resource$credit, _opts$minZoomLevel, _opts$fillPoles, _opts$detailScalar, _opts$minimumErrorLev, _opts$ellipsoid;
821
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
822
+ _classCallCheck(this, MartiniTerrainProvider);
823
+ _defineProperty(this, "hasWaterMask", false);
824
+ _defineProperty(this, "hasVertexNormals", false);
825
+ _defineProperty(this, "credit", new cesium.Credit("Mapbox"));
826
+ _defineProperty(this, "availability", null);
827
+ _defineProperty(this, "errorEvent", new cesium.Event());
828
+ _defineProperty(this, "levelOfDetailScalar", null);
829
+ _defineProperty(this, "minError", 0.1);
830
+ _defineProperty(this, "fillPoles", true);
831
+ _defineProperty(this, "_errorAtMinZoom", 1000);
832
+ _defineProperty(this, "resource", null);
833
+ _defineProperty(this, "decoder", null);
834
+ _defineProperty(this, "RADIUS_SCALAR", 1.0);
835
+ //this.martini = new Martini(257);
836
+ this.resource = opts.resource;
837
+ this.credit = (_this$resource$credit = this.resource.credit) !== null && _this$resource$credit !== void 0 ? _this$resource$credit : new cesium.Credit("Mapbox");
838
+ this.decoder = opts.decoder;
839
+ if (!this.decoder) {
840
+ var _opts$maxWorkers;
841
+ var maxWorkers = (_opts$maxWorkers = opts.maxWorkers) !== null && _opts$maxWorkers !== void 0 ? _opts$maxWorkers : 5;
842
+ if (maxWorkers > 0) {
843
+ this.decoder = new WorkerFarmTerrainDecoder({
844
+ maxWorkers: maxWorkers
845
+ });
846
+ } else {
847
+ this.decoder = new DefaultTerrainDecoder();
848
+ }
849
+ }
850
+ this.minZoomLevel = (_opts$minZoomLevel = opts.minZoomLevel) !== null && _opts$minZoomLevel !== void 0 ? _opts$minZoomLevel : 3;
851
+ this.fillPoles = (_opts$fillPoles = opts.fillPoles) !== null && _opts$fillPoles !== void 0 ? _opts$fillPoles : true;
852
+ this.levelOfDetailScalar = ((_opts$detailScalar = opts.detailScalar) !== null && _opts$detailScalar !== void 0 ? _opts$detailScalar : 4.0) + cesium.Math.EPSILON5;
853
+ this.ready = true;
854
+ this.readyPromise = Promise.resolve(true);
855
+ this.minError = (_opts$minimumErrorLev = opts.minimumErrorLevel) !== null && _opts$minimumErrorLev !== void 0 ? _opts$minimumErrorLev : 0.1;
856
+ this.errorEvent.addEventListener(console.log, this);
857
+ this.ellipsoid = (_opts$ellipsoid = opts.ellipsoid) !== null && _opts$ellipsoid !== void 0 ? _opts$ellipsoid : cesium.Ellipsoid.WGS84;
858
+ var scheme = cesium.WebMercatorTilingScheme;
859
+ if (this.fillPoles) {
860
+ scheme = StretchedTilingScheme;
861
+ }
862
+ this.tilingScheme = new scheme({
863
+ numberOfLevelZeroTilesX: 1,
864
+ numberOfLevelZeroTilesY: 1,
865
+ ellipsoid: this.ellipsoid
866
+ });
867
+ this._errorAtMinZoom = this.errorAtZoom(this.minZoomLevel);
868
+ }
869
+ return _createClass(MartiniTerrainProvider, [{
870
+ key: "requestTileGeometry",
871
+ value: function requestTileGeometry(x, y, z, request) {
872
+ // Look for tiles both below the zoom level and below the error threshold for the zoom level at the equator...
873
+ if (z < this.minZoomLevel || this.scaledErrorForTile(x, y, z) > this._errorAtMinZoom) {
874
+ // If we are below the minimum zoom level, we return empty heightmaps
875
+ // to avoid unnecessary requests for low-resolution data.
876
+ return Promise.resolve(this.emptyMesh(x, y, z));
877
+ }
878
+ // Note: we still load a TON of tiles near the poles. We might need to do some overzooming here...
879
+ return this.decoder.requestTileGeometry({
880
+ x: x,
881
+ y: y,
882
+ z: z
883
+ }, this.processTile.bind(this));
884
+ }
885
+ }, {
886
+ key: "processTile",
887
+ value: function () {
888
+ var _processTile = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
889
+ var x, y, z, _this$resource, tileSize, getTilePixels, px, pixelData, tileRect, err, maxLength, params, res;
890
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
891
+ while (1) switch (_context.prev = _context.next) {
892
+ case 0:
893
+ x = _ref.x, y = _ref.y, z = _ref.z;
894
+ _context.prev = 1;
895
+ _this$resource = this.resource, tileSize = _this$resource.tileSize, getTilePixels = _this$resource.getTilePixels;
896
+ _context.next = 5;
897
+ return getTilePixels({
898
+ x: x,
899
+ y: y,
900
+ z: z
901
+ });
902
+ case 5:
903
+ px = _context.sent;
904
+ pixelData = px.data;
905
+ tileRect = this.tilingScheme.tileXYToRectangle(x, y, z); ///const center = Rectangle.center(tileRect);
906
+ err = this.errorAtZoom(z);
907
+ maxLength = this.maxVertexDistance(tileRect);
908
+ params = {
909
+ imageData: pixelData,
910
+ maxLength: maxLength,
911
+ x: x,
912
+ y: y,
913
+ z: z,
914
+ errorLevel: err,
915
+ ellipsoidRadius: this.ellipsoid.maximumRadius,
916
+ tileSize: tileSize
917
+ };
918
+ _context.next = 13;
919
+ return this.decoder.decodeTerrain(params, pixelData.buffer);
920
+ case 13:
921
+ res = _context.sent;
922
+ pixelData = undefined;
923
+ px = undefined;
924
+ return _context.abrupt("return", this.createQuantizedMeshData(tileRect, err, res));
925
+ case 19:
926
+ _context.prev = 19;
927
+ _context.t0 = _context["catch"](1);
928
+ console.log(_context.t0);
929
+ return _context.abrupt("return", this.emptyMesh(x, y, z));
930
+ case 23:
931
+ case "end":
932
+ return _context.stop();
933
+ }
934
+ }, _callee, this, [[1, 19]]);
935
+ }));
936
+ function processTile(_x) {
937
+ return _processTile.apply(this, arguments);
938
+ }
939
+ return processTile;
940
+ }()
941
+ }, {
942
+ key: "errorAtZoom",
943
+ value: function errorAtZoom(zoom) {
944
+ return Math.max(this.getLevelMaximumGeometricError(zoom) / this.levelOfDetailScalar, this.minError);
945
+ }
946
+ }, {
947
+ key: "scaledErrorForTile",
948
+ value: function scaledErrorForTile(x, y, z) {
949
+ var tileRect = this.tilingScheme.tileXYToRectangle(x, y, z);
950
+ var center = cesium.Rectangle.center(tileRect);
951
+ return this.errorAtZoom(z) / Math.pow(1 - Math.sin(center.latitude), 2);
952
+ }
953
+ }, {
954
+ key: "maxVertexDistance",
955
+ value: function maxVertexDistance(tileRect) {
956
+ return Math.ceil(2 / tileRect.height);
957
+ }
958
+ }, {
959
+ key: "emptyMesh",
960
+ value: function emptyMesh$1(x, y, z) {
961
+ var tileRect = this.tilingScheme.tileXYToRectangle(x, y, z);
962
+ var center = cesium.Rectangle.center(tileRect);
963
+ var latScalar = Math.min(Math.abs(Math.sin(center.latitude)), 0.995);
964
+ var v = Math.max(Math.ceil(200 / (z + 1) * Math.pow(1 - latScalar, 0.25)), 4);
965
+ var output = emptyMesh(v);
966
+ var err = this.errorAtZoom(z);
967
+ return this.createQuantizedMeshData(tileRect, err, output);
968
+ }
969
+ }, {
970
+ key: "createQuantizedMeshData",
971
+ value: function createQuantizedMeshData(tileRect, errorLevel, workerOutput) {
972
+ var minimumHeight = workerOutput.minimumHeight,
973
+ maximumHeight = workerOutput.maximumHeight,
974
+ quantizedVertices = workerOutput.quantizedVertices,
975
+ indices = workerOutput.indices,
976
+ westIndices = workerOutput.westIndices,
977
+ southIndices = workerOutput.southIndices,
978
+ eastIndices = workerOutput.eastIndices,
979
+ northIndices = workerOutput.northIndices;
980
+ var err = errorLevel;
981
+ var skirtHeight = err * 20;
982
+ var center = cesium.Rectangle.center(tileRect);
983
+
984
+ // Calculating occlusion height is kind of messy currently, but it definitely works
985
+ var halfAngle = tileRect.width / 2;
986
+ var dr = Math.cos(halfAngle); // half tile width since our ref point is at the center
987
+
988
+ var occlusionHeight = dr * this.ellipsoid.maximumRadius + maximumHeight;
989
+ if (halfAngle > Math.PI / 4) {
990
+ occlusionHeight = (1 + halfAngle) * this.ellipsoid.maximumRadius;
991
+ }
992
+ var occlusionPoint = new cesium.Cartographic(center.longitude, center.latitude, occlusionHeight
993
+ // Scaling factor of two just to be sure.
994
+ );
995
+ var horizonOcclusionPoint = this.ellipsoid.transformPositionToScaledSpace(cesium.Cartographic.toCartesian(occlusionPoint));
996
+ var orientedBoundingBox = cesium.OrientedBoundingBox.fromRectangle(tileRect, minimumHeight, maximumHeight, this.tilingScheme.ellipsoid);
997
+ var boundingSphere = cesium.BoundingSphere.fromOrientedBoundingBox(orientedBoundingBox);
998
+
999
+ // SE NW NE
1000
+ // NE NW SE
1001
+
1002
+ var result = new cesium.QuantizedMeshTerrainData({
1003
+ minimumHeight: minimumHeight,
1004
+ maximumHeight: maximumHeight,
1005
+ quantizedVertices: quantizedVertices,
1006
+ indices: indices,
1007
+ boundingSphere: boundingSphere,
1008
+ orientedBoundingBox: orientedBoundingBox,
1009
+ horizonOcclusionPoint: horizonOcclusionPoint,
1010
+ westIndices: westIndices,
1011
+ southIndices: southIndices,
1012
+ eastIndices: eastIndices,
1013
+ northIndices: northIndices,
1014
+ westSkirtHeight: skirtHeight,
1015
+ southSkirtHeight: skirtHeight,
1016
+ eastSkirtHeight: skirtHeight,
1017
+ northSkirtHeight: skirtHeight,
1018
+ childTileMask: 15
1019
+ });
1020
+ return result;
1021
+ }
1022
+ }, {
1023
+ key: "getLevelMaximumGeometricError",
1024
+ value: function getLevelMaximumGeometricError(level) {
1025
+ var levelZeroMaximumGeometricError = cesium.TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(this.tilingScheme.ellipsoid, 65, this.tilingScheme.getNumberOfXTilesAtLevel(0));
1026
+
1027
+ // Scalar to control overzooming
1028
+ // also seems to control zooming for imagery layers
1029
+ var scalar = this.resource.tileSize / 256;
1030
+ return levelZeroMaximumGeometricError / scalar / (1 << level);
1031
+ }
1032
+ }, {
1033
+ key: "getTileDataAvailable",
1034
+ value: function getTileDataAvailable(x, y, z) {
1035
+ return this.resource.getTileDataAvailable({
1036
+ x: x,
1037
+ y: y,
1038
+ z: z
1039
+ });
1040
+ }
1041
+ }]);
1042
+ }();
1043
+
1044
+ function decodeBase64(base64, enableUnicode) {
1045
+ var binaryString = atob(base64);
1046
+ if (enableUnicode) {
1047
+ var binaryView = new Uint8Array(binaryString.length);
1048
+ for (var i = 0, n = binaryString.length; i < n; ++i) {
1049
+ binaryView[i] = binaryString.charCodeAt(i);
1050
+ }
1051
+ const decoder = new TextDecoder("utf-16le");
1052
+ return decoder.decode(new Uint16Array(binaryView.buffer));
1053
+ }
1054
+ return binaryString;
1055
+ }
1056
+
1057
+ function createURL(base64, sourcemapArg, enableUnicodeArg) {
1058
+ var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;
1059
+ var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;
1060
+ var source = decodeBase64(base64, enableUnicode);
1061
+ var start = source.indexOf('\n', 10) + 1;
1062
+ var body = source.substring(start) + (sourcemap ? '\/\/# sourceMappingURL=' + sourcemap : '');
1063
+ var blob = new Blob([body], { type: 'application/javascript' });
1064
+ return URL.createObjectURL(blob);
1065
+ }
1066
+
1067
+ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
1068
+ var url;
1069
+ return function WorkerFactory(options) {
1070
+ url = url || createURL(base64, sourcemapArg, enableUnicodeArg);
1071
+ return new Worker(url, options);
1072
+ };
1073
+ }
1074
+
1075
+ var WorkerFactory = /*#__PURE__*/createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgewogICAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOwogICAgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07CiAgICByZXR1cm4gbjsKICB9CiAgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocik7CiAgfQogIGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikgewogICAgaWYgKCJ1bmRlZmluZWQiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByWyJAQGl0ZXJhdG9yIl0pIHJldHVybiBBcnJheS5mcm9tKHIpOwogIH0KICBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKTsKICB9CiAgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHsKICAgIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7CiAgfQogIGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7CiAgICBpZiAocikgewogICAgICBpZiAoInN0cmluZyIgPT0gdHlwZW9mIHIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKTsKICAgICAgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTsKICAgICAgcmV0dXJuICJPYmplY3QiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCAiTWFwIiA9PT0gdCB8fCAiU2V0IiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiAiQXJndW1lbnRzIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOwogICAgfQogIH0KCiAgLy8gV2Ugc2hvdWxkIHNhdmUgdGhlc2UKICAvL2NvbnN0IGNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMoMjU2LCAyNTYpOwogIC8vY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CgogIC8qKiBNYXBib3ggVGVycmFpbi1SR0IgZGVmYXVsdCBkZWNvZGUgZnVuY3Rpb24KICAqICAociAqIDI1NiAqIDI1NikgLyAxMCArIChnICogMjU2KSAvIDEwICsgYiAvIDEwIC0gMTAwMDAKICAqLwogIHZhciBkZWZhdWx0TWFwYm94RGVjb2RlUmdiID0gZnVuY3Rpb24gZGVmYXVsdE1hcGJveERlY29kZVJnYihyLCBnLCBiLCBhKSB7CiAgICByZXR1cm4gciAqIDY1NTMuNiArIGcgKiAyNS42ICsgYiAqIDAuMSAtIDEwMDAwOwogIH07CiAgZnVuY3Rpb24gcmdiVGVycmFpblRvR3JpZChwbmcsIGRlY29kZVJnYikgewogICAgLy8gbWF5YmUgd2Ugc2hvdWxkIGRvIHRoaXMgb24gdGhlIEdQVSB1c2luZyBSRUdMPwogICAgLy8gYnV0IHRoYXQgd291bGQgcmVxdWlyZSBHUFUgLT4gQ1BVIC0+IEdQVQogICAgdmFyIGdyaWRTaXplID0gcG5nLnNoYXBlWzBdICsgMTsKICAgIHZhciB0ZXJyYWluID0gbmV3IEZsb2F0MzJBcnJheShncmlkU2l6ZSAqIGdyaWRTaXplKTsKICAgIHZhciB0aWxlU2l6ZSA9IHBuZy5zaGFwZVswXTsKICAgIHZhciBkZWNvZGUgPSBkZWNvZGVSZ2IgIT09IG51bGwgJiYgZGVjb2RlUmdiICE9PSB2b2lkIDAgPyBkZWNvZGVSZ2IgOiBkZWZhdWx0TWFwYm94RGVjb2RlUmdiOwoKICAgIC8vIGRlY29kZSB0ZXJyYWluIHZhbHVlcwogICAgZm9yICh2YXIgeSA9IDA7IHkgPCB0aWxlU2l6ZTsgeSsrKSB7CiAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdGlsZVNpemU7IHgrKykgewogICAgICAgIHZhciB5YyA9IHk7CiAgICAgICAgdmFyIF9yID0gcG5nLmdldCh4LCB5YywgMCk7CiAgICAgICAgdmFyIF9nID0gcG5nLmdldCh4LCB5YywgMSk7CiAgICAgICAgdmFyIF9iID0gcG5nLmdldCh4LCB5YywgMik7CiAgICAgICAgdmFyIF9hID0gcG5nLmdldCh4LCB5YywgMyk7CiAgICAgICAgdGVycmFpblt5ICogZ3JpZFNpemUgKyB4XSA9IGRlY29kZShfciwgX2csIF9iLCBfYSk7CiAgICAgIH0KICAgIH0KICAgIC8vIGJhY2tmaWxsIHJpZ2h0IGFuZCBib3R0b20gYm9yZGVycwogICAgZm9yICh2YXIgX3ggPSAwOyBfeCA8IGdyaWRTaXplIC0gMTsgX3grKykgewogICAgICB0ZXJyYWluW2dyaWRTaXplICogKGdyaWRTaXplIC0gMSkgKyBfeF0gPSB0ZXJyYWluW2dyaWRTaXplICogKGdyaWRTaXplIC0gMikgKyBfeF07CiAgICB9CiAgICBmb3IgKHZhciBfeSA9IDA7IF95IDwgZ3JpZFNpemU7IF95KyspIHsKICAgICAgdGVycmFpbltncmlkU2l6ZSAqIF95ICsgZ3JpZFNpemUgLSAxXSA9IHRlcnJhaW5bZ3JpZFNpemUgKiBfeSArIGdyaWRTaXplIC0gMl07CiAgICB9CiAgICByZXR1cm4gdGVycmFpbjsKICB9CiAgZnVuY3Rpb24gY3JlYXRlUXVhbnRpemVkTWVzaERhdGEodGlsZSwgbWVzaCwgdGlsZVNpemUpIHsKICAgIHZhciB4dmFscyA9IFtdOwogICAgdmFyIHl2YWxzID0gW107CiAgICB2YXIgaGVpZ2h0TWV0ZXJzID0gW107CiAgICB2YXIgbm9ydGhJbmRpY2VzID0gW107CiAgICB2YXIgc291dGhJbmRpY2VzID0gW107CiAgICB2YXIgZWFzdEluZGljZXMgPSBbXTsKICAgIHZhciB3ZXN0SW5kaWNlcyA9IFtdOwogICAgdmFyIG1pbmltdW1IZWlnaHQgPSBJbmZpbml0eTsKICAgIHZhciBtYXhpbXVtSGVpZ2h0ID0gLUluZmluaXR5OwogICAgdmFyIHNjYWxhciA9IDMyNzY4LjAgLyB0aWxlU2l6ZTsKICAgIGZvciAodmFyIGl4ID0gMDsgaXggPCBtZXNoLnZlcnRpY2VzLmxlbmd0aCAvIDI7IGl4KyspIHsKICAgICAgdmFyIHZlcnRleEl4ID0gaXg7CiAgICAgIHZhciBweCA9IG1lc2gudmVydGljZXNbaXggKiAyXTsKICAgICAgdmFyIHB5ID0gbWVzaC52ZXJ0aWNlc1tpeCAqIDIgKyAxXTsKICAgICAgdmFyIGhlaWdodCA9IHRpbGUudGVycmFpbltweSAqICh0aWxlU2l6ZSArIDEpICsgcHhdOwogICAgICBpZiAoaGVpZ2h0ID4gbWF4aW11bUhlaWdodCkgbWF4aW11bUhlaWdodCA9IGhlaWdodDsKICAgICAgaWYgKGhlaWdodCA8IG1pbmltdW1IZWlnaHQpIG1pbmltdW1IZWlnaHQgPSBoZWlnaHQ7CiAgICAgIGhlaWdodE1ldGVycy5wdXNoKGhlaWdodCk7CiAgICAgIGlmIChweSA9PSAwKSBub3J0aEluZGljZXMucHVzaCh2ZXJ0ZXhJeCk7CiAgICAgIGlmIChweSA9PSB0aWxlU2l6ZSkgc291dGhJbmRpY2VzLnB1c2godmVydGV4SXgpOwogICAgICBpZiAocHggPT0gMCkgd2VzdEluZGljZXMucHVzaCh2ZXJ0ZXhJeCk7CiAgICAgIGlmIChweCA9PSB0aWxlU2l6ZSkgZWFzdEluZGljZXMucHVzaCh2ZXJ0ZXhJeCk7CiAgICAgIHZhciB4diA9IHB4ICogc2NhbGFyOwogICAgICB2YXIgeXYgPSAodGlsZVNpemUgLSBweSkgKiBzY2FsYXI7CiAgICAgIHh2YWxzLnB1c2goeHYpOwogICAgICB5dmFscy5wdXNoKHl2KTsKICAgIH0KICAgIHZhciBoZWlnaHRSYW5nZSA9IG1heGltdW1IZWlnaHQgLSBtaW5pbXVtSGVpZ2h0OwogICAgdmFyIGhlaWdodHMgPSBoZWlnaHRNZXRlcnMubWFwKGZ1bmN0aW9uIChkKSB7CiAgICAgIGlmIChoZWlnaHRSYW5nZSA8IDEpIHJldHVybiAwOwogICAgICByZXR1cm4gKGQgLSBtaW5pbXVtSGVpZ2h0KSAqICgzMjc2Ny4wIC8gaGVpZ2h0UmFuZ2UpOwogICAgfSk7CiAgICB2YXIgdHJpYW5nbGVzID0gbmV3IFVpbnQxNkFycmF5KG1lc2gudHJpYW5nbGVzKTsKICAgIHZhciBxdWFudGl6ZWRWZXJ0aWNlcyA9IG5ldyBVaW50MTZBcnJheSgvL3ZlcnRzCiAgICBbXS5jb25jYXQoeHZhbHMsIHl2YWxzLCBfdG9Db25zdW1hYmxlQXJyYXkoaGVpZ2h0cykpKTsKCiAgICAvLyBTRSBOVyBORQogICAgLy8gTkUgTlcgU0UKCiAgICByZXR1cm4gewogICAgICBtaW5pbXVtSGVpZ2h0OiBtaW5pbXVtSGVpZ2h0LAogICAgICBtYXhpbXVtSGVpZ2h0OiBtYXhpbXVtSGVpZ2h0LAogICAgICBxdWFudGl6ZWRWZXJ0aWNlczogcXVhbnRpemVkVmVydGljZXMsCiAgICAgIGluZGljZXM6IHRyaWFuZ2xlcywKICAgICAgd2VzdEluZGljZXM6IHdlc3RJbmRpY2VzLAogICAgICBzb3V0aEluZGljZXM6IHNvdXRoSW5kaWNlcywKICAgICAgZWFzdEluZGljZXM6IGVhc3RJbmRpY2VzLAogICAgICBub3J0aEluZGljZXM6IG5vcnRoSW5kaWNlcwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGlvdGEobikgewogICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheShuKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IGk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgaW90YV8xID0gaW90YTsKCiAgLyohCiAgICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlcgogICAqCiAgICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICAgKiBAbGljZW5zZSAgTUlUCiAgICovCiAgLy8gVGhlIF9pc0J1ZmZlciBjaGVjayBpcyBmb3IgU2FmYXJpIDUtNyBzdXBwb3J0LCBiZWNhdXNlIGl0J3MgbWlzc2luZwogIC8vIE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuIFJlbW92ZSB0aGlzIGV2ZW50dWFsbHkKICB2YXIgaXNCdWZmZXJfMSA9IGZ1bmN0aW9uIChvYmopIHsKICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiAoaXNCdWZmZXIob2JqKSB8fCBpc1Nsb3dCdWZmZXIob2JqKSB8fCAhIW9iai5faXNCdWZmZXIpOwogIH07CiAgZnVuY3Rpb24gaXNCdWZmZXIob2JqKSB7CiAgICByZXR1cm4gISFvYmouY29uc3RydWN0b3IgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKTsKICB9CgogIC8vIEZvciBOb2RlIHYwLjEwIHN1cHBvcnQuIFJlbW92ZSB0aGlzIGV2ZW50dWFsbHkuCiAgZnVuY3Rpb24gaXNTbG93QnVmZmVyKG9iaikgewogICAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpOwogIH0KCiAgdmFyIGhhc1R5cGVkQXJyYXlzID0gdHlwZW9mIEZsb2F0NjRBcnJheSAhPT0gInVuZGVmaW5lZCI7CiAgZnVuY3Rpb24gY29tcGFyZTFzdChhLCBiKSB7CiAgICByZXR1cm4gYVswXSAtIGJbMF07CiAgfQogIGZ1bmN0aW9uIG9yZGVyKCkgewogICAgdmFyIHN0cmlkZSA9IHRoaXMuc3RyaWRlOwogICAgdmFyIHRlcm1zID0gbmV3IEFycmF5KHN0cmlkZS5sZW5ndGgpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgdGVybXMubGVuZ3RoOyArK2kpIHsKICAgICAgdGVybXNbaV0gPSBbTWF0aC5hYnMoc3RyaWRlW2ldKSwgaV07CiAgICB9CiAgICB0ZXJtcy5zb3J0KGNvbXBhcmUxc3QpOwogICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheSh0ZXJtcy5sZW5ndGgpOwogICAgZm9yIChpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSB0ZXJtc1tpXVsxXTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIGNvbXBpbGVDb25zdHJ1Y3RvcihkdHlwZSwgZGltZW5zaW9uKSB7CiAgICB2YXIgY2xhc3NOYW1lID0gWyJWaWV3IiwgZGltZW5zaW9uLCAiZCIsIGR0eXBlXS5qb2luKCIiKTsKICAgIGlmIChkaW1lbnNpb24gPCAwKSB7CiAgICAgIGNsYXNzTmFtZSA9ICJWaWV3X05pbCIgKyBkdHlwZTsKICAgIH0KICAgIHZhciB1c2VHZXR0ZXJzID0gZHR5cGUgPT09ICJnZW5lcmljIjsKICAgIGlmIChkaW1lbnNpb24gPT09IC0xKSB7CiAgICAgIC8vU3BlY2lhbCBjYXNlIGZvciB0cml2aWFsIGFycmF5cwogICAgICB2YXIgY29kZSA9ICJmdW5jdGlvbiAiICsgY2xhc3NOYW1lICsgIihhKXt0aGlzLmRhdGE9YTt9O1wKdmFyIHByb3RvPSIgKyBjbGFzc05hbWUgKyAiLnByb3RvdHlwZTtcCnByb3RvLmR0eXBlPSciICsgZHR5cGUgKyAiJztcCnByb3RvLmluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIC0xfTtcCnByb3RvLnNpemU9MDtcCnByb3RvLmRpbWVuc2lvbj0tMTtcCnByb3RvLnNoYXBlPXByb3RvLnN0cmlkZT1wcm90by5vcmRlcj1bXTtcCnByb3RvLmxvPXByb3RvLmhpPXByb3RvLnRyYW5zcG9zZT1wcm90by5zdGVwPVwKZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICIgKyBjbGFzc05hbWUgKyAiKHRoaXMuZGF0YSk7fTtcCnByb3RvLmdldD1wcm90by5zZXQ9ZnVuY3Rpb24oKXt9O1wKcHJvdG8ucGljaz1mdW5jdGlvbigpe3JldHVybiBudWxsfTtcCnJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfIiArIGNsYXNzTmFtZSArICIoYSl7cmV0dXJuIG5ldyAiICsgY2xhc3NOYW1lICsgIihhKTt9IjsKICAgICAgdmFyIHByb2NlZHVyZSA9IG5ldyBGdW5jdGlvbihjb2RlKTsKICAgICAgcmV0dXJuIHByb2NlZHVyZSgpOwogICAgfSBlbHNlIGlmIChkaW1lbnNpb24gPT09IDApIHsKICAgICAgLy9TcGVjaWFsIGNhc2UgZm9yIDBkIGFycmF5cwogICAgICB2YXIgY29kZSA9ICJmdW5jdGlvbiAiICsgY2xhc3NOYW1lICsgIihhLGQpIHtcCnRoaXMuZGF0YSA9IGE7XAp0aGlzLm9mZnNldCA9IGRcCn07XAp2YXIgcHJvdG89IiArIGNsYXNzTmFtZSArICIucHJvdG90eXBlO1wKcHJvdG8uZHR5cGU9JyIgKyBkdHlwZSArICInO1wKcHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXR9O1wKcHJvdG8uZGltZW5zaW9uPTA7XApwcm90by5zaXplPTE7XApwcm90by5zaGFwZT1cCnByb3RvLnN0cmlkZT1cCnByb3RvLm9yZGVyPVtdO1wKcHJvdG8ubG89XApwcm90by5oaT1cCnByb3RvLnRyYW5zcG9zZT1cCnByb3RvLnN0ZXA9ZnVuY3Rpb24gIiArIGNsYXNzTmFtZSArICJfY29weSgpIHtcCnJldHVybiBuZXcgIiArIGNsYXNzTmFtZSArICIodGhpcy5kYXRhLHRoaXMub2Zmc2V0KVwKfTtcCnByb3RvLnBpY2s9ZnVuY3Rpb24gIiArIGNsYXNzTmFtZSArICJfcGljaygpe1wKcmV0dXJuIFRyaXZpYWxBcnJheSh0aGlzLmRhdGEpO1wKfTtcCnByb3RvLnZhbHVlT2Y9cHJvdG8uZ2V0PWZ1bmN0aW9uICIgKyBjbGFzc05hbWUgKyAiX2dldCgpe1wKcmV0dXJuICIgKyAodXNlR2V0dGVycyA/ICJ0aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0KSIgOiAidGhpcy5kYXRhW3RoaXMub2Zmc2V0XSIpICsgIn07XApwcm90by5zZXQ9ZnVuY3Rpb24gIiArIGNsYXNzTmFtZSArICJfc2V0KHYpe1wKcmV0dXJuICIgKyAodXNlR2V0dGVycyA/ICJ0aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0LHYpIiA6ICJ0aGlzLmRhdGFbdGhpcy5vZmZzZXRdPXYiKSArICJcCn07XApyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0XyIgKyBjbGFzc05hbWUgKyAiKGEsYixjLGQpe3JldHVybiBuZXcgIiArIGNsYXNzTmFtZSArICIoYSxkKX0iOwogICAgICB2YXIgcHJvY2VkdXJlID0gbmV3IEZ1bmN0aW9uKCJUcml2aWFsQXJyYXkiLCBjb2RlKTsKICAgICAgcmV0dXJuIHByb2NlZHVyZShDQUNIRURfQ09OU1RSVUNUT1JTW2R0eXBlXVswXSk7CiAgICB9CiAgICB2YXIgY29kZSA9IFsiJ3VzZSBzdHJpY3QnIl07CgogICAgLy9DcmVhdGUgY29uc3RydWN0b3IgZm9yIHZpZXcKICAgIHZhciBpbmRpY2VzID0gaW90YV8xKGRpbWVuc2lvbik7CiAgICB2YXIgYXJncyA9IGluZGljZXMubWFwKGZ1bmN0aW9uIChpKSB7CiAgICAgIHJldHVybiAiaSIgKyBpOwogICAgfSk7CiAgICB2YXIgaW5kZXhfc3RyID0gInRoaXMub2Zmc2V0KyIgKyBpbmRpY2VzLm1hcChmdW5jdGlvbiAoaSkgewogICAgICByZXR1cm4gInRoaXMuc3RyaWRlWyIgKyBpICsgIl0qaSIgKyBpOwogICAgfSkuam9pbigiKyIpOwogICAgdmFyIHNoYXBlQXJnID0gaW5kaWNlcy5tYXAoZnVuY3Rpb24gKGkpIHsKICAgICAgcmV0dXJuICJiIiArIGk7CiAgICB9KS5qb2luKCIsIik7CiAgICB2YXIgc3RyaWRlQXJnID0gaW5kaWNlcy5tYXAoZnVuY3Rpb24gKGkpIHsKICAgICAgcmV0dXJuICJjIiArIGk7CiAgICB9KS5qb2luKCIsIik7CiAgICBjb2RlLnB1c2goImZ1bmN0aW9uICIgKyBjbGFzc05hbWUgKyAiKGEsIiArIHNoYXBlQXJnICsgIiwiICsgc3RyaWRlQXJnICsgIixkKXt0aGlzLmRhdGE9YSIsICJ0aGlzLnNoYXBlPVsiICsgc2hhcGVBcmcgKyAiXSIsICJ0aGlzLnN0cmlkZT1bIiArIHN0cmlkZUFyZyArICJdIiwgInRoaXMub2Zmc2V0PWR8MH0iLCAidmFyIHByb3RvPSIgKyBjbGFzc05hbWUgKyAiLnByb3RvdHlwZSIsICJwcm90by5kdHlwZT0nIiArIGR0eXBlICsgIiciLCAicHJvdG8uZGltZW5zaW9uPSIgKyBkaW1lbnNpb24pOwoKICAgIC8vdmlldy5zaXplOgogICAgY29kZS5wdXNoKCJPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sJ3NpemUnLHtnZXQ6ZnVuY3Rpb24gIiArIGNsYXNzTmFtZSArICJfc2l6ZSgpe1wKcmV0dXJuICIgKyBpbmRpY2VzLm1hcChmdW5jdGlvbiAoaSkgewogICAgICByZXR1cm4gInRoaXMuc2hhcGVbIiArIGkgKyAiXSI7CiAgICB9KS5qb2luKCIqIiksICJ9fSkiKTsKCiAgICAvL3ZpZXcub3JkZXI6CiAgICBpZiAoZGltZW5zaW9uID09PSAxKSB7CiAgICAgIGNvZGUucHVzaCgicHJvdG8ub3JkZXI9WzBdIik7CiAgICB9IGVsc2UgewogICAgICBjb2RlLnB1c2goIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnb3JkZXInLHtnZXQ6Iik7CiAgICAgIGlmIChkaW1lbnNpb24gPCA0KSB7CiAgICAgICAgY29kZS5wdXNoKCJmdW5jdGlvbiAiICsgY2xhc3NOYW1lICsgIl9vcmRlcigpeyIpOwogICAgICAgIGlmIChkaW1lbnNpb24gPT09IDIpIHsKICAgICAgICAgIGNvZGUucHVzaCgicmV0dXJuIChNYXRoLmFicyh0aGlzLnN0cmlkZVswXSk+TWF0aC5hYnModGhpcy5zdHJpZGVbMV0pKT9bMSwwXTpbMCwxXX19KSIpOwogICAgICAgIH0gZWxzZSBpZiAoZGltZW5zaW9uID09PSAzKSB7CiAgICAgICAgICBjb2RlLnB1c2goInZhciBzMD1NYXRoLmFicyh0aGlzLnN0cmlkZVswXSksczE9TWF0aC5hYnModGhpcy5zdHJpZGVbMV0pLHMyPU1hdGguYWJzKHRoaXMuc3RyaWRlWzJdKTtcCmlmKHMwPnMxKXtcCmlmKHMxPnMyKXtcCnJldHVybiBbMiwxLDBdO1wKfWVsc2UgaWYoczA+czIpe1wKcmV0dXJuIFsxLDIsMF07XAp9ZWxzZXtcCnJldHVybiBbMSwwLDJdO1wKfVwKfWVsc2UgaWYoczA+czIpe1wKcmV0dXJuIFsyLDAsMV07XAp9ZWxzZSBpZihzMj5zMSl7XApyZXR1cm4gWzAsMSwyXTtcCn1lbHNle1wKcmV0dXJuIFswLDIsMV07XAp9fX0pIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNvZGUucHVzaCgiT1JERVJ9KSIpOwogICAgICB9CiAgICB9CgogICAgLy92aWV3LnNldChpMCwgLi4uLCB2KToKICAgIGNvZGUucHVzaCgicHJvdG8uc2V0PWZ1bmN0aW9uICIgKyBjbGFzc05hbWUgKyAiX3NldCgiICsgYXJncy5qb2luKCIsIikgKyAiLHYpeyIpOwogICAgaWYgKHVzZUdldHRlcnMpIHsKICAgICAgY29kZS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhLnNldCgiICsgaW5kZXhfc3RyICsgIix2KX0iKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvZGUucHVzaCgicmV0dXJuIHRoaXMuZGF0YVsiICsgaW5kZXhfc3RyICsgIl09dn0iKTsKICAgIH0KCiAgICAvL3ZpZXcuZ2V0KGkwLCAuLi4pOgogICAgY29kZS5wdXNoKCJwcm90by5nZXQ9ZnVuY3Rpb24gIiArIGNsYXNzTmFtZSArICJfZ2V0KCIgKyBhcmdzLmpvaW4oIiwiKSArICIpeyIpOwogICAgaWYgKHVzZUdldHRlcnMpIHsKICAgICAgY29kZS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhLmdldCgiICsgaW5kZXhfc3RyICsgIil9Iik7CiAgICB9IGVsc2UgewogICAgICBjb2RlLnB1c2goInJldHVybiB0aGlzLmRhdGFbIiArIGluZGV4X3N0ciArICJdfSIpOwogICAgfQoKICAgIC8vdmlldy5pbmRleDoKICAgIGNvZGUucHVzaCgicHJvdG8uaW5kZXg9ZnVuY3Rpb24gIiArIGNsYXNzTmFtZSArICJfaW5kZXgoIiwgYXJncy5qb2luKCksICIpe3JldHVybiAiICsgaW5kZXhfc3RyICsgIn0iKTsKCiAgICAvL3ZpZXcuaGkoKToKICAgIGNvZGUucHVzaCgicHJvdG8uaGk9ZnVuY3Rpb24gIiArIGNsYXNzTmFtZSArICJfaGkoIiArIGFyZ3Muam9pbigiLCIpICsgIil7cmV0dXJuIG5ldyAiICsgY2xhc3NOYW1lICsgIih0aGlzLmRhdGEsIiArIGluZGljZXMubWFwKGZ1bmN0aW9uIChpKSB7CiAgICAgIHJldHVybiBbIih0eXBlb2YgaSIsIGksICIhPT0nbnVtYmVyJ3x8aSIsIGksICI8MCk/dGhpcy5zaGFwZVsiLCBpLCAiXTppIiwgaSwgInwwIl0uam9pbigiIik7CiAgICB9KS5qb2luKCIsIikgKyAiLCIgKyBpbmRpY2VzLm1hcChmdW5jdGlvbiAoaSkgewogICAgICByZXR1cm4gInRoaXMuc3RyaWRlWyIgKyBpICsgIl0iOwogICAgfSkuam9pbigiLCIpICsgIix0aGlzLm9mZnNldCl9Iik7CgogICAgLy92aWV3LmxvKCk6CiAgICB2YXIgYV92YXJzID0gaW5kaWNlcy5tYXAoZnVuY3Rpb24gKGkpIHsKICAgICAgcmV0dXJuICJhIiArIGkgKyAiPXRoaXMuc2hhcGVbIiArIGkgKyAiXSI7CiAgICB9KTsKICAgIHZhciBjX3ZhcnMgPSBpbmRpY2VzLm1hcChmdW5jdGlvbiAoaSkgewogICAgICByZXR1cm4gImMiICsgaSArICI9dGhpcy5zdHJpZGVbIiArIGkgKyAiXSI7CiAgICB9KTsKICAgIGNvZGUucHVzaCgicHJvdG8ubG89ZnVuY3Rpb24gIiArIGNsYXNzTmFtZSArICJfbG8oIiArIGFyZ3Muam9pbigiLCIpICsgIil7dmFyIGI9dGhpcy5vZmZzZXQsZD0wLCIgKyBhX3ZhcnMuam9pbigiLCIpICsgIiwiICsgY192YXJzLmpvaW4oIiwiKSk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpbWVuc2lvbjsgKytpKSB7CiAgICAgIGNvZGUucHVzaCgiaWYodHlwZW9mIGkiICsgaSArICI9PT0nbnVtYmVyJyYmaSIgKyBpICsgIj49MCl7XApkPWkiICsgaSArICJ8MDtcCmIrPWMiICsgaSArICIqZDtcCmEiICsgaSArICItPWR9Iik7CiAgICB9CiAgICBjb2RlLnB1c2goInJldHVybiBuZXcgIiArIGNsYXNzTmFtZSArICIodGhpcy5kYXRhLCIgKyBpbmRpY2VzLm1hcChmdW5jdGlvbiAoaSkgewogICAgICByZXR1cm4gImEiICsgaTsKICAgIH0pLmpvaW4oIiwiKSArICIsIiArIGluZGljZXMubWFwKGZ1bmN0aW9uIChpKSB7CiAgICAgIHJldHVybiAiYyIgKyBpOwogICAgfSkuam9pbigiLCIpICsgIixiKX0iKTsKCiAgICAvL3ZpZXcuc3RlcCgpOgogICAgY29kZS5wdXNoKCJwcm90by5zdGVwPWZ1bmN0aW9uICIgKyBjbGFzc05hbWUgKyAiX3N0ZXAoIiArIGFyZ3Muam9pbigiLCIpICsgIil7dmFyICIgKyBpbmRpY2VzLm1hcChmdW5jdGlvbiAoaSkgewogICAgICByZXR1cm4gImEiICsgaSArICI9dGhpcy5zaGFwZVsiICsgaSArICJdIjsKICAgIH0pLmpvaW4oIiwiKSArICIsIiArIGluZGljZXMubWFwKGZ1bmN0aW9uIChpKSB7CiAgICAgIHJldHVybiAiYiIgKyBpICsgIj10aGlzLnN0cmlkZVsiICsgaSArICJdIjsKICAgIH0pLmpvaW4oIiwiKSArICIsYz10aGlzLm9mZnNldCxkPTAsY2VpbD1NYXRoLmNlaWwiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGltZW5zaW9uOyArK2kpIHsKICAgICAgY29kZS5wdXNoKCJpZih0eXBlb2YgaSIgKyBpICsgIj09PSdudW1iZXInKXtcCmQ9aSIgKyBpICsgInwwO1wKaWYoZDwwKXtcCmMrPWIiICsgaSArICIqKGEiICsgaSArICItMSk7XAphIiArIGkgKyAiPWNlaWwoLWEiICsgaSArICIvZClcCn1lbHNle1wKYSIgKyBpICsgIj1jZWlsKGEiICsgaSArICIvZClcCn1cCmIiICsgaSArICIqPWRcCn0iKTsKICAgIH0KICAgIGNvZGUucHVzaCgicmV0dXJuIG5ldyAiICsgY2xhc3NOYW1lICsgIih0aGlzLmRhdGEsIiArIGluZGljZXMubWFwKGZ1bmN0aW9uIChpKSB7CiAgICAgIHJldHVybiAiYSIgKyBpOwogICAgfSkuam9pbigiLCIpICsgIiwiICsgaW5kaWNlcy5tYXAoZnVuY3Rpb24gKGkpIHsKICAgICAgcmV0dXJuICJiIiArIGk7CiAgICB9KS5qb2luKCIsIikgKyAiLGMpfSIpOwoKICAgIC8vdmlldy50cmFuc3Bvc2UoKToKICAgIHZhciB0U2hhcGUgPSBuZXcgQXJyYXkoZGltZW5zaW9uKTsKICAgIHZhciB0U3RyaWRlID0gbmV3IEFycmF5KGRpbWVuc2lvbik7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpbWVuc2lvbjsgKytpKSB7CiAgICAgIHRTaGFwZVtpXSA9ICJhW2kiICsgaSArICJdIjsKICAgICAgdFN0cmlkZVtpXSA9ICJiW2kiICsgaSArICJdIjsKICAgIH0KICAgIGNvZGUucHVzaCgicHJvdG8udHJhbnNwb3NlPWZ1bmN0aW9uICIgKyBjbGFzc05hbWUgKyAiX3RyYW5zcG9zZSgiICsgYXJncyArICIpeyIgKyBhcmdzLm1hcChmdW5jdGlvbiAobiwgaWR4KSB7CiAgICAgIHJldHVybiBuICsgIj0oIiArIG4gKyAiPT09dW5kZWZpbmVkPyIgKyBpZHggKyAiOiIgKyBuICsgInwwKSI7CiAgICB9KS5qb2luKCI7IiksICJ2YXIgYT10aGlzLnNoYXBlLGI9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyAiICsgY2xhc3NOYW1lICsgIih0aGlzLmRhdGEsIiArIHRTaGFwZS5qb2luKCIsIikgKyAiLCIgKyB0U3RyaWRlLmpvaW4oIiwiKSArICIsdGhpcy5vZmZzZXQpfSIpOwoKICAgIC8vdmlldy5waWNrKCk6CiAgICBjb2RlLnB1c2goInByb3RvLnBpY2s9ZnVuY3Rpb24gIiArIGNsYXNzTmFtZSArICJfcGljaygiICsgYXJncyArICIpe3ZhciBhPVtdLGI9W10sYz10aGlzLm9mZnNldCIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaW1lbnNpb247ICsraSkgewogICAgICBjb2RlLnB1c2goImlmKHR5cGVvZiBpIiArIGkgKyAiPT09J251bWJlcicmJmkiICsgaSArICI+PTApe2M9KGMrdGhpcy5zdHJpZGVbIiArIGkgKyAiXSppIiArIGkgKyAiKXwwfWVsc2V7YS5wdXNoKHRoaXMuc2hhcGVbIiArIGkgKyAiXSk7Yi5wdXNoKHRoaXMuc3RyaWRlWyIgKyBpICsgIl0pfSIpOwogICAgfQogICAgY29kZS5wdXNoKCJ2YXIgY3Rvcj1DVE9SX0xJU1RbYS5sZW5ndGgrMV07cmV0dXJuIGN0b3IodGhpcy5kYXRhLGEsYixjKX0iKTsKCiAgICAvL0FkZCByZXR1cm4gc3RhdGVtZW50CiAgICBjb2RlLnB1c2goInJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfIiArIGNsYXNzTmFtZSArICIoZGF0YSxzaGFwZSxzdHJpZGUsb2Zmc2V0KXtyZXR1cm4gbmV3ICIgKyBjbGFzc05hbWUgKyAiKGRhdGEsIiArIGluZGljZXMubWFwKGZ1bmN0aW9uIChpKSB7CiAgICAgIHJldHVybiAic2hhcGVbIiArIGkgKyAiXSI7CiAgICB9KS5qb2luKCIsIikgKyAiLCIgKyBpbmRpY2VzLm1hcChmdW5jdGlvbiAoaSkgewogICAgICByZXR1cm4gInN0cmlkZVsiICsgaSArICJdIjsKICAgIH0pLmpvaW4oIiwiKSArICIsb2Zmc2V0KX0iKTsKCiAgICAvL0NvbXBpbGUgcHJvY2VkdXJlCiAgICB2YXIgcHJvY2VkdXJlID0gbmV3IEZ1bmN0aW9uKCJDVE9SX0xJU1QiLCAiT1JERVIiLCBjb2RlLmpvaW4oIlxuIikpOwogICAgcmV0dXJuIHByb2NlZHVyZShDQUNIRURfQ09OU1RSVUNUT1JTW2R0eXBlXSwgb3JkZXIpOwogIH0KICBmdW5jdGlvbiBhcnJheURUeXBlKGRhdGEpIHsKICAgIGlmIChpc0J1ZmZlcl8xKGRhdGEpKSB7CiAgICAgIHJldHVybiAiYnVmZmVyIjsKICAgIH0KICAgIGlmIChoYXNUeXBlZEFycmF5cykgewogICAgICBzd2l0Y2ggKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhKSkgewogICAgICAgIGNhc2UgIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6CiAgICAgICAgICByZXR1cm4gImZsb2F0NjQiOwogICAgICAgIGNhc2UgIltvYmplY3QgRmxvYXQzMkFycmF5XSI6CiAgICAgICAgICByZXR1cm4gImZsb2F0MzIiOwogICAgICAgIGNhc2UgIltvYmplY3QgSW50OEFycmF5XSI6CiAgICAgICAgICByZXR1cm4gImludDgiOwogICAgICAgIGNhc2UgIltvYmplY3QgSW50MTZBcnJheV0iOgogICAgICAgICAgcmV0dXJuICJpbnQxNiI7CiAgICAgICAgY2FzZSAiW29iamVjdCBJbnQzMkFycmF5XSI6CiAgICAgICAgICByZXR1cm4gImludDMyIjsKICAgICAgICBjYXNlICJbb2JqZWN0IFVpbnQ4QXJyYXldIjoKICAgICAgICAgIHJldHVybiAidWludDgiOwogICAgICAgIGNhc2UgIltvYmplY3QgVWludDE2QXJyYXldIjoKICAgICAgICAgIHJldHVybiAidWludDE2IjsKICAgICAgICBjYXNlICJbb2JqZWN0IFVpbnQzMkFycmF5XSI6CiAgICAgICAgICByZXR1cm4gInVpbnQzMiI7CiAgICAgICAgY2FzZSAiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOgogICAgICAgICAgcmV0dXJuICJ1aW50OF9jbGFtcGVkIjsKICAgICAgICBjYXNlICJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIjoKICAgICAgICAgIHJldHVybiAiYmlnaW50NjQiOwogICAgICAgIGNhc2UgIltvYmplY3QgQmlnVWludDY0QXJyYXldIjoKICAgICAgICAgIHJldHVybiAiYmlndWludDY0IjsKICAgICAgfQogICAgfQogICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHsKICAgICAgcmV0dXJuICJhcnJheSI7CiAgICB9CiAgICByZXR1cm4gImdlbmVyaWMiOwogIH0KICB2YXIgQ0FDSEVEX0NPTlNUUlVDVE9SUyA9IHsKICAgICJmbG9hdDMyIjogW10sCiAgICAiZmxvYXQ2NCI6IFtdLAogICAgImludDgiOiBbXSwKICAgICJpbnQxNiI6IFtdLAogICAgImludDMyIjogW10sCiAgICAidWludDgiOiBbXSwKICAgICJ1aW50MTYiOiBbXSwKICAgICJ1aW50MzIiOiBbXSwKICAgICJhcnJheSI6IFtdLAogICAgInVpbnQ4X2NsYW1wZWQiOiBbXSwKICAgICJiaWdpbnQ2NCI6IFtdLAogICAgImJpZ3VpbnQ2NCI6IFtdLAogICAgImJ1ZmZlciI6IFtdLAogICAgImdlbmVyaWMiOiBbXQogIH07CiAgZnVuY3Rpb24gd3JhcHBlZE5EQXJyYXlDdG9yKGRhdGEsIHNoYXBlLCBzdHJpZGUsIG9mZnNldCkgewogICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgewogICAgICB2YXIgY3RvciA9IENBQ0hFRF9DT05TVFJVQ1RPUlMuYXJyYXlbMF07CiAgICAgIHJldHVybiBjdG9yKFtdKTsKICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICJudW1iZXIiKSB7CiAgICAgIGRhdGEgPSBbZGF0YV07CiAgICB9CiAgICBpZiAoc2hhcGUgPT09IHVuZGVmaW5lZCkgewogICAgICBzaGFwZSA9IFtkYXRhLmxlbmd0aF07CiAgICB9CiAgICB2YXIgZCA9IHNoYXBlLmxlbmd0aDsKICAgIGlmIChzdHJpZGUgPT09IHVuZGVmaW5lZCkgewogICAgICBzdHJpZGUgPSBuZXcgQXJyYXkoZCk7CiAgICAgIGZvciAodmFyIGkgPSBkIC0gMSwgc3ogPSAxOyBpID49IDA7IC0taSkgewogICAgICAgIHN0cmlkZVtpXSA9IHN6OwogICAgICAgIHN6ICo9IHNoYXBlW2ldOwogICAgICB9CiAgICB9CiAgICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHsKICAgICAgb2Zmc2V0ID0gMDsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkOyArK2kpIHsKICAgICAgICBpZiAoc3RyaWRlW2ldIDwgMCkgewogICAgICAgICAgb2Zmc2V0IC09IChzaGFwZVtpXSAtIDEpICogc3RyaWRlW2ldOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgdmFyIGR0eXBlID0gYXJyYXlEVHlwZShkYXRhKTsKICAgIHZhciBjdG9yX2xpc3QgPSBDQUNIRURfQ09OU1RSVUNUT1JTW2R0eXBlXTsKICAgIHdoaWxlIChjdG9yX2xpc3QubGVuZ3RoIDw9IGQgKyAxKSB7CiAgICAgIGN0b3JfbGlzdC5wdXNoKGNvbXBpbGVDb25zdHJ1Y3RvcihkdHlwZSwgY3Rvcl9saXN0Lmxlbmd0aCAtIDEpKTsKICAgIH0KICAgIHZhciBjdG9yID0gY3Rvcl9saXN0W2QgKyAxXTsKICAgIHJldHVybiBjdG9yKGRhdGEsIHNoYXBlLCBzdHJpZGUsIG9mZnNldCk7CiAgfQogIHZhciBuZGFycmF5ID0gd3JhcHBlZE5EQXJyYXlDdG9yOwoKICBjbGFzcyBNYXJ0aW5pIHsKICAgIGNvbnN0cnVjdG9yKGdyaWRTaXplID0gMjU3KSB7CiAgICAgIHRoaXMuZ3JpZFNpemUgPSBncmlkU2l6ZTsKICAgICAgY29uc3QgdGlsZVNpemUgPSBncmlkU2l6ZSAtIDE7CiAgICAgIGlmICh0aWxlU2l6ZSAmIHRpbGVTaXplIC0gMSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBncmlkIHNpemUgdG8gYmUgMl5uKzEsIGdvdCAke2dyaWRTaXplfS5gKTsKICAgICAgdGhpcy5udW1UcmlhbmdsZXMgPSB0aWxlU2l6ZSAqIHRpbGVTaXplICogMiAtIDI7CiAgICAgIHRoaXMubnVtUGFyZW50VHJpYW5nbGVzID0gdGhpcy5udW1UcmlhbmdsZXMgLSB0aWxlU2l6ZSAqIHRpbGVTaXplOwogICAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkodGhpcy5ncmlkU2l6ZSAqIHRoaXMuZ3JpZFNpemUpOwoKICAgICAgLy8gY29vcmRpbmF0ZXMgZm9yIGFsbCBwb3NzaWJsZSB0cmlhbmdsZXMgaW4gYW4gUlRJTiB0aWxlCiAgICAgIHRoaXMuY29vcmRzID0gbmV3IFVpbnQxNkFycmF5KHRoaXMubnVtVHJpYW5nbGVzICogNCk7CgogICAgICAvLyBnZXQgdHJpYW5nbGUgY29vcmRpbmF0ZXMgZnJvbSBpdHMgaW5kZXggaW4gYW4gaW1wbGljaXQgYmluYXJ5IHRyZWUKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm51bVRyaWFuZ2xlczsgaSsrKSB7CiAgICAgICAgbGV0IGlkID0gaSArIDI7CiAgICAgICAgbGV0IGF4ID0gMCwKICAgICAgICAgIGF5ID0gMCwKICAgICAgICAgIGJ4ID0gMCwKICAgICAgICAgIGJ5ID0gMCwKICAgICAgICAgIGN4ID0gMCwKICAgICAgICAgIGN5ID0gMDsKICAgICAgICBpZiAoaWQgJiAxKSB7CiAgICAgICAgICBieCA9IGJ5ID0gY3ggPSB0aWxlU2l6ZTsgLy8gYm90dG9tLWxlZnQgdHJpYW5nbGUKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXggPSBheSA9IGN5ID0gdGlsZVNpemU7IC8vIHRvcC1yaWdodCB0cmlhbmdsZQogICAgICAgIH0KICAgICAgICB3aGlsZSAoKGlkID4+PSAxKSA+IDEpIHsKICAgICAgICAgIGNvbnN0IG14ID0gYXggKyBieCA+PiAxOwogICAgICAgICAgY29uc3QgbXkgPSBheSArIGJ5ID4+IDE7CiAgICAgICAgICBpZiAoaWQgJiAxKSB7CiAgICAgICAgICAgIC8vIGxlZnQgaGFsZgogICAgICAgICAgICBieCA9IGF4OwogICAgICAgICAgICBieSA9IGF5OwogICAgICAgICAgICBheCA9IGN4OwogICAgICAgICAgICBheSA9IGN5OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gcmlnaHQgaGFsZgogICAgICAgICAgICBheCA9IGJ4OwogICAgICAgICAgICBheSA9IGJ5OwogICAgICAgICAgICBieCA9IGN4OwogICAgICAgICAgICBieSA9IGN5OwogICAgICAgICAgfQogICAgICAgICAgY3ggPSBteDsKICAgICAgICAgIGN5ID0gbXk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGsgPSBpICogNDsKICAgICAgICB0aGlzLmNvb3Jkc1trICsgMF0gPSBheDsKICAgICAgICB0aGlzLmNvb3Jkc1trICsgMV0gPSBheTsKICAgICAgICB0aGlzLmNvb3Jkc1trICsgMl0gPSBieDsKICAgICAgICB0aGlzLmNvb3Jkc1trICsgM10gPSBieTsKICAgICAgfQogICAgfQogICAgY3JlYXRlVGlsZSh0ZXJyYWluKSB7CiAgICAgIHJldHVybiBuZXcgVGlsZSh0ZXJyYWluLCB0aGlzKTsKICAgIH0KICB9CiAgY2xhc3MgVGlsZSB7CiAgICBjb25zdHJ1Y3Rvcih0ZXJyYWluLCBtYXJ0aW5pKSB7CiAgICAgIGNvbnN0IHNpemUgPSBtYXJ0aW5pLmdyaWRTaXplOwogICAgICBpZiAodGVycmFpbi5sZW5ndGggIT09IHNpemUgKiBzaXplKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHRlcnJhaW4gZGF0YSBvZiBsZW5ndGggJHtzaXplICogc2l6ZX0gKCR7c2l6ZX0geCAke3NpemV9KSwgZ290ICR7dGVycmFpbi5sZW5ndGh9LmApOwogICAgICB0aGlzLnRlcnJhaW4gPSB0ZXJyYWluOwogICAgICB0aGlzLm1hcnRpbmkgPSBtYXJ0aW5pOwogICAgICB0aGlzLmVycm9ycyA9IG5ldyBGbG9hdDMyQXJyYXkodGVycmFpbi5sZW5ndGgpOwogICAgICB0aGlzLnVwZGF0ZSgpOwogICAgfQogICAgdXBkYXRlKCkgewogICAgICBjb25zdCB7CiAgICAgICAgbnVtVHJpYW5nbGVzLAogICAgICAgIG51bVBhcmVudFRyaWFuZ2xlcywKICAgICAgICBjb29yZHMsCiAgICAgICAgZ3JpZFNpemU6IHNpemUKICAgICAgfSA9IHRoaXMubWFydGluaTsKICAgICAgY29uc3QgewogICAgICAgIHRlcnJhaW4sCiAgICAgICAgZXJyb3JzCiAgICAgIH0gPSB0aGlzOwoKICAgICAgLy8gaXRlcmF0ZSBvdmVyIGFsbCBwb3NzaWJsZSB0cmlhbmdsZXMsIHN0YXJ0aW5nIGZyb20gdGhlIHNtYWxsZXN0IGxldmVsCiAgICAgIGZvciAobGV0IGkgPSBudW1UcmlhbmdsZXMgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIGNvbnN0IGsgPSBpICogNDsKICAgICAgICBjb25zdCBheCA9IGNvb3Jkc1trICsgMF07CiAgICAgICAgY29uc3QgYXkgPSBjb29yZHNbayArIDFdOwogICAgICAgIGNvbnN0IGJ4ID0gY29vcmRzW2sgKyAyXTsKICAgICAgICBjb25zdCBieSA9IGNvb3Jkc1trICsgM107CiAgICAgICAgY29uc3QgbXggPSBheCArIGJ4ID4+IDE7CiAgICAgICAgY29uc3QgbXkgPSBheSArIGJ5ID4+IDE7CiAgICAgICAgY29uc3QgY3ggPSBteCArIG15IC0gYXk7CiAgICAgICAgY29uc3QgY3kgPSBteSArIGF4IC0gbXg7CgogICAgICAgIC8vIGNhbGN1bGF0ZSBlcnJvciBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsb25nIGVkZ2Ugb2YgdGhlIHRyaWFuZ2xlCiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkSGVpZ2h0ID0gKHRlcnJhaW5bYXkgKiBzaXplICsgYXhdICsgdGVycmFpbltieSAqIHNpemUgKyBieF0pIC8gMjsKICAgICAgICBjb25zdCBtaWRkbGVJbmRleCA9IG15ICogc2l6ZSArIG14OwogICAgICAgIGNvbnN0IG1pZGRsZUVycm9yID0gTWF0aC5hYnMoaW50ZXJwb2xhdGVkSGVpZ2h0IC0gdGVycmFpblttaWRkbGVJbmRleF0pOwogICAgICAgIGVycm9yc1ttaWRkbGVJbmRleF0gPSBNYXRoLm1heChlcnJvcnNbbWlkZGxlSW5kZXhdLCBtaWRkbGVFcnJvcik7CiAgICAgICAgaWYgKGkgPCBudW1QYXJlbnRUcmlhbmdsZXMpIHsKICAgICAgICAgIC8vIGJpZ2dlciB0cmlhbmdsZXM7IGFjY3VtdWxhdGUgZXJyb3Igd2l0aCBjaGlsZHJlbgogICAgICAgICAgY29uc3QgbGVmdENoaWxkSW5kZXggPSAoYXkgKyBjeSA+PiAxKSAqIHNpemUgKyAoYXggKyBjeCA+PiAxKTsKICAgICAgICAgIGNvbnN0IHJpZ2h0Q2hpbGRJbmRleCA9IChieSArIGN5ID4+IDEpICogc2l6ZSArIChieCArIGN4ID4+IDEpOwogICAgICAgICAgZXJyb3JzW21pZGRsZUluZGV4XSA9IE1hdGgubWF4KGVycm9yc1ttaWRkbGVJbmRleF0sIGVycm9yc1tsZWZ0Q2hpbGRJbmRleF0sIGVycm9yc1tyaWdodENoaWxkSW5kZXhdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldE1lc2gobWF4RXJyb3IgPSAwLCBtYXhMZW5ndGggPSBudWxsKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBncmlkU2l6ZTogc2l6ZSwKICAgICAgICBpbmRpY2VzCiAgICAgIH0gPSB0aGlzLm1hcnRpbmk7CiAgICAgIGNvbnN0IHsKICAgICAgICBlcnJvcnMKICAgICAgfSA9IHRoaXM7CiAgICAgIGxldCBudW1WZXJ0aWNlcyA9IDA7CiAgICAgIGxldCBudW1UcmlhbmdsZXMgPSAwOwogICAgICBjb25zdCBtYXggPSBzaXplIC0gMTsKCiAgICAgIC8vIFRoZSBtYXhMZW5ndGggcGFyYW1ldGVyIHdpbGwgY2F1c2UgdHJpYW5nbGVzIHRvIGJlIGdlbmVyYXRlZCB1bnRpbCB0aGUgbGVncyBhcmUgYmVsb3cgdGhpcyBsZW5ndGgKICAgICAgLy8gSXQgaXMgbWVhbnQgdG8gc3VwcG9ydCBjYXNlcyB3aGVyZSBhIGNlcnRhaW4gbWVzaCBkZW5zaXR5IGlzIHJlcXVpcmVkIHRvIGRvIHNwaGVyaWNhbCBtYXRoIG9uIGRpZ2l0YWwgZ2xvYmVzCiAgICAgIGNvbnN0IG1heFNjYWxlID0gbWF4TGVuZ3RoIHx8IHNpemU7CgogICAgICAvLyB1c2UgYW4gaW5kZXggZ3JpZCB0byBrZWVwIHRyYWNrIG9mIHZlcnRpY2VzIHRoYXQgd2VyZSBhbHJlYWR5IHVzZWQgdG8gYXZvaWQgZHVwbGljYXRpb24KICAgICAgaW5kaWNlcy5maWxsKDApOwoKICAgICAgLy8gcmV0cmlldmUgbWVzaCBpbiB0d28gc3RhZ2VzIHRoYXQgYm90aCB0cmF2ZXJzZSB0aGUgZXJyb3IgbWFwOgogICAgICAvLyAtIGNvdW50RWxlbWVudHM6IGZpbmQgdXNlZCB2ZXJ0aWNlcyAoYW5kIGFzc2lnbiBlYWNoIGFuIGluZGV4KSwgYW5kIGNvdW50IHRyaWFuZ2xlcyAoZm9yIG1pbmltdW0gYWxsb2NhdGlvbikKICAgICAgLy8gLSBwcm9jZXNzVHJpYW5nbGU6IGZpbGwgdGhlIGFsbG9jYXRlZCB2ZXJ0aWNlcyAmIHRyaWFuZ2xlcyB0eXBlZCBhcnJheXMKCiAgICAgIGZ1bmN0aW9uIGNvdW50RWxlbWVudHMoYXgsIGF5LCBieCwgYnksIGN4LCBjeSkgewogICAgICAgIGNvbnN0IG14ID0gYXggKyBieCA+PiAxOwogICAgICAgIGNvbnN0IG15ID0gYXkgKyBieSA+PiAxOwogICAgICAgIGNvbnN0IGxlZ0xlbmd0aCA9IE1hdGguYWJzKGF4IC0gY3gpICsgTWF0aC5hYnMoYXkgLSBjeSk7CiAgICAgICAgaWYgKGxlZ0xlbmd0aCA+IDEgJiYgZXJyb3JzW215ICogc2l6ZSArIG14XSA+IG1heEVycm9yIHx8IGxlZ0xlbmd0aCA+IG1heFNjYWxlKSB7CiAgICAgICAgICBjb3VudEVsZW1lbnRzKGN4LCBjeSwgYXgsIGF5LCBteCwgbXkpOwogICAgICAgICAgY291bnRFbGVtZW50cyhieCwgYnksIGN4LCBjeSwgbXgsIG15KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW5kaWNlc1theSAqIHNpemUgKyBheF0gPSBpbmRpY2VzW2F5ICogc2l6ZSArIGF4XSB8fCArK251bVZlcnRpY2VzOwogICAgICAgICAgaW5kaWNlc1tieSAqIHNpemUgKyBieF0gPSBpbmRpY2VzW2J5ICogc2l6ZSArIGJ4XSB8fCArK251bVZlcnRpY2VzOwogICAgICAgICAgaW5kaWNlc1tjeSAqIHNpemUgKyBjeF0gPSBpbmRpY2VzW2N5ICogc2l6ZSArIGN4XSB8fCArK251bVZlcnRpY2VzOwogICAgICAgICAgbnVtVHJpYW5nbGVzKys7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvdW50RWxlbWVudHMoMCwgMCwgbWF4LCBtYXgsIG1heCwgMCk7CiAgICAgIGNvdW50RWxlbWVudHMobWF4LCBtYXgsIDAsIDAsIDAsIG1heCk7CiAgICAgIGNvbnN0IHZlcnRpY2VzID0gbmV3IFVpbnQxNkFycmF5KG51bVZlcnRpY2VzICogMik7CiAgICAgIGNvbnN0IHRyaWFuZ2xlcyA9IG5ldyBVaW50MzJBcnJheShudW1UcmlhbmdsZXMgKiAzKTsKICAgICAgbGV0IHRyaUluZGV4ID0gMDsKICAgICAgZnVuY3Rpb24gcHJvY2Vzc1RyaWFuZ2xlKGF4LCBheSwgYngsIGJ5LCBjeCwgY3kpIHsKICAgICAgICBjb25zdCBteCA9IGF4ICsgYnggPj4gMTsKICAgICAgICBjb25zdCBteSA9IGF5ICsgYnkgPj4gMTsKICAgICAgICBjb25zdCBsZWdMZW5ndGggPSBNYXRoLmFicyhheCAtIGN4KSArIE1hdGguYWJzKGF5IC0gY3kpOwogICAgICAgIGlmIChsZWdMZW5ndGggPiAxICYmIGVycm9yc1tteSAqIHNpemUgKyBteF0gPiBtYXhFcnJvciB8fCBsZWdMZW5ndGggPiBtYXhTY2FsZSkgewogICAgICAgICAgLy8gdHJpYW5nbGUgZG9lc24ndCBhcHByb3hpbWF0ZSB0aGUgc3VyZmFjZSB3ZWxsIGVub3VnaDsgZHJpbGwgZG93biBmdXJ0aGVyCiAgICAgICAgICBwcm9jZXNzVHJpYW5nbGUoY3gsIGN5LCBheCwgYXksIG14LCBteSk7CiAgICAgICAgICBwcm9jZXNzVHJpYW5nbGUoYngsIGJ5LCBjeCwgY3ksIG14LCBteSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIGFkZCBhIHRyaWFuZ2xlCiAgICAgICAgICBjb25zdCBhID0gaW5kaWNlc1theSAqIHNpemUgKyBheF0gLSAxOwogICAgICAgICAgY29uc3QgYiA9IGluZGljZXNbYnkgKiBzaXplICsgYnhdIC0gMTsKICAgICAgICAgIGNvbnN0IGMgPSBpbmRpY2VzW2N5ICogc2l6ZSArIGN4XSAtIDE7CiAgICAgICAgICB2ZXJ0aWNlc1syICogYV0gPSBheDsKICAgICAgICAgIHZlcnRpY2VzWzIgKiBhICsgMV0gPSBheTsKICAgICAgICAgIHZlcnRpY2VzWzIgKiBiXSA9IGJ4OwogICAgICAgICAgdmVydGljZXNbMiAqIGIgKyAxXSA9IGJ5OwogICAgICAgICAgdmVydGljZXNbMiAqIGNdID0gY3g7CiAgICAgICAgICB2ZXJ0aWNlc1syICogYyArIDFdID0gY3k7CiAgICAgICAgICB0cmlhbmdsZXNbdHJpSW5kZXgrK10gPSBhOwogICAgICAgICAgdHJpYW5nbGVzW3RyaUluZGV4KytdID0gYjsKICAgICAgICAgIHRyaWFuZ2xlc1t0cmlJbmRleCsrXSA9IGM7CiAgICAgICAgfQogICAgICB9CiAgICAgIHByb2Nlc3NUcmlhbmdsZSgwLCAwLCBtYXgsIG1heCwgbWF4LCAwKTsKICAgICAgcHJvY2Vzc1RyaWFuZ2xlKG1heCwgbWF4LCAwLCAwLCAwLCBtYXgpOwogICAgICByZXR1cm4gewogICAgICAgIHZlcnRpY2VzLAogICAgICAgIHRyaWFuZ2xlcwogICAgICB9OwogICAgfQogIH0KCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0Nlc2l1bUdTL2Nlc2l1bS9ibG9iLzEuNzYvU291cmNlL1dvcmtlcnNFUzYvY3JlYXRlVmVydGljZXNGcm9tUXVhbnRpemVkVGVycmFpbk1lc2guanMKCiAgdmFyIG1hcnRpbmkgPSBudWxsOwogIGZ1bmN0aW9uIGRlY29kZVRlcnJhaW4ocGFyYW1ldGVycywgdHJhbnNmZXJhYmxlT2JqZWN0cykgewogICAgdmFyIGltYWdlRGF0YSA9IHBhcmFtZXRlcnMuaW1hZ2VEYXRhLAogICAgICBfcGFyYW1ldGVycyR0aWxlU2l6ZSA9IHBhcmFtZXRlcnMudGlsZVNpemUsCiAgICAgIHRpbGVTaXplID0gX3BhcmFtZXRlcnMkdGlsZVNpemUgPT09IHZvaWQgMCA/IDI1NiA6IF9wYXJhbWV0ZXJzJHRpbGVTaXplLAogICAgICBlcnJvckxldmVsID0gcGFyYW1ldGVycy5lcnJvckxldmVsOwogICAgdmFyIHBpeGVscyA9IG5kYXJyYXkobmV3IFVpbnQ4QXJyYXkoaW1hZ2VEYXRhKSwgW3RpbGVTaXplLCB0aWxlU2l6ZSwgNF0sIFs0LCA0ICogdGlsZVNpemUsIDFdLCAwKTsKCiAgICAvLyBUaWxlIHNpemUgbXVzdCBiZSBtYWludGFpbmVkIHRocm91Z2ggdGhlIGxpZmUgb2YgdGhlIHdvcmtlcgogICAgbWFydGluaSAhPT0gbnVsbCAmJiBtYXJ0aW5pICE9PSB2b2lkIDAgPyBtYXJ0aW5pIDogbWFydGluaSA9IG5ldyBNYXJ0aW5pKHRpbGVTaXplICsgMSk7CiAgICB2YXIgdGVycmFpbiA9IHJnYlRlcnJhaW5Ub0dyaWQocGl4ZWxzKTsKICAgIHZhciB0aWxlID0gbWFydGluaS5jcmVhdGVUaWxlKHRlcnJhaW4pOwoKICAgIC8vIGdldCBhIG1lc2ggKHZlcnRpY2VzIGFuZCB0cmlhbmdsZXMgaW5kaWNlcykgZm9yIGEgMTBtIGVycm9yCiAgICB2YXIgbWVzaCA9IHRpbGUuZ2V0TWVzaChlcnJvckxldmVsLCBwYXJhbWV0ZXJzLm1heExlbmd0aCk7CiAgICByZXR1cm4gY3JlYXRlUXVhbnRpemVkTWVzaERhdGEodGlsZSwgbWVzaCwgdGlsZVNpemUpOwogIH0KICBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChtc2cpIHsKICAgIHZhciBfbXNnJGRhdGEgPSBtc2cuZGF0YSwKICAgICAgaWQgPSBfbXNnJGRhdGEuaWQsCiAgICAgIHBheWxvYWQgPSBfbXNnJGRhdGEucGF5bG9hZDsKICAgIGlmIChpZCA9PSBudWxsKSByZXR1cm47CiAgICB2YXIgb2JqZWN0cyA9IFtdOwogICAgdmFyIHJlcyA9IG51bGw7CiAgICB0cnkgewogICAgICByZXMgPSBkZWNvZGVUZXJyYWluKHBheWxvYWQpOwogICAgICBvYmplY3RzLnB1c2gocmVzLmluZGljZXMuYnVmZmVyKTsKICAgICAgb2JqZWN0cy5wdXNoKHJlcy5xdWFudGl6ZWRWZXJ0aWNlcy5idWZmZXIpOwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHsKICAgICAgICBpZDogaWQsCiAgICAgICAgcGF5bG9hZDogcmVzCiAgICAgIH0sIG9iamVjdHMpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UoewogICAgICAgIGlkOiBpZCwKICAgICAgICBlcnI6IGVyci50b1N0cmluZygpCiAgICAgIH0pOwogICAgfSBmaW5hbGx5IHsKICAgICAgcmVzID0gbnVsbDsKICAgICAgb2JqZWN0cyA9IG51bGw7CiAgICB9CiAgfTsKCn0pKCk7Cgo=', null, false);
1076
+ /* eslint-enable */
1077
+
1078
+ var MapboxTerrainProvider = /*#__PURE__*/function (_MartiniTerrainProvid) {
1079
+ function MapboxTerrainProvider() {
1080
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1081
+ _classCallCheck(this, MapboxTerrainProvider);
1082
+ var resource = new MapboxTerrainResource(opts);
1083
+ var decoder = new WorkerFarmTerrainDecoder({
1084
+ worker: new WorkerFactory()
1085
+ });
1086
+ return _callSuper(this, MapboxTerrainProvider, [_objectSpread2(_objectSpread2({}, opts), {}, {
1087
+ resource: resource,
1088
+ decoder: decoder
1089
+ })]);
1090
+ }
1091
+ _inherits(MapboxTerrainProvider, _MartiniTerrainProvid);
1092
+ return _createClass(MapboxTerrainProvider);
1093
+ }(MartiniTerrainProvider);
1094
+
1095
+ exports.DefaultHeightmapResource = DefaultHeightmapResource;
1096
+ exports.MapboxTerrainResource = MapboxTerrainResource;
1097
+ exports.MartiniTerrainProvider = MartiniTerrainProvider;
1098
+ exports["default"] = MapboxTerrainProvider;
1099
+ //# sourceMappingURL=index.cjs.map