Enjoy Instagram feed on website with WordPress Widget and Shortcode - Version 6.0.0

Version Description

Note: The premium version can be activated by purchasing the new addon plugin and it will no longer be necessary to deactivate the free version. * Added new carousel library * Fix: wrong selected tab after saving the shortcode options * Bug fix

Download this release

Release Info

Developer designemotions
Plugin Icon 128x128 Enjoy Instagram feed on website with WordPress Widget and Shortcode
Version 6.0.0
Comparing to
See all releases

Code changes from version 5.3.1 to 6.0.0

assets/css/admin.css CHANGED
@@ -1443,3 +1443,18 @@ input[type="radio"] {
1443
  display: inline-block;
1444
  margin-left: 15px;
1445
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1443
  display: inline-block;
1444
  margin-left: 15px;
1445
  }
1446
+
1447
+ #enjoy_user_block.disabled {
1448
+ opacity: 0.6;
1449
+ }
1450
+
1451
+ #enjoy_user_block .disabled-tag {
1452
+ color: #a0a5aa;
1453
+ background: #f7f7f7;
1454
+ padding: 5px;
1455
+ border-radius: 5px;
1456
+ border: 1px solid #ddd;
1457
+ font-size: 12px;
1458
+ display: inline-block;
1459
+ margin-left: 15px;
1460
+ }
assets/css/animate.css ADDED
@@ -0,0 +1,3297 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @charset "UTF-8";
2
+
3
+ /*!
4
+ Animate.css - http://daneden.me/animate
5
+ Licensed under the MIT license - http://opensource.org/licenses/MIT
6
+
7
+ Copyright (c) 2013 Daniel Eden
8
+ */
9
+
10
+ .animated {
11
+ -webkit-animation-duration: 1s;
12
+ animation-duration: 1s;
13
+ -webkit-animation-fill-mode: both;
14
+ animation-fill-mode: both;
15
+ }
16
+
17
+ .animated.infinite {
18
+ -webkit-animation-iteration-count: infinite;
19
+ animation-iteration-count: infinite;
20
+ }
21
+
22
+ .animated.hinge {
23
+ -webkit-animation-duration: 2s;
24
+ animation-duration: 2s;
25
+ }
26
+
27
+ @-webkit-keyframes bounce {
28
+ 0%, 20%, 50%, 80%, 100% {
29
+ -webkit-transform: translateY(0);
30
+ transform: translateY(0);
31
+ }
32
+
33
+ 40% {
34
+ -webkit-transform: translateY(-30px);
35
+ transform: translateY(-30px);
36
+ }
37
+
38
+ 60% {
39
+ -webkit-transform: translateY(-15px);
40
+ transform: translateY(-15px);
41
+ }
42
+ }
43
+
44
+ @keyframes bounce {
45
+ 0%, 20%, 50%, 80%, 100% {
46
+ -webkit-transform: translateY(0);
47
+ -ms-transform: translateY(0);
48
+ transform: translateY(0);
49
+ }
50
+
51
+ 40% {
52
+ -webkit-transform: translateY(-30px);
53
+ -ms-transform: translateY(-30px);
54
+ transform: translateY(-30px);
55
+ }
56
+
57
+ 60% {
58
+ -webkit-transform: translateY(-15px);
59
+ -ms-transform: translateY(-15px);
60
+ transform: translateY(-15px);
61
+ }
62
+ }
63
+
64
+ .bounce {
65
+ -webkit-animation-name: bounce;
66
+ animation-name: bounce;
67
+ }
68
+
69
+ @-webkit-keyframes flash {
70
+ 0%, 50%, 100% {
71
+ opacity: 1;
72
+ }
73
+
74
+ 25%, 75% {
75
+ opacity: 0;
76
+ }
77
+ }
78
+
79
+ @keyframes flash {
80
+ 0%, 50%, 100% {
81
+ opacity: 1;
82
+ }
83
+
84
+ 25%, 75% {
85
+ opacity: 0;
86
+ }
87
+ }
88
+
89
+ .flash {
90
+ -webkit-animation-name: flash;
91
+ animation-name: flash;
92
+ }
93
+
94
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
95
+
96
+ @-webkit-keyframes pulse {
97
+ 0% {
98
+ -webkit-transform: scale(1);
99
+ transform: scale(1);
100
+ }
101
+
102
+ 50% {
103
+ -webkit-transform: scale(1.1);
104
+ transform: scale(1.1);
105
+ }
106
+
107
+ 100% {
108
+ -webkit-transform: scale(1);
109
+ transform: scale(1);
110
+ }
111
+ }
112
+
113
+ @keyframes pulse {
114
+ 0% {
115
+ -webkit-transform: scale(1);
116
+ -ms-transform: scale(1);
117
+ transform: scale(1);
118
+ }
119
+
120
+ 50% {
121
+ -webkit-transform: scale(1.1);
122
+ -ms-transform: scale(1.1);
123
+ transform: scale(1.1);
124
+ }
125
+
126
+ 100% {
127
+ -webkit-transform: scale(1);
128
+ -ms-transform: scale(1);
129
+ transform: scale(1);
130
+ }
131
+ }
132
+
133
+ .pulse {
134
+ -webkit-animation-name: pulse;
135
+ animation-name: pulse;
136
+ }
137
+
138
+ @-webkit-keyframes rubberBand {
139
+ 0% {
140
+ -webkit-transform: scale(1);
141
+ transform: scale(1);
142
+ }
143
+
144
+ 30% {
145
+ -webkit-transform: scaleX(1.25) scaleY(0.75);
146
+ transform: scaleX(1.25) scaleY(0.75);
147
+ }
148
+
149
+ 40% {
150
+ -webkit-transform: scaleX(0.75) scaleY(1.25);
151
+ transform: scaleX(0.75) scaleY(1.25);
152
+ }
153
+
154
+ 60% {
155
+ -webkit-transform: scaleX(1.15) scaleY(0.85);
156
+ transform: scaleX(1.15) scaleY(0.85);
157
+ }
158
+
159
+ 100% {
160
+ -webkit-transform: scale(1);
161
+ transform: scale(1);
162
+ }
163
+ }
164
+
165
+ @keyframes rubberBand {
166
+ 0% {
167
+ -webkit-transform: scale(1);
168
+ -ms-transform: scale(1);
169
+ transform: scale(1);
170
+ }
171
+
172
+ 30% {
173
+ -webkit-transform: scaleX(1.25) scaleY(0.75);
174
+ -ms-transform: scaleX(1.25) scaleY(0.75);
175
+ transform: scaleX(1.25) scaleY(0.75);
176
+ }
177
+
178
+ 40% {
179
+ -webkit-transform: scaleX(0.75) scaleY(1.25);
180
+ -ms-transform: scaleX(0.75) scaleY(1.25);
181
+ transform: scaleX(0.75) scaleY(1.25);
182
+ }
183
+
184
+ 60% {
185
+ -webkit-transform: scaleX(1.15) scaleY(0.85);
186
+ -ms-transform: scaleX(1.15) scaleY(0.85);
187
+ transform: scaleX(1.15) scaleY(0.85);
188
+ }
189
+
190
+ 100% {
191
+ -webkit-transform: scale(1);
192
+ -ms-transform: scale(1);
193
+ transform: scale(1);
194
+ }
195
+ }
196
+
197
+ .rubberBand {
198
+ -webkit-animation-name: rubberBand;
199
+ animation-name: rubberBand;
200
+ }
201
+
202
+ @-webkit-keyframes shake {
203
+ 0%, 100% {
204
+ -webkit-transform: translateX(0);
205
+ transform: translateX(0);
206
+ }
207
+
208
+ 10%, 30%, 50%, 70%, 90% {
209
+ -webkit-transform: translateX(-10px);
210
+ transform: translateX(-10px);
211
+ }
212
+
213
+ 20%, 40%, 60%, 80% {
214
+ -webkit-transform: translateX(10px);
215
+ transform: translateX(10px);
216
+ }
217
+ }
218
+
219
+ @keyframes shake {
220
+ 0%, 100% {
221
+ -webkit-transform: translateX(0);
222
+ -ms-transform: translateX(0);
223
+ transform: translateX(0);
224
+ }
225
+
226
+ 10%, 30%, 50%, 70%, 90% {
227
+ -webkit-transform: translateX(-10px);
228
+ -ms-transform: translateX(-10px);
229
+ transform: translateX(-10px);
230
+ }
231
+
232
+ 20%, 40%, 60%, 80% {
233
+ -webkit-transform: translateX(10px);
234
+ -ms-transform: translateX(10px);
235
+ transform: translateX(10px);
236
+ }
237
+ }
238
+
239
+ .shake {
240
+ -webkit-animation-name: shake;
241
+ animation-name: shake;
242
+ }
243
+
244
+ @-webkit-keyframes swing {
245
+ 20% {
246
+ -webkit-transform: rotate(15deg);
247
+ transform: rotate(15deg);
248
+ }
249
+
250
+ 40% {
251
+ -webkit-transform: rotate(-10deg);
252
+ transform: rotate(-10deg);
253
+ }
254
+
255
+ 60% {
256
+ -webkit-transform: rotate(5deg);
257
+ transform: rotate(5deg);
258
+ }
259
+
260
+ 80% {
261
+ -webkit-transform: rotate(-5deg);
262
+ transform: rotate(-5deg);
263
+ }
264
+
265
+ 100% {
266
+ -webkit-transform: rotate(0deg);
267
+ transform: rotate(0deg);
268
+ }
269
+ }
270
+
271
+ @keyframes swing {
272
+ 20% {
273
+ -webkit-transform: rotate(15deg);
274
+ -ms-transform: rotate(15deg);
275
+ transform: rotate(15deg);
276
+ }
277
+
278
+ 40% {
279
+ -webkit-transform: rotate(-10deg);
280
+ -ms-transform: rotate(-10deg);
281
+ transform: rotate(-10deg);
282
+ }
283
+
284
+ 60% {
285
+ -webkit-transform: rotate(5deg);
286
+ -ms-transform: rotate(5deg);
287
+ transform: rotate(5deg);
288
+ }
289
+
290
+ 80% {
291
+ -webkit-transform: rotate(-5deg);
292
+ -ms-transform: rotate(-5deg);
293
+ transform: rotate(-5deg);
294
+ }
295
+
296
+ 100% {
297
+ -webkit-transform: rotate(0deg);
298
+ -ms-transform: rotate(0deg);
299
+ transform: rotate(0deg);
300
+ }
301
+ }
302
+
303
+ .swing {
304
+ -webkit-transform-origin: top center;
305
+ -ms-transform-origin: top center;
306
+ transform-origin: top center;
307
+ -webkit-animation-name: swing;
308
+ animation-name: swing;
309
+ }
310
+
311
+ @-webkit-keyframes tada {
312
+ 0% {
313
+ -webkit-transform: scale(1);
314
+ transform: scale(1);
315
+ }
316
+
317
+ 10%, 20% {
318
+ -webkit-transform: scale(0.9) rotate(-3deg);
319
+ transform: scale(0.9) rotate(-3deg);
320
+ }
321
+
322
+ 30%, 50%, 70%, 90% {
323
+ -webkit-transform: scale(1.1) rotate(3deg);
324
+ transform: scale(1.1) rotate(3deg);
325
+ }
326
+
327
+ 40%, 60%, 80% {
328
+ -webkit-transform: scale(1.1) rotate(-3deg);
329
+ transform: scale(1.1) rotate(-3deg);
330
+ }
331
+
332
+ 100% {
333
+ -webkit-transform: scale(1) rotate(0);
334
+ transform: scale(1) rotate(0);
335
+ }
336
+ }
337
+
338
+ @keyframes tada {
339
+ 0% {
340
+ -webkit-transform: scale(1);
341
+ -ms-transform: scale(1);
342
+ transform: scale(1);
343
+ }
344
+
345
+ 10%, 20% {
346
+ -webkit-transform: scale(0.9) rotate(-3deg);
347
+ -ms-transform: scale(0.9) rotate(-3deg);
348
+ transform: scale(0.9) rotate(-3deg);
349
+ }
350
+
351
+ 30%, 50%, 70%, 90% {
352
+ -webkit-transform: scale(1.1) rotate(3deg);
353
+ -ms-transform: scale(1.1) rotate(3deg);
354
+ transform: scale(1.1) rotate(3deg);
355
+ }
356
+
357
+ 40%, 60%, 80% {
358
+ -webkit-transform: scale(1.1) rotate(-3deg);
359
+ -ms-transform: scale(1.1) rotate(-3deg);
360
+ transform: scale(1.1) rotate(-3deg);
361
+ }
362
+
363
+ 100% {
364
+ -webkit-transform: scale(1) rotate(0);
365
+ -ms-transform: scale(1) rotate(0);
366
+ transform: scale(1) rotate(0);
367
+ }
368
+ }
369
+
370
+ .tada {
371
+ -webkit-animation-name: tada;
372
+ animation-name: tada;
373
+ }
374
+
375
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
376
+
377
+ @-webkit-keyframes wobble {
378
+ 0% {
379
+ -webkit-transform: translateX(0%);
380
+ transform: translateX(0%);
381
+ }
382
+
383
+ 15% {
384
+ -webkit-transform: translateX(-25%) rotate(-5deg);
385
+ transform: translateX(-25%) rotate(-5deg);
386
+ }
387
+
388
+ 30% {
389
+ -webkit-transform: translateX(20%) rotate(3deg);
390
+ transform: translateX(20%) rotate(3deg);
391
+ }
392
+
393
+ 45% {
394
+ -webkit-transform: translateX(-15%) rotate(-3deg);
395
+ transform: translateX(-15%) rotate(-3deg);
396
+ }
397
+
398
+ 60% {
399
+ -webkit-transform: translateX(10%) rotate(2deg);
400
+ transform: translateX(10%) rotate(2deg);
401
+ }
402
+
403
+ 75% {
404
+ -webkit-transform: translateX(-5%) rotate(-1deg);
405
+ transform: translateX(-5%) rotate(-1deg);
406
+ }
407
+
408
+ 100% {
409
+ -webkit-transform: translateX(0%);
410
+ transform: translateX(0%);
411
+ }
412
+ }
413
+
414
+ @keyframes wobble {
415
+ 0% {
416
+ -webkit-transform: translateX(0%);
417
+ -ms-transform: translateX(0%);
418
+ transform: translateX(0%);
419
+ }
420
+
421
+ 15% {
422
+ -webkit-transform: translateX(-25%) rotate(-5deg);
423
+ -ms-transform: translateX(-25%) rotate(-5deg);
424
+ transform: translateX(-25%) rotate(-5deg);
425
+ }
426
+
427
+ 30% {
428
+ -webkit-transform: translateX(20%) rotate(3deg);
429
+ -ms-transform: translateX(20%) rotate(3deg);
430
+ transform: translateX(20%) rotate(3deg);
431
+ }
432
+
433
+ 45% {
434
+ -webkit-transform: translateX(-15%) rotate(-3deg);
435
+ -ms-transform: translateX(-15%) rotate(-3deg);
436
+ transform: translateX(-15%) rotate(-3deg);
437
+ }
438
+
439
+ 60% {
440
+ -webkit-transform: translateX(10%) rotate(2deg);
441
+ -ms-transform: translateX(10%) rotate(2deg);
442
+ transform: translateX(10%) rotate(2deg);
443
+ }
444
+
445
+ 75% {
446
+ -webkit-transform: translateX(-5%) rotate(-1deg);
447
+ -ms-transform: translateX(-5%) rotate(-1deg);
448
+ transform: translateX(-5%) rotate(-1deg);
449
+ }
450
+
451
+ 100% {
452
+ -webkit-transform: translateX(0%);
453
+ -ms-transform: translateX(0%);
454
+ transform: translateX(0%);
455
+ }
456
+ }
457
+
458
+ .wobble {
459
+ -webkit-animation-name: wobble;
460
+ animation-name: wobble;
461
+ }
462
+
463
+ @-webkit-keyframes bounceIn {
464
+ 0% {
465
+ opacity: 0;
466
+ -webkit-transform: scale(.3);
467
+ transform: scale(.3);
468
+ }
469
+
470
+ 50% {
471
+ opacity: 1;
472
+ -webkit-transform: scale(1.05);
473
+ transform: scale(1.05);
474
+ }
475
+
476
+ 70% {
477
+ -webkit-transform: scale(.9);
478
+ transform: scale(.9);
479
+ }
480
+
481
+ 100% {
482
+ opacity: 1;
483
+ -webkit-transform: scale(1);
484
+ transform: scale(1);
485
+ }
486
+ }
487
+
488
+ @keyframes bounceIn {
489
+ 0% {
490
+ opacity: 0;
491
+ -webkit-transform: scale(.3);
492
+ -ms-transform: scale(.3);
493
+ transform: scale(.3);
494
+ }
495
+
496
+ 50% {
497
+ opacity: 1;
498
+ -webkit-transform: scale(1.05);
499
+ -ms-transform: scale(1.05);
500
+ transform: scale(1.05);
501
+ }
502
+
503
+ 70% {
504
+ -webkit-transform: scale(.9);
505
+ -ms-transform: scale(.9);
506
+ transform: scale(.9);
507
+ }
508
+
509
+ 100% {
510
+ opacity: 1;
511
+ -webkit-transform: scale(1);
512
+ -ms-transform: scale(1);
513
+ transform: scale(1);
514
+ }
515
+ }
516
+
517
+ .bounceIn {
518
+ -webkit-animation-name: bounceIn;
519
+ animation-name: bounceIn;
520
+ }
521
+
522
+ @-webkit-keyframes bounceInDown {
523
+ 0% {
524
+ opacity: 0;
525
+ -webkit-transform: translateY(-2000px);
526
+ transform: translateY(-2000px);
527
+ }
528
+
529
+ 60% {
530
+ opacity: 1;
531
+ -webkit-transform: translateY(30px);
532
+ transform: translateY(30px);
533
+ }
534
+
535
+ 80% {
536
+ -webkit-transform: translateY(-10px);
537
+ transform: translateY(-10px);
538
+ }
539
+
540
+ 100% {
541
+ -webkit-transform: translateY(0);
542
+ transform: translateY(0);
543
+ }
544
+ }
545
+
546
+ @keyframes bounceInDown {
547
+ 0% {
548
+ opacity: 0;
549
+ -webkit-transform: translateY(-2000px);
550
+ -ms-transform: translateY(-2000px);
551
+ transform: translateY(-2000px);
552
+ }
553
+
554
+ 60% {
555
+ opacity: 1;
556
+ -webkit-transform: translateY(30px);
557
+ -ms-transform: translateY(30px);
558
+ transform: translateY(30px);
559
+ }
560
+
561
+ 80% {
562
+ -webkit-transform: translateY(-10px);
563
+ -ms-transform: translateY(-10px);
564
+ transform: translateY(-10px);
565
+ }
566
+
567
+ 100% {
568
+ -webkit-transform: translateY(0);
569
+ -ms-transform: translateY(0);
570
+ transform: translateY(0);
571
+ }
572
+ }
573
+
574
+ .bounceInDown {
575
+ -webkit-animation-name: bounceInDown;
576
+ animation-name: bounceInDown;
577
+ }
578
+
579
+ @-webkit-keyframes bounceInLeft {
580
+ 0% {
581
+ opacity: 0;
582
+ -webkit-transform: translateX(-2000px);
583
+ transform: translateX(-2000px);
584
+ }
585
+
586
+ 60% {
587
+ opacity: 1;
588
+ -webkit-transform: translateX(30px);
589
+ transform: translateX(30px);
590
+ }
591
+
592
+ 80% {
593
+ -webkit-transform: translateX(-10px);
594
+ transform: translateX(-10px);
595
+ }
596
+
597
+ 100% {
598
+ -webkit-transform: translateX(0);
599
+ transform: translateX(0);
600
+ }
601
+ }
602
+
603
+ @keyframes bounceInLeft {
604
+ 0% {
605
+ opacity: 0;
606
+ -webkit-transform: translateX(-2000px);
607
+ -ms-transform: translateX(-2000px);
608
+ transform: translateX(-2000px);
609
+ }
610
+
611
+ 60% {
612
+ opacity: 1;
613
+ -webkit-transform: translateX(30px);
614
+ -ms-transform: translateX(30px);
615
+ transform: translateX(30px);
616
+ }
617
+
618
+ 80% {
619
+ -webkit-transform: translateX(-10px);
620
+ -ms-transform: translateX(-10px);
621
+ transform: translateX(-10px);
622
+ }
623
+
624
+ 100% {
625
+ -webkit-transform: translateX(0);
626
+ -ms-transform: translateX(0);
627
+ transform: translateX(0);
628
+ }
629
+ }
630
+
631
+ .bounceInLeft {
632
+ -webkit-animation-name: bounceInLeft;
633
+ animation-name: bounceInLeft;
634
+ }
635
+
636
+ @-webkit-keyframes bounceInRight {
637
+ 0% {
638
+ opacity: 0;
639
+ -webkit-transform: translateX(2000px);
640
+ transform: translateX(2000px);
641
+ }
642
+
643
+ 60% {
644
+ opacity: 1;
645
+ -webkit-transform: translateX(-30px);
646
+ transform: translateX(-30px);
647
+ }
648
+
649
+ 80% {
650
+ -webkit-transform: translateX(10px);
651
+ transform: translateX(10px);
652
+ }
653
+
654
+ 100% {
655
+ -webkit-transform: translateX(0);
656
+ transform: translateX(0);
657
+ }
658
+ }
659
+
660
+ @keyframes bounceInRight {
661
+ 0% {
662
+ opacity: 0;
663
+ -webkit-transform: translateX(2000px);
664
+ -ms-transform: translateX(2000px);
665
+ transform: translateX(2000px);
666
+ }
667
+
668
+ 60% {
669
+ opacity: 1;
670
+ -webkit-transform: translateX(-30px);
671
+ -ms-transform: translateX(-30px);
672
+ transform: translateX(-30px);
673
+ }
674
+
675
+ 80% {
676
+ -webkit-transform: translateX(10px);
677
+ -ms-transform: translateX(10px);
678
+ transform: translateX(10px);
679
+ }
680
+
681
+ 100% {
682
+ -webkit-transform: translateX(0);
683
+ -ms-transform: translateX(0);
684
+ transform: translateX(0);
685
+ }
686
+ }
687
+
688
+ .bounceInRight {
689
+ -webkit-animation-name: bounceInRight;
690
+ animation-name: bounceInRight;
691
+ }
692
+
693
+ @-webkit-keyframes bounceInUp {
694
+ 0% {
695
+ opacity: 0;
696
+ -webkit-transform: translateY(2000px);
697
+ transform: translateY(2000px);
698
+ }
699
+
700
+ 60% {
701
+ opacity: 1;
702
+ -webkit-transform: translateY(-30px);
703
+ transform: translateY(-30px);
704
+ }
705
+
706
+ 80% {
707
+ -webkit-transform: translateY(10px);
708
+ transform: translateY(10px);
709
+ }
710
+
711
+ 100% {
712
+ -webkit-transform: translateY(0);
713
+ transform: translateY(0);
714
+ }
715
+ }
716
+
717
+ @keyframes bounceInUp {
718
+ 0% {
719
+ opacity: 0;
720
+ -webkit-transform: translateY(2000px);
721
+ -ms-transform: translateY(2000px);
722
+ transform: translateY(2000px);
723
+ }
724
+
725
+ 60% {
726
+ opacity: 1;
727
+ -webkit-transform: translateY(-30px);
728
+ -ms-transform: translateY(-30px);
729
+ transform: translateY(-30px);
730
+ }
731
+
732
+ 80% {
733
+ -webkit-transform: translateY(10px);
734
+ -ms-transform: translateY(10px);
735
+ transform: translateY(10px);
736
+ }
737
+
738
+ 100% {
739
+ -webkit-transform: translateY(0);
740
+ -ms-transform: translateY(0);
741
+ transform: translateY(0);
742
+ }
743
+ }
744
+
745
+ .bounceInUp {
746
+ -webkit-animation-name: bounceInUp;
747
+ animation-name: bounceInUp;
748
+ }
749
+
750
+ @-webkit-keyframes bounceOut {
751
+ 0% {
752
+ -webkit-transform: scale(1);
753
+ transform: scale(1);
754
+ }
755
+
756
+ 25% {
757
+ -webkit-transform: scale(.95);
758
+ transform: scale(.95);
759
+ }
760
+
761
+ 50% {
762
+ opacity: 1;
763
+ -webkit-transform: scale(1.1);
764
+ transform: scale(1.1);
765
+ }
766
+
767
+ 100% {
768
+ opacity: 0;
769
+ -webkit-transform: scale(.3);
770
+ transform: scale(.3);
771
+ }
772
+ }
773
+
774
+ @keyframes bounceOut {
775
+ 0% {
776
+ -webkit-transform: scale(1);
777
+ -ms-transform: scale(1);
778
+ transform: scale(1);
779
+ }
780
+
781
+ 25% {
782
+ -webkit-transform: scale(.95);
783
+ -ms-transform: scale(.95);
784
+ transform: scale(.95);
785
+ }
786
+
787
+ 50% {
788
+ opacity: 1;
789
+ -webkit-transform: scale(1.1);
790
+ -ms-transform: scale(1.1);
791
+ transform: scale(1.1);
792
+ }
793
+
794
+ 100% {
795
+ opacity: 0;
796
+ -webkit-transform: scale(.3);
797
+ -ms-transform: scale(.3);
798
+ transform: scale(.3);
799
+ }
800
+ }
801
+
802
+ .bounceOut {
803
+ -webkit-animation-name: bounceOut;
804
+ animation-name: bounceOut;
805
+ }
806
+
807
+ @-webkit-keyframes bounceOutDown {
808
+ 0% {
809
+ -webkit-transform: translateY(0);
810
+ transform: translateY(0);
811
+ }
812
+
813
+ 20% {
814
+ opacity: 1;
815
+ -webkit-transform: translateY(-20px);
816
+ transform: translateY(-20px);
817
+ }
818
+
819
+ 100% {
820
+ opacity: 0;
821
+ -webkit-transform: translateY(2000px);
822
+ transform: translateY(2000px);
823
+ }
824
+ }
825
+
826
+ @keyframes bounceOutDown {
827
+ 0% {
828
+ -webkit-transform: translateY(0);
829
+ -ms-transform: translateY(0);
830
+ transform: translateY(0);
831
+ }
832
+
833
+ 20% {
834
+ opacity: 1;
835
+ -webkit-transform: translateY(-20px);
836
+ -ms-transform: translateY(-20px);
837
+ transform: translateY(-20px);
838
+ }
839
+
840
+ 100% {
841
+ opacity: 0;
842
+ -webkit-transform: translateY(2000px);
843
+ -ms-transform: translateY(2000px);
844
+ transform: translateY(2000px);
845
+ }
846
+ }
847
+
848
+ .bounceOutDown {
849
+ -webkit-animation-name: bounceOutDown;
850
+ animation-name: bounceOutDown;
851
+ }
852
+
853
+ @-webkit-keyframes bounceOutLeft {
854
+ 0% {
855
+ -webkit-transform: translateX(0);
856
+ transform: translateX(0);
857
+ }
858
+
859
+ 20% {
860
+ opacity: 1;
861
+ -webkit-transform: translateX(20px);
862
+ transform: translateX(20px);
863
+ }
864
+
865
+ 100% {
866
+ opacity: 0;
867
+ -webkit-transform: translateX(-2000px);
868
+ transform: translateX(-2000px);
869
+ }
870
+ }
871
+
872
+ @keyframes bounceOutLeft {
873
+ 0% {
874
+ -webkit-transform: translateX(0);
875
+ -ms-transform: translateX(0);
876
+ transform: translateX(0);
877
+ }
878
+
879
+ 20% {
880
+ opacity: 1;
881
+ -webkit-transform: translateX(20px);
882
+ -ms-transform: translateX(20px);
883
+ transform: translateX(20px);
884
+ }
885
+
886
+ 100% {
887
+ opacity: 0;
888
+ -webkit-transform: translateX(-2000px);
889
+ -ms-transform: translateX(-2000px);
890
+ transform: translateX(-2000px);
891
+ }
892
+ }
893
+
894
+ .bounceOutLeft {
895
+ -webkit-animation-name: bounceOutLeft;
896
+ animation-name: bounceOutLeft;
897
+ }
898
+
899
+ @-webkit-keyframes bounceOutRight {
900
+ 0% {
901
+ -webkit-transform: translateX(0);
902
+ transform: translateX(0);
903
+ }
904
+
905
+ 20% {
906
+ opacity: 1;
907
+ -webkit-transform: translateX(-20px);
908
+ transform: translateX(-20px);
909
+ }
910
+
911
+ 100% {
912
+ opacity: 0;
913
+ -webkit-transform: translateX(2000px);
914
+ transform: translateX(2000px);
915
+ }
916
+ }
917
+
918
+ @keyframes bounceOutRight {
919
+ 0% {
920
+ -webkit-transform: translateX(0);
921
+ -ms-transform: translateX(0);
922
+ transform: translateX(0);
923
+ }
924
+
925
+ 20% {
926
+ opacity: 1;
927
+ -webkit-transform: translateX(-20px);
928
+ -ms-transform: translateX(-20px);
929
+ transform: translateX(-20px);
930
+ }
931
+
932
+ 100% {
933
+ opacity: 0;
934
+ -webkit-transform: translateX(2000px);
935
+ -ms-transform: translateX(2000px);
936
+ transform: translateX(2000px);
937
+ }
938
+ }
939
+
940
+ .bounceOutRight {
941
+ -webkit-animation-name: bounceOutRight;
942
+ animation-name: bounceOutRight;
943
+ }
944
+
945
+ @-webkit-keyframes bounceOutUp {
946
+ 0% {
947
+ -webkit-transform: translateY(0);
948
+ transform: translateY(0);
949
+ }
950
+
951
+ 20% {
952
+ opacity: 1;
953
+ -webkit-transform: translateY(20px);
954
+ transform: translateY(20px);
955
+ }
956
+
957
+ 100% {
958
+ opacity: 0;
959
+ -webkit-transform: translateY(-2000px);
960
+ transform: translateY(-2000px);
961
+ }
962
+ }
963
+
964
+ @keyframes bounceOutUp {
965
+ 0% {
966
+ -webkit-transform: translateY(0);
967
+ -ms-transform: translateY(0);
968
+ transform: translateY(0);
969
+ }
970
+
971
+ 20% {
972
+ opacity: 1;
973
+ -webkit-transform: translateY(20px);
974
+ -ms-transform: translateY(20px);
975
+ transform: translateY(20px);
976
+ }
977
+
978
+ 100% {
979
+ opacity: 0;
980
+ -webkit-transform: translateY(-2000px);
981
+ -ms-transform: translateY(-2000px);
982
+ transform: translateY(-2000px);
983
+ }
984
+ }
985
+
986
+ .bounceOutUp {
987
+ -webkit-animation-name: bounceOutUp;
988
+ animation-name: bounceOutUp;
989
+ }
990
+
991
+ @-webkit-keyframes fadeIn {
992
+ 0% {
993
+ opacity: 0;
994
+ }
995
+
996
+ 100% {
997
+ opacity: 1;
998
+ }
999
+ }
1000
+
1001
+ @keyframes fadeIn {
1002
+ 0% {
1003
+ opacity: 0;
1004
+ }
1005
+
1006
+ 100% {
1007
+ opacity: 1;
1008
+ }
1009
+ }
1010
+
1011
+ .fadeIn {
1012
+ -webkit-animation-name: fadeIn;
1013
+ animation-name: fadeIn;
1014
+ }
1015
+
1016
+ @-webkit-keyframes fadeInDown {
1017
+ 0% {
1018
+ opacity: 0;
1019
+ -webkit-transform: translateY(-20px);
1020
+ transform: translateY(-20px);
1021
+ }
1022
+
1023
+ 100% {
1024
+ opacity: 1;
1025
+ -webkit-transform: translateY(0);
1026
+ transform: translateY(0);
1027
+ }
1028
+ }
1029
+
1030
+ @keyframes fadeInDown {
1031
+ 0% {
1032
+ opacity: 0;
1033
+ -webkit-transform: translateY(-20px);
1034
+ -ms-transform: translateY(-20px);
1035
+ transform: translateY(-20px);
1036
+ }
1037
+
1038
+ 100% {
1039
+ opacity: 1;
1040
+ -webkit-transform: translateY(0);
1041
+ -ms-transform: translateY(0);
1042
+ transform: translateY(0);
1043
+ }
1044
+ }
1045
+
1046
+ .fadeInDown {
1047
+ -webkit-animation-name: fadeInDown;
1048
+ animation-name: fadeInDown;
1049
+ }
1050
+
1051
+ @-webkit-keyframes fadeInDownBig {
1052
+ 0% {
1053
+ opacity: 0;
1054
+ -webkit-transform: translateY(-2000px);
1055
+ transform: translateY(-2000px);
1056
+ }
1057
+
1058
+ 100% {
1059
+ opacity: 1;
1060
+ -webkit-transform: translateY(0);
1061
+ transform: translateY(0);
1062
+ }
1063
+ }
1064
+
1065
+ @keyframes fadeInDownBig {
1066
+ 0% {
1067
+ opacity: 0;
1068
+ -webkit-transform: translateY(-2000px);
1069
+ -ms-transform: translateY(-2000px);
1070
+ transform: translateY(-2000px);
1071
+ }
1072
+
1073
+ 100% {
1074
+ opacity: 1;
1075
+ -webkit-transform: translateY(0);
1076
+ -ms-transform: translateY(0);
1077
+ transform: translateY(0);
1078
+ }
1079
+ }
1080
+
1081
+ .fadeInDownBig {
1082
+ -webkit-animation-name: fadeInDownBig;
1083
+ animation-name: fadeInDownBig;
1084
+ }
1085
+
1086
+ @-webkit-keyframes fadeInLeft {
1087
+ 0% {
1088
+ opacity: 0;
1089
+ -webkit-transform: translateX(-20px);
1090
+ transform: translateX(-20px);
1091
+ }
1092
+
1093
+ 100% {
1094
+ opacity: 1;
1095
+ -webkit-transform: translateX(0);
1096
+ transform: translateX(0);
1097
+ }
1098
+ }
1099
+
1100
+ @keyframes fadeInLeft {
1101
+ 0% {
1102
+ opacity: 0;
1103
+ -webkit-transform: translateX(-20px);
1104
+ -ms-transform: translateX(-20px);
1105
+ transform: translateX(-20px);
1106
+ }
1107
+
1108
+ 100% {
1109
+ opacity: 1;
1110
+ -webkit-transform: translateX(0);
1111
+ -ms-transform: translateX(0);
1112
+ transform: translateX(0);
1113
+ }
1114
+ }
1115
+
1116
+ .fadeInLeft {
1117
+ -webkit-animation-name: fadeInLeft;
1118
+ animation-name: fadeInLeft;
1119
+ }
1120
+
1121
+ @-webkit-keyframes fadeInLeftBig {
1122
+ 0% {
1123
+ opacity: 0;
1124
+ -webkit-transform: translateX(-2000px);
1125
+ transform: translateX(-2000px);
1126
+ }
1127
+
1128
+ 100% {
1129
+ opacity: 1;
1130
+ -webkit-transform: translateX(0);
1131
+ transform: translateX(0);
1132
+ }
1133
+ }
1134
+
1135
+ @keyframes fadeInLeftBig {
1136
+ 0% {
1137
+ opacity: 0;
1138
+ -webkit-transform: translateX(-2000px);
1139
+ -ms-transform: translateX(-2000px);
1140
+ transform: translateX(-2000px);
1141
+ }
1142
+
1143
+ 100% {
1144
+ opacity: 1;
1145
+ -webkit-transform: translateX(0);
1146
+ -ms-transform: translateX(0);
1147
+ transform: translateX(0);
1148
+ }
1149
+ }
1150
+
1151
+ .fadeInLeftBig {
1152
+ -webkit-animation-name: fadeInLeftBig;
1153
+ animation-name: fadeInLeftBig;
1154
+ }
1155
+
1156
+ @-webkit-keyframes fadeInRight {
1157
+ 0% {
1158
+ opacity: 0;
1159
+ -webkit-transform: translateX(20px);
1160
+ transform: translateX(20px);
1161
+ }
1162
+
1163
+ 100% {
1164
+ opacity: 1;
1165
+ -webkit-transform: translateX(0);
1166
+ transform: translateX(0);
1167
+ }
1168
+ }
1169
+
1170
+ @keyframes fadeInRight {
1171
+ 0% {
1172
+ opacity: 0;
1173
+ -webkit-transform: translateX(20px);
1174
+ -ms-transform: translateX(20px);
1175
+ transform: translateX(20px);
1176
+ }
1177
+
1178
+ 100% {
1179
+ opacity: 1;
1180
+ -webkit-transform: translateX(0);
1181
+ -ms-transform: translateX(0);
1182
+ transform: translateX(0);
1183
+ }
1184
+ }
1185
+
1186
+ .fadeInRight {
1187
+ -webkit-animation-name: fadeInRight;
1188
+ animation-name: fadeInRight;
1189
+ }
1190
+
1191
+ @-webkit-keyframes fadeInRightBig {
1192
+ 0% {
1193
+ opacity: 0;
1194
+ -webkit-transform: translateX(2000px);
1195
+ transform: translateX(2000px);
1196
+ }
1197
+
1198
+ 100% {
1199
+ opacity: 1;
1200
+ -webkit-transform: translateX(0);
1201
+ transform: translateX(0);
1202
+ }
1203
+ }
1204
+
1205
+ @keyframes fadeInRightBig {
1206
+ 0% {
1207
+ opacity: 0;
1208
+ -webkit-transform: translateX(2000px);
1209
+ -ms-transform: translateX(2000px);
1210
+ transform: translateX(2000px);
1211
+ }
1212
+
1213
+ 100% {
1214
+ opacity: 1;
1215
+ -webkit-transform: translateX(0);
1216
+ -ms-transform: translateX(0);
1217
+ transform: translateX(0);
1218
+ }
1219
+ }
1220
+
1221
+ .fadeInRightBig {
1222
+ -webkit-animation-name: fadeInRightBig;
1223
+ animation-name: fadeInRightBig;
1224
+ }
1225
+
1226
+ @-webkit-keyframes fadeInUp {
1227
+ 0% {
1228
+ opacity: 0;
1229
+ -webkit-transform: translateY(20px);
1230
+ transform: translateY(20px);
1231
+ }
1232
+
1233
+ 100% {
1234
+ opacity: 1;
1235
+ -webkit-transform: translateY(0);
1236
+ transform: translateY(0);
1237
+ }
1238
+ }
1239
+
1240
+ @keyframes fadeInUp {
1241
+ 0% {
1242
+ opacity: 0;
1243
+ -webkit-transform: translateY(20px);
1244
+ -ms-transform: translateY(20px);
1245
+ transform: translateY(20px);
1246
+ }
1247
+
1248
+ 100% {
1249
+ opacity: 1;
1250
+ -webkit-transform: translateY(0);
1251
+ -ms-transform: translateY(0);
1252
+ transform: translateY(0);
1253
+ }
1254
+ }
1255
+
1256
+ .fadeInUp {
1257
+ -webkit-animation-name: fadeInUp;
1258
+ animation-name: fadeInUp;
1259
+ }
1260
+
1261
+ @-webkit-keyframes fadeInUpBig {
1262
+ 0% {
1263
+ opacity: 0;
1264
+ -webkit-transform: translateY(2000px);
1265
+ transform: translateY(2000px);
1266
+ }
1267
+
1268
+ 100% {
1269
+ opacity: 1;
1270
+ -webkit-transform: translateY(0);
1271
+ transform: translateY(0);
1272
+ }
1273
+ }
1274
+
1275
+ @keyframes fadeInUpBig {
1276
+ 0% {
1277
+ opacity: 0;
1278
+ -webkit-transform: translateY(2000px);
1279
+ -ms-transform: translateY(2000px);
1280
+ transform: translateY(2000px);
1281
+ }
1282
+
1283
+ 100% {
1284
+ opacity: 1;
1285
+ -webkit-transform: translateY(0);
1286
+ -ms-transform: translateY(0);
1287
+ transform: translateY(0);
1288
+ }
1289
+ }
1290
+
1291
+ .fadeInUpBig {
1292
+ -webkit-animation-name: fadeInUpBig;
1293
+ animation-name: fadeInUpBig;
1294
+ }
1295
+
1296
+ @-webkit-keyframes fadeOut {
1297
+ 0% {
1298
+ opacity: 1;
1299
+ }
1300
+
1301
+ 100% {
1302
+ opacity: 0;
1303
+ }
1304
+ }
1305
+
1306
+ @keyframes fadeOut {
1307
+ 0% {
1308
+ opacity: 1;
1309
+ }
1310
+
1311
+ 100% {
1312
+ opacity: 0;
1313
+ }
1314
+ }
1315
+
1316
+ .fadeOut {
1317
+ -webkit-animation-name: fadeOut;
1318
+ animation-name: fadeOut;
1319
+ }
1320
+
1321
+ @-webkit-keyframes fadeOutDown {
1322
+ 0% {
1323
+ opacity: 1;
1324
+ -webkit-transform: translateY(0);
1325
+ transform: translateY(0);
1326
+ }
1327
+
1328
+ 100% {
1329
+ opacity: 0;
1330
+ -webkit-transform: translateY(20px);
1331
+ transform: translateY(20px);
1332
+ }
1333
+ }
1334
+
1335
+ @keyframes fadeOutDown {
1336
+ 0% {
1337
+ opacity: 1;
1338
+ -webkit-transform: translateY(0);
1339
+ -ms-transform: translateY(0);
1340
+ transform: translateY(0);
1341
+ }
1342
+
1343
+ 100% {
1344
+ opacity: 0;
1345
+ -webkit-transform: translateY(20px);
1346
+ -ms-transform: translateY(20px);
1347
+ transform: translateY(20px);
1348
+ }
1349
+ }
1350
+
1351
+ .fadeOutDown {
1352
+ -webkit-animation-name: fadeOutDown;
1353
+ animation-name: fadeOutDown;
1354
+ }
1355
+
1356
+ @-webkit-keyframes fadeOutDownBig {
1357
+ 0% {
1358
+ opacity: 1;
1359
+ -webkit-transform: translateY(0);
1360
+ transform: translateY(0);
1361
+ }
1362
+
1363
+ 100% {
1364
+ opacity: 0;
1365
+ -webkit-transform: translateY(2000px);
1366
+ transform: translateY(2000px);
1367
+ }
1368
+ }
1369
+
1370
+ @keyframes fadeOutDownBig {
1371
+ 0% {
1372
+ opacity: 1;
1373
+ -webkit-transform: translateY(0);
1374
+ -ms-transform: translateY(0);
1375
+ transform: translateY(0);
1376
+ }
1377
+
1378
+ 100% {
1379
+ opacity: 0;
1380
+ -webkit-transform: translateY(2000px);
1381
+ -ms-transform: translateY(2000px);
1382
+ transform: translateY(2000px);
1383
+ }
1384
+ }
1385
+
1386
+ .fadeOutDownBig {
1387
+ -webkit-animation-name: fadeOutDownBig;
1388
+ animation-name: fadeOutDownBig;
1389
+ }
1390
+
1391
+ @-webkit-keyframes fadeOutLeft {
1392
+ 0% {
1393
+ opacity: 1;
1394
+ -webkit-transform: translateX(0);
1395
+ transform: translateX(0);
1396
+ }
1397
+
1398
+ 100% {
1399
+ opacity: 0;
1400
+ -webkit-transform: translateX(-20px);
1401
+ transform: translateX(-20px);
1402
+ }
1403
+ }
1404
+
1405
+ @keyframes fadeOutLeft {
1406
+ 0% {
1407
+ opacity: 1;
1408
+ -webkit-transform: translateX(0);
1409
+ -ms-transform: translateX(0);
1410
+ transform: translateX(0);
1411
+ }
1412
+
1413
+ 100% {
1414
+ opacity: 0;
1415
+ -webkit-transform: translateX(-20px);
1416
+ -ms-transform: translateX(-20px);
1417
+ transform: translateX(-20px);
1418
+ }
1419
+ }
1420
+
1421
+ .fadeOutLeft {
1422
+ -webkit-animation-name: fadeOutLeft;
1423
+ animation-name: fadeOutLeft;
1424
+ }
1425
+
1426
+ @-webkit-keyframes fadeOutLeftBig {
1427
+ 0% {
1428
+ opacity: 1;
1429
+ -webkit-transform: translateX(0);
1430
+ transform: translateX(0);
1431
+ }
1432
+
1433
+ 100% {
1434
+ opacity: 0;
1435
+ -webkit-transform: translateX(-2000px);
1436
+ transform: translateX(-2000px);
1437
+ }
1438
+ }
1439
+
1440
+ @keyframes fadeOutLeftBig {
1441
+ 0% {
1442
+ opacity: 1;
1443
+ -webkit-transform: translateX(0);
1444
+ -ms-transform: translateX(0);
1445
+ transform: translateX(0);
1446
+ }
1447
+
1448
+ 100% {
1449
+ opacity: 0;
1450
+ -webkit-transform: translateX(-2000px);
1451
+ -ms-transform: translateX(-2000px);
1452
+ transform: translateX(-2000px);
1453
+ }
1454
+ }
1455
+
1456
+ .fadeOutLeftBig {
1457
+ -webkit-animation-name: fadeOutLeftBig;
1458
+ animation-name: fadeOutLeftBig;
1459
+ }
1460
+
1461
+ @-webkit-keyframes fadeOutRight {
1462
+ 0% {
1463
+ opacity: 1;
1464
+ -webkit-transform: translateX(0);
1465
+ transform: translateX(0);
1466
+ }
1467
+
1468
+ 100% {
1469
+ opacity: 0;
1470
+ -webkit-transform: translateX(20px);
1471
+ transform: translateX(20px);
1472
+ }
1473
+ }
1474
+
1475
+ @keyframes fadeOutRight {
1476
+ 0% {
1477
+ opacity: 1;
1478
+ -webkit-transform: translateX(0);
1479
+ -ms-transform: translateX(0);
1480
+ transform: translateX(0);
1481
+ }
1482
+
1483
+ 100% {
1484
+ opacity: 0;
1485
+ -webkit-transform: translateX(20px);
1486
+ -ms-transform: translateX(20px);
1487
+ transform: translateX(20px);
1488
+ }
1489
+ }
1490
+
1491
+ .fadeOutRight {
1492
+ -webkit-animation-name: fadeOutRight;
1493
+ animation-name: fadeOutRight;
1494
+ }
1495
+
1496
+ @-webkit-keyframes fadeOutRightBig {
1497
+ 0% {
1498
+ opacity: 1;
1499
+ -webkit-transform: translateX(0);
1500
+ transform: translateX(0);
1501
+ }
1502
+
1503
+ 100% {
1504
+ opacity: 0;
1505
+ -webkit-transform: translateX(2000px);
1506
+ transform: translateX(2000px);
1507
+ }
1508
+ }
1509
+
1510
+ @keyframes fadeOutRightBig {
1511
+ 0% {
1512
+ opacity: 1;
1513
+ -webkit-transform: translateX(0);
1514
+ -ms-transform: translateX(0);
1515
+ transform: translateX(0);
1516
+ }
1517
+
1518
+ 100% {
1519
+ opacity: 0;
1520
+ -webkit-transform: translateX(2000px);
1521
+ -ms-transform: translateX(2000px);
1522
+ transform: translateX(2000px);
1523
+ }
1524
+ }
1525
+
1526
+ .fadeOutRightBig {
1527
+ -webkit-animation-name: fadeOutRightBig;
1528
+ animation-name: fadeOutRightBig;
1529
+ }
1530
+
1531
+ @-webkit-keyframes fadeOutUp {
1532
+ 0% {
1533
+ opacity: 1;
1534
+ -webkit-transform: translateY(0);
1535
+ transform: translateY(0);
1536
+ }
1537
+
1538
+ 100% {
1539
+ opacity: 0;
1540
+ -webkit-transform: translateY(-20px);
1541
+ transform: translateY(-20px);
1542
+ }
1543
+ }
1544
+
1545
+ @keyframes fadeOutUp {
1546
+ 0% {
1547
+ opacity: 1;
1548
+ -webkit-transform: translateY(0);
1549
+ -ms-transform: translateY(0);
1550
+ transform: translateY(0);
1551
+ }
1552
+
1553
+ 100% {
1554
+ opacity: 0;
1555
+ -webkit-transform: translateY(-20px);
1556
+ -ms-transform: translateY(-20px);
1557
+ transform: translateY(-20px);
1558
+ }
1559
+ }
1560
+
1561
+ .fadeOutUp {
1562
+ -webkit-animation-name: fadeOutUp;
1563
+ animation-name: fadeOutUp;
1564
+ }
1565
+
1566
+ @-webkit-keyframes fadeOutUpBig {
1567
+ 0% {
1568
+ opacity: 1;
1569
+ -webkit-transform: translateY(0);
1570
+ transform: translateY(0);
1571
+ }
1572
+
1573
+ 100% {
1574
+ opacity: 0;
1575
+ -webkit-transform: translateY(-2000px);
1576
+ transform: translateY(-2000px);
1577
+ }
1578
+ }
1579
+
1580
+ @keyframes fadeOutUpBig {
1581
+ 0% {
1582
+ opacity: 1;
1583
+ -webkit-transform: translateY(0);
1584
+ -ms-transform: translateY(0);
1585
+ transform: translateY(0);
1586
+ }
1587
+
1588
+ 100% {
1589
+ opacity: 0;
1590
+ -webkit-transform: translateY(-2000px);
1591
+ -ms-transform: translateY(-2000px);
1592
+ transform: translateY(-2000px);
1593
+ }
1594
+ }
1595
+
1596
+ .fadeOutUpBig {
1597
+ -webkit-animation-name: fadeOutUpBig;
1598
+ animation-name: fadeOutUpBig;
1599
+ }
1600
+
1601
+ @-webkit-keyframes flip {
1602
+ 0% {
1603
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(-360deg) scale(1);
1604
+ transform: perspective(400px) translateZ(0) rotateY(-360deg) scale(1);
1605
+ -webkit-animation-timing-function: ease-out;
1606
+ animation-timing-function: ease-out;
1607
+ }
1608
+
1609
+ 40% {
1610
+ -webkit-transform: perspective(400px) translateZ(150px) rotateY(-190deg) scale(1);
1611
+ transform: perspective(400px) translateZ(150px) rotateY(-190deg) scale(1);
1612
+ -webkit-animation-timing-function: ease-out;
1613
+ animation-timing-function: ease-out;
1614
+ }
1615
+
1616
+ 50% {
1617
+ -webkit-transform: perspective(400px) translateZ(150px) rotateY(-170deg) scale(1);
1618
+ transform: perspective(400px) translateZ(150px) rotateY(-170deg) scale(1);
1619
+ -webkit-animation-timing-function: ease-in;
1620
+ animation-timing-function: ease-in;
1621
+ }
1622
+
1623
+ 80% {
1624
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(0deg) scale(.95);
1625
+ transform: perspective(400px) translateZ(0) rotateY(0deg) scale(.95);
1626
+ -webkit-animation-timing-function: ease-in;
1627
+ animation-timing-function: ease-in;
1628
+ }
1629
+
1630
+ 100% {
1631
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(0deg) scale(1);
1632
+ transform: perspective(400px) translateZ(0) rotateY(0deg) scale(1);
1633
+ -webkit-animation-timing-function: ease-in;
1634
+ animation-timing-function: ease-in;
1635
+ }
1636
+ }
1637
+
1638
+ @keyframes flip {
1639
+ 0% {
1640
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(-360deg) scale(1);
1641
+ -ms-transform: perspective(400px) translateZ(0) rotateY(-360deg) scale(1);
1642
+ transform: perspective(400px) translateZ(0) rotateY(-360deg) scale(1);
1643
+ -webkit-animation-timing-function: ease-out;
1644
+ animation-timing-function: ease-out;
1645
+ }
1646
+
1647
+ 40% {
1648
+ -webkit-transform: perspective(400px) translateZ(150px) rotateY(-190deg) scale(1);
1649
+ -ms-transform: perspective(400px) translateZ(150px) rotateY(-190deg) scale(1);
1650
+ transform: perspective(400px) translateZ(150px) rotateY(-190deg) scale(1);
1651
+ -webkit-animation-timing-function: ease-out;
1652
+ animation-timing-function: ease-out;
1653
+ }
1654
+
1655
+ 50% {
1656
+ -webkit-transform: perspective(400px) translateZ(150px) rotateY(-170deg) scale(1);
1657
+ -ms-transform: perspective(400px) translateZ(150px) rotateY(-170deg) scale(1);
1658
+ transform: perspective(400px) translateZ(150px) rotateY(-170deg) scale(1);
1659
+ -webkit-animation-timing-function: ease-in;
1660
+ animation-timing-function: ease-in;
1661
+ }
1662
+
1663
+ 80% {
1664
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(0deg) scale(.95);
1665
+ -ms-transform: perspective(400px) translateZ(0) rotateY(0deg) scale(.95);
1666
+ transform: perspective(400px) translateZ(0) rotateY(0deg) scale(.95);
1667
+ -webkit-animation-timing-function: ease-in;
1668
+ animation-timing-function: ease-in;
1669
+ }
1670
+
1671
+ 100% {
1672
+ -webkit-transform: perspective(400px) translateZ(0) rotateY(0deg) scale(1);
1673
+ -ms-transform: perspective(400px) translateZ(0) rotateY(0deg) scale(1);
1674
+ transform: perspective(400px) translateZ(0) rotateY(0deg) scale(1);
1675
+ -webkit-animation-timing-function: ease-in;
1676
+ animation-timing-function: ease-in;
1677
+ }
1678
+ }
1679
+
1680
+ .animated.flip {
1681
+ -webkit-backface-visibility: visible;
1682
+ -ms-backface-visibility: visible;
1683
+ backface-visibility: visible;
1684
+ -webkit-animation-name: flip;
1685
+ animation-name: flip;
1686
+ }
1687
+
1688
+ @-webkit-keyframes flipInX {
1689
+ 0% {
1690
+ -webkit-transform: perspective(400px) rotateX(90deg);
1691
+ transform: perspective(400px) rotateX(90deg);
1692
+ opacity: 0;
1693
+ }
1694
+
1695
+ 40% {
1696
+ -webkit-transform: perspective(400px) rotateX(-10deg);
1697
+ transform: perspective(400px) rotateX(-10deg);
1698
+ }
1699
+
1700
+ 70% {
1701
+ -webkit-transform: perspective(400px) rotateX(10deg);
1702
+ transform: perspective(400px) rotateX(10deg);
1703
+ }
1704
+
1705
+ 100% {
1706
+ -webkit-transform: perspective(400px) rotateX(0deg);
1707
+ transform: perspective(400px) rotateX(0deg);
1708
+ opacity: 1;
1709
+ }
1710
+ }
1711
+
1712
+ @keyframes flipInX {
1713
+ 0% {
1714
+ -webkit-transform: perspective(400px) rotateX(90deg);
1715
+ -ms-transform: perspective(400px) rotateX(90deg);
1716
+ transform: perspective(400px) rotateX(90deg);
1717
+ opacity: 0;
1718
+ }
1719
+
1720
+ 40% {
1721
+ -webkit-transform: perspective(400px) rotateX(-10deg);
1722
+ -ms-transform: perspective(400px) rotateX(-10deg);
1723
+ transform: perspective(400px) rotateX(-10deg);
1724
+ }
1725
+
1726
+ 70% {
1727
+ -webkit-transform: perspective(400px) rotateX(10deg);
1728
+ -ms-transform: perspective(400px) rotateX(10deg);
1729
+ transform: perspective(400px) rotateX(10deg);
1730
+ }
1731
+
1732
+ 100% {
1733
+ -webkit-transform: perspective(400px) rotateX(0deg);
1734
+ -ms-transform: perspective(400px) rotateX(0deg);
1735
+ transform: perspective(400px) rotateX(0deg);
1736
+ opacity: 1;
1737
+ }
1738
+ }
1739
+
1740
+ .flipInX {
1741
+ -webkit-backface-visibility: visible !important;
1742
+ -ms-backface-visibility: visible !important;
1743
+ backface-visibility: visible !important;
1744
+ -webkit-animation-name: flipInX;
1745
+ animation-name: flipInX;
1746
+ }
1747
+
1748
+ @-webkit-keyframes flipInY {
1749
+ 0% {
1750
+ -webkit-transform: perspective(400px) rotateY(90deg);
1751
+ transform: perspective(400px) rotateY(90deg);
1752
+ opacity: 0;
1753
+ }
1754
+
1755
+ 40% {
1756
+ -webkit-transform: perspective(400px) rotateY(-10deg);
1757
+ transform: perspective(400px) rotateY(-10deg);
1758
+ }
1759
+
1760
+ 70% {
1761
+ -webkit-transform: perspective(400px) rotateY(10deg);
1762
+ transform: perspective(400px) rotateY(10deg);
1763
+ }
1764
+
1765
+ 100% {
1766
+ -webkit-transform: perspective(400px) rotateY(0deg);
1767
+ transform: perspective(400px) rotateY(0deg);
1768
+ opacity: 1;
1769
+ }
1770
+ }
1771
+
1772
+ @keyframes flipInY {
1773
+ 0% {
1774
+ -webkit-transform: perspective(400px) rotateY(90deg);
1775
+ -ms-transform: perspective(400px) rotateY(90deg);
1776
+ transform: perspective(400px) rotateY(90deg);
1777
+ opacity: 0;
1778
+ }
1779
+
1780
+ 40% {
1781
+ -webkit-transform: perspective(400px) rotateY(-10deg);
1782
+ -ms-transform: perspective(400px) rotateY(-10deg);
1783
+ transform: perspective(400px) rotateY(-10deg);
1784
+ }
1785
+
1786
+ 70% {
1787
+ -webkit-transform: perspective(400px) rotateY(10deg);
1788
+ -ms-transform: perspective(400px) rotateY(10deg);
1789
+ transform: perspective(400px) rotateY(10deg);
1790
+ }
1791
+
1792
+ 100% {
1793
+ -webkit-transform: perspective(400px) rotateY(0deg);
1794
+ -ms-transform: perspective(400px) rotateY(0deg);
1795
+ transform: perspective(400px) rotateY(0deg);
1796
+ opacity: 1;
1797
+ }
1798
+ }
1799
+
1800
+ .flipInY {
1801
+ -webkit-backface-visibility: visible !important;
1802
+ -ms-backface-visibility: visible !important;
1803
+ backface-visibility: visible !important;
1804
+ -webkit-animation-name: flipInY;
1805
+ animation-name: flipInY;
1806
+ }
1807
+
1808
+ @-webkit-keyframes flipOutX {
1809
+ 0% {
1810
+ -webkit-transform: perspective(400px) rotateX(0deg);
1811
+ transform: perspective(400px) rotateX(0deg);
1812
+ opacity: 1;
1813
+ }
1814
+
1815
+ 100% {
1816
+ -webkit-transform: perspective(400px) rotateX(90deg);
1817
+ transform: perspective(400px) rotateX(90deg);
1818
+ opacity: 0;
1819
+ }
1820
+ }
1821
+
1822
+ @keyframes flipOutX {
1823
+ 0% {
1824
+ -webkit-transform: perspective(400px) rotateX(0deg);
1825
+ -ms-transform: perspective(400px) rotateX(0deg);
1826
+ transform: perspective(400px) rotateX(0deg);
1827
+ opacity: 1;
1828
+ }
1829
+
1830
+ 100% {
1831
+ -webkit-transform: perspective(400px) rotateX(90deg);
1832
+ -ms-transform: perspective(400px) rotateX(90deg);
1833
+ transform: perspective(400px) rotateX(90deg);
1834
+ opacity: 0;
1835
+ }
1836
+ }
1837
+
1838
+ .flipOutX {
1839
+ -webkit-animation-name: flipOutX;
1840
+ animation-name: flipOutX;
1841
+ -webkit-backface-visibility: visible !important;
1842
+ -ms-backface-visibility: visible !important;
1843
+ backface-visibility: visible !important;
1844
+ }
1845
+
1846
+ @-webkit-keyframes flipOutY {
1847
+ 0% {
1848
+ -webkit-transform: perspective(400px) rotateY(0deg);
1849
+ transform: perspective(400px) rotateY(0deg);
1850
+ opacity: 1;
1851
+ }
1852
+
1853
+ 100% {
1854
+ -webkit-transform: perspective(400px) rotateY(90deg);
1855
+ transform: perspective(400px) rotateY(90deg);
1856
+ opacity: 0;
1857
+ }
1858
+ }
1859
+
1860
+ @keyframes flipOutY {
1861
+ 0% {
1862
+ -webkit-transform: perspective(400px) rotateY(0deg);
1863
+ -ms-transform: perspective(400px) rotateY(0deg);
1864
+ transform: perspective(400px) rotateY(0deg);
1865
+ opacity: 1;
1866
+ }
1867
+
1868
+ 100% {
1869
+ -webkit-transform: perspective(400px) rotateY(90deg);
1870
+ -ms-transform: perspective(400px) rotateY(90deg);
1871
+ transform: perspective(400px) rotateY(90deg);
1872
+ opacity: 0;
1873
+ }
1874
+ }
1875
+
1876
+ .flipOutY {
1877
+ -webkit-backface-visibility: visible !important;
1878
+ -ms-backface-visibility: visible !important;
1879
+ backface-visibility: visible !important;
1880
+ -webkit-animation-name: flipOutY;
1881
+ animation-name: flipOutY;
1882
+ }
1883
+
1884
+ @-webkit-keyframes lightSpeedIn {
1885
+ 0% {
1886
+ -webkit-transform: translateX(100%) skewX(-30deg);
1887
+ transform: translateX(100%) skewX(-30deg);
1888
+ opacity: 0;
1889
+ }
1890
+
1891
+ 60% {
1892
+ -webkit-transform: translateX(-20%) skewX(30deg);
1893
+ transform: translateX(-20%) skewX(30deg);
1894
+ opacity: 1;
1895
+ }
1896
+
1897
+ 80% {
1898
+ -webkit-transform: translateX(0%) skewX(-15deg);
1899
+ transform: translateX(0%) skewX(-15deg);
1900
+ opacity: 1;
1901
+ }
1902
+
1903
+ 100% {
1904
+ -webkit-transform: translateX(0%) skewX(0deg);
1905
+ transform: translateX(0%) skewX(0deg);
1906
+ opacity: 1;
1907
+ }
1908
+ }
1909
+
1910
+ @keyframes lightSpeedIn {
1911
+ 0% {
1912
+ -webkit-transform: translateX(100%) skewX(-30deg);
1913
+ -ms-transform: translateX(100%) skewX(-30deg);
1914
+ transform: translateX(100%) skewX(-30deg);
1915
+ opacity: 0;
1916
+ }
1917
+
1918
+ 60% {
1919
+ -webkit-transform: translateX(-20%) skewX(30deg);
1920
+ -ms-transform: translateX(-20%) skewX(30deg);
1921
+ transform: translateX(-20%) skewX(30deg);
1922
+ opacity: 1;
1923
+ }
1924
+
1925
+ 80% {
1926
+ -webkit-transform: translateX(0%) skewX(-15deg);
1927
+ -ms-transform: translateX(0%) skewX(-15deg);
1928
+ transform: translateX(0%) skewX(-15deg);
1929
+ opacity: 1;
1930
+ }
1931
+
1932
+ 100% {
1933
+ -webkit-transform: translateX(0%) skewX(0deg);
1934
+ -ms-transform: translateX(0%) skewX(0deg);
1935
+ transform: translateX(0%) skewX(0deg);
1936
+ opacity: 1;
1937
+ }
1938
+ }
1939
+
1940
+ .lightSpeedIn {
1941
+ -webkit-animation-name: lightSpeedIn;
1942
+ animation-name: lightSpeedIn;
1943
+ -webkit-animation-timing-function: ease-out;
1944
+ animation-timing-function: ease-out;
1945
+ }
1946
+
1947
+ @-webkit-keyframes lightSpeedOut {
1948
+ 0% {
1949
+ -webkit-transform: translateX(0%) skewX(0deg);
1950
+ transform: translateX(0%) skewX(0deg);
1951
+ opacity: 1;
1952
+ }
1953
+
1954
+ 100% {
1955
+ -webkit-transform: translateX(100%) skewX(-30deg);
1956
+ transform: translateX(100%) skewX(-30deg);
1957
+ opacity: 0;
1958
+ }
1959
+ }
1960
+
1961
+ @keyframes lightSpeedOut {
1962
+ 0% {
1963
+ -webkit-transform: translateX(0%) skewX(0deg);
1964
+ -ms-transform: translateX(0%) skewX(0deg);
1965
+ transform: translateX(0%) skewX(0deg);
1966
+ opacity: 1;
1967
+ }
1968
+
1969
+ 100% {
1970
+ -webkit-transform: translateX(100%) skewX(-30deg);
1971
+ -ms-transform: translateX(100%) skewX(-30deg);
1972
+ transform: translateX(100%) skewX(-30deg);
1973
+ opacity: 0;
1974
+ }
1975
+ }
1976
+
1977
+ .lightSpeedOut {
1978
+ -webkit-animation-name: lightSpeedOut;
1979
+ animation-name: lightSpeedOut;
1980
+ -webkit-animation-timing-function: ease-in;
1981
+ animation-timing-function: ease-in;
1982
+ }
1983
+
1984
+ @-webkit-keyframes rotateIn {
1985
+ 0% {
1986
+ -webkit-transform-origin: center center;
1987
+ transform-origin: center center;
1988
+ -webkit-transform: rotate(-200deg);
1989
+ transform: rotate(-200deg);
1990
+ opacity: 0;
1991
+ }
1992
+
1993
+ 100% {
1994
+ -webkit-transform-origin: center center;
1995
+ transform-origin: center center;
1996
+ -webkit-transform: rotate(0);
1997
+ transform: rotate(0);
1998
+ opacity: 1;
1999
+ }
2000
+ }
2001
+
2002
+ @keyframes rotateIn {
2003
+ 0% {
2004
+ -webkit-transform-origin: center center;
2005
+ -ms-transform-origin: center center;
2006
+ transform-origin: center center;
2007
+ -webkit-transform: rotate(-200deg);
2008
+ -ms-transform: rotate(-200deg);
2009
+ transform: rotate(-200deg);
2010
+ opacity: 0;
2011
+ }
2012
+
2013
+ 100% {
2014
+ -webkit-transform-origin: center center;
2015
+ -ms-transform-origin: center center;
2016
+ transform-origin: center center;
2017
+ -webkit-transform: rotate(0);
2018
+ -ms-transform: rotate(0);
2019
+ transform: rotate(0);
2020
+ opacity: 1;
2021
+ }
2022
+ }
2023
+
2024
+ .rotateIn {
2025
+ -webkit-animation-name: rotateIn;
2026
+ animation-name: rotateIn;
2027
+ }
2028
+
2029
+ @-webkit-keyframes rotateInDownLeft {
2030
+ 0% {
2031
+ -webkit-transform-origin: left bottom;
2032
+ transform-origin: left bottom;
2033
+ -webkit-transform: rotate(-90deg);
2034
+ transform: rotate(-90deg);
2035
+ opacity: 0;
2036
+ }
2037
+
2038
+ 100% {
2039
+ -webkit-transform-origin: left bottom;
2040
+ transform-origin: left bottom;
2041
+ -webkit-transform: rotate(0);
2042
+ transform: rotate(0);
2043
+ opacity: 1;
2044
+ }
2045
+ }
2046
+
2047
+ @keyframes rotateInDownLeft {
2048
+ 0% {
2049
+ -webkit-transform-origin: left bottom;
2050
+ -ms-transform-origin: left bottom;
2051
+ transform-origin: left bottom;
2052
+ -webkit-transform: rotate(-90deg);
2053
+ -ms-transform: rotate(-90deg);
2054
+ transform: rotate(-90deg);
2055
+ opacity: 0;
2056
+ }
2057
+
2058
+ 100% {
2059
+ -webkit-transform-origin: left bottom;
2060
+ -ms-transform-origin: left bottom;
2061
+ transform-origin: left bottom;
2062
+ -webkit-transform: rotate(0);
2063
+ -ms-transform: rotate(0);
2064
+ transform: rotate(0);
2065
+ opacity: 1;
2066
+ }
2067
+ }
2068
+
2069
+ .rotateInDownLeft {
2070
+ -webkit-animation-name: rotateInDownLeft;
2071
+ animation-name: rotateInDownLeft;
2072
+ }
2073
+
2074
+ @-webkit-keyframes rotateInDownRight {
2075
+ 0% {
2076
+ -webkit-transform-origin: right bottom;
2077
+ transform-origin: right bottom;
2078
+ -webkit-transform: rotate(90deg);
2079
+ transform: rotate(90deg);
2080
+ opacity: 0;
2081
+ }
2082
+
2083
+ 100% {
2084
+ -webkit-transform-origin: right bottom;
2085
+ transform-origin: right bottom;
2086
+ -webkit-transform: rotate(0);
2087
+ transform: rotate(0);
2088
+ opacity: 1;
2089
+ }
2090
+ }
2091
+
2092
+ @keyframes rotateInDownRight {
2093
+ 0% {
2094
+ -webkit-transform-origin: right bottom;
2095
+ -ms-transform-origin: right bottom;
2096
+ transform-origin: right bottom;
2097
+ -webkit-transform: rotate(90deg);
2098
+ -ms-transform: rotate(90deg);
2099
+ transform: rotate(90deg);
2100
+ opacity: 0;
2101
+ }
2102
+
2103
+ 100% {
2104
+ -webkit-transform-origin: right bottom;
2105
+ -ms-transform-origin: right bottom;
2106
+ transform-origin: right bottom;
2107
+ -webkit-transform: rotate(0);
2108
+ -ms-transform: rotate(0);
2109
+ transform: rotate(0);
2110
+ opacity: 1;
2111
+ }
2112
+ }
2113
+
2114
+ .rotateInDownRight {
2115
+ -webkit-animation-name: rotateInDownRight;
2116
+ animation-name: rotateInDownRight;
2117
+ }
2118
+
2119
+ @-webkit-keyframes rotateInUpLeft {
2120
+ 0% {
2121
+ -webkit-transform-origin: left bottom;
2122
+ transform-origin: left bottom;
2123
+ -webkit-transform: rotate(90deg);
2124
+ transform: rotate(90deg);
2125
+ opacity: 0;
2126
+ }
2127
+
2128
+ 100% {
2129
+ -webkit-transform-origin: left bottom;
2130
+ transform-origin: left bottom;
2131
+ -webkit-transform: rotate(0);
2132
+ transform: rotate(0);
2133
+ opacity: 1;
2134
+ }
2135
+ }
2136
+
2137
+ @keyframes rotateInUpLeft {
2138
+ 0% {
2139
+ -webkit-transform-origin: left bottom;
2140
+ -ms-transform-origin: left bottom;
2141
+ transform-origin: left bottom;
2142
+ -webkit-transform: rotate(90deg);
2143
+ -ms-transform: rotate(90deg);
2144
+ transform: rotate(90deg);
2145
+ opacity: 0;
2146
+ }
2147
+
2148
+ 100% {
2149
+ -webkit-transform-origin: left bottom;
2150
+ -ms-transform-origin: left bottom;
2151
+ transform-origin: left bottom;
2152
+ -webkit-transform: rotate(0);
2153
+ -ms-transform: rotate(0);
2154
+ transform: rotate(0);
2155
+ opacity: 1;
2156
+ }
2157
+ }
2158
+
2159
+ .rotateInUpLeft {
2160
+ -webkit-animation-name: rotateInUpLeft;
2161
+ animation-name: rotateInUpLeft;
2162
+ }
2163
+
2164
+ @-webkit-keyframes rotateInUpRight {
2165
+ 0% {
2166
+ -webkit-transform-origin: right bottom;
2167
+ transform-origin: right bottom;
2168
+ -webkit-transform: rotate(-90deg);
2169
+ transform: rotate(-90deg);
2170
+ opacity: 0;
2171
+ }
2172
+
2173
+ 100% {
2174
+ -webkit-transform-origin: right bottom;
2175
+ transform-origin: right bottom;
2176
+ -webkit-transform: rotate(0);
2177
+ transform: rotate(0);
2178
+ opacity: 1;
2179
+ }
2180
+ }
2181
+
2182
+ @keyframes rotateInUpRight {
2183
+ 0% {
2184
+ -webkit-transform-origin: right bottom;
2185
+ -ms-transform-origin: right bottom;
2186
+ transform-origin: right bottom;
2187
+ -webkit-transform: rotate(-90deg);
2188
+ -ms-transform: rotate(-90deg);
2189
+ transform: rotate(-90deg);
2190
+ opacity: 0;
2191
+ }
2192
+
2193
+ 100% {
2194
+ -webkit-transform-origin: right bottom;
2195
+ -ms-transform-origin: right bottom;
2196
+ transform-origin: right bottom;
2197
+ -webkit-transform: rotate(0);
2198
+ -ms-transform: rotate(0);
2199
+ transform: rotate(0);
2200
+ opacity: 1;
2201
+ }
2202
+ }
2203
+
2204
+ .rotateInUpRight {
2205
+ -webkit-animation-name: rotateInUpRight;
2206
+ animation-name: rotateInUpRight;
2207
+ }
2208
+
2209
+ @-webkit-keyframes rotateOut {
2210
+ 0% {
2211
+ -webkit-transform-origin: center center;
2212
+ transform-origin: center center;
2213
+ -webkit-transform: rotate(0);
2214
+ transform: rotate(0);
2215
+ opacity: 1;
2216
+ }
2217
+
2218
+ 100% {
2219
+ -webkit-transform-origin: center center;
2220
+ transform-origin: center center;
2221
+ -webkit-transform: rotate(200deg);
2222
+ transform: rotate(200deg);
2223
+ opacity: 0;
2224
+ }
2225
+ }
2226
+
2227
+ @keyframes rotateOut {
2228
+ 0% {
2229
+ -webkit-transform-origin: center center;
2230
+ -ms-transform-origin: center center;
2231
+ transform-origin: center center;
2232
+ -webkit-transform: rotate(0);
2233
+ -ms-transform: rotate(0);
2234
+ transform: rotate(0);
2235
+ opacity: 1;
2236
+ }
2237
+
2238
+ 100% {
2239
+ -webkit-transform-origin: center center;
2240
+ -ms-transform-origin: center center;
2241
+ transform-origin: center center;
2242
+ -webkit-transform: rotate(200deg);
2243
+ -ms-transform: rotate(200deg);
2244
+ transform: rotate(200deg);
2245
+ opacity: 0;
2246
+ }
2247
+ }
2248
+
2249
+ .rotateOut {
2250
+ -webkit-animation-name: rotateOut;
2251
+ animation-name: rotateOut;
2252
+ }
2253
+
2254
+ @-webkit-keyframes rotateOutDownLeft {
2255
+ 0% {
2256
+ -webkit-transform-origin: left bottom;
2257
+ transform-origin: left bottom;
2258
+ -webkit-transform: rotate(0);
2259
+ transform: rotate(0);
2260
+ opacity: 1;
2261
+ }
2262
+
2263
+ 100% {
2264
+ -webkit-transform-origin: left bottom;
2265
+ transform-origin: left bottom;
2266
+ -webkit-transform: rotate(90deg);
2267
+ transform: rotate(90deg);
2268
+ opacity: 0;
2269
+ }
2270
+ }
2271
+
2272
+ @keyframes rotateOutDownLeft {
2273
+ 0% {
2274
+ -webkit-transform-origin: left bottom;
2275
+ -ms-transform-origin: left bottom;
2276
+ transform-origin: left bottom;
2277
+ -webkit-transform: rotate(0);
2278
+ -ms-transform: rotate(0);
2279
+ transform: rotate(0);
2280
+ opacity: 1;
2281
+ }
2282
+
2283
+ 100% {
2284
+ -webkit-transform-origin: left bottom;
2285
+ -ms-transform-origin: left bottom;
2286
+ transform-origin: left bottom;
2287
+ -webkit-transform: rotate(90deg);
2288
+ -ms-transform: rotate(90deg);
2289
+ transform: rotate(90deg);
2290
+ opacity: 0;
2291
+ }
2292
+ }
2293
+
2294
+ .rotateOutDownLeft {
2295
+ -webkit-animation-name: rotateOutDownLeft;
2296
+ animation-name: rotateOutDownLeft;
2297
+ }
2298
+
2299
+ @-webkit-keyframes rotateOutDownRight {
2300
+ 0% {
2301
+ -webkit-transform-origin: right bottom;
2302
+ transform-origin: right bottom;
2303
+ -webkit-transform: rotate(0);
2304
+ transform: rotate(0);
2305
+ opacity: 1;
2306
+ }
2307
+
2308
+ 100% {
2309
+ -webkit-transform-origin: right bottom;
2310
+ transform-origin: right bottom;
2311
+ -webkit-transform: rotate(-90deg);
2312
+ transform: rotate(-90deg);
2313
+ opacity: 0;
2314
+ }
2315
+ }
2316
+
2317
+ @keyframes rotateOutDownRight {
2318
+ 0% {
2319
+ -webkit-transform-origin: right bottom;
2320
+ -ms-transform-origin: right bottom;
2321
+ transform-origin: right bottom;
2322
+ -webkit-transform: rotate(0);
2323
+ -ms-transform: rotate(0);
2324
+ transform: rotate(0);
2325
+ opacity: 1;
2326
+ }
2327
+
2328
+ 100% {
2329
+ -webkit-transform-origin: right bottom;
2330
+ -ms-transform-origin: right bottom;
2331
+ transform-origin: right bottom;
2332
+ -webkit-transform: rotate(-90deg);
2333
+ -ms-transform: rotate(-90deg);
2334
+ transform: rotate(-90deg);
2335
+ opacity: 0;
2336
+ }
2337
+ }
2338
+
2339
+ .rotateOutDownRight {
2340
+ -webkit-animation-name: rotateOutDownRight;
2341
+ animation-name: rotateOutDownRight;
2342
+ }
2343
+
2344
+ @-webkit-keyframes rotateOutUpLeft {
2345
+ 0% {
2346
+ -webkit-transform-origin: left bottom;
2347
+ transform-origin: left bottom;
2348
+ -webkit-transform: rotate(0);
2349
+ transform: rotate(0);
2350
+ opacity: 1;
2351
+ }
2352
+
2353
+ 100% {
2354
+ -webkit-transform-origin: left bottom;
2355
+ transform-origin: left bottom;
2356
+ -webkit-transform: rotate(-90deg);
2357
+ transform: rotate(-90deg);
2358
+ opacity: 0;
2359
+ }
2360
+ }
2361
+
2362
+ @keyframes rotateOutUpLeft {
2363
+ 0% {
2364
+ -webkit-transform-origin: left bottom;
2365
+ -ms-transform-origin: left bottom;
2366
+ transform-origin: left bottom;
2367
+ -webkit-transform: rotate(0);
2368
+ -ms-transform: rotate(0);
2369
+ transform: rotate(0);
2370
+ opacity: 1;
2371
+ }
2372
+
2373
+ 100% {
2374
+ -webkit-transform-origin: left bottom;
2375
+ -ms-transform-origin: left bottom;
2376
+ transform-origin: left bottom;
2377
+ -webkit-transform: rotate(-90deg);
2378
+ -ms-transform: rotate(-90deg);
2379
+ transform: rotate(-90deg);
2380
+ opacity: 0;
2381
+ }
2382
+ }
2383
+
2384
+ .rotateOutUpLeft {
2385
+ -webkit-animation-name: rotateOutUpLeft;
2386
+ animation-name: rotateOutUpLeft;
2387
+ }
2388
+
2389
+ @-webkit-keyframes rotateOutUpRight {
2390
+ 0% {
2391
+ -webkit-transform-origin: right bottom;
2392
+ transform-origin: right bottom;
2393
+ -webkit-transform: rotate(0);
2394
+ transform: rotate(0);
2395
+ opacity: 1;
2396
+ }
2397
+
2398
+ 100% {
2399
+ -webkit-transform-origin: right bottom;
2400
+ transform-origin: right bottom;
2401
+ -webkit-transform: rotate(90deg);
2402
+ transform: rotate(90deg);
2403
+ opacity: 0;
2404
+ }
2405
+ }
2406
+
2407
+ @keyframes rotateOutUpRight {
2408
+ 0% {
2409
+ -webkit-transform-origin: right bottom;
2410
+ -ms-transform-origin: right bottom;
2411
+ transform-origin: right bottom;
2412
+ -webkit-transform: rotate(0);
2413
+ -ms-transform: rotate(0);
2414
+ transform: rotate(0);
2415
+ opacity: 1;
2416
+ }
2417
+
2418
+ 100% {
2419
+ -webkit-transform-origin: right bottom;
2420
+ -ms-transform-origin: right bottom;
2421
+ transform-origin: right bottom;
2422
+ -webkit-transform: rotate(90deg);
2423
+ -ms-transform: rotate(90deg);
2424
+ transform: rotate(90deg);
2425
+ opacity: 0;
2426
+ }
2427
+ }
2428
+
2429
+ .rotateOutUpRight {
2430
+ -webkit-animation-name: rotateOutUpRight;
2431
+ animation-name: rotateOutUpRight;
2432
+ }
2433
+
2434
+ @-webkit-keyframes slideInDown {
2435
+ 0% {
2436
+ opacity: 0;
2437
+ -webkit-transform: translateY(-2000px);
2438
+ transform: translateY(-2000px);
2439
+ }
2440
+
2441
+ 100% {
2442
+ -webkit-transform: translateY(0);
2443
+ transform: translateY(0);
2444
+ }
2445
+ }
2446
+
2447
+ @keyframes slideInDown {
2448
+ 0% {
2449
+ opacity: 0;
2450
+ -webkit-transform: translateY(-2000px);
2451
+ -ms-transform: translateY(-2000px);
2452
+ transform: translateY(-2000px);
2453
+ }
2454
+
2455
+ 100% {
2456
+ -webkit-transform: translateY(0);
2457
+ -ms-transform: translateY(0);
2458
+ transform: translateY(0);
2459
+ }
2460
+ }
2461
+
2462
+ .slideInDown {
2463
+ -webkit-animation-name: slideInDown;
2464
+ animation-name: slideInDown;
2465
+ }
2466
+
2467
+ @-webkit-keyframes slideInLeft {
2468
+ 0% {
2469
+ opacity: 0;
2470
+ -webkit-transform: translateX(-2000px);
2471
+ transform: translateX(-2000px);
2472
+ }
2473
+
2474
+ 100% {
2475
+ -webkit-transform: translateX(0);
2476
+ transform: translateX(0);
2477
+ }
2478
+ }
2479
+
2480
+ @keyframes slideInLeft {
2481
+ 0% {
2482
+ opacity: 0;
2483
+ -webkit-transform: translateX(-2000px);
2484
+ -ms-transform: translateX(-2000px);
2485
+ transform: translateX(-2000px);
2486
+ }
2487
+
2488
+ 100% {
2489
+ -webkit-transform: translateX(0);
2490
+ -ms-transform: translateX(0);
2491
+ transform: translateX(0);
2492
+ }
2493
+ }
2494
+
2495
+ .slideInLeft {
2496
+ -webkit-animation-name: slideInLeft;
2497
+ animation-name: slideInLeft;
2498
+ }
2499
+
2500
+ @-webkit-keyframes slideInRight {
2501
+ 0% {
2502
+ opacity: 0;
2503
+ -webkit-transform: translateX(2000px);
2504
+ transform: translateX(2000px);
2505
+ }
2506
+
2507
+ 100% {
2508
+ -webkit-transform: translateX(0);
2509
+ transform: translateX(0);
2510
+ }
2511
+ }
2512
+
2513
+ @keyframes slideInRight {
2514
+ 0% {
2515
+ opacity: 0;
2516
+ -webkit-transform: translateX(2000px);
2517
+ -ms-transform: translateX(2000px);
2518
+ transform: translateX(2000px);
2519
+ }
2520
+
2521
+ 100% {
2522
+ -webkit-transform: translateX(0);
2523
+ -ms-transform: translateX(0);
2524
+ transform: translateX(0);
2525
+ }
2526
+ }
2527
+
2528
+ .slideInRight {
2529
+ -webkit-animation-name: slideInRight;
2530
+ animation-name: slideInRight;
2531
+ }
2532
+
2533
+ @-webkit-keyframes slideOutLeft {
2534
+ 0% {
2535
+ -webkit-transform: translateX(0);
2536
+ transform: translateX(0);
2537
+ }
2538
+
2539
+ 100% {
2540
+ opacity: 0;
2541
+ -webkit-transform: translateX(-2000px);
2542
+ transform: translateX(-2000px);
2543
+ }
2544
+ }
2545
+
2546
+ @keyframes slideOutLeft {
2547
+ 0% {
2548
+ -webkit-transform: translateX(0);
2549
+ -ms-transform: translateX(0);
2550
+ transform: translateX(0);
2551
+ }
2552
+
2553
+ 100% {
2554
+ opacity: 0;
2555
+ -webkit-transform: translateX(-2000px);
2556
+ -ms-transform: translateX(-2000px);
2557
+ transform: translateX(-2000px);
2558
+ }
2559
+ }
2560
+
2561
+ .slideOutLeft {
2562
+ -webkit-animation-name: slideOutLeft;
2563
+ animation-name: slideOutLeft;
2564
+ }
2565
+
2566
+ @-webkit-keyframes slideOutRight {
2567
+ 0% {
2568
+ -webkit-transform: translateX(0);
2569
+ transform: translateX(0);
2570
+ }
2571
+
2572
+ 100% {
2573
+ opacity: 0;
2574
+ -webkit-transform: translateX(2000px);
2575
+ transform: translateX(2000px);
2576
+ }
2577
+ }
2578
+
2579
+ @keyframes slideOutRight {
2580
+ 0% {
2581
+ -webkit-transform: translateX(0);
2582
+ -ms-transform: translateX(0);
2583
+ transform: translateX(0);
2584
+ }
2585
+
2586
+ 100% {
2587
+ opacity: 0;
2588
+ -webkit-transform: translateX(2000px);
2589
+ -ms-transform: translateX(2000px);
2590
+ transform: translateX(2000px);
2591
+ }
2592
+ }
2593
+
2594
+ .slideOutRight {
2595
+ -webkit-animation-name: slideOutRight;
2596
+ animation-name: slideOutRight;
2597
+ }
2598
+
2599
+ @-webkit-keyframes slideOutUp {
2600
+ 0% {
2601
+ -webkit-transform: translateY(0);
2602
+ transform: translateY(0);
2603
+ }
2604
+
2605
+ 100% {
2606
+ opacity: 0;
2607
+ -webkit-transform: translateY(-2000px);
2608
+ transform: translateY(-2000px);
2609
+ }
2610
+ }
2611
+
2612
+ @keyframes slideOutUp {
2613
+ 0% {
2614
+ -webkit-transform: translateY(0);
2615
+ -ms-transform: translateY(0);
2616
+ transform: translateY(0);
2617
+ }
2618
+
2619
+ 100% {
2620
+ opacity: 0;
2621
+ -webkit-transform: translateY(-2000px);
2622
+ -ms-transform: translateY(-2000px);
2623
+ transform: translateY(-2000px);
2624
+ }
2625
+ }
2626
+
2627
+ .slideOutUp {
2628
+ -webkit-animation-name: slideOutUp;
2629
+ animation-name: slideOutUp;
2630
+ }
2631
+
2632
+ @-webkit-keyframes slideInUp {
2633
+ 0% {
2634
+ opacity: 0;
2635
+ -webkit-transform: translateY(2000px);
2636
+ transform: translateY(2000px);
2637
+ }
2638
+
2639
+ 100% {
2640
+ opacity: 1;
2641
+ -webkit-transform: translateY(0);
2642
+ transform: translateY(0);
2643
+ }
2644
+ }
2645
+
2646
+ @keyframes slideInUp {
2647
+ 0% {
2648
+ opacity: 0;
2649
+ -webkit-transform: translateY(2000px);
2650
+ -ms-transform: translateY(2000px);
2651
+ transform: translateY(2000px);
2652
+ }
2653
+
2654
+ 100% {
2655
+ opacity: 1;
2656
+ -webkit-transform: translateY(0);
2657
+ -ms-transform: translateY(0);
2658
+ transform: translateY(0);
2659
+ }
2660
+ }
2661
+
2662
+ .slideInUp {
2663
+ -webkit-animation-name: slideInUp;
2664
+ animation-name: slideInUp;
2665
+ }
2666
+
2667
+ @-webkit-keyframes slideOutDown {
2668
+ 0% {
2669
+ -webkit-transform: translateY(0);
2670
+ transform: translateY(0);
2671
+ }
2672
+
2673
+ 100% {
2674
+ opacity: 0;
2675
+ -webkit-transform: translateY(2000px);
2676
+ transform: translateY(2000px);
2677
+ }
2678
+ }
2679
+
2680
+ @keyframes slideOutDown {
2681
+ 0% {
2682
+ -webkit-transform: translateY(0);
2683
+ -ms-transform: translateY(0);
2684
+ transform: translateY(0);
2685
+ }
2686
+
2687
+ 100% {
2688
+ opacity: 0;
2689
+ -webkit-transform: translateY(2000px);
2690
+ -ms-transform: translateY(2000px);
2691
+ transform: translateY(2000px);
2692
+ }
2693
+ }
2694
+
2695
+ .slideOutDown {
2696
+ -webkit-animation-name: slideOutDown;
2697
+ animation-name: slideOutDown;
2698
+ }
2699
+
2700
+ @-webkit-keyframes hinge {
2701
+ 0% {
2702
+ -webkit-transform: rotate(0);
2703
+ transform: rotate(0);
2704
+ -webkit-transform-origin: top left;
2705
+ transform-origin: top left;
2706
+ -webkit-animation-timing-function: ease-in-out;
2707
+ animation-timing-function: ease-in-out;
2708
+ }
2709
+
2710
+ 20%, 60% {
2711
+ -webkit-transform: rotate(80deg);
2712
+ transform: rotate(80deg);
2713
+ -webkit-transform-origin: top left;
2714
+ transform-origin: top left;
2715
+ -webkit-animation-timing-function: ease-in-out;
2716
+ animation-timing-function: ease-in-out;
2717
+ }
2718
+
2719
+ 40% {
2720
+ -webkit-transform: rotate(60deg);
2721
+ transform: rotate(60deg);
2722
+ -webkit-transform-origin: top left;
2723
+ transform-origin: top left;
2724
+ -webkit-animation-timing-function: ease-in-out;
2725
+ animation-timing-function: ease-in-out;
2726
+ }
2727
+
2728
+ 80% {
2729
+ -webkit-transform: rotate(60deg) translateY(0);
2730
+ transform: rotate(60deg) translateY(0);
2731
+ -webkit-transform-origin: top left;
2732
+ transform-origin: top left;
2733
+ -webkit-animation-timing-function: ease-in-out;
2734
+ animation-timing-function: ease-in-out;
2735
+ opacity: 1;
2736
+ }
2737
+
2738
+ 100% {
2739
+ -webkit-transform: translateY(700px);
2740
+ transform: translateY(700px);
2741
+ opacity: 0;
2742
+ }
2743
+ }
2744
+
2745
+ @keyframes hinge {
2746
+ 0% {
2747
+ -webkit-transform: rotate(0);
2748
+ -ms-transform: rotate(0);
2749
+ transform: rotate(0);
2750
+ -webkit-transform-origin: top left;
2751
+ -ms-transform-origin: top left;
2752
+ transform-origin: top left;
2753
+ -webkit-animation-timing-function: ease-in-out;
2754
+ animation-timing-function: ease-in-out;
2755
+ }
2756
+
2757
+ 20%, 60% {
2758
+ -webkit-transform: rotate(80deg);
2759
+ -ms-transform: rotate(80deg);
2760
+ transform: rotate(80deg);
2761
+ -webkit-transform-origin: top left;
2762
+ -ms-transform-origin: top left;
2763
+ transform-origin: top left;
2764
+ -webkit-animation-timing-function: ease-in-out;
2765
+ animation-timing-function: ease-in-out;
2766
+ }
2767
+
2768
+ 40% {
2769
+ -webkit-transform: rotate(60deg);
2770
+ -ms-transform: rotate(60deg);
2771
+ transform: rotate(60deg);
2772
+ -webkit-transform-origin: top left;
2773
+ -ms-transform-origin: top left;
2774
+ transform-origin: top left;
2775
+ -webkit-animation-timing-function: ease-in-out;
2776
+ animation-timing-function: ease-in-out;
2777
+ }
2778
+
2779
+ 80% {
2780
+ -webkit-transform: rotate(60deg) translateY(0);
2781
+ -ms-transform: rotate(60deg) translateY(0);
2782
+ transform: rotate(60deg) translateY(0);
2783
+ -webkit-transform-origin: top left;
2784
+ -ms-transform-origin: top left;
2785
+ transform-origin: top left;
2786
+ -webkit-animation-timing-function: ease-in-out;
2787
+ animation-timing-function: ease-in-out;
2788
+ opacity: 1;
2789
+ }
2790
+
2791
+ 100% {
2792
+ -webkit-transform: translateY(700px);
2793
+ -ms-transform: translateY(700px);
2794
+ transform: translateY(700px);
2795
+ opacity: 0;
2796
+ }
2797
+ }
2798
+
2799
+ .hinge {
2800
+ -webkit-animation-name: hinge;
2801
+ animation-name: hinge;
2802
+ }
2803
+
2804
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
2805
+
2806
+ @-webkit-keyframes rollIn {
2807
+ 0% {
2808
+ opacity: 0;
2809
+ -webkit-transform: translateX(-100%) rotate(-120deg);
2810
+ transform: translateX(-100%) rotate(-120deg);
2811
+ }
2812
+
2813
+ 100% {
2814
+ opacity: 1;
2815
+ -webkit-transform: translateX(0px) rotate(0deg);
2816
+ transform: translateX(0px) rotate(0deg);
2817
+ }
2818
+ }
2819
+
2820
+ @keyframes rollIn {
2821
+ 0% {
2822
+ opacity: 0;
2823
+ -webkit-transform: translateX(-100%) rotate(-120deg);
2824
+ -ms-transform: translateX(-100%) rotate(-120deg);
2825
+ transform: translateX(-100%) rotate(-120deg);
2826
+ }
2827
+
2828
+ 100% {
2829
+ opacity: 1;
2830
+ -webkit-transform: translateX(0px) rotate(0deg);
2831
+ -ms-transform: translateX(0px) rotate(0deg);
2832
+ transform: translateX(0px) rotate(0deg);
2833
+ }
2834
+ }
2835
+
2836
+ .rollIn {
2837
+ -webkit-animation-name: rollIn;
2838
+ animation-name: rollIn;
2839
+ }
2840
+
2841
+ /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
2842
+
2843
+ @-webkit-keyframes rollOut {
2844
+ 0% {
2845
+ opacity: 1;
2846
+ -webkit-transform: translateX(0px) rotate(0deg);
2847
+ transform: translateX(0px) rotate(0deg);
2848
+ }
2849
+
2850
+ 100% {
2851
+ opacity: 0;
2852
+ -webkit-transform: translateX(100%) rotate(120deg);
2853
+ transform: translateX(100%) rotate(120deg);
2854
+ }
2855
+ }
2856
+
2857
+ @keyframes rollOut {
2858
+ 0% {
2859
+ opacity: 1;
2860
+ -webkit-transform: translateX(0px) rotate(0deg);
2861
+ -ms-transform: translateX(0px) rotate(0deg);
2862
+ transform: translateX(0px) rotate(0deg);
2863
+ }
2864
+
2865
+ 100% {
2866
+ opacity: 0;
2867
+ -webkit-transform: translateX(100%) rotate(120deg);
2868
+ -ms-transform: translateX(100%) rotate(120deg);
2869
+ transform: translateX(100%) rotate(120deg);
2870
+ }
2871
+ }
2872
+
2873
+ .rollOut {
2874
+ -webkit-animation-name: rollOut;
2875
+ animation-name: rollOut;
2876
+ }
2877
+
2878
+ @-webkit-keyframes zoomIn {
2879
+ 0% {
2880
+ opacity: 0;
2881
+ -webkit-transform: scale(.3);
2882
+ transform: scale(.3);
2883
+ }
2884
+
2885
+ 50% {
2886
+ opacity: 1;
2887
+ }
2888
+ }
2889
+
2890
+ @keyframes zoomIn {
2891
+ 0% {
2892
+ opacity: 0;
2893
+ -webkit-transform: scale(.3);
2894
+ -ms-transform: scale(.3);
2895
+ transform: scale(.3);
2896
+ }
2897
+
2898
+ 50% {
2899
+ opacity: 1;
2900
+ }
2901
+ }
2902
+
2903
+ .zoomIn {
2904
+ -webkit-animation-name: zoomIn;
2905
+ animation-name: zoomIn;
2906
+ }
2907
+
2908
+ @-webkit-keyframes zoomInDown {
2909
+ 0% {
2910
+ opacity: 0;
2911
+ -webkit-transform: scale(.1) translateY(-2000px);
2912
+ transform: scale(.1) translateY(-2000px);
2913
+ -webkit-animation-timing-function: ease-in-out;
2914
+ animation-timing-function: ease-in-out;
2915
+ }
2916
+
2917
+ 60% {
2918
+ opacity: 1;
2919
+ -webkit-transform: scale(.475) translateY(60px);
2920
+ transform: scale(.475) translateY(60px);
2921
+ -webkit-animation-timing-function: ease-out;
2922
+ animation-timing-function: ease-out;
2923
+ }
2924
+ }
2925
+
2926
+ @keyframes zoomInDown {
2927
+ 0% {
2928
+ opacity: 0;
2929
+ -webkit-transform: scale(.1) translateY(-2000px);
2930
+ -ms-transform: scale(.1) translateY(-2000px);
2931
+ transform: scale(.1) translateY(-2000px);
2932
+ -webkit-animation-timing-function: ease-in-out;
2933
+ animation-timing-function: ease-in-out;
2934
+ }
2935
+
2936
+ 60% {
2937
+ opacity: 1;
2938
+ -webkit-transform: scale(.475) translateY(60px);
2939
+ -ms-transform: scale(.475) translateY(60px);
2940
+ transform: scale(.475) translateY(60px);
2941
+ -webkit-animation-timing-function: ease-out;
2942
+ animation-timing-function: ease-out;
2943
+ }
2944
+ }
2945
+
2946
+ .zoomInDown {
2947
+ -webkit-animation-name: zoomInDown;
2948
+ animation-name: zoomInDown;
2949
+ }
2950
+
2951
+ @-webkit-keyframes zoomInLeft {
2952
+ 0% {
2953
+ opacity: 0;
2954
+ -webkit-transform: scale(.1) translateX(-2000px);
2955
+ transform: scale(.1) translateX(-2000px);
2956
+ -webkit-animation-timing-function: ease-in-out;
2957
+ animation-timing-function: ease-in-out;
2958
+ }
2959
+
2960
+ 60% {
2961
+ opacity: 1;
2962
+ -webkit-transform: scale(.475) translateX(48px);
2963
+ transform: scale(.475) translateX(48px);
2964
+ -webkit-animation-timing-function: ease-out;
2965
+ animation-timing-function: ease-out;
2966
+ }
2967
+ }
2968
+
2969
+ @keyframes zoomInLeft {
2970
+ 0% {
2971
+ opacity: 0;
2972
+ -webkit-transform: scale(.1) translateX(-2000px);
2973
+ -ms-transform: scale(.1) translateX(-2000px);
2974
+ transform: scale(.1) translateX(-2000px);
2975
+ -webkit-animation-timing-function: ease-in-out;
2976
+ animation-timing-function: ease-in-out;
2977
+ }
2978
+
2979
+ 60% {
2980
+ opacity: 1;
2981
+ -webkit-transform: scale(.475) translateX(48px);
2982
+ -ms-transform: scale(.475) translateX(48px);
2983
+ transform: scale(.475) translateX(48px);
2984
+ -webkit-animation-timing-function: ease-out;
2985
+ animation-timing-function: ease-out;
2986
+ }
2987
+ }
2988
+
2989
+ .zoomInLeft {
2990
+ -webkit-animation-name: zoomInLeft;
2991
+ animation-name: zoomInLeft;
2992
+ }
2993
+
2994
+ @-webkit-keyframes zoomInRight {
2995
+ 0% {
2996
+ opacity: 0;
2997
+ -webkit-transform: scale(.1) translateX(2000px);
2998
+ transform: scale(.1) translateX(2000px);
2999
+ -webkit-animation-timing-function: ease-in-out;
3000
+ animation-timing-function: ease-in-out;
3001
+ }
3002
+
3003
+ 60% {
3004
+ opacity: 1;
3005
+ -webkit-transform: scale(.475) translateX(-48px);
3006
+ transform: scale(.475) translateX(-48px);
3007
+ -webkit-animation-timing-function: ease-out;
3008
+ animation-timing-function: ease-out;
3009
+ }
3010
+ }
3011
+
3012
+ @keyframes zoomInRight {
3013
+ 0% {
3014
+ opacity: 0;
3015
+ -webkit-transform: scale(.1) translateX(2000px);
3016
+ -ms-transform: scale(.1) translateX(2000px);
3017
+ transform: scale(.1) translateX(2000px);
3018
+ -webkit-animation-timing-function: ease-in-out;
3019
+ animation-timing-function: ease-in-out;
3020
+ }
3021
+
3022
+ 60% {
3023
+ opacity: 1;
3024
+ -webkit-transform: scale(.475) translateX(-48px);
3025
+ -ms-transform: scale(.475) translateX(-48px);
3026
+ transform: scale(.475) translateX(-48px);
3027
+ -webkit-animation-timing-function: ease-out;
3028
+ animation-timing-function: ease-out;
3029
+ }
3030
+ }
3031
+
3032
+ .zoomInRight {
3033
+ -webkit-animation-name: zoomInRight;
3034
+ animation-name: zoomInRight;
3035
+ }
3036
+
3037
+ @-webkit-keyframes zoomInUp {
3038
+ 0% {
3039
+ opacity: 0;
3040
+ -webkit-transform: scale(.1) translateY(2000px);
3041
+ transform: scale(.1) translateY(2000px);
3042
+ -webkit-animation-timing-function: ease-in-out;
3043
+ animation-timing-function: ease-in-out;
3044
+ }
3045
+
3046
+ 60% {
3047
+ opacity: 1;
3048
+ -webkit-transform: scale(.475) translateY(-60px);
3049
+ transform: scale(.475) translateY(-60px);
3050
+ -webkit-animation-timing-function: ease-out;
3051
+ animation-timing-function: ease-out;
3052
+ }
3053
+ }
3054
+
3055
+ @keyframes zoomInUp {
3056
+ 0% {
3057
+ opacity: 0;
3058
+ -webkit-transform: scale(.1) translateY(2000px);
3059
+ -ms-transform: scale(.1) translateY(2000px);
3060
+ transform: scale(.1) translateY(2000px);
3061
+ -webkit-animation-timing-function: ease-in-out;
3062
+ animation-timing-function: ease-in-out;
3063
+ }
3064
+
3065
+ 60% {
3066
+ opacity: 1;
3067
+ -webkit-transform: scale(.475) translateY(-60px);
3068
+ -ms-transform: scale(.475) translateY(-60px);
3069
+ transform: scale(.475) translateY(-60px);
3070
+ -webkit-animation-timing-function: ease-out;
3071
+ animation-timing-function: ease-out;
3072
+ }
3073
+ }
3074
+
3075
+ .zoomInUp {
3076
+ -webkit-animation-name: zoomInUp;
3077
+ animation-name: zoomInUp;
3078
+ }
3079
+
3080
+ @-webkit-keyframes zoomOut {
3081
+ 0% {
3082
+ opacity: 1;
3083
+ -webkit-transform: scale(1);
3084
+ transform: scale(1);
3085
+ }
3086
+
3087
+ 50% {
3088
+ opacity: 0;
3089
+ -webkit-transform: scale(.3);
3090
+ transform: scale(.3);
3091
+ }
3092
+
3093
+ 100% {
3094
+ opacity: 0;
3095
+ }
3096
+ }
3097
+
3098
+ @keyframes zoomOut {
3099
+ 0% {
3100
+ opacity: 1;
3101
+ -webkit-transform: scale(1);
3102
+ -ms-transform: scale(1);
3103
+ transform: scale(1);
3104
+ }
3105
+
3106
+ 50% {
3107
+ opacity: 0;
3108
+ -webkit-transform: scale(.3);
3109
+ -ms-transform: scale(.3);
3110
+ transform: scale(.3);
3111
+ }
3112
+
3113
+ 100% {
3114
+ opacity: 0;
3115
+ }
3116
+ }
3117
+
3118
+ .zoomOut {
3119
+ -webkit-animation-name: zoomOut;
3120
+ animation-name: zoomOut;
3121
+ }
3122
+
3123
+ @-webkit-keyframes zoomOutDown {
3124
+ 40% {
3125
+ opacity: 1;
3126
+ -webkit-transform: scale(.475) translateY(-60px);
3127
+ transform: scale(.475) translateY(-60px);
3128
+ -webkit-animation-timing-function: linear;
3129
+ animation-timing-function: linear;
3130
+ }
3131
+
3132
+ 100% {
3133
+ opacity: 0;
3134
+ -webkit-transform: scale(.1) translateY(2000px);
3135
+ transform: scale(.1) translateY(2000px);
3136
+ -webkit-transform-origin: center bottom;
3137
+ transform-origin: center bottom;
3138
+ }
3139
+ }
3140
+
3141
+ @keyframes zoomOutDown {
3142
+ 40% {
3143
+ opacity: 1;
3144
+ -webkit-transform: scale(.475) translateY(-60px);
3145
+ -ms-transform: scale(.475) translateY(-60px);
3146
+ transform: scale(.475) translateY(-60px);
3147
+ -webkit-animation-timing-function: linear;
3148
+ animation-timing-function: linear;
3149
+ }
3150
+
3151
+ 100% {
3152
+ opacity: 0;
3153
+ -webkit-transform: scale(.1) translateY(2000px);
3154
+ -ms-transform: scale(.1) translateY(2000px);
3155
+ transform: scale(.1) translateY(2000px);
3156
+ -webkit-transform-origin: center bottom;
3157
+ -ms-transform-origin: center bottom;
3158
+ transform-origin: center bottom;
3159
+ }
3160
+ }
3161
+
3162
+ .zoomOutDown {
3163
+ -webkit-animation-name: zoomOutDown;
3164
+ animation-name: zoomOutDown;
3165
+ }
3166
+
3167
+ @-webkit-keyframes zoomOutLeft {
3168
+ 40% {
3169
+ opacity: 1;
3170
+ -webkit-transform: scale(.475) translateX(42px);
3171
+ transform: scale(.475) translateX(42px);
3172
+ -webkit-animation-timing-function: linear;
3173
+ animation-timing-function: linear;
3174
+ }
3175
+
3176
+ 100% {
3177
+ opacity: 0;
3178
+ -webkit-transform: scale(.1) translateX(-2000px);
3179
+ transform: scale(.1) translateX(-2000px);
3180
+ -webkit-transform-origin: left center;
3181
+ transform-origin: left center;
3182
+ }
3183
+ }
3184
+
3185
+ @keyframes zoomOutLeft {
3186
+ 40% {
3187
+ opacity: 1;
3188
+ -webkit-transform: scale(.475) translateX(42px);
3189
+ -ms-transform: scale(.475) translateX(42px);
3190
+ transform: scale(.475) translateX(42px);
3191
+ -webkit-animation-timing-function: linear;
3192
+ animation-timing-function: linear;
3193
+ }
3194
+
3195
+ 100% {
3196
+ opacity: 0;
3197
+ -webkit-transform: scale(.1) translateX(-2000px);
3198
+ -ms-transform: scale(.1) translateX(-2000px);
3199
+ transform: scale(.1) translateX(-2000px);
3200
+ -webkit-transform-origin: left center;
3201
+ -ms-transform-origin: left center;
3202
+ transform-origin: left center;
3203
+ }
3204
+ }
3205
+
3206
+ .zoomOutLeft {
3207
+ -webkit-animation-name: zoomOutLeft;
3208
+ animation-name: zoomOutLeft;
3209
+ }
3210
+
3211
+ @-webkit-keyframes zoomOutRight {
3212
+ 40% {
3213
+ opacity: 1;
3214
+ -webkit-transform: scale(.475) translateX(-42px);
3215
+ transform: scale(.475) translateX(-42px);
3216
+ -webkit-animation-timing-function: linear;
3217
+ animation-timing-function: linear;
3218
+ }
3219
+
3220
+ 100% {
3221
+ opacity: 0;
3222
+ -webkit-transform: scale(.1) translateX(2000px);
3223
+ transform: scale(.1) translateX(2000px);
3224
+ -webkit-transform-origin: right center;
3225
+ transform-origin: right center;
3226
+ }
3227
+ }
3228
+
3229
+ @keyframes zoomOutRight {
3230
+ 40% {
3231
+ opacity: 1;
3232
+ -webkit-transform: scale(.475) translateX(-42px);
3233
+ -ms-transform: scale(.475) translateX(-42px);
3234
+ transform: scale(.475) translateX(-42px);
3235
+ -webkit-animation-timing-function: linear;
3236
+ animation-timing-function: linear;
3237
+ }
3238
+
3239
+ 100% {
3240
+ opacity: 0;
3241
+ -webkit-transform: scale(.1) translateX(2000px);
3242
+ -ms-transform: scale(.1) translateX(2000px);
3243
+ transform: scale(.1) translateX(2000px);
3244
+ -webkit-transform-origin: right center;
3245
+ -ms-transform-origin: right center;
3246
+ transform-origin: right center;
3247
+ }
3248
+ }
3249
+
3250
+ .zoomOutRight {
3251
+ -webkit-animation-name: zoomOutRight;
3252
+ animation-name: zoomOutRight;
3253
+ }
3254
+
3255
+ @-webkit-keyframes zoomOutUp {
3256
+ 40% {
3257
+ opacity: 1;
3258
+ -webkit-transform: scale(.475) translateY(60px);
3259
+ transform: scale(.475) translateY(60px);
3260
+ -webkit-animation-timing-function: linear;
3261
+ animation-timing-function: linear;
3262
+ }
3263
+
3264
+ 100% {
3265
+ opacity: 0;
3266
+ -webkit-transform: scale(.1) translateY(-2000px);
3267
+ transform: scale(.1) translateY(-2000px);
3268
+ -webkit-transform-origin: center top;
3269
+ transform-origin: center top;
3270
+ }
3271
+ }
3272
+
3273
+ @keyframes zoomOutUp {
3274
+ 40% {
3275
+ opacity: 1;
3276
+ -webkit-transform: scale(.475) translateY(60px);
3277
+ -ms-transform: scale(.475) translateY(60px);
3278
+ transform: scale(.475) translateY(60px);
3279
+ -webkit-animation-timing-function: linear;
3280
+ animation-timing-function: linear;
3281
+ }
3282
+
3283
+ 100% {
3284
+ opacity: 0;
3285
+ -webkit-transform: scale(.1) translateY(-2000px);
3286
+ -ms-transform: scale(.1) translateY(-2000px);
3287
+ transform: scale(.1) translateY(-2000px);
3288
+ -webkit-transform-origin: center top;
3289
+ -ms-transform-origin: center top;
3290
+ transform-origin: center top;
3291
+ }
3292
+ }
3293
+
3294
+ .zoomOutUp {
3295
+ -webkit-animation-name: zoomOutUp;
3296
+ animation-name: zoomOutUp;
3297
+ }
assets/css/animate.min.css ADDED
@@ -0,0 +1 @@
 
1
+ @charset "UTF-8";.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}@-webkit-keyframes bounce{0%,20%,50%,80%,100%{-webkit-transform:translateY(0);transform:translateY(0)}40%{-webkit-transform:translateY(-30px);transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px);transform:translateY(-15px)}}@keyframes bounce{0%,20%,50%,80%,100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}40%{-webkit-transform:translateY(-30px);-ms-transform:translateY(-30px);transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px);-ms-transform:translateY(-15px);transform:translateY(-15px)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce}@-webkit-keyframes flash{0%,50%,100%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,100%{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);transform:scale(1.1)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes pulse{0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}100%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scale(1);transform:scale(1)}30%{-webkit-transform:scaleX(1.25) scaleY(0.75);transform:scaleX(1.25) scaleY(0.75)}40%{-webkit-transform:scaleX(0.75) scaleY(1.25);transform:scaleX(0.75) scaleY(1.25)}60%{-webkit-transform:scaleX(1.15) scaleY(0.85);transform:scaleX(1.15) scaleY(0.85)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes rubberBand{0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}30%{-webkit-transform:scaleX(1.25) scaleY(0.75);-ms-transform:scaleX(1.25) scaleY(0.75);transform:scaleX(1.25) scaleY(0.75)}40%{-webkit-transform:scaleX(0.75) scaleY(1.25);-ms-transform:scaleX(0.75) scaleY(1.25);transform:scaleX(0.75) scaleY(1.25)}60%{-webkit-transform:scaleX(1.15) scaleY(0.85);-ms-transform:scaleX(1.15) scaleY(0.85);transform:scaleX(1.15) scaleY(0.85)}100%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);-ms-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);-ms-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);-ms-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);-ms-transform:rotate(-5deg);transform:rotate(-5deg)}100%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}}.swing{-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scale(1);transform:scale(1)}10%,20%{-webkit-transform:scale(0.9) rotate(-3deg);transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg);transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}}@keyframes tada{0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}10%,20%{-webkit-transform:scale(0.9) rotate(-3deg);-ms-transform:scale(0.9) rotate(-3deg);transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg);-ms-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg);-ms-transform:scale(1.1) rotate(-3deg);transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0);-ms-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}15%{-webkit-transform:translateX(-25%) rotate(-5deg);transform:translateX(-25%) rotate(-5deg)}30%{-webkit-transform:translateX(20%) rotate(3deg);transform:translateX(20%) rotate(3deg)}45%{-webkit-transform:translateX(-15%) rotate(-3deg);transform:translateX(-15%) rotate(-3deg)}60%{-webkit-transform:translateX(10%) rotate(2deg);transform:translateX(10%) rotate(2deg)}75%{-webkit-transform:translateX(-5%) rotate(-1deg);transform:translateX(-5%) rotate(-1deg)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}@keyframes wobble{0%{-webkit-transform:translateX(0%);-ms-transform:translateX(0%);transform:translateX(0%)}15%{-webkit-transform:translateX(-25%) rotate(-5deg);-ms-transform:translateX(-25%) rotate(-5deg);transform:translateX(-25%) rotate(-5deg)}30%{-webkit-transform:translateX(20%) rotate(3deg);-ms-transform:translateX(20%) rotate(3deg);transform:translateX(20%) rotate(3deg)}45%{-webkit-transform:translateX(-15%) rotate(-3deg);-ms-transform:translateX(-15%) rotate(-3deg);transform:translateX(-15%) rotate(-3deg)}60%{-webkit-transform:translateX(10%) rotate(2deg);-ms-transform:translateX(10%) rotate(2deg);transform:translateX(10%) rotate(2deg)}75%{-webkit-transform:translateX(-5%) rotate(-1deg);-ms-transform:translateX(-5%) rotate(-1deg);transform:translateX(-5%) rotate(-1deg)}100%{-webkit-transform:translateX(0%);-ms-transform:translateX(0%);transform:translateX(0%)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}50%{opacity:1;-webkit-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(.9);transform:scale(.9)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);-ms-transform:scale(.3);transform:scale(.3)}50%{opacity:1;-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(.9);-ms-transform:scale(.9);transform:scale(.9)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}60%{opacity:1;-webkit-transform:translateY(30px);transform:translateY(30px)}80%{-webkit-transform:translateY(-10px);transform:translateY(-10px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes bounceInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}60%{opacity:1;-webkit-transform:translateY(30px);-ms-transform:translateY(30px);transform:translateY(30px)}80%{-webkit-transform:translateY(-10px);-ms-transform:translateY(-10px);transform:translateY(-10px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}60%{opacity:1;-webkit-transform:translateX(30px);transform:translateX(30px)}80%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes bounceInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}60%{opacity:1;-webkit-transform:translateX(30px);-ms-transform:translateX(30px);transform:translateX(30px)}80%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}60%{opacity:1;-webkit-transform:translateX(-30px);transform:translateX(-30px)}80%{-webkit-transform:translateX(10px);transform:translateX(10px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes bounceInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}60%{opacity:1;-webkit-transform:translateX(-30px);-ms-transform:translateX(-30px);transform:translateX(-30px)}80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}60%{opacity:1;-webkit-transform:translateY(-30px);transform:translateY(-30px)}80%{-webkit-transform:translateY(10px);transform:translateY(10px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes bounceInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}60%{opacity:1;-webkit-transform:translateY(-30px);-ms-transform:translateY(-30px);transform:translateY(-30px)}80%{-webkit-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{0%{-webkit-transform:scale(1);transform:scale(1)}25%{-webkit-transform:scale(.95);transform:scale(.95)}50%{opacity:1;-webkit-transform:scale(1.1);transform:scale(1.1)}100%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}}@keyframes bounceOut{0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}25%{-webkit-transform:scale(.95);-ms-transform:scale(.95);transform:scale(.95)}50%{opacity:1;-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}100%{opacity:0;-webkit-transform:scale(.3);-ms-transform:scale(.3);transform:scale(.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{0%{-webkit-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}}@keyframes bounceOutDown{0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(20px);transform:translateX(20px)}100%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}}@keyframes bounceOutLeft{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(20px);-ms-transform:translateX(20px);transform:translateX(20px)}100%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}}@keyframes bounceOutRight{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(-20px);-ms-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{0%{-webkit-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(20px);transform:translateY(20px)}100%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes bounceOutUp{0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px)}100%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-ms-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-ms-transform:translateX(20px);transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}}@keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}}@keyframes fadeOutDownBig{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}}@keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-20px);-ms-transform:translateX(-20px);transform:translateX(-20px)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}}@keyframes fadeOutLeftBig{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}}@keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(20px);-ms-transform:translateX(20px);transform:translateX(20px)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}}@keyframes fadeOutRightBig{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}}@keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes fadeOutUpBig{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) translateZ(0) rotateY(-360deg) scale(1);transform:perspective(400px) translateZ(0) rotateY(-360deg) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-190deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(-190deg) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-170deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(-170deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) translateZ(0) rotateY(0deg) scale(.95);transform:perspective(400px) translateZ(0) rotateY(0deg) scale(.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px) translateZ(0) rotateY(0deg) scale(1);transform:perspective(400px) translateZ(0) rotateY(0deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) translateZ(0) rotateY(-360deg) scale(1);-ms-transform:perspective(400px) translateZ(0) rotateY(-360deg) scale(1);transform:perspective(400px) translateZ(0) rotateY(-360deg) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-190deg) scale(1);-ms-transform:perspective(400px) translateZ(150px) rotateY(-190deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(-190deg) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-170deg) scale(1);-ms-transform:perspective(400px) translateZ(150px) rotateY(-170deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(-170deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) translateZ(0) rotateY(0deg) scale(.95);-ms-transform:perspective(400px) translateZ(0) rotateY(0deg) scale(.95);transform:perspective(400px) translateZ(0) rotateY(0deg) scale(.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px) translateZ(0) rotateY(0deg) scale(1);-ms-transform:perspective(400px) translateZ(0) rotateY(0deg) scale(1);transform:perspective(400px) translateZ(0) rotateY(0deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;-ms-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}100%{-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);opacity:1}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);-ms-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-10deg);-ms-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);-ms-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}100%{-webkit-transform:perspective(400px) rotateX(0deg);-ms-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);opacity:1}}.flipInX{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-10deg);transform:perspective(400px) rotateY(-10deg)}70%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg)}100%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);opacity:1}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);-ms-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-10deg);-ms-transform:perspective(400px) rotateY(-10deg);transform:perspective(400px) rotateY(-10deg)}70%{-webkit-transform:perspective(400px) rotateY(10deg);-ms-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg)}100%{-webkit-transform:perspective(400px) rotateY(0deg);-ms-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);opacity:1}}.flipInY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px) rotateX(0deg);-ms-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateX(90deg);-ms-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px) rotateY(0deg);-ms-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateY(90deg);-ms-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}60%{-webkit-transform:translateX(-20%) skewX(30deg);transform:translateX(-20%) skewX(30deg);opacity:1}80%{-webkit-transform:translateX(0%) skewX(-15deg);transform:translateX(0%) skewX(-15deg);opacity:1}100%{-webkit-transform:translateX(0%) skewX(0deg);transform:translateX(0%) skewX(0deg);opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translateX(100%) skewX(-30deg);-ms-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}60%{-webkit-transform:translateX(-20%) skewX(30deg);-ms-transform:translateX(-20%) skewX(30deg);transform:translateX(-20%) skewX(30deg);opacity:1}80%{-webkit-transform:translateX(0%) skewX(-15deg);-ms-transform:translateX(0%) skewX(-15deg);transform:translateX(0%) skewX(-15deg);opacity:1}100%{-webkit-transform:translateX(0%) skewX(0deg);-ms-transform:translateX(0%) skewX(0deg);transform:translateX(0%) skewX(0deg);opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{-webkit-transform:translateX(0%) skewX(0deg);transform:translateX(0%) skewX(0deg);opacity:1}100%{-webkit-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}}@keyframes lightSpeedOut{0%{-webkit-transform:translateX(0%) skewX(0deg);-ms-transform:translateX(0%) skewX(0deg);transform:translateX(0%) skewX(0deg);opacity:1}100%{-webkit-transform:translateX(100%) skewX(-30deg);-ms-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}100%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(-200deg);-ms-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}100%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(200deg);-ms-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}}@keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}}@keyframes slideOutRight{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes slideOutUp{0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}@-webkit-keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}}@keyframes slideOutDown{0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes hinge{0%{-webkit-transform:rotate(0);transform:rotate(0);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}80%{-webkit-transform:rotate(60deg) translateY(0);transform:rotate(60deg) translateY(0);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translateY(700px);transform:translateY(700px);opacity:0}}@keyframes hinge{0%{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);-ms-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%{-webkit-transform:rotate(60deg);-ms-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}80%{-webkit-transform:rotate(60deg) translateY(0);-ms-transform:rotate(60deg) translateY(0);transform:rotate(60deg) translateY(0);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translateY(700px);-ms-transform:translateY(700px);transform:translateY(700px);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);-ms-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}100%{opacity:0;-webkit-transform:translateX(100%) rotate(120deg);transform:translateX(100%) rotate(120deg)}}@keyframes rollOut{0%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);-ms-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}100%{opacity:0;-webkit-transform:translateX(100%) rotate(120deg);-ms-transform:translateX(100%) rotate(120deg);transform:translateX(100%) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale(.3);-ms-transform:scale(.3);transform:scale(.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale(.1) translateX(2000px);transform:scale(.1) translateX(2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(-48px);transform:scale(.475) translateX(-48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale(.1) translateX(2000px);-ms-transform:scale(.1) translateX(2000px);transform:scale(.1) translateX(2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(-48px);-ms-transform:scale(.475) translateX(-48px);transform:scale(.475) translateX(-48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale(.1) translateY(2000px);transform:scale(.1) translateY(2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(-60px);transform:scale(.475) translateY(-60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale(.1) translateY(2000px);-ms-transform:scale(.1) translateY(2000px);transform:scale(.1) translateY(2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(-60px);-ms-transform:scale(.475) translateY(-60px);transform:scale(.475) translateY(-60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}100%{opacity:0}}@keyframes zoomOut{0%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(.3);-ms-transform:scale(.3);transform:scale(.3)}100%{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale(.475) translateY(-60px);transform:scale(.475) translateY(-60px);-webkit-animation-timing-function:linear;animation-timing-function:linear}100%{opacity:0;-webkit-transform:scale(.1) translateY(2000px);transform:scale(.1) translateY(2000px);-webkit-transform-origin:center bottom;transform-origin:center bottom}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale(.475) translateY(-60px);-ms-transform:scale(.475) translateY(-60px);transform:scale(.475) translateY(-60px);-webkit-animation-timing-function:linear;animation-timing-function:linear}100%{opacity:0;-webkit-transform:scale(.1) translateY(2000px);-ms-transform:scale(.1) translateY(2000px);transform:scale(.1) translateY(2000px);-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale(.475) translateX(42px);transform:scale(.475) translateX(42px);-webkit-animation-timing-function:linear;animation-timing-function:linear}100%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale(.475) translateX(42px);-ms-transform:scale(.475) translateX(42px);transform:scale(.475) translateX(42px);-webkit-animation-timing-function:linear;animation-timing-function:linear}100%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-transform-origin:left center;-ms-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale(.475) translateX(-42px);transform:scale(.475) translateX(-42px);-webkit-animation-timing-function:linear;animation-timing-function:linear}100%{opacity:0;-webkit-transform:scale(.1) translateX(2000px);transform:scale(.1) translateX(2000px);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale(.475) translateX(-42px);-ms-transform:scale(.475) translateX(-42px);transform:scale(.475) translateX(-42px);-webkit-animation-timing-function:linear;animation-timing-function:linear}100%{opacity:0;-webkit-transform:scale(.1) translateX(2000px);-ms-transform:scale(.1) translateX(2000px);transform:scale(.1) translateX(2000px);-webkit-transform-origin:right center;-ms-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:linear;animation-timing-function:linear}100%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-transform-origin:center top;transform-origin:center top}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:linear;animation-timing-function:linear}100%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-transform-origin:center top;-ms-transform-origin:center top;transform-origin:center top}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}
assets/css/carousel-theme.css ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .swiper-navigation .swiper-button-prev:after,
2
+ .swiper-navigation .swiper-button-next:after {
3
+ content: none;
4
+ }
5
+
6
+ .swiper-navigation {
7
+ text-align: center;
8
+ margin-top:10px;
9
+ }
10
+
11
+ .swiper-navigation .swiper-button-prev,
12
+ .swiper-navigation .swiper-button-next {
13
+ position: initial;
14
+ width: initial;
15
+ left: initial;
16
+ top: initial;
17
+ right: initial;
18
+ display: inline-block;
19
+ color: #fff;
20
+ font-size: 14px;
21
+ margin: 0 4px;
22
+ padding: 3px 10px;
23
+ background: #d6d6d6;
24
+ cursor: pointer;
25
+ -webkit-border-radius: 3px;
26
+ -moz-border-radius: 3px;
27
+ border-radius: 3px;
28
+ }
29
+
30
+ .swiper-navigation .swiper-button-prev:hover,
31
+ .swiper-navigation .swiper-button-next:hover {
32
+ background: #869791;
33
+ color: #fff;
34
+ text-decoration: none;
35
+ }
36
+
37
+ .swiper-pagination-wrapper {
38
+ position: relative;
39
+ margin-top:10px;
40
+ }
41
+
42
+ .swiper-pagination-bullet {
43
+ width: 10px;
44
+ height: 10px;
45
+ }
46
+
47
+ .swiper-pagination-bullets {
48
+ right: 10px;
49
+ top: 50%;
50
+ transform: translate3d(0px, -50%, 0);
51
+ }
52
+ .swiper-pagination-bullets .swiper-pagination-bullet {
53
+ margin: 6px 0;
54
+ display: block;
55
+ }
56
+ .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
57
+ top: 50%;
58
+ transform: translateY(-50%);
59
+ width: 10px;
60
+ }
61
+ .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
62
+ display: inline-block;
63
+ transition: 200ms transform, 200ms top;
64
+ }
65
+ .swiper-pagination-bullets .swiper-pagination-bullet {
66
+ margin: 0 4px;
67
+ }
68
+ .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
69
+ left: 50%;
70
+ transform: translateX(-50%);
71
+ white-space: nowrap;
72
+ }
73
+ .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
74
+ transition: 200ms transform, 200ms left;
75
+ }
76
+ .swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
77
+ transition: 200ms transform, 200ms right;
78
+ }
79
+
80
+ .swiper-pagination-bullet-active {
81
+ background: #869791;
82
+ }
83
+
assets/css/enjoy-instagram.css CHANGED
@@ -8,28 +8,39 @@
8
  }
9
 
10
  .ei-media-type-video:before {
11
- position: absolute;
12
- right: 10px;
13
- color: #fff;
14
- content: "\f04b";
15
- font-family: 'FontAwesome';
16
- z-index: 10;
17
- pointer-events: none;
18
  }
 
19
  .ei-media-type-video:hover:before {
20
  opacity: 1;
21
  }
22
 
 
 
23
 
24
- #swipebox-title {
25
- background-color: rgba(0, 0, 0, .5);
26
- padding: 20px 50px 20px 50px;
27
- text-align: left;
28
- line-height: 1.7;
 
 
 
 
 
 
 
 
 
 
 
29
  }
30
-
31
-
32
-
33
  .caption-container .enjoy-instagram-username img {
34
  height: 50px;
35
  width: 50px;
@@ -50,79 +61,24 @@
50
  }
51
  .caption-container .fa {
52
  color:#999;
53
-
54
  }
55
 
56
- a.fancybox {
57
- text-decoration:none;
58
- }
59
 
60
- .ei-meta span {
61
- text-decoration:none;
62
- }
63
- .fancybox-navigation {
64
- width: 60px;
65
- }
66
- .fancybox-navigation span {
67
- visibility: visible;
68
- opacity: 0.5;
69
- }
70
- .fancybox-navigation:hover span {
71
- opacity: 1;
72
- }
73
- .fancybox-next {
74
- right: -60px;
75
- }
76
- .fancybox-prev {
77
- left: -60px;
78
- }
79
- .fancybox-video {
80
- width: 100%!important;
81
- }
82
- .img-big img {margin:0 auto;}
83
-
84
- .likes_count, .enjoy-instagram-username {display:inline-block;}
85
- .ei-media-type-video {
86
- position: relative;
87
  cursor: pointer;
88
  }
89
 
90
- .enin-wall .ei-media-type-video {
 
91
  display: block;
92
- }
93
-
94
- .ei-media-type-video:before {
95
- position: absolute;
96
- right: 10px;
97
- color: #fff;
98
- content: "\f04b";
99
- font-family: 'FontAwesome';
100
- z-index: 10;
101
- pointer-events: none;
102
- }
103
-
104
- .ei-media-type-video:hover:before {
105
- opacity: 1;
106
- }
107
-
108
- #swipebox-title {
109
- background-color: rgba(0, 0, 0, .5);
110
- padding: 20px 50px 20px 50px;
111
- text-align: left;
112
- line-height: 1.7;
113
- }
114
-
115
- .enjoy-instagram-username {
116
- margin: 10px 0 20px 0;
117
- }
118
- .caption-container a {
119
- display: inline-block;
120
- vertical-align: middle;
121
- }
122
- .caption-container .likes_count {
123
- margin: 10px 0 10px 0;
124
- color:#999;
125
- float:right;
126
  }
127
 
128
  .ei-meta-carousel {
@@ -151,7 +107,7 @@ a.fancybox {
151
  vertical-align: middle;
152
  color: #FFF;
153
  line-height: normal;
154
- text-shadow: 0 0 5px rgba(0, 0, 0, 0.8);
155
  font-size: 16px;
156
  }
157
 
@@ -184,3 +140,10 @@ a.fancybox {
184
  .img-big img {margin:0 auto;}
185
 
186
  .likes_count, .enjoy-instagram-username {display:inline-block;}
 
 
 
 
 
 
 
8
  }
9
 
10
  .ei-media-type-video:before {
11
+ position: absolute;
12
+ right: 10px;
13
+ color: #fff;
14
+ content: "\f04b";
15
+ font-family: 'FontAwesome';
16
+ z-index: 10;
17
+ pointer-events: none;
18
  }
19
+
20
  .ei-media-type-video:hover:before {
21
  opacity: 1;
22
  }
23
 
24
+ /* 15 Novembre 2020 - New lightbox
25
+ Edited by: Vito Caruso */
26
 
27
+ .fancybox-content {
28
+ max-width: 600px;
29
+ width: 100%;
30
+ position: relative;
31
+ background: #fff;
32
+ padding:0;
33
+ }
34
+ .fancybox-content .img-big {
35
+ max-width: 100%;
36
+ max-height: 100%;
37
+ width: auto;
38
+ height: auto;
39
+ margin: 0 auto;
40
+ }
41
+ .fancybox-content .caption-container {
42
+ padding:30px;
43
  }
 
 
 
44
  .caption-container .enjoy-instagram-username img {
45
  height: 50px;
46
  width: 50px;
61
  }
62
  .caption-container .fa {
63
  color:#999;
 
64
  }
65
 
 
 
 
66
 
67
+ .fancybox-caption__body {
68
+ height: 42px;
69
+ overflow: hidden;
70
+ text-overflow: ellipsis;
71
+ white-space: nowrap;
72
+ -webkit-line-clamp: 2;
73
+ -webkit-box-orient: vertical;
74
+ display: -webkit-box;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  cursor: pointer;
76
  }
77
 
78
+ .fancybox-caption__body.full-caption {
79
+ height: auto;
80
  display: block;
81
+ white-space: normal;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  }
83
 
84
  .ei-meta-carousel {
107
  vertical-align: middle;
108
  color: #FFF;
109
  line-height: normal;
110
+ text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.8);
111
  font-size: 16px;
112
  }
113
 
140
  .img-big img {margin:0 auto;}
141
 
142
  .likes_count, .enjoy-instagram-username {display:inline-block;}
143
+
144
+
145
+ @media only screen and (max-width: 600px) {
146
+ .fancybox-caption {
147
+ display: none;
148
+ }
149
+ }
assets/css/owl.carousel.css DELETED
@@ -1,216 +0,0 @@
1
- /*
2
- * Owl Carousel - Animate Plugin
3
- */
4
- .owl-carousel .animated {
5
- -webkit-animation-duration: 1000ms;
6
- animation-duration: 1000ms;
7
- -webkit-animation-fill-mode: both;
8
- animation-fill-mode: both;
9
- }
10
- .owl-carousel .owl-animated-in {
11
- z-index: 0;
12
- }
13
- .owl-carousel .owl-animated-out {
14
- z-index: 1;
15
- }
16
- .owl-carousel .fadeOut {
17
- -webkit-animation-name: fadeOut;
18
- animation-name: fadeOut;
19
- }
20
-
21
- @-webkit-keyframes fadeOut {
22
- 0% {
23
- opacity: 1;
24
- }
25
-
26
- 100% {
27
- opacity: 0;
28
- }
29
- }
30
- @keyframes fadeOut {
31
- 0% {
32
- opacity: 1;
33
- }
34
-
35
- 100% {
36
- opacity: 0;
37
- }
38
- }
39
-
40
- /*
41
- * Owl Carousel - Auto Height Plugin
42
- */
43
- .owl-height {
44
- -webkit-transition: height 500ms ease-in-out;
45
- -moz-transition: height 500ms ease-in-out;
46
- -ms-transition: height 500ms ease-in-out;
47
- -o-transition: height 500ms ease-in-out;
48
- transition: height 500ms ease-in-out;
49
- }
50
-
51
- /*
52
- * Core Owl Carousel CSS File
53
- */
54
- .owl-carousel {
55
- display: none;
56
- width: 100%;
57
- -webkit-tap-highlight-color: transparent;
58
- /* position relative and z-index fix webkit rendering fonts issue */
59
- position: relative;
60
- z-index: 1;
61
- }
62
- .owl-carousel .owl-stage {
63
- position: relative;
64
- -ms-touch-action: pan-Y;
65
- }
66
- .owl-carousel .owl-stage:after {
67
- content: ".";
68
- display: block;
69
- clear: both;
70
- visibility: hidden;
71
- line-height: 0;
72
- height: 0;
73
- }
74
- .owl-carousel .owl-stage-outer {
75
- position: relative;
76
- overflow: hidden;
77
- /* fix for flashing background */
78
- -webkit-transform: translate3d(0px, 0px, 0px);
79
- }
80
- .owl-carousel .owl-controls .owl-nav .owl-prev,
81
- .owl-carousel .owl-controls .owl-nav .owl-next,
82
- .owl-carousel .owl-controls .owl-dot {
83
- cursor: pointer;
84
- cursor: hand;
85
- -webkit-user-select: none;
86
- -khtml-user-select: none;
87
- -moz-user-select: none;
88
- -ms-user-select: none;
89
- user-select: none;
90
- }
91
- .owl-carousel.owl-loaded {
92
- display: block;
93
- }
94
- .owl-carousel.owl-loading {
95
- opacity: 0;
96
- display: block;
97
- }
98
- .owl-carousel.owl-hidden {
99
- opacity: 0;
100
- }
101
- .owl-carousel .owl-refresh .owl-item {
102
- display: none;
103
- }
104
- .owl-carousel .owl-item {
105
- position: relative;
106
- min-height: 1px;
107
- float: left;
108
- -webkit-backface-visibility: hidden;
109
- -webkit-tap-highlight-color: transparent;
110
- -webkit-touch-callout: none;
111
- -webkit-user-select: none;
112
- -moz-user-select: none;
113
- -ms-user-select: none;
114
- user-select: none;
115
- }
116
- .owl-carousel .owl-item img {
117
- display: block;
118
- width: 100%;
119
- -webkit-transform-style: preserve-3d;
120
- }
121
- .owl-carousel.owl-text-select-on .owl-item {
122
- -webkit-user-select: auto;
123
- -moz-user-select: auto;
124
- -ms-user-select: auto;
125
- user-select: auto;
126
- }
127
- .owl-carousel .owl-grab {
128
- cursor: move;
129
- cursor: -webkit-grab;
130
- cursor: -o-grab;
131
- cursor: -ms-grab;
132
- cursor: grab;
133
- }
134
- .owl-carousel.owl-rtl {
135
- direction: rtl;
136
- }
137
- .owl-carousel.owl-rtl .owl-item {
138
- float: right;
139
- }
140
-
141
- /* No Js */
142
- .no-js .owl-carousel {
143
- display: block;
144
- }
145
-
146
- /*
147
- * Owl Carousel - Lazy Load Plugin
148
- */
149
- .owl-carousel .owl-item .owl-lazy {
150
- opacity: 0;
151
- -webkit-transition: opacity 400ms ease;
152
- -moz-transition: opacity 400ms ease;
153
- -ms-transition: opacity 400ms ease;
154
- -o-transition: opacity 400ms ease;
155
- transition: opacity 400ms ease;
156
- }
157
- .owl-carousel .owl-item img {
158
- transform-style: preserve-3d;
159
- }
160
-
161
- /*
162
- * Owl Carousel - Video Plugin
163
- */
164
- .owl-carousel .owl-video-wrapper {
165
- position: relative;
166
- height: 100%;
167
- background: #000;
168
- }
169
- .owl-carousel .owl-video-play-icon {
170
- position: absolute;
171
- height: 80px;
172
- width: 80px;
173
- left: 50%;
174
- top: 50%;
175
- margin-left: -40px;
176
- margin-top: -40px;
177
- background: url("owl.video.play.png") no-repeat;
178
- cursor: pointer;
179
- z-index: 1;
180
- -webkit-backface-visibility: hidden;
181
- -webkit-transition: scale 100ms ease;
182
- -moz-transition: scale 100ms ease;
183
- -ms-transition: scale 100ms ease;
184
- -o-transition: scale 100ms ease;
185
- transition: scale 100ms ease;
186
- }
187
- .owl-carousel .owl-video-play-icon:hover {
188
- -webkit-transition: scale(1.3, 1.3);
189
- -moz-transition: scale(1.3, 1.3);
190
- -ms-transition: scale(1.3, 1.3);
191
- -o-transition: scale(1.3, 1.3);
192
- transition: scale(1.3, 1.3);
193
- }
194
- .owl-carousel .owl-video-playing .owl-video-tn,
195
- .owl-carousel .owl-video-playing .owl-video-play-icon {
196
- display: none;
197
- }
198
- .owl-carousel .owl-video-tn {
199
- opacity: 0;
200
- height: 100%;
201
- background-position: center center;
202
- background-repeat: no-repeat;
203
- -webkit-background-size: contain;
204
- -moz-background-size: contain;
205
- -o-background-size: contain;
206
- background-size: contain;
207
- -webkit-transition: opacity 400ms ease;
208
- -moz-transition: opacity 400ms ease;
209
- -ms-transition: opacity 400ms ease;
210
- -o-transition: opacity 400ms ease;
211
- transition: opacity 400ms ease;
212
- }
213
- .owl-carousel .owl-video-frame {
214
- position: relative;
215
- z-index: 1;
216
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/owl.theme.css DELETED
@@ -1,79 +0,0 @@
1
- /*
2
- * Owl Carousel Owl Demo Theme
3
- * v1.3.2
4
- */
5
-
6
- .owl-theme .owl-controls{
7
- margin-top: 10px;
8
- text-align: center;
9
- }
10
-
11
- /* Styling Next and Prev buttons */
12
-
13
- .owl-theme .owl-controls .owl-buttons div{
14
- color: #FFF;
15
- display: inline-block;
16
- zoom: 1;
17
- *display: inline;/*IE7 life-saver */
18
- margin: 5px;
19
- padding: 3px 10px;
20
- font-size: 12px;
21
- -webkit-border-radius: 30px;
22
- -moz-border-radius: 30px;
23
- border-radius: 30px;
24
- background: #869791;
25
- filter: Alpha(Opacity=50);/*IE7 fix*/
26
- opacity: 0.5;
27
- }
28
- /* Clickable class fix problem with hover on touch devices */
29
- /* Use it for non-touch hover action */
30
- .owl-theme .owl-controls.clickable .owl-buttons div:hover{
31
- filter: Alpha(Opacity=100);/*IE7 fix*/
32
- opacity: 1;
33
- text-decoration: none;
34
- }
35
-
36
- /* Styling Pagination*/
37
-
38
- .owl-theme .owl-controls .owl-page{
39
- display: inline-block;
40
- zoom: 1;
41
- *display: inline;/*IE7 life-saver */
42
- }
43
- .owl-theme .owl-controls .owl-page span{
44
- display: block;
45
- width: 12px;
46
- height: 12px;
47
- margin: 5px 7px;
48
- filter: Alpha(Opacity=50);/*IE7 fix*/
49
- opacity: 0.5;
50
- -webkit-border-radius: 20px;
51
- -moz-border-radius: 20px;
52
- border-radius: 20px;
53
- background: #869791;
54
- }
55
-
56
- .owl-theme .owl-controls .owl-page.active span,
57
- .owl-theme .owl-controls.clickable .owl-page:hover span{
58
- filter: Alpha(Opacity=100);/*IE7 fix*/
59
- opacity: 1;
60
- }
61
-
62
- /* If PaginationNumbers is true */
63
-
64
- .owl-theme .owl-controls .owl-page span.owl-numbers{
65
- height: auto;
66
- width: auto;
67
- color: #FFF;
68
- padding: 2px 10px;
69
- font-size: 12px;
70
- -webkit-border-radius: 30px;
71
- -moz-border-radius: 30px;
72
- border-radius: 30px;
73
- }
74
-
75
- /* preloading images */
76
- .owl-item.loading{
77
- min-height: 150px;
78
- background: url('../images/AjaxLoader.gif') no-repeat center center
79
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/owl.theme.default.css DELETED
@@ -1,53 +0,0 @@
1
- /*
2
- * Default theme - Owl Carousel CSS File
3
- */
4
- .owl-theme .owl-controls {
5
- margin-top: 10px;
6
- text-align: center;
7
- -webkit-tap-highlight-color: transparent;
8
- }
9
- .owl-theme .owl-controls .owl-nav [class*='owl-'] {
10
- color: white;
11
- font-size: 14px;
12
- margin: 5px;
13
- padding: 4px 7px;
14
- background: #d6d6d6;
15
- display: inline-block;
16
- cursor: pointer;
17
- -webkit-border-radius: 3px;
18
- -moz-border-radius: 3px;
19
- border-radius: 3px;
20
- }
21
- .owl-theme .owl-controls .owl-nav [class*='owl-']:hover {
22
- background: #869791;
23
- color: white;
24
- text-decoration: none;
25
- }
26
- .owl-theme .owl-controls .owl-nav .disabled {
27
- opacity: 0.5;
28
- cursor: default;
29
- }
30
- .owl-theme .owl-dots .owl-dot {
31
- display: inline-block;
32
- zoom: 1;
33
- *display: inline;
34
- }
35
- .owl-theme .owl-dots .owl-dot span {
36
- width: 10px;
37
- height: 10px;
38
- margin: 5px 7px;
39
- background: #d6d6d6;
40
- display: block;
41
- -webkit-backface-visibility: visible;
42
- -webkit-transition: opacity 200ms ease;
43
- -moz-transition: opacity 200ms ease;
44
- -ms-transition: opacity 200ms ease;
45
- -o-transition: opacity 200ms ease;
46
- transition: opacity 200ms ease;
47
- -webkit-border-radius: 30px;
48
- -moz-border-radius: 30px;
49
- border-radius: 30px;
50
- }
51
- .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {
52
- background: #869791;
53
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/owl.theme.min.css DELETED
@@ -1 +0,0 @@
1
- .owl-theme .owl-controls{margin-top:10px;text-align:center}.owl-theme .owl-controls .owl-buttons div{color:#FFF;display:inline-block;zoom:1;*display:inline;margin:5px;padding:3px 10px;font-size:12px;-webkit-border-radius:30px;-moz-border-radius:30px;border-radius:30px;background:#869791;filter:Alpha(Opacity=50);opacity:.5}.owl-theme .owl-controls.clickable .owl-buttons div:hover{filter:Alpha(Opacity=100);opacity:1;text-decoration:none}.owl-theme .owl-controls .owl-page{display:inline-block;zoom:1;*display:inline}.owl-theme .owl-controls .owl-page span{display:block;width:12px;height:12px;margin:5px 7px;filter:Alpha(Opacity=50);opacity:.5;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px;background:#869791}.owl-theme .owl-controls .owl-page.active span,.owl-theme .owl-controls.clickable .owl-page:hover span{filter:Alpha(Opacity=100);opacity:1}.owl-theme .owl-controls .owl-page span.owl-numbers{height:auto;width:auto;color:#FFF;padding:2px 10px;font-size:12px;-webkit-border-radius:30px;-moz-border-radius:30px;border-radius:30px}.owl-item.loading{min-height:150px;background:url(../images/AjaxLoader.gif) no-repeat center center}
 
assets/css/owl.transitions.css DELETED
@@ -1,163 +0,0 @@
1
- /*
2
- * Owl Carousel CSS3 Transitions
3
- * v1.3.2
4
- */
5
-
6
- .owl-origin {
7
- -webkit-perspective: 1200px;
8
- -webkit-perspective-origin-x : 50%;
9
- -webkit-perspective-origin-y : 50%;
10
- -moz-perspective : 1200px;
11
- -moz-perspective-origin-x : 50%;
12
- -moz-perspective-origin-y : 50%;
13
- perspective : 1200px;
14
- }
15
- /* fade */
16
- .owl-fade-out {
17
- z-index: 10;
18
- -webkit-animation: fadeOut .7s both ease;
19
- -moz-animation: fadeOut .7s both ease;
20
- animation: fadeOut .7s both ease;
21
- }
22
- .owl-fade-in {
23
- -webkit-animation: fadeIn .7s both ease;
24
- -moz-animation: fadeIn .7s both ease;
25
- animation: fadeIn .7s both ease;
26
- }
27
- /* backSlide */
28
- .owl-backSlide-out {
29
- -webkit-animation: backSlideOut 1s both ease;
30
- -moz-animation: backSlideOut 1s both ease;
31
- animation: backSlideOut 1s both ease;
32
- }
33
- .owl-backSlide-in {
34
- -webkit-animation: backSlideIn 1s both ease;
35
- -moz-animation: backSlideIn 1s both ease;
36
- animation: backSlideIn 1s both ease;
37
- }
38
- /* goDown */
39
- .owl-goDown-out {
40
- -webkit-animation: scaleToFade .7s ease both;
41
- -moz-animation: scaleToFade .7s ease both;
42
- animation: scaleToFade .7s ease both;
43
- }
44
- .owl-goDown-in {
45
- -webkit-animation: goDown .6s ease both;
46
- -moz-animation: goDown .6s ease both;
47
- animation: goDown .6s ease both;
48
- }
49
- /* scaleUp */
50
- .owl-fadeUp-in {
51
- -webkit-animation: scaleUpFrom .5s ease both;
52
- -moz-animation: scaleUpFrom .5s ease both;
53
- animation: scaleUpFrom .5s ease both;
54
- }
55
-
56
- .owl-fadeUp-out {
57
- -webkit-animation: scaleUpTo .5s ease both;
58
- -moz-animation: scaleUpTo .5s ease both;
59
- animation: scaleUpTo .5s ease both;
60
- }
61
- /* Keyframes */
62
- /*empty*/
63
- @-webkit-keyframes empty {
64
- 0% {opacity: 1}
65
- }
66
- @-moz-keyframes empty {
67
- 0% {opacity: 1}
68
- }
69
- @keyframes empty {
70
- 0% {opacity: 1}
71
- }
72
- @-webkit-keyframes fadeIn {
73
- 0% { opacity:0; }
74
- 100% { opacity:1; }
75
- }
76
- @-moz-keyframes fadeIn {
77
- 0% { opacity:0; }
78
- 100% { opacity:1; }
79
- }
80
- @keyframes fadeIn {
81
- 0% { opacity:0; }
82
- 100% { opacity:1; }
83
- }
84
- @-webkit-keyframes fadeOut {
85
- 0% { opacity:1; }
86
- 100% { opacity:0; }
87
- }
88
- @-moz-keyframes fadeOut {
89
- 0% { opacity:1; }
90
- 100% { opacity:0; }
91
- }
92
- @keyframes fadeOut {
93
- 0% { opacity:1; }
94
- 100% { opacity:0; }
95
- }
96
- @-webkit-keyframes backSlideOut {
97
- 25% { opacity: .5; -webkit-transform: translateZ(-500px); }
98
- 75% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
99
- 100% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
100
- }
101
- @-moz-keyframes backSlideOut {
102
- 25% { opacity: .5; -moz-transform: translateZ(-500px); }
103
- 75% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
104
- 100% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
105
- }
106
- @keyframes backSlideOut {
107
- 25% { opacity: .5; transform: translateZ(-500px); }
108
- 75% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
109
- 100% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
110
- }
111
- @-webkit-keyframes backSlideIn {
112
- 0%, 25% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(200%); }
113
- 75% { opacity: .5; -webkit-transform: translateZ(-500px); }
114
- 100% { opacity: 1; -webkit-transform: translateZ(0) translateX(0); }
115
- }
116
- @-moz-keyframes backSlideIn {
117
- 0%, 25% { opacity: .5; -moz-transform: translateZ(-500px) translateX(200%); }
118
- 75% { opacity: .5; -moz-transform: translateZ(-500px); }
119
- 100% { opacity: 1; -moz-transform: translateZ(0) translateX(0); }
120
- }
121
- @keyframes backSlideIn {
122
- 0%, 25% { opacity: .5; transform: translateZ(-500px) translateX(200%); }
123
- 75% { opacity: .5; transform: translateZ(-500px); }
124
- 100% { opacity: 1; transform: translateZ(0) translateX(0); }
125
- }
126
- @-webkit-keyframes scaleToFade {
127
- to { opacity: 0; -webkit-transform: scale(.8); }
128
- }
129
- @-moz-keyframes scaleToFade {
130
- to { opacity: 0; -moz-transform: scale(.8); }
131
- }
132
- @keyframes scaleToFade {
133
- to { opacity: 0; transform: scale(.8); }
134
- }
135
- @-webkit-keyframes goDown {
136
- from { -webkit-transform: translateY(-100%); }
137
- }
138
- @-moz-keyframes goDown {
139
- from { -moz-transform: translateY(-100%); }
140
- }
141
- @keyframes goDown {
142
- from { transform: translateY(-100%); }
143
- }
144
-
145
- @-webkit-keyframes scaleUpFrom {
146
- from { opacity: 0; -webkit-transform: scale(1.5); }
147
- }
148
- @-moz-keyframes scaleUpFrom {
149
- from { opacity: 0; -moz-transform: scale(1.5); }
150
- }
151
- @keyframes scaleUpFrom {
152
- from { opacity: 0; transform: scale(1.5); }
153
- }
154
-
155
- @-webkit-keyframes scaleUpTo {
156
- to { opacity: 0; -webkit-transform: scale(1.5); }
157
- }
158
- @-moz-keyframes scaleUpTo {
159
- to { opacity: 0; -moz-transform: scale(1.5); }
160
- }
161
- @keyframes scaleUpTo {
162
- to { opacity: 0; transform: scale(1.5); }
163
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/owl.video.play.png DELETED
Binary file
assets/css/polaroid_carousel.css CHANGED
@@ -1,39 +1,73 @@
1
- /*! Polaroid V.1.2*/
2
-
3
- .owl-stage {
4
- display: flex;
5
- }
6
- .owl-carousel .owl-item {
7
- padding: 20px 0px 20px 0px;
8
- border: 1px solid ;
9
- border-color:#D2D2D2;
10
- flex:1;
11
- }
12
- .enjoy-instagram-ig-picture-wrapper, .enjoy-instagram-ig-username-wrapper {float:left}
13
- .enjoy-instagram-ig-picture-wrapper {margin-right:10px}
14
- .enjoy-instagram-heart-wrapper { float:left; margin-right:10px}
15
- .enjoy-instagram-text-wrapper {font-size:14px; line-height: 1.3em;}
16
- .enjoy-instagram-feed-user {float:left; padding-left:10px; padding-bottom:20px}
17
- .enjoy-instagram-icon-wrapper {float:right; padding-right:10px; padding-bottom:20px}
18
- .user-ig {font-size:12px; font-weight:bold; font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;}
19
- .user-ig {color:#000}
20
-
21
- .bottom-polaroid{
22
- font-size:14px;
23
- padding:30px 0 0 0;
24
- }
25
-
26
- .owl-carousel .owl-item a:hover {opacity: 0.5;}
27
-
28
- .bottom-polaroid .enjoy-instagram-like-wrapper { margin-bottom:5px}
29
- .enjoy-instagram-ig-username-wrapper {
30
- font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;
31
- }
32
- .enjoy-instagram-text-wrapper span {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;
34
  }
35
 
36
- .fadein img{
37
- opacity:0.5;
38
- transition: 1s ease;
39
  }
1
+
2
+ .ei-polaroid .slide-inner {
3
+ padding: 20px;
4
+ border-width: 1px;
5
+ border-style: solid;
6
+ border-color: #D2D2D2;
7
+ }
8
+
9
+ .ei-polaroid .enjoy-instagram-ig-picture-wrapper, .enjoy-instagram-ig-username-wrapper {
10
+ float: left
11
+ }
12
+
13
+ .ei-polaroid .enjoy-instagram-ig-picture-wrapper {
14
+ margin-right: 10px
15
+ }
16
+
17
+ .ei-polaroid .enjoy-instagram-heart-wrapper {
18
+ float: left;
19
+ margin-right: 10px
20
+ }
21
+
22
+ .ei-polaroid .enjoy-instagram-text-wrapper {
23
+ font-size: 14px;
24
+ line-height: 1.3em;
25
+ }
26
+
27
+ .ei-polaroid .enjoy-instagram-feed-user {
28
+ float: left;
29
+ padding-left: 10px;
30
+ padding-bottom: 20px
31
+ }
32
+
33
+ .ei-polaroid .enjoy-instagram-icon-wrapper {
34
+ float: right;
35
+ padding-right: 10px;
36
+ padding-bottom: 20px
37
+ }
38
+
39
+ .ei-polaroid .user-ig {
40
+ font-size: 12px;
41
+ font-weight: bold;
42
+ font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;
43
+ }
44
+
45
+ .ei-polaroid .user-ig {
46
+ color: #000
47
+ }
48
+
49
+ .ei-polaroid .bottom-polaroid {
50
+ font-size: 14px;
51
+ padding: 30px 0 0 0;
52
+ }
53
+
54
+ .ei-polaroid .slide-inner a:hover {
55
+ opacity: 0.5;
56
+ }
57
+
58
+ .ei-polaroid .bottom-polaroid .enjoy-instagram-like-wrapper {
59
+ margin-bottom: 5px
60
+ }
61
+
62
+ .ei-polaroid .enjoy-instagram-ig-username-wrapper {
63
+ font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;
64
+ }
65
+
66
+ .ei-polaroid .enjoy-instagram-text-wrapper span {
67
  font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;
68
  }
69
 
70
+ .ei-polaroid .fadein img {
71
+ opacity: 0.5;
72
+ transition: 1s ease;
73
  }
assets/css/showcase_carousel.css CHANGED
@@ -1,38 +1,71 @@
1
- /*! Polaroid V.1.2*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
- .owl-stage {
4
- display: flex;
5
- }
6
- .owl-carousel .owl-item {
7
- padding: 20px 0px 20px 0px;
8
- border: 1px solid ;
9
- border-color:#D2D2D2;
10
- flex:1;
11
  }
12
- .enjoy-instagram-ig-picture-wrapper, .enjoy-instagram-ig-username-wrapper {float:left}
13
- .enjoy-instagram-ig-picture-wrapper {margin-right:10px}
14
- .enjoy-instagram-heart-wrapper { float:left; margin-right:10px}
15
- .enjoy-instagram-text-wrapper {font-size:14px; line-height: 1.3em;}
16
- .enjoy-instagram-feed-user {float:left; padding-left:10px; padding-bottom:20px}
17
- .enjoy-instagram-icon-wrapper {float:right; padding-right:10px; padding-bottom:20px}
18
- .user-ig {font-size:12px; font-weight:bold; font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;}
19
- .user-ig {color:#000}
20
 
21
- .bottom-polaroid{
22
- font-size:14px;
23
- padding:10px 15px 10px 15px
24
  }
25
 
26
 
27
- .bottom-polaroid .enjoy-instagram-like-wrapper { margin-bottom:5px}
28
- .enjoy-instagram-ig-username-wrapper {
29
- font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;
30
  }
31
- .enjoy-instagram-text-wrapper span {
 
 
 
 
 
32
  font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;
33
  }
34
 
35
- .fadein img{
36
- opacity:0.5;
37
- transition: 1s ease;
38
  }
1
+ .ei-showcase .slide-inner {
2
+ padding: 0 0 20px 0;
3
+ border-width: 1px;
4
+ border-style: solid;
5
+ border-color: #D2D2D2;
6
+ height: 100%;
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ .ei-showcase .enjoy-instagram-ig-picture-wrapper, .enjoy-instagram-ig-username-wrapper {
11
+ float: left
12
+ }
13
+
14
+ .ei-showcase .enjoy-instagram-ig-picture-wrapper {
15
+ margin-right: 10px
16
+ }
17
+
18
+ .ei-showcase .enjoy-instagram-heart-wrapper {
19
+ float: left;
20
+ margin-right: 10px
21
+ }
22
+
23
+ .ei-showcase .enjoy-instagram-text-wrapper {
24
+ font-size: 14px;
25
+ line-height: 1.3em;
26
+ }
27
+
28
+ .ei-showcase .enjoy-instagram-feed-user {
29
+ float: left;
30
+ padding-left: 10px;
31
+ padding-bottom: 20px
32
+ }
33
+
34
+ .ei-showcase .enjoy-instagram-icon-wrapper {
35
+ float: right;
36
+ padding-right: 10px;
37
+ padding-bottom: 20px
38
+ }
39
+
40
+ .ei-showcase .user-ig {
41
+ font-size: 12px;
42
+ font-weight: bold;
43
+ font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;
44
+ }
45
 
46
+ .ei-showcase .user-ig {
47
+ color: #000
 
 
 
 
 
 
48
  }
 
 
 
 
 
 
 
 
49
 
50
+ .ei-showcase .bottom-polaroid {
51
+ font-size: 14px;
52
+ padding: 10px 15px 10px 15px
53
  }
54
 
55
 
56
+ .ei-showcase .bottom-polaroid .enjoy-instagram-like-wrapper {
57
+ margin-bottom: 5px
 
58
  }
59
+
60
+ .ei-showcase .enjoy-instagram-ig-username-wrapper {
61
+ font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;
62
+ }
63
+
64
+ .ei-showcase .enjoy-instagram-text-wrapper span {
65
  font-family: -apple-system, BlinkMacSystemFont, Roboto, Open Sans, Helvetica Neue, sans-serif;
66
  }
67
 
68
+ .ei-showcase .fadein img {
69
+ opacity: 0.5;
70
+ transition: 1s ease;
71
  }
assets/css/swiper-bundle.css ADDED
@@ -0,0 +1,546 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Swiper 6.4.10
3
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
4
+ * https://swiperjs.com
5
+ *
6
+ * Copyright 2014-2021 Vladimir Kharlampidi
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: January 29, 2021
11
+ */
12
+
13
+ @font-face {
14
+ font-family: 'swiper-icons';
15
+ src: url('data:application/font-woff;charset=utf-8;base64, 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') format('woff');
16
+ font-weight: 400;
17
+ font-style: normal;
18
+ }
19
+ :root {
20
+ --swiper-theme-color: #007aff;
21
+ }
22
+ .swiper-container {
23
+ margin-left: auto;
24
+ margin-right: auto;
25
+ position: relative;
26
+ overflow: hidden;
27
+ list-style: none;
28
+ padding: 0;
29
+ /* Fix of Webkit flickering */
30
+ z-index: 1;
31
+ }
32
+ .swiper-container-vertical > .swiper-wrapper {
33
+ flex-direction: column;
34
+ }
35
+ .swiper-wrapper {
36
+ position: relative;
37
+ width: 100%;
38
+ height: 100%;
39
+ z-index: 1;
40
+ display: flex;
41
+ transition-property: transform;
42
+ box-sizing: content-box;
43
+ }
44
+ .swiper-container-android .swiper-slide,
45
+ .swiper-wrapper {
46
+ transform: translate3d(0px, 0, 0);
47
+ }
48
+ .swiper-container-multirow > .swiper-wrapper {
49
+ flex-wrap: wrap;
50
+ }
51
+ .swiper-container-multirow-column > .swiper-wrapper {
52
+ flex-wrap: wrap;
53
+ flex-direction: column;
54
+ }
55
+ .swiper-container-free-mode > .swiper-wrapper {
56
+ transition-timing-function: ease-out;
57
+ margin: 0 auto;
58
+ }
59
+ .swiper-container-pointer-events {
60
+ touch-action: pan-y;
61
+ }
62
+ .swiper-container-pointer-events.swiper-container-vertical {
63
+ touch-action: pan-x;
64
+ }
65
+ .swiper-slide {
66
+ flex-shrink: 0;
67
+ width: 100%;
68
+ height: 100%;
69
+ position: relative;
70
+ transition-property: transform;
71
+ }
72
+ .swiper-slide-invisible-blank {
73
+ visibility: hidden;
74
+ }
75
+ /* Auto Height */
76
+ .swiper-container-autoheight,
77
+ .swiper-container-autoheight .swiper-slide {
78
+ height: auto;
79
+ }
80
+ .swiper-container-autoheight .swiper-wrapper {
81
+ align-items: flex-start;
82
+ transition-property: transform, height;
83
+ }
84
+ /* 3D Effects */
85
+ .swiper-container-3d {
86
+ perspective: 1200px;
87
+ }
88
+ .swiper-container-3d .swiper-wrapper,
89
+ .swiper-container-3d .swiper-slide,
90
+ .swiper-container-3d .swiper-slide-shadow-left,
91
+ .swiper-container-3d .swiper-slide-shadow-right,
92
+ .swiper-container-3d .swiper-slide-shadow-top,
93
+ .swiper-container-3d .swiper-slide-shadow-bottom,
94
+ .swiper-container-3d .swiper-cube-shadow {
95
+ transform-style: preserve-3d;
96
+ }
97
+ .swiper-container-3d .swiper-slide-shadow-left,
98
+ .swiper-container-3d .swiper-slide-shadow-right,
99
+ .swiper-container-3d .swiper-slide-shadow-top,
100
+ .swiper-container-3d .swiper-slide-shadow-bottom {
101
+ position: absolute;
102
+ left: 0;
103
+ top: 0;
104
+ width: 100%;
105
+ height: 100%;
106
+ pointer-events: none;
107
+ z-index: 10;
108
+ }
109
+ .swiper-container-3d .swiper-slide-shadow-left {
110
+ background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
111
+ }
112
+ .swiper-container-3d .swiper-slide-shadow-right {
113
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
114
+ }
115
+ .swiper-container-3d .swiper-slide-shadow-top {
116
+ background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
117
+ }
118
+ .swiper-container-3d .swiper-slide-shadow-bottom {
119
+ background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
120
+ }
121
+ /* CSS Mode */
122
+ .swiper-container-css-mode > .swiper-wrapper {
123
+ overflow: auto;
124
+ scrollbar-width: none;
125
+ /* For Firefox */
126
+ -ms-overflow-style: none;
127
+ /* For Internet Explorer and Edge */
128
+ }
129
+ .swiper-container-css-mode > .swiper-wrapper::-webkit-scrollbar {
130
+ display: none;
131
+ }
132
+ .swiper-container-css-mode > .swiper-wrapper > .swiper-slide {
133
+ scroll-snap-align: start start;
134
+ }
135
+ .swiper-container-horizontal.swiper-container-css-mode > .swiper-wrapper {
136
+ scroll-snap-type: x mandatory;
137
+ }
138
+ .swiper-container-vertical.swiper-container-css-mode > .swiper-wrapper {
139
+ scroll-snap-type: y mandatory;
140
+ }
141
+ :root {
142
+ --swiper-navigation-size: 44px;
143
+ /*
144
+ --swiper-navigation-color: var(--swiper-theme-color);
145
+ */
146
+ }
147
+ .swiper-button-prev,
148
+ .swiper-button-next {
149
+ position: absolute;
150
+ top: 50%;
151
+ width: calc(var(--swiper-navigation-size) / 44 * 27);
152
+ height: var(--swiper-navigation-size);
153
+ margin-top: calc(-1 * var(--swiper-navigation-size) / 2);
154
+ z-index: 10;
155
+ cursor: pointer;
156
+ display: flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ color: var(--swiper-navigation-color, var(--swiper-theme-color));
160
+ }
161
+ .swiper-button-prev.swiper-button-disabled,
162
+ .swiper-button-next.swiper-button-disabled {
163
+ opacity: 0.35;
164
+ cursor: auto;
165
+ pointer-events: none;
166
+ }
167
+ .swiper-button-prev:after,
168
+ .swiper-button-next:after {
169
+ font-family: swiper-icons;
170
+ font-size: var(--swiper-navigation-size);
171
+ text-transform: none !important;
172
+ letter-spacing: 0;
173
+ text-transform: none;
174
+ font-variant: initial;
175
+ line-height: 1;
176
+ }
177
+ .swiper-button-prev,
178
+ .swiper-container-rtl .swiper-button-next {
179
+ left: 10px;
180
+ right: auto;
181
+ }
182
+ .swiper-button-prev:after,
183
+ .swiper-container-rtl .swiper-button-next:after {
184
+ content: 'prev';
185
+ }
186
+ .swiper-button-next,
187
+ .swiper-container-rtl .swiper-button-prev {
188
+ right: 10px;
189
+ left: auto;
190
+ }
191
+ .swiper-button-next:after,
192
+ .swiper-container-rtl .swiper-button-prev:after {
193
+ content: 'next';
194
+ }
195
+ .swiper-button-prev.swiper-button-white,
196
+ .swiper-button-next.swiper-button-white {
197
+ --swiper-navigation-color: #ffffff;
198
+ }
199
+ .swiper-button-prev.swiper-button-black,
200
+ .swiper-button-next.swiper-button-black {
201
+ --swiper-navigation-color: #000000;
202
+ }
203
+ .swiper-button-lock {
204
+ display: none;
205
+ }
206
+ :root {
207
+ /*
208
+ --swiper-pagination-color: var(--swiper-theme-color);
209
+ */
210
+ }
211
+ .swiper-pagination {
212
+ position: absolute;
213
+ text-align: center;
214
+ transition: 300ms opacity;
215
+ transform: translate3d(0, 0, 0);
216
+ z-index: 10;
217
+ }
218
+ .swiper-pagination.swiper-pagination-hidden {
219
+ opacity: 0;
220
+ }
221
+ /* Common Styles */
222
+ .swiper-pagination-fraction,
223
+ .swiper-pagination-custom,
224
+ .swiper-container-horizontal > .swiper-pagination-bullets {
225
+ bottom: 10px;
226
+ left: 0;
227
+ width: 100%;
228
+ }
229
+ /* Bullets */
230
+ .swiper-pagination-bullets-dynamic {
231
+ overflow: hidden;
232
+ font-size: 0;
233
+ }
234
+ .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
235
+ transform: scale(0.33);
236
+ position: relative;
237
+ }
238
+ .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {
239
+ transform: scale(1);
240
+ }
241
+ .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {
242
+ transform: scale(1);
243
+ }
244
+ .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {
245
+ transform: scale(0.66);
246
+ }
247
+ .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {
248
+ transform: scale(0.33);
249
+ }
250
+ .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {
251
+ transform: scale(0.66);
252
+ }
253
+ .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {
254
+ transform: scale(0.33);
255
+ }
256
+ .swiper-pagination-bullet {
257
+ width: 8px;
258
+ height: 8px;
259
+ display: inline-block;
260
+ border-radius: 50%;
261
+ background: #000;
262
+ opacity: 0.2;
263
+ }
264
+ button.swiper-pagination-bullet {
265
+ border: none;
266
+ margin: 0;
267
+ padding: 0;
268
+ box-shadow: none;
269
+ -webkit-appearance: none;
270
+ -moz-appearance: none;
271
+ appearance: none;
272
+ }
273
+ .swiper-pagination-clickable .swiper-pagination-bullet {
274
+ cursor: pointer;
275
+ }
276
+ .swiper-pagination-bullet-active {
277
+ opacity: 1;
278
+ background: var(--swiper-pagination-color, var(--swiper-theme-color));
279
+ }
280
+ .swiper-container-vertical > .swiper-pagination-bullets {
281
+ right: 10px;
282
+ top: 50%;
283
+ transform: translate3d(0px, -50%, 0);
284
+ }
285
+ .swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
286
+ margin: 6px 0;
287
+ display: block;
288
+ }
289
+ .swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
290
+ top: 50%;
291
+ transform: translateY(-50%);
292
+ width: 8px;
293
+ }
294
+ .swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
295
+ display: inline-block;
296
+ transition: 200ms transform, 200ms top;
297
+ }
298
+ .swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
299
+ margin: 0 4px;
300
+ }
301
+ .swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
302
+ left: 50%;
303
+ transform: translateX(-50%);
304
+ white-space: nowrap;
305
+ }
306
+ .swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
307
+ transition: 200ms transform, 200ms left;
308
+ }
309
+ .swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
310
+ transition: 200ms transform, 200ms right;
311
+ }
312
+ /* Progress */
313
+ .swiper-pagination-progressbar {
314
+ background: rgba(0, 0, 0, 0.25);
315
+ position: absolute;
316
+ }
317
+ .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
318
+ background: var(--swiper-pagination-color, var(--swiper-theme-color));
319
+ position: absolute;
320
+ left: 0;
321
+ top: 0;
322
+ width: 100%;
323
+ height: 100%;
324
+ transform: scale(0);
325
+ transform-origin: left top;
326
+ }
327
+ .swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
328
+ transform-origin: right top;
329
+ }
330
+ .swiper-container-horizontal > .swiper-pagination-progressbar,
331
+ .swiper-container-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {
332
+ width: 100%;
333
+ height: 4px;
334
+ left: 0;
335
+ top: 0;
336
+ }
337
+ .swiper-container-vertical > .swiper-pagination-progressbar,
338
+ .swiper-container-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {
339
+ width: 4px;
340
+ height: 100%;
341
+ left: 0;
342
+ top: 0;
343
+ }
344
+ .swiper-pagination-white {
345
+ --swiper-pagination-color: #ffffff;
346
+ }
347
+ .swiper-pagination-black {
348
+ --swiper-pagination-color: #000000;
349
+ }
350
+ .swiper-pagination-lock {
351
+ display: none;
352
+ }
353
+ /* Scrollbar */
354
+ .swiper-scrollbar {
355
+ border-radius: 10px;
356
+ position: relative;
357
+ -ms-touch-action: none;
358
+ background: rgba(0, 0, 0, 0.1);
359
+ }
360
+ .swiper-container-horizontal > .swiper-scrollbar {
361
+ position: absolute;
362
+ left: 1%;
363
+ bottom: 3px;
364
+ z-index: 50;
365
+ height: 5px;
366
+ width: 98%;
367
+ }
368
+ .swiper-container-vertical > .swiper-scrollbar {
369
+ position: absolute;
370
+ right: 3px;
371
+ top: 1%;
372
+ z-index: 50;
373
+ width: 5px;
374
+ height: 98%;
375
+ }
376
+ .swiper-scrollbar-drag {
377
+ height: 100%;
378
+ width: 100%;
379
+ position: relative;
380
+ background: rgba(0, 0, 0, 0.5);
381
+ border-radius: 10px;
382
+ left: 0;
383
+ top: 0;
384
+ }
385
+ .swiper-scrollbar-cursor-drag {
386
+ cursor: move;
387
+ }
388
+ .swiper-scrollbar-lock {
389
+ display: none;
390
+ }
391
+ .swiper-zoom-container {
392
+ width: 100%;
393
+ height: 100%;
394
+ display: flex;
395
+ justify-content: center;
396
+ align-items: center;
397
+ text-align: center;
398
+ }
399
+ .swiper-zoom-container > img,
400
+ .swiper-zoom-container > svg,
401
+ .swiper-zoom-container > canvas {
402
+ max-width: 100%;
403
+ max-height: 100%;
404
+ object-fit: contain;
405
+ }
406
+ .swiper-slide-zoomed {
407
+ cursor: move;
408
+ }
409
+ /* Preloader */
410
+ :root {
411
+ /*
412
+ --swiper-preloader-color: var(--swiper-theme-color);
413
+ */
414
+ }
415
+ .swiper-lazy-preloader {
416
+ width: 42px;
417
+ height: 42px;
418
+ position: absolute;
419
+ left: 50%;
420
+ top: 50%;
421
+ margin-left: -21px;
422
+ margin-top: -21px;
423
+ z-index: 10;
424
+ transform-origin: 50%;
425
+ animation: swiper-preloader-spin 1s infinite linear;
426
+ box-sizing: border-box;
427
+ border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));
428
+ border-radius: 50%;
429
+ border-top-color: transparent;
430
+ }
431
+ .swiper-lazy-preloader-white {
432
+ --swiper-preloader-color: #fff;
433
+ }
434
+ .swiper-lazy-preloader-black {
435
+ --swiper-preloader-color: #000;
436
+ }
437
+ @keyframes swiper-preloader-spin {
438
+ 100% {
439
+ transform: rotate(360deg);
440
+ }
441
+ }
442
+ /* a11y */
443
+ .swiper-container .swiper-notification {
444
+ position: absolute;
445
+ left: 0;
446
+ top: 0;
447
+ pointer-events: none;
448
+ opacity: 0;
449
+ z-index: -1000;
450
+ }
451
+ .swiper-container-fade.swiper-container-free-mode .swiper-slide {
452
+ transition-timing-function: ease-out;
453
+ }
454
+ .swiper-container-fade .swiper-slide {
455
+ pointer-events: none;
456
+ transition-property: opacity;
457
+ }
458
+ .swiper-container-fade .swiper-slide .swiper-slide {
459
+ pointer-events: none;
460
+ }
461
+ .swiper-container-fade .swiper-slide-active,
462
+ .swiper-container-fade .swiper-slide-active .swiper-slide-active {
463
+ pointer-events: auto;
464
+ }
465
+ .swiper-container-cube {
466
+ overflow: visible;
467
+ }
468
+ .swiper-container-cube .swiper-slide {
469
+ pointer-events: none;
470
+ -webkit-backface-visibility: hidden;
471
+ backface-visibility: hidden;
472
+ z-index: 1;
473
+ visibility: hidden;
474
+ transform-origin: 0 0;
475
+ width: 100%;
476
+ height: 100%;
477
+ }
478
+ .swiper-container-cube .swiper-slide .swiper-slide {
479
+ pointer-events: none;
480
+ }
481
+ .swiper-container-cube.swiper-container-rtl .swiper-slide {
482
+ transform-origin: 100% 0;
483
+ }
484
+ .swiper-container-cube .swiper-slide-active,
485
+ .swiper-container-cube .swiper-slide-active .swiper-slide-active {
486
+ pointer-events: auto;
487
+ }
488
+ .swiper-container-cube .swiper-slide-active,
489
+ .swiper-container-cube .swiper-slide-next,
490
+ .swiper-container-cube .swiper-slide-prev,
491
+ .swiper-container-cube .swiper-slide-next + .swiper-slide {
492
+ pointer-events: auto;
493
+ visibility: visible;
494
+ }
495
+ .swiper-container-cube .swiper-slide-shadow-top,
496
+ .swiper-container-cube .swiper-slide-shadow-bottom,
497
+ .swiper-container-cube .swiper-slide-shadow-left,
498
+ .swiper-container-cube .swiper-slide-shadow-right {
499
+ z-index: 0;
500
+ -webkit-backface-visibility: hidden;
501
+ backface-visibility: hidden;
502
+ }
503
+ .swiper-container-cube .swiper-cube-shadow {
504
+ position: absolute;
505
+ left: 0;
506
+ bottom: 0px;
507
+ width: 100%;
508
+ height: 100%;
509
+ opacity: 0.6;
510
+ z-index: 0;
511
+ }
512
+ .swiper-container-cube .swiper-cube-shadow:before {
513
+ content: '';
514
+ background: #000;
515
+ position: absolute;
516
+ left: 0;
517
+ top: 0;
518
+ bottom: 0;
519
+ right: 0;
520
+ -webkit-filter: blur(50px);
521
+ filter: blur(50px);
522
+ }
523
+ .swiper-container-flip {
524
+ overflow: visible;
525
+ }
526
+ .swiper-container-flip .swiper-slide {
527
+ pointer-events: none;
528
+ -webkit-backface-visibility: hidden;
529
+ backface-visibility: hidden;
530
+ z-index: 1;
531
+ }
532
+ .swiper-container-flip .swiper-slide .swiper-slide {
533
+ pointer-events: none;
534
+ }
535
+ .swiper-container-flip .swiper-slide-active,
536
+ .swiper-container-flip .swiper-slide-active .swiper-slide-active {
537
+ pointer-events: auto;
538
+ }
539
+ .swiper-container-flip .swiper-slide-shadow-top,
540
+ .swiper-container-flip .swiper-slide-shadow-bottom,
541
+ .swiper-container-flip .swiper-slide-shadow-left,
542
+ .swiper-container-flip .swiper-slide-shadow-right {
543
+ z-index: 0;
544
+ -webkit-backface-visibility: hidden;
545
+ backface-visibility: hidden;
546
+ }
assets/css/swiper-bundle.min.css ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Swiper 6.4.10
3
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
4
+ * https://swiperjs.com
5
+ *
6
+ * Copyright 2014-2021 Vladimir Kharlampidi
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: January 29, 2021
11
+ */
12
+
13
+ @font-face{font-family:swiper-icons;src:url('data:application/font-woff;charset=utf-8;base64, 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') format('woff');font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.swiper-container-multirow-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-container-pointer-events{touch-action:pan-y}.swiper-container-pointer-events.swiper-container-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-container-3d{perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-container-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(-1 * var(--swiper-navigation-size)/ 2);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-container-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-container-rtl .swiper-button-prev:after{content:'next'}.swiper-button-next.swiper-button-white,.swiper-button-prev.swiper-button-white{--swiper-navigation-color:#ffffff}.swiper-button-next.swiper-button-black,.swiper-button-prev.swiper-button-black{--swiper-navigation-color:#000000}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:50%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0px,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white{--swiper-pagination-color:#ffffff}.swiper-pagination-black{--swiper-pagination-color:#000000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-container-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;-webkit-filter:blur(50px);filter:blur(50px)}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}
assets/images/heart-regular.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="heart" class="svg-inline--fa fa-heart fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M458.4 64.3C400.6 15.7 311.3 23 256 79.3 200.7 23 111.4 15.6 53.6 64.3-21.6 127.6-10.6 230.8 43 285.5l175.4 178.7c10 10.2 23.4 15.9 37.6 15.9 14.3 0 27.6-5.6 37.6-15.8L469 285.6c53.5-54.7 64.7-157.9-10.6-221.3zm-23.6 187.5L259.4 430.5c-2.4 2.4-4.4 2.4-6.8 0L77.2 251.8c-36.5-37.2-43.9-107.6 7.3-150.7 38.9-32.7 98.9-27.8 136.5 10.5l35 35.7 35-35.7c37.8-38.5 97.8-43.2 136.5-10.6 51.1 43.1 43.5 113.9 7.3 150.8z"></path></svg>
assets/js/admin.js CHANGED
@@ -45,12 +45,54 @@ jQuery(document).ready(
45
  $appareanceSettings.find("input,select").change();
46
 
47
 
48
- const form_shortcode = $(".shortcode-settings-form"),
49
  shortcode_preview = form_shortcode.find(".shortcode-preview"),
50
  shortcode_code = shortcode_preview.find(".code"),
51
  form_shortcode_content = form_shortcode.find(
52
  ".main > .enjoy_tabs_content"
53
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
  form_shortcode
56
  .find('input[name="enjoy_tab_checked"]')
@@ -62,6 +104,8 @@ jQuery(document).ready(
62
  return;
63
  }
64
 
 
 
65
  // build shortcode
66
  let shortcode = "[enjoyinstagram_" + val;
67
  let $inputs = tab.find("input, select");
@@ -70,6 +114,12 @@ jQuery(document).ready(
70
  shortcode_preview.hide()
71
  } else {
72
  shortcode_preview.show();
 
 
 
 
 
 
73
  }
74
 
75
  shortcode += "]";
@@ -77,14 +127,20 @@ jQuery(document).ready(
77
  shortcode_code.html(shortcode);
78
  tab.addClass("active").siblings().removeClass("active");
79
  })
80
- .first()
81
- .change();
 
 
 
 
 
82
 
83
  form_shortcode.on(
84
  "change",
85
  ".enjoy_tabs_content > .active input, .enjoy_tabs_content > .active select",
86
  function () {
87
- shortcode_code.text(shortcode_code.text());
 
88
  }
89
  );
90
 
45
  $appareanceSettings.find("input,select").change();
46
 
47
 
48
+ var form_shortcode = $(".shortcode-settings-form"),
49
  shortcode_preview = form_shortcode.find(".shortcode-preview"),
50
  shortcode_code = shortcode_preview.find(".code"),
51
  form_shortcode_content = form_shortcode.find(
52
  ".main > .enjoy_tabs_content"
53
+ ),
54
+ shortcode_attr = function (item, shortcode) {
55
+
56
+ var value = item.value,
57
+ reg = new RegExp(item.name + '="([^"]*)"', 'g');
58
+
59
+ if (item.type === 'radio' && !$(item).is(':checked')) {
60
+ return shortcode;
61
+ }
62
+
63
+ if (item.type === 'checkbox' && !$(item).is(':checked')) {
64
+ value = $(item).hasClass('checkbox-multiple') ? '' : 'off';
65
+ }
66
+
67
+ if (shortcode.match(reg)) {
68
+ if ($(item).hasClass('checkbox-multiple')) {
69
+ var temp_value = shortcode.match(reg),
70
+ temp_value = temp_value[0].replace(item.name + '="', '').replace('"', '').split(',').filter(function (value) {
71
+ return value !== '';
72
+ }),
73
+ key = $.inArray(item.value, temp_value);
74
+
75
+ if (key !== -1 && !$(item).is(':checked')) {
76
+ temp_value.splice(key, 1);
77
+ } else if (key === -1 && $(item).is(':checked')) {
78
+ temp_value.push(item.value);
79
+ }
80
+
81
+ value = temp_value.join(',');
82
+ }
83
+
84
+ shortcode = shortcode.replace(reg, item.name + '="' + value + '"');
85
+ } else {
86
+ shortcode += ' ' + item.name + '="' + value + '"';
87
+ }
88
+
89
+ return shortcode;
90
+ };
91
+
92
+ $('.enjoy_tabs_content > div').each(function() {
93
+ var $input_referer = $("input[name='_wp_http_referer']",this)
94
+ $input_referer.val($input_referer.val() + '#shortcode_tab=' + $(this).attr('id'))
95
+ })
96
 
97
  form_shortcode
98
  .find('input[name="enjoy_tab_checked"]')
104
  return;
105
  }
106
 
107
+ window.location = '#shortcode_tab=' + val;
108
+
109
  // build shortcode
110
  let shortcode = "[enjoyinstagram_" + val;
111
  let $inputs = tab.find("input, select");
114
  shortcode_preview.hide()
115
  } else {
116
  shortcode_preview.show();
117
+
118
+ if (tab.find('.ei-premium').length === 0) {
119
+ $inputs.each(function () {
120
+ shortcode = shortcode_attr(this, shortcode);
121
+ });
122
+ }
123
  }
124
 
125
  shortcode += "]";
127
  shortcode_code.html(shortcode);
128
  tab.addClass("active").siblings().removeClass("active");
129
  })
130
+
131
+ if(window.location.hash.indexOf('shortcode_tab') !== -1) {
132
+ var active_tab = window.location.hash.replace('#shortcode_tab=', '')
133
+ $('.enjoy_tabs input[value=\''+active_tab+'\']').prop('selected', 'selected').trigger('click').change()
134
+ } else {
135
+ $('.enjoy_tabs input').eq(0).trigger('click').change()
136
+ }
137
 
138
  form_shortcode.on(
139
  "change",
140
  ".enjoy_tabs_content > .active input, .enjoy_tabs_content > .active select",
141
  function () {
142
+ var full_shortcode = $(this).closest('.display_content_tabs').find('.ei-premium').length === 0;
143
+ shortcode_code.text(full_shortcode ? shortcode_attr(this, shortcode_code.text()) : shortcode_code.text());
144
  }
145
  );
146
 
assets/js/owl.carousel.js DELETED
@@ -1,3074 +0,0 @@
1
- /**
2
- * Owl carousel
3
- * @version 2.0.0
4
- * @author Bartosz Wojciechowski
5
- * @license The MIT License (MIT)
6
- * @todo Lazy Load Icon
7
- * @todo prevent animationend bubling
8
- * @todo itemsScaleUp
9
- * @todo Test Zepto
10
- * @todo stagePadding calculate wrong active classes
11
- */
12
- ;(function($, window, document, undefined) {
13
-
14
- var drag, state, e;
15
-
16
- /**
17
- * Template for status information about drag and touch events.
18
- * @private
19
- */
20
- drag = {
21
- start: 0,
22
- startX: 0,
23
- startY: 0,
24
- current: 0,
25
- currentX: 0,
26
- currentY: 0,
27
- offsetX: 0,
28
- offsetY: 0,
29
- distance: null,
30
- startTime: 0,
31
- endTime: 0,
32
- updatedX: 0,
33
- targetEl: null
34
- };
35
-
36
- /**
37
- * Template for some status informations.
38
- * @private
39
- */
40
- state = {
41
- isTouch: false,
42
- isScrolling: false,
43
- isSwiping: false,
44
- direction: false,
45
- inMotion: false
46
- };
47
-
48
- /**
49
- * Event functions references.
50
- * @private
51
- */
52
- e = {
53
- _onDragStart: null,
54
- _onDragMove: null,
55
- _onDragEnd: null,
56
- _transitionEnd: null,
57
- _resizer: null,
58
- _responsiveCall: null,
59
- _goToLoop: null,
60
- _checkVisibile: null
61
- };
62
-
63
- /**
64
- * Creates a carousel.
65
- * @class The Owl Carousel.
66
- * @public
67
- * @param {HTMLElement|jQuery} element - The element to create the carousel for.
68
- * @param {Object} [options] - The options
69
- */
70
- function Owl(element, options) {
71
-
72
- /**
73
- * Current settings for the carousel.
74
- * @public
75
- */
76
- this.settings = null;
77
-
78
- /**
79
- * Current options set by the caller including defaults.
80
- * @public
81
- */
82
- this.options = $.extend({}, Owl.Defaults, options);
83
-
84
- /**
85
- * Plugin element.
86
- * @public
87
- */
88
- this.$element = $(element);
89
-
90
- /**
91
- * Caches informations about drag and touch events.
92
- */
93
- this.drag = $.extend({}, drag);
94
-
95
- /**
96
- * Caches some status informations.
97
- * @protected
98
- */
99
- this.state = $.extend({}, state);
100
-
101
- /**
102
- * @protected
103
- * @todo Must be documented
104
- */
105
- this.e = $.extend({}, e);
106
-
107
- /**
108
- * References to the running plugins of this carousel.
109
- * @protected
110
- */
111
- this._plugins = {};
112
-
113
- /**
114
- * Currently suppressed events to prevent them from beeing retriggered.
115
- * @protected
116
- */
117
- this._supress = {};
118
-
119
- /**
120
- * Absolute current position.
121
- * @protected
122
- */
123
- this._current = null;
124
-
125
- /**
126
- * Animation speed in milliseconds.
127
- * @protected
128
- */
129
- this._speed = null;
130
-
131
- /**
132
- * Coordinates of all items in pixel.
133
- * @todo The name of this member is missleading.
134
- * @protected
135
- */
136
- this._coordinates = [];
137
-
138
- /**
139
- * Current breakpoint.
140
- * @todo Real media queries would be nice.
141
- * @protected
142
- */
143
- this._breakpoint = null;
144
-
145
- /**
146
- * Current width of the plugin element.
147
- */
148
- this._width = null;
149
-
150
- /**
151
- * All real items.
152
- * @protected
153
- */
154
- this._items = [];
155
-
156
- /**
157
- * All cloned items.
158
- * @protected
159
- */
160
- this._clones = [];
161
-
162
- /**
163
- * Merge values of all items.
164
- * @todo Maybe this could be part of a plugin.
165
- * @protected
166
- */
167
- this._mergers = [];
168
-
169
- /**
170
- * Invalidated parts within the update process.
171
- * @protected
172
- */
173
- this._invalidated = {};
174
-
175
- /**
176
- * Ordered list of workers for the update process.
177
- * @protected
178
- */
179
- this._pipe = [];
180
-
181
- $.each(Owl.Plugins, $.proxy(function(key, plugin) {
182
- this._plugins[key[0].toLowerCase() + key.slice(1)]
183
- = new plugin(this);
184
- }, this));
185
-
186
- $.each(Owl.Pipe, $.proxy(function(priority, worker) {
187
- this._pipe.push({
188
- 'filter': worker.filter,
189
- 'run': $.proxy(worker.run, this)
190
- });
191
- }, this));
192
-
193
- this.setup();
194
- this.initialize();
195
- }
196
-
197
- /**
198
- * Default options for the carousel.
199
- * @public
200
- */
201
- Owl.Defaults = {
202
- items: 3,
203
- loop: false,
204
- center: false,
205
-
206
- mouseDrag: true,
207
- touchDrag: true,
208
- pullDrag: true,
209
- freeDrag: false,
210
-
211
- margin: 0,
212
- stagePadding: 0,
213
-
214
- merge: false,
215
- mergeFit: true,
216
- autoWidth: false,
217
-
218
- startPosition: 0,
219
- rtl: false,
220
-
221
- smartSpeed: 250,
222
- fluidSpeed: false,
223
- dragEndSpeed: false,
224
-
225
- responsive: {},
226
- responsiveRefreshRate: 200,
227
- responsiveBaseElement: window,
228
- responsiveClass: false,
229
-
230
- fallbackEasing: 'swing',
231
-
232
- info: false,
233
-
234
- nestedItemSelector: false,
235
- itemElement: 'div',
236
- stageElement: 'div',
237
-
238
- // Classes and Names
239
- themeClass: 'owl-theme',
240
- baseClass: 'owl-carousel',
241
- itemClass: 'owl-item',
242
- centerClass: 'center',
243
- activeClass: 'active'
244
- };
245
-
246
- /**
247
- * Enumeration for width.
248
- * @public
249
- * @readonly
250
- * @enum {String}
251
- */
252
- Owl.Width = {
253
- Default: 'default',
254
- Inner: 'inner',
255
- Outer: 'outer'
256
- };
257
-
258
- /**
259
- * Contains all registered plugins.
260
- * @public
261
- */
262
- Owl.Plugins = {};
263
-
264
- /**
265
- * Update pipe.
266
- */
267
- Owl.Pipe = [ {
268
- filter: [ 'width', 'items', 'settings' ],
269
- run: function(cache) {
270
- cache.current = this._items && this._items[this.relative(this._current)];
271
- }
272
- }, {
273
- filter: [ 'items', 'settings' ],
274
- run: function() {
275
- var cached = this._clones,
276
- clones = this.$stage.children('.cloned');
277
-
278
- if (clones.length !== cached.length || (!this.settings.loop && cached.length > 0)) {
279
- this.$stage.children('.cloned').remove();
280
- this._clones = [];
281
- }
282
- }
283
- }, {
284
- filter: [ 'items', 'settings' ],
285
- run: function() {
286
- var i, n,
287
- clones = this._clones,
288
- items = this._items,
289
- delta = this.settings.loop ? clones.length - Math.max(this.settings.items * 2, 4) : 0;
290
-
291
- for (i = 0, n = Math.abs(delta / 2); i < n; i++) {
292
- if (delta > 0) {
293
- this.$stage.children().eq(items.length + clones.length - 1).remove();
294
- clones.pop();
295
- this.$stage.children().eq(0).remove();
296
- clones.pop();
297
- } else {
298
- clones.push(clones.length / 2);
299
- this.$stage.append(items[clones[clones.length - 1]].clone().addClass('cloned'));
300
- clones.push(items.length - 1 - (clones.length - 1) / 2);
301
- this.$stage.prepend(items[clones[clones.length - 1]].clone().addClass('cloned'));
302
- }
303
- }
304
- }
305
- }, {
306
- filter: [ 'width', 'items', 'settings' ],
307
- run: function() {
308
- var rtl = (this.settings.rtl ? 1 : -1),
309
- width = (this.width() / this.settings.items).toFixed(3),
310
- coordinate = 0, merge, i, n;
311
-
312
- this._coordinates = [];
313
- for (i = 0, n = this._clones.length + this._items.length; i < n; i++) {
314
- merge = this._mergers[this.relative(i)];
315
- merge = (this.settings.mergeFit && Math.min(merge, this.settings.items)) || merge;
316
- coordinate += (this.settings.autoWidth ? this._items[this.relative(i)].width() + this.settings.margin : width * merge) * rtl;
317
-
318
- this._coordinates.push(coordinate);
319
- }
320
- }
321
- }, {
322
- filter: [ 'width', 'items', 'settings' ],
323
- run: function() {
324
- var i, n, width = (this.width() / this.settings.items).toFixed(3), css = {
325
- 'width': Math.abs(this._coordinates[this._coordinates.length - 1]) + this.settings.stagePadding * 2,
326
- 'padding-left': this.settings.stagePadding || '',
327
- 'padding-right': this.settings.stagePadding || ''
328
- };
329
-
330
- this.$stage.css(css);
331
-
332
- css = { 'width': this.settings.autoWidth ? 'auto' : width - this.settings.margin };
333
- css[this.settings.rtl ? 'margin-left' : 'margin-right'] = this.settings.margin;
334
-
335
- if (!this.settings.autoWidth && $.grep(this._mergers, function(v) { return v > 1 }).length > 0) {
336
- for (i = 0, n = this._coordinates.length; i < n; i++) {
337
- css.width = Math.abs(this._coordinates[i]) - Math.abs(this._coordinates[i - 1] || 0) - this.settings.margin;
338
- this.$stage.children().eq(i).css(css);
339
- }
340
- } else {
341
- this.$stage.children().css(css);
342
- }
343
- }
344
- }, {
345
- filter: [ 'width', 'items', 'settings' ],
346
- run: function(cache) {
347
- cache.current && this.reset(this.$stage.children().index(cache.current));
348
- }
349
- }, {
350
- filter: [ 'position' ],
351
- run: function() {
352
- this.animate(this.coordinates(this._current));
353
- }
354
- }, {
355
- filter: [ 'width', 'position', 'items', 'settings' ],
356
- run: function() {
357
- var rtl = this.settings.rtl ? 1 : -1,
358
- padding = this.settings.stagePadding * 2,
359
- begin = this.coordinates(this.current()) + padding,
360
- end = begin + this.width() * rtl,
361
- inner, outer, matches = [], i, n;
362
-
363
- for (i = 0, n = this._coordinates.length; i < n; i++) {
364
- inner = this._coordinates[i - 1] || 0;
365
- outer = Math.abs(this._coordinates[i]) + padding * rtl;
366
-
367
- if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))
368
- || (this.op(outer, '<', begin) && this.op(outer, '>', end))) {
369
- matches.push(i);
370
- }
371
- }
372
-
373
- this.$stage.children('.' + this.settings.activeClass).removeClass(this.settings.activeClass);
374
- this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass(this.settings.activeClass);
375
-
376
- if (this.settings.center) {
377
- this.$stage.children('.' + this.settings.centerClass).removeClass(this.settings.centerClass);
378
- this.$stage.children().eq(this.current()).addClass(this.settings.centerClass);
379
- }
380
- }
381
- } ];
382
-
383
- /**
384
- * Initializes the carousel.
385
- * @protected
386
- */
387
- Owl.prototype.initialize = function() {
388
- this.trigger('initialize');
389
-
390
- this.$element
391
- .addClass(this.settings.baseClass)
392
- .addClass(this.settings.themeClass)
393
- .toggleClass('owl-rtl', this.settings.rtl);
394
-
395
- // check support
396
- this.browserSupport();
397
-
398
- if (this.settings.autoWidth && this.state.imagesLoaded !== true) {
399
- var imgs, nestedSelector, width;
400
- imgs = this.$element.find('img');
401
- nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;
402
- width = this.$element.children(nestedSelector).width();
403
-
404
- if (imgs.length && width <= 0) {
405
- this.preloadAutoWidthImages(imgs);
406
- return false;
407
- }
408
- }
409
-
410
- this.$element.addClass('owl-loading');
411
-
412
- // create stage
413
- this.$stage = $('<' + this.settings.stageElement + ' class="owl-stage"/>')
414
- .wrap('<div class="owl-stage-outer">');
415
-
416
- // append stage
417
- this.$element.append(this.$stage.parent());
418
-
419
- // append content
420
- this.replace(this.$element.children().not(this.$stage.parent()));
421
-
422
- // set view width
423
- this._width = this.$element.width();
424
-
425
- // update view
426
- this.refresh();
427
-
428
- this.$element.removeClass('owl-loading').addClass('owl-loaded');
429
-
430
- // attach generic events
431
- this.eventsCall();
432
-
433
- // attach generic events
434
- this.internalEvents();
435
-
436
- // attach custom control events
437
- this.addTriggerableEvents();
438
-
439
- this.trigger('initialized');
440
- };
441
-
442
- /**
443
- * Setups the current settings.
444
- * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?
445
- * @todo Support for media queries by using `matchMedia` would be nice.
446
- * @public
447
- */
448
- Owl.prototype.setup = function() {
449
- var viewport = this.viewport(),
450
- overwrites = this.options.responsive,
451
- match = -1,
452
- settings = null;
453
-
454
- if (!overwrites) {
455
- settings = $.extend({}, this.options);
456
- } else {
457
- $.each(overwrites, function(breakpoint) {
458
- if (breakpoint <= viewport && breakpoint > match) {
459
- match = Number(breakpoint);
460
- }
461
- });
462
-
463
- settings = $.extend({}, this.options, overwrites[match]);
464
- delete settings.responsive;
465
-
466
- // responsive class
467
- if (settings.responsiveClass) {
468
- this.$element.attr('class', function(i, c) {
469
- return c.replace(/\b owl-responsive-\S+/g, '');
470
- }).addClass('owl-responsive-' + match);
471
- }
472
- }
473
-
474
- if (this.settings === null || this._breakpoint !== match) {
475
- this.trigger('change', { property: { name: 'settings', value: settings } });
476
- this._breakpoint = match;
477
- this.settings = settings;
478
- this.invalidate('settings');
479
- this.trigger('changed', { property: { name: 'settings', value: this.settings } });
480
- }
481
- };
482
-
483
- /**
484
- * Updates option logic if necessery.
485
- * @protected
486
- */
487
- Owl.prototype.optionsLogic = function() {
488
- // Toggle Center class
489
- this.$element.toggleClass('owl-center', this.settings.center);
490
-
491
- // if items number is less than in body
492
- if (this.settings.loop && this._items.length < this.settings.items) {
493
- this.settings.loop = false;
494
- }
495
-
496
- if (this.settings.autoWidth) {
497
- this.settings.stagePadding = false;
498
- this.settings.merge = false;
499
- }
500
- };
501
-
502
- /**
503
- * Prepares an item before add.
504
- * @todo Rename event parameter `content` to `item`.
505
- * @protected
506
- * @returns {jQuery|HTMLElement} - The item container.
507
- */
508
- Owl.prototype.prepare = function(item) {
509
- var event = this.trigger('prepare', { content: item });
510
-
511
- if (!event.data) {
512
- event.data = $('<' + this.settings.itemElement + '/>')
513
- .addClass(this.settings.itemClass).append(item)
514
- }
515
-
516
- this.trigger('prepared', { content: event.data });
517
-
518
- return event.data;
519
- };
520
-
521
- /**
522
- * Updates the view.
523
- * @public
524
- */
525
- Owl.prototype.update = function() {
526
- var i = 0,
527
- n = this._pipe.length,
528
- filter = $.proxy(function(p) { return this[p] }, this._invalidated),
529
- cache = {};
530
-
531
- while (i < n) {
532
- if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {
533
- this._pipe[i].run(cache);
534
- }
535
- i++;
536
- }
537
-
538
- this._invalidated = {};
539
- };
540
-
541
- /**
542
- * Gets the width of the view.
543
- * @public
544
- * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.
545
- * @returns {Number} - The width of the view in pixel.
546
- */
547
- Owl.prototype.width = function(dimension) {
548
- dimension = dimension || Owl.Width.Default;
549
- switch (dimension) {
550
- case Owl.Width.Inner:
551
- case Owl.Width.Outer:
552
- return this._width;
553
- default:
554
- return this._width - this.settings.stagePadding * 2 + this.settings.margin;
555
- }
556
- };
557
-
558
- /**
559
- * Refreshes the carousel primarily for adaptive purposes.
560
- * @public
561
- */
562
- Owl.prototype.refresh = function() {
563
- if (this._items.length === 0) {
564
- return false;
565
- }
566
-
567
- var start = new Date().getTime();
568
-
569
- this.trigger('refresh');
570
-
571
- this.setup();
572
-
573
- this.optionsLogic();
574
-
575
- // hide and show methods helps here to set a proper widths,
576
- // this prevents scrollbar to be calculated in stage width
577
- this.$stage.addClass('owl-refresh');
578
-
579
- this.update();
580
-
581
- this.$stage.removeClass('owl-refresh');
582
-
583
- this.state.orientation = window.orientation;
584
-
585
- this.watchVisibility();
586
-
587
- this.trigger('refreshed');
588
- };
589
-
590
- /**
591
- * Save internal event references and add event based functions.
592
- * @protected
593
- */
594
- Owl.prototype.eventsCall = function() {
595
- // Save events references
596
- this.e._onDragStart = $.proxy(function(e) {
597
- this.onDragStart(e);
598
- }, this);
599
- this.e._onDragMove = $.proxy(function(e) {
600
- this.onDragMove(e);
601
- }, this);
602
- this.e._onDragEnd = $.proxy(function(e) {
603
- this.onDragEnd(e);
604
- }, this);
605
- this.e._onResize = $.proxy(function(e) {
606
- this.onResize(e);
607
- }, this);
608
- this.e._transitionEnd = $.proxy(function(e) {
609
- this.transitionEnd(e);
610
- }, this);
611
- this.e._preventClick = $.proxy(function(e) {
612
- this.preventClick(e);
613
- }, this);
614
- };
615
-
616
- /**
617
- * Checks window `resize` event.
618
- * @protected
619
- */
620
- Owl.prototype.onThrottledResize = function() {
621
- window.clearTimeout(this.resizeTimer);
622
- this.resizeTimer = window.setTimeout(this.e._onResize, this.settings.responsiveRefreshRate);
623
- };
624
-
625
- /**
626
- * Checks window `resize` event.
627
- * @protected
628
- */
629
- Owl.prototype.onResize = function() {
630
- if (!this._items.length) {
631
- return false;
632
- }
633
-
634
- if (this._width === this.$element.width()) {
635
- return false;
636
- }
637
-
638
- if (this.trigger('resize').isDefaultPrevented()) {
639
- return false;
640
- }
641
-
642
- this._width = this.$element.width();
643
-
644
- this.invalidate('width');
645
-
646
- this.refresh();
647
-
648
- this.trigger('resized');
649
- };
650
-
651
- /**
652
- * Checks for touch/mouse drag event type and add run event handlers.
653
- * @protected
654
- */
655
- Owl.prototype.eventsRouter = function(event) {
656
- var type = event.type;
657
-
658
- if (type === "mousedown" || type === "touchstart") {
659
- this.onDragStart(event);
660
- } else if (type === "mousemove" || type === "touchmove") {
661
- this.onDragMove(event);
662
- } else if (type === "mouseup" || type === "touchend") {
663
- this.onDragEnd(event);
664
- } else if (type === "touchcancel") {
665
- this.onDragEnd(event);
666
- }
667
- };
668
-
669
- /**
670
- * Checks for touch/mouse drag options and add necessery event handlers.
671
- * @protected
672
- */
673
- Owl.prototype.internalEvents = function() {
674
- var isTouch = isTouchSupport(),
675
- isTouchIE = isTouchSupportIE();
676
-
677
- if (this.settings.mouseDrag){
678
- this.$stage.on('mousedown', $.proxy(function(event) { this.eventsRouter(event) }, this));
679
- this.$stage.on('dragstart', function() { return false });
680
- this.$stage.get(0).onselectstart = function() { return false };
681
- } else {
682
- this.$element.addClass('owl-text-select-on');
683
- }
684
-
685
- if (this.settings.touchDrag && !isTouchIE){
686
- this.$stage.on('touchstart touchcancel', $.proxy(function(event) { this.eventsRouter(event) }, this));
687
- }
688
-
689
- // catch transitionEnd event
690
- if (this.transitionEndVendor) {
691
- this.on(this.$stage.get(0), this.transitionEndVendor, this.e._transitionEnd, false);
692
- }
693
-
694
- // responsive
695
- if (this.settings.responsive !== false) {
696
- this.on(window, 'resize', $.proxy(this.onThrottledResize, this));
697
- }
698
- };
699
-
700
- /**
701
- * Handles touchstart/mousedown event.
702
- * @protected
703
- * @param {Event} event - The event arguments.
704
- */
705
- Owl.prototype.onDragStart = function(event) {
706
- var ev, isTouchEvent, pageX, pageY, animatedPos;
707
-
708
- ev = event.originalEvent || event || window.event;
709
-
710
- // prevent right click
711
- if (ev.which === 3 || this.state.isTouch) {
712
- return false;
713
- }
714
-
715
- if (ev.type === 'mousedown') {
716
- this.$stage.addClass('owl-grab');
717
- }
718
-
719
- this.trigger('drag');
720
- this.drag.startTime = new Date().getTime();
721
- this.speed(0);
722
- this.state.isTouch = true;
723
- this.state.isScrolling = false;
724
- this.state.isSwiping = false;
725
- this.drag.distance = 0;
726
-
727
- pageX = getTouches(ev).x;
728
- pageY = getTouches(ev).y;
729
-
730
- // get stage position left
731
- this.drag.offsetX = this.$stage.position().left;
732
- this.drag.offsetY = this.$stage.position().top;
733
-
734
- if (this.settings.rtl) {
735
- this.drag.offsetX = this.$stage.position().left + this.$stage.width() - this.width()
736
- + this.settings.margin;
737
- }
738
-
739
- // catch position // ie to fix
740
- if (this.state.inMotion && this.support3d) {
741
- animatedPos = this.getTransformProperty();
742
- this.drag.offsetX = animatedPos;
743
- this.animate(animatedPos);
744
- this.state.inMotion = true;
745
- } else if (this.state.inMotion && !this.support3d) {
746
- this.state.inMotion = false;
747
- return false;
748
- }
749
-
750
- this.drag.startX = pageX - this.drag.offsetX;
751
- this.drag.startY = pageY - this.drag.offsetY;
752
-
753
- this.drag.start = pageX - this.drag.startX;
754
- this.drag.targetEl = ev.target || ev.srcElement;
755
- this.drag.updatedX = this.drag.start;
756
-
757
- // to do/check
758
- // prevent links and images dragging;
759
- if (this.drag.targetEl.tagName === "IMG" || this.drag.targetEl.tagName === "A") {
760
- this.drag.targetEl.draggable = false;
761
- }
762
-
763
- $(document).on('mousemove.owl.dragEvents mouseup.owl.dragEvents touchmove.owl.dragEvents touchend.owl.dragEvents', $.proxy(function(event) {this.eventsRouter(event)},this));
764
- };
765
-
766
- /**
767
- * Handles the touchmove/mousemove events.
768
- * @todo Simplify
769
- * @protected
770
- * @param {Event} event - The event arguments.
771
- */
772
- Owl.prototype.onDragMove = function(event) {
773
- var ev, isTouchEvent, pageX, pageY, minValue, maxValue, pull;
774
-
775
- if (!this.state.isTouch) {
776
- return;
777
- }
778
-
779
- if (this.state.isScrolling) {
780
- return;
781
- }
782
-
783
- ev = event.originalEvent || event || window.event;
784
-
785
- pageX = getTouches(ev).x;
786
- pageY = getTouches(ev).y;
787
-
788
- // Drag Direction
789
- this.drag.currentX = pageX - this.drag.startX;
790
- this.drag.currentY = pageY - this.drag.startY;
791
- this.drag.distance = this.drag.currentX - this.drag.offsetX;
792
-
793
- // Check move direction
794
- if (this.drag.distance < 0) {
795
- this.state.direction = this.settings.rtl ? 'right' : 'left';
796
- } else if (this.drag.distance > 0) {
797
- this.state.direction = this.settings.rtl ? 'left' : 'right';
798
- }
799
- // Loop
800
- if (this.settings.loop) {
801
- if (this.op(this.drag.currentX, '>', this.coordinates(this.minimum())) && this.state.direction === 'right') {
802
- this.drag.currentX -= (this.settings.center && this.coordinates(0)) - this.coordinates(this._items.length);
803
- } else if (this.op(this.drag.currentX, '<', this.coordinates(this.maximum())) && this.state.direction === 'left') {
804
- this.drag.currentX += (this.settings.center && this.coordinates(0)) - this.coordinates(this._items.length);
805
- }
806
- } else {
807
- // pull
808
- minValue = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());
809
- maxValue = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());
810
- pull = this.settings.pullDrag ? this.drag.distance / 5 : 0;
811
- this.drag.currentX = Math.max(Math.min(this.drag.currentX, minValue + pull), maxValue + pull);
812
- }
813
-
814
- // Lock browser if swiping horizontal
815
-
816
- if ((this.drag.distance > 8 || this.drag.distance < -8)) {
817
- if (ev.preventDefault !== undefined) {
818
- ev.preventDefault();
819
- } else {
820
- ev.returnValue = false;
821
- }
822
- this.state.isSwiping = true;
823
- }
824
-
825
- this.drag.updatedX = this.drag.currentX;
826
-
827
- // Lock Owl if scrolling
828
- if ((this.drag.currentY > 16 || this.drag.currentY < -16) && this.state.isSwiping === false) {
829
- this.state.isScrolling = true;
830
- this.drag.updatedX = this.drag.start;
831
- }
832
-
833
- this.animate(this.drag.updatedX);
834
- };
835
-
836
- /**
837
- * Handles the touchend/mouseup events.
838
- * @protected
839
- */
840
- Owl.prototype.onDragEnd = function(event) {
841
- var compareTimes, distanceAbs, closest;
842
-
843
- if (!this.state.isTouch) {
844
- return;
845
- }
846
-
847
- if (event.type === 'mouseup') {
848
- this.$stage.removeClass('owl-grab');
849
- }
850
-
851
- this.trigger('dragged');
852
-
853
- // prevent links and images dragging;
854
- this.drag.targetEl.removeAttribute("draggable");
855
-
856
- // remove drag event listeners
857
-
858
- this.state.isTouch = false;
859
- this.state.isScrolling = false;
860
- this.state.isSwiping = false;
861
-
862
- // to check
863
- if (this.drag.distance === 0 && this.state.inMotion !== true) {
864
- this.state.inMotion = false;
865
- return false;
866
- }
867
-
868
- // prevent clicks while scrolling
869
-
870
- this.drag.endTime = new Date().getTime();
871
- compareTimes = this.drag.endTime - this.drag.startTime;
872
- distanceAbs = Math.abs(this.drag.distance);
873
-
874
- // to test
875
- if (distanceAbs > 3 || compareTimes > 300) {
876
- this.removeClick(this.drag.targetEl);
877
- }
878
-
879
- closest = this.closest(this.drag.updatedX);
880
-
881
- this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);
882
- this.current(closest);
883
- this.invalidate('position');
884
- this.update();
885
-
886
- // if pullDrag is off then fire transitionEnd event manually when stick
887
- // to border
888
- if (!this.settings.pullDrag && this.drag.updatedX === this.coordinates(closest)) {
889
- this.transitionEnd();
890
- }
891
-
892
- this.drag.distance = 0;
893
-
894
- $(document).off('.owl.dragEvents');
895
- };
896
-
897
- /**
898
- * Attaches `preventClick` to disable link while swipping.
899
- * @protected
900
- * @param {HTMLElement} [target] - The target of the `click` event.
901
- */
902
- Owl.prototype.removeClick = function(target) {
903
- this.drag.targetEl = target;
904
- $(target).on('click.preventClick', this.e._preventClick);
905
- // to make sure click is removed:
906
- window.setTimeout(function() {
907
- $(target).off('click.preventClick');
908
- }, 300);
909
- };
910
-
911
- /**
912
- * Suppresses click event.
913
- * @protected
914
- * @param {Event} ev - The event arguments.
915
- */
916
- Owl.prototype.preventClick = function(ev) {
917
- if (ev.preventDefault) {
918
- ev.preventDefault();
919
- } else {
920
- ev.returnValue = false;
921
- }
922
- if (ev.stopPropagation) {
923
- ev.stopPropagation();
924
- }
925
- $(ev.target).off('click.preventClick');
926
- };
927
-
928
- /**
929
- * Catches stage position while animate (only CSS3).
930
- * @protected
931
- * @returns
932
- */
933
- Owl.prototype.getTransformProperty = function() {
934
- var transform, matrix3d;
935
-
936
- transform = window.getComputedStyle(this.$stage.get(0), null).getPropertyValue(this.vendorName + 'transform');
937
- // var transform = this.$stage.css(this.vendorName + 'transform')
938
- transform = transform.replace(/matrix(3d)?\(|\)/g, '').split(',');
939
- matrix3d = transform.length === 16;
940
-
941
- return matrix3d !== true ? transform[4] : transform[12];
942
- };
943
-
944
- /**
945
- * Gets absolute position of the closest item for a coordinate.
946
- * @todo Setting `freeDrag` makes `closest` not reusable. See #165.
947
- * @protected
948
- * @param {Number} coordinate - The coordinate in pixel.
949
- * @return {Number} - The absolute position of the closest item.
950
- */
951
- Owl.prototype.closest = function(coordinate) {
952
- var position = -1, pull = 30, width = this.width(), coordinates = this.coordinates();
953
-
954
- if (!this.settings.freeDrag) {
955
- // check closest item
956
- $.each(coordinates, $.proxy(function(index, value) {
957
- if (coordinate > value - pull && coordinate < value + pull) {
958
- position = index;
959
- } else if (this.op(coordinate, '<', value)
960
- && this.op(coordinate, '>', coordinates[index + 1] || value - width)) {
961
- position = this.state.direction === 'left' ? index + 1 : index;
962
- }
963
- return position === -1;
964
- }, this));
965
- }
966
-
967
- if (!this.settings.loop) {
968
- // non loop boundries
969
- if (this.op(coordinate, '>', coordinates[this.minimum()])) {
970
- position = coordinate = this.minimum();
971
- } else if (this.op(coordinate, '<', coordinates[this.maximum()])) {
972
- position = coordinate = this.maximum();
973
- }
974
- }
975
-
976
- return position;
977
- };
978
-
979
- /**
980
- * Animates the stage.
981
- * @public
982
- * @param {Number} coordinate - The coordinate in pixels.
983
- */
984
- Owl.prototype.animate = function(coordinate) {
985
- this.trigger('translate');
986
- this.state.inMotion = this.speed() > 0;
987
-
988
- if (this.support3d) {
989
- this.$stage.css({
990
- transform: 'translate3d(' + coordinate + 'px' + ',0px, 0px)',
991
- transition: (this.speed() / 1000) + 's'
992
- });
993
- } else if (this.state.isTouch) {
994
- this.$stage.css({
995
- left: coordinate + 'px'
996
- });
997
- } else {
998
- this.$stage.animate({
999
- left: coordinate
1000
- }, this.speed() / 1000, this.settings.fallbackEasing, $.proxy(function() {
1001
- if (this.state.inMotion) {
1002
- this.transitionEnd();
1003
- }
1004
- }, this));
1005
- }
1006
- };
1007
-
1008
- /**
1009
- * Sets the absolute position of the current item.
1010
- * @public
1011
- * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.
1012
- * @returns {Number} - The absolute position of the current item.
1013
- */
1014
- Owl.prototype.current = function(position) {
1015
- if (position === undefined) {
1016
- return this._current;
1017
- }
1018
-
1019
- if (this._items.length === 0) {
1020
- return undefined;
1021
- }
1022
-
1023
- position = this.normalize(position);
1024
-
1025
- if (this._current !== position) {
1026
- var event = this.trigger('change', { property: { name: 'position', value: position } });
1027
-
1028
- if (event.data !== undefined) {
1029
- position = this.normalize(event.data);
1030
- }
1031
-
1032
- this._current = position;
1033
-
1034
- this.invalidate('position');
1035
-
1036
- this.trigger('changed', { property: { name: 'position', value: this._current } });
1037
- }
1038
-
1039
- return this._current;
1040
- };
1041
-
1042
- /**
1043
- * Invalidates the given part of the update routine.
1044
- * @param {String} part - The part to invalidate.
1045
- */
1046
- Owl.prototype.invalidate = function(part) {
1047
- this._invalidated[part] = true;
1048
- }
1049
-
1050
- /**
1051
- * Resets the absolute position of the current item.
1052
- * @public
1053
- * @param {Number} position - The absolute position of the new item.
1054
- */
1055
- Owl.prototype.reset = function(position) {
1056
- position = this.normalize(position);
1057
-
1058
- if (position === undefined) {
1059
- return;
1060
- }
1061
-
1062
- this._speed = 0;
1063
- this._current = position;
1064
-
1065
- this.suppress([ 'translate', 'translated' ]);
1066
-
1067
- this.animate(this.coordinates(position));
1068
-
1069
- this.release([ 'translate', 'translated' ]);
1070
- };
1071
-
1072
- /**
1073
- * Normalizes an absolute or a relative position for an item.
1074
- * @public
1075
- * @param {Number} position - The absolute or relative position to normalize.
1076
- * @param {Boolean} [relative=false] - Whether the given position is relative or not.
1077
- * @returns {Number} - The normalized position.
1078
- */
1079
- Owl.prototype.normalize = function(position, relative) {
1080
- var n = (relative ? this._items.length : this._items.length + this._clones.length);
1081
-
1082
- if (!$.isNumeric(position) || n < 1) {
1083
- return undefined;
1084
- }
1085
-
1086
- if (this._clones.length) {
1087
- position = ((position % n) + n) % n;
1088
- } else {
1089
- position = Math.max(this.minimum(relative), Math.min(this.maximum(relative), position));
1090
- }
1091
-
1092
- return position;
1093
- };
1094
-
1095
- /**
1096
- * Converts an absolute position for an item into a relative position.
1097
- * @public
1098
- * @param {Number} position - The absolute position to convert.
1099
- * @returns {Number} - The converted position.
1100
- */
1101
- Owl.prototype.relative = function(position) {
1102
- position = this.normalize(position);
1103
- position = position - this._clones.length / 2;
1104
- return this.normalize(position, true);
1105
- };
1106
-
1107
- /**
1108
- * Gets the maximum position for an item.
1109
- * @public
1110
- * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
1111
- * @returns {Number}
1112
- */
1113
- Owl.prototype.maximum = function(relative) {
1114
- var maximum, width, i = 0, coordinate,
1115
- settings = this.settings;
1116
-
1117
- if (relative) {
1118
- return this._items.length - 1;
1119
- }
1120
-
1121
- if (!settings.loop && settings.center) {
1122
- maximum = this._items.length - 1;
1123
- } else if (!settings.loop && !settings.center) {
1124
- maximum = this._items.length - settings.items;
1125
- } else if (settings.loop || settings.center) {
1126
- maximum = this._items.length + settings.items;
1127
- } else if (settings.autoWidth || settings.merge) {
1128
- revert = settings.rtl ? 1 : -1;
1129
- width = this.$stage.width() - this.$element.width();
1130
- while (coordinate = this.coordinates(i)) {
1131
- if (coordinate * revert >= width) {
1132
- break;
1133
- }
1134
- maximum = ++i;
1135
- }
1136
- } else {
1137
- throw 'Can not detect maximum absolute position.'
1138
- }
1139
-
1140
- return maximum;
1141
- };
1142
-
1143
- /**
1144
- * Gets the minimum position for an item.
1145
- * @public
1146
- * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
1147
- * @returns {Number}
1148
- */
1149
- Owl.prototype.minimum = function(relative) {
1150
- if (relative) {
1151
- return 0;
1152
- }
1153
-
1154
- return this._clones.length / 2;
1155
- };
1156
-
1157
- /**
1158
- * Gets an item at the specified relative position.
1159
- * @public
1160
- * @param {Number} [position] - The relative position of the item.
1161
- * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
1162
- */
1163
- Owl.prototype.items = function(position) {
1164
- if (position === undefined) {
1165
- return this._items.slice();
1166
- }
1167
-
1168
- position = this.normalize(position, true);
1169
- return this._items[position];
1170
- };
1171
-
1172
- /**
1173
- * Gets an item at the specified relative position.
1174
- * @public
1175
- * @param {Number} [position] - The relative position of the item.
1176
- * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
1177
- */
1178
- Owl.prototype.mergers = function(position) {
1179
- if (position === undefined) {
1180
- return this._mergers.slice();
1181
- }
1182
-
1183
- position = this.normalize(position, true);
1184
- return this._mergers[position];
1185
- };
1186
-
1187
- /**
1188
- * Gets the absolute positions of clones for an item.
1189
- * @public
1190
- * @param {Number} [position] - The relative position of the item.
1191
- * @returns {Array.<Number>} - The absolute positions of clones for the item or all if no position was given.
1192
- */
1193
- Owl.prototype.clones = function(position) {
1194
- var odd = this._clones.length / 2,
1195
- even = odd + this._items.length,
1196
- map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };
1197
-
1198
- if (position === undefined) {
1199
- return $.map(this._clones, function(v, i) { return map(i) });
1200
- }
1201
-
1202
- return $.map(this._clones, function(v, i) { return v === position ? map(i) : null });
1203
- };
1204
-
1205
- /**
1206
- * Sets the current animation speed.
1207
- * @public
1208
- * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.
1209
- * @returns {Number} - The current animation speed in milliseconds.
1210
- */
1211
- Owl.prototype.speed = function(speed) {
1212
- if (speed !== undefined) {
1213
- this._speed = speed;
1214
- }
1215
-
1216
- return this._speed;
1217
- };
1218
-
1219
- /**
1220
- * Gets the coordinate of an item.
1221
- * @todo The name of this method is missleanding.
1222
- * @public
1223
- * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.
1224
- * @returns {Number|Array.<Number>} - The coordinate of the item in pixel or all coordinates.
1225
- */
1226
- Owl.prototype.coordinates = function(position) {
1227
- var coordinate = null;
1228
-
1229
- if (position === undefined) {
1230
- return $.map(this._coordinates, $.proxy(function(coordinate, index) {
1231
- return this.coordinates(index);
1232
- }, this));
1233
- }
1234
-
1235
- if (this.settings.center) {
1236
- coordinate = this._coordinates[position];
1237
- coordinate += (this.width() - coordinate + (this._coordinates[position - 1] || 0)) / 2 * (this.settings.rtl ? -1 : 1);
1238
- } else {
1239
- coordinate = this._coordinates[position - 1] || 0;
1240
- }
1241
-
1242
- return coordinate;
1243
- };
1244
-
1245
- /**
1246
- * Calculates the speed for a translation.
1247
- * @protected
1248
- * @param {Number} from - The absolute position of the start item.
1249
- * @param {Number} to - The absolute position of the target item.
1250
- * @param {Number} [factor=undefined] - The time factor in milliseconds.
1251
- * @returns {Number} - The time in milliseconds for the translation.
1252
- */
1253
- Owl.prototype.duration = function(from, to, factor) {
1254
- return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));
1255
- };
1256
-
1257
- /**
1258
- * Slides to the specified item.
1259
- * @public
1260
- * @param {Number} position - The position of the item.
1261
- * @param {Number} [speed] - The time in milliseconds for the transition.
1262
- */
1263
- Owl.prototype.to = function(position, speed) {
1264
- if (this.settings.loop) {
1265
- var distance = position - this.relative(this.current()),
1266
- revert = this.current(),
1267
- before = this.current(),
1268
- after = this.current() + distance,
1269
- direction = before - after < 0 ? true : false,
1270
- items = this._clones.length + this._items.length;
1271
-
1272
- if (after < this.settings.items && direction === false) {
1273
- revert = before + this._items.length;
1274
- this.reset(revert);
1275
- } else if (after >= items - this.settings.items && direction === true) {
1276
- revert = before - this._items.length;
1277
- this.reset(revert);
1278
- }
1279
- window.clearTimeout(this.e._goToLoop);
1280
- this.e._goToLoop = window.setTimeout($.proxy(function() {
1281
- this.speed(this.duration(this.current(), revert + distance, speed));
1282
- this.current(revert + distance);
1283
- this.update();
1284
- }, this), 30);
1285
- } else {
1286
- this.speed(this.duration(this.current(), position, speed));
1287
- this.current(position);
1288
- this.update();
1289
- }
1290
- };
1291
-
1292
- /**
1293
- * Slides to the next item.
1294
- * @public
1295
- * @param {Number} [speed] - The time in milliseconds for the transition.
1296
- */
1297
- Owl.prototype.next = function(speed) {
1298
- speed = speed || false;
1299
- this.to(this.relative(this.current()) + 1, speed);
1300
- };
1301
-
1302
- /**
1303
- * Slides to the previous item.
1304
- * @public
1305
- * @param {Number} [speed] - The time in milliseconds for the transition.
1306
- */
1307
- Owl.prototype.prev = function(speed) {
1308
- speed = speed || false;
1309
- this.to(this.relative(this.current()) - 1, speed);
1310
- };
1311
-
1312
- /**
1313
- * Handles the end of an animation.
1314
- * @protected
1315
- * @param {Event} event - The event arguments.
1316
- */
1317
- Owl.prototype.transitionEnd = function(event) {
1318
-
1319
- // if css2 animation then event object is undefined
1320
- if (event !== undefined) {
1321
- event.stopPropagation();
1322
-
1323
- // Catch only owl-stage transitionEnd event
1324
- if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {
1325
- return false;
1326
- }
1327
- }
1328
-
1329
- this.state.inMotion = false;
1330
- this.trigger('translated');
1331
- };
1332
-
1333
- /**
1334
- * Gets viewport width.
1335
- * @protected
1336
- * @return {Number} - The width in pixel.
1337
- */
1338
- Owl.prototype.viewport = function() {
1339
- var width;
1340
- if (this.options.responsiveBaseElement !== window) {
1341
- width = $(this.options.responsiveBaseElement).width();
1342
- } else if (window.innerWidth) {
1343
- width = window.innerWidth;
1344
- } else if (document.documentElement && document.documentElement.clientWidth) {
1345
- width = document.documentElement.clientWidth;
1346
- } else {
1347
- throw 'Can not detect viewport width.';
1348
- }
1349
- return width;
1350
- };
1351
-
1352
- /**
1353
- * Replaces the current content.
1354
- * @public
1355
- * @param {HTMLElement|jQuery|String} content - The new content.
1356
- */
1357
- Owl.prototype.replace = function(content) {
1358
- this.$stage.empty();
1359
- this._items = [];
1360
-
1361
- if (content) {
1362
- content = (content instanceof jQuery) ? content : $(content);
1363
- }
1364
-
1365
- if (this.settings.nestedItemSelector) {
1366
- content = content.find('.' + this.settings.nestedItemSelector);
1367
- }
1368
-
1369
- content.filter(function() {
1370
- return this.nodeType === 1;
1371
- }).each($.proxy(function(index, item) {
1372
- item = this.prepare(item);
1373
- this.$stage.append(item);
1374
- this._items.push(item);
1375
- this._mergers.push(item.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1);
1376
- }, this));
1377
-
1378
- this.reset($.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);
1379
-
1380
- this.invalidate('items');
1381
- };
1382
-
1383
- /**
1384
- * Adds an item.
1385
- * @todo Use `item` instead of `content` for the event arguments.
1386
- * @public
1387
- * @param {HTMLElement|jQuery|String} content - The item content to add.
1388
- * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.
1389
- */
1390
- Owl.prototype.add = function(content, position) {
1391
- position = position === undefined ? this._items.length : this.normalize(position, true);
1392
-
1393
- this.trigger('add', { content: content, position: position });
1394
-
1395
- if (this._items.length === 0 || position === this._items.length) {
1396
- this.$stage.append(content);
1397
- this._items.push(content);
1398
- this._mergers.push(content.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1);
1399
- } else {
1400
- this._items[position].before(content);
1401
- this._items.splice(position, 0, content);
1402
- this._mergers.splice(position, 0, content.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1);
1403
- }
1404
-
1405
- this.invalidate('items');
1406
-
1407
- this.trigger('added', { content: content, position: position });
1408
- };
1409
-
1410
- /**
1411
- * Removes an item by its position.
1412
- * @todo Use `item` instead of `content` for the event arguments.
1413
- * @public
1414
- * @param {Number} position - The relative position of the item to remove.
1415
- */
1416
- Owl.prototype.remove = function(position) {
1417
- position = this.normalize(position, true);
1418
-
1419
- if (position === undefined) {
1420
- return;
1421
- }
1422
-
1423
- this.trigger('remove', { content: this._items[position], position: position });
1424
-
1425
- this._items[position].remove();
1426
- this._items.splice(position, 1);
1427
- this._mergers.splice(position, 1);
1428
-
1429
- this.invalidate('items');
1430
-
1431
- this.trigger('removed', { content: null, position: position });
1432
- };
1433
-
1434
- /**
1435
- * Adds triggerable events.
1436
- * @protected
1437
- */
1438
- Owl.prototype.addTriggerableEvents = function() {
1439
- var handler = $.proxy(function(callback, event) {
1440
- return $.proxy(function(e) {
1441
- if (e.relatedTarget !== this) {
1442
- this.suppress([ event ]);
1443
- callback.apply(this, [].slice.call(arguments, 1));
1444
- this.release([ event ]);
1445
- }
1446
- }, this);
1447
- }, this);
1448
-
1449
- $.each({
1450
- 'next': this.next,
1451
- 'prev': this.prev,
1452
- 'to': this.to,
1453
- 'destroy': this.destroy,
1454
- 'refresh': this.refresh,
1455
- 'replace': this.replace,
1456
- 'add': this.add,
1457
- 'remove': this.remove
1458
- }, $.proxy(function(event, callback) {
1459
- this.$element.on(event + '.owl.carousel', handler(callback, event + '.owl.carousel'));
1460
- }, this));
1461
-
1462
- };
1463
-
1464
- /**
1465
- * Watches the visibility of the carousel element.
1466
- * @protected
1467
- */
1468
- Owl.prototype.watchVisibility = function() {
1469
-
1470
- // test on zepto
1471
- if (!isElVisible(this.$element.get(0))) {
1472
- this.$element.addClass('owl-hidden');
1473
- window.clearInterval(this.e._checkVisibile);
1474
- this.e._checkVisibile = window.setInterval($.proxy(checkVisible, this), 500);
1475
- }
1476
-
1477
- function isElVisible(el) {
1478
- return el.offsetWidth > 0 && el.offsetHeight > 0;
1479
- }
1480
-
1481
- function checkVisible() {
1482
- if (isElVisible(this.$element.get(0))) {
1483
- this.$element.removeClass('owl-hidden');
1484
- this.refresh();
1485
- window.clearInterval(this.e._checkVisibile);
1486
- }
1487
- }
1488
- };
1489
-
1490
- /**
1491
- * Preloads images with auto width.
1492
- * @protected
1493
- * @todo Still to test
1494
- */
1495
- Owl.prototype.preloadAutoWidthImages = function(imgs) {
1496
- var loaded, that, $el, img;
1497
-
1498
- loaded = 0;
1499
- that = this;
1500
- imgs.each(function(i, el) {
1501
- $el = $(el);
1502
- img = new Image();
1503
-
1504
- img.onload = function() {
1505
- loaded++;
1506
- $el.attr('src', img.src);
1507
- $el.css('opacity', 1);
1508
- if (loaded >= imgs.length) {
1509
- that.state.imagesLoaded = true;
1510
- that.initialize();
1511
- }
1512
- };
1513
-
1514
- img.src = $el.attr('src') || $el.attr('data-src') || $el.attr('data-src-retina');
1515
- });
1516
- };
1517
-
1518
- /**
1519
- * Destroys the carousel.
1520
- * @public
1521
- */
1522
- Owl.prototype.destroy = function() {
1523
-
1524
- if (this.$element.hasClass(this.settings.themeClass)) {
1525
- this.$element.removeClass(this.settings.themeClass);
1526
- }
1527
-
1528
- if (this.settings.responsive !== false) {
1529
- $(window).off('resize.owl.carousel');
1530
- }
1531
-
1532
- if (this.transitionEndVendor) {
1533
- this.off(this.$stage.get(0), this.transitionEndVendor, this.e._transitionEnd);
1534
- }
1535
-
1536
- for ( var i in this._plugins) {
1537
- this._plugins[i].destroy();
1538
- }
1539
-
1540
- if (this.settings.mouseDrag || this.settings.touchDrag) {
1541
- this.$stage.off('mousedown touchstart touchcancel');
1542
- $(document).off('.owl.dragEvents');
1543
- this.$stage.get(0).onselectstart = function() {};
1544
- this.$stage.off('dragstart', function() { return false });
1545
- }
1546
-
1547
- // remove event handlers in the ".owl.carousel" namespace
1548
- this.$element.off('.owl');
1549
-
1550
- this.$stage.children('.cloned').remove();
1551
- this.e = null;
1552
- this.$element.removeData('owlCarousel');
1553
-
1554
- this.$stage.children().contents().unwrap();
1555
- this.$stage.children().unwrap();
1556
- this.$stage.unwrap();
1557
- };
1558
-
1559
- /**
1560
- * Operators to calculate right-to-left and left-to-right.
1561
- * @protected
1562
- * @param {Number} [a] - The left side operand.
1563
- * @param {String} [o] - The operator.
1564
- * @param {Number} [b] - The right side operand.
1565
- */
1566
- Owl.prototype.op = function(a, o, b) {
1567
- var rtl = this.settings.rtl;
1568
- switch (o) {
1569
- case '<':
1570
- return rtl ? a > b : a < b;
1571
- case '>':
1572
- return rtl ? a < b : a > b;
1573
- case '>=':
1574
- return rtl ? a <= b : a >= b;
1575
- case '<=':
1576
- return rtl ? a >= b : a <= b;
1577
- default:
1578
- break;
1579
- }
1580
- };
1581
-
1582
- /**
1583
- * Attaches to an internal event.
1584
- * @protected
1585
- * @param {HTMLElement} element - The event source.
1586
- * @param {String} event - The event name.
1587
- * @param {Function} listener - The event handler to attach.
1588
- * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.
1589
- */
1590
- Owl.prototype.on = function(element, event, listener, capture) {
1591
- if (element.addEventListener) {
1592
- element.addEventListener(event, listener, capture);
1593
- } else if (element.attachEvent) {
1594
- element.attachEvent('on' + event, listener);
1595
- }
1596
- };
1597
-
1598
- /**
1599
- * Detaches from an internal event.
1600
- * @protected
1601
- * @param {HTMLElement} element - The event source.
1602
- * @param {String} event - The event name.
1603
- * @param {Function} listener - The attached event handler to detach.
1604
- * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.
1605
- */
1606
- Owl.prototype.off = function(element, event, listener, capture) {
1607
- if (element.removeEventListener) {
1608
- element.removeEventListener(event, listener, capture);
1609
- } else if (element.detachEvent) {
1610
- element.detachEvent('on' + event, listener);
1611
- }
1612
- };
1613
-
1614
- /**
1615
- * Triggers an public event.
1616
- * @protected
1617
- * @param {String} name - The event name.
1618
- * @param {*} [data=null] - The event data.
1619
- * @param {String} [namespace=.owl.carousel] - The event namespace.
1620
- * @returns {Event} - The event arguments.
1621
- */
1622
- Owl.prototype.trigger = function(name, data, namespace) {
1623
- var status = {
1624
- item: { count: this._items.length, index: this.current() }
1625
- }, handler = $.camelCase(
1626
- $.grep([ 'on', name, namespace ], function(v) { return v })
1627
- .join('-').toLowerCase()
1628
- ), event = $.Event(
1629
- [ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),
1630
- $.extend({ relatedTarget: this }, status, data)
1631
- );
1632
-
1633
- if (!this._supress[name]) {
1634
- $.each(this._plugins, function(name, plugin) {
1635
- if (plugin.onTrigger) {
1636
- plugin.onTrigger(event);
1637
- }
1638
- });
1639
-
1640
- this.$element.trigger(event);
1641
-
1642
- if (this.settings && typeof this.settings[handler] === 'function') {
1643
- this.settings[handler].apply(this, event);
1644
- }
1645
- }
1646
-
1647
- return event;
1648
- };
1649
-
1650
- /**
1651
- * Suppresses events.
1652
- * @protected
1653
- * @param {Array.<String>} events - The events to suppress.
1654
- */
1655
- Owl.prototype.suppress = function(events) {
1656
- $.each(events, $.proxy(function(index, event) {
1657
- this._supress[event] = true;
1658
- }, this));
1659
- }
1660
-
1661
- /**
1662
- * Releases suppressed events.
1663
- * @protected
1664
- * @param {Array.<String>} events - The events to release.
1665
- */
1666
- Owl.prototype.release = function(events) {
1667
- $.each(events, $.proxy(function(index, event) {
1668
- delete this._supress[event];
1669
- }, this));
1670
- }
1671
-
1672
- /**
1673
- * Checks the availability of some browser features.
1674
- * @protected
1675
- */
1676
- Owl.prototype.browserSupport = function() {
1677
- this.support3d = isPerspective();
1678
-
1679
- if (this.support3d) {
1680
- this.transformVendor = isTransform();
1681
-
1682
- // take transitionend event name by detecting transition
1683
- var endVendors = [ 'transitionend', 'webkitTransitionEnd', 'transitionend', 'oTransitionEnd' ];
1684
- this.transitionEndVendor = endVendors[isTransition()];
1685
-
1686
- // take vendor name from transform name
1687
- this.vendorName = this.transformVendor.replace(/Transform/i, '');
1688
- this.vendorName = this.vendorName !== '' ? '-' + this.vendorName.toLowerCase() + '-' : '';
1689
- }
1690
-
1691
- this.state.orientation = window.orientation;
1692
- };
1693
-
1694
- /**
1695
- * Get touch/drag coordinats.
1696
- * @private
1697
- * @param {event} - mousedown/touchstart event
1698
- * @returns {object} - Contains X and Y of current mouse/touch position
1699
- */
1700
-
1701
- function getTouches(event) {
1702
- if (event.touches !== undefined) {
1703
- return {
1704
- x: event.touches[0].pageX,
1705
- y: event.touches[0].pageY
1706
- };
1707
- }
1708
-
1709
- if (event.touches === undefined) {
1710
- if (event.pageX !== undefined) {
1711
- return {
1712
- x: event.pageX,
1713
- y: event.pageY
1714
- };
1715
- }
1716
-
1717
- if (event.pageX === undefined) {
1718
- return {
1719
- x: event.clientX,
1720
- y: event.clientY
1721
- };
1722
- }
1723
- }
1724
- }
1725
-
1726
- /**
1727
- * Checks for CSS support.
1728
- * @private
1729
- * @param {Array} array - The CSS properties to check for.
1730
- * @returns {Array} - Contains the supported CSS property name and its index or `false`.
1731
- */
1732
- function isStyleSupported(array) {
1733
- var p, s, fake = document.createElement('div'), list = array;
1734
- for (p in list) {
1735
- s = list[p];
1736
- if (typeof fake.style[s] !== 'undefined') {
1737
- fake = null;
1738
- return [ s, p ];
1739
- }
1740
- }
1741
- return [ false ];
1742
- }
1743
-
1744
- /**
1745
- * Checks for CSS transition support.
1746
- * @private
1747
- * @todo Realy bad design
1748
- * @returns {Number}
1749
- */
1750
- function isTransition() {
1751
- return isStyleSupported([ 'transition', 'WebkitTransition', 'MozTransition', 'OTransition' ])[1];
1752
- }
1753
-
1754
- /**
1755
- * Checks for CSS transform support.
1756
- * @private
1757
- * @returns {String} The supported property name or false.
1758
- */
1759
- function isTransform() {
1760
- return isStyleSupported([ 'transform', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform' ])[0];
1761
- }
1762
-
1763
- /**
1764
- * Checks for CSS perspective support.
1765
- * @private
1766
- * @returns {String} The supported property name or false.
1767
- */
1768
- function isPerspective() {
1769
- return isStyleSupported([ 'perspective', 'webkitPerspective', 'MozPerspective', 'OPerspective', 'MsPerspective' ])[0];
1770
- }
1771
-
1772
- /**
1773
- * Checks wether touch is supported or not.
1774
- * @private
1775
- * @returns {Boolean}
1776
- */
1777
- function isTouchSupport() {
1778
- return 'ontouchstart' in window || !!(navigator.msMaxTouchPoints);
1779
- }
1780
-
1781
- /**
1782
- * Checks wether touch is supported or not for IE.
1783
- * @private
1784
- * @returns {Boolean}
1785
- */
1786
- function isTouchSupportIE() {
1787
- return window.navigator.msPointerEnabled;
1788
- }
1789
-
1790
- /**
1791
- * The jQuery Plugin for the Owl Carousel
1792
- * @public
1793
- */
1794
- $.fn.owlCarousel = function(options) {
1795
- return this.each(function() {
1796
- if (!$(this).data('owlCarousel')) {
1797
- $(this).data('owlCarousel', new Owl(this, options));
1798
- }
1799
- });
1800
- };
1801
-
1802
- /**
1803
- * The constructor for the jQuery Plugin
1804
- * @public
1805
- */
1806
- $.fn.owlCarousel.Constructor = Owl;
1807
-
1808
- })(window.Zepto || window.jQuery, window, document);
1809
-
1810
- /**
1811
- * Lazy Plugin
1812
- * @version 2.0.0
1813
- * @author Bartosz Wojciechowski
1814
- * @license The MIT License (MIT)
1815
- */
1816
- ;(function($, window, document, undefined) {
1817
-
1818
- /**
1819
- * Creates the lazy plugin.
1820
- * @class The Lazy Plugin
1821
- * @param {Owl} carousel - The Owl Carousel
1822
- */
1823
- var Lazy = function(carousel) {
1824
-
1825
- /**
1826
- * Reference to the core.
1827
- * @protected
1828
- * @type {Owl}
1829
- */
1830
- this._core = carousel;
1831
-
1832
- /**
1833
- * Already loaded items.
1834
- * @protected
1835
- * @type {Array.<jQuery>}
1836
- */
1837
- this._loaded = [];
1838
-
1839
- /**
1840
- * Event handlers.
1841
- * @protected
1842
- * @type {Object}
1843
- */
1844
- this._handlers = {
1845
- 'initialized.owl.carousel change.owl.carousel': $.proxy(function(e) {
1846
- if (!e.namespace) {
1847
- return;
1848
- }
1849
-
1850
- if (!this._core.settings || !this._core.settings.lazyLoad) {
1851
- return;
1852
- }
1853
-
1854
- if ((e.property && e.property.name == 'position') || e.type == 'initialized') {
1855
- var settings = this._core.settings,
1856
- n = (settings.center && Math.ceil(settings.items / 2) || settings.items),
1857
- i = ((settings.center && n * -1) || 0),
1858
- position = ((e.property && e.property.value) || this._core.current()) + i,
1859
- clones = this._core.clones().length,
1860
- load = $.proxy(function(i, v) { this.load(v) }, this);
1861
-
1862
- while (i++ < n) {
1863
- this.load(clones / 2 + this._core.relative(position));
1864
- clones && $.each(this._core.clones(this._core.relative(position++)), load);
1865
- }
1866
- }
1867
- }, this)
1868
- };
1869
-
1870
- // set the default options
1871
- this._core.options = $.extend({}, Lazy.Defaults, this._core.options);
1872
-
1873
- // register event handler
1874
- this._core.$element.on(this._handlers);
1875
- }
1876
-
1877
- /**
1878
- * Default options.
1879
- * @public
1880
- */
1881
- Lazy.Defaults = {
1882
- lazyLoad: false
1883
- }
1884
-
1885
- /**
1886
- * Loads all resources of an item at the specified position.
1887
- * @param {Number} position - The absolute position of the item.
1888
- * @protected
1889
- */
1890
- Lazy.prototype.load = function(position) {
1891
- var $item = this._core.$stage.children().eq(position),
1892
- $elements = $item && $item.find('.owl-lazy');
1893
-
1894
- if (!$elements || $.inArray($item.get(0), this._loaded) > -1) {
1895
- return;
1896
- }
1897
-
1898
- $elements.each($.proxy(function(index, element) {
1899
- var $element = $(element), image,
1900
- url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src');
1901
-
1902
- this._core.trigger('load', { element: $element, url: url }, 'lazy');
1903
-
1904
- if ($element.is('img')) {
1905
- $element.one('load.owl.lazy', $.proxy(function() {
1906
- $element.css('opacity', 1);
1907
- this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
1908
- }, this)).attr('src', url);
1909
- } else {
1910
- image = new Image();
1911
- image.onload = $.proxy(function() {
1912
- $element.css({
1913
- 'background-image': 'url(' + url + ')',
1914
- 'opacity': '1'
1915
- });
1916
- this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
1917
- }, this);
1918
- image.src = url;
1919
- }
1920
- }, this));
1921
-
1922
- this._loaded.push($item.get(0));
1923
- }
1924
-
1925
- /**
1926
- * Destroys the plugin.
1927
- * @public
1928
- */
1929
- Lazy.prototype.destroy = function() {
1930
- var handler, property;
1931
-
1932
- for (handler in this.handlers) {
1933
- this._core.$element.off(handler, this.handlers[handler]);
1934
- }
1935
- for (property in Object.getOwnPropertyNames(this)) {
1936
- typeof this[property] != 'function' && (this[property] = null);
1937
- }
1938
- }
1939
-
1940
- $.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;
1941
-
1942
- })(window.Zepto || window.jQuery, window, document);
1943
-
1944
- /**
1945
- * AutoHeight Plugin
1946
- * @version 2.0.0
1947
- * @author Bartosz Wojciechowski
1948
- * @license The MIT License (MIT)
1949
- */
1950
- ;(function($, window, document, undefined) {
1951
-
1952
- /**
1953
- * Creates the auto height plugin.
1954
- * @class The Auto Height Plugin
1955
- * @param {Owl} carousel - The Owl Carousel
1956
- */
1957
- var AutoHeight = function(carousel) {
1958
- /**
1959
- * Reference to the core.
1960
- * @protected
1961
- * @type {Owl}
1962
- */
1963
- this._core = carousel;
1964
-
1965
- /**
1966
- * All event handlers.
1967
- * @protected
1968
- * @type {Object}
1969
- */
1970
- this._handlers = {
1971
- 'initialized.owl.carousel': $.proxy(function() {
1972
- if (this._core.settings.autoHeight) {
1973
- this.update();
1974
- }
1975
- }, this),
1976
- 'changed.owl.carousel': $.proxy(function(e) {
1977
- if (this._core.settings.autoHeight && e.property.name == 'position'){
1978
- this.update();
1979
- }
1980
- }, this),
1981
- 'loaded.owl.lazy': $.proxy(function(e) {
1982
- if (this._core.settings.autoHeight && e.element.closest('.' + this._core.settings.itemClass)
1983
- === this._core.$stage.children().eq(this._core.current())) {
1984
- this.update();
1985
- }
1986
- }, this)
1987
- };
1988
-
1989
- // set default options
1990
- this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);
1991
-
1992
- // register event handlers
1993
- this._core.$element.on(this._handlers);
1994
- };
1995
-
1996
- /**
1997
- * Default options.
1998
- * @public
1999
- */
2000
- AutoHeight.Defaults = {
2001
- autoHeight: false,
2002
- autoHeightClass: 'owl-height'
2003
- };
2004
-
2005
- /**
2006
- * Updates the view.
2007
- */
2008
- AutoHeight.prototype.update = function() {
2009
- this._core.$stage.parent()
2010
- .height(this._core.$stage.children().eq(this._core.current()).height())
2011
- .addClass(this._core.settings.autoHeightClass);
2012
- };
2013
-
2014
- AutoHeight.prototype.destroy = function() {
2015
- var handler, property;
2016
-
2017
- for (handler in this._handlers) {
2018
- this._core.$element.off(handler, this._handlers[handler]);
2019
- }
2020
- for (property in Object.getOwnPropertyNames(this)) {
2021
- typeof this[property] != 'function' && (this[property] = null);
2022
- }
2023
- };
2024
-
2025
- $.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;
2026
-
2027
- })(window.Zepto || window.jQuery, window, document);
2028
-
2029
- /**
2030
- * Video Plugin
2031
- * @version 2.0.0
2032
- * @author Bartosz Wojciechowski
2033
- * @license The MIT License (MIT)
2034
- */
2035
- ;(function($, window, document, undefined) {
2036
-
2037
- /**
2038
- * Creates the video plugin.
2039
- * @class The Video Plugin
2040
- * @param {Owl} carousel - The Owl Carousel
2041
- */
2042
- var Video = function(carousel) {
2043
- /**
2044
- * Reference to the core.
2045
- * @protected
2046
- * @type {Owl}
2047
- */
2048
- this._core = carousel;
2049
-
2050
- /**
2051
- * Cache all video URLs.
2052
- * @protected
2053
- * @type {Object}
2054
- */
2055
- this._videos = {};
2056
-
2057
- /**
2058
- * Current playing item.
2059
- * @protected
2060
- * @type {jQuery}
2061
- */
2062
- this._playing = null;
2063
-
2064
- /**
2065
- * Whether this is in fullscreen or not.
2066
- * @protected
2067
- * @type {Boolean}
2068
- */
2069
- this._fullscreen = false;
2070
-
2071
- /**
2072
- * All event handlers.
2073
- * @protected
2074
- * @type {Object}
2075
- */
2076
- this._handlers = {
2077
- 'resize.owl.carousel': $.proxy(function(e) {
2078
- if (this._core.settings.video && !this.isInFullScreen()) {
2079
- e.preventDefault();
2080
- }
2081
- }, this),
2082
- 'refresh.owl.carousel changed.owl.carousel': $.proxy(function(e) {
2083
- if (this._playing) {
2084
- this.stop();
2085
- }
2086
- }, this),
2087
- 'prepared.owl.carousel': $.proxy(function(e) {
2088
- var $element = $(e.content).find('.owl-video');
2089
- if ($element.length) {
2090
- $element.css('display', 'none');
2091
- this.fetch($element, $(e.content));
2092
- }
2093
- }, this)
2094
- };
2095
-
2096
- // set default options
2097
- this._core.options = $.extend({}, Video.Defaults, this._core.options);
2098
-
2099
- // register event handlers
2100
- this._core.$element.on(this._handlers);
2101
-
2102
- this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {
2103
- this.play(e);
2104
- }, this));
2105
- };
2106
-
2107
- /**
2108
- * Default options.
2109
- * @public
2110
- */
2111
- Video.Defaults = {
2112
- video: false,
2113
- videoHeight: false,
2114
- videoWidth: false
2115
- };
2116
-
2117
- /**
2118
- * Gets the video ID and the type (YouTube/Vimeo only).
2119
- * @protected
2120
- * @param {jQuery} target - The target containing the video data.
2121
- * @param {jQuery} item - The item containing the video.
2122
- */
2123
- Video.prototype.fetch = function(target, item) {
2124
-
2125
- var type = target.attr('data-vimeo-id') ? 'vimeo' : 'youtube',
2126
- id = target.attr('data-vimeo-id') || target.attr('data-youtube-id'),
2127
- width = target.attr('data-width') || this._core.settings.videoWidth,
2128
- height = target.attr('data-height') || this._core.settings.videoHeight,
2129
- url = target.attr('href');
2130
-
2131
- console.log(url);
2132
-
2133
- if (url) {
2134
-
2135
- id = url.match(/(http:|https:|)\/\/(player.|www.|scontent.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|cdninstagram\.com)\/(video\/|embed\/|watch\?v=|v\/|[a-zA-Z0-9\-_\-.\--]+)?([A-Za-z0-9._%-]*)(\&\S)?/);
2136
-
2137
- if (id[3].indexOf('youtu') > -1) {
2138
- type = 'youtube';
2139
- } else if (id[3].indexOf('vimeo') > -1) {
2140
- type = 'vimeo';
2141
- } else if (id[3].indexOf('cdninstagram') > -1){
2142
- //console.log('instagram video');
2143
- } else {
2144
- throw new Error('Video URL not supported.');
2145
- }
2146
- id = id[6];
2147
- } else {
2148
- throw new Error('Missing video URL.');
2149
- }
2150
-
2151
- this._videos[url] = {
2152
- type: type,
2153
- id: id,
2154
- width: width,
2155
- height: height
2156
- };
2157
-
2158
- item.attr('data-video', url);
2159
-
2160
- this.thumbnail(target, this._videos[url]);
2161
- };
2162
-
2163
- /**
2164
- * Creates video thumbnail.
2165
- * @protected
2166
- * @param {jQuery} target - The target containing the video data.
2167
- * @param {Object} info - The video info object.
2168
- * @see `fetch`
2169
- */
2170
- Video.prototype.thumbnail = function(target, video) {
2171
-
2172
- var tnLink,
2173
- icon,
2174
- path,
2175
- dimensions = video.width && video.height ? 'style="width:' + video.width + 'px;height:' + video.height + 'px;"' : '',
2176
- customTn = target.find('img'),
2177
- srcType = 'src',
2178
- lazyClass = '',
2179
- settings = this._core.settings,
2180
- create = function(path) {
2181
- icon = '<div class="owl-video-play-icon"></div>';
2182
-
2183
- if (settings.lazyLoad) {
2184
- tnLink = '<div class="owl-video-tn ' + lazyClass + '" ' + srcType + '="' + path + '"></div>';
2185
- } else {
2186
- tnLink = '<div class="owl-video-tn" style="opacity:1;background-image:url(' + path + ')"></div>';
2187
- }
2188
- target.after(tnLink);
2189
- target.after(icon);
2190
- };
2191
-
2192
- // wrap video content into owl-video-wrapper div
2193
- target.wrap('<div class="owl-video-wrapper"' + dimensions + '></div>');
2194
-
2195
- if (this._core.settings.lazyLoad) {
2196
- srcType = 'data-src';
2197
- lazyClass = 'owl-lazy';
2198
- }
2199
-
2200
- // custom thumbnail
2201
- if (customTn.length) {
2202
- create(customTn.attr(srcType));
2203
- customTn.remove();
2204
- return false;
2205
- }
2206
-
2207
- if (video.type === 'youtube') {
2208
- path = "http://img.youtube.com/vi/" + video.id + "/hqdefault.jpg";
2209
- create(path);
2210
- } else if (video.type === 'vimeo') {
2211
- $.ajax({
2212
- type: 'GET',
2213
- url: 'http://vimeo.com/api/v2/video/' + video.id + '.json',
2214
- jsonp: 'callback',
2215
- dataType: 'jsonp',
2216
- success: function(data) {
2217
- path = data[0].thumbnail_large;
2218
- create(path);
2219
- }
2220
- });
2221
- }
2222
- };
2223
-
2224
- /**
2225
- * Stops the current video.
2226
- * @public
2227
- */
2228
- Video.prototype.stop = function() {
2229
- this._core.trigger('stop', null, 'video');
2230
- this._playing.find('.owl-video-frame').remove();
2231
- this._playing.removeClass('owl-video-playing');
2232
- this._playing = null;
2233
- };
2234
-
2235
- /**
2236
- * Starts the current video.
2237
- * @public
2238
- * @param {Event} ev - The event arguments.
2239
- */
2240
- Video.prototype.play = function(ev) {
2241
- this._core.trigger('play', null, 'video');
2242
-
2243
- if (this._playing) {
2244
- this.stop();
2245
- }
2246
-
2247
- var target = $(ev.target || ev.srcElement),
2248
- item = target.closest('.' + this._core.settings.itemClass),
2249
- video = this._videos[item.attr('data-video')],
2250
- width = video.width || '100%',
2251
- height = video.height || this._core.$stage.height(),
2252
- html, wrap;
2253
-
2254
- if (video.type === 'youtube') {
2255
- html = '<iframe width="' + width + '" height="' + height + '" src="http://www.youtube.com/embed/'
2256
- + video.id + '?autoplay=1&v=' + video.id + '" frameborder="0" allowfullscreen></iframe>';
2257
- } else if (video.type === 'vimeo') {
2258
- html = '<iframe src="http://player.vimeo.com/video/' + video.id + '?autoplay=1" width="' + width
2259
- + '" height="' + height
2260
- + '" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';
2261
- }
2262
-
2263
- item.addClass('owl-video-playing');
2264
- this._playing = item;
2265
-
2266
- wrap = $('<div style="height:' + height + 'px; width:' + width + 'px" class="owl-video-frame">'
2267
- + html + '</div>');
2268
- target.after(wrap);
2269
- };
2270
-
2271
- /**
2272
- * Checks whether an video is currently in full screen mode or not.
2273
- * @todo Bad style because looks like a readonly method but changes members.
2274
- * @protected
2275
- * @returns {Boolean}
2276
- */
2277
- Video.prototype.isInFullScreen = function() {
2278
-
2279
- // if Vimeo Fullscreen mode
2280
- var element = document.fullscreenElement || document.mozFullScreenElement
2281
- || document.webkitFullscreenElement;
2282
-
2283
- if (element && $(element).parent().hasClass('owl-video-frame')) {
2284
- this._core.speed(0);
2285
- this._fullscreen = true;
2286
- }
2287
-
2288
- if (element && this._fullscreen && this._playing) {
2289
- return false;
2290
- }
2291
-
2292
- // comming back from fullscreen
2293
- if (this._fullscreen) {
2294
- this._fullscreen = false;
2295
- return false;
2296
- }
2297
-
2298
- // check full screen mode and window orientation
2299
- if (this._playing) {
2300
- if (this._core.state.orientation !== window.orientation) {
2301
- this._core.state.orientation = window.orientation;
2302
- return false;
2303
- }
2304
- }
2305
-
2306
- return true;
2307
- };
2308
-
2309
- /**
2310
- * Destroys the plugin.
2311
- */
2312
- Video.prototype.destroy = function() {
2313
- var handler, property;
2314
-
2315
- this._core.$element.off('click.owl.video');
2316
-
2317
- for (handler in this._handlers) {
2318
- this._core.$element.off(handler, this._handlers[handler]);
2319
- }
2320
- for (property in Object.getOwnPropertyNames(this)) {
2321
- typeof this[property] != 'function' && (this[property] = null);
2322
- }
2323
- };
2324
-
2325
- $.fn.owlCarousel.Constructor.Plugins.Video = Video;
2326
-
2327
- })(window.Zepto || window.jQuery, window, document);
2328
-
2329
- /**
2330
- * Animate Plugin
2331
- * @version 2.0.0
2332
- * @author Bartosz Wojciechowski
2333
- * @license The MIT License (MIT)
2334
- */
2335
- ;(function($, window, document, undefined) {
2336
-
2337
- /**
2338
- * Creates the animate plugin.
2339
- * @class The Navigation Plugin
2340
- * @param {Owl} scope - The Owl Carousel
2341
- */
2342
- var Animate = function(scope) {
2343
- this.core = scope;
2344
- this.core.options = $.extend({}, Animate.Defaults, this.core.options);
2345
- this.swapping = true;
2346
- this.previous = undefined;
2347
- this.next = undefined;
2348
-
2349
- this.handlers = {
2350
- 'change.owl.carousel': $.proxy(function(e) {
2351
- if (e.property.name == 'position') {
2352
- this.previous = this.core.current();
2353
- this.next = e.property.value;
2354
- }
2355
- }, this),
2356
- 'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {
2357
- this.swapping = e.type == 'translated';
2358
- }, this),
2359
- 'translate.owl.carousel': $.proxy(function(e) {
2360
- if (this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {
2361
- this.swap();
2362
- }
2363
- }, this)
2364
- };
2365
-
2366
- this.core.$element.on(this.handlers);
2367
- };
2368
-
2369
- /**
2370
- * Default options.
2371
- * @public
2372
- */
2373
- Animate.Defaults = {
2374
- animateOut: false,
2375
- animateIn: false
2376
- };
2377
-
2378
- /**
2379
- * Toggles the animation classes whenever an translations starts.
2380
- * @protected
2381
- * @returns {Boolean|undefined}
2382
- */
2383
- Animate.prototype.swap = function() {
2384
-
2385
- if (this.core.settings.items !== 1 || !this.core.support3d) {
2386
- return;
2387
- }
2388
-
2389
- this.core.speed(0);
2390
-
2391
- var left,
2392
- clear = $.proxy(this.clear, this),
2393
- previous = this.core.$stage.children().eq(this.previous),
2394
- next = this.core.$stage.children().eq(this.next),
2395
- incoming = this.core.settings.animateIn,
2396
- outgoing = this.core.settings.animateOut;
2397
-
2398
- if (this.core.current() === this.previous) {
2399
- return;
2400
- }
2401
-
2402
- if (outgoing) {
2403
- left = this.core.coordinates(this.previous) - this.core.coordinates(this.next);
2404
- previous.css( { 'left': left + 'px' } )
2405
- .addClass('animated owl-animated-out')
2406
- .addClass(outgoing)
2407
- .one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', clear);
2408
- }
2409
-
2410
- if (incoming) {
2411
- next.addClass('animated owl-animated-in')
2412
- .addClass(incoming)
2413
- .one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', clear);
2414
- }
2415
- };
2416
-
2417
- Animate.prototype.clear = function(e) {
2418
- $(e.target).css( { 'left': '' } )
2419
- .removeClass('animated owl-animated-out owl-animated-in')
2420
- .removeClass(this.core.settings.animateIn)
2421
- .removeClass(this.core.settings.animateOut);
2422
- this.core.transitionEnd();
2423
- }
2424
-
2425
- /**
2426
- * Destroys the plugin.
2427
- * @public
2428
- */
2429
- Animate.prototype.destroy = function() {
2430
- var handler, property;
2431
-
2432
- for (handler in this.handlers) {
2433
- this.core.$element.off(handler, this.handlers[handler]);
2434
- }
2435
- for (property in Object.getOwnPropertyNames(this)) {
2436
- typeof this[property] != 'function' && (this[property] = null);
2437
- }
2438
- };
2439
-
2440
- $.fn.owlCarousel.Constructor.Plugins.Animate = Animate;
2441
-
2442
- })(window.Zepto || window.jQuery, window, document);
2443
-
2444
- /**
2445
- * Autoplay Plugin
2446
- * @version 2.0.0
2447
- * @author Bartosz Wojciechowski
2448
- * @license The MIT License (MIT)
2449
- */
2450
- ;(function($, window, document, undefined) {
2451
-
2452
- /**
2453
- * Creates the autoplay plugin.
2454
- * @class The Autoplay Plugin
2455
- * @param {Owl} scope - The Owl Carousel
2456
- */
2457
- var Autoplay = function(scope) {
2458
- this.core = scope;
2459
- this.core.options = $.extend({}, Autoplay.Defaults, this.core.options);
2460
-
2461
- this.handlers = {
2462
- 'translated.owl.carousel refreshed.owl.carousel': $.proxy(function() {
2463
- this.autoplay();
2464
- }, this),
2465
- 'play.owl.autoplay': $.proxy(function(e, t, s) {
2466
- this.play(t, s);
2467
- }, this),
2468
- 'stop.owl.autoplay': $.proxy(function() {
2469
- this.stop();
2470
- }, this),
2471
- 'mouseover.owl.autoplay': $.proxy(function() {
2472
- if (this.core.settings.autoplayHoverPause) {
2473
- this.pause();
2474
- }
2475
- }, this),
2476
- 'mouseleave.owl.autoplay': $.proxy(function() {
2477
- if (this.core.settings.autoplayHoverPause) {
2478
- this.autoplay();
2479
- }
2480
- }, this)
2481
- };
2482
-
2483
- this.core.$element.on(this.handlers);
2484
- };
2485
-
2486
- /**
2487
- * Default options.
2488
- * @public
2489
- */
2490
- Autoplay.Defaults = {
2491
- autoplay: false,
2492
- autoplayTimeout: 5000,
2493
- autoplayHoverPause: false,
2494
- autoplaySpeed: false
2495
- };
2496
-
2497
- /**
2498
- * @protected
2499
- * @todo Must be documented.
2500
- */
2501
- Autoplay.prototype.autoplay = function() {
2502
- if (this.core.settings.autoplay && !this.core.state.videoPlay) {
2503
- window.clearInterval(this.interval);
2504
-
2505
- this.interval = window.setInterval($.proxy(function() {
2506
- this.play();
2507
- }, this), this.core.settings.autoplayTimeout);
2508
- } else {
2509
- window.clearInterval(this.interval);
2510
- }
2511
- };
2512
-
2513
- /**
2514
- * Starts the autoplay.
2515
- * @public
2516
- * @param {Number} [timeout] - ...
2517
- * @param {Number} [speed] - ...
2518
- * @returns {Boolean|undefined} - ...
2519
- * @todo Must be documented.
2520
- */
2521
- Autoplay.prototype.play = function(timeout, speed) {
2522
- // if tab is inactive - doesnt work in <IE10
2523
- if (document.hidden === true) {
2524
- return;
2525
- }
2526
-
2527
- if (this.core.state.isTouch || this.core.state.isScrolling
2528
- || this.core.state.isSwiping || this.core.state.inMotion) {
2529
- return;
2530
- }
2531
-
2532
- if (this.core.settings.autoplay === false) {
2533
- window.clearInterval(this.interval);
2534
- return;
2535
- }
2536
-
2537
- this.core.next(this.core.settings.autoplaySpeed);
2538
- };
2539
-
2540
- /**
2541
- * Stops the autoplay.
2542
- * @public
2543
- */
2544
- Autoplay.prototype.stop = function() {
2545
- window.clearInterval(this.interval);
2546
- };
2547
-
2548
- /**
2549
- * Pauses the autoplay.
2550
- * @public
2551
- */
2552
- Autoplay.prototype.pause = function() {
2553
- window.clearInterval(this.interval);
2554
- };
2555
-
2556
- /**
2557
- * Destroys the plugin.
2558
- */
2559
- Autoplay.prototype.destroy = function() {
2560
- var handler, property;
2561
-
2562
- window.clearInterval(this.interval);
2563
-
2564
- for (handler in this.handlers) {
2565
- this.core.$element.off(handler, this.handlers[handler]);
2566
- }
2567
- for (property in Object.getOwnPropertyNames(this)) {
2568
- typeof this[property] != 'function' && (this[property] = null);
2569
- }
2570
- };
2571
-
2572
- $.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;
2573
-
2574
- })(window.Zepto || window.jQuery, window, document);
2575
-
2576
- /**
2577
- * Navigation Plugin
2578
- * @version 2.0.0
2579
- * @author Artus Kolanowski
2580
- * @license The MIT License (MIT)
2581
- */
2582
- ;(function($, window, document, undefined) {
2583
- 'use strict';
2584
-
2585
- /**
2586
- * Creates the navigation plugin.
2587
- * @class The Navigation Plugin
2588
- * @param {Owl} carousel - The Owl Carousel.
2589
- */
2590
- var Navigation = function(carousel) {
2591
- /**
2592
- * Reference to the core.
2593
- * @protected
2594
- * @type {Owl}
2595
- */
2596
- this._core = carousel;
2597
-
2598
- /**
2599
- * Indicates whether the plugin is initialized or not.
2600
- * @protected
2601
- * @type {Boolean}
2602
- */
2603
- this._initialized = false;
2604
-
2605
- /**
2606
- * The current paging indexes.
2607
- * @protected
2608
- * @type {Array}
2609
- */
2610
- this._pages = [];
2611
-
2612
- /**
2613
- * All DOM elements of the user interface.
2614
- * @protected
2615
- * @type {Object}
2616
- */
2617
- this._controls = {};
2618
-
2619
- /**
2620
- * Markup for an indicator.
2621
- * @protected
2622
- * @type {Array.<String>}
2623
- */
2624
- this._templates = [];
2625
-
2626
- /**
2627
- * The carousel element.
2628
- * @type {jQuery}
2629
- */
2630
- this.$element = this._core.$element;
2631
-
2632
- /**
2633
- * Overridden methods of the carousel.
2634
- * @protected
2635
- * @type {Object}
2636
- */
2637
- this._overrides = {
2638
- next: this._core.next,
2639
- prev: this._core.prev,
2640
- to: this._core.to
2641
- };
2642
-
2643
- /**
2644
- * All event handlers.
2645
- * @protected
2646
- * @type {Object}
2647
- */
2648
- this._handlers = {
2649
- 'prepared.owl.carousel': $.proxy(function(e) {
2650
- if (this._core.settings.dotsData) {
2651
- this._templates.push($(e.content).find('[data-dot]').andSelf('[data-dot]').attr('data-dot'));
2652
- }
2653
- }, this),
2654
- 'add.owl.carousel': $.proxy(function(e) {
2655
- if (this._core.settings.dotsData) {
2656
- this._templates.splice(e.position, 0, $(e.content).find('[data-dot]').andSelf('[data-dot]').attr('data-dot'));
2657
- }
2658
- }, this),
2659
- 'remove.owl.carousel prepared.owl.carousel': $.proxy(function(e) {
2660
- if (this._core.settings.dotsData) {
2661
- this._templates.splice(e.position, 1);
2662
- }
2663
- }, this),
2664
- 'change.owl.carousel': $.proxy(function(e) {
2665
- if (e.property.name == 'position') {
2666
- if (!this._core.state.revert && !this._core.settings.loop && this._core.settings.navRewind) {
2667
- var current = this._core.current(),
2668
- maximum = this._core.maximum(),
2669
- minimum = this._core.minimum();
2670
- e.data = e.property.value > maximum
2671
- ? current >= maximum ? minimum : maximum
2672
- : e.property.value < minimum ? maximum : e.property.value;
2673
- }
2674
- }
2675
- }, this),
2676
- 'changed.owl.carousel': $.proxy(function(e) {
2677
- if (e.property.name == 'position') {
2678
- this.draw();
2679
- }
2680
- }, this),
2681
- 'refreshed.owl.carousel': $.proxy(function() {
2682
- if (!this._initialized) {
2683
- this.initialize();
2684
- this._initialized = true;
2685
- }
2686
- this._core.trigger('refresh', null, 'navigation');
2687
- this.update();
2688
- this.draw();
2689
- this._core.trigger('refreshed', null, 'navigation');
2690
- }, this)
2691
- };
2692
-
2693
- // set default options
2694
- this._core.options = $.extend({}, Navigation.Defaults, this._core.options);
2695
-
2696
- // register event handlers
2697
- this.$element.on(this._handlers);
2698
- }
2699
-
2700
- /**
2701
- * Default options.
2702
- * @public
2703
- * @todo Rename `slideBy` to `navBy`
2704
- */
2705
- Navigation.Defaults = {
2706
- nav: false,
2707
- navRewind: true,
2708
- navText: [ 'prev', 'next' ],
2709
- navSpeed: false,
2710
- navElement: 'div',
2711
- navContainer: false,
2712
- navContainerClass: 'owl-nav',
2713
- navClass: [ 'owl-prev', 'owl-next' ],
2714
- slideBy: 1,
2715
- dotClass: 'owl-dot',
2716
- dotsClass: 'owl-dots',
2717
- dots: true,
2718
- dotsEach: false,
2719
- dotData: false,
2720
- dotsSpeed: false,
2721
- dotsContainer: false,
2722
- controlsClass: 'owl-controls'
2723
- }
2724
-
2725
- /**
2726
- * Initializes the layout of the plugin and extends the carousel.
2727
- * @protected
2728
- */
2729
- Navigation.prototype.initialize = function() {
2730
- var $container, override,
2731
- options = this._core.settings;
2732
-
2733
- // create the indicator template
2734
- if (!options.dotsData) {
2735
- this._templates = [ $('<div>')
2736
- .addClass(options.dotClass)
2737
- .append($('<span>'))
2738
- .prop('outerHTML') ];
2739
- }
2740
-
2741
- // create controls container if needed
2742
- if (!options.navContainer || !options.dotsContainer) {
2743
- this._controls.$container = $('<div>')
2744
- .addClass(options.controlsClass)
2745
- .appendTo(this.$element);
2746
- }
2747
-
2748
- // create DOM structure for absolute navigation
2749
- this._controls.$indicators = options.dotsContainer ? $(options.dotsContainer)
2750
- : $('<div>').hide().addClass(options.dotsClass).appendTo(this._controls.$container);
2751
-
2752
- this._controls.$indicators.on('click', 'div', $.proxy(function(e) {
2753
- var index = $(e.target).parent().is(this._controls.$indicators)
2754
- ? $(e.target).index() : $(e.target).parent().index();
2755
-
2756
- e.preventDefault();
2757
-
2758
- this.to(index, options.dotsSpeed);
2759
- }, this));
2760
-
2761
- // create DOM structure for relative navigation
2762
- $container = options.navContainer ? $(options.navContainer)
2763
- : $('<div>').addClass(options.navContainerClass).prependTo(this._controls.$container);
2764
-
2765
- this._controls.$next = $('<' + options.navElement + '>');
2766
- this._controls.$previous = this._controls.$next.clone();
2767
-
2768
- this._controls.$previous
2769
- .addClass(options.navClass[0])
2770
- .html(options.navText[0])
2771
- .hide()
2772
- .prependTo($container)
2773
- .on('click', $.proxy(function(e) {
2774
- this.prev(options.navSpeed);
2775
- }, this));
2776
- this._controls.$next
2777
- .addClass(options.navClass[1])
2778
- .html(options.navText[1])
2779
- .hide()
2780
- .appendTo($container)
2781
- .on('click', $.proxy(function(e) {
2782
- this.next(options.navSpeed);
2783
- }, this));
2784
-
2785
- // override public methods of the carousel
2786
- for (override in this._overrides) {
2787
- this._core[override] = $.proxy(this[override], this);
2788
- }
2789
- }
2790
-
2791
- /**
2792
- * Destroys the plugin.
2793
- * @protected
2794
- */
2795
- Navigation.prototype.destroy = function() {
2796
- var handler, control, property, override;
2797
-
2798
- for (handler in this._handlers) {
2799
- this.$element.off(handler, this._handlers[handler]);
2800
- }
2801
- for (control in this._controls) {
2802
- this._controls[control].remove();
2803
- }
2804
- for (override in this.overides) {
2805
- this._core[override] = this._overrides[override];
2806
- }
2807
- for (property in Object.getOwnPropertyNames(this)) {
2808
- typeof this[property] != 'function' && (this[property] = null);
2809
- }
2810
- }
2811
-
2812
- /**
2813
- * Updates the internal state.
2814
- * @protected
2815
- */
2816
- Navigation.prototype.update = function() {
2817
- var i, j, k,
2818
- options = this._core.settings,
2819
- lower = this._core.clones().length / 2,
2820
- upper = lower + this._core.items().length,
2821
- size = options.center || options.autoWidth || options.dotData
2822
- ? 1 : options.dotsEach || options.items;
2823
-
2824
- if (options.slideBy !== 'page') {
2825
- options.slideBy = Math.min(options.slideBy, options.items);
2826
- }
2827
-
2828
- if (options.dots || options.slideBy == 'page') {
2829
- this._pages = [];
2830
-
2831
- for (i = lower, j = 0, k = 0; i < upper; i++) {
2832
- if (j >= size || j === 0) {
2833
- this._pages.push({
2834
- start: i - lower,
2835
- end: i - lower + size - 1
2836
- });
2837
- j = 0, ++k;
2838
- }
2839
- j += this._core.mergers(this._core.relative(i));
2840
- }
2841
- }
2842
- }
2843
-
2844
- /**
2845
- * Draws the user interface.
2846
- * @todo The option `dotData` wont work.
2847
- * @protected
2848
- */
2849
- Navigation.prototype.draw = function() {
2850
- var difference, i, html = '',
2851
- options = this._core.settings,
2852
- $items = this._core.$stage.children(),
2853
- index = this._core.relative(this._core.current());
2854
-
2855
- if (options.nav && !options.loop && !options.navRewind) {
2856
- this._controls.$previous.toggleClass('disabled', index <= 0);
2857
- this._controls.$next.toggleClass('disabled', index >= this._core.maximum());
2858
- }
2859
-
2860
- this._controls.$previous.toggle(options.nav);
2861
- this._controls.$next.toggle(options.nav);
2862
-
2863
- if (options.dots) {
2864
- difference = this._pages.length - this._controls.$indicators.children().length;
2865
-
2866
- if (options.dotData && difference !== 0) {
2867
- for (i = 0; i < this._controls.$indicators.children().length; i++) {
2868
- html += this._templates[this._core.relative(i)];
2869
- }
2870
- this._controls.$indicators.html(html);
2871
- } else if (difference > 0) {
2872
- html = new Array(difference + 1).join(this._templates[0]);
2873
- this._controls.$indicators.append(html);
2874
- } else if (difference < 0) {
2875
- this._controls.$indicators.children().slice(difference).remove();
2876
- }
2877
-
2878
- this._controls.$indicators.find('.active').removeClass('active');
2879
- this._controls.$indicators.children().eq($.inArray(this.current(), this._pages)).addClass('active');
2880
- }
2881
-
2882
- this._controls.$indicators.toggle(options.dots);
2883
- }
2884
-
2885
- /**
2886
- * Extends event data.
2887
- * @protected
2888
- * @param {Event} event - The event object which gets thrown.
2889
- */
2890
- Navigation.prototype.onTrigger = function(event) {
2891
- var settings = this._core.settings;
2892
-
2893
- event.page = {
2894
- index: $.inArray(this.current(), this._pages),
2895
- count: this._pages.length,
2896
- size: settings && (settings.center || settings.autoWidth || settings.dotData
2897
- ? 1 : settings.dotsEach || settings.items)
2898
- };
2899
- }
2900
-
2901
- /**
2902
- * Gets the current page position of the carousel.
2903
- * @protected
2904
- * @returns {Number}
2905
- */
2906
- Navigation.prototype.current = function() {
2907
- var index = this._core.relative(this._core.current());
2908
- return $.grep(this._pages, function(o) {
2909
- return o.start <= index && o.end >= index;
2910
- }).pop();
2911
- }
2912
-
2913
- /**
2914
- * Gets the current succesor/predecessor position.
2915
- * @protected
2916
- * @returns {Number}
2917
- */
2918
- Navigation.prototype.getPosition = function(successor) {
2919
- var position, length,
2920
- options = this._core.settings;
2921
-
2922
- if (options.slideBy == 'page') {
2923
- position = $.inArray(this.current(), this._pages);
2924
- length = this._pages.length;
2925
- successor ? ++position : --position;
2926
- position = this._pages[((position % length) + length) % length].start;
2927
- } else {
2928
- position = this._core.relative(this._core.current());
2929
- length = this._core.items().length;
2930
- successor ? position += options.slideBy : position -= options.slideBy;
2931
- }
2932
- return position;
2933
- }
2934
-
2935
- /**
2936
- * Slides to the next item or page.
2937
- * @public
2938
- * @param {Number} [speed=false] - The time in milliseconds for the transition.
2939
- */
2940
- Navigation.prototype.next = function(speed) {
2941
- $.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);
2942
- }
2943
-
2944
- /**
2945
- * Slides to the previous item or page.
2946
- * @public
2947
- * @param {Number} [speed=false] - The time in milliseconds for the transition.
2948
- */
2949
- Navigation.prototype.prev = function(speed) {
2950
- $.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);
2951
- }
2952
-
2953
- /**
2954
- * Slides to the specified item or page.
2955
- * @public
2956
- * @param {Number} position - The position of the item or page.
2957
- * @param {Number} [speed] - The time in milliseconds for the transition.
2958
- * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.
2959
- */
2960
- Navigation.prototype.to = function(position, speed, standard) {
2961
- var length;
2962
-
2963
- if (!standard) {
2964
- length = this._pages.length;
2965
- $.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);
2966
- } else {
2967
- $.proxy(this._overrides.to, this._core)(position, speed);
2968
- }
2969
- }
2970
-
2971
- $.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;
2972
-
2973
- })(window.Zepto || window.jQuery, window, document);
2974
-
2975
- /**
2976
- * Hash Plugin
2977
- * @version 2.0.0
2978
- * @author Artus Kolanowski
2979
- * @license The MIT License (MIT)
2980
- */
2981
- ;(function($, window, document, undefined) {
2982
- 'use strict';
2983
-
2984
- /**
2985
- * Creates the hash plugin.
2986
- * @class The Hash Plugin
2987
- * @param {Owl} carousel - The Owl Carousel
2988
- */
2989
- var Hash = function(carousel) {
2990
- /**
2991
- * Reference to the core.
2992
- * @protected
2993
- * @type {Owl}
2994
- */
2995
- this._core = carousel;
2996
-
2997
- /**
2998
- * Hash table for the hashes.
2999
- * @protected
3000
- * @type {Object}
3001
- */
3002
- this._hashes = {};
3003
-
3004
- /**
3005
- * The carousel element.
3006
- * @type {jQuery}
3007
- */
3008
- this.$element = this._core.$element;
3009
-
3010
- /**
3011
- * All event handlers.
3012
- * @protected
3013
- * @type {Object}
3014
- */
3015
- this._handlers = {
3016
- 'initialized.owl.carousel': $.proxy(function() {
3017
- if (this._core.settings.startPosition == 'URLHash') {
3018
- $(window).trigger('hashchange.owl.navigation');
3019
- }
3020
- }, this),
3021
- 'prepared.owl.carousel': $.proxy(function(e) {
3022
- var hash = $(e.content).find('[data-hash]').andSelf('[data-hash]').attr('data-hash');
3023
- this._hashes[hash] = e.content;
3024
- }, this)
3025
- };
3026
-
3027
- // set default options
3028
- this._core.options = $.extend({}, Hash.Defaults, this._core.options);
3029
-
3030
- // register the event handlers
3031
- this.$element.on(this._handlers);
3032
-
3033
- // register event listener for hash navigation
3034
- $(window).on('hashchange.owl.navigation', $.proxy(function() {
3035
- var hash = window.location.hash.substring(1),
3036
- items = this._core.$stage.children(),
3037
- position = this._hashes[hash] && items.index(this._hashes[hash]) || 0;
3038
-
3039
- if (!hash) {
3040
- return false;
3041
- }
3042
-
3043
- this._core.to(position, false, true);
3044
- }, this));
3045
- }
3046
-
3047
- /**
3048
- * Default options.
3049
- * @public
3050
- */
3051
- Hash.Defaults = {
3052
- URLhashListener: false
3053
- }
3054
-
3055
- /**
3056
- * Destroys the plugin.
3057
- * @public
3058
- */
3059
- Hash.prototype.destroy = function() {
3060
- var handler, property;
3061
-
3062
- $(window).off('hashchange.owl.navigation');
3063
-
3064
- for (handler in this._handlers) {
3065
- this._core.$element.off(handler, this._handlers[handler]);
3066
- }
3067
- for (property in Object.getOwnPropertyNames(this)) {
3068
- typeof this[property] != 'function' && (this[property] = null);
3069
- }
3070
- }
3071
-
3072
- $.fn.owlCarousel.Constructor.Plugins.Hash = Hash;
3073
-
3074
- })(window.Zepto || window.jQuery, window, document);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/owl.carousel.min.js DELETED
@@ -1,98 +0,0 @@
1
- /*
2
- The MIT License (MIT)
3
- @todo Lazy Load Icon
4
- @todo prevent animationend bubling
5
- @todo itemsScaleUp
6
- @todo Test Zepto
7
- @todo stagePadding calculate wrong active classes
8
- The MIT License (MIT)
9
- The MIT License (MIT)
10
- The MIT License (MIT)
11
- The MIT License (MIT)
12
- The MIT License (MIT)
13
- The MIT License (MIT)
14
- The MIT License (MIT)
15
- */
16
- (function(d,f,k,g){function c(a,b){this.settings=null;this.options=d.extend({},c.Defaults,b);this.$element=d(a);this.drag=d.extend({},h);this.state=d.extend({},l);this.e=d.extend({},m);this._plugins={};this._supress={};this._speed=this._current=null;this._coordinates=[];this._width=this._breakpoint=null;this._items=[];this._clones=[];this._mergers=[];this._invalidated={};this._pipe=[];d.each(c.Plugins,d.proxy(function(a,d){this._plugins[a[0].toLowerCase()+a.slice(1)]=new d(this)},this));d.each(c.Pipe,
17
- d.proxy(function(a,b){this._pipe.push({filter:b.filter,run:d.proxy(b.run,this)})},this));this.setup();this.initialize()}function e(a){if(a.touches!==g)return{x:a.touches[0].pageX,y:a.touches[0].pageY};if(a.touches===g){if(a.pageX!==g)return{x:a.pageX,y:a.pageY};if(a.pageX===g)return{x:a.clientX,y:a.clientY}}}function b(a){var d,b,e=k.createElement("div");for(d in a)if(b=a[d],"undefined"!==typeof e.style[b])return[b,d];return[!1]}var h,l,m;h={start:0,startX:0,startY:0,current:0,currentX:0,currentY:0,
18
- offsetX:0,offsetY:0,distance:null,startTime:0,endTime:0,updatedX:0,targetEl:null};l={isTouch:!1,isScrolling:!1,isSwiping:!1,direction:!1,inMotion:!1};m={_onDragStart:null,_onDragMove:null,_onDragEnd:null,_transitionEnd:null,_resizer:null,_responsiveCall:null,_goToLoop:null,_checkVisibile:null};c.Defaults={items:3,loop:!1,center:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,
19
- responsive:{},responsiveRefreshRate:200,responsiveBaseElement:f,responsiveClass:!1,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",themeClass:"owl-theme",baseClass:"owl-carousel",itemClass:"owl-item",centerClass:"center",activeClass:"active"};c.Width={Default:"default",Inner:"inner",Outer:"outer"};c.Plugins={};c.Pipe=[{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],
20
- run:function(){var a=this._clones;if(this.$stage.children(".cloned").length!==a.length||!this.settings.loop&&0<a.length)this.$stage.children(".cloned").remove(),this._clones=[]}},{filter:["items","settings"],run:function(){var a,d,b=this._clones,e=this._items,c=this.settings.loop?b.length-Math.max(2*this.settings.items,4):0;a=0;for(d=Math.abs(c/2);a<d;a++)0<c?(this.$stage.children().eq(e.length+b.length-1).remove(),b.pop(),this.$stage.children().eq(0).remove(),b.pop()):(b.push(b.length/2),this.$stage.append(e[b[b.length-
21
- 1]].clone().addClass("cloned")),b.push(e.length-1-(b.length-1)/2),this.$stage.prepend(e[b[b.length-1]].clone().addClass("cloned")))}},{filter:["width","items","settings"],run:function(){var a=this.settings.rtl?1:-1,d=(this.width()/this.settings.items).toFixed(3),b=0,e,c,h;this._coordinates=[];c=0;for(h=this._clones.length+this._items.length;c<h;c++)e=this._mergers[this.relative(c)],e=this.settings.mergeFit&&Math.min(e,this.settings.items)||e,b+=(this.settings.autoWidth?this._items[this.relative(c)].width()+
22
- this.settings.margin:d*e)*a,this._coordinates.push(b)}},{filter:["width","items","settings"],run:function(){var a,b;a=(this.width()/this.settings.items).toFixed(3);var e={width:Math.abs(this._coordinates[this._coordinates.length-1])+2*this.settings.stagePadding,"padding-left":this.settings.stagePadding||"","padding-right":this.settings.stagePadding||""};this.$stage.css(e);e={width:this.settings.autoWidth?"auto":a-this.settings.margin};e[this.settings.rtl?"margin-left":"margin-right"]=this.settings.margin;
23
- if(!this.settings.autoWidth&&0<d.grep(this._mergers,function(a){return 1<a}).length)for(a=0,b=this._coordinates.length;a<b;a++)e.width=Math.abs(this._coordinates[a])-Math.abs(this._coordinates[a-1]||0)-this.settings.margin,this.$stage.children().eq(a).css(e);else this.$stage.children().css(e)}},{filter:["width","items","settings"],run:function(a){a.current&&this.reset(this.$stage.children().index(a.current))}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width",
24
- "position","items","settings"],run:function(){var a=this.settings.rtl?1:-1,d=2*this.settings.stagePadding,b=this.coordinates(this.current())+d,e=b+this.width()*a,c,h,l=[],f,m;f=0;for(m=this._coordinates.length;f<m;f++)c=this._coordinates[f-1]||0,h=Math.abs(this._coordinates[f])+d*a,(this.op(c,"<=",b)&&this.op(c,">",e)||this.op(h,"<",b)&&this.op(h,">",e))&&l.push(f);this.$stage.children("."+this.settings.activeClass).removeClass(this.settings.activeClass);this.$stage.children(":eq("+l.join("), :eq(")+
25
- ")").addClass(this.settings.activeClass);this.settings.center&&(this.$stage.children("."+this.settings.centerClass).removeClass(this.settings.centerClass),this.$stage.children().eq(this.current()).addClass(this.settings.centerClass))}}];c.prototype.initialize=function(){this.trigger("initialize");this.$element.addClass(this.settings.baseClass).addClass(this.settings.themeClass).toggleClass("owl-rtl",this.settings.rtl);this.browserSupport();if(this.settings.autoWidth&&!0!==this.state.imagesLoaded){var a,
26
- b;a=this.$element.find("img");b=this.$element.children(this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:g).width();if(a.length&&0>=b)return this.preloadAutoWidthImages(a),!1}this.$element.addClass("owl-loading");this.$stage=d("<"+this.settings.stageElement+' class="owl-stage"/>').wrap('<div class="owl-stage-outer">');this.$element.append(this.$stage.parent());this.replace(this.$element.children().not(this.$stage.parent()));this._width=this.$element.width();this.refresh();this.$element.removeClass("owl-loading").addClass("owl-loaded");
27
- this.eventsCall();this.internalEvents();this.addTriggerableEvents();this.trigger("initialized")};c.prototype.setup=function(){var a=this.viewport(),b=this.options.responsive,e=-1,c=null;b?(d.each(b,function(b){b<=a&&b>e&&(e=Number(b))}),c=d.extend({},this.options,b[e]),delete c.responsive,c.responsiveClass&&this.$element.attr("class",function(a,b){return b.replace(/\b owl-responsive-\S+/g,"")}).addClass("owl-responsive-"+e)):c=d.extend({},this.options);if(null===this.settings||this._breakpoint!==
28
- e)this.trigger("change",{property:{name:"settings",value:c}}),this._breakpoint=e,this.settings=c,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})};c.prototype.optionsLogic=function(){this.$element.toggleClass("owl-center",this.settings.center);this.settings.loop&&this._items.length<this.settings.items&&(this.settings.loop=!1);this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)};c.prototype.prepare=function(a){var b=this.trigger("prepare",
29
- {content:a});b.data||(b.data=d("<"+this.settings.itemElement+"/>").addClass(this.settings.itemClass).append(a));this.trigger("prepared",{content:b.data});return b.data};c.prototype.update=function(){for(var a=0,b=this._pipe.length,e=d.proxy(function(a){return this[a]},this._invalidated),c={};a<b;)(this._invalidated.all||0<d.grep(this._pipe[a].filter,e).length)&&this._pipe[a].run(c),a++;this._invalidated={}};c.prototype.width=function(a){a=a||c.Width.Default;switch(a){case c.Width.Inner:case c.Width.Outer:return this._width;
30
- default:return this._width-2*this.settings.stagePadding+this.settings.margin}};c.prototype.refresh=function(){if(0===this._items.length)return!1;(new Date).getTime();this.trigger("refresh");this.setup();this.optionsLogic();this.$stage.addClass("owl-refresh");this.update();this.$stage.removeClass("owl-refresh");this.state.orientation=f.orientation;this.watchVisibility();this.trigger("refreshed")};c.prototype.eventsCall=function(){this.e._onDragStart=d.proxy(function(a){this.onDragStart(a)},this);this.e._onDragMove=
31
- d.proxy(function(a){this.onDragMove(a)},this);this.e._onDragEnd=d.proxy(function(a){this.onDragEnd(a)},this);this.e._onResize=d.proxy(function(a){this.onResize(a)},this);this.e._transitionEnd=d.proxy(function(a){this.transitionEnd(a)},this);this.e._preventClick=d.proxy(function(a){this.preventClick(a)},this)};c.prototype.onThrottledResize=function(){f.clearTimeout(this.resizeTimer);this.resizeTimer=f.setTimeout(this.e._onResize,this.settings.responsiveRefreshRate)};c.prototype.onResize=function(){if(!this._items.length||
32
- this._width===this.$element.width()||this.trigger("resize").isDefaultPrevented())return!1;this._width=this.$element.width();this.invalidate("width");this.refresh();this.trigger("resized")};c.prototype.eventsRouter=function(a){var b=a.type;if("mousedown"===b||"touchstart"===b)this.onDragStart(a);else if("mousemove"===b||"touchmove"===b)this.onDragMove(a);else if("mouseup"===b||"touchend"===b)this.onDragEnd(a);else if("touchcancel"===b)this.onDragEnd(a)};c.prototype.internalEvents=function(){var a=
33
- f.navigator.msPointerEnabled;this.settings.mouseDrag?(this.$stage.on("mousedown",d.proxy(function(a){this.eventsRouter(a)},this)),this.$stage.on("dragstart",function(){return!1}),this.$stage.get(0).onselectstart=function(){return!1}):this.$element.addClass("owl-text-select-on");if(this.settings.touchDrag&&!a)this.$stage.on("touchstart touchcancel",d.proxy(function(a){this.eventsRouter(a)},this));if(this.transitionEndVendor)this.on(this.$stage.get(0),this.transitionEndVendor,this.e._transitionEnd,
34
- !1);if(!1!==this.settings.responsive)this.on(f,"resize",d.proxy(this.onThrottledResize,this))};c.prototype.onDragStart=function(a){var b,c,h;a=a.originalEvent||a||f.event;if(3===a.which||this.state.isTouch)return!1;"mousedown"===a.type&&this.$stage.addClass("owl-grab");this.trigger("drag");this.drag.startTime=(new Date).getTime();this.speed(0);this.state.isTouch=!0;this.state.isScrolling=!1;this.state.isSwiping=!1;this.drag.distance=0;b=e(a).x;c=e(a).y;this.drag.offsetX=this.$stage.position().left;
35
- this.drag.offsetY=this.$stage.position().top;this.settings.rtl&&(this.drag.offsetX=this.$stage.position().left+this.$stage.width()-this.width()+this.settings.margin);if(this.state.inMotion&&this.support3d)h=this.getTransformProperty(),this.drag.offsetX=h,this.animate(h),this.state.inMotion=!0;else if(this.state.inMotion&&!this.support3d)return this.state.inMotion=!1;this.drag.startX=b-this.drag.offsetX;this.drag.startY=c-this.drag.offsetY;this.drag.start=b-this.drag.startX;this.drag.targetEl=a.target||
36
- a.srcElement;this.drag.updatedX=this.drag.start;if("IMG"===this.drag.targetEl.tagName||"A"===this.drag.targetEl.tagName)this.drag.targetEl.draggable=!1;d(k).on("mousemove.owl.dragEvents mouseup.owl.dragEvents touchmove.owl.dragEvents touchend.owl.dragEvents",d.proxy(function(a){this.eventsRouter(a)},this))};c.prototype.onDragMove=function(a){var b,d,c;if(this.state.isTouch&&!this.state.isScrolling){a=a.originalEvent||a||f.event;b=e(a).x;d=e(a).y;this.drag.currentX=b-this.drag.startX;this.drag.currentY=
37
- d-this.drag.startY;this.drag.distance=this.drag.currentX-this.drag.offsetX;0>this.drag.distance?this.state.direction=this.settings.rtl?"right":"left":0<this.drag.distance&&(this.state.direction=this.settings.rtl?"left":"right");this.settings.loop?this.op(this.drag.currentX,">",this.coordinates(this.minimum()))&&"right"===this.state.direction?this.drag.currentX-=(this.settings.center&&this.coordinates(0))-this.coordinates(this._items.length):this.op(this.drag.currentX,"<",this.coordinates(this.maximum()))&&
38
- "left"===this.state.direction&&(this.drag.currentX+=(this.settings.center&&this.coordinates(0))-this.coordinates(this._items.length)):(b=this.settings.rtl?this.coordinates(this.maximum()):this.coordinates(this.minimum()),d=this.settings.rtl?this.coordinates(this.minimum()):this.coordinates(this.maximum()),c=this.settings.pullDrag?this.drag.distance/5:0,this.drag.currentX=Math.max(Math.min(this.drag.currentX,b+c),d+c));if(8<this.drag.distance||-8>this.drag.distance)a.preventDefault!==g?a.preventDefault():
39
- a.returnValue=!1,this.state.isSwiping=!0;this.drag.updatedX=this.drag.currentX;(16<this.drag.currentY||-16>this.drag.currentY)&&!1===this.state.isSwiping&&(this.state.isScrolling=!0,this.drag.updatedX=this.drag.start);this.animate(this.drag.updatedX)}};c.prototype.onDragEnd=function(a){var b;if(this.state.isTouch){"mouseup"===a.type&&this.$stage.removeClass("owl-grab");this.trigger("dragged");this.drag.targetEl.removeAttribute("draggable");this.state.isTouch=!1;this.state.isScrolling=!1;this.state.isSwiping=
40
- !1;if(0===this.drag.distance&&!0!==this.state.inMotion)return this.state.inMotion=!1;this.drag.endTime=(new Date).getTime();a=this.drag.endTime-this.drag.startTime;b=Math.abs(this.drag.distance);(3<b||300<a)&&this.removeClick(this.drag.targetEl);a=this.closest(this.drag.updatedX);this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed);this.current(a);this.invalidate("position");this.update();this.settings.pullDrag||this.drag.updatedX!==this.coordinates(a)||this.transitionEnd();this.drag.distance=
41
- 0;d(k).off(".owl.dragEvents")}};c.prototype.removeClick=function(a){this.drag.targetEl=a;d(a).on("click.preventClick",this.e._preventClick);f.setTimeout(function(){d(a).off("click.preventClick")},300)};c.prototype.preventClick=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1;a.stopPropagation&&a.stopPropagation();d(a.target).off("click.preventClick")};c.prototype.getTransformProperty=function(){var a;a=f.getComputedStyle(this.$stage.get(0),null).getPropertyValue(this.vendorName+"transform");
42
- a=a.replace(/matrix(3d)?\(|\)/g,"").split(",");return 16===a.length!==!0?a[4]:a[12]};c.prototype.closest=function(a){var b=-1,e=this.width(),c=this.coordinates();this.settings.freeDrag||d.each(c,d.proxy(function(d,h){a>h-30&&a<h+30?b=d:this.op(a,"<",h)&&this.op(a,">",c[d+1]||h-e)&&(b="left"===this.state.direction?d+1:d);return-1===b},this));this.settings.loop||(this.op(a,">",c[this.minimum()])?b=a=this.minimum():this.op(a,"<",c[this.maximum()])&&(b=a=this.maximum()));return b};c.prototype.animate=
43
- function(a){this.trigger("translate");this.state.inMotion=0<this.speed();this.support3d?this.$stage.css({transform:"translate3d("+a+"px,0px, 0px)",transition:this.speed()/1E3+"s"}):this.state.isTouch?this.$stage.css({left:a+"px"}):this.$stage.animate({left:a},this.speed()/1E3,this.settings.fallbackEasing,d.proxy(function(){this.state.inMotion&&this.transitionEnd()},this))};c.prototype.current=function(a){if(a===g)return this._current;if(0===this._items.length)return g;a=this.normalize(a);if(this._current!==
44
- a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==g&&(a=this.normalize(b.data));this._current=a;this.invalidate("position");this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current};c.prototype.invalidate=function(a){this._invalidated[a]=!0};c.prototype.reset=function(a){a=this.normalize(a);a!==g&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))};
45
- c.prototype.normalize=function(a,b){var e=b?this._items.length:this._items.length+this._clones.length;return!d.isNumeric(a)||1>e?g:a=this._clones.length?(a%e+e)%e:Math.max(this.minimum(b),Math.min(this.maximum(b),a))};c.prototype.relative=function(a){a=this.normalize(a);a-=this._clones.length/2;return this.normalize(a,!0)};c.prototype.maximum=function(a){var b,d=0,e;e=this.settings;if(a)return this._items.length-1;if(!e.loop&&e.center)b=this._items.length-1;else if(e.loop||e.center)if(e.loop||e.center)b=
46
- this._items.length+e.items;else if(e.autoWidth||e.merge)for(revert=e.rtl?1:-1,a=this.$stage.width()-this.$element.width();(e=this.coordinates(d))&&!(e*revert>=a);)b=++d;else throw"Can not detect maximum absolute position.";else b=this._items.length-e.items;return b};c.prototype.minimum=function(a){return a?0:this._clones.length/2};c.prototype.items=function(a){if(a===g)return this._items.slice();a=this.normalize(a,!0);return this._items[a]};c.prototype.mergers=function(a){if(a===g)return this._mergers.slice();
47
- a=this.normalize(a,!0);return this._mergers[a]};c.prototype.clones=function(a){var b=this._clones.length/2,e=b+this._items.length;return a===g?d.map(this._clones,function(a,d){return 0===d%2?e+d/2:b-(d+1)/2}):d.map(this._clones,function(d,c){return d===a?0===c%2?e+c/2:b-(c+1)/2:null})};c.prototype.speed=function(a){a!==g&&(this._speed=a);return this._speed};c.prototype.coordinates=function(a){var b=null;if(a===g)return d.map(this._coordinates,d.proxy(function(a,b){return this.coordinates(b)},this));
48
- this.settings.center?(b=this._coordinates[a],b+=(this.width()-b+(this._coordinates[a-1]||0))/2*(this.settings.rtl?-1:1)):b=this._coordinates[a-1]||0;return b};c.prototype.duration=function(a,b,d){return Math.min(Math.max(Math.abs(b-a),1),6)*Math.abs(d||this.settings.smartSpeed)};c.prototype.to=function(a,b){if(this.settings.loop){var e=a-this.relative(this.current()),c=this.current(),h=this.current(),l=this.current()+e,m=0>h-l?!0:!1,g=this._clones.length+this._items.length;l<this.settings.items&&
49
- !1===m?(c=h+this._items.length,this.reset(c)):l>=g-this.settings.items&&!0===m&&(c=h-this._items.length,this.reset(c));f.clearTimeout(this.e._goToLoop);this.e._goToLoop=f.setTimeout(d.proxy(function(){this.speed(this.duration(this.current(),c+e,b));this.current(c+e);this.update()},this),30)}else this.speed(this.duration(this.current(),a,b)),this.current(a),this.update()};c.prototype.next=function(a){a=a||!1;this.to(this.relative(this.current())+1,a)};c.prototype.prev=function(a){a=a||!1;this.to(this.relative(this.current())-
50
- 1,a)};c.prototype.transitionEnd=function(a){if(a!==g&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0)))return!1;this.state.inMotion=!1;this.trigger("translated")};c.prototype.viewport=function(){var a;if(this.options.responsiveBaseElement!==f)a=d(this.options.responsiveBaseElement).width();else if(f.innerWidth)a=f.innerWidth;else if(k.documentElement&&k.documentElement.clientWidth)a=k.documentElement.clientWidth;else throw"Can not detect viewport width.";return a};
51
- c.prototype.replace=function(a){this.$stage.empty();this._items=[];a&&(a=a instanceof jQuery?a:d(a));this.settings.nestedItemSelector&&(a=a.find("."+this.settings.nestedItemSelector));a.filter(function(){return 1===this.nodeType}).each(d.proxy(function(a,b){b=this.prepare(b);this.$stage.append(b);this._items.push(b);this._mergers.push(1*b.find("[data-merge]").andSelf("[data-merge]").attr("data-merge")||1)},this));this.reset(d.isNumeric(this.settings.startPosition)?this.settings.startPosition:0);this.invalidate("items")};
52
- c.prototype.add=function(a,b){b=b===g?this._items.length:this.normalize(b,!0);this.trigger("add",{content:a,position:b});0===this._items.length||b===this._items.length?(this.$stage.append(a),this._items.push(a),this._mergers.push(1*a.find("[data-merge]").andSelf("[data-merge]").attr("data-merge")||1)):(this._items[b].before(a),this._items.splice(b,0,a),this._mergers.splice(b,0,1*a.find("[data-merge]").andSelf("[data-merge]").attr("data-merge")||1));this.invalidate("items");this.trigger("added",{content:a,
53
- position:b})};c.prototype.remove=function(a){a=this.normalize(a,!0);a!==g&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))};c.prototype.addTriggerableEvents=function(){var a=d.proxy(function(a,b){return d.proxy(function(e){e.relatedTarget!==this&&(this.suppress([b]),a.apply(this,[].slice.call(arguments,1)),this.release([b]))},this)},this);
54
- d.each({next:this.next,prev:this.prev,to:this.to,destroy:this.destroy,refresh:this.refresh,replace:this.replace,add:this.add,remove:this.remove},d.proxy(function(b,e){this.$element.on(b+".owl.carousel",a(e,b+".owl.carousel"))},this))};c.prototype.watchVisibility=function(){function a(a){return 0<a.offsetWidth&&0<a.offsetHeight}function b(){a(this.$element.get(0))&&(this.$element.removeClass("owl-hidden"),this.refresh(),f.clearInterval(this.e._checkVisibile))}a(this.$element.get(0))||(this.$element.addClass("owl-hidden"),
55
- f.clearInterval(this.e._checkVisibile),this.e._checkVisibile=f.setInterval(d.proxy(b,this),500))};c.prototype.preloadAutoWidthImages=function(a){var b,e,c,h;b=0;e=this;a.each(function(l,f){c=d(f);h=new Image;h.onload=function(){b++;c.attr("src",h.src);c.css("opacity",1);b>=a.length&&(e.state.imagesLoaded=!0,e.initialize())};h.src=c.attr("src")||c.attr("data-src")||c.attr("data-src-retina")})};c.prototype.destroy=function(){this.$element.hasClass(this.settings.themeClass)&&this.$element.removeClass(this.settings.themeClass);
56
- !1!==this.settings.responsive&&d(f).off("resize.owl.carousel");this.transitionEndVendor&&this.off(this.$stage.get(0),this.transitionEndVendor,this.e._transitionEnd);for(var a in this._plugins)this._plugins[a].destroy();if(this.settings.mouseDrag||this.settings.touchDrag)this.$stage.off("mousedown touchstart touchcancel"),d(k).off(".owl.dragEvents"),this.$stage.get(0).onselectstart=function(){},this.$stage.off("dragstart",function(){return!1});this.$element.off(".owl");this.$stage.children(".cloned").remove();
57
- this.e=null;this.$element.removeData("owlCarousel");this.$stage.children().contents().unwrap();this.$stage.children().unwrap();this.$stage.unwrap()};c.prototype.op=function(a,b,e){var d=this.settings.rtl;switch(b){case "<":return d?a>e:a<e;case ">":return d?a<e:a>e;case ">=":return d?a<=e:a>=e;case "<=":return d?a>=e:a<=e}};c.prototype.on=function(a,b,e,d){a.addEventListener?a.addEventListener(b,e,d):a.attachEvent&&a.attachEvent("on"+b,e)};c.prototype.off=function(a,b,e,d){a.removeEventListener?a.removeEventListener(b,
58
- e,d):a.detachEvent&&a.detachEvent("on"+b,e)};c.prototype.trigger=function(a,b,e){var c={item:{count:this._items.length,index:this.current()}},h=d.camelCase(d.grep(["on",a,e],function(a){return a}).join("-").toLowerCase()),l=d.Event([a,"owl",e||"carousel"].join(".").toLowerCase(),d.extend({relatedTarget:this},c,b));this._supress[a]||(d.each(this._plugins,function(a,b){if(b.onTrigger)b.onTrigger(l)}),this.$element.trigger(l),this.settings&&"function"===typeof this.settings[h]&&this.settings[h].apply(this,
59
- l));return l};c.prototype.suppress=function(a){d.each(a,d.proxy(function(a,b){this._supress[b]=!0},this))};c.prototype.release=function(a){d.each(a,d.proxy(function(a,b){delete this._supress[b]},this))};c.prototype.browserSupport=function(){if(this.support3d=b(["perspective","webkitPerspective","MozPerspective","OPerspective","MsPerspective"])[0])this.transformVendor=b(["transform","WebkitTransform","MozTransform","OTransform","msTransform"])[0],this.transitionEndVendor=["transitionend","webkitTransitionEnd",
60
- "transitionend","oTransitionEnd"][b(["transition","WebkitTransition","MozTransition","OTransition"])[1]],this.vendorName=this.transformVendor.replace(/Transform/i,""),this.vendorName=""!==this.vendorName?"-"+this.vendorName.toLowerCase()+"-":"";this.state.orientation=f.orientation};d.fn.owlCarousel=function(a){return this.each(function(){d(this).data("owlCarousel")||d(this).data("owlCarousel",new c(this,a))})};d.fn.owlCarousel.Constructor=c})(window.Zepto||window.jQuery,window,document);
61
- (function(d,f,k,g){var c=function(e){this._core=e;this._loaded=[];this._handlers={"initialized.owl.carousel change.owl.carousel":d.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type)){var e=this._core.settings,c=e.center&&Math.ceil(e.items/2)||e.items,e=e.center&&-1*c||0;b=(b.property&&b.property.value||this._core.current())+e;for(var f=this._core.clones().length,a=d.proxy(function(a,b){this.load(b)},
62
- this);e++<c;)this.load(f/2+this._core.relative(b)),f&&d.each(this._core.clones(this._core.relative(b++)),a)}},this)};this._core.options=d.extend({},c.Defaults,this._core.options);this._core.$element.on(this._handlers)};c.Defaults={lazyLoad:!1};c.prototype.load=function(e){var b=(e=this._core.$stage.children().eq(e))&&e.find(".owl-lazy");!b||-1<d.inArray(e.get(0),this._loaded)||(b.each(d.proxy(function(b,e){var c=d(e),a,g=1<f.devicePixelRatio&&c.attr("data-src-retina")||c.attr("data-src");this._core.trigger("load",
63
- {element:c,url:g},"lazy");c.is("img")?c.one("load.owl.lazy",d.proxy(function(){c.css("opacity",1);this._core.trigger("loaded",{element:c,url:g},"lazy")},this)).attr("src",g):(a=new Image,a.onload=d.proxy(function(){c.css({"background-image":"url("+g+")",opacity:"1"});this._core.trigger("loaded",{element:c,url:g},"lazy")},this),a.src=g)},this)),this._loaded.push(e.get(0)))};c.prototype.destroy=function(){var e,b;for(e in this.handlers)this._core.$element.off(e,this.handlers[e]);for(b in Object.getOwnPropertyNames(this))"function"!=
64
- typeof this[b]&&(this[b]=null)};d.fn.owlCarousel.Constructor.Plugins.Lazy=c})(window.Zepto||window.jQuery,window,document);
65
- (function(d,f,k,g){var c=function(e){this._core=e;this._handlers={"initialized.owl.carousel":d.proxy(function(){this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":d.proxy(function(b){this._core.settings.autoHeight&&"position"==b.property.name&&this.update()},this),"loaded.owl.lazy":d.proxy(function(b){this._core.settings.autoHeight&&b.element.closest("."+this._core.settings.itemClass)===this._core.$stage.children().eq(this._core.current())&&this.update()},this)};this._core.options=
66
- d.extend({},c.Defaults,this._core.options);this._core.$element.on(this._handlers)};c.Defaults={autoHeight:!1,autoHeightClass:"owl-height"};c.prototype.update=function(){this._core.$stage.parent().height(this._core.$stage.children().eq(this._core.current()).height()).addClass(this._core.settings.autoHeightClass)};c.prototype.destroy=function(){var e,b;for(e in this._handlers)this._core.$element.off(e,this._handlers[e]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=
67
- null)};d.fn.owlCarousel.Constructor.Plugins.AutoHeight=c})(window.Zepto||window.jQuery,window,document);
68
- (function(d,f,k,g){var c=function(e){this._core=e;this._videos={};this._playing=null;this._fullscreen=!1;this._handlers={"resize.owl.carousel":d.proxy(function(b){this._core.settings.video&&!this.isInFullScreen()&&b.preventDefault()},this),"refresh.owl.carousel changed.owl.carousel":d.proxy(function(b){this._playing&&this.stop()},this),"prepared.owl.carousel":d.proxy(function(b){var e=d(b.content).find(".owl-video");e.length&&(e.css("display","none"),this.fetch(e,d(b.content)))},this)};this._core.options=
69
- d.extend({},c.Defaults,this._core.options);this._core.$element.on(this._handlers);this._core.$element.on("click.owl.video",".owl-video-play-icon",d.proxy(function(b){this.play(b)},this))};c.Defaults={video:!1,videoHeight:!1,videoWidth:!1};c.prototype.fetch=function(e,b){var d;e.attr("data-vimeo-id");var c;e.attr("data-vimeo-id")||e.attr("data-youtube-id");var f=e.attr("data-width")||this._core.settings.videoWidth,a=e.attr("data-height")||this._core.settings.videoHeight,g=e.attr("href");if(g){c=g.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);
70
- if(-1<c[3].indexOf("youtu"))d="youtube";else if(-1<c[3].indexOf("vimeo"))d="vimeo";else throw Error("Video URL not supported.");c=c[6]}else throw Error("Missing video URL.");this._videos[g]={type:d,id:c,width:f,height:a};b.attr("data-video",g);this.thumbnail(e,this._videos[g])};c.prototype.thumbnail=function(e,b){var c,f,g=b.width&&b.height?'style="width:'+b.width+"px;height:"+b.height+'px;"':"",a=e.find("img"),k="src",p="",q=this._core.settings,n=function(a){c=q.lazyLoad?'<div class="owl-video-tn '+
71
- p+'" '+k+'="'+a+'"></div>':'<div class="owl-video-tn" style="opacity:1;background-image:url('+a+')"></div>';e.after(c);e.after('<div class="owl-video-play-icon"></div>')};e.wrap('<div class="owl-video-wrapper"'+g+"></div>");this._core.settings.lazyLoad&&(k="data-src",p="owl-lazy");if(a.length)return n(a.attr(k)),a.remove(),!1;"youtube"===b.type?(f="http://img.youtube.com/vi/"+b.id+"/hqdefault.jpg",n(f)):"vimeo"===b.type&&d.ajax({type:"GET",url:"http://vimeo.com/api/v2/video/"+b.id+".json",jsonp:"callback",
72
- dataType:"jsonp",success:function(a){f=a[0].thumbnail_large;n(f)}})};c.prototype.stop=function(){this._core.trigger("stop",null,"video");this._playing.find(".owl-video-frame").remove();this._playing.removeClass("owl-video-playing");this._playing=null};c.prototype.play=function(e){this._core.trigger("play",null,"video");this._playing&&this.stop();e=d(e.target||e.srcElement);var b=e.closest("."+this._core.settings.itemClass),c=this._videos[b.attr("data-video")],f=c.width||"100%",g=c.height||this._core.$stage.height(),
73
- a;"youtube"===c.type?a='<iframe width="'+f+'" height="'+g+'" src="http://www.youtube.com/embed/'+c.id+"?autoplay=1&v="+c.id+'" frameborder="0" allowfullscreen></iframe>':"vimeo"===c.type&&(a='<iframe src="http://player.vimeo.com/video/'+c.id+'?autoplay=1" width="'+f+'" height="'+g+'" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>');b.addClass("owl-video-playing");this._playing=b;a=d('<div style="height:'+g+"px; width:"+f+'px" class="owl-video-frame">'+a+"</div>");
74
- e.after(a)};c.prototype.isInFullScreen=function(){var e=k.fullscreenElement||k.mozFullScreenElement||k.webkitFullscreenElement;e&&d(e).parent().hasClass("owl-video-frame")&&(this._core.speed(0),this._fullscreen=!0);return e&&this._fullscreen&&this._playing?!1:this._fullscreen?this._fullscreen=!1:this._playing&&this._core.state.orientation!==f.orientation?(this._core.state.orientation=f.orientation,!1):!0};c.prototype.destroy=function(){var e,b;this._core.$element.off("click.owl.video");for(e in this._handlers)this._core.$element.off(e,
75
- this._handlers[e]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)};d.fn.owlCarousel.Constructor.Plugins.Video=c})(window.Zepto||window.jQuery,window,document);
76
- (function(d,f,k,g){var c=function(e){this.core=e;this.core.options=d.extend({},c.Defaults,this.core.options);this.swapping=!0;this.next=this.previous=g;this.handlers={"change.owl.carousel":d.proxy(function(b){"position"==b.property.name&&(this.previous=this.core.current(),this.next=b.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":d.proxy(function(b){this.swapping="translated"==b.type},this),"translate.owl.carousel":d.proxy(function(b){this.swapping&&(this.core.options.animateOut||
77
- this.core.options.animateIn)&&this.swap()},this)};this.core.$element.on(this.handlers)};c.Defaults={animateOut:!1,animateIn:!1};c.prototype.swap=function(){if(1===this.core.settings.items&&this.core.support3d){this.core.speed(0);var e,b=d.proxy(this.clear,this),c=this.core.$stage.children().eq(this.previous),f=this.core.$stage.children().eq(this.next),g=this.core.settings.animateIn,a=this.core.settings.animateOut;if(this.core.current()!==this.previous&&(a&&(e=this.core.coordinates(this.previous)-
78
- this.core.coordinates(this.next),c.css({left:e+"px"}).addClass("animated owl-animated-out").addClass(a).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",b)),g))f.addClass("animated owl-animated-in").addClass(g).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",b)}};c.prototype.clear=function(e){d(e.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut);
79
- this.core.transitionEnd()};c.prototype.destroy=function(){var e,b;for(e in this.handlers)this.core.$element.off(e,this.handlers[e]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)};d.fn.owlCarousel.Constructor.Plugins.Animate=c})(window.Zepto||window.jQuery,window,document);
80
- (function(d,f,k,g){var c=function(e){this.core=e;this.core.options=d.extend({},c.Defaults,this.core.options);this.handlers={"translated.owl.carousel refreshed.owl.carousel":d.proxy(function(){this.autoplay()},this),"play.owl.autoplay":d.proxy(function(b,e,c){this.play(e,c)},this),"stop.owl.autoplay":d.proxy(function(){this.stop()},this),"mouseover.owl.autoplay":d.proxy(function(){this.core.settings.autoplayHoverPause&&this.pause()},this),"mouseleave.owl.autoplay":d.proxy(function(){this.core.settings.autoplayHoverPause&&
81
- this.autoplay()},this)};this.core.$element.on(this.handlers)};c.Defaults={autoplay:!1,autoplayTimeout:5E3,autoplayHoverPause:!1,autoplaySpeed:!1};c.prototype.autoplay=function(){this.core.settings.autoplay&&!this.core.state.videoPlay?(f.clearInterval(this.interval),this.interval=f.setInterval(d.proxy(function(){this.play()},this),this.core.settings.autoplayTimeout)):f.clearInterval(this.interval)};c.prototype.play=function(e,b){!0!==k.hidden&&(this.core.state.isTouch||this.core.state.isScrolling||
82
- this.core.state.isSwiping||this.core.state.inMotion||(!1===this.core.settings.autoplay?f.clearInterval(this.interval):this.core.next(this.core.settings.autoplaySpeed)))};c.prototype.stop=function(){f.clearInterval(this.interval)};c.prototype.pause=function(){f.clearInterval(this.interval)};c.prototype.destroy=function(){var e,b;f.clearInterval(this.interval);for(e in this.handlers)this.core.$element.off(e,this.handlers[e]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=
83
- null)};d.fn.owlCarousel.Constructor.Plugins.autoplay=c})(window.Zepto||window.jQuery,window,document);
84
- (function(d,f,k,g){var c=function(e){this._core=e;this._initialized=!1;this._pages=[];this._controls={};this._templates=[];this.$element=this._core.$element;this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to};this._handlers={"prepared.owl.carousel":d.proxy(function(b){this._core.settings.dotsData&&this._templates.push(d(b.content).find("[data-dot]").andSelf("[data-dot]").attr("data-dot"))},this),"add.owl.carousel":d.proxy(function(b){this._core.settings.dotsData&&this._templates.splice(b.position,
85
- 0,d(b.content).find("[data-dot]").andSelf("[data-dot]").attr("data-dot"))},this),"remove.owl.carousel prepared.owl.carousel":d.proxy(function(b){this._core.settings.dotsData&&this._templates.splice(b.position,1)},this),"change.owl.carousel":d.proxy(function(b){if("position"==b.property.name&&!this._core.state.revert&&!this._core.settings.loop&&this._core.settings.navRewind){var e=this._core.current(),c=this._core.maximum(),d=this._core.minimum();b.data=b.property.value>c?e>=c?d:c:b.property.value<
86
- d?c:b.property.value}},this),"changed.owl.carousel":d.proxy(function(b){"position"==b.property.name&&this.draw()},this),"refreshed.owl.carousel":d.proxy(function(){this._initialized||(this.initialize(),this._initialized=!0);this._core.trigger("refresh",null,"navigation");this.update();this.draw();this._core.trigger("refreshed",null,"navigation")},this)};this._core.options=d.extend({},c.Defaults,this._core.options);this.$element.on(this._handlers)};c.Defaults={nav:!1,navRewind:!0,navText:["prev","next"],
87
- navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotData:!1,dotsSpeed:!1,dotsContainer:!1,controlsClass:"owl-controls"};c.prototype.initialize=function(){var e,b,c=this._core.settings;c.dotsData||(this._templates=[d("<div>").addClass(c.dotClass).append(d("<span>")).prop("outerHTML")]);c.navContainer&&c.dotsContainer||(this._controls.$container=d("<div>").addClass(c.controlsClass).appendTo(this.$element));
88
- this._controls.$indicators=c.dotsContainer?d(c.dotsContainer):d("<div>").hide().addClass(c.dotsClass).appendTo(this._controls.$container);this._controls.$indicators.on("click","div",d.proxy(function(b){var e=d(b.target).parent().is(this._controls.$indicators)?d(b.target).index():d(b.target).parent().index();b.preventDefault();this.to(e,c.dotsSpeed)},this));e=c.navContainer?d(c.navContainer):d("<div>").addClass(c.navContainerClass).prependTo(this._controls.$container);this._controls.$next=d("<"+c.navElement+
89
- ">");this._controls.$previous=this._controls.$next.clone();this._controls.$previous.addClass(c.navClass[0]).html(c.navText[0]).hide().prependTo(e).on("click",d.proxy(function(b){this.prev(c.navSpeed)},this));this._controls.$next.addClass(c.navClass[1]).html(c.navText[1]).hide().appendTo(e).on("click",d.proxy(function(b){this.next(c.navSpeed)},this));for(b in this._overrides)this._core[b]=d.proxy(this[b],this)};c.prototype.destroy=function(){var e,b,c,d;for(e in this._handlers)this.$element.off(e,
90
- this._handlers[e]);for(b in this._controls)this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)};c.prototype.update=function(){var e,b,c;e=this._core.settings;var d=this._core.clones().length/2,f=d+this._core.items().length,a=e.center||e.autoWidth||e.dotData?1:e.dotsEach||e.items;"page"!==e.slideBy&&(e.slideBy=Math.min(e.slideBy,e.items));if(e.dots||"page"==e.slideBy)for(this._pages=
91
- [],e=d,c=b=0;e<f;e++){if(b>=a||0===b)this._pages.push({start:e-d,end:e-d+a-1}),b=0,++c;b+=this._core.mergers(this._core.relative(e))}};c.prototype.draw=function(){var c,b="",f=this._core.settings;this._core.$stage.children();c=this._core.relative(this._core.current());!f.nav||f.loop||f.navRewind||(this._controls.$previous.toggleClass("disabled",0>=c),this._controls.$next.toggleClass("disabled",c>=this._core.maximum()));this._controls.$previous.toggle(f.nav);this._controls.$next.toggle(f.nav);if(f.dots){c=
92
- this._pages.length-this._controls.$indicators.children().length;if(f.dotData&&0!==c){for(c=0;c<this._controls.$indicators.children().length;c++)b+=this._templates[this._core.relative(c)];this._controls.$indicators.html(b)}else 0<c?(b=Array(c+1).join(this._templates[0]),this._controls.$indicators.append(b)):0>c&&this._controls.$indicators.children().slice(c).remove();this._controls.$indicators.find(".active").removeClass("active");this._controls.$indicators.children().eq(d.inArray(this.current(),this._pages)).addClass("active")}this._controls.$indicators.toggle(f.dots)};
93
- c.prototype.onTrigger=function(c){var b=this._core.settings;c.page={index:d.inArray(this.current(),this._pages),count:this._pages.length,size:b&&(b.center||b.autoWidth||b.dotData?1:b.dotsEach||b.items)}};c.prototype.current=function(){var c=this._core.relative(this._core.current());return d.grep(this._pages,function(b){return b.start<=c&&b.end>=c}).pop()};c.prototype.getPosition=function(c){var b,f;f=this._core.settings;"page"==f.slideBy?(b=d.inArray(this.current(),this._pages),f=this._pages.length,
94
- c?++b:--b,b=this._pages[(b%f+f)%f].start):(b=this._core.relative(this._core.current()),this._core.items(),c?b+=f.slideBy:b-=f.slideBy);return b};c.prototype.next=function(c){d.proxy(this._overrides.to,this._core)(this.getPosition(!0),c)};c.prototype.prev=function(c){d.proxy(this._overrides.to,this._core)(this.getPosition(!1),c)};c.prototype.to=function(c,b,f){f?d.proxy(this._overrides.to,this._core)(c,b):(f=this._pages.length,d.proxy(this._overrides.to,this._core)(this._pages[(c%f+f)%f].start,b))};
95
- d.fn.owlCarousel.Constructor.Plugins.Navigation=c})(window.Zepto||window.jQuery,window,document);
96
- (function(d,f,k,g){var c=function(e){this._core=e;this._hashes={};this.$element=this._core.$element;this._handlers={"initialized.owl.carousel":d.proxy(function(){"URLHash"==this._core.settings.startPosition&&d(f).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":d.proxy(function(b){var c=d(b.content).find("[data-hash]").andSelf("[data-hash]").attr("data-hash");this._hashes[c]=b.content},this)};this._core.options=d.extend({},c.Defaults,this._core.options);this.$element.on(this._handlers);
97
- d(f).on("hashchange.owl.navigation",d.proxy(function(){var b=f.location.hash.substring(1),c=this._core.$stage.children(),c=this._hashes[b]&&c.index(this._hashes[b])||0;if(!b)return!1;this._core.to(c,!1,!0)},this))};c.Defaults={URLhashListener:!1};c.prototype.destroy=function(){var c,b;d(f).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)};d.fn.owlCarousel.Constructor.Plugins.Hash=
98
- c})(window.Zepto||window.jQuery,window,document);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/swiper-bundle.js ADDED
@@ -0,0 +1,9524 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Swiper 6.4.10
3
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
4
+ * https://swiperjs.com
5
+ *
6
+ * Copyright 2014-2021 Vladimir Kharlampidi
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: January 29, 2021
11
+ */
12
+
13
+ (function (global, factory) {
14
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
15
+ typeof define === 'function' && define.amd ? define(factory) :
16
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swiper = factory());
17
+ }(this, (function () { 'use strict';
18
+
19
+ function _defineProperties(target, props) {
20
+ for (var i = 0; i < props.length; i++) {
21
+ var descriptor = props[i];
22
+ descriptor.enumerable = descriptor.enumerable || false;
23
+ descriptor.configurable = true;
24
+ if ("value" in descriptor) descriptor.writable = true;
25
+ Object.defineProperty(target, descriptor.key, descriptor);
26
+ }
27
+ }
28
+
29
+ function _createClass(Constructor, protoProps, staticProps) {
30
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
31
+ if (staticProps) _defineProperties(Constructor, staticProps);
32
+ return Constructor;
33
+ }
34
+
35
+ function _extends() {
36
+ _extends = Object.assign || function (target) {
37
+ for (var i = 1; i < arguments.length; i++) {
38
+ var source = arguments[i];
39
+
40
+ for (var key in source) {
41
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
42
+ target[key] = source[key];
43
+ }
44
+ }
45
+ }
46
+
47
+ return target;
48
+ };
49
+
50
+ return _extends.apply(this, arguments);
51
+ }
52
+
53
+ /**
54
+ * SSR Window 3.0.0
55
+ * Better handling for window object in SSR environment
56
+ * https://github.com/nolimits4web/ssr-window
57
+ *
58
+ * Copyright 2020, Vladimir Kharlampidi
59
+ *
60
+ * Licensed under MIT
61
+ *
62
+ * Released on: November 9, 2020
63
+ */
64
+
65
+ /* eslint-disable no-param-reassign */
66
+ function isObject(obj) {
67
+ return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;
68
+ }
69
+
70
+ function extend(target, src) {
71
+ if (target === void 0) {
72
+ target = {};
73
+ }
74
+
75
+ if (src === void 0) {
76
+ src = {};
77
+ }
78
+
79
+ Object.keys(src).forEach(function (key) {
80
+ if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {
81
+ extend(target[key], src[key]);
82
+ }
83
+ });
84
+ }
85
+
86
+ var ssrDocument = {
87
+ body: {},
88
+ addEventListener: function addEventListener() {},
89
+ removeEventListener: function removeEventListener() {},
90
+ activeElement: {
91
+ blur: function blur() {},
92
+ nodeName: ''
93
+ },
94
+ querySelector: function querySelector() {
95
+ return null;
96
+ },
97
+ querySelectorAll: function querySelectorAll() {
98
+ return [];
99
+ },
100
+ getElementById: function getElementById() {
101
+ return null;
102
+ },
103
+ createEvent: function createEvent() {
104
+ return {
105
+ initEvent: function initEvent() {}
106
+ };
107
+ },
108
+ createElement: function createElement() {
109
+ return {
110
+ children: [],
111
+ childNodes: [],
112
+ style: {},
113
+ setAttribute: function setAttribute() {},
114
+ getElementsByTagName: function getElementsByTagName() {
115
+ return [];
116
+ }
117
+ };
118
+ },
119
+ createElementNS: function createElementNS() {
120
+ return {};
121
+ },
122
+ importNode: function importNode() {
123
+ return null;
124
+ },
125
+ location: {
126
+ hash: '',
127
+ host: '',
128
+ hostname: '',
129
+ href: '',
130
+ origin: '',
131
+ pathname: '',
132
+ protocol: '',
133
+ search: ''
134
+ }
135
+ };
136
+
137
+ function getDocument() {
138
+ var doc = typeof document !== 'undefined' ? document : {};
139
+ extend(doc, ssrDocument);
140
+ return doc;
141
+ }
142
+
143
+ var ssrWindow = {
144
+ document: ssrDocument,
145
+ navigator: {
146
+ userAgent: ''
147
+ },
148
+ location: {
149
+ hash: '',
150
+ host: '',
151
+ hostname: '',
152
+ href: '',
153
+ origin: '',
154
+ pathname: '',
155
+ protocol: '',
156
+ search: ''
157
+ },
158
+ history: {
159
+ replaceState: function replaceState() {},
160
+ pushState: function pushState() {},
161
+ go: function go() {},
162
+ back: function back() {}
163
+ },
164
+ CustomEvent: function CustomEvent() {
165
+ return this;
166
+ },
167
+ addEventListener: function addEventListener() {},
168
+ removeEventListener: function removeEventListener() {},
169
+ getComputedStyle: function getComputedStyle() {
170
+ return {
171
+ getPropertyValue: function getPropertyValue() {
172
+ return '';
173
+ }
174
+ };
175
+ },
176
+ Image: function Image() {},
177
+ Date: function Date() {},
178
+ screen: {},
179
+ setTimeout: function setTimeout() {},
180
+ clearTimeout: function clearTimeout() {},
181
+ matchMedia: function matchMedia() {
182
+ return {};
183
+ },
184
+ requestAnimationFrame: function requestAnimationFrame(callback) {
185
+ if (typeof setTimeout === 'undefined') {
186
+ callback();
187
+ return null;
188
+ }
189
+
190
+ return setTimeout(callback, 0);
191
+ },
192
+ cancelAnimationFrame: function cancelAnimationFrame(id) {
193
+ if (typeof setTimeout === 'undefined') {
194
+ return;
195
+ }
196
+
197
+ clearTimeout(id);
198
+ }
199
+ };
200
+
201
+ function getWindow() {
202
+ var win = typeof window !== 'undefined' ? window : {};
203
+ extend(win, ssrWindow);
204
+ return win;
205
+ }
206
+
207
+ /**
208
+ * Dom7 3.0.0
209
+ * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API
210
+ * https://framework7.io/docs/dom7.html
211
+ *
212
+ * Copyright 2020, Vladimir Kharlampidi
213
+ *
214
+ * Licensed under MIT
215
+ *
216
+ * Released on: November 9, 2020
217
+ */
218
+
219
+ function _inheritsLoose(subClass, superClass) {
220
+ subClass.prototype = Object.create(superClass.prototype);
221
+ subClass.prototype.constructor = subClass;
222
+ subClass.__proto__ = superClass;
223
+ }
224
+
225
+ function _getPrototypeOf(o) {
226
+ _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
227
+ return o.__proto__ || Object.getPrototypeOf(o);
228
+ };
229
+ return _getPrototypeOf(o);
230
+ }
231
+
232
+ function _setPrototypeOf(o, p) {
233
+ _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
234
+ o.__proto__ = p;
235
+ return o;
236
+ };
237
+
238
+ return _setPrototypeOf(o, p);
239
+ }
240
+
241
+ function _isNativeReflectConstruct() {
242
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
243
+ if (Reflect.construct.sham) return false;
244
+ if (typeof Proxy === "function") return true;
245
+
246
+ try {
247
+ Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
248
+ return true;
249
+ } catch (e) {
250
+ return false;
251
+ }
252
+ }
253
+
254
+ function _construct(Parent, args, Class) {
255
+ if (_isNativeReflectConstruct()) {
256
+ _construct = Reflect.construct;
257
+ } else {
258
+ _construct = function _construct(Parent, args, Class) {
259
+ var a = [null];
260
+ a.push.apply(a, args);
261
+ var Constructor = Function.bind.apply(Parent, a);
262
+ var instance = new Constructor();
263
+ if (Class) _setPrototypeOf(instance, Class.prototype);
264
+ return instance;
265
+ };
266
+ }
267
+
268
+ return _construct.apply(null, arguments);
269
+ }
270
+
271
+ function _isNativeFunction(fn) {
272
+ return Function.toString.call(fn).indexOf("[native code]") !== -1;
273
+ }
274
+
275
+ function _wrapNativeSuper(Class) {
276
+ var _cache = typeof Map === "function" ? new Map() : undefined;
277
+
278
+ _wrapNativeSuper = function _wrapNativeSuper(Class) {
279
+ if (Class === null || !_isNativeFunction(Class)) return Class;
280
+
281
+ if (typeof Class !== "function") {
282
+ throw new TypeError("Super expression must either be null or a function");
283
+ }
284
+
285
+ if (typeof _cache !== "undefined") {
286
+ if (_cache.has(Class)) return _cache.get(Class);
287
+
288
+ _cache.set(Class, Wrapper);
289
+ }
290
+
291
+ function Wrapper() {
292
+ return _construct(Class, arguments, _getPrototypeOf(this).constructor);
293
+ }
294
+
295
+ Wrapper.prototype = Object.create(Class.prototype, {
296
+ constructor: {
297
+ value: Wrapper,
298
+ enumerable: false,
299
+ writable: true,
300
+ configurable: true
301
+ }
302
+ });
303
+ return _setPrototypeOf(Wrapper, Class);
304
+ };
305
+
306
+ return _wrapNativeSuper(Class);
307
+ }
308
+
309
+ function _assertThisInitialized(self) {
310
+ if (self === void 0) {
311
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
312
+ }
313
+
314
+ return self;
315
+ }
316
+ /* eslint-disable no-proto */
317
+
318
+
319
+ function makeReactive(obj) {
320
+ var proto = obj.__proto__;
321
+ Object.defineProperty(obj, '__proto__', {
322
+ get: function get() {
323
+ return proto;
324
+ },
325
+ set: function set(value) {
326
+ proto.__proto__ = value;
327
+ }
328
+ });
329
+ }
330
+
331
+ var Dom7 = /*#__PURE__*/function (_Array) {
332
+ _inheritsLoose(Dom7, _Array);
333
+
334
+ function Dom7(items) {
335
+ var _this;
336
+
337
+ _this = _Array.call.apply(_Array, [this].concat(items)) || this;
338
+ makeReactive(_assertThisInitialized(_this));
339
+ return _this;
340
+ }
341
+
342
+ return Dom7;
343
+ }( /*#__PURE__*/_wrapNativeSuper(Array));
344
+
345
+ function arrayFlat(arr) {
346
+ if (arr === void 0) {
347
+ arr = [];
348
+ }
349
+
350
+ var res = [];
351
+ arr.forEach(function (el) {
352
+ if (Array.isArray(el)) {
353
+ res.push.apply(res, arrayFlat(el));
354
+ } else {
355
+ res.push(el);
356
+ }
357
+ });
358
+ return res;
359
+ }
360
+
361
+ function arrayFilter(arr, callback) {
362
+ return Array.prototype.filter.call(arr, callback);
363
+ }
364
+
365
+ function arrayUnique(arr) {
366
+ var uniqueArray = [];
367
+
368
+ for (var i = 0; i < arr.length; i += 1) {
369
+ if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);
370
+ }
371
+
372
+ return uniqueArray;
373
+ }
374
+
375
+ function qsa(selector, context) {
376
+ if (typeof selector !== 'string') {
377
+ return [selector];
378
+ }
379
+
380
+ var a = [];
381
+ var res = context.querySelectorAll(selector);
382
+
383
+ for (var i = 0; i < res.length; i += 1) {
384
+ a.push(res[i]);
385
+ }
386
+
387
+ return a;
388
+ }
389
+
390
+ function $(selector, context) {
391
+ var window = getWindow();
392
+ var document = getDocument();
393
+ var arr = [];
394
+
395
+ if (!context && selector instanceof Dom7) {
396
+ return selector;
397
+ }
398
+
399
+ if (!selector) {
400
+ return new Dom7(arr);
401
+ }
402
+
403
+ if (typeof selector === 'string') {
404
+ var html = selector.trim();
405
+
406
+ if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {
407
+ var toCreate = 'div';
408
+ if (html.indexOf('<li') === 0) toCreate = 'ul';
409
+ if (html.indexOf('<tr') === 0) toCreate = 'tbody';
410
+ if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';
411
+ if (html.indexOf('<tbody') === 0) toCreate = 'table';
412
+ if (html.indexOf('<option') === 0) toCreate = 'select';
413
+ var tempParent = document.createElement(toCreate);
414
+ tempParent.innerHTML = html;
415
+
416
+ for (var i = 0; i < tempParent.childNodes.length; i += 1) {
417
+ arr.push(tempParent.childNodes[i]);
418
+ }
419
+ } else {
420
+ arr = qsa(selector.trim(), context || document);
421
+ } // arr = qsa(selector, document);
422
+
423
+ } else if (selector.nodeType || selector === window || selector === document) {
424
+ arr.push(selector);
425
+ } else if (Array.isArray(selector)) {
426
+ if (selector instanceof Dom7) return selector;
427
+ arr = selector;
428
+ }
429
+
430
+ return new Dom7(arrayUnique(arr));
431
+ }
432
+
433
+ $.fn = Dom7.prototype;
434
+
435
+ function addClass() {
436
+ for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {
437
+ classes[_key] = arguments[_key];
438
+ }
439
+
440
+ var classNames = arrayFlat(classes.map(function (c) {
441
+ return c.split(' ');
442
+ }));
443
+ this.forEach(function (el) {
444
+ var _el$classList;
445
+
446
+ (_el$classList = el.classList).add.apply(_el$classList, classNames);
447
+ });
448
+ return this;
449
+ }
450
+
451
+ function removeClass() {
452
+ for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
453
+ classes[_key2] = arguments[_key2];
454
+ }
455
+
456
+ var classNames = arrayFlat(classes.map(function (c) {
457
+ return c.split(' ');
458
+ }));
459
+ this.forEach(function (el) {
460
+ var _el$classList2;
461
+
462
+ (_el$classList2 = el.classList).remove.apply(_el$classList2, classNames);
463
+ });
464
+ return this;
465
+ }
466
+
467
+ function toggleClass() {
468
+ for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
469
+ classes[_key3] = arguments[_key3];
470
+ }
471
+
472
+ var classNames = arrayFlat(classes.map(function (c) {
473
+ return c.split(' ');
474
+ }));
475
+ this.forEach(function (el) {
476
+ classNames.forEach(function (className) {
477
+ el.classList.toggle(className);
478
+ });
479
+ });
480
+ }
481
+
482
+ function hasClass() {
483
+ for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
484
+ classes[_key4] = arguments[_key4];
485
+ }
486
+
487
+ var classNames = arrayFlat(classes.map(function (c) {
488
+ return c.split(' ');
489
+ }));
490
+ return arrayFilter(this, function (el) {
491
+ return classNames.filter(function (className) {
492
+ return el.classList.contains(className);
493
+ }).length > 0;
494
+ }).length > 0;
495
+ }
496
+
497
+ function attr(attrs, value) {
498
+ if (arguments.length === 1 && typeof attrs === 'string') {
499
+ // Get attr
500
+ if (this[0]) return this[0].getAttribute(attrs);
501
+ return undefined;
502
+ } // Set attrs
503
+
504
+
505
+ for (var i = 0; i < this.length; i += 1) {
506
+ if (arguments.length === 2) {
507
+ // String
508
+ this[i].setAttribute(attrs, value);
509
+ } else {
510
+ // Object
511
+ for (var attrName in attrs) {
512
+ this[i][attrName] = attrs[attrName];
513
+ this[i].setAttribute(attrName, attrs[attrName]);
514
+ }
515
+ }
516
+ }
517
+
518
+ return this;
519
+ }
520
+
521
+ function removeAttr(attr) {
522
+ for (var i = 0; i < this.length; i += 1) {
523
+ this[i].removeAttribute(attr);
524
+ }
525
+
526
+ return this;
527
+ }
528
+
529
+ function transform(transform) {
530
+ for (var i = 0; i < this.length; i += 1) {
531
+ this[i].style.transform = transform;
532
+ }
533
+
534
+ return this;
535
+ }
536
+
537
+ function transition(duration) {
538
+ for (var i = 0; i < this.length; i += 1) {
539
+ this[i].style.transitionDuration = typeof duration !== 'string' ? duration + "ms" : duration;
540
+ }
541
+
542
+ return this;
543
+ }
544
+
545
+ function on() {
546
+ for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
547
+ args[_key5] = arguments[_key5];
548
+ }
549
+
550
+ var eventType = args[0],
551
+ targetSelector = args[1],
552
+ listener = args[2],
553
+ capture = args[3];
554
+
555
+ if (typeof args[1] === 'function') {
556
+ eventType = args[0];
557
+ listener = args[1];
558
+ capture = args[2];
559
+ targetSelector = undefined;
560
+ }
561
+
562
+ if (!capture) capture = false;
563
+
564
+ function handleLiveEvent(e) {
565
+ var target = e.target;
566
+ if (!target) return;
567
+ var eventData = e.target.dom7EventData || [];
568
+
569
+ if (eventData.indexOf(e) < 0) {
570
+ eventData.unshift(e);
571
+ }
572
+
573
+ if ($(target).is(targetSelector)) listener.apply(target, eventData);else {
574
+ var _parents = $(target).parents(); // eslint-disable-line
575
+
576
+
577
+ for (var k = 0; k < _parents.length; k += 1) {
578
+ if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData);
579
+ }
580
+ }
581
+ }
582
+
583
+ function handleEvent(e) {
584
+ var eventData = e && e.target ? e.target.dom7EventData || [] : [];
585
+
586
+ if (eventData.indexOf(e) < 0) {
587
+ eventData.unshift(e);
588
+ }
589
+
590
+ listener.apply(this, eventData);
591
+ }
592
+
593
+ var events = eventType.split(' ');
594
+ var j;
595
+
596
+ for (var i = 0; i < this.length; i += 1) {
597
+ var el = this[i];
598
+
599
+ if (!targetSelector) {
600
+ for (j = 0; j < events.length; j += 1) {
601
+ var event = events[j];
602
+ if (!el.dom7Listeners) el.dom7Listeners = {};
603
+ if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];
604
+ el.dom7Listeners[event].push({
605
+ listener: listener,
606
+ proxyListener: handleEvent
607
+ });
608
+ el.addEventListener(event, handleEvent, capture);
609
+ }
610
+ } else {
611
+ // Live events
612
+ for (j = 0; j < events.length; j += 1) {
613
+ var _event = events[j];
614
+ if (!el.dom7LiveListeners) el.dom7LiveListeners = {};
615
+ if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = [];
616
+
617
+ el.dom7LiveListeners[_event].push({
618
+ listener: listener,
619
+ proxyListener: handleLiveEvent
620
+ });
621
+
622
+ el.addEventListener(_event, handleLiveEvent, capture);
623
+ }
624
+ }
625
+ }
626
+
627
+ return this;
628
+ }
629
+
630
+ function off() {
631
+ for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
632
+ args[_key6] = arguments[_key6];
633
+ }
634
+
635
+ var eventType = args[0],
636
+ targetSelector = args[1],
637
+ listener = args[2],
638
+ capture = args[3];
639
+
640
+ if (typeof args[1] === 'function') {
641
+ eventType = args[0];
642
+ listener = args[1];
643
+ capture = args[2];
644
+ targetSelector = undefined;
645
+ }
646
+
647
+ if (!capture) capture = false;
648
+ var events = eventType.split(' ');
649
+
650
+ for (var i = 0; i < events.length; i += 1) {
651
+ var event = events[i];
652
+
653
+ for (var j = 0; j < this.length; j += 1) {
654
+ var el = this[j];
655
+ var handlers = void 0;
656
+
657
+ if (!targetSelector && el.dom7Listeners) {
658
+ handlers = el.dom7Listeners[event];
659
+ } else if (targetSelector && el.dom7LiveListeners) {
660
+ handlers = el.dom7LiveListeners[event];
661
+ }
662
+
663
+ if (handlers && handlers.length) {
664
+ for (var k = handlers.length - 1; k >= 0; k -= 1) {
665
+ var handler = handlers[k];
666
+
667
+ if (listener && handler.listener === listener) {
668
+ el.removeEventListener(event, handler.proxyListener, capture);
669
+ handlers.splice(k, 1);
670
+ } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {
671
+ el.removeEventListener(event, handler.proxyListener, capture);
672
+ handlers.splice(k, 1);
673
+ } else if (!listener) {
674
+ el.removeEventListener(event, handler.proxyListener, capture);
675
+ handlers.splice(k, 1);
676
+ }
677
+ }
678
+ }
679
+ }
680
+ }
681
+
682
+ return this;
683
+ }
684
+
685
+ function trigger() {
686
+ var window = getWindow();
687
+
688
+ for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
689
+ args[_key9] = arguments[_key9];
690
+ }
691
+
692
+ var events = args[0].split(' ');
693
+ var eventData = args[1];
694
+
695
+ for (var i = 0; i < events.length; i += 1) {
696
+ var event = events[i];
697
+
698
+ for (var j = 0; j < this.length; j += 1) {
699
+ var el = this[j];
700
+
701
+ if (window.CustomEvent) {
702
+ var evt = new window.CustomEvent(event, {
703
+ detail: eventData,
704
+ bubbles: true,
705
+ cancelable: true
706
+ });
707
+ el.dom7EventData = args.filter(function (data, dataIndex) {
708
+ return dataIndex > 0;
709
+ });
710
+ el.dispatchEvent(evt);
711
+ el.dom7EventData = [];
712
+ delete el.dom7EventData;
713
+ }
714
+ }
715
+ }
716
+
717
+ return this;
718
+ }
719
+
720
+ function transitionEnd(callback) {
721
+ var dom = this;
722
+
723
+ function fireCallBack(e) {
724
+ if (e.target !== this) return;
725
+ callback.call(this, e);
726
+ dom.off('transitionend', fireCallBack);
727
+ }
728
+
729
+ if (callback) {
730
+ dom.on('transitionend', fireCallBack);
731
+ }
732
+
733
+ return this;
734
+ }
735
+
736
+ function outerWidth(includeMargins) {
737
+ if (this.length > 0) {
738
+ if (includeMargins) {
739
+ var _styles = this.styles();
740
+
741
+ return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left'));
742
+ }
743
+
744
+ return this[0].offsetWidth;
745
+ }
746
+
747
+ return null;
748
+ }
749
+
750
+ function outerHeight(includeMargins) {
751
+ if (this.length > 0) {
752
+ if (includeMargins) {
753
+ var _styles2 = this.styles();
754
+
755
+ return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom'));
756
+ }
757
+
758
+ return this[0].offsetHeight;
759
+ }
760
+
761
+ return null;
762
+ }
763
+
764
+ function offset() {
765
+ if (this.length > 0) {
766
+ var window = getWindow();
767
+ var document = getDocument();
768
+ var el = this[0];
769
+ var box = el.getBoundingClientRect();
770
+ var body = document.body;
771
+ var clientTop = el.clientTop || body.clientTop || 0;
772
+ var clientLeft = el.clientLeft || body.clientLeft || 0;
773
+ var scrollTop = el === window ? window.scrollY : el.scrollTop;
774
+ var scrollLeft = el === window ? window.scrollX : el.scrollLeft;
775
+ return {
776
+ top: box.top + scrollTop - clientTop,
777
+ left: box.left + scrollLeft - clientLeft
778
+ };
779
+ }
780
+
781
+ return null;
782
+ }
783
+
784
+ function styles() {
785
+ var window = getWindow();
786
+ if (this[0]) return window.getComputedStyle(this[0], null);
787
+ return {};
788
+ }
789
+
790
+ function css(props, value) {
791
+ var window = getWindow();
792
+ var i;
793
+
794
+ if (arguments.length === 1) {
795
+ if (typeof props === 'string') {
796
+ // .css('width')
797
+ if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);
798
+ } else {
799
+ // .css({ width: '100px' })
800
+ for (i = 0; i < this.length; i += 1) {
801
+ for (var _prop in props) {
802
+ this[i].style[_prop] = props[_prop];
803
+ }
804
+ }
805
+
806
+ return this;
807
+ }
808
+ }
809
+
810
+ if (arguments.length === 2 && typeof props === 'string') {
811
+ // .css('width', '100px')
812
+ for (i = 0; i < this.length; i += 1) {
813
+ this[i].style[props] = value;
814
+ }
815
+
816
+ return this;
817
+ }
818
+
819
+ return this;
820
+ }
821
+
822
+ function each(callback) {
823
+ if (!callback) return this;
824
+ this.forEach(function (el, index) {
825
+ callback.apply(el, [el, index]);
826
+ });
827
+ return this;
828
+ }
829
+
830
+ function filter(callback) {
831
+ var result = arrayFilter(this, callback);
832
+ return $(result);
833
+ }
834
+
835
+ function html(html) {
836
+ if (typeof html === 'undefined') {
837
+ return this[0] ? this[0].innerHTML : null;
838
+ }
839
+
840
+ for (var i = 0; i < this.length; i += 1) {
841
+ this[i].innerHTML = html;
842
+ }
843
+
844
+ return this;
845
+ }
846
+
847
+ function text(text) {
848
+ if (typeof text === 'undefined') {
849
+ return this[0] ? this[0].textContent.trim() : null;
850
+ }
851
+
852
+ for (var i = 0; i < this.length; i += 1) {
853
+ this[i].textContent = text;
854
+ }
855
+
856
+ return this;
857
+ }
858
+
859
+ function is(selector) {
860
+ var window = getWindow();
861
+ var document = getDocument();
862
+ var el = this[0];
863
+ var compareWith;
864
+ var i;
865
+ if (!el || typeof selector === 'undefined') return false;
866
+
867
+ if (typeof selector === 'string') {
868
+ if (el.matches) return el.matches(selector);
869
+ if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);
870
+ if (el.msMatchesSelector) return el.msMatchesSelector(selector);
871
+ compareWith = $(selector);
872
+
873
+ for (i = 0; i < compareWith.length; i += 1) {
874
+ if (compareWith[i] === el) return true;
875
+ }
876
+
877
+ return false;
878
+ }
879
+
880
+ if (selector === document) {
881
+ return el === document;
882
+ }
883
+
884
+ if (selector === window) {
885
+ return el === window;
886
+ }
887
+
888
+ if (selector.nodeType || selector instanceof Dom7) {
889
+ compareWith = selector.nodeType ? [selector] : selector;
890
+
891
+ for (i = 0; i < compareWith.length; i += 1) {
892
+ if (compareWith[i] === el) return true;
893
+ }
894
+
895
+ return false;
896
+ }
897
+
898
+ return false;
899
+ }
900
+
901
+ function index() {
902
+ var child = this[0];
903
+ var i;
904
+
905
+ if (child) {
906
+ i = 0; // eslint-disable-next-line
907
+
908
+ while ((child = child.previousSibling) !== null) {
909
+ if (child.nodeType === 1) i += 1;
910
+ }
911
+
912
+ return i;
913
+ }
914
+
915
+ return undefined;
916
+ }
917
+
918
+ function eq(index) {
919
+ if (typeof index === 'undefined') return this;
920
+ var length = this.length;
921
+
922
+ if (index > length - 1) {
923
+ return $([]);
924
+ }
925
+
926
+ if (index < 0) {
927
+ var returnIndex = length + index;
928
+ if (returnIndex < 0) return $([]);
929
+ return $([this[returnIndex]]);
930
+ }
931
+
932
+ return $([this[index]]);
933
+ }
934
+
935
+ function append() {
936
+ var newChild;
937
+ var document = getDocument();
938
+
939
+ for (var k = 0; k < arguments.length; k += 1) {
940
+ newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];
941
+
942
+ for (var i = 0; i < this.length; i += 1) {
943
+ if (typeof newChild === 'string') {
944
+ var tempDiv = document.createElement('div');
945
+ tempDiv.innerHTML = newChild;
946
+
947
+ while (tempDiv.firstChild) {
948
+ this[i].appendChild(tempDiv.firstChild);
949
+ }
950
+ } else if (newChild instanceof Dom7) {
951
+ for (var j = 0; j < newChild.length; j += 1) {
952
+ this[i].appendChild(newChild[j]);
953
+ }
954
+ } else {
955
+ this[i].appendChild(newChild);
956
+ }
957
+ }
958
+ }
959
+
960
+ return this;
961
+ }
962
+
963
+ function prepend(newChild) {
964
+ var document = getDocument();
965
+ var i;
966
+ var j;
967
+
968
+ for (i = 0; i < this.length; i += 1) {
969
+ if (typeof newChild === 'string') {
970
+ var tempDiv = document.createElement('div');
971
+ tempDiv.innerHTML = newChild;
972
+
973
+ for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {
974
+ this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);
975
+ }
976
+ } else if (newChild instanceof Dom7) {
977
+ for (j = 0; j < newChild.length; j += 1) {
978
+ this[i].insertBefore(newChild[j], this[i].childNodes[0]);
979
+ }
980
+ } else {
981
+ this[i].insertBefore(newChild, this[i].childNodes[0]);
982
+ }
983
+ }
984
+
985
+ return this;
986
+ }
987
+
988
+ function next(selector) {
989
+ if (this.length > 0) {
990
+ if (selector) {
991
+ if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {
992
+ return $([this[0].nextElementSibling]);
993
+ }
994
+
995
+ return $([]);
996
+ }
997
+
998
+ if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);
999
+ return $([]);
1000
+ }
1001
+
1002
+ return $([]);
1003
+ }
1004
+
1005
+ function nextAll(selector) {
1006
+ var nextEls = [];
1007
+ var el = this[0];
1008
+ if (!el) return $([]);
1009
+
1010
+ while (el.nextElementSibling) {
1011
+ var _next = el.nextElementSibling; // eslint-disable-line
1012
+
1013
+ if (selector) {
1014
+ if ($(_next).is(selector)) nextEls.push(_next);
1015
+ } else nextEls.push(_next);
1016
+
1017
+ el = _next;
1018
+ }
1019
+
1020
+ return $(nextEls);
1021
+ }
1022
+
1023
+ function prev(selector) {
1024
+ if (this.length > 0) {
1025
+ var el = this[0];
1026
+
1027
+ if (selector) {
1028
+ if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {
1029
+ return $([el.previousElementSibling]);
1030
+ }
1031
+
1032
+ return $([]);
1033
+ }
1034
+
1035
+ if (el.previousElementSibling) return $([el.previousElementSibling]);
1036
+ return $([]);
1037
+ }
1038
+
1039
+ return $([]);
1040
+ }
1041
+
1042
+ function prevAll(selector) {
1043
+ var prevEls = [];
1044
+ var el = this[0];
1045
+ if (!el) return $([]);
1046
+
1047
+ while (el.previousElementSibling) {
1048
+ var _prev = el.previousElementSibling; // eslint-disable-line
1049
+
1050
+ if (selector) {
1051
+ if ($(_prev).is(selector)) prevEls.push(_prev);
1052
+ } else prevEls.push(_prev);
1053
+
1054
+ el = _prev;
1055
+ }
1056
+
1057
+ return $(prevEls);
1058
+ }
1059
+
1060
+ function parent(selector) {
1061
+ var parents = []; // eslint-disable-line
1062
+
1063
+ for (var i = 0; i < this.length; i += 1) {
1064
+ if (this[i].parentNode !== null) {
1065
+ if (selector) {
1066
+ if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);
1067
+ } else {
1068
+ parents.push(this[i].parentNode);
1069
+ }
1070
+ }
1071
+ }
1072
+
1073
+ return $(parents);
1074
+ }
1075
+
1076
+ function parents(selector) {
1077
+ var parents = []; // eslint-disable-line
1078
+
1079
+ for (var i = 0; i < this.length; i += 1) {
1080
+ var _parent = this[i].parentNode; // eslint-disable-line
1081
+
1082
+ while (_parent) {
1083
+ if (selector) {
1084
+ if ($(_parent).is(selector)) parents.push(_parent);
1085
+ } else {
1086
+ parents.push(_parent);
1087
+ }
1088
+
1089
+ _parent = _parent.parentNode;
1090
+ }
1091
+ }
1092
+
1093
+ return $(parents);
1094
+ }
1095
+
1096
+ function closest(selector) {
1097
+ var closest = this; // eslint-disable-line
1098
+
1099
+ if (typeof selector === 'undefined') {
1100
+ return $([]);
1101
+ }
1102
+
1103
+ if (!closest.is(selector)) {
1104
+ closest = closest.parents(selector).eq(0);
1105
+ }
1106
+
1107
+ return closest;
1108
+ }
1109
+
1110
+ function find(selector) {
1111
+ var foundElements = [];
1112
+
1113
+ for (var i = 0; i < this.length; i += 1) {
1114
+ var found = this[i].querySelectorAll(selector);
1115
+
1116
+ for (var j = 0; j < found.length; j += 1) {
1117
+ foundElements.push(found[j]);
1118
+ }
1119
+ }
1120
+
1121
+ return $(foundElements);
1122
+ }
1123
+
1124
+ function children(selector) {
1125
+ var children = []; // eslint-disable-line
1126
+
1127
+ for (var i = 0; i < this.length; i += 1) {
1128
+ var childNodes = this[i].children;
1129
+
1130
+ for (var j = 0; j < childNodes.length; j += 1) {
1131
+ if (!selector || $(childNodes[j]).is(selector)) {
1132
+ children.push(childNodes[j]);
1133
+ }
1134
+ }
1135
+ }
1136
+
1137
+ return $(children);
1138
+ }
1139
+
1140
+ function remove() {
1141
+ for (var i = 0; i < this.length; i += 1) {
1142
+ if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);
1143
+ }
1144
+
1145
+ return this;
1146
+ }
1147
+
1148
+ var Methods = {
1149
+ addClass: addClass,
1150
+ removeClass: removeClass,
1151
+ hasClass: hasClass,
1152
+ toggleClass: toggleClass,
1153
+ attr: attr,
1154
+ removeAttr: removeAttr,
1155
+ transform: transform,
1156
+ transition: transition,
1157
+ on: on,
1158
+ off: off,
1159
+ trigger: trigger,
1160
+ transitionEnd: transitionEnd,
1161
+ outerWidth: outerWidth,
1162
+ outerHeight: outerHeight,
1163
+ styles: styles,
1164
+ offset: offset,
1165
+ css: css,
1166
+ each: each,
1167
+ html: html,
1168
+ text: text,
1169
+ is: is,
1170
+ index: index,
1171
+ eq: eq,
1172
+ append: append,
1173
+ prepend: prepend,
1174
+ next: next,
1175
+ nextAll: nextAll,
1176
+ prev: prev,
1177
+ prevAll: prevAll,
1178
+ parent: parent,
1179
+ parents: parents,
1180
+ closest: closest,
1181
+ find: find,
1182
+ children: children,
1183
+ filter: filter,
1184
+ remove: remove
1185
+ };
1186
+ Object.keys(Methods).forEach(function (methodName) {
1187
+ $.fn[methodName] = Methods[methodName];
1188
+ });
1189
+
1190
+ function deleteProps(obj) {
1191
+ var object = obj;
1192
+ Object.keys(object).forEach(function (key) {
1193
+ try {
1194
+ object[key] = null;
1195
+ } catch (e) {// no getter for object
1196
+ }
1197
+
1198
+ try {
1199
+ delete object[key];
1200
+ } catch (e) {// something got wrong
1201
+ }
1202
+ });
1203
+ }
1204
+
1205
+ function nextTick(callback, delay) {
1206
+ if (delay === void 0) {
1207
+ delay = 0;
1208
+ }
1209
+
1210
+ return setTimeout(callback, delay);
1211
+ }
1212
+
1213
+ function now() {
1214
+ return Date.now();
1215
+ }
1216
+
1217
+ function getTranslate(el, axis) {
1218
+ if (axis === void 0) {
1219
+ axis = 'x';
1220
+ }
1221
+
1222
+ var window = getWindow();
1223
+ var matrix;
1224
+ var curTransform;
1225
+ var transformMatrix;
1226
+ var curStyle = window.getComputedStyle(el, null);
1227
+
1228
+ if (window.WebKitCSSMatrix) {
1229
+ curTransform = curStyle.transform || curStyle.webkitTransform;
1230
+
1231
+ if (curTransform.split(',').length > 6) {
1232
+ curTransform = curTransform.split(', ').map(function (a) {
1233
+ return a.replace(',', '.');
1234
+ }).join(', ');
1235
+ } // Some old versions of Webkit choke when 'none' is passed; pass
1236
+ // empty string instead in this case
1237
+
1238
+
1239
+ transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
1240
+ } else {
1241
+ transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
1242
+ matrix = transformMatrix.toString().split(',');
1243
+ }
1244
+
1245
+ if (axis === 'x') {
1246
+ // Latest Chrome and webkits Fix
1247
+ if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix
1248
+ else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers
1249
+ else curTransform = parseFloat(matrix[4]);
1250
+ }
1251
+
1252
+ if (axis === 'y') {
1253
+ // Latest Chrome and webkits Fix
1254
+ if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix
1255
+ else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers
1256
+ else curTransform = parseFloat(matrix[5]);
1257
+ }
1258
+
1259
+ return curTransform || 0;
1260
+ }
1261
+
1262
+ function isObject$1(o) {
1263
+ return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;
1264
+ }
1265
+
1266
+ function extend$1() {
1267
+ var to = Object(arguments.length <= 0 ? undefined : arguments[0]);
1268
+
1269
+ for (var i = 1; i < arguments.length; i += 1) {
1270
+ var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];
1271
+
1272
+ if (nextSource !== undefined && nextSource !== null) {
1273
+ var keysArray = Object.keys(Object(nextSource));
1274
+
1275
+ for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
1276
+ var nextKey = keysArray[nextIndex];
1277
+ var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
1278
+
1279
+ if (desc !== undefined && desc.enumerable) {
1280
+ if (isObject$1(to[nextKey]) && isObject$1(nextSource[nextKey])) {
1281
+ extend$1(to[nextKey], nextSource[nextKey]);
1282
+ } else if (!isObject$1(to[nextKey]) && isObject$1(nextSource[nextKey])) {
1283
+ to[nextKey] = {};
1284
+ extend$1(to[nextKey], nextSource[nextKey]);
1285
+ } else {
1286
+ to[nextKey] = nextSource[nextKey];
1287
+ }
1288
+ }
1289
+ }
1290
+ }
1291
+ }
1292
+
1293
+ return to;
1294
+ }
1295
+
1296
+ function bindModuleMethods(instance, obj) {
1297
+ Object.keys(obj).forEach(function (key) {
1298
+ if (isObject$1(obj[key])) {
1299
+ Object.keys(obj[key]).forEach(function (subKey) {
1300
+ if (typeof obj[key][subKey] === 'function') {
1301
+ obj[key][subKey] = obj[key][subKey].bind(instance);
1302
+ }
1303
+ });
1304
+ }
1305
+
1306
+ instance[key] = obj[key];
1307
+ });
1308
+ }
1309
+
1310
+ var support;
1311
+
1312
+ function calcSupport() {
1313
+ var window = getWindow();
1314
+ var document = getDocument();
1315
+ return {
1316
+ touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),
1317
+ pointerEvents: !!window.PointerEvent && 'maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints >= 0,
1318
+ observer: function checkObserver() {
1319
+ return 'MutationObserver' in window || 'WebkitMutationObserver' in window;
1320
+ }(),
1321
+ passiveListener: function checkPassiveListener() {
1322
+ var supportsPassive = false;
1323
+
1324
+ try {
1325
+ var opts = Object.defineProperty({}, 'passive', {
1326
+ // eslint-disable-next-line
1327
+ get: function get() {
1328
+ supportsPassive = true;
1329
+ }
1330
+ });
1331
+ window.addEventListener('testPassiveListener', null, opts);
1332
+ } catch (e) {// No support
1333
+ }
1334
+
1335
+ return supportsPassive;
1336
+ }(),
1337
+ gestures: function checkGestures() {
1338
+ return 'ongesturestart' in window;
1339
+ }()
1340
+ };
1341
+ }
1342
+
1343
+ function getSupport() {
1344
+ if (!support) {
1345
+ support = calcSupport();
1346
+ }
1347
+
1348
+ return support;
1349
+ }
1350
+
1351
+ var device;
1352
+
1353
+ function calcDevice(_temp) {
1354
+ var _ref = _temp === void 0 ? {} : _temp,
1355
+ userAgent = _ref.userAgent;
1356
+
1357
+ var support = getSupport();
1358
+ var window = getWindow();
1359
+ var platform = window.navigator.platform;
1360
+ var ua = userAgent || window.navigator.userAgent;
1361
+ var device = {
1362
+ ios: false,
1363
+ android: false
1364
+ };
1365
+ var screenWidth = window.screen.width;
1366
+ var screenHeight = window.screen.height;
1367
+ var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
1368
+
1369
+ var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
1370
+ var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
1371
+ var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
1372
+ var windows = platform === 'Win32';
1373
+ var macos = platform === 'MacIntel'; // iPadOs 13 fix
1374
+
1375
+ var iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];
1376
+
1377
+ if (!ipad && macos && support.touch && iPadScreens.indexOf(screenWidth + "x" + screenHeight) >= 0) {
1378
+ ipad = ua.match(/(Version)\/([\d.]+)/);
1379
+ if (!ipad) ipad = [0, 1, '13_0_0'];
1380
+ macos = false;
1381
+ } // Android
1382
+
1383
+
1384
+ if (android && !windows) {
1385
+ device.os = 'android';
1386
+ device.android = true;
1387
+ }
1388
+
1389
+ if (ipad || iphone || ipod) {
1390
+ device.os = 'ios';
1391
+ device.ios = true;
1392
+ } // Export object
1393
+
1394
+
1395
+ return device;
1396
+ }
1397
+
1398
+ function getDevice(overrides) {
1399
+ if (overrides === void 0) {
1400
+ overrides = {};
1401
+ }
1402
+
1403
+ if (!device) {
1404
+ device = calcDevice(overrides);
1405
+ }
1406
+
1407
+ return device;
1408
+ }
1409
+
1410
+ var browser;
1411
+
1412
+ function calcBrowser() {
1413
+ var window = getWindow();
1414
+
1415
+ function isSafari() {
1416
+ var ua = window.navigator.userAgent.toLowerCase();
1417
+ return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;
1418
+ }
1419
+
1420
+ return {
1421
+ isEdge: !!window.navigator.userAgent.match(/Edge/g),
1422
+ isSafari: isSafari(),
1423
+ isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)
1424
+ };
1425
+ }
1426
+
1427
+ function getBrowser() {
1428
+ if (!browser) {
1429
+ browser = calcBrowser();
1430
+ }
1431
+
1432
+ return browser;
1433
+ }
1434
+
1435
+ var Resize = {
1436
+ name: 'resize',
1437
+ create: function create() {
1438
+ var swiper = this;
1439
+ extend$1(swiper, {
1440
+ resize: {
1441
+ resizeHandler: function resizeHandler() {
1442
+ if (!swiper || swiper.destroyed || !swiper.initialized) return;
1443
+ swiper.emit('beforeResize');
1444
+ swiper.emit('resize');
1445
+ },
1446
+ orientationChangeHandler: function orientationChangeHandler() {
1447
+ if (!swiper || swiper.destroyed || !swiper.initialized) return;
1448
+ swiper.emit('orientationchange');
1449
+ }
1450
+ }
1451
+ });
1452
+ },
1453
+ on: {
1454
+ init: function init(swiper) {
1455
+ var window = getWindow(); // Emit resize
1456
+
1457
+ window.addEventListener('resize', swiper.resize.resizeHandler); // Emit orientationchange
1458
+
1459
+ window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
1460
+ },
1461
+ destroy: function destroy(swiper) {
1462
+ var window = getWindow();
1463
+ window.removeEventListener('resize', swiper.resize.resizeHandler);
1464
+ window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
1465
+ }
1466
+ }
1467
+ };
1468
+
1469
+ var Observer = {
1470
+ attach: function attach(target, options) {
1471
+ if (options === void 0) {
1472
+ options = {};
1473
+ }
1474
+
1475
+ var window = getWindow();
1476
+ var swiper = this;
1477
+ var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
1478
+ var observer = new ObserverFunc(function (mutations) {
1479
+ // The observerUpdate event should only be triggered
1480
+ // once despite the number of mutations. Additional
1481
+ // triggers are redundant and are very costly
1482
+ if (mutations.length === 1) {
1483
+ swiper.emit('observerUpdate', mutations[0]);
1484
+ return;
1485
+ }
1486
+
1487
+ var observerUpdate = function observerUpdate() {
1488
+ swiper.emit('observerUpdate', mutations[0]);
1489
+ };
1490
+
1491
+ if (window.requestAnimationFrame) {
1492
+ window.requestAnimationFrame(observerUpdate);
1493
+ } else {
1494
+ window.setTimeout(observerUpdate, 0);
1495
+ }
1496
+ });
1497
+ observer.observe(target, {
1498
+ attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
1499
+ childList: typeof options.childList === 'undefined' ? true : options.childList,
1500
+ characterData: typeof options.characterData === 'undefined' ? true : options.characterData
1501
+ });
1502
+ swiper.observer.observers.push(observer);
1503
+ },
1504
+ init: function init() {
1505
+ var swiper = this;
1506
+ if (!swiper.support.observer || !swiper.params.observer) return;
1507
+
1508
+ if (swiper.params.observeParents) {
1509
+ var containerParents = swiper.$el.parents();
1510
+
1511
+ for (var i = 0; i < containerParents.length; i += 1) {
1512
+ swiper.observer.attach(containerParents[i]);
1513
+ }
1514
+ } // Observe container
1515
+
1516
+
1517
+ swiper.observer.attach(swiper.$el[0], {
1518
+ childList: swiper.params.observeSlideChildren
1519
+ }); // Observe wrapper
1520
+
1521
+ swiper.observer.attach(swiper.$wrapperEl[0], {
1522
+ attributes: false
1523
+ });
1524
+ },
1525
+ destroy: function destroy() {
1526
+ var swiper = this;
1527
+ swiper.observer.observers.forEach(function (observer) {
1528
+ observer.disconnect();
1529
+ });
1530
+ swiper.observer.observers = [];
1531
+ }
1532
+ };
1533
+ var Observer$1 = {
1534
+ name: 'observer',
1535
+ params: {
1536
+ observer: false,
1537
+ observeParents: false,
1538
+ observeSlideChildren: false
1539
+ },
1540
+ create: function create() {
1541
+ var swiper = this;
1542
+ bindModuleMethods(swiper, {
1543
+ observer: _extends({}, Observer, {
1544
+ observers: []
1545
+ })
1546
+ });
1547
+ },
1548
+ on: {
1549
+ init: function init(swiper) {
1550
+ swiper.observer.init();
1551
+ },
1552
+ destroy: function destroy(swiper) {
1553
+ swiper.observer.destroy();
1554
+ }
1555
+ }
1556
+ };
1557
+
1558
+ var modular = {
1559
+ useParams: function useParams(instanceParams) {
1560
+ var instance = this;
1561
+ if (!instance.modules) return;
1562
+ Object.keys(instance.modules).forEach(function (moduleName) {
1563
+ var module = instance.modules[moduleName]; // Extend params
1564
+
1565
+ if (module.params) {
1566
+ extend$1(instanceParams, module.params);
1567
+ }
1568
+ });
1569
+ },
1570
+ useModules: function useModules(modulesParams) {
1571
+ if (modulesParams === void 0) {
1572
+ modulesParams = {};
1573
+ }
1574
+
1575
+ var instance = this;
1576
+ if (!instance.modules) return;
1577
+ Object.keys(instance.modules).forEach(function (moduleName) {
1578
+ var module = instance.modules[moduleName];
1579
+ var moduleParams = modulesParams[moduleName] || {}; // Add event listeners
1580
+
1581
+ if (module.on && instance.on) {
1582
+ Object.keys(module.on).forEach(function (moduleEventName) {
1583
+ instance.on(moduleEventName, module.on[moduleEventName]);
1584
+ });
1585
+ } // Module create callback
1586
+
1587
+
1588
+ if (module.create) {
1589
+ module.create.bind(instance)(moduleParams);
1590
+ }
1591
+ });
1592
+ }
1593
+ };
1594
+
1595
+ /* eslint-disable no-underscore-dangle */
1596
+ var eventsEmitter = {
1597
+ on: function on(events, handler, priority) {
1598
+ var self = this;
1599
+ if (typeof handler !== 'function') return self;
1600
+ var method = priority ? 'unshift' : 'push';
1601
+ events.split(' ').forEach(function (event) {
1602
+ if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
1603
+ self.eventsListeners[event][method](handler);
1604
+ });
1605
+ return self;
1606
+ },
1607
+ once: function once(events, handler, priority) {
1608
+ var self = this;
1609
+ if (typeof handler !== 'function') return self;
1610
+
1611
+ function onceHandler() {
1612
+ self.off(events, onceHandler);
1613
+
1614
+ if (onceHandler.__emitterProxy) {
1615
+ delete onceHandler.__emitterProxy;
1616
+ }
1617
+
1618
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1619
+ args[_key] = arguments[_key];
1620
+ }
1621
+
1622
+ handler.apply(self, args);
1623
+ }
1624
+
1625
+ onceHandler.__emitterProxy = handler;
1626
+ return self.on(events, onceHandler, priority);
1627
+ },
1628
+ onAny: function onAny(handler, priority) {
1629
+ var self = this;
1630
+ if (typeof handler !== 'function') return self;
1631
+ var method = priority ? 'unshift' : 'push';
1632
+
1633
+ if (self.eventsAnyListeners.indexOf(handler) < 0) {
1634
+ self.eventsAnyListeners[method](handler);
1635
+ }
1636
+
1637
+ return self;
1638
+ },
1639
+ offAny: function offAny(handler) {
1640
+ var self = this;
1641
+ if (!self.eventsAnyListeners) return self;
1642
+ var index = self.eventsAnyListeners.indexOf(handler);
1643
+
1644
+ if (index >= 0) {
1645
+ self.eventsAnyListeners.splice(index, 1);
1646
+ }
1647
+
1648
+ return self;
1649
+ },
1650
+ off: function off(events, handler) {
1651
+ var self = this;
1652
+ if (!self.eventsListeners) return self;
1653
+ events.split(' ').forEach(function (event) {
1654
+ if (typeof handler === 'undefined') {
1655
+ self.eventsListeners[event] = [];
1656
+ } else if (self.eventsListeners[event]) {
1657
+ self.eventsListeners[event].forEach(function (eventHandler, index) {
1658
+ if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {
1659
+ self.eventsListeners[event].splice(index, 1);
1660
+ }
1661
+ });
1662
+ }
1663
+ });
1664
+ return self;
1665
+ },
1666
+ emit: function emit() {
1667
+ var self = this;
1668
+ if (!self.eventsListeners) return self;
1669
+ var events;
1670
+ var data;
1671
+ var context;
1672
+
1673
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
1674
+ args[_key2] = arguments[_key2];
1675
+ }
1676
+
1677
+ if (typeof args[0] === 'string' || Array.isArray(args[0])) {
1678
+ events = args[0];
1679
+ data = args.slice(1, args.length);
1680
+ context = self;
1681
+ } else {
1682
+ events = args[0].events;
1683
+ data = args[0].data;
1684
+ context = args[0].context || self;
1685
+ }
1686
+
1687
+ data.unshift(context);
1688
+ var eventsArray = Array.isArray(events) ? events : events.split(' ');
1689
+ eventsArray.forEach(function (event) {
1690
+ if (self.eventsAnyListeners && self.eventsAnyListeners.length) {
1691
+ self.eventsAnyListeners.forEach(function (eventHandler) {
1692
+ eventHandler.apply(context, [event].concat(data));
1693
+ });
1694
+ }
1695
+
1696
+ if (self.eventsListeners && self.eventsListeners[event]) {
1697
+ self.eventsListeners[event].forEach(function (eventHandler) {
1698
+ eventHandler.apply(context, data);
1699
+ });
1700
+ }
1701
+ });
1702
+ return self;
1703
+ }
1704
+ };
1705
+
1706
+ function updateSize() {
1707
+ var swiper = this;
1708
+ var width;
1709
+ var height;
1710
+ var $el = swiper.$el;
1711
+
1712
+ if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {
1713
+ width = swiper.params.width;
1714
+ } else {
1715
+ width = $el[0].clientWidth;
1716
+ }
1717
+
1718
+ if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {
1719
+ height = swiper.params.height;
1720
+ } else {
1721
+ height = $el[0].clientHeight;
1722
+ }
1723
+
1724
+ if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
1725
+ return;
1726
+ } // Subtract paddings
1727
+
1728
+
1729
+ width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);
1730
+ height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);
1731
+ if (Number.isNaN(width)) width = 0;
1732
+ if (Number.isNaN(height)) height = 0;
1733
+ extend$1(swiper, {
1734
+ width: width,
1735
+ height: height,
1736
+ size: swiper.isHorizontal() ? width : height
1737
+ });
1738
+ }
1739
+
1740
+ function updateSlides() {
1741
+ var swiper = this;
1742
+ var window = getWindow();
1743
+ var params = swiper.params;
1744
+ var $wrapperEl = swiper.$wrapperEl,
1745
+ swiperSize = swiper.size,
1746
+ rtl = swiper.rtlTranslate,
1747
+ wrongRTL = swiper.wrongRTL;
1748
+ var isVirtual = swiper.virtual && params.virtual.enabled;
1749
+ var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
1750
+ var slides = $wrapperEl.children("." + swiper.params.slideClass);
1751
+ var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
1752
+ var snapGrid = [];
1753
+ var slidesGrid = [];
1754
+ var slidesSizesGrid = [];
1755
+
1756
+ function slidesForMargin(slideEl, slideIndex) {
1757
+ if (!params.cssMode) return true;
1758
+
1759
+ if (slideIndex === slides.length - 1) {
1760
+ return false;
1761
+ }
1762
+
1763
+ return true;
1764
+ }
1765
+
1766
+ var offsetBefore = params.slidesOffsetBefore;
1767
+
1768
+ if (typeof offsetBefore === 'function') {
1769
+ offsetBefore = params.slidesOffsetBefore.call(swiper);
1770
+ }
1771
+
1772
+ var offsetAfter = params.slidesOffsetAfter;
1773
+
1774
+ if (typeof offsetAfter === 'function') {
1775
+ offsetAfter = params.slidesOffsetAfter.call(swiper);
1776
+ }
1777
+
1778
+ var previousSnapGridLength = swiper.snapGrid.length;
1779
+ var previousSlidesGridLength = swiper.slidesGrid.length;
1780
+ var spaceBetween = params.spaceBetween;
1781
+ var slidePosition = -offsetBefore;
1782
+ var prevSlideSize = 0;
1783
+ var index = 0;
1784
+
1785
+ if (typeof swiperSize === 'undefined') {
1786
+ return;
1787
+ }
1788
+
1789
+ if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
1790
+ spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;
1791
+ }
1792
+
1793
+ swiper.virtualSize = -spaceBetween; // reset margins
1794
+
1795
+ if (rtl) slides.css({
1796
+ marginLeft: '',
1797
+ marginTop: ''
1798
+ });else slides.css({
1799
+ marginRight: '',
1800
+ marginBottom: ''
1801
+ });
1802
+ var slidesNumberEvenToRows;
1803
+
1804
+ if (params.slidesPerColumn > 1) {
1805
+ if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
1806
+ slidesNumberEvenToRows = slidesLength;
1807
+ } else {
1808
+ slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
1809
+ }
1810
+
1811
+ if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
1812
+ slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
1813
+ }
1814
+ } // Calc slides
1815
+
1816
+
1817
+ var slideSize;
1818
+ var slidesPerColumn = params.slidesPerColumn;
1819
+ var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
1820
+ var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);
1821
+
1822
+ for (var i = 0; i < slidesLength; i += 1) {
1823
+ slideSize = 0;
1824
+ var slide = slides.eq(i);
1825
+
1826
+ if (params.slidesPerColumn > 1) {
1827
+ // Set slides order
1828
+ var newSlideOrderIndex = void 0;
1829
+ var column = void 0;
1830
+ var row = void 0;
1831
+
1832
+ if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {
1833
+ var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));
1834
+ var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
1835
+ var columnsInGroup = groupIndex === 0 ? params.slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);
1836
+ row = Math.floor(slideIndexInGroup / columnsInGroup);
1837
+ column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup;
1838
+ newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;
1839
+ slide.css({
1840
+ '-webkit-box-ordinal-group': newSlideOrderIndex,
1841
+ '-moz-box-ordinal-group': newSlideOrderIndex,
1842
+ '-ms-flex-order': newSlideOrderIndex,
1843
+ '-webkit-order': newSlideOrderIndex,
1844
+ order: newSlideOrderIndex
1845
+ });
1846
+ } else if (params.slidesPerColumnFill === 'column') {
1847
+ column = Math.floor(i / slidesPerColumn);
1848
+ row = i - column * slidesPerColumn;
1849
+
1850
+ if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) {
1851
+ row += 1;
1852
+
1853
+ if (row >= slidesPerColumn) {
1854
+ row = 0;
1855
+ column += 1;
1856
+ }
1857
+ }
1858
+ } else {
1859
+ row = Math.floor(i / slidesPerRow);
1860
+ column = i - row * slidesPerRow;
1861
+ }
1862
+
1863
+ slide.css("margin-" + (swiper.isHorizontal() ? 'top' : 'left'), row !== 0 && params.spaceBetween && params.spaceBetween + "px");
1864
+ }
1865
+
1866
+ if (slide.css('display') === 'none') continue; // eslint-disable-line
1867
+
1868
+ if (params.slidesPerView === 'auto') {
1869
+ var slideStyles = window.getComputedStyle(slide[0], null);
1870
+ var currentTransform = slide[0].style.transform;
1871
+ var currentWebKitTransform = slide[0].style.webkitTransform;
1872
+
1873
+ if (currentTransform) {
1874
+ slide[0].style.transform = 'none';
1875
+ }
1876
+
1877
+ if (currentWebKitTransform) {
1878
+ slide[0].style.webkitTransform = 'none';
1879
+ }
1880
+
1881
+ if (params.roundLengths) {
1882
+ slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);
1883
+ } else {
1884
+ // eslint-disable-next-line
1885
+ if (swiper.isHorizontal()) {
1886
+ var width = parseFloat(slideStyles.getPropertyValue('width') || 0);
1887
+ var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left') || 0);
1888
+ var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right') || 0);
1889
+ var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left') || 0);
1890
+ var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right') || 0);
1891
+ var boxSizing = slideStyles.getPropertyValue('box-sizing');
1892
+
1893
+ if (boxSizing && boxSizing === 'border-box') {
1894
+ slideSize = width + marginLeft + marginRight;
1895
+ } else {
1896
+ var _slide$ = slide[0],
1897
+ clientWidth = _slide$.clientWidth,
1898
+ offsetWidth = _slide$.offsetWidth;
1899
+ slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);
1900
+ }
1901
+ } else {
1902
+ var height = parseFloat(slideStyles.getPropertyValue('height') || 0);
1903
+ var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top') || 0);
1904
+ var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom') || 0);
1905
+ var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top') || 0);
1906
+ var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom') || 0);
1907
+
1908
+ var _boxSizing = slideStyles.getPropertyValue('box-sizing');
1909
+
1910
+ if (_boxSizing && _boxSizing === 'border-box') {
1911
+ slideSize = height + marginTop + marginBottom;
1912
+ } else {
1913
+ var _slide$2 = slide[0],
1914
+ clientHeight = _slide$2.clientHeight,
1915
+ offsetHeight = _slide$2.offsetHeight;
1916
+ slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom + (offsetHeight - clientHeight);
1917
+ }
1918
+ }
1919
+ }
1920
+
1921
+ if (currentTransform) {
1922
+ slide[0].style.transform = currentTransform;
1923
+ }
1924
+
1925
+ if (currentWebKitTransform) {
1926
+ slide[0].style.webkitTransform = currentWebKitTransform;
1927
+ }
1928
+
1929
+ if (params.roundLengths) slideSize = Math.floor(slideSize);
1930
+ } else {
1931
+ slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
1932
+ if (params.roundLengths) slideSize = Math.floor(slideSize);
1933
+
1934
+ if (slides[i]) {
1935
+ if (swiper.isHorizontal()) {
1936
+ slides[i].style.width = slideSize + "px";
1937
+ } else {
1938
+ slides[i].style.height = slideSize + "px";
1939
+ }
1940
+ }
1941
+ }
1942
+
1943
+ if (slides[i]) {
1944
+ slides[i].swiperSlideSize = slideSize;
1945
+ }
1946
+
1947
+ slidesSizesGrid.push(slideSize);
1948
+
1949
+ if (params.centeredSlides) {
1950
+ slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
1951
+ if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
1952
+ if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
1953
+ if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
1954
+ if (params.roundLengths) slidePosition = Math.floor(slidePosition);
1955
+ if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
1956
+ slidesGrid.push(slidePosition);
1957
+ } else {
1958
+ if (params.roundLengths) slidePosition = Math.floor(slidePosition);
1959
+ if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
1960
+ slidesGrid.push(slidePosition);
1961
+ slidePosition = slidePosition + slideSize + spaceBetween;
1962
+ }
1963
+
1964
+ swiper.virtualSize += slideSize + spaceBetween;
1965
+ prevSlideSize = slideSize;
1966
+ index += 1;
1967
+ }
1968
+
1969
+ swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
1970
+ var newSlidesGrid;
1971
+
1972
+ if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
1973
+ $wrapperEl.css({
1974
+ width: swiper.virtualSize + params.spaceBetween + "px"
1975
+ });
1976
+ }
1977
+
1978
+ if (params.setWrapperSize) {
1979
+ if (swiper.isHorizontal()) $wrapperEl.css({
1980
+ width: swiper.virtualSize + params.spaceBetween + "px"
1981
+ });else $wrapperEl.css({
1982
+ height: swiper.virtualSize + params.spaceBetween + "px"
1983
+ });
1984
+ }
1985
+
1986
+ if (params.slidesPerColumn > 1) {
1987
+ swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
1988
+ swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
1989
+ if (swiper.isHorizontal()) $wrapperEl.css({
1990
+ width: swiper.virtualSize + params.spaceBetween + "px"
1991
+ });else $wrapperEl.css({
1992
+ height: swiper.virtualSize + params.spaceBetween + "px"
1993
+ });
1994
+
1995
+ if (params.centeredSlides) {
1996
+ newSlidesGrid = [];
1997
+
1998
+ for (var _i = 0; _i < snapGrid.length; _i += 1) {
1999
+ var slidesGridItem = snapGrid[_i];
2000
+ if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
2001
+ if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
2002
+ }
2003
+
2004
+ snapGrid = newSlidesGrid;
2005
+ }
2006
+ } // Remove last grid elements depending on width
2007
+
2008
+
2009
+ if (!params.centeredSlides) {
2010
+ newSlidesGrid = [];
2011
+
2012
+ for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) {
2013
+ var _slidesGridItem = snapGrid[_i2];
2014
+ if (params.roundLengths) _slidesGridItem = Math.floor(_slidesGridItem);
2015
+
2016
+ if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) {
2017
+ newSlidesGrid.push(_slidesGridItem);
2018
+ }
2019
+ }
2020
+
2021
+ snapGrid = newSlidesGrid;
2022
+
2023
+ if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
2024
+ snapGrid.push(swiper.virtualSize - swiperSize);
2025
+ }
2026
+ }
2027
+
2028
+ if (snapGrid.length === 0) snapGrid = [0];
2029
+
2030
+ if (params.spaceBetween !== 0) {
2031
+ if (swiper.isHorizontal()) {
2032
+ if (rtl) slides.filter(slidesForMargin).css({
2033
+ marginLeft: spaceBetween + "px"
2034
+ });else slides.filter(slidesForMargin).css({
2035
+ marginRight: spaceBetween + "px"
2036
+ });
2037
+ } else slides.filter(slidesForMargin).css({
2038
+ marginBottom: spaceBetween + "px"
2039
+ });
2040
+ }
2041
+
2042
+ if (params.centeredSlides && params.centeredSlidesBounds) {
2043
+ var allSlidesSize = 0;
2044
+ slidesSizesGrid.forEach(function (slideSizeValue) {
2045
+ allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
2046
+ });
2047
+ allSlidesSize -= params.spaceBetween;
2048
+ var maxSnap = allSlidesSize - swiperSize;
2049
+ snapGrid = snapGrid.map(function (snap) {
2050
+ if (snap < 0) return -offsetBefore;
2051
+ if (snap > maxSnap) return maxSnap + offsetAfter;
2052
+ return snap;
2053
+ });
2054
+ }
2055
+
2056
+ if (params.centerInsufficientSlides) {
2057
+ var _allSlidesSize = 0;
2058
+ slidesSizesGrid.forEach(function (slideSizeValue) {
2059
+ _allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
2060
+ });
2061
+ _allSlidesSize -= params.spaceBetween;
2062
+
2063
+ if (_allSlidesSize < swiperSize) {
2064
+ var allSlidesOffset = (swiperSize - _allSlidesSize) / 2;
2065
+ snapGrid.forEach(function (snap, snapIndex) {
2066
+ snapGrid[snapIndex] = snap - allSlidesOffset;
2067
+ });
2068
+ slidesGrid.forEach(function (snap, snapIndex) {
2069
+ slidesGrid[snapIndex] = snap + allSlidesOffset;
2070
+ });
2071
+ }
2072
+ }
2073
+
2074
+ extend$1(swiper, {
2075
+ slides: slides,
2076
+ snapGrid: snapGrid,
2077
+ slidesGrid: slidesGrid,
2078
+ slidesSizesGrid: slidesSizesGrid
2079
+ });
2080
+
2081
+ if (slidesLength !== previousSlidesLength) {
2082
+ swiper.emit('slidesLengthChange');
2083
+ }
2084
+
2085
+ if (snapGrid.length !== previousSnapGridLength) {
2086
+ if (swiper.params.watchOverflow) swiper.checkOverflow();
2087
+ swiper.emit('snapGridLengthChange');
2088
+ }
2089
+
2090
+ if (slidesGrid.length !== previousSlidesGridLength) {
2091
+ swiper.emit('slidesGridLengthChange');
2092
+ }
2093
+
2094
+ if (params.watchSlidesProgress || params.watchSlidesVisibility) {
2095
+ swiper.updateSlidesOffset();
2096
+ }
2097
+ }
2098
+
2099
+ function updateAutoHeight(speed) {
2100
+ var swiper = this;
2101
+ var activeSlides = [];
2102
+ var newHeight = 0;
2103
+ var i;
2104
+
2105
+ if (typeof speed === 'number') {
2106
+ swiper.setTransition(speed);
2107
+ } else if (speed === true) {
2108
+ swiper.setTransition(swiper.params.speed);
2109
+ } // Find slides currently in view
2110
+
2111
+
2112
+ if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
2113
+ if (swiper.params.centeredSlides) {
2114
+ swiper.visibleSlides.each(function (slide) {
2115
+ activeSlides.push(slide);
2116
+ });
2117
+ } else {
2118
+ for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
2119
+ var index = swiper.activeIndex + i;
2120
+ if (index > swiper.slides.length) break;
2121
+ activeSlides.push(swiper.slides.eq(index)[0]);
2122
+ }
2123
+ }
2124
+ } else {
2125
+ activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
2126
+ } // Find new height from highest slide in view
2127
+
2128
+
2129
+ for (i = 0; i < activeSlides.length; i += 1) {
2130
+ if (typeof activeSlides[i] !== 'undefined') {
2131
+ var height = activeSlides[i].offsetHeight;
2132
+ newHeight = height > newHeight ? height : newHeight;
2133
+ }
2134
+ } // Update Height
2135
+
2136
+
2137
+ if (newHeight) swiper.$wrapperEl.css('height', newHeight + "px");
2138
+ }
2139
+
2140
+ function updateSlidesOffset() {
2141
+ var swiper = this;
2142
+ var slides = swiper.slides;
2143
+
2144
+ for (var i = 0; i < slides.length; i += 1) {
2145
+ slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
2146
+ }
2147
+ }
2148
+
2149
+ function updateSlidesProgress(translate) {
2150
+ if (translate === void 0) {
2151
+ translate = this && this.translate || 0;
2152
+ }
2153
+
2154
+ var swiper = this;
2155
+ var params = swiper.params;
2156
+ var slides = swiper.slides,
2157
+ rtl = swiper.rtlTranslate;
2158
+ if (slides.length === 0) return;
2159
+ if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
2160
+ var offsetCenter = -translate;
2161
+ if (rtl) offsetCenter = translate; // Visible Slides
2162
+
2163
+ slides.removeClass(params.slideVisibleClass);
2164
+ swiper.visibleSlidesIndexes = [];
2165
+ swiper.visibleSlides = [];
2166
+
2167
+ for (var i = 0; i < slides.length; i += 1) {
2168
+ var slide = slides[i];
2169
+ var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + params.spaceBetween);
2170
+
2171
+ if (params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) {
2172
+ var slideBefore = -(offsetCenter - slide.swiperSlideOffset);
2173
+ var slideAfter = slideBefore + swiper.slidesSizesGrid[i];
2174
+ var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
2175
+
2176
+ if (isVisible) {
2177
+ swiper.visibleSlides.push(slide);
2178
+ swiper.visibleSlidesIndexes.push(i);
2179
+ slides.eq(i).addClass(params.slideVisibleClass);
2180
+ }
2181
+ }
2182
+
2183
+ slide.progress = rtl ? -slideProgress : slideProgress;
2184
+ }
2185
+
2186
+ swiper.visibleSlides = $(swiper.visibleSlides);
2187
+ }
2188
+
2189
+ function updateProgress(translate) {
2190
+ var swiper = this;
2191
+
2192
+ if (typeof translate === 'undefined') {
2193
+ var multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line
2194
+
2195
+ translate = swiper && swiper.translate && swiper.translate * multiplier || 0;
2196
+ }
2197
+
2198
+ var params = swiper.params;
2199
+ var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
2200
+ var progress = swiper.progress,
2201
+ isBeginning = swiper.isBeginning,
2202
+ isEnd = swiper.isEnd;
2203
+ var wasBeginning = isBeginning;
2204
+ var wasEnd = isEnd;
2205
+
2206
+ if (translatesDiff === 0) {
2207
+ progress = 0;
2208
+ isBeginning = true;
2209
+ isEnd = true;
2210
+ } else {
2211
+ progress = (translate - swiper.minTranslate()) / translatesDiff;
2212
+ isBeginning = progress <= 0;
2213
+ isEnd = progress >= 1;
2214
+ }
2215
+
2216
+ extend$1(swiper, {
2217
+ progress: progress,
2218
+ isBeginning: isBeginning,
2219
+ isEnd: isEnd
2220
+ });
2221
+ if (params.watchSlidesProgress || params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);
2222
+
2223
+ if (isBeginning && !wasBeginning) {
2224
+ swiper.emit('reachBeginning toEdge');
2225
+ }
2226
+
2227
+ if (isEnd && !wasEnd) {
2228
+ swiper.emit('reachEnd toEdge');
2229
+ }
2230
+
2231
+ if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
2232
+ swiper.emit('fromEdge');
2233
+ }
2234
+
2235
+ swiper.emit('progress', progress);
2236
+ }
2237
+
2238
+ function updateSlidesClasses() {
2239
+ var swiper = this;
2240
+ var slides = swiper.slides,
2241
+ params = swiper.params,
2242
+ $wrapperEl = swiper.$wrapperEl,
2243
+ activeIndex = swiper.activeIndex,
2244
+ realIndex = swiper.realIndex;
2245
+ var isVirtual = swiper.virtual && params.virtual.enabled;
2246
+ slides.removeClass(params.slideActiveClass + " " + params.slideNextClass + " " + params.slidePrevClass + " " + params.slideDuplicateActiveClass + " " + params.slideDuplicateNextClass + " " + params.slideDuplicatePrevClass);
2247
+ var activeSlide;
2248
+
2249
+ if (isVirtual) {
2250
+ activeSlide = swiper.$wrapperEl.find("." + params.slideClass + "[data-swiper-slide-index=\"" + activeIndex + "\"]");
2251
+ } else {
2252
+ activeSlide = slides.eq(activeIndex);
2253
+ } // Active classes
2254
+
2255
+
2256
+ activeSlide.addClass(params.slideActiveClass);
2257
+
2258
+ if (params.loop) {
2259
+ // Duplicate to all looped slides
2260
+ if (activeSlide.hasClass(params.slideDuplicateClass)) {
2261
+ $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass);
2262
+ } else {
2263
+ $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass);
2264
+ }
2265
+ } // Next Slide
2266
+
2267
+
2268
+ var nextSlide = activeSlide.nextAll("." + params.slideClass).eq(0).addClass(params.slideNextClass);
2269
+
2270
+ if (params.loop && nextSlide.length === 0) {
2271
+ nextSlide = slides.eq(0);
2272
+ nextSlide.addClass(params.slideNextClass);
2273
+ } // Prev Slide
2274
+
2275
+
2276
+ var prevSlide = activeSlide.prevAll("." + params.slideClass).eq(0).addClass(params.slidePrevClass);
2277
+
2278
+ if (params.loop && prevSlide.length === 0) {
2279
+ prevSlide = slides.eq(-1);
2280
+ prevSlide.addClass(params.slidePrevClass);
2281
+ }
2282
+
2283
+ if (params.loop) {
2284
+ // Duplicate to all looped slides
2285
+ if (nextSlide.hasClass(params.slideDuplicateClass)) {
2286
+ $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass);
2287
+ } else {
2288
+ $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass);
2289
+ }
2290
+
2291
+ if (prevSlide.hasClass(params.slideDuplicateClass)) {
2292
+ $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass);
2293
+ } else {
2294
+ $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass);
2295
+ }
2296
+ }
2297
+
2298
+ swiper.emitSlidesClasses();
2299
+ }
2300
+
2301
+ function updateActiveIndex(newActiveIndex) {
2302
+ var swiper = this;
2303
+ var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
2304
+ var slidesGrid = swiper.slidesGrid,
2305
+ snapGrid = swiper.snapGrid,
2306
+ params = swiper.params,
2307
+ previousIndex = swiper.activeIndex,
2308
+ previousRealIndex = swiper.realIndex,
2309
+ previousSnapIndex = swiper.snapIndex;
2310
+ var activeIndex = newActiveIndex;
2311
+ var snapIndex;
2312
+
2313
+ if (typeof activeIndex === 'undefined') {
2314
+ for (var i = 0; i < slidesGrid.length; i += 1) {
2315
+ if (typeof slidesGrid[i + 1] !== 'undefined') {
2316
+ if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
2317
+ activeIndex = i;
2318
+ } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
2319
+ activeIndex = i + 1;
2320
+ }
2321
+ } else if (translate >= slidesGrid[i]) {
2322
+ activeIndex = i;
2323
+ }
2324
+ } // Normalize slideIndex
2325
+
2326
+
2327
+ if (params.normalizeSlideIndex) {
2328
+ if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
2329
+ }
2330
+ }
2331
+
2332
+ if (snapGrid.indexOf(translate) >= 0) {
2333
+ snapIndex = snapGrid.indexOf(translate);
2334
+ } else {
2335
+ var skip = Math.min(params.slidesPerGroupSkip, activeIndex);
2336
+ snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
2337
+ }
2338
+
2339
+ if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
2340
+
2341
+ if (activeIndex === previousIndex) {
2342
+ if (snapIndex !== previousSnapIndex) {
2343
+ swiper.snapIndex = snapIndex;
2344
+ swiper.emit('snapIndexChange');
2345
+ }
2346
+
2347
+ return;
2348
+ } // Get real index
2349
+
2350
+
2351
+ var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
2352
+ extend$1(swiper, {
2353
+ snapIndex: snapIndex,
2354
+ realIndex: realIndex,
2355
+ previousIndex: previousIndex,
2356
+ activeIndex: activeIndex
2357
+ });
2358
+ swiper.emit('activeIndexChange');
2359
+ swiper.emit('snapIndexChange');
2360
+
2361
+ if (previousRealIndex !== realIndex) {
2362
+ swiper.emit('realIndexChange');
2363
+ }
2364
+
2365
+ if (swiper.initialized || swiper.params.runCallbacksOnInit) {
2366
+ swiper.emit('slideChange');
2367
+ }
2368
+ }
2369
+
2370
+ function updateClickedSlide(e) {
2371
+ var swiper = this;
2372
+ var params = swiper.params;
2373
+ var slide = $(e.target).closest("." + params.slideClass)[0];
2374
+ var slideFound = false;
2375
+
2376
+ if (slide) {
2377
+ for (var i = 0; i < swiper.slides.length; i += 1) {
2378
+ if (swiper.slides[i] === slide) slideFound = true;
2379
+ }
2380
+ }
2381
+
2382
+ if (slide && slideFound) {
2383
+ swiper.clickedSlide = slide;
2384
+
2385
+ if (swiper.virtual && swiper.params.virtual.enabled) {
2386
+ swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
2387
+ } else {
2388
+ swiper.clickedIndex = $(slide).index();
2389
+ }
2390
+ } else {
2391
+ swiper.clickedSlide = undefined;
2392
+ swiper.clickedIndex = undefined;
2393
+ return;
2394
+ }
2395
+
2396
+ if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
2397
+ swiper.slideToClickedSlide();
2398
+ }
2399
+ }
2400
+
2401
+ var update = {
2402
+ updateSize: updateSize,
2403
+ updateSlides: updateSlides,
2404
+ updateAutoHeight: updateAutoHeight,
2405
+ updateSlidesOffset: updateSlidesOffset,
2406
+ updateSlidesProgress: updateSlidesProgress,
2407
+ updateProgress: updateProgress,
2408
+ updateSlidesClasses: updateSlidesClasses,
2409
+ updateActiveIndex: updateActiveIndex,
2410
+ updateClickedSlide: updateClickedSlide
2411
+ };
2412
+
2413
+ function getSwiperTranslate(axis) {
2414
+ if (axis === void 0) {
2415
+ axis = this.isHorizontal() ? 'x' : 'y';
2416
+ }
2417
+
2418
+ var swiper = this;
2419
+ var params = swiper.params,
2420
+ rtl = swiper.rtlTranslate,
2421
+ translate = swiper.translate,
2422
+ $wrapperEl = swiper.$wrapperEl;
2423
+
2424
+ if (params.virtualTranslate) {
2425
+ return rtl ? -translate : translate;
2426
+ }
2427
+
2428
+ if (params.cssMode) {
2429
+ return translate;
2430
+ }
2431
+
2432
+ var currentTranslate = getTranslate($wrapperEl[0], axis);
2433
+ if (rtl) currentTranslate = -currentTranslate;
2434
+ return currentTranslate || 0;
2435
+ }
2436
+
2437
+ function setTranslate(translate, byController) {
2438
+ var swiper = this;
2439
+ var rtl = swiper.rtlTranslate,
2440
+ params = swiper.params,
2441
+ $wrapperEl = swiper.$wrapperEl,
2442
+ wrapperEl = swiper.wrapperEl,
2443
+ progress = swiper.progress;
2444
+ var x = 0;
2445
+ var y = 0;
2446
+ var z = 0;
2447
+
2448
+ if (swiper.isHorizontal()) {
2449
+ x = rtl ? -translate : translate;
2450
+ } else {
2451
+ y = translate;
2452
+ }
2453
+
2454
+ if (params.roundLengths) {
2455
+ x = Math.floor(x);
2456
+ y = Math.floor(y);
2457
+ }
2458
+
2459
+ if (params.cssMode) {
2460
+ wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
2461
+ } else if (!params.virtualTranslate) {
2462
+ $wrapperEl.transform("translate3d(" + x + "px, " + y + "px, " + z + "px)");
2463
+ }
2464
+
2465
+ swiper.previousTranslate = swiper.translate;
2466
+ swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress
2467
+
2468
+ var newProgress;
2469
+ var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
2470
+
2471
+ if (translatesDiff === 0) {
2472
+ newProgress = 0;
2473
+ } else {
2474
+ newProgress = (translate - swiper.minTranslate()) / translatesDiff;
2475
+ }
2476
+
2477
+ if (newProgress !== progress) {
2478
+ swiper.updateProgress(translate);
2479
+ }
2480
+
2481
+ swiper.emit('setTranslate', swiper.translate, byController);
2482
+ }
2483
+
2484
+ function minTranslate() {
2485
+ return -this.snapGrid[0];
2486
+ }
2487
+
2488
+ function maxTranslate() {
2489
+ return -this.snapGrid[this.snapGrid.length - 1];
2490
+ }
2491
+
2492
+ function translateTo(translate, speed, runCallbacks, translateBounds, internal) {
2493
+ if (translate === void 0) {
2494
+ translate = 0;
2495
+ }
2496
+
2497
+ if (speed === void 0) {
2498
+ speed = this.params.speed;
2499
+ }
2500
+
2501
+ if (runCallbacks === void 0) {
2502
+ runCallbacks = true;
2503
+ }
2504
+
2505
+ if (translateBounds === void 0) {
2506
+ translateBounds = true;
2507
+ }
2508
+
2509
+ var swiper = this;
2510
+ var params = swiper.params,
2511
+ wrapperEl = swiper.wrapperEl;
2512
+
2513
+ if (swiper.animating && params.preventInteractionOnTransition) {
2514
+ return false;
2515
+ }
2516
+
2517
+ var minTranslate = swiper.minTranslate();
2518
+ var maxTranslate = swiper.maxTranslate();
2519
+ var newTranslate;
2520
+ if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress
2521
+
2522
+ swiper.updateProgress(newTranslate);
2523
+
2524
+ if (params.cssMode) {
2525
+ var isH = swiper.isHorizontal();
2526
+
2527
+ if (speed === 0) {
2528
+ wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
2529
+ } else {
2530
+ // eslint-disable-next-line
2531
+ if (wrapperEl.scrollTo) {
2532
+ var _wrapperEl$scrollTo;
2533
+
2534
+ wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = -newTranslate, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));
2535
+ } else {
2536
+ wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
2537
+ }
2538
+ }
2539
+
2540
+ return true;
2541
+ }
2542
+
2543
+ if (speed === 0) {
2544
+ swiper.setTransition(0);
2545
+ swiper.setTranslate(newTranslate);
2546
+
2547
+ if (runCallbacks) {
2548
+ swiper.emit('beforeTransitionStart', speed, internal);
2549
+ swiper.emit('transitionEnd');
2550
+ }
2551
+ } else {
2552
+ swiper.setTransition(speed);
2553
+ swiper.setTranslate(newTranslate);
2554
+
2555
+ if (runCallbacks) {
2556
+ swiper.emit('beforeTransitionStart', speed, internal);
2557
+ swiper.emit('transitionStart');
2558
+ }
2559
+
2560
+ if (!swiper.animating) {
2561
+ swiper.animating = true;
2562
+
2563
+ if (!swiper.onTranslateToWrapperTransitionEnd) {
2564
+ swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
2565
+ if (!swiper || swiper.destroyed) return;
2566
+ if (e.target !== this) return;
2567
+ swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
2568
+ swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
2569
+ swiper.onTranslateToWrapperTransitionEnd = null;
2570
+ delete swiper.onTranslateToWrapperTransitionEnd;
2571
+
2572
+ if (runCallbacks) {
2573
+ swiper.emit('transitionEnd');
2574
+ }
2575
+ };
2576
+ }
2577
+
2578
+ swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
2579
+ swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
2580
+ }
2581
+ }
2582
+
2583
+ return true;
2584
+ }
2585
+
2586
+ var translate = {
2587
+ getTranslate: getSwiperTranslate,
2588
+ setTranslate: setTranslate,
2589
+ minTranslate: minTranslate,
2590
+ maxTranslate: maxTranslate,
2591
+ translateTo: translateTo
2592
+ };
2593
+
2594
+ function setTransition(duration, byController) {
2595
+ var swiper = this;
2596
+
2597
+ if (!swiper.params.cssMode) {
2598
+ swiper.$wrapperEl.transition(duration);
2599
+ }
2600
+
2601
+ swiper.emit('setTransition', duration, byController);
2602
+ }
2603
+
2604
+ function transitionStart(runCallbacks, direction) {
2605
+ if (runCallbacks === void 0) {
2606
+ runCallbacks = true;
2607
+ }
2608
+
2609
+ var swiper = this;
2610
+ var activeIndex = swiper.activeIndex,
2611
+ params = swiper.params,
2612
+ previousIndex = swiper.previousIndex;
2613
+ if (params.cssMode) return;
2614
+
2615
+ if (params.autoHeight) {
2616
+ swiper.updateAutoHeight();
2617
+ }
2618
+
2619
+ var dir = direction;
2620
+
2621
+ if (!dir) {
2622
+ if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
2623
+ }
2624
+
2625
+ swiper.emit('transitionStart');
2626
+
2627
+ if (runCallbacks && activeIndex !== previousIndex) {
2628
+ if (dir === 'reset') {
2629
+ swiper.emit('slideResetTransitionStart');
2630
+ return;
2631
+ }
2632
+
2633
+ swiper.emit('slideChangeTransitionStart');
2634
+
2635
+ if (dir === 'next') {
2636
+ swiper.emit('slideNextTransitionStart');
2637
+ } else {
2638
+ swiper.emit('slidePrevTransitionStart');
2639
+ }
2640
+ }
2641
+ }
2642
+
2643
+ function transitionEnd$1(runCallbacks, direction) {
2644
+ if (runCallbacks === void 0) {
2645
+ runCallbacks = true;
2646
+ }
2647
+
2648
+ var swiper = this;
2649
+ var activeIndex = swiper.activeIndex,
2650
+ previousIndex = swiper.previousIndex,
2651
+ params = swiper.params;
2652
+ swiper.animating = false;
2653
+ if (params.cssMode) return;
2654
+ swiper.setTransition(0);
2655
+ var dir = direction;
2656
+
2657
+ if (!dir) {
2658
+ if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
2659
+ }
2660
+
2661
+ swiper.emit('transitionEnd');
2662
+
2663
+ if (runCallbacks && activeIndex !== previousIndex) {
2664
+ if (dir === 'reset') {
2665
+ swiper.emit('slideResetTransitionEnd');
2666
+ return;
2667
+ }
2668
+
2669
+ swiper.emit('slideChangeTransitionEnd');
2670
+
2671
+ if (dir === 'next') {
2672
+ swiper.emit('slideNextTransitionEnd');
2673
+ } else {
2674
+ swiper.emit('slidePrevTransitionEnd');
2675
+ }
2676
+ }
2677
+ }
2678
+
2679
+ var transition$1 = {
2680
+ setTransition: setTransition,
2681
+ transitionStart: transitionStart,
2682
+ transitionEnd: transitionEnd$1
2683
+ };
2684
+
2685
+ function slideTo(index, speed, runCallbacks, internal) {
2686
+ if (index === void 0) {
2687
+ index = 0;
2688
+ }
2689
+
2690
+ if (speed === void 0) {
2691
+ speed = this.params.speed;
2692
+ }
2693
+
2694
+ if (runCallbacks === void 0) {
2695
+ runCallbacks = true;
2696
+ }
2697
+
2698
+ if (typeof index !== 'number' && typeof index !== 'string') {
2699
+ throw new Error("The 'index' argument cannot have type other than 'number' or 'string'. [" + typeof index + "] given.");
2700
+ }
2701
+
2702
+ if (typeof index === 'string') {
2703
+ /**
2704
+ * The `index` argument converted from `string` to `number`.
2705
+ * @type {number}
2706
+ */
2707
+ var indexAsNumber = parseInt(index, 10);
2708
+ /**
2709
+ * Determines whether the `index` argument is a valid `number`
2710
+ * after being converted from the `string` type.
2711
+ * @type {boolean}
2712
+ */
2713
+
2714
+ var isValidNumber = isFinite(indexAsNumber);
2715
+
2716
+ if (!isValidNumber) {
2717
+ throw new Error("The passed-in 'index' (string) couldn't be converted to 'number'. [" + index + "] given.");
2718
+ } // Knowing that the converted `index` is a valid number,
2719
+ // we can update the original argument's value.
2720
+
2721
+
2722
+ index = indexAsNumber;
2723
+ }
2724
+
2725
+ var swiper = this;
2726
+ var slideIndex = index;
2727
+ if (slideIndex < 0) slideIndex = 0;
2728
+ var params = swiper.params,
2729
+ snapGrid = swiper.snapGrid,
2730
+ slidesGrid = swiper.slidesGrid,
2731
+ previousIndex = swiper.previousIndex,
2732
+ activeIndex = swiper.activeIndex,
2733
+ rtl = swiper.rtlTranslate,
2734
+ wrapperEl = swiper.wrapperEl;
2735
+
2736
+ if (swiper.animating && params.preventInteractionOnTransition) {
2737
+ return false;
2738
+ }
2739
+
2740
+ var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
2741
+ var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
2742
+ if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
2743
+
2744
+ if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
2745
+ swiper.emit('beforeSlideChangeStart');
2746
+ }
2747
+
2748
+ var translate = -snapGrid[snapIndex]; // Update progress
2749
+
2750
+ swiper.updateProgress(translate); // Normalize slideIndex
2751
+
2752
+ if (params.normalizeSlideIndex) {
2753
+ for (var i = 0; i < slidesGrid.length; i += 1) {
2754
+ var normalizedTranslate = -Math.floor(translate * 100);
2755
+ var normalizedGird = Math.floor(slidesGrid[i] * 100);
2756
+ var normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);
2757
+
2758
+ if (typeof slidesGrid[i + 1] !== 'undefined') {
2759
+ if (normalizedTranslate >= normalizedGird && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGird) / 2) {
2760
+ slideIndex = i;
2761
+ } else if (normalizedTranslate >= normalizedGird && normalizedTranslate < normalizedGridNext) {
2762
+ slideIndex = i + 1;
2763
+ }
2764
+ } else if (normalizedTranslate >= normalizedGird) {
2765
+ slideIndex = i;
2766
+ }
2767
+ }
2768
+ } // Directions locks
2769
+
2770
+
2771
+ if (swiper.initialized && slideIndex !== activeIndex) {
2772
+ if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
2773
+ return false;
2774
+ }
2775
+
2776
+ if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
2777
+ if ((activeIndex || 0) !== slideIndex) return false;
2778
+ }
2779
+ }
2780
+
2781
+ var direction;
2782
+ if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index
2783
+
2784
+ if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {
2785
+ swiper.updateActiveIndex(slideIndex); // Update Height
2786
+
2787
+ if (params.autoHeight) {
2788
+ swiper.updateAutoHeight();
2789
+ }
2790
+
2791
+ swiper.updateSlidesClasses();
2792
+
2793
+ if (params.effect !== 'slide') {
2794
+ swiper.setTranslate(translate);
2795
+ }
2796
+
2797
+ if (direction !== 'reset') {
2798
+ swiper.transitionStart(runCallbacks, direction);
2799
+ swiper.transitionEnd(runCallbacks, direction);
2800
+ }
2801
+
2802
+ return false;
2803
+ }
2804
+
2805
+ if (params.cssMode) {
2806
+ var isH = swiper.isHorizontal();
2807
+ var t = -translate;
2808
+
2809
+ if (rtl) {
2810
+ t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;
2811
+ }
2812
+
2813
+ if (speed === 0) {
2814
+ wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
2815
+ } else {
2816
+ // eslint-disable-next-line
2817
+ if (wrapperEl.scrollTo) {
2818
+ var _wrapperEl$scrollTo;
2819
+
2820
+ wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = t, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));
2821
+ } else {
2822
+ wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
2823
+ }
2824
+ }
2825
+
2826
+ return true;
2827
+ }
2828
+
2829
+ if (speed === 0) {
2830
+ swiper.setTransition(0);
2831
+ swiper.setTranslate(translate);
2832
+ swiper.updateActiveIndex(slideIndex);
2833
+ swiper.updateSlidesClasses();
2834
+ swiper.emit('beforeTransitionStart', speed, internal);
2835
+ swiper.transitionStart(runCallbacks, direction);
2836
+ swiper.transitionEnd(runCallbacks, direction);
2837
+ } else {
2838
+ swiper.setTransition(speed);
2839
+ swiper.setTranslate(translate);
2840
+ swiper.updateActiveIndex(slideIndex);
2841
+ swiper.updateSlidesClasses();
2842
+ swiper.emit('beforeTransitionStart', speed, internal);
2843
+ swiper.transitionStart(runCallbacks, direction);
2844
+
2845
+ if (!swiper.animating) {
2846
+ swiper.animating = true;
2847
+
2848
+ if (!swiper.onSlideToWrapperTransitionEnd) {
2849
+ swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
2850
+ if (!swiper || swiper.destroyed) return;
2851
+ if (e.target !== this) return;
2852
+ swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
2853
+ swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
2854
+ swiper.onSlideToWrapperTransitionEnd = null;
2855
+ delete swiper.onSlideToWrapperTransitionEnd;
2856
+ swiper.transitionEnd(runCallbacks, direction);
2857
+ };
2858
+ }
2859
+
2860
+ swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
2861
+ swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
2862
+ }
2863
+ }
2864
+
2865
+ return true;
2866
+ }
2867
+
2868
+ function slideToLoop(index, speed, runCallbacks, internal) {
2869
+ if (index === void 0) {
2870
+ index = 0;
2871
+ }
2872
+
2873
+ if (speed === void 0) {
2874
+ speed = this.params.speed;
2875
+ }
2876
+
2877
+ if (runCallbacks === void 0) {
2878
+ runCallbacks = true;
2879
+ }
2880
+
2881
+ var swiper = this;
2882
+ var newIndex = index;
2883
+
2884
+ if (swiper.params.loop) {
2885
+ newIndex += swiper.loopedSlides;
2886
+ }
2887
+
2888
+ return swiper.slideTo(newIndex, speed, runCallbacks, internal);
2889
+ }
2890
+
2891
+ /* eslint no-unused-vars: "off" */
2892
+ function slideNext(speed, runCallbacks, internal) {
2893
+ if (speed === void 0) {
2894
+ speed = this.params.speed;
2895
+ }
2896
+
2897
+ if (runCallbacks === void 0) {
2898
+ runCallbacks = true;
2899
+ }
2900
+
2901
+ var swiper = this;
2902
+ var params = swiper.params,
2903
+ animating = swiper.animating;
2904
+ var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;
2905
+
2906
+ if (params.loop) {
2907
+ if (animating && params.loopPreventsSlide) return false;
2908
+ swiper.loopFix(); // eslint-disable-next-line
2909
+
2910
+ swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
2911
+ }
2912
+
2913
+ return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
2914
+ }
2915
+
2916
+ /* eslint no-unused-vars: "off" */
2917
+ function slidePrev(speed, runCallbacks, internal) {
2918
+ if (speed === void 0) {
2919
+ speed = this.params.speed;
2920
+ }
2921
+
2922
+ if (runCallbacks === void 0) {
2923
+ runCallbacks = true;
2924
+ }
2925
+
2926
+ var swiper = this;
2927
+ var params = swiper.params,
2928
+ animating = swiper.animating,
2929
+ snapGrid = swiper.snapGrid,
2930
+ slidesGrid = swiper.slidesGrid,
2931
+ rtlTranslate = swiper.rtlTranslate;
2932
+
2933
+ if (params.loop) {
2934
+ if (animating && params.loopPreventsSlide) return false;
2935
+ swiper.loopFix(); // eslint-disable-next-line
2936
+
2937
+ swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
2938
+ }
2939
+
2940
+ var translate = rtlTranslate ? swiper.translate : -swiper.translate;
2941
+
2942
+ function normalize(val) {
2943
+ if (val < 0) return -Math.floor(Math.abs(val));
2944
+ return Math.floor(val);
2945
+ }
2946
+
2947
+ var normalizedTranslate = normalize(translate);
2948
+ var normalizedSnapGrid = snapGrid.map(function (val) {
2949
+ return normalize(val);
2950
+ });
2951
+ snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
2952
+ var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
2953
+
2954
+ if (typeof prevSnap === 'undefined' && params.cssMode) {
2955
+ snapGrid.forEach(function (snap) {
2956
+ if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;
2957
+ });
2958
+ }
2959
+
2960
+ var prevIndex;
2961
+
2962
+ if (typeof prevSnap !== 'undefined') {
2963
+ prevIndex = slidesGrid.indexOf(prevSnap);
2964
+ if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
2965
+ }
2966
+
2967
+ return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
2968
+ }
2969
+
2970
+ /* eslint no-unused-vars: "off" */
2971
+ function slideReset(speed, runCallbacks, internal) {
2972
+ if (speed === void 0) {
2973
+ speed = this.params.speed;
2974
+ }
2975
+
2976
+ if (runCallbacks === void 0) {
2977
+ runCallbacks = true;
2978
+ }
2979
+
2980
+ var swiper = this;
2981
+ return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
2982
+ }
2983
+
2984
+ /* eslint no-unused-vars: "off" */
2985
+ function slideToClosest(speed, runCallbacks, internal, threshold) {
2986
+ if (speed === void 0) {
2987
+ speed = this.params.speed;
2988
+ }
2989
+
2990
+ if (runCallbacks === void 0) {
2991
+ runCallbacks = true;
2992
+ }
2993
+
2994
+ if (threshold === void 0) {
2995
+ threshold = 0.5;
2996
+ }
2997
+
2998
+ var swiper = this;
2999
+ var index = swiper.activeIndex;
3000
+ var skip = Math.min(swiper.params.slidesPerGroupSkip, index);
3001
+ var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
3002
+ var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
3003
+
3004
+ if (translate >= swiper.snapGrid[snapIndex]) {
3005
+ // The current translate is on or after the current snap index, so the choice
3006
+ // is between the current index and the one after it.
3007
+ var currentSnap = swiper.snapGrid[snapIndex];
3008
+ var nextSnap = swiper.snapGrid[snapIndex + 1];
3009
+
3010
+ if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {
3011
+ index += swiper.params.slidesPerGroup;
3012
+ }
3013
+ } else {
3014
+ // The current translate is before the current snap index, so the choice
3015
+ // is between the current index and the one before it.
3016
+ var prevSnap = swiper.snapGrid[snapIndex - 1];
3017
+ var _currentSnap = swiper.snapGrid[snapIndex];
3018
+
3019
+ if (translate - prevSnap <= (_currentSnap - prevSnap) * threshold) {
3020
+ index -= swiper.params.slidesPerGroup;
3021
+ }
3022
+ }
3023
+
3024
+ index = Math.max(index, 0);
3025
+ index = Math.min(index, swiper.slidesGrid.length - 1);
3026
+ return swiper.slideTo(index, speed, runCallbacks, internal);
3027
+ }
3028
+
3029
+ function slideToClickedSlide() {
3030
+ var swiper = this;
3031
+ var params = swiper.params,
3032
+ $wrapperEl = swiper.$wrapperEl;
3033
+ var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
3034
+ var slideToIndex = swiper.clickedIndex;
3035
+ var realIndex;
3036
+
3037
+ if (params.loop) {
3038
+ if (swiper.animating) return;
3039
+ realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
3040
+
3041
+ if (params.centeredSlides) {
3042
+ if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
3043
+ swiper.loopFix();
3044
+ slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index();
3045
+ nextTick(function () {
3046
+ swiper.slideTo(slideToIndex);
3047
+ });
3048
+ } else {
3049
+ swiper.slideTo(slideToIndex);
3050
+ }
3051
+ } else if (slideToIndex > swiper.slides.length - slidesPerView) {
3052
+ swiper.loopFix();
3053
+ slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index();
3054
+ nextTick(function () {
3055
+ swiper.slideTo(slideToIndex);
3056
+ });
3057
+ } else {
3058
+ swiper.slideTo(slideToIndex);
3059
+ }
3060
+ } else {
3061
+ swiper.slideTo(slideToIndex);
3062
+ }
3063
+ }
3064
+
3065
+ var slide = {
3066
+ slideTo: slideTo,
3067
+ slideToLoop: slideToLoop,
3068
+ slideNext: slideNext,
3069
+ slidePrev: slidePrev,
3070
+ slideReset: slideReset,
3071
+ slideToClosest: slideToClosest,
3072
+ slideToClickedSlide: slideToClickedSlide
3073
+ };
3074
+
3075
+ function loopCreate() {
3076
+ var swiper = this;
3077
+ var document = getDocument();
3078
+ var params = swiper.params,
3079
+ $wrapperEl = swiper.$wrapperEl; // Remove duplicated slides
3080
+
3081
+ $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass).remove();
3082
+ var slides = $wrapperEl.children("." + params.slideClass);
3083
+
3084
+ if (params.loopFillGroupWithBlank) {
3085
+ var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;
3086
+
3087
+ if (blankSlidesNum !== params.slidesPerGroup) {
3088
+ for (var i = 0; i < blankSlidesNum; i += 1) {
3089
+ var blankNode = $(document.createElement('div')).addClass(params.slideClass + " " + params.slideBlankClass);
3090
+ $wrapperEl.append(blankNode);
3091
+ }
3092
+
3093
+ slides = $wrapperEl.children("." + params.slideClass);
3094
+ }
3095
+ }
3096
+
3097
+ if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;
3098
+ swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));
3099
+ swiper.loopedSlides += params.loopAdditionalSlides;
3100
+
3101
+ if (swiper.loopedSlides > slides.length) {
3102
+ swiper.loopedSlides = slides.length;
3103
+ }
3104
+
3105
+ var prependSlides = [];
3106
+ var appendSlides = [];
3107
+ slides.each(function (el, index) {
3108
+ var slide = $(el);
3109
+
3110
+ if (index < swiper.loopedSlides) {
3111
+ appendSlides.push(el);
3112
+ }
3113
+
3114
+ if (index < slides.length && index >= slides.length - swiper.loopedSlides) {
3115
+ prependSlides.push(el);
3116
+ }
3117
+
3118
+ slide.attr('data-swiper-slide-index', index);
3119
+ });
3120
+
3121
+ for (var _i = 0; _i < appendSlides.length; _i += 1) {
3122
+ $wrapperEl.append($(appendSlides[_i].cloneNode(true)).addClass(params.slideDuplicateClass));
3123
+ }
3124
+
3125
+ for (var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1) {
3126
+ $wrapperEl.prepend($(prependSlides[_i2].cloneNode(true)).addClass(params.slideDuplicateClass));
3127
+ }
3128
+ }
3129
+
3130
+ function loopFix() {
3131
+ var swiper = this;
3132
+ swiper.emit('beforeLoopFix');
3133
+ var activeIndex = swiper.activeIndex,
3134
+ slides = swiper.slides,
3135
+ loopedSlides = swiper.loopedSlides,
3136
+ allowSlidePrev = swiper.allowSlidePrev,
3137
+ allowSlideNext = swiper.allowSlideNext,
3138
+ snapGrid = swiper.snapGrid,
3139
+ rtl = swiper.rtlTranslate;
3140
+ var newIndex;
3141
+ swiper.allowSlidePrev = true;
3142
+ swiper.allowSlideNext = true;
3143
+ var snapTranslate = -snapGrid[activeIndex];
3144
+ var diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding
3145
+
3146
+ if (activeIndex < loopedSlides) {
3147
+ newIndex = slides.length - loopedSlides * 3 + activeIndex;
3148
+ newIndex += loopedSlides;
3149
+ var slideChanged = swiper.slideTo(newIndex, 0, false, true);
3150
+
3151
+ if (slideChanged && diff !== 0) {
3152
+ swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
3153
+ }
3154
+ } else if (activeIndex >= slides.length - loopedSlides) {
3155
+ // Fix For Positive Oversliding
3156
+ newIndex = -slides.length + activeIndex + loopedSlides;
3157
+ newIndex += loopedSlides;
3158
+
3159
+ var _slideChanged = swiper.slideTo(newIndex, 0, false, true);
3160
+
3161
+ if (_slideChanged && diff !== 0) {
3162
+ swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
3163
+ }
3164
+ }
3165
+
3166
+ swiper.allowSlidePrev = allowSlidePrev;
3167
+ swiper.allowSlideNext = allowSlideNext;
3168
+ swiper.emit('loopFix');
3169
+ }
3170
+
3171
+ function loopDestroy() {
3172
+ var swiper = this;
3173
+ var $wrapperEl = swiper.$wrapperEl,
3174
+ params = swiper.params,
3175
+ slides = swiper.slides;
3176
+ $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + ",." + params.slideClass + "." + params.slideBlankClass).remove();
3177
+ slides.removeAttr('data-swiper-slide-index');
3178
+ }
3179
+
3180
+ var loop = {
3181
+ loopCreate: loopCreate,
3182
+ loopFix: loopFix,
3183
+ loopDestroy: loopDestroy
3184
+ };
3185
+
3186
+ function setGrabCursor(moving) {
3187
+ var swiper = this;
3188
+ if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;
3189
+ var el = swiper.el;
3190
+ el.style.cursor = 'move';
3191
+ el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
3192
+ el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
3193
+ el.style.cursor = moving ? 'grabbing' : 'grab';
3194
+ }
3195
+
3196
+ function unsetGrabCursor() {
3197
+ var swiper = this;
3198
+
3199
+ if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {
3200
+ return;
3201
+ }
3202
+
3203
+ swiper.el.style.cursor = '';
3204
+ }
3205
+
3206
+ var grabCursor = {
3207
+ setGrabCursor: setGrabCursor,
3208
+ unsetGrabCursor: unsetGrabCursor
3209
+ };
3210
+
3211
+ function appendSlide(slides) {
3212
+ var swiper = this;
3213
+ var $wrapperEl = swiper.$wrapperEl,
3214
+ params = swiper.params;
3215
+
3216
+ if (params.loop) {
3217
+ swiper.loopDestroy();
3218
+ }
3219
+
3220
+ if (typeof slides === 'object' && 'length' in slides) {
3221
+ for (var i = 0; i < slides.length; i += 1) {
3222
+ if (slides[i]) $wrapperEl.append(slides[i]);
3223
+ }
3224
+ } else {
3225
+ $wrapperEl.append(slides);
3226
+ }
3227
+
3228
+ if (params.loop) {
3229
+ swiper.loopCreate();
3230
+ }
3231
+
3232
+ if (!(params.observer && swiper.support.observer)) {
3233
+ swiper.update();
3234
+ }
3235
+ }
3236
+
3237
+ function prependSlide(slides) {
3238
+ var swiper = this;
3239
+ var params = swiper.params,
3240
+ $wrapperEl = swiper.$wrapperEl,
3241
+ activeIndex = swiper.activeIndex;
3242
+
3243
+ if (params.loop) {
3244
+ swiper.loopDestroy();
3245
+ }
3246
+
3247
+ var newActiveIndex = activeIndex + 1;
3248
+
3249
+ if (typeof slides === 'object' && 'length' in slides) {
3250
+ for (var i = 0; i < slides.length; i += 1) {
3251
+ if (slides[i]) $wrapperEl.prepend(slides[i]);
3252
+ }
3253
+
3254
+ newActiveIndex = activeIndex + slides.length;
3255
+ } else {
3256
+ $wrapperEl.prepend(slides);
3257
+ }
3258
+
3259
+ if (params.loop) {
3260
+ swiper.loopCreate();
3261
+ }
3262
+
3263
+ if (!(params.observer && swiper.support.observer)) {
3264
+ swiper.update();
3265
+ }
3266
+
3267
+ swiper.slideTo(newActiveIndex, 0, false);
3268
+ }
3269
+
3270
+ function addSlide(index, slides) {
3271
+ var swiper = this;
3272
+ var $wrapperEl = swiper.$wrapperEl,
3273
+ params = swiper.params,
3274
+ activeIndex = swiper.activeIndex;
3275
+ var activeIndexBuffer = activeIndex;
3276
+
3277
+ if (params.loop) {
3278
+ activeIndexBuffer -= swiper.loopedSlides;
3279
+ swiper.loopDestroy();
3280
+ swiper.slides = $wrapperEl.children("." + params.slideClass);
3281
+ }
3282
+
3283
+ var baseLength = swiper.slides.length;
3284
+
3285
+ if (index <= 0) {
3286
+ swiper.prependSlide(slides);
3287
+ return;
3288
+ }
3289
+
3290
+ if (index >= baseLength) {
3291
+ swiper.appendSlide(slides);
3292
+ return;
3293
+ }
3294
+
3295
+ var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
3296
+ var slidesBuffer = [];
3297
+
3298
+ for (var i = baseLength - 1; i >= index; i -= 1) {
3299
+ var currentSlide = swiper.slides.eq(i);
3300
+ currentSlide.remove();
3301
+ slidesBuffer.unshift(currentSlide);
3302
+ }
3303
+
3304
+ if (typeof slides === 'object' && 'length' in slides) {
3305
+ for (var _i = 0; _i < slides.length; _i += 1) {
3306
+ if (slides[_i]) $wrapperEl.append(slides[_i]);
3307
+ }
3308
+
3309
+ newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
3310
+ } else {
3311
+ $wrapperEl.append(slides);
3312
+ }
3313
+
3314
+ for (var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1) {
3315
+ $wrapperEl.append(slidesBuffer[_i2]);
3316
+ }
3317
+
3318
+ if (params.loop) {
3319
+ swiper.loopCreate();
3320
+ }
3321
+
3322
+ if (!(params.observer && swiper.support.observer)) {
3323
+ swiper.update();
3324
+ }
3325
+
3326
+ if (params.loop) {
3327
+ swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
3328
+ } else {
3329
+ swiper.slideTo(newActiveIndex, 0, false);
3330
+ }
3331
+ }
3332
+
3333
+ function removeSlide(slidesIndexes) {
3334
+ var swiper = this;
3335
+ var params = swiper.params,
3336
+ $wrapperEl = swiper.$wrapperEl,
3337
+ activeIndex = swiper.activeIndex;
3338
+ var activeIndexBuffer = activeIndex;
3339
+
3340
+ if (params.loop) {
3341
+ activeIndexBuffer -= swiper.loopedSlides;
3342
+ swiper.loopDestroy();
3343
+ swiper.slides = $wrapperEl.children("." + params.slideClass);
3344
+ }
3345
+
3346
+ var newActiveIndex = activeIndexBuffer;
3347
+ var indexToRemove;
3348
+
3349
+ if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
3350
+ for (var i = 0; i < slidesIndexes.length; i += 1) {
3351
+ indexToRemove = slidesIndexes[i];
3352
+ if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
3353
+ if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
3354
+ }
3355
+
3356
+ newActiveIndex = Math.max(newActiveIndex, 0);
3357
+ } else {
3358
+ indexToRemove = slidesIndexes;
3359
+ if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
3360
+ if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
3361
+ newActiveIndex = Math.max(newActiveIndex, 0);
3362
+ }
3363
+
3364
+ if (params.loop) {
3365
+ swiper.loopCreate();
3366
+ }
3367
+
3368
+ if (!(params.observer && swiper.support.observer)) {
3369
+ swiper.update();
3370
+ }
3371
+
3372
+ if (params.loop) {
3373
+ swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
3374
+ } else {
3375
+ swiper.slideTo(newActiveIndex, 0, false);
3376
+ }
3377
+ }
3378
+
3379
+ function removeAllSlides() {
3380
+ var swiper = this;
3381
+ var slidesIndexes = [];
3382
+
3383
+ for (var i = 0; i < swiper.slides.length; i += 1) {
3384
+ slidesIndexes.push(i);
3385
+ }
3386
+
3387
+ swiper.removeSlide(slidesIndexes);
3388
+ }
3389
+
3390
+ var manipulation = {
3391
+ appendSlide: appendSlide,
3392
+ prependSlide: prependSlide,
3393
+ addSlide: addSlide,
3394
+ removeSlide: removeSlide,
3395
+ removeAllSlides: removeAllSlides
3396
+ };
3397
+
3398
+ function onTouchStart(event) {
3399
+ var swiper = this;
3400
+ var document = getDocument();
3401
+ var window = getWindow();
3402
+ var data = swiper.touchEventsData;
3403
+ var params = swiper.params,
3404
+ touches = swiper.touches;
3405
+
3406
+ if (swiper.animating && params.preventInteractionOnTransition) {
3407
+ return;
3408
+ }
3409
+
3410
+ var e = event;
3411
+ if (e.originalEvent) e = e.originalEvent;
3412
+ var $targetEl = $(e.target);
3413
+
3414
+ if (params.touchEventsTarget === 'wrapper') {
3415
+ if (!$targetEl.closest(swiper.wrapperEl).length) return;
3416
+ }
3417
+
3418
+ data.isTouchEvent = e.type === 'touchstart';
3419
+ if (!data.isTouchEvent && 'which' in e && e.which === 3) return;
3420
+ if (!data.isTouchEvent && 'button' in e && e.button > 0) return;
3421
+ if (data.isTouched && data.isMoved) return; // change target el for shadow root componenet
3422
+
3423
+ var swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';
3424
+
3425
+ if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {
3426
+ $targetEl = $(event.path[0]);
3427
+ }
3428
+
3429
+ if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : "." + params.noSwipingClass)[0]) {
3430
+ swiper.allowClick = true;
3431
+ return;
3432
+ }
3433
+
3434
+ if (params.swipeHandler) {
3435
+ if (!$targetEl.closest(params.swipeHandler)[0]) return;
3436
+ }
3437
+
3438
+ touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
3439
+ touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
3440
+ var startX = touches.currentX;
3441
+ var startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore
3442
+
3443
+ var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
3444
+ var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
3445
+
3446
+ if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {
3447
+ if (edgeSwipeDetection === 'prevent') {
3448
+ event.preventDefault();
3449
+ } else {
3450
+ return;
3451
+ }
3452
+ }
3453
+
3454
+ extend$1(data, {
3455
+ isTouched: true,
3456
+ isMoved: false,
3457
+ allowTouchCallbacks: true,
3458
+ isScrolling: undefined,
3459
+ startMoving: undefined
3460
+ });
3461
+ touches.startX = startX;
3462
+ touches.startY = startY;
3463
+ data.touchStartTime = now();
3464
+ swiper.allowClick = true;
3465
+ swiper.updateSize();
3466
+ swiper.swipeDirection = undefined;
3467
+ if (params.threshold > 0) data.allowThresholdMove = false;
3468
+
3469
+ if (e.type !== 'touchstart') {
3470
+ var preventDefault = true;
3471
+ if ($targetEl.is(data.formElements)) preventDefault = false;
3472
+
3473
+ if (document.activeElement && $(document.activeElement).is(data.formElements) && document.activeElement !== $targetEl[0]) {
3474
+ document.activeElement.blur();
3475
+ }
3476
+
3477
+ var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
3478
+
3479
+ if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {
3480
+ e.preventDefault();
3481
+ }
3482
+ }
3483
+
3484
+ swiper.emit('touchStart', e);
3485
+ }
3486
+
3487
+ function onTouchMove(event) {
3488
+ var document = getDocument();
3489
+ var swiper = this;
3490
+ var data = swiper.touchEventsData;
3491
+ var params = swiper.params,
3492
+ touches = swiper.touches,
3493
+ rtl = swiper.rtlTranslate;
3494
+ var e = event;
3495
+ if (e.originalEvent) e = e.originalEvent;
3496
+
3497
+ if (!data.isTouched) {
3498
+ if (data.startMoving && data.isScrolling) {
3499
+ swiper.emit('touchMoveOpposite', e);
3500
+ }
3501
+
3502
+ return;
3503
+ }
3504
+
3505
+ if (data.isTouchEvent && e.type !== 'touchmove') return;
3506
+ var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);
3507
+ var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;
3508
+ var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;
3509
+
3510
+ if (e.preventedByNestedSwiper) {
3511
+ touches.startX = pageX;
3512
+ touches.startY = pageY;
3513
+ return;
3514
+ }
3515
+
3516
+ if (!swiper.allowTouchMove) {
3517
+ // isMoved = true;
3518
+ swiper.allowClick = false;
3519
+
3520
+ if (data.isTouched) {
3521
+ extend$1(touches, {
3522
+ startX: pageX,
3523
+ startY: pageY,
3524
+ currentX: pageX,
3525
+ currentY: pageY
3526
+ });
3527
+ data.touchStartTime = now();
3528
+ }
3529
+
3530
+ return;
3531
+ }
3532
+
3533
+ if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
3534
+ if (swiper.isVertical()) {
3535
+ // Vertical
3536
+ if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
3537
+ data.isTouched = false;
3538
+ data.isMoved = false;
3539
+ return;
3540
+ }
3541
+ } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {
3542
+ return;
3543
+ }
3544
+ }
3545
+
3546
+ if (data.isTouchEvent && document.activeElement) {
3547
+ if (e.target === document.activeElement && $(e.target).is(data.formElements)) {
3548
+ data.isMoved = true;
3549
+ swiper.allowClick = false;
3550
+ return;
3551
+ }
3552
+ }
3553
+
3554
+ if (data.allowTouchCallbacks) {
3555
+ swiper.emit('touchMove', e);
3556
+ }
3557
+
3558
+ if (e.targetTouches && e.targetTouches.length > 1) return;
3559
+ touches.currentX = pageX;
3560
+ touches.currentY = pageY;
3561
+ var diffX = touches.currentX - touches.startX;
3562
+ var diffY = touches.currentY - touches.startY;
3563
+ if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return;
3564
+
3565
+ if (typeof data.isScrolling === 'undefined') {
3566
+ var touchAngle;
3567
+
3568
+ if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
3569
+ data.isScrolling = false;
3570
+ } else {
3571
+ // eslint-disable-next-line
3572
+ if (diffX * diffX + diffY * diffY >= 25) {
3573
+ touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
3574
+ data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;
3575
+ }
3576
+ }
3577
+ }
3578
+
3579
+ if (data.isScrolling) {
3580
+ swiper.emit('touchMoveOpposite', e);
3581
+ }
3582
+
3583
+ if (typeof data.startMoving === 'undefined') {
3584
+ if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
3585
+ data.startMoving = true;
3586
+ }
3587
+ }
3588
+
3589
+ if (data.isScrolling) {
3590
+ data.isTouched = false;
3591
+ return;
3592
+ }
3593
+
3594
+ if (!data.startMoving) {
3595
+ return;
3596
+ }
3597
+
3598
+ swiper.allowClick = false;
3599
+
3600
+ if (!params.cssMode && e.cancelable) {
3601
+ e.preventDefault();
3602
+ }
3603
+
3604
+ if (params.touchMoveStopPropagation && !params.nested) {
3605
+ e.stopPropagation();
3606
+ }
3607
+
3608
+ if (!data.isMoved) {
3609
+ if (params.loop) {
3610
+ swiper.loopFix();
3611
+ }
3612
+
3613
+ data.startTranslate = swiper.getTranslate();
3614
+ swiper.setTransition(0);
3615
+
3616
+ if (swiper.animating) {
3617
+ swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
3618
+ }
3619
+
3620
+ data.allowMomentumBounce = false; // Grab Cursor
3621
+
3622
+ if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
3623
+ swiper.setGrabCursor(true);
3624
+ }
3625
+
3626
+ swiper.emit('sliderFirstMove', e);
3627
+ }
3628
+
3629
+ swiper.emit('sliderMove', e);
3630
+ data.isMoved = true;
3631
+ var diff = swiper.isHorizontal() ? diffX : diffY;
3632
+ touches.diff = diff;
3633
+ diff *= params.touchRatio;
3634
+ if (rtl) diff = -diff;
3635
+ swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
3636
+ data.currentTranslate = diff + data.startTranslate;
3637
+ var disableParentSwiper = true;
3638
+ var resistanceRatio = params.resistanceRatio;
3639
+
3640
+ if (params.touchReleaseOnEdges) {
3641
+ resistanceRatio = 0;
3642
+ }
3643
+
3644
+ if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {
3645
+ disableParentSwiper = false;
3646
+ if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio);
3647
+ } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
3648
+ disableParentSwiper = false;
3649
+ if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio);
3650
+ }
3651
+
3652
+ if (disableParentSwiper) {
3653
+ e.preventedByNestedSwiper = true;
3654
+ } // Directions locks
3655
+
3656
+
3657
+ if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
3658
+ data.currentTranslate = data.startTranslate;
3659
+ }
3660
+
3661
+ if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
3662
+ data.currentTranslate = data.startTranslate;
3663
+ } // Threshold
3664
+
3665
+
3666
+ if (params.threshold > 0) {
3667
+ if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
3668
+ if (!data.allowThresholdMove) {
3669
+ data.allowThresholdMove = true;
3670
+ touches.startX = touches.currentX;
3671
+ touches.startY = touches.currentY;
3672
+ data.currentTranslate = data.startTranslate;
3673
+ touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
3674
+ return;
3675
+ }
3676
+ } else {
3677
+ data.currentTranslate = data.startTranslate;
3678
+ return;
3679
+ }
3680
+ }
3681
+
3682
+ if (!params.followFinger || params.cssMode) return; // Update active index in free mode
3683
+
3684
+ if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
3685
+ swiper.updateActiveIndex();
3686
+ swiper.updateSlidesClasses();
3687
+ }
3688
+
3689
+ if (params.freeMode) {
3690
+ // Velocity
3691
+ if (data.velocities.length === 0) {
3692
+ data.velocities.push({
3693
+ position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
3694
+ time: data.touchStartTime
3695
+ });
3696
+ }
3697
+
3698
+ data.velocities.push({
3699
+ position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
3700
+ time: now()
3701
+ });
3702
+ } // Update progress
3703
+
3704
+
3705
+ swiper.updateProgress(data.currentTranslate); // Update translate
3706
+
3707
+ swiper.setTranslate(data.currentTranslate);
3708
+ }
3709
+
3710
+ function onTouchEnd(event) {
3711
+ var swiper = this;
3712
+ var data = swiper.touchEventsData;
3713
+ var params = swiper.params,
3714
+ touches = swiper.touches,
3715
+ rtl = swiper.rtlTranslate,
3716
+ $wrapperEl = swiper.$wrapperEl,
3717
+ slidesGrid = swiper.slidesGrid,
3718
+ snapGrid = swiper.snapGrid;
3719
+ var e = event;
3720
+ if (e.originalEvent) e = e.originalEvent;
3721
+
3722
+ if (data.allowTouchCallbacks) {
3723
+ swiper.emit('touchEnd', e);
3724
+ }
3725
+
3726
+ data.allowTouchCallbacks = false;
3727
+
3728
+ if (!data.isTouched) {
3729
+ if (data.isMoved && params.grabCursor) {
3730
+ swiper.setGrabCursor(false);
3731
+ }
3732
+
3733
+ data.isMoved = false;
3734
+ data.startMoving = false;
3735
+ return;
3736
+ } // Return Grab Cursor
3737
+
3738
+
3739
+ if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
3740
+ swiper.setGrabCursor(false);
3741
+ } // Time diff
3742
+
3743
+
3744
+ var touchEndTime = now();
3745
+ var timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click
3746
+
3747
+ if (swiper.allowClick) {
3748
+ swiper.updateClickedSlide(e);
3749
+ swiper.emit('tap click', e);
3750
+
3751
+ if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
3752
+ swiper.emit('doubleTap doubleClick', e);
3753
+ }
3754
+ }
3755
+
3756
+ data.lastClickTime = now();
3757
+ nextTick(function () {
3758
+ if (!swiper.destroyed) swiper.allowClick = true;
3759
+ });
3760
+
3761
+ if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
3762
+ data.isTouched = false;
3763
+ data.isMoved = false;
3764
+ data.startMoving = false;
3765
+ return;
3766
+ }
3767
+
3768
+ data.isTouched = false;
3769
+ data.isMoved = false;
3770
+ data.startMoving = false;
3771
+ var currentPos;
3772
+
3773
+ if (params.followFinger) {
3774
+ currentPos = rtl ? swiper.translate : -swiper.translate;
3775
+ } else {
3776
+ currentPos = -data.currentTranslate;
3777
+ }
3778
+
3779
+ if (params.cssMode) {
3780
+ return;
3781
+ }
3782
+
3783
+ if (params.freeMode) {
3784
+ if (currentPos < -swiper.minTranslate()) {
3785
+ swiper.slideTo(swiper.activeIndex);
3786
+ return;
3787
+ }
3788
+
3789
+ if (currentPos > -swiper.maxTranslate()) {
3790
+ if (swiper.slides.length < snapGrid.length) {
3791
+ swiper.slideTo(snapGrid.length - 1);
3792
+ } else {
3793
+ swiper.slideTo(swiper.slides.length - 1);
3794
+ }
3795
+
3796
+ return;
3797
+ }
3798
+
3799
+ if (params.freeModeMomentum) {
3800
+ if (data.velocities.length > 1) {
3801
+ var lastMoveEvent = data.velocities.pop();
3802
+ var velocityEvent = data.velocities.pop();
3803
+ var distance = lastMoveEvent.position - velocityEvent.position;
3804
+ var time = lastMoveEvent.time - velocityEvent.time;
3805
+ swiper.velocity = distance / time;
3806
+ swiper.velocity /= 2;
3807
+
3808
+ if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
3809
+ swiper.velocity = 0;
3810
+ } // this implies that the user stopped moving a finger then released.
3811
+ // There would be no events with distance zero, so the last event is stale.
3812
+
3813
+
3814
+ if (time > 150 || now() - lastMoveEvent.time > 300) {
3815
+ swiper.velocity = 0;
3816
+ }
3817
+ } else {
3818
+ swiper.velocity = 0;
3819
+ }
3820
+
3821
+ swiper.velocity *= params.freeModeMomentumVelocityRatio;
3822
+ data.velocities.length = 0;
3823
+ var momentumDuration = 1000 * params.freeModeMomentumRatio;
3824
+ var momentumDistance = swiper.velocity * momentumDuration;
3825
+ var newPosition = swiper.translate + momentumDistance;
3826
+ if (rtl) newPosition = -newPosition;
3827
+ var doBounce = false;
3828
+ var afterBouncePosition;
3829
+ var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
3830
+ var needsLoopFix;
3831
+
3832
+ if (newPosition < swiper.maxTranslate()) {
3833
+ if (params.freeModeMomentumBounce) {
3834
+ if (newPosition + swiper.maxTranslate() < -bounceAmount) {
3835
+ newPosition = swiper.maxTranslate() - bounceAmount;
3836
+ }
3837
+
3838
+ afterBouncePosition = swiper.maxTranslate();
3839
+ doBounce = true;
3840
+ data.allowMomentumBounce = true;
3841
+ } else {
3842
+ newPosition = swiper.maxTranslate();
3843
+ }
3844
+
3845
+ if (params.loop && params.centeredSlides) needsLoopFix = true;
3846
+ } else if (newPosition > swiper.minTranslate()) {
3847
+ if (params.freeModeMomentumBounce) {
3848
+ if (newPosition - swiper.minTranslate() > bounceAmount) {
3849
+ newPosition = swiper.minTranslate() + bounceAmount;
3850
+ }
3851
+
3852
+ afterBouncePosition = swiper.minTranslate();
3853
+ doBounce = true;
3854
+ data.allowMomentumBounce = true;
3855
+ } else {
3856
+ newPosition = swiper.minTranslate();
3857
+ }
3858
+
3859
+ if (params.loop && params.centeredSlides) needsLoopFix = true;
3860
+ } else if (params.freeModeSticky) {
3861
+ var nextSlide;
3862
+
3863
+ for (var j = 0; j < snapGrid.length; j += 1) {
3864
+ if (snapGrid[j] > -newPosition) {
3865
+ nextSlide = j;
3866
+ break;
3867
+ }
3868
+ }
3869
+
3870
+ if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
3871
+ newPosition = snapGrid[nextSlide];
3872
+ } else {
3873
+ newPosition = snapGrid[nextSlide - 1];
3874
+ }
3875
+
3876
+ newPosition = -newPosition;
3877
+ }
3878
+
3879
+ if (needsLoopFix) {
3880
+ swiper.once('transitionEnd', function () {
3881
+ swiper.loopFix();
3882
+ });
3883
+ } // Fix duration
3884
+
3885
+
3886
+ if (swiper.velocity !== 0) {
3887
+ if (rtl) {
3888
+ momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
3889
+ } else {
3890
+ momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
3891
+ }
3892
+
3893
+ if (params.freeModeSticky) {
3894
+ // If freeModeSticky is active and the user ends a swipe with a slow-velocity
3895
+ // event, then durations can be 20+ seconds to slide one (or zero!) slides.
3896
+ // It's easy to see this when simulating touch with mouse events. To fix this,
3897
+ // limit single-slide swipes to the default slide duration. This also has the
3898
+ // nice side effect of matching slide speed if the user stopped moving before
3899
+ // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
3900
+ // For faster swipes, also apply limits (albeit higher ones).
3901
+ var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
3902
+ var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
3903
+
3904
+ if (moveDistance < currentSlideSize) {
3905
+ momentumDuration = params.speed;
3906
+ } else if (moveDistance < 2 * currentSlideSize) {
3907
+ momentumDuration = params.speed * 1.5;
3908
+ } else {
3909
+ momentumDuration = params.speed * 2.5;
3910
+ }
3911
+ }
3912
+ } else if (params.freeModeSticky) {
3913
+ swiper.slideToClosest();
3914
+ return;
3915
+ }
3916
+
3917
+ if (params.freeModeMomentumBounce && doBounce) {
3918
+ swiper.updateProgress(afterBouncePosition);
3919
+ swiper.setTransition(momentumDuration);
3920
+ swiper.setTranslate(newPosition);
3921
+ swiper.transitionStart(true, swiper.swipeDirection);
3922
+ swiper.animating = true;
3923
+ $wrapperEl.transitionEnd(function () {
3924
+ if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
3925
+ swiper.emit('momentumBounce');
3926
+ swiper.setTransition(params.speed);
3927
+ setTimeout(function () {
3928
+ swiper.setTranslate(afterBouncePosition);
3929
+ $wrapperEl.transitionEnd(function () {
3930
+ if (!swiper || swiper.destroyed) return;
3931
+ swiper.transitionEnd();
3932
+ });
3933
+ }, 0);
3934
+ });
3935
+ } else if (swiper.velocity) {
3936
+ swiper.updateProgress(newPosition);
3937
+ swiper.setTransition(momentumDuration);
3938
+ swiper.setTranslate(newPosition);
3939
+ swiper.transitionStart(true, swiper.swipeDirection);
3940
+
3941
+ if (!swiper.animating) {
3942
+ swiper.animating = true;
3943
+ $wrapperEl.transitionEnd(function () {
3944
+ if (!swiper || swiper.destroyed) return;
3945
+ swiper.transitionEnd();
3946
+ });
3947
+ }
3948
+ } else {
3949
+ swiper.updateProgress(newPosition);
3950
+ }
3951
+
3952
+ swiper.updateActiveIndex();
3953
+ swiper.updateSlidesClasses();
3954
+ } else if (params.freeModeSticky) {
3955
+ swiper.slideToClosest();
3956
+ return;
3957
+ }
3958
+
3959
+ if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
3960
+ swiper.updateProgress();
3961
+ swiper.updateActiveIndex();
3962
+ swiper.updateSlidesClasses();
3963
+ }
3964
+
3965
+ return;
3966
+ } // Find current slide
3967
+
3968
+
3969
+ var stopIndex = 0;
3970
+ var groupSize = swiper.slidesSizesGrid[0];
3971
+
3972
+ for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {
3973
+ var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
3974
+
3975
+ if (typeof slidesGrid[i + _increment] !== 'undefined') {
3976
+ if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + _increment]) {
3977
+ stopIndex = i;
3978
+ groupSize = slidesGrid[i + _increment] - slidesGrid[i];
3979
+ }
3980
+ } else if (currentPos >= slidesGrid[i]) {
3981
+ stopIndex = i;
3982
+ groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
3983
+ }
3984
+ } // Find current slide size
3985
+
3986
+
3987
+ var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
3988
+ var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
3989
+
3990
+ if (timeDiff > params.longSwipesMs) {
3991
+ // Long touches
3992
+ if (!params.longSwipes) {
3993
+ swiper.slideTo(swiper.activeIndex);
3994
+ return;
3995
+ }
3996
+
3997
+ if (swiper.swipeDirection === 'next') {
3998
+ if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);
3999
+ }
4000
+
4001
+ if (swiper.swipeDirection === 'prev') {
4002
+ if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);
4003
+ }
4004
+ } else {
4005
+ // Short swipes
4006
+ if (!params.shortSwipes) {
4007
+ swiper.slideTo(swiper.activeIndex);
4008
+ return;
4009
+ }
4010
+
4011
+ var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
4012
+
4013
+ if (!isNavButtonTarget) {
4014
+ if (swiper.swipeDirection === 'next') {
4015
+ swiper.slideTo(stopIndex + increment);
4016
+ }
4017
+
4018
+ if (swiper.swipeDirection === 'prev') {
4019
+ swiper.slideTo(stopIndex);
4020
+ }
4021
+ } else if (e.target === swiper.navigation.nextEl) {
4022
+ swiper.slideTo(stopIndex + increment);
4023
+ } else {
4024
+ swiper.slideTo(stopIndex);
4025
+ }
4026
+ }
4027
+ }
4028
+
4029
+ function onResize() {
4030
+ var swiper = this;
4031
+ var params = swiper.params,
4032
+ el = swiper.el;
4033
+ if (el && el.offsetWidth === 0) return; // Breakpoints
4034
+
4035
+ if (params.breakpoints) {
4036
+ swiper.setBreakpoint();
4037
+ } // Save locks
4038
+
4039
+
4040
+ var allowSlideNext = swiper.allowSlideNext,
4041
+ allowSlidePrev = swiper.allowSlidePrev,
4042
+ snapGrid = swiper.snapGrid; // Disable locks on resize
4043
+
4044
+ swiper.allowSlideNext = true;
4045
+ swiper.allowSlidePrev = true;
4046
+ swiper.updateSize();
4047
+ swiper.updateSlides();
4048
+ swiper.updateSlidesClasses();
4049
+
4050
+ if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {
4051
+ swiper.slideTo(swiper.slides.length - 1, 0, false, true);
4052
+ } else {
4053
+ swiper.slideTo(swiper.activeIndex, 0, false, true);
4054
+ }
4055
+
4056
+ if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
4057
+ swiper.autoplay.run();
4058
+ } // Return locks after resize
4059
+
4060
+
4061
+ swiper.allowSlidePrev = allowSlidePrev;
4062
+ swiper.allowSlideNext = allowSlideNext;
4063
+
4064
+ if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
4065
+ swiper.checkOverflow();
4066
+ }
4067
+ }
4068
+
4069
+ function onClick(e) {
4070
+ var swiper = this;
4071
+
4072
+ if (!swiper.allowClick) {
4073
+ if (swiper.params.preventClicks) e.preventDefault();
4074
+
4075
+ if (swiper.params.preventClicksPropagation && swiper.animating) {
4076
+ e.stopPropagation();
4077
+ e.stopImmediatePropagation();
4078
+ }
4079
+ }
4080
+ }
4081
+
4082
+ function onScroll() {
4083
+ var swiper = this;
4084
+ var wrapperEl = swiper.wrapperEl,
4085
+ rtlTranslate = swiper.rtlTranslate;
4086
+ swiper.previousTranslate = swiper.translate;
4087
+
4088
+ if (swiper.isHorizontal()) {
4089
+ if (rtlTranslate) {
4090
+ swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft;
4091
+ } else {
4092
+ swiper.translate = -wrapperEl.scrollLeft;
4093
+ }
4094
+ } else {
4095
+ swiper.translate = -wrapperEl.scrollTop;
4096
+ } // eslint-disable-next-line
4097
+
4098
+
4099
+ if (swiper.translate === -0) swiper.translate = 0;
4100
+ swiper.updateActiveIndex();
4101
+ swiper.updateSlidesClasses();
4102
+ var newProgress;
4103
+ var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
4104
+
4105
+ if (translatesDiff === 0) {
4106
+ newProgress = 0;
4107
+ } else {
4108
+ newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;
4109
+ }
4110
+
4111
+ if (newProgress !== swiper.progress) {
4112
+ swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
4113
+ }
4114
+
4115
+ swiper.emit('setTranslate', swiper.translate, false);
4116
+ }
4117
+
4118
+ var dummyEventAttached = false;
4119
+
4120
+ function dummyEventListener() {}
4121
+
4122
+ function attachEvents() {
4123
+ var swiper = this;
4124
+ var document = getDocument();
4125
+ var params = swiper.params,
4126
+ touchEvents = swiper.touchEvents,
4127
+ el = swiper.el,
4128
+ wrapperEl = swiper.wrapperEl,
4129
+ device = swiper.device,
4130
+ support = swiper.support;
4131
+ swiper.onTouchStart = onTouchStart.bind(swiper);
4132
+ swiper.onTouchMove = onTouchMove.bind(swiper);
4133
+ swiper.onTouchEnd = onTouchEnd.bind(swiper);
4134
+
4135
+ if (params.cssMode) {
4136
+ swiper.onScroll = onScroll.bind(swiper);
4137
+ }
4138
+
4139
+ swiper.onClick = onClick.bind(swiper);
4140
+ var capture = !!params.nested; // Touch Events
4141
+
4142
+ if (!support.touch && support.pointerEvents) {
4143
+ el.addEventListener(touchEvents.start, swiper.onTouchStart, false);
4144
+ document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
4145
+ document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
4146
+ } else {
4147
+ if (support.touch) {
4148
+ var passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {
4149
+ passive: true,
4150
+ capture: false
4151
+ } : false;
4152
+ el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
4153
+ el.addEventListener(touchEvents.move, swiper.onTouchMove, support.passiveListener ? {
4154
+ passive: false,
4155
+ capture: capture
4156
+ } : capture);
4157
+ el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
4158
+
4159
+ if (touchEvents.cancel) {
4160
+ el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
4161
+ }
4162
+
4163
+ if (!dummyEventAttached) {
4164
+ document.addEventListener('touchstart', dummyEventListener);
4165
+ dummyEventAttached = true;
4166
+ }
4167
+ }
4168
+
4169
+ if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {
4170
+ el.addEventListener('mousedown', swiper.onTouchStart, false);
4171
+ document.addEventListener('mousemove', swiper.onTouchMove, capture);
4172
+ document.addEventListener('mouseup', swiper.onTouchEnd, false);
4173
+ }
4174
+ } // Prevent Links Clicks
4175
+
4176
+
4177
+ if (params.preventClicks || params.preventClicksPropagation) {
4178
+ el.addEventListener('click', swiper.onClick, true);
4179
+ }
4180
+
4181
+ if (params.cssMode) {
4182
+ wrapperEl.addEventListener('scroll', swiper.onScroll);
4183
+ } // Resize handler
4184
+
4185
+
4186
+ if (params.updateOnWindowResize) {
4187
+ swiper.on(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);
4188
+ } else {
4189
+ swiper.on('observerUpdate', onResize, true);
4190
+ }
4191
+ }
4192
+
4193
+ function detachEvents() {
4194
+ var swiper = this;
4195
+ var document = getDocument();
4196
+ var params = swiper.params,
4197
+ touchEvents = swiper.touchEvents,
4198
+ el = swiper.el,
4199
+ wrapperEl = swiper.wrapperEl,
4200
+ device = swiper.device,
4201
+ support = swiper.support;
4202
+ var capture = !!params.nested; // Touch Events
4203
+
4204
+ if (!support.touch && support.pointerEvents) {
4205
+ el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
4206
+ document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
4207
+ document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
4208
+ } else {
4209
+ if (support.touch) {
4210
+ var passiveListener = touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners ? {
4211
+ passive: true,
4212
+ capture: false
4213
+ } : false;
4214
+ el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
4215
+ el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
4216
+ el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
4217
+
4218
+ if (touchEvents.cancel) {
4219
+ el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
4220
+ }
4221
+ }
4222
+
4223
+ if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {
4224
+ el.removeEventListener('mousedown', swiper.onTouchStart, false);
4225
+ document.removeEventListener('mousemove', swiper.onTouchMove, capture);
4226
+ document.removeEventListener('mouseup', swiper.onTouchEnd, false);
4227
+ }
4228
+ } // Prevent Links Clicks
4229
+
4230
+
4231
+ if (params.preventClicks || params.preventClicksPropagation) {
4232
+ el.removeEventListener('click', swiper.onClick, true);
4233
+ }
4234
+
4235
+ if (params.cssMode) {
4236
+ wrapperEl.removeEventListener('scroll', swiper.onScroll);
4237
+ } // Resize handler
4238
+
4239
+
4240
+ swiper.off(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize);
4241
+ }
4242
+
4243
+ var events = {
4244
+ attachEvents: attachEvents,
4245
+ detachEvents: detachEvents
4246
+ };
4247
+
4248
+ function setBreakpoint() {
4249
+ var swiper = this;
4250
+ var activeIndex = swiper.activeIndex,
4251
+ initialized = swiper.initialized,
4252
+ _swiper$loopedSlides = swiper.loopedSlides,
4253
+ loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides,
4254
+ params = swiper.params,
4255
+ $el = swiper.$el;
4256
+ var breakpoints = params.breakpoints;
4257
+ if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters
4258
+
4259
+ var breakpoint = swiper.getBreakpoint(breakpoints);
4260
+
4261
+ if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
4262
+ var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
4263
+
4264
+ if (breakpointOnlyParams) {
4265
+ ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) {
4266
+ var paramValue = breakpointOnlyParams[param];
4267
+ if (typeof paramValue === 'undefined') return;
4268
+
4269
+ if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {
4270
+ breakpointOnlyParams[param] = 'auto';
4271
+ } else if (param === 'slidesPerView') {
4272
+ breakpointOnlyParams[param] = parseFloat(paramValue);
4273
+ } else {
4274
+ breakpointOnlyParams[param] = parseInt(paramValue, 10);
4275
+ }
4276
+ });
4277
+ }
4278
+
4279
+ var breakpointParams = breakpointOnlyParams || swiper.originalParams;
4280
+ var wasMultiRow = params.slidesPerColumn > 1;
4281
+ var isMultiRow = breakpointParams.slidesPerColumn > 1;
4282
+
4283
+ if (wasMultiRow && !isMultiRow) {
4284
+ $el.removeClass(params.containerModifierClass + "multirow " + params.containerModifierClass + "multirow-column");
4285
+ swiper.emitContainerClasses();
4286
+ } else if (!wasMultiRow && isMultiRow) {
4287
+ $el.addClass(params.containerModifierClass + "multirow");
4288
+
4289
+ if (breakpointParams.slidesPerColumnFill === 'column') {
4290
+ $el.addClass(params.containerModifierClass + "multirow-column");
4291
+ }
4292
+
4293
+ swiper.emitContainerClasses();
4294
+ }
4295
+
4296
+ var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
4297
+ var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
4298
+
4299
+ if (directionChanged && initialized) {
4300
+ swiper.changeDirection();
4301
+ }
4302
+
4303
+ extend$1(swiper.params, breakpointParams);
4304
+ extend$1(swiper, {
4305
+ allowTouchMove: swiper.params.allowTouchMove,
4306
+ allowSlideNext: swiper.params.allowSlideNext,
4307
+ allowSlidePrev: swiper.params.allowSlidePrev
4308
+ });
4309
+ swiper.currentBreakpoint = breakpoint;
4310
+ swiper.emit('_beforeBreakpoint', breakpointParams);
4311
+
4312
+ if (needsReLoop && initialized) {
4313
+ swiper.loopDestroy();
4314
+ swiper.loopCreate();
4315
+ swiper.updateSlides();
4316
+ swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);
4317
+ }
4318
+
4319
+ swiper.emit('breakpoint', breakpointParams);
4320
+ }
4321
+ }
4322
+
4323
+ function getBreakpoints(breakpoints) {
4324
+ var window = getWindow(); // Get breakpoint for window width
4325
+
4326
+ if (!breakpoints) return undefined;
4327
+ var breakpoint = false;
4328
+ var points = Object.keys(breakpoints).map(function (point) {
4329
+ if (typeof point === 'string' && point.indexOf('@') === 0) {
4330
+ var minRatio = parseFloat(point.substr(1));
4331
+ var value = window.innerHeight * minRatio;
4332
+ return {
4333
+ value: value,
4334
+ point: point
4335
+ };
4336
+ }
4337
+
4338
+ return {
4339
+ value: point,
4340
+ point: point
4341
+ };
4342
+ });
4343
+ points.sort(function (a, b) {
4344
+ return parseInt(a.value, 10) - parseInt(b.value, 10);
4345
+ });
4346
+
4347
+ for (var i = 0; i < points.length; i += 1) {
4348
+ var _points$i = points[i],
4349
+ point = _points$i.point,
4350
+ value = _points$i.value;
4351
+
4352
+ if (value <= window.innerWidth) {
4353
+ breakpoint = point;
4354
+ }
4355
+ }
4356
+
4357
+ return breakpoint || 'max';
4358
+ }
4359
+
4360
+ var breakpoints = {
4361
+ setBreakpoint: setBreakpoint,
4362
+ getBreakpoint: getBreakpoints
4363
+ };
4364
+
4365
+ function addClasses() {
4366
+ var swiper = this;
4367
+ var classNames = swiper.classNames,
4368
+ params = swiper.params,
4369
+ rtl = swiper.rtl,
4370
+ $el = swiper.$el,
4371
+ device = swiper.device,
4372
+ support = swiper.support;
4373
+ var suffixes = [];
4374
+ suffixes.push('initialized');
4375
+ suffixes.push(params.direction);
4376
+
4377
+ if (support.pointerEvents && !support.touch) {
4378
+ suffixes.push('pointer-events');
4379
+ }
4380
+
4381
+ if (params.freeMode) {
4382
+ suffixes.push('free-mode');
4383
+ }
4384
+
4385
+ if (params.autoHeight) {
4386
+ suffixes.push('autoheight');
4387
+ }
4388
+
4389
+ if (rtl) {
4390
+ suffixes.push('rtl');
4391
+ }
4392
+
4393
+ if (params.slidesPerColumn > 1) {
4394
+ suffixes.push('multirow');
4395
+
4396
+ if (params.slidesPerColumnFill === 'column') {
4397
+ suffixes.push('multirow-column');
4398
+ }
4399
+ }
4400
+
4401
+ if (device.android) {
4402
+ suffixes.push('android');
4403
+ }
4404
+
4405
+ if (device.ios) {
4406
+ suffixes.push('ios');
4407
+ }
4408
+
4409
+ if (params.cssMode) {
4410
+ suffixes.push('css-mode');
4411
+ }
4412
+
4413
+ suffixes.forEach(function (suffix) {
4414
+ classNames.push(params.containerModifierClass + suffix);
4415
+ });
4416
+ $el.addClass(classNames.join(' '));
4417
+ swiper.emitContainerClasses();
4418
+ }
4419
+
4420
+ function removeClasses() {
4421
+ var swiper = this;
4422
+ var $el = swiper.$el,
4423
+ classNames = swiper.classNames;
4424
+ $el.removeClass(classNames.join(' '));
4425
+ swiper.emitContainerClasses();
4426
+ }
4427
+
4428
+ var classes = {
4429
+ addClasses: addClasses,
4430
+ removeClasses: removeClasses
4431
+ };
4432
+
4433
+ function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {
4434
+ var window = getWindow();
4435
+ var image;
4436
+
4437
+ function onReady() {
4438
+ if (callback) callback();
4439
+ }
4440
+
4441
+ var isPicture = $(imageEl).parent('picture')[0];
4442
+
4443
+ if (!isPicture && (!imageEl.complete || !checkForComplete)) {
4444
+ if (src) {
4445
+ image = new window.Image();
4446
+ image.onload = onReady;
4447
+ image.onerror = onReady;
4448
+
4449
+ if (sizes) {
4450
+ image.sizes = sizes;
4451
+ }
4452
+
4453
+ if (srcset) {
4454
+ image.srcset = srcset;
4455
+ }
4456
+
4457
+ if (src) {
4458
+ image.src = src;
4459
+ }
4460
+ } else {
4461
+ onReady();
4462
+ }
4463
+ } else {
4464
+ // image already loaded...
4465
+ onReady();
4466
+ }
4467
+ }
4468
+
4469
+ function preloadImages() {
4470
+ var swiper = this;
4471
+ swiper.imagesToLoad = swiper.$el.find('img');
4472
+
4473
+ function onReady() {
4474
+ if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;
4475
+ if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;
4476
+
4477
+ if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
4478
+ if (swiper.params.updateOnImagesReady) swiper.update();
4479
+ swiper.emit('imagesReady');
4480
+ }
4481
+ }
4482
+
4483
+ for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {
4484
+ var imageEl = swiper.imagesToLoad[i];
4485
+ swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);
4486
+ }
4487
+ }
4488
+
4489
+ var images = {
4490
+ loadImage: loadImage,
4491
+ preloadImages: preloadImages
4492
+ };
4493
+
4494
+ function checkOverflow() {
4495
+ var swiper = this;
4496
+ var params = swiper.params;
4497
+ var wasLocked = swiper.isLocked;
4498
+ var lastSlidePosition = swiper.slides.length > 0 && params.slidesOffsetBefore + params.spaceBetween * (swiper.slides.length - 1) + swiper.slides[0].offsetWidth * swiper.slides.length;
4499
+
4500
+ if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {
4501
+ swiper.isLocked = lastSlidePosition <= swiper.size;
4502
+ } else {
4503
+ swiper.isLocked = swiper.snapGrid.length === 1;
4504
+ }
4505
+
4506
+ swiper.allowSlideNext = !swiper.isLocked;
4507
+ swiper.allowSlidePrev = !swiper.isLocked; // events
4508
+
4509
+ if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
4510
+
4511
+ if (wasLocked && wasLocked !== swiper.isLocked) {
4512
+ swiper.isEnd = false;
4513
+ if (swiper.navigation) swiper.navigation.update();
4514
+ }
4515
+ }
4516
+
4517
+ var checkOverflow$1 = {
4518
+ checkOverflow: checkOverflow
4519
+ };
4520
+
4521
+ var defaults = {
4522
+ init: true,
4523
+ direction: 'horizontal',
4524
+ touchEventsTarget: 'container',
4525
+ initialSlide: 0,
4526
+ speed: 300,
4527
+ cssMode: false,
4528
+ updateOnWindowResize: true,
4529
+ nested: false,
4530
+ // Overrides
4531
+ width: null,
4532
+ height: null,
4533
+ //
4534
+ preventInteractionOnTransition: false,
4535
+ // ssr
4536
+ userAgent: null,
4537
+ url: null,
4538
+ // To support iOS's swipe-to-go-back gesture (when being used in-app).
4539
+ edgeSwipeDetection: false,
4540
+ edgeSwipeThreshold: 20,
4541
+ // Free mode
4542
+ freeMode: false,
4543
+ freeModeMomentum: true,
4544
+ freeModeMomentumRatio: 1,
4545
+ freeModeMomentumBounce: true,
4546
+ freeModeMomentumBounceRatio: 1,
4547
+ freeModeMomentumVelocityRatio: 1,
4548
+ freeModeSticky: false,
4549
+ freeModeMinimumVelocity: 0.02,
4550
+ // Autoheight
4551
+ autoHeight: false,
4552
+ // Set wrapper width
4553
+ setWrapperSize: false,
4554
+ // Virtual Translate
4555
+ virtualTranslate: false,
4556
+ // Effects
4557
+ effect: 'slide',
4558
+ // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
4559
+ // Breakpoints
4560
+ breakpoints: undefined,
4561
+ // Slides grid
4562
+ spaceBetween: 0,
4563
+ slidesPerView: 1,
4564
+ slidesPerColumn: 1,
4565
+ slidesPerColumnFill: 'column',
4566
+ slidesPerGroup: 1,
4567
+ slidesPerGroupSkip: 0,
4568
+ centeredSlides: false,
4569
+ centeredSlidesBounds: false,
4570
+ slidesOffsetBefore: 0,
4571
+ // in px
4572
+ slidesOffsetAfter: 0,
4573
+ // in px
4574
+ normalizeSlideIndex: true,
4575
+ centerInsufficientSlides: false,
4576
+ // Disable swiper and hide navigation when container not overflow
4577
+ watchOverflow: false,
4578
+ // Round length
4579
+ roundLengths: false,
4580
+ // Touches
4581
+ touchRatio: 1,
4582
+ touchAngle: 45,
4583
+ simulateTouch: true,
4584
+ shortSwipes: true,
4585
+ longSwipes: true,
4586
+ longSwipesRatio: 0.5,
4587
+ longSwipesMs: 300,
4588
+ followFinger: true,
4589
+ allowTouchMove: true,
4590
+ threshold: 0,
4591
+ touchMoveStopPropagation: false,
4592
+ touchStartPreventDefault: true,
4593
+ touchStartForcePreventDefault: false,
4594
+ touchReleaseOnEdges: false,
4595
+ // Unique Navigation Elements
4596
+ uniqueNavElements: true,
4597
+ // Resistance
4598
+ resistance: true,
4599
+ resistanceRatio: 0.85,
4600
+ // Progress
4601
+ watchSlidesProgress: false,
4602
+ watchSlidesVisibility: false,
4603
+ // Cursor
4604
+ grabCursor: false,
4605
+ // Clicks
4606
+ preventClicks: true,
4607
+ preventClicksPropagation: true,
4608
+ slideToClickedSlide: false,
4609
+ // Images
4610
+ preloadImages: true,
4611
+ updateOnImagesReady: true,
4612
+ // loop
4613
+ loop: false,
4614
+ loopAdditionalSlides: 0,
4615
+ loopedSlides: null,
4616
+ loopFillGroupWithBlank: false,
4617
+ loopPreventsSlide: true,
4618
+ // Swiping/no swiping
4619
+ allowSlidePrev: true,
4620
+ allowSlideNext: true,
4621
+ swipeHandler: null,
4622
+ // '.swipe-handler',
4623
+ noSwiping: true,
4624
+ noSwipingClass: 'swiper-no-swiping',
4625
+ noSwipingSelector: null,
4626
+ // Passive Listeners
4627
+ passiveListeners: true,
4628
+ // NS
4629
+ containerModifierClass: 'swiper-container-',
4630
+ // NEW
4631
+ slideClass: 'swiper-slide',
4632
+ slideBlankClass: 'swiper-slide-invisible-blank',
4633
+ slideActiveClass: 'swiper-slide-active',
4634
+ slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
4635
+ slideVisibleClass: 'swiper-slide-visible',
4636
+ slideDuplicateClass: 'swiper-slide-duplicate',
4637
+ slideNextClass: 'swiper-slide-next',
4638
+ slideDuplicateNextClass: 'swiper-slide-duplicate-next',
4639
+ slidePrevClass: 'swiper-slide-prev',
4640
+ slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
4641
+ wrapperClass: 'swiper-wrapper',
4642
+ // Callbacks
4643
+ runCallbacksOnInit: true,
4644
+ // Internals
4645
+ _emitClasses: false
4646
+ };
4647
+
4648
+ var prototypes = {
4649
+ modular: modular,
4650
+ eventsEmitter: eventsEmitter,
4651
+ update: update,
4652
+ translate: translate,
4653
+ transition: transition$1,
4654
+ slide: slide,
4655
+ loop: loop,
4656
+ grabCursor: grabCursor,
4657
+ manipulation: manipulation,
4658
+ events: events,
4659
+ breakpoints: breakpoints,
4660
+ checkOverflow: checkOverflow$1,
4661
+ classes: classes,
4662
+ images: images
4663
+ };
4664
+ var extendedDefaults = {};
4665
+
4666
+ var Swiper = /*#__PURE__*/function () {
4667
+ function Swiper() {
4668
+ var el;
4669
+ var params;
4670
+
4671
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
4672
+ args[_key] = arguments[_key];
4673
+ }
4674
+
4675
+ if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
4676
+ params = args[0];
4677
+ } else {
4678
+ el = args[0];
4679
+ params = args[1];
4680
+ }
4681
+
4682
+ if (!params) params = {};
4683
+ params = extend$1({}, params);
4684
+ if (el && !params.el) params.el = el;
4685
+
4686
+ if (params.el && $(params.el).length > 1) {
4687
+ var swipers = [];
4688
+ $(params.el).each(function (containerEl) {
4689
+ var newParams = extend$1({}, params, {
4690
+ el: containerEl
4691
+ });
4692
+ swipers.push(new Swiper(newParams));
4693
+ });
4694
+ return swipers;
4695
+ } // Swiper Instance
4696
+
4697
+
4698
+ var swiper = this;
4699
+ swiper.support = getSupport();
4700
+ swiper.device = getDevice({
4701
+ userAgent: params.userAgent
4702
+ });
4703
+ swiper.browser = getBrowser();
4704
+ swiper.eventsListeners = {};
4705
+ swiper.eventsAnyListeners = [];
4706
+
4707
+ if (typeof swiper.modules === 'undefined') {
4708
+ swiper.modules = {};
4709
+ }
4710
+
4711
+ Object.keys(swiper.modules).forEach(function (moduleName) {
4712
+ var module = swiper.modules[moduleName];
4713
+
4714
+ if (module.params) {
4715
+ var moduleParamName = Object.keys(module.params)[0];
4716
+ var moduleParams = module.params[moduleParamName];
4717
+ if (typeof moduleParams !== 'object' || moduleParams === null) return;
4718
+ if (!(moduleParamName in params && 'enabled' in moduleParams)) return;
4719
+
4720
+ if (params[moduleParamName] === true) {
4721
+ params[moduleParamName] = {
4722
+ enabled: true
4723
+ };
4724
+ }
4725
+
4726
+ if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {
4727
+ params[moduleParamName].enabled = true;
4728
+ }
4729
+
4730
+ if (!params[moduleParamName]) params[moduleParamName] = {
4731
+ enabled: false
4732
+ };
4733
+ }
4734
+ }); // Extend defaults with modules params
4735
+
4736
+ var swiperParams = extend$1({}, defaults);
4737
+ swiper.useParams(swiperParams); // Extend defaults with passed params
4738
+
4739
+ swiper.params = extend$1({}, swiperParams, extendedDefaults, params);
4740
+ swiper.originalParams = extend$1({}, swiper.params);
4741
+ swiper.passedParams = extend$1({}, params); // add event listeners
4742
+
4743
+ if (swiper.params && swiper.params.on) {
4744
+ Object.keys(swiper.params.on).forEach(function (eventName) {
4745
+ swiper.on(eventName, swiper.params.on[eventName]);
4746
+ });
4747
+ }
4748
+
4749
+ if (swiper.params && swiper.params.onAny) {
4750
+ swiper.onAny(swiper.params.onAny);
4751
+ } // Save Dom lib
4752
+
4753
+
4754
+ swiper.$ = $; // Extend Swiper
4755
+
4756
+ extend$1(swiper, {
4757
+ el: el,
4758
+ // Classes
4759
+ classNames: [],
4760
+ // Slides
4761
+ slides: $(),
4762
+ slidesGrid: [],
4763
+ snapGrid: [],
4764
+ slidesSizesGrid: [],
4765
+ // isDirection
4766
+ isHorizontal: function isHorizontal() {
4767
+ return swiper.params.direction === 'horizontal';
4768
+ },
4769
+ isVertical: function isVertical() {
4770
+ return swiper.params.direction === 'vertical';
4771
+ },
4772
+ // Indexes
4773
+ activeIndex: 0,
4774
+ realIndex: 0,
4775
+ //
4776
+ isBeginning: true,
4777
+ isEnd: false,
4778
+ // Props
4779
+ translate: 0,
4780
+ previousTranslate: 0,
4781
+ progress: 0,
4782
+ velocity: 0,
4783
+ animating: false,
4784
+ // Locks
4785
+ allowSlideNext: swiper.params.allowSlideNext,
4786
+ allowSlidePrev: swiper.params.allowSlidePrev,
4787
+ // Touch Events
4788
+ touchEvents: function touchEvents() {
4789
+ var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];
4790
+ var desktop = ['mousedown', 'mousemove', 'mouseup'];
4791
+
4792
+ if (swiper.support.pointerEvents) {
4793
+ desktop = ['pointerdown', 'pointermove', 'pointerup'];
4794
+ }
4795
+
4796
+ swiper.touchEventsTouch = {
4797
+ start: touch[0],
4798
+ move: touch[1],
4799
+ end: touch[2],
4800
+ cancel: touch[3]
4801
+ };
4802
+ swiper.touchEventsDesktop = {
4803
+ start: desktop[0],
4804
+ move: desktop[1],
4805
+ end: desktop[2]
4806
+ };
4807
+ return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
4808
+ }(),
4809
+ touchEventsData: {
4810
+ isTouched: undefined,
4811
+ isMoved: undefined,
4812
+ allowTouchCallbacks: undefined,
4813
+ touchStartTime: undefined,
4814
+ isScrolling: undefined,
4815
+ currentTranslate: undefined,
4816
+ startTranslate: undefined,
4817
+ allowThresholdMove: undefined,
4818
+ // Form elements to match
4819
+ formElements: 'input, select, option, textarea, button, video, label',
4820
+ // Last click time
4821
+ lastClickTime: now(),
4822
+ clickTimeout: undefined,
4823
+ // Velocities
4824
+ velocities: [],
4825
+ allowMomentumBounce: undefined,
4826
+ isTouchEvent: undefined,
4827
+ startMoving: undefined
4828
+ },
4829
+ // Clicks
4830
+ allowClick: true,
4831
+ // Touches
4832
+ allowTouchMove: swiper.params.allowTouchMove,
4833
+ touches: {
4834
+ startX: 0,
4835
+ startY: 0,
4836
+ currentX: 0,
4837
+ currentY: 0,
4838
+ diff: 0
4839
+ },
4840
+ // Images
4841
+ imagesToLoad: [],
4842
+ imagesLoaded: 0
4843
+ }); // Install Modules
4844
+
4845
+ swiper.useModules();
4846
+ swiper.emit('_swiper'); // Init
4847
+
4848
+ if (swiper.params.init) {
4849
+ swiper.init();
4850
+ } // Return app instance
4851
+
4852
+
4853
+ return swiper;
4854
+ }
4855
+
4856
+ var _proto = Swiper.prototype;
4857
+
4858
+ _proto.emitContainerClasses = function emitContainerClasses() {
4859
+ var swiper = this;
4860
+ if (!swiper.params._emitClasses || !swiper.el) return;
4861
+ var classes = swiper.el.className.split(' ').filter(function (className) {
4862
+ return className.indexOf('swiper-container') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;
4863
+ });
4864
+ swiper.emit('_containerClasses', classes.join(' '));
4865
+ };
4866
+
4867
+ _proto.getSlideClasses = function getSlideClasses(slideEl) {
4868
+ var swiper = this;
4869
+ return slideEl.className.split(' ').filter(function (className) {
4870
+ return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;
4871
+ }).join(' ');
4872
+ };
4873
+
4874
+ _proto.emitSlidesClasses = function emitSlidesClasses() {
4875
+ var swiper = this;
4876
+ if (!swiper.params._emitClasses || !swiper.el) return;
4877
+ var updates = [];
4878
+ swiper.slides.each(function (slideEl) {
4879
+ var classNames = swiper.getSlideClasses(slideEl);
4880
+ updates.push({
4881
+ slideEl: slideEl,
4882
+ classNames: classNames
4883
+ });
4884
+ swiper.emit('_slideClass', slideEl, classNames);
4885
+ });
4886
+ swiper.emit('_slideClasses', updates);
4887
+ };
4888
+
4889
+ _proto.slidesPerViewDynamic = function slidesPerViewDynamic() {
4890
+ var swiper = this;
4891
+ var params = swiper.params,
4892
+ slides = swiper.slides,
4893
+ slidesGrid = swiper.slidesGrid,
4894
+ swiperSize = swiper.size,
4895
+ activeIndex = swiper.activeIndex;
4896
+ var spv = 1;
4897
+
4898
+ if (params.centeredSlides) {
4899
+ var slideSize = slides[activeIndex].swiperSlideSize;
4900
+ var breakLoop;
4901
+
4902
+ for (var i = activeIndex + 1; i < slides.length; i += 1) {
4903
+ if (slides[i] && !breakLoop) {
4904
+ slideSize += slides[i].swiperSlideSize;
4905
+ spv += 1;
4906
+ if (slideSize > swiperSize) breakLoop = true;
4907
+ }
4908
+ }
4909
+
4910
+ for (var _i = activeIndex - 1; _i >= 0; _i -= 1) {
4911
+ if (slides[_i] && !breakLoop) {
4912
+ slideSize += slides[_i].swiperSlideSize;
4913
+ spv += 1;
4914
+ if (slideSize > swiperSize) breakLoop = true;
4915
+ }
4916
+ }
4917
+ } else {
4918
+ for (var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1) {
4919
+ if (slidesGrid[_i2] - slidesGrid[activeIndex] < swiperSize) {
4920
+ spv += 1;
4921
+ }
4922
+ }
4923
+ }
4924
+
4925
+ return spv;
4926
+ };
4927
+
4928
+ _proto.update = function update() {
4929
+ var swiper = this;
4930
+ if (!swiper || swiper.destroyed) return;
4931
+ var snapGrid = swiper.snapGrid,
4932
+ params = swiper.params; // Breakpoints
4933
+
4934
+ if (params.breakpoints) {
4935
+ swiper.setBreakpoint();
4936
+ }
4937
+
4938
+ swiper.updateSize();
4939
+ swiper.updateSlides();
4940
+ swiper.updateProgress();
4941
+ swiper.updateSlidesClasses();
4942
+
4943
+ function setTranslate() {
4944
+ var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
4945
+ var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
4946
+ swiper.setTranslate(newTranslate);
4947
+ swiper.updateActiveIndex();
4948
+ swiper.updateSlidesClasses();
4949
+ }
4950
+
4951
+ var translated;
4952
+
4953
+ if (swiper.params.freeMode) {
4954
+ setTranslate();
4955
+
4956
+ if (swiper.params.autoHeight) {
4957
+ swiper.updateAutoHeight();
4958
+ }
4959
+ } else {
4960
+ if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
4961
+ translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
4962
+ } else {
4963
+ translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
4964
+ }
4965
+
4966
+ if (!translated) {
4967
+ setTranslate();
4968
+ }
4969
+ }
4970
+
4971
+ if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
4972
+ swiper.checkOverflow();
4973
+ }
4974
+
4975
+ swiper.emit('update');
4976
+ };
4977
+
4978
+ _proto.changeDirection = function changeDirection(newDirection, needUpdate) {
4979
+ if (needUpdate === void 0) {
4980
+ needUpdate = true;
4981
+ }
4982
+
4983
+ var swiper = this;
4984
+ var currentDirection = swiper.params.direction;
4985
+
4986
+ if (!newDirection) {
4987
+ // eslint-disable-next-line
4988
+ newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
4989
+ }
4990
+
4991
+ if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {
4992
+ return swiper;
4993
+ }
4994
+
4995
+ swiper.$el.removeClass("" + swiper.params.containerModifierClass + currentDirection).addClass("" + swiper.params.containerModifierClass + newDirection);
4996
+ swiper.emitContainerClasses();
4997
+ swiper.params.direction = newDirection;
4998
+ swiper.slides.each(function (slideEl) {
4999
+ if (newDirection === 'vertical') {
5000
+ slideEl.style.width = '';
5001
+ } else {
5002
+ slideEl.style.height = '';
5003
+ }
5004
+ });
5005
+ swiper.emit('changeDirection');
5006
+ if (needUpdate) swiper.update();
5007
+ return swiper;
5008
+ };
5009
+
5010
+ _proto.mount = function mount(el) {
5011
+ var swiper = this;
5012
+ if (swiper.mounted) return true; // Find el
5013
+
5014
+ var $el = $(el || swiper.params.el);
5015
+ el = $el[0];
5016
+
5017
+ if (!el) {
5018
+ return false;
5019
+ }
5020
+
5021
+ el.swiper = swiper; // Find Wrapper
5022
+
5023
+ var $wrapperEl;
5024
+
5025
+ if (el && el.shadowRoot && el.shadowRoot.querySelector) {
5026
+ $wrapperEl = $(el.shadowRoot.querySelector("." + swiper.params.wrapperClass)); // Children needs to return slot items
5027
+
5028
+ $wrapperEl.children = function (options) {
5029
+ return $el.children(options);
5030
+ };
5031
+ } else {
5032
+ $wrapperEl = $el.children("." + swiper.params.wrapperClass);
5033
+ }
5034
+
5035
+ extend$1(swiper, {
5036
+ $el: $el,
5037
+ el: el,
5038
+ $wrapperEl: $wrapperEl,
5039
+ wrapperEl: $wrapperEl[0],
5040
+ mounted: true,
5041
+ // RTL
5042
+ rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',
5043
+ rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
5044
+ wrongRTL: $wrapperEl.css('display') === '-webkit-box'
5045
+ });
5046
+ return true;
5047
+ };
5048
+
5049
+ _proto.init = function init(el) {
5050
+ var swiper = this;
5051
+ if (swiper.initialized) return swiper;
5052
+ var mounted = swiper.mount(el);
5053
+ if (mounted === false) return swiper;
5054
+ swiper.emit('beforeInit'); // Set breakpoint
5055
+
5056
+ if (swiper.params.breakpoints) {
5057
+ swiper.setBreakpoint();
5058
+ } // Add Classes
5059
+
5060
+
5061
+ swiper.addClasses(); // Create loop
5062
+
5063
+ if (swiper.params.loop) {
5064
+ swiper.loopCreate();
5065
+ } // Update size
5066
+
5067
+
5068
+ swiper.updateSize(); // Update slides
5069
+
5070
+ swiper.updateSlides();
5071
+
5072
+ if (swiper.params.watchOverflow) {
5073
+ swiper.checkOverflow();
5074
+ } // Set Grab Cursor
5075
+
5076
+
5077
+ if (swiper.params.grabCursor) {
5078
+ swiper.setGrabCursor();
5079
+ }
5080
+
5081
+ if (swiper.params.preloadImages) {
5082
+ swiper.preloadImages();
5083
+ } // Slide To Initial Slide
5084
+
5085
+
5086
+ if (swiper.params.loop) {
5087
+ swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
5088
+ } else {
5089
+ swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
5090
+ } // Attach events
5091
+
5092
+
5093
+ swiper.attachEvents(); // Init Flag
5094
+
5095
+ swiper.initialized = true; // Emit
5096
+
5097
+ swiper.emit('init');
5098
+ swiper.emit('afterInit');
5099
+ return swiper;
5100
+ };
5101
+
5102
+ _proto.destroy = function destroy(deleteInstance, cleanStyles) {
5103
+ if (deleteInstance === void 0) {
5104
+ deleteInstance = true;
5105
+ }
5106
+
5107
+ if (cleanStyles === void 0) {
5108
+ cleanStyles = true;
5109
+ }
5110
+
5111
+ var swiper = this;
5112
+ var params = swiper.params,
5113
+ $el = swiper.$el,
5114
+ $wrapperEl = swiper.$wrapperEl,
5115
+ slides = swiper.slides;
5116
+
5117
+ if (typeof swiper.params === 'undefined' || swiper.destroyed) {
5118
+ return null;
5119
+ }
5120
+
5121
+ swiper.emit('beforeDestroy'); // Init Flag
5122
+
5123
+ swiper.initialized = false; // Detach events
5124
+
5125
+ swiper.detachEvents(); // Destroy loop
5126
+
5127
+ if (params.loop) {
5128
+ swiper.loopDestroy();
5129
+ } // Cleanup styles
5130
+
5131
+
5132
+ if (cleanStyles) {
5133
+ swiper.removeClasses();
5134
+ $el.removeAttr('style');
5135
+ $wrapperEl.removeAttr('style');
5136
+
5137
+ if (slides && slides.length) {
5138
+ slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');
5139
+ }
5140
+ }
5141
+
5142
+ swiper.emit('destroy'); // Detach emitter events
5143
+
5144
+ Object.keys(swiper.eventsListeners).forEach(function (eventName) {
5145
+ swiper.off(eventName);
5146
+ });
5147
+
5148
+ if (deleteInstance !== false) {
5149
+ swiper.$el[0].swiper = null;
5150
+ deleteProps(swiper);
5151
+ }
5152
+
5153
+ swiper.destroyed = true;
5154
+ return null;
5155
+ };
5156
+
5157
+ Swiper.extendDefaults = function extendDefaults(newDefaults) {
5158
+ extend$1(extendedDefaults, newDefaults);
5159
+ };
5160
+
5161
+ Swiper.installModule = function installModule(module) {
5162
+ if (!Swiper.prototype.modules) Swiper.prototype.modules = {};
5163
+ var name = module.name || Object.keys(Swiper.prototype.modules).length + "_" + now();
5164
+ Swiper.prototype.modules[name] = module;
5165
+ };
5166
+
5167
+ Swiper.use = function use(module) {
5168
+ if (Array.isArray(module)) {
5169
+ module.forEach(function (m) {
5170
+ return Swiper.installModule(m);
5171
+ });
5172
+ return Swiper;
5173
+ }
5174
+
5175
+ Swiper.installModule(module);
5176
+ return Swiper;
5177
+ };
5178
+
5179
+ _createClass(Swiper, null, [{
5180
+ key: "extendedDefaults",
5181
+ get: function get() {
5182
+ return extendedDefaults;
5183
+ }
5184
+ }, {
5185
+ key: "defaults",
5186
+ get: function get() {
5187
+ return defaults;
5188
+ }
5189
+ }]);
5190
+
5191
+ return Swiper;
5192
+ }();
5193
+
5194
+ Object.keys(prototypes).forEach(function (prototypeGroup) {
5195
+ Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {
5196
+ Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
5197
+ });
5198
+ });
5199
+ Swiper.use([Resize, Observer$1]);
5200
+
5201
+ var Virtual = {
5202
+ update: function update(force) {
5203
+ var swiper = this;
5204
+ var _swiper$params = swiper.params,
5205
+ slidesPerView = _swiper$params.slidesPerView,
5206
+ slidesPerGroup = _swiper$params.slidesPerGroup,
5207
+ centeredSlides = _swiper$params.centeredSlides;
5208
+ var _swiper$params$virtua = swiper.params.virtual,
5209
+ addSlidesBefore = _swiper$params$virtua.addSlidesBefore,
5210
+ addSlidesAfter = _swiper$params$virtua.addSlidesAfter;
5211
+ var _swiper$virtual = swiper.virtual,
5212
+ previousFrom = _swiper$virtual.from,
5213
+ previousTo = _swiper$virtual.to,
5214
+ slides = _swiper$virtual.slides,
5215
+ previousSlidesGrid = _swiper$virtual.slidesGrid,
5216
+ renderSlide = _swiper$virtual.renderSlide,
5217
+ previousOffset = _swiper$virtual.offset;
5218
+ swiper.updateActiveIndex();
5219
+ var activeIndex = swiper.activeIndex || 0;
5220
+ var offsetProp;
5221
+ if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
5222
+ var slidesAfter;
5223
+ var slidesBefore;
5224
+
5225
+ if (centeredSlides) {
5226
+ slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
5227
+ slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
5228
+ } else {
5229
+ slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;
5230
+ slidesBefore = slidesPerGroup + addSlidesBefore;
5231
+ }
5232
+
5233
+ var from = Math.max((activeIndex || 0) - slidesBefore, 0);
5234
+ var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
5235
+ var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
5236
+ extend$1(swiper.virtual, {
5237
+ from: from,
5238
+ to: to,
5239
+ offset: offset,
5240
+ slidesGrid: swiper.slidesGrid
5241
+ });
5242
+
5243
+ function onRendered() {
5244
+ swiper.updateSlides();
5245
+ swiper.updateProgress();
5246
+ swiper.updateSlidesClasses();
5247
+
5248
+ if (swiper.lazy && swiper.params.lazy.enabled) {
5249
+ swiper.lazy.load();
5250
+ }
5251
+ }
5252
+
5253
+ if (previousFrom === from && previousTo === to && !force) {
5254
+ if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
5255
+ swiper.slides.css(offsetProp, offset + "px");
5256
+ }
5257
+
5258
+ swiper.updateProgress();
5259
+ return;
5260
+ }
5261
+
5262
+ if (swiper.params.virtual.renderExternal) {
5263
+ swiper.params.virtual.renderExternal.call(swiper, {
5264
+ offset: offset,
5265
+ from: from,
5266
+ to: to,
5267
+ slides: function getSlides() {
5268
+ var slidesToRender = [];
5269
+
5270
+ for (var i = from; i <= to; i += 1) {
5271
+ slidesToRender.push(slides[i]);
5272
+ }
5273
+
5274
+ return slidesToRender;
5275
+ }()
5276
+ });
5277
+
5278
+ if (swiper.params.virtual.renderExternalUpdate) {
5279
+ onRendered();
5280
+ }
5281
+
5282
+ return;
5283
+ }
5284
+
5285
+ var prependIndexes = [];
5286
+ var appendIndexes = [];
5287
+
5288
+ if (force) {
5289
+ swiper.$wrapperEl.find("." + swiper.params.slideClass).remove();
5290
+ } else {
5291
+ for (var i = previousFrom; i <= previousTo; i += 1) {
5292
+ if (i < from || i > to) {
5293
+ swiper.$wrapperEl.find("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + i + "\"]").remove();
5294
+ }
5295
+ }
5296
+ }
5297
+
5298
+ for (var _i = 0; _i < slides.length; _i += 1) {
5299
+ if (_i >= from && _i <= to) {
5300
+ if (typeof previousTo === 'undefined' || force) {
5301
+ appendIndexes.push(_i);
5302
+ } else {
5303
+ if (_i > previousTo) appendIndexes.push(_i);
5304
+ if (_i < previousFrom) prependIndexes.push(_i);
5305
+ }
5306
+ }
5307
+ }
5308
+
5309
+ appendIndexes.forEach(function (index) {
5310
+ swiper.$wrapperEl.append(renderSlide(slides[index], index));
5311
+ });
5312
+ prependIndexes.sort(function (a, b) {
5313
+ return b - a;
5314
+ }).forEach(function (index) {
5315
+ swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
5316
+ });
5317
+ swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, offset + "px");
5318
+ onRendered();
5319
+ },
5320
+ renderSlide: function renderSlide(slide, index) {
5321
+ var swiper = this;
5322
+ var params = swiper.params.virtual;
5323
+
5324
+ if (params.cache && swiper.virtual.cache[index]) {
5325
+ return swiper.virtual.cache[index];
5326
+ }
5327
+
5328
+ var $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $("<div class=\"" + swiper.params.slideClass + "\" data-swiper-slide-index=\"" + index + "\">" + slide + "</div>");
5329
+ if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);
5330
+ if (params.cache) swiper.virtual.cache[index] = $slideEl;
5331
+ return $slideEl;
5332
+ },
5333
+ appendSlide: function appendSlide(slides) {
5334
+ var swiper = this;
5335
+
5336
+ if (typeof slides === 'object' && 'length' in slides) {
5337
+ for (var i = 0; i < slides.length; i += 1) {
5338
+ if (slides[i]) swiper.virtual.slides.push(slides[i]);
5339
+ }
5340
+ } else {
5341
+ swiper.virtual.slides.push(slides);
5342
+ }
5343
+
5344
+ swiper.virtual.update(true);
5345
+ },
5346
+ prependSlide: function prependSlide(slides) {
5347
+ var swiper = this;
5348
+ var activeIndex = swiper.activeIndex;
5349
+ var newActiveIndex = activeIndex + 1;
5350
+ var numberOfNewSlides = 1;
5351
+
5352
+ if (Array.isArray(slides)) {
5353
+ for (var i = 0; i < slides.length; i += 1) {
5354
+ if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
5355
+ }
5356
+
5357
+ newActiveIndex = activeIndex + slides.length;
5358
+ numberOfNewSlides = slides.length;
5359
+ } else {
5360
+ swiper.virtual.slides.unshift(slides);
5361
+ }
5362
+
5363
+ if (swiper.params.virtual.cache) {
5364
+ var cache = swiper.virtual.cache;
5365
+ var newCache = {};
5366
+ Object.keys(cache).forEach(function (cachedIndex) {
5367
+ var $cachedEl = cache[cachedIndex];
5368
+ var cachedElIndex = $cachedEl.attr('data-swiper-slide-index');
5369
+
5370
+ if (cachedElIndex) {
5371
+ $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);
5372
+ }
5373
+
5374
+ newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;
5375
+ });
5376
+ swiper.virtual.cache = newCache;
5377
+ }
5378
+
5379
+ swiper.virtual.update(true);
5380
+ swiper.slideTo(newActiveIndex, 0);
5381
+ },
5382
+ removeSlide: function removeSlide(slidesIndexes) {
5383
+ var swiper = this;
5384
+ if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
5385
+ var activeIndex = swiper.activeIndex;
5386
+
5387
+ if (Array.isArray(slidesIndexes)) {
5388
+ for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) {
5389
+ swiper.virtual.slides.splice(slidesIndexes[i], 1);
5390
+
5391
+ if (swiper.params.virtual.cache) {
5392
+ delete swiper.virtual.cache[slidesIndexes[i]];
5393
+ }
5394
+
5395
+ if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
5396
+ activeIndex = Math.max(activeIndex, 0);
5397
+ }
5398
+ } else {
5399
+ swiper.virtual.slides.splice(slidesIndexes, 1);
5400
+
5401
+ if (swiper.params.virtual.cache) {
5402
+ delete swiper.virtual.cache[slidesIndexes];
5403
+ }
5404
+
5405
+ if (slidesIndexes < activeIndex) activeIndex -= 1;
5406
+ activeIndex = Math.max(activeIndex, 0);
5407
+ }
5408
+
5409
+ swiper.virtual.update(true);
5410
+ swiper.slideTo(activeIndex, 0);
5411
+ },
5412
+ removeAllSlides: function removeAllSlides() {
5413
+ var swiper = this;
5414
+ swiper.virtual.slides = [];
5415
+
5416
+ if (swiper.params.virtual.cache) {
5417
+ swiper.virtual.cache = {};
5418
+ }
5419
+
5420
+ swiper.virtual.update(true);
5421
+ swiper.slideTo(0, 0);
5422
+ }
5423
+ };
5424
+ var Virtual$1 = {
5425
+ name: 'virtual',
5426
+ params: {
5427
+ virtual: {
5428
+ enabled: false,
5429
+ slides: [],
5430
+ cache: true,
5431
+ renderSlide: null,
5432
+ renderExternal: null,
5433
+ renderExternalUpdate: true,
5434
+ addSlidesBefore: 0,
5435
+ addSlidesAfter: 0
5436
+ }
5437
+ },
5438
+ create: function create() {
5439
+ var swiper = this;
5440
+ bindModuleMethods(swiper, {
5441
+ virtual: _extends({}, Virtual, {
5442
+ slides: swiper.params.virtual.slides,
5443
+ cache: {}
5444
+ })
5445
+ });
5446
+ },
5447
+ on: {
5448
+ beforeInit: function beforeInit(swiper) {
5449
+ if (!swiper.params.virtual.enabled) return;
5450
+ swiper.classNames.push(swiper.params.containerModifierClass + "virtual");
5451
+ var overwriteParams = {
5452
+ watchSlidesProgress: true
5453
+ };
5454
+ extend$1(swiper.params, overwriteParams);
5455
+ extend$1(swiper.originalParams, overwriteParams);
5456
+
5457
+ if (!swiper.params.initialSlide) {
5458
+ swiper.virtual.update();
5459
+ }
5460
+ },
5461
+ setTranslate: function setTranslate(swiper) {
5462
+ if (!swiper.params.virtual.enabled) return;
5463
+ swiper.virtual.update();
5464
+ }
5465
+ }
5466
+ };
5467
+
5468
+ var Keyboard = {
5469
+ handle: function handle(event) {
5470
+ var swiper = this;
5471
+ var window = getWindow();
5472
+ var document = getDocument();
5473
+ var rtl = swiper.rtlTranslate;
5474
+ var e = event;
5475
+ if (e.originalEvent) e = e.originalEvent; // jquery fix
5476
+
5477
+ var kc = e.keyCode || e.charCode;
5478
+ var pageUpDown = swiper.params.keyboard.pageUpDown;
5479
+ var isPageUp = pageUpDown && kc === 33;
5480
+ var isPageDown = pageUpDown && kc === 34;
5481
+ var isArrowLeft = kc === 37;
5482
+ var isArrowRight = kc === 39;
5483
+ var isArrowUp = kc === 38;
5484
+ var isArrowDown = kc === 40; // Directions locks
5485
+
5486
+ if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {
5487
+ return false;
5488
+ }
5489
+
5490
+ if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {
5491
+ return false;
5492
+ }
5493
+
5494
+ if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
5495
+ return undefined;
5496
+ }
5497
+
5498
+ if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {
5499
+ return undefined;
5500
+ }
5501
+
5502
+ if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {
5503
+ var inView = false; // Check that swiper should be inside of visible area of window
5504
+
5505
+ if (swiper.$el.parents("." + swiper.params.slideClass).length > 0 && swiper.$el.parents("." + swiper.params.slideActiveClass).length === 0) {
5506
+ return undefined;
5507
+ }
5508
+
5509
+ var windowWidth = window.innerWidth;
5510
+ var windowHeight = window.innerHeight;
5511
+ var swiperOffset = swiper.$el.offset();
5512
+ if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;
5513
+ var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];
5514
+
5515
+ for (var i = 0; i < swiperCoord.length; i += 1) {
5516
+ var point = swiperCoord[i];
5517
+
5518
+ if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {
5519
+ if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line
5520
+
5521
+ inView = true;
5522
+ }
5523
+ }
5524
+
5525
+ if (!inView) return undefined;
5526
+ }
5527
+
5528
+ if (swiper.isHorizontal()) {
5529
+ if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {
5530
+ if (e.preventDefault) e.preventDefault();else e.returnValue = false;
5531
+ }
5532
+
5533
+ if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();
5534
+ if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();
5535
+ } else {
5536
+ if (isPageUp || isPageDown || isArrowUp || isArrowDown) {
5537
+ if (e.preventDefault) e.preventDefault();else e.returnValue = false;
5538
+ }
5539
+
5540
+ if (isPageDown || isArrowDown) swiper.slideNext();
5541
+ if (isPageUp || isArrowUp) swiper.slidePrev();
5542
+ }
5543
+
5544
+ swiper.emit('keyPress', kc);
5545
+ return undefined;
5546
+ },
5547
+ enable: function enable() {
5548
+ var swiper = this;
5549
+ var document = getDocument();
5550
+ if (swiper.keyboard.enabled) return;
5551
+ $(document).on('keydown', swiper.keyboard.handle);
5552
+ swiper.keyboard.enabled = true;
5553
+ },
5554
+ disable: function disable() {
5555
+ var swiper = this;
5556
+ var document = getDocument();
5557
+ if (!swiper.keyboard.enabled) return;
5558
+ $(document).off('keydown', swiper.keyboard.handle);
5559
+ swiper.keyboard.enabled = false;
5560
+ }
5561
+ };
5562
+ var Keyboard$1 = {
5563
+ name: 'keyboard',
5564
+ params: {
5565
+ keyboard: {
5566
+ enabled: false,
5567
+ onlyInViewport: true,
5568
+ pageUpDown: true
5569
+ }
5570
+ },
5571
+ create: function create() {
5572
+ var swiper = this;
5573
+ bindModuleMethods(swiper, {
5574
+ keyboard: _extends({
5575
+ enabled: false
5576
+ }, Keyboard)
5577
+ });
5578
+ },
5579
+ on: {
5580
+ init: function init(swiper) {
5581
+ if (swiper.params.keyboard.enabled) {
5582
+ swiper.keyboard.enable();
5583
+ }
5584
+ },
5585
+ destroy: function destroy(swiper) {
5586
+ if (swiper.keyboard.enabled) {
5587
+ swiper.keyboard.disable();
5588
+ }
5589
+ }
5590
+ }
5591
+ };
5592
+
5593
+ function isEventSupported() {
5594
+ var document = getDocument();
5595
+ var eventName = 'onwheel';
5596
+ var isSupported = (eventName in document);
5597
+
5598
+ if (!isSupported) {
5599
+ var element = document.createElement('div');
5600
+ element.setAttribute(eventName, 'return;');
5601
+ isSupported = typeof element[eventName] === 'function';
5602
+ }
5603
+
5604
+ if (!isSupported && document.implementation && document.implementation.hasFeature && // always returns true in newer browsers as per the standard.
5605
+ // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
5606
+ document.implementation.hasFeature('', '') !== true) {
5607
+ // This is the only way to test support for the `wheel` event in IE9+.
5608
+ isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
5609
+ }
5610
+
5611
+ return isSupported;
5612
+ }
5613
+
5614
+ var Mousewheel = {
5615
+ lastScrollTime: now(),
5616
+ lastEventBeforeSnap: undefined,
5617
+ recentWheelEvents: [],
5618
+ event: function event() {
5619
+ var window = getWindow();
5620
+ if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';
5621
+ return isEventSupported() ? 'wheel' : 'mousewheel';
5622
+ },
5623
+ normalize: function normalize(e) {
5624
+ // Reasonable defaults
5625
+ var PIXEL_STEP = 10;
5626
+ var LINE_HEIGHT = 40;
5627
+ var PAGE_HEIGHT = 800;
5628
+ var sX = 0;
5629
+ var sY = 0; // spinX, spinY
5630
+
5631
+ var pX = 0;
5632
+ var pY = 0; // pixelX, pixelY
5633
+ // Legacy
5634
+
5635
+ if ('detail' in e) {
5636
+ sY = e.detail;
5637
+ }
5638
+
5639
+ if ('wheelDelta' in e) {
5640
+ sY = -e.wheelDelta / 120;
5641
+ }
5642
+
5643
+ if ('wheelDeltaY' in e) {
5644
+ sY = -e.wheelDeltaY / 120;
5645
+ }
5646
+
5647
+ if ('wheelDeltaX' in e) {
5648
+ sX = -e.wheelDeltaX / 120;
5649
+ } // side scrolling on FF with DOMMouseScroll
5650
+
5651
+
5652
+ if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
5653
+ sX = sY;
5654
+ sY = 0;
5655
+ }
5656
+
5657
+ pX = sX * PIXEL_STEP;
5658
+ pY = sY * PIXEL_STEP;
5659
+
5660
+ if ('deltaY' in e) {
5661
+ pY = e.deltaY;
5662
+ }
5663
+
5664
+ if ('deltaX' in e) {
5665
+ pX = e.deltaX;
5666
+ }
5667
+
5668
+ if (e.shiftKey && !pX) {
5669
+ // if user scrolls with shift he wants horizontal scroll
5670
+ pX = pY;
5671
+ pY = 0;
5672
+ }
5673
+
5674
+ if ((pX || pY) && e.deltaMode) {
5675
+ if (e.deltaMode === 1) {
5676
+ // delta in LINE units
5677
+ pX *= LINE_HEIGHT;
5678
+ pY *= LINE_HEIGHT;
5679
+ } else {
5680
+ // delta in PAGE units
5681
+ pX *= PAGE_HEIGHT;
5682
+ pY *= PAGE_HEIGHT;
5683
+ }
5684
+ } // Fall-back if spin cannot be determined
5685
+
5686
+
5687
+ if (pX && !sX) {
5688
+ sX = pX < 1 ? -1 : 1;
5689
+ }
5690
+
5691
+ if (pY && !sY) {
5692
+ sY = pY < 1 ? -1 : 1;
5693
+ }
5694
+
5695
+ return {
5696
+ spinX: sX,
5697
+ spinY: sY,
5698
+ pixelX: pX,
5699
+ pixelY: pY
5700
+ };
5701
+ },
5702
+ handleMouseEnter: function handleMouseEnter() {
5703
+ var swiper = this;
5704
+ swiper.mouseEntered = true;
5705
+ },
5706
+ handleMouseLeave: function handleMouseLeave() {
5707
+ var swiper = this;
5708
+ swiper.mouseEntered = false;
5709
+ },
5710
+ handle: function handle(event) {
5711
+ var e = event;
5712
+ var disableParentSwiper = true;
5713
+ var swiper = this;
5714
+ var params = swiper.params.mousewheel;
5715
+
5716
+ if (swiper.params.cssMode) {
5717
+ e.preventDefault();
5718
+ }
5719
+
5720
+ var target = swiper.$el;
5721
+
5722
+ if (swiper.params.mousewheel.eventsTarget !== 'container') {
5723
+ target = $(swiper.params.mousewheel.eventsTarget);
5724
+ }
5725
+
5726
+ if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;
5727
+ if (e.originalEvent) e = e.originalEvent; // jquery fix
5728
+
5729
+ var delta = 0;
5730
+ var rtlFactor = swiper.rtlTranslate ? -1 : 1;
5731
+ var data = Mousewheel.normalize(e);
5732
+
5733
+ if (params.forceToAxis) {
5734
+ if (swiper.isHorizontal()) {
5735
+ if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;
5736
+ } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;
5737
+ } else {
5738
+ delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
5739
+ }
5740
+
5741
+ if (delta === 0) return true;
5742
+ if (params.invert) delta = -delta; // Get the scroll positions
5743
+
5744
+ var positions = swiper.getTranslate() + delta * params.sensitivity;
5745
+ if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();
5746
+ if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // When loop is true:
5747
+ // the disableParentSwiper will be true.
5748
+ // When loop is false:
5749
+ // if the scroll positions is not on edge,
5750
+ // then the disableParentSwiper will be true.
5751
+ // if the scroll on edge positions,
5752
+ // then the disableParentSwiper will be false.
5753
+
5754
+ disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());
5755
+ if (disableParentSwiper && swiper.params.nested) e.stopPropagation();
5756
+
5757
+ if (!swiper.params.freeMode) {
5758
+ // Register the new event in a variable which stores the relevant data
5759
+ var newEvent = {
5760
+ time: now(),
5761
+ delta: Math.abs(delta),
5762
+ direction: Math.sign(delta),
5763
+ raw: event
5764
+ }; // Keep the most recent events
5765
+
5766
+ var recentWheelEvents = swiper.mousewheel.recentWheelEvents;
5767
+
5768
+ if (recentWheelEvents.length >= 2) {
5769
+ recentWheelEvents.shift(); // only store the last N events
5770
+ }
5771
+
5772
+ var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
5773
+ recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:
5774
+ // If direction has changed or
5775
+ // if the scroll is quicker than the previous one:
5776
+ // Animate the slider.
5777
+ // Else (this is the first time the wheel is moved):
5778
+ // Animate the slider.
5779
+
5780
+ if (prevEvent) {
5781
+ if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
5782
+ swiper.mousewheel.animateSlider(newEvent);
5783
+ }
5784
+ } else {
5785
+ swiper.mousewheel.animateSlider(newEvent);
5786
+ } // If it's time to release the scroll:
5787
+ // Return now so you don't hit the preventDefault.
5788
+
5789
+
5790
+ if (swiper.mousewheel.releaseScroll(newEvent)) {
5791
+ return true;
5792
+ }
5793
+ } else {
5794
+ // Freemode or scrollContainer:
5795
+ // If we recently snapped after a momentum scroll, then ignore wheel events
5796
+ // to give time for the deceleration to finish. Stop ignoring after 500 msecs
5797
+ // or if it's a new scroll (larger delta or inverse sign as last event before
5798
+ // an end-of-momentum snap).
5799
+ var _newEvent = {
5800
+ time: now(),
5801
+ delta: Math.abs(delta),
5802
+ direction: Math.sign(delta)
5803
+ };
5804
+ var lastEventBeforeSnap = swiper.mousewheel.lastEventBeforeSnap;
5805
+ var ignoreWheelEvents = lastEventBeforeSnap && _newEvent.time < lastEventBeforeSnap.time + 500 && _newEvent.delta <= lastEventBeforeSnap.delta && _newEvent.direction === lastEventBeforeSnap.direction;
5806
+
5807
+ if (!ignoreWheelEvents) {
5808
+ swiper.mousewheel.lastEventBeforeSnap = undefined;
5809
+
5810
+ if (swiper.params.loop) {
5811
+ swiper.loopFix();
5812
+ }
5813
+
5814
+ var position = swiper.getTranslate() + delta * params.sensitivity;
5815
+ var wasBeginning = swiper.isBeginning;
5816
+ var wasEnd = swiper.isEnd;
5817
+ if (position >= swiper.minTranslate()) position = swiper.minTranslate();
5818
+ if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
5819
+ swiper.setTransition(0);
5820
+ swiper.setTranslate(position);
5821
+ swiper.updateProgress();
5822
+ swiper.updateActiveIndex();
5823
+ swiper.updateSlidesClasses();
5824
+
5825
+ if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {
5826
+ swiper.updateSlidesClasses();
5827
+ }
5828
+
5829
+ if (swiper.params.freeModeSticky) {
5830
+ // When wheel scrolling starts with sticky (aka snap) enabled, then detect
5831
+ // the end of a momentum scroll by storing recent (N=15?) wheel events.
5832
+ // 1. do all N events have decreasing or same (absolute value) delta?
5833
+ // 2. did all N events arrive in the last M (M=500?) msecs?
5834
+ // 3. does the earliest event have an (absolute value) delta that's
5835
+ // at least P (P=1?) larger than the most recent event's delta?
5836
+ // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
5837
+ // If 1-4 are "yes" then we're near the end of a momentum scroll deceleration.
5838
+ // Snap immediately and ignore remaining wheel events in this scroll.
5839
+ // See comment above for "remaining wheel events in this scroll" determination.
5840
+ // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
5841
+ clearTimeout(swiper.mousewheel.timeout);
5842
+ swiper.mousewheel.timeout = undefined;
5843
+ var _recentWheelEvents = swiper.mousewheel.recentWheelEvents;
5844
+
5845
+ if (_recentWheelEvents.length >= 15) {
5846
+ _recentWheelEvents.shift(); // only store the last N events
5847
+
5848
+ }
5849
+
5850
+ var _prevEvent = _recentWheelEvents.length ? _recentWheelEvents[_recentWheelEvents.length - 1] : undefined;
5851
+
5852
+ var firstEvent = _recentWheelEvents[0];
5853
+
5854
+ _recentWheelEvents.push(_newEvent);
5855
+
5856
+ if (_prevEvent && (_newEvent.delta > _prevEvent.delta || _newEvent.direction !== _prevEvent.direction)) {
5857
+ // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
5858
+ _recentWheelEvents.splice(0);
5859
+ } else if (_recentWheelEvents.length >= 15 && _newEvent.time - firstEvent.time < 500 && firstEvent.delta - _newEvent.delta >= 1 && _newEvent.delta <= 6) {
5860
+ // We're at the end of the deceleration of a momentum scroll, so there's no need
5861
+ // to wait for more events. Snap ASAP on the next tick.
5862
+ // Also, because there's some remaining momentum we'll bias the snap in the
5863
+ // direction of the ongoing scroll because it's better UX for the scroll to snap
5864
+ // in the same direction as the scroll instead of reversing to snap. Therefore,
5865
+ // if it's already scrolled more than 20% in the current direction, keep going.
5866
+ var snapToThreshold = delta > 0 ? 0.8 : 0.2;
5867
+ swiper.mousewheel.lastEventBeforeSnap = _newEvent;
5868
+
5869
+ _recentWheelEvents.splice(0);
5870
+
5871
+ swiper.mousewheel.timeout = nextTick(function () {
5872
+ swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
5873
+ }, 0); // no delay; move on next tick
5874
+ }
5875
+
5876
+ if (!swiper.mousewheel.timeout) {
5877
+ // if we get here, then we haven't detected the end of a momentum scroll, so
5878
+ // we'll consider a scroll "complete" when there haven't been any wheel events
5879
+ // for 500ms.
5880
+ swiper.mousewheel.timeout = nextTick(function () {
5881
+ var snapToThreshold = 0.5;
5882
+ swiper.mousewheel.lastEventBeforeSnap = _newEvent;
5883
+
5884
+ _recentWheelEvents.splice(0);
5885
+
5886
+ swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
5887
+ }, 500);
5888
+ }
5889
+ } // Emit event
5890
+
5891
+
5892
+ if (!ignoreWheelEvents) swiper.emit('scroll', e); // Stop autoplay
5893
+
5894
+ if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions
5895
+
5896
+ if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
5897
+ }
5898
+ }
5899
+
5900
+ if (e.preventDefault) e.preventDefault();else e.returnValue = false;
5901
+ return false;
5902
+ },
5903
+ animateSlider: function animateSlider(newEvent) {
5904
+ var swiper = this;
5905
+ var window = getWindow();
5906
+
5907
+ if (this.params.mousewheel.thresholdDelta && newEvent.delta < this.params.mousewheel.thresholdDelta) {
5908
+ // Prevent if delta of wheel scroll delta is below configured threshold
5909
+ return false;
5910
+ }
5911
+
5912
+ if (this.params.mousewheel.thresholdTime && now() - swiper.mousewheel.lastScrollTime < this.params.mousewheel.thresholdTime) {
5913
+ // Prevent if time between scrolls is below configured threshold
5914
+ return false;
5915
+ } // If the movement is NOT big enough and
5916
+ // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
5917
+ // Don't go any further (avoid insignificant scroll movement).
5918
+
5919
+
5920
+ if (newEvent.delta >= 6 && now() - swiper.mousewheel.lastScrollTime < 60) {
5921
+ // Return false as a default
5922
+ return true;
5923
+ } // If user is scrolling towards the end:
5924
+ // If the slider hasn't hit the latest slide or
5925
+ // if the slider is a loop and
5926
+ // if the slider isn't moving right now:
5927
+ // Go to next slide and
5928
+ // emit a scroll event.
5929
+ // Else (the user is scrolling towards the beginning) and
5930
+ // if the slider hasn't hit the first slide or
5931
+ // if the slider is a loop and
5932
+ // if the slider isn't moving right now:
5933
+ // Go to prev slide and
5934
+ // emit a scroll event.
5935
+
5936
+
5937
+ if (newEvent.direction < 0) {
5938
+ if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
5939
+ swiper.slideNext();
5940
+ swiper.emit('scroll', newEvent.raw);
5941
+ }
5942
+ } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
5943
+ swiper.slidePrev();
5944
+ swiper.emit('scroll', newEvent.raw);
5945
+ } // If you got here is because an animation has been triggered so store the current time
5946
+
5947
+
5948
+ swiper.mousewheel.lastScrollTime = new window.Date().getTime(); // Return false as a default
5949
+
5950
+ return false;
5951
+ },
5952
+ releaseScroll: function releaseScroll(newEvent) {
5953
+ var swiper = this;
5954
+ var params = swiper.params.mousewheel;
5955
+
5956
+ if (newEvent.direction < 0) {
5957
+ if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
5958
+ // Return true to animate scroll on edges
5959
+ return true;
5960
+ }
5961
+ } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
5962
+ // Return true to animate scroll on edges
5963
+ return true;
5964
+ }
5965
+
5966
+ return false;
5967
+ },
5968
+ enable: function enable() {
5969
+ var swiper = this;
5970
+ var event = Mousewheel.event();
5971
+
5972
+ if (swiper.params.cssMode) {
5973
+ swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);
5974
+ return true;
5975
+ }
5976
+
5977
+ if (!event) return false;
5978
+ if (swiper.mousewheel.enabled) return false;
5979
+ var target = swiper.$el;
5980
+
5981
+ if (swiper.params.mousewheel.eventsTarget !== 'container') {
5982
+ target = $(swiper.params.mousewheel.eventsTarget);
5983
+ }
5984
+
5985
+ target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
5986
+ target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
5987
+ target.on(event, swiper.mousewheel.handle);
5988
+ swiper.mousewheel.enabled = true;
5989
+ return true;
5990
+ },
5991
+ disable: function disable() {
5992
+ var swiper = this;
5993
+ var event = Mousewheel.event();
5994
+
5995
+ if (swiper.params.cssMode) {
5996
+ swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);
5997
+ return true;
5998
+ }
5999
+
6000
+ if (!event) return false;
6001
+ if (!swiper.mousewheel.enabled) return false;
6002
+ var target = swiper.$el;
6003
+
6004
+ if (swiper.params.mousewheel.eventsTarget !== 'container') {
6005
+ target = $(swiper.params.mousewheel.eventsTarget);
6006
+ }
6007
+
6008
+ target.off(event, swiper.mousewheel.handle);
6009
+ swiper.mousewheel.enabled = false;
6010
+ return true;
6011
+ }
6012
+ };
6013
+ var Mousewheel$1 = {
6014
+ name: 'mousewheel',
6015
+ params: {
6016
+ mousewheel: {
6017
+ enabled: false,
6018
+ releaseOnEdges: false,
6019
+ invert: false,
6020
+ forceToAxis: false,
6021
+ sensitivity: 1,
6022
+ eventsTarget: 'container',
6023
+ thresholdDelta: null,
6024
+ thresholdTime: null
6025
+ }
6026
+ },
6027
+ create: function create() {
6028
+ var swiper = this;
6029
+ bindModuleMethods(swiper, {
6030
+ mousewheel: {
6031
+ enabled: false,
6032
+ lastScrollTime: now(),
6033
+ lastEventBeforeSnap: undefined,
6034
+ recentWheelEvents: [],
6035
+ enable: Mousewheel.enable,
6036
+ disable: Mousewheel.disable,
6037
+ handle: Mousewheel.handle,
6038
+ handleMouseEnter: Mousewheel.handleMouseEnter,
6039
+ handleMouseLeave: Mousewheel.handleMouseLeave,
6040
+ animateSlider: Mousewheel.animateSlider,
6041
+ releaseScroll: Mousewheel.releaseScroll
6042
+ }
6043
+ });
6044
+ },
6045
+ on: {
6046
+ init: function init(swiper) {
6047
+ if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
6048
+ swiper.mousewheel.disable();
6049
+ }
6050
+
6051
+ if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();
6052
+ },
6053
+ destroy: function destroy(swiper) {
6054
+ if (swiper.params.cssMode) {
6055
+ swiper.mousewheel.enable();
6056
+ }
6057
+
6058
+ if (swiper.mousewheel.enabled) swiper.mousewheel.disable();
6059
+ }
6060
+ }
6061
+ };
6062
+
6063
+ var Navigation = {
6064
+ update: function update() {
6065
+ // Update Navigation Buttons
6066
+ var swiper = this;
6067
+ var params = swiper.params.navigation;
6068
+ if (swiper.params.loop) return;
6069
+ var _swiper$navigation = swiper.navigation,
6070
+ $nextEl = _swiper$navigation.$nextEl,
6071
+ $prevEl = _swiper$navigation.$prevEl;
6072
+
6073
+ if ($prevEl && $prevEl.length > 0) {
6074
+ if (swiper.isBeginning) {
6075
+ $prevEl.addClass(params.disabledClass);
6076
+ } else {
6077
+ $prevEl.removeClass(params.disabledClass);
6078
+ }
6079
+
6080
+ $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
6081
+ }
6082
+
6083
+ if ($nextEl && $nextEl.length > 0) {
6084
+ if (swiper.isEnd) {
6085
+ $nextEl.addClass(params.disabledClass);
6086
+ } else {
6087
+ $nextEl.removeClass(params.disabledClass);
6088
+ }
6089
+
6090
+ $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
6091
+ }
6092
+ },
6093
+ onPrevClick: function onPrevClick(e) {
6094
+ var swiper = this;
6095
+ e.preventDefault();
6096
+ if (swiper.isBeginning && !swiper.params.loop) return;
6097
+ swiper.slidePrev();
6098
+ },
6099
+ onNextClick: function onNextClick(e) {
6100
+ var swiper = this;
6101
+ e.preventDefault();
6102
+ if (swiper.isEnd && !swiper.params.loop) return;
6103
+ swiper.slideNext();
6104
+ },
6105
+ init: function init() {
6106
+ var swiper = this;
6107
+ var params = swiper.params.navigation;
6108
+ if (!(params.nextEl || params.prevEl)) return;
6109
+ var $nextEl;
6110
+ var $prevEl;
6111
+
6112
+ if (params.nextEl) {
6113
+ $nextEl = $(params.nextEl);
6114
+
6115
+ if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) {
6116
+ $nextEl = swiper.$el.find(params.nextEl);
6117
+ }
6118
+ }
6119
+
6120
+ if (params.prevEl) {
6121
+ $prevEl = $(params.prevEl);
6122
+
6123
+ if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) {
6124
+ $prevEl = swiper.$el.find(params.prevEl);
6125
+ }
6126
+ }
6127
+
6128
+ if ($nextEl && $nextEl.length > 0) {
6129
+ $nextEl.on('click', swiper.navigation.onNextClick);
6130
+ }
6131
+
6132
+ if ($prevEl && $prevEl.length > 0) {
6133
+ $prevEl.on('click', swiper.navigation.onPrevClick);
6134
+ }
6135
+
6136
+ extend$1(swiper.navigation, {
6137
+ $nextEl: $nextEl,
6138
+ nextEl: $nextEl && $nextEl[0],
6139
+ $prevEl: $prevEl,
6140
+ prevEl: $prevEl && $prevEl[0]
6141
+ });
6142
+ },
6143
+ destroy: function destroy() {
6144
+ var swiper = this;
6145
+ var _swiper$navigation2 = swiper.navigation,
6146
+ $nextEl = _swiper$navigation2.$nextEl,
6147
+ $prevEl = _swiper$navigation2.$prevEl;
6148
+
6149
+ if ($nextEl && $nextEl.length) {
6150
+ $nextEl.off('click', swiper.navigation.onNextClick);
6151
+ $nextEl.removeClass(swiper.params.navigation.disabledClass);
6152
+ }
6153
+
6154
+ if ($prevEl && $prevEl.length) {
6155
+ $prevEl.off('click', swiper.navigation.onPrevClick);
6156
+ $prevEl.removeClass(swiper.params.navigation.disabledClass);
6157
+ }
6158
+ }
6159
+ };
6160
+ var Navigation$1 = {
6161
+ name: 'navigation',
6162
+ params: {
6163
+ navigation: {
6164
+ nextEl: null,
6165
+ prevEl: null,
6166
+ hideOnClick: false,
6167
+ disabledClass: 'swiper-button-disabled',
6168
+ hiddenClass: 'swiper-button-hidden',
6169
+ lockClass: 'swiper-button-lock'
6170
+ }
6171
+ },
6172
+ create: function create() {
6173
+ var swiper = this;
6174
+ bindModuleMethods(swiper, {
6175
+ navigation: _extends({}, Navigation)
6176
+ });
6177
+ },
6178
+ on: {
6179
+ init: function init(swiper) {
6180
+ swiper.navigation.init();
6181
+ swiper.navigation.update();
6182
+ },
6183
+ toEdge: function toEdge(swiper) {
6184
+ swiper.navigation.update();
6185
+ },
6186
+ fromEdge: function fromEdge(swiper) {
6187
+ swiper.navigation.update();
6188
+ },
6189
+ destroy: function destroy(swiper) {
6190
+ swiper.navigation.destroy();
6191
+ },
6192
+ click: function click(swiper, e) {
6193
+ var _swiper$navigation3 = swiper.navigation,
6194
+ $nextEl = _swiper$navigation3.$nextEl,
6195
+ $prevEl = _swiper$navigation3.$prevEl;
6196
+
6197
+ if (swiper.params.navigation.hideOnClick && !$(e.target).is($prevEl) && !$(e.target).is($nextEl)) {
6198
+ var isHidden;
6199
+
6200
+ if ($nextEl) {
6201
+ isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);
6202
+ } else if ($prevEl) {
6203
+ isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);
6204
+ }
6205
+
6206
+ if (isHidden === true) {
6207
+ swiper.emit('navigationShow');
6208
+ } else {
6209
+ swiper.emit('navigationHide');
6210
+ }
6211
+
6212
+ if ($nextEl) {
6213
+ $nextEl.toggleClass(swiper.params.navigation.hiddenClass);
6214
+ }
6215
+
6216
+ if ($prevEl) {
6217
+ $prevEl.toggleClass(swiper.params.navigation.hiddenClass);
6218
+ }
6219
+ }
6220
+ }
6221
+ }
6222
+ };
6223
+
6224
+ var Pagination = {
6225
+ update: function update() {
6226
+ // Render || Update Pagination bullets/items
6227
+ var swiper = this;
6228
+ var rtl = swiper.rtl;
6229
+ var params = swiper.params.pagination;
6230
+ if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
6231
+ var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
6232
+ var $el = swiper.pagination.$el; // Current/Total
6233
+
6234
+ var current;
6235
+ var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
6236
+
6237
+ if (swiper.params.loop) {
6238
+ current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
6239
+
6240
+ if (current > slidesLength - 1 - swiper.loopedSlides * 2) {
6241
+ current -= slidesLength - swiper.loopedSlides * 2;
6242
+ }
6243
+
6244
+ if (current > total - 1) current -= total;
6245
+ if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;
6246
+ } else if (typeof swiper.snapIndex !== 'undefined') {
6247
+ current = swiper.snapIndex;
6248
+ } else {
6249
+ current = swiper.activeIndex || 0;
6250
+ } // Types
6251
+
6252
+
6253
+ if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
6254
+ var bullets = swiper.pagination.bullets;
6255
+ var firstIndex;
6256
+ var lastIndex;
6257
+ var midIndex;
6258
+
6259
+ if (params.dynamicBullets) {
6260
+ swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
6261
+ $el.css(swiper.isHorizontal() ? 'width' : 'height', swiper.pagination.bulletSize * (params.dynamicMainBullets + 4) + "px");
6262
+
6263
+ if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
6264
+ swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;
6265
+
6266
+ if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) {
6267
+ swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
6268
+ } else if (swiper.pagination.dynamicBulletIndex < 0) {
6269
+ swiper.pagination.dynamicBulletIndex = 0;
6270
+ }
6271
+ }
6272
+
6273
+ firstIndex = current - swiper.pagination.dynamicBulletIndex;
6274
+ lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
6275
+ midIndex = (lastIndex + firstIndex) / 2;
6276
+ }
6277
+
6278
+ bullets.removeClass(params.bulletActiveClass + " " + params.bulletActiveClass + "-next " + params.bulletActiveClass + "-next-next " + params.bulletActiveClass + "-prev " + params.bulletActiveClass + "-prev-prev " + params.bulletActiveClass + "-main");
6279
+
6280
+ if ($el.length > 1) {
6281
+ bullets.each(function (bullet) {
6282
+ var $bullet = $(bullet);
6283
+ var bulletIndex = $bullet.index();
6284
+
6285
+ if (bulletIndex === current) {
6286
+ $bullet.addClass(params.bulletActiveClass);
6287
+ }
6288
+
6289
+ if (params.dynamicBullets) {
6290
+ if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
6291
+ $bullet.addClass(params.bulletActiveClass + "-main");
6292
+ }
6293
+
6294
+ if (bulletIndex === firstIndex) {
6295
+ $bullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev");
6296
+ }
6297
+
6298
+ if (bulletIndex === lastIndex) {
6299
+ $bullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next");
6300
+ }
6301
+ }
6302
+ });
6303
+ } else {
6304
+ var $bullet = bullets.eq(current);
6305
+ var bulletIndex = $bullet.index();
6306
+ $bullet.addClass(params.bulletActiveClass);
6307
+
6308
+ if (params.dynamicBullets) {
6309
+ var $firstDisplayedBullet = bullets.eq(firstIndex);
6310
+ var $lastDisplayedBullet = bullets.eq(lastIndex);
6311
+
6312
+ for (var i = firstIndex; i <= lastIndex; i += 1) {
6313
+ bullets.eq(i).addClass(params.bulletActiveClass + "-main");
6314
+ }
6315
+
6316
+ if (swiper.params.loop) {
6317
+ if (bulletIndex >= bullets.length - params.dynamicMainBullets) {
6318
+ for (var _i = params.dynamicMainBullets; _i >= 0; _i -= 1) {
6319
+ bullets.eq(bullets.length - _i).addClass(params.bulletActiveClass + "-main");
6320
+ }
6321
+
6322
+ bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(params.bulletActiveClass + "-prev");
6323
+ } else {
6324
+ $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev");
6325
+ $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next");
6326
+ }
6327
+ } else {
6328
+ $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev");
6329
+ $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next");
6330
+ }
6331
+ }
6332
+ }
6333
+
6334
+ if (params.dynamicBullets) {
6335
+ var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
6336
+ var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize;
6337
+ var offsetProp = rtl ? 'right' : 'left';
6338
+ bullets.css(swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + "px");
6339
+ }
6340
+ }
6341
+
6342
+ if (params.type === 'fraction') {
6343
+ $el.find("." + params.currentClass).text(params.formatFractionCurrent(current + 1));
6344
+ $el.find("." + params.totalClass).text(params.formatFractionTotal(total));
6345
+ }
6346
+
6347
+ if (params.type === 'progressbar') {
6348
+ var progressbarDirection;
6349
+
6350
+ if (params.progressbarOpposite) {
6351
+ progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
6352
+ } else {
6353
+ progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
6354
+ }
6355
+
6356
+ var scale = (current + 1) / total;
6357
+ var scaleX = 1;
6358
+ var scaleY = 1;
6359
+
6360
+ if (progressbarDirection === 'horizontal') {
6361
+ scaleX = scale;
6362
+ } else {
6363
+ scaleY = scale;
6364
+ }
6365
+
6366
+ $el.find("." + params.progressbarFillClass).transform("translate3d(0,0,0) scaleX(" + scaleX + ") scaleY(" + scaleY + ")").transition(swiper.params.speed);
6367
+ }
6368
+
6369
+ if (params.type === 'custom' && params.renderCustom) {
6370
+ $el.html(params.renderCustom(swiper, current + 1, total));
6371
+ swiper.emit('paginationRender', $el[0]);
6372
+ } else {
6373
+ swiper.emit('paginationUpdate', $el[0]);
6374
+ }
6375
+
6376
+ $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
6377
+ },
6378
+ render: function render() {
6379
+ // Render Container
6380
+ var swiper = this;
6381
+ var params = swiper.params.pagination;
6382
+ if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
6383
+ var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
6384
+ var $el = swiper.pagination.$el;
6385
+ var paginationHTML = '';
6386
+
6387
+ if (params.type === 'bullets') {
6388
+ var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
6389
+
6390
+ if (swiper.params.freeMode && !swiper.params.loop && numberOfBullets > slidesLength) {
6391
+ numberOfBullets = slidesLength;
6392
+ }
6393
+
6394
+ for (var i = 0; i < numberOfBullets; i += 1) {
6395
+ if (params.renderBullet) {
6396
+ paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
6397
+ } else {
6398
+ paginationHTML += "<" + params.bulletElement + " class=\"" + params.bulletClass + "\"></" + params.bulletElement + ">";
6399
+ }
6400
+ }
6401
+
6402
+ $el.html(paginationHTML);
6403
+ swiper.pagination.bullets = $el.find("." + params.bulletClass.replace(/ /g, '.'));
6404
+ }
6405
+
6406
+ if (params.type === 'fraction') {
6407
+ if (params.renderFraction) {
6408
+ paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
6409
+ } else {
6410
+ paginationHTML = "<span class=\"" + params.currentClass + "\"></span>" + ' / ' + ("<span class=\"" + params.totalClass + "\"></span>");
6411
+ }
6412
+
6413
+ $el.html(paginationHTML);
6414
+ }
6415
+
6416
+ if (params.type === 'progressbar') {
6417
+ if (params.renderProgressbar) {
6418
+ paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
6419
+ } else {
6420
+ paginationHTML = "<span class=\"" + params.progressbarFillClass + "\"></span>";
6421
+ }
6422
+
6423
+ $el.html(paginationHTML);
6424
+ }
6425
+
6426
+ if (params.type !== 'custom') {
6427
+ swiper.emit('paginationRender', swiper.pagination.$el[0]);
6428
+ }
6429
+ },
6430
+ init: function init() {
6431
+ var swiper = this;
6432
+ var params = swiper.params.pagination;
6433
+ if (!params.el) return;
6434
+ var $el = $(params.el);
6435
+ if ($el.length === 0) return;
6436
+
6437
+ if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {
6438
+ $el = swiper.$el.find(params.el);
6439
+ }
6440
+
6441
+ if (params.type === 'bullets' && params.clickable) {
6442
+ $el.addClass(params.clickableClass);
6443
+ }
6444
+
6445
+ $el.addClass(params.modifierClass + params.type);
6446
+
6447
+ if (params.type === 'bullets' && params.dynamicBullets) {
6448
+ $el.addClass("" + params.modifierClass + params.type + "-dynamic");
6449
+ swiper.pagination.dynamicBulletIndex = 0;
6450
+
6451
+ if (params.dynamicMainBullets < 1) {
6452
+ params.dynamicMainBullets = 1;
6453
+ }
6454
+ }
6455
+
6456
+ if (params.type === 'progressbar' && params.progressbarOpposite) {
6457
+ $el.addClass(params.progressbarOppositeClass);
6458
+ }
6459
+
6460
+ if (params.clickable) {
6461
+ $el.on('click', "." + params.bulletClass.replace(/ /g, '.'), function onClick(e) {
6462
+ e.preventDefault();
6463
+ var index = $(this).index() * swiper.params.slidesPerGroup;
6464
+ if (swiper.params.loop) index += swiper.loopedSlides;
6465
+ swiper.slideTo(index);
6466
+ });
6467
+ }
6468
+
6469
+ extend$1(swiper.pagination, {
6470
+ $el: $el,
6471
+ el: $el[0]
6472
+ });
6473
+ },
6474
+ destroy: function destroy() {
6475
+ var swiper = this;
6476
+ var params = swiper.params.pagination;
6477
+ if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
6478
+ var $el = swiper.pagination.$el;
6479
+ $el.removeClass(params.hiddenClass);
6480
+ $el.removeClass(params.modifierClass + params.type);
6481
+ if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);
6482
+
6483
+ if (params.clickable) {
6484
+ $el.off('click', "." + params.bulletClass.replace(/ /g, '.'));
6485
+ }
6486
+ }
6487
+ };
6488
+ var Pagination$1 = {
6489
+ name: 'pagination',
6490
+ params: {
6491
+ pagination: {
6492
+ el: null,
6493
+ bulletElement: 'span',
6494
+ clickable: false,
6495
+ hideOnClick: false,
6496
+ renderBullet: null,
6497
+ renderProgressbar: null,
6498
+ renderFraction: null,
6499
+ renderCustom: null,
6500
+ progressbarOpposite: false,
6501
+ type: 'bullets',
6502
+ // 'bullets' or 'progressbar' or 'fraction' or 'custom'
6503
+ dynamicBullets: false,
6504
+ dynamicMainBullets: 1,
6505
+ formatFractionCurrent: function formatFractionCurrent(number) {
6506
+ return number;
6507
+ },
6508
+ formatFractionTotal: function formatFractionTotal(number) {
6509
+ return number;
6510
+ },
6511
+ bulletClass: 'swiper-pagination-bullet',
6512
+ bulletActiveClass: 'swiper-pagination-bullet-active',
6513
+ modifierClass: 'swiper-pagination-',
6514
+ // NEW
6515
+ currentClass: 'swiper-pagination-current',
6516
+ totalClass: 'swiper-pagination-total',
6517
+ hiddenClass: 'swiper-pagination-hidden',
6518
+ progressbarFillClass: 'swiper-pagination-progressbar-fill',
6519
+ progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
6520
+ clickableClass: 'swiper-pagination-clickable',
6521
+ // NEW
6522
+ lockClass: 'swiper-pagination-lock'
6523
+ }
6524
+ },
6525
+ create: function create() {
6526
+ var swiper = this;
6527
+ bindModuleMethods(swiper, {
6528
+ pagination: _extends({
6529
+ dynamicBulletIndex: 0
6530
+ }, Pagination)
6531
+ });
6532
+ },
6533
+ on: {
6534
+ init: function init(swiper) {
6535
+ swiper.pagination.init();
6536
+ swiper.pagination.render();
6537
+ swiper.pagination.update();
6538
+ },
6539
+ activeIndexChange: function activeIndexChange(swiper) {
6540
+ if (swiper.params.loop) {
6541
+ swiper.pagination.update();
6542
+ } else if (typeof swiper.snapIndex === 'undefined') {
6543
+ swiper.pagination.update();
6544
+ }
6545
+ },
6546
+ snapIndexChange: function snapIndexChange(swiper) {
6547
+ if (!swiper.params.loop) {
6548
+ swiper.pagination.update();
6549
+ }
6550
+ },
6551
+ slidesLengthChange: function slidesLengthChange(swiper) {
6552
+ if (swiper.params.loop) {
6553
+ swiper.pagination.render();
6554
+ swiper.pagination.update();
6555
+ }
6556
+ },
6557
+ snapGridLengthChange: function snapGridLengthChange(swiper) {
6558
+ if (!swiper.params.loop) {
6559
+ swiper.pagination.render();
6560
+ swiper.pagination.update();
6561
+ }
6562
+ },
6563
+ destroy: function destroy(swiper) {
6564
+ swiper.pagination.destroy();
6565
+ },
6566
+ click: function click(swiper, e) {
6567
+ if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !$(e.target).hasClass(swiper.params.pagination.bulletClass)) {
6568
+ var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);
6569
+
6570
+ if (isHidden === true) {
6571
+ swiper.emit('paginationShow');
6572
+ } else {
6573
+ swiper.emit('paginationHide');
6574
+ }
6575
+
6576
+ swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
6577
+ }
6578
+ }
6579
+ }
6580
+ };
6581
+
6582
+ var Scrollbar = {
6583
+ setTranslate: function setTranslate() {
6584
+ var swiper = this;
6585
+ if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
6586
+ var scrollbar = swiper.scrollbar,
6587
+ rtl = swiper.rtlTranslate,
6588
+ progress = swiper.progress;
6589
+ var dragSize = scrollbar.dragSize,
6590
+ trackSize = scrollbar.trackSize,
6591
+ $dragEl = scrollbar.$dragEl,
6592
+ $el = scrollbar.$el;
6593
+ var params = swiper.params.scrollbar;
6594
+ var newSize = dragSize;
6595
+ var newPos = (trackSize - dragSize) * progress;
6596
+
6597
+ if (rtl) {
6598
+ newPos = -newPos;
6599
+
6600
+ if (newPos > 0) {
6601
+ newSize = dragSize - newPos;
6602
+ newPos = 0;
6603
+ } else if (-newPos + dragSize > trackSize) {
6604
+ newSize = trackSize + newPos;
6605
+ }
6606
+ } else if (newPos < 0) {
6607
+ newSize = dragSize + newPos;
6608
+ newPos = 0;
6609
+ } else if (newPos + dragSize > trackSize) {
6610
+ newSize = trackSize - newPos;
6611
+ }
6612
+
6613
+ if (swiper.isHorizontal()) {
6614
+ $dragEl.transform("translate3d(" + newPos + "px, 0, 0)");
6615
+ $dragEl[0].style.width = newSize + "px";
6616
+ } else {
6617
+ $dragEl.transform("translate3d(0px, " + newPos + "px, 0)");
6618
+ $dragEl[0].style.height = newSize + "px";
6619
+ }
6620
+
6621
+ if (params.hide) {
6622
+ clearTimeout(swiper.scrollbar.timeout);
6623
+ $el[0].style.opacity = 1;
6624
+ swiper.scrollbar.timeout = setTimeout(function () {
6625
+ $el[0].style.opacity = 0;
6626
+ $el.transition(400);
6627
+ }, 1000);
6628
+ }
6629
+ },
6630
+ setTransition: function setTransition(duration) {
6631
+ var swiper = this;
6632
+ if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
6633
+ swiper.scrollbar.$dragEl.transition(duration);
6634
+ },
6635
+ updateSize: function updateSize() {
6636
+ var swiper = this;
6637
+ if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
6638
+ var scrollbar = swiper.scrollbar;
6639
+ var $dragEl = scrollbar.$dragEl,
6640
+ $el = scrollbar.$el;
6641
+ $dragEl[0].style.width = '';
6642
+ $dragEl[0].style.height = '';
6643
+ var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
6644
+ var divider = swiper.size / swiper.virtualSize;
6645
+ var moveDivider = divider * (trackSize / swiper.size);
6646
+ var dragSize;
6647
+
6648
+ if (swiper.params.scrollbar.dragSize === 'auto') {
6649
+ dragSize = trackSize * divider;
6650
+ } else {
6651
+ dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
6652
+ }
6653
+
6654
+ if (swiper.isHorizontal()) {
6655
+ $dragEl[0].style.width = dragSize + "px";
6656
+ } else {
6657
+ $dragEl[0].style.height = dragSize + "px";
6658
+ }
6659
+
6660
+ if (divider >= 1) {
6661
+ $el[0].style.display = 'none';
6662
+ } else {
6663
+ $el[0].style.display = '';
6664
+ }
6665
+
6666
+ if (swiper.params.scrollbar.hide) {
6667
+ $el[0].style.opacity = 0;
6668
+ }
6669
+
6670
+ extend$1(scrollbar, {
6671
+ trackSize: trackSize,
6672
+ divider: divider,
6673
+ moveDivider: moveDivider,
6674
+ dragSize: dragSize
6675
+ });
6676
+ scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
6677
+ },
6678
+ getPointerPosition: function getPointerPosition(e) {
6679
+ var swiper = this;
6680
+
6681
+ if (swiper.isHorizontal()) {
6682
+ return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;
6683
+ }
6684
+
6685
+ return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;
6686
+ },
6687
+ setDragPosition: function setDragPosition(e) {
6688
+ var swiper = this;
6689
+ var scrollbar = swiper.scrollbar,
6690
+ rtl = swiper.rtlTranslate;
6691
+ var $el = scrollbar.$el,
6692
+ dragSize = scrollbar.dragSize,
6693
+ trackSize = scrollbar.trackSize,
6694
+ dragStartPos = scrollbar.dragStartPos;
6695
+ var positionRatio;
6696
+ positionRatio = (scrollbar.getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
6697
+ positionRatio = Math.max(Math.min(positionRatio, 1), 0);
6698
+
6699
+ if (rtl) {
6700
+ positionRatio = 1 - positionRatio;
6701
+ }
6702
+
6703
+ var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;
6704
+ swiper.updateProgress(position);
6705
+ swiper.setTranslate(position);
6706
+ swiper.updateActiveIndex();
6707
+ swiper.updateSlidesClasses();
6708
+ },
6709
+ onDragStart: function onDragStart(e) {
6710
+ var swiper = this;
6711
+ var params = swiper.params.scrollbar;
6712
+ var scrollbar = swiper.scrollbar,
6713
+ $wrapperEl = swiper.$wrapperEl;
6714
+ var $el = scrollbar.$el,
6715
+ $dragEl = scrollbar.$dragEl;
6716
+ swiper.scrollbar.isTouched = true;
6717
+ swiper.scrollbar.dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
6718
+ e.preventDefault();
6719
+ e.stopPropagation();
6720
+ $wrapperEl.transition(100);
6721
+ $dragEl.transition(100);
6722
+ scrollbar.setDragPosition(e);
6723
+ clearTimeout(swiper.scrollbar.dragTimeout);
6724
+ $el.transition(0);
6725
+
6726
+ if (params.hide) {
6727
+ $el.css('opacity', 1);
6728
+ }
6729
+
6730
+ if (swiper.params.cssMode) {
6731
+ swiper.$wrapperEl.css('scroll-snap-type', 'none');
6732
+ }
6733
+
6734
+ swiper.emit('scrollbarDragStart', e);
6735
+ },
6736
+ onDragMove: function onDragMove(e) {
6737
+ var swiper = this;
6738
+ var scrollbar = swiper.scrollbar,
6739
+ $wrapperEl = swiper.$wrapperEl;
6740
+ var $el = scrollbar.$el,
6741
+ $dragEl = scrollbar.$dragEl;
6742
+ if (!swiper.scrollbar.isTouched) return;
6743
+ if (e.preventDefault) e.preventDefault();else e.returnValue = false;
6744
+ scrollbar.setDragPosition(e);
6745
+ $wrapperEl.transition(0);
6746
+ $el.transition(0);
6747
+ $dragEl.transition(0);
6748
+ swiper.emit('scrollbarDragMove', e);
6749
+ },
6750
+ onDragEnd: function onDragEnd(e) {
6751
+ var swiper = this;
6752
+ var params = swiper.params.scrollbar;
6753
+ var scrollbar = swiper.scrollbar,
6754
+ $wrapperEl = swiper.$wrapperEl;
6755
+ var $el = scrollbar.$el;
6756
+ if (!swiper.scrollbar.isTouched) return;
6757
+ swiper.scrollbar.isTouched = false;
6758
+
6759
+ if (swiper.params.cssMode) {
6760
+ swiper.$wrapperEl.css('scroll-snap-type', '');
6761
+ $wrapperEl.transition('');
6762
+ }
6763
+
6764
+ if (params.hide) {
6765
+ clearTimeout(swiper.scrollbar.dragTimeout);
6766
+ swiper.scrollbar.dragTimeout = nextTick(function () {
6767
+ $el.css('opacity', 0);
6768
+ $el.transition(400);
6769
+ }, 1000);
6770
+ }
6771
+
6772
+ swiper.emit('scrollbarDragEnd', e);
6773
+
6774
+ if (params.snapOnRelease) {
6775
+ swiper.slideToClosest();
6776
+ }
6777
+ },
6778
+ enableDraggable: function enableDraggable() {
6779
+ var swiper = this;
6780
+ if (!swiper.params.scrollbar.el) return;
6781
+ var document = getDocument();
6782
+ var scrollbar = swiper.scrollbar,
6783
+ touchEventsTouch = swiper.touchEventsTouch,
6784
+ touchEventsDesktop = swiper.touchEventsDesktop,
6785
+ params = swiper.params,
6786
+ support = swiper.support;
6787
+ var $el = scrollbar.$el;
6788
+ var target = $el[0];
6789
+ var activeListener = support.passiveListener && params.passiveListeners ? {
6790
+ passive: false,
6791
+ capture: false
6792
+ } : false;
6793
+ var passiveListener = support.passiveListener && params.passiveListeners ? {
6794
+ passive: true,
6795
+ capture: false
6796
+ } : false;
6797
+ if (!target) return;
6798
+
6799
+ if (!support.touch) {
6800
+ target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
6801
+ document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
6802
+ document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
6803
+ } else {
6804
+ target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
6805
+ target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
6806
+ target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
6807
+ }
6808
+ },
6809
+ disableDraggable: function disableDraggable() {
6810
+ var swiper = this;
6811
+ if (!swiper.params.scrollbar.el) return;
6812
+ var document = getDocument();
6813
+ var scrollbar = swiper.scrollbar,
6814
+ touchEventsTouch = swiper.touchEventsTouch,
6815
+ touchEventsDesktop = swiper.touchEventsDesktop,
6816
+ params = swiper.params,
6817
+ support = swiper.support;
6818
+ var $el = scrollbar.$el;
6819
+ var target = $el[0];
6820
+ var activeListener = support.passiveListener && params.passiveListeners ? {
6821
+ passive: false,
6822
+ capture: false
6823
+ } : false;
6824
+ var passiveListener = support.passiveListener && params.passiveListeners ? {
6825
+ passive: true,
6826
+ capture: false
6827
+ } : false;
6828
+ if (!target) return;
6829
+
6830
+ if (!support.touch) {
6831
+ target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
6832
+ document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
6833
+ document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
6834
+ } else {
6835
+ target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
6836
+ target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
6837
+ target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
6838
+ }
6839
+ },
6840
+ init: function init() {
6841
+ var swiper = this;
6842
+ if (!swiper.params.scrollbar.el) return;
6843
+ var scrollbar = swiper.scrollbar,
6844
+ $swiperEl = swiper.$el;
6845
+ var params = swiper.params.scrollbar;
6846
+ var $el = $(params.el);
6847
+
6848
+ if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
6849
+ $el = $swiperEl.find(params.el);
6850
+ }
6851
+
6852
+ var $dragEl = $el.find("." + swiper.params.scrollbar.dragClass);
6853
+
6854
+ if ($dragEl.length === 0) {
6855
+ $dragEl = $("<div class=\"" + swiper.params.scrollbar.dragClass + "\"></div>");
6856
+ $el.append($dragEl);
6857
+ }
6858
+
6859
+ extend$1(scrollbar, {
6860
+ $el: $el,
6861
+ el: $el[0],
6862
+ $dragEl: $dragEl,
6863
+ dragEl: $dragEl[0]
6864
+ });
6865
+
6866
+ if (params.draggable) {
6867
+ scrollbar.enableDraggable();
6868
+ }
6869
+ },
6870
+ destroy: function destroy() {
6871
+ var swiper = this;
6872
+ swiper.scrollbar.disableDraggable();
6873
+ }
6874
+ };
6875
+ var Scrollbar$1 = {
6876
+ name: 'scrollbar',
6877
+ params: {
6878
+ scrollbar: {
6879
+ el: null,
6880
+ dragSize: 'auto',
6881
+ hide: false,
6882
+ draggable: false,
6883
+ snapOnRelease: true,
6884
+ lockClass: 'swiper-scrollbar-lock',
6885
+ dragClass: 'swiper-scrollbar-drag'
6886
+ }
6887
+ },
6888
+ create: function create() {
6889
+ var swiper = this;
6890
+ bindModuleMethods(swiper, {
6891
+ scrollbar: _extends({
6892
+ isTouched: false,
6893
+ timeout: null,
6894
+ dragTimeout: null
6895
+ }, Scrollbar)
6896
+ });
6897
+ },
6898
+ on: {
6899
+ init: function init(swiper) {
6900
+ swiper.scrollbar.init();
6901
+ swiper.scrollbar.updateSize();
6902
+ swiper.scrollbar.setTranslate();
6903
+ },
6904
+ update: function update(swiper) {
6905
+ swiper.scrollbar.updateSize();
6906
+ },
6907
+ resize: function resize(swiper) {
6908
+ swiper.scrollbar.updateSize();
6909
+ },
6910
+ observerUpdate: function observerUpdate(swiper) {
6911
+ swiper.scrollbar.updateSize();
6912
+ },
6913
+ setTranslate: function setTranslate(swiper) {
6914
+ swiper.scrollbar.setTranslate();
6915
+ },
6916
+ setTransition: function setTransition(swiper, duration) {
6917
+ swiper.scrollbar.setTransition(duration);
6918
+ },
6919
+ destroy: function destroy(swiper) {
6920
+ swiper.scrollbar.destroy();
6921
+ }
6922
+ }
6923
+ };
6924
+
6925
+ var Parallax = {
6926
+ setTransform: function setTransform(el, progress) {
6927
+ var swiper = this;
6928
+ var rtl = swiper.rtl;
6929
+ var $el = $(el);
6930
+ var rtlFactor = rtl ? -1 : 1;
6931
+ var p = $el.attr('data-swiper-parallax') || '0';
6932
+ var x = $el.attr('data-swiper-parallax-x');
6933
+ var y = $el.attr('data-swiper-parallax-y');
6934
+ var scale = $el.attr('data-swiper-parallax-scale');
6935
+ var opacity = $el.attr('data-swiper-parallax-opacity');
6936
+
6937
+ if (x || y) {
6938
+ x = x || '0';
6939
+ y = y || '0';
6940
+ } else if (swiper.isHorizontal()) {
6941
+ x = p;
6942
+ y = '0';
6943
+ } else {
6944
+ y = p;
6945
+ x = '0';
6946
+ }
6947
+
6948
+ if (x.indexOf('%') >= 0) {
6949
+ x = parseInt(x, 10) * progress * rtlFactor + "%";
6950
+ } else {
6951
+ x = x * progress * rtlFactor + "px";
6952
+ }
6953
+
6954
+ if (y.indexOf('%') >= 0) {
6955
+ y = parseInt(y, 10) * progress + "%";
6956
+ } else {
6957
+ y = y * progress + "px";
6958
+ }
6959
+
6960
+ if (typeof opacity !== 'undefined' && opacity !== null) {
6961
+ var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));
6962
+ $el[0].style.opacity = currentOpacity;
6963
+ }
6964
+
6965
+ if (typeof scale === 'undefined' || scale === null) {
6966
+ $el.transform("translate3d(" + x + ", " + y + ", 0px)");
6967
+ } else {
6968
+ var currentScale = scale - (scale - 1) * (1 - Math.abs(progress));
6969
+ $el.transform("translate3d(" + x + ", " + y + ", 0px) scale(" + currentScale + ")");
6970
+ }
6971
+ },
6972
+ setTranslate: function setTranslate() {
6973
+ var swiper = this;
6974
+ var $el = swiper.$el,
6975
+ slides = swiper.slides,
6976
+ progress = swiper.progress,
6977
+ snapGrid = swiper.snapGrid;
6978
+ $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) {
6979
+ swiper.parallax.setTransform(el, progress);
6980
+ });
6981
+ slides.each(function (slideEl, slideIndex) {
6982
+ var slideProgress = slideEl.progress;
6983
+
6984
+ if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
6985
+ slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);
6986
+ }
6987
+
6988
+ slideProgress = Math.min(Math.max(slideProgress, -1), 1);
6989
+ $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) {
6990
+ swiper.parallax.setTransform(el, slideProgress);
6991
+ });
6992
+ });
6993
+ },
6994
+ setTransition: function setTransition(duration) {
6995
+ if (duration === void 0) {
6996
+ duration = this.params.speed;
6997
+ }
6998
+
6999
+ var swiper = this;
7000
+ var $el = swiper.$el;
7001
+ $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (parallaxEl) {
7002
+ var $parallaxEl = $(parallaxEl);
7003
+ var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
7004
+ if (duration === 0) parallaxDuration = 0;
7005
+ $parallaxEl.transition(parallaxDuration);
7006
+ });
7007
+ }
7008
+ };
7009
+ var Parallax$1 = {
7010
+ name: 'parallax',
7011
+ params: {
7012
+ parallax: {
7013
+ enabled: false
7014
+ }
7015
+ },
7016
+ create: function create() {
7017
+ var swiper = this;
7018
+ bindModuleMethods(swiper, {
7019
+ parallax: _extends({}, Parallax)
7020
+ });
7021
+ },
7022
+ on: {
7023
+ beforeInit: function beforeInit(swiper) {
7024
+ if (!swiper.params.parallax.enabled) return;
7025
+ swiper.params.watchSlidesProgress = true;
7026
+ swiper.originalParams.watchSlidesProgress = true;
7027
+ },
7028
+ init: function init(swiper) {
7029
+ if (!swiper.params.parallax.enabled) return;
7030
+ swiper.parallax.setTranslate();
7031
+ },
7032
+ setTranslate: function setTranslate(swiper) {
7033
+ if (!swiper.params.parallax.enabled) return;
7034
+ swiper.parallax.setTranslate();
7035
+ },
7036
+ setTransition: function setTransition(swiper, duration) {
7037
+ if (!swiper.params.parallax.enabled) return;
7038
+ swiper.parallax.setTransition(duration);
7039
+ }
7040
+ }
7041
+ };
7042
+
7043
+ var Zoom = {
7044
+ // Calc Scale From Multi-touches
7045
+ getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {
7046
+ if (e.targetTouches.length < 2) return 1;
7047
+ var x1 = e.targetTouches[0].pageX;
7048
+ var y1 = e.targetTouches[0].pageY;
7049
+ var x2 = e.targetTouches[1].pageX;
7050
+ var y2 = e.targetTouches[1].pageY;
7051
+ var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
7052
+ return distance;
7053
+ },
7054
+ // Events
7055
+ onGestureStart: function onGestureStart(e) {
7056
+ var swiper = this;
7057
+ var support = swiper.support;
7058
+ var params = swiper.params.zoom;
7059
+ var zoom = swiper.zoom;
7060
+ var gesture = zoom.gesture;
7061
+ zoom.fakeGestureTouched = false;
7062
+ zoom.fakeGestureMoved = false;
7063
+
7064
+ if (!support.gestures) {
7065
+ if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {
7066
+ return;
7067
+ }
7068
+
7069
+ zoom.fakeGestureTouched = true;
7070
+ gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
7071
+ }
7072
+
7073
+ if (!gesture.$slideEl || !gesture.$slideEl.length) {
7074
+ gesture.$slideEl = $(e.target).closest("." + swiper.params.slideClass);
7075
+ if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
7076
+ gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
7077
+ gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass);
7078
+ gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
7079
+
7080
+ if (gesture.$imageWrapEl.length === 0) {
7081
+ gesture.$imageEl = undefined;
7082
+ return;
7083
+ }
7084
+ }
7085
+
7086
+ if (gesture.$imageEl) {
7087
+ gesture.$imageEl.transition(0);
7088
+ }
7089
+
7090
+ swiper.zoom.isScaling = true;
7091
+ },
7092
+ onGestureChange: function onGestureChange(e) {
7093
+ var swiper = this;
7094
+ var support = swiper.support;
7095
+ var params = swiper.params.zoom;
7096
+ var zoom = swiper.zoom;
7097
+ var gesture = zoom.gesture;
7098
+
7099
+ if (!support.gestures) {
7100
+ if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {
7101
+ return;
7102
+ }
7103
+
7104
+ zoom.fakeGestureMoved = true;
7105
+ gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
7106
+ }
7107
+
7108
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) {
7109
+ if (e.type === 'gesturechange') zoom.onGestureStart(e);
7110
+ return;
7111
+ }
7112
+
7113
+ if (support.gestures) {
7114
+ zoom.scale = e.scale * zoom.currentScale;
7115
+ } else {
7116
+ zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale;
7117
+ }
7118
+
7119
+ if (zoom.scale > gesture.maxRatio) {
7120
+ zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5);
7121
+ }
7122
+
7123
+ if (zoom.scale < params.minRatio) {
7124
+ zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5);
7125
+ }
7126
+
7127
+ gesture.$imageEl.transform("translate3d(0,0,0) scale(" + zoom.scale + ")");
7128
+ },
7129
+ onGestureEnd: function onGestureEnd(e) {
7130
+ var swiper = this;
7131
+ var device = swiper.device;
7132
+ var support = swiper.support;
7133
+ var params = swiper.params.zoom;
7134
+ var zoom = swiper.zoom;
7135
+ var gesture = zoom.gesture;
7136
+
7137
+ if (!support.gestures) {
7138
+ if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
7139
+ return;
7140
+ }
7141
+
7142
+ if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {
7143
+ return;
7144
+ }
7145
+
7146
+ zoom.fakeGestureTouched = false;
7147
+ zoom.fakeGestureMoved = false;
7148
+ }
7149
+
7150
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
7151
+ zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
7152
+ gesture.$imageEl.transition(swiper.params.speed).transform("translate3d(0,0,0) scale(" + zoom.scale + ")");
7153
+ zoom.currentScale = zoom.scale;
7154
+ zoom.isScaling = false;
7155
+ if (zoom.scale === 1) gesture.$slideEl = undefined;
7156
+ },
7157
+ onTouchStart: function onTouchStart(e) {
7158
+ var swiper = this;
7159
+ var device = swiper.device;
7160
+ var zoom = swiper.zoom;
7161
+ var gesture = zoom.gesture,
7162
+ image = zoom.image;
7163
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
7164
+ if (image.isTouched) return;
7165
+ if (device.android && e.cancelable) e.preventDefault();
7166
+ image.isTouched = true;
7167
+ image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
7168
+ image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
7169
+ },
7170
+ onTouchMove: function onTouchMove(e) {
7171
+ var swiper = this;
7172
+ var zoom = swiper.zoom;
7173
+ var gesture = zoom.gesture,
7174
+ image = zoom.image,
7175
+ velocity = zoom.velocity;
7176
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
7177
+ swiper.allowClick = false;
7178
+ if (!image.isTouched || !gesture.$slideEl) return;
7179
+
7180
+ if (!image.isMoved) {
7181
+ image.width = gesture.$imageEl[0].offsetWidth;
7182
+ image.height = gesture.$imageEl[0].offsetHeight;
7183
+ image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
7184
+ image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
7185
+ gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
7186
+ gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
7187
+ gesture.$imageWrapEl.transition(0);
7188
+
7189
+ if (swiper.rtl) {
7190
+ image.startX = -image.startX;
7191
+ image.startY = -image.startY;
7192
+ }
7193
+ } // Define if we need image drag
7194
+
7195
+
7196
+ var scaledWidth = image.width * zoom.scale;
7197
+ var scaledHeight = image.height * zoom.scale;
7198
+ if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
7199
+ image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
7200
+ image.maxX = -image.minX;
7201
+ image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
7202
+ image.maxY = -image.minY;
7203
+ image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
7204
+ image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
7205
+
7206
+ if (!image.isMoved && !zoom.isScaling) {
7207
+ if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {
7208
+ image.isTouched = false;
7209
+ return;
7210
+ }
7211
+
7212
+ if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {
7213
+ image.isTouched = false;
7214
+ return;
7215
+ }
7216
+ }
7217
+
7218
+ if (e.cancelable) {
7219
+ e.preventDefault();
7220
+ }
7221
+
7222
+ e.stopPropagation();
7223
+ image.isMoved = true;
7224
+ image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;
7225
+ image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;
7226
+
7227
+ if (image.currentX < image.minX) {
7228
+ image.currentX = image.minX + 1 - Math.pow(image.minX - image.currentX + 1, 0.8);
7229
+ }
7230
+
7231
+ if (image.currentX > image.maxX) {
7232
+ image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8);
7233
+ }
7234
+
7235
+ if (image.currentY < image.minY) {
7236
+ image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8);
7237
+ }
7238
+
7239
+ if (image.currentY > image.maxY) {
7240
+ image.currentY = image.maxY - 1 + Math.pow(image.currentY - image.maxY + 1, 0.8);
7241
+ } // Velocity
7242
+
7243
+
7244
+ if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
7245
+ if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
7246
+ if (!velocity.prevTime) velocity.prevTime = Date.now();
7247
+ velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
7248
+ velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
7249
+ if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
7250
+ if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
7251
+ velocity.prevPositionX = image.touchesCurrent.x;
7252
+ velocity.prevPositionY = image.touchesCurrent.y;
7253
+ velocity.prevTime = Date.now();
7254
+ gesture.$imageWrapEl.transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)");
7255
+ },
7256
+ onTouchEnd: function onTouchEnd() {
7257
+ var swiper = this;
7258
+ var zoom = swiper.zoom;
7259
+ var gesture = zoom.gesture,
7260
+ image = zoom.image,
7261
+ velocity = zoom.velocity;
7262
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
7263
+
7264
+ if (!image.isTouched || !image.isMoved) {
7265
+ image.isTouched = false;
7266
+ image.isMoved = false;
7267
+ return;
7268
+ }
7269
+
7270
+ image.isTouched = false;
7271
+ image.isMoved = false;
7272
+ var momentumDurationX = 300;
7273
+ var momentumDurationY = 300;
7274
+ var momentumDistanceX = velocity.x * momentumDurationX;
7275
+ var newPositionX = image.currentX + momentumDistanceX;
7276
+ var momentumDistanceY = velocity.y * momentumDurationY;
7277
+ var newPositionY = image.currentY + momentumDistanceY; // Fix duration
7278
+
7279
+ if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
7280
+ if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
7281
+ var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
7282
+ image.currentX = newPositionX;
7283
+ image.currentY = newPositionY; // Define if we need image drag
7284
+
7285
+ var scaledWidth = image.width * zoom.scale;
7286
+ var scaledHeight = image.height * zoom.scale;
7287
+ image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
7288
+ image.maxX = -image.minX;
7289
+ image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
7290
+ image.maxY = -image.minY;
7291
+ image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
7292
+ image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
7293
+ gesture.$imageWrapEl.transition(momentumDuration).transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)");
7294
+ },
7295
+ onTransitionEnd: function onTransitionEnd() {
7296
+ var swiper = this;
7297
+ var zoom = swiper.zoom;
7298
+ var gesture = zoom.gesture;
7299
+
7300
+ if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
7301
+ if (gesture.$imageEl) {
7302
+ gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
7303
+ }
7304
+
7305
+ if (gesture.$imageWrapEl) {
7306
+ gesture.$imageWrapEl.transform('translate3d(0,0,0)');
7307
+ }
7308
+
7309
+ zoom.scale = 1;
7310
+ zoom.currentScale = 1;
7311
+ gesture.$slideEl = undefined;
7312
+ gesture.$imageEl = undefined;
7313
+ gesture.$imageWrapEl = undefined;
7314
+ }
7315
+ },
7316
+ // Toggle Zoom
7317
+ toggle: function toggle(e) {
7318
+ var swiper = this;
7319
+ var zoom = swiper.zoom;
7320
+
7321
+ if (zoom.scale && zoom.scale !== 1) {
7322
+ // Zoom Out
7323
+ zoom.out();
7324
+ } else {
7325
+ // Zoom In
7326
+ zoom.in(e);
7327
+ }
7328
+ },
7329
+ in: function _in(e) {
7330
+ var swiper = this;
7331
+ var window = getWindow();
7332
+ var zoom = swiper.zoom;
7333
+ var params = swiper.params.zoom;
7334
+ var gesture = zoom.gesture,
7335
+ image = zoom.image;
7336
+
7337
+ if (!gesture.$slideEl) {
7338
+ if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
7339
+ gesture.$slideEl = swiper.$wrapperEl.children("." + swiper.params.slideActiveClass);
7340
+ } else {
7341
+ gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
7342
+ }
7343
+
7344
+ gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
7345
+ gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass);
7346
+ }
7347
+
7348
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
7349
+ gesture.$slideEl.addClass("" + params.zoomedSlideClass);
7350
+ var touchX;
7351
+ var touchY;
7352
+ var offsetX;
7353
+ var offsetY;
7354
+ var diffX;
7355
+ var diffY;
7356
+ var translateX;
7357
+ var translateY;
7358
+ var imageWidth;
7359
+ var imageHeight;
7360
+ var scaledWidth;
7361
+ var scaledHeight;
7362
+ var translateMinX;
7363
+ var translateMinY;
7364
+ var translateMaxX;
7365
+ var translateMaxY;
7366
+ var slideWidth;
7367
+ var slideHeight;
7368
+
7369
+ if (typeof image.touchesStart.x === 'undefined' && e) {
7370
+ touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
7371
+ touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
7372
+ } else {
7373
+ touchX = image.touchesStart.x;
7374
+ touchY = image.touchesStart.y;
7375
+ }
7376
+
7377
+ zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
7378
+ zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
7379
+
7380
+ if (e) {
7381
+ slideWidth = gesture.$slideEl[0].offsetWidth;
7382
+ slideHeight = gesture.$slideEl[0].offsetHeight;
7383
+ offsetX = gesture.$slideEl.offset().left + window.scrollX;
7384
+ offsetY = gesture.$slideEl.offset().top + window.scrollY;
7385
+ diffX = offsetX + slideWidth / 2 - touchX;
7386
+ diffY = offsetY + slideHeight / 2 - touchY;
7387
+ imageWidth = gesture.$imageEl[0].offsetWidth;
7388
+ imageHeight = gesture.$imageEl[0].offsetHeight;
7389
+ scaledWidth = imageWidth * zoom.scale;
7390
+ scaledHeight = imageHeight * zoom.scale;
7391
+ translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);
7392
+ translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);
7393
+ translateMaxX = -translateMinX;
7394
+ translateMaxY = -translateMinY;
7395
+ translateX = diffX * zoom.scale;
7396
+ translateY = diffY * zoom.scale;
7397
+
7398
+ if (translateX < translateMinX) {
7399
+ translateX = translateMinX;
7400
+ }
7401
+
7402
+ if (translateX > translateMaxX) {
7403
+ translateX = translateMaxX;
7404
+ }
7405
+
7406
+ if (translateY < translateMinY) {
7407
+ translateY = translateMinY;
7408
+ }
7409
+
7410
+ if (translateY > translateMaxY) {
7411
+ translateY = translateMaxY;
7412
+ }
7413
+ } else {
7414
+ translateX = 0;
7415
+ translateY = 0;
7416
+ }
7417
+
7418
+ gesture.$imageWrapEl.transition(300).transform("translate3d(" + translateX + "px, " + translateY + "px,0)");
7419
+ gesture.$imageEl.transition(300).transform("translate3d(0,0,0) scale(" + zoom.scale + ")");
7420
+ },
7421
+ out: function out() {
7422
+ var swiper = this;
7423
+ var zoom = swiper.zoom;
7424
+ var params = swiper.params.zoom;
7425
+ var gesture = zoom.gesture;
7426
+
7427
+ if (!gesture.$slideEl) {
7428
+ if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
7429
+ gesture.$slideEl = swiper.$wrapperEl.children("." + swiper.params.slideActiveClass);
7430
+ } else {
7431
+ gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
7432
+ }
7433
+
7434
+ gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
7435
+ gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass);
7436
+ }
7437
+
7438
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
7439
+ zoom.scale = 1;
7440
+ zoom.currentScale = 1;
7441
+ gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
7442
+ gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
7443
+ gesture.$slideEl.removeClass("" + params.zoomedSlideClass);
7444
+ gesture.$slideEl = undefined;
7445
+ },
7446
+ toggleGestures: function toggleGestures(method) {
7447
+ var swiper = this;
7448
+ var zoom = swiper.zoom;
7449
+ var selector = zoom.slideSelector,
7450
+ passive = zoom.passiveListener;
7451
+ swiper.$wrapperEl[method]('gesturestart', selector, zoom.onGestureStart, passive);
7452
+ swiper.$wrapperEl[method]('gesturechange', selector, zoom.onGestureChange, passive);
7453
+ swiper.$wrapperEl[method]('gestureend', selector, zoom.onGestureEnd, passive);
7454
+ },
7455
+ enableGestures: function enableGestures() {
7456
+ if (this.zoom.gesturesEnabled) return;
7457
+ this.zoom.gesturesEnabled = true;
7458
+ this.zoom.toggleGestures('on');
7459
+ },
7460
+ disableGestures: function disableGestures() {
7461
+ if (!this.zoom.gesturesEnabled) return;
7462
+ this.zoom.gesturesEnabled = false;
7463
+ this.zoom.toggleGestures('off');
7464
+ },
7465
+ // Attach/Detach Events
7466
+ enable: function enable() {
7467
+ var swiper = this;
7468
+ var support = swiper.support;
7469
+ var zoom = swiper.zoom;
7470
+ if (zoom.enabled) return;
7471
+ zoom.enabled = true;
7472
+ var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {
7473
+ passive: true,
7474
+ capture: false
7475
+ } : false;
7476
+ var activeListenerWithCapture = support.passiveListener ? {
7477
+ passive: false,
7478
+ capture: true
7479
+ } : true;
7480
+ var slideSelector = "." + swiper.params.slideClass;
7481
+ swiper.zoom.passiveListener = passiveListener;
7482
+ swiper.zoom.slideSelector = slideSelector; // Scale image
7483
+
7484
+ if (support.gestures) {
7485
+ swiper.$wrapperEl.on(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);
7486
+ swiper.$wrapperEl.on(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);
7487
+ } else if (swiper.touchEvents.start === 'touchstart') {
7488
+ swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
7489
+ swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
7490
+ swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
7491
+
7492
+ if (swiper.touchEvents.cancel) {
7493
+ swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
7494
+ }
7495
+ } // Move image
7496
+
7497
+
7498
+ swiper.$wrapperEl.on(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture);
7499
+ },
7500
+ disable: function disable() {
7501
+ var swiper = this;
7502
+ var zoom = swiper.zoom;
7503
+ if (!zoom.enabled) return;
7504
+ var support = swiper.support;
7505
+ swiper.zoom.enabled = false;
7506
+ var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {
7507
+ passive: true,
7508
+ capture: false
7509
+ } : false;
7510
+ var activeListenerWithCapture = support.passiveListener ? {
7511
+ passive: false,
7512
+ capture: true
7513
+ } : true;
7514
+ var slideSelector = "." + swiper.params.slideClass; // Scale image
7515
+
7516
+ if (support.gestures) {
7517
+ swiper.$wrapperEl.off(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);
7518
+ swiper.$wrapperEl.off(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);
7519
+ } else if (swiper.touchEvents.start === 'touchstart') {
7520
+ swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
7521
+ swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
7522
+ swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
7523
+
7524
+ if (swiper.touchEvents.cancel) {
7525
+ swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
7526
+ }
7527
+ } // Move image
7528
+
7529
+
7530
+ swiper.$wrapperEl.off(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture);
7531
+ }
7532
+ };
7533
+ var Zoom$1 = {
7534
+ name: 'zoom',
7535
+ params: {
7536
+ zoom: {
7537
+ enabled: false,
7538
+ maxRatio: 3,
7539
+ minRatio: 1,
7540
+ toggle: true,
7541
+ containerClass: 'swiper-zoom-container',
7542
+ zoomedSlideClass: 'swiper-slide-zoomed'
7543
+ }
7544
+ },
7545
+ create: function create() {
7546
+ var swiper = this;
7547
+ bindModuleMethods(swiper, {
7548
+ zoom: _extends({
7549
+ enabled: false,
7550
+ scale: 1,
7551
+ currentScale: 1,
7552
+ isScaling: false,
7553
+ gesture: {
7554
+ $slideEl: undefined,
7555
+ slideWidth: undefined,
7556
+ slideHeight: undefined,
7557
+ $imageEl: undefined,
7558
+ $imageWrapEl: undefined,
7559
+ maxRatio: 3
7560
+ },
7561
+ image: {
7562
+ isTouched: undefined,
7563
+ isMoved: undefined,
7564
+ currentX: undefined,
7565
+ currentY: undefined,
7566
+ minX: undefined,
7567
+ minY: undefined,
7568
+ maxX: undefined,
7569
+ maxY: undefined,
7570
+ width: undefined,
7571
+ height: undefined,
7572
+ startX: undefined,
7573
+ startY: undefined,
7574
+ touchesStart: {},
7575
+ touchesCurrent: {}
7576
+ },
7577
+ velocity: {
7578
+ x: undefined,
7579
+ y: undefined,
7580
+ prevPositionX: undefined,
7581
+ prevPositionY: undefined,
7582
+ prevTime: undefined
7583
+ }
7584
+ }, Zoom)
7585
+ });
7586
+ var scale = 1;
7587
+ Object.defineProperty(swiper.zoom, 'scale', {
7588
+ get: function get() {
7589
+ return scale;
7590
+ },
7591
+ set: function set(value) {
7592
+ if (scale !== value) {
7593
+ var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;
7594
+ var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;
7595
+ swiper.emit('zoomChange', value, imageEl, slideEl);
7596
+ }
7597
+
7598
+ scale = value;
7599
+ }
7600
+ });
7601
+ },
7602
+ on: {
7603
+ init: function init(swiper) {
7604
+ if (swiper.params.zoom.enabled) {
7605
+ swiper.zoom.enable();
7606
+ }
7607
+ },
7608
+ destroy: function destroy(swiper) {
7609
+ swiper.zoom.disable();
7610
+ },
7611
+ touchStart: function touchStart(swiper, e) {
7612
+ if (!swiper.zoom.enabled) return;
7613
+ swiper.zoom.onTouchStart(e);
7614
+ },
7615
+ touchEnd: function touchEnd(swiper, e) {
7616
+ if (!swiper.zoom.enabled) return;
7617
+ swiper.zoom.onTouchEnd(e);
7618
+ },
7619
+ doubleTap: function doubleTap(swiper, e) {
7620
+ if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
7621
+ swiper.zoom.toggle(e);
7622
+ }
7623
+ },
7624
+ transitionEnd: function transitionEnd(swiper) {
7625
+ if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
7626
+ swiper.zoom.onTransitionEnd();
7627
+ }
7628
+ },
7629
+ slideChange: function slideChange(swiper) {
7630
+ if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
7631
+ swiper.zoom.onTransitionEnd();
7632
+ }
7633
+ }
7634
+ }
7635
+ };
7636
+
7637
+ var Lazy = {
7638
+ loadInSlide: function loadInSlide(index, loadInDuplicate) {
7639
+ if (loadInDuplicate === void 0) {
7640
+ loadInDuplicate = true;
7641
+ }
7642
+
7643
+ var swiper = this;
7644
+ var params = swiper.params.lazy;
7645
+ if (typeof index === 'undefined') return;
7646
+ if (swiper.slides.length === 0) return;
7647
+ var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
7648
+ var $slideEl = isVirtual ? swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + index + "\"]") : swiper.slides.eq(index);
7649
+ var $images = $slideEl.find("." + params.elementClass + ":not(." + params.loadedClass + "):not(." + params.loadingClass + ")");
7650
+
7651
+ if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
7652
+ $images.push($slideEl[0]);
7653
+ }
7654
+
7655
+ if ($images.length === 0) return;
7656
+ $images.each(function (imageEl) {
7657
+ var $imageEl = $(imageEl);
7658
+ $imageEl.addClass(params.loadingClass);
7659
+ var background = $imageEl.attr('data-background');
7660
+ var src = $imageEl.attr('data-src');
7661
+ var srcset = $imageEl.attr('data-srcset');
7662
+ var sizes = $imageEl.attr('data-sizes');
7663
+ var $pictureEl = $imageEl.parent('picture');
7664
+ swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () {
7665
+ if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;
7666
+
7667
+ if (background) {
7668
+ $imageEl.css('background-image', "url(\"" + background + "\")");
7669
+ $imageEl.removeAttr('data-background');
7670
+ } else {
7671
+ if (srcset) {
7672
+ $imageEl.attr('srcset', srcset);
7673
+ $imageEl.removeAttr('data-srcset');
7674
+ }
7675
+
7676
+ if (sizes) {
7677
+ $imageEl.attr('sizes', sizes);
7678
+ $imageEl.removeAttr('data-sizes');
7679
+ }
7680
+
7681
+ if ($pictureEl.length) {
7682
+ $pictureEl.children('source').each(function (sourceEl) {
7683
+ var $source = $(sourceEl);
7684
+
7685
+ if ($source.attr('data-srcset')) {
7686
+ $source.attr('srcset', $source.attr('data-srcset'));
7687
+ $source.removeAttr('data-srcset');
7688
+ }
7689
+ });
7690
+ }
7691
+
7692
+ if (src) {
7693
+ $imageEl.attr('src', src);
7694
+ $imageEl.removeAttr('data-src');
7695
+ }
7696
+ }
7697
+
7698
+ $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
7699
+ $slideEl.find("." + params.preloaderClass).remove();
7700
+
7701
+ if (swiper.params.loop && loadInDuplicate) {
7702
+ var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
7703
+
7704
+ if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
7705
+ var originalSlide = swiper.$wrapperEl.children("[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]:not(." + swiper.params.slideDuplicateClass + ")");
7706
+ swiper.lazy.loadInSlide(originalSlide.index(), false);
7707
+ } else {
7708
+ var duplicatedSlide = swiper.$wrapperEl.children("." + swiper.params.slideDuplicateClass + "[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]");
7709
+ swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
7710
+ }
7711
+ }
7712
+
7713
+ swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
7714
+
7715
+ if (swiper.params.autoHeight) {
7716
+ swiper.updateAutoHeight();
7717
+ }
7718
+ });
7719
+ swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
7720
+ });
7721
+ },
7722
+ load: function load() {
7723
+ var swiper = this;
7724
+ var $wrapperEl = swiper.$wrapperEl,
7725
+ swiperParams = swiper.params,
7726
+ slides = swiper.slides,
7727
+ activeIndex = swiper.activeIndex;
7728
+ var isVirtual = swiper.virtual && swiperParams.virtual.enabled;
7729
+ var params = swiperParams.lazy;
7730
+ var slidesPerView = swiperParams.slidesPerView;
7731
+
7732
+ if (slidesPerView === 'auto') {
7733
+ slidesPerView = 0;
7734
+ }
7735
+
7736
+ function slideExist(index) {
7737
+ if (isVirtual) {
7738
+ if ($wrapperEl.children("." + swiperParams.slideClass + "[data-swiper-slide-index=\"" + index + "\"]").length) {
7739
+ return true;
7740
+ }
7741
+ } else if (slides[index]) return true;
7742
+
7743
+ return false;
7744
+ }
7745
+
7746
+ function slideIndex(slideEl) {
7747
+ if (isVirtual) {
7748
+ return $(slideEl).attr('data-swiper-slide-index');
7749
+ }
7750
+
7751
+ return $(slideEl).index();
7752
+ }
7753
+
7754
+ if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;
7755
+
7756
+ if (swiper.params.watchSlidesVisibility) {
7757
+ $wrapperEl.children("." + swiperParams.slideVisibleClass).each(function (slideEl) {
7758
+ var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
7759
+ swiper.lazy.loadInSlide(index);
7760
+ });
7761
+ } else if (slidesPerView > 1) {
7762
+ for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
7763
+ if (slideExist(i)) swiper.lazy.loadInSlide(i);
7764
+ }
7765
+ } else {
7766
+ swiper.lazy.loadInSlide(activeIndex);
7767
+ }
7768
+
7769
+ if (params.loadPrevNext) {
7770
+ if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {
7771
+ var amount = params.loadPrevNextAmount;
7772
+ var spv = slidesPerView;
7773
+ var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
7774
+ var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides
7775
+
7776
+ for (var _i = activeIndex + slidesPerView; _i < maxIndex; _i += 1) {
7777
+ if (slideExist(_i)) swiper.lazy.loadInSlide(_i);
7778
+ } // Prev Slides
7779
+
7780
+
7781
+ for (var _i2 = minIndex; _i2 < activeIndex; _i2 += 1) {
7782
+ if (slideExist(_i2)) swiper.lazy.loadInSlide(_i2);
7783
+ }
7784
+ } else {
7785
+ var nextSlide = $wrapperEl.children("." + swiperParams.slideNextClass);
7786
+ if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));
7787
+ var prevSlide = $wrapperEl.children("." + swiperParams.slidePrevClass);
7788
+ if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));
7789
+ }
7790
+ }
7791
+ },
7792
+ checkInViewOnLoad: function checkInViewOnLoad() {
7793
+ var window = getWindow();
7794
+ var swiper = this;
7795
+ if (!swiper || swiper.destroyed) return;
7796
+ var $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window);
7797
+ var isWindow = $scrollElement[0] === window;
7798
+ var scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;
7799
+ var scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;
7800
+ var swiperOffset = swiper.$el.offset();
7801
+ var rtl = swiper.rtlTranslate;
7802
+ var inView = false;
7803
+ if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;
7804
+ var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];
7805
+
7806
+ for (var i = 0; i < swiperCoord.length; i += 1) {
7807
+ var point = swiperCoord[i];
7808
+
7809
+ if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {
7810
+ if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line
7811
+
7812
+ inView = true;
7813
+ }
7814
+ }
7815
+
7816
+ if (inView) {
7817
+ swiper.lazy.load();
7818
+ $scrollElement.off('scroll', swiper.lazy.checkInViewOnLoad);
7819
+ } else if (!swiper.lazy.scrollHandlerAttached) {
7820
+ swiper.lazy.scrollHandlerAttached = true;
7821
+ $scrollElement.on('scroll', swiper.lazy.checkInViewOnLoad);
7822
+ }
7823
+ }
7824
+ };
7825
+ var Lazy$1 = {
7826
+ name: 'lazy',
7827
+ params: {
7828
+ lazy: {
7829
+ checkInView: false,
7830
+ enabled: false,
7831
+ loadPrevNext: false,
7832
+ loadPrevNextAmount: 1,
7833
+ loadOnTransitionStart: false,
7834
+ scrollingElement: '',
7835
+ elementClass: 'swiper-lazy',
7836
+ loadingClass: 'swiper-lazy-loading',
7837
+ loadedClass: 'swiper-lazy-loaded',
7838
+ preloaderClass: 'swiper-lazy-preloader'
7839
+ }
7840
+ },
7841
+ create: function create() {
7842
+ var swiper = this;
7843
+ bindModuleMethods(swiper, {
7844
+ lazy: _extends({
7845
+ initialImageLoaded: false
7846
+ }, Lazy)
7847
+ });
7848
+ },
7849
+ on: {
7850
+ beforeInit: function beforeInit(swiper) {
7851
+ if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
7852
+ swiper.params.preloadImages = false;
7853
+ }
7854
+ },
7855
+ init: function init(swiper) {
7856
+ if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
7857
+ if (swiper.params.lazy.checkInView) {
7858
+ swiper.lazy.checkInViewOnLoad();
7859
+ } else {
7860
+ swiper.lazy.load();
7861
+ }
7862
+ }
7863
+ },
7864
+ scroll: function scroll(swiper) {
7865
+ if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
7866
+ swiper.lazy.load();
7867
+ }
7868
+ },
7869
+ resize: function resize(swiper) {
7870
+ if (swiper.params.lazy.enabled) {
7871
+ swiper.lazy.load();
7872
+ }
7873
+ },
7874
+ scrollbarDragMove: function scrollbarDragMove(swiper) {
7875
+ if (swiper.params.lazy.enabled) {
7876
+ swiper.lazy.load();
7877
+ }
7878
+ },
7879
+ transitionStart: function transitionStart(swiper) {
7880
+ if (swiper.params.lazy.enabled) {
7881
+ if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) {
7882
+ swiper.lazy.load();
7883
+ }
7884
+ }
7885
+ },
7886
+ transitionEnd: function transitionEnd(swiper) {
7887
+ if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
7888
+ swiper.lazy.load();
7889
+ }
7890
+ },
7891
+ slideChange: function slideChange(swiper) {
7892
+ if (swiper.params.lazy.enabled && swiper.params.cssMode) {
7893
+ swiper.lazy.load();
7894
+ }
7895
+ }
7896
+ }
7897
+ };
7898
+
7899
+ var Controller = {
7900
+ LinearSpline: function LinearSpline(x, y) {
7901
+ var binarySearch = function search() {
7902
+ var maxIndex;
7903
+ var minIndex;
7904
+ var guess;
7905
+ return function (array, val) {
7906
+ minIndex = -1;
7907
+ maxIndex = array.length;
7908
+
7909
+ while (maxIndex - minIndex > 1) {
7910
+ guess = maxIndex + minIndex >> 1;
7911
+
7912
+ if (array[guess] <= val) {
7913
+ minIndex = guess;
7914
+ } else {
7915
+ maxIndex = guess;
7916
+ }
7917
+ }
7918
+
7919
+ return maxIndex;
7920
+ };
7921
+ }();
7922
+
7923
+ this.x = x;
7924
+ this.y = y;
7925
+ this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:
7926
+ // (x1,y1) is the known point before given value,
7927
+ // (x3,y3) is the known point after given value.
7928
+
7929
+ var i1;
7930
+ var i3;
7931
+
7932
+ this.interpolate = function interpolate(x2) {
7933
+ if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):
7934
+
7935
+ i3 = binarySearch(this.x, x2);
7936
+ i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:
7937
+ // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
7938
+
7939
+ return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];
7940
+ };
7941
+
7942
+ return this;
7943
+ },
7944
+ // xxx: for now i will just save one spline function to to
7945
+ getInterpolateFunction: function getInterpolateFunction(c) {
7946
+ var swiper = this;
7947
+
7948
+ if (!swiper.controller.spline) {
7949
+ swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
7950
+ }
7951
+ },
7952
+ setTranslate: function setTranslate(_setTranslate, byController) {
7953
+ var swiper = this;
7954
+ var controlled = swiper.controller.control;
7955
+ var multiplier;
7956
+ var controlledTranslate;
7957
+ var Swiper = swiper.constructor;
7958
+
7959
+ function setControlledTranslate(c) {
7960
+ // this will create an Interpolate function based on the snapGrids
7961
+ // x is the Grid of the scrolled scroller and y will be the controlled scroller
7962
+ // it makes sense to create this only once and recall it for the interpolation
7963
+ // the function does a lot of value caching for performance
7964
+ var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
7965
+
7966
+ if (swiper.params.controller.by === 'slide') {
7967
+ swiper.controller.getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
7968
+ // but it did not work out
7969
+
7970
+ controlledTranslate = -swiper.controller.spline.interpolate(-translate);
7971
+ }
7972
+
7973
+ if (!controlledTranslate || swiper.params.controller.by === 'container') {
7974
+ multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
7975
+ controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();
7976
+ }
7977
+
7978
+ if (swiper.params.controller.inverse) {
7979
+ controlledTranslate = c.maxTranslate() - controlledTranslate;
7980
+ }
7981
+
7982
+ c.updateProgress(controlledTranslate);
7983
+ c.setTranslate(controlledTranslate, swiper);
7984
+ c.updateActiveIndex();
7985
+ c.updateSlidesClasses();
7986
+ }
7987
+
7988
+ if (Array.isArray(controlled)) {
7989
+ for (var i = 0; i < controlled.length; i += 1) {
7990
+ if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
7991
+ setControlledTranslate(controlled[i]);
7992
+ }
7993
+ }
7994
+ } else if (controlled instanceof Swiper && byController !== controlled) {
7995
+ setControlledTranslate(controlled);
7996
+ }
7997
+ },
7998
+ setTransition: function setTransition(duration, byController) {
7999
+ var swiper = this;
8000
+ var Swiper = swiper.constructor;
8001
+ var controlled = swiper.controller.control;
8002
+ var i;
8003
+
8004
+ function setControlledTransition(c) {
8005
+ c.setTransition(duration, swiper);
8006
+
8007
+ if (duration !== 0) {
8008
+ c.transitionStart();
8009
+
8010
+ if (c.params.autoHeight) {
8011
+ nextTick(function () {
8012
+ c.updateAutoHeight();
8013
+ });
8014
+ }
8015
+
8016
+ c.$wrapperEl.transitionEnd(function () {
8017
+ if (!controlled) return;
8018
+
8019
+ if (c.params.loop && swiper.params.controller.by === 'slide') {
8020
+ c.loopFix();
8021
+ }
8022
+
8023
+ c.transitionEnd();
8024
+ });
8025
+ }
8026
+ }
8027
+
8028
+ if (Array.isArray(controlled)) {
8029
+ for (i = 0; i < controlled.length; i += 1) {
8030
+ if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
8031
+ setControlledTransition(controlled[i]);
8032
+ }
8033
+ }
8034
+ } else if (controlled instanceof Swiper && byController !== controlled) {
8035
+ setControlledTransition(controlled);
8036
+ }
8037
+ }
8038
+ };
8039
+ var Controller$1 = {
8040
+ name: 'controller',
8041
+ params: {
8042
+ controller: {
8043
+ control: undefined,
8044
+ inverse: false,
8045
+ by: 'slide' // or 'container'
8046
+
8047
+ }
8048
+ },
8049
+ create: function create() {
8050
+ var swiper = this;
8051
+ bindModuleMethods(swiper, {
8052
+ controller: _extends({
8053
+ control: swiper.params.controller.control
8054
+ }, Controller)
8055
+ });
8056
+ },
8057
+ on: {
8058
+ update: function update(swiper) {
8059
+ if (!swiper.controller.control) return;
8060
+
8061
+ if (swiper.controller.spline) {
8062
+ swiper.controller.spline = undefined;
8063
+ delete swiper.controller.spline;
8064
+ }
8065
+ },
8066
+ resize: function resize(swiper) {
8067
+ if (!swiper.controller.control) return;
8068
+
8069
+ if (swiper.controller.spline) {
8070
+ swiper.controller.spline = undefined;
8071
+ delete swiper.controller.spline;
8072
+ }
8073
+ },
8074
+ observerUpdate: function observerUpdate(swiper) {
8075
+ if (!swiper.controller.control) return;
8076
+
8077
+ if (swiper.controller.spline) {
8078
+ swiper.controller.spline = undefined;
8079
+ delete swiper.controller.spline;
8080
+ }
8081
+ },
8082
+ setTranslate: function setTranslate(swiper, translate, byController) {
8083
+ if (!swiper.controller.control) return;
8084
+ swiper.controller.setTranslate(translate, byController);
8085
+ },
8086
+ setTransition: function setTransition(swiper, duration, byController) {
8087
+ if (!swiper.controller.control) return;
8088
+ swiper.controller.setTransition(duration, byController);
8089
+ }
8090
+ }
8091
+ };
8092
+
8093
+ var A11y = {
8094
+ getRandomNumber: function getRandomNumber(size) {
8095
+ if (size === void 0) {
8096
+ size = 16;
8097
+ }
8098
+
8099
+ var randomChar = function randomChar() {
8100
+ return Math.round(16 * Math.random()).toString(16);
8101
+ };
8102
+
8103
+ return 'x'.repeat(size).replace(/x/g, randomChar);
8104
+ },
8105
+ makeElFocusable: function makeElFocusable($el) {
8106
+ $el.attr('tabIndex', '0');
8107
+ return $el;
8108
+ },
8109
+ makeElNotFocusable: function makeElNotFocusable($el) {
8110
+ $el.attr('tabIndex', '-1');
8111
+ return $el;
8112
+ },
8113
+ addElRole: function addElRole($el, role) {
8114
+ $el.attr('role', role);
8115
+ return $el;
8116
+ },
8117
+ addElRoleDescription: function addElRoleDescription($el, description) {
8118
+ $el.attr('aria-role-description', description);
8119
+ return $el;
8120
+ },
8121
+ addElControls: function addElControls($el, controls) {
8122
+ $el.attr('aria-controls', controls);
8123
+ return $el;
8124
+ },
8125
+ addElLabel: function addElLabel($el, label) {
8126
+ $el.attr('aria-label', label);
8127
+ return $el;
8128
+ },
8129
+ addElId: function addElId($el, id) {
8130
+ $el.attr('id', id);
8131
+ return $el;
8132
+ },
8133
+ addElLive: function addElLive($el, live) {
8134
+ $el.attr('aria-live', live);
8135
+ return $el;
8136
+ },
8137
+ disableEl: function disableEl($el) {
8138
+ $el.attr('aria-disabled', true);
8139
+ return $el;
8140
+ },
8141
+ enableEl: function enableEl($el) {
8142
+ $el.attr('aria-disabled', false);
8143
+ return $el;
8144
+ },
8145
+ onEnterKey: function onEnterKey(e) {
8146
+ var swiper = this;
8147
+ var params = swiper.params.a11y;
8148
+ if (e.keyCode !== 13) return;
8149
+ var $targetEl = $(e.target);
8150
+
8151
+ if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
8152
+ if (!(swiper.isEnd && !swiper.params.loop)) {
8153
+ swiper.slideNext();
8154
+ }
8155
+
8156
+ if (swiper.isEnd) {
8157
+ swiper.a11y.notify(params.lastSlideMessage);
8158
+ } else {
8159
+ swiper.a11y.notify(params.nextSlideMessage);
8160
+ }
8161
+ }
8162
+
8163
+ if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
8164
+ if (!(swiper.isBeginning && !swiper.params.loop)) {
8165
+ swiper.slidePrev();
8166
+ }
8167
+
8168
+ if (swiper.isBeginning) {
8169
+ swiper.a11y.notify(params.firstSlideMessage);
8170
+ } else {
8171
+ swiper.a11y.notify(params.prevSlideMessage);
8172
+ }
8173
+ }
8174
+
8175
+ if (swiper.pagination && $targetEl.is("." + swiper.params.pagination.bulletClass.replace(/ /g, '.'))) {
8176
+ $targetEl[0].click();
8177
+ }
8178
+ },
8179
+ notify: function notify(message) {
8180
+ var swiper = this;
8181
+ var notification = swiper.a11y.liveRegion;
8182
+ if (notification.length === 0) return;
8183
+ notification.html('');
8184
+ notification.html(message);
8185
+ },
8186
+ updateNavigation: function updateNavigation() {
8187
+ var swiper = this;
8188
+ if (swiper.params.loop || !swiper.navigation) return;
8189
+ var _swiper$navigation = swiper.navigation,
8190
+ $nextEl = _swiper$navigation.$nextEl,
8191
+ $prevEl = _swiper$navigation.$prevEl;
8192
+
8193
+ if ($prevEl && $prevEl.length > 0) {
8194
+ if (swiper.isBeginning) {
8195
+ swiper.a11y.disableEl($prevEl);
8196
+ swiper.a11y.makeElNotFocusable($prevEl);
8197
+ } else {
8198
+ swiper.a11y.enableEl($prevEl);
8199
+ swiper.a11y.makeElFocusable($prevEl);
8200
+ }
8201
+ }
8202
+
8203
+ if ($nextEl && $nextEl.length > 0) {
8204
+ if (swiper.isEnd) {
8205
+ swiper.a11y.disableEl($nextEl);
8206
+ swiper.a11y.makeElNotFocusable($nextEl);
8207
+ } else {
8208
+ swiper.a11y.enableEl($nextEl);
8209
+ swiper.a11y.makeElFocusable($nextEl);
8210
+ }
8211
+ }
8212
+ },
8213
+ updatePagination: function updatePagination() {
8214
+ var swiper = this;
8215
+ var params = swiper.params.a11y;
8216
+
8217
+ if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
8218
+ swiper.pagination.bullets.each(function (bulletEl) {
8219
+ var $bulletEl = $(bulletEl);
8220
+ swiper.a11y.makeElFocusable($bulletEl);
8221
+
8222
+ if (!swiper.params.pagination.renderBullet) {
8223
+ swiper.a11y.addElRole($bulletEl, 'button');
8224
+ swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1));
8225
+ }
8226
+ });
8227
+ }
8228
+ },
8229
+ init: function init() {
8230
+ var swiper = this;
8231
+ var params = swiper.params.a11y;
8232
+ swiper.$el.append(swiper.a11y.liveRegion); // Container
8233
+
8234
+ var $containerEl = swiper.$el;
8235
+
8236
+ if (params.containerRoleDescriptionMessage) {
8237
+ swiper.a11y.addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);
8238
+ }
8239
+
8240
+ if (params.containerMessage) {
8241
+ swiper.a11y.addElLabel($containerEl, params.containerMessage);
8242
+ } // Wrapper
8243
+
8244
+
8245
+ var $wrapperEl = swiper.$wrapperEl;
8246
+ var wrapperId = $wrapperEl.attr('id') || "swiper-wrapper-" + swiper.a11y.getRandomNumber(16);
8247
+ var live;
8248
+ swiper.a11y.addElId($wrapperEl, wrapperId);
8249
+
8250
+ if (swiper.params.autoplay && swiper.params.autoplay.enabled) {
8251
+ live = 'off';
8252
+ } else {
8253
+ live = 'polite';
8254
+ }
8255
+
8256
+ swiper.a11y.addElLive($wrapperEl, live); // Slide
8257
+
8258
+ if (params.itemRoleDescriptionMessage) {
8259
+ swiper.a11y.addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);
8260
+ }
8261
+
8262
+ swiper.a11y.addElRole($(swiper.slides), 'group');
8263
+ swiper.slides.each(function (slideEl) {
8264
+ var $slideEl = $(slideEl);
8265
+ swiper.a11y.addElLabel($slideEl, $slideEl.index() + 1 + " / " + swiper.slides.length);
8266
+ }); // Navigation
8267
+
8268
+ var $nextEl;
8269
+ var $prevEl;
8270
+
8271
+ if (swiper.navigation && swiper.navigation.$nextEl) {
8272
+ $nextEl = swiper.navigation.$nextEl;
8273
+ }
8274
+
8275
+ if (swiper.navigation && swiper.navigation.$prevEl) {
8276
+ $prevEl = swiper.navigation.$prevEl;
8277
+ }
8278
+
8279
+ if ($nextEl && $nextEl.length) {
8280
+ swiper.a11y.makeElFocusable($nextEl);
8281
+
8282
+ if ($nextEl[0].tagName !== 'BUTTON') {
8283
+ swiper.a11y.addElRole($nextEl, 'button');
8284
+ $nextEl.on('keydown', swiper.a11y.onEnterKey);
8285
+ }
8286
+
8287
+ swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
8288
+ swiper.a11y.addElControls($nextEl, wrapperId);
8289
+ }
8290
+
8291
+ if ($prevEl && $prevEl.length) {
8292
+ swiper.a11y.makeElFocusable($prevEl);
8293
+
8294
+ if ($prevEl[0].tagName !== 'BUTTON') {
8295
+ swiper.a11y.addElRole($prevEl, 'button');
8296
+ $prevEl.on('keydown', swiper.a11y.onEnterKey);
8297
+ }
8298
+
8299
+ swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
8300
+ swiper.a11y.addElControls($prevEl, wrapperId);
8301
+ } // Pagination
8302
+
8303
+
8304
+ if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
8305
+ swiper.pagination.$el.on('keydown', "." + swiper.params.pagination.bulletClass.replace(/ /g, '.'), swiper.a11y.onEnterKey);
8306
+ }
8307
+ },
8308
+ destroy: function destroy() {
8309
+ var swiper = this;
8310
+ if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();
8311
+ var $nextEl;
8312
+ var $prevEl;
8313
+
8314
+ if (swiper.navigation && swiper.navigation.$nextEl) {
8315
+ $nextEl = swiper.navigation.$nextEl;
8316
+ }
8317
+
8318
+ if (swiper.navigation && swiper.navigation.$prevEl) {
8319
+ $prevEl = swiper.navigation.$prevEl;
8320
+ }
8321
+
8322
+ if ($nextEl) {
8323
+ $nextEl.off('keydown', swiper.a11y.onEnterKey);
8324
+ }
8325
+
8326
+ if ($prevEl) {
8327
+ $prevEl.off('keydown', swiper.a11y.onEnterKey);
8328
+ } // Pagination
8329
+
8330
+
8331
+ if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
8332
+ swiper.pagination.$el.off('keydown', "." + swiper.params.pagination.bulletClass.replace(/ /g, '.'), swiper.a11y.onEnterKey);
8333
+ }
8334
+ }
8335
+ };
8336
+ var A11y$1 = {
8337
+ name: 'a11y',
8338
+ params: {
8339
+ a11y: {
8340
+ enabled: true,
8341
+ notificationClass: 'swiper-notification',
8342
+ prevSlideMessage: 'Previous slide',
8343
+ nextSlideMessage: 'Next slide',
8344
+ firstSlideMessage: 'This is the first slide',
8345
+ lastSlideMessage: 'This is the last slide',
8346
+ paginationBulletMessage: 'Go to slide {{index}}',
8347
+ containerMessage: null,
8348
+ containerRoleDescriptionMessage: null,
8349
+ itemRoleDescriptionMessage: null
8350
+ }
8351
+ },
8352
+ create: function create() {
8353
+ var swiper = this;
8354
+ bindModuleMethods(swiper, {
8355
+ a11y: _extends({}, A11y, {
8356
+ liveRegion: $("<span class=\"" + swiper.params.a11y.notificationClass + "\" aria-live=\"assertive\" aria-atomic=\"true\"></span>")
8357
+ })
8358
+ });
8359
+ },
8360
+ on: {
8361
+ afterInit: function afterInit(swiper) {
8362
+ if (!swiper.params.a11y.enabled) return;
8363
+ swiper.a11y.init();
8364
+ swiper.a11y.updateNavigation();
8365
+ },
8366
+ toEdge: function toEdge(swiper) {
8367
+ if (!swiper.params.a11y.enabled) return;
8368
+ swiper.a11y.updateNavigation();
8369
+ },
8370
+ fromEdge: function fromEdge(swiper) {
8371
+ if (!swiper.params.a11y.enabled) return;
8372
+ swiper.a11y.updateNavigation();
8373
+ },
8374
+ paginationUpdate: function paginationUpdate(swiper) {
8375
+ if (!swiper.params.a11y.enabled) return;
8376
+ swiper.a11y.updatePagination();
8377
+ },
8378
+ destroy: function destroy(swiper) {
8379
+ if (!swiper.params.a11y.enabled) return;
8380
+ swiper.a11y.destroy();
8381
+ }
8382
+ }
8383
+ };
8384
+
8385
+ var History = {
8386
+ init: function init() {
8387
+ var swiper = this;
8388
+ var window = getWindow();
8389
+ if (!swiper.params.history) return;
8390
+
8391
+ if (!window.history || !window.history.pushState) {
8392
+ swiper.params.history.enabled = false;
8393
+ swiper.params.hashNavigation.enabled = true;
8394
+ return;
8395
+ }
8396
+
8397
+ var history = swiper.history;
8398
+ history.initialized = true;
8399
+ history.paths = History.getPathValues(swiper.params.url);
8400
+ if (!history.paths.key && !history.paths.value) return;
8401
+ history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
8402
+
8403
+ if (!swiper.params.history.replaceState) {
8404
+ window.addEventListener('popstate', swiper.history.setHistoryPopState);
8405
+ }
8406
+ },
8407
+ destroy: function destroy() {
8408
+ var swiper = this;
8409
+ var window = getWindow();
8410
+
8411
+ if (!swiper.params.history.replaceState) {
8412
+ window.removeEventListener('popstate', swiper.history.setHistoryPopState);
8413
+ }
8414
+ },
8415
+ setHistoryPopState: function setHistoryPopState() {
8416
+ var swiper = this;
8417
+ swiper.history.paths = History.getPathValues(swiper.params.url);
8418
+ swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
8419
+ },
8420
+ getPathValues: function getPathValues(urlOverride) {
8421
+ var window = getWindow();
8422
+ var location;
8423
+
8424
+ if (urlOverride) {
8425
+ location = new URL(urlOverride);
8426
+ } else {
8427
+ location = window.location;
8428
+ }
8429
+
8430
+ var pathArray = location.pathname.slice(1).split('/').filter(function (part) {
8431
+ return part !== '';
8432
+ });
8433
+ var total = pathArray.length;
8434
+ var key = pathArray[total - 2];
8435
+ var value = pathArray[total - 1];
8436
+ return {
8437
+ key: key,
8438
+ value: value
8439
+ };
8440
+ },
8441
+ setHistory: function setHistory(key, index) {
8442
+ var swiper = this;
8443
+ var window = getWindow();
8444
+ if (!swiper.history.initialized || !swiper.params.history.enabled) return;
8445
+ var location;
8446
+
8447
+ if (swiper.params.url) {
8448
+ location = new URL(swiper.params.url);
8449
+ } else {
8450
+ location = window.location;
8451
+ }
8452
+
8453
+ var slide = swiper.slides.eq(index);
8454
+ var value = History.slugify(slide.attr('data-history'));
8455
+
8456
+ if (!location.pathname.includes(key)) {
8457
+ value = key + "/" + value;
8458
+ }
8459
+
8460
+ var currentState = window.history.state;
8461
+
8462
+ if (currentState && currentState.value === value) {
8463
+ return;
8464
+ }
8465
+
8466
+ if (swiper.params.history.replaceState) {
8467
+ window.history.replaceState({
8468
+ value: value
8469
+ }, null, value);
8470
+ } else {
8471
+ window.history.pushState({
8472
+ value: value
8473
+ }, null, value);
8474
+ }
8475
+ },
8476
+ slugify: function slugify(text) {
8477
+ return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');
8478
+ },
8479
+ scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {
8480
+ var swiper = this;
8481
+
8482
+ if (value) {
8483
+ for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
8484
+ var slide = swiper.slides.eq(i);
8485
+ var slideHistory = History.slugify(slide.attr('data-history'));
8486
+
8487
+ if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {
8488
+ var index = slide.index();
8489
+ swiper.slideTo(index, speed, runCallbacks);
8490
+ }
8491
+ }
8492
+ } else {
8493
+ swiper.slideTo(0, speed, runCallbacks);
8494
+ }
8495
+ }
8496
+ };
8497
+ var History$1 = {
8498
+ name: 'history',
8499
+ params: {
8500
+ history: {
8501
+ enabled: false,
8502
+ replaceState: false,
8503
+ key: 'slides'
8504
+ }
8505
+ },
8506
+ create: function create() {
8507
+ var swiper = this;
8508
+ bindModuleMethods(swiper, {
8509
+ history: _extends({}, History)
8510
+ });
8511
+ },
8512
+ on: {
8513
+ init: function init(swiper) {
8514
+ if (swiper.params.history.enabled) {
8515
+ swiper.history.init();
8516
+ }
8517
+ },
8518
+ destroy: function destroy(swiper) {
8519
+ if (swiper.params.history.enabled) {
8520
+ swiper.history.destroy();
8521
+ }
8522
+ },
8523
+ transitionEnd: function transitionEnd(swiper) {
8524
+ if (swiper.history.initialized) {
8525
+ swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
8526
+ }
8527
+ },
8528
+ slideChange: function slideChange(swiper) {
8529
+ if (swiper.history.initialized && swiper.params.cssMode) {
8530
+ swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
8531
+ }
8532
+ }
8533
+ }
8534
+ };
8535
+
8536
+ var HashNavigation = {
8537
+ onHashCange: function onHashCange() {
8538
+ var swiper = this;
8539
+ var document = getDocument();
8540
+ swiper.emit('hashChange');
8541
+ var newHash = document.location.hash.replace('#', '');
8542
+ var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
8543
+
8544
+ if (newHash !== activeSlideHash) {
8545
+ var newIndex = swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-hash=\"" + newHash + "\"]").index();
8546
+ if (typeof newIndex === 'undefined') return;
8547
+ swiper.slideTo(newIndex);
8548
+ }
8549
+ },
8550
+ setHash: function setHash() {
8551
+ var swiper = this;
8552
+ var window = getWindow();
8553
+ var document = getDocument();
8554
+ if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;
8555
+
8556
+ if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {
8557
+ window.history.replaceState(null, null, "#" + swiper.slides.eq(swiper.activeIndex).attr('data-hash') || '');
8558
+ swiper.emit('hashSet');
8559
+ } else {
8560
+ var slide = swiper.slides.eq(swiper.activeIndex);
8561
+ var hash = slide.attr('data-hash') || slide.attr('data-history');
8562
+ document.location.hash = hash || '';
8563
+ swiper.emit('hashSet');
8564
+ }
8565
+ },
8566
+ init: function init() {
8567
+ var swiper = this;
8568
+ var document = getDocument();
8569
+ var window = getWindow();
8570
+ if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;
8571
+ swiper.hashNavigation.initialized = true;
8572
+ var hash = document.location.hash.replace('#', '');
8573
+
8574
+ if (hash) {
8575
+ var speed = 0;
8576
+
8577
+ for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
8578
+ var slide = swiper.slides.eq(i);
8579
+ var slideHash = slide.attr('data-hash') || slide.attr('data-history');
8580
+
8581
+ if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {
8582
+ var index = slide.index();
8583
+ swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);
8584
+ }
8585
+ }
8586
+ }
8587
+
8588
+ if (swiper.params.hashNavigation.watchState) {
8589
+ $(window).on('hashchange', swiper.hashNavigation.onHashCange);
8590
+ }
8591
+ },
8592
+ destroy: function destroy() {
8593
+ var swiper = this;
8594
+ var window = getWindow();
8595
+
8596
+ if (swiper.params.hashNavigation.watchState) {
8597
+ $(window).off('hashchange', swiper.hashNavigation.onHashCange);
8598
+ }
8599
+ }
8600
+ };
8601
+ var HashNavigation$1 = {
8602
+ name: 'hash-navigation',
8603
+ params: {
8604
+ hashNavigation: {
8605
+ enabled: false,
8606
+ replaceState: false,
8607
+ watchState: false
8608
+ }
8609
+ },
8610
+ create: function create() {
8611
+ var swiper = this;
8612
+ bindModuleMethods(swiper, {
8613
+ hashNavigation: _extends({
8614
+ initialized: false
8615
+ }, HashNavigation)
8616
+ });
8617
+ },
8618
+ on: {
8619
+ init: function init(swiper) {
8620
+ if (swiper.params.hashNavigation.enabled) {
8621
+ swiper.hashNavigation.init();
8622
+ }
8623
+ },
8624
+ destroy: function destroy(swiper) {
8625
+ if (swiper.params.hashNavigation.enabled) {
8626
+ swiper.hashNavigation.destroy();
8627
+ }
8628
+ },
8629
+ transitionEnd: function transitionEnd(swiper) {
8630
+ if (swiper.hashNavigation.initialized) {
8631
+ swiper.hashNavigation.setHash();
8632
+ }
8633
+ },
8634
+ slideChange: function slideChange(swiper) {
8635
+ if (swiper.hashNavigation.initialized && swiper.params.cssMode) {
8636
+ swiper.hashNavigation.setHash();
8637
+ }
8638
+ }
8639
+ }
8640
+ };
8641
+
8642
+ var Autoplay = {
8643
+ run: function run() {
8644
+ var swiper = this;
8645
+ var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
8646
+ var delay = swiper.params.autoplay.delay;
8647
+
8648
+ if ($activeSlideEl.attr('data-swiper-autoplay')) {
8649
+ delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
8650
+ }
8651
+
8652
+ clearTimeout(swiper.autoplay.timeout);
8653
+ swiper.autoplay.timeout = nextTick(function () {
8654
+ var autoplayResult;
8655
+
8656
+ if (swiper.params.autoplay.reverseDirection) {
8657
+ if (swiper.params.loop) {
8658
+ swiper.loopFix();
8659
+ autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);
8660
+ swiper.emit('autoplay');
8661
+ } else if (!swiper.isBeginning) {
8662
+ autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);
8663
+ swiper.emit('autoplay');
8664
+ } else if (!swiper.params.autoplay.stopOnLastSlide) {
8665
+ autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
8666
+ swiper.emit('autoplay');
8667
+ } else {
8668
+ swiper.autoplay.stop();
8669
+ }
8670
+ } else if (swiper.params.loop) {
8671
+ swiper.loopFix();
8672
+ autoplayResult = swiper.slideNext(swiper.params.speed, true, true);
8673
+ swiper.emit('autoplay');
8674
+ } else if (!swiper.isEnd) {
8675
+ autoplayResult = swiper.slideNext(swiper.params.speed, true, true);
8676
+ swiper.emit('autoplay');
8677
+ } else if (!swiper.params.autoplay.stopOnLastSlide) {
8678
+ autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);
8679
+ swiper.emit('autoplay');
8680
+ } else {
8681
+ swiper.autoplay.stop();
8682
+ }
8683
+
8684
+ if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();else if (autoplayResult === false) {
8685
+ swiper.autoplay.run();
8686
+ }
8687
+ }, delay);
8688
+ },
8689
+ start: function start() {
8690
+ var swiper = this;
8691
+ if (typeof swiper.autoplay.timeout !== 'undefined') return false;
8692
+ if (swiper.autoplay.running) return false;
8693
+ swiper.autoplay.running = true;
8694
+ swiper.emit('autoplayStart');
8695
+ swiper.autoplay.run();
8696
+ return true;
8697
+ },
8698
+ stop: function stop() {
8699
+ var swiper = this;
8700
+ if (!swiper.autoplay.running) return false;
8701
+ if (typeof swiper.autoplay.timeout === 'undefined') return false;
8702
+
8703
+ if (swiper.autoplay.timeout) {
8704
+ clearTimeout(swiper.autoplay.timeout);
8705
+ swiper.autoplay.timeout = undefined;
8706
+ }
8707
+
8708
+ swiper.autoplay.running = false;
8709
+ swiper.emit('autoplayStop');
8710
+ return true;
8711
+ },
8712
+ pause: function pause(speed) {
8713
+ var swiper = this;
8714
+ if (!swiper.autoplay.running) return;
8715
+ if (swiper.autoplay.paused) return;
8716
+ if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);
8717
+ swiper.autoplay.paused = true;
8718
+
8719
+ if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
8720
+ swiper.autoplay.paused = false;
8721
+ swiper.autoplay.run();
8722
+ } else {
8723
+ swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
8724
+ swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
8725
+ }
8726
+ },
8727
+ onVisibilityChange: function onVisibilityChange() {
8728
+ var swiper = this;
8729
+ var document = getDocument();
8730
+
8731
+ if (document.visibilityState === 'hidden' && swiper.autoplay.running) {
8732
+ swiper.autoplay.pause();
8733
+ }
8734
+
8735
+ if (document.visibilityState === 'visible' && swiper.autoplay.paused) {
8736
+ swiper.autoplay.run();
8737
+ swiper.autoplay.paused = false;
8738
+ }
8739
+ },
8740
+ onTransitionEnd: function onTransitionEnd(e) {
8741
+ var swiper = this;
8742
+ if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;
8743
+ if (e.target !== swiper.$wrapperEl[0]) return;
8744
+ swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
8745
+ swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
8746
+ swiper.autoplay.paused = false;
8747
+
8748
+ if (!swiper.autoplay.running) {
8749
+ swiper.autoplay.stop();
8750
+ } else {
8751
+ swiper.autoplay.run();
8752
+ }
8753
+ }
8754
+ };
8755
+ var Autoplay$1 = {
8756
+ name: 'autoplay',
8757
+ params: {
8758
+ autoplay: {
8759
+ enabled: false,
8760
+ delay: 3000,
8761
+ waitForTransition: true,
8762
+ disableOnInteraction: true,
8763
+ stopOnLastSlide: false,
8764
+ reverseDirection: false
8765
+ }
8766
+ },
8767
+ create: function create() {
8768
+ var swiper = this;
8769
+ bindModuleMethods(swiper, {
8770
+ autoplay: _extends({}, Autoplay, {
8771
+ running: false,
8772
+ paused: false
8773
+ })
8774
+ });
8775
+ },
8776
+ on: {
8777
+ init: function init(swiper) {
8778
+ if (swiper.params.autoplay.enabled) {
8779
+ swiper.autoplay.start();
8780
+ var document = getDocument();
8781
+ document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
8782
+ }
8783
+ },
8784
+ beforeTransitionStart: function beforeTransitionStart(swiper, speed, internal) {
8785
+ if (swiper.autoplay.running) {
8786
+ if (internal || !swiper.params.autoplay.disableOnInteraction) {
8787
+ swiper.autoplay.pause(speed);
8788
+ } else {
8789
+ swiper.autoplay.stop();
8790
+ }
8791
+ }
8792
+ },
8793
+ sliderFirstMove: function sliderFirstMove(swiper) {
8794
+ if (swiper.autoplay.running) {
8795
+ if (swiper.params.autoplay.disableOnInteraction) {
8796
+ swiper.autoplay.stop();
8797
+ } else {
8798
+ swiper.autoplay.pause();
8799
+ }
8800
+ }
8801
+ },
8802
+ touchEnd: function touchEnd(swiper) {
8803
+ if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {
8804
+ swiper.autoplay.run();
8805
+ }
8806
+ },
8807
+ destroy: function destroy(swiper) {
8808
+ if (swiper.autoplay.running) {
8809
+ swiper.autoplay.stop();
8810
+ }
8811
+
8812
+ var document = getDocument();
8813
+ document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
8814
+ }
8815
+ }
8816
+ };
8817
+
8818
+ var Fade = {
8819
+ setTranslate: function setTranslate() {
8820
+ var swiper = this;
8821
+ var slides = swiper.slides;
8822
+
8823
+ for (var i = 0; i < slides.length; i += 1) {
8824
+ var $slideEl = swiper.slides.eq(i);
8825
+ var offset = $slideEl[0].swiperSlideOffset;
8826
+ var tx = -offset;
8827
+ if (!swiper.params.virtualTranslate) tx -= swiper.translate;
8828
+ var ty = 0;
8829
+
8830
+ if (!swiper.isHorizontal()) {
8831
+ ty = tx;
8832
+ tx = 0;
8833
+ }
8834
+
8835
+ var slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
8836
+ $slideEl.css({
8837
+ opacity: slideOpacity
8838
+ }).transform("translate3d(" + tx + "px, " + ty + "px, 0px)");
8839
+ }
8840
+ },
8841
+ setTransition: function setTransition(duration) {
8842
+ var swiper = this;
8843
+ var slides = swiper.slides,
8844
+ $wrapperEl = swiper.$wrapperEl;
8845
+ slides.transition(duration);
8846
+
8847
+ if (swiper.params.virtualTranslate && duration !== 0) {
8848
+ var eventTriggered = false;
8849
+ slides.transitionEnd(function () {
8850
+ if (eventTriggered) return;
8851
+ if (!swiper || swiper.destroyed) return;
8852
+ eventTriggered = true;
8853
+ swiper.animating = false;
8854
+ var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
8855
+
8856
+ for (var i = 0; i < triggerEvents.length; i += 1) {
8857
+ $wrapperEl.trigger(triggerEvents[i]);
8858
+ }
8859
+ });
8860
+ }
8861
+ }
8862
+ };
8863
+ var EffectFade = {
8864
+ name: 'effect-fade',
8865
+ params: {
8866
+ fadeEffect: {
8867
+ crossFade: false
8868
+ }
8869
+ },
8870
+ create: function create() {
8871
+ var swiper = this;
8872
+ bindModuleMethods(swiper, {
8873
+ fadeEffect: _extends({}, Fade)
8874
+ });
8875
+ },
8876
+ on: {
8877
+ beforeInit: function beforeInit(swiper) {
8878
+ if (swiper.params.effect !== 'fade') return;
8879
+ swiper.classNames.push(swiper.params.containerModifierClass + "fade");
8880
+ var overwriteParams = {
8881
+ slidesPerView: 1,
8882
+ slidesPerColumn: 1,
8883
+ slidesPerGroup: 1,
8884
+ watchSlidesProgress: true,
8885
+ spaceBetween: 0,
8886
+ virtualTranslate: true
8887
+ };
8888
+ extend$1(swiper.params, overwriteParams);
8889
+ extend$1(swiper.originalParams, overwriteParams);
8890
+ },
8891
+ setTranslate: function setTranslate(swiper) {
8892
+ if (swiper.params.effect !== 'fade') return;
8893
+ swiper.fadeEffect.setTranslate();
8894
+ },
8895
+ setTransition: function setTransition(swiper, duration) {
8896
+ if (swiper.params.effect !== 'fade') return;
8897
+ swiper.fadeEffect.setTransition(duration);
8898
+ }
8899
+ }
8900
+ };
8901
+
8902
+ var Cube = {
8903
+ setTranslate: function setTranslate() {
8904
+ var swiper = this;
8905
+ var $el = swiper.$el,
8906
+ $wrapperEl = swiper.$wrapperEl,
8907
+ slides = swiper.slides,
8908
+ swiperWidth = swiper.width,
8909
+ swiperHeight = swiper.height,
8910
+ rtl = swiper.rtlTranslate,
8911
+ swiperSize = swiper.size,
8912
+ browser = swiper.browser;
8913
+ var params = swiper.params.cubeEffect;
8914
+ var isHorizontal = swiper.isHorizontal();
8915
+ var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
8916
+ var wrapperRotate = 0;
8917
+ var $cubeShadowEl;
8918
+
8919
+ if (params.shadow) {
8920
+ if (isHorizontal) {
8921
+ $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
8922
+
8923
+ if ($cubeShadowEl.length === 0) {
8924
+ $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
8925
+ $wrapperEl.append($cubeShadowEl);
8926
+ }
8927
+
8928
+ $cubeShadowEl.css({
8929
+ height: swiperWidth + "px"
8930
+ });
8931
+ } else {
8932
+ $cubeShadowEl = $el.find('.swiper-cube-shadow');
8933
+
8934
+ if ($cubeShadowEl.length === 0) {
8935
+ $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
8936
+ $el.append($cubeShadowEl);
8937
+ }
8938
+ }
8939
+ }
8940
+
8941
+ for (var i = 0; i < slides.length; i += 1) {
8942
+ var $slideEl = slides.eq(i);
8943
+ var slideIndex = i;
8944
+
8945
+ if (isVirtual) {
8946
+ slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
8947
+ }
8948
+
8949
+ var slideAngle = slideIndex * 90;
8950
+ var round = Math.floor(slideAngle / 360);
8951
+
8952
+ if (rtl) {
8953
+ slideAngle = -slideAngle;
8954
+ round = Math.floor(-slideAngle / 360);
8955
+ }
8956
+
8957
+ var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
8958
+ var tx = 0;
8959
+ var ty = 0;
8960
+ var tz = 0;
8961
+
8962
+ if (slideIndex % 4 === 0) {
8963
+ tx = -round * 4 * swiperSize;
8964
+ tz = 0;
8965
+ } else if ((slideIndex - 1) % 4 === 0) {
8966
+ tx = 0;
8967
+ tz = -round * 4 * swiperSize;
8968
+ } else if ((slideIndex - 2) % 4 === 0) {
8969
+ tx = swiperSize + round * 4 * swiperSize;
8970
+ tz = swiperSize;
8971
+ } else if ((slideIndex - 3) % 4 === 0) {
8972
+ tx = -swiperSize;
8973
+ tz = 3 * swiperSize + swiperSize * 4 * round;
8974
+ }
8975
+
8976
+ if (rtl) {
8977
+ tx = -tx;
8978
+ }
8979
+
8980
+ if (!isHorizontal) {
8981
+ ty = tx;
8982
+ tx = 0;
8983
+ }
8984
+
8985
+ var transform = "rotateX(" + (isHorizontal ? 0 : -slideAngle) + "deg) rotateY(" + (isHorizontal ? slideAngle : 0) + "deg) translate3d(" + tx + "px, " + ty + "px, " + tz + "px)";
8986
+
8987
+ if (progress <= 1 && progress > -1) {
8988
+ wrapperRotate = slideIndex * 90 + progress * 90;
8989
+ if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;
8990
+ }
8991
+
8992
+ $slideEl.transform(transform);
8993
+
8994
+ if (params.slideShadows) {
8995
+ // Set shadows
8996
+ var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
8997
+ var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
8998
+
8999
+ if (shadowBefore.length === 0) {
9000
+ shadowBefore = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>");
9001
+ $slideEl.append(shadowBefore);
9002
+ }
9003
+
9004
+ if (shadowAfter.length === 0) {
9005
+ shadowAfter = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>");
9006
+ $slideEl.append(shadowAfter);
9007
+ }
9008
+
9009
+ if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
9010
+ if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
9011
+ }
9012
+ }
9013
+
9014
+ $wrapperEl.css({
9015
+ '-webkit-transform-origin': "50% 50% -" + swiperSize / 2 + "px",
9016
+ '-moz-transform-origin': "50% 50% -" + swiperSize / 2 + "px",
9017
+ '-ms-transform-origin': "50% 50% -" + swiperSize / 2 + "px",
9018
+ 'transform-origin': "50% 50% -" + swiperSize / 2 + "px"
9019
+ });
9020
+
9021
+ if (params.shadow) {
9022
+ if (isHorizontal) {
9023
+ $cubeShadowEl.transform("translate3d(0px, " + (swiperWidth / 2 + params.shadowOffset) + "px, " + -swiperWidth / 2 + "px) rotateX(90deg) rotateZ(0deg) scale(" + params.shadowScale + ")");
9024
+ } else {
9025
+ var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
9026
+ var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
9027
+ var scale1 = params.shadowScale;
9028
+ var scale2 = params.shadowScale / multiplier;
9029
+ var offset = params.shadowOffset;
9030
+ $cubeShadowEl.transform("scale3d(" + scale1 + ", 1, " + scale2 + ") translate3d(0px, " + (swiperHeight / 2 + offset) + "px, " + -swiperHeight / 2 / scale2 + "px) rotateX(-90deg)");
9031
+ }
9032
+ }
9033
+
9034
+ var zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;
9035
+ $wrapperEl.transform("translate3d(0px,0," + zFactor + "px) rotateX(" + (swiper.isHorizontal() ? 0 : wrapperRotate) + "deg) rotateY(" + (swiper.isHorizontal() ? -wrapperRotate : 0) + "deg)");
9036
+ },
9037
+ setTransition: function setTransition(duration) {
9038
+ var swiper = this;
9039
+ var $el = swiper.$el,
9040
+ slides = swiper.slides;
9041
+ slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
9042
+
9043
+ if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
9044
+ $el.find('.swiper-cube-shadow').transition(duration);
9045
+ }
9046
+ }
9047
+ };
9048
+ var EffectCube = {
9049
+ name: 'effect-cube',
9050
+ params: {
9051
+ cubeEffect: {
9052
+ slideShadows: true,
9053
+ shadow: true,
9054
+ shadowOffset: 20,
9055
+ shadowScale: 0.94
9056
+ }
9057
+ },
9058
+ create: function create() {
9059
+ var swiper = this;
9060
+ bindModuleMethods(swiper, {
9061
+ cubeEffect: _extends({}, Cube)
9062
+ });
9063
+ },
9064
+ on: {
9065
+ beforeInit: function beforeInit(swiper) {
9066
+ if (swiper.params.effect !== 'cube') return;
9067
+ swiper.classNames.push(swiper.params.containerModifierClass + "cube");
9068
+ swiper.classNames.push(swiper.params.containerModifierClass + "3d");
9069
+ var overwriteParams = {
9070
+ slidesPerView: 1,
9071
+ slidesPerColumn: 1,
9072
+ slidesPerGroup: 1,
9073
+ watchSlidesProgress: true,
9074
+ resistanceRatio: 0,
9075
+ spaceBetween: 0,
9076
+ centeredSlides: false,
9077
+ virtualTranslate: true
9078
+ };
9079
+ extend$1(swiper.params, overwriteParams);
9080
+ extend$1(swiper.originalParams, overwriteParams);
9081
+ },
9082
+ setTranslate: function setTranslate(swiper) {
9083
+ if (swiper.params.effect !== 'cube') return;
9084
+ swiper.cubeEffect.setTranslate();
9085
+ },
9086
+ setTransition: function setTransition(swiper, duration) {
9087
+ if (swiper.params.effect !== 'cube') return;
9088
+ swiper.cubeEffect.setTransition(duration);
9089
+ }
9090
+ }
9091
+ };
9092
+
9093
+ var Flip = {
9094
+ setTranslate: function setTranslate() {
9095
+ var swiper = this;
9096
+ var slides = swiper.slides,
9097
+ rtl = swiper.rtlTranslate;
9098
+
9099
+ for (var i = 0; i < slides.length; i += 1) {
9100
+ var $slideEl = slides.eq(i);
9101
+ var progress = $slideEl[0].progress;
9102
+
9103
+ if (swiper.params.flipEffect.limitRotation) {
9104
+ progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
9105
+ }
9106
+
9107
+ var offset = $slideEl[0].swiperSlideOffset;
9108
+ var rotate = -180 * progress;
9109
+ var rotateY = rotate;
9110
+ var rotateX = 0;
9111
+ var tx = -offset;
9112
+ var ty = 0;
9113
+
9114
+ if (!swiper.isHorizontal()) {
9115
+ ty = tx;
9116
+ tx = 0;
9117
+ rotateX = -rotateY;
9118
+ rotateY = 0;
9119
+ } else if (rtl) {
9120
+ rotateY = -rotateY;
9121
+ }
9122
+
9123
+ $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
9124
+
9125
+ if (swiper.params.flipEffect.slideShadows) {
9126
+ // Set shadows
9127
+ var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
9128
+ var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
9129
+
9130
+ if (shadowBefore.length === 0) {
9131
+ shadowBefore = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'left' : 'top') + "\"></div>");
9132
+ $slideEl.append(shadowBefore);
9133
+ }
9134
+
9135
+ if (shadowAfter.length === 0) {
9136
+ shadowAfter = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'right' : 'bottom') + "\"></div>");
9137
+ $slideEl.append(shadowAfter);
9138
+ }
9139
+
9140
+ if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
9141
+ if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
9142
+ }
9143
+
9144
+ $slideEl.transform("translate3d(" + tx + "px, " + ty + "px, 0px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)");
9145
+ }
9146
+ },
9147
+ setTransition: function setTransition(duration) {
9148
+ var swiper = this;
9149
+ var slides = swiper.slides,
9150
+ activeIndex = swiper.activeIndex,
9151
+ $wrapperEl = swiper.$wrapperEl;
9152
+ slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
9153
+
9154
+ if (swiper.params.virtualTranslate && duration !== 0) {
9155
+ var eventTriggered = false; // eslint-disable-next-line
9156
+
9157
+ slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
9158
+ if (eventTriggered) return;
9159
+ if (!swiper || swiper.destroyed) return; // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;
9160
+
9161
+ eventTriggered = true;
9162
+ swiper.animating = false;
9163
+ var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
9164
+
9165
+ for (var i = 0; i < triggerEvents.length; i += 1) {
9166
+ $wrapperEl.trigger(triggerEvents[i]);
9167
+ }
9168
+ });
9169
+ }
9170
+ }
9171
+ };
9172
+ var EffectFlip = {
9173
+ name: 'effect-flip',
9174
+ params: {
9175
+ flipEffect: {
9176
+ slideShadows: true,
9177
+ limitRotation: true
9178
+ }
9179
+ },
9180
+ create: function create() {
9181
+ var swiper = this;
9182
+ bindModuleMethods(swiper, {
9183
+ flipEffect: _extends({}, Flip)
9184
+ });
9185
+ },
9186
+ on: {
9187
+ beforeInit: function beforeInit(swiper) {
9188
+ if (swiper.params.effect !== 'flip') return;
9189
+ swiper.classNames.push(swiper.params.containerModifierClass + "flip");
9190
+ swiper.classNames.push(swiper.params.containerModifierClass + "3d");
9191
+ var overwriteParams = {
9192
+ slidesPerView: 1,
9193
+ slidesPerColumn: 1,
9194
+ slidesPerGroup: 1,
9195
+ watchSlidesProgress: true,
9196
+ spaceBetween: 0,
9197
+ virtualTranslate: true
9198
+ };
9199
+ extend$1(swiper.params, overwriteParams);
9200
+ extend$1(swiper.originalParams, overwriteParams);
9201
+ },
9202
+ setTranslate: function setTranslate(swiper) {
9203
+ if (swiper.params.effect !== 'flip') return;
9204
+ swiper.flipEffect.setTranslate();
9205
+ },
9206
+ setTransition: function setTransition(swiper, duration) {
9207
+ if (swiper.params.effect !== 'flip') return;
9208
+ swiper.flipEffect.setTransition(duration);
9209
+ }
9210
+ }
9211
+ };
9212
+
9213
+ var Coverflow = {
9214
+ setTranslate: function setTranslate() {
9215
+ var swiper = this;
9216
+ var swiperWidth = swiper.width,
9217
+ swiperHeight = swiper.height,
9218
+ slides = swiper.slides,
9219
+ slidesSizesGrid = swiper.slidesSizesGrid;
9220
+ var params = swiper.params.coverflowEffect;
9221
+ var isHorizontal = swiper.isHorizontal();
9222
+ var transform = swiper.translate;
9223
+ var center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;
9224
+ var rotate = isHorizontal ? params.rotate : -params.rotate;
9225
+ var translate = params.depth; // Each slide offset from center
9226
+
9227
+ for (var i = 0, length = slides.length; i < length; i += 1) {
9228
+ var $slideEl = slides.eq(i);
9229
+ var slideSize = slidesSizesGrid[i];
9230
+ var slideOffset = $slideEl[0].swiperSlideOffset;
9231
+ var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;
9232
+ var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
9233
+ var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0
9234
+
9235
+ var translateZ = -translate * Math.abs(offsetMultiplier);
9236
+ var stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders
9237
+
9238
+ if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
9239
+ stretch = parseFloat(params.stretch) / 100 * slideSize;
9240
+ }
9241
+
9242
+ var translateY = isHorizontal ? 0 : stretch * offsetMultiplier;
9243
+ var translateX = isHorizontal ? stretch * offsetMultiplier : 0;
9244
+ var scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values
9245
+
9246
+ if (Math.abs(translateX) < 0.001) translateX = 0;
9247
+ if (Math.abs(translateY) < 0.001) translateY = 0;
9248
+ if (Math.abs(translateZ) < 0.001) translateZ = 0;
9249
+ if (Math.abs(rotateY) < 0.001) rotateY = 0;
9250
+ if (Math.abs(rotateX) < 0.001) rotateX = 0;
9251
+ if (Math.abs(scale) < 0.001) scale = 0;
9252
+ var slideTransform = "translate3d(" + translateX + "px," + translateY + "px," + translateZ + "px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg) scale(" + scale + ")";
9253
+ $slideEl.transform(slideTransform);
9254
+ $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
9255
+
9256
+ if (params.slideShadows) {
9257
+ // Set shadows
9258
+ var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
9259
+ var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
9260
+
9261
+ if ($shadowBeforeEl.length === 0) {
9262
+ $shadowBeforeEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>");
9263
+ $slideEl.append($shadowBeforeEl);
9264
+ }
9265
+
9266
+ if ($shadowAfterEl.length === 0) {
9267
+ $shadowAfterEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>");
9268
+ $slideEl.append($shadowAfterEl);
9269
+ }
9270
+
9271
+ if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
9272
+ if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;
9273
+ }
9274
+ }
9275
+ },
9276
+ setTransition: function setTransition(duration) {
9277
+ var swiper = this;
9278
+ swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
9279
+ }
9280
+ };
9281
+ var EffectCoverflow = {
9282
+ name: 'effect-coverflow',
9283
+ params: {
9284
+ coverflowEffect: {
9285
+ rotate: 50,
9286
+ stretch: 0,
9287
+ depth: 100,
9288
+ scale: 1,
9289
+ modifier: 1,
9290
+ slideShadows: true
9291
+ }
9292
+ },
9293
+ create: function create() {
9294
+ var swiper = this;
9295
+ bindModuleMethods(swiper, {
9296
+ coverflowEffect: _extends({}, Coverflow)
9297
+ });
9298
+ },
9299
+ on: {
9300
+ beforeInit: function beforeInit(swiper) {
9301
+ if (swiper.params.effect !== 'coverflow') return;
9302
+ swiper.classNames.push(swiper.params.containerModifierClass + "coverflow");
9303
+ swiper.classNames.push(swiper.params.containerModifierClass + "3d");
9304
+ swiper.params.watchSlidesProgress = true;
9305
+ swiper.originalParams.watchSlidesProgress = true;
9306
+ },
9307
+ setTranslate: function setTranslate(swiper) {
9308
+ if (swiper.params.effect !== 'coverflow') return;
9309
+ swiper.coverflowEffect.setTranslate();
9310
+ },
9311
+ setTransition: function setTransition(swiper, duration) {
9312
+ if (swiper.params.effect !== 'coverflow') return;
9313
+ swiper.coverflowEffect.setTransition(duration);
9314
+ }
9315
+ }
9316
+ };
9317
+
9318
+ var Thumbs = {
9319
+ init: function init() {
9320
+ var swiper = this;
9321
+ var thumbsParams = swiper.params.thumbs;
9322
+ if (swiper.thumbs.initialized) return false;
9323
+ swiper.thumbs.initialized = true;
9324
+ var SwiperClass = swiper.constructor;
9325
+
9326
+ if (thumbsParams.swiper instanceof SwiperClass) {
9327
+ swiper.thumbs.swiper = thumbsParams.swiper;
9328
+ extend$1(swiper.thumbs.swiper.originalParams, {
9329
+ watchSlidesProgress: true,
9330
+ slideToClickedSlide: false
9331
+ });
9332
+ extend$1(swiper.thumbs.swiper.params, {
9333
+ watchSlidesProgress: true,
9334
+ slideToClickedSlide: false
9335
+ });
9336
+ } else if (isObject$1(thumbsParams.swiper)) {
9337
+ swiper.thumbs.swiper = new SwiperClass(extend$1({}, thumbsParams.swiper, {
9338
+ watchSlidesVisibility: true,
9339
+ watchSlidesProgress: true,
9340
+ slideToClickedSlide: false
9341
+ }));
9342
+ swiper.thumbs.swiperCreated = true;
9343
+ }
9344
+
9345
+ swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
9346
+ swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
9347
+ return true;
9348
+ },
9349
+ onThumbClick: function onThumbClick() {
9350
+ var swiper = this;
9351
+ var thumbsSwiper = swiper.thumbs.swiper;
9352
+ if (!thumbsSwiper) return;
9353
+ var clickedIndex = thumbsSwiper.clickedIndex;
9354
+ var clickedSlide = thumbsSwiper.clickedSlide;
9355
+ if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;
9356
+ if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
9357
+ var slideToIndex;
9358
+
9359
+ if (thumbsSwiper.params.loop) {
9360
+ slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
9361
+ } else {
9362
+ slideToIndex = clickedIndex;
9363
+ }
9364
+
9365
+ if (swiper.params.loop) {
9366
+ var currentIndex = swiper.activeIndex;
9367
+
9368
+ if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
9369
+ swiper.loopFix(); // eslint-disable-next-line
9370
+
9371
+ swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
9372
+ currentIndex = swiper.activeIndex;
9373
+ }
9374
+
9375
+ var prevIndex = swiper.slides.eq(currentIndex).prevAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index();
9376
+ var nextIndex = swiper.slides.eq(currentIndex).nextAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index();
9377
+ if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;
9378
+ }
9379
+
9380
+ swiper.slideTo(slideToIndex);
9381
+ },
9382
+ update: function update(initial) {
9383
+ var swiper = this;
9384
+ var thumbsSwiper = swiper.thumbs.swiper;
9385
+ if (!thumbsSwiper) return;
9386
+ var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;
9387
+ var autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
9388
+ var useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
9389
+
9390
+ if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
9391
+ var currentThumbsIndex = thumbsSwiper.activeIndex;
9392
+ var newThumbsIndex;
9393
+ var direction;
9394
+
9395
+ if (thumbsSwiper.params.loop) {
9396
+ if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
9397
+ thumbsSwiper.loopFix(); // eslint-disable-next-line
9398
+
9399
+ thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
9400
+ currentThumbsIndex = thumbsSwiper.activeIndex;
9401
+ } // Find actual thumbs index to slide to
9402
+
9403
+
9404
+ var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index();
9405
+ var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index();
9406
+ if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;else newThumbsIndex = prevThumbsIndex;
9407
+ direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
9408
+ } else {
9409
+ newThumbsIndex = swiper.realIndex;
9410
+ direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
9411
+ }
9412
+
9413
+ if (useOffset) {
9414
+ newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
9415
+ }
9416
+
9417
+ if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
9418
+ if (thumbsSwiper.params.centeredSlides) {
9419
+ if (newThumbsIndex > currentThumbsIndex) {
9420
+ newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
9421
+ } else {
9422
+ newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
9423
+ }
9424
+ } else if (newThumbsIndex > currentThumbsIndex) {
9425
+ newThumbsIndex = newThumbsIndex - slidesPerView + 1;
9426
+ }
9427
+
9428
+ thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
9429
+ }
9430
+ } // Activate thumbs
9431
+
9432
+
9433
+ var thumbsToActivate = 1;
9434
+ var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
9435
+
9436
+ if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
9437
+ thumbsToActivate = swiper.params.slidesPerView;
9438
+ }
9439
+
9440
+ if (!swiper.params.thumbs.multipleActiveThumbs) {
9441
+ thumbsToActivate = 1;
9442
+ }
9443
+
9444
+ thumbsToActivate = Math.floor(thumbsToActivate);
9445
+ thumbsSwiper.slides.removeClass(thumbActiveClass);
9446
+
9447
+ if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {
9448
+ for (var i = 0; i < thumbsToActivate; i += 1) {
9449
+ thumbsSwiper.$wrapperEl.children("[data-swiper-slide-index=\"" + (swiper.realIndex + i) + "\"]").addClass(thumbActiveClass);
9450
+ }
9451
+ } else {
9452
+ for (var _i = 0; _i < thumbsToActivate; _i += 1) {
9453
+ thumbsSwiper.slides.eq(swiper.realIndex + _i).addClass(thumbActiveClass);
9454
+ }
9455
+ }
9456
+ }
9457
+ };
9458
+ var Thumbs$1 = {
9459
+ name: 'thumbs',
9460
+ params: {
9461
+ thumbs: {
9462
+ swiper: null,
9463
+ multipleActiveThumbs: true,
9464
+ autoScrollOffset: 0,
9465
+ slideThumbActiveClass: 'swiper-slide-thumb-active',
9466
+ thumbsContainerClass: 'swiper-container-thumbs'
9467
+ }
9468
+ },
9469
+ create: function create() {
9470
+ var swiper = this;
9471
+ bindModuleMethods(swiper, {
9472
+ thumbs: _extends({
9473
+ swiper: null,
9474
+ initialized: false
9475
+ }, Thumbs)
9476
+ });
9477
+ },
9478
+ on: {
9479
+ beforeInit: function beforeInit(swiper) {
9480
+ var thumbs = swiper.params.thumbs;
9481
+ if (!thumbs || !thumbs.swiper) return;
9482
+ swiper.thumbs.init();
9483
+ swiper.thumbs.update(true);
9484
+ },
9485
+ slideChange: function slideChange(swiper) {
9486
+ if (!swiper.thumbs.swiper) return;
9487
+ swiper.thumbs.update();
9488
+ },
9489
+ update: function update(swiper) {
9490
+ if (!swiper.thumbs.swiper) return;
9491
+ swiper.thumbs.update();
9492
+ },
9493
+ resize: function resize(swiper) {
9494
+ if (!swiper.thumbs.swiper) return;
9495
+ swiper.thumbs.update();
9496
+ },
9497
+ observerUpdate: function observerUpdate(swiper) {
9498
+ if (!swiper.thumbs.swiper) return;
9499
+ swiper.thumbs.update();
9500
+ },
9501
+ setTransition: function setTransition(swiper, duration) {
9502
+ var thumbsSwiper = swiper.thumbs.swiper;
9503
+ if (!thumbsSwiper) return;
9504
+ thumbsSwiper.setTransition(duration);
9505
+ },
9506
+ beforeDestroy: function beforeDestroy(swiper) {
9507
+ var thumbsSwiper = swiper.thumbs.swiper;
9508
+ if (!thumbsSwiper) return;
9509
+
9510
+ if (swiper.thumbs.swiperCreated && thumbsSwiper) {
9511
+ thumbsSwiper.destroy();
9512
+ }
9513
+ }
9514
+ }
9515
+ };
9516
+
9517
+ // Swiper Class
9518
+ var components = [Virtual$1, Keyboard$1, Mousewheel$1, Navigation$1, Pagination$1, Scrollbar$1, Parallax$1, Zoom$1, Lazy$1, Controller$1, A11y$1, History$1, HashNavigation$1, Autoplay$1, EffectFade, EffectCube, EffectFlip, EffectCoverflow, Thumbs$1];
9519
+ Swiper.use(components);
9520
+
9521
+ return Swiper;
9522
+
9523
+ })));
9524
+ //# sourceMappingURL=swiper-bundle.js.map
assets/js/swiper-bundle.js.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"file":"swiper-bundle.js.map","sources":["../node_modules/ssr-window/ssr-window.esm.js","../node_modules/dom7/dom7.esm.js","../src/utils/dom.js","../src/utils/utils.js","../src/utils/get-support.js","../src/utils/get-device.js","../src/utils/get-browser.js","../src/modules/resize/resize.js","../src/modules/observer/observer.js","../src/components/core/modular.js","../src/components/core/events-emitter.js","../src/components/core/update/updateSize.js","../src/components/core/update/updateSlides.js","../src/components/core/update/updateAutoHeight.js","../src/components/core/update/updateSlidesOffset.js","../src/components/core/update/updateSlidesProgress.js","../src/components/core/update/updateProgress.js","../src/components/core/update/updateSlidesClasses.js","../src/components/core/update/updateActiveIndex.js","../src/components/core/update/updateClickedSlide.js","../src/components/core/update/index.js","../src/components/core/translate/getTranslate.js","../src/components/core/translate/setTranslate.js","../src/components/core/translate/minTranslate.js","../src/components/core/translate/maxTranslate.js","../src/components/core/translate/translateTo.js","../src/components/core/translate/index.js","../src/components/core/transition/setTransition.js","../src/components/core/transition/transitionStart.js","../src/components/core/transition/transitionEnd.js","../src/components/core/transition/index.js","../src/components/core/slide/slideTo.js","../src/components/core/slide/slideToLoop.js","../src/components/core/slide/slideNext.js","../src/components/core/slide/slidePrev.js","../src/components/core/slide/slideReset.js","../src/components/core/slide/slideToClosest.js","../src/components/core/slide/slideToClickedSlide.js","../src/components/core/slide/index.js","../src/components/core/loop/loopCreate.js","../src/components/core/loop/loopFix.js","../src/components/core/loop/loopDestroy.js","../src/components/core/loop/index.js","../src/components/core/grab-cursor/setGrabCursor.js","../src/components/core/grab-cursor/unsetGrabCursor.js","../src/components/core/grab-cursor/index.js","../src/components/core/manipulation/appendSlide.js","../src/components/core/manipulation/prependSlide.js","../src/components/core/manipulation/addSlide.js","../src/components/core/manipulation/removeSlide.js","../src/components/core/manipulation/removeAllSlides.js","../src/components/core/manipulation/index.js","../src/components/core/events/onTouchStart.js","../src/components/core/events/onTouchMove.js","../src/components/core/events/onTouchEnd.js","../src/components/core/events/onResize.js","../src/components/core/events/onClick.js","../src/components/core/events/onScroll.js","../src/components/core/events/index.js","../src/components/core/breakpoints/setBreakpoint.js","../src/components/core/breakpoints/getBreakpoint.js","../src/components/core/breakpoints/index.js","../src/components/core/classes/addClasses.js","../src/components/core/classes/removeClasses.js","../src/components/core/classes/index.js","../src/components/core/images/loadImage.js","../src/components/core/images/preloadImages.js","../src/components/core/images/index.js","../src/components/core/check-overflow/index.js","../src/components/core/defaults.js","../src/components/core/core-class.js","../src/components/virtual/virtual.js","../src/components/keyboard/keyboard.js","../src/components/mousewheel/mousewheel.js","../src/components/navigation/navigation.js","../src/components/pagination/pagination.js","../src/components/scrollbar/scrollbar.js","../src/components/parallax/parallax.js","../src/components/zoom/zoom.js","../src/components/lazy/lazy.js","../src/components/controller/controller.js","../src/components/a11y/a11y.js","../src/components/history/history.js","../src/components/hash-navigation/hash-navigation.js","../src/components/autoplay/autoplay.js","../src/components/effect-fade/effect-fade.js","../src/components/effect-cube/effect-cube.js","../src/components/effect-flip/effect-flip.js","../src/components/effect-coverflow/effect-coverflow.js","../src/components/thumbs/thumbs.js","../src/swiper.js"],"sourcesContent":["/**\n * SSR Window 3.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: November 9, 2020\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target, src) {\n if (target === void 0) { target = {}; }\n if (src === void 0) { src = {}; }\n Object.keys(src).forEach(function (key) {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nvar ssrDocument = {\n body: {},\n addEventListener: function () { },\n removeEventListener: function () { },\n activeElement: {\n blur: function () { },\n nodeName: '',\n },\n querySelector: function () {\n return null;\n },\n querySelectorAll: function () {\n return [];\n },\n getElementById: function () {\n return null;\n },\n createEvent: function () {\n return {\n initEvent: function () { },\n };\n },\n createElement: function () {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute: function () { },\n getElementsByTagName: function () {\n return [];\n },\n };\n },\n createElementNS: function () {\n return {};\n },\n importNode: function () {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n var doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nvar ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState: function () { },\n pushState: function () { },\n go: function () { },\n back: function () { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener: function () { },\n removeEventListener: function () { },\n getComputedStyle: function () {\n return {\n getPropertyValue: function () {\n return '';\n },\n };\n },\n Image: function () { },\n Date: function () { },\n screen: {},\n setTimeout: function () { },\n clearTimeout: function () { },\n matchMedia: function () {\n return {};\n },\n requestAnimationFrame: function (callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame: function (id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n var win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 3.0.0\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: November 9, 2020\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n var proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get: function get() {\n return proto;\n },\n set: function set(value) {\n proto.__proto__ = value;\n }\n });\n}\n\nvar Dom7 = /*#__PURE__*/function (_Array) {\n _inheritsLoose(Dom7, _Array);\n\n function Dom7(items) {\n var _this;\n\n _this = _Array.call.apply(_Array, [this].concat(items)) || this;\n makeReactive(_assertThisInitialized(_this));\n return _this;\n }\n\n return Dom7;\n}( /*#__PURE__*/_wrapNativeSuper(Array));\n\nfunction arrayFlat(arr) {\n if (arr === void 0) {\n arr = [];\n }\n\n var res = [];\n arr.forEach(function (el) {\n if (Array.isArray(el)) {\n res.push.apply(res, arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n var uniqueArray = [];\n\n for (var i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, function (match, group) {\n return group.toUpperCase();\n });\n}\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n var a = [];\n var res = context.querySelectorAll(selector);\n\n for (var i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n var window = getWindow();\n var document = getDocument();\n var arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n var html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (html.indexOf('<li') === 0) toCreate = 'ul';\n if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n if (html.indexOf('<tbody') === 0) toCreate = 'table';\n if (html.indexOf('<option') === 0) toCreate = 'select';\n var tempParent = document.createElement(toCreate);\n tempParent.innerHTML = html;\n\n for (var i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n arr = qsa(selector.trim(), context || document);\n } // arr = qsa(selector, document);\n\n } else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n } else if (Array.isArray(selector)) {\n if (selector instanceof Dom7) return selector;\n arr = selector;\n }\n\n return new Dom7(arrayUnique(arr));\n}\n\n$.fn = Dom7.prototype;\n\nfunction addClass() {\n for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {\n classes[_key] = arguments[_key];\n }\n\n var classNames = arrayFlat(classes.map(function (c) {\n return c.split(' ');\n }));\n this.forEach(function (el) {\n var _el$classList;\n\n (_el$classList = el.classList).add.apply(_el$classList, classNames);\n });\n return this;\n}\n\nfunction removeClass() {\n for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n classes[_key2] = arguments[_key2];\n }\n\n var classNames = arrayFlat(classes.map(function (c) {\n return c.split(' ');\n }));\n this.forEach(function (el) {\n var _el$classList2;\n\n (_el$classList2 = el.classList).remove.apply(_el$classList2, classNames);\n });\n return this;\n}\n\nfunction toggleClass() {\n for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n classes[_key3] = arguments[_key3];\n }\n\n var classNames = arrayFlat(classes.map(function (c) {\n return c.split(' ');\n }));\n this.forEach(function (el) {\n classNames.forEach(function (className) {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass() {\n for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n classes[_key4] = arguments[_key4];\n }\n\n var classNames = arrayFlat(classes.map(function (c) {\n return c.split(' ');\n }));\n return arrayFilter(this, function (el) {\n return classNames.filter(function (className) {\n return el.classList.contains(className);\n }).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (var i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (var attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (var i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (var propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n var el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n var dataKey = el.getAttribute(\"data-\" + key);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (var i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n var el = this[0];\n if (!el) return undefined;\n var dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (var dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (var i = 0; i < el.attributes.length; i += 1) {\n var _attr = el.attributes[i];\n\n if (_attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(_attr.name.split('data-')[1])] = _attr.value;\n }\n }\n }\n\n for (var key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n var el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n var values = [];\n\n for (var i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (var _i = 0; _i < this.length; _i += 1) {\n var _el = this[_i];\n\n if (Array.isArray(value) && _el.multiple && _el.nodeName.toLowerCase() === 'select') {\n for (var j = 0; j < _el.options.length; j += 1) {\n _el.options[j].selected = value.indexOf(_el.options[j].value) >= 0;\n }\n } else {\n _el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? duration + \"ms\" : duration;\n }\n\n return this;\n}\n\nfunction on() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n var eventType = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventType = args[0];\n listener = args[1];\n capture = args[2];\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n var target = e.target;\n if (!target) return;\n var eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n var _parents = $(target).parents(); // eslint-disable-line\n\n\n for (var k = 0; k < _parents.length; k += 1) {\n if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n var events = eventType.split(' ');\n var j;\n\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n var event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener: listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n var _event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = [];\n\n el.dom7LiveListeners[_event].push({\n listener: listener,\n proxyListener: handleLiveEvent\n });\n\n el.addEventListener(_event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n var eventType = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventType = args[0];\n listener = args[1];\n capture = args[2];\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n var events = eventType.split(' ');\n\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var handlers = void 0;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (var k = handlers.length - 1; k >= 0; k -= 1) {\n var handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once() {\n var dom = this;\n\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n var eventName = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventName = args[0];\n listener = args[1];\n capture = args[2];\n targetSelector = undefined;\n }\n\n function onceHandler() {\n for (var _len8 = arguments.length, eventArgs = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n eventArgs[_key8] = arguments[_key8];\n }\n\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger() {\n var window = getWindow();\n\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n var events = args[0].split(' ');\n var eventData = args[1];\n\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n\n if (window.CustomEvent) {\n var evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter(function (data, dataIndex) {\n return dataIndex > 0;\n });\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n var dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n var dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n var window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n var _styles = this.styles();\n\n return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n var window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n var _styles2 = this.styles();\n\n return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n var window = getWindow();\n var document = getDocument();\n var el = this[0];\n var box = el.getBoundingClientRect();\n var body = document.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var scrollTop = el === window ? window.scrollY : el.scrollTop;\n var scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (var i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n var window = getWindow();\n\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n var window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n var window = getWindow();\n var i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (var _prop in props) {\n this[i].style[_prop] = props[_prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach(function (el, index) {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n var result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n var window = getWindow();\n var document = getDocument();\n var el = this[0];\n var compareWith;\n var i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n var child = this[0];\n var i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n var length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n var returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append() {\n var newChild;\n var document = getDocument();\n\n for (var k = 0; k < arguments.length; k += 1) {\n newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];\n\n for (var i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (var j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n var document = getDocument();\n var i;\n var j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n var before = $(selector);\n\n for (var i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (var j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n var after = $(selector);\n\n for (var i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (var j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n var _next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(_next).is(selector)) nextEls.push(_next);\n } else nextEls.push(_next);\n\n el = _next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n var el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n var _prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(_prev).is(selector)) prevEls.push(_prev);\n } else prevEls.push(_prev);\n\n el = _prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n var parents = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n var parents = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n var _parent = this[i].parentNode; // eslint-disable-line\n\n while (_parent) {\n if (selector) {\n if ($(_parent).is(selector)) parents.push(_parent);\n } else {\n parents.push(_parent);\n }\n\n _parent = _parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n var closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n var foundElements = [];\n\n for (var i = 0; i < this.length; i += 1) {\n var found = this[i].querySelectorAll(selector);\n\n for (var j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n var children = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n var childNodes = this[i].children;\n\n for (var j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add() {\n var dom = this;\n var i;\n var j;\n\n for (var _len10 = arguments.length, els = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n els[_key10] = arguments[_key10];\n }\n\n for (i = 0; i < els.length; i += 1) {\n var toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (el.nodeType === 1) {\n for (var j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\nfunction scrollTo() {\n var window = getWindow();\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var left = args[0],\n top = args[1],\n duration = args[2],\n easing = args[3],\n callback = args[4];\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n left = args[0];\n top = args[1];\n duration = args[2];\n callback = args[3];\n easing = args[4];\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n var el = this;\n var currentTop;\n var currentLeft;\n var maxTop;\n var maxLeft;\n var newTop;\n var newLeft;\n var scrollTop; // eslint-disable-line\n\n var scrollLeft; // eslint-disable-line\n\n var animateTop = top > 0 || top === 0;\n var animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n var startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time) {\n if (time === void 0) {\n time = new Date().getTime();\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n var progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n var easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n var done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var top = args[0],\n duration = args[1],\n easing = args[2],\n callback = args[3];\n\n if (args.length === 3 && typeof easing === 'function') {\n top = args[0];\n duration = args[1];\n callback = args[2];\n easing = args[3];\n }\n\n var dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n var left = args[0],\n duration = args[1],\n easing = args[2],\n callback = args[3];\n\n if (args.length === 3 && typeof easing === 'function') {\n left = args[0];\n duration = args[1];\n callback = args[2];\n easing = args[3];\n }\n\n var dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\nfunction animate(initialProps, initialParams) {\n var window = getWindow();\n var els = this;\n var a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n easingProgress: function easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n stop: function stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(function (el) {\n var element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n done: function done(complete) {\n a.animating = false;\n a.elements.each(function (el) {\n var element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n var que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n animate: function animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n var elements = []; // Define & Cache Initials & Units\n\n a.elements.each(function (el, index) {\n var initialFullValue;\n var initialValue;\n var unit;\n var finalValue;\n var finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(function (prop) {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue: initialFullValue,\n initialValue: initialValue,\n unit: unit,\n finalValue: finalValue,\n finalFullValue: finalFullValue,\n currentValue: initialValue\n };\n });\n });\n var startTime = null;\n var time;\n var elementsDone = 0;\n var propsDone = 0;\n var done;\n var began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n var progress;\n var easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(function (element) {\n var el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(function (prop) {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n var _el$prop = el[prop],\n initialValue = _el$prop.initialValue,\n finalValue = _el$prop.finalValue,\n unit = _el$prop.unit;\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n var currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n var animateInstance;\n\n for (var i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n var els = this;\n\n for (var i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nvar noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (typeof args[0] === 'undefined') {\n for (var i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on.apply(this, [name].concat(args));\n }\n\n return eventHandler;\n}\n\nvar click = shortcut('click');\nvar blur = shortcut('blur');\nvar focus = shortcut('focus');\nvar focusin = shortcut('focusin');\nvar focusout = shortcut('focusout');\nvar keyup = shortcut('keyup');\nvar keydown = shortcut('keydown');\nvar keypress = shortcut('keypress');\nvar submit = shortcut('submit');\nvar change = shortcut('change');\nvar mousedown = shortcut('mousedown');\nvar mousemove = shortcut('mousemove');\nvar mouseup = shortcut('mouseup');\nvar mouseenter = shortcut('mouseenter');\nvar mouseleave = shortcut('mouseleave');\nvar mouseout = shortcut('mouseout');\nvar mouseover = shortcut('mouseover');\nvar touchstart = shortcut('touchstart');\nvar touchend = shortcut('touchend');\nvar touchmove = shortcut('touchmove');\nvar resize = shortcut('resize');\nvar scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import {\n $,\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove,\n} from 'dom7';\n\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove,\n};\n\nObject.keys(Methods).forEach((methodName) => {\n $.fn[methodName] = Methods[methodName];\n});\n\nexport default $;\n","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach((key) => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n\n const curStyle = window.getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform\n .split(', ')\n .map((a) => a.replace(',', '.'))\n .join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix =\n curStyle.MozTransform ||\n curStyle.OTransform ||\n curStyle.MsTransform ||\n curStyle.msTransform ||\n curStyle.transform ||\n curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n const keysArray = Object.keys(Object(nextSource));\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n extend(to[nextKey], nextSource[nextKey]);\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\n\nfunction bindModuleMethods(instance, obj) {\n Object.keys(obj).forEach((key) => {\n if (isObject(obj[key])) {\n Object.keys(obj[key]).forEach((subKey) => {\n if (typeof obj[key][subKey] === 'function') {\n obj[key][subKey] = obj[key][subKey].bind(instance);\n }\n });\n }\n instance[key] = obj[key];\n });\n}\n\nexport { deleteProps, nextTick, now, getTranslate, isObject, extend, bindModuleMethods };\n","import { getWindow, getDocument } from 'ssr-window';\n\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n\n return {\n touch: !!(\n 'ontouchstart' in window ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)\n ),\n\n pointerEvents:\n !!window.PointerEvent &&\n 'maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints >= 0,\n\n observer: (function checkObserver() {\n return 'MutationObserver' in window || 'WebkitMutationObserver' in window;\n })(),\n\n passiveListener: (function checkPassiveListener() {\n let supportsPassive = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n },\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n })(),\n\n gestures: (function checkGestures() {\n return 'ongesturestart' in window;\n })(),\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nexport { getSupport };\n","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support';\n\nlet device;\n\nfunction calcDevice({ userAgent } = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n\n const device = {\n ios: false,\n android: false,\n };\n\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = [\n '1024x1366',\n '1366x1024',\n '834x1194',\n '1194x834',\n '834x1112',\n '1112x834',\n '768x1024',\n '1024x768',\n '820x1180',\n '1180x820',\n '810x1080',\n '1080x810',\n ];\n if (\n !ipad &&\n macos &&\n support.touch &&\n iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0\n ) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!device) {\n device = calcDevice(overrides);\n }\n return device;\n}\n\nexport { getDevice };\n","import { getWindow } from 'ssr-window';\n\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n return {\n isEdge: !!window.navigator.userAgent.match(/Edge/g),\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nexport { getBrowser };\n","import { getWindow } from 'ssr-window';\nimport { extend } from '../../utils/utils';\n\nexport default {\n name: 'resize',\n create() {\n const swiper = this;\n extend(swiper, {\n resize: {\n resizeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('beforeResize');\n swiper.emit('resize');\n },\n orientationChangeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('orientationchange');\n },\n },\n });\n },\n on: {\n init(swiper) {\n const window = getWindow();\n // Emit resize\n window.addEventListener('resize', swiper.resize.resizeHandler);\n\n // Emit orientationchange\n window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n destroy(swiper) {\n const window = getWindow();\n window.removeEventListener('resize', swiper.resize.resizeHandler);\n window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n },\n};\n","import { getWindow } from 'ssr-window';\nimport { bindModuleMethods } from '../../utils/utils';\n\nconst Observer = {\n attach(target, options = {}) {\n const window = getWindow();\n const swiper = this;\n\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc((mutations) => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n swiper.emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n swiper.emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n });\n\n swiper.observer.observers.push(observer);\n },\n init() {\n const swiper = this;\n if (!swiper.support.observer || !swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n for (let i = 0; i < containerParents.length; i += 1) {\n swiper.observer.attach(containerParents[i]);\n }\n }\n // Observe container\n swiper.observer.attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren,\n });\n\n // Observe wrapper\n swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n },\n destroy() {\n const swiper = this;\n swiper.observer.observers.forEach((observer) => {\n observer.disconnect();\n });\n swiper.observer.observers = [];\n },\n};\n\nexport default {\n name: 'observer',\n params: {\n observer: false,\n observeParents: false,\n observeSlideChildren: false,\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n observer: {\n ...Observer,\n observers: [],\n },\n });\n },\n on: {\n init(swiper) {\n swiper.observer.init();\n },\n destroy(swiper) {\n swiper.observer.destroy();\n },\n },\n};\n","import { extend } from '../../utils/utils';\n\nexport default {\n useParams(instanceParams) {\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach((moduleName) => {\n const module = instance.modules[moduleName];\n // Extend params\n if (module.params) {\n extend(instanceParams, module.params);\n }\n });\n },\n\n useModules(modulesParams = {}) {\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach((moduleName) => {\n const module = instance.modules[moduleName];\n const moduleParams = modulesParams[moduleName] || {};\n\n // Add event listeners\n if (module.on && instance.on) {\n Object.keys(module.on).forEach((moduleEventName) => {\n instance.on(moduleEventName, module.on[moduleEventName]);\n });\n }\n\n // Module create callback\n if (module.create) {\n module.create.bind(instance)(moduleParams);\n }\n });\n },\n};\n","/* eslint-disable no-underscore-dangle */\n\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach((event) => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach((event) => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (\n eventHandler === handler ||\n (eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler)\n ) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n\n eventsArray.forEach((event) => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach((eventHandler) => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler) => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n },\n};\n","import { extend } from '../../../utils/utils';\n\nexport default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n return;\n }\n\n // Subtract paddings\n width =\n width -\n parseInt($el.css('padding-left') || 0, 10) -\n parseInt($el.css('padding-right') || 0, 10);\n height =\n height -\n parseInt($el.css('padding-top') || 0, 10) -\n parseInt($el.css('padding-bottom') || 0, 10);\n\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n\n extend(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height,\n });\n}\n","import { getWindow } from 'ssr-window';\nimport { extend } from '../../../utils/utils';\n\nexport default function updateSlides() {\n const swiper = this;\n const window = getWindow();\n const params = swiper.params;\n\n const { $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n\n function slidesForMargin(slideEl, slideIndex) {\n if (!params.cssMode) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }\n\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n if (rtl) slides.css({ marginLeft: '', marginTop: '' });\n else slides.css({ marginRight: '', marginBottom: '' });\n\n let slidesNumberEvenToRows;\n if (params.slidesPerColumn > 1) {\n if (\n Math.floor(slidesLength / params.slidesPerColumn) ===\n slidesLength / swiper.params.slidesPerColumn\n ) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows =\n Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n }\n if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(\n slidesNumberEvenToRows,\n params.slidesPerView * params.slidesPerColumn,\n );\n }\n }\n\n // Calc slides\n let slideSize;\n const slidesPerColumn = params.slidesPerColumn;\n const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n if (params.slidesPerColumn > 1) {\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n const columnsInGroup =\n groupIndex === 0\n ? params.slidesPerGroup\n : Math.min(\n Math.ceil(\n (slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) /\n slidesPerColumn,\n ),\n params.slidesPerGroup,\n );\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup;\n\n newSlideOrderIndex = column + (row * slidesNumberEvenToRows) / slidesPerColumn;\n slide.css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex,\n });\n } else if (params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n row += 1;\n if (row >= slidesPerColumn) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide.css(\n `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,\n row !== 0 && params.spaceBetween && `${params.spaceBetween}px`,\n );\n }\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n const slideStyles = window.getComputedStyle(slide[0], null);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n if (swiper.isHorizontal()) {\n const width = parseFloat(slideStyles.getPropertyValue('width') || 0);\n const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left') || 0);\n const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right') || 0);\n const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left') || 0);\n const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right') || 0);\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const { clientWidth, offsetWidth } = slide[0];\n slideSize =\n width +\n paddingLeft +\n paddingRight +\n marginLeft +\n marginRight +\n (offsetWidth - clientWidth);\n }\n } else {\n const height = parseFloat(slideStyles.getPropertyValue('height') || 0);\n const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top') || 0);\n const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom') || 0);\n const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top') || 0);\n const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom') || 0);\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = height + marginTop + marginBottom;\n } else {\n const { clientHeight, offsetHeight } = slide[0];\n slideSize =\n height +\n paddingTop +\n paddingBottom +\n marginTop +\n marginBottom +\n (offsetHeight - clientHeight);\n }\n }\n }\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n if (swiper.isHorizontal()) {\n slides[i].style.width = `${slideSize}px`;\n } else {\n slides[i].style.height = `${slideSize}px`;\n }\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0)\n slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (\n (index - Math.min(swiper.params.slidesPerGroupSkip, index)) %\n swiper.params.slidesPerGroup ===\n 0\n )\n snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n\n prevSlideSize = slideSize;\n\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n let newSlidesGrid;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n }\n if (params.setWrapperSize) {\n if (swiper.isHorizontal())\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`,\n });\n else\n $wrapperEl.css({\n height: `${swiper.virtualSize + params.spaceBetween}px`,\n });\n }\n\n if (params.slidesPerColumn > 1) {\n swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize =\n Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n if (swiper.isHorizontal())\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`,\n });\n else\n $wrapperEl.css({\n height: `${swiper.virtualSize + params.spaceBetween}px`,\n });\n if (params.centeredSlides) {\n newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid = newSlidesGrid;\n }\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n\n if (\n Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) >\n 1\n ) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n if (swiper.isHorizontal()) {\n if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });\n else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });\n } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach((slideSizeValue) => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map((snap) => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach((slideSizeValue) => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n extend(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid,\n });\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateSlidesOffset();\n }\n}\n","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each((slide) => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length) break;\n activeSlides.push(swiper.slides.eq(index)[0]);\n }\n }\n } else {\n activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}\n","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal()\n ? slides[i].offsetLeft\n : slides[i].offsetTop;\n }\n}\n","import $ from '../../../utils/dom';\n\nexport default function updateSlidesProgress(translate = (this && this.translate) || 0) {\n const swiper = this;\n const params = swiper.params;\n\n const { slides, rtlTranslate: rtl } = swiper;\n\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.removeClass(params.slideVisibleClass);\n\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n const slideProgress =\n (offsetCenter +\n (params.centeredSlides ? swiper.minTranslate() : 0) -\n slide.swiperSlideOffset) /\n (slide.swiperSlideSize + params.spaceBetween);\n if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {\n const slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible =\n (slideBefore >= 0 && slideBefore < swiper.size - 1) ||\n (slideAfter > 1 && slideAfter <= swiper.size) ||\n (slideBefore <= 0 && slideAfter >= swiper.size);\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n }\n swiper.visibleSlides = $(swiper.visibleSlides);\n}\n","import { extend } from '../../../utils/utils';\n\nexport default function updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = (swiper && swiper.translate && swiper.translate * multiplier) || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let { progress, isBeginning, isEnd } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n extend(swiper, {\n progress,\n isBeginning,\n isEnd,\n });\n\n if (\n params.watchSlidesProgress ||\n params.watchSlidesVisibility ||\n (params.centeredSlides && params.autoHeight)\n )\n swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}\n","export default function updateSlidesClasses() {\n const swiper = this;\n\n const { slides, params, $wrapperEl, activeIndex, realIndex } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n\n slides.removeClass(\n `${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`,\n );\n\n let activeSlide;\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(\n `.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`,\n );\n } else {\n activeSlide = slides.eq(activeIndex);\n }\n\n // Active classes\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(\n `.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`,\n )\n .addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`,\n )\n .addClass(params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n let nextSlide = activeSlide\n .nextAll(`.${params.slideClass}`)\n .eq(0)\n .addClass(params.slideNextClass);\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = activeSlide\n .prevAll(`.${params.slideClass}`)\n .eq(0)\n .addClass(params.slidePrevClass);\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(\n `.${params.slideClass}:not(.${\n params.slideDuplicateClass\n })[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${\n params.slideDuplicateClass\n }[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(\n `.${params.slideClass}:not(.${\n params.slideDuplicateClass\n })[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${\n params.slideDuplicateClass\n }[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicatePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}\n","import { extend } from '../../../utils/utils';\n\nexport default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex,\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (\n translate >= slidesGrid[i] &&\n translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2\n ) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n\n // Get real index\n const realIndex = parseInt(\n swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex,\n 10,\n );\n\n extend(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex,\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}\n","import $ from '../../../utils/dom';\n\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) slideFound = true;\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = $(slide).index();\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (\n params.slideToClickedSlide &&\n swiper.clickedIndex !== undefined &&\n swiper.clickedIndex !== swiper.activeIndex\n ) {\n swiper.slideToClickedSlide();\n }\n}\n","import updateSize from './updateSize';\nimport updateSlides from './updateSlides';\nimport updateAutoHeight from './updateAutoHeight';\nimport updateSlidesOffset from './updateSlidesOffset';\nimport updateSlidesProgress from './updateSlidesProgress';\nimport updateProgress from './updateProgress';\nimport updateSlidesClasses from './updateSlidesClasses';\nimport updateActiveIndex from './updateActiveIndex';\nimport updateClickedSlide from './updateClickedSlide';\n\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide,\n};\n","import { getTranslate } from '../../../utils/utils';\n\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n\n const { params, rtlTranslate: rtl, translate, $wrapperEl } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n\n return currentTranslate || 0;\n}\n","export default function setTranslate(translate, byController) {\n const swiper = this;\n const { rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n","export default function minTranslate() {\n return -this.snapGrid[0];\n}\n","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n","export default function translateTo(\n translate = 0,\n speed = this.params.speed,\n runCallbacks = true,\n translateBounds = true,\n internal,\n) {\n const swiper = this;\n\n const { params, wrapperEl } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;\n else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;\n else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n // eslint-disable-next-line\n if (wrapperEl.scrollTo) {\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth',\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n }\n }\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener(\n 'transitionend',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].removeEventListener(\n 'webkitTransitionEnd',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.$wrapperEl[0].addEventListener(\n 'transitionend',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].addEventListener(\n 'webkitTransitionEnd',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n }\n }\n\n return true;\n}\n","import getTranslate from './getTranslate';\nimport setTranslate from './setTranslate';\nimport minTranslate from './minTranslate';\nimport maxTranslate from './maxTranslate';\nimport translateTo from './translateTo';\n\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo,\n};\n","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}\n","export default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const { activeIndex, params, previousIndex } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';\n else if (activeIndex < previousIndex) dir = 'prev';\n else dir = 'reset';\n }\n\n swiper.emit('transitionStart');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionStart');\n return;\n }\n swiper.emit('slideChangeTransitionStart');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionStart');\n } else {\n swiper.emit('slidePrevTransitionStart');\n }\n }\n}\n","export default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const { activeIndex, previousIndex, params } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';\n else if (activeIndex < previousIndex) dir = 'prev';\n else dir = 'reset';\n }\n\n swiper.emit('transitionEnd');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionEnd');\n return;\n }\n swiper.emit('slideChangeTransitionEnd');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionEnd');\n } else {\n swiper.emit('slidePrevTransitionEnd');\n }\n }\n}\n","import setTransition from './setTransition';\nimport transitionStart from './transitionStart';\nimport transitionEnd from './transitionEnd';\n\nexport default {\n setTransition,\n transitionStart,\n transitionEnd,\n};\n","export default function slideTo(\n index = 0,\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(\n `The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`,\n );\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(\n `The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`,\n );\n }\n\n // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex];\n\n // Update progress\n swiper.updateProgress(translate);\n\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGird = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (\n normalizedTranslate >= normalizedGird &&\n normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGird) / 2\n ) {\n slideIndex = i;\n } else if (\n normalizedTranslate >= normalizedGird &&\n normalizedTranslate < normalizedGridNext\n ) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGird) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (\n !swiper.allowSlideNext &&\n translate < swiper.translate &&\n translate < swiper.minTranslate()\n ) {\n return false;\n }\n if (\n !swiper.allowSlidePrev &&\n translate > swiper.translate &&\n translate > swiper.maxTranslate()\n ) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';\n else if (slideIndex < activeIndex) direction = 'prev';\n else direction = 'reset';\n\n // Update Index\n if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n let t = -translate;\n if (rtl) {\n t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;\n }\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n } else {\n // eslint-disable-next-line\n if (wrapperEl.scrollTo) {\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth',\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n }\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener(\n 'transitionend',\n swiper.onSlideToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].removeEventListener(\n 'webkitTransitionEnd',\n swiper.onSlideToWrapperTransitionEnd,\n );\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener(\n 'webkitTransitionEnd',\n swiper.onSlideToWrapperTransitionEnd,\n );\n }\n }\n\n return true;\n}\n","export default function slideToLoop(\n index = 0,\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n) {\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const { params, animating } = swiper;\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const { params, animating, snapGrid, slidesGrid, rtlTranslate } = swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map((val) => normalize(val));\n\n const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n snapGrid.forEach((snap) => {\n if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;\n });\n }\n let prevIndex;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n threshold = 0.5,\n) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n","import $ from '../../../utils/dom';\nimport { nextTick } from '../../../utils/utils';\n\nexport default function slideToClickedSlide() {\n const swiper = this;\n const { params, $wrapperEl } = swiper;\n\n const slidesPerView =\n params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (\n slideToIndex < swiper.loopedSlides - slidesPerView / 2 ||\n slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2\n ) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children(\n `.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`,\n )\n .eq(0)\n .index();\n\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children(\n `.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`,\n )\n .eq(0)\n .index();\n\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n","import slideTo from './slideTo';\nimport slideToLoop from './slideToLoop';\nimport slideNext from './slideNext';\nimport slidePrev from './slidePrev';\nimport slideReset from './slideReset';\nimport slideToClosest from './slideToClosest';\nimport slideToClickedSlide from './slideToClickedSlide';\n\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide,\n};\n","import { getDocument } from 'ssr-window';\nimport $ from '../../../utils/dom';\n\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const { params, $wrapperEl } = swiper;\n // Remove duplicated slides\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n\n let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(\n `${params.slideClass} ${params.slideBlankClass}`,\n );\n $wrapperEl.append(blankNode);\n }\n slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n slide.attr('data-swiper-slide-index', index);\n });\n for (let i = 0; i < appendSlides.length; i += 1) {\n $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}\n","export default function loopFix() {\n const swiper = this;\n\n swiper.emit('beforeLoopFix');\n\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl,\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate();\n\n // Fix For Negative Oversliding\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n swiper.emit('loopFix');\n}\n","export default function loopDestroy() {\n const swiper = this;\n const { $wrapperEl, params, slides } = swiper;\n $wrapperEl\n .children(\n `.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`,\n )\n .remove();\n slides.removeAttr('data-swiper-slide-index');\n}\n","import loopCreate from './loopCreate';\nimport loopFix from './loopFix';\nimport loopDestroy from './loopDestroy';\n\nexport default {\n loopCreate,\n loopFix,\n loopDestroy,\n};\n","export default function setGrabCursor(moving) {\n const swiper = this;\n if (\n swiper.support.touch ||\n !swiper.params.simulateTouch ||\n (swiper.params.watchOverflow && swiper.isLocked) ||\n swiper.params.cssMode\n )\n return;\n const el = swiper.el;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n","export default function unsetGrabCursor() {\n const swiper = this;\n if (\n swiper.support.touch ||\n (swiper.params.watchOverflow && swiper.isLocked) ||\n swiper.params.cssMode\n ) {\n return;\n }\n swiper.el.style.cursor = '';\n}\n","import setGrabCursor from './setGrabCursor';\nimport unsetGrabCursor from './unsetGrabCursor';\n\nexport default {\n setGrabCursor,\n unsetGrabCursor,\n};\n","export default function appendSlide(slides) {\n const swiper = this;\n const { $wrapperEl, params } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && swiper.support.observer)) {\n swiper.update();\n }\n}\n","export default function prependSlide(slides) {\n const swiper = this;\n const { params, $wrapperEl, activeIndex } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndex + 1;\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && swiper.support.observer)) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}\n","export default function addSlide(index, slides) {\n const swiper = this;\n const { $wrapperEl, params, activeIndex } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n const slidesBuffer = [];\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n newActiveIndex =\n activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n $wrapperEl.append(slidesBuffer[i]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && swiper.support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n","export default function removeSlide(slidesIndexes) {\n const swiper = this;\n const { params, $wrapperEl, activeIndex } = swiper;\n\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!(params.observer && swiper.support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n","export default function removeAllSlides() {\n const swiper = this;\n\n const slidesIndexes = [];\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}\n","import appendSlide from './appendSlide';\nimport prependSlide from './prependSlide';\nimport addSlide from './addSlide';\nimport removeSlide from './removeSlide';\nimport removeAllSlides from './removeAllSlides';\n\nexport default {\n appendSlide,\n prependSlide,\n addSlide,\n removeSlide,\n removeAllSlides,\n};\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport { extend, now } from '../../../utils/utils';\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n\n const data = swiper.touchEventsData;\n const { params, touches } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root componenet\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n if (\n params.noSwiping &&\n $targetEl.closest(\n params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`,\n )[0]\n ) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (\n edgeSwipeDetection &&\n (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)\n ) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n extend(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined,\n });\n\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($targetEl.is(data.formElements)) preventDefault = false;\n if (\n document.activeElement &&\n $(document.activeElement).is(data.formElements) &&\n document.activeElement !== $targetEl[0]\n ) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault =\n preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if (\n (params.touchStartForcePreventDefault || shouldPreventDefault) &&\n !$targetEl[0].isContentEditable\n ) {\n e.preventDefault();\n }\n }\n swiper.emit('touchStart', e);\n}\n","import { getDocument } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport { extend, now } from '../../../utils/utils';\n\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const { params, touches, rtlTranslate: rtl } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch =\n e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n if (data.isTouched) {\n extend(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (\n (pageY < touches.startY && swiper.translate <= swiper.maxTranslate()) ||\n (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n ) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (\n (pageX < touches.startX && swiper.translate <= swiper.maxTranslate()) ||\n (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n ) {\n return;\n }\n }\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.formElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n\n touches.currentX = pageX;\n touches.currentY = pageY;\n\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold)\n return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (\n (swiper.isHorizontal() && touches.currentY === touches.startY) ||\n (swiper.isVertical() && touches.currentX === touches.startX)\n ) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n data.isScrolling = swiper.isHorizontal()\n ? touchAngle > params.touchAngle\n : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop) {\n swiper.loopFix();\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance)\n data.currentTranslate =\n swiper.minTranslate() -\n 1 +\n (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance)\n data.currentTranslate =\n swiper.maxTranslate() +\n 1 -\n (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (\n !swiper.allowSlideNext &&\n swiper.swipeDirection === 'next' &&\n data.currentTranslate < data.startTranslate\n ) {\n data.currentTranslate = data.startTranslate;\n }\n if (\n !swiper.allowSlidePrev &&\n swiper.swipeDirection === 'prev' &&\n data.currentTranslate > data.startTranslate\n ) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal()\n ? touches.currentX - touches.startX\n : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode) {\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime,\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now(),\n });\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n","import { now, nextTick } from '../../../utils/utils';\n\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n\n const { params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (\n params.grabCursor &&\n data.isMoved &&\n data.isTouched &&\n (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)\n ) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (\n !data.isTouched ||\n !data.isMoved ||\n !swiper.swipeDirection ||\n touches.diff === 0 ||\n data.currentTranslate === data.startTranslate\n ) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (params.freeMode) {\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n\n if (params.freeModeMomentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeModeMomentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeModeSticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (\n Math.abs(snapGrid[nextSlide] - newPosition) <\n Math.abs(snapGrid[nextSlide - 1] - newPosition) ||\n swiper.swipeDirection === 'next'\n ) {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n swiper.once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeModeSticky) {\n // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeModeMomentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n swiper.emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (\n let i = 0;\n i < slidesGrid.length;\n i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup\n ) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget =\n swiper.navigation &&\n (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n","export default function onResize() {\n const swiper = this;\n\n const { params, el } = swiper;\n\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n\n swiper.updateSize();\n swiper.updateSlides();\n\n swiper.updateSlidesClasses();\n if (\n (params.slidesPerView === 'auto' || params.slidesPerView > 1) &&\n swiper.isEnd &&\n !swiper.isBeginning &&\n !swiper.params.centeredSlides\n ) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n","export default function onClick(e) {\n const swiper = this;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n","export default function onScroll() {\n const swiper = this;\n const { wrapperEl, rtlTranslate } = swiper;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n if (rtlTranslate) {\n swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollLeft;\n }\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === -0) swiper.translate = 0;\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}\n","import { getDocument } from 'ssr-window';\n\nimport onTouchStart from './onTouchStart';\nimport onTouchMove from './onTouchMove';\nimport onTouchEnd from './onTouchEnd';\nimport onResize from './onResize';\nimport onClick from './onClick';\nimport onScroll from './onScroll';\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const { params, touchEvents, el, wrapperEl, device, support } = swiper;\n\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n const capture = !!params.nested;\n\n // Touch Events\n if (!support.touch && support.pointerEvents) {\n el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (support.touch) {\n const passiveListener =\n touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n el.addEventListener(\n touchEvents.move,\n swiper.onTouchMove,\n support.passiveListener ? { passive: false, capture } : capture,\n );\n el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n if (touchEvents.cancel) {\n el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n if (!dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n }\n if (\n (params.simulateTouch && !device.ios && !device.android) ||\n (params.simulateTouch && !support.touch && device.ios)\n ) {\n el.addEventListener('mousedown', swiper.onTouchStart, false);\n document.addEventListener('mousemove', swiper.onTouchMove, capture);\n document.addEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el.addEventListener('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl.addEventListener('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper.on(\n device.ios || device.android\n ? 'resize orientationchange observerUpdate'\n : 'resize observerUpdate',\n onResize,\n true,\n );\n } else {\n swiper.on('observerUpdate', onResize, true);\n }\n}\n\nfunction detachEvents() {\n const swiper = this;\n const document = getDocument();\n\n const { params, touchEvents, el, wrapperEl, device, support } = swiper;\n\n const capture = !!params.nested;\n\n // Touch Events\n if (!support.touch && support.pointerEvents) {\n el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (support.touch) {\n const passiveListener =\n touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n if (touchEvents.cancel) {\n el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n }\n if (\n (params.simulateTouch && !device.ios && !device.android) ||\n (params.simulateTouch && !support.touch && device.ios)\n ) {\n el.removeEventListener('mousedown', swiper.onTouchStart, false);\n document.removeEventListener('mousemove', swiper.onTouchMove, capture);\n document.removeEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el.removeEventListener('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl.removeEventListener('scroll', swiper.onScroll);\n }\n\n // Resize handler\n swiper.off(\n device.ios || device.android\n ? 'resize orientationchange observerUpdate'\n : 'resize observerUpdate',\n onResize,\n );\n}\n\nexport default {\n attachEvents,\n detachEvents,\n};\n","import { extend } from '../../../utils/utils';\n\nexport default function setBreakpoint() {\n const swiper = this;\n const { activeIndex, initialized, loopedSlides = 0, params, $el } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints);\n\n if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n if (breakpointOnlyParams) {\n [\n 'slidesPerView',\n 'spaceBetween',\n 'slidesPerGroup',\n 'slidesPerGroupSkip',\n 'slidesPerColumn',\n ].forEach((param) => {\n const paramValue = breakpointOnlyParams[param];\n if (typeof paramValue === 'undefined') return;\n if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n breakpointOnlyParams[param] = 'auto';\n } else if (param === 'slidesPerView') {\n breakpointOnlyParams[param] = parseFloat(paramValue);\n } else {\n breakpointOnlyParams[param] = parseInt(paramValue, 10);\n }\n });\n }\n\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = params.slidesPerColumn > 1;\n const isMultiRow = breakpointParams.slidesPerColumn > 1;\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(\n `${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`,\n );\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}multirow`);\n if (breakpointParams.slidesPerColumnFill === 'column') {\n $el.addClass(`${params.containerModifierClass}multirow-column`);\n }\n swiper.emitContainerClasses();\n }\n\n const directionChanged =\n breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop =\n params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n\n extend(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n });\n\n swiper.currentBreakpoint = breakpoint;\n\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n }\n}\n","import { getWindow } from 'ssr-window';\n\nexport default function getBreakpoints(breakpoints) {\n const window = getWindow();\n // Get breakpoint for window width\n if (!breakpoints) return undefined;\n let breakpoint = false;\n\n const points = Object.keys(breakpoints).map((point) => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = window.innerHeight * minRatio;\n return { value, point };\n }\n return { value: point, point };\n });\n\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const { point, value } = points[i];\n if (value <= window.innerWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n","import setBreakpoint from './setBreakpoint';\nimport getBreakpoint from './getBreakpoint';\n\nexport default { setBreakpoint, getBreakpoint };\n","export default function addClasses() {\n const swiper = this;\n const { classNames, params, rtl, $el, device, support } = swiper;\n const suffixes = [];\n\n suffixes.push('initialized');\n suffixes.push(params.direction);\n\n if (support.pointerEvents && !support.touch) {\n suffixes.push('pointer-events');\n }\n if (params.freeMode) {\n suffixes.push('free-mode');\n }\n if (params.autoHeight) {\n suffixes.push('autoheight');\n }\n if (rtl) {\n suffixes.push('rtl');\n }\n if (params.slidesPerColumn > 1) {\n suffixes.push('multirow');\n if (params.slidesPerColumnFill === 'column') {\n suffixes.push('multirow-column');\n }\n }\n if (device.android) {\n suffixes.push('android');\n }\n if (device.ios) {\n suffixes.push('ios');\n }\n\n if (params.cssMode) {\n suffixes.push('css-mode');\n }\n\n suffixes.forEach((suffix) => {\n classNames.push(params.containerModifierClass + suffix);\n });\n\n $el.addClass(classNames.join(' '));\n\n swiper.emitContainerClasses();\n}\n","export default function removeClasses() {\n const swiper = this;\n const { $el, classNames } = swiper;\n\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}\n","import addClasses from './addClasses';\nimport removeClasses from './removeClasses';\n\nexport default { addClasses, removeClasses };\n","import { getWindow } from 'ssr-window';\nimport $ from '../../../utils/dom';\n\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n function onReady() {\n if (callback) callback();\n }\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}\n","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(\n imageEl,\n imageEl.currentSrc || imageEl.getAttribute('src'),\n imageEl.srcset || imageEl.getAttribute('srcset'),\n imageEl.sizes || imageEl.getAttribute('sizes'),\n true,\n onReady,\n );\n }\n}\n","import loadImage from './loadImage';\nimport preloadImages from './preloadImages';\n\nexport default {\n loadImage,\n preloadImages,\n};\n","function checkOverflow() {\n const swiper = this;\n const params = swiper.params;\n const wasLocked = swiper.isLocked;\n const lastSlidePosition =\n swiper.slides.length > 0 &&\n params.slidesOffsetBefore +\n params.spaceBetween * (swiper.slides.length - 1) +\n swiper.slides[0].offsetWidth * swiper.slides.length;\n\n if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n swiper.isLocked = lastSlidePosition <= swiper.size;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n swiper.allowSlideNext = !swiper.isLocked;\n swiper.allowSlidePrev = !swiper.isLocked;\n\n // events\n if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n if (swiper.navigation) swiper.navigation.update();\n }\n}\n\nexport default { checkOverflow };\n","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n nested: false,\n\n // Overrides\n width: null,\n height: null,\n\n //\n preventInteractionOnTransition: false,\n\n // ssr\n userAgent: null,\n url: null,\n\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeMomentumVelocityRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n\n // Autoheight\n autoHeight: false,\n\n // Set wrapper width\n setWrapperSize: false,\n\n // Virtual Translate\n virtualTranslate: false,\n\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: false,\n\n // Round length\n roundLengths: false,\n\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n\n // Unique Navigation Elements\n uniqueNavElements: true,\n\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n\n // Cursor\n grabCursor: false,\n\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null, // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n\n // Passive Listeners\n passiveListeners: true,\n\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n\n // Callbacks\n runCallbacksOnInit: true,\n\n // Internals\n _emitClasses: false,\n};\n","/* eslint no-param-reassign: \"off\" */\nimport $ from '../../utils/dom';\nimport { extend, now, deleteProps } from '../../utils/utils';\nimport { getSupport } from '../../utils/get-support';\nimport { getDevice } from '../../utils/get-device';\nimport { getBrowser } from '../../utils/get-browser';\n\nimport Resize from '../../modules/resize/resize';\nimport Observer from '../../modules/observer/observer';\n\nimport modular from './modular';\nimport eventsEmitter from './events-emitter';\n\nimport update from './update/index';\nimport translate from './translate/index';\nimport transition from './transition/index';\nimport slide from './slide/index';\nimport loop from './loop/index';\nimport grabCursor from './grab-cursor/index';\nimport manipulation from './manipulation/index';\nimport events from './events/index';\nimport breakpoints from './breakpoints/index';\nimport classes from './classes/index';\nimport images from './images/index';\nimport checkOverflow from './check-overflow/index';\n\nimport defaults from './defaults';\n\nconst prototypes = {\n modular,\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n manipulation,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images,\n};\n\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each((containerEl) => {\n const newParams = extend({}, params, { el: containerEl });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.support = getSupport();\n swiper.device = getDevice({ userAgent: params.userAgent });\n swiper.browser = getBrowser();\n\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n\n if (typeof swiper.modules === 'undefined') {\n swiper.modules = {};\n }\n Object.keys(swiper.modules).forEach((moduleName) => {\n const module = swiper.modules[moduleName];\n if (module.params) {\n const moduleParamName = Object.keys(module.params)[0];\n const moduleParams = module.params[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) return;\n if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n if (params[moduleParamName] === true) {\n params[moduleParamName] = { enabled: true };\n }\n if (\n typeof params[moduleParamName] === 'object' &&\n !('enabled' in params[moduleParamName])\n ) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };\n }\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults);\n swiper.useParams(swiperParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach((eventName) => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Save Dom lib\n swiper.$ = $;\n\n // Extend Swiper\n extend(swiper, {\n el,\n\n // Classes\n classNames: [],\n\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n\n //\n isBeginning: true,\n isEnd: false,\n\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n\n // Touch Events\n touchEvents: (function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n let desktop = ['mousedown', 'mousemove', 'mouseup'];\n if (swiper.support.pointerEvents) {\n desktop = ['pointerdown', 'pointermove', 'pointerup'];\n }\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3],\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2],\n };\n return swiper.support.touch || !swiper.params.simulateTouch\n ? swiper.touchEventsTouch\n : swiper.touchEventsDesktop;\n })(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n formElements: 'input, select, option, textarea, button, video, label',\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined,\n },\n\n // Clicks\n allowClick: true,\n\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0,\n },\n\n // Images\n imagesToLoad: [],\n imagesLoaded: 0,\n });\n\n // Install Modules\n swiper.useModules();\n\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n return swiper;\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const classes = swiper.el.className.split(' ').filter((className) => {\n return (\n className.indexOf('swiper-container') === 0 ||\n className.indexOf(swiper.params.containerModifierClass) === 0\n );\n });\n swiper.emit('_containerClasses', classes.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n\n return slideEl.className\n .split(' ')\n .filter((className) => {\n return (\n className.indexOf('swiper-slide') === 0 ||\n className.indexOf(swiper.params.slideClass) === 0\n );\n })\n .join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each((slideEl) => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({ slideEl, classNames });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic() {\n const swiper = this;\n const { params, slides, slidesGrid, size: swiperSize, activeIndex } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {\n spv += 1;\n }\n }\n }\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const { snapGrid, params } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(\n Math.max(translateValue, swiper.maxTranslate()),\n swiper.minTranslate(),\n );\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (swiper.params.freeMode) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if (\n (swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) &&\n swiper.isEnd &&\n !swiper.params.centeredSlides\n ) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (\n newDirection === currentDirection ||\n (newDirection !== 'horizontal' && newDirection !== 'vertical')\n ) {\n return swiper;\n }\n\n swiper.$el\n .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)\n .addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n\n swiper.params.direction = newDirection;\n\n swiper.slides.each((slideEl) => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n // Find Wrapper\n let $wrapperEl;\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));\n // Children needs to return slot items\n $wrapperEl.children = (options) => $el.children(options);\n } else {\n $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);\n }\n\n extend(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate:\n swiper.params.direction === 'horizontal' &&\n (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n });\n\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop) {\n swiper.slideTo(\n swiper.params.initialSlide + swiper.loopedSlides,\n 0,\n swiper.params.runCallbacksOnInit,\n );\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n }\n\n // Attach events\n swiper.attachEvents();\n\n // Init Flag\n swiper.initialized = true;\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const { params, $el, $wrapperEl, slides } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n if (slides && slides.length) {\n slides\n .removeClass(\n [\n params.slideVisibleClass,\n params.slideActiveClass,\n params.slideNextClass,\n params.slidePrevClass,\n ].join(' '),\n )\n .removeAttr('style')\n .removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach((eventName) => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(module) {\n if (!Swiper.prototype.modules) Swiper.prototype.modules = {};\n const name = module.name || `${Object.keys(Swiper.prototype.modules).length}_${now()}`;\n Swiper.prototype.modules[name] = module;\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach((m) => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\n\nObject.keys(prototypes).forEach((prototypeGroup) => {\n Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\n\nSwiper.use([Resize, Observer]);\n\nexport default Swiper;\n","import $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\n\nconst Virtual = {\n update(force) {\n const swiper = this;\n const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;\n const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n renderSlide,\n offset: previousOffset,\n } = swiper.virtual;\n swiper.updateActiveIndex();\n const activeIndex = swiper.activeIndex || 0;\n\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';\n else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = slidesPerGroup + addSlidesBefore;\n }\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n extend(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid,\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.css(offsetProp, `${offset}px`);\n }\n swiper.updateProgress();\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: (function getSlides() {\n const slidesToRender = [];\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n })(),\n });\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n }\n return;\n }\n const prependIndexes = [];\n const appendIndexes = [];\n if (force) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl\n .find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`)\n .remove();\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n if (i >= from && i <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i);\n } else {\n if (i > previousTo) appendIndexes.push(i);\n if (i < previousFrom) prependIndexes.push(i);\n }\n }\n }\n appendIndexes.forEach((index) => {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes\n .sort((a, b) => b - a)\n .forEach((index) => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n onRendered();\n },\n renderSlide(slide, index) {\n const swiper = this;\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n const $slideEl = params.renderSlide\n ? $(params.renderSlide.call(swiper, slide, index))\n : $(\n `<div class=\"${swiper.params.slideClass}\" data-swiper-slide-index=\"${index}\">${slide}</div>`,\n );\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n if (params.cache) swiper.virtual.cache[index] = $slideEl;\n return $slideEl;\n },\n appendSlide(slides) {\n const swiper = this;\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n swiper.virtual.update(true);\n },\n prependSlide(slides) {\n const swiper = this;\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach((cachedIndex) => {\n const $cachedEl = cache[cachedIndex];\n const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n if (cachedElIndex) {\n $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n }\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n swiper.virtual.update(true);\n swiper.slideTo(newActiveIndex, 0);\n },\n removeSlide(slidesIndexes) {\n const swiper = this;\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n swiper.virtual.update(true);\n swiper.slideTo(activeIndex, 0);\n },\n removeAllSlides() {\n const swiper = this;\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n swiper.virtual.update(true);\n swiper.slideTo(0, 0);\n },\n};\n\nexport default {\n name: 'virtual',\n params: {\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0,\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n virtual: {\n ...Virtual,\n slides: swiper.params.virtual.slides,\n cache: {},\n },\n });\n },\n on: {\n beforeInit(swiper) {\n if (!swiper.params.virtual.enabled) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n const overwriteParams = {\n watchSlidesProgress: true,\n };\n extend(swiper.params, overwriteParams);\n extend(swiper.originalParams, overwriteParams);\n\n if (!swiper.params.initialSlide) {\n swiper.virtual.update();\n }\n },\n setTranslate(swiper) {\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.update();\n },\n },\n};\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\n\nconst Keyboard = {\n handle(event) {\n const swiper = this;\n const window = getWindow();\n const document = getDocument();\n const { rtlTranslate: rtl } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (\n !swiper.allowSlideNext &&\n ((swiper.isHorizontal() && isArrowRight) ||\n (swiper.isVertical() && isArrowDown) ||\n isPageDown)\n ) {\n return false;\n }\n if (\n !swiper.allowSlidePrev &&\n ((swiper.isHorizontal() && isArrowLeft) || (swiper.isVertical() && isArrowUp) || isPageUp)\n ) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (\n document.activeElement &&\n document.activeElement.nodeName &&\n (document.activeElement.nodeName.toLowerCase() === 'input' ||\n document.activeElement.nodeName.toLowerCase() === 'textarea')\n ) {\n return undefined;\n }\n if (\n swiper.params.keyboard.onlyInViewport &&\n (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)\n ) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (\n swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 &&\n swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0\n ) {\n return undefined;\n }\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + swiper.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + swiper.height],\n [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],\n ];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (((isPageDown || isArrowRight) && !rtl) || ((isPageUp || isArrowLeft) && rtl))\n swiper.slideNext();\n if (((isPageUp || isArrowLeft) && !rtl) || ((isPageDown || isArrowRight) && rtl))\n swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n swiper.emit('keyPress', kc);\n return undefined;\n },\n enable() {\n const swiper = this;\n const document = getDocument();\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = true;\n },\n disable() {\n const swiper = this;\n const document = getDocument();\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = false;\n },\n};\n\nexport default {\n name: 'keyboard',\n params: {\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true,\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n keyboard: {\n enabled: false,\n ...Keyboard,\n },\n });\n },\n on: {\n init(swiper) {\n if (swiper.params.keyboard.enabled) {\n swiper.keyboard.enable();\n }\n },\n destroy(swiper) {\n if (swiper.keyboard.enabled) {\n swiper.keyboard.disable();\n }\n },\n },\n};\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { now, nextTick, bindModuleMethods } from '../../utils/utils';\n\nfunction isEventSupported() {\n const document = getDocument();\n const eventName = 'onwheel';\n let isSupported = eventName in document;\n\n if (!isSupported) {\n const element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (\n !isSupported &&\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true\n ) {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\nconst Mousewheel = {\n lastScrollTime: now(),\n lastEventBeforeSnap: undefined,\n recentWheelEvents: [],\n event() {\n const window = getWindow();\n if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n return isEventSupported() ? 'wheel' : 'mousewheel';\n },\n normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY,\n };\n },\n handleMouseEnter() {\n const swiper = this;\n swiper.mouseEntered = true;\n },\n handleMouseLeave() {\n const swiper = this;\n swiper.mouseEntered = false;\n },\n handle(event) {\n let e = event;\n let disableParentSwiper = true;\n const swiper = this;\n const params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges)\n return true;\n\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n const data = Mousewheel.normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;\n else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;\n else return true;\n } else {\n delta =\n Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) return true;\n\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop\n ? true\n : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\n if (!swiper.params.freeMode) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event,\n };\n\n // Keep the most recent events\n const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n const prevEvent = recentWheelEvents.length\n ? recentWheelEvents[recentWheelEvents.length - 1]\n : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (\n newEvent.direction !== prevEvent.direction ||\n newEvent.delta > prevEvent.delta ||\n newEvent.time > prevEvent.time + 150\n ) {\n swiper.mousewheel.animateSlider(newEvent);\n }\n } else {\n swiper.mousewheel.animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (swiper.mousewheel.releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n };\n const { lastEventBeforeSnap } = swiper.mousewheel;\n const ignoreWheelEvents =\n lastEventBeforeSnap &&\n newEvent.time < lastEventBeforeSnap.time + 500 &&\n newEvent.delta <= lastEventBeforeSnap.delta &&\n newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeModeSticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(swiper.mousewheel.timeout);\n swiper.mousewheel.timeout = undefined;\n const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n const prevEvent = recentWheelEvents.length\n ? recentWheelEvents[recentWheelEvents.length - 1]\n : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (\n prevEvent &&\n (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)\n ) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (\n recentWheelEvents.length >= 15 &&\n newEvent.time - firstEvent.time < 500 &&\n firstEvent.delta - newEvent.delta >= 1 &&\n newEvent.delta <= 6\n ) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n swiper.mousewheel.lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.mousewheel.timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n if (!swiper.mousewheel.timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n swiper.mousewheel.timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n swiper.mousewheel.lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) swiper.emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction)\n swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n },\n animateSlider(newEvent) {\n const swiper = this;\n const window = getWindow();\n\n if (\n this.params.mousewheel.thresholdDelta &&\n newEvent.delta < this.params.mousewheel.thresholdDelta\n ) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n\n if (\n this.params.mousewheel.thresholdTime &&\n now() - swiper.mousewheel.lastScrollTime < this.params.mousewheel.thresholdTime\n ) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - swiper.mousewheel.lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n swiper.emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n swiper.emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n swiper.mousewheel.lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n },\n releaseScroll(newEvent) {\n const swiper = this;\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n },\n enable() {\n const swiper = this;\n const event = Mousewheel.event();\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n return true;\n }\n if (!event) return false;\n if (swiper.mousewheel.enabled) return false;\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n target.on(event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = true;\n return true;\n },\n disable() {\n const swiper = this;\n const event = Mousewheel.event();\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n return true;\n }\n if (!event) return false;\n if (!swiper.mousewheel.enabled) return false;\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n target.off(event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = false;\n return true;\n },\n};\n\nexport default {\n name: 'mousewheel',\n params: {\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n mousewheel: {\n enabled: false,\n lastScrollTime: now(),\n lastEventBeforeSnap: undefined,\n recentWheelEvents: [],\n\n enable: Mousewheel.enable,\n disable: Mousewheel.disable,\n handle: Mousewheel.handle,\n handleMouseEnter: Mousewheel.handleMouseEnter,\n handleMouseLeave: Mousewheel.handleMouseLeave,\n animateSlider: Mousewheel.animateSlider,\n releaseScroll: Mousewheel.releaseScroll,\n },\n });\n },\n on: {\n init(swiper) {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n swiper.mousewheel.disable();\n }\n if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n },\n destroy(swiper) {\n if (swiper.params.cssMode) {\n swiper.mousewheel.enable();\n }\n if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n },\n },\n};\n","import $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\n\nconst Navigation = {\n update() {\n // Update Navigation Buttons\n const swiper = this;\n const params = swiper.params.navigation;\n\n if (swiper.params.loop) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n $prevEl.addClass(params.disabledClass);\n } else {\n $prevEl.removeClass(params.disabledClass);\n }\n $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](\n params.lockClass,\n );\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n $nextEl.addClass(params.disabledClass);\n } else {\n $nextEl.removeClass(params.disabledClass);\n }\n $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](\n params.lockClass,\n );\n }\n },\n onPrevClick(e) {\n const swiper = this;\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) return;\n swiper.slidePrev();\n },\n onNextClick(e) {\n const swiper = this;\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) return;\n swiper.slideNext();\n },\n init() {\n const swiper = this;\n const params = swiper.params.navigation;\n if (!(params.nextEl || params.prevEl)) return;\n\n let $nextEl;\n let $prevEl;\n if (params.nextEl) {\n $nextEl = $(params.nextEl);\n if (\n swiper.params.uniqueNavElements &&\n typeof params.nextEl === 'string' &&\n $nextEl.length > 1 &&\n swiper.$el.find(params.nextEl).length === 1\n ) {\n $nextEl = swiper.$el.find(params.nextEl);\n }\n }\n if (params.prevEl) {\n $prevEl = $(params.prevEl);\n if (\n swiper.params.uniqueNavElements &&\n typeof params.prevEl === 'string' &&\n $prevEl.length > 1 &&\n swiper.$el.find(params.prevEl).length === 1\n ) {\n $prevEl = swiper.$el.find(params.prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', swiper.navigation.onNextClick);\n }\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', swiper.navigation.onPrevClick);\n }\n\n extend(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0],\n });\n },\n destroy() {\n const swiper = this;\n const { $nextEl, $prevEl } = swiper.navigation;\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', swiper.navigation.onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', swiper.navigation.onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n },\n};\n\nexport default {\n name: 'navigation',\n params: {\n navigation: {\n nextEl: null,\n prevEl: null,\n\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n navigation: {\n ...Navigation,\n },\n });\n },\n on: {\n init(swiper) {\n swiper.navigation.init();\n swiper.navigation.update();\n },\n toEdge(swiper) {\n swiper.navigation.update();\n },\n fromEdge(swiper) {\n swiper.navigation.update();\n },\n destroy(swiper) {\n swiper.navigation.destroy();\n },\n click(swiper, e) {\n const { $nextEl, $prevEl } = swiper.navigation;\n if (\n swiper.params.navigation.hideOnClick &&\n !$(e.target).is($prevEl) &&\n !$(e.target).is($nextEl)\n ) {\n let isHidden;\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n swiper.emit('navigationShow');\n } else {\n swiper.emit('navigationHide');\n }\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n },\n },\n};\n","import $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\n\nconst Pagination = {\n update() {\n // Render || Update Pagination bullets/items\n const swiper = this;\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (\n !params.el ||\n !swiper.pagination.el ||\n !swiper.pagination.$el ||\n swiper.pagination.$el.length === 0\n )\n return;\n const slidesLength =\n swiper.virtual && swiper.params.virtual.enabled\n ? swiper.virtual.slides.length\n : swiper.slides.length;\n const $el = swiper.pagination.$el;\n // Current/Total\n let current;\n const total = swiper.params.loop\n ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup)\n : swiper.snapGrid.length;\n if (swiper.params.loop) {\n current = Math.ceil(\n (swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup,\n );\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n }\n // Types\n if (\n params.type === 'bullets' &&\n swiper.pagination.bullets &&\n swiper.pagination.bullets.length > 0\n ) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n swiper.pagination.bulletSize = bullets\n .eq(0)\n [swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(\n swiper.isHorizontal() ? 'width' : 'height',\n `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`,\n );\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;\n if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) {\n swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (swiper.pagination.dynamicBulletIndex < 0) {\n swiper.pagination.dynamicBulletIndex = 0;\n }\n }\n firstIndex = current - swiper.pagination.dynamicBulletIndex;\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.removeClass(\n `${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`,\n );\n if ($el.length > 1) {\n bullets.each((bullet) => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n if (bulletIndex === firstIndex) {\n $bullet\n .prev()\n .addClass(`${params.bulletActiveClass}-prev`)\n .prev()\n .addClass(`${params.bulletActiveClass}-prev-prev`);\n }\n if (bulletIndex === lastIndex) {\n $bullet\n .next()\n .addClass(`${params.bulletActiveClass}-next`)\n .next()\n .addClass(`${params.bulletActiveClass}-next-next`);\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n bullets\n .eq(bullets.length - params.dynamicMainBullets - 1)\n .addClass(`${params.bulletActiveClass}-prev`);\n } else {\n $firstDisplayedBullet\n .prev()\n .addClass(`${params.bulletActiveClass}-prev`)\n .prev()\n .addClass(`${params.bulletActiveClass}-prev-prev`);\n $lastDisplayedBullet\n .next()\n .addClass(`${params.bulletActiveClass}-next`)\n .next()\n .addClass(`${params.bulletActiveClass}-next-next`);\n }\n } else {\n $firstDisplayedBullet\n .prev()\n .addClass(`${params.bulletActiveClass}-prev`)\n .prev()\n .addClass(`${params.bulletActiveClass}-prev-prev`);\n $lastDisplayedBullet\n .next()\n .addClass(`${params.bulletActiveClass}-next`)\n .next()\n .addClass(`${params.bulletActiveClass}-next-next`);\n }\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset =\n (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 -\n midIndex * swiper.pagination.bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n if (params.type === 'fraction') {\n $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));\n $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n $el\n .find(`.${params.progressbarFillClass}`)\n .transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`)\n .transition(swiper.params.speed);\n }\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n swiper.emit('paginationRender', $el[0]);\n } else {\n swiper.emit('paginationUpdate', $el[0]);\n }\n $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](\n params.lockClass,\n );\n },\n render() {\n // Render Container\n const swiper = this;\n const params = swiper.params.pagination;\n if (\n !params.el ||\n !swiper.pagination.el ||\n !swiper.pagination.$el ||\n swiper.pagination.$el.length === 0\n )\n return;\n const slidesLength =\n swiper.virtual && swiper.params.virtual.enabled\n ? swiper.virtual.slides.length\n : swiper.slides.length;\n\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop\n ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup)\n : swiper.snapGrid.length;\n if (swiper.params.freeMode && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n }\n }\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(`.${params.bulletClass.replace(/ /g, '.')}`);\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML =\n `<span class=\"${params.currentClass}\"></span>` +\n ' / ' +\n `<span class=\"${params.totalClass}\"></span>`;\n }\n $el.html(paginationHTML);\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n }\n $el.html(paginationHTML);\n }\n if (params.type !== 'custom') {\n swiper.emit('paginationRender', swiper.pagination.$el[0]);\n }\n },\n init() {\n const swiper = this;\n const params = swiper.params.pagination;\n if (!params.el) return;\n\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el);\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n swiper.pagination.dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', `.${params.bulletClass.replace(/ /g, '.')}`, function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n extend(swiper.pagination, {\n $el,\n el: $el[0],\n });\n },\n destroy() {\n const swiper = this;\n const params = swiper.params.pagination;\n if (\n !params.el ||\n !swiper.pagination.el ||\n !swiper.pagination.$el ||\n swiper.pagination.$el.length === 0\n )\n return;\n const $el = swiper.pagination.$el;\n\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n if (params.clickable) {\n $el.off('click', `.${params.bulletClass.replace(/ /g, '.')}`);\n }\n },\n};\n\nexport default {\n name: 'pagination',\n params: {\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: (number) => number,\n formatFractionTotal: (number) => number,\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n modifierClass: 'swiper-pagination-', // NEW\n currentClass: 'swiper-pagination-current',\n totalClass: 'swiper-pagination-total',\n hiddenClass: 'swiper-pagination-hidden',\n progressbarFillClass: 'swiper-pagination-progressbar-fill',\n progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n clickableClass: 'swiper-pagination-clickable', // NEW\n lockClass: 'swiper-pagination-lock',\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n pagination: {\n dynamicBulletIndex: 0,\n ...Pagination,\n },\n });\n },\n on: {\n init(swiper) {\n swiper.pagination.init();\n swiper.pagination.render();\n swiper.pagination.update();\n },\n activeIndexChange(swiper) {\n if (swiper.params.loop) {\n swiper.pagination.update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n swiper.pagination.update();\n }\n },\n snapIndexChange(swiper) {\n if (!swiper.params.loop) {\n swiper.pagination.update();\n }\n },\n slidesLengthChange(swiper) {\n if (swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n snapGridLengthChange(swiper) {\n if (!swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n destroy(swiper) {\n swiper.pagination.destroy();\n },\n click(swiper, e) {\n if (\n swiper.params.pagination.el &&\n swiper.params.pagination.hideOnClick &&\n swiper.pagination.$el.length > 0 &&\n !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n ) {\n const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n swiper.emit('paginationShow');\n } else {\n swiper.emit('paginationHide');\n }\n swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n },\n },\n};\n","import { getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { extend, nextTick, bindModuleMethods } from '../../utils/utils';\n\nconst Scrollbar = {\n setTranslate() {\n const swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const { scrollbar, rtlTranslate: rtl, progress } = swiper;\n const { dragSize, trackSize, $dragEl, $el } = scrollbar;\n const params = swiper.params.scrollbar;\n\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(swiper.scrollbar.timeout);\n $el[0].style.opacity = 1;\n swiper.scrollbar.timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n },\n setTransition(duration) {\n const swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n },\n updateSize() {\n const swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n\n const { scrollbar } = swiper;\n const { $dragEl, $el } = scrollbar;\n\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n const divider = swiper.size / swiper.virtualSize;\n const moveDivider = divider * (trackSize / swiper.size);\n let dragSize;\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n extend(scrollbar, {\n trackSize,\n divider,\n moveDivider,\n dragSize,\n });\n scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](\n swiper.params.scrollbar.lockClass,\n );\n },\n getPointerPosition(e) {\n const swiper = this;\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove'\n ? e.targetTouches[0].clientX\n : e.clientX;\n }\n return e.type === 'touchstart' || e.type === 'touchmove'\n ? e.targetTouches[0].clientY\n : e.clientY;\n },\n setDragPosition(e) {\n const swiper = this;\n const { scrollbar, rtlTranslate: rtl } = swiper;\n const { $el, dragSize, trackSize, dragStartPos } = scrollbar;\n\n let positionRatio;\n positionRatio =\n (scrollbar.getPointerPosition(e) -\n $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] -\n (dragStartPos !== null ? dragStartPos : dragSize / 2)) /\n (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position =\n swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n },\n onDragStart(e) {\n const swiper = this;\n const params = swiper.params.scrollbar;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n swiper.scrollbar.isTouched = true;\n swiper.scrollbar.dragStartPos =\n e.target === $dragEl[0] || e.target === $dragEl\n ? scrollbar.getPointerPosition(e) -\n e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top']\n : null;\n e.preventDefault();\n e.stopPropagation();\n\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n scrollbar.setDragPosition(e);\n\n clearTimeout(swiper.scrollbar.dragTimeout);\n\n $el.transition(0);\n if (params.hide) {\n $el.css('opacity', 1);\n }\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n swiper.emit('scrollbarDragStart', e);\n },\n onDragMove(e) {\n const swiper = this;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n\n if (!swiper.scrollbar.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n scrollbar.setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n swiper.emit('scrollbarDragMove', e);\n },\n onDragEnd(e) {\n const swiper = this;\n\n const params = swiper.params.scrollbar;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el } = scrollbar;\n\n if (!swiper.scrollbar.isTouched) return;\n swiper.scrollbar.isTouched = false;\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n if (params.hide) {\n clearTimeout(swiper.scrollbar.dragTimeout);\n swiper.scrollbar.dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n swiper.emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n },\n enableDraggable() {\n const swiper = this;\n if (!swiper.params.scrollbar.el) return;\n const document = getDocument();\n const { scrollbar, touchEventsTouch, touchEventsDesktop, params, support } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener =\n support.passiveListener && params.passiveListeners\n ? { passive: false, capture: false }\n : false;\n const passiveListener =\n support.passiveListener && params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n if (!target) return;\n if (!support.touch) {\n target.addEventListener(\n touchEventsDesktop.start,\n swiper.scrollbar.onDragStart,\n activeListener,\n );\n document.addEventListener(\n touchEventsDesktop.move,\n swiper.scrollbar.onDragMove,\n activeListener,\n );\n document.addEventListener(\n touchEventsDesktop.end,\n swiper.scrollbar.onDragEnd,\n passiveListener,\n );\n } else {\n target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n },\n disableDraggable() {\n const swiper = this;\n if (!swiper.params.scrollbar.el) return;\n const document = getDocument();\n const { scrollbar, touchEventsTouch, touchEventsDesktop, params, support } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener =\n support.passiveListener && params.passiveListeners\n ? { passive: false, capture: false }\n : false;\n const passiveListener =\n support.passiveListener && params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n if (!target) return;\n if (!support.touch) {\n target.removeEventListener(\n touchEventsDesktop.start,\n swiper.scrollbar.onDragStart,\n activeListener,\n );\n document.removeEventListener(\n touchEventsDesktop.move,\n swiper.scrollbar.onDragMove,\n activeListener,\n );\n document.removeEventListener(\n touchEventsDesktop.end,\n swiper.scrollbar.onDragEnd,\n passiveListener,\n );\n } else {\n target.removeEventListener(\n touchEventsTouch.start,\n swiper.scrollbar.onDragStart,\n activeListener,\n );\n target.removeEventListener(\n touchEventsTouch.move,\n swiper.scrollbar.onDragMove,\n activeListener,\n );\n target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n },\n init() {\n const swiper = this;\n if (!swiper.params.scrollbar.el) return;\n const { scrollbar, $el: $swiperEl } = swiper;\n const params = swiper.params.scrollbar;\n\n let $el = $(params.el);\n if (\n swiper.params.uniqueNavElements &&\n typeof params.el === 'string' &&\n $el.length > 1 &&\n $swiperEl.find(params.el).length === 1\n ) {\n $el = $swiperEl.find(params.el);\n }\n\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n if ($dragEl.length === 0) {\n $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n $el.append($dragEl);\n }\n\n extend(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0],\n });\n\n if (params.draggable) {\n scrollbar.enableDraggable();\n }\n },\n destroy() {\n const swiper = this;\n swiper.scrollbar.disableDraggable();\n },\n};\n\nexport default {\n name: 'scrollbar',\n params: {\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n scrollbar: {\n isTouched: false,\n timeout: null,\n dragTimeout: null,\n ...Scrollbar,\n },\n });\n },\n on: {\n init(swiper) {\n swiper.scrollbar.init();\n swiper.scrollbar.updateSize();\n swiper.scrollbar.setTranslate();\n },\n update(swiper) {\n swiper.scrollbar.updateSize();\n },\n resize(swiper) {\n swiper.scrollbar.updateSize();\n },\n observerUpdate(swiper) {\n swiper.scrollbar.updateSize();\n },\n setTranslate(swiper) {\n swiper.scrollbar.setTranslate();\n },\n setTransition(swiper, duration) {\n swiper.scrollbar.setTransition(duration);\n },\n destroy(swiper) {\n swiper.scrollbar.destroy();\n },\n },\n};\n","import $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\n\nconst Parallax = {\n setTransform(el, progress) {\n const swiper = this;\n const { rtl } = swiper;\n\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n },\n setTranslate() {\n const swiper = this;\n const { $el, slides, progress, snapGrid } = swiper;\n $el\n .children(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((el) => {\n swiper.parallax.setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl)\n .find(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((el) => {\n swiper.parallax.setTransform(el, slideProgress);\n });\n });\n },\n setTransition(duration = this.params.speed) {\n const swiper = this;\n const { $el } = swiper;\n $el\n .find(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((parallaxEl) => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration =\n parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n },\n};\n\nexport default {\n name: 'parallax',\n params: {\n parallax: {\n enabled: false,\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n parallax: {\n ...Parallax,\n },\n });\n },\n on: {\n beforeInit(swiper) {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n },\n init(swiper) {\n if (!swiper.params.parallax.enabled) return;\n swiper.parallax.setTranslate();\n },\n setTranslate(swiper) {\n if (!swiper.params.parallax.enabled) return;\n swiper.parallax.setTranslate();\n },\n setTransition(swiper, duration) {\n if (!swiper.params.parallax.enabled) return;\n swiper.parallax.setTransition(duration);\n },\n },\n};\n","import { getWindow } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { bindModuleMethods, getTranslate } from '../../utils/utils';\n\nconst Zoom = {\n // Calc Scale From Multi-touches\n getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n },\n // Events\n onGestureStart(e) {\n const swiper = this;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const { gesture } = zoom;\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n if (!support.gestures) {\n if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n return;\n }\n zoom.fakeGestureTouched = true;\n gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n }\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n swiper.zoom.isScaling = true;\n },\n onGestureChange(e) {\n const swiper = this;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const gesture = zoom.gesture;\n if (!support.gestures) {\n if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n return;\n }\n zoom.fakeGestureMoved = true;\n gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') zoom.onGestureStart(e);\n return;\n }\n if (support.gestures) {\n zoom.scale = e.scale * zoom.currentScale;\n } else {\n zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n }\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n },\n onGestureEnd(e) {\n const swiper = this;\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const { gesture } = zoom;\n if (!support.gestures) {\n if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n return;\n }\n if (\n e.type !== 'touchend' ||\n (e.type === 'touchend' && e.changedTouches.length < 2 && !device.android)\n ) {\n return;\n }\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl\n .transition(swiper.params.speed)\n .transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n zoom.currentScale = zoom.scale;\n zoom.isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n },\n onTouchStart(e) {\n const swiper = this;\n const device = swiper.device;\n const zoom = swiper.zoom;\n const { gesture, image } = zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n },\n onTouchMove(e) {\n const swiper = this;\n const zoom = swiper.zoom;\n const { gesture, image, velocity } = zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n if (swiper.rtl) {\n image.startX = -image.startX;\n image.startY = -image.startY;\n }\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !zoom.isScaling) {\n if (\n swiper.isHorizontal() &&\n ((Math.floor(image.minX) === Math.floor(image.startX) &&\n image.touchesCurrent.x < image.touchesStart.x) ||\n (Math.floor(image.maxX) === Math.floor(image.startX) &&\n image.touchesCurrent.x > image.touchesStart.x))\n ) {\n image.isTouched = false;\n return;\n }\n if (\n !swiper.isHorizontal() &&\n ((Math.floor(image.minY) === Math.floor(image.startY) &&\n image.touchesCurrent.y < image.touchesStart.y) ||\n (Math.floor(image.maxY) === Math.floor(image.startY) &&\n image.touchesCurrent.y > image.touchesStart.y))\n ) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x =\n (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y =\n (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n\n gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n },\n onTouchEnd() {\n const swiper = this;\n const zoom = swiper.zoom;\n const { gesture, image, velocity } = zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0)\n momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0)\n momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n gesture.$imageWrapEl\n .transition(momentumDuration)\n .transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n },\n onTransitionEnd() {\n const swiper = this;\n const zoom = swiper.zoom;\n const { gesture } = zoom;\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n },\n // Toggle Zoom\n toggle(e) {\n const swiper = this;\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoom.out();\n } else {\n // Zoom In\n zoom.in(e);\n }\n },\n in(e) {\n const swiper = this;\n const window = getWindow();\n\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n const { gesture, image } = zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n gesture.$imageWrapEl\n .transition(300)\n .transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n },\n out() {\n const swiper = this;\n\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n const { gesture } = zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n },\n\n toggleGestures(method) {\n const swiper = this;\n const zoom = swiper.zoom;\n const { slideSelector: selector, passiveListener: passive } = zoom;\n swiper.$wrapperEl[method]('gesturestart', selector, zoom.onGestureStart, passive);\n swiper.$wrapperEl[method]('gesturechange', selector, zoom.onGestureChange, passive);\n swiper.$wrapperEl[method]('gestureend', selector, zoom.onGestureEnd, passive);\n },\n enableGestures() {\n if (this.zoom.gesturesEnabled) return;\n this.zoom.gesturesEnabled = true;\n this.zoom.toggleGestures('on');\n },\n disableGestures() {\n if (!this.zoom.gesturesEnabled) return;\n this.zoom.gesturesEnabled = false;\n this.zoom.toggleGestures('off');\n },\n // Attach/Detach Events\n enable() {\n const swiper = this;\n const support = swiper.support;\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n\n const passiveListener =\n swiper.touchEvents.start === 'touchstart' &&\n support.passiveListener &&\n swiper.params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n const activeListenerWithCapture = support.passiveListener\n ? { passive: false, capture: true }\n : true;\n\n const slideSelector = `.${swiper.params.slideClass}`;\n\n swiper.zoom.passiveListener = passiveListener;\n swiper.zoom.slideSelector = slideSelector;\n\n // Scale image\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(\n swiper.touchEvents.start,\n slideSelector,\n zoom.onGestureStart,\n passiveListener,\n );\n swiper.$wrapperEl.on(\n swiper.touchEvents.move,\n slideSelector,\n zoom.onGestureChange,\n activeListenerWithCapture,\n );\n swiper.$wrapperEl.on(\n swiper.touchEvents.end,\n slideSelector,\n zoom.onGestureEnd,\n passiveListener,\n );\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(\n swiper.touchEvents.cancel,\n slideSelector,\n zoom.onGestureEnd,\n passiveListener,\n );\n }\n }\n\n // Move image\n swiper.$wrapperEl.on(\n swiper.touchEvents.move,\n `.${swiper.params.zoom.containerClass}`,\n zoom.onTouchMove,\n activeListenerWithCapture,\n );\n },\n disable() {\n const swiper = this;\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n\n swiper.zoom.enabled = false;\n\n const passiveListener =\n swiper.touchEvents.start === 'touchstart' &&\n support.passiveListener &&\n swiper.params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n const activeListenerWithCapture = support.passiveListener\n ? { passive: false, capture: true }\n : true;\n\n const slideSelector = `.${swiper.params.slideClass}`;\n\n // Scale image\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(\n swiper.touchEvents.start,\n slideSelector,\n zoom.onGestureStart,\n passiveListener,\n );\n swiper.$wrapperEl.off(\n swiper.touchEvents.move,\n slideSelector,\n zoom.onGestureChange,\n activeListenerWithCapture,\n );\n swiper.$wrapperEl.off(\n swiper.touchEvents.end,\n slideSelector,\n zoom.onGestureEnd,\n passiveListener,\n );\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(\n swiper.touchEvents.cancel,\n slideSelector,\n zoom.onGestureEnd,\n passiveListener,\n );\n }\n }\n\n // Move image\n swiper.$wrapperEl.off(\n swiper.touchEvents.move,\n `.${swiper.params.zoom.containerClass}`,\n zoom.onTouchMove,\n activeListenerWithCapture,\n );\n },\n};\n\nexport default {\n name: 'zoom',\n params: {\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed',\n },\n },\n create() {\n const swiper = this;\n\n bindModuleMethods(swiper, {\n zoom: {\n enabled: false,\n scale: 1,\n currentScale: 1,\n isScaling: false,\n gesture: {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3,\n },\n image: {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {},\n },\n velocity: {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined,\n },\n ...Zoom,\n },\n });\n\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = swiper.zoom.gesture.$imageEl\n ? swiper.zoom.gesture.$imageEl[0]\n : undefined;\n const slideEl = swiper.zoom.gesture.$slideEl\n ? swiper.zoom.gesture.$slideEl[0]\n : undefined;\n swiper.emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n },\n });\n },\n on: {\n init(swiper) {\n if (swiper.params.zoom.enabled) {\n swiper.zoom.enable();\n }\n },\n destroy(swiper) {\n swiper.zoom.disable();\n },\n touchStart(swiper, e) {\n if (!swiper.zoom.enabled) return;\n swiper.zoom.onTouchStart(e);\n },\n touchEnd(swiper, e) {\n if (!swiper.zoom.enabled) return;\n swiper.zoom.onTouchEnd(e);\n },\n doubleTap(swiper, e) {\n if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n swiper.zoom.toggle(e);\n }\n },\n transitionEnd(swiper) {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n swiper.zoom.onTransitionEnd();\n }\n },\n slideChange(swiper) {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n swiper.zoom.onTransitionEnd();\n }\n },\n },\n};\n","import { getWindow } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\n\nconst Lazy = {\n loadInSlide(index, loadInDuplicate = true) {\n const swiper = this;\n const params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n const $slideEl = isVirtual\n ? swiper.$wrapperEl.children(\n `.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`,\n )\n : swiper.slides.eq(index);\n\n const $images = $slideEl.find(\n `.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`,\n );\n if (\n $slideEl.hasClass(params.elementClass) &&\n !$slideEl.hasClass(params.loadedClass) &&\n !$slideEl.hasClass(params.loadingClass)\n ) {\n $images.push($slideEl[0]);\n }\n if ($images.length === 0) return;\n\n $images.each((imageEl) => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n const $pictureEl = $imageEl.parent('picture');\n\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n if (\n typeof swiper === 'undefined' ||\n swiper === null ||\n !swiper ||\n (swiper && !swiper.params) ||\n swiper.destroyed\n )\n return;\n if (background) {\n $imageEl.css('background-image', `url(\"${background}\")`);\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n if ($pictureEl.length) {\n $pictureEl.children('source').each((sourceEl) => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\n }\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find(`.${params.preloaderClass}`).remove();\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(\n `[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`,\n );\n swiper.lazy.loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(\n `.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`,\n );\n swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n }\n }\n swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n\n swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n },\n load() {\n const swiper = this;\n const { $wrapperEl, params: swiperParams, slides, activeIndex } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n\n let slidesPerView = swiperParams.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if (\n $wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`)\n .length\n ) {\n return true;\n }\n } else if (slides[index]) return true;\n return false;\n }\n\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n return $(slideEl).index();\n }\n\n if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n if (swiper.params.watchSlidesVisibility) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((slideEl) => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n swiper.lazy.loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) swiper.lazy.loadInSlide(i);\n }\n } else {\n swiper.lazy.loadInSlide(activeIndex);\n }\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n const amount = params.loadPrevNextAmount;\n const spv = slidesPerView;\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n if (slideExist(i)) swiper.lazy.loadInSlide(i);\n }\n // Prev Slides\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) swiper.lazy.loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n }\n }\n },\n checkInViewOnLoad() {\n const window = getWindow();\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const $scrollElement = swiper.params.lazy.scrollingElement\n ? $(swiper.params.lazy.scrollingElement)\n : $(window);\n const isWindow = $scrollElement[0] === window;\n const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n const swiperOffset = swiper.$el.offset();\n const { rtlTranslate: rtl } = swiper;\n\n let inView = false;\n\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + swiper.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + swiper.height],\n [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],\n ];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (\n point[0] >= 0 &&\n point[0] <= scrollElementWidth &&\n point[1] >= 0 &&\n point[1] <= scrollElementHeight\n ) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n\n if (inView) {\n swiper.lazy.load();\n $scrollElement.off('scroll', swiper.lazy.checkInViewOnLoad);\n } else if (!swiper.lazy.scrollHandlerAttached) {\n swiper.lazy.scrollHandlerAttached = true;\n $scrollElement.on('scroll', swiper.lazy.checkInViewOnLoad);\n }\n },\n};\n\nexport default {\n name: 'lazy',\n params: {\n lazy: {\n checkInView: false,\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n scrollingElement: '',\n\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader',\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n lazy: {\n initialImageLoaded: false,\n ...Lazy,\n },\n });\n },\n on: {\n beforeInit(swiper) {\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n },\n init(swiper) {\n if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n if (swiper.params.lazy.checkInView) {\n swiper.lazy.checkInViewOnLoad();\n } else {\n swiper.lazy.load();\n }\n }\n },\n scroll(swiper) {\n if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n swiper.lazy.load();\n }\n },\n resize(swiper) {\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n scrollbarDragMove(swiper) {\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n transitionStart(swiper) {\n if (swiper.params.lazy.enabled) {\n if (\n swiper.params.lazy.loadOnTransitionStart ||\n (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)\n ) {\n swiper.lazy.load();\n }\n }\n },\n transitionEnd(swiper) {\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n swiper.lazy.load();\n }\n },\n slideChange(swiper) {\n if (swiper.params.lazy.enabled && swiper.params.cssMode) {\n swiper.lazy.load();\n }\n },\n },\n};\n","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { nextTick, bindModuleMethods } from '../../utils/utils';\n\nconst Controller = {\n LinearSpline: function LinearSpline(x, y) {\n const binarySearch = (function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = (maxIndex + minIndex) >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n })();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (\n ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]\n );\n };\n return this;\n },\n // xxx: for now i will just save one spline function to to\n getInterpolateFunction(c) {\n const swiper = this;\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop\n ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n },\n setTranslate(setTranslate, byController) {\n const swiper = this;\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n swiper.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier =\n (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n },\n setTransition(duration, byController) {\n const swiper = this;\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n },\n};\nexport default {\n name: 'controller',\n params: {\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide', // or 'container'\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n controller: {\n control: swiper.params.controller.control,\n ...Controller,\n },\n });\n },\n on: {\n update(swiper) {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n resize(swiper) {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n observerUpdate(swiper) {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n setTranslate(swiper, translate, byController) {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n },\n setTransition(swiper, duration, byController) {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n },\n },\n};\n","import $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\n\nconst A11y = {\n getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n },\n makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n return $el;\n },\n addElRole($el, role) {\n $el.attr('role', role);\n return $el;\n },\n addElRoleDescription($el, description) {\n $el.attr('aria-role-description', description);\n return $el;\n },\n addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n return $el;\n },\n addElLabel($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n addElId($el, id) {\n $el.attr('id', id);\n return $el;\n },\n addElLive($el, live) {\n $el.attr('aria-live', live);\n return $el;\n },\n disableEl($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n enableEl($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n onEnterKey(e) {\n const swiper = this;\n const params = swiper.params.a11y;\n if (e.keyCode !== 13) return;\n const $targetEl = $(e.target);\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n swiper.a11y.notify(params.lastSlideMessage);\n } else {\n swiper.a11y.notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n swiper.a11y.notify(params.firstSlideMessage);\n } else {\n swiper.a11y.notify(params.prevSlideMessage);\n }\n }\n if (\n swiper.pagination &&\n $targetEl.is(`.${swiper.params.pagination.bulletClass.replace(/ /g, '.')}`)\n ) {\n $targetEl[0].click();\n }\n },\n notify(message) {\n const swiper = this;\n const notification = swiper.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n updateNavigation() {\n const swiper = this;\n\n if (swiper.params.loop || !swiper.navigation) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n swiper.a11y.disableEl($prevEl);\n swiper.a11y.makeElNotFocusable($prevEl);\n } else {\n swiper.a11y.enableEl($prevEl);\n swiper.a11y.makeElFocusable($prevEl);\n }\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n swiper.a11y.disableEl($nextEl);\n swiper.a11y.makeElNotFocusable($nextEl);\n } else {\n swiper.a11y.enableEl($nextEl);\n swiper.a11y.makeElFocusable($nextEl);\n }\n }\n },\n updatePagination() {\n const swiper = this;\n const params = swiper.params.a11y;\n if (\n swiper.pagination &&\n swiper.params.pagination.clickable &&\n swiper.pagination.bullets &&\n swiper.pagination.bullets.length\n ) {\n swiper.pagination.bullets.each((bulletEl) => {\n const $bulletEl = $(bulletEl);\n swiper.a11y.makeElFocusable($bulletEl);\n if (!swiper.params.pagination.renderBullet) {\n swiper.a11y.addElRole($bulletEl, 'button');\n swiper.a11y.addElLabel(\n $bulletEl,\n params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1),\n );\n }\n });\n }\n },\n init() {\n const swiper = this;\n const params = swiper.params.a11y;\n\n swiper.$el.append(swiper.a11y.liveRegion);\n\n // Container\n const $containerEl = swiper.$el;\n if (params.containerRoleDescriptionMessage) {\n swiper.a11y.addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n if (params.containerMessage) {\n swiper.a11y.addElLabel($containerEl, params.containerMessage);\n }\n\n // Wrapper\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = $wrapperEl.attr('id') || `swiper-wrapper-${swiper.a11y.getRandomNumber(16)}`;\n let live;\n swiper.a11y.addElId($wrapperEl, wrapperId);\n\n if (swiper.params.autoplay && swiper.params.autoplay.enabled) {\n live = 'off';\n } else {\n live = 'polite';\n }\n swiper.a11y.addElLive($wrapperEl, live);\n\n // Slide\n if (params.itemRoleDescriptionMessage) {\n swiper.a11y.addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n swiper.a11y.addElRole($(swiper.slides), 'group');\n swiper.slides.each((slideEl) => {\n const $slideEl = $(slideEl);\n swiper.a11y.addElLabel($slideEl, `${$slideEl.index() + 1} / ${swiper.slides.length}`);\n });\n\n // Navigation\n let $nextEl;\n let $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n swiper.a11y.makeElFocusable($nextEl);\n if ($nextEl[0].tagName !== 'BUTTON') {\n swiper.a11y.addElRole($nextEl, 'button');\n $nextEl.on('keydown', swiper.a11y.onEnterKey);\n }\n swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n swiper.a11y.addElControls($nextEl, wrapperId);\n }\n if ($prevEl && $prevEl.length) {\n swiper.a11y.makeElFocusable($prevEl);\n if ($prevEl[0].tagName !== 'BUTTON') {\n swiper.a11y.addElRole($prevEl, 'button');\n $prevEl.on('keydown', swiper.a11y.onEnterKey);\n }\n swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n swiper.a11y.addElControls($prevEl, wrapperId);\n }\n\n // Pagination\n if (\n swiper.pagination &&\n swiper.params.pagination.clickable &&\n swiper.pagination.bullets &&\n swiper.pagination.bullets.length\n ) {\n swiper.pagination.$el.on(\n 'keydown',\n `.${swiper.params.pagination.bulletClass.replace(/ /g, '.')}`,\n swiper.a11y.onEnterKey,\n );\n }\n },\n destroy() {\n const swiper = this;\n if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0)\n swiper.a11y.liveRegion.remove();\n\n let $nextEl;\n let $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n $nextEl.off('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n $prevEl.off('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (\n swiper.pagination &&\n swiper.params.pagination.clickable &&\n swiper.pagination.bullets &&\n swiper.pagination.bullets.length\n ) {\n swiper.pagination.$el.off(\n 'keydown',\n `.${swiper.params.pagination.bulletClass.replace(/ /g, '.')}`,\n swiper.a11y.onEnterKey,\n );\n }\n },\n};\nexport default {\n name: 'a11y',\n params: {\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n a11y: {\n ...A11y,\n liveRegion: $(\n `<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`,\n ),\n },\n });\n },\n on: {\n afterInit(swiper) {\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.init();\n swiper.a11y.updateNavigation();\n },\n toEdge(swiper) {\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updateNavigation();\n },\n fromEdge(swiper) {\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updateNavigation();\n },\n paginationUpdate(swiper) {\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.updatePagination();\n },\n destroy(swiper) {\n if (!swiper.params.a11y.enabled) return;\n swiper.a11y.destroy();\n },\n },\n};\n","import { getWindow } from 'ssr-window';\nimport { bindModuleMethods } from '../../utils/utils';\n\nconst History = {\n init() {\n const swiper = this;\n const window = getWindow();\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n const history = swiper.history;\n history.initialized = true;\n history.paths = History.getPathValues(swiper.params.url);\n if (!history.paths.key && !history.paths.value) return;\n history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n destroy() {\n const swiper = this;\n const window = getWindow();\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n setHistoryPopState() {\n const swiper = this;\n swiper.history.paths = History.getPathValues(swiper.params.url);\n swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n },\n getPathValues(urlOverride) {\n const window = getWindow();\n let location;\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n const pathArray = location.pathname\n .slice(1)\n .split('/')\n .filter((part) => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return { key, value };\n },\n setHistory(key, index) {\n const swiper = this;\n const window = getWindow();\n if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n let location;\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n const slide = swiper.slides.eq(index);\n let value = History.slugify(slide.attr('data-history'));\n if (!location.pathname.includes(key)) {\n value = `${key}/${value}`;\n }\n const currentState = window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n window.history.replaceState({ value }, null, value);\n } else {\n window.history.pushState({ value }, null, value);\n }\n },\n slugify(text) {\n return text\n .toString()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w-]+/g, '')\n .replace(/--+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n },\n scrollToSlide(speed, value, runCallbacks) {\n const swiper = this;\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHistory = History.slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n },\n};\n\nexport default {\n name: 'history',\n params: {\n history: {\n enabled: false,\n replaceState: false,\n key: 'slides',\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n history: {\n ...History,\n },\n });\n },\n on: {\n init(swiper) {\n if (swiper.params.history.enabled) {\n swiper.history.init();\n }\n },\n destroy(swiper) {\n if (swiper.params.history.enabled) {\n swiper.history.destroy();\n }\n },\n transitionEnd(swiper) {\n if (swiper.history.initialized) {\n swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n },\n slideChange(swiper) {\n if (swiper.history.initialized && swiper.params.cssMode) {\n swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n },\n },\n};\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\n\nconst HashNavigation = {\n onHashCange() {\n const swiper = this;\n const document = getDocument();\n swiper.emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.$wrapperEl\n .children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`)\n .index();\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n },\n setHash() {\n const swiper = this;\n const window = getWindow();\n const document = getDocument();\n if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;\n if (\n swiper.params.hashNavigation.replaceState &&\n window.history &&\n window.history.replaceState\n ) {\n window.history.replaceState(\n null,\n null,\n `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '',\n );\n swiper.emit('hashSet');\n } else {\n const slide = swiper.slides.eq(swiper.activeIndex);\n const hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n swiper.emit('hashSet');\n }\n },\n init() {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n if (\n !swiper.params.hashNavigation.enabled ||\n (swiper.params.history && swiper.params.history.enabled)\n )\n return;\n swiper.hashNavigation.initialized = true;\n const hash = document.location.hash.replace('#', '');\n if (hash) {\n const speed = 0;\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', swiper.hashNavigation.onHashCange);\n }\n },\n destroy() {\n const swiper = this;\n const window = getWindow();\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', swiper.hashNavigation.onHashCange);\n }\n },\n};\nexport default {\n name: 'hash-navigation',\n params: {\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n hashNavigation: {\n initialized: false,\n ...HashNavigation,\n },\n });\n },\n on: {\n init(swiper) {\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.init();\n }\n },\n destroy(swiper) {\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.destroy();\n }\n },\n transitionEnd(swiper) {\n if (swiper.hashNavigation.initialized) {\n swiper.hashNavigation.setHash();\n }\n },\n slideChange(swiper) {\n if (swiper.hashNavigation.initialized && swiper.params.cssMode) {\n swiper.hashNavigation.setHash();\n }\n },\n },\n};\n","/* eslint no-underscore-dangle: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick, bindModuleMethods } from '../../utils/utils';\n\nconst Autoplay = {\n run() {\n const swiper = this;\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = nextTick(() => {\n let autoplayResult;\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(\n swiper.slides.length - 1,\n swiper.params.speed,\n true,\n true,\n );\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();\n else if (autoplayResult === false) {\n swiper.autoplay.run();\n }\n }, delay);\n },\n start() {\n const swiper = this;\n if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n swiper.emit('autoplayStart');\n swiper.autoplay.run();\n return true;\n },\n stop() {\n const swiper = this;\n if (!swiper.autoplay.running) return false;\n if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n if (swiper.autoplay.timeout) {\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = undefined;\n }\n swiper.autoplay.running = false;\n swiper.emit('autoplayStop');\n return true;\n },\n pause(speed) {\n const swiper = this;\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.paused = true;\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n swiper.autoplay.run();\n } else {\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n }\n },\n onVisibilityChange() {\n const swiper = this;\n const document = getDocument();\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n swiper.autoplay.pause();\n }\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n swiper.autoplay.run();\n swiper.autoplay.paused = false;\n }\n },\n onTransitionEnd(e) {\n const swiper = this;\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener(\n 'webkitTransitionEnd',\n swiper.autoplay.onTransitionEnd,\n );\n swiper.autoplay.paused = false;\n if (!swiper.autoplay.running) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.run();\n }\n },\n};\n\nexport default {\n name: 'autoplay',\n params: {\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n autoplay: {\n ...Autoplay,\n running: false,\n paused: false,\n },\n });\n },\n on: {\n init(swiper) {\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n const document = getDocument();\n document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n }\n },\n beforeTransitionStart(swiper, speed, internal) {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n swiper.autoplay.stop();\n }\n }\n },\n sliderFirstMove(swiper) {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.pause();\n }\n }\n },\n touchEnd(swiper) {\n if (\n swiper.params.cssMode &&\n swiper.autoplay.paused &&\n !swiper.params.autoplay.disableOnInteraction\n ) {\n swiper.autoplay.run();\n }\n },\n destroy(swiper) {\n if (swiper.autoplay.running) {\n swiper.autoplay.stop();\n }\n const document = getDocument();\n document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n },\n },\n};\n","import { extend, bindModuleMethods } from '../../utils/utils';\n\nconst Fade = {\n setTranslate() {\n const swiper = this;\n const { slides } = swiper;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset = $slideEl[0].swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n const slideOpacity = swiper.params.fadeEffect.crossFade\n ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n $slideEl\n .css({\n opacity: slideOpacity,\n })\n .transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n },\n setTransition(duration) {\n const swiper = this;\n const { slides, $wrapperEl } = swiper;\n slides.transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n slides.transitionEnd(() => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n },\n};\n\nexport default {\n name: 'effect-fade',\n params: {\n fadeEffect: {\n crossFade: false,\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n fadeEffect: {\n ...Fade,\n },\n });\n },\n on: {\n beforeInit(swiper) {\n if (swiper.params.effect !== 'fade') return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);\n const overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n extend(swiper.params, overwriteParams);\n extend(swiper.originalParams, overwriteParams);\n },\n setTranslate(swiper) {\n if (swiper.params.effect !== 'fade') return;\n swiper.fadeEffect.setTranslate();\n },\n setTransition(swiper, duration) {\n if (swiper.params.effect !== 'fade') return;\n swiper.fadeEffect.setTransition(duration);\n },\n },\n};\n","import $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\n\nconst Cube = {\n setTranslate() {\n const swiper = this;\n const {\n $el,\n $wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser,\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let $cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $wrapperEl.append($cubeShadowEl);\n }\n $cubeShadowEl.css({ height: `${swiperWidth}px` });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $el.append($cubeShadowEl);\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${\n isHorizontal ? slideAngle : 0\n }deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n $slideEl.transform(transform);\n if (params.slideShadows) {\n // Set shadows\n let shadowBefore = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $(\n `<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`,\n );\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $(\n `<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`,\n );\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n $wrapperEl.css({\n '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,\n '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,\n 'transform-origin': `50% 50% -${swiperSize / 2}px`,\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform(\n `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${\n -swiperWidth / 2\n }px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`,\n );\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier =\n 1.5 -\n (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2 +\n Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n $cubeShadowEl.transform(\n `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${\n -swiperHeight / 2 / scale2\n }px) rotateX(-90deg)`,\n );\n }\n }\n const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n $wrapperEl.transform(\n `translate3d(0px,0,${zFactor}px) rotateX(${\n swiper.isHorizontal() ? 0 : wrapperRotate\n }deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`,\n );\n },\n setTransition(duration) {\n const swiper = this;\n const { $el, slides } = swiper;\n slides\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n },\n};\n\nexport default {\n name: 'effect-cube',\n params: {\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94,\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n cubeEffect: {\n ...Cube,\n },\n });\n },\n on: {\n beforeInit(swiper) {\n if (swiper.params.effect !== 'cube') return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n const overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true,\n };\n extend(swiper.params, overwriteParams);\n extend(swiper.originalParams, overwriteParams);\n },\n setTranslate(swiper) {\n if (swiper.params.effect !== 'cube') return;\n swiper.cubeEffect.setTranslate();\n },\n setTransition(swiper, duration) {\n if (swiper.params.effect !== 'cube') return;\n swiper.cubeEffect.setTransition(duration);\n },\n },\n};\n","import $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\n\nconst Flip = {\n setTranslate() {\n const swiper = this;\n const { slides, rtlTranslate: rtl } = swiper;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let progress = $slideEl[0].progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n const offset = $slideEl[0].swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = -offset;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (swiper.params.flipEffect.slideShadows) {\n // Set shadows\n let shadowBefore = swiper.isHorizontal()\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal()\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $(\n `<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}\"></div>`,\n );\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $(\n `<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}\"></div>`,\n );\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n $slideEl.transform(\n `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`,\n );\n }\n },\n setTransition(duration) {\n const swiper = this;\n const { slides, activeIndex, $wrapperEl } = swiper;\n slides\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n // eslint-disable-next-line\n slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n },\n};\n\nexport default {\n name: 'effect-flip',\n params: {\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n flipEffect: {\n ...Flip,\n },\n });\n },\n on: {\n beforeInit(swiper) {\n if (swiper.params.effect !== 'flip') return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n const overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n extend(swiper.params, overwriteParams);\n extend(swiper.originalParams, overwriteParams);\n },\n setTranslate(swiper) {\n if (swiper.params.effect !== 'flip') return;\n swiper.flipEffect.setTranslate();\n },\n setTransition(swiper, duration) {\n if (swiper.params.effect !== 'flip') return;\n swiper.flipEffect.setTransition(duration);\n },\n },\n};\n","import $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\n\nconst Coverflow = {\n setTranslate() {\n const swiper = this;\n const { width: swiperWidth, height: swiperHeight, slides, slidesSizesGrid } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth;\n // Each slide offset from center\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const offsetMultiplier =\n ((center - slideOffset - slideSize / 2) / slideSize) * params.modifier;\n\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n let translateZ = -translate * Math.abs(offsetMultiplier);\n\n let stretch = params.stretch;\n // Allow percentage to make a relative stretch for responsive sliders\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = (parseFloat(params.stretch) / 100) * slideSize;\n }\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n\n $slideEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = $(\n `<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`,\n );\n $slideEl.append($shadowBeforeEl);\n }\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = $(\n `<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`,\n );\n $slideEl.append($shadowAfterEl);\n }\n if ($shadowBeforeEl.length)\n $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length)\n $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n },\n setTransition(duration) {\n const swiper = this;\n swiper.slides\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n },\n};\n\nexport default {\n name: 'effect-coverflow',\n params: {\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n coverflowEffect: {\n ...Coverflow,\n },\n });\n },\n on: {\n beforeInit(swiper) {\n if (swiper.params.effect !== 'coverflow') return;\n\n swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n },\n setTranslate(swiper) {\n if (swiper.params.effect !== 'coverflow') return;\n swiper.coverflowEffect.setTranslate();\n },\n setTransition(swiper, duration) {\n if (swiper.params.effect !== 'coverflow') return;\n swiper.coverflowEffect.setTransition(duration);\n },\n },\n};\n","import { extend, isObject, bindModuleMethods } from '../../utils/utils';\nimport $ from '../../utils/dom';\n\nconst Thumbs = {\n init() {\n const swiper = this;\n const { thumbs: thumbsParams } = swiper.params;\n if (swiper.thumbs.initialized) return false;\n swiper.thumbs.initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n extend(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n extend(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n } else if (isObject(thumbsParams.swiper)) {\n swiper.thumbs.swiper = new SwiperClass(\n extend({}, thumbsParams.swiper, {\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n }),\n );\n swiper.thumbs.swiperCreated = true;\n }\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n return true;\n },\n onThumbClick() {\n const swiper = this;\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass))\n return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n const prevIndex = swiper.slides\n .eq(currentIndex)\n .prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`)\n .eq(0)\n .index();\n const nextIndex = swiper.slides\n .eq(currentIndex)\n .nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`)\n .eq(0)\n .index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;\n else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;\n else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;\n else slideToIndex = prevIndex;\n }\n swiper.slideTo(slideToIndex);\n },\n update(initial) {\n const swiper = this;\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n\n const slidesPerView =\n thumbsSwiper.params.slidesPerView === 'auto'\n ? thumbsSwiper.slidesPerViewDynamic()\n : thumbsSwiper.params.slidesPerView;\n\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n if (\n thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .hasClass(thumbsSwiper.params.slideDuplicateClass)\n ) {\n thumbsSwiper.loopFix();\n // eslint-disable-next-line\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n }\n // Find actual thumbs index to slide to\n const prevThumbsIndex = thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`)\n .eq(0)\n .index();\n const nextThumbsIndex = thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`)\n .eq(0)\n .index();\n if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;\n else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;\n else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex)\n newThumbsIndex = currentThumbsIndex;\n else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex)\n newThumbsIndex = nextThumbsIndex;\n else newThumbsIndex = prevThumbsIndex;\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (\n thumbsSwiper.visibleSlidesIndexes &&\n thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0\n ) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n if (\n thumbsSwiper.params.loop ||\n (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)\n ) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl\n .children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`)\n .addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n },\n};\nexport default {\n name: 'thumbs',\n params: {\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-container-thumbs',\n },\n },\n create() {\n const swiper = this;\n bindModuleMethods(swiper, {\n thumbs: {\n swiper: null,\n initialized: false,\n ...Thumbs,\n },\n });\n },\n on: {\n beforeInit(swiper) {\n const { thumbs } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n swiper.thumbs.init();\n swiper.thumbs.update(true);\n },\n slideChange(swiper) {\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n update(swiper) {\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n resize(swiper) {\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n observerUpdate(swiper) {\n if (!swiper.thumbs.swiper) return;\n swiper.thumbs.update();\n },\n setTransition(swiper, duration) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n thumbsSwiper.setTransition(duration);\n },\n beforeDestroy(swiper) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n thumbsSwiper.destroy();\n }\n },\n },\n};\n","// Swiper Class\nimport Swiper from './components/core/core-class';\n\n//IMPORT_COMPONENTS\n\nconst components = [\n //INSTALL_COMPONENTS\n];\n\nSwiper.use(components);\n\n//EXPORT\n"],"names":["isObject","obj","constructor","Object","extend","target","src","keys","forEach","key","length","ssrDocument","body","addEventListener","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","getDocument","doc","document","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","id","getWindow","win","window","_inheritsLoose","subClass","superClass","prototype","create","__proto__","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","_setPrototypeOf","p","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","toString","call","e","_construct","Parent","args","Class","a","push","apply","Constructor","Function","bind","instance","arguments","_isNativeFunction","fn","indexOf","_wrapNativeSuper","_cache","Map","undefined","TypeError","has","get","set","Wrapper","value","enumerable","writable","configurable","_assertThisInitialized","self","ReferenceError","makeReactive","proto","defineProperty","Dom7","_Array","items","_this","concat","Array","arrayFlat","arr","res","el","isArray","arrayFilter","filter","arrayUnique","uniqueArray","i","qsa","selector","context","$","html","trim","toCreate","tempParent","innerHTML","nodeType","addClass","_len","classes","_key","classNames","map","c","split","_el$classList","classList","add","removeClass","_len2","_key2","_el$classList2","remove","toggleClass","_len3","_key3","className","toggle","hasClass","_len4","_key4","contains","attr","attrs","getAttribute","attrName","removeAttr","removeAttribute","transform","transition","duration","transitionDuration","on","_len5","_key5","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","is","_parents","parents","k","handleEvent","events","j","event","dom7Listeners","proxyListener","_event","dom7LiveListeners","off","_len6","_key6","handlers","handler","splice","dom7proxy","trigger","_len9","_key9","evt","detail","bubbles","cancelable","data","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","_styles","styles","offsetWidth","parseFloat","outerHeight","_styles2","offsetHeight","offset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","css","props","_prop","each","index","result","text","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","append","newChild","tempDiv","firstChild","appendChild","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","_next","prev","previousElementSibling","prevAll","prevEls","_prev","parent","parentNode","_parent","closest","find","foundElements","found","removeChild","Methods","methodName","deleteProps","object","nextTick","delay","now","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","webkitTransform","replace","join","MozTransform","OTransform","MsTransform","msTransform","m41","m42","to","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","bindModuleMethods","subKey","support","calcSupport","touch","DocumentTouch","pointerEvents","PointerEvent","maxTouchPoints","observer","checkObserver","passiveListener","checkPassiveListener","supportsPassive","opts","gestures","checkGestures","getSupport","device","calcDevice","platform","ua","ios","android","screenWidth","width","screenHeight","height","match","ipad","ipod","iphone","windows","macos","iPadScreens","os","getDevice","overrides","browser","calcBrowser","isSafari","toLowerCase","isEdge","isWebView","test","getBrowser","name","swiper","resize","resizeHandler","destroyed","initialized","emit","orientationChangeHandler","init","destroy","Observer","attach","options","ObserverFunc","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","observe","attributes","childList","characterData","observers","params","observeParents","containerParents","$el","observeSlideChildren","$wrapperEl","disconnect","useParams","instanceParams","modules","moduleName","module","useModules","modulesParams","moduleParams","moduleEventName","priority","method","eventsListeners","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","slice","eventsArray","updateSize","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","Number","isNaN","size","updateSlides","swiperSize","rtl","rtlTranslate","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","slidesForMargin","slideEl","slideIndex","cssMode","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesNumberEvenToRows","slidesPerColumn","Math","floor","ceil","slidesPerView","slidesPerColumnFill","max","slideSize","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","slidesPerGroup","groupIndex","slideIndexInGroup","columnsInGroup","min","order","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","swiperSlideSize","centeredSlides","abs","slidesPerGroupSkip","newSlidesGrid","effect","setWrapperSize","slidesGridItem","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","visibleSlides","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","translate","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideProgress","minTranslate","autoHeight","slideBefore","slideAfter","isVisible","progress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","realIndex","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","activeSlide","loop","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","getSwiperTranslate","virtualTranslate","currentTranslate","setTranslate","byController","wrapperEl","x","y","z","previousTranslate","newProgress","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","scrollTo","behavior","onTranslateToWrapperTransitionEnd","transitionStart","direction","dir","slideTo","Error","indexAsNumber","isValidNumber","isFinite","initialSlide","normalizedTranslate","normalizedGird","normalizedGridNext","allowSlideNext","allowSlidePrev","t","scrollWidth","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","increment","loopPreventsSlide","loopFix","_clientLeft","slidePrev","normalize","val","normalizedSnapGrid","prevSnap","prevIndex","slideReset","slideToClosest","threshold","currentSnap","nextSnap","slidesPerViewDynamic","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","cloneNode","snapTranslate","diff","slideChanged","loopDestroy","setGrabCursor","moving","simulateTouch","isLocked","cursor","unsetGrabCursor","appendSlide","update","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","type","which","button","isTouched","isMoved","swipingClassHasValue","noSwipingClass","shadowRoot","path","noSwiping","noSwipingSelector","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","preventDefault","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","formElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","PI","touchMoveStopPropagation","nested","stopPropagation","startTranslate","allowMomentumBounce","grabCursor","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","position","time","onTouchEnd","touchEndTime","timeDiff","lastClickTime","currentPos","freeModeMomentum","lastMoveEvent","pop","velocityEvent","distance","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","doBounce","afterBouncePosition","bounceAmount","freeModeMomentumBounceRatio","needsLoopFix","freeModeMomentumBounce","freeModeSticky","moveDistance","currentSlideSize","longSwipesMs","stopIndex","groupSize","ratio","longSwipes","longSwipesRatio","shortSwipes","isNavButtonTarget","navigation","nextEl","prevEl","onResize","breakpoints","setBreakpoint","autoplay","running","paused","run","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","attachEvents","touchEvents","start","move","end","passiveListeners","passive","cancel","updateOnWindowResize","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","param","paramValue","breakpointParams","originalParams","wasMultiRow","isMultiRow","containerModifierClass","emitContainerClasses","directionChanged","needsReLoop","changeDirection","getBreakpoints","points","point","minRatio","substr","innerHeight","sort","b","addClasses","suffixes","suffix","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","isPicture","complete","onload","onerror","preloadImages","imagesToLoad","imagesLoaded","updateOnImagesReady","currentSrc","wasLocked","lastSlidePosition","url","uniqueNavElements","wrapperClass","_emitClasses","prototypes","modular","eventsEmitter","manipulation","images","extendedDefaults","Swiper","swipers","containerEl","newParams","moduleParamName","swiperParams","defaults","passedParams","eventName","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","getSlideClasses","updates","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","mount","mounted","deleteInstance","cleanStyles","extendDefaults","newDefaults","installModule","use","m","prototypeGroup","protoMethod","Resize","Virtual","force","addSlidesBefore","addSlidesAfter","previousFrom","from","previousTo","previousSlidesGrid","renderSlide","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","getSlides","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","cache","$slideEl","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","beforeInit","overwriteParams","Keyboard","handle","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","enable","disable","isEventSupported","isSupported","element","implementation","hasFeature","Mousewheel","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","PIXEL_STEP","LINE_HEIGHT","PAGE_HEIGHT","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","handleMouseEnter","mouseEntered","handleMouseLeave","mousewheel","eventsTarget","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","positions","sensitivity","newEvent","sign","raw","shift","prevEvent","animateSlider","releaseScroll","ignoreWheelEvents","timeout","firstEvent","snapToThreshold","autoplayDisableOnInteraction","stop","thresholdDelta","thresholdTime","getTime","Navigation","$nextEl","$prevEl","disabledClass","lockClass","onPrevClick","onNextClick","hideOnClick","hiddenClass","toEdge","fromEdge","click","isHidden","Pagination","pagination","current","total","paginationType","bullets","firstIndex","lastIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bulletActiveClass","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","currentClass","formatFractionCurrent","totalClass","formatFractionTotal","progressbarDirection","progressbarOpposite","scale","scaleX","scaleY","progressbarFillClass","renderCustom","render","paginationHTML","numberOfBullets","renderBullet","bulletClass","bulletElement","renderFraction","renderProgressbar","clickable","clickableClass","modifierClass","progressbarOppositeClass","number","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","Scrollbar","scrollbar","dragSize","trackSize","$dragEl","newSize","newPos","hide","opacity","divider","moveDivider","display","getPointerPosition","clientX","clientY","setDragPosition","dragStartPos","positionRatio","onDragStart","dragTimeout","onDragMove","onDragEnd","snapOnRelease","enableDraggable","activeListener","disableDraggable","$swiperEl","dragClass","dragEl","draggable","Parallax","setTransform","currentOpacity","currentScale","parallax","parallaxEl","$parallaxEl","parallaxDuration","Zoom","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","zoom","gesture","fakeGestureTouched","fakeGestureMoved","scaleStart","$imageEl","$imageWrapEl","containerClass","maxRatio","isScaling","onGestureChange","scaleMove","onGestureEnd","touchesStart","slideWidth","slideHeight","scaledWidth","scaledHeight","minX","maxX","minY","maxY","touchesCurrent","prevPositionX","prevPositionY","prevTime","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","onTransitionEnd","out","in","zoomedSlideClass","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","toggleGestures","slideSelector","enableGestures","gesturesEnabled","disableGestures","activeListenerWithCapture","touchStart","touchEnd","doubleTap","slideChange","Lazy","loadInSlide","loadInDuplicate","$images","elementClass","loadedClass","loadingClass","background","$pictureEl","sourceEl","$source","preloaderClass","slideOriginalIndex","originalSlide","duplicatedSlide","slideExist","initialImageLoaded","loadPrevNext","loadPrevNextAmount","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","scrollingElement","isWindow","scrollElementWidth","scrollElementHeight","scrollHandlerAttached","checkInView","loadOnTransitionStart","scroll","scrollbarDragMove","Controller","LinearSpline","binarySearch","guess","array","i1","i3","interpolate","getInterpolateFunction","controller","spline","controlled","control","controlledTranslate","setControlledTranslate","by","inverse","setControlledTransition","A11y","getRandomNumber","randomChar","round","random","repeat","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElControls","controls","addElLabel","label","addElId","addElLive","live","disableEl","enableEl","onEnterKey","a11y","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","message","notification","liveRegion","updateNavigation","updatePagination","bulletEl","$bulletEl","paginationBulletMessage","$containerEl","containerRoleDescriptionMessage","containerMessage","wrapperId","itemRoleDescriptionMessage","tagName","notificationClass","afterInit","paginationUpdate","History","hashNavigation","paths","getPathValues","scrollToSlide","setHistoryPopState","urlOverride","URL","pathArray","part","setHistory","slugify","includes","currentState","state","slideHistory","HashNavigation","onHashCange","newHash","activeSlideHash","setHash","slideHash","watchState","Autoplay","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onVisibilityChange","visibilityState","disableOnInteraction","beforeTransitionStart","sliderFirstMove","Fade","tx","ty","slideOpacity","fadeEffect","crossFade","eventTriggered","triggerEvents","Cube","swiperWidth","swiperHeight","cubeEffect","wrapperRotate","$cubeShadowEl","shadow","slideAngle","tz","slideShadows","shadowBefore","shadowAfter","shadowOffset","shadowScale","shadowAngle","sin","cos","scale1","scale2","zFactor","Flip","flipEffect","limitRotation","rotate","rotateY","rotateX","zIndex","Coverflow","coverflowEffect","center","depth","slideOffset","offsetMultiplier","modifier","translateZ","stretch","slideTransform","$shadowBeforeEl","$shadowAfterEl","Thumbs","thumbsParams","thumbs","SwiperClass","swiperCreated","thumbsContainerClass","onThumbClick","thumbsSwiper","slideThumbActiveClass","currentIndex","initial","autoScrollOffset","useOffset","currentThumbsIndex","newThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","multipleActiveThumbs","beforeDestroy","components"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA;EACA,SAASA,QAAT,CAAkBC,GAAlB,EAAuB;EACnB,SAAQA,GAAG,KAAK,IAAR,IACJ,OAAOA,GAAP,KAAe,QADX,IAEJ,iBAAiBA,GAFb,IAGJA,GAAG,CAACC,WAAJ,KAAoBC,MAHxB;EAIH;;EACD,SAASC,MAAT,CAAgBC,MAAhB,EAAwBC,GAAxB,EAA6B;EACzB,MAAID,MAAM,KAAK,KAAK,CAApB,EAAuB;EAAEA,IAAAA,MAAM,GAAG,EAAT;EAAc;;EACvC,MAAIC,GAAG,KAAK,KAAK,CAAjB,EAAoB;EAAEA,IAAAA,GAAG,GAAG,EAAN;EAAW;;EACjCH,EAAAA,MAAM,CAACI,IAAP,CAAYD,GAAZ,EAAiBE,OAAjB,CAAyB,UAAUC,GAAV,EAAe;EACpC,QAAI,OAAOJ,MAAM,CAACI,GAAD,CAAb,KAAuB,WAA3B,EACIJ,MAAM,CAACI,GAAD,CAAN,GAAcH,GAAG,CAACG,GAAD,CAAjB,CADJ,KAEK,IAAIT,QAAQ,CAACM,GAAG,CAACG,GAAD,CAAJ,CAAR,IACLT,QAAQ,CAACK,MAAM,CAACI,GAAD,CAAP,CADH,IAELN,MAAM,CAACI,IAAP,CAAYD,GAAG,CAACG,GAAD,CAAf,EAAsBC,MAAtB,GAA+B,CAF9B,EAEiC;EAClCN,MAAAA,MAAM,CAACC,MAAM,CAACI,GAAD,CAAP,EAAcH,GAAG,CAACG,GAAD,CAAjB,CAAN;EACH;EACJ,GARD;EASH;;EAED,IAAIE,WAAW,GAAG;EACdC,EAAAA,IAAI,EAAE,EADQ;EAEdC,EAAAA,gBAAgB,EAAE,4BAAY,EAFhB;EAGdC,EAAAA,mBAAmB,EAAE,+BAAY,EAHnB;EAIdC,EAAAA,aAAa,EAAE;EACXC,IAAAA,IAAI,EAAE,gBAAY,EADP;EAEXC,IAAAA,QAAQ,EAAE;EAFC,GAJD;EAQdC,EAAAA,aAAa,EAAE,yBAAY;EACvB,WAAO,IAAP;EACH,GAVa;EAWdC,EAAAA,gBAAgB,EAAE,4BAAY;EAC1B,WAAO,EAAP;EACH,GAba;EAcdC,EAAAA,cAAc,EAAE,0BAAY;EACxB,WAAO,IAAP;EACH,GAhBa;EAiBdC,EAAAA,WAAW,EAAE,uBAAY;EACrB,WAAO;EACHC,MAAAA,SAAS,EAAE,qBAAY;EADpB,KAAP;EAGH,GArBa;EAsBdC,EAAAA,aAAa,EAAE,yBAAY;EACvB,WAAO;EACHC,MAAAA,QAAQ,EAAE,EADP;EAEHC,MAAAA,UAAU,EAAE,EAFT;EAGHC,MAAAA,KAAK,EAAE,EAHJ;EAIHC,MAAAA,YAAY,EAAE,wBAAY,EAJvB;EAKHC,MAAAA,oBAAoB,EAAE,gCAAY;EAC9B,eAAO,EAAP;EACH;EAPE,KAAP;EASH,GAhCa;EAiCdC,EAAAA,eAAe,EAAE,2BAAY;EACzB,WAAO,EAAP;EACH,GAnCa;EAoCdC,EAAAA,UAAU,EAAE,sBAAY;EACpB,WAAO,IAAP;EACH,GAtCa;EAuCdC,EAAAA,QAAQ,EAAE;EACNC,IAAAA,IAAI,EAAE,EADA;EAENC,IAAAA,IAAI,EAAE,EAFA;EAGNC,IAAAA,QAAQ,EAAE,EAHJ;EAINC,IAAAA,IAAI,EAAE,EAJA;EAKNC,IAAAA,MAAM,EAAE,EALF;EAMNC,IAAAA,QAAQ,EAAE,EANJ;EAONC,IAAAA,QAAQ,EAAE,EAPJ;EAQNC,IAAAA,MAAM,EAAE;EARF;EAvCI,CAAlB;;EAkDA,SAASC,WAAT,GAAuB;EACnB,MAAIC,GAAG,GAAG,OAAOC,QAAP,KAAoB,WAApB,GAAkCA,QAAlC,GAA6C,EAAvD;EACAtC,EAAAA,MAAM,CAACqC,GAAD,EAAM9B,WAAN,CAAN;EACA,SAAO8B,GAAP;EACH;;EAED,IAAIE,SAAS,GAAG;EACZD,EAAAA,QAAQ,EAAE/B,WADE;EAEZiC,EAAAA,SAAS,EAAE;EACPC,IAAAA,SAAS,EAAE;EADJ,GAFC;EAKZd,EAAAA,QAAQ,EAAE;EACNC,IAAAA,IAAI,EAAE,EADA;EAENC,IAAAA,IAAI,EAAE,EAFA;EAGNC,IAAAA,QAAQ,EAAE,EAHJ;EAINC,IAAAA,IAAI,EAAE,EAJA;EAKNC,IAAAA,MAAM,EAAE,EALF;EAMNC,IAAAA,QAAQ,EAAE,EANJ;EAONC,IAAAA,QAAQ,EAAE,EAPJ;EAQNC,IAAAA,MAAM,EAAE;EARF,GALE;EAeZO,EAAAA,OAAO,EAAE;EACLC,IAAAA,YAAY,EAAE,wBAAY,EADrB;EAELC,IAAAA,SAAS,EAAE,qBAAY,EAFlB;EAGLC,IAAAA,EAAE,EAAE,cAAY,EAHX;EAILC,IAAAA,IAAI,EAAE,gBAAY;EAJb,GAfG;EAqBZC,EAAAA,WAAW,EAAE,SAASA,WAAT,GAAuB;EAChC,WAAO,IAAP;EACH,GAvBW;EAwBZtC,EAAAA,gBAAgB,EAAE,4BAAY,EAxBlB;EAyBZC,EAAAA,mBAAmB,EAAE,+BAAY,EAzBrB;EA0BZsC,EAAAA,gBAAgB,EAAE,4BAAY;EAC1B,WAAO;EACHC,MAAAA,gBAAgB,EAAE,4BAAY;EAC1B,eAAO,EAAP;EACH;EAHE,KAAP;EAKH,GAhCW;EAiCZC,EAAAA,KAAK,EAAE,iBAAY,EAjCP;EAkCZC,EAAAA,IAAI,EAAE,gBAAY,EAlCN;EAmCZC,EAAAA,MAAM,EAAE,EAnCI;EAoCZC,EAAAA,UAAU,EAAE,sBAAY,EApCZ;EAqCZC,EAAAA,YAAY,EAAE,wBAAY,EArCd;EAsCZC,EAAAA,UAAU,EAAE,sBAAY;EACpB,WAAO,EAAP;EACH,GAxCW;EAyCZC,EAAAA,qBAAqB,EAAE,+BAAUC,QAAV,EAAoB;EACvC,QAAI,OAAOJ,UAAP,KAAsB,WAA1B,EAAuC;EACnCI,MAAAA,QAAQ;EACR,aAAO,IAAP;EACH;;EACD,WAAOJ,UAAU,CAACI,QAAD,EAAW,CAAX,CAAjB;EACH,GA/CW;EAgDZC,EAAAA,oBAAoB,EAAE,8BAAUC,EAAV,EAAc;EAChC,QAAI,OAAON,UAAP,KAAsB,WAA1B,EAAuC;EACnC;EACH;;EACDC,IAAAA,YAAY,CAACK,EAAD,CAAZ;EACH;EArDW,CAAhB;;EAuDA,SAASC,SAAT,GAAqB;EACjB,MAAIC,GAAG,GAAG,OAAOC,MAAP,KAAkB,WAAlB,GAAgCA,MAAhC,GAAyC,EAAnD;EACA9D,EAAAA,MAAM,CAAC6D,GAAD,EAAMtB,SAAN,CAAN;EACA,SAAOsB,GAAP;EACH;;ECnJD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAGA,SAASE,cAAT,CAAwBC,QAAxB,EAAkCC,UAAlC,EAA8C;EAC5CD,EAAAA,QAAQ,CAACE,SAAT,GAAqBnE,MAAM,CAACoE,MAAP,CAAcF,UAAU,CAACC,SAAzB,CAArB;EACAF,EAAAA,QAAQ,CAACE,SAAT,CAAmBpE,WAAnB,GAAiCkE,QAAjC;EACAA,EAAAA,QAAQ,CAACI,SAAT,GAAqBH,UAArB;EACD;;EAED,SAASI,eAAT,CAAyBC,CAAzB,EAA4B;EAC1BD,EAAAA,eAAe,GAAGtE,MAAM,CAACwE,cAAP,GAAwBxE,MAAM,CAACyE,cAA/B,GAAgD,SAASH,eAAT,CAAyBC,CAAzB,EAA4B;EAC5F,WAAOA,CAAC,CAACF,SAAF,IAAerE,MAAM,CAACyE,cAAP,CAAsBF,CAAtB,CAAtB;EACD,GAFD;EAGA,SAAOD,eAAe,CAACC,CAAD,CAAtB;EACD;;EAED,SAASG,eAAT,CAAyBH,CAAzB,EAA4BI,CAA5B,EAA+B;EAC7BD,EAAAA,eAAe,GAAG1E,MAAM,CAACwE,cAAP,IAAyB,SAASE,eAAT,CAAyBH,CAAzB,EAA4BI,CAA5B,EAA+B;EACxEJ,IAAAA,CAAC,CAACF,SAAF,GAAcM,CAAd;EACA,WAAOJ,CAAP;EACD,GAHD;;EAKA,SAAOG,eAAe,CAACH,CAAD,EAAII,CAAJ,CAAtB;EACD;;EAED,SAASC,yBAAT,GAAqC;EACnC,MAAI,OAAOC,OAAP,KAAmB,WAAnB,IAAkC,CAACA,OAAO,CAACC,SAA/C,EAA0D,OAAO,KAAP;EAC1D,MAAID,OAAO,CAACC,SAAR,CAAkBC,IAAtB,EAA4B,OAAO,KAAP;EAC5B,MAAI,OAAOC,KAAP,KAAiB,UAArB,EAAiC,OAAO,IAAP;;EAEjC,MAAI;EACF5B,IAAAA,IAAI,CAACe,SAAL,CAAec,QAAf,CAAwBC,IAAxB,CAA6BL,OAAO,CAACC,SAAR,CAAkB1B,IAAlB,EAAwB,EAAxB,EAA4B,YAAY,EAAxC,CAA7B;EACA,WAAO,IAAP;EACD,GAHD,CAGE,OAAO+B,CAAP,EAAU;EACV,WAAO,KAAP;EACD;EACF;;EAED,SAASC,UAAT,CAAoBC,MAApB,EAA4BC,IAA5B,EAAkCC,KAAlC,EAAyC;EACvC,MAAIX,yBAAyB,EAA7B,EAAiC;EAC/BQ,IAAAA,UAAU,GAAGP,OAAO,CAACC,SAArB;EACD,GAFD,MAEO;EACLM,IAAAA,UAAU,GAAG,SAASA,UAAT,CAAoBC,MAApB,EAA4BC,IAA5B,EAAkCC,KAAlC,EAAyC;EACpD,UAAIC,CAAC,GAAG,CAAC,IAAD,CAAR;EACAA,MAAAA,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAaF,CAAb,EAAgBF,IAAhB;EACA,UAAIK,WAAW,GAAGC,QAAQ,CAACC,IAAT,CAAcH,KAAd,CAAoBL,MAApB,EAA4BG,CAA5B,CAAlB;EACA,UAAIM,QAAQ,GAAG,IAAIH,WAAJ,EAAf;EACA,UAAIJ,KAAJ,EAAWb,eAAe,CAACoB,QAAD,EAAWP,KAAK,CAACpB,SAAjB,CAAf;EACX,aAAO2B,QAAP;EACD,KAPD;EAQD;;EAED,SAAOV,UAAU,CAACM,KAAX,CAAiB,IAAjB,EAAuBK,SAAvB,CAAP;EACD;;EAED,SAASC,iBAAT,CAA2BC,EAA3B,EAA+B;EAC7B,SAAOL,QAAQ,CAACX,QAAT,CAAkBC,IAAlB,CAAuBe,EAAvB,EAA2BC,OAA3B,CAAmC,eAAnC,MAAwD,CAAC,CAAhE;EACD;;EAED,SAASC,gBAAT,CAA0BZ,KAA1B,EAAiC;EAC/B,MAAIa,MAAM,GAAG,OAAOC,GAAP,KAAe,UAAf,GAA4B,IAAIA,GAAJ,EAA5B,GAAwCC,SAArD;;EAEAH,EAAAA,gBAAgB,GAAG,SAASA,gBAAT,CAA0BZ,KAA1B,EAAiC;EAClD,QAAIA,KAAK,KAAK,IAAV,IAAkB,CAACS,iBAAiB,CAACT,KAAD,CAAxC,EAAiD,OAAOA,KAAP;;EAEjD,QAAI,OAAOA,KAAP,KAAiB,UAArB,EAAiC;EAC/B,YAAM,IAAIgB,SAAJ,CAAc,oDAAd,CAAN;EACD;;EAED,QAAI,OAAOH,MAAP,KAAkB,WAAtB,EAAmC;EACjC,UAAIA,MAAM,CAACI,GAAP,CAAWjB,KAAX,CAAJ,EAAuB,OAAOa,MAAM,CAACK,GAAP,CAAWlB,KAAX,CAAP;;EAEvBa,MAAAA,MAAM,CAACM,GAAP,CAAWnB,KAAX,EAAkBoB,OAAlB;EACD;;EAED,aAASA,OAAT,GAAmB;EACjB,aAAOvB,UAAU,CAACG,KAAD,EAAQQ,SAAR,EAAmBzB,eAAe,CAAC,IAAD,CAAf,CAAsBvE,WAAzC,CAAjB;EACD;;EAED4G,IAAAA,OAAO,CAACxC,SAAR,GAAoBnE,MAAM,CAACoE,MAAP,CAAcmB,KAAK,CAACpB,SAApB,EAA+B;EACjDpE,MAAAA,WAAW,EAAE;EACX6G,QAAAA,KAAK,EAAED,OADI;EAEXE,QAAAA,UAAU,EAAE,KAFD;EAGXC,QAAAA,QAAQ,EAAE,IAHC;EAIXC,QAAAA,YAAY,EAAE;EAJH;EADoC,KAA/B,CAApB;EAQA,WAAOrC,eAAe,CAACiC,OAAD,EAAUpB,KAAV,CAAtB;EACD,GA1BD;;EA4BA,SAAOY,gBAAgB,CAACZ,KAAD,CAAvB;EACD;;EAED,SAASyB,sBAAT,CAAgCC,IAAhC,EAAsC;EACpC,MAAIA,IAAI,KAAK,KAAK,CAAlB,EAAqB;EACnB,UAAM,IAAIC,cAAJ,CAAmB,2DAAnB,CAAN;EACD;;EAED,SAAOD,IAAP;EACD;EAED;;;EACA,SAASE,YAAT,CAAsBrH,GAAtB,EAA2B;EACzB,MAAIsH,KAAK,GAAGtH,GAAG,CAACuE,SAAhB;EACArE,EAAAA,MAAM,CAACqH,cAAP,CAAsBvH,GAAtB,EAA2B,WAA3B,EAAwC;EACtC2G,IAAAA,GAAG,EAAE,SAASA,GAAT,GAAe;EAClB,aAAOW,KAAP;EACD,KAHqC;EAItCV,IAAAA,GAAG,EAAE,SAASA,GAAT,CAAaE,KAAb,EAAoB;EACvBQ,MAAAA,KAAK,CAAC/C,SAAN,GAAkBuC,KAAlB;EACD;EANqC,GAAxC;EAQD;;EAED,IAAIU,IAAI,gBAAgB,UAAUC,MAAV,EAAkB;EACxCvD,EAAAA,cAAc,CAACsD,IAAD,EAAOC,MAAP,CAAd;;EAEA,WAASD,IAAT,CAAcE,KAAd,EAAqB;EACnB,QAAIC,KAAJ;;EAEAA,IAAAA,KAAK,GAAGF,MAAM,CAACrC,IAAP,CAAYQ,KAAZ,CAAkB6B,MAAlB,EAA0B,CAAC,IAAD,EAAOG,MAAP,CAAcF,KAAd,CAA1B,KAAmD,IAA3D;EACAL,IAAAA,YAAY,CAACH,sBAAsB,CAACS,KAAD,CAAvB,CAAZ;EACA,WAAOA,KAAP;EACD;;EAED,SAAOH,IAAP;EACD,CAZuB,eAYRnB,gBAAgB,CAACwB,KAAD,CAZR,CAAxB;;EAcA,SAASC,SAAT,CAAmBC,GAAnB,EAAwB;EACtB,MAAIA,GAAG,KAAK,KAAK,CAAjB,EAAoB;EAClBA,IAAAA,GAAG,GAAG,EAAN;EACD;;EAED,MAAIC,GAAG,GAAG,EAAV;EACAD,EAAAA,GAAG,CAACxH,OAAJ,CAAY,UAAU0H,EAAV,EAAc;EACxB,QAAIJ,KAAK,CAACK,OAAN,CAAcD,EAAd,CAAJ,EAAuB;EACrBD,MAAAA,GAAG,CAACrC,IAAJ,CAASC,KAAT,CAAeoC,GAAf,EAAoBF,SAAS,CAACG,EAAD,CAA7B;EACD,KAFD,MAEO;EACLD,MAAAA,GAAG,CAACrC,IAAJ,CAASsC,EAAT;EACD;EACF,GAND;EAOA,SAAOD,GAAP;EACD;;EACD,SAASG,WAAT,CAAqBJ,GAArB,EAA0BnE,QAA1B,EAAoC;EAClC,SAAOiE,KAAK,CAACxD,SAAN,CAAgB+D,MAAhB,CAAuBhD,IAAvB,CAA4B2C,GAA5B,EAAiCnE,QAAjC,CAAP;EACD;;EACD,SAASyE,WAAT,CAAqBN,GAArB,EAA0B;EACxB,MAAIO,WAAW,GAAG,EAAlB;;EAEA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGR,GAAG,CAACtH,MAAxB,EAAgC8H,CAAC,IAAI,CAArC,EAAwC;EACtC,QAAID,WAAW,CAAClC,OAAZ,CAAoB2B,GAAG,CAACQ,CAAD,CAAvB,MAAgC,CAAC,CAArC,EAAwCD,WAAW,CAAC3C,IAAZ,CAAiBoC,GAAG,CAACQ,CAAD,CAApB;EACzC;;EAED,SAAOD,WAAP;EACD;;EAOD,SAASE,GAAT,CAAaC,QAAb,EAAuBC,OAAvB,EAAgC;EAC9B,MAAI,OAAOD,QAAP,KAAoB,QAAxB,EAAkC;EAChC,WAAO,CAACA,QAAD,CAAP;EACD;;EAED,MAAI/C,CAAC,GAAG,EAAR;EACA,MAAIsC,GAAG,GAAGU,OAAO,CAACxH,gBAAR,CAAyBuH,QAAzB,CAAV;;EAEA,OAAK,IAAIF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGP,GAAG,CAACvH,MAAxB,EAAgC8H,CAAC,IAAI,CAArC,EAAwC;EACtC7C,IAAAA,CAAC,CAACC,IAAF,CAAOqC,GAAG,CAACO,CAAD,CAAV;EACD;;EAED,SAAO7C,CAAP;EACD;;EAED,SAASiD,CAAT,CAAWF,QAAX,EAAqBC,OAArB,EAA8B;EAC5B,MAAIzE,MAAM,GAAGF,SAAS,EAAtB;EACA,MAAItB,QAAQ,GAAGF,WAAW,EAA1B;EACA,MAAIwF,GAAG,GAAG,EAAV;;EAEA,MAAI,CAACW,OAAD,IAAYD,QAAQ,YAAYjB,IAApC,EAA0C;EACxC,WAAOiB,QAAP;EACD;;EAED,MAAI,CAACA,QAAL,EAAe;EACb,WAAO,IAAIjB,IAAJ,CAASO,GAAT,CAAP;EACD;;EAED,MAAI,OAAOU,QAAP,KAAoB,QAAxB,EAAkC;EAChC,QAAIG,IAAI,GAAGH,QAAQ,CAACI,IAAT,EAAX;;EAEA,QAAID,IAAI,CAACxC,OAAL,CAAa,GAAb,KAAqB,CAArB,IAA0BwC,IAAI,CAACxC,OAAL,CAAa,GAAb,KAAqB,CAAnD,EAAsD;EACpD,UAAI0C,QAAQ,GAAG,KAAf;EACA,UAAIF,IAAI,CAACxC,OAAL,CAAa,KAAb,MAAwB,CAA5B,EAA+B0C,QAAQ,GAAG,IAAX;EAC/B,UAAIF,IAAI,CAACxC,OAAL,CAAa,KAAb,MAAwB,CAA5B,EAA+B0C,QAAQ,GAAG,OAAX;EAC/B,UAAIF,IAAI,CAACxC,OAAL,CAAa,KAAb,MAAwB,CAAxB,IAA6BwC,IAAI,CAACxC,OAAL,CAAa,KAAb,MAAwB,CAAzD,EAA4D0C,QAAQ,GAAG,IAAX;EAC5D,UAAIF,IAAI,CAACxC,OAAL,CAAa,QAAb,MAA2B,CAA/B,EAAkC0C,QAAQ,GAAG,OAAX;EAClC,UAAIF,IAAI,CAACxC,OAAL,CAAa,SAAb,MAA4B,CAAhC,EAAmC0C,QAAQ,GAAG,QAAX;EACnC,UAAIC,UAAU,GAAGtG,QAAQ,CAACnB,aAAT,CAAuBwH,QAAvB,CAAjB;EACAC,MAAAA,UAAU,CAACC,SAAX,GAAuBJ,IAAvB;;EAEA,WAAK,IAAIL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGQ,UAAU,CAACvH,UAAX,CAAsBf,MAA1C,EAAkD8H,CAAC,IAAI,CAAvD,EAA0D;EACxDR,QAAAA,GAAG,CAACpC,IAAJ,CAASoD,UAAU,CAACvH,UAAX,CAAsB+G,CAAtB,CAAT;EACD;EACF,KAbD,MAaO;EACLR,MAAAA,GAAG,GAAGS,GAAG,CAACC,QAAQ,CAACI,IAAT,EAAD,EAAkBH,OAAO,IAAIjG,QAA7B,CAAT;EACD,KAlB+B;;EAoBjC,GApBD,MAoBO,IAAIgG,QAAQ,CAACQ,QAAT,IAAqBR,QAAQ,KAAKxE,MAAlC,IAA4CwE,QAAQ,KAAKhG,QAA7D,EAAuE;EAC5EsF,IAAAA,GAAG,CAACpC,IAAJ,CAAS8C,QAAT;EACD,GAFM,MAEA,IAAIZ,KAAK,CAACK,OAAN,CAAcO,QAAd,CAAJ,EAA6B;EAClC,QAAIA,QAAQ,YAAYjB,IAAxB,EAA8B,OAAOiB,QAAP;EAC9BV,IAAAA,GAAG,GAAGU,QAAN;EACD;;EAED,SAAO,IAAIjB,IAAJ,CAASa,WAAW,CAACN,GAAD,CAApB,CAAP;EACD;;EAEDY,CAAC,CAACxC,EAAF,GAAOqB,IAAI,CAACnD,SAAZ;;EAEA,SAAS6E,QAAT,GAAoB;EAClB,OAAK,IAAIC,IAAI,GAAGlD,SAAS,CAACxF,MAArB,EAA6B2I,OAAO,GAAG,IAAIvB,KAAJ,CAAUsB,IAAV,CAAvC,EAAwDE,IAAI,GAAG,CAApE,EAAuEA,IAAI,GAAGF,IAA9E,EAAoFE,IAAI,EAAxF,EAA4F;EAC1FD,IAAAA,OAAO,CAACC,IAAD,CAAP,GAAgBpD,SAAS,CAACoD,IAAD,CAAzB;EACD;;EAED,MAAIC,UAAU,GAAGxB,SAAS,CAACsB,OAAO,CAACG,GAAR,CAAY,UAAUC,CAAV,EAAa;EAClD,WAAOA,CAAC,CAACC,KAAF,CAAQ,GAAR,CAAP;EACD,GAF0B,CAAD,CAA1B;EAGA,OAAKlJ,OAAL,CAAa,UAAU0H,EAAV,EAAc;EACzB,QAAIyB,aAAJ;;EAEA,KAACA,aAAa,GAAGzB,EAAE,CAAC0B,SAApB,EAA+BC,GAA/B,CAAmChE,KAAnC,CAAyC8D,aAAzC,EAAwDJ,UAAxD;EACD,GAJD;EAKA,SAAO,IAAP;EACD;;EAED,SAASO,WAAT,GAAuB;EACrB,OAAK,IAAIC,KAAK,GAAG7D,SAAS,CAACxF,MAAtB,EAA8B2I,OAAO,GAAG,IAAIvB,KAAJ,CAAUiC,KAAV,CAAxC,EAA0DC,KAAK,GAAG,CAAvE,EAA0EA,KAAK,GAAGD,KAAlF,EAAyFC,KAAK,EAA9F,EAAkG;EAChGX,IAAAA,OAAO,CAACW,KAAD,CAAP,GAAiB9D,SAAS,CAAC8D,KAAD,CAA1B;EACD;;EAED,MAAIT,UAAU,GAAGxB,SAAS,CAACsB,OAAO,CAACG,GAAR,CAAY,UAAUC,CAAV,EAAa;EAClD,WAAOA,CAAC,CAACC,KAAF,CAAQ,GAAR,CAAP;EACD,GAF0B,CAAD,CAA1B;EAGA,OAAKlJ,OAAL,CAAa,UAAU0H,EAAV,EAAc;EACzB,QAAI+B,cAAJ;;EAEA,KAACA,cAAc,GAAG/B,EAAE,CAAC0B,SAArB,EAAgCM,MAAhC,CAAuCrE,KAAvC,CAA6CoE,cAA7C,EAA6DV,UAA7D;EACD,GAJD;EAKA,SAAO,IAAP;EACD;;EAED,SAASY,WAAT,GAAuB;EACrB,OAAK,IAAIC,KAAK,GAAGlE,SAAS,CAACxF,MAAtB,EAA8B2I,OAAO,GAAG,IAAIvB,KAAJ,CAAUsC,KAAV,CAAxC,EAA0DC,KAAK,GAAG,CAAvE,EAA0EA,KAAK,GAAGD,KAAlF,EAAyFC,KAAK,EAA9F,EAAkG;EAChGhB,IAAAA,OAAO,CAACgB,KAAD,CAAP,GAAiBnE,SAAS,CAACmE,KAAD,CAA1B;EACD;;EAED,MAAId,UAAU,GAAGxB,SAAS,CAACsB,OAAO,CAACG,GAAR,CAAY,UAAUC,CAAV,EAAa;EAClD,WAAOA,CAAC,CAACC,KAAF,CAAQ,GAAR,CAAP;EACD,GAF0B,CAAD,CAA1B;EAGA,OAAKlJ,OAAL,CAAa,UAAU0H,EAAV,EAAc;EACzBqB,IAAAA,UAAU,CAAC/I,OAAX,CAAmB,UAAU8J,SAAV,EAAqB;EACtCpC,MAAAA,EAAE,CAAC0B,SAAH,CAAaW,MAAb,CAAoBD,SAApB;EACD,KAFD;EAGD,GAJD;EAKD;;EAED,SAASE,QAAT,GAAoB;EAClB,OAAK,IAAIC,KAAK,GAAGvE,SAAS,CAACxF,MAAtB,EAA8B2I,OAAO,GAAG,IAAIvB,KAAJ,CAAU2C,KAAV,CAAxC,EAA0DC,KAAK,GAAG,CAAvE,EAA0EA,KAAK,GAAGD,KAAlF,EAAyFC,KAAK,EAA9F,EAAkG;EAChGrB,IAAAA,OAAO,CAACqB,KAAD,CAAP,GAAiBxE,SAAS,CAACwE,KAAD,CAA1B;EACD;;EAED,MAAInB,UAAU,GAAGxB,SAAS,CAACsB,OAAO,CAACG,GAAR,CAAY,UAAUC,CAAV,EAAa;EAClD,WAAOA,CAAC,CAACC,KAAF,CAAQ,GAAR,CAAP;EACD,GAF0B,CAAD,CAA1B;EAGA,SAAOtB,WAAW,CAAC,IAAD,EAAO,UAAUF,EAAV,EAAc;EACrC,WAAOqB,UAAU,CAAClB,MAAX,CAAkB,UAAUiC,SAAV,EAAqB;EAC5C,aAAOpC,EAAE,CAAC0B,SAAH,CAAae,QAAb,CAAsBL,SAAtB,CAAP;EACD,KAFM,EAEJ5J,MAFI,GAEK,CAFZ;EAGD,GAJiB,CAAX,CAIJA,MAJI,GAIK,CAJZ;EAKD;;EAED,SAASkK,IAAT,CAAcC,KAAd,EAAqB9D,KAArB,EAA4B;EAC1B,MAAIb,SAAS,CAACxF,MAAV,KAAqB,CAArB,IAA0B,OAAOmK,KAAP,KAAiB,QAA/C,EAAyD;EACvD;EACA,QAAI,KAAK,CAAL,CAAJ,EAAa,OAAO,KAAK,CAAL,EAAQC,YAAR,CAAqBD,KAArB,CAAP;EACb,WAAOpE,SAAP;EACD,GALyB;;;EAQ1B,OAAK,IAAI+B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAItC,SAAS,CAACxF,MAAV,KAAqB,CAAzB,EAA4B;EAC1B;EACA,WAAK8H,CAAL,EAAQ7G,YAAR,CAAqBkJ,KAArB,EAA4B9D,KAA5B;EACD,KAHD,MAGO;EACL;EACA,WAAK,IAAIgE,QAAT,IAAqBF,KAArB,EAA4B;EAC1B,aAAKrC,CAAL,EAAQuC,QAAR,IAAoBF,KAAK,CAACE,QAAD,CAAzB;EACA,aAAKvC,CAAL,EAAQ7G,YAAR,CAAqBoJ,QAArB,EAA+BF,KAAK,CAACE,QAAD,CAApC;EACD;EACF;EACF;;EAED,SAAO,IAAP;EACD;;EAED,SAASC,UAAT,CAAoBJ,IAApB,EAA0B;EACxB,OAAK,IAAIpC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,SAAKA,CAAL,EAAQyC,eAAR,CAAwBL,IAAxB;EACD;;EAED,SAAO,IAAP;EACD;;EAoID,SAASM,SAAT,CAAmBA,SAAnB,EAA8B;EAC5B,OAAK,IAAI1C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,SAAKA,CAAL,EAAQ9G,KAAR,CAAcwJ,SAAd,GAA0BA,SAA1B;EACD;;EAED,SAAO,IAAP;EACD;;EAED,SAASC,UAAT,CAAoBC,QAApB,EAA8B;EAC5B,OAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,SAAKA,CAAL,EAAQ9G,KAAR,CAAc2J,kBAAd,GAAmC,OAAOD,QAAP,KAAoB,QAApB,GAA+BA,QAAQ,GAAG,IAA1C,GAAiDA,QAApF;EACD;;EAED,SAAO,IAAP;EACD;;EAED,SAASE,EAAT,GAAc;EACZ,OAAK,IAAIC,KAAK,GAAGrF,SAAS,CAACxF,MAAtB,EAA8B+E,IAAI,GAAG,IAAIqC,KAAJ,CAAUyD,KAAV,CAArC,EAAuDC,KAAK,GAAG,CAApE,EAAuEA,KAAK,GAAGD,KAA/E,EAAsFC,KAAK,EAA3F,EAA+F;EAC7F/F,IAAAA,IAAI,CAAC+F,KAAD,CAAJ,GAActF,SAAS,CAACsF,KAAD,CAAvB;EACD;;EAED,MAAIC,SAAS,GAAGhG,IAAI,CAAC,CAAD,CAApB;EAAA,MACIiG,cAAc,GAAGjG,IAAI,CAAC,CAAD,CADzB;EAAA,MAEIkG,QAAQ,GAAGlG,IAAI,CAAC,CAAD,CAFnB;EAAA,MAGImG,OAAO,GAAGnG,IAAI,CAAC,CAAD,CAHlB;;EAKA,MAAI,OAAOA,IAAI,CAAC,CAAD,CAAX,KAAmB,UAAvB,EAAmC;EACjCgG,IAAAA,SAAS,GAAGhG,IAAI,CAAC,CAAD,CAAhB;EACAkG,IAAAA,QAAQ,GAAGlG,IAAI,CAAC,CAAD,CAAf;EACAmG,IAAAA,OAAO,GAAGnG,IAAI,CAAC,CAAD,CAAd;EACAiG,IAAAA,cAAc,GAAGjF,SAAjB;EACD;;EAED,MAAI,CAACmF,OAAL,EAAcA,OAAO,GAAG,KAAV;;EAEd,WAASC,eAAT,CAAyBvG,CAAzB,EAA4B;EAC1B,QAAIjF,MAAM,GAAGiF,CAAC,CAACjF,MAAf;EACA,QAAI,CAACA,MAAL,EAAa;EACb,QAAIyL,SAAS,GAAGxG,CAAC,CAACjF,MAAF,CAAS0L,aAAT,IAA0B,EAA1C;;EAEA,QAAID,SAAS,CAACzF,OAAV,CAAkBf,CAAlB,IAAuB,CAA3B,EAA8B;EAC5BwG,MAAAA,SAAS,CAACE,OAAV,CAAkB1G,CAAlB;EACD;;EAED,QAAIsD,CAAC,CAACvI,MAAD,CAAD,CAAU4L,EAAV,CAAaP,cAAb,CAAJ,EAAkCC,QAAQ,CAAC9F,KAAT,CAAexF,MAAf,EAAuByL,SAAvB,EAAlC,KAAyE;EACvE,UAAII,QAAQ,GAAGtD,CAAC,CAACvI,MAAD,CAAD,CAAU8L,OAAV,EAAf,CADuE;;;EAIvE,WAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,QAAQ,CAACxL,MAA7B,EAAqC0L,CAAC,IAAI,CAA1C,EAA6C;EAC3C,YAAIxD,CAAC,CAACsD,QAAQ,CAACE,CAAD,CAAT,CAAD,CAAeH,EAAf,CAAkBP,cAAlB,CAAJ,EAAuCC,QAAQ,CAAC9F,KAAT,CAAeqG,QAAQ,CAACE,CAAD,CAAvB,EAA4BN,SAA5B;EACxC;EACF;EACF;;EAED,WAASO,WAAT,CAAqB/G,CAArB,EAAwB;EACtB,QAAIwG,SAAS,GAAGxG,CAAC,IAAIA,CAAC,CAACjF,MAAP,GAAgBiF,CAAC,CAACjF,MAAF,CAAS0L,aAAT,IAA0B,EAA1C,GAA+C,EAA/D;;EAEA,QAAID,SAAS,CAACzF,OAAV,CAAkBf,CAAlB,IAAuB,CAA3B,EAA8B;EAC5BwG,MAAAA,SAAS,CAACE,OAAV,CAAkB1G,CAAlB;EACD;;EAEDqG,IAAAA,QAAQ,CAAC9F,KAAT,CAAe,IAAf,EAAqBiG,SAArB;EACD;;EAED,MAAIQ,MAAM,GAAGb,SAAS,CAAC/B,KAAV,CAAgB,GAAhB,CAAb;EACA,MAAI6C,CAAJ;;EAEA,OAAK,IAAI/D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAIN,EAAE,GAAG,KAAKM,CAAL,CAAT;;EAEA,QAAI,CAACkD,cAAL,EAAqB;EACnB,WAAKa,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGD,MAAM,CAAC5L,MAAvB,EAA+B6L,CAAC,IAAI,CAApC,EAAuC;EACrC,YAAIC,KAAK,GAAGF,MAAM,CAACC,CAAD,CAAlB;EACA,YAAI,CAACrE,EAAE,CAACuE,aAAR,EAAuBvE,EAAE,CAACuE,aAAH,GAAmB,EAAnB;EACvB,YAAI,CAACvE,EAAE,CAACuE,aAAH,CAAiBD,KAAjB,CAAL,EAA8BtE,EAAE,CAACuE,aAAH,CAAiBD,KAAjB,IAA0B,EAA1B;EAC9BtE,QAAAA,EAAE,CAACuE,aAAH,CAAiBD,KAAjB,EAAwB5G,IAAxB,CAA6B;EAC3B+F,UAAAA,QAAQ,EAAEA,QADiB;EAE3Be,UAAAA,aAAa,EAAEL;EAFY,SAA7B;EAIAnE,QAAAA,EAAE,CAACrH,gBAAH,CAAoB2L,KAApB,EAA2BH,WAA3B,EAAwCT,OAAxC;EACD;EACF,KAXD,MAWO;EACL;EACA,WAAKW,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGD,MAAM,CAAC5L,MAAvB,EAA+B6L,CAAC,IAAI,CAApC,EAAuC;EACrC,YAAII,MAAM,GAAGL,MAAM,CAACC,CAAD,CAAnB;EACA,YAAI,CAACrE,EAAE,CAAC0E,iBAAR,EAA2B1E,EAAE,CAAC0E,iBAAH,GAAuB,EAAvB;EAC3B,YAAI,CAAC1E,EAAE,CAAC0E,iBAAH,CAAqBD,MAArB,CAAL,EAAmCzE,EAAE,CAAC0E,iBAAH,CAAqBD,MAArB,IAA+B,EAA/B;;EAEnCzE,QAAAA,EAAE,CAAC0E,iBAAH,CAAqBD,MAArB,EAA6B/G,IAA7B,CAAkC;EAChC+F,UAAAA,QAAQ,EAAEA,QADsB;EAEhCe,UAAAA,aAAa,EAAEb;EAFiB,SAAlC;;EAKA3D,QAAAA,EAAE,CAACrH,gBAAH,CAAoB8L,MAApB,EAA4Bd,eAA5B,EAA6CD,OAA7C;EACD;EACF;EACF;;EAED,SAAO,IAAP;EACD;;EAED,SAASiB,GAAT,GAAe;EACb,OAAK,IAAIC,KAAK,GAAG5G,SAAS,CAACxF,MAAtB,EAA8B+E,IAAI,GAAG,IAAIqC,KAAJ,CAAUgF,KAAV,CAArC,EAAuDC,KAAK,GAAG,CAApE,EAAuEA,KAAK,GAAGD,KAA/E,EAAsFC,KAAK,EAA3F,EAA+F;EAC7FtH,IAAAA,IAAI,CAACsH,KAAD,CAAJ,GAAc7G,SAAS,CAAC6G,KAAD,CAAvB;EACD;;EAED,MAAItB,SAAS,GAAGhG,IAAI,CAAC,CAAD,CAApB;EAAA,MACIiG,cAAc,GAAGjG,IAAI,CAAC,CAAD,CADzB;EAAA,MAEIkG,QAAQ,GAAGlG,IAAI,CAAC,CAAD,CAFnB;EAAA,MAGImG,OAAO,GAAGnG,IAAI,CAAC,CAAD,CAHlB;;EAKA,MAAI,OAAOA,IAAI,CAAC,CAAD,CAAX,KAAmB,UAAvB,EAAmC;EACjCgG,IAAAA,SAAS,GAAGhG,IAAI,CAAC,CAAD,CAAhB;EACAkG,IAAAA,QAAQ,GAAGlG,IAAI,CAAC,CAAD,CAAf;EACAmG,IAAAA,OAAO,GAAGnG,IAAI,CAAC,CAAD,CAAd;EACAiG,IAAAA,cAAc,GAAGjF,SAAjB;EACD;;EAED,MAAI,CAACmF,OAAL,EAAcA,OAAO,GAAG,KAAV;EACd,MAAIU,MAAM,GAAGb,SAAS,CAAC/B,KAAV,CAAgB,GAAhB,CAAb;;EAEA,OAAK,IAAIlB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8D,MAAM,CAAC5L,MAA3B,EAAmC8H,CAAC,IAAI,CAAxC,EAA2C;EACzC,QAAIgE,KAAK,GAAGF,MAAM,CAAC9D,CAAD,CAAlB;;EAEA,SAAK,IAAI+D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK7L,MAAzB,EAAiC6L,CAAC,IAAI,CAAtC,EAAyC;EACvC,UAAIrE,EAAE,GAAG,KAAKqE,CAAL,CAAT;EACA,UAAIS,QAAQ,GAAG,KAAK,CAApB;;EAEA,UAAI,CAACtB,cAAD,IAAmBxD,EAAE,CAACuE,aAA1B,EAAyC;EACvCO,QAAAA,QAAQ,GAAG9E,EAAE,CAACuE,aAAH,CAAiBD,KAAjB,CAAX;EACD,OAFD,MAEO,IAAId,cAAc,IAAIxD,EAAE,CAAC0E,iBAAzB,EAA4C;EACjDI,QAAAA,QAAQ,GAAG9E,EAAE,CAAC0E,iBAAH,CAAqBJ,KAArB,CAAX;EACD;;EAED,UAAIQ,QAAQ,IAAIA,QAAQ,CAACtM,MAAzB,EAAiC;EAC/B,aAAK,IAAI0L,CAAC,GAAGY,QAAQ,CAACtM,MAAT,GAAkB,CAA/B,EAAkC0L,CAAC,IAAI,CAAvC,EAA0CA,CAAC,IAAI,CAA/C,EAAkD;EAChD,cAAIa,OAAO,GAAGD,QAAQ,CAACZ,CAAD,CAAtB;;EAEA,cAAIT,QAAQ,IAAIsB,OAAO,CAACtB,QAAR,KAAqBA,QAArC,EAA+C;EAC7CzD,YAAAA,EAAE,CAACpH,mBAAH,CAAuB0L,KAAvB,EAA8BS,OAAO,CAACP,aAAtC,EAAqDd,OAArD;EACAoB,YAAAA,QAAQ,CAACE,MAAT,CAAgBd,CAAhB,EAAmB,CAAnB;EACD,WAHD,MAGO,IAAIT,QAAQ,IAAIsB,OAAO,CAACtB,QAApB,IAAgCsB,OAAO,CAACtB,QAAR,CAAiBwB,SAAjD,IAA8DF,OAAO,CAACtB,QAAR,CAAiBwB,SAAjB,KAA+BxB,QAAjG,EAA2G;EAChHzD,YAAAA,EAAE,CAACpH,mBAAH,CAAuB0L,KAAvB,EAA8BS,OAAO,CAACP,aAAtC,EAAqDd,OAArD;EACAoB,YAAAA,QAAQ,CAACE,MAAT,CAAgBd,CAAhB,EAAmB,CAAnB;EACD,WAHM,MAGA,IAAI,CAACT,QAAL,EAAe;EACpBzD,YAAAA,EAAE,CAACpH,mBAAH,CAAuB0L,KAAvB,EAA8BS,OAAO,CAACP,aAAtC,EAAqDd,OAArD;EACAoB,YAAAA,QAAQ,CAACE,MAAT,CAAgBd,CAAhB,EAAmB,CAAnB;EACD;EACF;EACF;EACF;EACF;;EAED,SAAO,IAAP;EACD;;EAsCD,SAASgB,OAAT,GAAmB;EACjB,MAAIlJ,MAAM,GAAGF,SAAS,EAAtB;;EAEA,OAAK,IAAIqJ,KAAK,GAAGnH,SAAS,CAACxF,MAAtB,EAA8B+E,IAAI,GAAG,IAAIqC,KAAJ,CAAUuF,KAAV,CAArC,EAAuDC,KAAK,GAAG,CAApE,EAAuEA,KAAK,GAAGD,KAA/E,EAAsFC,KAAK,EAA3F,EAA+F;EAC7F7H,IAAAA,IAAI,CAAC6H,KAAD,CAAJ,GAAcpH,SAAS,CAACoH,KAAD,CAAvB;EACD;;EAED,MAAIhB,MAAM,GAAG7G,IAAI,CAAC,CAAD,CAAJ,CAAQiE,KAAR,CAAc,GAAd,CAAb;EACA,MAAIoC,SAAS,GAAGrG,IAAI,CAAC,CAAD,CAApB;;EAEA,OAAK,IAAI+C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8D,MAAM,CAAC5L,MAA3B,EAAmC8H,CAAC,IAAI,CAAxC,EAA2C;EACzC,QAAIgE,KAAK,GAAGF,MAAM,CAAC9D,CAAD,CAAlB;;EAEA,SAAK,IAAI+D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK7L,MAAzB,EAAiC6L,CAAC,IAAI,CAAtC,EAAyC;EACvC,UAAIrE,EAAE,GAAG,KAAKqE,CAAL,CAAT;;EAEA,UAAIrI,MAAM,CAACf,WAAX,EAAwB;EACtB,YAAIoK,GAAG,GAAG,IAAIrJ,MAAM,CAACf,WAAX,CAAuBqJ,KAAvB,EAA8B;EACtCgB,UAAAA,MAAM,EAAE1B,SAD8B;EAEtC2B,UAAAA,OAAO,EAAE,IAF6B;EAGtCC,UAAAA,UAAU,EAAE;EAH0B,SAA9B,CAAV;EAKAxF,QAAAA,EAAE,CAAC6D,aAAH,GAAmBtG,IAAI,CAAC4C,MAAL,CAAY,UAAUsF,IAAV,EAAgBC,SAAhB,EAA2B;EACxD,iBAAOA,SAAS,GAAG,CAAnB;EACD,SAFkB,CAAnB;EAGA1F,QAAAA,EAAE,CAAC2F,aAAH,CAAiBN,GAAjB;EACArF,QAAAA,EAAE,CAAC6D,aAAH,GAAmB,EAAnB;EACA,eAAO7D,EAAE,CAAC6D,aAAV;EACD;EACF;EACF;;EAED,SAAO,IAAP;EACD;;EAED,SAAS+B,aAAT,CAAuBjK,QAAvB,EAAiC;EAC/B,MAAIkK,GAAG,GAAG,IAAV;;EAEA,WAASC,YAAT,CAAsB1I,CAAtB,EAAyB;EACvB,QAAIA,CAAC,CAACjF,MAAF,KAAa,IAAjB,EAAuB;EACvBwD,IAAAA,QAAQ,CAACwB,IAAT,CAAc,IAAd,EAAoBC,CAApB;EACAyI,IAAAA,GAAG,CAAClB,GAAJ,CAAQ,eAAR,EAAyBmB,YAAzB;EACD;;EAED,MAAInK,QAAJ,EAAc;EACZkK,IAAAA,GAAG,CAACzC,EAAJ,CAAO,eAAP,EAAwB0C,YAAxB;EACD;;EAED,SAAO,IAAP;EACD;;EAgCD,SAASC,UAAT,CAAoBC,cAApB,EAAoC;EAClC,MAAI,KAAKxN,MAAL,GAAc,CAAlB,EAAqB;EACnB,QAAIwN,cAAJ,EAAoB;EAClB,UAAIC,OAAO,GAAG,KAAKC,MAAL,EAAd;;EAEA,aAAO,KAAK,CAAL,EAAQC,WAAR,GAAsBC,UAAU,CAACH,OAAO,CAAC9K,gBAAR,CAAyB,cAAzB,CAAD,CAAhC,GAA6EiL,UAAU,CAACH,OAAO,CAAC9K,gBAAR,CAAyB,aAAzB,CAAD,CAA9F;EACD;;EAED,WAAO,KAAK,CAAL,EAAQgL,WAAf;EACD;;EAED,SAAO,IAAP;EACD;;EAgBD,SAASE,WAAT,CAAqBL,cAArB,EAAqC;EACnC,MAAI,KAAKxN,MAAL,GAAc,CAAlB,EAAqB;EACnB,QAAIwN,cAAJ,EAAoB;EAClB,UAAIM,QAAQ,GAAG,KAAKJ,MAAL,EAAf;;EAEA,aAAO,KAAK,CAAL,EAAQK,YAAR,GAAuBH,UAAU,CAACE,QAAQ,CAACnL,gBAAT,CAA0B,YAA1B,CAAD,CAAjC,GAA6EiL,UAAU,CAACE,QAAQ,CAACnL,gBAAT,CAA0B,eAA1B,CAAD,CAA9F;EACD;;EAED,WAAO,KAAK,CAAL,EAAQoL,YAAf;EACD;;EAED,SAAO,IAAP;EACD;;EAED,SAASC,MAAT,GAAkB;EAChB,MAAI,KAAKhO,MAAL,GAAc,CAAlB,EAAqB;EACnB,QAAIwD,MAAM,GAAGF,SAAS,EAAtB;EACA,QAAItB,QAAQ,GAAGF,WAAW,EAA1B;EACA,QAAI0F,EAAE,GAAG,KAAK,CAAL,CAAT;EACA,QAAIyG,GAAG,GAAGzG,EAAE,CAAC0G,qBAAH,EAAV;EACA,QAAIhO,IAAI,GAAG8B,QAAQ,CAAC9B,IAApB;EACA,QAAIiO,SAAS,GAAG3G,EAAE,CAAC2G,SAAH,IAAgBjO,IAAI,CAACiO,SAArB,IAAkC,CAAlD;EACA,QAAIC,UAAU,GAAG5G,EAAE,CAAC4G,UAAH,IAAiBlO,IAAI,CAACkO,UAAtB,IAAoC,CAArD;EACA,QAAIC,SAAS,GAAG7G,EAAE,KAAKhE,MAAP,GAAgBA,MAAM,CAAC8K,OAAvB,GAAiC9G,EAAE,CAAC6G,SAApD;EACA,QAAIE,UAAU,GAAG/G,EAAE,KAAKhE,MAAP,GAAgBA,MAAM,CAACgL,OAAvB,GAAiChH,EAAE,CAAC+G,UAArD;EACA,WAAO;EACLE,MAAAA,GAAG,EAAER,GAAG,CAACQ,GAAJ,GAAUJ,SAAV,GAAsBF,SADtB;EAELO,MAAAA,IAAI,EAAET,GAAG,CAACS,IAAJ,GAAWH,UAAX,GAAwBH;EAFzB,KAAP;EAID;;EAED,SAAO,IAAP;EACD;;EA6BD,SAASV,MAAT,GAAkB;EAChB,MAAIlK,MAAM,GAAGF,SAAS,EAAtB;EACA,MAAI,KAAK,CAAL,CAAJ,EAAa,OAAOE,MAAM,CAACd,gBAAP,CAAwB,KAAK,CAAL,CAAxB,EAAiC,IAAjC,CAAP;EACb,SAAO,EAAP;EACD;;EAED,SAASiM,GAAT,CAAaC,KAAb,EAAoBvI,KAApB,EAA2B;EACzB,MAAI7C,MAAM,GAAGF,SAAS,EAAtB;EACA,MAAIwE,CAAJ;;EAEA,MAAItC,SAAS,CAACxF,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,QAAI,OAAO4O,KAAP,KAAiB,QAArB,EAA+B;EAC7B;EACA,UAAI,KAAK,CAAL,CAAJ,EAAa,OAAOpL,MAAM,CAACd,gBAAP,CAAwB,KAAK,CAAL,CAAxB,EAAiC,IAAjC,EAAuCC,gBAAvC,CAAwDiM,KAAxD,CAAP;EACd,KAHD,MAGO;EACL;EACA,WAAK9G,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,KAAK9H,MAArB,EAA6B8H,CAAC,IAAI,CAAlC,EAAqC;EACnC,aAAK,IAAI+G,KAAT,IAAkBD,KAAlB,EAAyB;EACvB,eAAK9G,CAAL,EAAQ9G,KAAR,CAAc6N,KAAd,IAAuBD,KAAK,CAACC,KAAD,CAA5B;EACD;EACF;;EAED,aAAO,IAAP;EACD;EACF;;EAED,MAAIrJ,SAAS,CAACxF,MAAV,KAAqB,CAArB,IAA0B,OAAO4O,KAAP,KAAiB,QAA/C,EAAyD;EACvD;EACA,SAAK9G,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,KAAK9H,MAArB,EAA6B8H,CAAC,IAAI,CAAlC,EAAqC;EACnC,WAAKA,CAAL,EAAQ9G,KAAR,CAAc4N,KAAd,IAAuBvI,KAAvB;EACD;;EAED,WAAO,IAAP;EACD;;EAED,SAAO,IAAP;EACD;;EAED,SAASyI,IAAT,CAAc3L,QAAd,EAAwB;EACtB,MAAI,CAACA,QAAL,EAAe,OAAO,IAAP;EACf,OAAKrD,OAAL,CAAa,UAAU0H,EAAV,EAAcuH,KAAd,EAAqB;EAChC5L,IAAAA,QAAQ,CAACgC,KAAT,CAAeqC,EAAf,EAAmB,CAACA,EAAD,EAAKuH,KAAL,CAAnB;EACD,GAFD;EAGA,SAAO,IAAP;EACD;;EAED,SAASpH,MAAT,CAAgBxE,QAAhB,EAA0B;EACxB,MAAI6L,MAAM,GAAGtH,WAAW,CAAC,IAAD,EAAOvE,QAAP,CAAxB;EACA,SAAO+E,CAAC,CAAC8G,MAAD,CAAR;EACD;;EAED,SAAS7G,IAAT,CAAcA,IAAd,EAAoB;EAClB,MAAI,OAAOA,IAAP,KAAgB,WAApB,EAAiC;EAC/B,WAAO,KAAK,CAAL,IAAU,KAAK,CAAL,EAAQI,SAAlB,GAA8B,IAArC;EACD;;EAED,OAAK,IAAIT,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,SAAKA,CAAL,EAAQS,SAAR,GAAoBJ,IAApB;EACD;;EAED,SAAO,IAAP;EACD;;EAED,SAAS8G,IAAT,CAAcA,IAAd,EAAoB;EAClB,MAAI,OAAOA,IAAP,KAAgB,WAApB,EAAiC;EAC/B,WAAO,KAAK,CAAL,IAAU,KAAK,CAAL,EAAQC,WAAR,CAAoB9G,IAApB,EAAV,GAAuC,IAA9C;EACD;;EAED,OAAK,IAAIN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,SAAKA,CAAL,EAAQoH,WAAR,GAAsBD,IAAtB;EACD;;EAED,SAAO,IAAP;EACD;;EAED,SAAS1D,EAAT,CAAYvD,QAAZ,EAAsB;EACpB,MAAIxE,MAAM,GAAGF,SAAS,EAAtB;EACA,MAAItB,QAAQ,GAAGF,WAAW,EAA1B;EACA,MAAI0F,EAAE,GAAG,KAAK,CAAL,CAAT;EACA,MAAI2H,WAAJ;EACA,MAAIrH,CAAJ;EACA,MAAI,CAACN,EAAD,IAAO,OAAOQ,QAAP,KAAoB,WAA/B,EAA4C,OAAO,KAAP;;EAE5C,MAAI,OAAOA,QAAP,KAAoB,QAAxB,EAAkC;EAChC,QAAIR,EAAE,CAAC4H,OAAP,EAAgB,OAAO5H,EAAE,CAAC4H,OAAH,CAAWpH,QAAX,CAAP;EAChB,QAAIR,EAAE,CAAC6H,qBAAP,EAA8B,OAAO7H,EAAE,CAAC6H,qBAAH,CAAyBrH,QAAzB,CAAP;EAC9B,QAAIR,EAAE,CAAC8H,iBAAP,EAA0B,OAAO9H,EAAE,CAAC8H,iBAAH,CAAqBtH,QAArB,CAAP;EAC1BmH,IAAAA,WAAW,GAAGjH,CAAC,CAACF,QAAD,CAAf;;EAEA,SAAKF,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqH,WAAW,CAACnP,MAA5B,EAAoC8H,CAAC,IAAI,CAAzC,EAA4C;EAC1C,UAAIqH,WAAW,CAACrH,CAAD,CAAX,KAAmBN,EAAvB,EAA2B,OAAO,IAAP;EAC5B;;EAED,WAAO,KAAP;EACD;;EAED,MAAIQ,QAAQ,KAAKhG,QAAjB,EAA2B;EACzB,WAAOwF,EAAE,KAAKxF,QAAd;EACD;;EAED,MAAIgG,QAAQ,KAAKxE,MAAjB,EAAyB;EACvB,WAAOgE,EAAE,KAAKhE,MAAd;EACD;;EAED,MAAIwE,QAAQ,CAACQ,QAAT,IAAqBR,QAAQ,YAAYjB,IAA7C,EAAmD;EACjDoI,IAAAA,WAAW,GAAGnH,QAAQ,CAACQ,QAAT,GAAoB,CAACR,QAAD,CAApB,GAAiCA,QAA/C;;EAEA,SAAKF,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqH,WAAW,CAACnP,MAA5B,EAAoC8H,CAAC,IAAI,CAAzC,EAA4C;EAC1C,UAAIqH,WAAW,CAACrH,CAAD,CAAX,KAAmBN,EAAvB,EAA2B,OAAO,IAAP;EAC5B;;EAED,WAAO,KAAP;EACD;;EAED,SAAO,KAAP;EACD;;EAED,SAASuH,KAAT,GAAiB;EACf,MAAIQ,KAAK,GAAG,KAAK,CAAL,CAAZ;EACA,MAAIzH,CAAJ;;EAEA,MAAIyH,KAAJ,EAAW;EACTzH,IAAAA,CAAC,GAAG,CAAJ,CADS;;EAGT,WAAO,CAACyH,KAAK,GAAGA,KAAK,CAACC,eAAf,MAAoC,IAA3C,EAAiD;EAC/C,UAAID,KAAK,CAAC/G,QAAN,KAAmB,CAAvB,EAA0BV,CAAC,IAAI,CAAL;EAC3B;;EAED,WAAOA,CAAP;EACD;;EAED,SAAO/B,SAAP;EACD;;EAED,SAAS0J,EAAT,CAAYV,KAAZ,EAAmB;EACjB,MAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC,OAAO,IAAP;EAClC,MAAI/O,MAAM,GAAG,KAAKA,MAAlB;;EAEA,MAAI+O,KAAK,GAAG/O,MAAM,GAAG,CAArB,EAAwB;EACtB,WAAOkI,CAAC,CAAC,EAAD,CAAR;EACD;;EAED,MAAI6G,KAAK,GAAG,CAAZ,EAAe;EACb,QAAIW,WAAW,GAAG1P,MAAM,GAAG+O,KAA3B;EACA,QAAIW,WAAW,GAAG,CAAlB,EAAqB,OAAOxH,CAAC,CAAC,EAAD,CAAR;EACrB,WAAOA,CAAC,CAAC,CAAC,KAAKwH,WAAL,CAAD,CAAD,CAAR;EACD;;EAED,SAAOxH,CAAC,CAAC,CAAC,KAAK6G,KAAL,CAAD,CAAD,CAAR;EACD;;EAED,SAASY,MAAT,GAAkB;EAChB,MAAIC,QAAJ;EACA,MAAI5N,QAAQ,GAAGF,WAAW,EAA1B;;EAEA,OAAK,IAAI4J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGlG,SAAS,CAACxF,MAA9B,EAAsC0L,CAAC,IAAI,CAA3C,EAA8C;EAC5CkE,IAAAA,QAAQ,GAAGlE,CAAC,GAAG,CAAJ,IAASlG,SAAS,CAACxF,MAAV,IAAoB0L,CAA7B,GAAiC3F,SAAjC,GAA6CP,SAAS,CAACkG,CAAD,CAAjE;;EAEA,SAAK,IAAI5D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,UAAI,OAAO8H,QAAP,KAAoB,QAAxB,EAAkC;EAChC,YAAIC,OAAO,GAAG7N,QAAQ,CAACnB,aAAT,CAAuB,KAAvB,CAAd;EACAgP,QAAAA,OAAO,CAACtH,SAAR,GAAoBqH,QAApB;;EAEA,eAAOC,OAAO,CAACC,UAAf,EAA2B;EACzB,eAAKhI,CAAL,EAAQiI,WAAR,CAAoBF,OAAO,CAACC,UAA5B;EACD;EACF,OAPD,MAOO,IAAIF,QAAQ,YAAY7I,IAAxB,EAA8B;EACnC,aAAK,IAAI8E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+D,QAAQ,CAAC5P,MAA7B,EAAqC6L,CAAC,IAAI,CAA1C,EAA6C;EAC3C,eAAK/D,CAAL,EAAQiI,WAAR,CAAoBH,QAAQ,CAAC/D,CAAD,CAA5B;EACD;EACF,OAJM,MAIA;EACL,aAAK/D,CAAL,EAAQiI,WAAR,CAAoBH,QAApB;EACD;EACF;EACF;;EAED,SAAO,IAAP;EACD;;EAOD,SAASI,OAAT,CAAiBJ,QAAjB,EAA2B;EACzB,MAAI5N,QAAQ,GAAGF,WAAW,EAA1B;EACA,MAAIgG,CAAJ;EACA,MAAI+D,CAAJ;;EAEA,OAAK/D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG,KAAK9H,MAArB,EAA6B8H,CAAC,IAAI,CAAlC,EAAqC;EACnC,QAAI,OAAO8H,QAAP,KAAoB,QAAxB,EAAkC;EAChC,UAAIC,OAAO,GAAG7N,QAAQ,CAACnB,aAAT,CAAuB,KAAvB,CAAd;EACAgP,MAAAA,OAAO,CAACtH,SAAR,GAAoBqH,QAApB;;EAEA,WAAK/D,CAAC,GAAGgE,OAAO,CAAC9O,UAAR,CAAmBf,MAAnB,GAA4B,CAArC,EAAwC6L,CAAC,IAAI,CAA7C,EAAgDA,CAAC,IAAI,CAArD,EAAwD;EACtD,aAAK/D,CAAL,EAAQmI,YAAR,CAAqBJ,OAAO,CAAC9O,UAAR,CAAmB8K,CAAnB,CAArB,EAA4C,KAAK/D,CAAL,EAAQ/G,UAAR,CAAmB,CAAnB,CAA5C;EACD;EACF,KAPD,MAOO,IAAI6O,QAAQ,YAAY7I,IAAxB,EAA8B;EACnC,WAAK8E,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG+D,QAAQ,CAAC5P,MAAzB,EAAiC6L,CAAC,IAAI,CAAtC,EAAyC;EACvC,aAAK/D,CAAL,EAAQmI,YAAR,CAAqBL,QAAQ,CAAC/D,CAAD,CAA7B,EAAkC,KAAK/D,CAAL,EAAQ/G,UAAR,CAAmB,CAAnB,CAAlC;EACD;EACF,KAJM,MAIA;EACL,WAAK+G,CAAL,EAAQmI,YAAR,CAAqBL,QAArB,EAA+B,KAAK9H,CAAL,EAAQ/G,UAAR,CAAmB,CAAnB,CAA/B;EACD;EACF;;EAED,SAAO,IAAP;EACD;;EAmCD,SAASmP,IAAT,CAAclI,QAAd,EAAwB;EACtB,MAAI,KAAKhI,MAAL,GAAc,CAAlB,EAAqB;EACnB,QAAIgI,QAAJ,EAAc;EACZ,UAAI,KAAK,CAAL,EAAQmI,kBAAR,IAA8BjI,CAAC,CAAC,KAAK,CAAL,EAAQiI,kBAAT,CAAD,CAA8B5E,EAA9B,CAAiCvD,QAAjC,CAAlC,EAA8E;EAC5E,eAAOE,CAAC,CAAC,CAAC,KAAK,CAAL,EAAQiI,kBAAT,CAAD,CAAR;EACD;;EAED,aAAOjI,CAAC,CAAC,EAAD,CAAR;EACD;;EAED,QAAI,KAAK,CAAL,EAAQiI,kBAAZ,EAAgC,OAAOjI,CAAC,CAAC,CAAC,KAAK,CAAL,EAAQiI,kBAAT,CAAD,CAAR;EAChC,WAAOjI,CAAC,CAAC,EAAD,CAAR;EACD;;EAED,SAAOA,CAAC,CAAC,EAAD,CAAR;EACD;;EAED,SAASkI,OAAT,CAAiBpI,QAAjB,EAA2B;EACzB,MAAIqI,OAAO,GAAG,EAAd;EACA,MAAI7I,EAAE,GAAG,KAAK,CAAL,CAAT;EACA,MAAI,CAACA,EAAL,EAAS,OAAOU,CAAC,CAAC,EAAD,CAAR;;EAET,SAAOV,EAAE,CAAC2I,kBAAV,EAA8B;EAC5B,QAAIG,KAAK,GAAG9I,EAAE,CAAC2I,kBAAf,CAD4B;;EAG5B,QAAInI,QAAJ,EAAc;EACZ,UAAIE,CAAC,CAACoI,KAAD,CAAD,CAAS/E,EAAT,CAAYvD,QAAZ,CAAJ,EAA2BqI,OAAO,CAACnL,IAAR,CAAaoL,KAAb;EAC5B,KAFD,MAEOD,OAAO,CAACnL,IAAR,CAAaoL,KAAb;;EAEP9I,IAAAA,EAAE,GAAG8I,KAAL;EACD;;EAED,SAAOpI,CAAC,CAACmI,OAAD,CAAR;EACD;;EAED,SAASE,IAAT,CAAcvI,QAAd,EAAwB;EACtB,MAAI,KAAKhI,MAAL,GAAc,CAAlB,EAAqB;EACnB,QAAIwH,EAAE,GAAG,KAAK,CAAL,CAAT;;EAEA,QAAIQ,QAAJ,EAAc;EACZ,UAAIR,EAAE,CAACgJ,sBAAH,IAA6BtI,CAAC,CAACV,EAAE,CAACgJ,sBAAJ,CAAD,CAA6BjF,EAA7B,CAAgCvD,QAAhC,CAAjC,EAA4E;EAC1E,eAAOE,CAAC,CAAC,CAACV,EAAE,CAACgJ,sBAAJ,CAAD,CAAR;EACD;;EAED,aAAOtI,CAAC,CAAC,EAAD,CAAR;EACD;;EAED,QAAIV,EAAE,CAACgJ,sBAAP,EAA+B,OAAOtI,CAAC,CAAC,CAACV,EAAE,CAACgJ,sBAAJ,CAAD,CAAR;EAC/B,WAAOtI,CAAC,CAAC,EAAD,CAAR;EACD;;EAED,SAAOA,CAAC,CAAC,EAAD,CAAR;EACD;;EAED,SAASuI,OAAT,CAAiBzI,QAAjB,EAA2B;EACzB,MAAI0I,OAAO,GAAG,EAAd;EACA,MAAIlJ,EAAE,GAAG,KAAK,CAAL,CAAT;EACA,MAAI,CAACA,EAAL,EAAS,OAAOU,CAAC,CAAC,EAAD,CAAR;;EAET,SAAOV,EAAE,CAACgJ,sBAAV,EAAkC;EAChC,QAAIG,KAAK,GAAGnJ,EAAE,CAACgJ,sBAAf,CADgC;;EAGhC,QAAIxI,QAAJ,EAAc;EACZ,UAAIE,CAAC,CAACyI,KAAD,CAAD,CAASpF,EAAT,CAAYvD,QAAZ,CAAJ,EAA2B0I,OAAO,CAACxL,IAAR,CAAayL,KAAb;EAC5B,KAFD,MAEOD,OAAO,CAACxL,IAAR,CAAayL,KAAb;;EAEPnJ,IAAAA,EAAE,GAAGmJ,KAAL;EACD;;EAED,SAAOzI,CAAC,CAACwI,OAAD,CAAR;EACD;;EAMD,SAASE,MAAT,CAAgB5I,QAAhB,EAA0B;EACxB,MAAIyD,OAAO,GAAG,EAAd,CADwB;;EAGxB,OAAK,IAAI3D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAI,KAAKA,CAAL,EAAQ+I,UAAR,KAAuB,IAA3B,EAAiC;EAC/B,UAAI7I,QAAJ,EAAc;EACZ,YAAIE,CAAC,CAAC,KAAKJ,CAAL,EAAQ+I,UAAT,CAAD,CAAsBtF,EAAtB,CAAyBvD,QAAzB,CAAJ,EAAwCyD,OAAO,CAACvG,IAAR,CAAa,KAAK4C,CAAL,EAAQ+I,UAArB;EACzC,OAFD,MAEO;EACLpF,QAAAA,OAAO,CAACvG,IAAR,CAAa,KAAK4C,CAAL,EAAQ+I,UAArB;EACD;EACF;EACF;;EAED,SAAO3I,CAAC,CAACuD,OAAD,CAAR;EACD;;EAED,SAASA,OAAT,CAAiBzD,QAAjB,EAA2B;EACzB,MAAIyD,OAAO,GAAG,EAAd,CADyB;;EAGzB,OAAK,IAAI3D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAIgJ,OAAO,GAAG,KAAKhJ,CAAL,EAAQ+I,UAAtB,CADuC;;EAGvC,WAAOC,OAAP,EAAgB;EACd,UAAI9I,QAAJ,EAAc;EACZ,YAAIE,CAAC,CAAC4I,OAAD,CAAD,CAAWvF,EAAX,CAAcvD,QAAd,CAAJ,EAA6ByD,OAAO,CAACvG,IAAR,CAAa4L,OAAb;EAC9B,OAFD,MAEO;EACLrF,QAAAA,OAAO,CAACvG,IAAR,CAAa4L,OAAb;EACD;;EAEDA,MAAAA,OAAO,GAAGA,OAAO,CAACD,UAAlB;EACD;EACF;;EAED,SAAO3I,CAAC,CAACuD,OAAD,CAAR;EACD;;EAED,SAASsF,OAAT,CAAiB/I,QAAjB,EAA2B;EACzB,MAAI+I,OAAO,GAAG,IAAd,CADyB;;EAGzB,MAAI,OAAO/I,QAAP,KAAoB,WAAxB,EAAqC;EACnC,WAAOE,CAAC,CAAC,EAAD,CAAR;EACD;;EAED,MAAI,CAAC6I,OAAO,CAACxF,EAAR,CAAWvD,QAAX,CAAL,EAA2B;EACzB+I,IAAAA,OAAO,GAAGA,OAAO,CAACtF,OAAR,CAAgBzD,QAAhB,EAA0ByH,EAA1B,CAA6B,CAA7B,CAAV;EACD;;EAED,SAAOsB,OAAP;EACD;;EAED,SAASC,IAAT,CAAchJ,QAAd,EAAwB;EACtB,MAAIiJ,aAAa,GAAG,EAApB;;EAEA,OAAK,IAAInJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAIoJ,KAAK,GAAG,KAAKpJ,CAAL,EAAQrH,gBAAR,CAAyBuH,QAAzB,CAAZ;;EAEA,SAAK,IAAI6D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqF,KAAK,CAAClR,MAA1B,EAAkC6L,CAAC,IAAI,CAAvC,EAA0C;EACxCoF,MAAAA,aAAa,CAAC/L,IAAd,CAAmBgM,KAAK,CAACrF,CAAD,CAAxB;EACD;EACF;;EAED,SAAO3D,CAAC,CAAC+I,aAAD,CAAR;EACD;;EAED,SAASnQ,QAAT,CAAkBkH,QAAlB,EAA4B;EAC1B,MAAIlH,QAAQ,GAAG,EAAf,CAD0B;;EAG1B,OAAK,IAAIgH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAI/G,UAAU,GAAG,KAAK+G,CAAL,EAAQhH,QAAzB;;EAEA,SAAK,IAAI+K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG9K,UAAU,CAACf,MAA/B,EAAuC6L,CAAC,IAAI,CAA5C,EAA+C;EAC7C,UAAI,CAAC7D,QAAD,IAAaE,CAAC,CAACnH,UAAU,CAAC8K,CAAD,CAAX,CAAD,CAAiBN,EAAjB,CAAoBvD,QAApB,CAAjB,EAAgD;EAC9ClH,QAAAA,QAAQ,CAACoE,IAAT,CAAcnE,UAAU,CAAC8K,CAAD,CAAxB;EACD;EACF;EACF;;EAED,SAAO3D,CAAC,CAACpH,QAAD,CAAR;EACD;;EAED,SAAS0I,MAAT,GAAkB;EAChB,OAAK,IAAI1B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAI,KAAKA,CAAL,EAAQ+I,UAAZ,EAAwB,KAAK/I,CAAL,EAAQ+I,UAAR,CAAmBM,WAAnB,CAA+B,KAAKrJ,CAAL,CAA/B;EACzB;;EAED,SAAO,IAAP;EACD;;EC7pCD,IAAMsJ,OAAO,GAAG;EACd3I,EAAAA,QAAQ,EAARA,QADc;EAEdW,EAAAA,WAAW,EAAXA,WAFc;EAGdU,EAAAA,QAAQ,EAARA,QAHc;EAIdL,EAAAA,WAAW,EAAXA,WAJc;EAKdS,EAAAA,IAAI,EAAJA,IALc;EAMdI,EAAAA,UAAU,EAAVA,UANc;EAOdE,EAAAA,SAAS,EAATA,SAPc;EAQdC,EAAAA,UAAU,EAAVA,UARc;EASdG,EAAAA,EAAE,EAAFA,EATc;EAUduB,EAAAA,GAAG,EAAHA,GAVc;EAWdO,EAAAA,OAAO,EAAPA,OAXc;EAYdU,EAAAA,aAAa,EAAbA,aAZc;EAadG,EAAAA,UAAU,EAAVA,UAbc;EAcdM,EAAAA,WAAW,EAAXA,WAdc;EAedH,EAAAA,MAAM,EAANA,MAfc;EAgBdM,EAAAA,MAAM,EAANA,MAhBc;EAiBdW,EAAAA,GAAG,EAAHA,GAjBc;EAkBdG,EAAAA,IAAI,EAAJA,IAlBc;EAmBd3G,EAAAA,IAAI,EAAJA,IAnBc;EAoBd8G,EAAAA,IAAI,EAAJA,IApBc;EAqBd1D,EAAAA,EAAE,EAAFA,EArBc;EAsBdwD,EAAAA,KAAK,EAALA,KAtBc;EAuBdU,EAAAA,EAAE,EAAFA,EAvBc;EAwBdE,EAAAA,MAAM,EAANA,MAxBc;EAyBdK,EAAAA,OAAO,EAAPA,OAzBc;EA0BdE,EAAAA,IAAI,EAAJA,IA1Bc;EA2BdE,EAAAA,OAAO,EAAPA,OA3Bc;EA4BdG,EAAAA,IAAI,EAAJA,IA5Bc;EA6BdE,EAAAA,OAAO,EAAPA,OA7Bc;EA8BdG,EAAAA,MAAM,EAANA,MA9Bc;EA+BdnF,EAAAA,OAAO,EAAPA,OA/Bc;EAgCdsF,EAAAA,OAAO,EAAPA,OAhCc;EAiCdC,EAAAA,IAAI,EAAJA,IAjCc;EAkCdlQ,EAAAA,QAAQ,EAARA,QAlCc;EAmCd6G,EAAAA,MAAM,EAANA,MAnCc;EAoCd6B,EAAAA,MAAM,EAANA;EApCc,CAAhB;EAuCA/J,MAAM,CAACI,IAAP,CAAYuR,OAAZ,EAAqBtR,OAArB,CAA6B,UAACuR,UAAD,EAAgB;EAC3CnJ,EAAAA,CAAC,CAACxC,EAAF,CAAK2L,UAAL,IAAmBD,OAAO,CAACC,UAAD,CAA1B;EACD,CAFD;;EC7EA,SAASC,WAAT,CAAqB/R,GAArB,EAA0B;EACxB,MAAMgS,MAAM,GAAGhS,GAAf;EACAE,EAAAA,MAAM,CAACI,IAAP,CAAY0R,MAAZ,EAAoBzR,OAApB,CAA4B,UAACC,GAAD,EAAS;EACnC,QAAI;EACFwR,MAAAA,MAAM,CAACxR,GAAD,CAAN,GAAc,IAAd;EACD,KAFD,CAEE,OAAO6E,CAAP,EAAU;EAEX;;EACD,QAAI;EACF,aAAO2M,MAAM,CAACxR,GAAD,CAAb;EACD,KAFD,CAEE,OAAO6E,CAAP,EAAU;EAEX;EACF,GAXD;EAYD;;EACD,SAAS4M,QAAT,CAAkBrO,QAAlB,EAA4BsO,KAA5B,EAAuC;EAAA,MAAXA,KAAW;EAAXA,IAAAA,KAAW,GAAH,CAAG;EAAA;;EACrC,SAAO1O,UAAU,CAACI,QAAD,EAAWsO,KAAX,CAAjB;EACD;;EACD,SAASC,GAAT,GAAe;EACb,SAAO7O,IAAI,CAAC6O,GAAL,EAAP;EACD;;EACD,SAASC,YAAT,CAAsBnK,EAAtB,EAA0BoK,IAA1B,EAAsC;EAAA,MAAZA,IAAY;EAAZA,IAAAA,IAAY,GAAL,GAAK;EAAA;;EACpC,MAAMpO,MAAM,GAAGF,SAAS,EAAxB;EACA,MAAIuO,MAAJ;EACA,MAAIC,YAAJ;EACA,MAAIC,eAAJ;EAEA,MAAMC,QAAQ,GAAGxO,MAAM,CAACd,gBAAP,CAAwB8E,EAAxB,EAA4B,IAA5B,CAAjB;;EAEA,MAAIhE,MAAM,CAACyO,eAAX,EAA4B;EAC1BH,IAAAA,YAAY,GAAGE,QAAQ,CAACxH,SAAT,IAAsBwH,QAAQ,CAACE,eAA9C;;EACA,QAAIJ,YAAY,CAAC9I,KAAb,CAAmB,GAAnB,EAAwBhJ,MAAxB,GAAiC,CAArC,EAAwC;EACtC8R,MAAAA,YAAY,GAAGA,YAAY,CACxB9I,KADY,CACN,IADM,EAEZF,GAFY,CAER,UAAC7D,CAAD;EAAA,eAAOA,CAAC,CAACkN,OAAF,CAAU,GAAV,EAAe,GAAf,CAAP;EAAA,OAFQ,EAGZC,IAHY,CAGP,IAHO,CAAf;EAID,KAPyB;EAS1B;;;EACAL,IAAAA,eAAe,GAAG,IAAIvO,MAAM,CAACyO,eAAX,CAA2BH,YAAY,KAAK,MAAjB,GAA0B,EAA1B,GAA+BA,YAA1D,CAAlB;EACD,GAXD,MAWO;EACLC,IAAAA,eAAe,GACbC,QAAQ,CAACK,YAAT,IACAL,QAAQ,CAACM,UADT,IAEAN,QAAQ,CAACO,WAFT,IAGAP,QAAQ,CAACQ,WAHT,IAIAR,QAAQ,CAACxH,SAJT,IAKAwH,QAAQ,CAACrP,gBAAT,CAA0B,WAA1B,EAAuCwP,OAAvC,CAA+C,YAA/C,EAA6D,oBAA7D,CANF;EAOAN,IAAAA,MAAM,GAAGE,eAAe,CAACrN,QAAhB,GAA2BsE,KAA3B,CAAiC,GAAjC,CAAT;EACD;;EAED,MAAI4I,IAAI,KAAK,GAAb,EAAkB;EAChB;EACA,QAAIpO,MAAM,CAACyO,eAAX,EAA4BH,YAAY,GAAGC,eAAe,CAACU,GAA/B,CAA5B;EAAA,SAEK,IAAIZ,MAAM,CAAC7R,MAAP,KAAkB,EAAtB,EAA0B8R,YAAY,GAAGlE,UAAU,CAACiE,MAAM,CAAC,EAAD,CAAP,CAAzB,CAA1B;EAAA,WAEAC,YAAY,GAAGlE,UAAU,CAACiE,MAAM,CAAC,CAAD,CAAP,CAAzB;EACN;;EACD,MAAID,IAAI,KAAK,GAAb,EAAkB;EAChB;EACA,QAAIpO,MAAM,CAACyO,eAAX,EAA4BH,YAAY,GAAGC,eAAe,CAACW,GAA/B,CAA5B;EAAA,SAEK,IAAIb,MAAM,CAAC7R,MAAP,KAAkB,EAAtB,EAA0B8R,YAAY,GAAGlE,UAAU,CAACiE,MAAM,CAAC,EAAD,CAAP,CAAzB,CAA1B;EAAA,WAEAC,YAAY,GAAGlE,UAAU,CAACiE,MAAM,CAAC,CAAD,CAAP,CAAzB;EACN;;EACD,SAAOC,YAAY,IAAI,CAAvB;EACD;;EACD,SAASxS,UAAT,CAAkB0E,CAAlB,EAAqB;EACnB,SAAO,OAAOA,CAAP,KAAa,QAAb,IAAyBA,CAAC,KAAK,IAA/B,IAAuCA,CAAC,CAACxE,WAAzC,IAAwDwE,CAAC,CAACxE,WAAF,KAAkBC,MAAjF;EACD;;EACD,SAASC,QAAT,GAAyB;EACvB,MAAMiT,EAAE,GAAGlT,MAAM,kDAAjB;;EACA,OAAK,IAAIqI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,UAAK9H,MAAzB,EAAiC8H,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAM8K,UAAU,GAAQ9K,CAAR,4BAAQA,CAAR,yBAAQA,CAAR,CAAhB;;EACA,QAAI8K,UAAU,KAAK7M,SAAf,IAA4B6M,UAAU,KAAK,IAA/C,EAAqD;EACnD,UAAMC,SAAS,GAAGpT,MAAM,CAACI,IAAP,CAAYJ,MAAM,CAACmT,UAAD,CAAlB,CAAlB;;EACA,WAAK,IAAIE,SAAS,GAAG,CAAhB,EAAmBC,GAAG,GAAGF,SAAS,CAAC7S,MAAxC,EAAgD8S,SAAS,GAAGC,GAA5D,EAAiED,SAAS,IAAI,CAA9E,EAAiF;EAC/E,YAAME,OAAO,GAAGH,SAAS,CAACC,SAAD,CAAzB;EACA,YAAMG,IAAI,GAAGxT,MAAM,CAACyT,wBAAP,CAAgCN,UAAhC,EAA4CI,OAA5C,CAAb;;EACA,YAAIC,IAAI,KAAKlN,SAAT,IAAsBkN,IAAI,CAAC3M,UAA/B,EAA2C;EACzC,cAAIhH,UAAQ,CAACqT,EAAE,CAACK,OAAD,CAAH,CAAR,IAAyB1T,UAAQ,CAACsT,UAAU,CAACI,OAAD,CAAX,CAArC,EAA4D;EAC1DtT,YAAAA,QAAM,CAACiT,EAAE,CAACK,OAAD,CAAH,EAAcJ,UAAU,CAACI,OAAD,CAAxB,CAAN;EACD,WAFD,MAEO,IAAI,CAAC1T,UAAQ,CAACqT,EAAE,CAACK,OAAD,CAAH,CAAT,IAA0B1T,UAAQ,CAACsT,UAAU,CAACI,OAAD,CAAX,CAAtC,EAA6D;EAClEL,YAAAA,EAAE,CAACK,OAAD,CAAF,GAAc,EAAd;EACAtT,YAAAA,QAAM,CAACiT,EAAE,CAACK,OAAD,CAAH,EAAcJ,UAAU,CAACI,OAAD,CAAxB,CAAN;EACD,WAHM,MAGA;EACLL,YAAAA,EAAE,CAACK,OAAD,CAAF,GAAcJ,UAAU,CAACI,OAAD,CAAxB;EACD;EACF;EACF;EACF;EACF;;EACD,SAAOL,EAAP;EACD;;EAED,SAASQ,iBAAT,CAA2B5N,QAA3B,EAAqChG,GAArC,EAA0C;EACxCE,EAAAA,MAAM,CAACI,IAAP,CAAYN,GAAZ,EAAiBO,OAAjB,CAAyB,UAACC,GAAD,EAAS;EAChC,QAAIT,UAAQ,CAACC,GAAG,CAACQ,GAAD,CAAJ,CAAZ,EAAwB;EACtBN,MAAAA,MAAM,CAACI,IAAP,CAAYN,GAAG,CAACQ,GAAD,CAAf,EAAsBD,OAAtB,CAA8B,UAACsT,MAAD,EAAY;EACxC,YAAI,OAAO7T,GAAG,CAACQ,GAAD,CAAH,CAASqT,MAAT,CAAP,KAA4B,UAAhC,EAA4C;EAC1C7T,UAAAA,GAAG,CAACQ,GAAD,CAAH,CAASqT,MAAT,IAAmB7T,GAAG,CAACQ,GAAD,CAAH,CAASqT,MAAT,EAAiB9N,IAAjB,CAAsBC,QAAtB,CAAnB;EACD;EACF,OAJD;EAKD;;EACDA,IAAAA,QAAQ,CAACxF,GAAD,CAAR,GAAgBR,GAAG,CAACQ,GAAD,CAAnB;EACD,GATD;EAUD;;EC5GD,IAAIsT,OAAJ;;EAEA,SAASC,WAAT,GAAuB;EACrB,MAAM9P,MAAM,GAAGF,SAAS,EAAxB;EACA,MAAMtB,QAAQ,GAAGF,WAAW,EAA5B;EAEA,SAAO;EACLyR,IAAAA,KAAK,EAAE,CAAC,EACN,kBAAkB/P,MAAlB,IACCA,MAAM,CAACgQ,aAAP,IAAwBxR,QAAQ,YAAYwB,MAAM,CAACgQ,aAF9C,CADH;EAMLC,IAAAA,aAAa,EACX,CAAC,CAACjQ,MAAM,CAACkQ,YAAT,IACA,oBAAoBlQ,MAAM,CAACtB,SAD3B,IAEAsB,MAAM,CAACtB,SAAP,CAAiByR,cAAjB,IAAmC,CAThC;EAWLC,IAAAA,QAAQ,EAAG,SAASC,aAAT,GAAyB;EAClC,aAAO,sBAAsBrQ,MAAtB,IAAgC,4BAA4BA,MAAnE;EACD,KAFS,EAXL;EAeLsQ,IAAAA,eAAe,EAAG,SAASC,oBAAT,GAAgC;EAChD,UAAIC,eAAe,GAAG,KAAtB;;EACA,UAAI;EACF,YAAMC,IAAI,GAAGxU,MAAM,CAACqH,cAAP,CAAsB,EAAtB,EAA0B,SAA1B,EAAqC;EAChD;EACAZ,UAAAA,GAFgD,iBAE1C;EACJ8N,YAAAA,eAAe,GAAG,IAAlB;EACD;EAJ+C,SAArC,CAAb;EAMAxQ,QAAAA,MAAM,CAACrD,gBAAP,CAAwB,qBAAxB,EAA+C,IAA/C,EAAqD8T,IAArD;EACD,OARD,CAQE,OAAOrP,CAAP,EAAU;EAEX;;EACD,aAAOoP,eAAP;EACD,KAdgB,EAfZ;EA+BLE,IAAAA,QAAQ,EAAG,SAASC,aAAT,GAAyB;EAClC,aAAO,oBAAoB3Q,MAA3B;EACD,KAFS;EA/BL,GAAP;EAmCD;;EAED,SAAS4Q,UAAT,GAAsB;EACpB,MAAI,CAACf,OAAL,EAAc;EACZA,IAAAA,OAAO,GAAGC,WAAW,EAArB;EACD;;EACD,SAAOD,OAAP;EACD;;EC/CD,IAAIgB,MAAJ;;EAEA,SAASC,UAAT,QAAwC;EAAA,gCAAJ,EAAI;EAAA,MAAlBnS,SAAkB,QAAlBA,SAAkB;;EACtC,MAAMkR,OAAO,GAAGe,UAAU,EAA1B;EACA,MAAM5Q,MAAM,GAAGF,SAAS,EAAxB;EACA,MAAMiR,QAAQ,GAAG/Q,MAAM,CAACtB,SAAP,CAAiBqS,QAAlC;EACA,MAAMC,EAAE,GAAGrS,SAAS,IAAIqB,MAAM,CAACtB,SAAP,CAAiBC,SAAzC;EAEA,MAAMkS,MAAM,GAAG;EACbI,IAAAA,GAAG,EAAE,KADQ;EAEbC,IAAAA,OAAO,EAAE;EAFI,GAAf;EAKA,MAAMC,WAAW,GAAGnR,MAAM,CAACV,MAAP,CAAc8R,KAAlC;EACA,MAAMC,YAAY,GAAGrR,MAAM,CAACV,MAAP,CAAcgS,MAAnC;EAEA,MAAMJ,OAAO,GAAGF,EAAE,CAACO,KAAH,CAAS,6BAAT,CAAhB,CAdsC;;EAetC,MAAIC,IAAI,GAAGR,EAAE,CAACO,KAAH,CAAS,sBAAT,CAAX;EACA,MAAME,IAAI,GAAGT,EAAE,CAACO,KAAH,CAAS,yBAAT,CAAb;EACA,MAAMG,MAAM,GAAG,CAACF,IAAD,IAASR,EAAE,CAACO,KAAH,CAAS,4BAAT,CAAxB;EACA,MAAMI,OAAO,GAAGZ,QAAQ,KAAK,OAA7B;EACA,MAAIa,KAAK,GAAGb,QAAQ,KAAK,UAAzB,CAnBsC;;EAsBtC,MAAMc,WAAW,GAAG,CAClB,WADkB,EAElB,WAFkB,EAGlB,UAHkB,EAIlB,UAJkB,EAKlB,UALkB,EAMlB,UANkB,EAOlB,UAPkB,EAQlB,UARkB,EASlB,UATkB,EAUlB,UAVkB,EAWlB,UAXkB,EAYlB,UAZkB,CAApB;;EAcA,MACE,CAACL,IAAD,IACAI,KADA,IAEA/B,OAAO,CAACE,KAFR,IAGA8B,WAAW,CAAC1P,OAAZ,CAAuBgP,WAAvB,SAAsCE,YAAtC,KAAyD,CAJ3D,EAKE;EACAG,IAAAA,IAAI,GAAGR,EAAE,CAACO,KAAH,CAAS,qBAAT,CAAP;EACA,QAAI,CAACC,IAAL,EAAWA,IAAI,GAAG,CAAC,CAAD,EAAI,CAAJ,EAAO,QAAP,CAAP;EACXI,IAAAA,KAAK,GAAG,KAAR;EACD,GA7CqC;;;EAgDtC,MAAIV,OAAO,IAAI,CAACS,OAAhB,EAAyB;EACvBd,IAAAA,MAAM,CAACiB,EAAP,GAAY,SAAZ;EACAjB,IAAAA,MAAM,CAACK,OAAP,GAAiB,IAAjB;EACD;;EACD,MAAIM,IAAI,IAAIE,MAAR,IAAkBD,IAAtB,EAA4B;EAC1BZ,IAAAA,MAAM,CAACiB,EAAP,GAAY,KAAZ;EACAjB,IAAAA,MAAM,CAACI,GAAP,GAAa,IAAb;EACD,GAvDqC;;;EA0DtC,SAAOJ,MAAP;EACD;;EAED,SAASkB,SAAT,CAAmBC,SAAnB,EAAmC;EAAA,MAAhBA,SAAgB;EAAhBA,IAAAA,SAAgB,GAAJ,EAAI;EAAA;;EACjC,MAAI,CAACnB,MAAL,EAAa;EACXA,IAAAA,MAAM,GAAGC,UAAU,CAACkB,SAAD,CAAnB;EACD;;EACD,SAAOnB,MAAP;EACD;;ECrED,IAAIoB,OAAJ;;EAEA,SAASC,WAAT,GAAuB;EACrB,MAAMlS,MAAM,GAAGF,SAAS,EAAxB;;EACA,WAASqS,QAAT,GAAoB;EAClB,QAAMnB,EAAE,GAAGhR,MAAM,CAACtB,SAAP,CAAiBC,SAAjB,CAA2ByT,WAA3B,EAAX;EACA,WAAOpB,EAAE,CAAC7O,OAAH,CAAW,QAAX,KAAwB,CAAxB,IAA6B6O,EAAE,CAAC7O,OAAH,CAAW,QAAX,IAAuB,CAApD,IAAyD6O,EAAE,CAAC7O,OAAH,CAAW,SAAX,IAAwB,CAAxF;EACD;;EACD,SAAO;EACLkQ,IAAAA,MAAM,EAAE,CAAC,CAACrS,MAAM,CAACtB,SAAP,CAAiBC,SAAjB,CAA2B4S,KAA3B,CAAiC,OAAjC,CADL;EAELY,IAAAA,QAAQ,EAAEA,QAAQ,EAFb;EAGLG,IAAAA,SAAS,EAAE,+CAA+CC,IAA/C,CAAoDvS,MAAM,CAACtB,SAAP,CAAiBC,SAArE;EAHN,GAAP;EAKD;;EAED,SAAS6T,UAAT,GAAsB;EACpB,MAAI,CAACP,OAAL,EAAc;EACZA,IAAAA,OAAO,GAAGC,WAAW,EAArB;EACD;;EACD,SAAOD,OAAP;EACD;;ACnBD,eAAe;EACbQ,EAAAA,IAAI,EAAE,QADO;EAEbpS,EAAAA,MAFa,oBAEJ;EACP,QAAMqS,MAAM,GAAG,IAAf;EACAxW,IAAAA,QAAM,CAACwW,MAAD,EAAS;EACbC,MAAAA,MAAM,EAAE;EACNC,QAAAA,aADM,2BACU;EACd,cAAI,CAACF,MAAD,IAAWA,MAAM,CAACG,SAAlB,IAA+B,CAACH,MAAM,CAACI,WAA3C,EAAwD;EACxDJ,UAAAA,MAAM,CAACK,IAAP,CAAY,cAAZ;EACAL,UAAAA,MAAM,CAACK,IAAP,CAAY,QAAZ;EACD,SALK;EAMNC,QAAAA,wBANM,sCAMqB;EACzB,cAAI,CAACN,MAAD,IAAWA,MAAM,CAACG,SAAlB,IAA+B,CAACH,MAAM,CAACI,WAA3C,EAAwD;EACxDJ,UAAAA,MAAM,CAACK,IAAP,CAAY,mBAAZ;EACD;EATK;EADK,KAAT,CAAN;EAaD,GAjBY;EAkBb3L,EAAAA,EAAE,EAAE;EACF6L,IAAAA,IADE,gBACGP,MADH,EACW;EACX,UAAM1S,MAAM,GAAGF,SAAS,EAAxB,CADW;;EAGXE,MAAAA,MAAM,CAACrD,gBAAP,CAAwB,QAAxB,EAAkC+V,MAAM,CAACC,MAAP,CAAcC,aAAhD,EAHW;;EAMX5S,MAAAA,MAAM,CAACrD,gBAAP,CAAwB,mBAAxB,EAA6C+V,MAAM,CAACC,MAAP,CAAcK,wBAA3D;EACD,KARC;EASFE,IAAAA,OATE,mBASMR,MATN,EASc;EACd,UAAM1S,MAAM,GAAGF,SAAS,EAAxB;EACAE,MAAAA,MAAM,CAACpD,mBAAP,CAA2B,QAA3B,EAAqC8V,MAAM,CAACC,MAAP,CAAcC,aAAnD;EACA5S,MAAAA,MAAM,CAACpD,mBAAP,CAA2B,mBAA3B,EAAgD8V,MAAM,CAACC,MAAP,CAAcK,wBAA9D;EACD;EAbC;EAlBS,CAAf;;ECAA,IAAMG,QAAQ,GAAG;EACfC,EAAAA,MADe,kBACRjX,MADQ,EACAkX,OADA,EACc;EAAA,QAAdA,OAAc;EAAdA,MAAAA,OAAc,GAAJ,EAAI;EAAA;;EAC3B,QAAMrT,MAAM,GAAGF,SAAS,EAAxB;EACA,QAAM4S,MAAM,GAAG,IAAf;EAEA,QAAMY,YAAY,GAAGtT,MAAM,CAACuT,gBAAP,IAA2BvT,MAAM,CAACwT,sBAAvD;EACA,QAAMpD,QAAQ,GAAG,IAAIkD,YAAJ,CAAiB,UAACG,SAAD,EAAe;EAC/C;EACA;EACA;EACA,UAAIA,SAAS,CAACjX,MAAV,KAAqB,CAAzB,EAA4B;EAC1BkW,QAAAA,MAAM,CAACK,IAAP,CAAY,gBAAZ,EAA8BU,SAAS,CAAC,CAAD,CAAvC;EACA;EACD;;EACD,UAAMC,cAAc,GAAG,SAASA,cAAT,GAA0B;EAC/ChB,QAAAA,MAAM,CAACK,IAAP,CAAY,gBAAZ,EAA8BU,SAAS,CAAC,CAAD,CAAvC;EACD,OAFD;;EAIA,UAAIzT,MAAM,CAACN,qBAAX,EAAkC;EAChCM,QAAAA,MAAM,CAACN,qBAAP,CAA6BgU,cAA7B;EACD,OAFD,MAEO;EACL1T,QAAAA,MAAM,CAACT,UAAP,CAAkBmU,cAAlB,EAAkC,CAAlC;EACD;EACF,KAjBgB,CAAjB;EAmBAtD,IAAAA,QAAQ,CAACuD,OAAT,CAAiBxX,MAAjB,EAAyB;EACvByX,MAAAA,UAAU,EAAE,OAAOP,OAAO,CAACO,UAAf,KAA8B,WAA9B,GAA4C,IAA5C,GAAmDP,OAAO,CAACO,UADhD;EAEvBC,MAAAA,SAAS,EAAE,OAAOR,OAAO,CAACQ,SAAf,KAA6B,WAA7B,GAA2C,IAA3C,GAAkDR,OAAO,CAACQ,SAF9C;EAGvBC,MAAAA,aAAa,EAAE,OAAOT,OAAO,CAACS,aAAf,KAAiC,WAAjC,GAA+C,IAA/C,GAAsDT,OAAO,CAACS;EAHtD,KAAzB;EAMApB,IAAAA,MAAM,CAACtC,QAAP,CAAgB2D,SAAhB,CAA0BrS,IAA1B,CAA+B0O,QAA/B;EACD,GAhCc;EAiCf6C,EAAAA,IAjCe,kBAiCR;EACL,QAAMP,MAAM,GAAG,IAAf;EACA,QAAI,CAACA,MAAM,CAAC7C,OAAP,CAAeO,QAAhB,IAA4B,CAACsC,MAAM,CAACsB,MAAP,CAAc5D,QAA/C,EAAyD;;EACzD,QAAIsC,MAAM,CAACsB,MAAP,CAAcC,cAAlB,EAAkC;EAChC,UAAMC,gBAAgB,GAAGxB,MAAM,CAACyB,GAAP,CAAWlM,OAAX,EAAzB;;EACA,WAAK,IAAI3D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4P,gBAAgB,CAAC1X,MAArC,EAA6C8H,CAAC,IAAI,CAAlD,EAAqD;EACnDoO,QAAAA,MAAM,CAACtC,QAAP,CAAgBgD,MAAhB,CAAuBc,gBAAgB,CAAC5P,CAAD,CAAvC;EACD;EACF,KARI;;;EAULoO,IAAAA,MAAM,CAACtC,QAAP,CAAgBgD,MAAhB,CAAuBV,MAAM,CAACyB,GAAP,CAAW,CAAX,CAAvB,EAAsC;EACpCN,MAAAA,SAAS,EAAEnB,MAAM,CAACsB,MAAP,CAAcI;EADW,KAAtC,EAVK;;EAeL1B,IAAAA,MAAM,CAACtC,QAAP,CAAgBgD,MAAhB,CAAuBV,MAAM,CAAC2B,UAAP,CAAkB,CAAlB,CAAvB,EAA6C;EAAET,MAAAA,UAAU,EAAE;EAAd,KAA7C;EACD,GAjDc;EAkDfV,EAAAA,OAlDe,qBAkDL;EACR,QAAMR,MAAM,GAAG,IAAf;EACAA,IAAAA,MAAM,CAACtC,QAAP,CAAgB2D,SAAhB,CAA0BzX,OAA1B,CAAkC,UAAC8T,QAAD,EAAc;EAC9CA,MAAAA,QAAQ,CAACkE,UAAT;EACD,KAFD;EAGA5B,IAAAA,MAAM,CAACtC,QAAP,CAAgB2D,SAAhB,GAA4B,EAA5B;EACD;EAxDc,CAAjB;AA2DA,mBAAe;EACbtB,EAAAA,IAAI,EAAE,UADO;EAEbuB,EAAAA,MAAM,EAAE;EACN5D,IAAAA,QAAQ,EAAE,KADJ;EAEN6D,IAAAA,cAAc,EAAE,KAFV;EAGNG,IAAAA,oBAAoB,EAAE;EAHhB,GAFK;EAOb/T,EAAAA,MAPa,oBAOJ;EACP,QAAMqS,MAAM,GAAG,IAAf;EACA/C,IAAAA,iBAAiB,CAAC+C,MAAD,EAAS;EACxBtC,MAAAA,QAAQ,eACH+C,QADG;EAENY,QAAAA,SAAS,EAAE;EAFL;EADgB,KAAT,CAAjB;EAMD,GAfY;EAgBb3M,EAAAA,EAAE,EAAE;EACF6L,IAAAA,IADE,gBACGP,MADH,EACW;EACXA,MAAAA,MAAM,CAACtC,QAAP,CAAgB6C,IAAhB;EACD,KAHC;EAIFC,IAAAA,OAJE,mBAIMR,MAJN,EAIc;EACdA,MAAAA,MAAM,CAACtC,QAAP,CAAgB8C,OAAhB;EACD;EANC;EAhBS,CAAf;;AC5DA,gBAAe;EACbqB,EAAAA,SADa,qBACHC,cADG,EACa;EACxB,QAAMzS,QAAQ,GAAG,IAAjB;EACA,QAAI,CAACA,QAAQ,CAAC0S,OAAd,EAAuB;EACvBxY,IAAAA,MAAM,CAACI,IAAP,CAAY0F,QAAQ,CAAC0S,OAArB,EAA8BnY,OAA9B,CAAsC,UAACoY,UAAD,EAAgB;EACpD,UAAMC,MAAM,GAAG5S,QAAQ,CAAC0S,OAAT,CAAiBC,UAAjB,CAAf,CADoD;;EAGpD,UAAIC,MAAM,CAACX,MAAX,EAAmB;EACjB9X,QAAAA,QAAM,CAACsY,cAAD,EAAiBG,MAAM,CAACX,MAAxB,CAAN;EACD;EACF,KAND;EAOD,GAXY;EAabY,EAAAA,UAba,sBAaFC,aAbE,EAakB;EAAA,QAApBA,aAAoB;EAApBA,MAAAA,aAAoB,GAAJ,EAAI;EAAA;;EAC7B,QAAM9S,QAAQ,GAAG,IAAjB;EACA,QAAI,CAACA,QAAQ,CAAC0S,OAAd,EAAuB;EACvBxY,IAAAA,MAAM,CAACI,IAAP,CAAY0F,QAAQ,CAAC0S,OAArB,EAA8BnY,OAA9B,CAAsC,UAACoY,UAAD,EAAgB;EACpD,UAAMC,MAAM,GAAG5S,QAAQ,CAAC0S,OAAT,CAAiBC,UAAjB,CAAf;EACA,UAAMI,YAAY,GAAGD,aAAa,CAACH,UAAD,CAAb,IAA6B,EAAlD,CAFoD;;EAKpD,UAAIC,MAAM,CAACvN,EAAP,IAAarF,QAAQ,CAACqF,EAA1B,EAA8B;EAC5BnL,QAAAA,MAAM,CAACI,IAAP,CAAYsY,MAAM,CAACvN,EAAnB,EAAuB9K,OAAvB,CAA+B,UAACyY,eAAD,EAAqB;EAClDhT,UAAAA,QAAQ,CAACqF,EAAT,CAAY2N,eAAZ,EAA6BJ,MAAM,CAACvN,EAAP,CAAU2N,eAAV,CAA7B;EACD,SAFD;EAGD,OATmD;;;EAYpD,UAAIJ,MAAM,CAACtU,MAAX,EAAmB;EACjBsU,QAAAA,MAAM,CAACtU,MAAP,CAAcyB,IAAd,CAAmBC,QAAnB,EAA6B+S,YAA7B;EACD;EACF,KAfD;EAgBD;EAhCY,CAAf;;ECFA;AAEA,sBAAe;EACb1N,EAAAA,EADa,cACVgB,MADU,EACFW,OADE,EACOiM,QADP,EACiB;EAC5B,QAAM9R,IAAI,GAAG,IAAb;EACA,QAAI,OAAO6F,OAAP,KAAmB,UAAvB,EAAmC,OAAO7F,IAAP;EACnC,QAAM+R,MAAM,GAAGD,QAAQ,GAAG,SAAH,GAAe,MAAtC;EACA5M,IAAAA,MAAM,CAAC5C,KAAP,CAAa,GAAb,EAAkBlJ,OAAlB,CAA0B,UAACgM,KAAD,EAAW;EACnC,UAAI,CAACpF,IAAI,CAACgS,eAAL,CAAqB5M,KAArB,CAAL,EAAkCpF,IAAI,CAACgS,eAAL,CAAqB5M,KAArB,IAA8B,EAA9B;EAClCpF,MAAAA,IAAI,CAACgS,eAAL,CAAqB5M,KAArB,EAA4B2M,MAA5B,EAAoClM,OAApC;EACD,KAHD;EAIA,WAAO7F,IAAP;EACD,GAVY;EAYbiS,EAAAA,IAZa,gBAYR/M,MAZQ,EAYAW,OAZA,EAYSiM,QAZT,EAYmB;EAC9B,QAAM9R,IAAI,GAAG,IAAb;EACA,QAAI,OAAO6F,OAAP,KAAmB,UAAvB,EAAmC,OAAO7F,IAAP;;EACnC,aAASkS,WAAT,GAA8B;EAC5BlS,MAAAA,IAAI,CAACyF,GAAL,CAASP,MAAT,EAAiBgN,WAAjB;;EACA,UAAIA,WAAW,CAACC,cAAhB,EAAgC;EAC9B,eAAOD,WAAW,CAACC,cAAnB;EACD;;EAJ2B,wCAAN9T,IAAM;EAANA,QAAAA,IAAM;EAAA;;EAK5BwH,MAAAA,OAAO,CAACpH,KAAR,CAAcuB,IAAd,EAAoB3B,IAApB;EACD;;EACD6T,IAAAA,WAAW,CAACC,cAAZ,GAA6BtM,OAA7B;EACA,WAAO7F,IAAI,CAACkE,EAAL,CAAQgB,MAAR,EAAgBgN,WAAhB,EAA6BJ,QAA7B,CAAP;EACD,GAxBY;EA0BbM,EAAAA,KA1Ba,iBA0BPvM,OA1BO,EA0BEiM,QA1BF,EA0BY;EACvB,QAAM9R,IAAI,GAAG,IAAb;EACA,QAAI,OAAO6F,OAAP,KAAmB,UAAvB,EAAmC,OAAO7F,IAAP;EACnC,QAAM+R,MAAM,GAAGD,QAAQ,GAAG,SAAH,GAAe,MAAtC;;EACA,QAAI9R,IAAI,CAACqS,kBAAL,CAAwBpT,OAAxB,CAAgC4G,OAAhC,IAA2C,CAA/C,EAAkD;EAChD7F,MAAAA,IAAI,CAACqS,kBAAL,CAAwBN,MAAxB,EAAgClM,OAAhC;EACD;;EACD,WAAO7F,IAAP;EACD,GAlCY;EAoCbsS,EAAAA,MApCa,kBAoCNzM,OApCM,EAoCG;EACd,QAAM7F,IAAI,GAAG,IAAb;EACA,QAAI,CAACA,IAAI,CAACqS,kBAAV,EAA8B,OAAOrS,IAAP;EAC9B,QAAMqI,KAAK,GAAGrI,IAAI,CAACqS,kBAAL,CAAwBpT,OAAxB,CAAgC4G,OAAhC,CAAd;;EACA,QAAIwC,KAAK,IAAI,CAAb,EAAgB;EACdrI,MAAAA,IAAI,CAACqS,kBAAL,CAAwBvM,MAAxB,CAA+BuC,KAA/B,EAAsC,CAAtC;EACD;;EACD,WAAOrI,IAAP;EACD,GA5CY;EA8CbyF,EAAAA,GA9Ca,eA8CTP,MA9CS,EA8CDW,OA9CC,EA8CQ;EACnB,QAAM7F,IAAI,GAAG,IAAb;EACA,QAAI,CAACA,IAAI,CAACgS,eAAV,EAA2B,OAAOhS,IAAP;EAC3BkF,IAAAA,MAAM,CAAC5C,KAAP,CAAa,GAAb,EAAkBlJ,OAAlB,CAA0B,UAACgM,KAAD,EAAW;EACnC,UAAI,OAAOS,OAAP,KAAmB,WAAvB,EAAoC;EAClC7F,QAAAA,IAAI,CAACgS,eAAL,CAAqB5M,KAArB,IAA8B,EAA9B;EACD,OAFD,MAEO,IAAIpF,IAAI,CAACgS,eAAL,CAAqB5M,KAArB,CAAJ,EAAiC;EACtCpF,QAAAA,IAAI,CAACgS,eAAL,CAAqB5M,KAArB,EAA4BhM,OAA5B,CAAoC,UAACmZ,YAAD,EAAelK,KAAf,EAAyB;EAC3D,cACEkK,YAAY,KAAK1M,OAAjB,IACC0M,YAAY,CAACJ,cAAb,IAA+BI,YAAY,CAACJ,cAAb,KAAgCtM,OAFlE,EAGE;EACA7F,YAAAA,IAAI,CAACgS,eAAL,CAAqB5M,KAArB,EAA4BU,MAA5B,CAAmCuC,KAAnC,EAA0C,CAA1C;EACD;EACF,SAPD;EAQD;EACF,KAbD;EAcA,WAAOrI,IAAP;EACD,GAhEY;EAkEb6P,EAAAA,IAlEa,kBAkEC;EACZ,QAAM7P,IAAI,GAAG,IAAb;EACA,QAAI,CAACA,IAAI,CAACgS,eAAV,EAA2B,OAAOhS,IAAP;EAC3B,QAAIkF,MAAJ;EACA,QAAIqB,IAAJ;EACA,QAAIhF,OAAJ;;EALY,uCAANlD,IAAM;EAANA,MAAAA,IAAM;EAAA;;EAMZ,QAAI,OAAOA,IAAI,CAAC,CAAD,CAAX,KAAmB,QAAnB,IAA+BqC,KAAK,CAACK,OAAN,CAAc1C,IAAI,CAAC,CAAD,CAAlB,CAAnC,EAA2D;EACzD6G,MAAAA,MAAM,GAAG7G,IAAI,CAAC,CAAD,CAAb;EACAkI,MAAAA,IAAI,GAAGlI,IAAI,CAACmU,KAAL,CAAW,CAAX,EAAcnU,IAAI,CAAC/E,MAAnB,CAAP;EACAiI,MAAAA,OAAO,GAAGvB,IAAV;EACD,KAJD,MAIO;EACLkF,MAAAA,MAAM,GAAG7G,IAAI,CAAC,CAAD,CAAJ,CAAQ6G,MAAjB;EACAqB,MAAAA,IAAI,GAAGlI,IAAI,CAAC,CAAD,CAAJ,CAAQkI,IAAf;EACAhF,MAAAA,OAAO,GAAGlD,IAAI,CAAC,CAAD,CAAJ,CAAQkD,OAAR,IAAmBvB,IAA7B;EACD;;EACDuG,IAAAA,IAAI,CAAC3B,OAAL,CAAarD,OAAb;EACA,QAAMkR,WAAW,GAAG/R,KAAK,CAACK,OAAN,CAAcmE,MAAd,IAAwBA,MAAxB,GAAiCA,MAAM,CAAC5C,KAAP,CAAa,GAAb,CAArD;EAEAmQ,IAAAA,WAAW,CAACrZ,OAAZ,CAAoB,UAACgM,KAAD,EAAW;EAC7B,UAAIpF,IAAI,CAACqS,kBAAL,IAA2BrS,IAAI,CAACqS,kBAAL,CAAwB/Y,MAAvD,EAA+D;EAC7D0G,QAAAA,IAAI,CAACqS,kBAAL,CAAwBjZ,OAAxB,CAAgC,UAACmZ,YAAD,EAAkB;EAChDA,UAAAA,YAAY,CAAC9T,KAAb,CAAmB8C,OAAnB,GAA6B6D,KAA7B,SAAuCmB,IAAvC;EACD,SAFD;EAGD;;EACD,UAAIvG,IAAI,CAACgS,eAAL,IAAwBhS,IAAI,CAACgS,eAAL,CAAqB5M,KAArB,CAA5B,EAAyD;EACvDpF,QAAAA,IAAI,CAACgS,eAAL,CAAqB5M,KAArB,EAA4BhM,OAA5B,CAAoC,UAACmZ,YAAD,EAAkB;EACpDA,UAAAA,YAAY,CAAC9T,KAAb,CAAmB8C,OAAnB,EAA4BgF,IAA5B;EACD,SAFD;EAGD;EACF,KAXD;EAYA,WAAOvG,IAAP;EACD;EAjGY,CAAf;;ECAe,SAAS0S,UAAT,GAAsB;EACnC,MAAMlD,MAAM,GAAG,IAAf;EACA,MAAItB,KAAJ;EACA,MAAIE,MAAJ;EACA,MAAM6C,GAAG,GAAGzB,MAAM,CAACyB,GAAnB;;EACA,MAAI,OAAOzB,MAAM,CAACsB,MAAP,CAAc5C,KAArB,KAA+B,WAA/B,IAA8CsB,MAAM,CAACsB,MAAP,CAAc5C,KAAd,KAAwB,IAA1E,EAAgF;EAC9EA,IAAAA,KAAK,GAAGsB,MAAM,CAACsB,MAAP,CAAc5C,KAAtB;EACD,GAFD,MAEO;EACLA,IAAAA,KAAK,GAAG+C,GAAG,CAAC,CAAD,CAAH,CAAO0B,WAAf;EACD;;EACD,MAAI,OAAOnD,MAAM,CAACsB,MAAP,CAAc1C,MAArB,KAAgC,WAAhC,IAA+CoB,MAAM,CAACsB,MAAP,CAAc1C,MAAd,KAAyB,IAA5E,EAAkF;EAChFA,IAAAA,MAAM,GAAGoB,MAAM,CAACsB,MAAP,CAAc1C,MAAvB;EACD,GAFD,MAEO;EACLA,IAAAA,MAAM,GAAG6C,GAAG,CAAC,CAAD,CAAH,CAAO2B,YAAhB;EACD;;EACD,MAAK1E,KAAK,KAAK,CAAV,IAAesB,MAAM,CAACqD,YAAP,EAAhB,IAA2CzE,MAAM,KAAK,CAAX,IAAgBoB,MAAM,CAACsD,UAAP,EAA/D,EAAqF;EACnF;EACD,GAjBkC;;;EAoBnC5E,EAAAA,KAAK,GACHA,KAAK,GACL6E,QAAQ,CAAC9B,GAAG,CAAChJ,GAAJ,CAAQ,cAAR,KAA2B,CAA5B,EAA+B,EAA/B,CADR,GAEA8K,QAAQ,CAAC9B,GAAG,CAAChJ,GAAJ,CAAQ,eAAR,KAA4B,CAA7B,EAAgC,EAAhC,CAHV;EAIAmG,EAAAA,MAAM,GACJA,MAAM,GACN2E,QAAQ,CAAC9B,GAAG,CAAChJ,GAAJ,CAAQ,aAAR,KAA0B,CAA3B,EAA8B,EAA9B,CADR,GAEA8K,QAAQ,CAAC9B,GAAG,CAAChJ,GAAJ,CAAQ,gBAAR,KAA6B,CAA9B,EAAiC,EAAjC,CAHV;EAKA,MAAI+K,MAAM,CAACC,KAAP,CAAa/E,KAAb,CAAJ,EAAyBA,KAAK,GAAG,CAAR;EACzB,MAAI8E,MAAM,CAACC,KAAP,CAAa7E,MAAb,CAAJ,EAA0BA,MAAM,GAAG,CAAT;EAE1BpV,EAAAA,QAAM,CAACwW,MAAD,EAAS;EACbtB,IAAAA,KAAK,EAALA,KADa;EAEbE,IAAAA,MAAM,EAANA,MAFa;EAGb8E,IAAAA,IAAI,EAAE1D,MAAM,CAACqD,YAAP,KAAwB3E,KAAxB,GAAgCE;EAHzB,GAAT,CAAN;EAKD;;ECpCc,SAAS+E,YAAT,GAAwB;EACrC,MAAM3D,MAAM,GAAG,IAAf;EACA,MAAM1S,MAAM,GAAGF,SAAS,EAAxB;EACA,MAAMkU,MAAM,GAAGtB,MAAM,CAACsB,MAAtB;EAHqC,MAK7BK,UAL6B,GAKiC3B,MALjC,CAK7B2B,UAL6B;EAAA,MAKXiC,UALW,GAKiC5D,MALjC,CAKjB0D,IALiB;EAAA,MAKeG,GALf,GAKiC7D,MALjC,CAKC8D,YALD;EAAA,MAKoBC,QALpB,GAKiC/D,MALjC,CAKoB+D,QALpB;EAMrC,MAAMC,SAAS,GAAGhE,MAAM,CAACiE,OAAP,IAAkB3C,MAAM,CAAC2C,OAAP,CAAeC,OAAnD;EACA,MAAMC,oBAAoB,GAAGH,SAAS,GAAGhE,MAAM,CAACiE,OAAP,CAAeG,MAAf,CAAsBta,MAAzB,GAAkCkW,MAAM,CAACoE,MAAP,CAActa,MAAtF;EACA,MAAMsa,MAAM,GAAGzC,UAAU,CAAC/W,QAAX,OAAwBoV,MAAM,CAACsB,MAAP,CAAc+C,UAAtC,CAAf;EACA,MAAMC,YAAY,GAAGN,SAAS,GAAGhE,MAAM,CAACiE,OAAP,CAAeG,MAAf,CAAsBta,MAAzB,GAAkCsa,MAAM,CAACta,MAAvE;EACA,MAAIya,QAAQ,GAAG,EAAf;EACA,MAAMC,UAAU,GAAG,EAAnB;EACA,MAAMC,eAAe,GAAG,EAAxB;;EAEA,WAASC,eAAT,CAAyBC,OAAzB,EAAkCC,UAAlC,EAA8C;EAC5C,QAAI,CAACtD,MAAM,CAACuD,OAAZ,EAAqB,OAAO,IAAP;;EACrB,QAAID,UAAU,KAAKR,MAAM,CAACta,MAAP,GAAgB,CAAnC,EAAsC;EACpC,aAAO,KAAP;EACD;;EACD,WAAO,IAAP;EACD;;EAED,MAAIgb,YAAY,GAAGxD,MAAM,CAACyD,kBAA1B;;EACA,MAAI,OAAOD,YAAP,KAAwB,UAA5B,EAAwC;EACtCA,IAAAA,YAAY,GAAGxD,MAAM,CAACyD,kBAAP,CAA0BtW,IAA1B,CAA+BuR,MAA/B,CAAf;EACD;;EAED,MAAIgF,WAAW,GAAG1D,MAAM,CAAC2D,iBAAzB;;EACA,MAAI,OAAOD,WAAP,KAAuB,UAA3B,EAAuC;EACrCA,IAAAA,WAAW,GAAG1D,MAAM,CAAC2D,iBAAP,CAAyBxW,IAAzB,CAA8BuR,MAA9B,CAAd;EACD;;EAED,MAAMkF,sBAAsB,GAAGlF,MAAM,CAACuE,QAAP,CAAgBza,MAA/C;EACA,MAAMqb,wBAAwB,GAAGnF,MAAM,CAACwE,UAAP,CAAkB1a,MAAnD;EAEA,MAAIsb,YAAY,GAAG9D,MAAM,CAAC8D,YAA1B;EACA,MAAIC,aAAa,GAAG,CAACP,YAArB;EACA,MAAIQ,aAAa,GAAG,CAApB;EACA,MAAIzM,KAAK,GAAG,CAAZ;;EACA,MAAI,OAAO+K,UAAP,KAAsB,WAA1B,EAAuC;EACrC;EACD;;EACD,MAAI,OAAOwB,YAAP,KAAwB,QAAxB,IAAoCA,YAAY,CAAC3V,OAAb,CAAqB,GAArB,KAA6B,CAArE,EAAwE;EACtE2V,IAAAA,YAAY,GAAI1N,UAAU,CAAC0N,YAAY,CAACnJ,OAAb,CAAqB,GAArB,EAA0B,EAA1B,CAAD,CAAV,GAA4C,GAA7C,GAAoD2H,UAAnE;EACD;;EAED5D,EAAAA,MAAM,CAACuF,WAAP,GAAqB,CAACH,YAAtB,CA9CqC;;EAiDrC,MAAIvB,GAAJ,EAASO,MAAM,CAAC3L,GAAP,CAAW;EAAE+M,IAAAA,UAAU,EAAE,EAAd;EAAkBC,IAAAA,SAAS,EAAE;EAA7B,GAAX,EAAT,KACKrB,MAAM,CAAC3L,GAAP,CAAW;EAAEiN,IAAAA,WAAW,EAAE,EAAf;EAAmBC,IAAAA,YAAY,EAAE;EAAjC,GAAX;EAEL,MAAIC,sBAAJ;;EACA,MAAItE,MAAM,CAACuE,eAAP,GAAyB,CAA7B,EAAgC;EAC9B,QACEC,IAAI,CAACC,KAAL,CAAWzB,YAAY,GAAGhD,MAAM,CAACuE,eAAjC,MACAvB,YAAY,GAAGtE,MAAM,CAACsB,MAAP,CAAcuE,eAF/B,EAGE;EACAD,MAAAA,sBAAsB,GAAGtB,YAAzB;EACD,KALD,MAKO;EACLsB,MAAAA,sBAAsB,GACpBE,IAAI,CAACE,IAAL,CAAU1B,YAAY,GAAGhD,MAAM,CAACuE,eAAhC,IAAmDvE,MAAM,CAACuE,eAD5D;EAED;;EACD,QAAIvE,MAAM,CAAC2E,aAAP,KAAyB,MAAzB,IAAmC3E,MAAM,CAAC4E,mBAAP,KAA+B,KAAtE,EAA6E;EAC3EN,MAAAA,sBAAsB,GAAGE,IAAI,CAACK,GAAL,CACvBP,sBADuB,EAEvBtE,MAAM,CAAC2E,aAAP,GAAuB3E,MAAM,CAACuE,eAFP,CAAzB;EAID;EACF,GArEoC;;;EAwErC,MAAIO,SAAJ;EACA,MAAMP,eAAe,GAAGvE,MAAM,CAACuE,eAA/B;EACA,MAAMQ,YAAY,GAAGT,sBAAsB,GAAGC,eAA9C;EACA,MAAMS,cAAc,GAAGR,IAAI,CAACC,KAAL,CAAWzB,YAAY,GAAGhD,MAAM,CAACuE,eAAjC,CAAvB;;EACA,OAAK,IAAIjU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0S,YAApB,EAAkC1S,CAAC,IAAI,CAAvC,EAA0C;EACxCwU,IAAAA,SAAS,GAAG,CAAZ;EACA,QAAMG,KAAK,GAAGnC,MAAM,CAAC7K,EAAP,CAAU3H,CAAV,CAAd;;EACA,QAAI0P,MAAM,CAACuE,eAAP,GAAyB,CAA7B,EAAgC;EAC9B;EACA,UAAIW,kBAAkB,SAAtB;EACA,UAAIC,MAAM,SAAV;EACA,UAAIC,GAAG,SAAP;;EACA,UAAIpF,MAAM,CAAC4E,mBAAP,KAA+B,KAA/B,IAAwC5E,MAAM,CAACqF,cAAP,GAAwB,CAApE,EAAuE;EACrE,YAAMC,UAAU,GAAGd,IAAI,CAACC,KAAL,CAAWnU,CAAC,IAAI0P,MAAM,CAACqF,cAAP,GAAwBrF,MAAM,CAACuE,eAAnC,CAAZ,CAAnB;EACA,YAAMgB,iBAAiB,GAAGjV,CAAC,GAAG0P,MAAM,CAACuE,eAAP,GAAyBvE,MAAM,CAACqF,cAAhC,GAAiDC,UAA/E;EACA,YAAME,cAAc,GAClBF,UAAU,KAAK,CAAf,GACItF,MAAM,CAACqF,cADX,GAEIb,IAAI,CAACiB,GAAL,CACEjB,IAAI,CAACE,IAAL,CACE,CAAC1B,YAAY,GAAGsC,UAAU,GAAGf,eAAb,GAA+BvE,MAAM,CAACqF,cAAtD,IACEd,eAFJ,CADF,EAKEvE,MAAM,CAACqF,cALT,CAHN;EAUAD,QAAAA,GAAG,GAAGZ,IAAI,CAACC,KAAL,CAAWc,iBAAiB,GAAGC,cAA/B,CAAN;EACAL,QAAAA,MAAM,GAAGI,iBAAiB,GAAGH,GAAG,GAAGI,cAA1B,GAA2CF,UAAU,GAAGtF,MAAM,CAACqF,cAAxE;EAEAH,QAAAA,kBAAkB,GAAGC,MAAM,GAAIC,GAAG,GAAGd,sBAAP,GAAiCC,eAA/D;EACAU,QAAAA,KAAK,CAAC9N,GAAN,CAAU;EACR,uCAA6B+N,kBADrB;EAER,oCAA0BA,kBAFlB;EAGR,4BAAkBA,kBAHV;EAIR,2BAAiBA,kBAJT;EAKRQ,UAAAA,KAAK,EAAER;EALC,SAAV;EAOD,OAxBD,MAwBO,IAAIlF,MAAM,CAAC4E,mBAAP,KAA+B,QAAnC,EAA6C;EAClDO,QAAAA,MAAM,GAAGX,IAAI,CAACC,KAAL,CAAWnU,CAAC,GAAGiU,eAAf,CAAT;EACAa,QAAAA,GAAG,GAAG9U,CAAC,GAAG6U,MAAM,GAAGZ,eAAnB;;EACA,YAAIY,MAAM,GAAGH,cAAT,IAA4BG,MAAM,KAAKH,cAAX,IAA6BI,GAAG,KAAKb,eAAe,GAAG,CAAvF,EAA2F;EACzFa,UAAAA,GAAG,IAAI,CAAP;;EACA,cAAIA,GAAG,IAAIb,eAAX,EAA4B;EAC1Ba,YAAAA,GAAG,GAAG,CAAN;EACAD,YAAAA,MAAM,IAAI,CAAV;EACD;EACF;EACF,OAVM,MAUA;EACLC,QAAAA,GAAG,GAAGZ,IAAI,CAACC,KAAL,CAAWnU,CAAC,GAAGyU,YAAf,CAAN;EACAI,QAAAA,MAAM,GAAG7U,CAAC,GAAG8U,GAAG,GAAGL,YAAnB;EACD;;EACDE,MAAAA,KAAK,CAAC9N,GAAN,cACYuH,MAAM,CAACqD,YAAP,KAAwB,KAAxB,GAAgC,MAD5C,GAEEqD,GAAG,KAAK,CAAR,IAAapF,MAAM,CAAC8D,YAApB,IAAuC9D,MAAM,CAAC8D,YAA9C,OAFF;EAID;;EACD,QAAImB,KAAK,CAAC9N,GAAN,CAAU,SAAV,MAAyB,MAA7B,EAAqC,SAnDG;;EAqDxC,QAAI6I,MAAM,CAAC2E,aAAP,KAAyB,MAA7B,EAAqC;EACnC,UAAMgB,WAAW,GAAG3Z,MAAM,CAACd,gBAAP,CAAwB+Z,KAAK,CAAC,CAAD,CAA7B,EAAkC,IAAlC,CAApB;EACA,UAAMW,gBAAgB,GAAGX,KAAK,CAAC,CAAD,CAAL,CAASzb,KAAT,CAAewJ,SAAxC;EACA,UAAM6S,sBAAsB,GAAGZ,KAAK,CAAC,CAAD,CAAL,CAASzb,KAAT,CAAekR,eAA9C;;EACA,UAAIkL,gBAAJ,EAAsB;EACpBX,QAAAA,KAAK,CAAC,CAAD,CAAL,CAASzb,KAAT,CAAewJ,SAAf,GAA2B,MAA3B;EACD;;EACD,UAAI6S,sBAAJ,EAA4B;EAC1BZ,QAAAA,KAAK,CAAC,CAAD,CAAL,CAASzb,KAAT,CAAekR,eAAf,GAAiC,MAAjC;EACD;;EACD,UAAIsF,MAAM,CAAC8F,YAAX,EAAyB;EACvBhB,QAAAA,SAAS,GAAGpG,MAAM,CAACqD,YAAP,KAAwBkD,KAAK,CAAClP,UAAN,CAAiB,IAAjB,CAAxB,GAAiDkP,KAAK,CAAC5O,WAAN,CAAkB,IAAlB,CAA7D;EACD,OAFD,MAEO;EACL;EACA,YAAIqI,MAAM,CAACqD,YAAP,EAAJ,EAA2B;EACzB,cAAM3E,KAAK,GAAGhH,UAAU,CAACuP,WAAW,CAACxa,gBAAZ,CAA6B,OAA7B,KAAyC,CAA1C,CAAxB;EACA,cAAM4a,WAAW,GAAG3P,UAAU,CAACuP,WAAW,CAACxa,gBAAZ,CAA6B,cAA7B,KAAgD,CAAjD,CAA9B;EACA,cAAM6a,YAAY,GAAG5P,UAAU,CAACuP,WAAW,CAACxa,gBAAZ,CAA6B,eAA7B,KAAiD,CAAlD,CAA/B;EACA,cAAM+Y,UAAU,GAAG9N,UAAU,CAACuP,WAAW,CAACxa,gBAAZ,CAA6B,aAA7B,KAA+C,CAAhD,CAA7B;EACA,cAAMiZ,WAAW,GAAGhO,UAAU,CAACuP,WAAW,CAACxa,gBAAZ,CAA6B,cAA7B,KAAgD,CAAjD,CAA9B;EACA,cAAM8a,SAAS,GAAGN,WAAW,CAACxa,gBAAZ,CAA6B,YAA7B,CAAlB;;EACA,cAAI8a,SAAS,IAAIA,SAAS,KAAK,YAA/B,EAA6C;EAC3CnB,YAAAA,SAAS,GAAG1H,KAAK,GAAG8G,UAAR,GAAqBE,WAAjC;EACD,WAFD,MAEO;EAAA,0BACgCa,KAAK,CAAC,CAAD,CADrC;EAAA,gBACGpD,WADH,WACGA,WADH;EAAA,gBACgB1L,WADhB,WACgBA,WADhB;EAEL2O,YAAAA,SAAS,GACP1H,KAAK,GACL2I,WADA,GAEAC,YAFA,GAGA9B,UAHA,GAIAE,WAJA,IAKCjO,WAAW,GAAG0L,WALf,CADF;EAOD;EACF,SAnBD,MAmBO;EACL,cAAMvE,MAAM,GAAGlH,UAAU,CAACuP,WAAW,CAACxa,gBAAZ,CAA6B,QAA7B,KAA0C,CAA3C,CAAzB;EACA,cAAM+a,UAAU,GAAG9P,UAAU,CAACuP,WAAW,CAACxa,gBAAZ,CAA6B,aAA7B,KAA+C,CAAhD,CAA7B;EACA,cAAMgb,aAAa,GAAG/P,UAAU,CAACuP,WAAW,CAACxa,gBAAZ,CAA6B,gBAA7B,KAAkD,CAAnD,CAAhC;EACA,cAAMgZ,SAAS,GAAG/N,UAAU,CAACuP,WAAW,CAACxa,gBAAZ,CAA6B,YAA7B,KAA8C,CAA/C,CAA5B;EACA,cAAMkZ,YAAY,GAAGjO,UAAU,CAACuP,WAAW,CAACxa,gBAAZ,CAA6B,eAA7B,KAAiD,CAAlD,CAA/B;;EACA,cAAM8a,UAAS,GAAGN,WAAW,CAACxa,gBAAZ,CAA6B,YAA7B,CAAlB;;EACA,cAAI8a,UAAS,IAAIA,UAAS,KAAK,YAA/B,EAA6C;EAC3CnB,YAAAA,SAAS,GAAGxH,MAAM,GAAG6G,SAAT,GAAqBE,YAAjC;EACD,WAFD,MAEO;EAAA,2BACkCY,KAAK,CAAC,CAAD,CADvC;EAAA,gBACGnD,YADH,YACGA,YADH;EAAA,gBACiBvL,YADjB,YACiBA,YADjB;EAELuO,YAAAA,SAAS,GACPxH,MAAM,GACN4I,UADA,GAEAC,aAFA,GAGAhC,SAHA,GAIAE,YAJA,IAKC9N,YAAY,GAAGuL,YALhB,CADF;EAOD;EACF;EACF;;EACD,UAAI8D,gBAAJ,EAAsB;EACpBX,QAAAA,KAAK,CAAC,CAAD,CAAL,CAASzb,KAAT,CAAewJ,SAAf,GAA2B4S,gBAA3B;EACD;;EACD,UAAIC,sBAAJ,EAA4B;EAC1BZ,QAAAA,KAAK,CAAC,CAAD,CAAL,CAASzb,KAAT,CAAekR,eAAf,GAAiCmL,sBAAjC;EACD;;EACD,UAAI7F,MAAM,CAAC8F,YAAX,EAAyBhB,SAAS,GAAGN,IAAI,CAACC,KAAL,CAAWK,SAAX,CAAZ;EAC1B,KA7DD,MA6DO;EACLA,MAAAA,SAAS,GAAG,CAACxC,UAAU,GAAG,CAACtC,MAAM,CAAC2E,aAAP,GAAuB,CAAxB,IAA6Bb,YAA3C,IAA2D9D,MAAM,CAAC2E,aAA9E;EACA,UAAI3E,MAAM,CAAC8F,YAAX,EAAyBhB,SAAS,GAAGN,IAAI,CAACC,KAAL,CAAWK,SAAX,CAAZ;;EAEzB,UAAIhC,MAAM,CAACxS,CAAD,CAAV,EAAe;EACb,YAAIoO,MAAM,CAACqD,YAAP,EAAJ,EAA2B;EACzBe,UAAAA,MAAM,CAACxS,CAAD,CAAN,CAAU9G,KAAV,CAAgB4T,KAAhB,GAA2B0H,SAA3B;EACD,SAFD,MAEO;EACLhC,UAAAA,MAAM,CAACxS,CAAD,CAAN,CAAU9G,KAAV,CAAgB8T,MAAhB,GAA4BwH,SAA5B;EACD;EACF;EACF;;EACD,QAAIhC,MAAM,CAACxS,CAAD,CAAV,EAAe;EACbwS,MAAAA,MAAM,CAACxS,CAAD,CAAN,CAAU8V,eAAV,GAA4BtB,SAA5B;EACD;;EACD3B,IAAAA,eAAe,CAACzV,IAAhB,CAAqBoX,SAArB;;EAEA,QAAI9E,MAAM,CAACqG,cAAX,EAA2B;EACzBtC,MAAAA,aAAa,GAAGA,aAAa,GAAGe,SAAS,GAAG,CAA5B,GAAgCd,aAAa,GAAG,CAAhD,GAAoDF,YAApE;EACA,UAAIE,aAAa,KAAK,CAAlB,IAAuB1T,CAAC,KAAK,CAAjC,EACEyT,aAAa,GAAGA,aAAa,GAAGzB,UAAU,GAAG,CAA7B,GAAiCwB,YAAjD;EACF,UAAIxT,CAAC,KAAK,CAAV,EAAayT,aAAa,GAAGA,aAAa,GAAGzB,UAAU,GAAG,CAA7B,GAAiCwB,YAAjD;EACb,UAAIU,IAAI,CAAC8B,GAAL,CAASvC,aAAT,IAA0B,IAAI,IAAlC,EAAwCA,aAAa,GAAG,CAAhB;EACxC,UAAI/D,MAAM,CAAC8F,YAAX,EAAyB/B,aAAa,GAAGS,IAAI,CAACC,KAAL,CAAWV,aAAX,CAAhB;EACzB,UAAIxM,KAAK,GAAGyI,MAAM,CAACqF,cAAf,KAAkC,CAAtC,EAAyCpC,QAAQ,CAACvV,IAAT,CAAcqW,aAAd;EACzCb,MAAAA,UAAU,CAACxV,IAAX,CAAgBqW,aAAhB;EACD,KATD,MASO;EACL,UAAI/D,MAAM,CAAC8F,YAAX,EAAyB/B,aAAa,GAAGS,IAAI,CAACC,KAAL,CAAWV,aAAX,CAAhB;EACzB,UACE,CAACxM,KAAK,GAAGiN,IAAI,CAACiB,GAAL,CAAS/G,MAAM,CAACsB,MAAP,CAAcuG,kBAAvB,EAA2ChP,KAA3C,CAAT,IACEmH,MAAM,CAACsB,MAAP,CAAcqF,cADhB,KAEA,CAHF,EAKEpC,QAAQ,CAACvV,IAAT,CAAcqW,aAAd;EACFb,MAAAA,UAAU,CAACxV,IAAX,CAAgBqW,aAAhB;EACAA,MAAAA,aAAa,GAAGA,aAAa,GAAGe,SAAhB,GAA4BhB,YAA5C;EACD;;EAEDpF,IAAAA,MAAM,CAACuF,WAAP,IAAsBa,SAAS,GAAGhB,YAAlC;EAEAE,IAAAA,aAAa,GAAGc,SAAhB;EAEAvN,IAAAA,KAAK,IAAI,CAAT;EACD;;EACDmH,EAAAA,MAAM,CAACuF,WAAP,GAAqBO,IAAI,CAACK,GAAL,CAASnG,MAAM,CAACuF,WAAhB,EAA6B3B,UAA7B,IAA2CoB,WAAhE;EACA,MAAI8C,aAAJ;;EAEA,MAAIjE,GAAG,IAAIE,QAAP,KAAoBzC,MAAM,CAACyG,MAAP,KAAkB,OAAlB,IAA6BzG,MAAM,CAACyG,MAAP,KAAkB,WAAnE,CAAJ,EAAqF;EACnFpG,IAAAA,UAAU,CAAClJ,GAAX,CAAe;EAAEiG,MAAAA,KAAK,EAAKsB,MAAM,CAACuF,WAAP,GAAqBjE,MAAM,CAAC8D,YAAjC;EAAP,KAAf;EACD;;EACD,MAAI9D,MAAM,CAAC0G,cAAX,EAA2B;EACzB,QAAIhI,MAAM,CAACqD,YAAP,EAAJ,EACE1B,UAAU,CAAClJ,GAAX,CAAe;EACbiG,MAAAA,KAAK,EAAKsB,MAAM,CAACuF,WAAP,GAAqBjE,MAAM,CAAC8D,YAAjC;EADQ,KAAf,EADF,KAKEzD,UAAU,CAAClJ,GAAX,CAAe;EACbmG,MAAAA,MAAM,EAAKoB,MAAM,CAACuF,WAAP,GAAqBjE,MAAM,CAAC8D,YAAjC;EADO,KAAf;EAGH;;EAED,MAAI9D,MAAM,CAACuE,eAAP,GAAyB,CAA7B,EAAgC;EAC9B7F,IAAAA,MAAM,CAACuF,WAAP,GAAqB,CAACa,SAAS,GAAG9E,MAAM,CAAC8D,YAApB,IAAoCQ,sBAAzD;EACA5F,IAAAA,MAAM,CAACuF,WAAP,GACEO,IAAI,CAACE,IAAL,CAAUhG,MAAM,CAACuF,WAAP,GAAqBjE,MAAM,CAACuE,eAAtC,IAAyDvE,MAAM,CAAC8D,YADlE;EAEA,QAAIpF,MAAM,CAACqD,YAAP,EAAJ,EACE1B,UAAU,CAAClJ,GAAX,CAAe;EACbiG,MAAAA,KAAK,EAAKsB,MAAM,CAACuF,WAAP,GAAqBjE,MAAM,CAAC8D,YAAjC;EADQ,KAAf,EADF,KAKEzD,UAAU,CAAClJ,GAAX,CAAe;EACbmG,MAAAA,MAAM,EAAKoB,MAAM,CAACuF,WAAP,GAAqBjE,MAAM,CAAC8D,YAAjC;EADO,KAAf;;EAGF,QAAI9D,MAAM,CAACqG,cAAX,EAA2B;EACzBG,MAAAA,aAAa,GAAG,EAAhB;;EACA,WAAK,IAAIlW,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG2S,QAAQ,CAACza,MAA7B,EAAqC8H,EAAC,IAAI,CAA1C,EAA6C;EAC3C,YAAIqW,cAAc,GAAG1D,QAAQ,CAAC3S,EAAD,CAA7B;EACA,YAAI0P,MAAM,CAAC8F,YAAX,EAAyBa,cAAc,GAAGnC,IAAI,CAACC,KAAL,CAAWkC,cAAX,CAAjB;EACzB,YAAI1D,QAAQ,CAAC3S,EAAD,CAAR,GAAcoO,MAAM,CAACuF,WAAP,GAAqBhB,QAAQ,CAAC,CAAD,CAA/C,EAAoDuD,aAAa,CAAC9Y,IAAd,CAAmBiZ,cAAnB;EACrD;;EACD1D,MAAAA,QAAQ,GAAGuD,aAAX;EACD;EACF,GAhRoC;;;EAmRrC,MAAI,CAACxG,MAAM,CAACqG,cAAZ,EAA4B;EAC1BG,IAAAA,aAAa,GAAG,EAAhB;;EACA,SAAK,IAAIlW,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAG2S,QAAQ,CAACza,MAA7B,EAAqC8H,GAAC,IAAI,CAA1C,EAA6C;EAC3C,UAAIqW,eAAc,GAAG1D,QAAQ,CAAC3S,GAAD,CAA7B;EACA,UAAI0P,MAAM,CAAC8F,YAAX,EAAyBa,eAAc,GAAGnC,IAAI,CAACC,KAAL,CAAWkC,eAAX,CAAjB;;EACzB,UAAI1D,QAAQ,CAAC3S,GAAD,CAAR,IAAeoO,MAAM,CAACuF,WAAP,GAAqB3B,UAAxC,EAAoD;EAClDkE,QAAAA,aAAa,CAAC9Y,IAAd,CAAmBiZ,eAAnB;EACD;EACF;;EACD1D,IAAAA,QAAQ,GAAGuD,aAAX;;EAEA,QACEhC,IAAI,CAACC,KAAL,CAAW/F,MAAM,CAACuF,WAAP,GAAqB3B,UAAhC,IAA8CkC,IAAI,CAACC,KAAL,CAAWxB,QAAQ,CAACA,QAAQ,CAACza,MAAT,GAAkB,CAAnB,CAAnB,CAA9C,GACA,CAFF,EAGE;EACAya,MAAAA,QAAQ,CAACvV,IAAT,CAAcgR,MAAM,CAACuF,WAAP,GAAqB3B,UAAnC;EACD;EACF;;EACD,MAAIW,QAAQ,CAACza,MAAT,KAAoB,CAAxB,EAA2Bya,QAAQ,GAAG,CAAC,CAAD,CAAX;;EAE3B,MAAIjD,MAAM,CAAC8D,YAAP,KAAwB,CAA5B,EAA+B;EAC7B,QAAIpF,MAAM,CAACqD,YAAP,EAAJ,EAA2B;EACzB,UAAIQ,GAAJ,EAASO,MAAM,CAAC3S,MAAP,CAAciT,eAAd,EAA+BjM,GAA/B,CAAmC;EAAE+M,QAAAA,UAAU,EAAKJ,YAAL;EAAZ,OAAnC,EAAT,KACKhB,MAAM,CAAC3S,MAAP,CAAciT,eAAd,EAA+BjM,GAA/B,CAAmC;EAAEiN,QAAAA,WAAW,EAAKN,YAAL;EAAb,OAAnC;EACN,KAHD,MAGOhB,MAAM,CAAC3S,MAAP,CAAciT,eAAd,EAA+BjM,GAA/B,CAAmC;EAAEkN,MAAAA,YAAY,EAAKP,YAAL;EAAd,KAAnC;EACR;;EAED,MAAI9D,MAAM,CAACqG,cAAP,IAAyBrG,MAAM,CAAC4G,oBAApC,EAA0D;EACxD,QAAIC,aAAa,GAAG,CAApB;EACA1D,IAAAA,eAAe,CAAC7a,OAAhB,CAAwB,UAACwe,cAAD,EAAoB;EAC1CD,MAAAA,aAAa,IAAIC,cAAc,IAAI9G,MAAM,CAAC8D,YAAP,GAAsB9D,MAAM,CAAC8D,YAA7B,GAA4C,CAAhD,CAA/B;EACD,KAFD;EAGA+C,IAAAA,aAAa,IAAI7G,MAAM,CAAC8D,YAAxB;EACA,QAAMiD,OAAO,GAAGF,aAAa,GAAGvE,UAAhC;EACAW,IAAAA,QAAQ,GAAGA,QAAQ,CAAC3R,GAAT,CAAa,UAAC0V,IAAD,EAAU;EAChC,UAAIA,IAAI,GAAG,CAAX,EAAc,OAAO,CAACxD,YAAR;EACd,UAAIwD,IAAI,GAAGD,OAAX,EAAoB,OAAOA,OAAO,GAAGrD,WAAjB;EACpB,aAAOsD,IAAP;EACD,KAJU,CAAX;EAKD;;EAED,MAAIhH,MAAM,CAACiH,wBAAX,EAAqC;EACnC,QAAIJ,cAAa,GAAG,CAApB;EACA1D,IAAAA,eAAe,CAAC7a,OAAhB,CAAwB,UAACwe,cAAD,EAAoB;EAC1CD,MAAAA,cAAa,IAAIC,cAAc,IAAI9G,MAAM,CAAC8D,YAAP,GAAsB9D,MAAM,CAAC8D,YAA7B,GAA4C,CAAhD,CAA/B;EACD,KAFD;EAGA+C,IAAAA,cAAa,IAAI7G,MAAM,CAAC8D,YAAxB;;EACA,QAAI+C,cAAa,GAAGvE,UAApB,EAAgC;EAC9B,UAAM4E,eAAe,GAAG,CAAC5E,UAAU,GAAGuE,cAAd,IAA+B,CAAvD;EACA5D,MAAAA,QAAQ,CAAC3a,OAAT,CAAiB,UAAC0e,IAAD,EAAOG,SAAP,EAAqB;EACpClE,QAAAA,QAAQ,CAACkE,SAAD,CAAR,GAAsBH,IAAI,GAAGE,eAA7B;EACD,OAFD;EAGAhE,MAAAA,UAAU,CAAC5a,OAAX,CAAmB,UAAC0e,IAAD,EAAOG,SAAP,EAAqB;EACtCjE,QAAAA,UAAU,CAACiE,SAAD,CAAV,GAAwBH,IAAI,GAAGE,eAA/B;EACD,OAFD;EAGD;EACF;;EAEDhf,EAAAA,QAAM,CAACwW,MAAD,EAAS;EACboE,IAAAA,MAAM,EAANA,MADa;EAEbG,IAAAA,QAAQ,EAARA,QAFa;EAGbC,IAAAA,UAAU,EAAVA,UAHa;EAIbC,IAAAA,eAAe,EAAfA;EAJa,GAAT,CAAN;;EAOA,MAAIH,YAAY,KAAKH,oBAArB,EAA2C;EACzCnE,IAAAA,MAAM,CAACK,IAAP,CAAY,oBAAZ;EACD;;EACD,MAAIkE,QAAQ,CAACza,MAAT,KAAoBob,sBAAxB,EAAgD;EAC9C,QAAIlF,MAAM,CAACsB,MAAP,CAAcoH,aAAlB,EAAiC1I,MAAM,CAAC2I,aAAP;EACjC3I,IAAAA,MAAM,CAACK,IAAP,CAAY,sBAAZ;EACD;;EACD,MAAImE,UAAU,CAAC1a,MAAX,KAAsBqb,wBAA1B,EAAoD;EAClDnF,IAAAA,MAAM,CAACK,IAAP,CAAY,wBAAZ;EACD;;EAED,MAAIiB,MAAM,CAACsH,mBAAP,IAA8BtH,MAAM,CAACuH,qBAAzC,EAAgE;EAC9D7I,IAAAA,MAAM,CAAC8I,kBAAP;EACD;EACF;;ECrWc,SAASC,gBAAT,CAA0BC,KAA1B,EAAiC;EAC9C,MAAMhJ,MAAM,GAAG,IAAf;EACA,MAAMiJ,YAAY,GAAG,EAArB;EACA,MAAIC,SAAS,GAAG,CAAhB;EACA,MAAItX,CAAJ;;EACA,MAAI,OAAOoX,KAAP,KAAiB,QAArB,EAA+B;EAC7BhJ,IAAAA,MAAM,CAACmJ,aAAP,CAAqBH,KAArB;EACD,GAFD,MAEO,IAAIA,KAAK,KAAK,IAAd,EAAoB;EACzBhJ,IAAAA,MAAM,CAACmJ,aAAP,CAAqBnJ,MAAM,CAACsB,MAAP,CAAc0H,KAAnC;EACD,GAT6C;;;EAW9C,MAAIhJ,MAAM,CAACsB,MAAP,CAAc2E,aAAd,KAAgC,MAAhC,IAA0CjG,MAAM,CAACsB,MAAP,CAAc2E,aAAd,GAA8B,CAA5E,EAA+E;EAC7E,QAAIjG,MAAM,CAACsB,MAAP,CAAcqG,cAAlB,EAAkC;EAChC3H,MAAAA,MAAM,CAACoJ,aAAP,CAAqBxQ,IAArB,CAA0B,UAAC2N,KAAD,EAAW;EACnC0C,QAAAA,YAAY,CAACja,IAAb,CAAkBuX,KAAlB;EACD,OAFD;EAGD,KAJD,MAIO;EACL,WAAK3U,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkU,IAAI,CAACE,IAAL,CAAUhG,MAAM,CAACsB,MAAP,CAAc2E,aAAxB,CAAhB,EAAwDrU,CAAC,IAAI,CAA7D,EAAgE;EAC9D,YAAMiH,KAAK,GAAGmH,MAAM,CAACqJ,WAAP,GAAqBzX,CAAnC;EACA,YAAIiH,KAAK,GAAGmH,MAAM,CAACoE,MAAP,CAActa,MAA1B,EAAkC;EAClCmf,QAAAA,YAAY,CAACja,IAAb,CAAkBgR,MAAM,CAACoE,MAAP,CAAc7K,EAAd,CAAiBV,KAAjB,EAAwB,CAAxB,CAAlB;EACD;EACF;EACF,GAZD,MAYO;EACLoQ,IAAAA,YAAY,CAACja,IAAb,CAAkBgR,MAAM,CAACoE,MAAP,CAAc7K,EAAd,CAAiByG,MAAM,CAACqJ,WAAxB,EAAqC,CAArC,CAAlB;EACD,GAzB6C;;;EA4B9C,OAAKzX,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGqX,YAAY,CAACnf,MAA7B,EAAqC8H,CAAC,IAAI,CAA1C,EAA6C;EAC3C,QAAI,OAAOqX,YAAY,CAACrX,CAAD,CAAnB,KAA2B,WAA/B,EAA4C;EAC1C,UAAMgN,MAAM,GAAGqK,YAAY,CAACrX,CAAD,CAAZ,CAAgBiG,YAA/B;EACAqR,MAAAA,SAAS,GAAGtK,MAAM,GAAGsK,SAAT,GAAqBtK,MAArB,GAA8BsK,SAA1C;EACD;EACF,GAjC6C;;;EAoC9C,MAAIA,SAAJ,EAAelJ,MAAM,CAAC2B,UAAP,CAAkBlJ,GAAlB,CAAsB,QAAtB,EAAmCyQ,SAAnC;EAChB;;ECrCc,SAASJ,kBAAT,GAA8B;EAC3C,MAAM9I,MAAM,GAAG,IAAf;EACA,MAAMoE,MAAM,GAAGpE,MAAM,CAACoE,MAAtB;;EACA,OAAK,IAAIxS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwS,MAAM,CAACta,MAA3B,EAAmC8H,CAAC,IAAI,CAAxC,EAA2C;EACzCwS,IAAAA,MAAM,CAACxS,CAAD,CAAN,CAAU0X,iBAAV,GAA8BtJ,MAAM,CAACqD,YAAP,KAC1Be,MAAM,CAACxS,CAAD,CAAN,CAAU2X,UADgB,GAE1BnF,MAAM,CAACxS,CAAD,CAAN,CAAU4X,SAFd;EAGD;EACF;;ECNc,SAASC,oBAAT,CAA8BC,SAA9B,EAAyE;EAAA,MAA3CA,SAA2C;EAA3CA,IAAAA,SAA2C,GAA9B,QAAQ,KAAKA,SAAd,IAA4B,CAAG;EAAA;;EACtF,MAAM1J,MAAM,GAAG,IAAf;EACA,MAAMsB,MAAM,GAAGtB,MAAM,CAACsB,MAAtB;EAFsF,MAI9E8C,MAJ8E,GAIhDpE,MAJgD,CAI9EoE,MAJ8E;EAAA,MAIxDP,GAJwD,GAIhD7D,MAJgD,CAItE8D,YAJsE;EAMtF,MAAIM,MAAM,CAACta,MAAP,KAAkB,CAAtB,EAAyB;EACzB,MAAI,OAAOsa,MAAM,CAAC,CAAD,CAAN,CAAUkF,iBAAjB,KAAuC,WAA3C,EAAwDtJ,MAAM,CAAC8I,kBAAP;EAExD,MAAIa,YAAY,GAAG,CAACD,SAApB;EACA,MAAI7F,GAAJ,EAAS8F,YAAY,GAAGD,SAAf,CAV6E;;EAatFtF,EAAAA,MAAM,CAAClR,WAAP,CAAmBoO,MAAM,CAACsI,iBAA1B;EAEA5J,EAAAA,MAAM,CAAC6J,oBAAP,GAA8B,EAA9B;EACA7J,EAAAA,MAAM,CAACoJ,aAAP,GAAuB,EAAvB;;EAEA,OAAK,IAAIxX,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwS,MAAM,CAACta,MAA3B,EAAmC8H,CAAC,IAAI,CAAxC,EAA2C;EACzC,QAAM2U,KAAK,GAAGnC,MAAM,CAACxS,CAAD,CAApB;EACA,QAAMkY,aAAa,GACjB,CAACH,YAAY,IACVrI,MAAM,CAACqG,cAAP,GAAwB3H,MAAM,CAAC+J,YAAP,EAAxB,GAAgD,CADtC,CAAZ,GAECxD,KAAK,CAAC+C,iBAFR,KAGC/C,KAAK,CAACmB,eAAN,GAAwBpG,MAAM,CAAC8D,YAHhC,CADF;;EAKA,QAAI9D,MAAM,CAACuH,qBAAP,IAAiCvH,MAAM,CAACqG,cAAP,IAAyBrG,MAAM,CAAC0I,UAArE,EAAkF;EAChF,UAAMC,WAAW,GAAG,EAAEN,YAAY,GAAGpD,KAAK,CAAC+C,iBAAvB,CAApB;EACA,UAAMY,UAAU,GAAGD,WAAW,GAAGjK,MAAM,CAACyE,eAAP,CAAuB7S,CAAvB,CAAjC;EACA,UAAMuY,SAAS,GACZF,WAAW,IAAI,CAAf,IAAoBA,WAAW,GAAGjK,MAAM,CAAC0D,IAAP,GAAc,CAAjD,IACCwG,UAAU,GAAG,CAAb,IAAkBA,UAAU,IAAIlK,MAAM,CAAC0D,IADxC,IAECuG,WAAW,IAAI,CAAf,IAAoBC,UAAU,IAAIlK,MAAM,CAAC0D,IAH5C;;EAIA,UAAIyG,SAAJ,EAAe;EACbnK,QAAAA,MAAM,CAACoJ,aAAP,CAAqBpa,IAArB,CAA0BuX,KAA1B;EACAvG,QAAAA,MAAM,CAAC6J,oBAAP,CAA4B7a,IAA5B,CAAiC4C,CAAjC;EACAwS,QAAAA,MAAM,CAAC7K,EAAP,CAAU3H,CAAV,EAAaW,QAAb,CAAsB+O,MAAM,CAACsI,iBAA7B;EACD;EACF;;EACDrD,IAAAA,KAAK,CAAC6D,QAAN,GAAiBvG,GAAG,GAAG,CAACiG,aAAJ,GAAoBA,aAAxC;EACD;;EACD9J,EAAAA,MAAM,CAACoJ,aAAP,GAAuBpX,CAAC,CAACgO,MAAM,CAACoJ,aAAR,CAAxB;EACD;;ECzCc,SAASiB,cAAT,CAAwBX,SAAxB,EAAmC;EAChD,MAAM1J,MAAM,GAAG,IAAf;;EACA,MAAI,OAAO0J,SAAP,KAAqB,WAAzB,EAAsC;EACpC,QAAMY,UAAU,GAAGtK,MAAM,CAAC8D,YAAP,GAAsB,CAAC,CAAvB,GAA2B,CAA9C,CADoC;;EAGpC4F,IAAAA,SAAS,GAAI1J,MAAM,IAAIA,MAAM,CAAC0J,SAAjB,IAA8B1J,MAAM,CAAC0J,SAAP,GAAmBY,UAAlD,IAAiE,CAA7E;EACD;;EACD,MAAMhJ,MAAM,GAAGtB,MAAM,CAACsB,MAAtB;EACA,MAAMiJ,cAAc,GAAGvK,MAAM,CAACwK,YAAP,KAAwBxK,MAAM,CAAC+J,YAAP,EAA/C;EARgD,MAS1CK,QAT0C,GASTpK,MATS,CAS1CoK,QAT0C;EAAA,MAShCK,WATgC,GASTzK,MATS,CAShCyK,WATgC;EAAA,MASnBC,KATmB,GAST1K,MATS,CASnB0K,KATmB;EAUhD,MAAMC,YAAY,GAAGF,WAArB;EACA,MAAMG,MAAM,GAAGF,KAAf;;EACA,MAAIH,cAAc,KAAK,CAAvB,EAA0B;EACxBH,IAAAA,QAAQ,GAAG,CAAX;EACAK,IAAAA,WAAW,GAAG,IAAd;EACAC,IAAAA,KAAK,GAAG,IAAR;EACD,GAJD,MAIO;EACLN,IAAAA,QAAQ,GAAG,CAACV,SAAS,GAAG1J,MAAM,CAAC+J,YAAP,EAAb,IAAsCQ,cAAjD;EACAE,IAAAA,WAAW,GAAGL,QAAQ,IAAI,CAA1B;EACAM,IAAAA,KAAK,GAAGN,QAAQ,IAAI,CAApB;EACD;;EACD5gB,EAAAA,QAAM,CAACwW,MAAD,EAAS;EACboK,IAAAA,QAAQ,EAARA,QADa;EAEbK,IAAAA,WAAW,EAAXA,WAFa;EAGbC,IAAAA,KAAK,EAALA;EAHa,GAAT,CAAN;EAMA,MACEpJ,MAAM,CAACsH,mBAAP,IACAtH,MAAM,CAACuH,qBADP,IAECvH,MAAM,CAACqG,cAAP,IAAyBrG,MAAM,CAAC0I,UAHnC,EAKEhK,MAAM,CAACyJ,oBAAP,CAA4BC,SAA5B;;EAEF,MAAIe,WAAW,IAAI,CAACE,YAApB,EAAkC;EAChC3K,IAAAA,MAAM,CAACK,IAAP,CAAY,uBAAZ;EACD;;EACD,MAAIqK,KAAK,IAAI,CAACE,MAAd,EAAsB;EACpB5K,IAAAA,MAAM,CAACK,IAAP,CAAY,iBAAZ;EACD;;EACD,MAAKsK,YAAY,IAAI,CAACF,WAAlB,IAAmCG,MAAM,IAAI,CAACF,KAAlD,EAA0D;EACxD1K,IAAAA,MAAM,CAACK,IAAP,CAAY,UAAZ;EACD;;EAEDL,EAAAA,MAAM,CAACK,IAAP,CAAY,UAAZ,EAAwB+J,QAAxB;EACD;;EC/Cc,SAASS,mBAAT,GAA+B;EAC5C,MAAM7K,MAAM,GAAG,IAAf;EAD4C,MAGpCoE,MAHoC,GAGmBpE,MAHnB,CAGpCoE,MAHoC;EAAA,MAG5B9C,MAH4B,GAGmBtB,MAHnB,CAG5BsB,MAH4B;EAAA,MAGpBK,UAHoB,GAGmB3B,MAHnB,CAGpB2B,UAHoB;EAAA,MAGR0H,WAHQ,GAGmBrJ,MAHnB,CAGRqJ,WAHQ;EAAA,MAGKyB,SAHL,GAGmB9K,MAHnB,CAGK8K,SAHL;EAI5C,MAAM9G,SAAS,GAAGhE,MAAM,CAACiE,OAAP,IAAkB3C,MAAM,CAAC2C,OAAP,CAAeC,OAAnD;EAEAE,EAAAA,MAAM,CAAClR,WAAP,CACKoO,MAAM,CAACyJ,gBADZ,SACgCzJ,MAAM,CAAC0J,cADvC,SACyD1J,MAAM,CAAC2J,cADhE,SACkF3J,MAAM,CAAC4J,yBADzF,SACsH5J,MAAM,CAAC6J,uBAD7H,SACwJ7J,MAAM,CAAC8J,uBAD/J;EAIA,MAAIC,WAAJ;;EACA,MAAIrH,SAAJ,EAAe;EACbqH,IAAAA,WAAW,GAAGrL,MAAM,CAAC2B,UAAP,CAAkB7G,IAAlB,OACRwG,MAAM,CAAC+C,UADC,mCACsCgF,WADtC,SAAd;EAGD,GAJD,MAIO;EACLgC,IAAAA,WAAW,GAAGjH,MAAM,CAAC7K,EAAP,CAAU8P,WAAV,CAAd;EACD,GAjB2C;;;EAoB5CgC,EAAAA,WAAW,CAAC9Y,QAAZ,CAAqB+O,MAAM,CAACyJ,gBAA5B;;EAEA,MAAIzJ,MAAM,CAACgK,IAAX,EAAiB;EACf;EACA,QAAID,WAAW,CAACzX,QAAZ,CAAqB0N,MAAM,CAACiK,mBAA5B,CAAJ,EAAsD;EACpD5J,MAAAA,UAAU,CACP/W,QADH,OAEQ0W,MAAM,CAAC+C,UAFf,cAEkC/C,MAAM,CAACiK,mBAFzC,oCAE0FT,SAF1F,UAIGvY,QAJH,CAIY+O,MAAM,CAAC4J,yBAJnB;EAKD,KAND,MAMO;EACLvJ,MAAAA,UAAU,CACP/W,QADH,OAEQ0W,MAAM,CAAC+C,UAFf,SAE6B/C,MAAM,CAACiK,mBAFpC,mCAEoFT,SAFpF,UAIGvY,QAJH,CAIY+O,MAAM,CAAC4J,yBAJnB;EAKD;EACF,GArC2C;;;EAuC5C,MAAIM,SAAS,GAAGH,WAAW,CACxBnR,OADa,OACDoH,MAAM,CAAC+C,UADN,EAEb9K,EAFa,CAEV,CAFU,EAGbhH,QAHa,CAGJ+O,MAAM,CAAC0J,cAHH,CAAhB;;EAIA,MAAI1J,MAAM,CAACgK,IAAP,IAAeE,SAAS,CAAC1hB,MAAV,KAAqB,CAAxC,EAA2C;EACzC0hB,IAAAA,SAAS,GAAGpH,MAAM,CAAC7K,EAAP,CAAU,CAAV,CAAZ;EACAiS,IAAAA,SAAS,CAACjZ,QAAV,CAAmB+O,MAAM,CAAC0J,cAA1B;EACD,GA9C2C;;;EAgD5C,MAAIS,SAAS,GAAGJ,WAAW,CACxB9Q,OADa,OACD+G,MAAM,CAAC+C,UADN,EAEb9K,EAFa,CAEV,CAFU,EAGbhH,QAHa,CAGJ+O,MAAM,CAAC2J,cAHH,CAAhB;;EAIA,MAAI3J,MAAM,CAACgK,IAAP,IAAeG,SAAS,CAAC3hB,MAAV,KAAqB,CAAxC,EAA2C;EACzC2hB,IAAAA,SAAS,GAAGrH,MAAM,CAAC7K,EAAP,CAAU,CAAC,CAAX,CAAZ;EACAkS,IAAAA,SAAS,CAAClZ,QAAV,CAAmB+O,MAAM,CAAC2J,cAA1B;EACD;;EACD,MAAI3J,MAAM,CAACgK,IAAX,EAAiB;EACf;EACA,QAAIE,SAAS,CAAC5X,QAAV,CAAmB0N,MAAM,CAACiK,mBAA1B,CAAJ,EAAoD;EAClD5J,MAAAA,UAAU,CACP/W,QADH,OAEQ0W,MAAM,CAAC+C,UAFf,cAGM/C,MAAM,CAACiK,mBAHb,oCAIkCC,SAAS,CAACxX,IAAV,CAAe,yBAAf,CAJlC,UAMGzB,QANH,CAMY+O,MAAM,CAAC6J,uBANnB;EAOD,KARD,MAQO;EACLxJ,MAAAA,UAAU,CACP/W,QADH,OAEQ0W,MAAM,CAAC+C,UAFf,SAGM/C,MAAM,CAACiK,mBAHb,mCAIiCC,SAAS,CAACxX,IAAV,CAAe,yBAAf,CAJjC,UAMGzB,QANH,CAMY+O,MAAM,CAAC6J,uBANnB;EAOD;;EACD,QAAIM,SAAS,CAAC7X,QAAV,CAAmB0N,MAAM,CAACiK,mBAA1B,CAAJ,EAAoD;EAClD5J,MAAAA,UAAU,CACP/W,QADH,OAEQ0W,MAAM,CAAC+C,UAFf,cAGM/C,MAAM,CAACiK,mBAHb,oCAIkCE,SAAS,CAACzX,IAAV,CAAe,yBAAf,CAJlC,UAMGzB,QANH,CAMY+O,MAAM,CAAC8J,uBANnB;EAOD,KARD,MAQO;EACLzJ,MAAAA,UAAU,CACP/W,QADH,OAEQ0W,MAAM,CAAC+C,UAFf,SAGM/C,MAAM,CAACiK,mBAHb,mCAIiCE,SAAS,CAACzX,IAAV,CAAe,yBAAf,CAJjC,UAMGzB,QANH,CAMY+O,MAAM,CAAC8J,uBANnB;EAOD;EACF;;EACDpL,EAAAA,MAAM,CAAC0L,iBAAP;EACD;;EC5Fc,SAASC,iBAAT,CAA2BC,cAA3B,EAA2C;EACxD,MAAM5L,MAAM,GAAG,IAAf;EACA,MAAM0J,SAAS,GAAG1J,MAAM,CAAC8D,YAAP,GAAsB9D,MAAM,CAAC0J,SAA7B,GAAyC,CAAC1J,MAAM,CAAC0J,SAAnE;EAFwD,MAItDlF,UAJsD,GAUpDxE,MAVoD,CAItDwE,UAJsD;EAAA,MAKtDD,QALsD,GAUpDvE,MAVoD,CAKtDuE,QALsD;EAAA,MAMtDjD,MANsD,GAUpDtB,MAVoD,CAMtDsB,MANsD;EAAA,MAOzCuK,aAPyC,GAUpD7L,MAVoD,CAOtDqJ,WAPsD;EAAA,MAQ3CyC,iBAR2C,GAUpD9L,MAVoD,CAQtD8K,SARsD;EAAA,MAS3CiB,iBAT2C,GAUpD/L,MAVoD,CAStDyI,SATsD;EAWxD,MAAIY,WAAW,GAAGuC,cAAlB;EACA,MAAInD,SAAJ;;EACA,MAAI,OAAOY,WAAP,KAAuB,WAA3B,EAAwC;EACtC,SAAK,IAAIzX,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4S,UAAU,CAAC1a,MAA/B,EAAuC8H,CAAC,IAAI,CAA5C,EAA+C;EAC7C,UAAI,OAAO4S,UAAU,CAAC5S,CAAC,GAAG,CAAL,CAAjB,KAA6B,WAAjC,EAA8C;EAC5C,YACE8X,SAAS,IAAIlF,UAAU,CAAC5S,CAAD,CAAvB,IACA8X,SAAS,GAAGlF,UAAU,CAAC5S,CAAC,GAAG,CAAL,CAAV,GAAoB,CAAC4S,UAAU,CAAC5S,CAAC,GAAG,CAAL,CAAV,GAAoB4S,UAAU,CAAC5S,CAAD,CAA/B,IAAsC,CAFxE,EAGE;EACAyX,UAAAA,WAAW,GAAGzX,CAAd;EACD,SALD,MAKO,IAAI8X,SAAS,IAAIlF,UAAU,CAAC5S,CAAD,CAAvB,IAA8B8X,SAAS,GAAGlF,UAAU,CAAC5S,CAAC,GAAG,CAAL,CAAxD,EAAiE;EACtEyX,UAAAA,WAAW,GAAGzX,CAAC,GAAG,CAAlB;EACD;EACF,OATD,MASO,IAAI8X,SAAS,IAAIlF,UAAU,CAAC5S,CAAD,CAA3B,EAAgC;EACrCyX,QAAAA,WAAW,GAAGzX,CAAd;EACD;EACF,KAdqC;;;EAgBtC,QAAI0P,MAAM,CAAC0K,mBAAX,EAAgC;EAC9B,UAAI3C,WAAW,GAAG,CAAd,IAAmB,OAAOA,WAAP,KAAuB,WAA9C,EAA2DA,WAAW,GAAG,CAAd;EAC5D;EACF;;EACD,MAAI9E,QAAQ,CAAC9U,OAAT,CAAiBia,SAAjB,KAA+B,CAAnC,EAAsC;EACpCjB,IAAAA,SAAS,GAAGlE,QAAQ,CAAC9U,OAAT,CAAiBia,SAAjB,CAAZ;EACD,GAFD,MAEO;EACL,QAAMuC,IAAI,GAAGnG,IAAI,CAACiB,GAAL,CAASzF,MAAM,CAACuG,kBAAhB,EAAoCwB,WAApC,CAAb;EACAZ,IAAAA,SAAS,GAAGwD,IAAI,GAAGnG,IAAI,CAACC,KAAL,CAAW,CAACsD,WAAW,GAAG4C,IAAf,IAAuB3K,MAAM,CAACqF,cAAzC,CAAnB;EACD;;EACD,MAAI8B,SAAS,IAAIlE,QAAQ,CAACza,MAA1B,EAAkC2e,SAAS,GAAGlE,QAAQ,CAACza,MAAT,GAAkB,CAA9B;;EAClC,MAAIuf,WAAW,KAAKwC,aAApB,EAAmC;EACjC,QAAIpD,SAAS,KAAKsD,iBAAlB,EAAqC;EACnC/L,MAAAA,MAAM,CAACyI,SAAP,GAAmBA,SAAnB;EACAzI,MAAAA,MAAM,CAACK,IAAP,CAAY,iBAAZ;EACD;;EACD;EACD,GA9CuD;;;EAiDxD,MAAMyK,SAAS,GAAGvH,QAAQ,CACxBvD,MAAM,CAACoE,MAAP,CAAc7K,EAAd,CAAiB8P,WAAjB,EAA8BrV,IAA9B,CAAmC,yBAAnC,KAAiEqV,WADzC,EAExB,EAFwB,CAA1B;EAKA7f,EAAAA,QAAM,CAACwW,MAAD,EAAS;EACbyI,IAAAA,SAAS,EAATA,SADa;EAEbqC,IAAAA,SAAS,EAATA,SAFa;EAGbe,IAAAA,aAAa,EAAbA,aAHa;EAIbxC,IAAAA,WAAW,EAAXA;EAJa,GAAT,CAAN;EAMArJ,EAAAA,MAAM,CAACK,IAAP,CAAY,mBAAZ;EACAL,EAAAA,MAAM,CAACK,IAAP,CAAY,iBAAZ;;EACA,MAAIyL,iBAAiB,KAAKhB,SAA1B,EAAqC;EACnC9K,IAAAA,MAAM,CAACK,IAAP,CAAY,iBAAZ;EACD;;EACD,MAAIL,MAAM,CAACI,WAAP,IAAsBJ,MAAM,CAACsB,MAAP,CAAc4K,kBAAxC,EAA4D;EAC1DlM,IAAAA,MAAM,CAACK,IAAP,CAAY,aAAZ;EACD;EACF;;ECpEc,SAAS8L,kBAAT,CAA4Bzd,CAA5B,EAA+B;EAC5C,MAAMsR,MAAM,GAAG,IAAf;EACA,MAAMsB,MAAM,GAAGtB,MAAM,CAACsB,MAAtB;EACA,MAAMiF,KAAK,GAAGvU,CAAC,CAACtD,CAAC,CAACjF,MAAH,CAAD,CAAYoR,OAAZ,OAAwByG,MAAM,CAAC+C,UAA/B,EAA6C,CAA7C,CAAd;EACA,MAAI+H,UAAU,GAAG,KAAjB;;EACA,MAAI7F,KAAJ,EAAW;EACT,SAAK,IAAI3U,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoO,MAAM,CAACoE,MAAP,CAActa,MAAlC,EAA0C8H,CAAC,IAAI,CAA/C,EAAkD;EAChD,UAAIoO,MAAM,CAACoE,MAAP,CAAcxS,CAAd,MAAqB2U,KAAzB,EAAgC6F,UAAU,GAAG,IAAb;EACjC;EACF;;EAED,MAAI7F,KAAK,IAAI6F,UAAb,EAAyB;EACvBpM,IAAAA,MAAM,CAACqM,YAAP,GAAsB9F,KAAtB;;EACA,QAAIvG,MAAM,CAACiE,OAAP,IAAkBjE,MAAM,CAACsB,MAAP,CAAc2C,OAAd,CAAsBC,OAA5C,EAAqD;EACnDlE,MAAAA,MAAM,CAACsM,YAAP,GAAsB/I,QAAQ,CAACvR,CAAC,CAACuU,KAAD,CAAD,CAASvS,IAAT,CAAc,yBAAd,CAAD,EAA2C,EAA3C,CAA9B;EACD,KAFD,MAEO;EACLgM,MAAAA,MAAM,CAACsM,YAAP,GAAsBta,CAAC,CAACuU,KAAD,CAAD,CAAS1N,KAAT,EAAtB;EACD;EACF,GAPD,MAOO;EACLmH,IAAAA,MAAM,CAACqM,YAAP,GAAsBxc,SAAtB;EACAmQ,IAAAA,MAAM,CAACsM,YAAP,GAAsBzc,SAAtB;EACA;EACD;;EACD,MACEyR,MAAM,CAACiL,mBAAP,IACAvM,MAAM,CAACsM,YAAP,KAAwBzc,SADxB,IAEAmQ,MAAM,CAACsM,YAAP,KAAwBtM,MAAM,CAACqJ,WAHjC,EAIE;EACArJ,IAAAA,MAAM,CAACuM,mBAAP;EACD;EACF;;ACtBD,eAAe;EACbrJ,EAAAA,UAAU,EAAVA,UADa;EAEbS,EAAAA,YAAY,EAAZA,YAFa;EAGboF,EAAAA,gBAAgB,EAAhBA,gBAHa;EAIbD,EAAAA,kBAAkB,EAAlBA,kBAJa;EAKbW,EAAAA,oBAAoB,EAApBA,oBALa;EAMbY,EAAAA,cAAc,EAAdA,cANa;EAObQ,EAAAA,mBAAmB,EAAnBA,mBAPa;EAQbc,EAAAA,iBAAiB,EAAjBA,iBARa;EASbQ,EAAAA,kBAAkB,EAAlBA;EATa,CAAf;;ECRe,SAASK,kBAAT,CAA4B9Q,IAA5B,EAAoE;EAAA,MAAxCA,IAAwC;EAAxCA,IAAAA,IAAwC,GAAjC,KAAK2H,YAAL,KAAsB,GAAtB,GAA4B,GAAK;EAAA;;EACjF,MAAMrD,MAAM,GAAG,IAAf;EADiF,MAGzEsB,MAHyE,GAGpBtB,MAHoB,CAGzEsB,MAHyE;EAAA,MAGnDuC,GAHmD,GAGpB7D,MAHoB,CAGjE8D,YAHiE;EAAA,MAG9C4F,SAH8C,GAGpB1J,MAHoB,CAG9C0J,SAH8C;EAAA,MAGnC/H,UAHmC,GAGpB3B,MAHoB,CAGnC2B,UAHmC;;EAKjF,MAAIL,MAAM,CAACmL,gBAAX,EAA6B;EAC3B,WAAO5I,GAAG,GAAG,CAAC6F,SAAJ,GAAgBA,SAA1B;EACD;;EACD,MAAIpI,MAAM,CAACuD,OAAX,EAAoB;EAClB,WAAO6E,SAAP;EACD;;EAED,MAAIgD,gBAAgB,GAAGjR,YAAY,CAACkG,UAAU,CAAC,CAAD,CAAX,EAAgBjG,IAAhB,CAAnC;EACA,MAAImI,GAAJ,EAAS6I,gBAAgB,GAAG,CAACA,gBAApB;EAET,SAAOA,gBAAgB,IAAI,CAA3B;EACD;;EClBc,SAASC,YAAT,CAAsBjD,SAAtB,EAAiCkD,YAAjC,EAA+C;EAC5D,MAAM5M,MAAM,GAAG,IAAf;EAD4D,MAEtC6D,GAFsC,GAEW7D,MAFX,CAEpD8D,YAFoD;EAAA,MAEjCxC,MAFiC,GAEWtB,MAFX,CAEjCsB,MAFiC;EAAA,MAEzBK,UAFyB,GAEW3B,MAFX,CAEzB2B,UAFyB;EAAA,MAEbkL,SAFa,GAEW7M,MAFX,CAEb6M,SAFa;EAAA,MAEFzC,QAFE,GAEWpK,MAFX,CAEFoK,QAFE;EAG5D,MAAI0C,CAAC,GAAG,CAAR;EACA,MAAIC,CAAC,GAAG,CAAR;EACA,MAAMC,CAAC,GAAG,CAAV;;EAEA,MAAIhN,MAAM,CAACqD,YAAP,EAAJ,EAA2B;EACzByJ,IAAAA,CAAC,GAAGjJ,GAAG,GAAG,CAAC6F,SAAJ,GAAgBA,SAAvB;EACD,GAFD,MAEO;EACLqD,IAAAA,CAAC,GAAGrD,SAAJ;EACD;;EAED,MAAIpI,MAAM,CAAC8F,YAAX,EAAyB;EACvB0F,IAAAA,CAAC,GAAGhH,IAAI,CAACC,KAAL,CAAW+G,CAAX,CAAJ;EACAC,IAAAA,CAAC,GAAGjH,IAAI,CAACC,KAAL,CAAWgH,CAAX,CAAJ;EACD;;EAED,MAAIzL,MAAM,CAACuD,OAAX,EAAoB;EAClBgI,IAAAA,SAAS,CAAC7M,MAAM,CAACqD,YAAP,KAAwB,YAAxB,GAAuC,WAAxC,CAAT,GAAgErD,MAAM,CAACqD,YAAP,KAAwB,CAACyJ,CAAzB,GAA6B,CAACC,CAA9F;EACD,GAFD,MAEO,IAAI,CAACzL,MAAM,CAACmL,gBAAZ,EAA8B;EACnC9K,IAAAA,UAAU,CAACrN,SAAX,kBAAoCwY,CAApC,YAA4CC,CAA5C,YAAoDC,CAApD;EACD;;EACDhN,EAAAA,MAAM,CAACiN,iBAAP,GAA2BjN,MAAM,CAAC0J,SAAlC;EACA1J,EAAAA,MAAM,CAAC0J,SAAP,GAAmB1J,MAAM,CAACqD,YAAP,KAAwByJ,CAAxB,GAA4BC,CAA/C,CAxB4D;;EA2B5D,MAAIG,WAAJ;EACA,MAAM3C,cAAc,GAAGvK,MAAM,CAACwK,YAAP,KAAwBxK,MAAM,CAAC+J,YAAP,EAA/C;;EACA,MAAIQ,cAAc,KAAK,CAAvB,EAA0B;EACxB2C,IAAAA,WAAW,GAAG,CAAd;EACD,GAFD,MAEO;EACLA,IAAAA,WAAW,GAAG,CAACxD,SAAS,GAAG1J,MAAM,CAAC+J,YAAP,EAAb,IAAsCQ,cAApD;EACD;;EACD,MAAI2C,WAAW,KAAK9C,QAApB,EAA8B;EAC5BpK,IAAAA,MAAM,CAACqK,cAAP,CAAsBX,SAAtB;EACD;;EAED1J,EAAAA,MAAM,CAACK,IAAP,CAAY,cAAZ,EAA4BL,MAAM,CAAC0J,SAAnC,EAA8CkD,YAA9C;EACD;;ECvCc,SAAS7C,YAAT,GAAwB;EACrC,SAAO,CAAC,KAAKxF,QAAL,CAAc,CAAd,CAAR;EACD;;ECFc,SAASiG,YAAT,GAAwB;EACrC,SAAO,CAAC,KAAKjG,QAAL,CAAc,KAAKA,QAAL,CAAcza,MAAd,GAAuB,CAArC,CAAR;EACD;;ECFc,SAASqjB,WAAT,CACbzD,SADa,EAEbV,KAFa,EAGboE,YAHa,EAIbC,eAJa,EAKbC,QALa,EAMb;EAAA,MALA5D,SAKA;EALAA,IAAAA,SAKA,GALY,CAKZ;EAAA;;EAAA,MAJAV,KAIA;EAJAA,IAAAA,KAIA,GAJQ,KAAK1H,MAAL,CAAY0H,KAIpB;EAAA;;EAAA,MAHAoE,YAGA;EAHAA,IAAAA,YAGA,GAHe,IAGf;EAAA;;EAAA,MAFAC,eAEA;EAFAA,IAAAA,eAEA,GAFkB,IAElB;EAAA;;EACA,MAAMrN,MAAM,GAAG,IAAf;EADA,MAGQsB,MAHR,GAG8BtB,MAH9B,CAGQsB,MAHR;EAAA,MAGgBuL,SAHhB,GAG8B7M,MAH9B,CAGgB6M,SAHhB;;EAKA,MAAI7M,MAAM,CAACuN,SAAP,IAAoBjM,MAAM,CAACkM,8BAA/B,EAA+D;EAC7D,WAAO,KAAP;EACD;;EAED,MAAMzD,YAAY,GAAG/J,MAAM,CAAC+J,YAAP,EAArB;EACA,MAAMS,YAAY,GAAGxK,MAAM,CAACwK,YAAP,EAArB;EACA,MAAIiD,YAAJ;EACA,MAAIJ,eAAe,IAAI3D,SAAS,GAAGK,YAAnC,EAAiD0D,YAAY,GAAG1D,YAAf,CAAjD,KACK,IAAIsD,eAAe,IAAI3D,SAAS,GAAGc,YAAnC,EAAiDiD,YAAY,GAAGjD,YAAf,CAAjD,KACAiD,YAAY,GAAG/D,SAAf,CAdL;;EAiBA1J,EAAAA,MAAM,CAACqK,cAAP,CAAsBoD,YAAtB;;EAEA,MAAInM,MAAM,CAACuD,OAAX,EAAoB;EAClB,QAAM6I,GAAG,GAAG1N,MAAM,CAACqD,YAAP,EAAZ;;EACA,QAAI2F,KAAK,KAAK,CAAd,EAAiB;EACf6D,MAAAA,SAAS,CAACa,GAAG,GAAG,YAAH,GAAkB,WAAtB,CAAT,GAA8C,CAACD,YAA/C;EACD,KAFD,MAEO;EACL;EACA,UAAIZ,SAAS,CAACc,QAAd,EAAwB;EAAA;;EACtBd,QAAAA,SAAS,CAACc,QAAV,gDACGD,GAAG,GAAG,MAAH,GAAY,KADlB,IAC0B,CAACD,YAD3B,sBAEEG,QAFF,GAEY,QAFZ;EAID,OALD,MAKO;EACLf,QAAAA,SAAS,CAACa,GAAG,GAAG,YAAH,GAAkB,WAAtB,CAAT,GAA8C,CAACD,YAA/C;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED,MAAIzE,KAAK,KAAK,CAAd,EAAiB;EACfhJ,IAAAA,MAAM,CAACmJ,aAAP,CAAqB,CAArB;EACAnJ,IAAAA,MAAM,CAAC2M,YAAP,CAAoBc,YAApB;;EACA,QAAIL,YAAJ,EAAkB;EAChBpN,MAAAA,MAAM,CAACK,IAAP,CAAY,uBAAZ,EAAqC2I,KAArC,EAA4CsE,QAA5C;EACAtN,MAAAA,MAAM,CAACK,IAAP,CAAY,eAAZ;EACD;EACF,GAPD,MAOO;EACLL,IAAAA,MAAM,CAACmJ,aAAP,CAAqBH,KAArB;EACAhJ,IAAAA,MAAM,CAAC2M,YAAP,CAAoBc,YAApB;;EACA,QAAIL,YAAJ,EAAkB;EAChBpN,MAAAA,MAAM,CAACK,IAAP,CAAY,uBAAZ,EAAqC2I,KAArC,EAA4CsE,QAA5C;EACAtN,MAAAA,MAAM,CAACK,IAAP,CAAY,iBAAZ;EACD;;EACD,QAAI,CAACL,MAAM,CAACuN,SAAZ,EAAuB;EACrBvN,MAAAA,MAAM,CAACuN,SAAP,GAAmB,IAAnB;;EACA,UAAI,CAACvN,MAAM,CAAC6N,iCAAZ,EAA+C;EAC7C7N,QAAAA,MAAM,CAAC6N,iCAAP,GAA2C,SAAS3W,aAAT,CAAuBxI,CAAvB,EAA0B;EACnE,cAAI,CAACsR,MAAD,IAAWA,MAAM,CAACG,SAAtB,EAAiC;EACjC,cAAIzR,CAAC,CAACjF,MAAF,KAAa,IAAjB,EAAuB;EACvBuW,UAAAA,MAAM,CAAC2B,UAAP,CAAkB,CAAlB,EAAqBzX,mBAArB,CACE,eADF,EAEE8V,MAAM,CAAC6N,iCAFT;EAIA7N,UAAAA,MAAM,CAAC2B,UAAP,CAAkB,CAAlB,EAAqBzX,mBAArB,CACE,qBADF,EAEE8V,MAAM,CAAC6N,iCAFT;EAIA7N,UAAAA,MAAM,CAAC6N,iCAAP,GAA2C,IAA3C;EACA,iBAAO7N,MAAM,CAAC6N,iCAAd;;EACA,cAAIT,YAAJ,EAAkB;EAChBpN,YAAAA,MAAM,CAACK,IAAP,CAAY,eAAZ;EACD;EACF,SAhBD;EAiBD;;EACDL,MAAAA,MAAM,CAAC2B,UAAP,CAAkB,CAAlB,EAAqB1X,gBAArB,CACE,eADF,EAEE+V,MAAM,CAAC6N,iCAFT;EAIA7N,MAAAA,MAAM,CAAC2B,UAAP,CAAkB,CAAlB,EAAqB1X,gBAArB,CACE,qBADF,EAEE+V,MAAM,CAAC6N,iCAFT;EAID;EACF;;EAED,SAAO,IAAP;EACD;;ACpFD,kBAAe;EACbpS,EAAAA,YAAY,EAAZA,kBADa;EAEbkR,EAAAA,YAAY,EAAZA,YAFa;EAGb5C,EAAAA,YAAY,EAAZA,YAHa;EAIbS,EAAAA,YAAY,EAAZA,YAJa;EAKb2C,EAAAA,WAAW,EAAXA;EALa,CAAf;;ECNe,SAAShE,aAAT,CAAuB3U,QAAvB,EAAiCoY,YAAjC,EAA+C;EAC5D,MAAM5M,MAAM,GAAG,IAAf;;EAEA,MAAI,CAACA,MAAM,CAACsB,MAAP,CAAcuD,OAAnB,EAA4B;EAC1B7E,IAAAA,MAAM,CAAC2B,UAAP,CAAkBpN,UAAlB,CAA6BC,QAA7B;EACD;;EAEDwL,EAAAA,MAAM,CAACK,IAAP,CAAY,eAAZ,EAA6B7L,QAA7B,EAAuCoY,YAAvC;EACD;;ECRc,SAASkB,eAAT,CAAyBV,YAAzB,EAA8CW,SAA9C,EAAyD;EAAA,MAAhCX,YAAgC;EAAhCA,IAAAA,YAAgC,GAAjB,IAAiB;EAAA;;EACtE,MAAMpN,MAAM,GAAG,IAAf;EADsE,MAE9DqJ,WAF8D,GAEvBrJ,MAFuB,CAE9DqJ,WAF8D;EAAA,MAEjD/H,MAFiD,GAEvBtB,MAFuB,CAEjDsB,MAFiD;EAAA,MAEzCuK,aAFyC,GAEvB7L,MAFuB,CAEzC6L,aAFyC;EAGtE,MAAIvK,MAAM,CAACuD,OAAX,EAAoB;;EACpB,MAAIvD,MAAM,CAAC0I,UAAX,EAAuB;EACrBhK,IAAAA,MAAM,CAAC+I,gBAAP;EACD;;EAED,MAAIiF,GAAG,GAAGD,SAAV;;EACA,MAAI,CAACC,GAAL,EAAU;EACR,QAAI3E,WAAW,GAAGwC,aAAlB,EAAiCmC,GAAG,GAAG,MAAN,CAAjC,KACK,IAAI3E,WAAW,GAAGwC,aAAlB,EAAiCmC,GAAG,GAAG,MAAN,CAAjC,KACAA,GAAG,GAAG,OAAN;EACN;;EAEDhO,EAAAA,MAAM,CAACK,IAAP,CAAY,iBAAZ;;EAEA,MAAI+M,YAAY,IAAI/D,WAAW,KAAKwC,aAApC,EAAmD;EACjD,QAAImC,GAAG,KAAK,OAAZ,EAAqB;EACnBhO,MAAAA,MAAM,CAACK,IAAP,CAAY,2BAAZ;EACA;EACD;;EACDL,IAAAA,MAAM,CAACK,IAAP,CAAY,4BAAZ;;EACA,QAAI2N,GAAG,KAAK,MAAZ,EAAoB;EAClBhO,MAAAA,MAAM,CAACK,IAAP,CAAY,0BAAZ;EACD,KAFD,MAEO;EACLL,MAAAA,MAAM,CAACK,IAAP,CAAY,0BAAZ;EACD;EACF;EACF;;EC7Bc,SAASnJ,eAAT,CAAuBkW,YAAvB,EAA4CW,SAA5C,EAAuD;EAAA,MAAhCX,YAAgC;EAAhCA,IAAAA,YAAgC,GAAjB,IAAiB;EAAA;;EACpE,MAAMpN,MAAM,GAAG,IAAf;EADoE,MAE5DqJ,WAF4D,GAErBrJ,MAFqB,CAE5DqJ,WAF4D;EAAA,MAE/CwC,aAF+C,GAErB7L,MAFqB,CAE/C6L,aAF+C;EAAA,MAEhCvK,MAFgC,GAErBtB,MAFqB,CAEhCsB,MAFgC;EAGpEtB,EAAAA,MAAM,CAACuN,SAAP,GAAmB,KAAnB;EACA,MAAIjM,MAAM,CAACuD,OAAX,EAAoB;EACpB7E,EAAAA,MAAM,CAACmJ,aAAP,CAAqB,CAArB;EAEA,MAAI6E,GAAG,GAAGD,SAAV;;EACA,MAAI,CAACC,GAAL,EAAU;EACR,QAAI3E,WAAW,GAAGwC,aAAlB,EAAiCmC,GAAG,GAAG,MAAN,CAAjC,KACK,IAAI3E,WAAW,GAAGwC,aAAlB,EAAiCmC,GAAG,GAAG,MAAN,CAAjC,KACAA,GAAG,GAAG,OAAN;EACN;;EAEDhO,EAAAA,MAAM,CAACK,IAAP,CAAY,eAAZ;;EAEA,MAAI+M,YAAY,IAAI/D,WAAW,KAAKwC,aAApC,EAAmD;EACjD,QAAImC,GAAG,KAAK,OAAZ,EAAqB;EACnBhO,MAAAA,MAAM,CAACK,IAAP,CAAY,yBAAZ;EACA;EACD;;EACDL,IAAAA,MAAM,CAACK,IAAP,CAAY,0BAAZ;;EACA,QAAI2N,GAAG,KAAK,MAAZ,EAAoB;EAClBhO,MAAAA,MAAM,CAACK,IAAP,CAAY,wBAAZ;EACD,KAFD,MAEO;EACLL,MAAAA,MAAM,CAACK,IAAP,CAAY,wBAAZ;EACD;EACF;EACF;;ACxBD,qBAAe;EACb8I,EAAAA,aAAa,EAAbA,aADa;EAEb2E,EAAAA,eAAe,EAAfA,eAFa;EAGb5W,EAAAA,aAAa,EAAbA;EAHa,CAAf;;ECJe,SAAS+W,OAAT,CACbpV,KADa,EAEbmQ,KAFa,EAGboE,YAHa,EAIbE,QAJa,EAKb;EAAA,MAJAzU,KAIA;EAJAA,IAAAA,KAIA,GAJQ,CAIR;EAAA;;EAAA,MAHAmQ,KAGA;EAHAA,IAAAA,KAGA,GAHQ,KAAK1H,MAAL,CAAY0H,KAGpB;EAAA;;EAAA,MAFAoE,YAEA;EAFAA,IAAAA,YAEA,GAFe,IAEf;EAAA;;EACA,MAAI,OAAOvU,KAAP,KAAiB,QAAjB,IAA6B,OAAOA,KAAP,KAAiB,QAAlD,EAA4D;EAC1D,UAAM,IAAIqV,KAAJ,8EACuE,OAAOrV,KAD9E,cAAN;EAGD;;EAED,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;EAC7B;EACJ;EACA;EACA;EACI,QAAMsV,aAAa,GAAG5K,QAAQ,CAAC1K,KAAD,EAAQ,EAAR,CAA9B;EAEA;EACJ;EACA;EACA;EACA;;EACI,QAAMuV,aAAa,GAAGC,QAAQ,CAACF,aAAD,CAA9B;;EAEA,QAAI,CAACC,aAAL,EAAoB;EAClB,YAAM,IAAIF,KAAJ,yEACkErV,KADlE,cAAN;EAGD,KAlB4B;EAqB7B;;;EACAA,IAAAA,KAAK,GAAGsV,aAAR;EACD;;EAED,MAAMnO,MAAM,GAAG,IAAf;EACA,MAAI4E,UAAU,GAAG/L,KAAjB;EACA,MAAI+L,UAAU,GAAG,CAAjB,EAAoBA,UAAU,GAAG,CAAb;EAlCpB,MAqCEtD,MArCF,GA4CItB,MA5CJ,CAqCEsB,MArCF;EAAA,MAsCEiD,QAtCF,GA4CIvE,MA5CJ,CAsCEuE,QAtCF;EAAA,MAuCEC,UAvCF,GA4CIxE,MA5CJ,CAuCEwE,UAvCF;EAAA,MAwCEqH,aAxCF,GA4CI7L,MA5CJ,CAwCE6L,aAxCF;EAAA,MAyCExC,WAzCF,GA4CIrJ,MA5CJ,CAyCEqJ,WAzCF;EAAA,MA0CgBxF,GA1ChB,GA4CI7D,MA5CJ,CA0CE8D,YA1CF;EAAA,MA2CE+I,SA3CF,GA4CI7M,MA5CJ,CA2CE6M,SA3CF;;EA6CA,MAAI7M,MAAM,CAACuN,SAAP,IAAoBjM,MAAM,CAACkM,8BAA/B,EAA+D;EAC7D,WAAO,KAAP;EACD;;EAED,MAAMvB,IAAI,GAAGnG,IAAI,CAACiB,GAAL,CAAS/G,MAAM,CAACsB,MAAP,CAAcuG,kBAAvB,EAA2CjD,UAA3C,CAAb;EACA,MAAI6D,SAAS,GAAGwD,IAAI,GAAGnG,IAAI,CAACC,KAAL,CAAW,CAACnB,UAAU,GAAGqH,IAAd,IAAsBjM,MAAM,CAACsB,MAAP,CAAcqF,cAA/C,CAAvB;EACA,MAAI8B,SAAS,IAAIlE,QAAQ,CAACza,MAA1B,EAAkC2e,SAAS,GAAGlE,QAAQ,CAACza,MAAT,GAAkB,CAA9B;;EAElC,MAAI,CAACuf,WAAW,IAAI/H,MAAM,CAACgN,YAAtB,IAAsC,CAAvC,OAA+CzC,aAAa,IAAI,CAAhE,KAAsEuB,YAA1E,EAAwF;EACtFpN,IAAAA,MAAM,CAACK,IAAP,CAAY,wBAAZ;EACD;;EAED,MAAMqJ,SAAS,GAAG,CAACnF,QAAQ,CAACkE,SAAD,CAA3B,CAzDA;;EA4DAzI,EAAAA,MAAM,CAACqK,cAAP,CAAsBX,SAAtB,EA5DA;;EA+DA,MAAIpI,MAAM,CAAC0K,mBAAX,EAAgC;EAC9B,SAAK,IAAIpa,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4S,UAAU,CAAC1a,MAA/B,EAAuC8H,CAAC,IAAI,CAA5C,EAA+C;EAC7C,UAAM2c,mBAAmB,GAAG,CAACzI,IAAI,CAACC,KAAL,CAAW2D,SAAS,GAAG,GAAvB,CAA7B;EACA,UAAM8E,cAAc,GAAG1I,IAAI,CAACC,KAAL,CAAWvB,UAAU,CAAC5S,CAAD,CAAV,GAAgB,GAA3B,CAAvB;EACA,UAAM6c,kBAAkB,GAAG3I,IAAI,CAACC,KAAL,CAAWvB,UAAU,CAAC5S,CAAC,GAAG,CAAL,CAAV,GAAoB,GAA/B,CAA3B;;EACA,UAAI,OAAO4S,UAAU,CAAC5S,CAAC,GAAG,CAAL,CAAjB,KAA6B,WAAjC,EAA8C;EAC5C,YACE2c,mBAAmB,IAAIC,cAAvB,IACAD,mBAAmB,GAAGE,kBAAkB,GAAG,CAACA,kBAAkB,GAAGD,cAAtB,IAAwC,CAFrF,EAGE;EACA5J,UAAAA,UAAU,GAAGhT,CAAb;EACD,SALD,MAKO,IACL2c,mBAAmB,IAAIC,cAAvB,IACAD,mBAAmB,GAAGE,kBAFjB,EAGL;EACA7J,UAAAA,UAAU,GAAGhT,CAAC,GAAG,CAAjB;EACD;EACF,OAZD,MAYO,IAAI2c,mBAAmB,IAAIC,cAA3B,EAA2C;EAChD5J,QAAAA,UAAU,GAAGhT,CAAb;EACD;EACF;EACF,GApFD;;;EAsFA,MAAIoO,MAAM,CAACI,WAAP,IAAsBwE,UAAU,KAAKyE,WAAzC,EAAsD;EACpD,QACE,CAACrJ,MAAM,CAAC0O,cAAR,IACAhF,SAAS,GAAG1J,MAAM,CAAC0J,SADnB,IAEAA,SAAS,GAAG1J,MAAM,CAAC+J,YAAP,EAHd,EAIE;EACA,aAAO,KAAP;EACD;;EACD,QACE,CAAC/J,MAAM,CAAC2O,cAAR,IACAjF,SAAS,GAAG1J,MAAM,CAAC0J,SADnB,IAEAA,SAAS,GAAG1J,MAAM,CAACwK,YAAP,EAHd,EAIE;EACA,UAAI,CAACnB,WAAW,IAAI,CAAhB,MAAuBzE,UAA3B,EAAuC,OAAO,KAAP;EACxC;EACF;;EAED,MAAImJ,SAAJ;EACA,MAAInJ,UAAU,GAAGyE,WAAjB,EAA8B0E,SAAS,GAAG,MAAZ,CAA9B,KACK,IAAInJ,UAAU,GAAGyE,WAAjB,EAA8B0E,SAAS,GAAG,MAAZ,CAA9B,KACAA,SAAS,GAAG,OAAZ,CA1GL;;EA6GA,MAAKlK,GAAG,IAAI,CAAC6F,SAAD,KAAe1J,MAAM,CAAC0J,SAA9B,IAA6C,CAAC7F,GAAD,IAAQ6F,SAAS,KAAK1J,MAAM,CAAC0J,SAA9E,EAA0F;EACxF1J,IAAAA,MAAM,CAAC2L,iBAAP,CAAyB/G,UAAzB,EADwF;;EAGxF,QAAItD,MAAM,CAAC0I,UAAX,EAAuB;EACrBhK,MAAAA,MAAM,CAAC+I,gBAAP;EACD;;EACD/I,IAAAA,MAAM,CAAC6K,mBAAP;;EACA,QAAIvJ,MAAM,CAACyG,MAAP,KAAkB,OAAtB,EAA+B;EAC7B/H,MAAAA,MAAM,CAAC2M,YAAP,CAAoBjD,SAApB;EACD;;EACD,QAAIqE,SAAS,KAAK,OAAlB,EAA2B;EACzB/N,MAAAA,MAAM,CAAC8N,eAAP,CAAuBV,YAAvB,EAAqCW,SAArC;EACA/N,MAAAA,MAAM,CAAC9I,aAAP,CAAqBkW,YAArB,EAAmCW,SAAnC;EACD;;EACD,WAAO,KAAP;EACD;;EACD,MAAIzM,MAAM,CAACuD,OAAX,EAAoB;EAClB,QAAM6I,GAAG,GAAG1N,MAAM,CAACqD,YAAP,EAAZ;EACA,QAAIuL,CAAC,GAAG,CAAClF,SAAT;;EACA,QAAI7F,GAAJ,EAAS;EACP+K,MAAAA,CAAC,GAAG/B,SAAS,CAACgC,WAAV,GAAwBhC,SAAS,CAACpV,WAAlC,GAAgDmX,CAApD;EACD;;EACD,QAAI5F,KAAK,KAAK,CAAd,EAAiB;EACf6D,MAAAA,SAAS,CAACa,GAAG,GAAG,YAAH,GAAkB,WAAtB,CAAT,GAA8CkB,CAA9C;EACD,KAFD,MAEO;EACL;EACA,UAAI/B,SAAS,CAACc,QAAd,EAAwB;EAAA;;EACtBd,QAAAA,SAAS,CAACc,QAAV,gDACGD,GAAG,GAAG,MAAH,GAAY,KADlB,IAC0BkB,CAD1B,sBAEEhB,QAFF,GAEY,QAFZ;EAID,OALD,MAKO;EACLf,QAAAA,SAAS,CAACa,GAAG,GAAG,YAAH,GAAkB,WAAtB,CAAT,GAA8CkB,CAA9C;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED,MAAI5F,KAAK,KAAK,CAAd,EAAiB;EACfhJ,IAAAA,MAAM,CAACmJ,aAAP,CAAqB,CAArB;EACAnJ,IAAAA,MAAM,CAAC2M,YAAP,CAAoBjD,SAApB;EACA1J,IAAAA,MAAM,CAAC2L,iBAAP,CAAyB/G,UAAzB;EACA5E,IAAAA,MAAM,CAAC6K,mBAAP;EACA7K,IAAAA,MAAM,CAACK,IAAP,CAAY,uBAAZ,EAAqC2I,KAArC,EAA4CsE,QAA5C;EACAtN,IAAAA,MAAM,CAAC8N,eAAP,CAAuBV,YAAvB,EAAqCW,SAArC;EACA/N,IAAAA,MAAM,CAAC9I,aAAP,CAAqBkW,YAArB,EAAmCW,SAAnC;EACD,GARD,MAQO;EACL/N,IAAAA,MAAM,CAACmJ,aAAP,CAAqBH,KAArB;EACAhJ,IAAAA,MAAM,CAAC2M,YAAP,CAAoBjD,SAApB;EACA1J,IAAAA,MAAM,CAAC2L,iBAAP,CAAyB/G,UAAzB;EACA5E,IAAAA,MAAM,CAAC6K,mBAAP;EACA7K,IAAAA,MAAM,CAACK,IAAP,CAAY,uBAAZ,EAAqC2I,KAArC,EAA4CsE,QAA5C;EACAtN,IAAAA,MAAM,CAAC8N,eAAP,CAAuBV,YAAvB,EAAqCW,SAArC;;EACA,QAAI,CAAC/N,MAAM,CAACuN,SAAZ,EAAuB;EACrBvN,MAAAA,MAAM,CAACuN,SAAP,GAAmB,IAAnB;;EACA,UAAI,CAACvN,MAAM,CAAC8O,6BAAZ,EAA2C;EACzC9O,QAAAA,MAAM,CAAC8O,6BAAP,GAAuC,SAAS5X,aAAT,CAAuBxI,CAAvB,EAA0B;EAC/D,cAAI,CAACsR,MAAD,IAAWA,MAAM,CAACG,SAAtB,EAAiC;EACjC,cAAIzR,CAAC,CAACjF,MAAF,KAAa,IAAjB,EAAuB;EACvBuW,UAAAA,MAAM,CAAC2B,UAAP,CAAkB,CAAlB,EAAqBzX,mBAArB,CACE,eADF,EAEE8V,MAAM,CAAC8O,6BAFT;EAIA9O,UAAAA,MAAM,CAAC2B,UAAP,CAAkB,CAAlB,EAAqBzX,mBAArB,CACE,qBADF,EAEE8V,MAAM,CAAC8O,6BAFT;EAIA9O,UAAAA,MAAM,CAAC8O,6BAAP,GAAuC,IAAvC;EACA,iBAAO9O,MAAM,CAAC8O,6BAAd;EACA9O,UAAAA,MAAM,CAAC9I,aAAP,CAAqBkW,YAArB,EAAmCW,SAAnC;EACD,SAdD;EAeD;;EACD/N,MAAAA,MAAM,CAAC2B,UAAP,CAAkB,CAAlB,EAAqB1X,gBAArB,CAAsC,eAAtC,EAAuD+V,MAAM,CAAC8O,6BAA9D;EACA9O,MAAAA,MAAM,CAAC2B,UAAP,CAAkB,CAAlB,EAAqB1X,gBAArB,CACE,qBADF,EAEE+V,MAAM,CAAC8O,6BAFT;EAID;EACF;;EAED,SAAO,IAAP;EACD;;ECnMc,SAASC,WAAT,CACblW,KADa,EAEbmQ,KAFa,EAGboE,YAHa,EAIbE,QAJa,EAKb;EAAA,MAJAzU,KAIA;EAJAA,IAAAA,KAIA,GAJQ,CAIR;EAAA;;EAAA,MAHAmQ,KAGA;EAHAA,IAAAA,KAGA,GAHQ,KAAK1H,MAAL,CAAY0H,KAGpB;EAAA;;EAAA,MAFAoE,YAEA;EAFAA,IAAAA,YAEA,GAFe,IAEf;EAAA;;EACA,MAAMpN,MAAM,GAAG,IAAf;EACA,MAAIgP,QAAQ,GAAGnW,KAAf;;EACA,MAAImH,MAAM,CAACsB,MAAP,CAAcgK,IAAlB,EAAwB;EACtB0D,IAAAA,QAAQ,IAAIhP,MAAM,CAACiP,YAAnB;EACD;;EAED,SAAOjP,MAAM,CAACiO,OAAP,CAAee,QAAf,EAAyBhG,KAAzB,EAAgCoE,YAAhC,EAA8CE,QAA9C,CAAP;EACD;;ECbD;EACe,SAAS4B,SAAT,CAAmBlG,KAAnB,EAA8CoE,YAA9C,EAAmEE,QAAnE,EAA6E;EAAA,MAA1DtE,KAA0D;EAA1DA,IAAAA,KAA0D,GAAlD,KAAK1H,MAAL,CAAY0H,KAAsC;EAAA;;EAAA,MAA/BoE,YAA+B;EAA/BA,IAAAA,YAA+B,GAAhB,IAAgB;EAAA;;EAC1F,MAAMpN,MAAM,GAAG,IAAf;EAD0F,MAElFsB,MAFkF,GAE5DtB,MAF4D,CAElFsB,MAFkF;EAAA,MAE1EiM,SAF0E,GAE5DvN,MAF4D,CAE1EuN,SAF0E;EAG1F,MAAM4B,SAAS,GAAGnP,MAAM,CAACqJ,WAAP,GAAqB/H,MAAM,CAACuG,kBAA5B,GAAiD,CAAjD,GAAqDvG,MAAM,CAACqF,cAA9E;;EACA,MAAIrF,MAAM,CAACgK,IAAX,EAAiB;EACf,QAAIiC,SAAS,IAAIjM,MAAM,CAAC8N,iBAAxB,EAA2C,OAAO,KAAP;EAC3CpP,IAAAA,MAAM,CAACqP,OAAP,GAFe;;EAIfrP,IAAAA,MAAM,CAACsP,WAAP,GAAqBtP,MAAM,CAAC2B,UAAP,CAAkB,CAAlB,EAAqBzJ,UAA1C;EACD;;EACD,SAAO8H,MAAM,CAACiO,OAAP,CAAejO,MAAM,CAACqJ,WAAP,GAAqB8F,SAApC,EAA+CnG,KAA/C,EAAsDoE,YAAtD,EAAoEE,QAApE,CAAP;EACD;;ECZD;EACe,SAASiC,SAAT,CAAmBvG,KAAnB,EAA8CoE,YAA9C,EAAmEE,QAAnE,EAA6E;EAAA,MAA1DtE,KAA0D;EAA1DA,IAAAA,KAA0D,GAAlD,KAAK1H,MAAL,CAAY0H,KAAsC;EAAA;;EAAA,MAA/BoE,YAA+B;EAA/BA,IAAAA,YAA+B,GAAhB,IAAgB;EAAA;;EAC1F,MAAMpN,MAAM,GAAG,IAAf;EAD0F,MAElFsB,MAFkF,GAExBtB,MAFwB,CAElFsB,MAFkF;EAAA,MAE1EiM,SAF0E,GAExBvN,MAFwB,CAE1EuN,SAF0E;EAAA,MAE/DhJ,QAF+D,GAExBvE,MAFwB,CAE/DuE,QAF+D;EAAA,MAErDC,UAFqD,GAExBxE,MAFwB,CAErDwE,UAFqD;EAAA,MAEzCV,YAFyC,GAExB9D,MAFwB,CAEzC8D,YAFyC;;EAI1F,MAAIxC,MAAM,CAACgK,IAAX,EAAiB;EACf,QAAIiC,SAAS,IAAIjM,MAAM,CAAC8N,iBAAxB,EAA2C,OAAO,KAAP;EAC3CpP,IAAAA,MAAM,CAACqP,OAAP,GAFe;;EAIfrP,IAAAA,MAAM,CAACsP,WAAP,GAAqBtP,MAAM,CAAC2B,UAAP,CAAkB,CAAlB,EAAqBzJ,UAA1C;EACD;;EACD,MAAMwR,SAAS,GAAG5F,YAAY,GAAG9D,MAAM,CAAC0J,SAAV,GAAsB,CAAC1J,MAAM,CAAC0J,SAA5D;;EACA,WAAS8F,SAAT,CAAmBC,GAAnB,EAAwB;EACtB,QAAIA,GAAG,GAAG,CAAV,EAAa,OAAO,CAAC3J,IAAI,CAACC,KAAL,CAAWD,IAAI,CAAC8B,GAAL,CAAS6H,GAAT,CAAX,CAAR;EACb,WAAO3J,IAAI,CAACC,KAAL,CAAW0J,GAAX,CAAP;EACD;;EACD,MAAMlB,mBAAmB,GAAGiB,SAAS,CAAC9F,SAAD,CAArC;EACA,MAAMgG,kBAAkB,GAAGnL,QAAQ,CAAC3R,GAAT,CAAa,UAAC6c,GAAD;EAAA,WAASD,SAAS,CAACC,GAAD,CAAlB;EAAA,GAAb,CAA3B;EAEA,EAAoBlL,QAAQ,CAACmL,kBAAkB,CAACjgB,OAAnB,CAA2B8e,mBAA3B,CAAD;EAC5B,MAAIoB,QAAQ,GAAGpL,QAAQ,CAACmL,kBAAkB,CAACjgB,OAAnB,CAA2B8e,mBAA3B,IAAkD,CAAnD,CAAvB;;EACA,MAAI,OAAOoB,QAAP,KAAoB,WAApB,IAAmCrO,MAAM,CAACuD,OAA9C,EAAuD;EACrDN,IAAAA,QAAQ,CAAC3a,OAAT,CAAiB,UAAC0e,IAAD,EAAU;EACzB,UAAI,CAACqH,QAAD,IAAapB,mBAAmB,IAAIjG,IAAxC,EAA8CqH,QAAQ,GAAGrH,IAAX;EAC/C,KAFD;EAGD;;EACD,MAAIsH,SAAJ;;EACA,MAAI,OAAOD,QAAP,KAAoB,WAAxB,EAAqC;EACnCC,IAAAA,SAAS,GAAGpL,UAAU,CAAC/U,OAAX,CAAmBkgB,QAAnB,CAAZ;EACA,QAAIC,SAAS,GAAG,CAAhB,EAAmBA,SAAS,GAAG5P,MAAM,CAACqJ,WAAP,GAAqB,CAAjC;EACpB;;EACD,SAAOrJ,MAAM,CAACiO,OAAP,CAAe2B,SAAf,EAA0B5G,KAA1B,EAAiCoE,YAAjC,EAA+CE,QAA/C,CAAP;EACD;;EChCD;EACe,SAASuC,UAAT,CAAoB7G,KAApB,EAA+CoE,YAA/C,EAAoEE,QAApE,EAA8E;EAAA,MAA1DtE,KAA0D;EAA1DA,IAAAA,KAA0D,GAAlD,KAAK1H,MAAL,CAAY0H,KAAsC;EAAA;;EAAA,MAA/BoE,YAA+B;EAA/BA,IAAAA,YAA+B,GAAhB,IAAgB;EAAA;;EAC3F,MAAMpN,MAAM,GAAG,IAAf;EACA,SAAOA,MAAM,CAACiO,OAAP,CAAejO,MAAM,CAACqJ,WAAtB,EAAmCL,KAAnC,EAA0CoE,YAA1C,EAAwDE,QAAxD,CAAP;EACD;;ECJD;EACe,SAASwC,cAAT,CACb9G,KADa,EAEboE,YAFa,EAGbE,QAHa,EAIbyC,SAJa,EAKb;EAAA,MAJA/G,KAIA;EAJAA,IAAAA,KAIA,GAJQ,KAAK1H,MAAL,CAAY0H,KAIpB;EAAA;;EAAA,MAHAoE,YAGA;EAHAA,IAAAA,YAGA,GAHe,IAGf;EAAA;;EAAA,MADA2C,SACA;EADAA,IAAAA,SACA,GADY,GACZ;EAAA;;EACA,MAAM/P,MAAM,GAAG,IAAf;EACA,MAAInH,KAAK,GAAGmH,MAAM,CAACqJ,WAAnB;EACA,MAAM4C,IAAI,GAAGnG,IAAI,CAACiB,GAAL,CAAS/G,MAAM,CAACsB,MAAP,CAAcuG,kBAAvB,EAA2ChP,KAA3C,CAAb;EACA,MAAM4P,SAAS,GAAGwD,IAAI,GAAGnG,IAAI,CAACC,KAAL,CAAW,CAAClN,KAAK,GAAGoT,IAAT,IAAiBjM,MAAM,CAACsB,MAAP,CAAcqF,cAA1C,CAAzB;EAEA,MAAM+C,SAAS,GAAG1J,MAAM,CAAC8D,YAAP,GAAsB9D,MAAM,CAAC0J,SAA7B,GAAyC,CAAC1J,MAAM,CAAC0J,SAAnE;;EAEA,MAAIA,SAAS,IAAI1J,MAAM,CAACuE,QAAP,CAAgBkE,SAAhB,CAAjB,EAA6C;EAC3C;EACA;EACA,QAAMuH,WAAW,GAAGhQ,MAAM,CAACuE,QAAP,CAAgBkE,SAAhB,CAApB;EACA,QAAMwH,QAAQ,GAAGjQ,MAAM,CAACuE,QAAP,CAAgBkE,SAAS,GAAG,CAA5B,CAAjB;;EACA,QAAIiB,SAAS,GAAGsG,WAAZ,GAA0B,CAACC,QAAQ,GAAGD,WAAZ,IAA2BD,SAAzD,EAAoE;EAClElX,MAAAA,KAAK,IAAImH,MAAM,CAACsB,MAAP,CAAcqF,cAAvB;EACD;EACF,GARD,MAQO;EACL;EACA;EACA,QAAMgJ,QAAQ,GAAG3P,MAAM,CAACuE,QAAP,CAAgBkE,SAAS,GAAG,CAA5B,CAAjB;EACA,QAAMuH,YAAW,GAAGhQ,MAAM,CAACuE,QAAP,CAAgBkE,SAAhB,CAApB;;EACA,QAAIiB,SAAS,GAAGiG,QAAZ,IAAwB,CAACK,YAAW,GAAGL,QAAf,IAA2BI,SAAvD,EAAkE;EAChElX,MAAAA,KAAK,IAAImH,MAAM,CAACsB,MAAP,CAAcqF,cAAvB;EACD;EACF;;EACD9N,EAAAA,KAAK,GAAGiN,IAAI,CAACK,GAAL,CAAStN,KAAT,EAAgB,CAAhB,CAAR;EACAA,EAAAA,KAAK,GAAGiN,IAAI,CAACiB,GAAL,CAASlO,KAAT,EAAgBmH,MAAM,CAACwE,UAAP,CAAkB1a,MAAlB,GAA2B,CAA3C,CAAR;EAEA,SAAOkW,MAAM,CAACiO,OAAP,CAAepV,KAAf,EAAsBmQ,KAAtB,EAA6BoE,YAA7B,EAA2CE,QAA3C,CAAP;EACD;;EChCc,SAASf,mBAAT,GAA+B;EAC5C,MAAMvM,MAAM,GAAG,IAAf;EAD4C,MAEpCsB,MAFoC,GAEbtB,MAFa,CAEpCsB,MAFoC;EAAA,MAE5BK,UAF4B,GAEb3B,MAFa,CAE5B2B,UAF4B;EAI5C,MAAMsE,aAAa,GACjB3E,MAAM,CAAC2E,aAAP,KAAyB,MAAzB,GAAkCjG,MAAM,CAACkQ,oBAAP,EAAlC,GAAkE5O,MAAM,CAAC2E,aAD3E;EAEA,MAAIkK,YAAY,GAAGnQ,MAAM,CAACsM,YAA1B;EACA,MAAIxB,SAAJ;;EACA,MAAIxJ,MAAM,CAACgK,IAAX,EAAiB;EACf,QAAItL,MAAM,CAACuN,SAAX,EAAsB;EACtBzC,IAAAA,SAAS,GAAGvH,QAAQ,CAACvR,CAAC,CAACgO,MAAM,CAACqM,YAAR,CAAD,CAAuBrY,IAAvB,CAA4B,yBAA5B,CAAD,EAAyD,EAAzD,CAApB;;EACA,QAAIsN,MAAM,CAACqG,cAAX,EAA2B;EACzB,UACEwI,YAAY,GAAGnQ,MAAM,CAACiP,YAAP,GAAsBhJ,aAAa,GAAG,CAArD,IACAkK,YAAY,GAAGnQ,MAAM,CAACoE,MAAP,CAActa,MAAd,GAAuBkW,MAAM,CAACiP,YAA9B,GAA6ChJ,aAAa,GAAG,CAF9E,EAGE;EACAjG,QAAAA,MAAM,CAACqP,OAAP;EACAc,QAAAA,YAAY,GAAGxO,UAAU,CACtB/W,QADY,OAEP0W,MAAM,CAAC+C,UAFA,mCAEuCyG,SAFvC,iBAE2DxJ,MAAM,CAACiK,mBAFlE,QAIZhS,EAJY,CAIT,CAJS,EAKZV,KALY,EAAf;EAOAyC,QAAAA,QAAQ,CAAC,YAAM;EACb0E,UAAAA,MAAM,CAACiO,OAAP,CAAekC,YAAf;EACD,SAFO,CAAR;EAGD,OAfD,MAeO;EACLnQ,QAAAA,MAAM,CAACiO,OAAP,CAAekC,YAAf;EACD;EACF,KAnBD,MAmBO,IAAIA,YAAY,GAAGnQ,MAAM,CAACoE,MAAP,CAActa,MAAd,GAAuBmc,aAA1C,EAAyD;EAC9DjG,MAAAA,MAAM,CAACqP,OAAP;EACAc,MAAAA,YAAY,GAAGxO,UAAU,CACtB/W,QADY,OAEP0W,MAAM,CAAC+C,UAFA,mCAEuCyG,SAFvC,iBAE2DxJ,MAAM,CAACiK,mBAFlE,QAIZhS,EAJY,CAIT,CAJS,EAKZV,KALY,EAAf;EAOAyC,MAAAA,QAAQ,CAAC,YAAM;EACb0E,QAAAA,MAAM,CAACiO,OAAP,CAAekC,YAAf;EACD,OAFO,CAAR;EAGD,KAZM,MAYA;EACLnQ,MAAAA,MAAM,CAACiO,OAAP,CAAekC,YAAf;EACD;EACF,GArCD,MAqCO;EACLnQ,IAAAA,MAAM,CAACiO,OAAP,CAAekC,YAAf;EACD;EACF;;AC3CD,cAAe;EACblC,EAAAA,OAAO,EAAPA,OADa;EAEbc,EAAAA,WAAW,EAAXA,WAFa;EAGbG,EAAAA,SAAS,EAATA,SAHa;EAIbK,EAAAA,SAAS,EAATA,SAJa;EAKbM,EAAAA,UAAU,EAAVA,UALa;EAMbC,EAAAA,cAAc,EAAdA,cANa;EAObvD,EAAAA,mBAAmB,EAAnBA;EAPa,CAAf;;ECLe,SAAS6D,UAAT,GAAsB;EACnC,MAAMpQ,MAAM,GAAG,IAAf;EACA,MAAMlU,QAAQ,GAAGF,WAAW,EAA5B;EAFmC,MAG3B0V,MAH2B,GAGJtB,MAHI,CAG3BsB,MAH2B;EAAA,MAGnBK,UAHmB,GAGJ3B,MAHI,CAGnB2B,UAHmB;;EAKnCA,EAAAA,UAAU,CAAC/W,QAAX,OAAwB0W,MAAM,CAAC+C,UAA/B,SAA6C/C,MAAM,CAACiK,mBAApD,EAA2EjY,MAA3E;EAEA,MAAI8Q,MAAM,GAAGzC,UAAU,CAAC/W,QAAX,OAAwB0W,MAAM,CAAC+C,UAA/B,CAAb;;EAEA,MAAI/C,MAAM,CAAC+O,sBAAX,EAAmC;EACjC,QAAMC,cAAc,GAAGhP,MAAM,CAACqF,cAAP,GAAyBvC,MAAM,CAACta,MAAP,GAAgBwX,MAAM,CAACqF,cAAvE;;EACA,QAAI2J,cAAc,KAAKhP,MAAM,CAACqF,cAA9B,EAA8C;EAC5C,WAAK,IAAI/U,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0e,cAApB,EAAoC1e,CAAC,IAAI,CAAzC,EAA4C;EAC1C,YAAM2e,SAAS,GAAGve,CAAC,CAAClG,QAAQ,CAACnB,aAAT,CAAuB,KAAvB,CAAD,CAAD,CAAiC4H,QAAjC,CACb+O,MAAM,CAAC+C,UADM,SACQ/C,MAAM,CAACkP,eADf,CAAlB;EAGA7O,QAAAA,UAAU,CAAClI,MAAX,CAAkB8W,SAAlB;EACD;;EACDnM,MAAAA,MAAM,GAAGzC,UAAU,CAAC/W,QAAX,OAAwB0W,MAAM,CAAC+C,UAA/B,CAAT;EACD;EACF;;EAED,MAAI/C,MAAM,CAAC2E,aAAP,KAAyB,MAAzB,IAAmC,CAAC3E,MAAM,CAAC2N,YAA/C,EAA6D3N,MAAM,CAAC2N,YAAP,GAAsB7K,MAAM,CAACta,MAA7B;EAE7DkW,EAAAA,MAAM,CAACiP,YAAP,GAAsBnJ,IAAI,CAACE,IAAL,CAAUtO,UAAU,CAAC4J,MAAM,CAAC2N,YAAP,IAAuB3N,MAAM,CAAC2E,aAA/B,EAA8C,EAA9C,CAApB,CAAtB;EACAjG,EAAAA,MAAM,CAACiP,YAAP,IAAuB3N,MAAM,CAACmP,oBAA9B;;EACA,MAAIzQ,MAAM,CAACiP,YAAP,GAAsB7K,MAAM,CAACta,MAAjC,EAAyC;EACvCkW,IAAAA,MAAM,CAACiP,YAAP,GAAsB7K,MAAM,CAACta,MAA7B;EACD;;EAED,MAAM4mB,aAAa,GAAG,EAAtB;EACA,MAAMC,YAAY,GAAG,EAArB;EACAvM,EAAAA,MAAM,CAACxL,IAAP,CAAY,UAACtH,EAAD,EAAKuH,KAAL,EAAe;EACzB,QAAM0N,KAAK,GAAGvU,CAAC,CAACV,EAAD,CAAf;;EACA,QAAIuH,KAAK,GAAGmH,MAAM,CAACiP,YAAnB,EAAiC;EAC/B0B,MAAAA,YAAY,CAAC3hB,IAAb,CAAkBsC,EAAlB;EACD;;EACD,QAAIuH,KAAK,GAAGuL,MAAM,CAACta,MAAf,IAAyB+O,KAAK,IAAIuL,MAAM,CAACta,MAAP,GAAgBkW,MAAM,CAACiP,YAA7D,EAA2E;EACzEyB,MAAAA,aAAa,CAAC1hB,IAAd,CAAmBsC,EAAnB;EACD;;EACDiV,IAAAA,KAAK,CAACvS,IAAN,CAAW,yBAAX,EAAsC6E,KAAtC;EACD,GATD;;EAUA,OAAK,IAAIjH,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG+e,YAAY,CAAC7mB,MAAjC,EAAyC8H,EAAC,IAAI,CAA9C,EAAiD;EAC/C+P,IAAAA,UAAU,CAAClI,MAAX,CAAkBzH,CAAC,CAAC2e,YAAY,CAAC/e,EAAD,CAAZ,CAAgBgf,SAAhB,CAA0B,IAA1B,CAAD,CAAD,CAAmCre,QAAnC,CAA4C+O,MAAM,CAACiK,mBAAnD,CAAlB;EACD;;EACD,OAAK,IAAI3Z,GAAC,GAAG8e,aAAa,CAAC5mB,MAAd,GAAuB,CAApC,EAAuC8H,GAAC,IAAI,CAA5C,EAA+CA,GAAC,IAAI,CAApD,EAAuD;EACrD+P,IAAAA,UAAU,CAAC7H,OAAX,CAAmB9H,CAAC,CAAC0e,aAAa,CAAC9e,GAAD,CAAb,CAAiBgf,SAAjB,CAA2B,IAA3B,CAAD,CAAD,CAAoCre,QAApC,CAA6C+O,MAAM,CAACiK,mBAApD,CAAnB;EACD;EACF;;ECnDc,SAAS8D,OAAT,GAAmB;EAChC,MAAMrP,MAAM,GAAG,IAAf;EAEAA,EAAAA,MAAM,CAACK,IAAP,CAAY,eAAZ;EAHgC,MAM9BgJ,WAN8B,GAa5BrJ,MAb4B,CAM9BqJ,WAN8B;EAAA,MAO9BjF,MAP8B,GAa5BpE,MAb4B,CAO9BoE,MAP8B;EAAA,MAQ9B6K,YAR8B,GAa5BjP,MAb4B,CAQ9BiP,YAR8B;EAAA,MAS9BN,cAT8B,GAa5B3O,MAb4B,CAS9B2O,cAT8B;EAAA,MAU9BD,cAV8B,GAa5B1O,MAb4B,CAU9B0O,cAV8B;EAAA,MAW9BnK,QAX8B,GAa5BvE,MAb4B,CAW9BuE,QAX8B;EAAA,MAYhBV,GAZgB,GAa5B7D,MAb4B,CAY9B8D,YAZ8B;EAchC,MAAIkL,QAAJ;EACAhP,EAAAA,MAAM,CAAC2O,cAAP,GAAwB,IAAxB;EACA3O,EAAAA,MAAM,CAAC0O,cAAP,GAAwB,IAAxB;EAEA,MAAMmC,aAAa,GAAG,CAACtM,QAAQ,CAAC8E,WAAD,CAA/B;EACA,MAAMyH,IAAI,GAAGD,aAAa,GAAG7Q,MAAM,CAACvE,YAAP,EAA7B,CAnBgC;;EAsBhC,MAAI4N,WAAW,GAAG4F,YAAlB,EAAgC;EAC9BD,IAAAA,QAAQ,GAAG5K,MAAM,CAACta,MAAP,GAAgBmlB,YAAY,GAAG,CAA/B,GAAmC5F,WAA9C;EACA2F,IAAAA,QAAQ,IAAIC,YAAZ;EACA,QAAM8B,YAAY,GAAG/Q,MAAM,CAACiO,OAAP,CAAee,QAAf,EAAyB,CAAzB,EAA4B,KAA5B,EAAmC,IAAnC,CAArB;;EACA,QAAI+B,YAAY,IAAID,IAAI,KAAK,CAA7B,EAAgC;EAC9B9Q,MAAAA,MAAM,CAAC2M,YAAP,CAAoB,CAAC9I,GAAG,GAAG,CAAC7D,MAAM,CAAC0J,SAAX,GAAuB1J,MAAM,CAAC0J,SAAlC,IAA+CoH,IAAnE;EACD;EACF,GAPD,MAOO,IAAIzH,WAAW,IAAIjF,MAAM,CAACta,MAAP,GAAgBmlB,YAAnC,EAAiD;EACtD;EACAD,IAAAA,QAAQ,GAAG,CAAC5K,MAAM,CAACta,MAAR,GAAiBuf,WAAjB,GAA+B4F,YAA1C;EACAD,IAAAA,QAAQ,IAAIC,YAAZ;;EACA,QAAM8B,aAAY,GAAG/Q,MAAM,CAACiO,OAAP,CAAee,QAAf,EAAyB,CAAzB,EAA4B,KAA5B,EAAmC,IAAnC,CAArB;;EACA,QAAI+B,aAAY,IAAID,IAAI,KAAK,CAA7B,EAAgC;EAC9B9Q,MAAAA,MAAM,CAAC2M,YAAP,CAAoB,CAAC9I,GAAG,GAAG,CAAC7D,MAAM,CAAC0J,SAAX,GAAuB1J,MAAM,CAAC0J,SAAlC,IAA+CoH,IAAnE;EACD;EACF;;EACD9Q,EAAAA,MAAM,CAAC2O,cAAP,GAAwBA,cAAxB;EACA3O,EAAAA,MAAM,CAAC0O,cAAP,GAAwBA,cAAxB;EAEA1O,EAAAA,MAAM,CAACK,IAAP,CAAY,SAAZ;EACD;;EC1Cc,SAAS2Q,WAAT,GAAuB;EACpC,MAAMhR,MAAM,GAAG,IAAf;EADoC,MAE5B2B,UAF4B,GAEG3B,MAFH,CAE5B2B,UAF4B;EAAA,MAEhBL,MAFgB,GAEGtB,MAFH,CAEhBsB,MAFgB;EAAA,MAER8C,MAFQ,GAEGpE,MAFH,CAERoE,MAFQ;EAGpCzC,EAAAA,UAAU,CACP/W,QADH,OAEQ0W,MAAM,CAAC+C,UAFf,SAE6B/C,MAAM,CAACiK,mBAFpC,UAE4DjK,MAAM,CAAC+C,UAFnE,SAEiF/C,MAAM,CAACkP,eAFxF,EAIGld,MAJH;EAKA8Q,EAAAA,MAAM,CAAChQ,UAAP,CAAkB,yBAAlB;EACD;;ACLD,aAAe;EACbgc,EAAAA,UAAU,EAAVA,UADa;EAEbf,EAAAA,OAAO,EAAPA,OAFa;EAGb2B,EAAAA,WAAW,EAAXA;EAHa,CAAf;;ECJe,SAASC,aAAT,CAAuBC,MAAvB,EAA+B;EAC5C,MAAMlR,MAAM,GAAG,IAAf;EACA,MACEA,MAAM,CAAC7C,OAAP,CAAeE,KAAf,IACA,CAAC2C,MAAM,CAACsB,MAAP,CAAc6P,aADf,IAECnR,MAAM,CAACsB,MAAP,CAAcoH,aAAd,IAA+B1I,MAAM,CAACoR,QAFvC,IAGApR,MAAM,CAACsB,MAAP,CAAcuD,OAJhB,EAME;EACF,MAAMvT,EAAE,GAAG0O,MAAM,CAAC1O,EAAlB;EACAA,EAAAA,EAAE,CAACxG,KAAH,CAASumB,MAAT,GAAkB,MAAlB;EACA/f,EAAAA,EAAE,CAACxG,KAAH,CAASumB,MAAT,GAAkBH,MAAM,GAAG,kBAAH,GAAwB,cAAhD;EACA5f,EAAAA,EAAE,CAACxG,KAAH,CAASumB,MAAT,GAAkBH,MAAM,GAAG,cAAH,GAAoB,WAA5C;EACA5f,EAAAA,EAAE,CAACxG,KAAH,CAASumB,MAAT,GAAkBH,MAAM,GAAG,UAAH,GAAgB,MAAxC;EACD;;ECdc,SAASI,eAAT,GAA2B;EACxC,MAAMtR,MAAM,GAAG,IAAf;;EACA,MACEA,MAAM,CAAC7C,OAAP,CAAeE,KAAf,IACC2C,MAAM,CAACsB,MAAP,CAAcoH,aAAd,IAA+B1I,MAAM,CAACoR,QADvC,IAEApR,MAAM,CAACsB,MAAP,CAAcuD,OAHhB,EAIE;EACA;EACD;;EACD7E,EAAAA,MAAM,CAAC1O,EAAP,CAAUxG,KAAV,CAAgBumB,MAAhB,GAAyB,EAAzB;EACD;;ACPD,mBAAe;EACbJ,EAAAA,aAAa,EAAbA,aADa;EAEbK,EAAAA,eAAe,EAAfA;EAFa,CAAf;;ECHe,SAASC,WAAT,CAAqBnN,MAArB,EAA6B;EAC1C,MAAMpE,MAAM,GAAG,IAAf;EAD0C,MAElC2B,UAFkC,GAEX3B,MAFW,CAElC2B,UAFkC;EAAA,MAEtBL,MAFsB,GAEXtB,MAFW,CAEtBsB,MAFsB;;EAG1C,MAAIA,MAAM,CAACgK,IAAX,EAAiB;EACftL,IAAAA,MAAM,CAACgR,WAAP;EACD;;EACD,MAAI,OAAO5M,MAAP,KAAkB,QAAlB,IAA8B,YAAYA,MAA9C,EAAsD;EACpD,SAAK,IAAIxS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwS,MAAM,CAACta,MAA3B,EAAmC8H,CAAC,IAAI,CAAxC,EAA2C;EACzC,UAAIwS,MAAM,CAACxS,CAAD,CAAV,EAAe+P,UAAU,CAAClI,MAAX,CAAkB2K,MAAM,CAACxS,CAAD,CAAxB;EAChB;EACF,GAJD,MAIO;EACL+P,IAAAA,UAAU,CAAClI,MAAX,CAAkB2K,MAAlB;EACD;;EACD,MAAI9C,MAAM,CAACgK,IAAX,EAAiB;EACftL,IAAAA,MAAM,CAACoQ,UAAP;EACD;;EACD,MAAI,EAAE9O,MAAM,CAAC5D,QAAP,IAAmBsC,MAAM,CAAC7C,OAAP,CAAeO,QAApC,CAAJ,EAAmD;EACjDsC,IAAAA,MAAM,CAACwR,MAAP;EACD;EACF;;ECnBc,SAASC,YAAT,CAAsBrN,MAAtB,EAA8B;EAC3C,MAAMpE,MAAM,GAAG,IAAf;EAD2C,MAEnCsB,MAFmC,GAECtB,MAFD,CAEnCsB,MAFmC;EAAA,MAE3BK,UAF2B,GAEC3B,MAFD,CAE3B2B,UAF2B;EAAA,MAEf0H,WAFe,GAECrJ,MAFD,CAEfqJ,WAFe;;EAI3C,MAAI/H,MAAM,CAACgK,IAAX,EAAiB;EACftL,IAAAA,MAAM,CAACgR,WAAP;EACD;;EACD,MAAIpF,cAAc,GAAGvC,WAAW,GAAG,CAAnC;;EACA,MAAI,OAAOjF,MAAP,KAAkB,QAAlB,IAA8B,YAAYA,MAA9C,EAAsD;EACpD,SAAK,IAAIxS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwS,MAAM,CAACta,MAA3B,EAAmC8H,CAAC,IAAI,CAAxC,EAA2C;EACzC,UAAIwS,MAAM,CAACxS,CAAD,CAAV,EAAe+P,UAAU,CAAC7H,OAAX,CAAmBsK,MAAM,CAACxS,CAAD,CAAzB;EAChB;;EACDga,IAAAA,cAAc,GAAGvC,WAAW,GAAGjF,MAAM,CAACta,MAAtC;EACD,GALD,MAKO;EACL6X,IAAAA,UAAU,CAAC7H,OAAX,CAAmBsK,MAAnB;EACD;;EACD,MAAI9C,MAAM,CAACgK,IAAX,EAAiB;EACftL,IAAAA,MAAM,CAACoQ,UAAP;EACD;;EACD,MAAI,EAAE9O,MAAM,CAAC5D,QAAP,IAAmBsC,MAAM,CAAC7C,OAAP,CAAeO,QAApC,CAAJ,EAAmD;EACjDsC,IAAAA,MAAM,CAACwR,MAAP;EACD;;EACDxR,EAAAA,MAAM,CAACiO,OAAP,CAAerC,cAAf,EAA+B,CAA/B,EAAkC,KAAlC;EACD;;ECvBc,SAAS8F,QAAT,CAAkB7Y,KAAlB,EAAyBuL,MAAzB,EAAiC;EAC9C,MAAMpE,MAAM,GAAG,IAAf;EAD8C,MAEtC2B,UAFsC,GAEF3B,MAFE,CAEtC2B,UAFsC;EAAA,MAE1BL,MAF0B,GAEFtB,MAFE,CAE1BsB,MAF0B;EAAA,MAElB+H,WAFkB,GAEFrJ,MAFE,CAElBqJ,WAFkB;EAG9C,MAAIsI,iBAAiB,GAAGtI,WAAxB;;EACA,MAAI/H,MAAM,CAACgK,IAAX,EAAiB;EACfqG,IAAAA,iBAAiB,IAAI3R,MAAM,CAACiP,YAA5B;EACAjP,IAAAA,MAAM,CAACgR,WAAP;EACAhR,IAAAA,MAAM,CAACoE,MAAP,GAAgBzC,UAAU,CAAC/W,QAAX,OAAwB0W,MAAM,CAAC+C,UAA/B,CAAhB;EACD;;EACD,MAAMuN,UAAU,GAAG5R,MAAM,CAACoE,MAAP,CAActa,MAAjC;;EACA,MAAI+O,KAAK,IAAI,CAAb,EAAgB;EACdmH,IAAAA,MAAM,CAACyR,YAAP,CAAoBrN,MAApB;EACA;EACD;;EACD,MAAIvL,KAAK,IAAI+Y,UAAb,EAAyB;EACvB5R,IAAAA,MAAM,CAACuR,WAAP,CAAmBnN,MAAnB;EACA;EACD;;EACD,MAAIwH,cAAc,GAAG+F,iBAAiB,GAAG9Y,KAApB,GAA4B8Y,iBAAiB,GAAG,CAAhD,GAAoDA,iBAAzE;EAEA,MAAME,YAAY,GAAG,EAArB;;EACA,OAAK,IAAIjgB,CAAC,GAAGggB,UAAU,GAAG,CAA1B,EAA6BhgB,CAAC,IAAIiH,KAAlC,EAAyCjH,CAAC,IAAI,CAA9C,EAAiD;EAC/C,QAAMkgB,YAAY,GAAG9R,MAAM,CAACoE,MAAP,CAAc7K,EAAd,CAAiB3H,CAAjB,CAArB;EACAkgB,IAAAA,YAAY,CAACxe,MAAb;EACAue,IAAAA,YAAY,CAACzc,OAAb,CAAqB0c,YAArB;EACD;;EAED,MAAI,OAAO1N,MAAP,KAAkB,QAAlB,IAA8B,YAAYA,MAA9C,EAAsD;EACpD,SAAK,IAAIxS,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGwS,MAAM,CAACta,MAA3B,EAAmC8H,EAAC,IAAI,CAAxC,EAA2C;EACzC,UAAIwS,MAAM,CAACxS,EAAD,CAAV,EAAe+P,UAAU,CAAClI,MAAX,CAAkB2K,MAAM,CAACxS,EAAD,CAAxB;EAChB;;EACDga,IAAAA,cAAc,GACZ+F,iBAAiB,GAAG9Y,KAApB,GAA4B8Y,iBAAiB,GAAGvN,MAAM,CAACta,MAAvD,GAAgE6nB,iBADlE;EAED,GAND,MAMO;EACLhQ,IAAAA,UAAU,CAAClI,MAAX,CAAkB2K,MAAlB;EACD;;EAED,OAAK,IAAIxS,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGigB,YAAY,CAAC/nB,MAAjC,EAAyC8H,GAAC,IAAI,CAA9C,EAAiD;EAC/C+P,IAAAA,UAAU,CAAClI,MAAX,CAAkBoY,YAAY,CAACjgB,GAAD,CAA9B;EACD;;EAED,MAAI0P,MAAM,CAACgK,IAAX,EAAiB;EACftL,IAAAA,MAAM,CAACoQ,UAAP;EACD;;EACD,MAAI,EAAE9O,MAAM,CAAC5D,QAAP,IAAmBsC,MAAM,CAAC7C,OAAP,CAAeO,QAApC,CAAJ,EAAmD;EACjDsC,IAAAA,MAAM,CAACwR,MAAP;EACD;;EACD,MAAIlQ,MAAM,CAACgK,IAAX,EAAiB;EACftL,IAAAA,MAAM,CAACiO,OAAP,CAAerC,cAAc,GAAG5L,MAAM,CAACiP,YAAvC,EAAqD,CAArD,EAAwD,KAAxD;EACD,GAFD,MAEO;EACLjP,IAAAA,MAAM,CAACiO,OAAP,CAAerC,cAAf,EAA+B,CAA/B,EAAkC,KAAlC;EACD;EACF;;ECpDc,SAASmG,WAAT,CAAqBC,aAArB,EAAoC;EACjD,MAAMhS,MAAM,GAAG,IAAf;EADiD,MAEzCsB,MAFyC,GAELtB,MAFK,CAEzCsB,MAFyC;EAAA,MAEjCK,UAFiC,GAEL3B,MAFK,CAEjC2B,UAFiC;EAAA,MAErB0H,WAFqB,GAELrJ,MAFK,CAErBqJ,WAFqB;EAIjD,MAAIsI,iBAAiB,GAAGtI,WAAxB;;EACA,MAAI/H,MAAM,CAACgK,IAAX,EAAiB;EACfqG,IAAAA,iBAAiB,IAAI3R,MAAM,CAACiP,YAA5B;EACAjP,IAAAA,MAAM,CAACgR,WAAP;EACAhR,IAAAA,MAAM,CAACoE,MAAP,GAAgBzC,UAAU,CAAC/W,QAAX,OAAwB0W,MAAM,CAAC+C,UAA/B,CAAhB;EACD;;EACD,MAAIuH,cAAc,GAAG+F,iBAArB;EACA,MAAIM,aAAJ;;EAEA,MAAI,OAAOD,aAAP,KAAyB,QAAzB,IAAqC,YAAYA,aAArD,EAAoE;EAClE,SAAK,IAAIpgB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGogB,aAAa,CAACloB,MAAlC,EAA0C8H,CAAC,IAAI,CAA/C,EAAkD;EAChDqgB,MAAAA,aAAa,GAAGD,aAAa,CAACpgB,CAAD,CAA7B;EACA,UAAIoO,MAAM,CAACoE,MAAP,CAAc6N,aAAd,CAAJ,EAAkCjS,MAAM,CAACoE,MAAP,CAAc7K,EAAd,CAAiB0Y,aAAjB,EAAgC3e,MAAhC;EAClC,UAAI2e,aAAa,GAAGrG,cAApB,EAAoCA,cAAc,IAAI,CAAlB;EACrC;;EACDA,IAAAA,cAAc,GAAG9F,IAAI,CAACK,GAAL,CAASyF,cAAT,EAAyB,CAAzB,CAAjB;EACD,GAPD,MAOO;EACLqG,IAAAA,aAAa,GAAGD,aAAhB;EACA,QAAIhS,MAAM,CAACoE,MAAP,CAAc6N,aAAd,CAAJ,EAAkCjS,MAAM,CAACoE,MAAP,CAAc7K,EAAd,CAAiB0Y,aAAjB,EAAgC3e,MAAhC;EAClC,QAAI2e,aAAa,GAAGrG,cAApB,EAAoCA,cAAc,IAAI,CAAlB;EACpCA,IAAAA,cAAc,GAAG9F,IAAI,CAACK,GAAL,CAASyF,cAAT,EAAyB,CAAzB,CAAjB;EACD;;EAED,MAAItK,MAAM,CAACgK,IAAX,EAAiB;EACftL,IAAAA,MAAM,CAACoQ,UAAP;EACD;;EAED,MAAI,EAAE9O,MAAM,CAAC5D,QAAP,IAAmBsC,MAAM,CAAC7C,OAAP,CAAeO,QAApC,CAAJ,EAAmD;EACjDsC,IAAAA,MAAM,CAACwR,MAAP;EACD;;EACD,MAAIlQ,MAAM,CAACgK,IAAX,EAAiB;EACftL,IAAAA,MAAM,CAACiO,OAAP,CAAerC,cAAc,GAAG5L,MAAM,CAACiP,YAAvC,EAAqD,CAArD,EAAwD,KAAxD;EACD,GAFD,MAEO;EACLjP,IAAAA,MAAM,CAACiO,OAAP,CAAerC,cAAf,EAA+B,CAA/B,EAAkC,KAAlC;EACD;EACF;;ECvCc,SAASsG,eAAT,GAA2B;EACxC,MAAMlS,MAAM,GAAG,IAAf;EAEA,MAAMgS,aAAa,GAAG,EAAtB;;EACA,OAAK,IAAIpgB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoO,MAAM,CAACoE,MAAP,CAActa,MAAlC,EAA0C8H,CAAC,IAAI,CAA/C,EAAkD;EAChDogB,IAAAA,aAAa,CAAChjB,IAAd,CAAmB4C,CAAnB;EACD;;EACDoO,EAAAA,MAAM,CAAC+R,WAAP,CAAmBC,aAAnB;EACD;;ACFD,qBAAe;EACbT,EAAAA,WAAW,EAAXA,WADa;EAEbE,EAAAA,YAAY,EAAZA,YAFa;EAGbC,EAAAA,QAAQ,EAARA,QAHa;EAIbK,EAAAA,WAAW,EAAXA,WAJa;EAKbG,EAAAA,eAAe,EAAfA;EALa,CAAf;;ECFe,SAASC,YAAT,CAAsBvc,KAAtB,EAA6B;EAC1C,MAAMoK,MAAM,GAAG,IAAf;EACA,MAAMlU,QAAQ,GAAGF,WAAW,EAA5B;EACA,MAAM0B,MAAM,GAAGF,SAAS,EAAxB;EAEA,MAAM2J,IAAI,GAAGiJ,MAAM,CAACoS,eAApB;EAL0C,MAMlC9Q,MANkC,GAMdtB,MANc,CAMlCsB,MANkC;EAAA,MAM1B+Q,OAN0B,GAMdrS,MANc,CAM1BqS,OAN0B;;EAQ1C,MAAIrS,MAAM,CAACuN,SAAP,IAAoBjM,MAAM,CAACkM,8BAA/B,EAA+D;EAC7D;EACD;;EACD,MAAI9e,CAAC,GAAGkH,KAAR;EACA,MAAIlH,CAAC,CAAC4jB,aAAN,EAAqB5jB,CAAC,GAAGA,CAAC,CAAC4jB,aAAN;EACrB,MAAIC,SAAS,GAAGvgB,CAAC,CAACtD,CAAC,CAACjF,MAAH,CAAjB;;EAEA,MAAI6X,MAAM,CAACkR,iBAAP,KAA6B,SAAjC,EAA4C;EAC1C,QAAI,CAACD,SAAS,CAAC1X,OAAV,CAAkBmF,MAAM,CAAC6M,SAAzB,EAAoC/iB,MAAzC,EAAiD;EAClD;;EACDiN,EAAAA,IAAI,CAAC0b,YAAL,GAAoB/jB,CAAC,CAACgkB,IAAF,KAAW,YAA/B;EACA,MAAI,CAAC3b,IAAI,CAAC0b,YAAN,IAAsB,WAAW/jB,CAAjC,IAAsCA,CAAC,CAACikB,KAAF,KAAY,CAAtD,EAAyD;EACzD,MAAI,CAAC5b,IAAI,CAAC0b,YAAN,IAAsB,YAAY/jB,CAAlC,IAAuCA,CAAC,CAACkkB,MAAF,GAAW,CAAtD,EAAyD;EACzD,MAAI7b,IAAI,CAAC8b,SAAL,IAAkB9b,IAAI,CAAC+b,OAA3B,EAAoC,OArBM;;EAwB1C,MAAMC,oBAAoB,GAAG,CAAC,CAACzR,MAAM,CAAC0R,cAAT,IAA2B1R,MAAM,CAAC0R,cAAP,KAA0B,EAAlF;;EACA,MAAID,oBAAoB,IAAIrkB,CAAC,CAACjF,MAA1B,IAAoCiF,CAAC,CAACjF,MAAF,CAASwpB,UAA7C,IAA2Drd,KAAK,CAACsd,IAAjE,IAAyEtd,KAAK,CAACsd,IAAN,CAAW,CAAX,CAA7E,EAA4F;EAC1FX,IAAAA,SAAS,GAAGvgB,CAAC,CAAC4D,KAAK,CAACsd,IAAN,CAAW,CAAX,CAAD,CAAb;EACD;;EAED,MACE5R,MAAM,CAAC6R,SAAP,IACAZ,SAAS,CAAC1X,OAAV,CACEyG,MAAM,CAAC8R,iBAAP,GAA2B9R,MAAM,CAAC8R,iBAAlC,SAA0D9R,MAAM,CAAC0R,cADnE,EAEE,CAFF,CAFF,EAKE;EACAhT,IAAAA,MAAM,CAACqT,UAAP,GAAoB,IAApB;EACA;EACD;;EAED,MAAI/R,MAAM,CAACgS,YAAX,EAAyB;EACvB,QAAI,CAACf,SAAS,CAAC1X,OAAV,CAAkByG,MAAM,CAACgS,YAAzB,EAAuC,CAAvC,CAAL,EAAgD;EACjD;;EAEDjB,EAAAA,OAAO,CAACkB,QAAR,GAAmB7kB,CAAC,CAACgkB,IAAF,KAAW,YAAX,GAA0BhkB,CAAC,CAAC8kB,aAAF,CAAgB,CAAhB,EAAmBC,KAA7C,GAAqD/kB,CAAC,CAAC+kB,KAA1E;EACApB,EAAAA,OAAO,CAACqB,QAAR,GAAmBhlB,CAAC,CAACgkB,IAAF,KAAW,YAAX,GAA0BhkB,CAAC,CAAC8kB,aAAF,CAAgB,CAAhB,EAAmBG,KAA7C,GAAqDjlB,CAAC,CAACilB,KAA1E;EACA,MAAMC,MAAM,GAAGvB,OAAO,CAACkB,QAAvB;EACA,MAAMM,MAAM,GAAGxB,OAAO,CAACqB,QAAvB,CA9C0C;;EAkD1C,MAAMI,kBAAkB,GAAGxS,MAAM,CAACwS,kBAAP,IAA6BxS,MAAM,CAACyS,qBAA/D;EACA,MAAMC,kBAAkB,GAAG1S,MAAM,CAAC0S,kBAAP,IAA6B1S,MAAM,CAAC2S,qBAA/D;;EACA,MACEH,kBAAkB,KACjBF,MAAM,IAAII,kBAAV,IAAgCJ,MAAM,IAAItmB,MAAM,CAAC4mB,UAAP,GAAoBF,kBAD7C,CADpB,EAGE;EACA,QAAIF,kBAAkB,KAAK,SAA3B,EAAsC;EACpCle,MAAAA,KAAK,CAACue,cAAN;EACD,KAFD,MAEO;EACL;EACD;EACF;;EAED3qB,EAAAA,QAAM,CAACuN,IAAD,EAAO;EACX8b,IAAAA,SAAS,EAAE,IADA;EAEXC,IAAAA,OAAO,EAAE,KAFE;EAGXsB,IAAAA,mBAAmB,EAAE,IAHV;EAIXC,IAAAA,WAAW,EAAExkB,SAJF;EAKXykB,IAAAA,WAAW,EAAEzkB;EALF,GAAP,CAAN;EAQAwiB,EAAAA,OAAO,CAACuB,MAAR,GAAiBA,MAAjB;EACAvB,EAAAA,OAAO,CAACwB,MAAR,GAAiBA,MAAjB;EACA9c,EAAAA,IAAI,CAACwd,cAAL,GAAsB/Y,GAAG,EAAzB;EACAwE,EAAAA,MAAM,CAACqT,UAAP,GAAoB,IAApB;EACArT,EAAAA,MAAM,CAACkD,UAAP;EACAlD,EAAAA,MAAM,CAACwU,cAAP,GAAwB3kB,SAAxB;EACA,MAAIyR,MAAM,CAACyO,SAAP,GAAmB,CAAvB,EAA0BhZ,IAAI,CAAC0d,kBAAL,GAA0B,KAA1B;;EAC1B,MAAI/lB,CAAC,CAACgkB,IAAF,KAAW,YAAf,EAA6B;EAC3B,QAAIyB,cAAc,GAAG,IAArB;EACA,QAAI5B,SAAS,CAACld,EAAV,CAAa0B,IAAI,CAAC2d,YAAlB,CAAJ,EAAqCP,cAAc,GAAG,KAAjB;;EACrC,QACEroB,QAAQ,CAAC3B,aAAT,IACA6H,CAAC,CAAClG,QAAQ,CAAC3B,aAAV,CAAD,CAA0BkL,EAA1B,CAA6B0B,IAAI,CAAC2d,YAAlC,CADA,IAEA5oB,QAAQ,CAAC3B,aAAT,KAA2BooB,SAAS,CAAC,CAAD,CAHtC,EAIE;EACAzmB,MAAAA,QAAQ,CAAC3B,aAAT,CAAuBC,IAAvB;EACD;;EAED,QAAMuqB,oBAAoB,GACxBR,cAAc,IAAInU,MAAM,CAAC4U,cAAzB,IAA2CtT,MAAM,CAACuT,wBADpD;;EAEA,QACE,CAACvT,MAAM,CAACwT,6BAAP,IAAwCH,oBAAzC,KACA,CAACpC,SAAS,CAAC,CAAD,CAAT,CAAawC,iBAFhB,EAGE;EACArmB,MAAAA,CAAC,CAACylB,cAAF;EACD;EACF;;EACDnU,EAAAA,MAAM,CAACK,IAAP,CAAY,YAAZ,EAA0B3R,CAA1B;EACD;;ECnGc,SAASsmB,WAAT,CAAqBpf,KAArB,EAA4B;EACzC,MAAM9J,QAAQ,GAAGF,WAAW,EAA5B;EACA,MAAMoU,MAAM,GAAG,IAAf;EACA,MAAMjJ,IAAI,GAAGiJ,MAAM,CAACoS,eAApB;EAHyC,MAIjC9Q,MAJiC,GAIMtB,MAJN,CAIjCsB,MAJiC;EAAA,MAIzB+Q,OAJyB,GAIMrS,MAJN,CAIzBqS,OAJyB;EAAA,MAIFxO,GAJE,GAIM7D,MAJN,CAIhB8D,YAJgB;EAKzC,MAAIpV,CAAC,GAAGkH,KAAR;EACA,MAAIlH,CAAC,CAAC4jB,aAAN,EAAqB5jB,CAAC,GAAGA,CAAC,CAAC4jB,aAAN;;EACrB,MAAI,CAACvb,IAAI,CAAC8b,SAAV,EAAqB;EACnB,QAAI9b,IAAI,CAACud,WAAL,IAAoBvd,IAAI,CAACsd,WAA7B,EAA0C;EACxCrU,MAAAA,MAAM,CAACK,IAAP,CAAY,mBAAZ,EAAiC3R,CAAjC;EACD;;EACD;EACD;;EACD,MAAIqI,IAAI,CAAC0b,YAAL,IAAqB/jB,CAAC,CAACgkB,IAAF,KAAW,WAApC,EAAiD;EACjD,MAAMuC,WAAW,GACfvmB,CAAC,CAACgkB,IAAF,KAAW,WAAX,IAA0BhkB,CAAC,CAAC8kB,aAA5B,KAA8C9kB,CAAC,CAAC8kB,aAAF,CAAgB,CAAhB,KAAsB9kB,CAAC,CAACwmB,cAAF,CAAiB,CAAjB,CAApE,CADF;EAEA,MAAMzB,KAAK,GAAG/kB,CAAC,CAACgkB,IAAF,KAAW,WAAX,GAAyBuC,WAAW,CAACxB,KAArC,GAA6C/kB,CAAC,CAAC+kB,KAA7D;EACA,MAAME,KAAK,GAAGjlB,CAAC,CAACgkB,IAAF,KAAW,WAAX,GAAyBuC,WAAW,CAACtB,KAArC,GAA6CjlB,CAAC,CAACilB,KAA7D;;EACA,MAAIjlB,CAAC,CAACymB,uBAAN,EAA+B;EAC7B9C,IAAAA,OAAO,CAACuB,MAAR,GAAiBH,KAAjB;EACApB,IAAAA,OAAO,CAACwB,MAAR,GAAiBF,KAAjB;EACA;EACD;;EACD,MAAI,CAAC3T,MAAM,CAAC4U,cAAZ,EAA4B;EAC1B;EACA5U,IAAAA,MAAM,CAACqT,UAAP,GAAoB,KAApB;;EACA,QAAItc,IAAI,CAAC8b,SAAT,EAAoB;EAClBrpB,MAAAA,QAAM,CAAC6oB,OAAD,EAAU;EACduB,QAAAA,MAAM,EAAEH,KADM;EAEdI,QAAAA,MAAM,EAAEF,KAFM;EAGdJ,QAAAA,QAAQ,EAAEE,KAHI;EAIdC,QAAAA,QAAQ,EAAEC;EAJI,OAAV,CAAN;EAMA5c,MAAAA,IAAI,CAACwd,cAAL,GAAsB/Y,GAAG,EAAzB;EACD;;EACD;EACD;;EACD,MAAIzE,IAAI,CAAC0b,YAAL,IAAqBnR,MAAM,CAAC8T,mBAA5B,IAAmD,CAAC9T,MAAM,CAACgK,IAA/D,EAAqE;EACnE,QAAItL,MAAM,CAACsD,UAAP,EAAJ,EAAyB;EACvB;EACA,UACGqQ,KAAK,GAAGtB,OAAO,CAACwB,MAAhB,IAA0B7T,MAAM,CAAC0J,SAAP,IAAoB1J,MAAM,CAACwK,YAAP,EAA/C,IACCmJ,KAAK,GAAGtB,OAAO,CAACwB,MAAhB,IAA0B7T,MAAM,CAAC0J,SAAP,IAAoB1J,MAAM,CAAC+J,YAAP,EAFjD,EAGE;EACAhT,QAAAA,IAAI,CAAC8b,SAAL,GAAiB,KAAjB;EACA9b,QAAAA,IAAI,CAAC+b,OAAL,GAAe,KAAf;EACA;EACD;EACF,KAVD,MAUO,IACJW,KAAK,GAAGpB,OAAO,CAACuB,MAAhB,IAA0B5T,MAAM,CAAC0J,SAAP,IAAoB1J,MAAM,CAACwK,YAAP,EAA/C,IACCiJ,KAAK,GAAGpB,OAAO,CAACuB,MAAhB,IAA0B5T,MAAM,CAAC0J,SAAP,IAAoB1J,MAAM,CAAC+J,YAAP,EAF1C,EAGL;EACA;EACD;EACF;;EACD,MAAIhT,IAAI,CAAC0b,YAAL,IAAqB3mB,QAAQ,CAAC3B,aAAlC,EAAiD;EAC/C,QAAIuE,CAAC,CAACjF,MAAF,KAAaqC,QAAQ,CAAC3B,aAAtB,IAAuC6H,CAAC,CAACtD,CAAC,CAACjF,MAAH,CAAD,CAAY4L,EAAZ,CAAe0B,IAAI,CAAC2d,YAApB,CAA3C,EAA8E;EAC5E3d,MAAAA,IAAI,CAAC+b,OAAL,GAAe,IAAf;EACA9S,MAAAA,MAAM,CAACqT,UAAP,GAAoB,KAApB;EACA;EACD;EACF;;EACD,MAAItc,IAAI,CAACqd,mBAAT,EAA8B;EAC5BpU,IAAAA,MAAM,CAACK,IAAP,CAAY,WAAZ,EAAyB3R,CAAzB;EACD;;EACD,MAAIA,CAAC,CAAC8kB,aAAF,IAAmB9kB,CAAC,CAAC8kB,aAAF,CAAgB1pB,MAAhB,GAAyB,CAAhD,EAAmD;EAEnDuoB,EAAAA,OAAO,CAACkB,QAAR,GAAmBE,KAAnB;EACApB,EAAAA,OAAO,CAACqB,QAAR,GAAmBC,KAAnB;EAEA,MAAM0B,KAAK,GAAGhD,OAAO,CAACkB,QAAR,GAAmBlB,OAAO,CAACuB,MAAzC;EACA,MAAM0B,KAAK,GAAGjD,OAAO,CAACqB,QAAR,GAAmBrB,OAAO,CAACwB,MAAzC;EACA,MAAI7T,MAAM,CAACsB,MAAP,CAAcyO,SAAd,IAA2BjK,IAAI,CAACyP,IAAL,CAAU,SAAAF,KAAK,EAAI,CAAJ,CAAL,YAAaC,KAAb,EAAsB,CAAtB,CAAV,IAAqCtV,MAAM,CAACsB,MAAP,CAAcyO,SAAlF,EACE;;EAEF,MAAI,OAAOhZ,IAAI,CAACsd,WAAZ,KAA4B,WAAhC,EAA6C;EAC3C,QAAImB,UAAJ;;EACA,QACGxV,MAAM,CAACqD,YAAP,MAAyBgP,OAAO,CAACqB,QAAR,KAAqBrB,OAAO,CAACwB,MAAvD,IACC7T,MAAM,CAACsD,UAAP,MAAuB+O,OAAO,CAACkB,QAAR,KAAqBlB,OAAO,CAACuB,MAFvD,EAGE;EACA7c,MAAAA,IAAI,CAACsd,WAAL,GAAmB,KAAnB;EACD,KALD,MAKO;EACL;EACA,UAAIgB,KAAK,GAAGA,KAAR,GAAgBC,KAAK,GAAGA,KAAxB,IAAiC,EAArC,EAAyC;EACvCE,QAAAA,UAAU,GAAI1P,IAAI,CAAC2P,KAAL,CAAW3P,IAAI,CAAC8B,GAAL,CAAS0N,KAAT,CAAX,EAA4BxP,IAAI,CAAC8B,GAAL,CAASyN,KAAT,CAA5B,IAA+C,GAAhD,GAAuDvP,IAAI,CAAC4P,EAAzE;EACA3e,QAAAA,IAAI,CAACsd,WAAL,GAAmBrU,MAAM,CAACqD,YAAP,KACfmS,UAAU,GAAGlU,MAAM,CAACkU,UADL,GAEf,KAAKA,UAAL,GAAkBlU,MAAM,CAACkU,UAF7B;EAGD;EACF;EACF;;EACD,MAAIze,IAAI,CAACsd,WAAT,EAAsB;EACpBrU,IAAAA,MAAM,CAACK,IAAP,CAAY,mBAAZ,EAAiC3R,CAAjC;EACD;;EACD,MAAI,OAAOqI,IAAI,CAACud,WAAZ,KAA4B,WAAhC,EAA6C;EAC3C,QAAIjC,OAAO,CAACkB,QAAR,KAAqBlB,OAAO,CAACuB,MAA7B,IAAuCvB,OAAO,CAACqB,QAAR,KAAqBrB,OAAO,CAACwB,MAAxE,EAAgF;EAC9E9c,MAAAA,IAAI,CAACud,WAAL,GAAmB,IAAnB;EACD;EACF;;EACD,MAAIvd,IAAI,CAACsd,WAAT,EAAsB;EACpBtd,IAAAA,IAAI,CAAC8b,SAAL,GAAiB,KAAjB;EACA;EACD;;EACD,MAAI,CAAC9b,IAAI,CAACud,WAAV,EAAuB;EACrB;EACD;;EACDtU,EAAAA,MAAM,CAACqT,UAAP,GAAoB,KAApB;;EACA,MAAI,CAAC/R,MAAM,CAACuD,OAAR,IAAmBnW,CAAC,CAACoI,UAAzB,EAAqC;EACnCpI,IAAAA,CAAC,CAACylB,cAAF;EACD;;EACD,MAAI7S,MAAM,CAACqU,wBAAP,IAAmC,CAACrU,MAAM,CAACsU,MAA/C,EAAuD;EACrDlnB,IAAAA,CAAC,CAACmnB,eAAF;EACD;;EAED,MAAI,CAAC9e,IAAI,CAAC+b,OAAV,EAAmB;EACjB,QAAIxR,MAAM,CAACgK,IAAX,EAAiB;EACftL,MAAAA,MAAM,CAACqP,OAAP;EACD;;EACDtY,IAAAA,IAAI,CAAC+e,cAAL,GAAsB9V,MAAM,CAACvE,YAAP,EAAtB;EACAuE,IAAAA,MAAM,CAACmJ,aAAP,CAAqB,CAArB;;EACA,QAAInJ,MAAM,CAACuN,SAAX,EAAsB;EACpBvN,MAAAA,MAAM,CAAC2B,UAAP,CAAkBnL,OAAlB,CAA0B,mCAA1B;EACD;;EACDO,IAAAA,IAAI,CAACgf,mBAAL,GAA2B,KAA3B,CATiB;;EAWjB,QAAIzU,MAAM,CAAC0U,UAAP,KAAsBhW,MAAM,CAAC0O,cAAP,KAA0B,IAA1B,IAAkC1O,MAAM,CAAC2O,cAAP,KAA0B,IAAlF,CAAJ,EAA6F;EAC3F3O,MAAAA,MAAM,CAACiR,aAAP,CAAqB,IAArB;EACD;;EACDjR,IAAAA,MAAM,CAACK,IAAP,CAAY,iBAAZ,EAA+B3R,CAA/B;EACD;;EACDsR,EAAAA,MAAM,CAACK,IAAP,CAAY,YAAZ,EAA0B3R,CAA1B;EACAqI,EAAAA,IAAI,CAAC+b,OAAL,GAAe,IAAf;EAEA,MAAIhC,IAAI,GAAG9Q,MAAM,CAACqD,YAAP,KAAwBgS,KAAxB,GAAgCC,KAA3C;EACAjD,EAAAA,OAAO,CAACvB,IAAR,GAAeA,IAAf;EAEAA,EAAAA,IAAI,IAAIxP,MAAM,CAAC2U,UAAf;EACA,MAAIpS,GAAJ,EAASiN,IAAI,GAAG,CAACA,IAAR;EAET9Q,EAAAA,MAAM,CAACwU,cAAP,GAAwB1D,IAAI,GAAG,CAAP,GAAW,MAAX,GAAoB,MAA5C;EACA/Z,EAAAA,IAAI,CAAC2V,gBAAL,GAAwBoE,IAAI,GAAG/Z,IAAI,CAAC+e,cAApC;EAEA,MAAII,mBAAmB,GAAG,IAA1B;EACA,MAAIC,eAAe,GAAG7U,MAAM,CAAC6U,eAA7B;;EACA,MAAI7U,MAAM,CAAC8T,mBAAX,EAAgC;EAC9Be,IAAAA,eAAe,GAAG,CAAlB;EACD;;EACD,MAAIrF,IAAI,GAAG,CAAP,IAAY/Z,IAAI,CAAC2V,gBAAL,GAAwB1M,MAAM,CAAC+J,YAAP,EAAxC,EAA+D;EAC7DmM,IAAAA,mBAAmB,GAAG,KAAtB;EACA,QAAI5U,MAAM,CAAC8U,UAAX,EACErf,IAAI,CAAC2V,gBAAL,GACE1M,MAAM,CAAC+J,YAAP,KACA,CADA,YAEC,CAAC/J,MAAM,CAAC+J,YAAP,EAAD,GAAyBhT,IAAI,CAAC+e,cAA9B,GAA+ChF,IAFhD,EAEyDqF,eAFzD,CADF;EAIH,GAPD,MAOO,IAAIrF,IAAI,GAAG,CAAP,IAAY/Z,IAAI,CAAC2V,gBAAL,GAAwB1M,MAAM,CAACwK,YAAP,EAAxC,EAA+D;EACpE0L,IAAAA,mBAAmB,GAAG,KAAtB;EACA,QAAI5U,MAAM,CAAC8U,UAAX,EACErf,IAAI,CAAC2V,gBAAL,GACE1M,MAAM,CAACwK,YAAP,KACA,CADA,YAECxK,MAAM,CAACwK,YAAP,KAAwBzT,IAAI,CAAC+e,cAA7B,GAA8ChF,IAF/C,EAEwDqF,eAFxD,CADF;EAIH;;EAED,MAAID,mBAAJ,EAAyB;EACvBxnB,IAAAA,CAAC,CAACymB,uBAAF,GAA4B,IAA5B;EACD,GAtKwC;;;EAyKzC,MACE,CAACnV,MAAM,CAAC0O,cAAR,IACA1O,MAAM,CAACwU,cAAP,KAA0B,MAD1B,IAEAzd,IAAI,CAAC2V,gBAAL,GAAwB3V,IAAI,CAAC+e,cAH/B,EAIE;EACA/e,IAAAA,IAAI,CAAC2V,gBAAL,GAAwB3V,IAAI,CAAC+e,cAA7B;EACD;;EACD,MACE,CAAC9V,MAAM,CAAC2O,cAAR,IACA3O,MAAM,CAACwU,cAAP,KAA0B,MAD1B,IAEAzd,IAAI,CAAC2V,gBAAL,GAAwB3V,IAAI,CAAC+e,cAH/B,EAIE;EACA/e,IAAAA,IAAI,CAAC2V,gBAAL,GAAwB3V,IAAI,CAAC+e,cAA7B;EACD,GAtLwC;;;EAyLzC,MAAIxU,MAAM,CAACyO,SAAP,GAAmB,CAAvB,EAA0B;EACxB,QAAIjK,IAAI,CAAC8B,GAAL,CAASkJ,IAAT,IAAiBxP,MAAM,CAACyO,SAAxB,IAAqChZ,IAAI,CAAC0d,kBAA9C,EAAkE;EAChE,UAAI,CAAC1d,IAAI,CAAC0d,kBAAV,EAA8B;EAC5B1d,QAAAA,IAAI,CAAC0d,kBAAL,GAA0B,IAA1B;EACApC,QAAAA,OAAO,CAACuB,MAAR,GAAiBvB,OAAO,CAACkB,QAAzB;EACAlB,QAAAA,OAAO,CAACwB,MAAR,GAAiBxB,OAAO,CAACqB,QAAzB;EACA3c,QAAAA,IAAI,CAAC2V,gBAAL,GAAwB3V,IAAI,CAAC+e,cAA7B;EACAzD,QAAAA,OAAO,CAACvB,IAAR,GAAe9Q,MAAM,CAACqD,YAAP,KACXgP,OAAO,CAACkB,QAAR,GAAmBlB,OAAO,CAACuB,MADhB,GAEXvB,OAAO,CAACqB,QAAR,GAAmBrB,OAAO,CAACwB,MAF/B;EAGA;EACD;EACF,KAXD,MAWO;EACL9c,MAAAA,IAAI,CAAC2V,gBAAL,GAAwB3V,IAAI,CAAC+e,cAA7B;EACA;EACD;EACF;;EAED,MAAI,CAACxU,MAAM,CAAC+U,YAAR,IAAwB/U,MAAM,CAACuD,OAAnC,EAA4C,OA3MH;;EA8MzC,MAAIvD,MAAM,CAACgV,QAAP,IAAmBhV,MAAM,CAACsH,mBAA1B,IAAiDtH,MAAM,CAACuH,qBAA5D,EAAmF;EACjF7I,IAAAA,MAAM,CAAC2L,iBAAP;EACA3L,IAAAA,MAAM,CAAC6K,mBAAP;EACD;;EACD,MAAIvJ,MAAM,CAACgV,QAAX,EAAqB;EACnB;EACA,QAAIvf,IAAI,CAACwf,UAAL,CAAgBzsB,MAAhB,KAA2B,CAA/B,EAAkC;EAChCiN,MAAAA,IAAI,CAACwf,UAAL,CAAgBvnB,IAAhB,CAAqB;EACnBwnB,QAAAA,QAAQ,EAAEnE,OAAO,CAACrS,MAAM,CAACqD,YAAP,KAAwB,QAAxB,GAAmC,QAApC,CADE;EAEnBoT,QAAAA,IAAI,EAAE1f,IAAI,CAACwd;EAFQ,OAArB;EAID;;EACDxd,IAAAA,IAAI,CAACwf,UAAL,CAAgBvnB,IAAhB,CAAqB;EACnBwnB,MAAAA,QAAQ,EAAEnE,OAAO,CAACrS,MAAM,CAACqD,YAAP,KAAwB,UAAxB,GAAqC,UAAtC,CADE;EAEnBoT,MAAAA,IAAI,EAAEjb,GAAG;EAFU,KAArB;EAID,GA9NwC;;;EAgOzCwE,EAAAA,MAAM,CAACqK,cAAP,CAAsBtT,IAAI,CAAC2V,gBAA3B,EAhOyC;;EAkOzC1M,EAAAA,MAAM,CAAC2M,YAAP,CAAoB5V,IAAI,CAAC2V,gBAAzB;EACD;;ECrOc,SAASgK,UAAT,CAAoB9gB,KAApB,EAA2B;EACxC,MAAMoK,MAAM,GAAG,IAAf;EACA,MAAMjJ,IAAI,GAAGiJ,MAAM,CAACoS,eAApB;EAFwC,MAIhC9Q,MAJgC,GAIyCtB,MAJzC,CAIhCsB,MAJgC;EAAA,MAIxB+Q,OAJwB,GAIyCrS,MAJzC,CAIxBqS,OAJwB;EAAA,MAIDxO,GAJC,GAIyC7D,MAJzC,CAIf8D,YAJe;EAAA,MAIInC,UAJJ,GAIyC3B,MAJzC,CAII2B,UAJJ;EAAA,MAIgB6C,UAJhB,GAIyCxE,MAJzC,CAIgBwE,UAJhB;EAAA,MAI4BD,QAJ5B,GAIyCvE,MAJzC,CAI4BuE,QAJ5B;EAKxC,MAAI7V,CAAC,GAAGkH,KAAR;EACA,MAAIlH,CAAC,CAAC4jB,aAAN,EAAqB5jB,CAAC,GAAGA,CAAC,CAAC4jB,aAAN;;EACrB,MAAIvb,IAAI,CAACqd,mBAAT,EAA8B;EAC5BpU,IAAAA,MAAM,CAACK,IAAP,CAAY,UAAZ,EAAwB3R,CAAxB;EACD;;EACDqI,EAAAA,IAAI,CAACqd,mBAAL,GAA2B,KAA3B;;EACA,MAAI,CAACrd,IAAI,CAAC8b,SAAV,EAAqB;EACnB,QAAI9b,IAAI,CAAC+b,OAAL,IAAgBxR,MAAM,CAAC0U,UAA3B,EAAuC;EACrChW,MAAAA,MAAM,CAACiR,aAAP,CAAqB,KAArB;EACD;;EACDla,IAAAA,IAAI,CAAC+b,OAAL,GAAe,KAAf;EACA/b,IAAAA,IAAI,CAACud,WAAL,GAAmB,KAAnB;EACA;EACD,GAlBuC;;;EAoBxC,MACEhT,MAAM,CAAC0U,UAAP,IACAjf,IAAI,CAAC+b,OADL,IAEA/b,IAAI,CAAC8b,SAFL,KAGC7S,MAAM,CAAC0O,cAAP,KAA0B,IAA1B,IAAkC1O,MAAM,CAAC2O,cAAP,KAA0B,IAH7D,CADF,EAKE;EACA3O,IAAAA,MAAM,CAACiR,aAAP,CAAqB,KAArB;EACD,GA3BuC;;;EA8BxC,MAAM0F,YAAY,GAAGnb,GAAG,EAAxB;EACA,MAAMob,QAAQ,GAAGD,YAAY,GAAG5f,IAAI,CAACwd,cAArC,CA/BwC;;EAkCxC,MAAIvU,MAAM,CAACqT,UAAX,EAAuB;EACrBrT,IAAAA,MAAM,CAACmM,kBAAP,CAA0Bzd,CAA1B;EACAsR,IAAAA,MAAM,CAACK,IAAP,CAAY,WAAZ,EAAyB3R,CAAzB;;EACA,QAAIkoB,QAAQ,GAAG,GAAX,IAAkBD,YAAY,GAAG5f,IAAI,CAAC8f,aAApB,GAAoC,GAA1D,EAA+D;EAC7D7W,MAAAA,MAAM,CAACK,IAAP,CAAY,uBAAZ,EAAqC3R,CAArC;EACD;EACF;;EAEDqI,EAAAA,IAAI,CAAC8f,aAAL,GAAqBrb,GAAG,EAAxB;EACAF,EAAAA,QAAQ,CAAC,YAAM;EACb,QAAI,CAAC0E,MAAM,CAACG,SAAZ,EAAuBH,MAAM,CAACqT,UAAP,GAAoB,IAApB;EACxB,GAFO,CAAR;;EAIA,MACE,CAACtc,IAAI,CAAC8b,SAAN,IACA,CAAC9b,IAAI,CAAC+b,OADN,IAEA,CAAC9S,MAAM,CAACwU,cAFR,IAGAnC,OAAO,CAACvB,IAAR,KAAiB,CAHjB,IAIA/Z,IAAI,CAAC2V,gBAAL,KAA0B3V,IAAI,CAAC+e,cALjC,EAME;EACA/e,IAAAA,IAAI,CAAC8b,SAAL,GAAiB,KAAjB;EACA9b,IAAAA,IAAI,CAAC+b,OAAL,GAAe,KAAf;EACA/b,IAAAA,IAAI,CAACud,WAAL,GAAmB,KAAnB;EACA;EACD;;EACDvd,EAAAA,IAAI,CAAC8b,SAAL,GAAiB,KAAjB;EACA9b,EAAAA,IAAI,CAAC+b,OAAL,GAAe,KAAf;EACA/b,EAAAA,IAAI,CAACud,WAAL,GAAmB,KAAnB;EAEA,MAAIwC,UAAJ;;EACA,MAAIxV,MAAM,CAAC+U,YAAX,EAAyB;EACvBS,IAAAA,UAAU,GAAGjT,GAAG,GAAG7D,MAAM,CAAC0J,SAAV,GAAsB,CAAC1J,MAAM,CAAC0J,SAA9C;EACD,GAFD,MAEO;EACLoN,IAAAA,UAAU,GAAG,CAAC/f,IAAI,CAAC2V,gBAAnB;EACD;;EAED,MAAIpL,MAAM,CAACuD,OAAX,EAAoB;EAClB;EACD;;EAED,MAAIvD,MAAM,CAACgV,QAAX,EAAqB;EACnB,QAAIQ,UAAU,GAAG,CAAC9W,MAAM,CAAC+J,YAAP,EAAlB,EAAyC;EACvC/J,MAAAA,MAAM,CAACiO,OAAP,CAAejO,MAAM,CAACqJ,WAAtB;EACA;EACD;;EACD,QAAIyN,UAAU,GAAG,CAAC9W,MAAM,CAACwK,YAAP,EAAlB,EAAyC;EACvC,UAAIxK,MAAM,CAACoE,MAAP,CAActa,MAAd,GAAuBya,QAAQ,CAACza,MAApC,EAA4C;EAC1CkW,QAAAA,MAAM,CAACiO,OAAP,CAAe1J,QAAQ,CAACza,MAAT,GAAkB,CAAjC;EACD,OAFD,MAEO;EACLkW,QAAAA,MAAM,CAACiO,OAAP,CAAejO,MAAM,CAACoE,MAAP,CAActa,MAAd,GAAuB,CAAtC;EACD;;EACD;EACD;;EAED,QAAIwX,MAAM,CAACyV,gBAAX,EAA6B;EAC3B,UAAIhgB,IAAI,CAACwf,UAAL,CAAgBzsB,MAAhB,GAAyB,CAA7B,EAAgC;EAC9B,YAAMktB,aAAa,GAAGjgB,IAAI,CAACwf,UAAL,CAAgBU,GAAhB,EAAtB;EACA,YAAMC,aAAa,GAAGngB,IAAI,CAACwf,UAAL,CAAgBU,GAAhB,EAAtB;EAEA,YAAME,QAAQ,GAAGH,aAAa,CAACR,QAAd,GAAyBU,aAAa,CAACV,QAAxD;EACA,YAAMC,IAAI,GAAGO,aAAa,CAACP,IAAd,GAAqBS,aAAa,CAACT,IAAhD;EACAzW,QAAAA,MAAM,CAACoX,QAAP,GAAkBD,QAAQ,GAAGV,IAA7B;EACAzW,QAAAA,MAAM,CAACoX,QAAP,IAAmB,CAAnB;;EACA,YAAItR,IAAI,CAAC8B,GAAL,CAAS5H,MAAM,CAACoX,QAAhB,IAA4B9V,MAAM,CAAC+V,uBAAvC,EAAgE;EAC9DrX,UAAAA,MAAM,CAACoX,QAAP,GAAkB,CAAlB;EACD,SAV6B;EAY9B;;;EACA,YAAIX,IAAI,GAAG,GAAP,IAAcjb,GAAG,KAAKwb,aAAa,CAACP,IAAtB,GAA6B,GAA/C,EAAoD;EAClDzW,UAAAA,MAAM,CAACoX,QAAP,GAAkB,CAAlB;EACD;EACF,OAhBD,MAgBO;EACLpX,QAAAA,MAAM,CAACoX,QAAP,GAAkB,CAAlB;EACD;;EACDpX,MAAAA,MAAM,CAACoX,QAAP,IAAmB9V,MAAM,CAACgW,6BAA1B;EAEAvgB,MAAAA,IAAI,CAACwf,UAAL,CAAgBzsB,MAAhB,GAAyB,CAAzB;EACA,UAAIytB,gBAAgB,GAAG,OAAOjW,MAAM,CAACkW,qBAArC;EACA,UAAMC,gBAAgB,GAAGzX,MAAM,CAACoX,QAAP,GAAkBG,gBAA3C;EAEA,UAAIG,WAAW,GAAG1X,MAAM,CAAC0J,SAAP,GAAmB+N,gBAArC;EACA,UAAI5T,GAAJ,EAAS6T,WAAW,GAAG,CAACA,WAAf;EAET,UAAIC,QAAQ,GAAG,KAAf;EACA,UAAIC,mBAAJ;EACA,UAAMC,YAAY,GAAG/R,IAAI,CAAC8B,GAAL,CAAS5H,MAAM,CAACoX,QAAhB,IAA4B,EAA5B,GAAiC9V,MAAM,CAACwW,2BAA7D;EACA,UAAIC,YAAJ;;EACA,UAAIL,WAAW,GAAG1X,MAAM,CAACwK,YAAP,EAAlB,EAAyC;EACvC,YAAIlJ,MAAM,CAAC0W,sBAAX,EAAmC;EACjC,cAAIN,WAAW,GAAG1X,MAAM,CAACwK,YAAP,EAAd,GAAsC,CAACqN,YAA3C,EAAyD;EACvDH,YAAAA,WAAW,GAAG1X,MAAM,CAACwK,YAAP,KAAwBqN,YAAtC;EACD;;EACDD,UAAAA,mBAAmB,GAAG5X,MAAM,CAACwK,YAAP,EAAtB;EACAmN,UAAAA,QAAQ,GAAG,IAAX;EACA5gB,UAAAA,IAAI,CAACgf,mBAAL,GAA2B,IAA3B;EACD,SAPD,MAOO;EACL2B,UAAAA,WAAW,GAAG1X,MAAM,CAACwK,YAAP,EAAd;EACD;;EACD,YAAIlJ,MAAM,CAACgK,IAAP,IAAehK,MAAM,CAACqG,cAA1B,EAA0CoQ,YAAY,GAAG,IAAf;EAC3C,OAZD,MAYO,IAAIL,WAAW,GAAG1X,MAAM,CAAC+J,YAAP,EAAlB,EAAyC;EAC9C,YAAIzI,MAAM,CAAC0W,sBAAX,EAAmC;EACjC,cAAIN,WAAW,GAAG1X,MAAM,CAAC+J,YAAP,EAAd,GAAsC8N,YAA1C,EAAwD;EACtDH,YAAAA,WAAW,GAAG1X,MAAM,CAAC+J,YAAP,KAAwB8N,YAAtC;EACD;;EACDD,UAAAA,mBAAmB,GAAG5X,MAAM,CAAC+J,YAAP,EAAtB;EACA4N,UAAAA,QAAQ,GAAG,IAAX;EACA5gB,UAAAA,IAAI,CAACgf,mBAAL,GAA2B,IAA3B;EACD,SAPD,MAOO;EACL2B,UAAAA,WAAW,GAAG1X,MAAM,CAAC+J,YAAP,EAAd;EACD;;EACD,YAAIzI,MAAM,CAACgK,IAAP,IAAehK,MAAM,CAACqG,cAA1B,EAA0CoQ,YAAY,GAAG,IAAf;EAC3C,OAZM,MAYA,IAAIzW,MAAM,CAAC2W,cAAX,EAA2B;EAChC,YAAIzM,SAAJ;;EACA,aAAK,IAAI7V,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4O,QAAQ,CAACza,MAA7B,EAAqC6L,CAAC,IAAI,CAA1C,EAA6C;EAC3C,cAAI4O,QAAQ,CAAC5O,CAAD,CAAR,GAAc,CAAC+hB,WAAnB,EAAgC;EAC9BlM,YAAAA,SAAS,GAAG7V,CAAZ;EACA;EACD;EACF;;EAED,YACEmQ,IAAI,CAAC8B,GAAL,CAASrD,QAAQ,CAACiH,SAAD,CAAR,GAAsBkM,WAA/B,IACE5R,IAAI,CAAC8B,GAAL,CAASrD,QAAQ,CAACiH,SAAS,GAAG,CAAb,CAAR,GAA0BkM,WAAnC,CADF,IAEA1X,MAAM,CAACwU,cAAP,KAA0B,MAH5B,EAIE;EACAkD,UAAAA,WAAW,GAAGnT,QAAQ,CAACiH,SAAD,CAAtB;EACD,SAND,MAMO;EACLkM,UAAAA,WAAW,GAAGnT,QAAQ,CAACiH,SAAS,GAAG,CAAb,CAAtB;EACD;;EACDkM,QAAAA,WAAW,GAAG,CAACA,WAAf;EACD;;EACD,UAAIK,YAAJ,EAAkB;EAChB/X,QAAAA,MAAM,CAACyC,IAAP,CAAY,eAAZ,EAA6B,YAAM;EACjCzC,UAAAA,MAAM,CAACqP,OAAP;EACD,SAFD;EAGD,OAjF0B;;;EAmF3B,UAAIrP,MAAM,CAACoX,QAAP,KAAoB,CAAxB,EAA2B;EACzB,YAAIvT,GAAJ,EAAS;EACP0T,UAAAA,gBAAgB,GAAGzR,IAAI,CAAC8B,GAAL,CAAS,CAAC,CAAC8P,WAAD,GAAe1X,MAAM,CAAC0J,SAAvB,IAAoC1J,MAAM,CAACoX,QAApD,CAAnB;EACD,SAFD,MAEO;EACLG,UAAAA,gBAAgB,GAAGzR,IAAI,CAAC8B,GAAL,CAAS,CAAC8P,WAAW,GAAG1X,MAAM,CAAC0J,SAAtB,IAAmC1J,MAAM,CAACoX,QAAnD,CAAnB;EACD;;EACD,YAAI9V,MAAM,CAAC2W,cAAX,EAA2B;EACzB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAMC,YAAY,GAAGpS,IAAI,CAAC8B,GAAL,CAAS,CAAC/D,GAAG,GAAG,CAAC6T,WAAJ,GAAkBA,WAAtB,IAAqC1X,MAAM,CAAC0J,SAArD,CAArB;EACA,cAAMyO,gBAAgB,GAAGnY,MAAM,CAACyE,eAAP,CAAuBzE,MAAM,CAACqJ,WAA9B,CAAzB;;EACA,cAAI6O,YAAY,GAAGC,gBAAnB,EAAqC;EACnCZ,YAAAA,gBAAgB,GAAGjW,MAAM,CAAC0H,KAA1B;EACD,WAFD,MAEO,IAAIkP,YAAY,GAAG,IAAIC,gBAAvB,EAAyC;EAC9CZ,YAAAA,gBAAgB,GAAGjW,MAAM,CAAC0H,KAAP,GAAe,GAAlC;EACD,WAFM,MAEA;EACLuO,YAAAA,gBAAgB,GAAGjW,MAAM,CAAC0H,KAAP,GAAe,GAAlC;EACD;EACF;EACF,OAxBD,MAwBO,IAAI1H,MAAM,CAAC2W,cAAX,EAA2B;EAChCjY,QAAAA,MAAM,CAAC8P,cAAP;EACA;EACD;;EAED,UAAIxO,MAAM,CAAC0W,sBAAP,IAAiCL,QAArC,EAA+C;EAC7C3X,QAAAA,MAAM,CAACqK,cAAP,CAAsBuN,mBAAtB;EACA5X,QAAAA,MAAM,CAACmJ,aAAP,CAAqBoO,gBAArB;EACAvX,QAAAA,MAAM,CAAC2M,YAAP,CAAoB+K,WAApB;EACA1X,QAAAA,MAAM,CAAC8N,eAAP,CAAuB,IAAvB,EAA6B9N,MAAM,CAACwU,cAApC;EACAxU,QAAAA,MAAM,CAACuN,SAAP,GAAmB,IAAnB;EACA5L,QAAAA,UAAU,CAACzK,aAAX,CAAyB,YAAM;EAC7B,cAAI,CAAC8I,MAAD,IAAWA,MAAM,CAACG,SAAlB,IAA+B,CAACpJ,IAAI,CAACgf,mBAAzC,EAA8D;EAC9D/V,UAAAA,MAAM,CAACK,IAAP,CAAY,gBAAZ;EACAL,UAAAA,MAAM,CAACmJ,aAAP,CAAqB7H,MAAM,CAAC0H,KAA5B;EACAnc,UAAAA,UAAU,CAAC,YAAM;EACfmT,YAAAA,MAAM,CAAC2M,YAAP,CAAoBiL,mBAApB;EACAjW,YAAAA,UAAU,CAACzK,aAAX,CAAyB,YAAM;EAC7B,kBAAI,CAAC8I,MAAD,IAAWA,MAAM,CAACG,SAAtB,EAAiC;EACjCH,cAAAA,MAAM,CAAC9I,aAAP;EACD,aAHD;EAID,WANS,EAMP,CANO,CAAV;EAOD,SAXD;EAYD,OAlBD,MAkBO,IAAI8I,MAAM,CAACoX,QAAX,EAAqB;EAC1BpX,QAAAA,MAAM,CAACqK,cAAP,CAAsBqN,WAAtB;EACA1X,Q