hejianhao
2025-04-16 dab2d210ca06c1faa514c6388fbd5de1ab355360
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
/*!
 * better-normal-scroll v1.15.2
 * (c) 2016-2019 ustbhuangyi
 * Released under the MIT License.
 */
!function (t, i) {
  "object" == typeof exports && "undefined" != typeof module ? module.exports = i() : "function" == typeof define && define.amd ? define(i) : t.BScroll = i()
}(this, function () {
  "use strict";
 
  function o(t, i) {
    for (; i + 1 < t.length; i++) t[i] = t[i + 1];
    t.pop()
  }
 
  var l = function (t, i) {
    if (Array.isArray(t)) return t;
    if (Symbol.iterator in Object(t)) return function (t, i) {
      var e = [], s = !0, o = !1, n = void 0;
      try {
        for (var r, h = t[Symbol.iterator](); !(s = (r = h.next()).done) && (e.push(r.value), !i || e.length !== i); s = !0) ;
      } catch (t) {
        o = !0, n = t
      } finally {
        try {
          !s && h.return && h.return()
        } finally {
          if (o) throw n
        }
      }
      return e
    }(t, i);
    throw new TypeError("Invalid attempt to destructure non-iterable instance")
  };
  var e = "undefined" != typeof window, t = e && navigator.userAgent.toLowerCase(), i = t && /wechatdevtools/.test(t),
    s = t && 0 < t.indexOf("android");
 
  function w() {
    return window.performance && window.performance.now ? window.performance.now() + window.performance.timing.navigationStart : +new Date
  }
 
  function a(t) {
    for (var i = arguments.length, e = Array(1 < i ? i - 1 : 0), s = 1; s < i; s++) e[s - 1] = arguments[s];
    for (var o = 0; o < e.length; o++) {
      var n = e[o];
      for (var r in n) t[r] = n[r]
    }
    return t
  }
 
  function c(t) {
    return null == t
  }
 
  function d(t, i) {
    return Math.sqrt(t * t + i * i)
  }
 
  var n = e && document.createElement("div").style, r = function () {
    if (!e) return !1;
    var t = {standard: "transform", webkit: "webkitTransform", Moz: "MozTransform", O: "OTransform", ms: "msTransform"};
    for (var i in t) if (void 0 !== n[t[i]]) return i;
    return !1
  }();
 
  function h(t) {
    return !1 !== r && ("standard" === r ? "transitionEnd" === t ? "transitionend" : t : r + t.charAt(0).toUpperCase() + t.substr(1))
  }
 
  function p(t, i, e, s) {
    t.addEventListener(i, e, {passive: !1, capture: !!s})
  }
 
  function u(t, i, e, s) {
    t.removeEventListener(i, e, {passive: !1, capture: !!s})
  }
 
  function m(t) {
    for (var i = 0, e = 0; t;) i -= t.offsetLeft, e -= t.offsetTop, t = t.offsetParent;
    return {left: i, top: e}
  }
 
  function f(t) {
    var i = t.getBoundingClientRect();
    return {left: -(i.left + window.pageXOffset), top: -(i.top + window.pageYOffset)}
  }
 
  var g = r && "standard" !== r ? "-" + r.toLowerCase() + "-" : "", v = h("transform"), y = h("transition"),
    x = e && h("perspective") in n, T = e && ("ontouchstart" in window || i), S = !1 !== v, b = e && y in n, _ = {
      transform: v,
      transition: y,
      transitionTimingFunction: h("transitionTimingFunction"),
      transitionDuration: h("transitionDuration"),
      transitionDelay: h("transitionDelay"),
      transformOrigin: h("transformOrigin"),
      transitionEnd: h("transitionEnd")
    }, Y = {touchstart: 1, touchmove: 1, touchend: 1, mousedown: 2, mousemove: 2, mouseup: 2};
 
  function X(t) {
    if (t instanceof window.SVGElement) {
      var i = t.getBoundingClientRect();
      return {top: i.top, left: i.left, width: i.width, height: i.height}
    }
    return {top: t.offsetTop, left: t.offsetLeft, width: t.offsetWidth, height: t.offsetHeight}
  }
 
  function M(t, i) {
    for (var e in i) if (i[e].test(t[e])) return !0;
    return !1
  }
 
  function P(t) {
    var i = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : "click", e = void 0;
    "mouseup" === t.type || "mousecancel" === t.type ? e = t : "touchend" !== t.type && "touchcancel" !== t.type || (e = t.changedTouches[0]);
    var s = {};
    e && (s.screenX = e.screenX || 0, s.screenY = e.screenY || 0, s.clientX = e.clientX || 0, s.clientY = e.clientY || 0);
    var o = void 0, n = !0, r = !0;
    if ("undefined" != typeof MouseEvent) try {
      o = new MouseEvent(i, a({bubbles: n, cancelable: r}, s))
    } catch (t) {
      h()
    } else h();
 
    function h() {
      (o = document.createEvent("Event")).initEvent(i, n, r), a(o, s)
    }
 
    o.forwardedTouchEvent = !0, o._constructed = !0, t.target.dispatchEvent(o)
  }
 
  function D(t, i) {
    t.removeChild(i)
  }
 
  var E = {
    startX: 0,
    startY: 0,
    scrollX: !1,
    scrollY: !0,
    freeScroll: !1,
    directionLockThreshold: 5,
    eventPassthrough: "",
    click: !1,
    tap: !1,
    bounce: !0,
    bounceTime: 800,
    momentum: !0,
    momentumLimitTime: 300,
    momentumLimitDistance: 15,
    swipeTime: 2500,
    swipeBounceTime: 500,
    deceleration: .0015,
    flickLimitTime: 200,
    flickLimitDistance: 100,
    resizePolling: 60,
    probeType: 0,
    preventDefault: !0,
    preventDefaultException: {tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/},
    HWCompositing: !0,
    useTransition: !0,
    useTransform: !0,
    bindToWrapper: !1,
    disableMouse: T,
    disableTouch: !T,
    observeDOM: !0,
    autoBlur: !0,
    wheel: !1,
    snap: !1,
    scrollbar: !1,
    pullDownRefresh: !1,
    pullUpLoad: !1,
    mouseWheel: !1,
    stopPropagation: !1,
    zoom: !1,
    infinity: !1,
    dblclick: !1
  };
  var I = {
    swipe: {
      style: "cubic-bezier(0.23, 1, 0.32, 1)", fn: function (t) {
        return 1 + --t * t * t * t * t
      }
    }, swipeBounce: {
      style: "cubic-bezier(0.25, 0.46, 0.45, 0.94)", fn: function (t) {
        return t * (2 - t)
      }
    }, bounce: {
      style: "cubic-bezier(0.165, 0.84, 0.44, 1)", fn: function (t) {
        return 1 - --t * t * t * t
      }
    }
  };
 
  function W(t, i, e, s, o, n, r, h) {
    var a = t - i, l = Math.abs(a) / e, c = r.deceleration, p = r.itemHeight, d = r.swipeBounceTime, u = r.wheel,
      m = r.swipeTime, f = u ? 4 : 15, g = t + l / c * (a < 0 ? -1 : 1);
    return u && p && (g = h._findNearestValidWheel(g).y), g < s ? (g = n ? Math.max(s - n / 4, s - n / f * l) : s, m = d) : o < g && (g = n ? Math.min(o + n / 4, o + n / f * l) : o, m = d), {
      destination: Math.round(g),
      duration: m
    }
  }
 
  function k() {
  }
 
  var z = e ? window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || function (t) {
      return window.setTimeout(t, (t.interval || 100 / 60) / 2)
    } : k,
    H = e ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || function (t) {
      window.clearTimeout(t)
    } : k;
 
  function A(t) {
    console.error("[BScroll warn]: " + t)
  }
 
  function C(t, i) {
    if (!t) throw new Error("[BScroll] " + i)
  }
 
  function O(t) {
    var i = document.createElement("div"), e = document.createElement("div");
    return i.style.cssText = "position:absolute;z-index:9999;pointerEvents:none", e.style.cssText = "box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;", e.className = "bscroll-indicator", i.className = "horizontal" === t ? (i.style.cssText += ";height:7px;left:2px;right:2px;bottom:0", e.style.height = "100%", "bscroll-horizontal-scrollbar") : (i.style.cssText += ";width:7px;bottom:2px;top:2px;right:1px", e.style.width = "100%", "bscroll-vertical-scrollbar"), i.style.cssText += ";overflow:hidden", i.appendChild(e), i
  }
 
  function L(t, i) {
    this.wrapper = i.el, this.wrapperStyle = this.wrapper.style, this.indicator = this.wrapper.children[0], this.indicatorStyle = this.indicator.style, this.scroller = t, this.direction = i.direction, i.fade ? (this.visible = 0, this.wrapperStyle.opacity = "0") : this.visible = 1, this.sizeRatioX = 1, this.sizeRatioY = 1, this.maxPosX = 0, this.maxPosY = 0, this.x = 0, this.y = 0, i.interactive && this._addDOMEvents()
  }
 
  L.prototype.handleEvent = function (t) {
    switch (t.type) {
      case"touchstart":
      case"mousedown":
        this._start(t);
        break;
      case"touchmove":
      case"mousemove":
        this._move(t);
        break;
      case"touchend":
      case"mouseup":
      case"touchcancel":
      case"mousecancel":
        this._end(t)
    }
  }, L.prototype.refresh = function () {
    this._shouldShow() && (this.transitionTime(), this._calculate(), this.updatePosition())
  }, L.prototype.fade = function (t, i) {
    var e = this;
    if (!i || this.visible) {
      var s = t ? 250 : 500;
      t = t ? "1" : "0", this.wrapperStyle[_.transitionDuration] = s + "ms", clearTimeout(this.fadeTimeout), this.fadeTimeout = setTimeout(function () {
        e.wrapperStyle.opacity = t, e.visible = +t
      }, 0)
    }
  }, L.prototype.updatePosition = function () {
    if ("vertical" === this.direction) {
      var t = Math.round(this.sizeRatioY * this.scroller.y);
      if (t < 0) {
        this.transitionTime(500);
        var i = Math.max(this.indicatorHeight + 3 * t, 8);
        this.indicatorStyle.height = i + "px", t = 0
      } else if (t > this.maxPosY) {
        this.transitionTime(500);
        var e = Math.max(this.indicatorHeight - 3 * (t - this.maxPosY), 8);
        this.indicatorStyle.height = e + "px", t = this.maxPosY + this.indicatorHeight - e
      } else this.indicatorStyle.height = this.indicatorHeight + "px";
      this.y = t, this.scroller.options.useTransform ? this.indicatorStyle[_.transform] = "translateY(" + t + "px)" + this.scroller.translateZ : this.indicatorStyle.top = t + "px"
    } else {
      var s = Math.round(this.sizeRatioX * this.scroller.x);
      if (s < 0) {
        this.transitionTime(500);
        var o = Math.max(this.indicatorWidth + 3 * s, 8);
        this.indicatorStyle.width = o + "px", s = 0
      } else if (s > this.maxPosX) {
        this.transitionTime(500);
        var n = Math.max(this.indicatorWidth - 3 * (s - this.maxPosX), 8);
        this.indicatorStyle.width = n + "px", s = this.maxPosX + this.indicatorWidth - n
      } else this.indicatorStyle.width = this.indicatorWidth + "px";
      this.x = s, this.scroller.options.useTransform ? this.indicatorStyle[_.transform] = "translateX(" + s + "px)" + this.scroller.translateZ : this.indicatorStyle.left = s + "px"
    }
  }, L.prototype.transitionTime = function () {
    var t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : 0;
    this.indicatorStyle[_.transitionDuration] = t + "ms"
  }, L.prototype.transitionTimingFunction = function (t) {
    this.indicatorStyle[_.transitionTimingFunction] = t
  }, L.prototype.destroy = function () {
    this._removeDOMEvents(), this.wrapper.parentNode.removeChild(this.wrapper)
  }, L.prototype._start = function (t) {
    var i = t.touches ? t.touches[0] : t;
    t.preventDefault(), t.stopPropagation(), this.transitionTime(), this.initiated = !0, this.moved = !1, this.lastPointX = i.pageX, this.lastPointY = i.pageY, this.startTime = w(), this._handleMoveEvents(p), this.scroller.trigger("beforeScrollStart")
  }, L.prototype._move = function (t) {
    var i = t.touches ? t.touches[0] : t;
    t.preventDefault(), t.stopPropagation(), this.moved || this.scroller.trigger("scrollStart"), this.moved = !0;
    var e = i.pageX - this.lastPointX;
    this.lastPointX = i.pageX;
    var s = i.pageY - this.lastPointY;
    this.lastPointY = i.pageY;
    var o = this.x + e, n = this.y + s;
    this._pos(o, n)
  }, L.prototype._end = function (t) {
    if (this.initiated) {
      this.initiated = !1, t.preventDefault(), t.stopPropagation(), this._handleMoveEvents(u);
      var i = this.scroller.options.snap;
      if (i) {
        var e = i.speed, s = i.easing, o = void 0 === s ? I.bounce : s,
          n = this.scroller._nearestSnap(this.scroller.x, this.scroller.y),
          r = e || Math.max(Math.max(Math.min(Math.abs(this.scroller.x - n.x), 1e3), Math.min(Math.abs(this.scroller.y - n.y), 1e3)), 300);
        this.scroller.x === n.x && this.scroller.y === n.y || (this.scroller.directionX = 0, this.scroller.directionY = 0, this.scroller.currentPage = n, this.scroller.scrollTo(n.x, n.y, r, o))
      }
      this.moved && this.scroller.trigger("scrollEnd", {x: this.scroller.x, y: this.scroller.y})
    }
  }, L.prototype._pos = function (t, i) {
    t < 0 ? t = 0 : t > this.maxPosX && (t = this.maxPosX), i < 0 ? i = 0 : i > this.maxPosY && (i = this.maxPosY), t = Math.round(t / this.sizeRatioX), i = Math.round(i / this.sizeRatioY), this.scroller.scrollTo(t, i), this.scroller.trigger("scroll", {
      x: this.scroller.x,
      y: this.scroller.y
    })
  }, L.prototype._shouldShow = function () {
    return "vertical" === this.direction && this.scroller.hasVerticalScroll || "horizontal" === this.direction && this.scroller.hasHorizontalScroll ? !(this.wrapper.style.display = "") : !(this.wrapper.style.display = "none")
  }, L.prototype._calculate = function () {
    if ("vertical" === this.direction) {
      var t = this.wrapper.clientHeight;
      this.indicatorHeight = Math.max(Math.round(t * t / (this.scroller.scrollerHeight || t || 1)), 8), this.indicatorStyle.height = this.indicatorHeight + "px", this.maxPosY = t - this.indicatorHeight, this.sizeRatioY = this.maxPosY / this.scroller.maxScrollY
    } else {
      var i = this.wrapper.clientWidth;
      this.indicatorWidth = Math.max(Math.round(i * i / (this.scroller.scrollerWidth || i || 1)), 8), this.indicatorStyle.width = this.indicatorWidth + "px", this.maxPosX = i - this.indicatorWidth, this.sizeRatioX = this.maxPosX / this.scroller.maxScrollX
    }
  }, L.prototype._addDOMEvents = function () {
    var t = p;
    this._handleDOMEvents(t)
  }, L.prototype._removeDOMEvents = function () {
    var t = u;
    this._handleDOMEvents(t), this._handleMoveEvents(t)
  }, L.prototype._handleMoveEvents = function (t) {
    this.scroller.options.disableTouch || t(window, "touchmove", this), this.scroller.options.disableMouse || t(window, "mousemove", this)
  }, L.prototype._handleDOMEvents = function (t) {
    this.scroller.options.disableTouch || (t(this.indicator, "touchstart", this), t(window, "touchend", this)), this.scroller.options.disableMouse || (t(this.indicator, "mousedown", this), t(window, "mouseup", this))
  };
  var N, R, F, U, V, B, q, Z, j, G;
 
  function $(t) {
    if (t && t.classList) return t.classList.contains("tombstone")
  }
 
  function J(t, i) {
    var e = this;
    this.options = i, C("function" == typeof this.options.createTombstone, "Infinite scroll need createTombstone Function to create tombstone"), C("function" == typeof this.options.fetch, "Infinite scroll need fetch Function to fetch new data."), C("function" == typeof this.options.render, "Infinite scroll need render Function to render each item."), this.firstAttachedItem = 0, this.lastAttachedItem = 0, this.anchorScrollTop = 0, this.anchorItem = {
      index: 0,
      offset: 0
    }, this.tombstoneHeight = 0, this.tombstoneWidth = 0, this.tombstones = [], this.tombstonesAnimationHandlers = [], this.items = [], this.loadedItems = 0, this.requestInProgress = !1, this.hasMore = !0, this.scroller = t, this.wrapperEl = this.scroller.wrapper, this.scrollerEl = this.scroller.scroller, this.scroller.on("resize", function () {
      e.onResize()
    }), this.scroller.on("destroy", function () {
      e.destroy()
    }), this._onResizeHandler = setTimeout(function () {
      e.onResize(), e.scroller.on("scroll", function () {
        e.onScroll()
      })
    })
  }
 
  function K(t, i) {
    this.wrapper = "string" == typeof t ? document.querySelector(t) : t, this.wrapper || A("Can not resolve the wrapper DOM."), this.scroller = this.wrapper.children[0], this.scroller || A("The wrapper need at least one child element to be scroller."), this.scrollerStyle = this.scroller.style, this._init(i)
  }
 
  return J.prototype.destroy = function () {
    var i = this;
    clearTimeout(this._onResizeHandler), this.tombstonesAnimationHandlers.forEach(function (t) {
      clearTimeout(t)
    }), this.tombstonesAnimationHandlers = null, this.items.forEach(function (t) {
      t.node && (i.scrollerEl.removeChild(t.node), t.node = null)
    }), this.scroller.infiniteScroller = null, this.scroller = null, this.wrapperEl = null, this.scrollerEl = null, this.items = null, this.tombstones = null
  }, J.prototype.onScroll = function () {
    var t = -this.scroller.y, i = t - this.anchorScrollTop;
    this.anchorItem = 0 === t ? {
      index: 0,
      offset: 0
    } : this._calculateAnchoredItem(this.anchorItem, i), this.anchorScrollTop = t;
    var e = this._calculateAnchoredItem(this.anchorItem, this.scroller.wrapperHeight), s = this.anchorItem.index,
      o = e.index;
    i < 0 ? (s -= 30, o += 10) : (s -= 10, o += 30), this.fill(s, o), this.maybeRequestContent()
  }, J.prototype.onResize = function () {
    var t = this.options.createTombstone();
    t.style.position = "absolute", this.scrollerEl.appendChild(t), t.style.display = "", this.tombstoneHeight = t.offsetHeight, this.tombstoneWidth = t.offsetWidth, this.scrollerEl.removeChild(t);
    for (var i = 0; i < this.items.length; i++) this.items[i].height = this.items[i].width = 0;
    this.onScroll()
  }, J.prototype.fill = function (t, i) {
    this.firstAttachedItem = Math.max(0, t), this.hasMore || (i = Math.min(i, this.items.length)), this.lastAttachedItem = i, this.attachContent()
  }, J.prototype.maybeRequestContent = function () {
    var s = this;
    if (!this.requestInProgress && this.hasMore) {
      var t = this.lastAttachedItem - this.loadedItems;
      t <= 0 || (this.requestInProgress = !0, this.options.fetch(t).then(function (t) {
        if (s.requestInProgress = !1, t) s.addContent(t); else {
          s.hasMore = !1;
          var i = s._removeTombstones(), e = 0;
          s.anchorItem.index <= s.items.length ? (e = s._fixScrollPosition(), s._setupAnimations({}, e), s.scroller.resetPosition(s.scroller.options.bounceTime)) : (s.anchorItem.index -= i, e = s._fixScrollPosition(), s._setupAnimations({}, e), s.scroller.stop(), s.scroller.resetPosition(), s.onScroll())
        }
      }))
    }
  }, J.prototype.addContent = function (t) {
    for (var i = 0; i < t.length; i++) this.items.length <= this.loadedItems && this._addItem(), this.items[this.loadedItems++].data = t[i];
    this.attachContent(), this.maybeRequestContent()
  }, J.prototype.attachContent = function () {
    var t = this._collectUnusedNodes(), i = this._createDOMNodes(t);
    this._cleanupUnusedNodes(t), this._cacheNodeSize();
    var e = this._fixScrollPosition();
    this._setupAnimations(i, e)
  }, J.prototype.resetMore = function () {
    this.hasMore = !0
  }, J.prototype._removeTombstones = function () {
    for (var t, i = void 0, e = this.items.length, s = 0; s < e; s++) {
      var o = this.items[s].node, n = this.items[s].data;
      o && !$(o) || n || (void 0 === i && (i = s), o && this.scrollerEl.removeChild(o))
    }
    return t = e - i, this.items.splice(i), this.lastAttachedItem = Math.min(this.lastAttachedItem, this.items.length), t
  }, J.prototype._collectUnusedNodes = function () {
    for (var t = [], i = 0; i < this.items.length; i++) if (i !== this.firstAttachedItem) {
      var e = this.items[i].node;
      e && ($(e) ? (this.tombstones.push(e), this.tombstones[this.tombstones.length - 1].style.display = "none") : t.push(e)), this.items[i].node = null
    } else i = this.lastAttachedItem - 1;
    return t
  }, J.prototype._createDOMNodes = function (t) {
    for (var i = {}, e = this.firstAttachedItem; e < this.lastAttachedItem; e++) {
      for (; this.items.length <= e;) this._addItem();
      var s = this.items[e].node, o = this.items[e].data;
      if (s) {
        if (!$(s) || !o) continue;
        s.style.zIndex = 1, i[e] = [s, this.items[e].top - this.anchorScrollTop], this.items[e].node = null
      }
      var n = o ? this.options.render(o, t.pop()) : this._getTombStone();
      n.style.position = "absolute", this.items[e].top = -1, this.scrollerEl.appendChild(n), this.items[e].node = n
    }
    return i
  }, J.prototype._cleanupUnusedNodes = function (t) {
    for (; t.length;) this.scrollerEl.removeChild(t.pop())
  }, J.prototype._cacheNodeSize = function () {
    for (var t = this.firstAttachedItem; t < this.lastAttachedItem; t++) {
      var i = this.items[t];
      if (i.data && !i.height) {
        var e = $(i.node);
        i.height = e ? this.tombstoneHeight : i.node.offsetHeight, i.width = e ? this.tombstoneWidth : i.node.offsetWidth
      }
    }
  }, J.prototype._fixScrollPosition = function () {
    for (var t = this.anchorScrollTop = 0; t < this.anchorItem.index; t++) this.anchorScrollTop += this.items[t].height || this.tombstoneHeight;
    this.anchorScrollTop += this.anchorItem.offset;
    for (var i = this.anchorScrollTop - this.anchorItem.offset, e = this.anchorItem.index; e > this.firstAttachedItem;) i -= this.items[e - 1].height || this.tombstoneHeight, e--;
    return i
  }, J.prototype._setupAnimations = function (e, t) {
    var s = this;
    for (var i in e) {
      var o = e[i];
      this.items[i].node.style[_.transform] = "translateY(" + (this.anchorScrollTop + o[1]) + "px) scale(" + this.tombstoneWidth / this.items[i].width + ", " + this.tombstoneHeight / this.items[i].height + ")", this.items[i].node.offsetTop, o[0].offsetTop, this.items[i].node.style[_.transition] = g + "transform 200ms"
    }
    for (var n = this.firstAttachedItem; n < this.lastAttachedItem; n++) {
      var r = e[n];
      if (r) {
        var h = r[0];
        h.style[_.transition] = g + "transform 200ms, opacity 200ms", h.style[_.transform] = "translateY(" + t + "px) scale(" + this.items[n].width / this.tombstoneWidth + ", " + this.items[n].height / this.tombstoneHeight + ")", h.style.opacity = 0
      }
      t !== this.items[n].top && (r || (this.items[n].node.style[_.transition] = ""), this.items[n].node.style[_.transform] = "translateY(" + t + "px)"), this.items[n].top = t, t += this.items[n].height || this.tombstoneHeight
    }
    this.scroller.maxScrollY = -(t - this.scroller.wrapperHeight + (this.hasMore ? 2e3 : 0));
    var a = setTimeout(function () {
      for (var t in e) {
        var i = e[t];
        i[0].style.display = "none", s.tombstones.push(i[0])
      }
    }, 200);
    this.tombstonesAnimationHandlers.push(a)
  }, J.prototype._getTombStone = function () {
    var t = this.tombstones.pop();
    return t ? (t.style.display = "", t.style.opacity = 1, t.style[_.transform] = "", t.style[_.transition] = "", t) : this.options.createTombstone()
  }, J.prototype._addItem = function () {
    this.items.push({data: null, node: null, height: 0, width: 0, top: 0})
  }, J.prototype._calculateAnchoredItem = function (t, i) {
    if (0 === i) return t;
    var e = t.index, s = 0;
    if ((i += t.offset) < 0) {
      for (; i < 0 && 0 < e && this.items[e - 1].height;) i += this.items[e - 1].height, e--;
      s = Math.max(-e, Math.ceil(Math.min(i, 0) / this.tombstoneHeight))
    } else {
      for (; 0 < i && e < this.items.length && this.items[e].height && this.items[e].height < i;) i -= this.items[e].height, e++;
      (e >= this.items.length || !this.items[e].height) && (s = Math.floor(Math.max(i, 0) / this.tombstoneHeight))
    }
    return {index: e += s, offset: i -= s * this.tombstoneHeight}
  }, (N = K).prototype._init = function (t) {
    this._handleOptions(t), this._events = {}, this.x = 0, this.y = 0, this.directionX = 0, this.directionY = 0, this.setScale(1), this._addDOMEvents(), this._initExtFeatures(), this._watchTransition(), this.options.observeDOM && this._initDOMObserver(), this.options.autoBlur && this._handleAutoBlur(), this.refresh(), this.options.snap || this.scrollTo(this.options.startX, this.options.startY), this.enable()
  }, N.prototype.setScale = function (t) {
    this.lastScale = c(this.scale) ? t : this.scale, this.scale = t
  }, N.prototype._handleOptions = function (t) {
    this.options = a({}, E, t), this.translateZ = this.options.HWCompositing && x ? " translateZ(0)" : "", this.options.useTransition = this.options.useTransition && b, this.options.useTransform = this.options.useTransform && S, this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault, this.options.scrollX = "horizontal" !== this.options.eventPassthrough && this.options.scrollX, this.options.scrollY = "vertical" !== this.options.eventPassthrough && this.options.scrollY, this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough, this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold, !0 === this.options.tap && (this.options.tap = "tap")
  }, N.prototype._addDOMEvents = function () {
    var t = p;
    this._handleDOMEvents(t)
  }, N.prototype._removeDOMEvents = function () {
    var t = u;
    this._handleDOMEvents(t)
  }, N.prototype._handleDOMEvents = function (t) {
    var i = this.options.bindToWrapper ? this.wrapper : window;
    t(window, "orientationchange", this), t(window, "resize", this), this.options.click && t(this.wrapper, "click", this, !0), this.options.disableMouse || (t(this.wrapper, "mousedown", this), t(i, "mousemove", this), t(i, "mousecancel", this), t(i, "mouseup", this)), T && !this.options.disableTouch && (t(this.wrapper, "touchstart", this), t(i, "touchmove", this), t(i, "touchcancel", this), t(i, "touchend", this)), t(this.scroller, _.transitionEnd, this)
  }, N.prototype._initExtFeatures = function () {
    this.options.snap && this._initSnap(), this.options.scrollbar && this._initScrollbar(), this.options.pullUpLoad && this._initPullUp(), this.options.pullDownRefresh && this._initPullDown(), this.options.wheel && this._initWheel(), this.options.mouseWheel && this._initMouseWheel(), this.options.zoom && this._initZoom(), this.options.infinity && this._initInfinite()
  }, N.prototype._watchTransition = function () {
    if ("function" == typeof Object.defineProperty) {
      var o = this, n = !1, t = this.options.useTransition ? "isInTransition" : "isAnimating";
      Object.defineProperty(this, t, {
        get: function () {
          return n
        }, set: function (t) {
          n = t;
          for (var i = o.scroller.children.length ? o.scroller.children : [o.scroller], e = n && !o.pulling ? "none" : "auto", s = 0; s < i.length; s++) i[s].style.pointerEvents = e
        }
      })
    }
  }, N.prototype._handleAutoBlur = function () {
    this.on("scrollStart", function () {
      var t = document.activeElement;
      !t || "INPUT" !== t.tagName && "TEXTAREA" !== t.tagName || t.blur()
    })
  }, N.prototype._initDOMObserver = function () {
    var n = this;
    if ("undefined" != typeof MutationObserver) {
      var r = void 0, t = new MutationObserver(function (t) {
        if (!n._shouldNotRefresh()) {
          for (var i = !1, e = !1, s = 0; s < t.length; s++) {
            var o = t[s];
            if ("attributes" !== o.type) {
              i = !0;
              break
            }
            if (o.target !== n.scroller) {
              e = !0;
              break
            }
          }
          i ? n.refresh() : e && (clearTimeout(r), r = setTimeout(function () {
            n._shouldNotRefresh() || n.refresh()
          }, 60))
        }
      });
      t.observe(this.scroller, {attributes: !0, childList: !0, subtree: !0}), this.on("destroy", function () {
        t.disconnect()
      })
    } else this._checkDOMUpdate()
  }, N.prototype._shouldNotRefresh = function () {
    var t = this.x > this.minScrollX || this.x < this.maxScrollX || this.y > this.minScrollY || this.y < this.maxScrollY;
    return this.isInTransition || this.stopFromTransition || t
  }, N.prototype._checkDOMUpdate = function () {
    var e = X(this.scroller), s = e.width, o = e.height;
 
    function n() {
      var t = this;
      setTimeout(function () {
        (function () {
          if (!this.destroyed) {
            var t = (e = X(this.scroller)).width, i = e.height;
            s === t && o === i || this.refresh(), s = t, o = i, n.call(this)
          }
        }).call(t)
      }, 1e3)
    }
 
    n.call(this)
  }, N.prototype.handleEvent = function (t) {
    switch (t.type) {
      case"touchstart":
      case"mousedown":
        this._start(t), this.options.zoom && t.touches && 1 < t.touches.length && this._zoomStart(t);
        break;
      case"touchmove":
      case"mousemove":
        this.options.zoom && t.touches && 1 < t.touches.length ? this._zoom(t) : this._move(t);
        break;
      case"touchend":
      case"mouseup":
      case"touchcancel":
      case"mousecancel":
        this.scaled ? this._zoomEnd(t) : this._end(t);
        break;
      case"orientationchange":
      case"resize":
        this._resize();
        break;
      case"transitionend":
      case"webkitTransitionEnd":
      case"oTransitionEnd":
      case"MSTransitionEnd":
        this._transitionEnd(t);
        break;
      case"click":
        this.enabled && !t._constructed && (M(t.target, this.options.preventDefaultException) || (t.preventDefault(), t.stopPropagation()));
        break;
      case"wheel":
      case"DOMMouseScroll":
      case"mousewheel":
        this._onMouseWheel(t)
    }
  }, N.prototype.refresh = function () {
    var t = "static" === window.getComputedStyle(this.wrapper, null).position, i = X(this.wrapper);
    this.wrapperWidth = i.width, this.wrapperHeight = i.height;
    var e = X(this.scroller);
    this.scrollerWidth = Math.round(e.width * this.scale), this.scrollerHeight = Math.round(e.height * this.scale), this.relativeX = e.left, this.relativeY = e.top, t && (this.relativeX -= i.left, this.relativeY -= i.top), this.minScrollX = 0, this.minScrollY = 0;
    var s = this.options.wheel;
    s ? (this.items = this.scroller.children, this._checkWheelAllDisabled(), this.options.itemHeight = this.itemHeight = this.items.length ? this.scrollerHeight / this.items.length : 0, void 0 === this.selectedIndex && (this.selectedIndex = s.selectedIndex || 0), this.options.startY = -this.selectedIndex * this.itemHeight, this.maxScrollX = 0, this.maxScrollY = -this.itemHeight * (this.items.length - 1)) : (this.maxScrollX = this.wrapperWidth - this.scrollerWidth, this.options.infinity || (this.maxScrollY = this.wrapperHeight - this.scrollerHeight), this.maxScrollX < 0 ? (this.maxScrollX -= this.relativeX, this.minScrollX = -this.relativeX) : 1 < this.scale && (this.maxScrollX = this.maxScrollX / 2 - this.relativeX, this.minScrollX = this.maxScrollX), this.maxScrollY < 0 ? (this.maxScrollY -= this.relativeY, this.minScrollY = -this.relativeY) : 1 < this.scale && (this.maxScrollY = this.maxScrollY / 2 - this.relativeY, this.minScrollY = this.maxScrollY)), this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < this.minScrollX, this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < this.minScrollY, this.hasHorizontalScroll || (this.maxScrollX = this.minScrollX, this.scrollerWidth = this.wrapperWidth), this.hasVerticalScroll || (this.maxScrollY = this.minScrollY, this.scrollerHeight = this.wrapperHeight), this.endTime = 0, this.directionX = 0, this.directionY = 0, this.wrapperOffset = m(this.wrapper), this.trigger("refresh"), !this.scaled && this.resetPosition()
  }, N.prototype.enable = function () {
    this.enabled = !0
  }, N.prototype.disable = function () {
    this.enabled = !1
  }, (R = K).prototype._start = function (t) {
    var i = Y[t.type];
    if ((1 === i || 0 === t.button) && !(!this.enabled || this.destroyed || this.initiated && this.initiated !== i)) {
      this.initiated = i, this.options.preventDefault && !M(t.target, this.options.preventDefaultException) && t.preventDefault(), this.options.stopPropagation && t.stopPropagation(), this.moved = !1, this.distX = 0, this.distY = 0, this.directionX = 0, this.directionY = 0, this.movingDirectionX = 0, this.movingDirectionY = 0, this.directionLocked = 0, this._transitionTime(), this.startTime = w(), this.options.wheel && (this.target = t.target), this.stop();
      var e = t.touches ? t.touches[0] : t;
      this.startX = this.x, this.startY = this.y, this.absStartX = this.x, this.absStartY = this.y, this.pointX = e.pageX, this.pointY = e.pageY, this.trigger("beforeScrollStart")
    }
  }, R.prototype._move = function (t) {
    if (this.enabled && !this.destroyed && Y[t.type] === this.initiated) {
      this.options.preventDefault && t.preventDefault(), this.options.stopPropagation && t.stopPropagation();
      var i = t.touches ? t.touches[0] : t, e = i.pageX - this.pointX, s = i.pageY - this.pointY;
      this.pointX = i.pageX, this.pointY = i.pageY, this.distX += e, this.distY += s;
      var o = Math.abs(this.distX), n = Math.abs(this.distY), r = w();
      if (!(r - this.endTime > this.options.momentumLimitTime && !this.moved && n < this.options.momentumLimitDistance && o < this.options.momentumLimitDistance)) {
        if (this.directionLocked || this.options.freeScroll || (o > n + this.options.directionLockThreshold ? this.directionLocked = "h" : n >= o + this.options.directionLockThreshold ? this.directionLocked = "v" : this.directionLocked = "n"), "h" === this.directionLocked) {
          if ("vertical" === this.options.eventPassthrough) t.preventDefault(); else if ("horizontal" === this.options.eventPassthrough) return void (this.initiated = !1);
          s = 0
        } else if ("v" === this.directionLocked) {
          if ("horizontal" === this.options.eventPassthrough) t.preventDefault(); else if ("vertical" === this.options.eventPassthrough) return void (this.initiated = !1);
          e = 0
        }
        e = this.hasHorizontalScroll ? e : 0, s = this.hasVerticalScroll ? s : 0, this.movingDirectionX = 0 < e ? -1 : e < 0 ? 1 : 0, this.movingDirectionY = 0 < s ? -1 : s < 0 ? 1 : 0;
        var h = this.x + e, a = this.y + s, l = !1, c = !1, p = !1, d = !1, u = this.options.bounce;
        !1 !== u && (l = void 0 === u.top || u.top, c = void 0 === u.bottom || u.bottom, p = void 0 === u.left || u.left, d = void 0 === u.right || u.right), (h > this.minScrollX || h < this.maxScrollX) && (h = h > this.minScrollX && p || h < this.maxScrollX && d ? this.x + e / 3 : h > this.minScrollX ? this.minScrollX : this.maxScrollX), (a > this.minScrollY || a < this.maxScrollY) && (a = a > this.minScrollY && l || a < this.maxScrollY && c ? this.y + s / 3 : a > this.minScrollY ? this.minScrollY : this.maxScrollY), this.moved || (this.moved = !0, this.trigger("scrollStart")), this._translate(h, a), r - this.startTime > this.options.momentumLimitTime && (this.startTime = r, this.startX = this.x, this.startY = this.y, 1 === this.options.probeType && this.trigger("scroll", {
          x: this.x,
          y: this.y
        })), 1 < this.options.probeType && this.trigger("scroll", {x: this.x, y: this.y});
        var m = document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft,
          f = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop, g = this.pointX - m,
          v = this.pointY - f;
        (g > document.documentElement.clientWidth - this.options.momentumLimitDistance || g < this.options.momentumLimitDistance || v < this.options.momentumLimitDistance || v > document.documentElement.clientHeight - this.options.momentumLimitDistance) && this._end(t)
      }
    }
  }, R.prototype._end = function (t) {
    if (this.enabled && !this.destroyed && Y[t.type] === this.initiated) {
      this.initiated = !1, this.options.preventDefault && !M(t.target, this.options.preventDefaultException) && t.preventDefault(), this.options.stopPropagation && t.stopPropagation(), this.trigger("touchEnd", {
        x: this.x,
        y: this.y
      }), this.isInTransition = !1;
      var i = Math.round(this.x), e = Math.round(this.y), s = i - this.absStartX, o = e - this.absStartY;
      if (this.directionX = 0 < s ? -1 : s < 0 ? 1 : 0, this.directionY = 0 < o ? -1 : o < 0 ? 1 : 0, !this.options.pullDownRefresh || !this._checkPullDown()) if (this._checkClick(t)) this.trigger("scrollCancel"); else if (!this.resetPosition(this.options.bounceTime, I.bounce)) {
        this._translate(i, e), this.endTime = w();
        var n = this.endTime - this.startTime, r = Math.abs(i - this.startX), h = Math.abs(e - this.startY);
        if (this._events.flick && n < this.options.flickLimitTime && r < this.options.flickLimitDistance && h < this.options.flickLimitDistance) this.trigger("flick"); else {
          var a = 0;
          if (this.options.momentum && n < this.options.momentumLimitTime && (h > this.options.momentumLimitDistance || r > this.options.momentumLimitDistance)) {
            var l = !1, c = !1, p = !1, d = !1, u = this.options.bounce;
            !1 !== u && (l = void 0 === u.top || u.top, c = void 0 === u.bottom || u.bottom, p = void 0 === u.left || u.left, d = void 0 === u.right || u.right);
            var m = -1 === this.directionX && p || 1 === this.directionX && d ? this.wrapperWidth : 0,
              f = -1 === this.directionY && l || 1 === this.directionY && c ? this.wrapperHeight : 0,
              g = this.hasHorizontalScroll ? W(this.x, this.startX, n, this.maxScrollX, this.minScrollX, m, this.options, this) : {
                destination: i,
                duration: 0
              },
              v = this.hasVerticalScroll ? W(this.y, this.startY, n, this.maxScrollY, this.minScrollY, f, this.options, this) : {
                destination: e,
                duration: 0
              };
            i = g.destination, e = v.destination, a = Math.max(g.duration, v.duration), this.isInTransition = !0
          } else this.options.wheel && (e = this._findNearestValidWheel(e).y, a = this.options.wheel.adjustTime || 400);
          var y = I.swipe;
          if (this.options.snap) {
            var x = this._nearestSnap(i, e);
            this.currentPage = x, a = this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(i - x.x), 1e3), Math.min(Math.abs(e - x.y), 1e3)), 300), i = x.x, e = x.y, this.directionX = 0, this.directionY = 0, y = this.options.snap.easing || I.bounce
          }
          if (i !== this.x || e !== this.y) return (i > this.minScrollX || i < this.maxScrollX || e > this.minScrollY || e < this.maxScrollY) && (y = I.swipeBounce), void this.scrollTo(i, e, a, y);
          this.options.wheel && (this.selectedIndex = this._findNearestValidWheel(this.y).index), this.trigger("scrollEnd", {
            x: this.x,
            y: this.y
          })
        }
      }
    }
  }, R.prototype._checkClick = function (t) {
    var i, e, s, o = this.stopFromTransition && !this.pulling;
    if (this.stopFromTransition = !1, this.moved) return !1;
    if (this.options.wheel) {
      if (this.target && this.target.className === this.options.wheel.wheelWrapperClass) {
        var n = this._findNearestValidWheel(this.y).index,
          r = Math.round((this.pointY + f(this.wrapper).top - this.wrapperHeight / 2) / this.itemHeight);
        this.target = this.items[n + r]
      }
      var h = m(this.target).top, a = m(this.target).left;
      return h -= this.wrapperOffset.top, h -= Math.round(this.target.offsetHeight / 2 - this.wrapper.offsetHeight / 2) || 0, a -= this.wrapperOffset.left, a -= Math.round(this.target.offsetWidth / 2 - this.wrapper.offsetWidth / 2) || 0, h = this._findNearestValidWheel(h).y, this.scrollTo(a, h, this.options.wheel.adjustTime || 400, I.swipe), !0
    }
    if (o) return !1;
    var l = this.options.dblclick, c = !1;
    if (l && this.lastClickTime) {
      var p = l.delay, d = void 0 === p ? 300 : p;
      w() - this.lastClickTime < d && (c = !0, P(t, "dblclick"))
    }
    return this.options.tap && (i = t, e = this.options.tap, (s = document.createEvent("Event")).initEvent(e, !0, !0), s.pageX = i.pageX, s.pageY = i.pageY, i.target.dispatchEvent(s)), this.options.click && !M(t.target, this.options.preventDefaultException) && P(t), this.lastClickTime = c ? null : w(), !0
  }, R.prototype._resize = function () {
    var t = this;
    this.enabled && (s && (this.wrapper.scrollTop = 0), clearTimeout(this.resizeTimeout), this.resizeTimeout = setTimeout(function () {
      t.refresh()
    }, this.options.resizePolling))
  }, R.prototype._startProbe = function () {
    H(this.probeTimer), this.probeTimer = z(function t() {
      var i = e.getComputedPosition();
      e.trigger("scroll", i), e.isInTransition ? e.probeTimer = z(t) : e.trigger("scrollEnd", i)
    });
    var e = this
  }, R.prototype._transitionTime = function () {
    var t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : 0;
    if (this.scrollerStyle[_.transitionDuration] = t + "ms", this.options.wheel) for (var i = 0; i < this.items.length; i++) this.items[i].style[_.transitionDuration] = t + "ms";
    if (this.indicators) for (var e = 0; e < this.indicators.length; e++) this.indicators[e].transitionTime(t)
  }, R.prototype._transitionTimingFunction = function (t) {
    if (this.scrollerStyle[_.transitionTimingFunction] = t, this.options.wheel) for (var i = 0; i < this.items.length; i++) this.items[i].style[_.transitionTimingFunction] = t;
    if (this.indicators) for (var e = 0; e < this.indicators.length; e++) this.indicators[e].transitionTimingFunction(t)
  }, R.prototype._transitionEnd = function (t) {
    t.target === this.scroller && this.isInTransition && (this._transitionTime(), (!this.pulling || 1 === this.movingDirectionY) && !this.resetPosition(this.options.bounceTime, I.bounce) && (this.isInTransition = !1, 3 !== this.options.probeType && this.trigger("scrollEnd", {
      x: this.x,
      y: this.y
    })))
  }, R.prototype._translate = function (t, i, e) {
    if (C(!c(t) && !c(i), "Translate x or y is null or undefined."), c(e) && (e = this.scale), this.options.useTransform ? this.scrollerStyle[_.transform] = "translate(" + t + "px," + i + "px) scale(" + e + ")" + this.translateZ : (t = Math.round(t), i = Math.round(i), this.scrollerStyle.left = t + "px", this.scrollerStyle.top = i + "px"), this.options.wheel) for (var s = this.options.wheel.rotate, o = void 0 === s ? 25 : s, n = 0; n < this.items.length; n++) {
      var r = o * (i / this.itemHeight + n);
      this.items[n].style[_.transform] = "rotateX(" + r + "deg)"
    }
    if (this.x = t, this.y = i, this.setScale(e), this.indicators) for (var h = 0; h < this.indicators.length; h++) this.indicators[h].updatePosition()
  }, R.prototype._animate = function (r, h, a, l) {
    var c = this, p = this.x, d = this.y, u = this.lastScale, m = this.scale, f = w(), g = f + a;
    this.isAnimating = !0, H(this.animateTimer), function t() {
      var i = w();
      if (g <= i) return c.isAnimating = !1, c._translate(r, h, m), c.trigger("scroll", {
        x: c.x,
        y: c.y
      }), void (c.pulling || c.resetPosition(c.options.bounceTime) || c.trigger("scrollEnd", {x: c.x, y: c.y}));
      var e = l(i = (i - f) / a), s = (r - p) * e + p, o = (h - d) * e + d, n = (m - u) * e + u;
      c._translate(s, o, n), c.isAnimating && (c.animateTimer = z(t)), 3 === c.options.probeType && c.trigger("scroll", {
        x: c.x,
        y: c.y
      })
    }()
  }, R.prototype.scrollBy = function (t, i) {
    var e = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : 0,
      s = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : I.bounce;
    t = this.x + t, i = this.y + i, this.scrollTo(t, i, e, s)
  }, R.prototype.scrollTo = function (t, i) {
    var e = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : 0,
      s = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : I.bounce, o = arguments[4];
    if (this.options.wheel && (i = this._findNearestValidWheel(i).y), t !== this.x || i !== this.y) if (this.isInTransition = this.options.useTransition && 0 < e && (this.x !== t || this.y !== i), !e || this.options.useTransition) {
      if (this._transitionTimingFunction(s.style), this._transitionTime(e), this._translate(t, i), e && 3 === this.options.probeType && this._startProbe(), !e && !o) {
        if (this.options.zoom) return;
        this.trigger("scroll", {
          x: t,
          y: i
        }), this._reflow = document.body.offsetHeight, this.resetPosition(this.options.bounceTime, I.bounce) || this.trigger("scrollEnd", {
          x: t,
          y: i
        })
      }
      this.options.wheel && (this.selectedIndex = this._findNearestValidWheel(i).index)
    } else this._animate(t, i, e, s.fn)
  }, R.prototype.scrollToElement = function (t, i, e, s, o) {
    if (t && (t = t.nodeType ? t : this.scroller.querySelector(t), !this.options.wheel || t.classList.contains(this.options.wheel.wheelItemClass))) {
      var n = m(t);
      n.left -= this.wrapperOffset.left, n.top -= this.wrapperOffset.top, !0 === e && (e = Math.round(t.offsetWidth / 2 - this.wrapper.offsetWidth / 2)), !0 === s && (s = Math.round(t.offsetHeight / 2 - this.wrapper.offsetHeight / 2)), n.left -= e || 0, n.top -= s || 0, n.left = n.left > this.minScrollX ? this.minScrollX : n.left < this.maxScrollX ? this.maxScrollX : n.left, n.top = n.top > this.minScrollY ? this.minScrollY : n.top < this.maxScrollY ? this.maxScrollY : n.top, this.options.wheel && (n.top = this._findNearestValidWheel(n.top).y), this.scrollTo(n.left, n.top, i, o)
    }
  }, R.prototype.resetPosition = function () {
    var t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : 0,
      i = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : I.bounce, e = this.x, s = Math.round(e);
    !this.hasHorizontalScroll || s > this.minScrollX ? e = this.minScrollX : s < this.maxScrollX && (e = this.maxScrollX);
    var o = this.y, n = Math.round(o);
    return !this.hasVerticalScroll || n > this.minScrollY ? o = this.minScrollY : n < this.maxScrollY && (o = this.maxScrollY), (e !== this.x || o !== this.y) && (this.scrollTo(e, o, t, i), !0)
  }, R.prototype.getComputedPosition = function () {
    var t = window.getComputedStyle(this.scroller, null), i = void 0, e = void 0;
    return e = this.options.useTransform ? (i = +((t = t[_.transform].split(")")[0].split(", "))[12] || t[4]), +(t[13] || t[5])) : (i = +t.left.replace(/[^-\d.]/g, ""), +t.top.replace(/[^-\d.]/g, "")), {
      x: i,
      y: e
    }
  }, R.prototype.stop = function () {
    if (this.options.useTransition && this.isInTransition) {
      this.isInTransition = !1, H(this.probeTimer);
      var t = this.getComputedPosition();
      this._translate(t.x, t.y), this.options.wheel ? this.target = this.items[this._findNearestValidWheel(t.y).index] : this.trigger("scrollEnd", {
        x: this.x,
        y: this.y
      }), this.stopFromTransition = !0
    } else !this.options.useTransition && this.isAnimating && (this.isAnimating = !1, H(this.animateTimer), this.trigger("scrollEnd", {
      x: this.x,
      y: this.y
    }), this.stopFromTransition = !0)
  }, R.prototype.destroy = function () {
    this.destroyed = !0, this.trigger("destroy"), this.options.useTransition ? H(this.probeTimer) : H(this.animateTimer), this._removeDOMEvents(), this._events = {}
  }, (F = K).prototype.on = function (t, i) {
    var e = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : this;
    this._events[t] || (this._events[t] = []), this._events[t].push([i, e])
  }, F.prototype.once = function (t, i) {
    var e = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : this;
 
    function s() {
      this.off(t, s), i.apply(e, arguments)
    }
 
    s.fn = i, this.on(t, s)
  }, F.prototype.off = function (t, i) {
    var e = this._events[t];
    if (e) for (var s = e.length; s--;) (e[s][0] === i || e[s][0] && e[s][0].fn === i) && o(e, s)
  }, F.prototype.trigger = function (t) {
    var i = this._events[t];
    if (i) for (var e = i.length, s = [].concat(function (t) {
      if (Array.isArray(t)) {
        for (var i = 0, e = Array(t.length); i < t.length; i++) e[i] = t[i];
        return e
      }
      return Array.from(t)
    }(i)), o = 0; o < e; o++) {
      var n = s[o], r = l(n, 2), h = r[0], a = r[1];
      h && h.apply(a, [].slice.call(arguments, 1))
    }
  }, (U = K).prototype._initSnap = function () {
    var m = this;
    this.currentPage = {};
    var t, i, e, s, f = this.options.snap;
    if (f.loop) {
      var o = this.scroller.children;
      1 < o.length ? (t = o[o.length - 1].cloneNode(!0), (i = this.scroller).firstChild ? (e = t, (s = i.firstChild).parentNode.insertBefore(e, s)) : i.appendChild(t), this.scroller.appendChild(o[1].cloneNode(!0))) : f.loop = !1
    }
    var g = f.el;
    "string" == typeof g && (g = this.scroller.querySelectorAll(g)), this.on("refresh", function () {
      if (m.pages = [], m.wrapperWidth && m.wrapperHeight && m.scrollerWidth && m.scrollerHeight) {
        var t = f.stepX || m.wrapperWidth, i = f.stepY || m.wrapperHeight, e = 0, s = void 0, o = void 0, n = void 0,
          r = 0, h = void 0, a = 0, l = void 0, c = void 0;
        if (g) for (h = g.length, l = -1; r < h; r++) c = X(g[r]), (0 === r || c.left <= X(g[r - 1]).left) && (a = 0, l++), m.pages[a] || (m.pages[a] = []), e = Math.max(-c.left, m.maxScrollX), s = Math.max(-c.top, m.maxScrollY), o = e - Math.round(c.width / 2), n = s - Math.round(c.height / 2), m.pages[a][l] = {
          x: e,
          y: s,
          width: c.width,
          height: c.height,
          cx: o,
          cy: n
        }, e > m.maxScrollX && a++; else for (o = Math.round(t / 2), n = Math.round(i / 2); e > -m.scrollerWidth;) {
          for (m.pages[r] = [], s = h = 0; s > -m.scrollerHeight;) m.pages[r][h] = {
            x: Math.max(e, m.maxScrollX),
            y: Math.max(s, m.maxScrollY),
            width: t,
            height: i,
            cx: e - o,
            cy: s - n
          }, s -= i, h++;
          e -= t, r++
        }
        m._checkSnapLoop();
        var p = f._loopX ? 1 : 0, d = f._loopY ? 1 : 0;
        m._goToPage(m.currentPage.pageX || p, m.currentPage.pageY || d, 0, void 0, !0);
        var u = f.threshold;
        m.snapThresholdY = u % 1 == 0 ? m.snapThresholdX = u : (m.snapThresholdX = Math.round(m.pages[m.currentPage.pageX][m.currentPage.pageY].width * u), Math.round(m.pages[m.currentPage.pageX][m.currentPage.pageY].height * u))
      }
    }), this.on("scrollEnd", function () {
      f.loop && (f._loopX ? (0 === m.currentPage.pageX && m._goToPage(m.pages.length - 2, m.currentPage.pageY, 0, void 0, !0), m.currentPage.pageX === m.pages.length - 1 && m._goToPage(1, m.currentPage.pageY, 0, void 0, !0)) : (0 === m.currentPage.pageY && m._goToPage(m.currentPage.pageX, m.pages[0].length - 2, 0, void 0, !0), m.currentPage.pageY === m.pages[0].length - 1 && m._goToPage(m.currentPage.pageX, 1, 0, void 0, !0)))
    }), !1 !== f.listenFlick && this.on("flick", function () {
      var t = f.speed || Math.max(Math.max(Math.min(Math.abs(m.x - m.startX), 1e3), Math.min(Math.abs(m.y - m.startY), 1e3)), 300);
      m._goToPage(m.currentPage.pageX + m.directionX, m.currentPage.pageY + m.directionY, t)
    }), this.on("destroy", function () {
      if (f.loop) {
        var t = m.scroller.children;
        2 < t.length && (D(m.scroller, t[t.length - 1]), D(m.scroller, t[0]))
      }
    })
  }, U.prototype._checkSnapLoop = function () {
    var t = this.options.snap;
    t.loop && this.pages && this.pages.length && (1 < this.pages.length && (t._loopX = !0), this.pages[0] && 1 < this.pages[0].length && (t._loopY = !0), t._loopX && t._loopY && A("Loop does not support two direction at the same time."))
  }, U.prototype._nearestSnap = function (t, i) {
    if (!this.pages.length) return {x: 0, y: 0, pageX: 0, pageY: 0};
    var e = 0;
    if (Math.abs(t - this.absStartX) <= this.snapThresholdX && Math.abs(i - this.absStartY) <= this.snapThresholdY) return this.currentPage;
    t > this.minScrollX ? t = this.minScrollX : t < this.maxScrollX && (t = this.maxScrollX), i > this.minScrollY ? i = this.minScrollY : i < this.maxScrollY && (i = this.maxScrollY);
    for (var s = this.pages.length; e < s; e++) if (t >= this.pages[e][0].cx) {
      t = this.pages[e][0].x;
      break
    }
    s = this.pages[e].length;
    for (var o = 0; o < s; o++) if (i >= this.pages[0][o].cy) {
      i = this.pages[0][o].y;
      break
    }
    return e === this.currentPage.pageX && ((e += this.directionX) < 0 ? e = 0 : e >= this.pages.length && (e = this.pages.length - 1), t = this.pages[e][0].x), o === this.currentPage.pageY && ((o += this.directionY) < 0 ? o = 0 : o >= this.pages[0].length && (o = this.pages[0].length - 1), i = this.pages[0][o].y), {
      x: t,
      y: i,
      pageX: e,
      pageY: o
    }
  }, U.prototype._goToPage = function (t) {
    var i = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 0, e = arguments[2], s = arguments[3],
      o = arguments[4], n = this.options.snap;
    if (n && this.pages && this.pages.length && (s = s || n.easing || I.bounce, t >= this.pages.length ? t = this.pages.length - 1 : t < 0 && (t = 0), this.pages[t])) {
      i >= this.pages[t].length ? i = this.pages[t].length - 1 : i < 0 && (i = 0);
      var r = this.pages[t][i].x, h = this.pages[t][i].y;
      e = void 0 === e ? n.speed || Math.max(Math.max(Math.min(Math.abs(r - this.x), 1e3), Math.min(Math.abs(h - this.y), 1e3)), 300) : e, this.currentPage = {
        x: r,
        y: h,
        pageX: t,
        pageY: i
      }, this.scrollTo(r, h, e, s, o)
    }
  }, U.prototype.goToPage = function (t, i, e, s) {
    var o = this.options.snap;
    if (o && this.pages && this.pages.length) {
      if (o.loop) {
        var n = void 0;
        o._loopX ? ((n = this.pages.length - 2) <= t ? t = n - 1 : t < 0 && (t = 0), t += 1) : ((n = this.pages[0].length - 2) <= i ? i = n - 1 : i < 0 && (i = 0), i += 1)
      }
      this._goToPage(t, i, e, s)
    }
  }, U.prototype.next = function (t, i) {
    if (this.options.snap) {
      var e = this.currentPage.pageX, s = this.currentPage.pageY;
      ++e >= this.pages.length && this.hasVerticalScroll && (e = 0, s++), this._goToPage(e, s, t, i)
    }
  }, U.prototype.prev = function (t, i) {
    if (this.options.snap) {
      var e = this.currentPage.pageX, s = this.currentPage.pageY;
      --e < 0 && this.hasVerticalScroll && (e = 0, s--), this._goToPage(e, s, t, i)
    }
  }, U.prototype.getCurrentPage = function () {
    var t = this.options.snap;
    return t ? t.loop ? t._loopX ? a({}, this.currentPage, {pageX: this.currentPage.pageX - 1}) : a({}, this.currentPage, {pageY: this.currentPage.pageY - 1}) : this.currentPage : null
  }, (V = K).prototype.wheelTo = function () {
    var t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : 0;
    if (this.options.wheel) {
      var i = -t * this.itemHeight;
      this.scrollTo(0, i)
    }
  }, V.prototype.getSelectedIndex = function () {
    return this.options.wheel && this.selectedIndex
  }, V.prototype._initWheel = function () {
    var t = this.options.wheel;
    t.wheelWrapperClass || (t.wheelWrapperClass = "wheel-scroll"), t.wheelItemClass || (t.wheelItemClass = "wheel-item"), t.wheelDisabledItemClass || (t.wheelDisabledItemClass = "wheel-disabled-item"), void 0 === t.selectedIndex && (t.selectedIndex = 0)
  }, V.prototype._findNearestValidWheel = function (t) {
    t = 0 < t ? 0 : t < this.maxScrollY ? this.maxScrollY : t;
    for (var i = this.options.wheel, e = Math.abs(Math.round(-t / this.itemHeight)), s = e, o = this.items; 0 <= e && -1 !== o[e].className.indexOf(i.wheelDisabledItemClass);) e--;
    if (e < 0) for (e = s; e <= o.length - 1 && -1 !== o[e].className.indexOf(i.wheelDisabledItemClass);) e++;
    return e === o.length && (e = s), {index: this.wheelItemsAllDisabled ? -1 : e, y: -e * this.itemHeight}
  }, V.prototype._checkWheelAllDisabled = function () {
    var t = this.options.wheel, i = this.items;
    this.wheelItemsAllDisabled = !0;
    for (var e = 0; e < i.length; e++) if (-1 === i[e].className.indexOf(t.wheelDisabledItemClass)) {
      this.wheelItemsAllDisabled = !1;
      break
    }
  }, (B = K).prototype._initScrollbar = function () {
    var i = this, t = this.options.scrollbar, e = t.fade, s = void 0 === e || e, o = t.interactive,
      n = void 0 !== o && o;
    this.indicators = [];
    var r = void 0;
    this.options.scrollX && (r = {
      el: O("horizontal"),
      direction: "horizontal",
      fade: s,
      interactive: n
    }, this._insertScrollBar(r.el), this.indicators.push(new L(this, r))), this.options.scrollY && (r = {
      el: O("vertical"),
      direction: "vertical",
      fade: s,
      interactive: n
    }, this._insertScrollBar(r.el), this.indicators.push(new L(this, r))), this.on("refresh", function () {
      for (var t = 0; t < i.indicators.length; t++) i.indicators[t].refresh()
    }), s && (this.on("scrollEnd", function () {
      for (var t = 0; t < i.indicators.length; t++) i.indicators[t].fade()
    }), this.on("scrollCancel", function () {
      for (var t = 0; t < i.indicators.length; t++) i.indicators[t].fade()
    }), this.on("scrollStart", function () {
      for (var t = 0; t < i.indicators.length; t++) i.indicators[t].fade(!0)
    }), this.on("beforeScrollStart", function () {
      for (var t = 0; t < i.indicators.length; t++) i.indicators[t].fade(!0, !0)
    })), this.on("destroy", function () {
      i._removeScrollBars()
    })
  }, B.prototype._insertScrollBar = function (t) {
    this.wrapper.appendChild(t)
  }, B.prototype._removeScrollBars = function () {
    for (var t = 0; t < this.indicators.length; t++) this.indicators[t].destroy()
  }, (q = K).prototype._initPullDown = function () {
    this.options.probeType = 3
  }, q.prototype._checkPullDown = function () {
    var t = this.options.pullDownRefresh, i = t.threshold, e = void 0 === i ? 90 : i, s = t.stop,
      o = void 0 === s ? 40 : s;
    return !(-1 !== this.directionY || this.y < e) && (this.pulling || (this.pulling = !0, this.trigger("pullingDown")), this.scrollTo(this.x, o, this.options.bounceTime, I.bounce), this.pulling)
  }, q.prototype.finishPullDown = function () {
    this.pulling = !1, this.resetPosition(this.options.bounceTime, I.bounce)
  }, q.prototype.openPullDown = function () {
    var t = !(0 < arguments.length && void 0 !== arguments[0]) || arguments[0];
    this.options.pullDownRefresh = t, this._initPullDown()
  }, q.prototype.closePullDown = function () {
    this.options.pullDownRefresh = !1
  }, q.prototype.autoPullDownRefresh = function () {
    var t = this.options.pullDownRefresh, i = t.threshold, e = void 0 === i ? 90 : i, s = t.stop,
      o = void 0 === s ? 40 : s;
    this.pulling || (this.pulling = !0, this.scrollTo(this.x, e), this.trigger("pullingDown"), this.scrollTo(this.x, o, this.options.bounceTime, I.bounce))
  }, (Z = K).prototype._initPullUp = function () {
    this.options.probeType = 3, this.pullupWatching = !1, this._watchPullUp()
  }, Z.prototype._watchPullUp = function () {
    this.pullupWatching || (this.pullupWatching = !0, this.on("scroll", this._checkToEnd))
  }, Z.prototype._checkToEnd = function (t) {
    var i = this, e = this.options.pullUpLoad.threshold, s = void 0 === e ? 0 : e;
    1 === this.movingDirectionY && t.y <= this.maxScrollY + s && (this.once("scrollEnd", function () {
      i.pullupWatching = !1
    }), this.trigger("pullingUp"), this.off("scroll", this._checkToEnd))
  }, Z.prototype.finishPullUp = function () {
    var t = this;
    this.pullupWatching ? this.once("scrollEnd", function () {
      t._watchPullUp()
    }) : this._watchPullUp()
  }, Z.prototype.openPullUp = function () {
    var t = !(0 < arguments.length && void 0 !== arguments[0]) || arguments[0];
    this.options.pullUpLoad = t, this._initPullUp()
  }, Z.prototype.closePullUp = function () {
    this.options.pullUpLoad = !1, this.pullupWatching && (this.pullupWatching = !1, this.off("scroll", this._checkToEnd))
  }, (j = K).prototype._initMouseWheel = function () {
    var t = this;
    this._handleMouseWheelEvent(p), this.on("destroy", function () {
      clearTimeout(t.mouseWheelTimer), clearTimeout(t.mouseWheelEndTimer), t._handleMouseWheelEvent(u)
    }), this.firstWheelOpreation = !0
  }, j.prototype._handleMouseWheelEvent = function (t) {
    t(this.wrapper, "wheel", this), t(this.wrapper, "mousewheel", this), t(this.wrapper, "DOMMouseScroll", this)
  }, j.prototype._onMouseWheel = function (t) {
    var i = this;
    if (this.enabled) {
      t.preventDefault(), this.options.stopPropagation && t.stopPropagation(), this.firstWheelOpreation && this.trigger("scrollStart"), this.firstWheelOpreation = !1;
      var e = this.options.mouseWheel, s = e.speed, o = void 0 === s ? 20 : s, n = e.invert, r = void 0 !== n && n,
        h = e.easeTime, a = void 0 === h ? 300 : h;
      clearTimeout(this.mouseWheelTimer), this.mouseWheelTimer = setTimeout(function () {
        i.options.snap || a || i.trigger("scrollEnd", {x: i.x, y: i.y}), i.firstWheelOpreation = !0
      }, 400);
      var l = void 0, c = void 0;
      switch (!0) {
        case"deltaX" in t:
          c = 1 === t.deltaMode ? (l = -t.deltaX * o, -t.deltaY * o) : (l = -t.deltaX, -t.deltaY);
          break;
        case"wheelDeltaX" in t:
          l = t.wheelDeltaX / 120 * o, c = t.wheelDeltaY / 120 * o;
          break;
        case"wheelDelta" in t:
          l = c = t.wheelDelta / 120 * o;
          break;
        case"detail" in t:
          l = c = -t.detail / 3 * o;
          break;
        default:
          return
      }
      var p = r ? -1 : 1;
      l *= p, c *= p, this.hasVerticalScroll || (l = c, c = 0);
      var d = void 0, u = void 0;
      if (this.options.snap) return d = this.currentPage.pageX, u = this.currentPage.pageY, 0 < l ? d-- : l < 0 && d++, 0 < c ? u-- : c < 0 && u++, void this._goToPage(d, u);
      d = this.x + Math.round(this.hasHorizontalScroll ? l : 0), u = this.y + Math.round(this.hasVerticalScroll ? c : 0), this.movingDirectionX = this.directionX = 0 < l ? -1 : l < 0 ? 1 : 0, this.movingDirectionY = this.directionY = 0 < c ? -1 : c < 0 ? 1 : 0, d > this.minScrollX ? d = this.minScrollX : d < this.maxScrollX && (d = this.maxScrollX), u > this.minScrollY ? u = this.minScrollY : u < this.maxScrollY && (u = this.maxScrollY);
      var m = this.y === u;
      this.scrollTo(d, u, a, I.swipe), this.trigger("scroll", {
        x: this.x,
        y: this.y
      }), clearTimeout(this.mouseWheelEndTimer), m && (this.mouseWheelEndTimer = setTimeout(function () {
        i.trigger("scrollEnd", {x: i.x, y: i.y})
      }, a))
    }
  }, (G = K).prototype._initZoom = function () {
    var t = this.options.zoom, i = t.start, e = void 0 === i ? 1 : i, s = t.min, o = void 0 === s ? 1 : s, n = t.max,
      r = void 0 === n ? 4 : n;
    this.scale = Math.min(Math.max(e, o), r), this.setScale(this.scale), this.scrollerStyle[_.transformOrigin] = "0 0"
  }, G.prototype._zoomTo = function (t, i, e, s) {
    this.scaled = !0;
    var o = t / (s || this.scale);
    this.setScale(t), this.refresh();
    var n = Math.round(this.startX - (i - this.relativeX) * (o - 1)),
      r = Math.round(this.startY - (e - this.relativeY) * (o - 1));
    n > this.minScrollX ? n = this.minScrollX : n < this.maxScrollX && (n = this.maxScrollX), r > this.minScrollY ? r = this.minScrollY : r < this.maxScrollY && (r = this.maxScrollY), this.x === n && this.y === r || this.scrollTo(n, r, this.options.bounceTime), this.scaled = !1
  }, G.prototype.zoomTo = function (t, i, e) {
    var s = f(this.wrapper), o = s.left, n = s.top, r = i + o - this.x, h = e + n - this.y;
    this._zoomTo(t, r, h)
  }, G.prototype._zoomStart = function (t) {
    var i = t.touches[0], e = t.touches[1], s = Math.abs(i.pageX - e.pageX), o = Math.abs(i.pageY - e.pageY);
    this.startDistance = d(s, o), this.startScale = this.scale;
    var n = f(this.wrapper), r = n.left, h = n.top;
    this.originX = Math.abs(i.pageX + e.pageX) / 2 + r - this.x, this.originY = Math.abs(i.pageY + e.pageY) / 2 + h - this.y, this.trigger("zoomStart")
  }, G.prototype._zoom = function (t) {
    if (this.enabled && !this.destroyed && Y[t.type] === this.initiated) {
      this.options.preventDefault && t.preventDefault(), this.options.stopPropagation && t.stopPropagation();
      var i = t.touches[0], e = t.touches[1],
        s = d(Math.abs(i.pageX - e.pageX), Math.abs(i.pageY - e.pageY)) / this.startDistance * this.startScale;
      this.scaled = !0;
      var o = this.options.zoom, n = o.min, r = void 0 === n ? 1 : n, h = o.max, a = void 0 === h ? 4 : h;
      s < r ? s = .5 * r * Math.pow(2, s / r) : a < s && (s = 2 * a * Math.pow(.5, a / s));
      var l = s / this.startScale, c = this.startX - (this.originX - this.relativeX) * (l - 1),
        p = this.startY - (this.originY - this.relativeY) * (l - 1);
      this.setScale(s), this.scrollTo(c, p, 0)
    }
  }, G.prototype._zoomEnd = function (t) {
    if (this.enabled && !this.destroyed && Y[t.type] === this.initiated) {
      this.options.preventDefault && t.preventDefault(), this.options.stopPropagation && t.stopPropagation(), this.isInTransition = !1, this.isAnimating = !1, this.initiated = 0;
      var i = this.options.zoom, e = i.min, s = void 0 === e ? 1 : e, o = i.max, n = void 0 === o ? 4 : o,
        r = this.scale > n ? n : this.scale < s ? s : this.scale;
      this._zoomTo(r, this.originX, this.originY, this.startScale), this.trigger("zoomEnd")
    }
  }, K.prototype._initInfinite = function () {
    this.options.probeType = 3, this.maxScrollY = -2e3, this.infiniteScroller = new J(this, this.options.infinity)
  }, K.Version = "1.15.2", K
});