NBash

Форк
0
2881 строка · 99.1 Кб
1
/**
2
 * Minified by jsDelivr using Terser v3.14.1.
3
 * Original file: /npm/mathjax@2.7.9/unpacked/MathJax.js
4
 *
5
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
6
 */
7
document.getElementById &&
8
  document.childNodes &&
9
  document.createElement &&
10
  ((window.MathJax && MathJax.Hub) ||
11
    (window.MathJax
12
      ? (window.MathJax = { AuthorConfig: window.MathJax })
13
      : (window.MathJax = {}),
14
    (MathJax.version = "2.7.9"),
15
    (MathJax.fileversion = "2.7.9"),
16
    (MathJax.cdnVersion = "2.7.9"),
17
    (MathJax.cdnFileVersions = {}),
18
    (function (t) {
19
      var e = window.MathJax;
20
      e || (e = window.MathJax = {});
21
      var i = [],
22
        n = function (t) {
23
          var e = t.constructor;
24
          for (var i in (e || (e = function () {}), t))
25
            "constructor" !== i && t.hasOwnProperty(i) && (e[i] = t[i]);
26
          return e;
27
        };
28
      (e.Object = n({
29
        constructor: function () {
30
          return arguments.callee.Init.call(this, arguments);
31
        },
32
        Subclass: function (t, e) {
33
          var n = function () {
34
            return arguments.callee.Init.call(this, arguments);
35
          };
36
          return (
37
            (n.SUPER = this),
38
            (n.Init = this.Init),
39
            (n.Subclass = this.Subclass),
40
            (n.Augment = this.Augment),
41
            (n.protoFunction = this.protoFunction),
42
            (n.can = this.can),
43
            (n.has = this.has),
44
            (n.isa = this.isa),
45
            (n.prototype = new this(i)),
46
            (n.prototype.constructor = n),
47
            n.Augment(t, e),
48
            n
49
          );
50
        },
51
        Init: function (t) {
52
          var e = this;
53
          return 1 === t.length && t[0] === i
54
            ? e
55
            : (e instanceof t.callee || (e = new t.callee(i)),
56
              e.Init.apply(e, t) || e);
57
        },
58
        Augment: function (t, e) {
59
          var i;
60
          if (null != t) {
61
            for (i in t) t.hasOwnProperty(i) && this.protoFunction(i, t[i]);
62
            t.toString !== this.prototype.toString &&
63
              t.toString !== {}.toString &&
64
              this.protoFunction("toString", t.toString);
65
          }
66
          if (null != e) for (i in e) e.hasOwnProperty(i) && (this[i] = e[i]);
67
          return this;
68
        },
69
        protoFunction: function (t, e) {
70
          (this.prototype[t] = e),
71
            "function" == typeof e && (e.SUPER = this.SUPER.prototype);
72
        },
73
        prototype: {
74
          Init: function () {},
75
          SUPER: function (t) {
76
            return t.callee.SUPER;
77
          },
78
          can: function (t) {
79
            return "function" == typeof this[t];
80
          },
81
          has: function (t) {
82
            return void 0 !== this[t];
83
          },
84
          isa: function (t) {
85
            return t instanceof Object && this instanceof t;
86
          },
87
        },
88
        can: function (t) {
89
          return this.prototype.can.call(this, t);
90
        },
91
        has: function (t) {
92
          return this.prototype.has.call(this, t);
93
        },
94
        isa: function (t) {
95
          for (var e = this; e; ) {
96
            if (e === t) return !0;
97
            e = e.SUPER;
98
          }
99
          return !1;
100
        },
101
        SimpleSUPER: n({
102
          constructor: function (t) {
103
            return this.SimpleSUPER.define(t);
104
          },
105
          define: function (t) {
106
            var e = {};
107
            if (null != t) {
108
              for (var i in t)
109
                t.hasOwnProperty(i) && (e[i] = this.wrap(i, t[i]));
110
              t.toString !== this.prototype.toString &&
111
                t.toString !== {}.toString &&
112
                (e.toString = this.wrap("toString", t.toString));
113
            }
114
            return e;
115
          },
116
          wrap: function (t, e) {
117
            if (
118
              "function" != typeof e ||
119
              !e.toString().match(/\.\s*SUPER\s*\(/)
120
            )
121
              return e;
122
            var i = function () {
123
              this.SUPER = i.SUPER[t];
124
              try {
125
                var n = e.apply(this, arguments);
126
              } catch (t) {
127
                throw (delete this.SUPER, t);
128
              }
129
              return delete this.SUPER, n;
130
            };
131
            return (
132
              (i.toString = function () {
133
                return e.toString.apply(e, arguments);
134
              }),
135
              i
136
            );
137
          },
138
        }),
139
      })),
140
        (e.Object.isArray =
141
          Array.isArray ||
142
          function (t) {
143
            return "[object Array]" === Object.prototype.toString.call(t);
144
          }),
145
        (e.Object.Array = Array);
146
    })(),
147
    (function (t) {
148
      var e = window.MathJax;
149
      e || (e = window.MathJax = {});
150
      var i = e.Object.isArray,
151
        n = function (t) {
152
          var e = function () {
153
            return arguments.callee.execute.apply(arguments.callee, arguments);
154
          };
155
          for (var i in n.prototype)
156
            n.prototype.hasOwnProperty(i) &&
157
              (e[i] = void 0 !== t[i] ? t[i] : n.prototype[i]);
158
          return (e.toString = n.prototype.toString), e;
159
        };
160
      n.prototype = {
161
        isCallback: !0,
162
        hook: function () {},
163
        data: [],
164
        object: window,
165
        execute: function () {
166
          if (!this.called || this.autoReset)
167
            return (
168
              (this.called = !this.autoReset),
169
              this.hook.apply(
170
                this.object,
171
                this.data.concat([].slice.call(arguments, 0))
172
              )
173
            );
174
        },
175
        reset: function () {
176
          delete this.called;
177
        },
178
        toString: function () {
179
          return this.hook.toString.apply(this.hook, arguments);
180
        },
181
      };
182
      var a = function (t) {
183
          return "function" == typeof t && t.isCallback;
184
        },
185
        s = function (t) {
186
          return eval.call(window, t);
187
        },
188
        r = function () {
189
          if ((s("var __TeSt_VaR__ = 1"), window.__TeSt_VaR__))
190
            try {
191
              delete window.__TeSt_VaR__;
192
            } catch (t) {
193
              window.__TeSt_VaR__ = null;
194
            }
195
          else
196
            s = window.execScript
197
              ? function (t) {
198
                  (e.__code = t),
199
                    (t =
200
                      "try {MathJax.__result = eval(MathJax.__code)} catch(err) {MathJax.__result = err}"),
201
                    window.execScript(t);
202
                  var i = e.__result;
203
                  if ((delete e.__result, delete e.__code, i instanceof Error))
204
                    throw i;
205
                  return i;
206
                }
207
              : function (t) {
208
                  (e.__code = t),
209
                    (t =
210
                      "try {MathJax.__result = eval(MathJax.__code)} catch(err) {MathJax.__result = err}");
211
                  var i = document.getElementsByTagName("head")[0];
212
                  i || (i = document.body);
213
                  var n = document.createElement("script");
214
                  n.appendChild(document.createTextNode(t)),
215
                    i.appendChild(n),
216
                    i.removeChild(n);
217
                  var a = e.__result;
218
                  if ((delete e.__result, delete e.__code, a instanceof Error))
219
                    throw a;
220
                  return a;
221
                };
222
          r = null;
223
        },
224
        o = function (t, e) {
225
          if (
226
            (arguments.length > 1 &&
227
              (t =
228
                2 === arguments.length &&
229
                "function" != typeof arguments[0] &&
230
                arguments[0] instanceof Object &&
231
                "number" == typeof arguments[1]
232
                  ? [].slice.call(t, e)
233
                  : [].slice.call(arguments, 0)),
234
            i(t) && 1 === t.length && "function" == typeof t[0] && (t = t[0]),
235
            "function" == typeof t)
236
          )
237
            return t.execute === n.prototype.execute ? t : n({ hook: t });
238
          if (i(t)) {
239
            if (
240
              "string" == typeof t[0] &&
241
              t[1] instanceof Object &&
242
              "function" == typeof t[1][t[0]]
243
            )
244
              return n({ hook: t[1][t[0]], object: t[1], data: t.slice(2) });
245
            if ("function" == typeof t[0])
246
              return n({ hook: t[0], data: t.slice(1) });
247
            if ("function" == typeof t[1])
248
              return n({ hook: t[1], object: t[0], data: t.slice(2) });
249
          } else {
250
            if ("string" == typeof t)
251
              return r && r(), n({ hook: s, data: [t] });
252
            if (t instanceof Object) return n(t);
253
            if (void 0 === t) return n({});
254
          }
255
          throw Error("Can't make callback from given data");
256
        },
257
        h = function (t, e) {
258
          (t = o(t)).called || (u(t, e), e.pending++);
259
        },
260
        l = function () {
261
          var t = this.signal;
262
          delete this.signal,
263
            (this.execute = this.oldExecute),
264
            delete this.oldExecute;
265
          var e = this.execute.apply(this, arguments);
266
          if (a(e) && !e.called) u(e, t);
267
          else
268
            for (var i = 0, n = t.length; i < n; i++)
269
              t[i].pending--, t[i].pending <= 0 && t[i].call();
270
        },
271
        u = function (t, e) {
272
          i(e) || (e = [e]),
273
            t.signal
274
              ? 1 === e.length
275
                ? t.signal.push(e[0])
276
                : (t.signal = t.signal.concat(e))
277
              : ((t.oldExecute = t.execute), (t.execute = l), (t.signal = e));
278
        },
279
        c = function (t) {
280
          (t = o(t)).pending = 0;
281
          for (var e = 1, i = arguments.length; e < i; e++)
282
            arguments[e] && h(arguments[e], t);
283
          if (0 === t.pending) {
284
            var n = t();
285
            a(n) && (t = n);
286
          }
287
          return t;
288
        },
289
        p = MathJax.Object.Subclass({
290
          Init: function (t) {
291
            (this.hooks = []),
292
              (this.remove = []),
293
              (this.reset = t),
294
              (this.running = !1);
295
          },
296
          Add: function (t, e) {
297
            null == e && (e = 10), a(t) || (t = o(t)), (t.priority = e);
298
            for (
299
              var i = this.hooks.length;
300
              i > 0 && e < this.hooks[i - 1].priority;
301

302
            )
303
              i--;
304
            return this.hooks.splice(i, 0, t), t;
305
          },
306
          Remove: function (t) {
307
            for (var e = 0, i = this.hooks.length; e < i; e++)
308
              if (this.hooks[e] === t)
309
                return void (this.running
310
                  ? this.remove.push(e)
311
                  : this.hooks.splice(e, 1));
312
          },
313
          Execute: function () {
314
            var t = [{}];
315
            this.running = !0;
316
            for (var e = 0, i = this.hooks.length; e < i; e++) {
317
              this.reset && this.hooks[e].reset();
318
              var n = this.hooks[e].apply(window, arguments);
319
              a(n) && !n.called && t.push(n);
320
            }
321
            return (
322
              (this.running = !1),
323
              this.remove.length && this.RemovePending(),
324
              1 === t.length ? null : 2 === t.length ? t[1] : c.apply({}, t)
325
            );
326
          },
327
          RemovePending: function () {
328
            this.remove = this.remove.sort();
329
            for (var t = this.remove.length - 1; t >= 0; t--)
330
              this.hooks.splice(t, 1);
331
            this.remove = [];
332
          },
333
        }),
334
        d = e.Object.Subclass({
335
          Init: function () {
336
            (this.pending = this.running = 0),
337
              (this.queue = []),
338
              this.Push.apply(this, arguments);
339
          },
340
          Push: function () {
341
            for (var t, e = 0, i = arguments.length; e < i; e++)
342
              (t = o(arguments[e])) !== arguments[e] ||
343
                t.called ||
344
                (t = o(["wait", this, t])),
345
                this.queue.push(t);
346
            return this.running || this.pending || this.Process(), t;
347
          },
348
          Process: function (t) {
349
            for (; !this.running && !this.pending && this.queue.length; ) {
350
              var e = this.queue[0];
351
              (t = this.queue.slice(1)), (this.queue = []), this.Suspend();
352
              var i = e();
353
              this.Resume(),
354
                t.length && (this.queue = t.concat(this.queue)),
355
                a(i) && !i.called && h(i, this);
356
            }
357
          },
358
          Suspend: function () {
359
            this.running++;
360
          },
361
          Resume: function () {
362
            this.running && this.running--;
363
          },
364
          call: function () {
365
            this.Process.apply(this, arguments);
366
          },
367
          wait: function (t) {
368
            return t;
369
          },
370
        }),
371
        f = d.Subclass(
372
          {
373
            Init: function (t) {
374
              d.prototype.Init.call(this),
375
                (this.name = t),
376
                (this.posted = []),
377
                (this.listeners = p(!0)),
378
                (this.posting = !1),
379
                (this.callback = null);
380
            },
381
            Post: function (t, e, i) {
382
              if (((e = o(e)), this.posting || this.pending))
383
                this.Push(["Post", this, t, e, i]);
384
              else {
385
                (this.callback = e),
386
                  e.reset(),
387
                  i || this.posted.push(t),
388
                  this.Suspend(),
389
                  (this.posting = !0);
390
                var n = this.listeners.Execute(t);
391
                a(n) && !n.called && h(n, this),
392
                  this.Resume(),
393
                  (this.posting = !1),
394
                  this.pending || this.call();
395
              }
396
              return e;
397
            },
398
            Clear: function (t) {
399
              return (
400
                (t = o(t)),
401
                this.posting || this.pending
402
                  ? (t = this.Push(["Clear", this, t]))
403
                  : ((this.posted = []), t()),
404
                t
405
              );
406
            },
407
            call: function () {
408
              this.callback(this), this.Process();
409
            },
410
            Interest: function (t, e, i) {
411
              if (((t = o(t)), this.listeners.Add(t, i), !e))
412
                for (var n = 0, s = this.posted.length; n < s; n++) {
413
                  t.reset();
414
                  var r = t(this.posted[n]);
415
                  a(r) && n === this.posted.length - 1 && h(r, this);
416
                }
417
              return t;
418
            },
419
            NoInterest: function (t) {
420
              this.listeners.Remove(t);
421
            },
422
            MessageHook: function (t, e, i) {
423
              (e = o(e)),
424
                this.hooks ||
425
                  ((this.hooks = {}), this.Interest(["ExecuteHooks", this])),
426
                this.hooks[t] || (this.hooks[t] = p(!0)),
427
                this.hooks[t].Add(e, i);
428
              for (var n = 0, a = this.posted.length; n < a; n++)
429
                this.posted[n] == t && (e.reset(), e(this.posted[n]));
430
              return (e.msg = t), e;
431
            },
432
            ExecuteHooks: function (t) {
433
              var e = i(t) ? t[0] : t;
434
              return this.hooks[e] ? this.hooks[e].Execute(t) : null;
435
            },
436
            RemoveHook: function (t) {
437
              this.hooks[t.msg].Remove(t);
438
            },
439
          },
440
          {
441
            signals: {},
442
            find: function (t) {
443
              return f.signals[t] || (f.signals[t] = new f(t)), f.signals[t];
444
            },
445
          }
446
        );
447
      (e.Callback = e.CallBack = o),
448
        (e.Callback.Delay = function (t, e) {
449
          return ((e = o(e)).timeout = setTimeout(e, t)), e;
450
        }),
451
        (e.Callback.After = c),
452
        (e.Callback.Queue = d),
453
        (e.Callback.Signal = f.find),
454
        (e.Callback.Hooks = p),
455
        (e.Callback.ExecuteHooks = function (t, e, n) {
456
          if (!t) return null;
457
          i(t) || (t = [t]), i(e) || (e = null == e ? [] : [e]);
458
          for (var a = p(n), s = 0, r = t.length; s < r; s++) a.Add(t[s]);
459
          return a.Execute.apply(a, e);
460
        });
461
    })(),
462
    (function (t) {
463
      var e = window.MathJax;
464
      e || (e = window.MathJax = {});
465
      var i =
466
          "Apple Computer, Inc." === navigator.vendor &&
467
          void 0 === navigator.vendorSub,
468
        n = 0,
469
        a = function (t) {
470
          return (
471
            document.styleSheets &&
472
              document.styleSheets.length > n &&
473
              (n = document.styleSheets.length),
474
            t ||
475
              (t = document.head || document.getElementsByTagName("head")[0]) ||
476
              (t = document.body),
477
            t
478
          );
479
        },
480
        s = [],
481
        r = function () {
482
          for (var t = 0, i = s.length; t < i; t++)
483
            e.Ajax.head.removeChild(s[t]);
484
          s = [];
485
        },
486
        o = { MathJax: "", a11y: "[MathJax]/extensions/a11y" };
487
      e.Ajax = {
488
        loaded: {},
489
        loading: {},
490
        loadHooks: {},
491
        timeout: 15e3,
492
        styleDelay: 1,
493
        config: { root: "", path: o },
494
        params: {},
495
        STATUS: { OK: 1, ERROR: -1 },
496
        fileURL: function (t) {
497
          for (
498
            var e;
499
            (e = t.match(/^\[([-._a-z0-9]+)\]/i)) && o.hasOwnProperty(e[1]);
500

501
          )
502
            t = (o[e[1]] || this.config.root) + t.substr(e[1].length + 2);
503
          return t;
504
        },
505
        fileName: function (t) {
506
          var e = this.config.root;
507
          t.substr(0, e.length) === e && (t = "[MathJax]" + t.substr(e.length));
508
          do {
509
            var i = !1;
510
            for (var n in o)
511
              if (
512
                o.hasOwnProperty(n) &&
513
                o[n] &&
514
                t.substr(0, o[n].length) === o[n]
515
              ) {
516
                (t = "[" + n + "]" + t.substr(o[n].length)), (i = !0);
517
                break;
518
              }
519
          } while (i);
520
          return t;
521
        },
522
        fileRev: function (t) {
523
          var i = e.cdnFileVersions[t] || e.cdnVersion || "";
524
          return i && (i = "?V=" + i), i;
525
        },
526
        urlRev: function (t) {
527
          return this.fileURL(t) + this.fileRev(t);
528
        },
529
        Require: function (t, i) {
530
          var n;
531
          if (((i = e.Callback(i)), t instanceof Object))
532
            for (var a in t)
533
              t.hasOwnProperty(a) && ((n = a.toUpperCase()), (t = t[a]));
534
          else n = t.split(/\./).pop().toUpperCase();
535
          if (this.params.noContrib && "[Contrib]" === t.substr(0, 9))
536
            i(this.STATUS.ERROR);
537
          else if (((t = this.fileURL(t)), this.loaded[t])) i(this.loaded[t]);
538
          else {
539
            var s = {};
540
            (s[n] = t), this.Load(s, i);
541
          }
542
          return i;
543
        },
544
        Load: function (t, i) {
545
          var n;
546
          if (((i = e.Callback(i)), t instanceof Object))
547
            for (var s in t)
548
              t.hasOwnProperty(s) && ((n = s.toUpperCase()), (t = t[s]));
549
          else n = t.split(/\./).pop().toUpperCase();
550
          if (((t = this.fileURL(t)), this.loading[t])) this.addHook(t, i);
551
          else {
552
            if (((this.head = a(this.head)), !this.loader[n]))
553
              throw Error("Can't load files of type " + n);
554
            this.loader[n].call(this, t, i);
555
          }
556
          return i;
557
        },
558
        LoadHook: function (t, i, n) {
559
          if (((i = e.Callback(i)), t instanceof Object))
560
            for (var a in t) t.hasOwnProperty(a) && (t = t[a]);
561
          return (
562
            (t = this.fileURL(t)),
563
            this.loaded[t] ? i(this.loaded[t]) : this.addHook(t, i, n),
564
            i
565
          );
566
        },
567
        addHook: function (t, e, i) {
568
          this.loadHooks[t] || (this.loadHooks[t] = MathJax.Callback.Hooks()),
569
            this.loadHooks[t].Add(e, i),
570
            (e.file = t);
571
        },
572
        removeHook: function (t) {
573
          this.loadHooks[t.file] &&
574
            (this.loadHooks[t.file].Remove(t),
575
            this.loadHooks[t.file].hooks.length ||
576
              delete this.loadHooks[t.file]);
577
        },
578
        Preloading: function () {
579
          for (var t = 0, e = arguments.length; t < e; t++) {
580
            var i = this.fileURL(arguments[t]);
581
            this.loading[i] || (this.loading[i] = { preloaded: !0 });
582
          }
583
        },
584
        loader: {
585
          JS: function (t, i) {
586
            var n = this.fileName(t),
587
              a = document.createElement("script"),
588
              s = e.Callback(["loadTimeout", this, t]);
589
            (this.loading[t] = {
590
              callback: i,
591
              timeout: setTimeout(s, this.timeout),
592
              status: this.STATUS.OK,
593
              script: a,
594
            }),
595
              (this.loading[t].message = e.Message.File(n)),
596
              (a.onerror = s),
597
              (a.type = "text/javascript"),
598
              (a.src = t + this.fileRev(n)),
599
              this.head.appendChild(a);
600
          },
601
          CSS: function (t, i) {
602
            var n = this.fileName(t),
603
              a = document.createElement("link");
604
            (a.rel = "stylesheet"),
605
              (a.type = "text/css"),
606
              (a.href = t + this.fileRev(n)),
607
              (this.loading[t] = {
608
                callback: i,
609
                message: e.Message.File(n),
610
                status: this.STATUS.OK,
611
              }),
612
              this.head.appendChild(a),
613
              this.timer.create.call(this, [this.timer.file, t], a);
614
          },
615
        },
616
        timer: {
617
          create: function (t, a) {
618
            return (
619
              (t = e.Callback(t)),
620
              "STYLE" === a.nodeName &&
621
              a.styleSheet &&
622
              void 0 !== a.styleSheet.cssText
623
                ? t(this.STATUS.OK)
624
                : window.chrome && "LINK" === a.nodeName
625
                ? t(this.STATUS.OK)
626
                : i
627
                ? this.timer.start(
628
                    this,
629
                    [this.timer.checkSafari2, n++, t],
630
                    this.styleDelay
631
                  )
632
                : this.timer.start(
633
                    this,
634
                    [this.timer.checkLength, a, t],
635
                    this.styleDelay
636
                  ),
637
              t
638
            );
639
          },
640
          start: function (t, i, n, a) {
641
            ((i = e.Callback(i)).execute = this.execute),
642
              (i.time = this.time),
643
              (i.STATUS = t.STATUS),
644
              (i.timeout = a || t.timeout),
645
              (i.delay = i.total = n || 0),
646
              n ? setTimeout(i, n) : i();
647
          },
648
          time: function (t) {
649
            return (
650
              (this.total += this.delay),
651
              (this.delay = Math.floor(1.05 * this.delay + 5)),
652
              this.total >= this.timeout ? (t(this.STATUS.ERROR), 1) : 0
653
            );
654
          },
655
          file: function (t, i) {
656
            i < 0 ? e.Ajax.loadTimeout(t) : e.Ajax.loadComplete(t);
657
          },
658
          execute: function () {
659
            this.hook.call(this.object, this, this.data[0], this.data[1]);
660
          },
661
          checkSafari2: function (t, e, i) {
662
            t.time(i) ||
663
              (document.styleSheets.length > e &&
664
              document.styleSheets[e].cssRules &&
665
              document.styleSheets[e].cssRules.length
666
                ? i(t.STATUS.OK)
667
                : setTimeout(t, t.delay));
668
          },
669
          checkLength: function (t, i, n) {
670
            if (!t.time(n)) {
671
              var a = 0,
672
                s = i.sheet || i.styleSheet;
673
              try {
674
                (s.cssRules || s.rules || []).length > 0 && (a = 1);
675
              } catch (t) {
676
                t.message.match(/protected variable|restricted URI/)
677
                  ? (a = 1)
678
                  : t.message.match(/Security error/) && (a = 1);
679
              }
680
              a
681
                ? setTimeout(e.Callback([n, t.STATUS.OK]), 0)
682
                : setTimeout(t, t.delay);
683
            }
684
          },
685
        },
686
        loadComplete: function (t) {
687
          t = this.fileURL(t);
688
          var i = this.loading[t];
689
          return (
690
            i && !i.preloaded
691
              ? (e.Message.Clear(i.message),
692
                clearTimeout(i.timeout),
693
                i.script &&
694
                  (0 === s.length && setTimeout(r, 0), s.push(i.script)),
695
                (this.loaded[t] = i.status),
696
                delete this.loading[t],
697
                this.addHook(t, i.callback))
698
              : (i && delete this.loading[t],
699
                (this.loaded[t] = this.STATUS.OK),
700
                (i = { status: this.STATUS.OK })),
701
            this.loadHooks[t] ? this.loadHooks[t].Execute(i.status) : null
702
          );
703
        },
704
        loadTimeout: function (t) {
705
          this.loading[t].timeout && clearTimeout(this.loading[t].timeout),
706
            (this.loading[t].status = this.STATUS.ERROR),
707
            this.loadError(t),
708
            this.loadComplete(t);
709
        },
710
        loadError: function (t) {
711
          e.Message.Set(
712
            ["LoadFailed", "File failed to load: %1", t],
713
            null,
714
            2e3
715
          ),
716
            e.Hub.signal.Post(["file load error", t]);
717
        },
718
        Styles: function (t, i) {
719
          var n = this.StyleString(t);
720
          if ("" === n) (i = e.Callback(i))();
721
          else {
722
            var s = document.createElement("style");
723
            (s.type = "text/css"),
724
              (this.head = a(this.head)),
725
              this.head.appendChild(s),
726
              s.styleSheet && void 0 !== s.styleSheet.cssText
727
                ? (s.styleSheet.cssText = n)
728
                : s.appendChild(document.createTextNode(n)),
729
              (i = this.timer.create.call(this, i, s));
730
          }
731
          return i;
732
        },
733
        StyleString: function (t) {
734
          if ("string" == typeof t) return t;
735
          var i,
736
            n,
737
            a = "";
738
          for (i in t)
739
            if (t.hasOwnProperty(i))
740
              if ("string" == typeof t[i]) a += i + " {" + t[i] + "}\n";
741
              else if (e.Object.isArray(t[i]))
742
                for (var s = 0; s < t[i].length; s++)
743
                  ((n = {})[i] = t[i][s]), (a += this.StyleString(n));
744
              else if ("@media" === i.substr(0, 6))
745
                a += i + " {" + this.StyleString(t[i]) + "}\n";
746
              else if (null != t[i]) {
747
                for (var r in ((n = []), t[i]))
748
                  t[i].hasOwnProperty(r) &&
749
                    null != t[i][r] &&
750
                    (n[n.length] = r + ": " + t[i][r]);
751
                a += i + " {" + n.join("; ") + "}\n";
752
              }
753
          return a;
754
        },
755
      };
756
    })(),
757
    (MathJax.HTML = {
758
      Element: function (t, e, i) {
759
        var n,
760
          a = document.createElement(t);
761
        if (e) {
762
          if (e.hasOwnProperty("style")) {
763
            var s = e.style;
764
            for (n in ((e.style = {}), s))
765
              s.hasOwnProperty(n) &&
766
                (e.style[n.replace(/-([a-z])/g, this.ucMatch)] = s[n]);
767
          }
768
          for (n in (MathJax.Hub.Insert(a, e), e))
769
            ("role" !== n && "aria-" !== n.substr(0, 5)) ||
770
              a.setAttribute(n, e[n]);
771
        }
772
        if (i) {
773
          MathJax.Object.isArray(i) || (i = [i]);
774
          for (var r = 0, o = i.length; r < o; r++)
775
            MathJax.Object.isArray(i[r])
776
              ? a.appendChild(this.Element(i[r][0], i[r][1], i[r][2]))
777
              : "script" === t
778
              ? this.setScript(a, i[r])
779
              : a.appendChild(document.createTextNode(i[r]));
780
        }
781
        return a;
782
      },
783
      ucMatch: function (t, e) {
784
        return e.toUpperCase();
785
      },
786
      addElement: function (t, e, i, n) {
787
        return t.appendChild(this.Element(e, i, n));
788
      },
789
      TextNode: function (t) {
790
        return document.createTextNode(t);
791
      },
792
      addText: function (t, e) {
793
        return t.appendChild(this.TextNode(e));
794
      },
795
      setScript: function (t, e) {
796
        if (this.setScriptBug) t.text = e;
797
        else {
798
          for (; t.firstChild; ) t.removeChild(t.firstChild);
799
          this.addText(t, e);
800
        }
801
      },
802
      getScript: function (t) {
803
        return ("" === t.text ? t.innerHTML : t.text)
804
          .replace(/^\s+/, "")
805
          .replace(/\s+$/, "");
806
      },
807
      Cookie: {
808
        prefix: "mjx",
809
        expires: 365,
810
        Set: function (t, e) {
811
          var i = [];
812
          if (e)
813
            for (var n in e)
814
              e.hasOwnProperty(n) &&
815
                i.push(n + ":" + e[n].toString().replace(/&/g, "&&"));
816
          var a = this.prefix + "." + t + "=" + escape(i.join("&;"));
817
          if (this.expires) {
818
            var s = new Date();
819
            s.setDate(s.getDate() + this.expires),
820
              (a += "; expires=" + s.toGMTString());
821
          }
822
          try {
823
            document.cookie = a + "; path=/";
824
          } catch (t) {}
825
        },
826
        Get: function (t, e) {
827
          e || (e = {});
828
          var i,
829
            n = new RegExp(
830
              "(?:^|;\\s*)" + this.prefix + "\\." + t + "=([^;]*)(?:;|$)"
831
            );
832
          try {
833
            i = n.exec(document.cookie);
834
          } catch (t) {}
835
          if (i && "" !== i[1])
836
            for (
837
              var a = unescape(i[1]).split("&;"), s = 0, r = a.length;
838
              s < r;
839
              s++
840
            ) {
841
              var o = (i = a[s].match(/([^:]+):(.*)/))[2].replace(/&&/g, "&");
842
              "true" === o
843
                ? (o = !0)
844
                : "false" === o
845
                ? (o = !1)
846
                : o.match(/^-?(\d+(\.\d+)?|\.\d+)$/) && (o = parseFloat(o)),
847
                (e[i[1]] = o);
848
            }
849
          return e;
850
        },
851
      },
852
    }),
853
    (MathJax.Localization = {
854
      locale: "en",
855
      directory: "[MathJax]/localization",
856
      strings: {
857
        ar: { menuTitle: "العربية" },
858
        ast: { menuTitle: "asturianu" },
859
        bg: { menuTitle: "български" },
860
        bcc: { menuTitle: "بلوچی" },
861
        br: { menuTitle: "brezhoneg" },
862
        ca: { menuTitle: "català" },
863
        cdo: { menuTitle: "Mìng-dĕ̤ng-ngṳ̄" },
864
        cs: { menuTitle: "čeština" },
865
        da: { menuTitle: "dansk" },
866
        de: { menuTitle: "Deutsch" },
867
        diq: { menuTitle: "Zazaki" },
868
        en: { menuTitle: "English", isLoaded: !0 },
869
        eo: { menuTitle: "Esperanto" },
870
        es: { menuTitle: "español" },
871
        fa: { menuTitle: "فارسی" },
872
        fi: { menuTitle: "suomi" },
873
        fr: { menuTitle: "français" },
874
        gl: { menuTitle: "galego" },
875
        he: { menuTitle: "עברית" },
876
        ia: { menuTitle: "interlingua" },
877
        it: { menuTitle: "italiano" },
878
        ja: { menuTitle: "日本語" },
879
        kn: { menuTitle: "ಕನ್ನಡ" },
880
        ko: { menuTitle: "한국어" },
881
        lb: { menuTitle: "Lëtzebuergesch" },
882
        lki: { menuTitle: "لەکی" },
883
        lt: { menuTitle: "lietuvių" },
884
        mk: { menuTitle: "македонски" },
885
        nl: { menuTitle: "Nederlands" },
886
        oc: { menuTitle: "occitan" },
887
        pl: { menuTitle: "polski" },
888
        pt: { menuTitle: "português" },
889
        "pt-br": { menuTitle: "português do Brasil" },
890
        ru: { menuTitle: "русский" },
891
        sco: { menuTitle: "Scots" },
892
        scn: { menuTitle: "sicilianu" },
893
        sk: { menuTitle: "slovenčina" },
894
        sl: { menuTitle: "slovenščina" },
895
        sv: { menuTitle: "svenska" },
896
        th: { menuTitle: "ไทย" },
897
        tr: { menuTitle: "Türkçe" },
898
        uk: { menuTitle: "українська" },
899
        vi: { menuTitle: "Tiếng Việt" },
900
        "zh-hans": { menuTitle: "中文(简体)" },
901
        "zh-hant": { menuTitle: "汉语" },
902
      },
903
      pattern:
904
        /%(\d+|\{\d+\}|\{[a-z]+:\%\d+(?:\|(?:%\{\d+\}|%.|[^\}])*)+\}|.)/g,
905
      SPLIT:
906
        3 === "axb".split(/(x)/).length
907
          ? function (t, e) {
908
              return t.split(e);
909
            }
910
          : function (t, e) {
911
              var i,
912
                n = [],
913
                a = 0;
914
              for (e.lastIndex = 0; (i = e.exec(t)); )
915
                n.push(t.substr(a, i.index - a)),
916
                  n.push.apply(n, i.slice(1)),
917
                  (a = i.index + i[0].length);
918
              return n.push(t.substr(a)), n;
919
            },
920
      _: function (t, e) {
921
        return MathJax.Object.isArray(e)
922
          ? this.processSnippet(t, e)
923
          : this.processString(
924
              this.lookupPhrase(t, e),
925
              [].slice.call(arguments, 2)
926
            );
927
      },
928
      processString: function (t, e, i) {
929
        var n,
930
          a,
931
          s = MathJax.Object.isArray;
932
        for (n = 0, a = e.length; n < a; n++)
933
          i && s(e[n]) && (e[n] = this.processSnippet(i, e[n]));
934
        var r = this.SPLIT(t, this.pattern);
935
        for (n = 1, a = r.length; n < a; n += 2) {
936
          var o = r[n].charAt(0);
937
          if (o >= "0" && o <= "9")
938
            (r[n] = e[r[n] - 1]),
939
              "number" == typeof r[n] && (r[n] = this.number(r[n]));
940
          else if ("{" === o)
941
            if ((o = r[n].substr(1)) >= "0" && o <= "9")
942
              (r[n] = e[r[n].substr(1, r[n].length - 2) - 1]),
943
                "number" == typeof r[n] && (r[n] = this.number(r[n]));
944
            else {
945
              var h = r[n].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);
946
              if (h)
947
                if ("plural" === h[1]) {
948
                  var l = e[h[2] - 1];
949
                  if (void 0 === l) r[n] = "???";
950
                  else {
951
                    l = this.plural(l) - 1;
952
                    var u = h[3]
953
                      .replace(/(^|[^%])(%%)*%\|/g, "$1$2%")
954
                      .split(/\|/);
955
                    l >= 0 && l < u.length
956
                      ? (r[n] = this.processString(
957
                          u[l].replace(/\uEFEF/g, "|"),
958
                          e,
959
                          i
960
                        ))
961
                      : (r[n] = "???");
962
                  }
963
                } else r[n] = "%" + r[n];
964
            }
965
          null == r[n] && (r[n] = "???");
966
        }
967
        if (!i) return r.join("");
968
        var c = [],
969
          p = "";
970
        for (n = 0; n < a; n++)
971
          (p += r[n]),
972
            ++n < a &&
973
              (s(r[n])
974
                ? (c.push(p), (c = c.concat(r[n])), (p = ""))
975
                : (p += r[n]));
976
        return "" !== p && c.push(p), c;
977
      },
978
      processSnippet: function (t, e) {
979
        for (var i = [], n = 0, a = e.length; n < a; n++)
980
          if (MathJax.Object.isArray(e[n])) {
981
            var s = e[n];
982
            if ("string" == typeof s[1]) {
983
              var r = s[0];
984
              MathJax.Object.isArray(r) || (r = [t, r]);
985
              var o = this.lookupPhrase(r, s[1]);
986
              i = i.concat(this.processMarkdown(o, s.slice(2), t));
987
            } else
988
              MathJax.Object.isArray(s[1])
989
                ? (i = i.concat(this.processSnippet.apply(this, s)))
990
                : s.length >= 3
991
                ? i.push([s[0], s[1], this.processSnippet(t, s[2])])
992
                : i.push(e[n]);
993
          } else i.push(e[n]);
994
        return i;
995
      },
996
      markdownPattern:
997
        /(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,
998
      processMarkdown: function (t, e, i) {
999
        for (
1000
          var n,
1001
            a = [],
1002
            s = t.split(this.markdownPattern),
1003
            r = s[0],
1004
            o = 1,
1005
            h = s.length;
1006
          o < h;
1007
          o += 8
1008
        )
1009
          s[o + 1]
1010
            ? ((n = this.processString(s[o + 2], e, i)),
1011
              MathJax.Object.isArray(n) || (n = [n]),
1012
              (n = [["b", "i", "i"][s[o + 1].length - 1], {}, n]),
1013
              3 === s[o + 1].length && (n = ["b", {}, n]))
1014
            : s[o + 3]
1015
            ? ((n = this.processString(
1016
                s[o + 4].replace(/^\s/, "").replace(/\s$/, ""),
1017
                e,
1018
                i
1019
              )),
1020
              MathJax.Object.isArray(n) || (n = [n]),
1021
              (n = ["code", {}, n]))
1022
            : s[o + 5]
1023
            ? ((n = this.processString(s[o + 5], e, i)),
1024
              MathJax.Object.isArray(n) || (n = [n]),
1025
              (n = [
1026
                "a",
1027
                { href: this.processString(s[o + 6], e), target: "_blank" },
1028
                n,
1029
              ]))
1030
            : ((r += s[o]), (n = null)),
1031
            n && ((a = this.concatString(a, r, e, i)).push(n), (r = "")),
1032
            "" !== s[o + 7] && (r += s[o + 7]);
1033
        return (a = this.concatString(a, r, e, i));
1034
      },
1035
      concatString: function (t, e, i, n) {
1036
        return (
1037
          "" != e &&
1038
            ((e = this.processString(e, i, n)),
1039
            MathJax.Object.isArray(e) || (e = [e]),
1040
            (t = t.concat(e))),
1041
          t
1042
        );
1043
      },
1044
      lookupPhrase: function (t, e, i) {
1045
        i || (i = "_"),
1046
          MathJax.Object.isArray(t) && ((i = t[0] || "_"), (t = t[1] || ""));
1047
        var n = this.loadDomain(i);
1048
        n && MathJax.Hub.RestartAfter(n);
1049
        var a = this.strings[this.locale];
1050
        if (a && a.domains && i in a.domains) {
1051
          var s = a.domains[i];
1052
          s.strings && t in s.strings && (e = s.strings[t]);
1053
        }
1054
        return e;
1055
      },
1056
      loadFile: function (t, e, i) {
1057
        ((i = MathJax.Callback(i)),
1058
        (t = e.file || t).match(/\.js$/) || (t += ".js"),
1059
        t.match(/^([a-z]+:|\[MathJax\])/)) ||
1060
          (t =
1061
            (this.strings[this.locale].directory ||
1062
              this.directory + "/" + this.locale ||
1063
              "[MathJax]/localization/" + this.locale) +
1064
            "/" +
1065
            t);
1066
        var n = MathJax.Ajax.Require(t, function () {
1067
          return (e.isLoaded = !0), i();
1068
        });
1069
        return n.called ? null : n;
1070
      },
1071
      loadDomain: function (t, e) {
1072
        var i,
1073
          n = this.strings[this.locale];
1074
        if (n) {
1075
          if (!n.isLoaded && (i = this.loadFile(this.locale, n)))
1076
            return MathJax.Callback.Queue(i, ["loadDomain", this, t]).Push(
1077
              e || {}
1078
            );
1079
          if (n.domains && t in n.domains) {
1080
            var a = n.domains[t];
1081
            if (!a.isLoaded && (i = this.loadFile(t, a)))
1082
              return MathJax.Callback.Queue(i).Push(e);
1083
          }
1084
        }
1085
        return MathJax.Callback(e)();
1086
      },
1087
      Try: function (t) {
1088
        (t = MathJax.Callback(t)).autoReset = !0;
1089
        try {
1090
          t();
1091
        } catch (e) {
1092
          if (!e.restart) throw e;
1093
          MathJax.Callback.After(["Try", this, t], e.restart);
1094
        }
1095
      },
1096
      resetLocale: function (t) {
1097
        if (t) {
1098
          for (t = t.toLowerCase(); !this.strings[t]; ) {
1099
            var e = t.lastIndexOf("-");
1100
            if (-1 === e) return;
1101
            t = t.substring(0, e);
1102
          }
1103
          var i = this.strings[t].remap;
1104
          (this.locale = i || t),
1105
            MathJax.Callback.Signal("Hub").Post(["Locale Reset", this.locale]);
1106
        }
1107
      },
1108
      setLocale: function (t) {
1109
        this.resetLocale(t), MathJax.Menu && this.loadDomain("MathMenu");
1110
      },
1111
      addTranslation: function (t, e, i) {
1112
        var n = this.strings[t],
1113
          a = !1;
1114
        n || ((n = this.strings[t] = {}), (a = !0)),
1115
          n.domains || (n.domains = {}),
1116
          e && (n.domains[e] || (n.domains[e] = {}), (n = n.domains[e])),
1117
          MathJax.Hub.Insert(n, i),
1118
          a && MathJax.Menu.menu && MathJax.Menu.CreateLocaleMenu();
1119
      },
1120
      setCSS: function (t) {
1121
        var e = this.strings[this.locale];
1122
        return (
1123
          e &&
1124
            (e.fontFamily && (t.style.fontFamily = e.fontFamily),
1125
            e.fontDirection &&
1126
              ((t.style.direction = e.fontDirection),
1127
              "rtl" === e.fontDirection && (t.style.textAlign = "right"))),
1128
          t
1129
        );
1130
      },
1131
      fontFamily: function () {
1132
        var t = this.strings[this.locale];
1133
        return t ? t.fontFamily : null;
1134
      },
1135
      fontDirection: function () {
1136
        var t = this.strings[this.locale];
1137
        return t ? t.fontDirection : null;
1138
      },
1139
      plural: function (t) {
1140
        var e = this.strings[this.locale];
1141
        return e && e.plural ? e.plural(t) : 1 == t ? 1 : 2;
1142
      },
1143
      number: function (t) {
1144
        var e = this.strings[this.locale];
1145
        return e && e.number ? e.number(t) : t;
1146
      },
1147
    }),
1148
    (MathJax.Message = {
1149
      ready: !1,
1150
      log: [{}],
1151
      current: null,
1152
      textNodeBug:
1153
        ("Apple Computer, Inc." === navigator.vendor &&
1154
          void 0 === navigator.vendorSub) ||
1155
        (window.hasOwnProperty && window.hasOwnProperty("konqueror")),
1156
      styles: {
1157
        "#MathJax_Message": {
1158
          position: "fixed",
1159
          left: "1px",
1160
          bottom: "2px",
1161
          "background-color": "#E6E6E6",
1162
          border: "1px solid #959595",
1163
          margin: "0px",
1164
          padding: "2px 8px",
1165
          "z-index": "102",
1166
          color: "black",
1167
          "font-size": "80%",
1168
          width: "auto",
1169
          "white-space": "nowrap",
1170
        },
1171
        "#MathJax_MSIE_Frame": {
1172
          position: "absolute",
1173
          top: 0,
1174
          left: 0,
1175
          width: "0px",
1176
          "z-index": 101,
1177
          border: "0px",
1178
          margin: "0px",
1179
          padding: "0px",
1180
        },
1181
      },
1182
      browsers: {
1183
        MSIE: function (t) {
1184
          (MathJax.Message.msieFixedPositionBug =
1185
            (document.documentMode || 0) < 7),
1186
            MathJax.Message.msieFixedPositionBug &&
1187
              (MathJax.Hub.config.styles["#MathJax_Message"].position =
1188
                "absolute"),
1189
            (MathJax.Message.quirks = "BackCompat" === document.compatMode);
1190
        },
1191
        Chrome: function (t) {
1192
          (MathJax.Hub.config.styles["#MathJax_Message"].bottom = "1.5em"),
1193
            (MathJax.Hub.config.styles["#MathJax_Message"].left = "1em");
1194
        },
1195
      },
1196
      Init: function (t) {
1197
        if ((t && (this.ready = !0), !document.body || !this.ready)) return !1;
1198
        if (
1199
          (this.div &&
1200
            null == this.div.parentNode &&
1201
            ((this.div = document.getElementById("MathJax_Message")),
1202
            (this.text = this.div ? this.div.firstChild : null)),
1203
          !this.div)
1204
        ) {
1205
          var e = document.body;
1206
          this.msieFixedPositionBug &&
1207
            window.attachEvent &&
1208
            ((e = this.frame = this.addDiv(document.body)).removeAttribute(
1209
              "id"
1210
            ),
1211
            (e.style.position = "absolute"),
1212
            (e.style.border = e.style.margin = e.style.padding = "0px"),
1213
            (e.style.zIndex = "101"),
1214
            (e.style.height = "0px"),
1215
            ((e = this.addDiv(e)).id = "MathJax_MSIE_Frame"),
1216
            window.attachEvent("onscroll", this.MoveFrame),
1217
            window.attachEvent("onresize", this.MoveFrame),
1218
            this.MoveFrame()),
1219
            (this.div = this.addDiv(e)),
1220
            (this.div.style.display = "none");
1221
        }
1222
        return (
1223
          this.text ||
1224
            (this.text = this.div.appendChild(document.createTextNode(""))),
1225
          !0
1226
        );
1227
      },
1228
      addDiv: function (t) {
1229
        var e = document.createElement("div");
1230
        return (
1231
          (e.id = "MathJax_Message"),
1232
          t.firstChild ? t.insertBefore(e, t.firstChild) : t.appendChild(e),
1233
          e
1234
        );
1235
      },
1236
      MoveFrame: function () {
1237
        var t = MathJax.Message.quirks
1238
            ? document.body
1239
            : document.documentElement,
1240
          e = MathJax.Message.frame;
1241
        (e.style.left = t.scrollLeft + "px"),
1242
          (e.style.top = t.scrollTop + "px"),
1243
          (e.style.width = t.clientWidth + "px"),
1244
          ((e = e.firstChild).style.height = t.clientHeight + "px");
1245
      },
1246
      localize: function (t) {
1247
        return MathJax.Localization._(t, t);
1248
      },
1249
      filterText: function (t, e, i) {
1250
        return (
1251
          "simple" === MathJax.Hub.config.messageStyle &&
1252
            ("LoadFile" === i
1253
              ? (this.loading ||
1254
                  (this.loading = this.localize("Loading") + " "),
1255
                (t = this.loading),
1256
                (this.loading += "."))
1257
              : "ProcessMath" === i
1258
              ? (this.processing ||
1259
                  (this.processing = this.localize("Processing") + " "),
1260
                (t = this.processing),
1261
                (this.processing += "."))
1262
              : "TypesetMath" === i &&
1263
                (this.typesetting ||
1264
                  (this.typesetting = this.localize("Typesetting") + " "),
1265
                (t = this.typesetting),
1266
                (this.typesetting += "."))),
1267
          t
1268
        );
1269
      },
1270
      clearCounts: function () {
1271
        delete this.loading, delete this.processing, delete this.typesetting;
1272
      },
1273
      Set: function (t, e, i) {
1274
        null == e && ((e = this.log.length), (this.log[e] = {}));
1275
        var n = "";
1276
        if (MathJax.Object.isArray(t)) {
1277
          (n = t[0]), MathJax.Object.isArray(n) && (n = n[1]);
1278
          try {
1279
            t = MathJax.Localization._.apply(MathJax.Localization, t);
1280
          } catch (n) {
1281
            if (!n.restart) throw n;
1282
            if (!n.restart.called)
1283
              return (
1284
                null == this.log[e].restarted && (this.log[e].restarted = 0),
1285
                this.log[e].restarted++,
1286
                delete this.log[e].cleared,
1287
                MathJax.Callback.After(["Set", this, t, e, i], n.restart),
1288
                e
1289
              );
1290
          }
1291
        }
1292
        return (
1293
          this.timer && (clearTimeout(this.timer), delete this.timer),
1294
          (this.log[e].text = t),
1295
          (this.log[e].filteredText = t = this.filterText(t, e, n)),
1296
          void 0 === this.log[e].next &&
1297
            ((this.log[e].next = this.current),
1298
            null != this.current && (this.log[this.current].prev = e),
1299
            (this.current = e)),
1300
          this.current === e &&
1301
            "none" !== MathJax.Hub.config.messageStyle &&
1302
            (this.Init()
1303
              ? (this.textNodeBug
1304
                  ? (this.div.innerHTML = t)
1305
                  : (this.text.nodeValue = t),
1306
                (this.div.style.display = ""),
1307
                this.status && ((window.status = ""), delete this.status))
1308
              : ((window.status = t), (this.status = !0))),
1309
          this.log[e].restarted &&
1310
            (this.log[e].cleared && (i = 0),
1311
            0 == --this.log[e].restarted && delete this.log[e].cleared),
1312
          i
1313
            ? setTimeout(MathJax.Callback(["Clear", this, e]), i)
1314
            : 0 == i && this.Clear(e, 0),
1315
          e
1316
        );
1317
      },
1318
      Clear: function (t, e) {
1319
        null != this.log[t].prev &&
1320
          (this.log[this.log[t].prev].next = this.log[t].next),
1321
          null != this.log[t].next &&
1322
            (this.log[this.log[t].next].prev = this.log[t].prev),
1323
          this.current === t &&
1324
            ((this.current = this.log[t].next),
1325
            this.text
1326
              ? (null == this.div.parentNode && this.Init(),
1327
                null == this.current
1328
                  ? (this.timer &&
1329
                      (clearTimeout(this.timer), delete this.timer),
1330
                    null == e && (e = 600),
1331
                    0 === e
1332
                      ? this.Remove()
1333
                      : (this.timer = setTimeout(
1334
                          MathJax.Callback(["Remove", this]),
1335
                          e
1336
                        )))
1337
                  : "none" !== MathJax.Hub.config.messageStyle &&
1338
                    (this.textNodeBug
1339
                      ? (this.div.innerHTML =
1340
                          this.log[this.current].filteredText)
1341
                      : (this.text.nodeValue =
1342
                          this.log[this.current].filteredText)),
1343
                this.status && ((window.status = ""), delete this.status))
1344
              : this.status &&
1345
                (window.status =
1346
                  null == this.current ? "" : this.log[this.current].text)),
1347
          delete this.log[t].next,
1348
          delete this.log[t].prev,
1349
          delete this.log[t].filteredText,
1350
          this.log[t].restarted && (this.log[t].cleared = !0);
1351
      },
1352
      Remove: function () {
1353
        (this.text.nodeValue = ""), (this.div.style.display = "none");
1354
      },
1355
      File: function (t) {
1356
        return this.Set(["LoadFile", "Loading %1", t], null, null);
1357
      },
1358
      Log: function () {
1359
        for (var t = [], e = 1, i = this.log.length; e < i; e++)
1360
          t[e] = this.log[e].text;
1361
        return t.join("\n");
1362
      },
1363
    }),
1364
    (MathJax.Hub = {
1365
      config: {
1366
        root: "",
1367
        config: [],
1368
        styleSheets: [],
1369
        styles: { ".MathJax_Preview": { color: "#888", display: "contents" } },
1370
        jax: [],
1371
        extensions: [],
1372
        preJax: null,
1373
        postJax: null,
1374
        displayAlign: "center",
1375
        displayIndent: "0",
1376
        preRemoveClass: "MathJax_Preview",
1377
        showProcessingMessages: !0,
1378
        messageStyle: "normal",
1379
        delayStartupUntil: "none",
1380
        skipStartupTypeset: !1,
1381
        elements: [],
1382
        positionToHash: !0,
1383
        showMathMenu: !0,
1384
        showMathMenuMSIE: !0,
1385
        menuSettings: {
1386
          zoom: "None",
1387
          CTRL: !1,
1388
          ALT: !1,
1389
          CMD: !1,
1390
          Shift: !1,
1391
          discoverable: !1,
1392
          zscale: "200%",
1393
          renderer: null,
1394
          font: "Auto",
1395
          context: "MathJax",
1396
          locale: null,
1397
          mpContext: !1,
1398
          mpMouse: !1,
1399
          texHints: !0,
1400
          FastPreview: null,
1401
          assistiveMML: null,
1402
          inTabOrder: !0,
1403
          semantics: !1,
1404
        },
1405
        errorSettings: {
1406
          message: ["[", ["MathProcessingError", "Math Processing Error"], "]"],
1407
          style: { color: "#CC0000", "font-style": "italic" },
1408
        },
1409
        ignoreMMLattributes: {},
1410
      },
1411
      preProcessors: MathJax.Callback.Hooks(!0),
1412
      inputJax: {},
1413
      outputJax: { order: {} },
1414
      processSectionDelay: 50,
1415
      processUpdateTime: 250,
1416
      processUpdateDelay: 10,
1417
      signal: MathJax.Callback.Signal("Hub"),
1418
      Config: function (t) {
1419
        this.Insert(this.config, t),
1420
          this.config.Augment && this.Augment(this.config.Augment);
1421
      },
1422
      CombineConfig: function (t, e) {
1423
        for (
1424
          var i, n, a = this.config, s = 0, r = (t = t.split(/\./)).length;
1425
          s < r;
1426
          s++
1427
        )
1428
          a[(i = t[s])] || (a[i] = {}), (n = a), (a = a[i]);
1429
        return (n[i] = a = this.Insert(e, a)), a;
1430
      },
1431
      Register: {
1432
        PreProcessor: function () {
1433
          return MathJax.Hub.preProcessors.Add.apply(
1434
            MathJax.Hub.preProcessors,
1435
            arguments
1436
          );
1437
        },
1438
        MessageHook: function () {
1439
          return MathJax.Hub.signal.MessageHook.apply(
1440
            MathJax.Hub.signal,
1441
            arguments
1442
          );
1443
        },
1444
        StartupHook: function () {
1445
          return MathJax.Hub.Startup.signal.MessageHook.apply(
1446
            MathJax.Hub.Startup.signal,
1447
            arguments
1448
          );
1449
        },
1450
        LoadHook: function () {
1451
          return MathJax.Ajax.LoadHook.apply(MathJax.Ajax, arguments);
1452
        },
1453
      },
1454
      UnRegister: {
1455
        PreProcessor: function (t) {
1456
          MathJax.Hub.preProcessors.Remove(t);
1457
        },
1458
        MessageHook: function (t) {
1459
          MathJax.Hub.signal.RemoveHook(t);
1460
        },
1461
        StartupHook: function (t) {
1462
          MathJax.Hub.Startup.signal.RemoveHook(t);
1463
        },
1464
        LoadHook: function (t) {
1465
          MathJax.Ajax.removeHook(t);
1466
        },
1467
      },
1468
      getAllJax: function (t) {
1469
        for (
1470
          var e = [], i = this.elementScripts(t), n = 0, a = i.length;
1471
          n < a;
1472
          n++
1473
        )
1474
          i[n].MathJax &&
1475
            i[n].MathJax.elementJax &&
1476
            e.push(i[n].MathJax.elementJax);
1477
        return e;
1478
      },
1479
      getJaxByType: function (t, e) {
1480
        for (
1481
          var i = [], n = this.elementScripts(e), a = 0, s = n.length;
1482
          a < s;
1483
          a++
1484
        )
1485
          n[a].MathJax &&
1486
            n[a].MathJax.elementJax &&
1487
            n[a].MathJax.elementJax.mimeType === t &&
1488
            i.push(n[a].MathJax.elementJax);
1489
        return i;
1490
      },
1491
      getJaxByInputType: function (t, e) {
1492
        for (
1493
          var i = [], n = this.elementScripts(e), a = 0, s = n.length;
1494
          a < s;
1495
          a++
1496
        )
1497
          n[a].MathJax &&
1498
            n[a].MathJax.elementJax &&
1499
            n[a].type &&
1500
            n[a].type.replace(/ *;(.|\s)*/, "") === t &&
1501
            i.push(n[a].MathJax.elementJax);
1502
        return i;
1503
      },
1504
      getJaxFor: function (t) {
1505
        if (
1506
          ("string" == typeof t && (t = document.getElementById(t)),
1507
          t && t.MathJax)
1508
        )
1509
          return t.MathJax.elementJax;
1510
        if (this.isMathJaxNode(t)) {
1511
          for (t.isMathJax || (t = t.firstChild); t && !t.jaxID; )
1512
            t = t.parentNode;
1513
          if (t) return MathJax.OutputJax[t.jaxID].getJaxFromMath(t);
1514
        }
1515
        return null;
1516
      },
1517
      isJax: function (t) {
1518
        if (
1519
          ("string" == typeof t && (t = document.getElementById(t)),
1520
          this.isMathJaxNode(t))
1521
        )
1522
          return 1;
1523
        if (t && "script" === (t.tagName || "").toLowerCase()) {
1524
          if (t.MathJax)
1525
            return t.MathJax.state === MathJax.ElementJax.STATE.PROCESSED
1526
              ? 1
1527
              : -1;
1528
          if (t.type && this.inputJax[t.type.replace(/ *;(.|\s)*/, "")])
1529
            return -1;
1530
        }
1531
        return 0;
1532
      },
1533
      isMathJaxNode: function (t) {
1534
        return !!t && (t.isMathJax || "MathJax_MathML" === (t.className || ""));
1535
      },
1536
      setRenderer: function (t, e) {
1537
        if (t) {
1538
          var i = MathJax.OutputJax[t];
1539
          if (i) {
1540
            (this.config.menuSettings.renderer = t),
1541
              null == e && (e = "jax/mml"),
1542
              i.isUnknown && i.Register(e);
1543
            var n = this.outputJax;
1544
            return n[e] && n[e].length && t !== n[e][0].id
1545
              ? (n[e].unshift(i), this.signal.Post(["Renderer Selected", t]))
1546
              : null;
1547
          }
1548
          (MathJax.OutputJax[t] = MathJax.OutputJax({
1549
            id: "unknown",
1550
            version: "1.0.0",
1551
            isUnknown: !0,
1552
          })),
1553
            (this.config.menuSettings.renderer = "");
1554
          var a = "[MathJax]/jax/output/" + t + "/config.js";
1555
          return MathJax.Ajax.Require(a, ["setRenderer", this, t, e]);
1556
        }
1557
      },
1558
      Queue: function () {
1559
        return this.queue.Push.apply(this.queue, arguments);
1560
      },
1561
      Typeset: function (t, e) {
1562
        if (!MathJax.isReady) return null;
1563
        var i = this.elementCallback(t, e);
1564
        if (i.count)
1565
          var n = MathJax.Callback.Queue(
1566
            ["PreProcess", this, i.elements],
1567
            ["Process", this, i.elements]
1568
          );
1569
        return n.Push(i.callback);
1570
      },
1571
      PreProcess: function (t, e) {
1572
        var i = this.elementCallback(t, e),
1573
          n = MathJax.Callback.Queue();
1574
        if (i.count) {
1575
          var a = 1 === i.count ? [i.elements] : i.elements;
1576
          n.Push(["Post", this.signal, ["Begin PreProcess", i.elements]]);
1577
          for (var s = 0, r = a.length; s < r; s++)
1578
            a[s] && n.Push(["Execute", this.preProcessors, a[s]]);
1579
          n.Push(["Post", this.signal, ["End PreProcess", i.elements]]);
1580
        }
1581
        return n.Push(i.callback);
1582
      },
1583
      Process: function (t, e) {
1584
        return this.takeAction("Process", t, e);
1585
      },
1586
      Update: function (t, e) {
1587
        return this.takeAction("Update", t, e);
1588
      },
1589
      Reprocess: function (t, e) {
1590
        return this.takeAction("Reprocess", t, e);
1591
      },
1592
      Rerender: function (t, e) {
1593
        return this.takeAction("Rerender", t, e);
1594
      },
1595
      takeAction: function (t, e, i) {
1596
        var n = this.elementCallback(e, i),
1597
          a = n.elements,
1598
          s = MathJax.Callback.Queue(["Clear", this.signal]),
1599
          r = {
1600
            scripts: [],
1601
            start: new Date().getTime(),
1602
            i: 0,
1603
            j: 0,
1604
            jax: {},
1605
            jaxIDs: [],
1606
          };
1607
        if (n.count) {
1608
          var o = ["Delay", MathJax.Callback, this.processSectionDelay];
1609
          o[2] || (o = {}),
1610
            s.Push(
1611
              ["clearCounts", MathJax.Message],
1612
              ["Post", this.signal, ["Begin " + t, a]],
1613
              ["Post", this.signal, ["Begin Math", a, t]],
1614
              ["prepareScripts", this, t, a, r],
1615
              ["Post", this.signal, ["Begin Math Input", a, t]],
1616
              ["processInput", this, r],
1617
              ["Post", this.signal, ["End Math Input", a, t]],
1618
              o,
1619
              ["prepareOutput", this, r, "preProcess"],
1620
              o,
1621
              ["Post", this.signal, ["Begin Math Output", a, t]],
1622
              ["processOutput", this, r],
1623
              ["Post", this.signal, ["End Math Output", a, t]],
1624
              o,
1625
              ["prepareOutput", this, r, "postProcess"],
1626
              o,
1627
              ["Post", this.signal, ["End Math", a, t]],
1628
              ["Post", this.signal, ["End " + t, a]],
1629
              ["clearCounts", MathJax.Message]
1630
            );
1631
        }
1632
        return s.Push(n.callback);
1633
      },
1634
      scriptAction: {
1635
        Process: function (t) {},
1636
        Update: function (t) {
1637
          var e = t.MathJax.elementJax;
1638
          e && e.needsUpdate()
1639
            ? (e.Remove(!0), (t.MathJax.state = e.STATE.UPDATE))
1640
            : (t.MathJax.state = e.STATE.PROCESSED);
1641
        },
1642
        Reprocess: function (t) {
1643
          var e = t.MathJax.elementJax;
1644
          e && (e.Remove(!0), (t.MathJax.state = e.STATE.UPDATE));
1645
        },
1646
        Rerender: function (t) {
1647
          var e = t.MathJax.elementJax;
1648
          e && (e.Remove(!0), (t.MathJax.state = e.STATE.OUTPUT));
1649
        },
1650
      },
1651
      prepareScripts: function (t, e, i) {
1652
        if (!arguments.callee.disabled)
1653
          for (
1654
            var n = this.elementScripts(e),
1655
              a = MathJax.ElementJax.STATE,
1656
              s = 0,
1657
              r = n.length;
1658
            s < r;
1659
            s++
1660
          ) {
1661
            var o = n[s];
1662
            o.type &&
1663
              this.inputJax[o.type.replace(/ *;(.|\n)*/, "")] &&
1664
              (o.MathJax &&
1665
                (o.MathJax.elementJax &&
1666
                  o.MathJax.elementJax.hover &&
1667
                  MathJax.Extension.MathEvents.Hover.ClearHover(
1668
                    o.MathJax.elementJax
1669
                  ),
1670
                o.MathJax.state !== a.PENDING && this.scriptAction[t](o)),
1671
              o.MathJax || (o.MathJax = { state: a.PENDING }),
1672
              o.MathJax.error && delete o.MathJax.error,
1673
              o.MathJax.state !== a.PROCESSED && i.scripts.push(o));
1674
          }
1675
      },
1676
      checkScriptSiblings: function (t) {
1677
        if (!t.MathJax.checked) {
1678
          var e = this.config,
1679
            i = t.previousSibling;
1680
          if (i && "#text" === i.nodeName) {
1681
            var n,
1682
              a,
1683
              s = t.nextSibling;
1684
            s && "#text" !== s.nodeName && (s = null),
1685
              e.preJax &&
1686
                ("string" == typeof e.preJax &&
1687
                  (e.preJax = new RegExp(e.preJax + "$")),
1688
                (n = i.nodeValue.match(e.preJax))),
1689
              e.postJax &&
1690
                s &&
1691
                ("string" == typeof e.postJax &&
1692
                  (e.postJax = new RegExp("^" + e.postJax)),
1693
                (a = s.nodeValue.match(e.postJax))),
1694
              !n ||
1695
                (e.postJax && !a) ||
1696
                ((i.nodeValue = i.nodeValue.replace(
1697
                  e.preJax,
1698
                  n.length > 1 ? n[1] : ""
1699
                )),
1700
                (i = null)),
1701
              !a ||
1702
                (e.preJax && !n) ||
1703
                (s.nodeValue = s.nodeValue.replace(
1704
                  e.postJax,
1705
                  a.length > 1 ? a[1] : ""
1706
                )),
1707
              i && !i.nodeValue.match(/\S/) && (i = i.previousSibling);
1708
          }
1709
          e.preRemoveClass &&
1710
            i &&
1711
            i.className === e.preRemoveClass &&
1712
            (t.MathJax.preview = i),
1713
            (t.MathJax.checked = 1);
1714
        }
1715
      },
1716
      processInput: function (t) {
1717
        var e,
1718
          i,
1719
          n,
1720
          a = MathJax.ElementJax.STATE,
1721
          s = t.scripts.length;
1722
        try {
1723
          for (; t.i < s; )
1724
            if ((i = t.scripts[t.i]))
1725
              if (
1726
                ((n = i.previousSibling) &&
1727
                  "MathJax_Error" === n.className &&
1728
                  n.parentNode.removeChild(n),
1729
                i.parentNode && i.MathJax && i.MathJax.state !== a.PROCESSED)
1730
              ) {
1731
                if (i.MathJax.elementJax && i.MathJax.state !== a.UPDATE)
1732
                  i.MathJax.state === a.OUTPUT &&
1733
                    this.saveScript(i.MathJax.elementJax, t, i, a);
1734
                else {
1735
                  this.checkScriptSiblings(i);
1736
                  var r = i.type.replace(/ *;(.|\s)*/, ""),
1737
                    o = this.inputJax[r];
1738
                  if ("function" == typeof (e = o.Process(i, t))) {
1739
                    if (e.called) continue;
1740
                    this.RestartAfter(e);
1741
                  }
1742
                  (e = e.Attach(i, o.id)),
1743
                    this.saveScript(e, t, i, a),
1744
                    this.postInputHooks.Execute(e, o.id, i);
1745
                }
1746
                t.i++;
1747
                var h = new Date().getTime();
1748
                h - t.start > this.processUpdateTime &&
1749
                  t.i < t.scripts.length &&
1750
                  ((t.start = h), this.RestartAfter(MathJax.Callback.Delay(1)));
1751
              } else t.i++;
1752
            else t.i++;
1753
        } catch (e) {
1754
          return this.processError(e, t, "Input");
1755
        }
1756
        return (
1757
          t.scripts.length &&
1758
            this.config.showProcessingMessages &&
1759
            MathJax.Message.Set(
1760
              ["ProcessMath", "Processing math: %1%%", 100],
1761
              0
1762
            ),
1763
          (t.start = new Date().getTime()),
1764
          (t.i = t.j = 0),
1765
          null
1766
        );
1767
      },
1768
      postInputHooks: MathJax.Callback.Hooks(!0),
1769
      saveScript: function (t, e, i, n) {
1770
        if (!this.outputJax[t.mimeType])
1771
          throw (
1772
            ((i.MathJax.state = n.UPDATE),
1773
            Error("No output jax registered for " + t.mimeType))
1774
          );
1775
        (t.outputJax = this.outputJax[t.mimeType][0].id),
1776
          e.jax[t.outputJax] ||
1777
            (0 === e.jaxIDs.length
1778
              ? (e.jax[t.outputJax] = e.scripts)
1779
              : (1 === e.jaxIDs.length &&
1780
                  (e.jax[e.jaxIDs[0]] = e.scripts.slice(0, e.i)),
1781
                (e.jax[t.outputJax] = [])),
1782
            e.jaxIDs.push(t.outputJax)),
1783
          e.jaxIDs.length > 1 && e.jax[t.outputJax].push(i),
1784
          (i.MathJax.state = n.OUTPUT);
1785
      },
1786
      prepareOutput: function (t, e) {
1787
        for (; t.j < t.jaxIDs.length; ) {
1788
          var i = t.jaxIDs[t.j],
1789
            n = MathJax.OutputJax[i];
1790
          if (n[e])
1791
            try {
1792
              var a = n[e](t);
1793
              if ("function" == typeof a) {
1794
                if (a.called) continue;
1795
                this.RestartAfter(a);
1796
              }
1797
            } catch (n) {
1798
              return (
1799
                n.restart ||
1800
                  (MathJax.Message.Set(
1801
                    ["PrepError", "Error preparing %1 output (%2)", i, e],
1802
                    null,
1803
                    600
1804
                  ),
1805
                  (MathJax.Hub.lastPrepError = n),
1806
                  t.j++),
1807
                MathJax.Callback.After(["prepareOutput", this, t, e], n.restart)
1808
              );
1809
            }
1810
          t.j++;
1811
        }
1812
        return null;
1813
      },
1814
      processOutput: function (t) {
1815
        var e,
1816
          i = MathJax.ElementJax.STATE,
1817
          n = t.scripts.length;
1818
        try {
1819
          for (; t.i < n; )
1820
            if (
1821
              (e = t.scripts[t.i]) &&
1822
              e.parentNode &&
1823
              e.MathJax &&
1824
              !e.MathJax.error
1825
            ) {
1826
              var a = e.MathJax.elementJax;
1827
              if (a) {
1828
                !1 !== MathJax.OutputJax[a.outputJax].Process(e, t) &&
1829
                  ((e.MathJax.state = i.PROCESSED),
1830
                  e.MathJax.preview &&
1831
                    ((e.MathJax.preview.innerHTML = ""),
1832
                    (e.MathJax.preview.style.display = "none")),
1833
                  this.signal.Post(["New Math", a.inputID])),
1834
                  t.i++;
1835
                var s = new Date().getTime();
1836
                s - t.start > this.processUpdateTime &&
1837
                  t.i < t.scripts.length &&
1838
                  ((t.start = s),
1839
                  this.RestartAfter(
1840
                    MathJax.Callback.Delay(this.processUpdateDelay)
1841
                  ));
1842
              } else t.i++;
1843
            } else t.i++;
1844
        } catch (e) {
1845
          return this.processError(e, t, "Output");
1846
        }
1847
        return (
1848
          t.scripts.length &&
1849
            this.config.showProcessingMessages &&
1850
            (MathJax.Message.Set(
1851
              ["TypesetMath", "Typesetting math: %1%%", 100],
1852
              0
1853
            ),
1854
            MathJax.Message.Clear(0)),
1855
          (t.i = t.j = 0),
1856
          null
1857
        );
1858
      },
1859
      processMessage: function (t, e) {
1860
        var i = Math.floor((t.i / t.scripts.length) * 100),
1861
          n =
1862
            "Output" === e
1863
              ? ["TypesetMath", "Typesetting math: %1%%"]
1864
              : ["ProcessMath", "Processing math: %1%%"];
1865
        this.config.showProcessingMessages &&
1866
          MathJax.Message.Set(n.concat(i), 0);
1867
      },
1868
      processError: function (t, e, i) {
1869
        if (!t.restart) {
1870
          if (!this.config.errorSettings.message) throw t;
1871
          this.formatError(e.scripts[e.i], t), e.i++;
1872
        }
1873
        return (
1874
          this.processMessage(e, i),
1875
          MathJax.Callback.After(["process" + i, this, e], t.restart)
1876
        );
1877
      },
1878
      formatError: function (t, e) {
1879
        var i = function (t, e, i, n) {
1880
            return MathJax.Localization._(t, e, i, n);
1881
          },
1882
          n = i("ErrorMessage", "Error: %1", e.message) + "\n";
1883
        (e.sourceURL || e.fileName) &&
1884
          (n += "\n" + i("ErrorFile", "file: %1", e.sourceURL || e.fileName)),
1885
          (e.line || e.lineNumber) &&
1886
            (n += "\n" + i("ErrorLine", "line: %1", e.line || e.lineNumber)),
1887
          (n +=
1888
            "\n\n" +
1889
            i(
1890
              "ErrorTips",
1891
              "Debugging tips: use %1, inspect %2 in the browser console",
1892
              "'unpacked/MathJax.js'",
1893
              "'MathJax.Hub.lastError'"
1894
            )),
1895
          (t.MathJax.error = MathJax.OutputJax.Error.Jax(n, t)),
1896
          t.MathJax.elementJax &&
1897
            (t.MathJax.error.inputID = t.MathJax.elementJax.inputID);
1898
        var a = this.config.errorSettings,
1899
          s = i(a.messageId, a.message),
1900
          r = MathJax.HTML.Element(
1901
            "span",
1902
            {
1903
              className: "MathJax_Error",
1904
              jaxID: "Error",
1905
              isMathJax: !0,
1906
              id: t.MathJax.error.inputID + "-Frame",
1907
            },
1908
            [["span", null, s]]
1909
          );
1910
        MathJax.Ajax.Require("[MathJax]/extensions/MathEvents.js", function () {
1911
          var e = MathJax.Extension.MathEvents.Event,
1912
            i = MathJax.Hub;
1913
          (r.oncontextmenu = e.Menu),
1914
            (r.onmousedown = e.Mousedown),
1915
            (r.onkeydown = e.Keydown),
1916
            (r.tabIndex = i.getTabOrder(i.getJaxFor(t)));
1917
        });
1918
        var o = document.getElementById(r.id);
1919
        o && o.parentNode.removeChild(o),
1920
          t.parentNode && t.parentNode.insertBefore(r, t),
1921
          t.MathJax.preview &&
1922
            ((t.MathJax.preview.innerHTML = ""),
1923
            (t.MathJax.preview.style.display = "none")),
1924
          (this.lastError = e),
1925
          this.signal.Post(["Math Processing Error", t, e]);
1926
      },
1927
      RestartAfter: function (t) {
1928
        throw this.Insert(Error("restart"), { restart: MathJax.Callback(t) });
1929
      },
1930
      elementCallback: function (t, e) {
1931
        if (null == e && (MathJax.Object.isArray(t) || "function" == typeof t))
1932
          try {
1933
            MathJax.Callback(t), (e = t), (t = null);
1934
          } catch (t) {}
1935
        null == t && (t = this.config.elements || []),
1936
          this.isHTMLCollection(t) && (t = this.HTMLCollection2Array(t)),
1937
          MathJax.Object.isArray(t) || (t = [t]);
1938
        for (var i = 0, n = (t = [].concat(t)).length; i < n; i++)
1939
          "string" == typeof t[i] && (t[i] = document.getElementById(t[i]));
1940
        return (
1941
          document.body ||
1942
            (document.body = document.getElementsByTagName("body")[0]),
1943
          0 == t.length && t.push(document.body),
1944
          e || (e = {}),
1945
          { count: t.length, elements: 1 === t.length ? t[0] : t, callback: e }
1946
        );
1947
      },
1948
      elementScripts: function (t) {
1949
        var e = [];
1950
        if (MathJax.Object.isArray(t) || this.isHTMLCollection(t)) {
1951
          for (var i = 0, n = t.length; i < n; i++) {
1952
            for (var a = 0, s = 0; s < i && !a; s++) a = t[s].contains(t[i]);
1953
            a || e.push.apply(e, this.elementScripts(t[i]));
1954
          }
1955
          return e;
1956
        }
1957
        return (
1958
          "string" == typeof t && (t = document.getElementById(t)),
1959
          document.body ||
1960
            (document.body = document.getElementsByTagName("body")[0]),
1961
          null == t && (t = document.body),
1962
          null != t.tagName && "script" === t.tagName.toLowerCase()
1963
            ? [t]
1964
            : ((e = t.getElementsByTagName("script")),
1965
              this.msieHTMLCollectionBug && (e = this.HTMLCollection2Array(e)),
1966
              e)
1967
        );
1968
      },
1969
      isHTMLCollection: function (t) {
1970
        return (
1971
          "HTMLCollection" in window &&
1972
          "object" == typeof t &&
1973
          t instanceof HTMLCollection
1974
        );
1975
      },
1976
      HTMLCollection2Array: function (t) {
1977
        if (!this.msieHTMLCollectionBug) return [].slice.call(t);
1978
        for (var e = [], i = 0, n = t.length; i < n; i++) e[i] = t[i];
1979
        return e;
1980
      },
1981
      Insert: function (t, e) {
1982
        for (var i in e)
1983
          e.hasOwnProperty(i) &&
1984
            ("object" != typeof e[i] ||
1985
            MathJax.Object.isArray(e[i]) ||
1986
            ("object" != typeof t[i] && "function" != typeof t[i])
1987
              ? (t[i] = e[i])
1988
              : this.Insert(t[i], e[i]));
1989
        return t;
1990
      },
1991
      getTabOrder: function (t) {
1992
        return this.config.menuSettings.inTabOrder ? 0 : -1;
1993
      },
1994
      SplitList:
1995
        "trim" in String.prototype
1996
          ? function (t) {
1997
              return t.trim().split(/\s+/);
1998
            }
1999
          : function (t) {
2000
              return t.replace(/^\s+/, "").replace(/\s+$/, "").split(/\s+/);
2001
            },
2002
    }),
2003
    MathJax.Hub.Insert(MathJax.Hub.config.styles, MathJax.Message.styles),
2004
    MathJax.Hub.Insert(MathJax.Hub.config.styles, {
2005
      ".MathJax_Error": MathJax.Hub.config.errorSettings.style,
2006
    }),
2007
    (MathJax.Extension = {}),
2008
    (MathJax.Hub.Configured = MathJax.Callback({})),
2009
    (MathJax.Hub.Startup = {
2010
      script: "",
2011
      queue: MathJax.Callback.Queue(),
2012
      signal: MathJax.Callback.Signal("Startup"),
2013
      params: {},
2014
      Config: function () {
2015
        if (
2016
          (this.queue.Push(["Post", this.signal, "Begin Config"]),
2017
          MathJax.AuthorConfig &&
2018
            MathJax.AuthorConfig.root &&
2019
            (MathJax.Ajax.config.root = MathJax.AuthorConfig.root),
2020
          this.params.locale &&
2021
            (MathJax.Localization.resetLocale(this.params.locale),
2022
            (MathJax.Hub.config.menuSettings.locale = this.params.locale)),
2023
          this.params.config)
2024
        )
2025
          for (
2026
            var t = this.params.config.split(/,/), e = 0, i = t.length;
2027
            e < i;
2028
            e++
2029
          )
2030
            t[e].match(/\.js$/) || (t[e] += ".js"),
2031
              this.queue.Push([
2032
                "Require",
2033
                MathJax.Ajax,
2034
                this.URL("config", t[e]),
2035
              ]);
2036
        this.queue.Push(["Config", MathJax.Hub, MathJax.AuthorConfig]),
2037
          this.script.match(/\S/) && this.queue.Push(this.script + ";\n1;"),
2038
          this.queue.Push(
2039
            ["ConfigDelay", this],
2040
            ["ConfigBlocks", this],
2041
            [
2042
              function (t) {
2043
                return t.loadArray(
2044
                  MathJax.Hub.config.config,
2045
                  "config",
2046
                  null,
2047
                  !0
2048
                );
2049
              },
2050
              this,
2051
            ],
2052
            ["Post", this.signal, "End Config"]
2053
          );
2054
      },
2055
      ConfigDelay: function () {
2056
        var t =
2057
          this.params.delayStartupUntil || MathJax.Hub.config.delayStartupUntil;
2058
        return "onload" === t
2059
          ? this.onload
2060
          : "configured" === t
2061
          ? MathJax.Hub.Configured
2062
          : t;
2063
      },
2064
      ConfigBlocks: function () {
2065
        for (
2066
          var t = document.getElementsByTagName("script"),
2067
            e = MathJax.Callback.Queue(),
2068
            i = 0,
2069
            n = t.length;
2070
          i < n;
2071
          i++
2072
        ) {
2073
          var a = String(t[i].type).replace(/ /g, "");
2074
          a.match(/^text\/x-mathjax-config(;.*)?$/) &&
2075
            !a.match(/;executed=true/) &&
2076
            ((t[i].type += ";executed=true"), e.Push(t[i].innerHTML + ";\n1;"));
2077
        }
2078
        return e.Push(function () {
2079
          MathJax.Ajax.config.root = MathJax.Hub.config.root;
2080
        });
2081
      },
2082
      Cookie: function () {
2083
        return this.queue.Push(
2084
          ["Post", this.signal, "Begin Cookie"],
2085
          ["Get", MathJax.HTML.Cookie, "menu", MathJax.Hub.config.menuSettings],
2086
          [
2087
            function (t) {
2088
              var e = t.menuSettings;
2089
              e.locale && MathJax.Localization.resetLocale(e.locale);
2090
              var i = t.menuSettings.renderer,
2091
                n = t.jax;
2092
              if (i) {
2093
                var a = "output/" + i;
2094
                n.sort();
2095
                for (
2096
                  var s = 0, r = n.length;
2097
                  s < r && "output/" !== n[s].substr(0, 7);
2098
                  s++
2099
                );
2100
                if (s == r - 1) n.pop();
2101
                else
2102
                  for (; s < r; ) {
2103
                    if (n[s] === a) {
2104
                      n.splice(s, 1);
2105
                      break;
2106
                    }
2107
                    s++;
2108
                  }
2109
                n.unshift(a);
2110
              }
2111
              null != e.CHTMLpreview &&
2112
                (null == e.FastPreview && (e.FastPreview = e.CHTMLpreview),
2113
                delete e.CHTMLpreview),
2114
                e.FastPreview &&
2115
                  !MathJax.Extension["fast-preview"] &&
2116
                  MathJax.Hub.config.extensions.push("fast-preview.js"),
2117
                t.menuSettings.assistiveMML &&
2118
                  !MathJax.Extension.AssistiveMML &&
2119
                  MathJax.Hub.config.extensions.push("AssistiveMML.js");
2120
            },
2121
            MathJax.Hub.config,
2122
          ],
2123
          ["Post", this.signal, "End Cookie"]
2124
        );
2125
      },
2126
      Styles: function () {
2127
        return this.queue.Push(
2128
          ["Post", this.signal, "Begin Styles"],
2129
          ["loadArray", this, MathJax.Hub.config.styleSheets, "config"],
2130
          ["Styles", MathJax.Ajax, MathJax.Hub.config.styles],
2131
          ["Post", this.signal, "End Styles"]
2132
        );
2133
      },
2134
      Jax: function () {
2135
        for (
2136
          var t = MathJax.Hub.config,
2137
            e = MathJax.Hub.outputJax,
2138
            i = 0,
2139
            n = t.jax.length,
2140
            a = 0;
2141
          i < n;
2142
          i++
2143
        ) {
2144
          var s = t.jax[i].substr(7);
2145
          "output/" === t.jax[i].substr(0, 7) &&
2146
            null == e.order[s] &&
2147
            ((e.order[s] = a), a++);
2148
        }
2149
        return MathJax.Callback.Queue().Push(
2150
          ["Post", this.signal, "Begin Jax"],
2151
          ["loadArray", this, t.jax, "jax", "config.js"],
2152
          ["Post", this.signal, "End Jax"]
2153
        );
2154
      },
2155
      Extensions: function () {
2156
        return MathJax.Callback.Queue().Push(
2157
          ["Post", this.signal, "Begin Extensions"],
2158
          ["loadArray", this, MathJax.Hub.config.extensions, "extensions"],
2159
          ["Post", this.signal, "End Extensions"]
2160
        );
2161
      },
2162
      Message: function () {
2163
        MathJax.Message.Init(!0);
2164
      },
2165
      Menu: function () {
2166
        var t,
2167
          e = MathJax.Hub.config.menuSettings,
2168
          i = MathJax.Hub.outputJax;
2169
        for (var n in i)
2170
          if (i.hasOwnProperty(n) && i[n].length) {
2171
            t = i[n];
2172
            break;
2173
          }
2174
        t &&
2175
          t.length &&
2176
          (e.renderer &&
2177
            e.renderer !== t[0].id &&
2178
            t.unshift(MathJax.OutputJax[e.renderer]),
2179
          (e.renderer = t[0].id));
2180
      },
2181
      Hash: function () {
2182
        if (
2183
          MathJax.Hub.config.positionToHash &&
2184
          document.location.hash &&
2185
          document.body &&
2186
          document.body.scrollIntoView
2187
        ) {
2188
          var t = decodeURIComponent(document.location.hash.substr(1)),
2189
            e = document.getElementById(t);
2190
          if (!e)
2191
            for (
2192
              var i = document.getElementsByTagName("a"), n = 0, a = i.length;
2193
              n < a;
2194
              n++
2195
            )
2196
              if (i[n].name === t) {
2197
                e = i[n];
2198
                break;
2199
              }
2200
          if (e) {
2201
            for (; !e.scrollIntoView; ) e = e.parentNode;
2202
            (e = this.HashCheck(e)) &&
2203
              e.scrollIntoView &&
2204
              setTimeout(function () {
2205
                e.scrollIntoView(!0);
2206
              }, 1);
2207
          }
2208
        }
2209
      },
2210
      HashCheck: function (t) {
2211
        var e = MathJax.Hub.getJaxFor(t);
2212
        return (
2213
          e &&
2214
            MathJax.OutputJax[e.outputJax].hashCheck &&
2215
            (t = MathJax.OutputJax[e.outputJax].hashCheck(t)),
2216
          t
2217
        );
2218
      },
2219
      MenuZoom: function () {
2220
        MathJax.Hub.config.showMathMenu &&
2221
          (MathJax.Extension.MathMenu
2222
            ? setTimeout(
2223
                MathJax.Callback([
2224
                  "loadDomain",
2225
                  MathJax.Localization,
2226
                  "MathMenu",
2227
                ]),
2228
                1e3
2229
              )
2230
            : setTimeout(function () {
2231
                MathJax.Callback.Queue(
2232
                  [
2233
                    "Require",
2234
                    MathJax.Ajax,
2235
                    "[MathJax]/extensions/MathMenu.js",
2236
                    {},
2237
                  ],
2238
                  ["loadDomain", MathJax.Localization, "MathMenu"]
2239
                );
2240
              }, 1e3),
2241
          MathJax.Extension.MathZoom ||
2242
            setTimeout(
2243
              MathJax.Callback([
2244
                "Require",
2245
                MathJax.Ajax,
2246
                "[MathJax]/extensions/MathZoom.js",
2247
                {},
2248
              ]),
2249
              2e3
2250
            ));
2251
      },
2252
      onLoad: function () {
2253
        var t = (this.onload = MathJax.Callback(function () {
2254
          MathJax.Hub.Startup.signal.Post("onLoad");
2255
        }));
2256
        if (document.body && document.readyState)
2257
          if (MathJax.Hub.Browser.isMSIE) {
2258
            if ("complete" === document.readyState) return [t];
2259
          } else if ("loading" !== document.readyState) return [t];
2260
        return (
2261
          window.addEventListener
2262
            ? (window.addEventListener("load", t, !1),
2263
              this.params.noDOMContentEvent ||
2264
                window.addEventListener("DOMContentLoaded", t, !1))
2265
            : window.attachEvent
2266
            ? window.attachEvent("onload", t)
2267
            : (window.onload = t),
2268
          t
2269
        );
2270
      },
2271
      Typeset: function (t, e) {
2272
        return MathJax.Hub.config.skipStartupTypeset
2273
          ? function () {}
2274
          : this.queue.Push(
2275
              ["Post", this.signal, "Begin Typeset"],
2276
              ["Typeset", MathJax.Hub, t, e],
2277
              ["Post", this.signal, "End Typeset"]
2278
            );
2279
      },
2280
      URL: function (t, e) {
2281
        return (
2282
          e.match(/^([a-z]+:\/\/|\[|\/)/) || (e = "[MathJax]/" + t + "/" + e), e
2283
        );
2284
      },
2285
      loadArray: function (t, e, i, n) {
2286
        if (t && (MathJax.Object.isArray(t) || (t = [t]), t.length)) {
2287
          for (
2288
            var a, s = MathJax.Callback.Queue(), r = {}, o = 0, h = t.length;
2289
            o < h;
2290
            o++
2291
          )
2292
            (a = this.URL(e, t[o])),
2293
              i && (a += "/" + i),
2294
              n
2295
                ? s.Push(["Require", MathJax.Ajax, a, r])
2296
                : s.Push(MathJax.Ajax.Require(a, r));
2297
          return s.Push({});
2298
        }
2299
        return null;
2300
      },
2301
    }),
2302
    (function (t) {
2303
      var e = window.MathJax,
2304
        i = "[MathJax]",
2305
        n = e.Hub,
2306
        a = e.Ajax,
2307
        s = e.Callback,
2308
        r = MathJax.Object.Subclass(
2309
          {
2310
            JAXFILE: "jax.js",
2311
            require: null,
2312
            config: {},
2313
            Init: function (t, e) {
2314
              return 0 === arguments.length
2315
                ? this
2316
                : this.constructor.Subclass(t, e)();
2317
            },
2318
            Augment: function (t, e) {
2319
              var i = this.constructor,
2320
                a = {};
2321
              if (null != t) {
2322
                for (var s in t)
2323
                  t.hasOwnProperty(s) &&
2324
                    ("function" == typeof t[s]
2325
                      ? i.protoFunction(s, t[s])
2326
                      : (a[s] = t[s]));
2327
                t.toString !== i.prototype.toString &&
2328
                  t.toString !== {}.toString &&
2329
                  i.protoFunction("toString", t.toString);
2330
              }
2331
              return n.Insert(i.prototype, a), i.Augment(null, e), this;
2332
            },
2333
            Translate: function (t, e) {
2334
              throw Error(
2335
                this.directory +
2336
                  "/" +
2337
                  this.JAXFILE +
2338
                  " failed to define the Translate() method"
2339
              );
2340
            },
2341
            Register: function (t) {},
2342
            Config: function () {
2343
              (this.config = n.CombineConfig(this.id, this.config)),
2344
                this.config.Augment && this.Augment(this.config.Augment);
2345
            },
2346
            Startup: function () {},
2347
            loadComplete: function (t) {
2348
              if ("config.js" === t)
2349
                return a.loadComplete(this.directory + "/" + t);
2350
              var e = s.Queue();
2351
              return (
2352
                e.Push(
2353
                  n.Register.StartupHook("End Config", {}),
2354
                  ["Post", n.Startup.signal, this.id + " Jax Config"],
2355
                  ["Config", this],
2356
                  ["Post", n.Startup.signal, this.id + " Jax Require"],
2357
                  [
2358
                    function (t) {
2359
                      return MathJax.Hub.Startup.loadArray(
2360
                        t.require,
2361
                        this.directory
2362
                      );
2363
                    },
2364
                    this,
2365
                  ],
2366
                  [
2367
                    function (t, e) {
2368
                      return MathJax.Hub.Startup.loadArray(
2369
                        t.extensions,
2370
                        "extensions/" + e
2371
                      );
2372
                    },
2373
                    this.config || {},
2374
                    this.id,
2375
                  ],
2376
                  ["Post", n.Startup.signal, this.id + " Jax Startup"],
2377
                  ["Startup", this],
2378
                  ["Post", n.Startup.signal, this.id + " Jax Ready"]
2379
                ),
2380
                this.copyTranslate &&
2381
                  e.Push([
2382
                    function (t) {
2383
                      (t.preProcess = t.preTranslate),
2384
                        (t.Process = t.Translate),
2385
                        (t.postProcess = t.postTranslate);
2386
                    },
2387
                    this.constructor.prototype,
2388
                  ]),
2389
                e.Push(["loadComplete", a, this.directory + "/" + t])
2390
              );
2391
            },
2392
          },
2393
          {
2394
            id: "Jax",
2395
            version: "2.7.9",
2396
            directory: i + "/jax",
2397
            extensionDir: i + "/extensions",
2398
          }
2399
        );
2400
      (e.InputJax = r.Subclass(
2401
        {
2402
          elementJax: "mml",
2403
          sourceMenuTitle: ["Original", "Original Form"],
2404
          copyTranslate: !0,
2405
          Process: function (t, i) {
2406
            var r,
2407
              o = s.Queue(),
2408
              h = this.elementJax;
2409
            e.Object.isArray(h) || (h = [h]);
2410
            for (var l = 0, u = h.length; l < u; l++)
2411
              (r = e.ElementJax.directory + "/" + h[l] + "/" + this.JAXFILE),
2412
                this.require
2413
                  ? e.Object.isArray(this.require) ||
2414
                    (this.require = [this.require])
2415
                  : (this.require = []),
2416
                this.require.push(r),
2417
                o.Push(a.Require(r));
2418
            r = this.directory + "/" + this.JAXFILE;
2419
            var c = o.Push(a.Require(r));
2420
            return (
2421
              c.called ||
2422
                (this.constructor.prototype.Process = function () {
2423
                  if (!c.called) return c;
2424
                  throw Error(r + " failed to load properly");
2425
                }),
2426
              (h = n.outputJax["jax/" + h[0]]) &&
2427
                o.Push(a.Require(h[0].directory + "/" + this.JAXFILE)),
2428
              o.Push({})
2429
            );
2430
          },
2431
          needsUpdate: function (t) {
2432
            var i = t.SourceElement();
2433
            return t.originalText !== e.HTML.getScript(i);
2434
          },
2435
          Register: function (t) {
2436
            n.inputJax || (n.inputJax = {}), (n.inputJax[t] = this);
2437
          },
2438
        },
2439
        {
2440
          id: "InputJax",
2441
          version: "2.7.9",
2442
          directory: r.directory + "/input",
2443
          extensionDir: r.extensionDir,
2444
        }
2445
      )),
2446
        (e.OutputJax = r.Subclass(
2447
          {
2448
            copyTranslate: !0,
2449
            preProcess: function (t) {
2450
              var e,
2451
                i = this.directory + "/" + this.JAXFILE;
2452
              return (
2453
                (this.constructor.prototype.preProcess = function (t) {
2454
                  if (!e.called) return e;
2455
                  throw Error(i + " failed to load properly");
2456
                }),
2457
                (e = a.Require(i))
2458
              );
2459
            },
2460
            Process: function (t) {
2461
              throw Error(this.id + " output jax failed to load properly");
2462
            },
2463
            Register: function (t) {
2464
              var i = n.outputJax;
2465
              i[t] || (i[t] = []),
2466
                i[t].length &&
2467
                (this.id === n.config.menuSettings.renderer ||
2468
                  (i.order[this.id] || 0) < (i.order[i[t][0].id] || 0))
2469
                  ? i[t].unshift(this)
2470
                  : i[t].push(this),
2471
                this.require
2472
                  ? e.Object.isArray(this.require) ||
2473
                    (this.require = [this.require])
2474
                  : (this.require = []),
2475
                this.require.push(
2476
                  e.ElementJax.directory +
2477
                    "/" +
2478
                    t.split(/\//)[1] +
2479
                    "/" +
2480
                    this.JAXFILE
2481
                );
2482
            },
2483
            Remove: function (t) {},
2484
          },
2485
          {
2486
            id: "OutputJax",
2487
            version: "2.7.9",
2488
            directory: r.directory + "/output",
2489
            extensionDir: r.extensionDir,
2490
            fontDir: i + (e.isPacked ? "" : "/..") + "/fonts",
2491
            imageDir: i + (e.isPacked ? "" : "/..") + "/images",
2492
          }
2493
        )),
2494
        (e.ElementJax = r.Subclass(
2495
          {
2496
            Init: function (t, e) {
2497
              return this.constructor.Subclass(t, e);
2498
            },
2499
            inputJax: null,
2500
            outputJax: null,
2501
            inputID: null,
2502
            originalText: "",
2503
            mimeType: "",
2504
            sourceMenuTitle: ["MathMLcode", "MathML Code"],
2505
            Text: function (t, i) {
2506
              var a = this.SourceElement();
2507
              return (
2508
                e.HTML.setScript(a, t),
2509
                (a.MathJax.state = this.STATE.UPDATE),
2510
                n.Update(a, i)
2511
              );
2512
            },
2513
            Reprocess: function (t) {
2514
              var e = this.SourceElement();
2515
              return (e.MathJax.state = this.STATE.UPDATE), n.Reprocess(e, t);
2516
            },
2517
            Update: function (t) {
2518
              return this.Rerender(t);
2519
            },
2520
            Rerender: function (t) {
2521
              var e = this.SourceElement();
2522
              return (e.MathJax.state = this.STATE.OUTPUT), n.Process(e, t);
2523
            },
2524
            Remove: function (t) {
2525
              this.hover && this.hover.clear(this),
2526
                e.OutputJax[this.outputJax].Remove(this),
2527
                t ||
2528
                  (n.signal.Post(["Remove Math", this.inputID]), this.Detach());
2529
            },
2530
            needsUpdate: function () {
2531
              return e.InputJax[this.inputJax].needsUpdate(this);
2532
            },
2533
            SourceElement: function () {
2534
              return document.getElementById(this.inputID);
2535
            },
2536
            Attach: function (t, i) {
2537
              var n = t.MathJax.elementJax;
2538
              return (
2539
                t.MathJax.state === this.STATE.UPDATE
2540
                  ? n.Clone(this)
2541
                  : ((n = t.MathJax.elementJax = this),
2542
                    t.id
2543
                      ? (this.inputID = t.id)
2544
                      : ((t.id = this.inputID = e.ElementJax.GetID()),
2545
                        (this.newID = 1))),
2546
                (n.originalText = e.HTML.getScript(t)),
2547
                (n.inputJax = i),
2548
                n.root && (n.root.inputID = n.inputID),
2549
                n
2550
              );
2551
            },
2552
            Detach: function () {
2553
              var t = this.SourceElement();
2554
              if (t) {
2555
                try {
2556
                  delete t.MathJax;
2557
                } catch (e) {
2558
                  t.MathJax = null;
2559
                }
2560
                this.newID && (t.id = "");
2561
              }
2562
            },
2563
            Clone: function (t) {
2564
              var e;
2565
              for (e in this)
2566
                this.hasOwnProperty(e) &&
2567
                  void 0 === t[e] &&
2568
                  "newID" !== e &&
2569
                  delete this[e];
2570
              for (e in t)
2571
                t.hasOwnProperty(e) &&
2572
                  (void 0 === this[e] ||
2573
                    (this[e] !== t[e] && "inputID" !== e)) &&
2574
                  (this[e] = t[e]);
2575
            },
2576
          },
2577
          {
2578
            id: "ElementJax",
2579
            version: "2.7.9",
2580
            directory: r.directory + "/element",
2581
            extensionDir: r.extensionDir,
2582
            ID: 0,
2583
            STATE: { PENDING: 1, PROCESSED: 2, UPDATE: 3, OUTPUT: 4 },
2584
            GetID: function () {
2585
              return this.ID++, "MathJax-Element-" + this.ID;
2586
            },
2587
            Subclass: function () {
2588
              var t = r.Subclass.apply(this, arguments);
2589
              return (t.loadComplete = this.prototype.loadComplete), t;
2590
            },
2591
          }
2592
        )),
2593
        (e.ElementJax.prototype.STATE = e.ElementJax.STATE),
2594
        (e.OutputJax.Error = {
2595
          id: "Error",
2596
          version: "2.7.9",
2597
          config: {},
2598
          errors: 0,
2599
          ContextMenu: function () {
2600
            return e.Extension.MathEvents.Event.ContextMenu.apply(
2601
              e.Extension.MathEvents.Event,
2602
              arguments
2603
            );
2604
          },
2605
          Mousedown: function () {
2606
            return e.Extension.MathEvents.Event.AltContextMenu.apply(
2607
              e.Extension.MathEvents.Event,
2608
              arguments
2609
            );
2610
          },
2611
          getJaxFromMath: function (t) {
2612
            return (t.nextSibling.MathJax || {}).error;
2613
          },
2614
          Jax: function (t, e) {
2615
            var i = MathJax.Hub.inputJax[e.type.replace(/ *;(.|\s)*/, "")];
2616
            return (
2617
              this.errors++,
2618
              {
2619
                inputJax: (i || { id: "Error" }).id,
2620
                outputJax: "Error",
2621
                inputID: "MathJax-Error-" + this.errors,
2622
                sourceMenuTitle: ["ErrorMessage", "Error Message"],
2623
                sourceMenuFormat: "Error",
2624
                originalText: MathJax.HTML.getScript(e),
2625
                errorText: t,
2626
              }
2627
            );
2628
          },
2629
        }),
2630
        (e.InputJax.Error = {
2631
          id: "Error",
2632
          version: "2.7.9",
2633
          config: {},
2634
          sourceMenuTitle: ["Original", "Original Form"],
2635
        });
2636
    })(),
2637
    (function (t) {
2638
      var e = window.MathJax;
2639
      e || (e = window.MathJax = {});
2640
      var i = e.Hub,
2641
        n = i.Startup,
2642
        a = i.config,
2643
        s = document.head || document.getElementsByTagName("head")[0];
2644
      s || (s = document.childNodes[0]);
2645
      var r = (document.documentElement || document).getElementsByTagName(
2646
        "script"
2647
      );
2648
      0 === r.length &&
2649
        s.namespaceURI &&
2650
        (r = document.getElementsByTagNameNS(s.namespaceURI, "script"));
2651
      for (
2652
        var o = new RegExp("(^|/)MathJax\\.js(\\?.*)?$"), h = r.length - 1;
2653
        h >= 0;
2654
        h--
2655
      )
2656
        if ((r[h].src || "").match(o)) {
2657
          if (((n.script = r[h].innerHTML), RegExp.$2))
2658
            for (
2659
              var l = RegExp.$2.substr(1).split(/\&/), u = 0, c = l.length;
2660
              u < c;
2661
              u++
2662
            ) {
2663
              var p = l[u].match(/(.*)=(.*)/);
2664
              p
2665
                ? (n.params[unescape(p[1])] = unescape(p[2]))
2666
                : (n.params[l[u]] = !0);
2667
            }
2668
          (a.root = r[h].src.replace(/(^|\/)[^\/]*(\?.*)?$/, "")),
2669
            (e.Ajax.config.root = a.root),
2670
            (e.Ajax.params = n.params);
2671
          break;
2672
        }
2673
      var d = navigator.userAgent,
2674
        f = {
2675
          isMac: "Mac" === navigator.platform.substr(0, 3),
2676
          isPC: "Win" === navigator.platform.substr(0, 3),
2677
          isMSIE: "ActiveXObject" in window && "clipboardData" in window,
2678
          isEdge:
2679
            "MSGestureEvent" in window &&
2680
            "chrome" in window &&
2681
            null == window.chrome.loadTimes,
2682
          isFirefox: !!d.match(/Gecko\//) && !d.match(/like Gecko/),
2683
          isSafari: !(
2684
            !d.match(/ (Apple)?WebKit\//) ||
2685
            d.match(/ like iPhone /) ||
2686
            (window.chrome && null != window.chrome.app)
2687
          ),
2688
          isChrome: "chrome" in window && null != window.chrome.loadTimes,
2689
          isOpera: "opera" in window && null != window.opera.version,
2690
          isKonqueror: "konqueror" in window && "KDE" == navigator.vendor,
2691
          versionAtLeast: function (t) {
2692
            for (
2693
              var e = this.version.split("."),
2694
                i = 0,
2695
                n = (t = new String(t).split(".")).length;
2696
              i < n;
2697
              i++
2698
            )
2699
              if (e[i] != t[i]) return parseInt(e[i] || "0") >= parseInt(t[i]);
2700
            return !0;
2701
          },
2702
          Select: function (t) {
2703
            var e = t[i.Browser];
2704
            return e ? e(i.Browser) : null;
2705
          },
2706
        },
2707
        g = d
2708
          .replace(/^Mozilla\/(\d+\.)+\d+ /, "")
2709
          .replace(
2710
            /[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,
2711
            ""
2712
          )
2713
          .replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/, "");
2714
      for (var x in ((i.Browser = i.Insert(
2715
        i.Insert(new String("Unknown"), { version: "0.0" }),
2716
        f
2717
      )),
2718
      f))
2719
        if (f.hasOwnProperty(x) && f[x] && "is" === x.substr(0, 2)) {
2720
          if ("Mac" === (x = x.slice(2)) || "PC" === x) continue;
2721
          i.Browser = i.Insert(new String(x), f);
2722
          var m = new RegExp(
2723
            ".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|.*(" +
2724
              x +
2725
              ")" +
2726
              ("MSIE" == x ? " " : "/") +
2727
              "((?:\\d+\\.)*\\d+)|(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)"
2728
          ).exec(g) || ["", "", "", "unknown", "0.0"];
2729
          (i.Browser.name = "" != m[1] ? x : m[3] || m[5]),
2730
            (i.Browser.version = m[2] || m[4] || m[6]);
2731
          break;
2732
        }
2733
      try {
2734
        i.Browser.Select({
2735
          Safari: function (t) {
2736
            var e = parseInt(String(t.version).split(".")[0]);
2737
            e > 85 && (t.webkit = t.version),
2738
              e >= 538
2739
                ? (t.version = "8.0")
2740
                : e >= 537
2741
                ? (t.version = "7.0")
2742
                : e >= 536
2743
                ? (t.version = "6.0")
2744
                : e >= 534
2745
                ? (t.version = "5.1")
2746
                : e >= 533
2747
                ? (t.version = "5.0")
2748
                : e >= 526
2749
                ? (t.version = "4.0")
2750
                : e >= 525
2751
                ? (t.version = "3.1")
2752
                : e > 500
2753
                ? (t.version = "3.0")
2754
                : e > 400
2755
                ? (t.version = "2.0")
2756
                : e > 85 && (t.version = "1.0"),
2757
              (t.webkit = navigator.appVersion.match(/WebKit\/(\d+)\./)[1]),
2758
              (t.isMobile = null != navigator.appVersion.match(/Mobile/i)),
2759
              (t.noContextMenu = t.isMobile);
2760
          },
2761
          Firefox: function (t) {
2762
            if (
2763
              ("0.0" === t.version || null == d.match(/Firefox/)) &&
2764
              "Gecko" === navigator.product
2765
            ) {
2766
              var e = d.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);
2767
              if (e) t.version = e[1];
2768
              else {
2769
                var i = (
2770
                  navigator.buildID ||
2771
                  navigator.productSub ||
2772
                  "0"
2773
                ).substr(0, 8);
2774
                i >= "20111220"
2775
                  ? (t.version = "9.0")
2776
                  : i >= "20111120"
2777
                  ? (t.version = "8.0")
2778
                  : i >= "20110927"
2779
                  ? (t.version = "7.0")
2780
                  : i >= "20110816"
2781
                  ? (t.version = "6.0")
2782
                  : i >= "20110621"
2783
                  ? (t.version = "5.0")
2784
                  : i >= "20110320"
2785
                  ? (t.version = "4.0")
2786
                  : i >= "20100121"
2787
                  ? (t.version = "3.6")
2788
                  : i >= "20090630"
2789
                  ? (t.version = "3.5")
2790
                  : i >= "20080617"
2791
                  ? (t.version = "3.0")
2792
                  : i >= "20061024" && (t.version = "2.0");
2793
              }
2794
            }
2795
            t.isMobile =
2796
              null != navigator.appVersion.match(/Android/i) ||
2797
              null != d.match(/ Fennec\//) ||
2798
              null != d.match(/Mobile/);
2799
          },
2800
          Chrome: function (t) {
2801
            t.noContextMenu = t.isMobile =
2802
              !!navigator.userAgent.match(/ Mobile[ \/]/);
2803
          },
2804
          Opera: function (t) {
2805
            t.version = opera.version();
2806
          },
2807
          Edge: function (t) {
2808
            t.isMobile = !!navigator.userAgent.match(/ Phone/);
2809
          },
2810
          MSIE: function (t) {
2811
            if (
2812
              ((t.isMobile = !!navigator.userAgent.match(/ Phone/)),
2813
              (t.isIE9 = !(
2814
                !document.documentMode ||
2815
                (!window.performance && !window.msPerformance)
2816
              )),
2817
              (MathJax.HTML.setScriptBug =
2818
                !t.isIE9 || document.documentMode < 9),
2819
              (MathJax.Hub.msieHTMLCollectionBug = document.documentMode < 9),
2820
              document.documentMode < 10 && !n.params.NoMathPlayer)
2821
            ) {
2822
              try {
2823
                new ActiveXObject("MathPlayer.Factory.1"),
2824
                  (t.hasMathPlayer = !0);
2825
              } catch (t) {}
2826
              try {
2827
                if (t.hasMathPlayer) {
2828
                  var e = document.createElement("object");
2829
                  (e.id = "mathplayer"),
2830
                    (e.classid = "clsid:32F66A20-7614-11D4-BD11-00104BD3F987"),
2831
                    s.appendChild(e),
2832
                    document.namespaces.add(
2833
                      "m",
2834
                      "http://www.w3.org/1998/Math/MathML"
2835
                    ),
2836
                    (t.mpNamespace = !0),
2837
                    !document.readyState ||
2838
                      ("loading" !== document.readyState &&
2839
                        "interactive" !== document.readyState) ||
2840
                      (document.write(
2841
                        '<?import namespace="m" implementation="#MathPlayer">'
2842
                      ),
2843
                      (t.mpImported = !0));
2844
                } else
2845
                  document.namespaces.add(
2846
                    "mjx_IE_fix",
2847
                    "http://www.w3.org/1999/xlink"
2848
                  );
2849
              } catch (t) {}
2850
            }
2851
          },
2852
        });
2853
      } catch (t) {
2854
        console.error(t.message);
2855
      }
2856
      i.Browser.Select(MathJax.Message.browsers),
2857
        e.AuthorConfig &&
2858
          "function" == typeof e.AuthorConfig.AuthorInit &&
2859
          e.AuthorConfig.AuthorInit(),
2860
        (i.queue = e.Callback.Queue()),
2861
        i.queue.Push(
2862
          ["Post", n.signal, "Begin"],
2863
          ["Config", n],
2864
          ["Cookie", n],
2865
          ["Styles", n],
2866
          ["Message", n],
2867
          function () {
2868
            return e.Callback.Queue(n.Jax(), n.Extensions()).Push({});
2869
          },
2870
          ["Menu", n],
2871
          n.onLoad(),
2872
          function () {
2873
            MathJax.isReady = !0;
2874
          },
2875
          ["Typeset", n],
2876
          ["Hash", n],
2877
          ["MenuZoom", n],
2878
          ["Post", n.signal, "End"]
2879
        );
2880
    })()));
2881
//# sourceMappingURL=/sm/6202312ea58c91990b4ebb2b9369109f8986d2a74936d9cd99350a2b2e7fb707.map
2882

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.