diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/css/bootstrap.css (renamed from src/css/bootstrap-3.3.7.css) | 985 | ||||
-rw-r--r-- | src/css/bootstrap.css.map | 1 | ||||
-rw-r--r-- | src/index.html | 10 | ||||
-rw-r--r-- | src/js/bootstrap.js (renamed from src/js/bootstrap-3.3.7.js) | 397 | ||||
-rw-r--r-- | src/js/entropy.js | 345 | ||||
-rw-r--r-- | src/js/eos-util.js | 7415 | ||||
-rw-r--r-- | src/js/index.js | 37 |
7 files changed, 1037 insertions, 8153 deletions
diff --git a/src/css/bootstrap-3.3.7.css b/src/css/bootstrap.css index 6167622..fcab415 100644 --- a/src/css/bootstrap-3.3.7.css +++ b/src/css/bootstrap.css | |||
@@ -1,13 +1,13 @@ | |||
1 | /*! | 1 | /*! |
2 | * Bootstrap v3.3.7 (http://getbootstrap.com) | 2 | * Bootstrap v3.4.1 (https://getbootstrap.com/) |
3 | * Copyright 2011-2016 Twitter, Inc. | 3 | * Copyright 2011-2019 Twitter, Inc. |
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
5 | */ | 5 | */ |
6 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ | 6 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ |
7 | html { | 7 | html { |
8 | font-family: sans-serif; | 8 | font-family: sans-serif; |
9 | -ms-text-size-adjust: 100%; | ||
9 | -webkit-text-size-adjust: 100%; | 10 | -webkit-text-size-adjust: 100%; |
10 | -ms-text-size-adjust: 100%; | ||
11 | } | 11 | } |
12 | body { | 12 | body { |
13 | margin: 0; | 13 | margin: 0; |
@@ -50,7 +50,11 @@ a:hover { | |||
50 | outline: 0; | 50 | outline: 0; |
51 | } | 51 | } |
52 | abbr[title] { | 52 | abbr[title] { |
53 | border-bottom: 1px dotted; | 53 | border-bottom: none; |
54 | text-decoration: underline; | ||
55 | -webkit-text-decoration: underline dotted; | ||
56 | -moz-text-decoration: underline dotted; | ||
57 | text-decoration: underline dotted; | ||
54 | } | 58 | } |
55 | b, | 59 | b, |
56 | strong { | 60 | strong { |
@@ -60,28 +64,28 @@ dfn { | |||
60 | font-style: italic; | 64 | font-style: italic; |
61 | } | 65 | } |
62 | h1 { | 66 | h1 { |
63 | margin: .67em 0; | ||
64 | font-size: 2em; | 67 | font-size: 2em; |
68 | margin: 0.67em 0; | ||
65 | } | 69 | } |
66 | mark { | 70 | mark { |
67 | color: #000; | ||
68 | background: #ff0; | 71 | background: #ff0; |
72 | color: #000; | ||
69 | } | 73 | } |
70 | small { | 74 | small { |
71 | font-size: 80%; | 75 | font-size: 80%; |
72 | } | 76 | } |
73 | sub, | 77 | sub, |
74 | sup { | 78 | sup { |
75 | position: relative; | ||
76 | font-size: 75%; | 79 | font-size: 75%; |
77 | line-height: 0; | 80 | line-height: 0; |
81 | position: relative; | ||
78 | vertical-align: baseline; | 82 | vertical-align: baseline; |
79 | } | 83 | } |
80 | sup { | 84 | sup { |
81 | top: -.5em; | 85 | top: -0.5em; |
82 | } | 86 | } |
83 | sub { | 87 | sub { |
84 | bottom: -.25em; | 88 | bottom: -0.25em; |
85 | } | 89 | } |
86 | img { | 90 | img { |
87 | border: 0; | 91 | border: 0; |
@@ -93,10 +97,10 @@ figure { | |||
93 | margin: 1em 40px; | 97 | margin: 1em 40px; |
94 | } | 98 | } |
95 | hr { | 99 | hr { |
96 | height: 0; | ||
97 | -webkit-box-sizing: content-box; | 100 | -webkit-box-sizing: content-box; |
98 | -moz-box-sizing: content-box; | 101 | -moz-box-sizing: content-box; |
99 | box-sizing: content-box; | 102 | box-sizing: content-box; |
103 | height: 0; | ||
100 | } | 104 | } |
101 | pre { | 105 | pre { |
102 | overflow: auto; | 106 | overflow: auto; |
@@ -113,9 +117,9 @@ input, | |||
113 | optgroup, | 117 | optgroup, |
114 | select, | 118 | select, |
115 | textarea { | 119 | textarea { |
116 | margin: 0; | ||
117 | font: inherit; | ||
118 | color: inherit; | 120 | color: inherit; |
121 | font: inherit; | ||
122 | margin: 0; | ||
119 | } | 123 | } |
120 | button { | 124 | button { |
121 | overflow: visible; | 125 | overflow: visible; |
@@ -137,8 +141,8 @@ html input[disabled] { | |||
137 | } | 141 | } |
138 | button::-moz-focus-inner, | 142 | button::-moz-focus-inner, |
139 | input::-moz-focus-inner { | 143 | input::-moz-focus-inner { |
140 | padding: 0; | ||
141 | border: 0; | 144 | border: 0; |
145 | padding: 0; | ||
142 | } | 146 | } |
143 | input { | 147 | input { |
144 | line-height: normal; | 148 | line-height: normal; |
@@ -146,8 +150,8 @@ input { | |||
146 | input[type="checkbox"], | 150 | input[type="checkbox"], |
147 | input[type="radio"] { | 151 | input[type="radio"] { |
148 | -webkit-box-sizing: border-box; | 152 | -webkit-box-sizing: border-box; |
149 | -moz-box-sizing: border-box; | 153 | -moz-box-sizing: border-box; |
150 | box-sizing: border-box; | 154 | box-sizing: border-box; |
151 | padding: 0; | 155 | padding: 0; |
152 | } | 156 | } |
153 | input[type="number"]::-webkit-inner-spin-button, | 157 | input[type="number"]::-webkit-inner-spin-button, |
@@ -155,23 +159,23 @@ input[type="number"]::-webkit-outer-spin-button { | |||
155 | height: auto; | 159 | height: auto; |
156 | } | 160 | } |
157 | input[type="search"] { | 161 | input[type="search"] { |
158 | -webkit-box-sizing: content-box; | ||
159 | -moz-box-sizing: content-box; | ||
160 | box-sizing: content-box; | ||
161 | -webkit-appearance: textfield; | 162 | -webkit-appearance: textfield; |
163 | -webkit-box-sizing: content-box; | ||
164 | -moz-box-sizing: content-box; | ||
165 | box-sizing: content-box; | ||
162 | } | 166 | } |
163 | input[type="search"]::-webkit-search-cancel-button, | 167 | input[type="search"]::-webkit-search-cancel-button, |
164 | input[type="search"]::-webkit-search-decoration { | 168 | input[type="search"]::-webkit-search-decoration { |
165 | -webkit-appearance: none; | 169 | -webkit-appearance: none; |
166 | } | 170 | } |
167 | fieldset { | 171 | fieldset { |
168 | padding: .35em .625em .75em; | ||
169 | margin: 0 2px; | ||
170 | border: 1px solid #c0c0c0; | 172 | border: 1px solid #c0c0c0; |
173 | margin: 0 2px; | ||
174 | padding: 0.35em 0.625em 0.75em; | ||
171 | } | 175 | } |
172 | legend { | 176 | legend { |
173 | padding: 0; | ||
174 | border: 0; | 177 | border: 0; |
178 | padding: 0; | ||
175 | } | 179 | } |
176 | textarea { | 180 | textarea { |
177 | overflow: auto; | 181 | overflow: auto; |
@@ -180,8 +184,8 @@ optgroup { | |||
180 | font-weight: bold; | 184 | font-weight: bold; |
181 | } | 185 | } |
182 | table { | 186 | table { |
183 | border-spacing: 0; | ||
184 | border-collapse: collapse; | 187 | border-collapse: collapse; |
188 | border-spacing: 0; | ||
185 | } | 189 | } |
186 | td, | 190 | td, |
187 | th { | 191 | th { |
@@ -196,7 +200,7 @@ th { | |||
196 | text-shadow: none !important; | 200 | text-shadow: none !important; |
197 | background: transparent !important; | 201 | background: transparent !important; |
198 | -webkit-box-shadow: none !important; | 202 | -webkit-box-shadow: none !important; |
199 | box-shadow: none !important; | 203 | box-shadow: none !important; |
200 | } | 204 | } |
201 | a, | 205 | a, |
202 | a:visited { | 206 | a:visited { |
@@ -215,7 +219,6 @@ th { | |||
215 | pre, | 219 | pre, |
216 | blockquote { | 220 | blockquote { |
217 | border: 1px solid #999; | 221 | border: 1px solid #999; |
218 | |||
219 | page-break-inside: avoid; | 222 | page-break-inside: avoid; |
220 | } | 223 | } |
221 | thead { | 224 | thead { |
@@ -261,20 +264,18 @@ th { | |||
261 | } | 264 | } |
262 | } | 265 | } |
263 | @font-face { | 266 | @font-face { |
264 | font-family: 'Glyphicons Halflings'; | 267 | font-family: "Glyphicons Halflings"; |
265 | 268 | src: url("../fonts/glyphicons-halflings-regular.eot"); | |
266 | src: url('../fonts/glyphicons-halflings-regular.eot'); | 269 | src: url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"), url("../fonts/glyphicons-halflings-regular.woff") format("woff"), url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"), url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); |
267 | src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); | ||
268 | } | 270 | } |
269 | .glyphicon { | 271 | .glyphicon { |
270 | position: relative; | 272 | position: relative; |
271 | top: 1px; | 273 | top: 1px; |
272 | display: inline-block; | 274 | display: inline-block; |
273 | font-family: 'Glyphicons Halflings'; | 275 | font-family: "Glyphicons Halflings"; |
274 | font-style: normal; | 276 | font-style: normal; |
275 | font-weight: normal; | 277 | font-weight: 400; |
276 | line-height: 1; | 278 | line-height: 1; |
277 | |||
278 | -webkit-font-smoothing: antialiased; | 279 | -webkit-font-smoothing: antialiased; |
279 | -moz-osx-font-smoothing: grayscale; | 280 | -moz-osx-font-smoothing: grayscale; |
280 | } | 281 | } |
@@ -1067,25 +1068,24 @@ th { | |||
1067 | } | 1068 | } |
1068 | * { | 1069 | * { |
1069 | -webkit-box-sizing: border-box; | 1070 | -webkit-box-sizing: border-box; |
1070 | -moz-box-sizing: border-box; | 1071 | -moz-box-sizing: border-box; |
1071 | box-sizing: border-box; | 1072 | box-sizing: border-box; |
1072 | } | 1073 | } |
1073 | *:before, | 1074 | *:before, |
1074 | *:after { | 1075 | *:after { |
1075 | -webkit-box-sizing: border-box; | 1076 | -webkit-box-sizing: border-box; |
1076 | -moz-box-sizing: border-box; | 1077 | -moz-box-sizing: border-box; |
1077 | box-sizing: border-box; | 1078 | box-sizing: border-box; |
1078 | } | 1079 | } |
1079 | html { | 1080 | html { |
1080 | font-size: 10px; | 1081 | font-size: 10px; |
1081 | |||
1082 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); | 1082 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); |
1083 | } | 1083 | } |
1084 | body { | 1084 | body { |
1085 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | 1085 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; |
1086 | font-size: 14px; | 1086 | font-size: 14px; |
1087 | line-height: 1.42857143; | 1087 | line-height: 1.42857143; |
1088 | color: #333; | 1088 | color: #333333; |
1089 | background-color: #fff; | 1089 | background-color: #fff; |
1090 | } | 1090 | } |
1091 | input, | 1091 | input, |
@@ -1128,17 +1128,17 @@ img { | |||
1128 | border-radius: 6px; | 1128 | border-radius: 6px; |
1129 | } | 1129 | } |
1130 | .img-thumbnail { | 1130 | .img-thumbnail { |
1131 | display: inline-block; | ||
1132 | max-width: 100%; | ||
1133 | height: auto; | ||
1134 | padding: 4px; | 1131 | padding: 4px; |
1135 | line-height: 1.42857143; | 1132 | line-height: 1.42857143; |
1136 | background-color: #fff; | 1133 | background-color: #fff; |
1137 | border: 1px solid #ddd; | 1134 | border: 1px solid #ddd; |
1138 | border-radius: 4px; | 1135 | border-radius: 4px; |
1139 | -webkit-transition: all .2s ease-in-out; | 1136 | -webkit-transition: all 0.2s ease-in-out; |
1140 | -o-transition: all .2s ease-in-out; | 1137 | -o-transition: all 0.2s ease-in-out; |
1141 | transition: all .2s ease-in-out; | 1138 | transition: all 0.2s ease-in-out; |
1139 | display: inline-block; | ||
1140 | max-width: 100%; | ||
1141 | height: auto; | ||
1142 | } | 1142 | } |
1143 | .img-circle { | 1143 | .img-circle { |
1144 | border-radius: 50%; | 1144 | border-radius: 50%; |
@@ -1147,7 +1147,7 @@ hr { | |||
1147 | margin-top: 20px; | 1147 | margin-top: 20px; |
1148 | margin-bottom: 20px; | 1148 | margin-bottom: 20px; |
1149 | border: 0; | 1149 | border: 0; |
1150 | border-top: 1px solid #eee; | 1150 | border-top: 1px solid #eeeeee; |
1151 | } | 1151 | } |
1152 | .sr-only { | 1152 | .sr-only { |
1153 | position: absolute; | 1153 | position: absolute; |
@@ -1212,9 +1212,9 @@ h6 .small, | |||
1212 | .h4 .small, | 1212 | .h4 .small, |
1213 | .h5 .small, | 1213 | .h5 .small, |
1214 | .h6 .small { | 1214 | .h6 .small { |
1215 | font-weight: normal; | 1215 | font-weight: 400; |
1216 | line-height: 1; | 1216 | line-height: 1; |
1217 | color: #777; | 1217 | color: #777777; |
1218 | } | 1218 | } |
1219 | h1, | 1219 | h1, |
1220 | .h1, | 1220 | .h1, |
@@ -1306,7 +1306,7 @@ small, | |||
1306 | } | 1306 | } |
1307 | mark, | 1307 | mark, |
1308 | .mark { | 1308 | .mark { |
1309 | padding: .2em; | 1309 | padding: 0.2em; |
1310 | background-color: #fcf8e3; | 1310 | background-color: #fcf8e3; |
1311 | } | 1311 | } |
1312 | .text-left { | 1312 | .text-left { |
@@ -1334,7 +1334,7 @@ mark, | |||
1334 | text-transform: capitalize; | 1334 | text-transform: capitalize; |
1335 | } | 1335 | } |
1336 | .text-muted { | 1336 | .text-muted { |
1337 | color: #777; | 1337 | color: #777777; |
1338 | } | 1338 | } |
1339 | .text-primary { | 1339 | .text-primary { |
1340 | color: #337ab7; | 1340 | color: #337ab7; |
@@ -1410,7 +1410,7 @@ a.bg-danger:focus { | |||
1410 | .page-header { | 1410 | .page-header { |
1411 | padding-bottom: 9px; | 1411 | padding-bottom: 9px; |
1412 | margin: 40px 0 20px; | 1412 | margin: 40px 0 20px; |
1413 | border-bottom: 1px solid #eee; | 1413 | border-bottom: 1px solid #eeeeee; |
1414 | } | 1414 | } |
1415 | ul, | 1415 | ul, |
1416 | ol { | 1416 | ol { |
@@ -1429,8 +1429,8 @@ ol ol { | |||
1429 | } | 1429 | } |
1430 | .list-inline { | 1430 | .list-inline { |
1431 | padding-left: 0; | 1431 | padding-left: 0; |
1432 | margin-left: -5px; | ||
1433 | list-style: none; | 1432 | list-style: none; |
1433 | margin-left: -5px; | ||
1434 | } | 1434 | } |
1435 | .list-inline > li { | 1435 | .list-inline > li { |
1436 | display: inline-block; | 1436 | display: inline-block; |
@@ -1446,7 +1446,7 @@ dd { | |||
1446 | line-height: 1.42857143; | 1446 | line-height: 1.42857143; |
1447 | } | 1447 | } |
1448 | dt { | 1448 | dt { |
1449 | font-weight: bold; | 1449 | font-weight: 700; |
1450 | } | 1450 | } |
1451 | dd { | 1451 | dd { |
1452 | margin-left: 0; | 1452 | margin-left: 0; |
@@ -1455,9 +1455,9 @@ dd { | |||
1455 | .dl-horizontal dt { | 1455 | .dl-horizontal dt { |
1456 | float: left; | 1456 | float: left; |
1457 | width: 160px; | 1457 | width: 160px; |
1458 | overflow: hidden; | ||
1459 | clear: left; | 1458 | clear: left; |
1460 | text-align: right; | 1459 | text-align: right; |
1460 | overflow: hidden; | ||
1461 | text-overflow: ellipsis; | 1461 | text-overflow: ellipsis; |
1462 | white-space: nowrap; | 1462 | white-space: nowrap; |
1463 | } | 1463 | } |
@@ -1468,7 +1468,6 @@ dd { | |||
1468 | abbr[title], | 1468 | abbr[title], |
1469 | abbr[data-original-title] { | 1469 | abbr[data-original-title] { |
1470 | cursor: help; | 1470 | cursor: help; |
1471 | border-bottom: 1px dotted #777; | ||
1472 | } | 1471 | } |
1473 | .initialism { | 1472 | .initialism { |
1474 | font-size: 90%; | 1473 | font-size: 90%; |
@@ -1478,7 +1477,7 @@ blockquote { | |||
1478 | padding: 10px 20px; | 1477 | padding: 10px 20px; |
1479 | margin: 0 0 20px; | 1478 | margin: 0 0 20px; |
1480 | font-size: 17.5px; | 1479 | font-size: 17.5px; |
1481 | border-left: 5px solid #eee; | 1480 | border-left: 5px solid #eeeeee; |
1482 | } | 1481 | } |
1483 | blockquote p:last-child, | 1482 | blockquote p:last-child, |
1484 | blockquote ul:last-child, | 1483 | blockquote ul:last-child, |
@@ -1491,19 +1490,19 @@ blockquote .small { | |||
1491 | display: block; | 1490 | display: block; |
1492 | font-size: 80%; | 1491 | font-size: 80%; |
1493 | line-height: 1.42857143; | 1492 | line-height: 1.42857143; |
1494 | color: #777; | 1493 | color: #777777; |
1495 | } | 1494 | } |
1496 | blockquote footer:before, | 1495 | blockquote footer:before, |
1497 | blockquote small:before, | 1496 | blockquote small:before, |
1498 | blockquote .small:before { | 1497 | blockquote .small:before { |
1499 | content: '\2014 \00A0'; | 1498 | content: "\2014 \00A0"; |
1500 | } | 1499 | } |
1501 | .blockquote-reverse, | 1500 | .blockquote-reverse, |
1502 | blockquote.pull-right { | 1501 | blockquote.pull-right { |
1503 | padding-right: 15px; | 1502 | padding-right: 15px; |
1504 | padding-left: 0; | 1503 | padding-left: 0; |
1505 | text-align: right; | 1504 | text-align: right; |
1506 | border-right: 5px solid #eee; | 1505 | border-right: 5px solid #eeeeee; |
1507 | border-left: 0; | 1506 | border-left: 0; |
1508 | } | 1507 | } |
1509 | .blockquote-reverse footer:before, | 1508 | .blockquote-reverse footer:before, |
@@ -1512,7 +1511,7 @@ blockquote.pull-right footer:before, | |||
1512 | blockquote.pull-right small:before, | 1511 | blockquote.pull-right small:before, |
1513 | .blockquote-reverse .small:before, | 1512 | .blockquote-reverse .small:before, |
1514 | blockquote.pull-right .small:before { | 1513 | blockquote.pull-right .small:before { |
1515 | content: ''; | 1514 | content: ""; |
1516 | } | 1515 | } |
1517 | .blockquote-reverse footer:after, | 1516 | .blockquote-reverse footer:after, |
1518 | blockquote.pull-right footer:after, | 1517 | blockquote.pull-right footer:after, |
@@ -1520,7 +1519,7 @@ blockquote.pull-right footer:after, | |||
1520 | blockquote.pull-right small:after, | 1519 | blockquote.pull-right small:after, |
1521 | .blockquote-reverse .small:after, | 1520 | .blockquote-reverse .small:after, |
1522 | blockquote.pull-right .small:after { | 1521 | blockquote.pull-right .small:after { |
1523 | content: '\00A0 \2014'; | 1522 | content: "\00A0 \2014"; |
1524 | } | 1523 | } |
1525 | address { | 1524 | address { |
1526 | margin-bottom: 20px; | 1525 | margin-bottom: 20px; |
@@ -1546,15 +1545,15 @@ kbd { | |||
1546 | color: #fff; | 1545 | color: #fff; |
1547 | background-color: #333; | 1546 | background-color: #333; |
1548 | border-radius: 3px; | 1547 | border-radius: 3px; |
1549 | -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); | 1548 | -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); |
1550 | box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); | 1549 | box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); |
1551 | } | 1550 | } |
1552 | kbd kbd { | 1551 | kbd kbd { |
1553 | padding: 0; | 1552 | padding: 0; |
1554 | font-size: 100%; | 1553 | font-size: 100%; |
1555 | font-weight: bold; | 1554 | font-weight: 700; |
1556 | -webkit-box-shadow: none; | 1555 | -webkit-box-shadow: none; |
1557 | box-shadow: none; | 1556 | box-shadow: none; |
1558 | } | 1557 | } |
1559 | pre { | 1558 | pre { |
1560 | display: block; | 1559 | display: block; |
@@ -1562,7 +1561,7 @@ pre { | |||
1562 | margin: 0 0 10px; | 1561 | margin: 0 0 10px; |
1563 | font-size: 13px; | 1562 | font-size: 13px; |
1564 | line-height: 1.42857143; | 1563 | line-height: 1.42857143; |
1565 | color: #333; | 1564 | color: #333333; |
1566 | word-break: break-all; | 1565 | word-break: break-all; |
1567 | word-wrap: break-word; | 1566 | word-wrap: break-word; |
1568 | background-color: #f5f5f5; | 1567 | background-color: #f5f5f5; |
@@ -1612,13 +1611,79 @@ pre code { | |||
1612 | margin-right: -15px; | 1611 | margin-right: -15px; |
1613 | margin-left: -15px; | 1612 | margin-left: -15px; |
1614 | } | 1613 | } |
1615 | .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { | 1614 | .row-no-gutters { |
1615 | margin-right: 0; | ||
1616 | margin-left: 0; | ||
1617 | } | ||
1618 | .row-no-gutters [class*="col-"] { | ||
1619 | padding-right: 0; | ||
1620 | padding-left: 0; | ||
1621 | } | ||
1622 | .col-xs-1, | ||
1623 | .col-sm-1, | ||
1624 | .col-md-1, | ||
1625 | .col-lg-1, | ||
1626 | .col-xs-2, | ||
1627 | .col-sm-2, | ||
1628 | .col-md-2, | ||
1629 | .col-lg-2, | ||
1630 | .col-xs-3, | ||
1631 | .col-sm-3, | ||
1632 | .col-md-3, | ||
1633 | .col-lg-3, | ||
1634 | .col-xs-4, | ||
1635 | .col-sm-4, | ||
1636 | .col-md-4, | ||
1637 | .col-lg-4, | ||
1638 | .col-xs-5, | ||
1639 | .col-sm-5, | ||
1640 | .col-md-5, | ||
1641 | .col-lg-5, | ||
1642 | .col-xs-6, | ||
1643 | .col-sm-6, | ||
1644 | .col-md-6, | ||
1645 | .col-lg-6, | ||
1646 | .col-xs-7, | ||
1647 | .col-sm-7, | ||
1648 | .col-md-7, | ||
1649 | .col-lg-7, | ||
1650 | .col-xs-8, | ||
1651 | .col-sm-8, | ||
1652 | .col-md-8, | ||
1653 | .col-lg-8, | ||
1654 | .col-xs-9, | ||
1655 | .col-sm-9, | ||
1656 | .col-md-9, | ||
1657 | .col-lg-9, | ||
1658 | .col-xs-10, | ||
1659 | .col-sm-10, | ||
1660 | .col-md-10, | ||
1661 | .col-lg-10, | ||
1662 | .col-xs-11, | ||
1663 | .col-sm-11, | ||
1664 | .col-md-11, | ||
1665 | .col-lg-11, | ||
1666 | .col-xs-12, | ||
1667 | .col-sm-12, | ||
1668 | .col-md-12, | ||
1669 | .col-lg-12 { | ||
1616 | position: relative; | 1670 | position: relative; |
1617 | min-height: 1px; | 1671 | min-height: 1px; |
1618 | padding-right: 15px; | 1672 | padding-right: 15px; |
1619 | padding-left: 15px; | 1673 | padding-left: 15px; |
1620 | } | 1674 | } |
1621 | .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { | 1675 | .col-xs-1, |
1676 | .col-xs-2, | ||
1677 | .col-xs-3, | ||
1678 | .col-xs-4, | ||
1679 | .col-xs-5, | ||
1680 | .col-xs-6, | ||
1681 | .col-xs-7, | ||
1682 | .col-xs-8, | ||
1683 | .col-xs-9, | ||
1684 | .col-xs-10, | ||
1685 | .col-xs-11, | ||
1686 | .col-xs-12 { | ||
1622 | float: left; | 1687 | float: left; |
1623 | } | 1688 | } |
1624 | .col-xs-12 { | 1689 | .col-xs-12 { |
@@ -1772,10 +1837,21 @@ pre code { | |||
1772 | margin-left: 8.33333333%; | 1837 | margin-left: 8.33333333%; |
1773 | } | 1838 | } |
1774 | .col-xs-offset-0 { | 1839 | .col-xs-offset-0 { |
1775 | margin-left: 0; | 1840 | margin-left: 0%; |
1776 | } | 1841 | } |
1777 | @media (min-width: 768px) { | 1842 | @media (min-width: 768px) { |
1778 | .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { | 1843 | .col-sm-1, |
1844 | .col-sm-2, | ||
1845 | .col-sm-3, | ||
1846 | .col-sm-4, | ||
1847 | .col-sm-5, | ||
1848 | .col-sm-6, | ||
1849 | .col-sm-7, | ||
1850 | .col-sm-8, | ||
1851 | .col-sm-9, | ||
1852 | .col-sm-10, | ||
1853 | .col-sm-11, | ||
1854 | .col-sm-12 { | ||
1779 | float: left; | 1855 | float: left; |
1780 | } | 1856 | } |
1781 | .col-sm-12 { | 1857 | .col-sm-12 { |
@@ -1929,11 +2005,22 @@ pre code { | |||
1929 | margin-left: 8.33333333%; | 2005 | margin-left: 8.33333333%; |
1930 | } | 2006 | } |
1931 | .col-sm-offset-0 { | 2007 | .col-sm-offset-0 { |
1932 | margin-left: 0; | 2008 | margin-left: 0%; |
1933 | } | 2009 | } |
1934 | } | 2010 | } |
1935 | @media (min-width: 992px) { | 2011 | @media (min-width: 992px) { |
1936 | .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { | 2012 | .col-md-1, |
2013 | .col-md-2, | ||
2014 | .col-md-3, | ||
2015 | .col-md-4, | ||
2016 | .col-md-5, | ||
2017 | .col-md-6, | ||
2018 | .col-md-7, | ||
2019 | .col-md-8, | ||
2020 | .col-md-9, | ||
2021 | .col-md-10, | ||
2022 | .col-md-11, | ||
2023 | .col-md-12 { | ||
1937 | float: left; | 2024 | float: left; |
1938 | } | 2025 | } |
1939 | .col-md-12 { | 2026 | .col-md-12 { |
@@ -2087,11 +2174,22 @@ pre code { | |||
2087 | margin-left: 8.33333333%; | 2174 | margin-left: 8.33333333%; |
2088 | } | 2175 | } |
2089 | .col-md-offset-0 { | 2176 | .col-md-offset-0 { |
2090 | margin-left: 0; | 2177 | margin-left: 0%; |
2091 | } | 2178 | } |
2092 | } | 2179 | } |
2093 | @media (min-width: 1200px) { | 2180 | @media (min-width: 1200px) { |
2094 | .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { | 2181 | .col-lg-1, |
2182 | .col-lg-2, | ||
2183 | .col-lg-3, | ||
2184 | .col-lg-4, | ||
2185 | .col-lg-5, | ||
2186 | .col-lg-6, | ||
2187 | .col-lg-7, | ||
2188 | .col-lg-8, | ||
2189 | .col-lg-9, | ||
2190 | .col-lg-10, | ||
2191 | .col-lg-11, | ||
2192 | .col-lg-12 { | ||
2095 | float: left; | 2193 | float: left; |
2096 | } | 2194 | } |
2097 | .col-lg-12 { | 2195 | .col-lg-12 { |
@@ -2245,16 +2343,27 @@ pre code { | |||
2245 | margin-left: 8.33333333%; | 2343 | margin-left: 8.33333333%; |
2246 | } | 2344 | } |
2247 | .col-lg-offset-0 { | 2345 | .col-lg-offset-0 { |
2248 | margin-left: 0; | 2346 | margin-left: 0%; |
2249 | } | 2347 | } |
2250 | } | 2348 | } |
2251 | table { | 2349 | table { |
2252 | background-color: transparent; | 2350 | background-color: transparent; |
2253 | } | 2351 | } |
2352 | table col[class*="col-"] { | ||
2353 | position: static; | ||
2354 | display: table-column; | ||
2355 | float: none; | ||
2356 | } | ||
2357 | table td[class*="col-"], | ||
2358 | table th[class*="col-"] { | ||
2359 | position: static; | ||
2360 | display: table-cell; | ||
2361 | float: none; | ||
2362 | } | ||
2254 | caption { | 2363 | caption { |
2255 | padding-top: 8px; | 2364 | padding-top: 8px; |
2256 | padding-bottom: 8px; | 2365 | padding-bottom: 8px; |
2257 | color: #777; | 2366 | color: #777777; |
2258 | text-align: left; | 2367 | text-align: left; |
2259 | } | 2368 | } |
2260 | th { | 2369 | th { |
@@ -2323,17 +2432,6 @@ th { | |||
2323 | .table-hover > tbody > tr:hover { | 2432 | .table-hover > tbody > tr:hover { |
2324 | background-color: #f5f5f5; | 2433 | background-color: #f5f5f5; |
2325 | } | 2434 | } |
2326 | table col[class*="col-"] { | ||
2327 | position: static; | ||
2328 | display: table-column; | ||
2329 | float: none; | ||
2330 | } | ||
2331 | table td[class*="col-"], | ||
2332 | table th[class*="col-"] { | ||
2333 | position: static; | ||
2334 | display: table-cell; | ||
2335 | float: none; | ||
2336 | } | ||
2337 | .table > thead > tr > td.active, | 2435 | .table > thead > tr > td.active, |
2338 | .table > tbody > tr > td.active, | 2436 | .table > tbody > tr > td.active, |
2339 | .table > tfoot > tr > td.active, | 2437 | .table > tfoot > tr > td.active, |
@@ -2440,7 +2538,7 @@ table th[class*="col-"] { | |||
2440 | background-color: #ebcccc; | 2538 | background-color: #ebcccc; |
2441 | } | 2539 | } |
2442 | .table-responsive { | 2540 | .table-responsive { |
2443 | min-height: .01%; | 2541 | min-height: 0.01%; |
2444 | overflow-x: auto; | 2542 | overflow-x: auto; |
2445 | } | 2543 | } |
2446 | @media screen and (max-width: 767px) { | 2544 | @media screen and (max-width: 767px) { |
@@ -2501,7 +2599,7 @@ legend { | |||
2501 | margin-bottom: 20px; | 2599 | margin-bottom: 20px; |
2502 | font-size: 21px; | 2600 | font-size: 21px; |
2503 | line-height: inherit; | 2601 | line-height: inherit; |
2504 | color: #333; | 2602 | color: #333333; |
2505 | border: 0; | 2603 | border: 0; |
2506 | border-bottom: 1px solid #e5e5e5; | 2604 | border-bottom: 1px solid #e5e5e5; |
2507 | } | 2605 | } |
@@ -2509,12 +2607,15 @@ label { | |||
2509 | display: inline-block; | 2607 | display: inline-block; |
2510 | max-width: 100%; | 2608 | max-width: 100%; |
2511 | margin-bottom: 5px; | 2609 | margin-bottom: 5px; |
2512 | font-weight: bold; | 2610 | font-weight: 700; |
2513 | } | 2611 | } |
2514 | input[type="search"] { | 2612 | input[type="search"] { |
2515 | -webkit-box-sizing: border-box; | 2613 | -webkit-box-sizing: border-box; |
2516 | -moz-box-sizing: border-box; | 2614 | -moz-box-sizing: border-box; |
2517 | box-sizing: border-box; | 2615 | box-sizing: border-box; |
2616 | -webkit-appearance: none; | ||
2617 | -moz-appearance: none; | ||
2618 | appearance: none; | ||
2518 | } | 2619 | } |
2519 | input[type="radio"], | 2620 | input[type="radio"], |
2520 | input[type="checkbox"] { | 2621 | input[type="checkbox"] { |
@@ -2522,6 +2623,14 @@ input[type="checkbox"] { | |||
2522 | margin-top: 1px \9; | 2623 | margin-top: 1px \9; |
2523 | line-height: normal; | 2624 | line-height: normal; |
2524 | } | 2625 | } |
2626 | input[type="radio"][disabled], | ||
2627 | input[type="checkbox"][disabled], | ||
2628 | input[type="radio"].disabled, | ||
2629 | input[type="checkbox"].disabled, | ||
2630 | fieldset[disabled] input[type="radio"], | ||
2631 | fieldset[disabled] input[type="checkbox"] { | ||
2632 | cursor: not-allowed; | ||
2633 | } | ||
2525 | input[type="file"] { | 2634 | input[type="file"] { |
2526 | display: block; | 2635 | display: block; |
2527 | } | 2636 | } |
@@ -2544,7 +2653,7 @@ output { | |||
2544 | padding-top: 7px; | 2653 | padding-top: 7px; |
2545 | font-size: 14px; | 2654 | font-size: 14px; |
2546 | line-height: 1.42857143; | 2655 | line-height: 1.42857143; |
2547 | color: #555; | 2656 | color: #555555; |
2548 | } | 2657 | } |
2549 | .form-control { | 2658 | .form-control { |
2550 | display: block; | 2659 | display: block; |
@@ -2553,22 +2662,25 @@ output { | |||
2553 | padding: 6px 12px; | 2662 | padding: 6px 12px; |
2554 | font-size: 14px; | 2663 | font-size: 14px; |
2555 | line-height: 1.42857143; | 2664 | line-height: 1.42857143; |
2556 | color: #555; | 2665 | color: #555555; |
2557 | background-color: #fff; | 2666 | background-color: #fff; |
2558 | background-image: none; | 2667 | background-image: none; |
2559 | border: 1px solid #ccc; | 2668 | border: 1px solid #ccc; |
2560 | border-radius: 4px; | 2669 | border-radius: 4px; |
2561 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); | 2670 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); |
2562 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); | 2671 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); |
2672 | -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; | ||
2673 | -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; | ||
2563 | -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; | 2674 | -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; |
2564 | -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; | 2675 | transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; |
2565 | transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; | 2676 | transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; |
2677 | transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; | ||
2566 | } | 2678 | } |
2567 | .form-control:focus { | 2679 | .form-control:focus { |
2568 | border-color: #66afe9; | 2680 | border-color: #66afe9; |
2569 | outline: 0; | 2681 | outline: 0; |
2570 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); | 2682 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); |
2571 | box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); | 2683 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); |
2572 | } | 2684 | } |
2573 | .form-control::-moz-placeholder { | 2685 | .form-control::-moz-placeholder { |
2574 | color: #999; | 2686 | color: #999; |
@@ -2587,7 +2699,7 @@ output { | |||
2587 | .form-control[disabled], | 2699 | .form-control[disabled], |
2588 | .form-control[readonly], | 2700 | .form-control[readonly], |
2589 | fieldset[disabled] .form-control { | 2701 | fieldset[disabled] .form-control { |
2590 | background-color: #eee; | 2702 | background-color: #eeeeee; |
2591 | opacity: 1; | 2703 | opacity: 1; |
2592 | } | 2704 | } |
2593 | .form-control[disabled], | 2705 | .form-control[disabled], |
@@ -2597,9 +2709,6 @@ fieldset[disabled] .form-control { | |||
2597 | textarea.form-control { | 2709 | textarea.form-control { |
2598 | height: auto; | 2710 | height: auto; |
2599 | } | 2711 | } |
2600 | input[type="search"] { | ||
2601 | -webkit-appearance: none; | ||
2602 | } | ||
2603 | @media screen and (-webkit-min-device-pixel-ratio: 0) { | 2712 | @media screen and (-webkit-min-device-pixel-ratio: 0) { |
2604 | input[type="date"].form-control, | 2713 | input[type="date"].form-control, |
2605 | input[type="time"].form-control, | 2714 | input[type="time"].form-control, |
@@ -2638,12 +2747,18 @@ input[type="search"] { | |||
2638 | margin-top: 10px; | 2747 | margin-top: 10px; |
2639 | margin-bottom: 10px; | 2748 | margin-bottom: 10px; |
2640 | } | 2749 | } |
2750 | .radio.disabled label, | ||
2751 | .checkbox.disabled label, | ||
2752 | fieldset[disabled] .radio label, | ||
2753 | fieldset[disabled] .checkbox label { | ||
2754 | cursor: not-allowed; | ||
2755 | } | ||
2641 | .radio label, | 2756 | .radio label, |
2642 | .checkbox label { | 2757 | .checkbox label { |
2643 | min-height: 20px; | 2758 | min-height: 20px; |
2644 | padding-left: 20px; | 2759 | padding-left: 20px; |
2645 | margin-bottom: 0; | 2760 | margin-bottom: 0; |
2646 | font-weight: normal; | 2761 | font-weight: 400; |
2647 | cursor: pointer; | 2762 | cursor: pointer; |
2648 | } | 2763 | } |
2649 | .radio input[type="radio"], | 2764 | .radio input[type="radio"], |
@@ -2664,34 +2779,20 @@ input[type="search"] { | |||
2664 | display: inline-block; | 2779 | display: inline-block; |
2665 | padding-left: 20px; | 2780 | padding-left: 20px; |
2666 | margin-bottom: 0; | 2781 | margin-bottom: 0; |
2667 | font-weight: normal; | 2782 | font-weight: 400; |
2668 | vertical-align: middle; | 2783 | vertical-align: middle; |
2669 | cursor: pointer; | 2784 | cursor: pointer; |
2670 | } | 2785 | } |
2671 | .radio-inline + .radio-inline, | ||
2672 | .checkbox-inline + .checkbox-inline { | ||
2673 | margin-top: 0; | ||
2674 | margin-left: 10px; | ||
2675 | } | ||
2676 | input[type="radio"][disabled], | ||
2677 | input[type="checkbox"][disabled], | ||
2678 | input[type="radio"].disabled, | ||
2679 | input[type="checkbox"].disabled, | ||
2680 | fieldset[disabled] input[type="radio"], | ||
2681 | fieldset[disabled] input[type="checkbox"] { | ||
2682 | cursor: not-allowed; | ||
2683 | } | ||
2684 | .radio-inline.disabled, | 2786 | .radio-inline.disabled, |
2685 | .checkbox-inline.disabled, | 2787 | .checkbox-inline.disabled, |
2686 | fieldset[disabled] .radio-inline, | 2788 | fieldset[disabled] .radio-inline, |
2687 | fieldset[disabled] .checkbox-inline { | 2789 | fieldset[disabled] .checkbox-inline { |
2688 | cursor: not-allowed; | 2790 | cursor: not-allowed; |
2689 | } | 2791 | } |
2690 | .radio.disabled label, | 2792 | .radio-inline + .radio-inline, |
2691 | .checkbox.disabled label, | 2793 | .checkbox-inline + .checkbox-inline { |
2692 | fieldset[disabled] .radio label, | 2794 | margin-top: 0; |
2693 | fieldset[disabled] .checkbox label { | 2795 | margin-left: 10px; |
2694 | cursor: not-allowed; | ||
2695 | } | 2796 | } |
2696 | .form-control-static { | 2797 | .form-control-static { |
2697 | min-height: 34px; | 2798 | min-height: 34px; |
@@ -2824,13 +2925,13 @@ select[multiple].input-lg { | |||
2824 | } | 2925 | } |
2825 | .has-success .form-control { | 2926 | .has-success .form-control { |
2826 | border-color: #3c763d; | 2927 | border-color: #3c763d; |
2827 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); | 2928 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); |
2828 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); | 2929 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); |
2829 | } | 2930 | } |
2830 | .has-success .form-control:focus { | 2931 | .has-success .form-control:focus { |
2831 | border-color: #2b542c; | 2932 | border-color: #2b542c; |
2832 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; | 2933 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; |
2833 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; | 2934 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; |
2834 | } | 2935 | } |
2835 | .has-success .input-group-addon { | 2936 | .has-success .input-group-addon { |
2836 | color: #3c763d; | 2937 | color: #3c763d; |
@@ -2854,13 +2955,13 @@ select[multiple].input-lg { | |||
2854 | } | 2955 | } |
2855 | .has-warning .form-control { | 2956 | .has-warning .form-control { |
2856 | border-color: #8a6d3b; | 2957 | border-color: #8a6d3b; |
2857 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); | 2958 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); |
2858 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); | 2959 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); |
2859 | } | 2960 | } |
2860 | .has-warning .form-control:focus { | 2961 | .has-warning .form-control:focus { |
2861 | border-color: #66512c; | 2962 | border-color: #66512c; |
2862 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; | 2963 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; |
2863 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; | 2964 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; |
2864 | } | 2965 | } |
2865 | .has-warning .input-group-addon { | 2966 | .has-warning .input-group-addon { |
2866 | color: #8a6d3b; | 2967 | color: #8a6d3b; |
@@ -2884,13 +2985,13 @@ select[multiple].input-lg { | |||
2884 | } | 2985 | } |
2885 | .has-error .form-control { | 2986 | .has-error .form-control { |
2886 | border-color: #a94442; | 2987 | border-color: #a94442; |
2887 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); | 2988 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); |
2888 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); | 2989 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); |
2889 | } | 2990 | } |
2890 | .has-error .form-control:focus { | 2991 | .has-error .form-control:focus { |
2891 | border-color: #843534; | 2992 | border-color: #843534; |
2892 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; | 2993 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; |
2893 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; | 2994 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; |
2894 | } | 2995 | } |
2895 | .has-error .input-group-addon { | 2996 | .has-error .input-group-addon { |
2896 | color: #a94442; | 2997 | color: #a94442; |
@@ -3002,24 +3103,24 @@ select[multiple].input-lg { | |||
3002 | } | 3103 | } |
3003 | .btn { | 3104 | .btn { |
3004 | display: inline-block; | 3105 | display: inline-block; |
3005 | padding: 6px 12px; | ||
3006 | margin-bottom: 0; | 3106 | margin-bottom: 0; |
3007 | font-size: 14px; | ||
3008 | font-weight: normal; | 3107 | font-weight: normal; |
3009 | line-height: 1.42857143; | ||
3010 | text-align: center; | 3108 | text-align: center; |
3011 | white-space: nowrap; | 3109 | white-space: nowrap; |
3012 | vertical-align: middle; | 3110 | vertical-align: middle; |
3013 | -ms-touch-action: manipulation; | 3111 | -ms-touch-action: manipulation; |
3014 | touch-action: manipulation; | 3112 | touch-action: manipulation; |
3015 | cursor: pointer; | 3113 | cursor: pointer; |
3016 | -webkit-user-select: none; | ||
3017 | -moz-user-select: none; | ||
3018 | -ms-user-select: none; | ||
3019 | user-select: none; | ||
3020 | background-image: none; | 3114 | background-image: none; |
3021 | border: 1px solid transparent; | 3115 | border: 1px solid transparent; |
3116 | padding: 6px 12px; | ||
3117 | font-size: 14px; | ||
3118 | line-height: 1.42857143; | ||
3022 | border-radius: 4px; | 3119 | border-radius: 4px; |
3120 | -webkit-user-select: none; | ||
3121 | -moz-user-select: none; | ||
3122 | -ms-user-select: none; | ||
3123 | user-select: none; | ||
3023 | } | 3124 | } |
3024 | .btn:focus, | 3125 | .btn:focus, |
3025 | .btn:active:focus, | 3126 | .btn:active:focus, |
@@ -3040,17 +3141,17 @@ select[multiple].input-lg { | |||
3040 | .btn.active { | 3141 | .btn.active { |
3041 | background-image: none; | 3142 | background-image: none; |
3042 | outline: 0; | 3143 | outline: 0; |
3043 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); | 3144 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); |
3044 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); | 3145 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); |
3045 | } | 3146 | } |
3046 | .btn.disabled, | 3147 | .btn.disabled, |
3047 | .btn[disabled], | 3148 | .btn[disabled], |
3048 | fieldset[disabled] .btn { | 3149 | fieldset[disabled] .btn { |
3049 | cursor: not-allowed; | 3150 | cursor: not-allowed; |
3050 | filter: alpha(opacity=65); | 3151 | filter: alpha(opacity=65); |
3152 | opacity: 0.65; | ||
3051 | -webkit-box-shadow: none; | 3153 | -webkit-box-shadow: none; |
3052 | box-shadow: none; | 3154 | box-shadow: none; |
3053 | opacity: .65; | ||
3054 | } | 3155 | } |
3055 | a.btn.disabled, | 3156 | a.btn.disabled, |
3056 | fieldset[disabled] a.btn { | 3157 | fieldset[disabled] a.btn { |
@@ -3077,6 +3178,7 @@ fieldset[disabled] a.btn { | |||
3077 | .open > .dropdown-toggle.btn-default { | 3178 | .open > .dropdown-toggle.btn-default { |
3078 | color: #333; | 3179 | color: #333; |
3079 | background-color: #e6e6e6; | 3180 | background-color: #e6e6e6; |
3181 | background-image: none; | ||
3080 | border-color: #adadad; | 3182 | border-color: #adadad; |
3081 | } | 3183 | } |
3082 | .btn-default:active:hover, | 3184 | .btn-default:active:hover, |
@@ -3092,11 +3194,6 @@ fieldset[disabled] a.btn { | |||
3092 | background-color: #d4d4d4; | 3194 | background-color: #d4d4d4; |
3093 | border-color: #8c8c8c; | 3195 | border-color: #8c8c8c; |
3094 | } | 3196 | } |
3095 | .btn-default:active, | ||
3096 | .btn-default.active, | ||
3097 | .open > .dropdown-toggle.btn-default { | ||
3098 | background-image: none; | ||
3099 | } | ||
3100 | .btn-default.disabled:hover, | 3197 | .btn-default.disabled:hover, |
3101 | .btn-default[disabled]:hover, | 3198 | .btn-default[disabled]:hover, |
3102 | fieldset[disabled] .btn-default:hover, | 3199 | fieldset[disabled] .btn-default:hover, |
@@ -3134,6 +3231,7 @@ fieldset[disabled] .btn-default.focus { | |||
3134 | .open > .dropdown-toggle.btn-primary { | 3231 | .open > .dropdown-toggle.btn-primary { |
3135 | color: #fff; | 3232 | color: #fff; |
3136 | background-color: #286090; | 3233 | background-color: #286090; |
3234 | background-image: none; | ||
3137 | border-color: #204d74; | 3235 | border-color: #204d74; |
3138 | } | 3236 | } |
3139 | .btn-primary:active:hover, | 3237 | .btn-primary:active:hover, |
@@ -3149,11 +3247,6 @@ fieldset[disabled] .btn-default.focus { | |||
3149 | background-color: #204d74; | 3247 | background-color: #204d74; |
3150 | border-color: #122b40; | 3248 | border-color: #122b40; |
3151 | } | 3249 | } |
3152 | .btn-primary:active, | ||
3153 | .btn-primary.active, | ||
3154 | .open > .dropdown-toggle.btn-primary { | ||
3155 | background-image: none; | ||
3156 | } | ||
3157 | .btn-primary.disabled:hover, | 3250 | .btn-primary.disabled:hover, |
3158 | .btn-primary[disabled]:hover, | 3251 | .btn-primary[disabled]:hover, |
3159 | fieldset[disabled] .btn-primary:hover, | 3252 | fieldset[disabled] .btn-primary:hover, |
@@ -3191,6 +3284,7 @@ fieldset[disabled] .btn-primary.focus { | |||
3191 | .open > .dropdown-toggle.btn-success { | 3284 | .open > .dropdown-toggle.btn-success { |
3192 | color: #fff; | 3285 | color: #fff; |
3193 | background-color: #449d44; | 3286 | background-color: #449d44; |
3287 | background-image: none; | ||
3194 | border-color: #398439; | 3288 | border-color: #398439; |
3195 | } | 3289 | } |
3196 | .btn-success:active:hover, | 3290 | .btn-success:active:hover, |
@@ -3206,11 +3300,6 @@ fieldset[disabled] .btn-primary.focus { | |||
3206 | background-color: #398439; | 3300 | background-color: #398439; |
3207 | border-color: #255625; | 3301 | border-color: #255625; |
3208 | } | 3302 | } |
3209 | .btn-success:active, | ||
3210 | .btn-success.active, | ||
3211 | .open > .dropdown-toggle.btn-success { | ||
3212 | background-image: none; | ||
3213 | } | ||
3214 | .btn-success.disabled:hover, | 3303 | .btn-success.disabled:hover, |
3215 | .btn-success[disabled]:hover, | 3304 | .btn-success[disabled]:hover, |
3216 | fieldset[disabled] .btn-success:hover, | 3305 | fieldset[disabled] .btn-success:hover, |
@@ -3248,6 +3337,7 @@ fieldset[disabled] .btn-success.focus { | |||
3248 | .open > .dropdown-toggle.btn-info { | 3337 | .open > .dropdown-toggle.btn-info { |
3249 | color: #fff; | 3338 | color: #fff; |
3250 | background-color: #31b0d5; | 3339 | background-color: #31b0d5; |
3340 | background-image: none; | ||
3251 | border-color: #269abc; | 3341 | border-color: #269abc; |
3252 | } | 3342 | } |
3253 | .btn-info:active:hover, | 3343 | .btn-info:active:hover, |
@@ -3263,11 +3353,6 @@ fieldset[disabled] .btn-success.focus { | |||
3263 | background-color: #269abc; | 3353 | background-color: #269abc; |
3264 | border-color: #1b6d85; | 3354 | border-color: #1b6d85; |
3265 | } | 3355 | } |
3266 | .btn-info:active, | ||
3267 | .btn-info.active, | ||
3268 | .open > .dropdown-toggle.btn-info { | ||
3269 | background-image: none; | ||
3270 | } | ||
3271 | .btn-info.disabled:hover, | 3356 | .btn-info.disabled:hover, |
3272 | .btn-info[disabled]:hover, | 3357 | .btn-info[disabled]:hover, |
3273 | fieldset[disabled] .btn-info:hover, | 3358 | fieldset[disabled] .btn-info:hover, |
@@ -3305,6 +3390,7 @@ fieldset[disabled] .btn-info.focus { | |||
3305 | .open > .dropdown-toggle.btn-warning { | 3390 | .open > .dropdown-toggle.btn-warning { |
3306 | color: #fff; | 3391 | color: #fff; |
3307 | background-color: #ec971f; | 3392 | background-color: #ec971f; |
3393 | background-image: none; | ||
3308 | border-color: #d58512; | 3394 | border-color: #d58512; |
3309 | } | 3395 | } |
3310 | .btn-warning:active:hover, | 3396 | .btn-warning:active:hover, |
@@ -3320,11 +3406,6 @@ fieldset[disabled] .btn-info.focus { | |||
3320 | background-color: #d58512; | 3406 | background-color: #d58512; |
3321 | border-color: #985f0d; | 3407 | border-color: #985f0d; |
3322 | } | 3408 | } |
3323 | .btn-warning:active, | ||
3324 | .btn-warning.active, | ||
3325 | .open > .dropdown-toggle.btn-warning { | ||
3326 | background-image: none; | ||
3327 | } | ||
3328 | .btn-warning.disabled:hover, | 3409 | .btn-warning.disabled:hover, |
3329 | .btn-warning[disabled]:hover, | 3410 | .btn-warning[disabled]:hover, |
3330 | fieldset[disabled] .btn-warning:hover, | 3411 | fieldset[disabled] .btn-warning:hover, |
@@ -3362,6 +3443,7 @@ fieldset[disabled] .btn-warning.focus { | |||
3362 | .open > .dropdown-toggle.btn-danger { | 3443 | .open > .dropdown-toggle.btn-danger { |
3363 | color: #fff; | 3444 | color: #fff; |
3364 | background-color: #c9302c; | 3445 | background-color: #c9302c; |
3446 | background-image: none; | ||
3365 | border-color: #ac2925; | 3447 | border-color: #ac2925; |
3366 | } | 3448 | } |
3367 | .btn-danger:active:hover, | 3449 | .btn-danger:active:hover, |
@@ -3377,11 +3459,6 @@ fieldset[disabled] .btn-warning.focus { | |||
3377 | background-color: #ac2925; | 3459 | background-color: #ac2925; |
3378 | border-color: #761c19; | 3460 | border-color: #761c19; |
3379 | } | 3461 | } |
3380 | .btn-danger:active, | ||
3381 | .btn-danger.active, | ||
3382 | .open > .dropdown-toggle.btn-danger { | ||
3383 | background-image: none; | ||
3384 | } | ||
3385 | .btn-danger.disabled:hover, | 3462 | .btn-danger.disabled:hover, |
3386 | .btn-danger[disabled]:hover, | 3463 | .btn-danger[disabled]:hover, |
3387 | fieldset[disabled] .btn-danger:hover, | 3464 | fieldset[disabled] .btn-danger:hover, |
@@ -3399,7 +3476,7 @@ fieldset[disabled] .btn-danger.focus { | |||
3399 | background-color: #fff; | 3476 | background-color: #fff; |
3400 | } | 3477 | } |
3401 | .btn-link { | 3478 | .btn-link { |
3402 | font-weight: normal; | 3479 | font-weight: 400; |
3403 | color: #337ab7; | 3480 | color: #337ab7; |
3404 | border-radius: 0; | 3481 | border-radius: 0; |
3405 | } | 3482 | } |
@@ -3410,7 +3487,7 @@ fieldset[disabled] .btn-danger.focus { | |||
3410 | fieldset[disabled] .btn-link { | 3487 | fieldset[disabled] .btn-link { |
3411 | background-color: transparent; | 3488 | background-color: transparent; |
3412 | -webkit-box-shadow: none; | 3489 | -webkit-box-shadow: none; |
3413 | box-shadow: none; | 3490 | box-shadow: none; |
3414 | } | 3491 | } |
3415 | .btn-link, | 3492 | .btn-link, |
3416 | .btn-link:hover, | 3493 | .btn-link:hover, |
@@ -3428,7 +3505,7 @@ fieldset[disabled] .btn-link { | |||
3428 | fieldset[disabled] .btn-link:hover, | 3505 | fieldset[disabled] .btn-link:hover, |
3429 | .btn-link[disabled]:focus, | 3506 | .btn-link[disabled]:focus, |
3430 | fieldset[disabled] .btn-link:focus { | 3507 | fieldset[disabled] .btn-link:focus { |
3431 | color: #777; | 3508 | color: #777777; |
3432 | text-decoration: none; | 3509 | text-decoration: none; |
3433 | } | 3510 | } |
3434 | .btn-lg, | 3511 | .btn-lg, |
@@ -3466,9 +3543,9 @@ input[type="button"].btn-block { | |||
3466 | } | 3543 | } |
3467 | .fade { | 3544 | .fade { |
3468 | opacity: 0; | 3545 | opacity: 0; |
3469 | -webkit-transition: opacity .15s linear; | 3546 | -webkit-transition: opacity 0.15s linear; |
3470 | -o-transition: opacity .15s linear; | 3547 | -o-transition: opacity 0.15s linear; |
3471 | transition: opacity .15s linear; | 3548 | transition: opacity 0.15s linear; |
3472 | } | 3549 | } |
3473 | .fade.in { | 3550 | .fade.in { |
3474 | opacity: 1; | 3551 | opacity: 1; |
@@ -3489,15 +3566,15 @@ tbody.collapse.in { | |||
3489 | position: relative; | 3566 | position: relative; |
3490 | height: 0; | 3567 | height: 0; |
3491 | overflow: hidden; | 3568 | overflow: hidden; |
3492 | -webkit-transition-timing-function: ease; | ||
3493 | -o-transition-timing-function: ease; | ||
3494 | transition-timing-function: ease; | ||
3495 | -webkit-transition-duration: .35s; | ||
3496 | -o-transition-duration: .35s; | ||
3497 | transition-duration: .35s; | ||
3498 | -webkit-transition-property: height, visibility; | 3569 | -webkit-transition-property: height, visibility; |
3499 | -o-transition-property: height, visibility; | 3570 | -o-transition-property: height, visibility; |
3500 | transition-property: height, visibility; | 3571 | transition-property: height, visibility; |
3572 | -webkit-transition-duration: 0.35s; | ||
3573 | -o-transition-duration: 0.35s; | ||
3574 | transition-duration: 0.35s; | ||
3575 | -webkit-transition-timing-function: ease; | ||
3576 | -o-transition-timing-function: ease; | ||
3577 | transition-timing-function: ease; | ||
3501 | } | 3578 | } |
3502 | .caret { | 3579 | .caret { |
3503 | display: inline-block; | 3580 | display: inline-block; |
@@ -3531,13 +3608,12 @@ tbody.collapse.in { | |||
3531 | text-align: left; | 3608 | text-align: left; |
3532 | list-style: none; | 3609 | list-style: none; |
3533 | background-color: #fff; | 3610 | background-color: #fff; |
3534 | -webkit-background-clip: padding-box; | 3611 | background-clip: padding-box; |
3535 | background-clip: padding-box; | ||
3536 | border: 1px solid #ccc; | 3612 | border: 1px solid #ccc; |
3537 | border: 1px solid rgba(0, 0, 0, .15); | 3613 | border: 1px solid rgba(0, 0, 0, 0.15); |
3538 | border-radius: 4px; | 3614 | border-radius: 4px; |
3539 | -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); | 3615 | -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); |
3540 | box-shadow: 0 6px 12px rgba(0, 0, 0, .175); | 3616 | box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); |
3541 | } | 3617 | } |
3542 | .dropdown-menu.pull-right { | 3618 | .dropdown-menu.pull-right { |
3543 | right: 0; | 3619 | right: 0; |
@@ -3553,9 +3629,9 @@ tbody.collapse.in { | |||
3553 | display: block; | 3629 | display: block; |
3554 | padding: 3px 20px; | 3630 | padding: 3px 20px; |
3555 | clear: both; | 3631 | clear: both; |
3556 | font-weight: normal; | 3632 | font-weight: 400; |
3557 | line-height: 1.42857143; | 3633 | line-height: 1.42857143; |
3558 | color: #333; | 3634 | color: #333333; |
3559 | white-space: nowrap; | 3635 | white-space: nowrap; |
3560 | } | 3636 | } |
3561 | .dropdown-menu > li > a:hover, | 3637 | .dropdown-menu > li > a:hover, |
@@ -3575,7 +3651,7 @@ tbody.collapse.in { | |||
3575 | .dropdown-menu > .disabled > a, | 3651 | .dropdown-menu > .disabled > a, |
3576 | .dropdown-menu > .disabled > a:hover, | 3652 | .dropdown-menu > .disabled > a:hover, |
3577 | .dropdown-menu > .disabled > a:focus { | 3653 | .dropdown-menu > .disabled > a:focus { |
3578 | color: #777; | 3654 | color: #777777; |
3579 | } | 3655 | } |
3580 | .dropdown-menu > .disabled > a:hover, | 3656 | .dropdown-menu > .disabled > a:hover, |
3581 | .dropdown-menu > .disabled > a:focus { | 3657 | .dropdown-menu > .disabled > a:focus { |
@@ -3604,7 +3680,7 @@ tbody.collapse.in { | |||
3604 | padding: 3px 20px; | 3680 | padding: 3px 20px; |
3605 | font-size: 12px; | 3681 | font-size: 12px; |
3606 | line-height: 1.42857143; | 3682 | line-height: 1.42857143; |
3607 | color: #777; | 3683 | color: #777777; |
3608 | white-space: nowrap; | 3684 | white-space: nowrap; |
3609 | } | 3685 | } |
3610 | .dropdown-backdrop { | 3686 | .dropdown-backdrop { |
@@ -3725,12 +3801,12 @@ tbody.collapse.in { | |||
3725 | padding-left: 12px; | 3801 | padding-left: 12px; |
3726 | } | 3802 | } |
3727 | .btn-group.open .dropdown-toggle { | 3803 | .btn-group.open .dropdown-toggle { |
3728 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); | 3804 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); |
3729 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); | 3805 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); |
3730 | } | 3806 | } |
3731 | .btn-group.open .dropdown-toggle.btn-link { | 3807 | .btn-group.open .dropdown-toggle.btn-link { |
3732 | -webkit-box-shadow: none; | 3808 | -webkit-box-shadow: none; |
3733 | box-shadow: none; | 3809 | box-shadow: none; |
3734 | } | 3810 | } |
3735 | .btn .caret { | 3811 | .btn .caret { |
3736 | margin-left: 0; | 3812 | margin-left: 0; |
@@ -3898,11 +3974,11 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
3898 | .input-group-addon { | 3974 | .input-group-addon { |
3899 | padding: 6px 12px; | 3975 | padding: 6px 12px; |
3900 | font-size: 14px; | 3976 | font-size: 14px; |
3901 | font-weight: normal; | 3977 | font-weight: 400; |
3902 | line-height: 1; | 3978 | line-height: 1; |
3903 | color: #555; | 3979 | color: #555555; |
3904 | text-align: center; | 3980 | text-align: center; |
3905 | background-color: #eee; | 3981 | background-color: #eeeeee; |
3906 | border: 1px solid #ccc; | 3982 | border: 1px solid #ccc; |
3907 | border-radius: 4px; | 3983 | border-radius: 4px; |
3908 | } | 3984 | } |
@@ -3988,14 +4064,14 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
3988 | .nav > li > a:hover, | 4064 | .nav > li > a:hover, |
3989 | .nav > li > a:focus { | 4065 | .nav > li > a:focus { |
3990 | text-decoration: none; | 4066 | text-decoration: none; |
3991 | background-color: #eee; | 4067 | background-color: #eeeeee; |
3992 | } | 4068 | } |
3993 | .nav > li.disabled > a { | 4069 | .nav > li.disabled > a { |
3994 | color: #777; | 4070 | color: #777777; |
3995 | } | 4071 | } |
3996 | .nav > li.disabled > a:hover, | 4072 | .nav > li.disabled > a:hover, |
3997 | .nav > li.disabled > a:focus { | 4073 | .nav > li.disabled > a:focus { |
3998 | color: #777; | 4074 | color: #777777; |
3999 | text-decoration: none; | 4075 | text-decoration: none; |
4000 | cursor: not-allowed; | 4076 | cursor: not-allowed; |
4001 | background-color: transparent; | 4077 | background-color: transparent; |
@@ -4003,7 +4079,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4003 | .nav .open > a, | 4079 | .nav .open > a, |
4004 | .nav .open > a:hover, | 4080 | .nav .open > a:hover, |
4005 | .nav .open > a:focus { | 4081 | .nav .open > a:focus { |
4006 | background-color: #eee; | 4082 | background-color: #eeeeee; |
4007 | border-color: #337ab7; | 4083 | border-color: #337ab7; |
4008 | } | 4084 | } |
4009 | .nav .nav-divider { | 4085 | .nav .nav-divider { |
@@ -4029,12 +4105,12 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4029 | border-radius: 4px 4px 0 0; | 4105 | border-radius: 4px 4px 0 0; |
4030 | } | 4106 | } |
4031 | .nav-tabs > li > a:hover { | 4107 | .nav-tabs > li > a:hover { |
4032 | border-color: #eee #eee #ddd; | 4108 | border-color: #eeeeee #eeeeee #ddd; |
4033 | } | 4109 | } |
4034 | .nav-tabs > li.active > a, | 4110 | .nav-tabs > li.active > a, |
4035 | .nav-tabs > li.active > a:hover, | 4111 | .nav-tabs > li.active > a:hover, |
4036 | .nav-tabs > li.active > a:focus { | 4112 | .nav-tabs > li.active > a:focus { |
4037 | color: #555; | 4113 | color: #555555; |
4038 | cursor: default; | 4114 | cursor: default; |
4039 | background-color: #fff; | 4115 | background-color: #fff; |
4040 | border: 1px solid #ddd; | 4116 | border: 1px solid #ddd; |
@@ -4183,10 +4259,10 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4183 | padding-right: 15px; | 4259 | padding-right: 15px; |
4184 | padding-left: 15px; | 4260 | padding-left: 15px; |
4185 | overflow-x: visible; | 4261 | overflow-x: visible; |
4186 | -webkit-overflow-scrolling: touch; | ||
4187 | border-top: 1px solid transparent; | 4262 | border-top: 1px solid transparent; |
4188 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); | 4263 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); |
4189 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); | 4264 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); |
4265 | -webkit-overflow-scrolling: touch; | ||
4190 | } | 4266 | } |
4191 | .navbar-collapse.in { | 4267 | .navbar-collapse.in { |
4192 | overflow-y: auto; | 4268 | overflow-y: auto; |
@@ -4196,7 +4272,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4196 | width: auto; | 4272 | width: auto; |
4197 | border-top: 0; | 4273 | border-top: 0; |
4198 | -webkit-box-shadow: none; | 4274 | -webkit-box-shadow: none; |
4199 | box-shadow: none; | 4275 | box-shadow: none; |
4200 | } | 4276 | } |
4201 | .navbar-collapse.collapse { | 4277 | .navbar-collapse.collapse { |
4202 | display: block !important; | 4278 | display: block !important; |
@@ -4214,6 +4290,13 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4214 | padding-left: 0; | 4290 | padding-left: 0; |
4215 | } | 4291 | } |
4216 | } | 4292 | } |
4293 | .navbar-fixed-top, | ||
4294 | .navbar-fixed-bottom { | ||
4295 | position: fixed; | ||
4296 | right: 0; | ||
4297 | left: 0; | ||
4298 | z-index: 1030; | ||
4299 | } | ||
4217 | .navbar-fixed-top .navbar-collapse, | 4300 | .navbar-fixed-top .navbar-collapse, |
4218 | .navbar-fixed-bottom .navbar-collapse { | 4301 | .navbar-fixed-bottom .navbar-collapse { |
4219 | max-height: 340px; | 4302 | max-height: 340px; |
@@ -4224,6 +4307,21 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4224 | max-height: 200px; | 4307 | max-height: 200px; |
4225 | } | 4308 | } |
4226 | } | 4309 | } |
4310 | @media (min-width: 768px) { | ||
4311 | .navbar-fixed-top, | ||
4312 | .navbar-fixed-bottom { | ||
4313 | border-radius: 0; | ||
4314 | } | ||
4315 | } | ||
4316 | .navbar-fixed-top { | ||
4317 | top: 0; | ||
4318 | border-width: 0 0 1px; | ||
4319 | } | ||
4320 | .navbar-fixed-bottom { | ||
4321 | bottom: 0; | ||
4322 | margin-bottom: 0; | ||
4323 | border-width: 1px 0 0; | ||
4324 | } | ||
4227 | .container > .navbar-header, | 4325 | .container > .navbar-header, |
4228 | .container-fluid > .navbar-header, | 4326 | .container-fluid > .navbar-header, |
4229 | .container > .navbar-collapse, | 4327 | .container > .navbar-collapse, |
@@ -4249,28 +4347,6 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4249 | border-radius: 0; | 4347 | border-radius: 0; |
4250 | } | 4348 | } |
4251 | } | 4349 | } |
4252 | .navbar-fixed-top, | ||
4253 | .navbar-fixed-bottom { | ||
4254 | position: fixed; | ||
4255 | right: 0; | ||
4256 | left: 0; | ||
4257 | z-index: 1030; | ||
4258 | } | ||
4259 | @media (min-width: 768px) { | ||
4260 | .navbar-fixed-top, | ||
4261 | .navbar-fixed-bottom { | ||
4262 | border-radius: 0; | ||
4263 | } | ||
4264 | } | ||
4265 | .navbar-fixed-top { | ||
4266 | top: 0; | ||
4267 | border-width: 0 0 1px; | ||
4268 | } | ||
4269 | .navbar-fixed-bottom { | ||
4270 | bottom: 0; | ||
4271 | margin-bottom: 0; | ||
4272 | border-width: 1px 0 0; | ||
4273 | } | ||
4274 | .navbar-brand { | 4350 | .navbar-brand { |
4275 | float: left; | 4351 | float: left; |
4276 | height: 50px; | 4352 | height: 50px; |
@@ -4295,8 +4371,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4295 | position: relative; | 4371 | position: relative; |
4296 | float: right; | 4372 | float: right; |
4297 | padding: 9px 10px; | 4373 | padding: 9px 10px; |
4298 | margin-top: 8px; | ||
4299 | margin-right: 15px; | 4374 | margin-right: 15px; |
4375 | margin-top: 8px; | ||
4300 | margin-bottom: 8px; | 4376 | margin-bottom: 8px; |
4301 | background-color: transparent; | 4377 | background-color: transparent; |
4302 | background-image: none; | 4378 | background-image: none; |
@@ -4337,7 +4413,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4337 | background-color: transparent; | 4413 | background-color: transparent; |
4338 | border: 0; | 4414 | border: 0; |
4339 | -webkit-box-shadow: none; | 4415 | -webkit-box-shadow: none; |
4340 | box-shadow: none; | 4416 | box-shadow: none; |
4341 | } | 4417 | } |
4342 | .navbar-nav .open .dropdown-menu > li > a, | 4418 | .navbar-nav .open .dropdown-menu > li > a, |
4343 | .navbar-nav .open .dropdown-menu .dropdown-header { | 4419 | .navbar-nav .open .dropdown-menu .dropdown-header { |
@@ -4366,14 +4442,14 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4366 | } | 4442 | } |
4367 | .navbar-form { | 4443 | .navbar-form { |
4368 | padding: 10px 15px; | 4444 | padding: 10px 15px; |
4369 | margin-top: 8px; | ||
4370 | margin-right: -15px; | 4445 | margin-right: -15px; |
4371 | margin-bottom: 8px; | ||
4372 | margin-left: -15px; | 4446 | margin-left: -15px; |
4373 | border-top: 1px solid transparent; | 4447 | border-top: 1px solid transparent; |
4374 | border-bottom: 1px solid transparent; | 4448 | border-bottom: 1px solid transparent; |
4375 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); | 4449 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); |
4376 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); | 4450 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); |
4451 | margin-top: 8px; | ||
4452 | margin-bottom: 8px; | ||
4377 | } | 4453 | } |
4378 | @media (min-width: 768px) { | 4454 | @media (min-width: 768px) { |
4379 | .navbar-form .form-group { | 4455 | .navbar-form .form-group { |
@@ -4442,7 +4518,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4442 | margin-left: 0; | 4518 | margin-left: 0; |
4443 | border: 0; | 4519 | border: 0; |
4444 | -webkit-box-shadow: none; | 4520 | -webkit-box-shadow: none; |
4445 | box-shadow: none; | 4521 | box-shadow: none; |
4446 | } | 4522 | } |
4447 | } | 4523 | } |
4448 | .navbar-nav > li > .dropdown-menu { | 4524 | .navbar-nav > li > .dropdown-menu { |
@@ -4527,20 +4603,6 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4527 | color: #ccc; | 4603 | color: #ccc; |
4528 | background-color: transparent; | 4604 | background-color: transparent; |
4529 | } | 4605 | } |
4530 | .navbar-default .navbar-toggle { | ||
4531 | border-color: #ddd; | ||
4532 | } | ||
4533 | .navbar-default .navbar-toggle:hover, | ||
4534 | .navbar-default .navbar-toggle:focus { | ||
4535 | background-color: #ddd; | ||
4536 | } | ||
4537 | .navbar-default .navbar-toggle .icon-bar { | ||
4538 | background-color: #888; | ||
4539 | } | ||
4540 | .navbar-default .navbar-collapse, | ||
4541 | .navbar-default .navbar-form { | ||
4542 | border-color: #e7e7e7; | ||
4543 | } | ||
4544 | .navbar-default .navbar-nav > .open > a, | 4606 | .navbar-default .navbar-nav > .open > a, |
4545 | .navbar-default .navbar-nav > .open > a:hover, | 4607 | .navbar-default .navbar-nav > .open > a:hover, |
4546 | .navbar-default .navbar-nav > .open > a:focus { | 4608 | .navbar-default .navbar-nav > .open > a:focus { |
@@ -4569,6 +4631,20 @@ select[multiple].input-group-sm > .input-group-btn > .btn { | |||
4569 | background-color: transparent; | 4631 | background-color: transparent; |
4570 | } | 4632 | } |
4571 | } | 4633 | } |
4634 | .navbar-default .navbar-toggle { | ||
4635 | border-color: #ddd; | ||
4636 | } | ||
4637 | .navbar-default .navbar-toggle:hover, | ||
4638 | .navbar-default .navbar-toggle:focus { | ||
4639 | background-color: #ddd; | ||
4640 | } | ||
4641 | .navbar-default .navbar-toggle .icon-bar { | ||
4642 | background-color: #888; | ||
4643 | } | ||
4644 | .navbar-default .navbar-collapse, | ||
4645 | .navbar-default .navbar-form { | ||
4646 | border-color: #e7e7e7; | ||
4647 | } | ||
4572 | .navbar-default .navbar-link { | 4648 | .navbar-default .navbar-link { |
4573 | color: #777; | 4649 | color: #777; |
4574 | } | 4650 | } |
@@ -4623,20 +4699,6 @@ fieldset[disabled] .navbar-default .btn-link:focus { | |||
4623 | color: #444; | 4699 | color: #444; |
4624 | background-color: transparent; | 4700 | background-color: transparent; |
4625 | } | 4701 | } |
4626 | .navbar-inverse .navbar-toggle { | ||
4627 | border-color: #333; | ||
4628 | } | ||
4629 | .navbar-inverse .navbar-toggle:hover, | ||
4630 | .navbar-inverse .navbar-toggle:focus { | ||
4631 | background-color: #333; | ||
4632 | } | ||
4633 | .navbar-inverse .navbar-toggle .icon-bar { | ||
4634 | background-color: #fff; | ||
4635 | } | ||
4636 | .navbar-inverse .navbar-collapse, | ||
4637 | .navbar-inverse .navbar-form { | ||
4638 | border-color: #101010; | ||
4639 | } | ||
4640 | .navbar-inverse .navbar-nav > .open > a, | 4702 | .navbar-inverse .navbar-nav > .open > a, |
4641 | .navbar-inverse .navbar-nav > .open > a:hover, | 4703 | .navbar-inverse .navbar-nav > .open > a:hover, |
4642 | .navbar-inverse .navbar-nav > .open > a:focus { | 4704 | .navbar-inverse .navbar-nav > .open > a:focus { |
@@ -4671,6 +4733,20 @@ fieldset[disabled] .navbar-default .btn-link:focus { | |||
4671 | background-color: transparent; | 4733 | background-color: transparent; |
4672 | } | 4734 | } |
4673 | } | 4735 | } |
4736 | .navbar-inverse .navbar-toggle { | ||
4737 | border-color: #333; | ||
4738 | } | ||
4739 | .navbar-inverse .navbar-toggle:hover, | ||
4740 | .navbar-inverse .navbar-toggle:focus { | ||
4741 | background-color: #333; | ||
4742 | } | ||
4743 | .navbar-inverse .navbar-toggle .icon-bar { | ||
4744 | background-color: #fff; | ||
4745 | } | ||
4746 | .navbar-inverse .navbar-collapse, | ||
4747 | .navbar-inverse .navbar-form { | ||
4748 | border-color: #101010; | ||
4749 | } | ||
4674 | .navbar-inverse .navbar-link { | 4750 | .navbar-inverse .navbar-link { |
4675 | color: #9d9d9d; | 4751 | color: #9d9d9d; |
4676 | } | 4752 | } |
@@ -4706,7 +4782,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { | |||
4706 | content: "/\00a0"; | 4782 | content: "/\00a0"; |
4707 | } | 4783 | } |
4708 | .breadcrumb > .active { | 4784 | .breadcrumb > .active { |
4709 | color: #777; | 4785 | color: #777777; |
4710 | } | 4786 | } |
4711 | .pagination { | 4787 | .pagination { |
4712 | display: inline-block; | 4788 | display: inline-block; |
@@ -4729,6 +4805,15 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { | |||
4729 | background-color: #fff; | 4805 | background-color: #fff; |
4730 | border: 1px solid #ddd; | 4806 | border: 1px solid #ddd; |
4731 | } | 4807 | } |
4808 | .pagination > li > a:hover, | ||
4809 | .pagination > li > span:hover, | ||
4810 | .pagination > li > a:focus, | ||
4811 | .pagination > li > span:focus { | ||
4812 | z-index: 2; | ||
4813 | color: #23527c; | ||
4814 | background-color: #eeeeee; | ||
4815 | border-color: #ddd; | ||
4816 | } | ||
4732 | .pagination > li:first-child > a, | 4817 | .pagination > li:first-child > a, |
4733 | .pagination > li:first-child > span { | 4818 | .pagination > li:first-child > span { |
4734 | margin-left: 0; | 4819 | margin-left: 0; |
@@ -4740,15 +4825,6 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { | |||
4740 | border-top-right-radius: 4px; | 4825 | border-top-right-radius: 4px; |
4741 | border-bottom-right-radius: 4px; | 4826 | border-bottom-right-radius: 4px; |
4742 | } | 4827 | } |
4743 | .pagination > li > a:hover, | ||
4744 | .pagination > li > span:hover, | ||
4745 | .pagination > li > a:focus, | ||
4746 | .pagination > li > span:focus { | ||
4747 | z-index: 2; | ||
4748 | color: #23527c; | ||
4749 | background-color: #eee; | ||
4750 | border-color: #ddd; | ||
4751 | } | ||
4752 | .pagination > .active > a, | 4828 | .pagination > .active > a, |
4753 | .pagination > .active > span, | 4829 | .pagination > .active > span, |
4754 | .pagination > .active > a:hover, | 4830 | .pagination > .active > a:hover, |
@@ -4767,7 +4843,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { | |||
4767 | .pagination > .disabled > a, | 4843 | .pagination > .disabled > a, |
4768 | .pagination > .disabled > a:hover, | 4844 | .pagination > .disabled > a:hover, |
4769 | .pagination > .disabled > a:focus { | 4845 | .pagination > .disabled > a:focus { |
4770 | color: #777; | 4846 | color: #777777; |
4771 | cursor: not-allowed; | 4847 | cursor: not-allowed; |
4772 | background-color: #fff; | 4848 | background-color: #fff; |
4773 | border-color: #ddd; | 4849 | border-color: #ddd; |
@@ -4824,7 +4900,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { | |||
4824 | .pager li > a:hover, | 4900 | .pager li > a:hover, |
4825 | .pager li > a:focus { | 4901 | .pager li > a:focus { |
4826 | text-decoration: none; | 4902 | text-decoration: none; |
4827 | background-color: #eee; | 4903 | background-color: #eeeeee; |
4828 | } | 4904 | } |
4829 | .pager .next > a, | 4905 | .pager .next > a, |
4830 | .pager .next > span { | 4906 | .pager .next > span { |
@@ -4838,21 +4914,21 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { | |||
4838 | .pager .disabled > a:hover, | 4914 | .pager .disabled > a:hover, |
4839 | .pager .disabled > a:focus, | 4915 | .pager .disabled > a:focus, |
4840 | .pager .disabled > span { | 4916 | .pager .disabled > span { |
4841 | color: #777; | 4917 | color: #777777; |
4842 | cursor: not-allowed; | 4918 | cursor: not-allowed; |
4843 | background-color: #fff; | 4919 | background-color: #fff; |
4844 | } | 4920 | } |
4845 | .label { | 4921 | .label { |
4846 | display: inline; | 4922 | display: inline; |
4847 | padding: .2em .6em .3em; | 4923 | padding: 0.2em 0.6em 0.3em; |
4848 | font-size: 75%; | 4924 | font-size: 75%; |
4849 | font-weight: bold; | 4925 | font-weight: 700; |
4850 | line-height: 1; | 4926 | line-height: 1; |
4851 | color: #fff; | 4927 | color: #fff; |
4852 | text-align: center; | 4928 | text-align: center; |
4853 | white-space: nowrap; | 4929 | white-space: nowrap; |
4854 | vertical-align: baseline; | 4930 | vertical-align: baseline; |
4855 | border-radius: .25em; | 4931 | border-radius: 0.25em; |
4856 | } | 4932 | } |
4857 | a.label:hover, | 4933 | a.label:hover, |
4858 | a.label:focus { | 4934 | a.label:focus { |
@@ -4868,7 +4944,7 @@ a.label:focus { | |||
4868 | top: -1px; | 4944 | top: -1px; |
4869 | } | 4945 | } |
4870 | .label-default { | 4946 | .label-default { |
4871 | background-color: #777; | 4947 | background-color: #777777; |
4872 | } | 4948 | } |
4873 | .label-default[href]:hover, | 4949 | .label-default[href]:hover, |
4874 | .label-default[href]:focus { | 4950 | .label-default[href]:focus { |
@@ -4920,7 +4996,7 @@ a.label:focus { | |||
4920 | text-align: center; | 4996 | text-align: center; |
4921 | white-space: nowrap; | 4997 | white-space: nowrap; |
4922 | vertical-align: middle; | 4998 | vertical-align: middle; |
4923 | background-color: #777; | 4999 | background-color: #777777; |
4924 | border-radius: 10px; | 5000 | border-radius: 10px; |
4925 | } | 5001 | } |
4926 | .badge:empty { | 5002 | .badge:empty { |
@@ -4960,7 +5036,7 @@ a.badge:focus { | |||
4960 | padding-bottom: 30px; | 5036 | padding-bottom: 30px; |
4961 | margin-bottom: 30px; | 5037 | margin-bottom: 30px; |
4962 | color: inherit; | 5038 | color: inherit; |
4963 | background-color: #eee; | 5039 | background-color: #eeeeee; |
4964 | } | 5040 | } |
4965 | .jumbotron h1, | 5041 | .jumbotron h1, |
4966 | .jumbotron .h1 { | 5042 | .jumbotron .h1 { |
@@ -5006,9 +5082,9 @@ a.badge:focus { | |||
5006 | background-color: #fff; | 5082 | background-color: #fff; |
5007 | border: 1px solid #ddd; | 5083 | border: 1px solid #ddd; |
5008 | border-radius: 4px; | 5084 | border-radius: 4px; |
5009 | -webkit-transition: border .2s ease-in-out; | 5085 | -webkit-transition: border 0.2s ease-in-out; |
5010 | -o-transition: border .2s ease-in-out; | 5086 | -o-transition: border 0.2s ease-in-out; |
5011 | transition: border .2s ease-in-out; | 5087 | transition: border 0.2s ease-in-out; |
5012 | } | 5088 | } |
5013 | .thumbnail > img, | 5089 | .thumbnail > img, |
5014 | .thumbnail a > img { | 5090 | .thumbnail a > img { |
@@ -5022,7 +5098,7 @@ a.thumbnail.active { | |||
5022 | } | 5098 | } |
5023 | .thumbnail .caption { | 5099 | .thumbnail .caption { |
5024 | padding: 9px; | 5100 | padding: 9px; |
5025 | color: #333; | 5101 | color: #333333; |
5026 | } | 5102 | } |
5027 | .alert { | 5103 | .alert { |
5028 | padding: 15px; | 5104 | padding: 15px; |
@@ -5129,69 +5205,69 @@ a.thumbnail.active { | |||
5129 | overflow: hidden; | 5205 | overflow: hidden; |
5130 | background-color: #f5f5f5; | 5206 | background-color: #f5f5f5; |
5131 | border-radius: 4px; | 5207 | border-radius: 4px; |
5132 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); | 5208 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); |
5133 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); | 5209 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); |
5134 | } | 5210 | } |
5135 | .progress-bar { | 5211 | .progress-bar { |
5136 | float: left; | 5212 | float: left; |
5137 | width: 0; | 5213 | width: 0%; |
5138 | height: 100%; | 5214 | height: 100%; |
5139 | font-size: 12px; | 5215 | font-size: 12px; |
5140 | line-height: 20px; | 5216 | line-height: 20px; |
5141 | color: #fff; | 5217 | color: #fff; |
5142 | text-align: center; | 5218 | text-align: center; |
5143 | background-color: #337ab7; | 5219 | background-color: #337ab7; |
5144 | -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); | 5220 | -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); |
5145 | box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); | 5221 | box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); |
5146 | -webkit-transition: width .6s ease; | 5222 | -webkit-transition: width 0.6s ease; |
5147 | -o-transition: width .6s ease; | 5223 | -o-transition: width 0.6s ease; |
5148 | transition: width .6s ease; | 5224 | transition: width 0.6s ease; |
5149 | } | 5225 | } |
5150 | .progress-striped .progress-bar, | 5226 | .progress-striped .progress-bar, |
5151 | .progress-bar-striped { | 5227 | .progress-bar-striped { |
5152 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5228 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5153 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5229 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5154 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5230 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5155 | -webkit-background-size: 40px 40px; | 5231 | -webkit-background-size: 40px 40px; |
5156 | background-size: 40px 40px; | 5232 | background-size: 40px 40px; |
5157 | } | 5233 | } |
5158 | .progress.active .progress-bar, | 5234 | .progress.active .progress-bar, |
5159 | .progress-bar.active { | 5235 | .progress-bar.active { |
5160 | -webkit-animation: progress-bar-stripes 2s linear infinite; | 5236 | -webkit-animation: progress-bar-stripes 2s linear infinite; |
5161 | -o-animation: progress-bar-stripes 2s linear infinite; | 5237 | -o-animation: progress-bar-stripes 2s linear infinite; |
5162 | animation: progress-bar-stripes 2s linear infinite; | 5238 | animation: progress-bar-stripes 2s linear infinite; |
5163 | } | 5239 | } |
5164 | .progress-bar-success { | 5240 | .progress-bar-success { |
5165 | background-color: #5cb85c; | 5241 | background-color: #5cb85c; |
5166 | } | 5242 | } |
5167 | .progress-striped .progress-bar-success { | 5243 | .progress-striped .progress-bar-success { |
5168 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5244 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5169 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5245 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5170 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5246 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5171 | } | 5247 | } |
5172 | .progress-bar-info { | 5248 | .progress-bar-info { |
5173 | background-color: #5bc0de; | 5249 | background-color: #5bc0de; |
5174 | } | 5250 | } |
5175 | .progress-striped .progress-bar-info { | 5251 | .progress-striped .progress-bar-info { |
5176 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5252 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5177 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5253 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5178 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5254 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5179 | } | 5255 | } |
5180 | .progress-bar-warning { | 5256 | .progress-bar-warning { |
5181 | background-color: #f0ad4e; | 5257 | background-color: #f0ad4e; |
5182 | } | 5258 | } |
5183 | .progress-striped .progress-bar-warning { | 5259 | .progress-striped .progress-bar-warning { |
5184 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5260 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5185 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5261 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5186 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5262 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5187 | } | 5263 | } |
5188 | .progress-bar-danger { | 5264 | .progress-bar-danger { |
5189 | background-color: #d9534f; | 5265 | background-color: #d9534f; |
5190 | } | 5266 | } |
5191 | .progress-striped .progress-bar-danger { | 5267 | .progress-striped .progress-bar-danger { |
5192 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5268 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5193 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5269 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5194 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); | 5270 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
5195 | } | 5271 | } |
5196 | .media { | 5272 | .media { |
5197 | margin-top: 15px; | 5273 | margin-top: 15px; |
@@ -5262,32 +5338,12 @@ a.thumbnail.active { | |||
5262 | border-bottom-right-radius: 4px; | 5338 | border-bottom-right-radius: 4px; |
5263 | border-bottom-left-radius: 4px; | 5339 | border-bottom-left-radius: 4px; |
5264 | } | 5340 | } |
5265 | a.list-group-item, | ||
5266 | button.list-group-item { | ||
5267 | color: #555; | ||
5268 | } | ||
5269 | a.list-group-item .list-group-item-heading, | ||
5270 | button.list-group-item .list-group-item-heading { | ||
5271 | color: #333; | ||
5272 | } | ||
5273 | a.list-group-item:hover, | ||
5274 | button.list-group-item:hover, | ||
5275 | a.list-group-item:focus, | ||
5276 | button.list-group-item:focus { | ||
5277 | color: #555; | ||
5278 | text-decoration: none; | ||
5279 | background-color: #f5f5f5; | ||
5280 | } | ||
5281 | button.list-group-item { | ||
5282 | width: 100%; | ||
5283 | text-align: left; | ||
5284 | } | ||
5285 | .list-group-item.disabled, | 5341 | .list-group-item.disabled, |
5286 | .list-group-item.disabled:hover, | 5342 | .list-group-item.disabled:hover, |
5287 | .list-group-item.disabled:focus { | 5343 | .list-group-item.disabled:focus { |
5288 | color: #777; | 5344 | color: #777777; |
5289 | cursor: not-allowed; | 5345 | cursor: not-allowed; |
5290 | background-color: #eee; | 5346 | background-color: #eeeeee; |
5291 | } | 5347 | } |
5292 | .list-group-item.disabled .list-group-item-heading, | 5348 | .list-group-item.disabled .list-group-item-heading, |
5293 | .list-group-item.disabled:hover .list-group-item-heading, | 5349 | .list-group-item.disabled:hover .list-group-item-heading, |
@@ -5297,7 +5353,7 @@ button.list-group-item { | |||
5297 | .list-group-item.disabled .list-group-item-text, | 5353 | .list-group-item.disabled .list-group-item-text, |
5298 | .list-group-item.disabled:hover .list-group-item-text, | 5354 | .list-group-item.disabled:hover .list-group-item-text, |
5299 | .list-group-item.disabled:focus .list-group-item-text { | 5355 | .list-group-item.disabled:focus .list-group-item-text { |
5300 | color: #777; | 5356 | color: #777777; |
5301 | } | 5357 | } |
5302 | .list-group-item.active, | 5358 | .list-group-item.active, |
5303 | .list-group-item.active:hover, | 5359 | .list-group-item.active:hover, |
@@ -5323,6 +5379,26 @@ button.list-group-item { | |||
5323 | .list-group-item.active:focus .list-group-item-text { | 5379 | .list-group-item.active:focus .list-group-item-text { |
5324 | color: #c7ddef; | 5380 | color: #c7ddef; |
5325 | } | 5381 | } |
5382 | a.list-group-item, | ||
5383 | button.list-group-item { | ||
5384 | color: #555; | ||
5385 | } | ||
5386 | a.list-group-item .list-group-item-heading, | ||
5387 | button.list-group-item .list-group-item-heading { | ||
5388 | color: #333; | ||
5389 | } | ||
5390 | a.list-group-item:hover, | ||
5391 | button.list-group-item:hover, | ||
5392 | a.list-group-item:focus, | ||
5393 | button.list-group-item:focus { | ||
5394 | color: #555; | ||
5395 | text-decoration: none; | ||
5396 | background-color: #f5f5f5; | ||
5397 | } | ||
5398 | button.list-group-item { | ||
5399 | width: 100%; | ||
5400 | text-align: left; | ||
5401 | } | ||
5326 | .list-group-item-success { | 5402 | .list-group-item-success { |
5327 | color: #3c763d; | 5403 | color: #3c763d; |
5328 | background-color: #dff0d8; | 5404 | background-color: #dff0d8; |
@@ -5452,8 +5528,8 @@ button.list-group-item-danger.active:focus { | |||
5452 | background-color: #fff; | 5528 | background-color: #fff; |
5453 | border: 1px solid transparent; | 5529 | border: 1px solid transparent; |
5454 | border-radius: 4px; | 5530 | border-radius: 4px; |
5455 | -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); | 5531 | -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); |
5456 | box-shadow: 0 1px 1px rgba(0, 0, 0, .05); | 5532 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); |
5457 | } | 5533 | } |
5458 | .panel-body { | 5534 | .panel-body { |
5459 | padding: 15px; | 5535 | padding: 15px; |
@@ -5686,7 +5762,7 @@ button.list-group-item-danger.active:focus { | |||
5686 | border-color: #ddd; | 5762 | border-color: #ddd; |
5687 | } | 5763 | } |
5688 | .panel-default > .panel-heading { | 5764 | .panel-default > .panel-heading { |
5689 | color: #333; | 5765 | color: #333333; |
5690 | background-color: #f5f5f5; | 5766 | background-color: #f5f5f5; |
5691 | border-color: #ddd; | 5767 | border-color: #ddd; |
5692 | } | 5768 | } |
@@ -5695,7 +5771,7 @@ button.list-group-item-danger.active:focus { | |||
5695 | } | 5771 | } |
5696 | .panel-default > .panel-heading .badge { | 5772 | .panel-default > .panel-heading .badge { |
5697 | color: #f5f5f5; | 5773 | color: #f5f5f5; |
5698 | background-color: #333; | 5774 | background-color: #333333; |
5699 | } | 5775 | } |
5700 | .panel-default > .panel-footer + .panel-collapse > .panel-body { | 5776 | .panel-default > .panel-footer + .panel-collapse > .panel-body { |
5701 | border-bottom-color: #ddd; | 5777 | border-bottom-color: #ddd; |
@@ -5823,12 +5899,12 @@ button.list-group-item-danger.active:focus { | |||
5823 | background-color: #f5f5f5; | 5899 | background-color: #f5f5f5; |
5824 | border: 1px solid #e3e3e3; | 5900 | border: 1px solid #e3e3e3; |
5825 | border-radius: 4px; | 5901 | border-radius: 4px; |
5826 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); | 5902 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); |
5827 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); | 5903 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); |
5828 | } | 5904 | } |
5829 | .well blockquote { | 5905 | .well blockquote { |
5830 | border-color: #ddd; | 5906 | border-color: #ddd; |
5831 | border-color: rgba(0, 0, 0, .15); | 5907 | border-color: rgba(0, 0, 0, 0.15); |
5832 | } | 5908 | } |
5833 | .well-lg { | 5909 | .well-lg { |
5834 | padding: 24px; | 5910 | padding: 24px; |
@@ -5846,7 +5922,7 @@ button.list-group-item-danger.active:focus { | |||
5846 | color: #000; | 5922 | color: #000; |
5847 | text-shadow: 0 1px 0 #fff; | 5923 | text-shadow: 0 1px 0 #fff; |
5848 | filter: alpha(opacity=20); | 5924 | filter: alpha(opacity=20); |
5849 | opacity: .2; | 5925 | opacity: 0.2; |
5850 | } | 5926 | } |
5851 | .close:hover, | 5927 | .close:hover, |
5852 | .close:focus { | 5928 | .close:focus { |
@@ -5854,14 +5930,16 @@ button.list-group-item-danger.active:focus { | |||
5854 | text-decoration: none; | 5930 | text-decoration: none; |
5855 | cursor: pointer; | 5931 | cursor: pointer; |
5856 | filter: alpha(opacity=50); | 5932 | filter: alpha(opacity=50); |
5857 | opacity: .5; | 5933 | opacity: 0.5; |
5858 | } | 5934 | } |
5859 | button.close { | 5935 | button.close { |
5860 | -webkit-appearance: none; | ||
5861 | padding: 0; | 5936 | padding: 0; |
5862 | cursor: pointer; | 5937 | cursor: pointer; |
5863 | background: transparent; | 5938 | background: transparent; |
5864 | border: 0; | 5939 | border: 0; |
5940 | -webkit-appearance: none; | ||
5941 | -moz-appearance: none; | ||
5942 | appearance: none; | ||
5865 | } | 5943 | } |
5866 | .modal-open { | 5944 | .modal-open { |
5867 | overflow: hidden; | 5945 | overflow: hidden; |
@@ -5879,19 +5957,21 @@ button.close { | |||
5879 | outline: 0; | 5957 | outline: 0; |
5880 | } | 5958 | } |
5881 | .modal.fade .modal-dialog { | 5959 | .modal.fade .modal-dialog { |
5882 | -webkit-transition: -webkit-transform .3s ease-out; | ||
5883 | -o-transition: -o-transform .3s ease-out; | ||
5884 | transition: transform .3s ease-out; | ||
5885 | -webkit-transform: translate(0, -25%); | 5960 | -webkit-transform: translate(0, -25%); |
5886 | -ms-transform: translate(0, -25%); | 5961 | -ms-transform: translate(0, -25%); |
5887 | -o-transform: translate(0, -25%); | 5962 | -o-transform: translate(0, -25%); |
5888 | transform: translate(0, -25%); | 5963 | transform: translate(0, -25%); |
5964 | -webkit-transition: -webkit-transform 0.3s ease-out; | ||
5965 | -o-transition: -o-transform 0.3s ease-out; | ||
5966 | transition: -webkit-transform 0.3s ease-out; | ||
5967 | transition: transform 0.3s ease-out; | ||
5968 | transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out, -o-transform 0.3s ease-out; | ||
5889 | } | 5969 | } |
5890 | .modal.in .modal-dialog { | 5970 | .modal.in .modal-dialog { |
5891 | -webkit-transform: translate(0, 0); | 5971 | -webkit-transform: translate(0, 0); |
5892 | -ms-transform: translate(0, 0); | 5972 | -ms-transform: translate(0, 0); |
5893 | -o-transform: translate(0, 0); | 5973 | -o-transform: translate(0, 0); |
5894 | transform: translate(0, 0); | 5974 | transform: translate(0, 0); |
5895 | } | 5975 | } |
5896 | .modal-open .modal { | 5976 | .modal-open .modal { |
5897 | overflow-x: hidden; | 5977 | overflow-x: hidden; |
@@ -5905,14 +5985,13 @@ button.close { | |||
5905 | .modal-content { | 5985 | .modal-content { |
5906 | position: relative; | 5986 | position: relative; |
5907 | background-color: #fff; | 5987 | background-color: #fff; |
5908 | -webkit-background-clip: padding-box; | 5988 | background-clip: padding-box; |
5909 | background-clip: padding-box; | ||
5910 | border: 1px solid #999; | 5989 | border: 1px solid #999; |
5911 | border: 1px solid rgba(0, 0, 0, .2); | 5990 | border: 1px solid rgba(0, 0, 0, 0.2); |
5912 | border-radius: 6px; | 5991 | border-radius: 6px; |
5992 | -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); | ||
5993 | box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); | ||
5913 | outline: 0; | 5994 | outline: 0; |
5914 | -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); | ||
5915 | box-shadow: 0 3px 9px rgba(0, 0, 0, .5); | ||
5916 | } | 5995 | } |
5917 | .modal-backdrop { | 5996 | .modal-backdrop { |
5918 | position: fixed; | 5997 | position: fixed; |
@@ -5929,7 +6008,7 @@ button.close { | |||
5929 | } | 6008 | } |
5930 | .modal-backdrop.in { | 6009 | .modal-backdrop.in { |
5931 | filter: alpha(opacity=50); | 6010 | filter: alpha(opacity=50); |
5932 | opacity: .5; | 6011 | opacity: 0.5; |
5933 | } | 6012 | } |
5934 | .modal-header { | 6013 | .modal-header { |
5935 | padding: 15px; | 6014 | padding: 15px; |
@@ -5974,8 +6053,8 @@ button.close { | |||
5974 | margin: 30px auto; | 6053 | margin: 30px auto; |
5975 | } | 6054 | } |
5976 | .modal-content { | 6055 | .modal-content { |
5977 | -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); | 6056 | -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); |
5978 | box-shadow: 0 5px 15px rgba(0, 0, 0, .5); | 6057 | box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); |
5979 | } | 6058 | } |
5980 | .modal-sm { | 6059 | .modal-sm { |
5981 | width: 300px; | 6060 | width: 300px; |
@@ -5991,10 +6070,10 @@ button.close { | |||
5991 | z-index: 1070; | 6070 | z-index: 1070; |
5992 | display: block; | 6071 | display: block; |
5993 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | 6072 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; |
5994 | font-size: 12px; | ||
5995 | font-style: normal; | 6073 | font-style: normal; |
5996 | font-weight: normal; | 6074 | font-weight: 400; |
5997 | line-height: 1.42857143; | 6075 | line-height: 1.42857143; |
6076 | line-break: auto; | ||
5998 | text-align: left; | 6077 | text-align: left; |
5999 | text-align: start; | 6078 | text-align: start; |
6000 | text-decoration: none; | 6079 | text-decoration: none; |
@@ -6005,14 +6084,13 @@ button.close { | |||
6005 | word-spacing: normal; | 6084 | word-spacing: normal; |
6006 | word-wrap: normal; | 6085 | word-wrap: normal; |
6007 | white-space: normal; | 6086 | white-space: normal; |
6087 | font-size: 12px; | ||
6008 | filter: alpha(opacity=0); | 6088 | filter: alpha(opacity=0); |
6009 | opacity: 0; | 6089 | opacity: 0; |
6010 | |||
6011 | line-break: auto; | ||
6012 | } | 6090 | } |
6013 | .tooltip.in { | 6091 | .tooltip.in { |
6014 | filter: alpha(opacity=90); | 6092 | filter: alpha(opacity=90); |
6015 | opacity: .9; | 6093 | opacity: 0.9; |
6016 | } | 6094 | } |
6017 | .tooltip.top { | 6095 | .tooltip.top { |
6018 | padding: 5px 0; | 6096 | padding: 5px 0; |
@@ -6030,21 +6108,6 @@ button.close { | |||
6030 | padding: 0 5px; | 6108 | padding: 0 5px; |
6031 | margin-left: -3px; | 6109 | margin-left: -3px; |
6032 | } | 6110 | } |
6033 | .tooltip-inner { | ||
6034 | max-width: 200px; | ||
6035 | padding: 3px 8px; | ||
6036 | color: #fff; | ||
6037 | text-align: center; | ||
6038 | background-color: #000; | ||
6039 | border-radius: 4px; | ||
6040 | } | ||
6041 | .tooltip-arrow { | ||
6042 | position: absolute; | ||
6043 | width: 0; | ||
6044 | height: 0; | ||
6045 | border-color: transparent; | ||
6046 | border-style: solid; | ||
6047 | } | ||
6048 | .tooltip.top .tooltip-arrow { | 6111 | .tooltip.top .tooltip-arrow { |
6049 | bottom: 0; | 6112 | bottom: 0; |
6050 | left: 50%; | 6113 | left: 50%; |
@@ -6101,6 +6164,21 @@ button.close { | |||
6101 | border-width: 0 5px 5px; | 6164 | border-width: 0 5px 5px; |
6102 | border-bottom-color: #000; | 6165 | border-bottom-color: #000; |
6103 | } | 6166 | } |
6167 | .tooltip-inner { | ||
6168 | max-width: 200px; | ||
6169 | padding: 3px 8px; | ||
6170 | color: #fff; | ||
6171 | text-align: center; | ||
6172 | background-color: #000; | ||
6173 | border-radius: 4px; | ||
6174 | } | ||
6175 | .tooltip-arrow { | ||
6176 | position: absolute; | ||
6177 | width: 0; | ||
6178 | height: 0; | ||
6179 | border-color: transparent; | ||
6180 | border-style: solid; | ||
6181 | } | ||
6104 | .popover { | 6182 | .popover { |
6105 | position: absolute; | 6183 | position: absolute; |
6106 | top: 0; | 6184 | top: 0; |
@@ -6110,10 +6188,10 @@ button.close { | |||
6110 | max-width: 276px; | 6188 | max-width: 276px; |
6111 | padding: 1px; | 6189 | padding: 1px; |
6112 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | 6190 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; |
6113 | font-size: 14px; | ||
6114 | font-style: normal; | 6191 | font-style: normal; |
6115 | font-weight: normal; | 6192 | font-weight: 400; |
6116 | line-height: 1.42857143; | 6193 | line-height: 1.42857143; |
6194 | line-break: auto; | ||
6117 | text-align: left; | 6195 | text-align: left; |
6118 | text-align: start; | 6196 | text-align: start; |
6119 | text-decoration: none; | 6197 | text-decoration: none; |
@@ -6124,16 +6202,14 @@ button.close { | |||
6124 | word-spacing: normal; | 6202 | word-spacing: normal; |
6125 | word-wrap: normal; | 6203 | word-wrap: normal; |
6126 | white-space: normal; | 6204 | white-space: normal; |
6205 | font-size: 14px; | ||
6127 | background-color: #fff; | 6206 | background-color: #fff; |
6128 | -webkit-background-clip: padding-box; | 6207 | background-clip: padding-box; |
6129 | background-clip: padding-box; | ||
6130 | border: 1px solid #ccc; | 6208 | border: 1px solid #ccc; |
6131 | border: 1px solid rgba(0, 0, 0, .2); | 6209 | border: 1px solid rgba(0, 0, 0, 0.2); |
6132 | border-radius: 6px; | 6210 | border-radius: 6px; |
6133 | -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); | 6211 | -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); |
6134 | box-shadow: 0 5px 10px rgba(0, 0, 0, .2); | 6212 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); |
6135 | |||
6136 | line-break: auto; | ||
6137 | } | 6213 | } |
6138 | .popover.top { | 6214 | .popover.top { |
6139 | margin-top: -10px; | 6215 | margin-top: -10px; |
@@ -6147,16 +6223,8 @@ button.close { | |||
6147 | .popover.left { | 6223 | .popover.left { |
6148 | margin-left: -10px; | 6224 | margin-left: -10px; |
6149 | } | 6225 | } |
6150 | .popover-title { | 6226 | .popover > .arrow { |
6151 | padding: 8px 14px; | 6227 | border-width: 11px; |
6152 | margin: 0; | ||
6153 | font-size: 14px; | ||
6154 | background-color: #f7f7f7; | ||
6155 | border-bottom: 1px solid #ebebeb; | ||
6156 | border-radius: 5px 5px 0 0; | ||
6157 | } | ||
6158 | .popover-content { | ||
6159 | padding: 9px 14px; | ||
6160 | } | 6228 | } |
6161 | .popover > .arrow, | 6229 | .popover > .arrow, |
6162 | .popover > .arrow:after { | 6230 | .popover > .arrow:after { |
@@ -6167,9 +6235,6 @@ button.close { | |||
6167 | border-color: transparent; | 6235 | border-color: transparent; |
6168 | border-style: solid; | 6236 | border-style: solid; |
6169 | } | 6237 | } |
6170 | .popover > .arrow { | ||
6171 | border-width: 11px; | ||
6172 | } | ||
6173 | .popover > .arrow:after { | 6238 | .popover > .arrow:after { |
6174 | content: ""; | 6239 | content: ""; |
6175 | border-width: 10px; | 6240 | border-width: 10px; |
@@ -6178,8 +6243,8 @@ button.close { | |||
6178 | bottom: -11px; | 6243 | bottom: -11px; |
6179 | left: 50%; | 6244 | left: 50%; |
6180 | margin-left: -11px; | 6245 | margin-left: -11px; |
6181 | border-top-color: #999; | 6246 | border-top-color: #999999; |
6182 | border-top-color: rgba(0, 0, 0, .25); | 6247 | border-top-color: rgba(0, 0, 0, 0.25); |
6183 | border-bottom-width: 0; | 6248 | border-bottom-width: 0; |
6184 | } | 6249 | } |
6185 | .popover.top > .arrow:after { | 6250 | .popover.top > .arrow:after { |
@@ -6193,8 +6258,8 @@ button.close { | |||
6193 | top: 50%; | 6258 | top: 50%; |
6194 | left: -11px; | 6259 | left: -11px; |
6195 | margin-top: -11px; | 6260 | margin-top: -11px; |
6196 | border-right-color: #999; | 6261 | border-right-color: #999999; |
6197 | border-right-color: rgba(0, 0, 0, .25); | 6262 | border-right-color: rgba(0, 0, 0, 0.25); |
6198 | border-left-width: 0; | 6263 | border-left-width: 0; |
6199 | } | 6264 | } |
6200 | .popover.right > .arrow:after { | 6265 | .popover.right > .arrow:after { |
@@ -6209,8 +6274,8 @@ button.close { | |||
6209 | left: 50%; | 6274 | left: 50%; |
6210 | margin-left: -11px; | 6275 | margin-left: -11px; |
6211 | border-top-width: 0; | 6276 | border-top-width: 0; |
6212 | border-bottom-color: #999; | 6277 | border-bottom-color: #999999; |
6213 | border-bottom-color: rgba(0, 0, 0, .25); | 6278 | border-bottom-color: rgba(0, 0, 0, 0.25); |
6214 | } | 6279 | } |
6215 | .popover.bottom > .arrow:after { | 6280 | .popover.bottom > .arrow:after { |
6216 | top: 1px; | 6281 | top: 1px; |
@@ -6224,8 +6289,8 @@ button.close { | |||
6224 | right: -11px; | 6289 | right: -11px; |
6225 | margin-top: -11px; | 6290 | margin-top: -11px; |
6226 | border-right-width: 0; | 6291 | border-right-width: 0; |
6227 | border-left-color: #999; | 6292 | border-left-color: #999999; |
6228 | border-left-color: rgba(0, 0, 0, .25); | 6293 | border-left-color: rgba(0, 0, 0, 0.25); |
6229 | } | 6294 | } |
6230 | .popover.left > .arrow:after { | 6295 | .popover.left > .arrow:after { |
6231 | right: 1px; | 6296 | right: 1px; |
@@ -6234,6 +6299,17 @@ button.close { | |||
6234 | border-right-width: 0; | 6299 | border-right-width: 0; |
6235 | border-left-color: #fff; | 6300 | border-left-color: #fff; |
6236 | } | 6301 | } |
6302 | .popover-title { | ||
6303 | padding: 8px 14px; | ||
6304 | margin: 0; | ||
6305 | font-size: 14px; | ||
6306 | background-color: #f7f7f7; | ||
6307 | border-bottom: 1px solid #ebebeb; | ||
6308 | border-radius: 5px 5px 0 0; | ||
6309 | } | ||
6310 | .popover-content { | ||
6311 | padding: 9px 14px; | ||
6312 | } | ||
6237 | .carousel { | 6313 | .carousel { |
6238 | position: relative; | 6314 | position: relative; |
6239 | } | 6315 | } |
@@ -6245,9 +6321,9 @@ button.close { | |||
6245 | .carousel-inner > .item { | 6321 | .carousel-inner > .item { |
6246 | position: relative; | 6322 | position: relative; |
6247 | display: none; | 6323 | display: none; |
6248 | -webkit-transition: .6s ease-in-out left; | 6324 | -webkit-transition: 0.6s ease-in-out left; |
6249 | -o-transition: .6s ease-in-out left; | 6325 | -o-transition: 0.6s ease-in-out left; |
6250 | transition: .6s ease-in-out left; | 6326 | transition: 0.6s ease-in-out left; |
6251 | } | 6327 | } |
6252 | .carousel-inner > .item > img, | 6328 | .carousel-inner > .item > img, |
6253 | .carousel-inner > .item > a > img { | 6329 | .carousel-inner > .item > a > img { |
@@ -6255,33 +6331,34 @@ button.close { | |||
6255 | } | 6331 | } |
6256 | @media all and (transform-3d), (-webkit-transform-3d) { | 6332 | @media all and (transform-3d), (-webkit-transform-3d) { |
6257 | .carousel-inner > .item { | 6333 | .carousel-inner > .item { |
6258 | -webkit-transition: -webkit-transform .6s ease-in-out; | 6334 | -webkit-transition: -webkit-transform 0.6s ease-in-out; |
6259 | -o-transition: -o-transform .6s ease-in-out; | 6335 | -o-transition: -o-transform 0.6s ease-in-out; |
6260 | transition: transform .6s ease-in-out; | 6336 | transition: -webkit-transform 0.6s ease-in-out; |
6261 | 6337 | transition: transform 0.6s ease-in-out; | |
6338 | transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out; | ||
6262 | -webkit-backface-visibility: hidden; | 6339 | -webkit-backface-visibility: hidden; |
6263 | backface-visibility: hidden; | 6340 | backface-visibility: hidden; |
6264 | -webkit-perspective: 1000px; | 6341 | -webkit-perspective: 1000px; |
6265 | perspective: 1000px; | 6342 | perspective: 1000px; |
6266 | } | 6343 | } |
6267 | .carousel-inner > .item.next, | 6344 | .carousel-inner > .item.next, |
6268 | .carousel-inner > .item.active.right { | 6345 | .carousel-inner > .item.active.right { |
6269 | left: 0; | ||
6270 | -webkit-transform: translate3d(100%, 0, 0); | 6346 | -webkit-transform: translate3d(100%, 0, 0); |
6271 | transform: translate3d(100%, 0, 0); | 6347 | transform: translate3d(100%, 0, 0); |
6348 | left: 0; | ||
6272 | } | 6349 | } |
6273 | .carousel-inner > .item.prev, | 6350 | .carousel-inner > .item.prev, |
6274 | .carousel-inner > .item.active.left { | 6351 | .carousel-inner > .item.active.left { |
6275 | left: 0; | ||
6276 | -webkit-transform: translate3d(-100%, 0, 0); | 6352 | -webkit-transform: translate3d(-100%, 0, 0); |
6277 | transform: translate3d(-100%, 0, 0); | 6353 | transform: translate3d(-100%, 0, 0); |
6354 | left: 0; | ||
6278 | } | 6355 | } |
6279 | .carousel-inner > .item.next.left, | 6356 | .carousel-inner > .item.next.left, |
6280 | .carousel-inner > .item.prev.right, | 6357 | .carousel-inner > .item.prev.right, |
6281 | .carousel-inner > .item.active { | 6358 | .carousel-inner > .item.active { |
6282 | left: 0; | ||
6283 | -webkit-transform: translate3d(0, 0, 0); | 6359 | -webkit-transform: translate3d(0, 0, 0); |
6284 | transform: translate3d(0, 0, 0); | 6360 | transform: translate3d(0, 0, 0); |
6361 | left: 0; | ||
6285 | } | 6362 | } |
6286 | } | 6363 | } |
6287 | .carousel-inner > .active, | 6364 | .carousel-inner > .active, |
@@ -6323,26 +6400,26 @@ button.close { | |||
6323 | font-size: 20px; | 6400 | font-size: 20px; |
6324 | color: #fff; | 6401 | color: #fff; |
6325 | text-align: center; | 6402 | text-align: center; |
6326 | text-shadow: 0 1px 2px rgba(0, 0, 0, .6); | 6403 | text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); |
6327 | background-color: rgba(0, 0, 0, 0); | 6404 | background-color: rgba(0, 0, 0, 0); |
6328 | filter: alpha(opacity=50); | 6405 | filter: alpha(opacity=50); |
6329 | opacity: .5; | 6406 | opacity: 0.5; |
6330 | } | 6407 | } |
6331 | .carousel-control.left { | 6408 | .carousel-control.left { |
6332 | background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); | 6409 | background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); |
6333 | background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); | 6410 | background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); |
6334 | background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); | 6411 | background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); |
6335 | background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); | 6412 | background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); |
6336 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); | 6413 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); |
6337 | background-repeat: repeat-x; | 6414 | background-repeat: repeat-x; |
6338 | } | 6415 | } |
6339 | .carousel-control.right { | 6416 | .carousel-control.right { |
6340 | right: 0; | 6417 | right: 0; |
6341 | left: auto; | 6418 | left: auto; |
6342 | background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); | 6419 | background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); |
6343 | background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); | 6420 | background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); |
6344 | background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); | 6421 | background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); |
6345 | background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); | 6422 | background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); |
6346 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); | 6423 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); |
6347 | background-repeat: repeat-x; | 6424 | background-repeat: repeat-x; |
6348 | } | 6425 | } |
@@ -6350,9 +6427,9 @@ button.close { | |||
6350 | .carousel-control:focus { | 6427 | .carousel-control:focus { |
6351 | color: #fff; | 6428 | color: #fff; |
6352 | text-decoration: none; | 6429 | text-decoration: none; |
6353 | filter: alpha(opacity=90); | ||
6354 | outline: 0; | 6430 | outline: 0; |
6355 | opacity: .9; | 6431 | filter: alpha(opacity=90); |
6432 | opacity: 0.9; | ||
6356 | } | 6433 | } |
6357 | .carousel-control .icon-prev, | 6434 | .carousel-control .icon-prev, |
6358 | .carousel-control .icon-next, | 6435 | .carousel-control .icon-next, |
@@ -6382,10 +6459,10 @@ button.close { | |||
6382 | line-height: 1; | 6459 | line-height: 1; |
6383 | } | 6460 | } |
6384 | .carousel-control .icon-prev:before { | 6461 | .carousel-control .icon-prev:before { |
6385 | content: '\2039'; | 6462 | content: "\2039"; |
6386 | } | 6463 | } |
6387 | .carousel-control .icon-next:before { | 6464 | .carousel-control .icon-next:before { |
6388 | content: '\203a'; | 6465 | content: "\203a"; |
6389 | } | 6466 | } |
6390 | .carousel-indicators { | 6467 | .carousel-indicators { |
6391 | position: absolute; | 6468 | position: absolute; |
@@ -6426,7 +6503,7 @@ button.close { | |||
6426 | padding-bottom: 20px; | 6503 | padding-bottom: 20px; |
6427 | color: #fff; | 6504 | color: #fff; |
6428 | text-align: center; | 6505 | text-align: center; |
6429 | text-shadow: 0 1px 2px rgba(0, 0, 0, .6); | 6506 | text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); |
6430 | } | 6507 | } |
6431 | .carousel-caption .btn { | 6508 | .carousel-caption .btn { |
6432 | text-shadow: none; | 6509 | text-shadow: none; |
@@ -6754,4 +6831,4 @@ button.close { | |||
6754 | display: none !important; | 6831 | display: none !important; |
6755 | } | 6832 | } |
6756 | } | 6833 | } |
6757 | /*# sourceMappingURL=bootstrap.css.map */ | 6834 | /*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file |
diff --git a/src/css/bootstrap.css.map b/src/css/bootstrap.css.map new file mode 100644 index 0000000..caac3e6 --- /dev/null +++ b/src/css/bootstrap.css.map | |||
@@ -0,0 +1 @@ | |||
{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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A;CHkR9C;AGjRmC;EAAW,iBAAA;CHoR9C;AGnRmC;EAAW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;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rDA;EC8DG,oBAAA;CfwnDH;ActrDA;EC8DG,oBAAA;Cf2nDH;AczrDA;EC8DG,WAAA;Cf8nDH;Ac5rDA;EC8DG,oBAAA;CfioDH;Ac/rDA;EC8DG,oBAAA;CfooDH;AclsDA;EC8DG,WAAA;CfuoDH;AcrsDA;EC8DG,oBAAA;Cf0oDH;AcxsDA;EC8DG,oBAAA;Cf6oDH;Ac3sDA;EC8DG,WAAA;CfgpDH;Ac9sDA;EC8DG,oBAAA;CfmpDH;AcjtDA;EC8DG,mBAAA;CfspDH;AcptDA;ECmEG,YAAA;CfopDH;AcvtDA;ECoDG,WAAA;CfsqDH;Ac1tDA;ECoDG,mBAAA;CfyqDH;Ac7tDA;ECoDG,mBAAA;Cf4qDH;AchuDA;ECoDG,UAAA;Cf+qDH;AcnuDA;ECoDG,mBAAA;CfkrDH;ActuDA;ECoDG,mBAAA;CfqrDH;AczuDA;ECoDG,UAAA;CfwrDH;Ac5uDA;ECoDG,mBAAA;Cf2rDH;Ac/uDA;ECoDG,mBAAA;Cf8rDH;AclvDA;ECoDG,UAAA;CfisDH;AcrvDA;ECoDG,mBAAA;CfosDH;AcxvDA;ECoDG,kBAAA;CfusDH;Ac3vDA;ECyDG,WAAA;CfqsDH;Ac9vDA;ECwEG,kBAAA;CfyrDH;AcjwDA;ECwEG,0BAAA;Cf4rDH;AcpwDA;ECwEG,0BAAA;Cf+rDH;AcvwDA;ECwEG,iBAAA;CfksDH;Ac1wDA;ECwEG,0BAAA;CfqsDH;Ac7wDA;ECwEG,0BAAA;CfwsDH;AchxDA;ECwEG,iBAAA;Cf2sDH;AcnxDA;ECwEG,0BAAA;Cf8sDH;ActxDA;ECwEG,0BAAA;CfitDH;AczxDA;ECwEG,iBAAA;CfotDH;Ac5xDA;ECwEG,0BAAA;CfutDH;Ac/xDA;ECwEG,yBAAA;Cf0tDH;AclyDA;ECwEG,gBAAA;Cf6tDH;Aa5tDD;ECzEC;;;;;;;;;;;;ICuCK,YAAA;Gf6wDH;EcpzDF;IC+CG,YAAA;GfwwDD;EcvzDF;IC+CG,oBAAA;Gf2wDD;Ec1zDF;IC+CG,oBAAA;Gf8wDD;Ec7zDF;IC+CG,WAAA;GfixDD;Ech0DF;IC+CG,oBAAA;GfoxDD;Ecn0DF;IC+CG,oBAAA;GfuxDD;Ect0DF;IC+CG,WAAA;Gf0xDD;Ecz0DF;IC+CG,oBAAA;Gf6xDD;Ec50DF;IC+CG,oBAAA;GfgyDD;Ec/0DF;IC+CG,WAAA;GfmyDD;Ecl1DF;IC+CG,oBAAA;GfsyDD;Ecr1DF;IC+CG,mBAAA;GfyyDD;Ecx1DF;IC8DG,YAAA;Gf6xDD;Ec31DF;IC8DG,oBAAA;GfgyDD;Ec91DF;IC8DG,oBAAA;GfmyDD;Ecj2DF;IC8DG,WAAA;GfsyDD;Ecp2DF;IC8DG,oBAAA;GfyyDD;Ecv2DF;IC8DG,oBAAA;Gf4yDD;Ec12DF;IC8DG,WAAA;Gf+yDD;Ec72DF;IC8DG,oBAAA;GfkzDD;Ech3DF;IC8DG,oBAAA;GfqzDD;Ecn3DF;IC8DG,WAAA;GfwzDD;Ect3DF;IC8DG,oBAAA;Gf2zDD;Ecz3DF;IC8DG,mBAAA;Gf8zDD;Ec53DF;ICmEG,YAAA;Gf4zDD;Ec/3DF;ICoDG,WAAA;Gf80DD;Ecl4DF;ICoDG,mBAAA;Gfi1DD;Ecr4DF;ICoDG,mBAAA;Gfo1DD;Ecx4DF;ICoDG,UAAA;Gfu1DD;Ec34DF;ICoDG,mBAAA;Gf01DD;Ec94DF;ICoDG,mBAAA;Gf61DD;Ecj5DF;ICoDG,UAAA;Gfg2DD;Ecp5DF;ICoDG,mBAAA;Gfm2DD;Ecv5DF;ICoDG,mBAAA;Gfs2DD;Ec15DF;ICoDG,UAAA;Gfy2DD;Ec75DF;ICoDG,mBAAA;Gf42DD;Ech6DF;ICoDG,kBAAA;Gf+2DD;Ecn6DF;ICyDG,WAAA;Gf62DD;Ect6DF;ICwEG,kBAAA;Gfi2DD;Ecz6DF;ICwEG,0BAAA;Gfo2DD;Ec56DF;ICwEG,0BAAA;Gfu2DD;Ec/6DF;ICwEG,iBAAA;Gf02DD;Ecl7DF;ICwEG,0BAAA;Gf62DD;Ecr7DF;ICwEG,0BAAA;Gfg3DD;Ecx7DF;ICwEG,iBAAA;Gfm3DD;Ec37DF;ICwEG,0BAAA;Gfs3DD;Ec97DF;ICwEG,0BAAA;Gfy3DD;Ecj8DF;ICwEG,iBAAA;Gf43DD;Ecp8DF;ICwEG,0BAAA;Gf+3DD;Ecv8DF;ICwEG,yBAAA;Gfk4DD;Ec18DF;ICwEG,gBAAA;Gfq4DD;CACF;Aa53DD;EClFC;;;;;;;;;;;;ICuCK,YAAA;Gfs7DH;Ec79DF;IC+CG,YAAA;Gfi7DD;Ech+DF;IC+CG,oBAAA;Gfo7DD;Ecn+DF;IC+CG,oBAAA;Gfu7DD;Ect+DF;IC+CG,WAAA;Gf07DD;Ecz+DF;IC+CG,oBAAA;Gf67DD;Ec5+DF;IC+CG,oBAAA;Gfg8DD;Ec/+DF;IC+CG,WAAA;Gfm8DD;Ecl/DF;IC+CG,oBAAA;Gfs8DD;Ecr/DF;IC+CG,oBAAA;Gfy8DD;Ecx/DF;IC+CG,WAAA;Gf48DD;Ec3/DF;IC+CG,oBAAA;Gf+8DD;Ec9/DF;IC+CG,mBAAA;Gfk9DD;EcjgEF;IC8DG,YAAA;Gfs8DD;EcpgEF;IC8DG,oBAAA;Gfy8DD;EcvgEF;IC8DG,oBAAA;Gf48DD;Ec1gEF;IC8DG,WAAA;Gf+8DD;Ec7gEF;IC8DG,oBAAA;Gfk9DD;EchhEF;IC8DG,oBAAA;Gfq9DD;EcnhEF;IC8DG,WAAA;Gfw9DD;EcthEF;IC8DG,oBAAA;Gf29DD;EczhEF;IC8DG,oBAAA;Gf89DD;Ec5hEF;IC8DG,WAAA;Gfi+DD;Ec/hEF;IC8DG,oBAAA;Gfo+DD;EcliEF;IC8DG,mBAAA;Gfu+DD;EcriEF;ICmEG,YAAA;Gfq+DD;EcxiEF;ICoDG,WAAA;Gfu/DD;Ec3iEF;ICoDG,mBAAA;Gf0/DD;Ec9iEF;ICoDG,mBAAA;Gf6/DD;EcjjEF;ICoDG,UAAA;GfggED;EcpjEF;ICoDG,mBAAA;GfmgED;EcvjEF;ICoDG,mBAAA;GfsgED;Ec1jEF;ICoDG,UAAA;GfygED;Ec7jEF;ICoDG,mBAAA;Gf4gED;EchkEF;ICoDG,mBAAA;Gf+gED;EcnkEF;ICoDG,UAAA;GfkhED;EctkEF;ICoDG,mBAAA;GfqhED;EczkEF;ICoDG,kBAAA;GfwhED;Ec5kEF;ICyDG,WAAA;GfshED;Ec/kEF;ICwEG,kBAAA;Gf0gED;EcllEF;ICwEG,0BAAA;Gf6gED;EcrlEF;ICwEG,0BAAA;GfghED;EcxlEF;ICwEG,iBAAA;GfmhED;Ec3lEF;ICwEG,0BAAA;GfshED;Ec9lEF;ICwEG,0BAAA;GfyhED;EcjmEF;ICwEG,iBAAA;Gf4hED;EcpmEF;ICwEG,0BAAA;Gf+hED;EcvmEF;ICwEG,0BAAA;GfkiED;Ec1mEF;ICwEG,iBAAA;GfqiED;Ec7mEF;ICwEG,0BAAA;GfwiED;EchnEF;ICwEG,yBAAA;Gf2iED;EcnnEF;ICwEG,gBAAA;Gf8iED;CACF;Aa5hED;EC3FC;;;;;;;;;;;;ICuCK,YAAA;Gf+lEH;EctoEF;IC+CG,YAAA;Gf0lED;EczoEF;IC+CG,oBAAA;Gf6lED;Ec5oEF;IC+CG,oBAAA;GfgmED;Ec/oEF;IC+CG,WAAA;GfmmED;EclpEF;IC+CG,oBAAA;GfsmED;EcrpEF;IC+CG,oBAAA;GfymED;EcxpEF;IC+CG,WAAA;Gf4mED;Ec3pEF;IC+CG,oBAAA;Gf+mED;Ec9pEF;IC+CG,oBAAA;GfknED;EcjqEF;IC+CG,WAAA;GfqnED;EcpqEF;IC+CG,oBAAA;GfwnED;EcvqEF;IC+CG,mBAAA;Gf2nED;Ec1qEF;IC8DG,YAAA;Gf+mED;Ec7qEF;IC8DG,oBAAA;GfknED;EchrEF;IC8DG,oBAAA;GfqnED;EcnrEF;IC8DG,WAAA;GfwnED;EctrEF;IC8DG,oBAAA;Gf2nED;EczrEF;IC8DG,oBAAA;Gf8nED;Ec5rEF;IC8DG,WAAA;GfioED;Ec/rEF;IC8DG,oBAAA;GfooED;EclsEF;IC8DG,oBAAA;GfuoED;EcrsEF;IC8DG,WAAA;Gf0oED;EcxsEF;IC8DG,oBAAA;Gf6oED;Ec3sEF;IC8DG,mBAAA;GfgpED;Ec9sEF;ICmEG,YAAA;Gf8oED;EcjtEF;ICoDG,WAAA;GfgqED;EcptEF;ICoDG,mBAAA;GfmqED;EcvtEF;ICoDG,mBAAA;GfsqED;Ec1tEF;ICoDG,UAAA;GfyqED;Ec7tEF;ICoDG,mBAAA;Gf4qED;EchuEF;ICoDG,mBAAA;Gf+qED;EcnuEF;ICoDG,UAAA;GfkrED;EctuEF;ICoDG,mBAAA;GfqrED;EczuEF;ICoDG,mBAAA;GfwrED;Ec5uEF;ICoDG,UAAA;Gf2rED;Ec/uEF;ICoDG,mBAAA;Gf8rED;EclvEF;ICoDG,kBAAA;GfisED;EcrvEF;ICyDG,WAAA;Gf+rED;EcxvEF;ICwEG,kBAAA;GfmrED;Ec3vEF;ICwEG,0BAAA;GfsrED;Ec9vEF;ICwEG,0BAAA;GfyrED;EcjwEF;ICwEG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","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: none;\n text-decoration: underline;\n text-decoration: underline dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n color: #000 !important;\n text-shadow: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: \"Glyphicons Halflings\";\n src: url(\"../fonts/glyphicons-halflings-regular.eot\");\n src: url(\"../fonts/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\");\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: \"Glyphicons Halflings\";\n font-style: normal;\n font-weight: 400;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: 400;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: 700;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: \"\\2014 \\00A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: \"\";\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: \"\\00A0 \\2014\";\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n color: #333333;\n word-break: break-all;\n word-wrap: break-word;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n.row {\n margin-right: -15px;\n margin-left: -15px;\n}\n.row-no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n.row-no-gutters [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1,\n .col-sm-2,\n .col-sm-3,\n .col-sm-4,\n .col-sm-5,\n .col-sm-6,\n .col-sm-7,\n .col-sm-8,\n .col-sm-9,\n .col-sm-10,\n .col-sm-11,\n .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1,\n .col-md-2,\n .col-md-3,\n .col-md-4,\n .col-md-5,\n .col-md-6,\n .col-md-7,\n .col-md-8,\n .col-md-9,\n .col-md-10,\n .col-md-11,\n .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1,\n .col-lg-2,\n .col-lg-3,\n .col-lg-4,\n .col-lg-5,\n .col-lg-6,\n .col-lg-7,\n .col-lg-8,\n .col-lg-9,\n .col-lg-10,\n .col-lg-11,\n .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ntable col[class*=\"col-\"] {\n position: static;\n display: table-column;\n float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n display: table-cell;\n float: none;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n min-height: 0.01%;\n overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: 700;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-appearance: none;\n appearance: none;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-top: 4px \\9;\n margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n vertical-align: middle;\n cursor: pointer;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\n.form-control-static {\n min-height: 34px;\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-right: 0;\n padding-left: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n background-color: #f2dede;\n border-color: #a94442;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n padding-top: 7px;\n margin-top: 0;\n margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n padding-top: 7px;\n margin-bottom: 0;\n text-align: right;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n filter: alpha(opacity=65);\n opacity: 0.65;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n background-image: none;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n background-image: none;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n background-image: none;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n background-image: none;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n background-image: none;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n background-image: none;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n font-weight: 400;\n color: #337ab7;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n color: #262626;\n text-decoration: none;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n background-color: #337ab7;\n outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n content: \"\";\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto;\n }\n .navbar-right .dropdown-menu-left {\n right: auto;\n left: 0;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-right: 8px;\n padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-right: 12px;\n padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n display: table-cell;\n float: none;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: 400;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n cursor: default;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n padding-right: 15px;\n padding-left: 15px;\n overflow-x: visible;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-right: 0;\n padding-left: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-brand {\n float: left;\n height: 50px;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n padding: 9px 10px;\n margin-right: 15px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n padding: 10px 15px;\n margin-right: -15px;\n margin-left: -15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n padding-top: 0;\n padding-bottom: 0;\n margin-right: 0;\n margin-left: 0;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-right: 15px;\n margin-left: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n color: #fff;\n background-color: #080808;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n padding: 0 5px;\n color: #ccc;\n content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n margin-left: -1px;\n line-height: 1.42857143;\n color: #337ab7;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n cursor: default;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n text-align: center;\n list-style: none;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n}\n.label {\n display: inline;\n padding: 0.2em 0.6em 0.3em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n padding-right: 15px;\n padding-left: 15px;\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-right: 60px;\n padding-left: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-right: auto;\n margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n height: 20px;\n margin-bottom: 20px;\n overflow: hidden;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n padding-left: 0;\n margin-bottom: 20px;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #eeeeee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n color: #555;\n text-decoration: none;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-right: 15px;\n padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n margin-bottom: 0;\n border: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n filter: alpha(opacity=20);\n opacity: 0.2;\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.modal-backdrop.in {\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-bottom: 0;\n margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 12px;\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.tooltip.in {\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.tooltip.top {\n padding: 5px 0;\n margin-top: -3px;\n}\n.tooltip.right {\n padding: 0 5px;\n margin-left: 3px;\n}\n.tooltip.bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n.tooltip.left {\n padding: 0 5px;\n margin-left: -3px;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n right: 5px;\n bottom: 0;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow:after {\n content: \"\";\n border-width: 10px;\n}\n.popover.top > .arrow {\n bottom: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n bottom: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-color: #fff;\n border-bottom-width: 0;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n border-left-width: 0;\n}\n.popover.right > .arrow:after {\n bottom: -10px;\n left: 1px;\n content: \" \";\n border-right-color: #fff;\n border-left-width: 0;\n}\n.popover.bottom > .arrow {\n top: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.popover.bottom > .arrow:after {\n top: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n right: 1px;\n bottom: -10px;\n content: \" \";\n border-right-width: 0;\n border-left-color: #fff;\n}\n.popover-title {\n padding: 8px 14px;\n margin: 0;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner > .item {\n position: relative;\n display: none;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 15%;\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control.right {\n right: 0;\n left: auto;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n font-family: serif;\n line-height: 1;\n}\n.carousel-control .icon-prev:before {\n content: \"\\2039\";\n}\n.carousel-control .icon-next:before {\n content: \"\\203a\";\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n padding-left: 0;\n margin-left: -30%;\n text-align: center;\n list-style: none;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n border: 1px solid #fff;\n border-radius: 10px;\n}\n.carousel-indicators .active {\n width: 12px;\n height: 12px;\n margin: 0;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n right: 20%;\n left: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n display: table;\n content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-right: auto;\n margin-left: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n//\n\nabbr[title] {\n border-bottom: none; // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n color: #000 !important; // Black prints faster: h5bp.com/s\n text-shadow: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n}\n","// stylelint-disable value-list-comma-newline-after, value-list-comma-space-after, indentation, declaration-colon-newline-after, font-family-no-missing-generic-family-keyword\n\n//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: \"Glyphicons Halflings\";\n src: url(\"@{icon-font-path}@{icon-font-name}.eot\");\n src: url(\"@{icon-font-path}@{icon-font-name}.eot?#iefix\") format(\"embedded-opentype\"),\n url(\"@{icon-font-path}@{icon-font-name}.woff2\") format(\"woff2\"),\n url(\"@{icon-font-path}@{icon-font-name}.woff\") format(\"woff\"),\n url(\"@{icon-font-path}@{icon-font-name}.ttf\") format(\"truetype\"),\n url(\"@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}\") format(\"svg\");\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: \"Glyphicons Halflings\";\n font-style: normal;\n font-weight: 400;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// https://getbootstrap.com/docs/3.4/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: https://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix\n\n// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n word-wrap: break-word;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// stylelint-disable media-feature-name-no-vendor-prefix, media-feature-parentheses-space-inside, media-feature-name-no-unknown, indentation, at-rule-name-space-after\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","// stylelint-disable selector-list-comma-newline-after, selector-no-qualifying-type\n\n//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: 400;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n padding: .2em;\n background-color: @state-warning-bg;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: 700;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n}\n\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: \"\\2014 \\00A0\"; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: \"\"; }\n &:after {\n content: \"\\00A0 \\2014\"; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n color: @pre-color;\n word-break: break-all;\n word-wrap: break-word;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n.row-no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n padding-right: ceil((@gutter / 2));\n padding-left: floor((@gutter / 2));\n margin-right: auto;\n margin-left: auto;\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-right: floor((@gutter / -2));\n margin-left: ceil((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-right: floor((@grid-gutter-width / 2));\n padding-left: ceil((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-no-qualifying-type\n\n//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n\n // Table cell sizing\n //\n // Reset default table behavior\n\n col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n display: table-column;\n float: none;\n }\n\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n display: table-cell;\n float: none;\n }\n }\n}\n\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\n\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n min-height: .01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n overflow-x: auto;\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * .75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type, property-no-vendor-prefix, media-feature-name-no-vendor-prefix\n\n//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: 700;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\ninput[type=\"search\"] {\n // Override content-box in Normalize (* isn't specific enough)\n .box-sizing(border-box);\n\n // Search inputs in iOS\n //\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n -webkit-appearance: none;\n appearance: none;\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n\n // Apply same disabled cursor tweak as for inputs\n // Some special care is needed because <label>s don't inherit their parent's `cursor`.\n //\n // Note: Neither radios nor checkboxes can be readonly.\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Unstyle the caret on `<select>`s in IE10+.\n &::-ms-expand {\n background-color: transparent;\n border: 0;\n }\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n//\n// Note that as of 9.3, iOS doesn't support `week`.\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n &.form-control {\n line-height: @input-height-base;\n }\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n // These are used on elements with <label> descendants\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: @cursor-disabled;\n }\n }\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-top: 4px \\9;\n margin-left: -20px;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n vertical-align: middle;\n cursor: pointer;\n\n // These are used directly on <label>s\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n min-height: (@line-height-computed + @font-size-base);\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n\n &.input-lg,\n &.input-sm {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n}\n.form-group-sm {\n .form-control {\n height: @input-height-small;\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n border-radius: @input-border-radius-small;\n }\n select.form-control {\n height: @input-height-small;\n line-height: @input-height-small;\n }\n textarea.form-control,\n select[multiple].form-control {\n height: auto;\n }\n .form-control-static {\n height: @input-height-small;\n min-height: (@line-height-computed + @font-size-small);\n padding: (@padding-small-vertical + 1) @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n }\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n}\n.form-group-lg {\n .form-control {\n height: @input-height-large;\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n border-radius: @input-border-radius-large;\n }\n select.form-control {\n height: @input-height-large;\n line-height: @input-height-large;\n }\n textarea.form-control,\n select[multiple].form-control {\n height: auto;\n }\n .form-control-static {\n height: @input-height-large;\n min-height: (@line-height-computed + @font-size-large);\n padding: (@padding-large-vertical + 1) @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n & ~ .form-control-feedback {\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n }\n &.sr-only ~ .form-control-feedback {\n top: 0;\n }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-static {\n display: inline-block;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Re-override the feedback icon.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n margin-top: 0;\n margin-bottom: 0;\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n margin-bottom: 0;\n text-align: right;\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n right: floor((@grid-gutter-width / 2));\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-large-vertical + 1);\n font-size: @font-size-large;\n }\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n font-size: @font-size-small;\n }\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline,\n &.radio label,\n &.checkbox label,\n &.radio-inline label,\n &.checkbox-inline label {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n background-color: @background-color;\n border-color: @border-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n background-image: none;\n outline: 0;\n .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `<a>` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n font-weight: 400;\n color: @link-color;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n background-image: none;\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n @opacity-ie: (@opacity * 100); // IE8 filter\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n opacity: @opacity;\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: @dropdown-bg;\n background-clip: padding-box;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0, 0, 0, .175));\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n\n &:hover,\n &:focus {\n color: @dropdown-link-hover-color;\n text-decoration: none;\n background-color: @dropdown-link-hover-bg;\n }\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n background-color: @dropdown-link-active-bg;\n outline: 0;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n cursor: @cursor-disabled;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n right: 0;\n left: auto; // Reset the default from `.dropdown-menu`\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n content: \"\";\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","// stylelint-disable selector-no-qualifying-type */\n\n//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-right: 8px;\n padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-right: 12px;\n padding-left: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n display: table-cell;\n float: none;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-left-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-top-right-radius: @radius;\n border-bottom-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-top-left-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n\n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: 400;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @input-border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type, selector-max-type\n\n//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n padding-left: 0; // Override default ul/ol\n margin-bottom: 0;\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n cursor: @cursor-disabled;\n background-color: transparent;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n cursor: default;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n margin-bottom: 5px;\n text-align: center;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-max-combinators, selector-max-class, declaration-no-important, selector-no-qualifying-type\n\n//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n overflow-x: visible;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n\n // Fix the top/bottom navbars when screen real estate supports it\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n height: @navbar-height;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n padding: 9px 10px;\n margin-right: @navbar-padding-horizontal;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n padding: 10px @navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n padding-top: 0;\n padding-bottom: 0;\n margin-right: 0;\n margin-left: 0;\n border: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-right: @navbar-padding-horizontal;\n margin-left: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n\n // Dropdown menu items\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n\n // Dropdowns\n > .open > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n padding: 0 5px;\n color: @breadcrumb-color;\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n margin-left: -1px;\n line-height: @line-height-base;\n color: @pagination-color;\n text-decoration: none;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-active-color;\n cursor: default;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n cursor: @cursor-disabled;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n text-align: center;\n list-style: none;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n cursor: @cursor-disabled;\n background-color: @pager-bg;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n line-height: @badge-line-height;\n color: @badge-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n padding-right: (@grid-gutter-width / 2);\n padding-left: (@grid-gutter-width / 2);\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-right: (@jumbotron-padding * 2);\n padding-left: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-right: auto;\n margin-left: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n color: inherit; // Specified for the h4 to prevent conflicts of changing @headings-color\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n// The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissable,\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n color: @text-color;\n background-color: @background;\n border-color: @border;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","// stylelint-disable at-rule-no-vendor-prefix\n\n//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n overflow: hidden;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0, 0, 0, .1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0, 0, 0, .15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// stylelint-disable value-no-vendor-prefix, selector-max-id\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255, 255, 255, .15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 20px;\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n color: @list-group-disabled-color;\n cursor: @cursor-disabled;\n background-color: @list-group-disabled-bg;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item,\nbutton.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n color: @list-group-link-hover-color;\n text-decoration: none;\n background-color: @list-group-hover-bg;\n }\n}\n\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a&,\n button& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-max-combinators, no-duplicate-selectors\n\n//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0, 0, 0, .05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n > .panel-heading + .panel-collapse > .list-group {\n .list-group-item:first-child {\n .border-top-radius(0);\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-right: @panel-body-padding;\n padding-left: @panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n border-top-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n border-bottom-left-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n margin-bottom: 0;\n border: 0;\n }\n}\n\n\n// Collapsible panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid @panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, .15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","// stylelint-disable property-no-vendor-prefix\n\n//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n display: none;\n overflow: hidden;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0); }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n background-clip: padding-box;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0, 0, 0, .5));\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n &:extend(.clearfix all);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n margin-left: 5px;\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0, 0, 0, .5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-small;\n\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top {\n padding: @tooltip-arrow-width 0;\n margin-top: -3px;\n }\n &.right {\n padding: 0 @tooltip-arrow-width;\n margin-left: 3px;\n }\n &.bottom {\n padding: @tooltip-arrow-width 0;\n margin-top: 3px;\n }\n &.left {\n padding: 0 @tooltip-arrow-width;\n margin-left: -3px;\n }\n\n // Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n right: @tooltip-arrow-width;\n bottom: 0;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n",".reset-text() {\n font-family: @font-family-base;\n // We deliberately do NOT reset font-size.\n font-style: normal;\n font-weight: 400;\n line-height: @line-height-base;\n line-break: auto;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-base;\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0, 0, 0, .2));\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n\n // Arrows\n // .arrow is outer, .arrow:after is inner\n > .arrow {\n border-width: @popover-arrow-outer-width;\n\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n\n &:after {\n content: \"\";\n border-width: @popover-arrow-width;\n }\n }\n\n &.top > .arrow {\n bottom: -@popover-arrow-outer-width;\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n border-bottom-width: 0;\n &:after {\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n content: \" \";\n border-top-color: @popover-arrow-color;\n border-bottom-width: 0;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n border-left-width: 0;\n &:after {\n bottom: -@popover-arrow-width;\n left: 1px;\n content: \" \";\n border-right-color: @popover-arrow-color;\n border-left-width: 0;\n }\n }\n &.bottom > .arrow {\n top: -@popover-arrow-outer-width;\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n &:after {\n top: 1px;\n margin-left: -@popover-arrow-width;\n content: \" \";\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n right: 1px;\n bottom: -@popover-arrow-width;\n content: \" \";\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n }\n }\n}\n\n.popover-title {\n padding: 8px 14px;\n margin: 0; // reset heading margin\n font-size: @font-size-base;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n","// stylelint-disable media-feature-name-no-unknown\n\n//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n\n > .item {\n position: relative;\n display: none;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n .transition-transform(~\"0.6s ease-in-out\");\n .backface-visibility(~\"hidden\");\n .perspective(1000px);\n\n &.next,\n &.active.right {\n .translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n .translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n .translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: @carousel-control-width;\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug\n .opacity(@carousel-control-opacity);\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0, 0, 0, .5); @end-color: rgba(0, 0, 0, .0001));\n }\n &.right {\n right: 0;\n left: auto;\n #gradient > .horizontal(@start-color: rgba(0, 0, 0, .0001); @end-color: rgba(0, 0, 0, .5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: @carousel-control-color;\n text-decoration: none;\n outline: 0;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n margin-top: -10px;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n font-family: serif;\n line-height: 1;\n }\n\n .icon-prev {\n &:before {\n content: \"\\2039\";// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: \"\\203a\";// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n padding-left: 0;\n margin-left: -30%;\n text-align: center;\n list-style: none;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n cursor: pointer;\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0, 0, 0, 0); // IE9\n\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n }\n\n .active {\n width: 12px;\n height: 12px;\n margin: 0;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: (@carousel-control-font-size * 1.5);\n height: (@carousel-control-font-size * 1.5);\n margin-top: (@carousel-control-font-size / -2);\n font-size: (@carousel-control-font-size * 1.5);\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: (@carousel-control-font-size / -2);\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: (@carousel-control-font-size / -2);\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n right: 20%;\n left: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n display: table; // 2\n content: \" \"; // 1\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-right: auto;\n margin-left: auto;\n}\n","// stylelint-disable font-family-name-quotes, font-family-no-missing-generic-family-keyword\n\n// CSS image replacement\n//\n// Heads up! v3 launched with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (has been removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","// stylelint-disable declaration-no-important, at-rule-no-vendor-prefix\n\n//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: https://getbootstrap.com/docs/3.4/getting-started/#support-ie10-width\n// Source: https://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: https://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// stylelint-disable declaration-no-important\n\n.responsive-visibility() {\n display: block !important;\n table& { display: table !important; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]} \ No newline at end of file | |||
diff --git a/src/index.html b/src/index.html index 7eb123c..bc5975a 100644 --- a/src/index.html +++ b/src/index.html | |||
@@ -3,7 +3,7 @@ | |||
3 | <head lang="en"> | 3 | <head lang="en"> |
4 | <meta charset="utf-8" /> | 4 | <meta charset="utf-8" /> |
5 | <title>BIP39 - Mnemonic Code</title> | 5 | <title>BIP39 - Mnemonic Code</title> |
6 | <link rel="stylesheet" href="css/bootstrap-3.3.7.css"> | 6 | <link rel="stylesheet" href="css/bootstrap.css"> |
7 | <link rel="stylesheet" href="css/app.css"> | 7 | <link rel="stylesheet" href="css/app.css"> |
8 | <meta content="Mnemonic code for generating deterministic keys" name="description"/> | 8 | <meta content="Mnemonic code for generating deterministic keys" name="description"/> |
9 | <meta content="width=device-width, initial-scale=1.0" name="viewport" /> | 9 | <meta content="width=device-width, initial-scale=1.0" name="viewport" /> |
@@ -86,7 +86,7 @@ | |||
86 | <div class="row"> | 86 | <div class="row"> |
87 | <label class="col-sm-3 control-label">Entropy Type</label> | 87 | <label class="col-sm-3 control-label">Entropy Type</label> |
88 | <div class="type col-sm-3 form-control-static"></div> | 88 | <div class="type col-sm-3 form-control-static"></div> |
89 | <label class="col-sm-3 control-label">Bits Per Event</label> | 89 | <label class="col-sm-3 control-label">Avg Bits Per Event</label> |
90 | <div class="bits-per-event col-sm-3 form-control-static"></div> | 90 | <div class="bits-per-event col-sm-3 form-control-static"></div> |
91 | </div> | 91 | </div> |
92 | <div class="row"> | 92 | <div class="row"> |
@@ -871,9 +871,9 @@ | |||
871 | on any offline computer. | 871 | on any offline computer. |
872 | </p> | 872 | </p> |
873 | <p> | 873 | <p> |
874 | <span>Alternatively, download the file from the repository</span> | 874 | <span>Alternatively, download the file from the latest GitHub release</span> |
875 | - | 875 | - |
876 | <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a> | 876 | <a href="https://github.com/iancoleman/bip39/releases/latest/">https://github.com/iancoleman/bip39/releases/latest/</a> |
877 | </p> | 877 | </p> |
878 | 878 | ||
879 | </div> | 879 | </div> |
@@ -958,7 +958,7 @@ | |||
958 | </tr> | 958 | </tr> |
959 | </script> | 959 | </script> |
960 | <script src="js/jquery-3.2.1.js"></script> | 960 | <script src="js/jquery-3.2.1.js"></script> |
961 | <script src="js/bootstrap-3.3.7.js"></script> | 961 | <script src="js/bootstrap.js"></script> |
962 | <script src="js/bip39-libs.js"></script> | 962 | <script src="js/bip39-libs.js"></script> |
963 | <script src="js/bitcoinjs-extensions.js"></script> | 963 | <script src="js/bitcoinjs-extensions.js"></script> |
964 | <script src="js/segwit-parameters.js"></script> | 964 | <script src="js/segwit-parameters.js"></script> |
diff --git a/src/js/bootstrap-3.3.7.js b/src/js/bootstrap.js index 8a2e99a..170bd60 100644 --- a/src/js/bootstrap-3.3.7.js +++ b/src/js/bootstrap.js | |||
@@ -1,6 +1,6 @@ | |||
1 | /*! | 1 | /*! |
2 | * Bootstrap v3.3.7 (http://getbootstrap.com) | 2 | * Bootstrap v3.4.1 (https://getbootstrap.com/) |
3 | * Copyright 2011-2016 Twitter, Inc. | 3 | * Copyright 2011-2019 Twitter, Inc. |
4 | * Licensed under the MIT license | 4 | * Licensed under the MIT license |
5 | */ | 5 | */ |
6 | 6 | ||
@@ -17,10 +17,10 @@ if (typeof jQuery === 'undefined') { | |||
17 | }(jQuery); | 17 | }(jQuery); |
18 | 18 | ||
19 | /* ======================================================================== | 19 | /* ======================================================================== |
20 | * Bootstrap: transition.js v3.3.7 | 20 | * Bootstrap: transition.js v3.4.1 |
21 | * http://getbootstrap.com/javascript/#transitions | 21 | * https://getbootstrap.com/docs/3.4/javascript/#transitions |
22 | * ======================================================================== | 22 | * ======================================================================== |
23 | * Copyright 2011-2016 Twitter, Inc. | 23 | * Copyright 2011-2019 Twitter, Inc. |
24 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 24 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
25 | * ======================================================================== */ | 25 | * ======================================================================== */ |
26 | 26 | ||
@@ -28,7 +28,7 @@ if (typeof jQuery === 'undefined') { | |||
28 | +function ($) { | 28 | +function ($) { |
29 | 'use strict'; | 29 | 'use strict'; |
30 | 30 | ||
31 | // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) | 31 | // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/) |
32 | // ============================================================ | 32 | // ============================================================ |
33 | 33 | ||
34 | function transitionEnd() { | 34 | function transitionEnd() { |
@@ -50,7 +50,7 @@ if (typeof jQuery === 'undefined') { | |||
50 | return false // explicit for ie8 ( ._.) | 50 | return false // explicit for ie8 ( ._.) |
51 | } | 51 | } |
52 | 52 | ||
53 | // http://blog.alexmaccaw.com/css-transitions | 53 | // https://blog.alexmaccaw.com/css-transitions |
54 | $.fn.emulateTransitionEnd = function (duration) { | 54 | $.fn.emulateTransitionEnd = function (duration) { |
55 | var called = false | 55 | var called = false |
56 | var $el = this | 56 | var $el = this |
@@ -77,10 +77,10 @@ if (typeof jQuery === 'undefined') { | |||
77 | }(jQuery); | 77 | }(jQuery); |
78 | 78 | ||
79 | /* ======================================================================== | 79 | /* ======================================================================== |
80 | * Bootstrap: alert.js v3.3.7 | 80 | * Bootstrap: alert.js v3.4.1 |
81 | * http://getbootstrap.com/javascript/#alerts | 81 | * https://getbootstrap.com/docs/3.4/javascript/#alerts |
82 | * ======================================================================== | 82 | * ======================================================================== |
83 | * Copyright 2011-2016 Twitter, Inc. | 83 | * Copyright 2011-2019 Twitter, Inc. |
84 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 84 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
85 | * ======================================================================== */ | 85 | * ======================================================================== */ |
86 | 86 | ||
@@ -96,7 +96,7 @@ if (typeof jQuery === 'undefined') { | |||
96 | $(el).on('click', dismiss, this.close) | 96 | $(el).on('click', dismiss, this.close) |
97 | } | 97 | } |
98 | 98 | ||
99 | Alert.VERSION = '3.3.7' | 99 | Alert.VERSION = '3.4.1' |
100 | 100 | ||
101 | Alert.TRANSITION_DURATION = 150 | 101 | Alert.TRANSITION_DURATION = 150 |
102 | 102 | ||
@@ -109,7 +109,8 @@ if (typeof jQuery === 'undefined') { | |||
109 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 | 109 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 |
110 | } | 110 | } |
111 | 111 | ||
112 | var $parent = $(selector === '#' ? [] : selector) | 112 | selector = selector === '#' ? [] : selector |
113 | var $parent = $(document).find(selector) | ||
113 | 114 | ||
114 | if (e) e.preventDefault() | 115 | if (e) e.preventDefault() |
115 | 116 | ||
@@ -172,10 +173,10 @@ if (typeof jQuery === 'undefined') { | |||
172 | }(jQuery); | 173 | }(jQuery); |
173 | 174 | ||
174 | /* ======================================================================== | 175 | /* ======================================================================== |
175 | * Bootstrap: button.js v3.3.7 | 176 | * Bootstrap: button.js v3.4.1 |
176 | * http://getbootstrap.com/javascript/#buttons | 177 | * https://getbootstrap.com/docs/3.4/javascript/#buttons |
177 | * ======================================================================== | 178 | * ======================================================================== |
178 | * Copyright 2011-2016 Twitter, Inc. | 179 | * Copyright 2011-2019 Twitter, Inc. |
179 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 180 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
180 | * ======================================================================== */ | 181 | * ======================================================================== */ |
181 | 182 | ||
@@ -192,7 +193,7 @@ if (typeof jQuery === 'undefined') { | |||
192 | this.isLoading = false | 193 | this.isLoading = false |
193 | } | 194 | } |
194 | 195 | ||
195 | Button.VERSION = '3.3.7' | 196 | Button.VERSION = '3.4.1' |
196 | 197 | ||
197 | Button.DEFAULTS = { | 198 | Button.DEFAULTS = { |
198 | loadingText: 'loading...' | 199 | loadingText: 'loading...' |
@@ -298,10 +299,10 @@ if (typeof jQuery === 'undefined') { | |||
298 | }(jQuery); | 299 | }(jQuery); |
299 | 300 | ||
300 | /* ======================================================================== | 301 | /* ======================================================================== |
301 | * Bootstrap: carousel.js v3.3.7 | 302 | * Bootstrap: carousel.js v3.4.1 |
302 | * http://getbootstrap.com/javascript/#carousel | 303 | * https://getbootstrap.com/docs/3.4/javascript/#carousel |
303 | * ======================================================================== | 304 | * ======================================================================== |
304 | * Copyright 2011-2016 Twitter, Inc. | 305 | * Copyright 2011-2019 Twitter, Inc. |
305 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 306 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
306 | * ======================================================================== */ | 307 | * ======================================================================== */ |
307 | 308 | ||
@@ -329,7 +330,7 @@ if (typeof jQuery === 'undefined') { | |||
329 | .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) | 330 | .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) |
330 | } | 331 | } |
331 | 332 | ||
332 | Carousel.VERSION = '3.3.7' | 333 | Carousel.VERSION = '3.4.1' |
333 | 334 | ||
334 | Carousel.TRANSITION_DURATION = 600 | 335 | Carousel.TRANSITION_DURATION = 600 |
335 | 336 | ||
@@ -443,7 +444,9 @@ if (typeof jQuery === 'undefined') { | |||
443 | var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" | 444 | var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" |
444 | if ($.support.transition && this.$element.hasClass('slide')) { | 445 | if ($.support.transition && this.$element.hasClass('slide')) { |
445 | $next.addClass(type) | 446 | $next.addClass(type) |
446 | $next[0].offsetWidth // force reflow | 447 | if (typeof $next === 'object' && $next.length) { |
448 | $next[0].offsetWidth // force reflow | ||
449 | } | ||
447 | $active.addClass(direction) | 450 | $active.addClass(direction) |
448 | $next.addClass(direction) | 451 | $next.addClass(direction) |
449 | $active | 452 | $active |
@@ -505,10 +508,17 @@ if (typeof jQuery === 'undefined') { | |||
505 | // ================= | 508 | // ================= |
506 | 509 | ||
507 | var clickHandler = function (e) { | 510 | var clickHandler = function (e) { |
508 | var href | ||
509 | var $this = $(this) | 511 | var $this = $(this) |
510 | var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 | 512 | var href = $this.attr('href') |
513 | if (href) { | ||
514 | href = href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 | ||
515 | } | ||
516 | |||
517 | var target = $this.attr('data-target') || href | ||
518 | var $target = $(document).find(target) | ||
519 | |||
511 | if (!$target.hasClass('carousel')) return | 520 | if (!$target.hasClass('carousel')) return |
521 | |||
512 | var options = $.extend({}, $target.data(), $this.data()) | 522 | var options = $.extend({}, $target.data(), $this.data()) |
513 | var slideIndex = $this.attr('data-slide-to') | 523 | var slideIndex = $this.attr('data-slide-to') |
514 | if (slideIndex) options.interval = false | 524 | if (slideIndex) options.interval = false |
@@ -536,10 +546,10 @@ if (typeof jQuery === 'undefined') { | |||
536 | }(jQuery); | 546 | }(jQuery); |
537 | 547 | ||
538 | /* ======================================================================== | 548 | /* ======================================================================== |
539 | * Bootstrap: collapse.js v3.3.7 | 549 | * Bootstrap: collapse.js v3.4.1 |
540 | * http://getbootstrap.com/javascript/#collapse | 550 | * https://getbootstrap.com/docs/3.4/javascript/#collapse |
541 | * ======================================================================== | 551 | * ======================================================================== |
542 | * Copyright 2011-2016 Twitter, Inc. | 552 | * Copyright 2011-2019 Twitter, Inc. |
543 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 553 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
544 | * ======================================================================== */ | 554 | * ======================================================================== */ |
545 | 555 | ||
@@ -567,7 +577,7 @@ if (typeof jQuery === 'undefined') { | |||
567 | if (this.options.toggle) this.toggle() | 577 | if (this.options.toggle) this.toggle() |
568 | } | 578 | } |
569 | 579 | ||
570 | Collapse.VERSION = '3.3.7' | 580 | Collapse.VERSION = '3.4.1' |
571 | 581 | ||
572 | Collapse.TRANSITION_DURATION = 350 | 582 | Collapse.TRANSITION_DURATION = 350 |
573 | 583 | ||
@@ -674,7 +684,7 @@ if (typeof jQuery === 'undefined') { | |||
674 | } | 684 | } |
675 | 685 | ||
676 | Collapse.prototype.getParent = function () { | 686 | Collapse.prototype.getParent = function () { |
677 | return $(this.options.parent) | 687 | return $(document).find(this.options.parent) |
678 | .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') | 688 | .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') |
679 | .each($.proxy(function (i, element) { | 689 | .each($.proxy(function (i, element) { |
680 | var $element = $(element) | 690 | var $element = $(element) |
@@ -697,7 +707,7 @@ if (typeof jQuery === 'undefined') { | |||
697 | var target = $trigger.attr('data-target') | 707 | var target = $trigger.attr('data-target') |
698 | || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 | 708 | || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 |
699 | 709 | ||
700 | return $(target) | 710 | return $(document).find(target) |
701 | } | 711 | } |
702 | 712 | ||
703 | 713 | ||
@@ -749,10 +759,10 @@ if (typeof jQuery === 'undefined') { | |||
749 | }(jQuery); | 759 | }(jQuery); |
750 | 760 | ||
751 | /* ======================================================================== | 761 | /* ======================================================================== |
752 | * Bootstrap: dropdown.js v3.3.7 | 762 | * Bootstrap: dropdown.js v3.4.1 |
753 | * http://getbootstrap.com/javascript/#dropdowns | 763 | * https://getbootstrap.com/docs/3.4/javascript/#dropdowns |
754 | * ======================================================================== | 764 | * ======================================================================== |
755 | * Copyright 2011-2016 Twitter, Inc. | 765 | * Copyright 2011-2019 Twitter, Inc. |
756 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 766 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
757 | * ======================================================================== */ | 767 | * ======================================================================== */ |
758 | 768 | ||
@@ -769,7 +779,7 @@ if (typeof jQuery === 'undefined') { | |||
769 | $(element).on('click.bs.dropdown', this.toggle) | 779 | $(element).on('click.bs.dropdown', this.toggle) |
770 | } | 780 | } |
771 | 781 | ||
772 | Dropdown.VERSION = '3.3.7' | 782 | Dropdown.VERSION = '3.4.1' |
773 | 783 | ||
774 | function getParent($this) { | 784 | function getParent($this) { |
775 | var selector = $this.attr('data-target') | 785 | var selector = $this.attr('data-target') |
@@ -779,7 +789,7 @@ if (typeof jQuery === 'undefined') { | |||
779 | selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 | 789 | selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 |
780 | } | 790 | } |
781 | 791 | ||
782 | var $parent = selector && $(selector) | 792 | var $parent = selector !== '#' ? $(document).find(selector) : null |
783 | 793 | ||
784 | return $parent && $parent.length ? $parent : $this.parent() | 794 | return $parent && $parent.length ? $parent : $this.parent() |
785 | } | 795 | } |
@@ -915,10 +925,10 @@ if (typeof jQuery === 'undefined') { | |||
915 | }(jQuery); | 925 | }(jQuery); |
916 | 926 | ||
917 | /* ======================================================================== | 927 | /* ======================================================================== |
918 | * Bootstrap: modal.js v3.3.7 | 928 | * Bootstrap: modal.js v3.4.1 |
919 | * http://getbootstrap.com/javascript/#modals | 929 | * https://getbootstrap.com/docs/3.4/javascript/#modals |
920 | * ======================================================================== | 930 | * ======================================================================== |
921 | * Copyright 2011-2016 Twitter, Inc. | 931 | * Copyright 2011-2019 Twitter, Inc. |
922 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 932 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
923 | * ======================================================================== */ | 933 | * ======================================================================== */ |
924 | 934 | ||
@@ -930,15 +940,16 @@ if (typeof jQuery === 'undefined') { | |||
930 | // ====================== | 940 | // ====================== |
931 | 941 | ||
932 | var Modal = function (element, options) { | 942 | var Modal = function (element, options) { |
933 | this.options = options | 943 | this.options = options |
934 | this.$body = $(document.body) | 944 | this.$body = $(document.body) |
935 | this.$element = $(element) | 945 | this.$element = $(element) |
936 | this.$dialog = this.$element.find('.modal-dialog') | 946 | this.$dialog = this.$element.find('.modal-dialog') |
937 | this.$backdrop = null | 947 | this.$backdrop = null |
938 | this.isShown = null | 948 | this.isShown = null |
939 | this.originalBodyPad = null | 949 | this.originalBodyPad = null |
940 | this.scrollbarWidth = 0 | 950 | this.scrollbarWidth = 0 |
941 | this.ignoreBackdropClick = false | 951 | this.ignoreBackdropClick = false |
952 | this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom' | ||
942 | 953 | ||
943 | if (this.options.remote) { | 954 | if (this.options.remote) { |
944 | this.$element | 955 | this.$element |
@@ -949,7 +960,7 @@ if (typeof jQuery === 'undefined') { | |||
949 | } | 960 | } |
950 | } | 961 | } |
951 | 962 | ||
952 | Modal.VERSION = '3.3.7' | 963 | Modal.VERSION = '3.4.1' |
953 | 964 | ||
954 | Modal.TRANSITION_DURATION = 300 | 965 | Modal.TRANSITION_DURATION = 300 |
955 | Modal.BACKDROP_TRANSITION_DURATION = 150 | 966 | Modal.BACKDROP_TRANSITION_DURATION = 150 |
@@ -966,7 +977,7 @@ if (typeof jQuery === 'undefined') { | |||
966 | 977 | ||
967 | Modal.prototype.show = function (_relatedTarget) { | 978 | Modal.prototype.show = function (_relatedTarget) { |
968 | var that = this | 979 | var that = this |
969 | var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) | 980 | var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) |
970 | 981 | ||
971 | this.$element.trigger(e) | 982 | this.$element.trigger(e) |
972 | 983 | ||
@@ -1057,8 +1068,8 @@ if (typeof jQuery === 'undefined') { | |||
1057 | .off('focusin.bs.modal') // guard against infinite focus loop | 1068 | .off('focusin.bs.modal') // guard against infinite focus loop |
1058 | .on('focusin.bs.modal', $.proxy(function (e) { | 1069 | .on('focusin.bs.modal', $.proxy(function (e) { |
1059 | if (document !== e.target && | 1070 | if (document !== e.target && |
1060 | this.$element[0] !== e.target && | 1071 | this.$element[0] !== e.target && |
1061 | !this.$element.has(e.target).length) { | 1072 | !this.$element.has(e.target).length) { |
1062 | this.$element.trigger('focus') | 1073 | this.$element.trigger('focus') |
1063 | } | 1074 | } |
1064 | }, this)) | 1075 | }, this)) |
@@ -1160,7 +1171,7 @@ if (typeof jQuery === 'undefined') { | |||
1160 | var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight | 1171 | var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight |
1161 | 1172 | ||
1162 | this.$element.css({ | 1173 | this.$element.css({ |
1163 | paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', | 1174 | paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', |
1164 | paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' | 1175 | paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' |
1165 | }) | 1176 | }) |
1166 | } | 1177 | } |
@@ -1185,11 +1196,26 @@ if (typeof jQuery === 'undefined') { | |||
1185 | Modal.prototype.setScrollbar = function () { | 1196 | Modal.prototype.setScrollbar = function () { |
1186 | var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) | 1197 | var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) |
1187 | this.originalBodyPad = document.body.style.paddingRight || '' | 1198 | this.originalBodyPad = document.body.style.paddingRight || '' |
1188 | if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) | 1199 | var scrollbarWidth = this.scrollbarWidth |
1200 | if (this.bodyIsOverflowing) { | ||
1201 | this.$body.css('padding-right', bodyPad + scrollbarWidth) | ||
1202 | $(this.fixedContent).each(function (index, element) { | ||
1203 | var actualPadding = element.style.paddingRight | ||
1204 | var calculatedPadding = $(element).css('padding-right') | ||
1205 | $(element) | ||
1206 | .data('padding-right', actualPadding) | ||
1207 | .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px') | ||
1208 | }) | ||
1209 | } | ||
1189 | } | 1210 | } |
1190 | 1211 | ||
1191 | Modal.prototype.resetScrollbar = function () { | 1212 | Modal.prototype.resetScrollbar = function () { |
1192 | this.$body.css('padding-right', this.originalBodyPad) | 1213 | this.$body.css('padding-right', this.originalBodyPad) |
1214 | $(this.fixedContent).each(function (index, element) { | ||
1215 | var padding = $(element).data('padding-right') | ||
1216 | $(element).removeData('padding-right') | ||
1217 | element.style.paddingRight = padding ? padding : '' | ||
1218 | }) | ||
1193 | } | 1219 | } |
1194 | 1220 | ||
1195 | Modal.prototype.measureScrollbar = function () { // thx walsh | 1221 | Modal.prototype.measureScrollbar = function () { // thx walsh |
@@ -1207,8 +1233,8 @@ if (typeof jQuery === 'undefined') { | |||
1207 | 1233 | ||
1208 | function Plugin(option, _relatedTarget) { | 1234 | function Plugin(option, _relatedTarget) { |
1209 | return this.each(function () { | 1235 | return this.each(function () { |
1210 | var $this = $(this) | 1236 | var $this = $(this) |
1211 | var data = $this.data('bs.modal') | 1237 | var data = $this.data('bs.modal') |
1212 | var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) | 1238 | var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) |
1213 | 1239 | ||
1214 | if (!data) $this.data('bs.modal', (data = new Modal(this, options))) | 1240 | if (!data) $this.data('bs.modal', (data = new Modal(this, options))) |
@@ -1219,7 +1245,7 @@ if (typeof jQuery === 'undefined') { | |||
1219 | 1245 | ||
1220 | var old = $.fn.modal | 1246 | var old = $.fn.modal |
1221 | 1247 | ||
1222 | $.fn.modal = Plugin | 1248 | $.fn.modal = Plugin |
1223 | $.fn.modal.Constructor = Modal | 1249 | $.fn.modal.Constructor = Modal |
1224 | 1250 | ||
1225 | 1251 | ||
@@ -1236,10 +1262,13 @@ if (typeof jQuery === 'undefined') { | |||
1236 | // ============== | 1262 | // ============== |
1237 | 1263 | ||
1238 | $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { | 1264 | $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { |
1239 | var $this = $(this) | 1265 | var $this = $(this) |
1240 | var href = $this.attr('href') | 1266 | var href = $this.attr('href') |
1241 | var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 | 1267 | var target = $this.attr('data-target') || |
1242 | var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) | 1268 | (href && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 |
1269 | |||
1270 | var $target = $(document).find(target) | ||
1271 | var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) | ||
1243 | 1272 | ||
1244 | if ($this.is('a')) e.preventDefault() | 1273 | if ($this.is('a')) e.preventDefault() |
1245 | 1274 | ||
@@ -1255,18 +1284,148 @@ if (typeof jQuery === 'undefined') { | |||
1255 | }(jQuery); | 1284 | }(jQuery); |
1256 | 1285 | ||
1257 | /* ======================================================================== | 1286 | /* ======================================================================== |
1258 | * Bootstrap: tooltip.js v3.3.7 | 1287 | * Bootstrap: tooltip.js v3.4.1 |
1259 | * http://getbootstrap.com/javascript/#tooltip | 1288 | * https://getbootstrap.com/docs/3.4/javascript/#tooltip |
1260 | * Inspired by the original jQuery.tipsy by Jason Frame | 1289 | * Inspired by the original jQuery.tipsy by Jason Frame |
1261 | * ======================================================================== | 1290 | * ======================================================================== |
1262 | * Copyright 2011-2016 Twitter, Inc. | 1291 | * Copyright 2011-2019 Twitter, Inc. |
1263 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 1292 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
1264 | * ======================================================================== */ | 1293 | * ======================================================================== */ |
1265 | 1294 | ||
1266 | |||
1267 | +function ($) { | 1295 | +function ($) { |
1268 | 'use strict'; | 1296 | 'use strict'; |
1269 | 1297 | ||
1298 | var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'] | ||
1299 | |||
1300 | var uriAttrs = [ | ||
1301 | 'background', | ||
1302 | 'cite', | ||
1303 | 'href', | ||
1304 | 'itemtype', | ||
1305 | 'longdesc', | ||
1306 | 'poster', | ||
1307 | 'src', | ||
1308 | 'xlink:href' | ||
1309 | ] | ||
1310 | |||
1311 | var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i | ||
1312 | |||
1313 | var DefaultWhitelist = { | ||
1314 | // Global attributes allowed on any supplied element below. | ||
1315 | '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], | ||
1316 | a: ['target', 'href', 'title', 'rel'], | ||
1317 | area: [], | ||
1318 | b: [], | ||
1319 | br: [], | ||
1320 | col: [], | ||
1321 | code: [], | ||
1322 | div: [], | ||
1323 | em: [], | ||
1324 | hr: [], | ||
1325 | h1: [], | ||
1326 | h2: [], | ||
1327 | h3: [], | ||
1328 | h4: [], | ||
1329 | h5: [], | ||
1330 | h6: [], | ||
1331 | i: [], | ||
1332 | img: ['src', 'alt', 'title', 'width', 'height'], | ||
1333 | li: [], | ||
1334 | ol: [], | ||
1335 | p: [], | ||
1336 | pre: [], | ||
1337 | s: [], | ||
1338 | small: [], | ||
1339 | span: [], | ||
1340 | sub: [], | ||
1341 | sup: [], | ||
1342 | strong: [], | ||
1343 | u: [], | ||
1344 | ul: [] | ||
1345 | } | ||
1346 | |||
1347 | /** | ||
1348 | * A pattern that recognizes a commonly useful subset of URLs that are safe. | ||
1349 | * | ||
1350 | * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts | ||
1351 | */ | ||
1352 | var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi | ||
1353 | |||
1354 | /** | ||
1355 | * A pattern that matches safe data URLs. Only matches image, video and audio types. | ||
1356 | * | ||
1357 | * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts | ||
1358 | */ | ||
1359 | var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i | ||
1360 | |||
1361 | function allowedAttribute(attr, allowedAttributeList) { | ||
1362 | var attrName = attr.nodeName.toLowerCase() | ||
1363 | |||
1364 | if ($.inArray(attrName, allowedAttributeList) !== -1) { | ||
1365 | if ($.inArray(attrName, uriAttrs) !== -1) { | ||
1366 | return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)) | ||
1367 | } | ||
1368 | |||
1369 | return true | ||
1370 | } | ||
1371 | |||
1372 | var regExp = $(allowedAttributeList).filter(function (index, value) { | ||
1373 | return value instanceof RegExp | ||
1374 | }) | ||
1375 | |||
1376 | // Check if a regular expression validates the attribute. | ||
1377 | for (var i = 0, l = regExp.length; i < l; i++) { | ||
1378 | if (attrName.match(regExp[i])) { | ||
1379 | return true | ||
1380 | } | ||
1381 | } | ||
1382 | |||
1383 | return false | ||
1384 | } | ||
1385 | |||
1386 | function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { | ||
1387 | if (unsafeHtml.length === 0) { | ||
1388 | return unsafeHtml | ||
1389 | } | ||
1390 | |||
1391 | if (sanitizeFn && typeof sanitizeFn === 'function') { | ||
1392 | return sanitizeFn(unsafeHtml) | ||
1393 | } | ||
1394 | |||
1395 | // IE 8 and below don't support createHTMLDocument | ||
1396 | if (!document.implementation || !document.implementation.createHTMLDocument) { | ||
1397 | return unsafeHtml | ||
1398 | } | ||
1399 | |||
1400 | var createdDocument = document.implementation.createHTMLDocument('sanitization') | ||
1401 | createdDocument.body.innerHTML = unsafeHtml | ||
1402 | |||
1403 | var whitelistKeys = $.map(whiteList, function (el, i) { return i }) | ||
1404 | var elements = $(createdDocument.body).find('*') | ||
1405 | |||
1406 | for (var i = 0, len = elements.length; i < len; i++) { | ||
1407 | var el = elements[i] | ||
1408 | var elName = el.nodeName.toLowerCase() | ||
1409 | |||
1410 | if ($.inArray(elName, whitelistKeys) === -1) { | ||
1411 | el.parentNode.removeChild(el) | ||
1412 | |||
1413 | continue | ||
1414 | } | ||
1415 | |||
1416 | var attributeList = $.map(el.attributes, function (el) { return el }) | ||
1417 | var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []) | ||
1418 | |||
1419 | for (var j = 0, len2 = attributeList.length; j < len2; j++) { | ||
1420 | if (!allowedAttribute(attributeList[j], whitelistedAttributes)) { | ||
1421 | el.removeAttribute(attributeList[j].nodeName) | ||
1422 | } | ||
1423 | } | ||
1424 | } | ||
1425 | |||
1426 | return createdDocument.body.innerHTML | ||
1427 | } | ||
1428 | |||
1270 | // TOOLTIP PUBLIC CLASS DEFINITION | 1429 | // TOOLTIP PUBLIC CLASS DEFINITION |
1271 | // =============================== | 1430 | // =============================== |
1272 | 1431 | ||
@@ -1282,7 +1441,7 @@ if (typeof jQuery === 'undefined') { | |||
1282 | this.init('tooltip', element, options) | 1441 | this.init('tooltip', element, options) |
1283 | } | 1442 | } |
1284 | 1443 | ||
1285 | Tooltip.VERSION = '3.3.7' | 1444 | Tooltip.VERSION = '3.4.1' |
1286 | 1445 | ||
1287 | Tooltip.TRANSITION_DURATION = 150 | 1446 | Tooltip.TRANSITION_DURATION = 150 |
1288 | 1447 | ||
@@ -1299,7 +1458,10 @@ if (typeof jQuery === 'undefined') { | |||
1299 | viewport: { | 1458 | viewport: { |
1300 | selector: 'body', | 1459 | selector: 'body', |
1301 | padding: 0 | 1460 | padding: 0 |
1302 | } | 1461 | }, |
1462 | sanitize : true, | ||
1463 | sanitizeFn : null, | ||
1464 | whiteList : DefaultWhitelist | ||
1303 | } | 1465 | } |
1304 | 1466 | ||
1305 | Tooltip.prototype.init = function (type, element, options) { | 1467 | Tooltip.prototype.init = function (type, element, options) { |
@@ -1307,7 +1469,7 @@ if (typeof jQuery === 'undefined') { | |||
1307 | this.type = type | 1469 | this.type = type |
1308 | this.$element = $(element) | 1470 | this.$element = $(element) |
1309 | this.options = this.getOptions(options) | 1471 | this.options = this.getOptions(options) |
1310 | this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) | 1472 | this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) |
1311 | this.inState = { click: false, hover: false, focus: false } | 1473 | this.inState = { click: false, hover: false, focus: false } |
1312 | 1474 | ||
1313 | if (this.$element[0] instanceof document.constructor && !this.options.selector) { | 1475 | if (this.$element[0] instanceof document.constructor && !this.options.selector) { |
@@ -1340,7 +1502,15 @@ if (typeof jQuery === 'undefined') { | |||
1340 | } | 1502 | } |
1341 | 1503 | ||
1342 | Tooltip.prototype.getOptions = function (options) { | 1504 | Tooltip.prototype.getOptions = function (options) { |
1343 | options = $.extend({}, this.getDefaults(), this.$element.data(), options) | 1505 | var dataAttributes = this.$element.data() |
1506 | |||
1507 | for (var dataAttr in dataAttributes) { | ||
1508 | if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) { | ||
1509 | delete dataAttributes[dataAttr] | ||
1510 | } | ||
1511 | } | ||
1512 | |||
1513 | options = $.extend({}, this.getDefaults(), dataAttributes, options) | ||
1344 | 1514 | ||
1345 | if (options.delay && typeof options.delay == 'number') { | 1515 | if (options.delay && typeof options.delay == 'number') { |
1346 | options.delay = { | 1516 | options.delay = { |
@@ -1349,6 +1519,10 @@ if (typeof jQuery === 'undefined') { | |||
1349 | } | 1519 | } |
1350 | } | 1520 | } |
1351 | 1521 | ||
1522 | if (options.sanitize) { | ||
1523 | options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn) | ||
1524 | } | ||
1525 | |||
1352 | return options | 1526 | return options |
1353 | } | 1527 | } |
1354 | 1528 | ||
@@ -1460,7 +1634,7 @@ if (typeof jQuery === 'undefined') { | |||
1460 | .addClass(placement) | 1634 | .addClass(placement) |
1461 | .data('bs.' + this.type, this) | 1635 | .data('bs.' + this.type, this) |
1462 | 1636 | ||
1463 | this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) | 1637 | this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element) |
1464 | this.$element.trigger('inserted.bs.' + this.type) | 1638 | this.$element.trigger('inserted.bs.' + this.type) |
1465 | 1639 | ||
1466 | var pos = this.getPosition() | 1640 | var pos = this.getPosition() |
@@ -1562,7 +1736,16 @@ if (typeof jQuery === 'undefined') { | |||
1562 | var $tip = this.tip() | 1736 | var $tip = this.tip() |
1563 | var title = this.getTitle() | 1737 | var title = this.getTitle() |
1564 | 1738 | ||
1565 | $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) | 1739 | if (this.options.html) { |
1740 | if (this.options.sanitize) { | ||
1741 | title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn) | ||
1742 | } | ||
1743 | |||
1744 | $tip.find('.tooltip-inner').html(title) | ||
1745 | } else { | ||
1746 | $tip.find('.tooltip-inner').text(title) | ||
1747 | } | ||
1748 | |||
1566 | $tip.removeClass('fade in top bottom left right') | 1749 | $tip.removeClass('fade in top bottom left right') |
1567 | } | 1750 | } |
1568 | 1751 | ||
@@ -1743,6 +1926,9 @@ if (typeof jQuery === 'undefined') { | |||
1743 | }) | 1926 | }) |
1744 | } | 1927 | } |
1745 | 1928 | ||
1929 | Tooltip.prototype.sanitizeHtml = function (unsafeHtml) { | ||
1930 | return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn) | ||
1931 | } | ||
1746 | 1932 | ||
1747 | // TOOLTIP PLUGIN DEFINITION | 1933 | // TOOLTIP PLUGIN DEFINITION |
1748 | // ========================= | 1934 | // ========================= |
@@ -1776,10 +1962,10 @@ if (typeof jQuery === 'undefined') { | |||
1776 | }(jQuery); | 1962 | }(jQuery); |
1777 | 1963 | ||
1778 | /* ======================================================================== | 1964 | /* ======================================================================== |
1779 | * Bootstrap: popover.js v3.3.7 | 1965 | * Bootstrap: popover.js v3.4.1 |
1780 | * http://getbootstrap.com/javascript/#popovers | 1966 | * https://getbootstrap.com/docs/3.4/javascript/#popovers |
1781 | * ======================================================================== | 1967 | * ======================================================================== |
1782 | * Copyright 2011-2016 Twitter, Inc. | 1968 | * Copyright 2011-2019 Twitter, Inc. |
1783 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 1969 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
1784 | * ======================================================================== */ | 1970 | * ======================================================================== */ |
1785 | 1971 | ||
@@ -1796,7 +1982,7 @@ if (typeof jQuery === 'undefined') { | |||
1796 | 1982 | ||
1797 | if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') | 1983 | if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') |
1798 | 1984 | ||
1799 | Popover.VERSION = '3.3.7' | 1985 | Popover.VERSION = '3.4.1' |
1800 | 1986 | ||
1801 | Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { | 1987 | Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { |
1802 | placement: 'right', | 1988 | placement: 'right', |
@@ -1822,10 +2008,25 @@ if (typeof jQuery === 'undefined') { | |||
1822 | var title = this.getTitle() | 2008 | var title = this.getTitle() |
1823 | var content = this.getContent() | 2009 | var content = this.getContent() |
1824 | 2010 | ||
1825 | $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) | 2011 | if (this.options.html) { |
1826 | $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events | 2012 | var typeContent = typeof content |
1827 | this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' | 2013 | |
1828 | ](content) | 2014 | if (this.options.sanitize) { |
2015 | title = this.sanitizeHtml(title) | ||
2016 | |||
2017 | if (typeContent === 'string') { | ||
2018 | content = this.sanitizeHtml(content) | ||
2019 | } | ||
2020 | } | ||
2021 | |||
2022 | $tip.find('.popover-title').html(title) | ||
2023 | $tip.find('.popover-content').children().detach().end()[ | ||
2024 | typeContent === 'string' ? 'html' : 'append' | ||
2025 | ](content) | ||
2026 | } else { | ||
2027 | $tip.find('.popover-title').text(title) | ||
2028 | $tip.find('.popover-content').children().detach().end().text(content) | ||
2029 | } | ||
1829 | 2030 | ||
1830 | $tip.removeClass('fade top bottom left right in') | 2031 | $tip.removeClass('fade top bottom left right in') |
1831 | 2032 | ||
@@ -1844,8 +2045,8 @@ if (typeof jQuery === 'undefined') { | |||
1844 | 2045 | ||
1845 | return $e.attr('data-content') | 2046 | return $e.attr('data-content') |
1846 | || (typeof o.content == 'function' ? | 2047 | || (typeof o.content == 'function' ? |
1847 | o.content.call($e[0]) : | 2048 | o.content.call($e[0]) : |
1848 | o.content) | 2049 | o.content) |
1849 | } | 2050 | } |
1850 | 2051 | ||
1851 | Popover.prototype.arrow = function () { | 2052 | Popover.prototype.arrow = function () { |
@@ -1885,10 +2086,10 @@ if (typeof jQuery === 'undefined') { | |||
1885 | }(jQuery); | 2086 | }(jQuery); |
1886 | 2087 | ||
1887 | /* ======================================================================== | 2088 | /* ======================================================================== |
1888 | * Bootstrap: scrollspy.js v3.3.7 | 2089 | * Bootstrap: scrollspy.js v3.4.1 |
1889 | * http://getbootstrap.com/javascript/#scrollspy | 2090 | * https://getbootstrap.com/docs/3.4/javascript/#scrollspy |
1890 | * ======================================================================== | 2091 | * ======================================================================== |
1891 | * Copyright 2011-2016 Twitter, Inc. | 2092 | * Copyright 2011-2019 Twitter, Inc. |
1892 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 2093 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
1893 | * ======================================================================== */ | 2094 | * ======================================================================== */ |
1894 | 2095 | ||
@@ -1914,7 +2115,7 @@ if (typeof jQuery === 'undefined') { | |||
1914 | this.process() | 2115 | this.process() |
1915 | } | 2116 | } |
1916 | 2117 | ||
1917 | ScrollSpy.VERSION = '3.3.7' | 2118 | ScrollSpy.VERSION = '3.4.1' |
1918 | 2119 | ||
1919 | ScrollSpy.DEFAULTS = { | 2120 | ScrollSpy.DEFAULTS = { |
1920 | offset: 10 | 2121 | offset: 10 |
@@ -2058,10 +2259,10 @@ if (typeof jQuery === 'undefined') { | |||
2058 | }(jQuery); | 2259 | }(jQuery); |
2059 | 2260 | ||
2060 | /* ======================================================================== | 2261 | /* ======================================================================== |
2061 | * Bootstrap: tab.js v3.3.7 | 2262 | * Bootstrap: tab.js v3.4.1 |
2062 | * http://getbootstrap.com/javascript/#tabs | 2263 | * https://getbootstrap.com/docs/3.4/javascript/#tabs |
2063 | * ======================================================================== | 2264 | * ======================================================================== |
2064 | * Copyright 2011-2016 Twitter, Inc. | 2265 | * Copyright 2011-2019 Twitter, Inc. |
2065 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 2266 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
2066 | * ======================================================================== */ | 2267 | * ======================================================================== */ |
2067 | 2268 | ||
@@ -2078,7 +2279,7 @@ if (typeof jQuery === 'undefined') { | |||
2078 | // jscs:enable requireDollarBeforejQueryAssignment | 2279 | // jscs:enable requireDollarBeforejQueryAssignment |
2079 | } | 2280 | } |
2080 | 2281 | ||
2081 | Tab.VERSION = '3.3.7' | 2282 | Tab.VERSION = '3.4.1' |
2082 | 2283 | ||
2083 | Tab.TRANSITION_DURATION = 150 | 2284 | Tab.TRANSITION_DURATION = 150 |
2084 | 2285 | ||
@@ -2107,7 +2308,7 @@ if (typeof jQuery === 'undefined') { | |||
2107 | 2308 | ||
2108 | if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return | 2309 | if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return |
2109 | 2310 | ||
2110 | var $target = $(selector) | 2311 | var $target = $(document).find(selector) |
2111 | 2312 | ||
2112 | this.activate($this.closest('li'), $ul) | 2313 | this.activate($this.closest('li'), $ul) |
2113 | this.activate($target, $target.parent(), function () { | 2314 | this.activate($target, $target.parent(), function () { |
@@ -2132,15 +2333,15 @@ if (typeof jQuery === 'undefined') { | |||
2132 | $active | 2333 | $active |
2133 | .removeClass('active') | 2334 | .removeClass('active') |
2134 | .find('> .dropdown-menu > .active') | 2335 | .find('> .dropdown-menu > .active') |
2135 | .removeClass('active') | 2336 | .removeClass('active') |
2136 | .end() | 2337 | .end() |
2137 | .find('[data-toggle="tab"]') | 2338 | .find('[data-toggle="tab"]') |
2138 | .attr('aria-expanded', false) | 2339 | .attr('aria-expanded', false) |
2139 | 2340 | ||
2140 | element | 2341 | element |
2141 | .addClass('active') | 2342 | .addClass('active') |
2142 | .find('[data-toggle="tab"]') | 2343 | .find('[data-toggle="tab"]') |
2143 | .attr('aria-expanded', true) | 2344 | .attr('aria-expanded', true) |
2144 | 2345 | ||
2145 | if (transition) { | 2346 | if (transition) { |
2146 | element[0].offsetWidth // reflow for transition | 2347 | element[0].offsetWidth // reflow for transition |
@@ -2152,10 +2353,10 @@ if (typeof jQuery === 'undefined') { | |||
2152 | if (element.parent('.dropdown-menu').length) { | 2353 | if (element.parent('.dropdown-menu').length) { |
2153 | element | 2354 | element |
2154 | .closest('li.dropdown') | 2355 | .closest('li.dropdown') |
2155 | .addClass('active') | 2356 | .addClass('active') |
2156 | .end() | 2357 | .end() |
2157 | .find('[data-toggle="tab"]') | 2358 | .find('[data-toggle="tab"]') |
2158 | .attr('aria-expanded', true) | 2359 | .attr('aria-expanded', true) |
2159 | } | 2360 | } |
2160 | 2361 | ||
2161 | callback && callback() | 2362 | callback && callback() |
@@ -2214,10 +2415,10 @@ if (typeof jQuery === 'undefined') { | |||
2214 | }(jQuery); | 2415 | }(jQuery); |
2215 | 2416 | ||
2216 | /* ======================================================================== | 2417 | /* ======================================================================== |
2217 | * Bootstrap: affix.js v3.3.7 | 2418 | * Bootstrap: affix.js v3.4.1 |
2218 | * http://getbootstrap.com/javascript/#affix | 2419 | * https://getbootstrap.com/docs/3.4/javascript/#affix |
2219 | * ======================================================================== | 2420 | * ======================================================================== |
2220 | * Copyright 2011-2016 Twitter, Inc. | 2421 | * Copyright 2011-2019 Twitter, Inc. |
2221 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | 2422 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
2222 | * ======================================================================== */ | 2423 | * ======================================================================== */ |
2223 | 2424 | ||
@@ -2231,7 +2432,9 @@ if (typeof jQuery === 'undefined') { | |||
2231 | var Affix = function (element, options) { | 2432 | var Affix = function (element, options) { |
2232 | this.options = $.extend({}, Affix.DEFAULTS, options) | 2433 | this.options = $.extend({}, Affix.DEFAULTS, options) |
2233 | 2434 | ||
2234 | this.$target = $(this.options.target) | 2435 | var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target) |
2436 | |||
2437 | this.$target = target | ||
2235 | .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) | 2438 | .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) |
2236 | .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) | 2439 | .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) |
2237 | 2440 | ||
@@ -2243,7 +2446,7 @@ if (typeof jQuery === 'undefined') { | |||
2243 | this.checkPosition() | 2446 | this.checkPosition() |
2244 | } | 2447 | } |
2245 | 2448 | ||
2246 | Affix.VERSION = '3.3.7' | 2449 | Affix.VERSION = '3.4.1' |
2247 | 2450 | ||
2248 | Affix.RESET = 'affix affix-top affix-bottom' | 2451 | Affix.RESET = 'affix affix-top affix-bottom' |
2249 | 2452 | ||
diff --git a/src/js/entropy.js b/src/js/entropy.js index 62b2711..3b62e10 100644 --- a/src/js/entropy.js +++ b/src/js/entropy.js | |||
@@ -16,7 +16,136 @@ | |||
16 | 16 | ||
17 | window.Entropy = new (function() { | 17 | window.Entropy = new (function() { |
18 | 18 | ||
19 | var TWO = new libs.BigInteger.BigInteger(2); | 19 | let eventBits = { |
20 | |||
21 | "binary": { | ||
22 | "0": "0", | ||
23 | "1": "1", | ||
24 | }, | ||
25 | |||
26 | // log2(6) = 2.58496 bits per roll, with bias | ||
27 | // 4 rolls give 2 bits each | ||
28 | // 2 rolls give 1 bit each | ||
29 | // Average (4*2 + 2*1) / 6 = 1.66 bits per roll without bias | ||
30 | "base 6": { | ||
31 | "0": "00", | ||
32 | "1": "01", | ||
33 | "2": "10", | ||
34 | "3": "11", | ||
35 | "4": "0", | ||
36 | "5": "1", | ||
37 | }, | ||
38 | |||
39 | // log2(6) = 2.58496 bits per roll, with bias | ||
40 | // 4 rolls give 2 bits each | ||
41 | // 2 rolls give 1 bit each | ||
42 | // Average (4*2 + 2*1) / 6 = 1.66 bits per roll without bias | ||
43 | "base 6 (dice)": { | ||
44 | "0": "00", // equivalent to 0 in base 6 | ||
45 | "1": "01", | ||
46 | "2": "10", | ||
47 | "3": "11", | ||
48 | "4": "0", | ||
49 | "5": "1", | ||
50 | }, | ||
51 | |||
52 | // log2(10) = 3.321928 bits per digit, with bias | ||
53 | // 8 digits give 3 bits each | ||
54 | // 2 digits give 1 bit each | ||
55 | // Average (8*3 + 2*1) / 10 = 2.6 bits per digit without bias | ||
56 | "base 10": { | ||
57 | "0": "000", | ||
58 | "1": "001", | ||
59 | "2": "010", | ||
60 | "3": "011", | ||
61 | "4": "100", | ||
62 | "5": "101", | ||
63 | "6": "110", | ||
64 | "7": "111", | ||
65 | "8": "0", | ||
66 | "9": "1", | ||
67 | }, | ||
68 | |||
69 | "hexadecimal": { | ||
70 | "0": "0000", | ||
71 | "1": "0001", | ||
72 | "2": "0010", | ||
73 | "3": "0011", | ||
74 | "4": "0100", | ||
75 | "5": "0101", | ||
76 | "6": "0110", | ||
77 | "7": "0111", | ||
78 | "8": "1000", | ||
79 | "9": "1001", | ||
80 | "a": "1010", | ||
81 | "b": "1011", | ||
82 | "c": "1100", | ||
83 | "d": "1101", | ||
84 | "e": "1110", | ||
85 | "f": "1111", | ||
86 | }, | ||
87 | |||
88 | // log2(52) = 5.7004 bits per card, with bias | ||
89 | // 32 cards give 5 bits each | ||
90 | // 16 cards give 4 bits each | ||
91 | // 4 cards give 2 bits each | ||
92 | // Average (32*5 + 16*4 + 4*2) / 52 = 4.46 bits per card without bias | ||
93 | "card": { | ||
94 | "ac": "00000", | ||
95 | "2c": "00001", | ||
96 | "3c": "00010", | ||
97 | "4c": "00011", | ||
98 | "5c": "00100", | ||
99 | "6c": "00101", | ||
100 | "7c": "00110", | ||
101 | "8c": "00111", | ||
102 | "9c": "01000", | ||
103 | "tc": "01001", | ||
104 | "jc": "01010", | ||
105 | "qc": "01011", | ||
106 | "kc": "01100", | ||
107 | "ad": "01101", | ||
108 | "2d": "01110", | ||
109 | "3d": "01111", | ||
110 | "4d": "10000", | ||
111 | "5d": "10001", | ||
112 | "6d": "10010", | ||
113 | "7d": "10011", | ||
114 | "8d": "10100", | ||
115 | "9d": "10101", | ||
116 | "td": "10110", | ||
117 | "jd": "10111", | ||
118 | "qd": "11000", | ||
119 | "kd": "11001", | ||
120 | "ah": "11010", | ||
121 | "2h": "11011", | ||
122 | "3h": "11100", | ||
123 | "4h": "11101", | ||
124 | "5h": "11110", | ||
125 | "6h": "11111", | ||
126 | "7h": "0000", | ||
127 | "8h": "0001", | ||
128 | "9h": "0010", | ||
129 | "th": "0011", | ||
130 | "jh": "0100", | ||
131 | "qh": "0101", | ||
132 | "kh": "0110", | ||
133 | "as": "0111", | ||
134 | "2s": "1000", | ||
135 | "3s": "1001", | ||
136 | "4s": "1010", | ||
137 | "5s": "1011", | ||
138 | "6s": "1100", | ||
139 | "7s": "1101", | ||
140 | "8s": "1110", | ||
141 | "9s": "1111", | ||
142 | "ts": "00", | ||
143 | "js": "01", | ||
144 | "qs": "10", | ||
145 | "ks": "11", | ||
146 | }, | ||
147 | |||
148 | } | ||
20 | 149 | ||
21 | // matchers returns an array of the matched events for each type of entropy. | 150 | // matchers returns an array of the matched events for each type of entropy. |
22 | // eg | 151 | // eg |
@@ -51,48 +180,28 @@ window.Entropy = new (function() { | |||
51 | } | 180 | } |
52 | } | 181 | } |
53 | 182 | ||
54 | // Convert array of cards from ["ac", "4d", "ks"] | ||
55 | // to numbers between 0 and 51 [0, 16, 51] | ||
56 | function convertCardsToInts(cards) { | ||
57 | var ints = []; | ||
58 | var values = "a23456789tjqk"; | ||
59 | var suits = "cdhs"; | ||
60 | for (var i=0; i<cards.length; i++) { | ||
61 | var card = cards[i].toLowerCase(); | ||
62 | var value = card[0]; | ||
63 | var suit = card[1]; | ||
64 | var asInt = 13 * suits.indexOf(suit) + values.indexOf(value); | ||
65 | ints.push(asInt); | ||
66 | } | ||
67 | return ints; | ||
68 | } | ||
69 | |||
70 | this.fromString = function(rawEntropyStr, baseStr) { | 183 | this.fromString = function(rawEntropyStr, baseStr) { |
71 | // Find type of entropy being used (binary, hex, dice etc) | 184 | // Find type of entropy being used (binary, hex, dice etc) |
72 | var base = getBase(rawEntropyStr, baseStr); | 185 | var base = getBase(rawEntropyStr, baseStr); |
73 | // Convert dice to base6 entropy (ie 1-6 to 0-5) | 186 | // Convert dice to base6 entropy (ie 1-6 to 0-5) |
74 | // This is done by changing all 6s to 0s | 187 | // This is done by changing all 6s to 0s |
75 | if (base.str == "dice") { | 188 | if (base.str == "dice") { |
76 | var newParts = []; | 189 | var newEvents = []; |
77 | var newInts = []; | 190 | for (var i=0; i<base.events.length; i++) { |
78 | for (var i=0; i<base.parts.length; i++) { | 191 | var c = base.events[i]; |
79 | var c = base.parts[i]; | ||
80 | if ("12345".indexOf(c) > -1) { | 192 | if ("12345".indexOf(c) > -1) { |
81 | newParts[i] = base.parts[i]; | 193 | newEvents[i] = base.events[i]; |
82 | newInts[i] = base.ints[i]; | ||
83 | } | 194 | } |
84 | else { | 195 | else { |
85 | newParts[i] = "0"; | 196 | newEvents[i] = "0"; |
86 | newInts[i] = 0; | ||
87 | } | 197 | } |
88 | } | 198 | } |
89 | base.str = "base 6 (dice)"; | 199 | base.str = "base 6 (dice)"; |
90 | base.ints = newInts; | 200 | base.events = newEvents; |
91 | base.parts = newParts; | ||
92 | base.matcher = matchers.base6; | 201 | base.matcher = matchers.base6; |
93 | } | 202 | } |
94 | // Detect empty entropy | 203 | // Detect empty entropy |
95 | if (base.parts.length == 0) { | 204 | if (base.events.length == 0) { |
96 | return { | 205 | return { |
97 | binaryStr: "", | 206 | binaryStr: "", |
98 | cleanStr: "", | 207 | cleanStr: "", |
@@ -100,44 +209,23 @@ window.Entropy = new (function() { | |||
100 | base: base, | 209 | base: base, |
101 | }; | 210 | }; |
102 | } | 211 | } |
103 | // Convert base.ints to BigInteger. | 212 | // Convert entropy events to binary |
104 | // Due to using unusual bases, eg cards of base52, this is not as simple as | 213 | var entropyBin = base.events.map(function(e) { |
105 | // using BigInteger.parse() | 214 | return eventBits[base.str][e.toLowerCase()]; |
106 | var entropyInt = libs.BigInteger.BigInteger.ZERO; | 215 | }).join(""); |
107 | for (var i=base.ints.length-1; i>=0; i--) { | 216 | // Get average bits per event |
108 | var thisInt = libs.BigInteger.BigInteger.parse(base.ints[i]); | 217 | // which may be adjusted for bias if log2(base) is fractional |
109 | var power = (base.ints.length - 1) - i; | 218 | var bitsPerEvent = base.bitsPerEvent; |
110 | var additionalEntropy = libs.BigInteger.BigInteger.parse(base.asInt).pow(power).multiply(thisInt); | ||
111 | entropyInt = entropyInt.add(additionalEntropy); | ||
112 | } | ||
113 | // Convert entropy to binary | ||
114 | var entropyBin = entropyInt.toString(2); | ||
115 | // If the first integer is small, it must be padded with zeros. | ||
116 | // Otherwise the chance of the first bit being 1 is 100%, which is | ||
117 | // obviously incorrect. | ||
118 | // This is not perfect for non-2^n bases. | ||
119 | var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt)); | ||
120 | while (entropyBin.length < expectedBits) { | ||
121 | entropyBin = "0" + entropyBin; | ||
122 | } | ||
123 | // Calculate the number of bits per event | ||
124 | var bitsPerEvent = Math.log2(base.asInt); | ||
125 | // Cards binary must be handled differently, since they're not replaced | ||
126 | if (base.asInt == 52) { | ||
127 | var cardEntropy = processCardEntropy(base.parts); | ||
128 | entropyBin = cardEntropy.binaryStr; | ||
129 | bitsPerEvent = cardEntropy.bitsPerEvent; | ||
130 | } | ||
131 | // Supply a 'filtered' entropy string for display purposes | 219 | // Supply a 'filtered' entropy string for display purposes |
132 | var entropyClean = base.parts.join(""); | 220 | var entropyClean = base.events.join(""); |
133 | var entropyHtml = base.parts.join(""); | 221 | var entropyHtml = base.events.join(""); |
134 | if (base.asInt == 52) { | 222 | if (base.asInt == 52) { |
135 | entropyClean = base.parts.join(" ").toUpperCase(); | 223 | entropyClean = base.events.join(" ").toUpperCase(); |
136 | entropyClean = entropyClean.replace(/C/g, "\u2663"); | 224 | entropyClean = entropyClean.replace(/C/g, "\u2663"); |
137 | entropyClean = entropyClean.replace(/D/g, "\u2666"); | 225 | entropyClean = entropyClean.replace(/D/g, "\u2666"); |
138 | entropyClean = entropyClean.replace(/H/g, "\u2665"); | 226 | entropyClean = entropyClean.replace(/H/g, "\u2665"); |
139 | entropyClean = entropyClean.replace(/S/g, "\u2660"); | 227 | entropyClean = entropyClean.replace(/S/g, "\u2660"); |
140 | entropyHtml = base.parts.join(" ").toUpperCase(); | 228 | entropyHtml = base.events.join(" ").toUpperCase(); |
141 | entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>"); | 229 | entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>"); |
142 | entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>"); | 230 | entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>"); |
143 | entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>"); | 231 | entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>"); |
@@ -154,18 +242,6 @@ window.Entropy = new (function() { | |||
154 | return e; | 242 | return e; |
155 | } | 243 | } |
156 | 244 | ||
157 | function getSortedDeck() { | ||
158 | var s = []; | ||
159 | var suits = "CDHS"; | ||
160 | var values = "A23456789TJQK"; | ||
161 | for (var i=0; i<suits.length; i++) { | ||
162 | for (var j=0; j<values.length; j++) { | ||
163 | s.push(values[j]+suits[i]); | ||
164 | } | ||
165 | } | ||
166 | return s; | ||
167 | } | ||
168 | |||
169 | function getBase(str, baseStr) { | 245 | function getBase(str, baseStr) { |
170 | // Need to get the lowest base for the supplied entropy. | 246 | // Need to get the lowest base for the supplied entropy. |
171 | // This prevents interpreting, say, dice rolls as hexadecimal. | 247 | // This prevents interpreting, say, dice rolls as hexadecimal. |
@@ -177,20 +253,21 @@ window.Entropy = new (function() { | |||
177 | var ints = binaryMatches.map(function(i) { return parseInt(i, 2) }); | 253 | var ints = binaryMatches.map(function(i) { return parseInt(i, 2) }); |
178 | return { | 254 | return { |
179 | ints: ints, | 255 | ints: ints, |
180 | parts: binaryMatches, | 256 | events: binaryMatches, |
181 | matcher: matchers.binary, | 257 | matcher: matchers.binary, |
182 | asInt: 2, | 258 | asInt: 2, |
259 | bitsPerEvent: 1, | ||
183 | str: "binary", | 260 | str: "binary", |
184 | } | 261 | } |
185 | } | 262 | } |
186 | var cardMatches = matchers.card(str); | 263 | var cardMatches = matchers.card(str); |
187 | if ((cardMatches.length >= hexMatches.length / 2 && autodetect) || baseStr === "card") { | 264 | if ((cardMatches.length >= hexMatches.length / 2 && autodetect) || baseStr === "card") { |
188 | var ints = convertCardsToInts(cardMatches); | ||
189 | return { | 265 | return { |
190 | ints: ints, | 266 | ints: ints, |
191 | parts: cardMatches, | 267 | events: cardMatches, |
192 | matcher: matchers.card, | 268 | matcher: matchers.card, |
193 | asInt: 52, | 269 | asInt: 52, |
270 | bitsPerEvent: (32*5 + 16*4 + 4*2) / 52, // see cardBits | ||
194 | str: "card", | 271 | str: "card", |
195 | } | 272 | } |
196 | } | 273 | } |
@@ -199,9 +276,10 @@ window.Entropy = new (function() { | |||
199 | var ints = diceMatches.map(function(i) { return parseInt(i) }); | 276 | var ints = diceMatches.map(function(i) { return parseInt(i) }); |
200 | return { | 277 | return { |
201 | ints: ints, | 278 | ints: ints, |
202 | parts: diceMatches, | 279 | events: diceMatches, |
203 | matcher: matchers.dice, | 280 | matcher: matchers.dice, |
204 | asInt: 6, | 281 | asInt: 6, |
282 | bitsPerEvent: (4*2 + 2*1) / 6, // see diceBits | ||
205 | str: "dice", | 283 | str: "dice", |
206 | } | 284 | } |
207 | } | 285 | } |
@@ -210,9 +288,10 @@ window.Entropy = new (function() { | |||
210 | var ints = base6Matches.map(function(i) { return parseInt(i) }); | 288 | var ints = base6Matches.map(function(i) { return parseInt(i) }); |
211 | return { | 289 | return { |
212 | ints: ints, | 290 | ints: ints, |
213 | parts: base6Matches, | 291 | events: base6Matches, |
214 | matcher: matchers.base6, | 292 | matcher: matchers.base6, |
215 | asInt: 6, | 293 | asInt: 6, |
294 | bitsPerEvent: (4*2 + 2*1) / 6, // see diceBits | ||
216 | str: "base 6", | 295 | str: "base 6", |
217 | } | 296 | } |
218 | } | 297 | } |
@@ -221,126 +300,22 @@ window.Entropy = new (function() { | |||
221 | var ints = base10Matches.map(function(i) { return parseInt(i) }); | 300 | var ints = base10Matches.map(function(i) { return parseInt(i) }); |
222 | return { | 301 | return { |
223 | ints: ints, | 302 | ints: ints, |
224 | parts: base10Matches, | 303 | events: base10Matches, |
225 | matcher: matchers.base10, | 304 | matcher: matchers.base10, |
226 | asInt: 10, | 305 | asInt: 10, |
306 | bitsPerEvent: (8*3 + 2*1) / 10, // see b10Bits | ||
227 | str: "base 10", | 307 | str: "base 10", |
228 | } | 308 | } |
229 | } | 309 | } |
230 | var ints = hexMatches.map(function(i) { return parseInt(i, 16) }); | 310 | var ints = hexMatches.map(function(i) { return parseInt(i, 16) }); |
231 | return { | 311 | return { |
232 | ints: ints, | 312 | ints: ints, |
233 | parts: hexMatches, | 313 | events: hexMatches, |
234 | matcher: matchers.hex, | 314 | matcher: matchers.hex, |
235 | asInt: 16, | 315 | asInt: 16, |
316 | bitsPerEvent: 4, | ||
236 | str: "hexadecimal", | 317 | str: "hexadecimal", |
237 | } | 318 | } |
238 | } | 319 | } |
239 | 320 | ||
240 | // Assume cards are NOT replaced. | ||
241 | // Additional entropy decreases as more cards are used. This means | ||
242 | // total possible entropy is measured using n!, not base^n. | ||
243 | // eg the second last card can be only one of two, not one of fifty two | ||
244 | // so the added entropy for that card is only one bit at most | ||
245 | function processCardEntropy(cards) { | ||
246 | // Track how many instances of each card have been used, and thus | ||
247 | // how many decks are in use. | ||
248 | var cardCounts = {}; | ||
249 | var numberOfDecks = 0; | ||
250 | // Work out number of decks by max(duplicates) | ||
251 | for (var i=0; i<cards.length; i++) { | ||
252 | // Get the card that was drawn | ||
253 | var cardLower = cards[i]; | ||
254 | var card = cardLower.toUpperCase(); | ||
255 | // Initialize the count for this card if needed | ||
256 | if (!(card in cardCounts)) { | ||
257 | cardCounts[card] = 0; | ||
258 | } | ||
259 | cardCounts[card] += 1; | ||
260 | // See if this is max(duplicates) | ||
261 | if (cardCounts[card] > numberOfDecks) { | ||
262 | numberOfDecks = cardCounts[card]; | ||
263 | } | ||
264 | } | ||
265 | // Work out the total number of bits for this many decks | ||
266 | // See http://crypto.stackexchange.com/q/41886 | ||
267 | var gainedBits = 0; | ||
268 | // Equivalent of Math.log2(factorial(52*numberOfDecks)) | ||
269 | // which becomes infinity for numberOfDecks > 4 | ||
270 | for (var i=1; i<=52*numberOfDecks; i++) { | ||
271 | gainedBits = gainedBits + Math.log2(i); | ||
272 | } | ||
273 | var lostBits = 52 * Math.log2(factorial(numberOfDecks)); | ||
274 | var maxBits = gainedBits - lostBits; | ||
275 | // Convert the drawn cards to a binary representation. | ||
276 | // The exact technique for doing this is unclear. | ||
277 | // See | ||
278 | // http://crypto.stackexchange.com/a/41896 | ||
279 | // "I even doubt that this is well defined (only the average entropy | ||
280 | // is, I believe)." | ||
281 | // See | ||
282 | // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856 | ||
283 | // "The binary representation can be the first log(permutations,2) bits | ||
284 | // of the sha-2 hash of the normalized deck string." | ||
285 | // | ||
286 | // In this specific implementation, the first N bits of the hash of the | ||
287 | // normalized cards string is being used. Uppercase, no spaces; eg | ||
288 | // sha256("AH8DQSTC2H") | ||
289 | var totalCards = numberOfDecks * 52; | ||
290 | var percentUsed = cards.length / totalCards; | ||
291 | // Calculate the average number of bits of entropy for the number of | ||
292 | // cards drawn. | ||
293 | var numberOfBits = Math.floor(maxBits * percentUsed); | ||
294 | // Create a normalized string of the selected cards | ||
295 | var normalizedCards = cards.join("").toUpperCase(); | ||
296 | // Convert to binary using the SHA256 hash of the normalized cards. | ||
297 | // If the number of bits is more than 256, multiple hashes | ||
298 | // are used until the required number of bits is reached. | ||
299 | var entropyBin = ""; | ||
300 | var iterations = 0; | ||
301 | while (entropyBin.length < numberOfBits) { | ||
302 | var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations); | ||
303 | var hashHex = sjcl.codec.hex.fromBits(hashedCards); | ||
304 | for (var i=0; i<hashHex.length; i++) { | ||
305 | var decimal = parseInt(hashHex[i], 16); | ||
306 | var binary = decimal.toString(2); | ||
307 | while (binary.length < 4) { | ||
308 | binary = "0" + binary; | ||
309 | } | ||
310 | entropyBin = entropyBin + binary; | ||
311 | } | ||
312 | iterations = iterations + 1; | ||
313 | } | ||
314 | // Truncate to the appropriate number of bits. | ||
315 | entropyBin = entropyBin.substring(0, numberOfBits); | ||
316 | // Get the number of bits per event | ||
317 | bitsPerEvent = maxBits / totalCards; | ||
318 | return { | ||
319 | binaryStr: entropyBin, | ||
320 | bitsPerEvent: bitsPerEvent, | ||
321 | } | ||
322 | } | ||
323 | |||
324 | // Polyfill for Math.log2 | ||
325 | // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill | ||
326 | Math.log2 = Math.log2 || function(x) { | ||
327 | // The polyfill isn't good enough because of the poor accuracy of | ||
328 | // Math.LOG2E | ||
329 | // log2(8) gave 2.9999999999999996 which when floored causes issues. | ||
330 | // So instead use the BigInteger library to get it right. | ||
331 | return libs.BigInteger.BigInteger.log(x) / libs.BigInteger.BigInteger.log(2); | ||
332 | }; | ||
333 | |||
334 | // Depends on BigInteger | ||
335 | function factorial(n) { | ||
336 | if (n == 0) { | ||
337 | return 1; | ||
338 | } | ||
339 | f = libs.BigInteger.BigInteger.ONE; | ||
340 | for (var i=1; i<=n; i++) { | ||
341 | f = f.multiply(new libs.BigInteger.BigInteger(i)); | ||
342 | } | ||
343 | return f; | ||
344 | } | ||
345 | |||
346 | })(); | 321 | })(); |
diff --git a/src/js/eos-util.js b/src/js/eos-util.js index 2be3004..d0f02fd 100644 --- a/src/js/eos-util.js +++ b/src/js/eos-util.js | |||
@@ -1,7414 +1,17 @@ | |||
1 | (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.eosUtil = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ | 1 | function EOSbufferToPublic(pubBuf) { |
2 | const createHash = require("create-hash"); | 2 | const Buffer = libs.buffer.Buffer; |
3 | const base58 = require("bs58"); | ||
4 | const { Buffer } = require("buffer"); | ||
5 | |||
6 | function bufferToPublic(pubBuf) { | ||
7 | const EOS_PUBLIC_PREFIX = "EOS"; | 3 | const EOS_PUBLIC_PREFIX = "EOS"; |
8 | let checksum = new createHash("rmd160").update(pubBuf).digest("hex").slice(0, 8); | 4 | let checksum = libs.createHash("rmd160").update(pubBuf).digest("hex").slice(0, 8); |
9 | pubBuf = Buffer.concat([pubBuf, Buffer.from(checksum, "hex")]); | 5 | pubBuf = Buffer.concat([pubBuf, Buffer.from(checksum, "hex")]); |
10 | return EOS_PUBLIC_PREFIX.concat(base58.encode(pubBuf)); | 6 | return EOS_PUBLIC_PREFIX.concat(libs.bs58.encode(pubBuf)); |
11 | } | 7 | } |
12 | 8 | ||
13 | function bufferToPrivate(privBuf) { | 9 | function EOSbufferToPrivate(privBuf) { |
10 | const Buffer = libs.buffer.Buffer; | ||
14 | const EOS_PRIVATE_PREFIX = "80"; | 11 | const EOS_PRIVATE_PREFIX = "80"; |
15 | privBuf = Buffer.concat([Buffer.from(EOS_PRIVATE_PREFIX, "hex"), privBuf]); | 12 | privBuf = Buffer.concat([Buffer.from(EOS_PRIVATE_PREFIX, "hex"), privBuf]); |
16 | let tmp = new createHash("sha256").update(privBuf).digest(); | 13 | let tmp = libs.createHash("sha256").update(privBuf).digest(); |
17 | let checksum = new createHash("sha256").update(tmp).digest("hex").slice(0, 8); | 14 | let checksum = libs.createHash("sha256").update(tmp).digest("hex").slice(0, 8); |
18 | privBuf = Buffer.concat([privBuf, Buffer.from(checksum, "hex")]); | 15 | privBuf = Buffer.concat([privBuf, Buffer.from(checksum, "hex")]); |
19 | return base58.encode(privBuf); | 16 | return libs.bs58.encode(privBuf); |
20 | } | ||
21 | |||
22 | module.exports = { | ||
23 | bufferToPublic: bufferToPublic, | ||
24 | bufferToPrivate: bufferToPrivate, | ||
25 | }; | ||
26 | |||
27 | },{"bs58":5,"buffer":6,"create-hash":9}],2:[function(require,module,exports){ | ||
28 | // base-x encoding / decoding | ||
29 | // Copyright (c) 2018 base-x contributors | ||
30 | // Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp) | ||
31 | // Distributed under the MIT software license, see the accompanying | ||
32 | // file LICENSE or http://www.opensource.org/licenses/mit-license.php. | ||
33 | |||
34 | const Buffer = require('safe-buffer').Buffer | ||
35 | |||
36 | module.exports = function base (ALPHABET) { | ||
37 | if (ALPHABET.length >= 255) throw new TypeError('Alphabet too long') | ||
38 | |||
39 | const BASE_MAP = new Uint8Array(256) | ||
40 | BASE_MAP.fill(255) | ||
41 | |||
42 | for (let i = 0; i < ALPHABET.length; i++) { | ||
43 | const x = ALPHABET.charAt(i) | ||
44 | const xc = x.charCodeAt(0) | ||
45 | |||
46 | if (BASE_MAP[xc] !== 255) throw new TypeError(x + ' is ambiguous') | ||
47 | BASE_MAP[xc] = i | ||
48 | } | ||
49 | |||
50 | const BASE = ALPHABET.length | ||
51 | const LEADER = ALPHABET.charAt(0) | ||
52 | const FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up | ||
53 | const iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up | ||
54 | |||
55 | function encode (source) { | ||
56 | if (!Buffer.isBuffer(source)) throw new TypeError('Expected Buffer') | ||
57 | if (source.length === 0) return '' | ||
58 | |||
59 | // Skip & count leading zeroes. | ||
60 | let zeroes = 0 | ||
61 | let length = 0 | ||
62 | let pbegin = 0 | ||
63 | const pend = source.length | ||
64 | |||
65 | while (pbegin !== pend && source[pbegin] === 0) { | ||
66 | pbegin++ | ||
67 | zeroes++ | ||
68 | } | ||
69 | |||
70 | // Allocate enough space in big-endian base58 representation. | ||
71 | const size = ((pend - pbegin) * iFACTOR + 1) >>> 0 | ||
72 | const b58 = new Uint8Array(size) | ||
73 | |||
74 | // Process the bytes. | ||
75 | while (pbegin !== pend) { | ||
76 | let carry = source[pbegin] | ||
77 | |||
78 | // Apply "b58 = b58 * 256 + ch". | ||
79 | let i = 0 | ||
80 | for (let it = size - 1; (carry !== 0 || i < length) && (it !== -1); it--, i++) { | ||
81 | carry += (256 * b58[it]) >>> 0 | ||
82 | b58[it] = (carry % BASE) >>> 0 | ||
83 | carry = (carry / BASE) >>> 0 | ||
84 | } | ||
85 | |||
86 | if (carry !== 0) throw new Error('Non-zero carry') | ||
87 | length = i | ||
88 | pbegin++ | ||
89 | } | ||
90 | |||
91 | // Skip leading zeroes in base58 result. | ||
92 | let it = size - length | ||
93 | while (it !== size && b58[it] === 0) { | ||
94 | it++ | ||
95 | } | ||
96 | |||
97 | // Translate the result into a string. | ||
98 | let str = LEADER.repeat(zeroes) | ||
99 | for (; it < size; ++it) str += ALPHABET.charAt(b58[it]) | ||
100 | |||
101 | return str | ||
102 | } | ||
103 | |||
104 | function decodeUnsafe (source) { | ||
105 | if (typeof source !== 'string') throw new TypeError('Expected String') | ||
106 | if (source.length === 0) return Buffer.alloc(0) | ||
107 | |||
108 | let psz = 0 | ||
109 | |||
110 | // Skip leading spaces. | ||
111 | if (source[psz] === ' ') return | ||
112 | |||
113 | // Skip and count leading '1's. | ||
114 | let zeroes = 0 | ||
115 | let length = 0 | ||
116 | while (source[psz] === LEADER) { | ||
117 | zeroes++ | ||
118 | psz++ | ||
119 | } | ||
120 | |||
121 | // Allocate enough space in big-endian base256 representation. | ||
122 | const size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up. | ||
123 | const b256 = new Uint8Array(size) | ||
124 | |||
125 | // Process the characters. | ||
126 | while (source[psz]) { | ||
127 | // Decode character | ||
128 | let carry = BASE_MAP[source.charCodeAt(psz)] | ||
129 | |||
130 | // Invalid character | ||
131 | if (carry === 255) return | ||
132 | |||
133 | let i = 0 | ||
134 | for (let it = size - 1; (carry !== 0 || i < length) && (it !== -1); it--, i++) { | ||
135 | carry += (BASE * b256[it]) >>> 0 | ||
136 | b256[it] = (carry % 256) >>> 0 | ||
137 | carry = (carry / 256) >>> 0 | ||
138 | } | ||
139 | |||
140 | if (carry !== 0) throw new Error('Non-zero carry') | ||
141 | length = i | ||
142 | psz++ | ||
143 | } | ||
144 | |||
145 | // Skip trailing spaces. | ||
146 | if (source[psz] === ' ') return | ||
147 | |||
148 | // Skip leading zeroes in b256. | ||
149 | let it = size - length | ||
150 | while (it !== size && b256[it] === 0) { | ||
151 | it++ | ||
152 | } | ||
153 | |||
154 | const vch = Buffer.allocUnsafe(zeroes + (size - it)) | ||
155 | vch.fill(0x00, 0, zeroes) | ||
156 | |||
157 | let j = zeroes | ||
158 | while (it !== size) { | ||
159 | vch[j++] = b256[it++] | ||
160 | } | ||
161 | |||
162 | return vch | ||
163 | } | ||
164 | |||
165 | function decode (string) { | ||
166 | const buffer = decodeUnsafe(string) | ||
167 | if (buffer) return buffer | ||
168 | |||
169 | throw new Error('Non-base' + BASE + ' character') | ||
170 | } | ||
171 | |||
172 | return { | ||
173 | encode: encode, | ||
174 | decodeUnsafe: decodeUnsafe, | ||
175 | decode: decode | ||
176 | } | ||
177 | } | ||
178 | |||
179 | },{"safe-buffer":34}],3:[function(require,module,exports){ | ||
180 | 'use strict' | ||
181 | |||
182 | exports.byteLength = byteLength | ||
183 | exports.toByteArray = toByteArray | ||
184 | exports.fromByteArray = fromByteArray | ||
185 | |||
186 | var lookup = [] | ||
187 | var revLookup = [] | ||
188 | var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array | ||
189 | |||
190 | var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' | ||
191 | for (var i = 0, len = code.length; i < len; ++i) { | ||
192 | lookup[i] = code[i] | ||
193 | revLookup[code.charCodeAt(i)] = i | ||
194 | } | ||
195 | |||
196 | // Support decoding URL-safe base64 strings, as Node.js does. | ||
197 | // See: https://en.wikipedia.org/wiki/Base64#URL_applications | ||
198 | revLookup['-'.charCodeAt(0)] = 62 | ||
199 | revLookup['_'.charCodeAt(0)] = 63 | ||
200 | |||
201 | function getLens (b64) { | ||
202 | var len = b64.length | ||
203 | |||
204 | if (len % 4 > 0) { | ||
205 | throw new Error('Invalid string. Length must be a multiple of 4') | ||
206 | } | ||
207 | |||
208 | // Trim off extra bytes after placeholder bytes are found | ||
209 | // See: https://github.com/beatgammit/base64-js/issues/42 | ||
210 | var validLen = b64.indexOf('=') | ||
211 | if (validLen === -1) validLen = len | ||
212 | |||
213 | var placeHoldersLen = validLen === len | ||
214 | ? 0 | ||
215 | : 4 - (validLen % 4) | ||
216 | |||
217 | return [validLen, placeHoldersLen] | ||
218 | } | ||
219 | |||
220 | // base64 is 4/3 + up to two characters of the original data | ||
221 | function byteLength (b64) { | ||
222 | var lens = getLens(b64) | ||
223 | var validLen = lens[0] | ||
224 | var placeHoldersLen = lens[1] | ||
225 | return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen | ||
226 | } | ||
227 | |||
228 | function _byteLength (b64, validLen, placeHoldersLen) { | ||
229 | return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen | ||
230 | } | ||
231 | |||
232 | function toByteArray (b64) { | ||
233 | var tmp | ||
234 | var lens = getLens(b64) | ||
235 | var validLen = lens[0] | ||
236 | var placeHoldersLen = lens[1] | ||
237 | |||
238 | var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) | ||
239 | |||
240 | var curByte = 0 | ||
241 | |||
242 | // if there are placeholders, only get up to the last complete 4 chars | ||
243 | var len = placeHoldersLen > 0 | ||
244 | ? validLen - 4 | ||
245 | : validLen | ||
246 | |||
247 | for (var i = 0; i < len; i += 4) { | ||
248 | tmp = | ||
249 | (revLookup[b64.charCodeAt(i)] << 18) | | ||
250 | (revLookup[b64.charCodeAt(i + 1)] << 12) | | ||
251 | (revLookup[b64.charCodeAt(i + 2)] << 6) | | ||
252 | revLookup[b64.charCodeAt(i + 3)] | ||
253 | arr[curByte++] = (tmp >> 16) & 0xFF | ||
254 | arr[curByte++] = (tmp >> 8) & 0xFF | ||
255 | arr[curByte++] = tmp & 0xFF | ||
256 | } | ||
257 | |||
258 | if (placeHoldersLen === 2) { | ||
259 | tmp = | ||
260 | (revLookup[b64.charCodeAt(i)] << 2) | | ||
261 | (revLookup[b64.charCodeAt(i + 1)] >> 4) | ||
262 | arr[curByte++] = tmp & 0xFF | ||
263 | } | ||
264 | |||
265 | if (placeHoldersLen === 1) { | ||
266 | tmp = | ||
267 | (revLookup[b64.charCodeAt(i)] << 10) | | ||
268 | (revLookup[b64.charCodeAt(i + 1)] << 4) | | ||
269 | (revLookup[b64.charCodeAt(i + 2)] >> 2) | ||
270 | arr[curByte++] = (tmp >> 8) & 0xFF | ||
271 | arr[curByte++] = tmp & 0xFF | ||
272 | } | ||
273 | |||
274 | return arr | ||
275 | } | ||
276 | |||
277 | function tripletToBase64 (num) { | ||
278 | return lookup[num >> 18 & 0x3F] + | ||
279 | lookup[num >> 12 & 0x3F] + | ||
280 | lookup[num >> 6 & 0x3F] + | ||
281 | lookup[num & 0x3F] | ||
282 | } | ||
283 | |||
284 | function encodeChunk (uint8, start, end) { | ||
285 | var tmp | ||
286 | var output = [] | ||
287 | for (var i = start; i < end; i += 3) { | ||
288 | tmp = | ||
289 | ((uint8[i] << 16) & 0xFF0000) + | ||
290 | ((uint8[i + 1] << 8) & 0xFF00) + | ||
291 | (uint8[i + 2] & 0xFF) | ||
292 | output.push(tripletToBase64(tmp)) | ||
293 | } | ||
294 | return output.join('') | ||
295 | } | ||
296 | |||
297 | function fromByteArray (uint8) { | ||
298 | var tmp | ||
299 | var len = uint8.length | ||
300 | var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes | ||
301 | var parts = [] | ||
302 | var maxChunkLength = 16383 // must be multiple of 3 | ||
303 | |||
304 | // go through the array every three bytes, we'll deal with trailing stuff later | ||
305 | for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { | ||
306 | parts.push(encodeChunk( | ||
307 | uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) | ||
308 | )) | ||
309 | } | ||
310 | |||
311 | // pad the end with zeros, but make sure to not forget the extra bytes | ||
312 | if (extraBytes === 1) { | ||
313 | tmp = uint8[len - 1] | ||
314 | parts.push( | ||
315 | lookup[tmp >> 2] + | ||
316 | lookup[(tmp << 4) & 0x3F] + | ||
317 | '==' | ||
318 | ) | ||
319 | } else if (extraBytes === 2) { | ||
320 | tmp = (uint8[len - 2] << 8) + uint8[len - 1] | ||
321 | parts.push( | ||
322 | lookup[tmp >> 10] + | ||
323 | lookup[(tmp >> 4) & 0x3F] + | ||
324 | lookup[(tmp << 2) & 0x3F] + | ||
325 | '=' | ||
326 | ) | ||
327 | } | ||
328 | |||
329 | return parts.join('') | ||
330 | } | ||
331 | |||
332 | },{}],4:[function(require,module,exports){ | ||
333 | |||
334 | },{}],5:[function(require,module,exports){ | ||
335 | var basex = require('base-x') | ||
336 | var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' | ||
337 | |||
338 | module.exports = basex(ALPHABET) | ||
339 | |||
340 | },{"base-x":2}],6:[function(require,module,exports){ | ||
341 | (function (Buffer){ | ||
342 | /*! | ||
343 | * The buffer module from node.js, for the browser. | ||
344 | * | ||
345 | * @author Feross Aboukhadijeh <https://feross.org> | ||
346 | * @license MIT | ||
347 | */ | ||
348 | /* eslint-disable no-proto */ | ||
349 | |||
350 | 'use strict' | ||
351 | |||
352 | var base64 = require('base64-js') | ||
353 | var ieee754 = require('ieee754') | ||
354 | |||
355 | exports.Buffer = Buffer | ||
356 | exports.SlowBuffer = SlowBuffer | ||
357 | exports.INSPECT_MAX_BYTES = 50 | ||
358 | |||
359 | var K_MAX_LENGTH = 0x7fffffff | ||
360 | exports.kMaxLength = K_MAX_LENGTH | ||
361 | |||
362 | /** | ||
363 | * If `Buffer.TYPED_ARRAY_SUPPORT`: | ||
364 | * === true Use Uint8Array implementation (fastest) | ||
365 | * === false Print warning and recommend using `buffer` v4.x which has an Object | ||
366 | * implementation (most compatible, even IE6) | ||
367 | * | ||
368 | * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, | ||
369 | * Opera 11.6+, iOS 4.2+. | ||
370 | * | ||
371 | * We report that the browser does not support typed arrays if the are not subclassable | ||
372 | * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` | ||
373 | * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support | ||
374 | * for __proto__ and has a buggy typed array implementation. | ||
375 | */ | ||
376 | Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() | ||
377 | |||
378 | if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && | ||
379 | typeof console.error === 'function') { | ||
380 | console.error( | ||
381 | 'This browser lacks typed array (Uint8Array) support which is required by ' + | ||
382 | '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' | ||
383 | ) | ||
384 | } | ||
385 | |||
386 | function typedArraySupport () { | ||
387 | // Can typed array instances can be augmented? | ||
388 | try { | ||
389 | var arr = new Uint8Array(1) | ||
390 | arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } } | ||
391 | return arr.foo() === 42 | ||
392 | } catch (e) { | ||
393 | return false | ||
394 | } | ||
395 | } | ||
396 | |||
397 | Object.defineProperty(Buffer.prototype, 'parent', { | ||
398 | enumerable: true, | ||
399 | get: function () { | ||
400 | if (!Buffer.isBuffer(this)) return undefined | ||
401 | return this.buffer | ||
402 | } | ||
403 | }) | ||
404 | |||
405 | Object.defineProperty(Buffer.prototype, 'offset', { | ||
406 | enumerable: true, | ||
407 | get: function () { | ||
408 | if (!Buffer.isBuffer(this)) return undefined | ||
409 | return this.byteOffset | ||
410 | } | ||
411 | }) | ||
412 | |||
413 | function createBuffer (length) { | ||
414 | if (length > K_MAX_LENGTH) { | ||
415 | throw new RangeError('The value "' + length + '" is invalid for option "size"') | ||
416 | } | ||
417 | // Return an augmented `Uint8Array` instance | ||
418 | var buf = new Uint8Array(length) | ||
419 | buf.__proto__ = Buffer.prototype | ||
420 | return buf | ||
421 | } | ||
422 | |||
423 | /** | ||
424 | * The Buffer constructor returns instances of `Uint8Array` that have their | ||
425 | * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of | ||
426 | * `Uint8Array`, so the returned instances will have all the node `Buffer` methods | ||
427 | * and the `Uint8Array` methods. Square bracket notation works as expected -- it | ||
428 | * returns a single octet. | ||
429 | * | ||
430 | * The `Uint8Array` prototype remains unmodified. | ||
431 | */ | ||
432 | |||
433 | function Buffer (arg, encodingOrOffset, length) { | ||
434 | // Common case. | ||
435 | if (typeof arg === 'number') { | ||
436 | if (typeof encodingOrOffset === 'string') { | ||
437 | throw new TypeError( | ||
438 | 'The "string" argument must be of type string. Received type number' | ||
439 | ) | ||
440 | } | ||
441 | return allocUnsafe(arg) | ||
442 | } | ||
443 | return from(arg, encodingOrOffset, length) | ||
444 | } | ||
445 | |||
446 | // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 | ||
447 | if (typeof Symbol !== 'undefined' && Symbol.species != null && | ||
448 | Buffer[Symbol.species] === Buffer) { | ||
449 | Object.defineProperty(Buffer, Symbol.species, { | ||
450 | value: null, | ||
451 | configurable: true, | ||
452 | enumerable: false, | ||
453 | writable: false | ||
454 | }) | ||
455 | } | ||
456 | |||
457 | Buffer.poolSize = 8192 // not used by this implementation | ||
458 | |||
459 | function from (value, encodingOrOffset, length) { | ||
460 | if (typeof value === 'string') { | ||
461 | return fromString(value, encodingOrOffset) | ||
462 | } | ||
463 | |||
464 | if (ArrayBuffer.isView(value)) { | ||
465 | return fromArrayLike(value) | ||
466 | } | ||
467 | |||
468 | if (value == null) { | ||
469 | throw TypeError( | ||
470 | 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + | ||
471 | 'or Array-like Object. Received type ' + (typeof value) | ||
472 | ) | ||
473 | } | ||
474 | |||
475 | if (isInstance(value, ArrayBuffer) || | ||
476 | (value && isInstance(value.buffer, ArrayBuffer))) { | ||
477 | return fromArrayBuffer(value, encodingOrOffset, length) | ||
478 | } | ||
479 | |||
480 | if (typeof value === 'number') { | ||
481 | throw new TypeError( | ||
482 | 'The "value" argument must not be of type number. Received type number' | ||
483 | ) | ||
484 | } | ||
485 | |||
486 | var valueOf = value.valueOf && value.valueOf() | ||
487 | if (valueOf != null && valueOf !== value) { | ||
488 | return Buffer.from(valueOf, encodingOrOffset, length) | ||
489 | } | ||
490 | |||
491 | var b = fromObject(value) | ||
492 | if (b) return b | ||
493 | |||
494 | if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && | ||
495 | typeof value[Symbol.toPrimitive] === 'function') { | ||
496 | return Buffer.from( | ||
497 | value[Symbol.toPrimitive]('string'), encodingOrOffset, length | ||
498 | ) | ||
499 | } | ||
500 | |||
501 | throw new TypeError( | ||
502 | 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + | ||
503 | 'or Array-like Object. Received type ' + (typeof value) | ||
504 | ) | ||
505 | } | ||
506 | |||
507 | /** | ||
508 | * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError | ||
509 | * if value is a number. | ||
510 | * Buffer.from(str[, encoding]) | ||
511 | * Buffer.from(array) | ||
512 | * Buffer.from(buffer) | ||
513 | * Buffer.from(arrayBuffer[, byteOffset[, length]]) | ||
514 | **/ | ||
515 | Buffer.from = function (value, encodingOrOffset, length) { | ||
516 | return from(value, encodingOrOffset, length) | ||
517 | } | ||
518 | |||
519 | // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: | ||
520 | // https://github.com/feross/buffer/pull/148 | ||
521 | Buffer.prototype.__proto__ = Uint8Array.prototype | ||
522 | Buffer.__proto__ = Uint8Array | ||
523 | |||
524 | function assertSize (size) { | ||
525 | if (typeof size !== 'number') { | ||
526 | throw new TypeError('"size" argument must be of type number') | ||
527 | } else if (size < 0) { | ||
528 | throw new RangeError('The value "' + size + '" is invalid for option "size"') | ||
529 | } | ||
530 | } | ||
531 | |||
532 | function alloc (size, fill, encoding) { | ||
533 | assertSize(size) | ||
534 | if (size <= 0) { | ||
535 | return createBuffer(size) | ||
536 | } | ||
537 | if (fill !== undefined) { | ||
538 | // Only pay attention to encoding if it's a string. This | ||
539 | // prevents accidentally sending in a number that would | ||
540 | // be interpretted as a start offset. | ||
541 | return typeof encoding === 'string' | ||
542 | ? createBuffer(size).fill(fill, encoding) | ||
543 | : createBuffer(size).fill(fill) | ||
544 | } | ||
545 | return createBuffer(size) | ||
546 | } | ||
547 | |||
548 | /** | ||
549 | * Creates a new filled Buffer instance. | ||
550 | * alloc(size[, fill[, encoding]]) | ||
551 | **/ | ||
552 | Buffer.alloc = function (size, fill, encoding) { | ||
553 | return alloc(size, fill, encoding) | ||
554 | } | ||
555 | |||
556 | function allocUnsafe (size) { | ||
557 | assertSize(size) | ||
558 | return createBuffer(size < 0 ? 0 : checked(size) | 0) | ||
559 | } | ||
560 | |||
561 | /** | ||
562 | * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. | ||
563 | * */ | ||
564 | Buffer.allocUnsafe = function (size) { | ||
565 | return allocUnsafe(size) | ||
566 | } | ||
567 | /** | ||
568 | * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. | ||
569 | */ | ||
570 | Buffer.allocUnsafeSlow = function (size) { | ||
571 | return allocUnsafe(size) | ||
572 | } | ||
573 | |||
574 | function fromString (string, encoding) { | ||
575 | if (typeof encoding !== 'string' || encoding === '') { | ||
576 | encoding = 'utf8' | ||
577 | } | ||
578 | |||
579 | if (!Buffer.isEncoding(encoding)) { | ||
580 | throw new TypeError('Unknown encoding: ' + encoding) | ||
581 | } | ||
582 | |||
583 | var length = byteLength(string, encoding) | 0 | ||
584 | var buf = createBuffer(length) | ||
585 | |||
586 | var actual = buf.write(string, encoding) | ||
587 | |||
588 | if (actual !== length) { | ||
589 | // Writing a hex string, for example, that contains invalid characters will | ||
590 | // cause everything after the first invalid character to be ignored. (e.g. | ||
591 | // 'abxxcd' will be treated as 'ab') | ||
592 | buf = buf.slice(0, actual) | ||
593 | } | ||
594 | |||
595 | return buf | ||
596 | } | ||
597 | |||
598 | function fromArrayLike (array) { | ||
599 | var length = array.length < 0 ? 0 : checked(array.length) | 0 | ||
600 | var buf = createBuffer(length) | ||
601 | for (var i = 0; i < length; i += 1) { | ||
602 | buf[i] = array[i] & 255 | ||
603 | } | ||
604 | return buf | ||
605 | } | ||
606 | |||
607 | function fromArrayBuffer (array, byteOffset, length) { | ||
608 | if (byteOffset < 0 || array.byteLength < byteOffset) { | ||
609 | throw new RangeError('"offset" is outside of buffer bounds') | ||
610 | } | ||
611 | |||
612 | if (array.byteLength < byteOffset + (length || 0)) { | ||
613 | throw new RangeError('"length" is outside of buffer bounds') | ||
614 | } | ||
615 | |||
616 | var buf | ||
617 | if (byteOffset === undefined && length === undefined) { | ||
618 | buf = new Uint8Array(array) | ||
619 | } else if (length === undefined) { | ||
620 | buf = new Uint8Array(array, byteOffset) | ||
621 | } else { | ||
622 | buf = new Uint8Array(array, byteOffset, length) | ||
623 | } | ||
624 | |||
625 | // Return an augmented `Uint8Array` instance | ||
626 | buf.__proto__ = Buffer.prototype | ||
627 | return buf | ||
628 | } | ||
629 | |||
630 | function fromObject (obj) { | ||
631 | if (Buffer.isBuffer(obj)) { | ||
632 | var len = checked(obj.length) | 0 | ||
633 | var buf = createBuffer(len) | ||
634 | |||
635 | if (buf.length === 0) { | ||
636 | return buf | ||
637 | } | ||
638 | |||
639 | obj.copy(buf, 0, 0, len) | ||
640 | return buf | ||
641 | } | ||
642 | |||
643 | if (obj.length !== undefined) { | ||
644 | if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { | ||
645 | return createBuffer(0) | ||
646 | } | ||
647 | return fromArrayLike(obj) | ||
648 | } | ||
649 | |||
650 | if (obj.type === 'Buffer' && Array.isArray(obj.data)) { | ||
651 | return fromArrayLike(obj.data) | ||
652 | } | ||
653 | } | ||
654 | |||
655 | function checked (length) { | ||
656 | // Note: cannot use `length < K_MAX_LENGTH` here because that fails when | ||
657 | // length is NaN (which is otherwise coerced to zero.) | ||
658 | if (length >= K_MAX_LENGTH) { | ||
659 | throw new RangeError('Attempt to allocate Buffer larger than maximum ' + | ||
660 | 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') | ||
661 | } | ||
662 | return length | 0 | ||
663 | } | ||
664 | |||
665 | function SlowBuffer (length) { | ||
666 | if (+length != length) { // eslint-disable-line eqeqeq | ||
667 | length = 0 | ||
668 | } | ||
669 | return Buffer.alloc(+length) | ||
670 | } | ||
671 | |||
672 | Buffer.isBuffer = function isBuffer (b) { | ||
673 | return b != null && b._isBuffer === true && | ||
674 | b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false | ||
675 | } | ||
676 | |||
677 | Buffer.compare = function compare (a, b) { | ||
678 | if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) | ||
679 | if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) | ||
680 | if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { | ||
681 | throw new TypeError( | ||
682 | 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' | ||
683 | ) | ||
684 | } | ||
685 | |||
686 | if (a === b) return 0 | ||
687 | |||
688 | var x = a.length | ||
689 | var y = b.length | ||
690 | |||
691 | for (var i = 0, len = Math.min(x, y); i < len; ++i) { | ||
692 | if (a[i] !== b[i]) { | ||
693 | x = a[i] | ||
694 | y = b[i] | ||
695 | break | ||
696 | } | ||
697 | } | ||
698 | |||
699 | if (x < y) return -1 | ||
700 | if (y < x) return 1 | ||
701 | return 0 | ||
702 | } | ||
703 | |||
704 | Buffer.isEncoding = function isEncoding (encoding) { | ||
705 | switch (String(encoding).toLowerCase()) { | ||
706 | case 'hex': | ||
707 | case 'utf8': | ||
708 | case 'utf-8': | ||
709 | case 'ascii': | ||
710 | case 'latin1': | ||
711 | case 'binary': | ||
712 | case 'base64': | ||
713 | case 'ucs2': | ||
714 | case 'ucs-2': | ||
715 | case 'utf16le': | ||
716 | case 'utf-16le': | ||
717 | return true | ||
718 | default: | ||
719 | return false | ||
720 | } | ||
721 | } | ||
722 | |||
723 | Buffer.concat = function concat (list, length) { | ||
724 | if (!Array.isArray(list)) { | ||
725 | throw new TypeError('"list" argument must be an Array of Buffers') | ||
726 | } | ||
727 | |||
728 | if (list.length === 0) { | ||
729 | return Buffer.alloc(0) | ||
730 | } | ||
731 | |||
732 | var i | ||
733 | if (length === undefined) { | ||
734 | length = 0 | ||
735 | for (i = 0; i < list.length; ++i) { | ||
736 | length += list[i].length | ||
737 | } | ||
738 | } | ||
739 | |||
740 | var buffer = Buffer.allocUnsafe(length) | ||
741 | var pos = 0 | ||
742 | for (i = 0; i < list.length; ++i) { | ||
743 | var buf = list[i] | ||
744 | if (isInstance(buf, Uint8Array)) { | ||
745 | buf = Buffer.from(buf) | ||
746 | } | ||
747 | if (!Buffer.isBuffer(buf)) { | ||
748 | throw new TypeError('"list" argument must be an Array of Buffers') | ||
749 | } | ||
750 | buf.copy(buffer, pos) | ||
751 | pos += buf.length | ||
752 | } | ||
753 | return buffer | ||
754 | } | ||
755 | |||
756 | function byteLength (string, encoding) { | ||
757 | if (Buffer.isBuffer(string)) { | ||
758 | return string.length | ||
759 | } | ||
760 | if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { | ||
761 | return string.byteLength | ||
762 | } | ||
763 | if (typeof string !== 'string') { | ||
764 | throw new TypeError( | ||
765 | 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + | ||
766 | 'Received type ' + typeof string | ||
767 | ) | ||
768 | } | ||
769 | |||
770 | var len = string.length | ||
771 | var mustMatch = (arguments.length > 2 && arguments[2] === true) | ||
772 | if (!mustMatch && len === 0) return 0 | ||
773 | |||
774 | // Use a for loop to avoid recursion | ||
775 | var loweredCase = false | ||
776 | for (;;) { | ||
777 | switch (encoding) { | ||
778 | case 'ascii': | ||
779 | case 'latin1': | ||
780 | case 'binary': | ||
781 | return len | ||
782 | case 'utf8': | ||
783 | case 'utf-8': | ||
784 | return utf8ToBytes(string).length | ||
785 | case 'ucs2': | ||
786 | case 'ucs-2': | ||
787 | case 'utf16le': | ||
788 | case 'utf-16le': | ||
789 | return len * 2 | ||
790 | case 'hex': | ||
791 | return len >>> 1 | ||
792 | case 'base64': | ||
793 | return base64ToBytes(string).length | ||
794 | default: | ||
795 | if (loweredCase) { | ||
796 | return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 | ||
797 | } | ||
798 | encoding = ('' + encoding).toLowerCase() | ||
799 | loweredCase = true | ||
800 | } | ||
801 | } | ||
802 | } | ||
803 | Buffer.byteLength = byteLength | ||
804 | |||
805 | function slowToString (encoding, start, end) { | ||
806 | var loweredCase = false | ||
807 | |||
808 | // No need to verify that "this.length <= MAX_UINT32" since it's a read-only | ||
809 | // property of a typed array. | ||
810 | |||
811 | // This behaves neither like String nor Uint8Array in that we set start/end | ||
812 | // to their upper/lower bounds if the value passed is out of range. | ||
813 | // undefined is handled specially as per ECMA-262 6th Edition, | ||
814 | // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. | ||
815 | if (start === undefined || start < 0) { | ||
816 | start = 0 | ||
817 | } | ||
818 | // Return early if start > this.length. Done here to prevent potential uint32 | ||
819 | // coercion fail below. | ||
820 | if (start > this.length) { | ||
821 | return '' | ||
822 | } | ||
823 | |||
824 | if (end === undefined || end > this.length) { | ||
825 | end = this.length | ||
826 | } | ||
827 | |||
828 | if (end <= 0) { | ||
829 | return '' | ||
830 | } | ||
831 | |||
832 | // Force coersion to uint32. This will also coerce falsey/NaN values to 0. | ||
833 | end >>>= 0 | ||
834 | start >>>= 0 | ||
835 | |||
836 | if (end <= start) { | ||
837 | return '' | ||
838 | } | ||
839 | |||
840 | if (!encoding) encoding = 'utf8' | ||
841 | |||
842 | while (true) { | ||
843 | switch (encoding) { | ||
844 | case 'hex': | ||
845 | return hexSlice(this, start, end) | ||
846 | |||
847 | case 'utf8': | ||
848 | case 'utf-8': | ||
849 | return utf8Slice(this, start, end) | ||
850 | |||
851 | case 'ascii': | ||
852 | return asciiSlice(this, start, end) | ||
853 | |||
854 | case 'latin1': | ||
855 | case 'binary': | ||
856 | return latin1Slice(this, start, end) | ||
857 | |||
858 | case 'base64': | ||
859 | return base64Slice(this, start, end) | ||
860 | |||
861 | case 'ucs2': | ||
862 | case 'ucs-2': | ||
863 | case 'utf16le': | ||
864 | case 'utf-16le': | ||
865 | return utf16leSlice(this, start, end) | ||
866 | |||
867 | default: | ||
868 | if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) | ||
869 | encoding = (encoding + '').toLowerCase() | ||
870 | loweredCase = true | ||
871 | } | ||
872 | } | ||
873 | } | ||
874 | |||
875 | // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) | ||
876 | // to detect a Buffer instance. It's not possible to use `instanceof Buffer` | ||
877 | // reliably in a browserify context because there could be multiple different | ||
878 | // copies of the 'buffer' package in use. This method works even for Buffer | ||
879 | // instances that were created from another copy of the `buffer` package. | ||
880 | // See: https://github.com/feross/buffer/issues/154 | ||
881 | Buffer.prototype._isBuffer = true | ||
882 | |||
883 | function swap (b, n, m) { | ||
884 | var i = b[n] | ||
885 | b[n] = b[m] | ||
886 | b[m] = i | ||
887 | } | ||
888 | |||
889 | Buffer.prototype.swap16 = function swap16 () { | ||
890 | var len = this.length | ||
891 | if (len % 2 !== 0) { | ||
892 | throw new RangeError('Buffer size must be a multiple of 16-bits') | ||
893 | } | ||
894 | for (var i = 0; i < len; i += 2) { | ||
895 | swap(this, i, i + 1) | ||
896 | } | ||
897 | return this | ||
898 | } | ||
899 | |||
900 | Buffer.prototype.swap32 = function swap32 () { | ||
901 | var len = this.length | ||
902 | if (len % 4 !== 0) { | ||
903 | throw new RangeError('Buffer size must be a multiple of 32-bits') | ||
904 | } | ||
905 | for (var i = 0; i < len; i += 4) { | ||
906 | swap(this, i, i + 3) | ||
907 | swap(this, i + 1, i + 2) | ||
908 | } | ||
909 | return this | ||
910 | } | ||
911 | |||
912 | Buffer.prototype.swap64 = function swap64 () { | ||
913 | var len = this.length | ||
914 | if (len % 8 !== 0) { | ||
915 | throw new RangeError('Buffer size must be a multiple of 64-bits') | ||
916 | } | ||
917 | for (var i = 0; i < len; i += 8) { | ||
918 | swap(this, i, i + 7) | ||
919 | swap(this, i + 1, i + 6) | ||
920 | swap(this, i + 2, i + 5) | ||
921 | swap(this, i + 3, i + 4) | ||
922 | } | ||
923 | return this | ||
924 | } | ||
925 | |||
926 | Buffer.prototype.toString = function toString () { | ||
927 | var length = this.length | ||
928 | if (length === 0) return '' | ||
929 | if (arguments.length === 0) return utf8Slice(this, 0, length) | ||
930 | return slowToString.apply(this, arguments) | ||
931 | } | ||
932 | |||
933 | Buffer.prototype.toLocaleString = Buffer.prototype.toString | ||
934 | |||
935 | Buffer.prototype.equals = function equals (b) { | ||
936 | if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') | ||
937 | if (this === b) return true | ||
938 | return Buffer.compare(this, b) === 0 | ||
939 | } | ||
940 | |||
941 | Buffer.prototype.inspect = function inspect () { | ||
942 | var str = '' | ||
943 | var max = exports.INSPECT_MAX_BYTES | ||
944 | str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() | ||
945 | if (this.length > max) str += ' ... ' | ||
946 | return '<Buffer ' + str + '>' | ||
947 | } | ||
948 | |||
949 | Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { | ||
950 | if (isInstance(target, Uint8Array)) { | ||
951 | target = Buffer.from(target, target.offset, target.byteLength) | ||
952 | } | ||
953 | if (!Buffer.isBuffer(target)) { | ||
954 | throw new TypeError( | ||
955 | 'The "target" argument must be one of type Buffer or Uint8Array. ' + | ||
956 | 'Received type ' + (typeof target) | ||
957 | ) | ||
958 | } | ||
959 | |||
960 | if (start === undefined) { | ||
961 | start = 0 | ||
962 | } | ||
963 | if (end === undefined) { | ||
964 | end = target ? target.length : 0 | ||
965 | } | ||
966 | if (thisStart === undefined) { | ||
967 | thisStart = 0 | ||
968 | } | ||
969 | if (thisEnd === undefined) { | ||
970 | thisEnd = this.length | ||
971 | } | ||
972 | |||
973 | if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { | ||
974 | throw new RangeError('out of range index') | ||
975 | } | ||
976 | |||
977 | if (thisStart >= thisEnd && start >= end) { | ||
978 | return 0 | ||
979 | } | ||
980 | if (thisStart >= thisEnd) { | ||
981 | return -1 | ||
982 | } | ||
983 | if (start >= end) { | ||
984 | return 1 | ||
985 | } | ||
986 | |||
987 | start >>>= 0 | ||
988 | end >>>= 0 | ||
989 | thisStart >>>= 0 | ||
990 | thisEnd >>>= 0 | ||
991 | |||
992 | if (this === target) return 0 | ||
993 | |||
994 | var x = thisEnd - thisStart | ||
995 | var y = end - start | ||
996 | var len = Math.min(x, y) | ||
997 | |||
998 | var thisCopy = this.slice(thisStart, thisEnd) | ||
999 | var targetCopy = target.slice(start, end) | ||
1000 | |||
1001 | for (var i = 0; i < len; ++i) { | ||
1002 | if (thisCopy[i] !== targetCopy[i]) { | ||
1003 | x = thisCopy[i] | ||
1004 | y = targetCopy[i] | ||
1005 | break | ||
1006 | } | ||
1007 | } | ||
1008 | |||
1009 | if (x < y) return -1 | ||
1010 | if (y < x) return 1 | ||
1011 | return 0 | ||
1012 | } | ||
1013 | |||
1014 | // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, | ||
1015 | // OR the last index of `val` in `buffer` at offset <= `byteOffset`. | ||
1016 | // | ||
1017 | // Arguments: | ||
1018 | // - buffer - a Buffer to search | ||
1019 | // - val - a string, Buffer, or number | ||
1020 | // - byteOffset - an index into `buffer`; will be clamped to an int32 | ||
1021 | // - encoding - an optional encoding, relevant is val is a string | ||
1022 | // - dir - true for indexOf, false for lastIndexOf | ||
1023 | function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { | ||
1024 | // Empty buffer means no match | ||
1025 | if (buffer.length === 0) return -1 | ||
1026 | |||
1027 | // Normalize byteOffset | ||
1028 | if (typeof byteOffset === 'string') { | ||
1029 | encoding = byteOffset | ||
1030 | byteOffset = 0 | ||
1031 | } else if (byteOffset > 0x7fffffff) { | ||
1032 | byteOffset = 0x7fffffff | ||
1033 | } else if (byteOffset < -0x80000000) { | ||
1034 | byteOffset = -0x80000000 | ||
1035 | } | ||
1036 | byteOffset = +byteOffset // Coerce to Number. | ||
1037 | if (numberIsNaN(byteOffset)) { | ||
1038 | // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer | ||
1039 | byteOffset = dir ? 0 : (buffer.length - 1) | ||
1040 | } | ||
1041 | |||
1042 | // Normalize byteOffset: negative offsets start from the end of the buffer | ||
1043 | if (byteOffset < 0) byteOffset = buffer.length + byteOffset | ||
1044 | if (byteOffset >= buffer.length) { | ||
1045 | if (dir) return -1 | ||
1046 | else byteOffset = buffer.length - 1 | ||
1047 | } else if (byteOffset < 0) { | ||
1048 | if (dir) byteOffset = 0 | ||
1049 | else return -1 | ||
1050 | } | ||
1051 | |||
1052 | // Normalize val | ||
1053 | if (typeof val === 'string') { | ||
1054 | val = Buffer.from(val, encoding) | ||
1055 | } | ||
1056 | |||
1057 | // Finally, search either indexOf (if dir is true) or lastIndexOf | ||
1058 | if (Buffer.isBuffer(val)) { | ||
1059 | // Special case: looking for empty string/buffer always fails | ||
1060 | if (val.length === 0) { | ||
1061 | return -1 | ||
1062 | } | ||
1063 | return arrayIndexOf(buffer, val, byteOffset, encoding, dir) | ||
1064 | } else if (typeof val === 'number') { | ||
1065 | val = val & 0xFF // Search for a byte value [0-255] | ||
1066 | if (typeof Uint8Array.prototype.indexOf === 'function') { | ||
1067 | if (dir) { | ||
1068 | return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) | ||
1069 | } else { | ||
1070 | return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) | ||
1071 | } | ||
1072 | } | ||
1073 | return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) | ||
1074 | } | ||
1075 | |||
1076 | throw new TypeError('val must be string, number or Buffer') | ||
1077 | } | ||
1078 | |||
1079 | function arrayIndexOf (arr, val, byteOffset, encoding, dir) { | ||
1080 | var indexSize = 1 | ||
1081 | var arrLength = arr.length | ||
1082 | var valLength = val.length | ||
1083 | |||
1084 | if (encoding !== undefined) { | ||
1085 | encoding = String(encoding).toLowerCase() | ||
1086 | if (encoding === 'ucs2' || encoding === 'ucs-2' || | ||
1087 | encoding === 'utf16le' || encoding === 'utf-16le') { | ||
1088 | if (arr.length < 2 || val.length < 2) { | ||
1089 | return -1 | ||
1090 | } | ||
1091 | indexSize = 2 | ||
1092 | arrLength /= 2 | ||
1093 | valLength /= 2 | ||
1094 | byteOffset /= 2 | ||
1095 | } | ||
1096 | } | ||
1097 | |||
1098 | function read (buf, i) { | ||
1099 | if (indexSize === 1) { | ||
1100 | return buf[i] | ||
1101 | } else { | ||
1102 | return buf.readUInt16BE(i * indexSize) | ||
1103 | } | ||
1104 | } | ||
1105 | |||
1106 | var i | ||
1107 | if (dir) { | ||
1108 | var foundIndex = -1 | ||
1109 | for (i = byteOffset; i < arrLength; i++) { | ||
1110 | if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { | ||
1111 | if (foundIndex === -1) foundIndex = i | ||
1112 | if (i - foundIndex + 1 === valLength) return foundIndex * indexSize | ||
1113 | } else { | ||
1114 | if (foundIndex !== -1) i -= i - foundIndex | ||
1115 | foundIndex = -1 | ||
1116 | } | ||
1117 | } | ||
1118 | } else { | ||
1119 | if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength | ||
1120 | for (i = byteOffset; i >= 0; i--) { | ||
1121 | var found = true | ||
1122 | for (var j = 0; j < valLength; j++) { | ||
1123 | if (read(arr, i + j) !== read(val, j)) { | ||
1124 | found = false | ||
1125 | break | ||
1126 | } | ||
1127 | } | ||
1128 | if (found) return i | ||
1129 | } | ||
1130 | } | ||
1131 | |||
1132 | return -1 | ||
1133 | } | ||
1134 | |||
1135 | Buffer.prototype.includes = function includes (val, byteOffset, encoding) { | ||
1136 | return this.indexOf(val, byteOffset, encoding) !== -1 | ||
1137 | } | ||
1138 | |||
1139 | Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { | ||
1140 | return bidirectionalIndexOf(this, val, byteOffset, encoding, true) | ||
1141 | } | ||
1142 | |||
1143 | Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { | ||
1144 | return bidirectionalIndexOf(this, val, byteOffset, encoding, false) | ||
1145 | } | ||
1146 | |||
1147 | function hexWrite (buf, string, offset, length) { | ||
1148 | offset = Number(offset) || 0 | ||
1149 | var remaining = buf.length - offset | ||
1150 | if (!length) { | ||
1151 | length = remaining | ||
1152 | } else { | ||
1153 | length = Number(length) | ||
1154 | if (length > remaining) { | ||
1155 | length = remaining | ||
1156 | } | ||
1157 | } | ||
1158 | |||
1159 | var strLen = string.length | ||
1160 | |||
1161 | if (length > strLen / 2) { | ||
1162 | length = strLen / 2 | ||
1163 | } | ||
1164 | for (var i = 0; i < length; ++i) { | ||
1165 | var parsed = parseInt(string.substr(i * 2, 2), 16) | ||
1166 | if (numberIsNaN(parsed)) return i | ||
1167 | buf[offset + i] = parsed | ||
1168 | } | ||
1169 | return i | ||
1170 | } | ||
1171 | |||
1172 | function utf8Write (buf, string, offset, length) { | ||
1173 | return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) | ||
1174 | } | ||
1175 | |||
1176 | function asciiWrite (buf, string, offset, length) { | ||
1177 | return blitBuffer(asciiToBytes(string), buf, offset, length) | ||
1178 | } | ||
1179 | |||
1180 | function latin1Write (buf, string, offset, length) { | ||
1181 | return asciiWrite(buf, string, offset, length) | ||
1182 | } | ||
1183 | |||
1184 | function base64Write (buf, string, offset, length) { | ||
1185 | return blitBuffer(base64ToBytes(string), buf, offset, length) | ||
1186 | } | ||
1187 | |||
1188 | function ucs2Write (buf, string, offset, length) { | ||
1189 | return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) | ||
1190 | } | ||
1191 | |||
1192 | Buffer.prototype.write = function write (string, offset, length, encoding) { | ||
1193 | // Buffer#write(string) | ||
1194 | if (offset === undefined) { | ||
1195 | encoding = 'utf8' | ||
1196 | length = this.length | ||
1197 | offset = 0 | ||
1198 | // Buffer#write(string, encoding) | ||
1199 | } else if (length === undefined && typeof offset === 'string') { | ||
1200 | encoding = offset | ||
1201 | length = this.length | ||
1202 | offset = 0 | ||
1203 | // Buffer#write(string, offset[, length][, encoding]) | ||
1204 | } else if (isFinite(offset)) { | ||
1205 | offset = offset >>> 0 | ||
1206 | if (isFinite(length)) { | ||
1207 | length = length >>> 0 | ||
1208 | if (encoding === undefined) encoding = 'utf8' | ||
1209 | } else { | ||
1210 | encoding = length | ||
1211 | length = undefined | ||
1212 | } | ||
1213 | } else { | ||
1214 | throw new Error( | ||
1215 | 'Buffer.write(string, encoding, offset[, length]) is no longer supported' | ||
1216 | ) | ||
1217 | } | ||
1218 | |||
1219 | var remaining = this.length - offset | ||
1220 | if (length === undefined || length > remaining) length = remaining | ||
1221 | |||
1222 | if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { | ||
1223 | throw new RangeError('Attempt to write outside buffer bounds') | ||
1224 | } | ||
1225 | |||
1226 | if (!encoding) encoding = 'utf8' | ||
1227 | |||
1228 | var loweredCase = false | ||
1229 | for (;;) { | ||
1230 | switch (encoding) { | ||
1231 | case 'hex': | ||
1232 | return hexWrite(this, string, offset, length) | ||
1233 | |||
1234 | case 'utf8': | ||
1235 | case 'utf-8': | ||
1236 | return utf8Write(this, string, offset, length) | ||
1237 | |||
1238 | case 'ascii': | ||
1239 | return asciiWrite(this, string, offset, length) | ||
1240 | |||
1241 | case 'latin1': | ||
1242 | case 'binary': | ||
1243 | return latin1Write(this, string, offset, length) | ||
1244 | |||
1245 | case 'base64': | ||
1246 | // Warning: maxLength not taken into account in base64Write | ||
1247 | return base64Write(this, string, offset, length) | ||
1248 | |||
1249 | case 'ucs2': | ||
1250 | case 'ucs-2': | ||
1251 | case 'utf16le': | ||
1252 | case 'utf-16le': | ||
1253 | return ucs2Write(this, string, offset, length) | ||
1254 | |||
1255 | default: | ||
1256 | if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) | ||
1257 | encoding = ('' + encoding).toLowerCase() | ||
1258 | loweredCase = true | ||
1259 | } | ||
1260 | } | ||
1261 | } | ||
1262 | |||
1263 | Buffer.prototype.toJSON = function toJSON () { | ||
1264 | return { | ||
1265 | type: 'Buffer', | ||
1266 | data: Array.prototype.slice.call(this._arr || this, 0) | ||
1267 | } | ||
1268 | } | ||
1269 | |||
1270 | function base64Slice (buf, start, end) { | ||
1271 | if (start === 0 && end === buf.length) { | ||
1272 | return base64.fromByteArray(buf) | ||
1273 | } else { | ||
1274 | return base64.fromByteArray(buf.slice(start, end)) | ||
1275 | } | ||
1276 | } | ||
1277 | |||
1278 | function utf8Slice (buf, start, end) { | ||
1279 | end = Math.min(buf.length, end) | ||
1280 | var res = [] | ||
1281 | |||
1282 | var i = start | ||
1283 | while (i < end) { | ||
1284 | var firstByte = buf[i] | ||
1285 | var codePoint = null | ||
1286 | var bytesPerSequence = (firstByte > 0xEF) ? 4 | ||
1287 | : (firstByte > 0xDF) ? 3 | ||
1288 | : (firstByte > 0xBF) ? 2 | ||
1289 | : 1 | ||
1290 | |||
1291 | if (i + bytesPerSequence <= end) { | ||
1292 | var secondByte, thirdByte, fourthByte, tempCodePoint | ||
1293 | |||
1294 | switch (bytesPerSequence) { | ||
1295 | case 1: | ||
1296 | if (firstByte < 0x80) { | ||
1297 | codePoint = firstByte | ||
1298 | } | ||
1299 | break | ||
1300 | case 2: | ||
1301 | secondByte = buf[i + 1] | ||
1302 | if ((secondByte & 0xC0) === 0x80) { | ||
1303 | tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) | ||
1304 | if (tempCodePoint > 0x7F) { | ||
1305 | codePoint = tempCodePoint | ||
1306 | } | ||
1307 | } | ||
1308 | break | ||
1309 | case 3: | ||
1310 | secondByte = buf[i + 1] | ||
1311 | thirdByte = buf[i + 2] | ||
1312 | if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { | ||
1313 | tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) | ||
1314 | if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { | ||
1315 | codePoint = tempCodePoint | ||
1316 | } | ||
1317 | } | ||
1318 | break | ||
1319 | case 4: | ||
1320 | secondByte = buf[i + 1] | ||
1321 | thirdByte = buf[i + 2] | ||
1322 | fourthByte = buf[i + 3] | ||
1323 | if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { | ||
1324 | tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) | ||
1325 | if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { | ||
1326 | codePoint = tempCodePoint | ||
1327 | } | ||
1328 | } | ||
1329 | } | ||
1330 | } | ||
1331 | |||
1332 | if (codePoint === null) { | ||
1333 | // we did not generate a valid codePoint so insert a | ||
1334 | // replacement char (U+FFFD) and advance only 1 byte | ||
1335 | codePoint = 0xFFFD | ||
1336 | bytesPerSequence = 1 | ||
1337 | } else if (codePoint > 0xFFFF) { | ||
1338 | // encode to utf16 (surrogate pair dance) | ||
1339 | codePoint -= 0x10000 | ||
1340 | res.push(codePoint >>> 10 & 0x3FF | 0xD800) | ||
1341 | codePoint = 0xDC00 | codePoint & 0x3FF | ||
1342 | } | ||
1343 | |||
1344 | res.push(codePoint) | ||
1345 | i += bytesPerSequence | ||
1346 | } | ||
1347 | |||
1348 | return decodeCodePointsArray(res) | ||
1349 | } | ||
1350 | |||
1351 | // Based on http://stackoverflow.com/a/22747272/680742, the browser with | ||
1352 | // the lowest limit is Chrome, with 0x10000 args. | ||
1353 | // We go 1 magnitude less, for safety | ||
1354 | var MAX_ARGUMENTS_LENGTH = 0x1000 | ||
1355 | |||
1356 | function decodeCodePointsArray (codePoints) { | ||
1357 | var len = codePoints.length | ||
1358 | if (len <= MAX_ARGUMENTS_LENGTH) { | ||
1359 | return String.fromCharCode.apply(String, codePoints) // avoid extra slice() | ||
1360 | } | ||
1361 | |||
1362 | // Decode in chunks to avoid "call stack size exceeded". | ||
1363 | var res = '' | ||
1364 | var i = 0 | ||
1365 | while (i < len) { | ||
1366 | res += String.fromCharCode.apply( | ||
1367 | String, | ||
1368 | codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) | ||
1369 | ) | ||
1370 | } | ||
1371 | return res | ||
1372 | } | ||
1373 | |||
1374 | function asciiSlice (buf, start, end) { | ||
1375 | var ret = '' | ||
1376 | end = Math.min(buf.length, end) | ||
1377 | |||
1378 | for (var i = start; i < end; ++i) { | ||
1379 | ret += String.fromCharCode(buf[i] & 0x7F) | ||
1380 | } | ||
1381 | return ret | ||
1382 | } | ||
1383 | |||
1384 | function latin1Slice (buf, start, end) { | ||
1385 | var ret = '' | ||
1386 | end = Math.min(buf.length, end) | ||
1387 | |||
1388 | for (var i = start; i < end; ++i) { | ||
1389 | ret += String.fromCharCode(buf[i]) | ||
1390 | } | ||
1391 | return ret | ||
1392 | } | ||
1393 | |||
1394 | function hexSlice (buf, start, end) { | ||
1395 | var len = buf.length | ||
1396 | |||
1397 | if (!start || start < 0) start = 0 | ||
1398 | if (!end || end < 0 || end > len) end = len | ||
1399 | |||
1400 | var out = '' | ||
1401 | for (var i = start; i < end; ++i) { | ||
1402 | out += toHex(buf[i]) | ||
1403 | } | ||
1404 | return out | ||
1405 | } | ||
1406 | |||
1407 | function utf16leSlice (buf, start, end) { | ||
1408 | var bytes = buf.slice(start, end) | ||
1409 | var res = '' | ||
1410 | for (var i = 0; i < bytes.length; i += 2) { | ||
1411 | res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) | ||
1412 | } | ||
1413 | return res | ||
1414 | } | ||
1415 | |||
1416 | Buffer.prototype.slice = function slice (start, end) { | ||
1417 | var len = this.length | ||
1418 | start = ~~start | ||
1419 | end = end === undefined ? len : ~~end | ||
1420 | |||
1421 | if (start < 0) { | ||
1422 | start += len | ||
1423 | if (start < 0) start = 0 | ||
1424 | } else if (start > len) { | ||
1425 | start = len | ||
1426 | } | ||
1427 | |||
1428 | if (end < 0) { | ||
1429 | end += len | ||
1430 | if (end < 0) end = 0 | ||
1431 | } else if (end > len) { | ||
1432 | end = len | ||
1433 | } | ||
1434 | |||
1435 | if (end < start) end = start | ||
1436 | |||
1437 | var newBuf = this.subarray(start, end) | ||
1438 | // Return an augmented `Uint8Array` instance | ||
1439 | newBuf.__proto__ = Buffer.prototype | ||
1440 | return newBuf | ||
1441 | } | ||
1442 | |||
1443 | /* | ||
1444 | * Need to make sure that buffer isn't trying to write out of bounds. | ||
1445 | */ | ||
1446 | function checkOffset (offset, ext, length) { | ||
1447 | if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') | ||
1448 | if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') | ||
1449 | } | ||
1450 | |||
1451 | Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { | ||
1452 | offset = offset >>> 0 | ||
1453 | byteLength = byteLength >>> 0 | ||
1454 | if (!noAssert) checkOffset(offset, byteLength, this.length) | ||
1455 | |||
1456 | var val = this[offset] | ||
1457 | var mul = 1 | ||
1458 | var i = 0 | ||
1459 | while (++i < byteLength && (mul *= 0x100)) { | ||
1460 | val += this[offset + i] * mul | ||
1461 | } | ||
1462 | |||
1463 | return val | ||
1464 | } | ||
1465 | |||
1466 | Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { | ||
1467 | offset = offset >>> 0 | ||
1468 | byteLength = byteLength >>> 0 | ||
1469 | if (!noAssert) { | ||
1470 | checkOffset(offset, byteLength, this.length) | ||
1471 | } | ||
1472 | |||
1473 | var val = this[offset + --byteLength] | ||
1474 | var mul = 1 | ||
1475 | while (byteLength > 0 && (mul *= 0x100)) { | ||
1476 | val += this[offset + --byteLength] * mul | ||
1477 | } | ||
1478 | |||
1479 | return val | ||
1480 | } | ||
1481 | |||
1482 | Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { | ||
1483 | offset = offset >>> 0 | ||
1484 | if (!noAssert) checkOffset(offset, 1, this.length) | ||
1485 | return this[offset] | ||
1486 | } | ||
1487 | |||
1488 | Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { | ||
1489 | offset = offset >>> 0 | ||
1490 | if (!noAssert) checkOffset(offset, 2, this.length) | ||
1491 | return this[offset] | (this[offset + 1] << 8) | ||
1492 | } | ||
1493 | |||
1494 | Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { | ||
1495 | offset = offset >>> 0 | ||
1496 | if (!noAssert) checkOffset(offset, 2, this.length) | ||
1497 | return (this[offset] << 8) | this[offset + 1] | ||
1498 | } | ||
1499 | |||
1500 | Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { | ||
1501 | offset = offset >>> 0 | ||
1502 | if (!noAssert) checkOffset(offset, 4, this.length) | ||
1503 | |||
1504 | return ((this[offset]) | | ||
1505 | (this[offset + 1] << 8) | | ||
1506 | (this[offset + 2] << 16)) + | ||
1507 | (this[offset + 3] * 0x1000000) | ||
1508 | } | ||
1509 | |||
1510 | Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { | ||
1511 | offset = offset >>> 0 | ||
1512 | if (!noAssert) checkOffset(offset, 4, this.length) | ||
1513 | |||
1514 | return (this[offset] * 0x1000000) + | ||
1515 | ((this[offset + 1] << 16) | | ||
1516 | (this[offset + 2] << 8) | | ||
1517 | this[offset + 3]) | ||
1518 | } | ||
1519 | |||
1520 | Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { | ||
1521 | offset = offset >>> 0 | ||
1522 | byteLength = byteLength >>> 0 | ||
1523 | if (!noAssert) checkOffset(offset, byteLength, this.length) | ||
1524 | |||
1525 | var val = this[offset] | ||
1526 | var mul = 1 | ||
1527 | var i = 0 | ||
1528 | while (++i < byteLength && (mul *= 0x100)) { | ||
1529 | val += this[offset + i] * mul | ||
1530 | } | ||
1531 | mul *= 0x80 | ||
1532 | |||
1533 | if (val >= mul) val -= Math.pow(2, 8 * byteLength) | ||
1534 | |||
1535 | return val | ||
1536 | } | ||
1537 | |||
1538 | Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { | ||
1539 | offset = offset >>> 0 | ||
1540 | byteLength = byteLength >>> 0 | ||
1541 | if (!noAssert) checkOffset(offset, byteLength, this.length) | ||
1542 | |||
1543 | var i = byteLength | ||
1544 | var mul = 1 | ||
1545 | var val = this[offset + --i] | ||
1546 | while (i > 0 && (mul *= 0x100)) { | ||
1547 | val += this[offset + --i] * mul | ||
1548 | } | ||
1549 | mul *= 0x80 | ||
1550 | |||
1551 | if (val >= mul) val -= Math.pow(2, 8 * byteLength) | ||
1552 | |||
1553 | return val | ||
1554 | } | ||
1555 | |||
1556 | Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { | ||
1557 | offset = offset >>> 0 | ||
1558 | if (!noAssert) checkOffset(offset, 1, this.length) | ||
1559 | if (!(this[offset] & 0x80)) return (this[offset]) | ||
1560 | return ((0xff - this[offset] + 1) * -1) | ||
1561 | } | ||
1562 | |||
1563 | Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { | ||
1564 | offset = offset >>> 0 | ||
1565 | if (!noAssert) checkOffset(offset, 2, this.length) | ||
1566 | var val = this[offset] | (this[offset + 1] << 8) | ||
1567 | return (val & 0x8000) ? val | 0xFFFF0000 : val | ||
1568 | } | ||
1569 | |||
1570 | Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { | ||
1571 | offset = offset >>> 0 | ||
1572 | if (!noAssert) checkOffset(offset, 2, this.length) | ||
1573 | var val = this[offset + 1] | (this[offset] << 8) | ||
1574 | return (val & 0x8000) ? val | 0xFFFF0000 : val | ||
1575 | } | ||
1576 | |||
1577 | Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { | ||
1578 | offset = offset >>> 0 | ||
1579 | if (!noAssert) checkOffset(offset, 4, this.length) | ||
1580 | |||
1581 | return (this[offset]) | | ||
1582 | (this[offset + 1] << 8) | | ||
1583 | (this[offset + 2] << 16) | | ||
1584 | (this[offset + 3] << 24) | ||
1585 | } | ||
1586 | |||
1587 | Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { | ||
1588 | offset = offset >>> 0 | ||
1589 | if (!noAssert) checkOffset(offset, 4, this.length) | ||
1590 | |||
1591 | return (this[offset] << 24) | | ||
1592 | (this[offset + 1] << 16) | | ||
1593 | (this[offset + 2] << 8) | | ||
1594 | (this[offset + 3]) | ||
1595 | } | ||
1596 | |||
1597 | Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { | ||
1598 | offset = offset >>> 0 | ||
1599 | if (!noAssert) checkOffset(offset, 4, this.length) | ||
1600 | return ieee754.read(this, offset, true, 23, 4) | ||
1601 | } | ||
1602 | |||
1603 | Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { | ||
1604 | offset = offset >>> 0 | ||
1605 | if (!noAssert) checkOffset(offset, 4, this.length) | ||
1606 | return ieee754.read(this, offset, false, 23, 4) | ||
1607 | } | ||
1608 | |||
1609 | Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { | ||
1610 | offset = offset >>> 0 | ||
1611 | if (!noAssert) checkOffset(offset, 8, this.length) | ||
1612 | return ieee754.read(this, offset, true, 52, 8) | ||
1613 | } | ||
1614 | |||
1615 | Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { | ||
1616 | offset = offset >>> 0 | ||
1617 | if (!noAssert) checkOffset(offset, 8, this.length) | ||
1618 | return ieee754.read(this, offset, false, 52, 8) | ||
1619 | } | ||
1620 | |||
1621 | function checkInt (buf, value, offset, ext, max, min) { | ||
1622 | if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') | ||
1623 | if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') | ||
1624 | if (offset + ext > buf.length) throw new RangeError('Index out of range') | ||
1625 | } | ||
1626 | |||
1627 | Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { | ||
1628 | value = +value | ||
1629 | offset = offset >>> 0 | ||
1630 | byteLength = byteLength >>> 0 | ||
1631 | if (!noAssert) { | ||
1632 | var maxBytes = Math.pow(2, 8 * byteLength) - 1 | ||
1633 | checkInt(this, value, offset, byteLength, maxBytes, 0) | ||
1634 | } | ||
1635 | |||
1636 | var mul = 1 | ||
1637 | var i = 0 | ||
1638 | this[offset] = value & 0xFF | ||
1639 | while (++i < byteLength && (mul *= 0x100)) { | ||
1640 | this[offset + i] = (value / mul) & 0xFF | ||
1641 | } | ||
1642 | |||
1643 | return offset + byteLength | ||
1644 | } | ||
1645 | |||
1646 | Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { | ||
1647 | value = +value | ||
1648 | offset = offset >>> 0 | ||
1649 | byteLength = byteLength >>> 0 | ||
1650 | if (!noAssert) { | ||
1651 | var maxBytes = Math.pow(2, 8 * byteLength) - 1 | ||
1652 | checkInt(this, value, offset, byteLength, maxBytes, 0) | ||
1653 | } | ||
1654 | |||
1655 | var i = byteLength - 1 | ||
1656 | var mul = 1 | ||
1657 | this[offset + i] = value & 0xFF | ||
1658 | while (--i >= 0 && (mul *= 0x100)) { | ||
1659 | this[offset + i] = (value / mul) & 0xFF | ||
1660 | } | ||
1661 | |||
1662 | return offset + byteLength | ||
1663 | } | ||
1664 | |||
1665 | Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { | ||
1666 | value = +value | ||
1667 | offset = offset >>> 0 | ||
1668 | if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) | ||
1669 | this[offset] = (value & 0xff) | ||
1670 | return offset + 1 | ||
1671 | } | ||
1672 | |||
1673 | Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { | ||
1674 | value = +value | ||
1675 | offset = offset >>> 0 | ||
1676 | if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) | ||
1677 | this[offset] = (value & 0xff) | ||
1678 | this[offset + 1] = (value >>> 8) | ||
1679 | return offset + 2 | ||
1680 | } | ||
1681 | |||
1682 | Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { | ||
1683 | value = +value | ||
1684 | offset = offset >>> 0 | ||
1685 | if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) | ||
1686 | this[offset] = (value >>> 8) | ||
1687 | this[offset + 1] = (value & 0xff) | ||
1688 | return offset + 2 | ||
1689 | } | ||
1690 | |||
1691 | Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { | ||
1692 | value = +value | ||
1693 | offset = offset >>> 0 | ||
1694 | if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) | ||
1695 | this[offset + 3] = (value >>> 24) | ||
1696 | this[offset + 2] = (value >>> 16) | ||
1697 | this[offset + 1] = (value >>> 8) | ||
1698 | this[offset] = (value & 0xff) | ||
1699 | return offset + 4 | ||
1700 | } | ||
1701 | |||
1702 | Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { | ||
1703 | value = +value | ||
1704 | offset = offset >>> 0 | ||
1705 | if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) | ||
1706 | this[offset] = (value >>> 24) | ||
1707 | this[offset + 1] = (value >>> 16) | ||
1708 | this[offset + 2] = (value >>> 8) | ||
1709 | this[offset + 3] = (value & 0xff) | ||
1710 | return offset + 4 | ||
1711 | } | ||
1712 | |||
1713 | Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { | ||
1714 | value = +value | ||
1715 | offset = offset >>> 0 | ||
1716 | if (!noAssert) { | ||
1717 | var limit = Math.pow(2, (8 * byteLength) - 1) | ||
1718 | |||
1719 | checkInt(this, value, offset, byteLength, limit - 1, -limit) | ||
1720 | } | ||
1721 | |||
1722 | var i = 0 | ||
1723 | var mul = 1 | ||
1724 | var sub = 0 | ||
1725 | this[offset] = value & 0xFF | ||
1726 | while (++i < byteLength && (mul *= 0x100)) { | ||
1727 | if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { | ||
1728 | sub = 1 | ||
1729 | } | ||
1730 | this[offset + i] = ((value / mul) >> 0) - sub & 0xFF | ||
1731 | } | ||
1732 | |||
1733 | return offset + byteLength | ||
1734 | } | ||
1735 | |||
1736 | Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { | ||
1737 | value = +value | ||
1738 | offset = offset >>> 0 | ||
1739 | if (!noAssert) { | ||
1740 | var limit = Math.pow(2, (8 * byteLength) - 1) | ||
1741 | |||
1742 | checkInt(this, value, offset, byteLength, limit - 1, -limit) | ||
1743 | } | ||
1744 | |||
1745 | var i = byteLength - 1 | ||
1746 | var mul = 1 | ||
1747 | var sub = 0 | ||
1748 | this[offset + i] = value & 0xFF | ||
1749 | while (--i >= 0 && (mul *= 0x100)) { | ||
1750 | if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { | ||
1751 | sub = 1 | ||
1752 | } | ||
1753 | this[offset + i] = ((value / mul) >> 0) - sub & 0xFF | ||
1754 | } | ||
1755 | |||
1756 | return offset + byteLength | ||
1757 | } | ||
1758 | |||
1759 | Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { | ||
1760 | value = +value | ||
1761 | offset = offset >>> 0 | ||
1762 | if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) | ||
1763 | if (value < 0) value = 0xff + value + 1 | ||
1764 | this[offset] = (value & 0xff) | ||
1765 | return offset + 1 | ||
1766 | } | ||
1767 | |||
1768 | Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { | ||
1769 | value = +value | ||
1770 | offset = offset >>> 0 | ||
1771 | if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) | ||
1772 | this[offset] = (value & 0xff) | ||
1773 | this[offset + 1] = (value >>> 8) | ||
1774 | return offset + 2 | ||
1775 | } | ||
1776 | |||
1777 | Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { | ||
1778 | value = +value | ||
1779 | offset = offset >>> 0 | ||
1780 | if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) | ||
1781 | this[offset] = (value >>> 8) | ||
1782 | this[offset + 1] = (value & 0xff) | ||
1783 | return offset + 2 | ||
1784 | } | ||
1785 | |||
1786 | Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { | ||
1787 | value = +value | ||
1788 | offset = offset >>> 0 | ||
1789 | if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) | ||
1790 | this[offset] = (value & 0xff) | ||
1791 | this[offset + 1] = (value >>> 8) | ||
1792 | this[offset + 2] = (value >>> 16) | ||
1793 | this[offset + 3] = (value >>> 24) | ||
1794 | return offset + 4 | ||
1795 | } | ||
1796 | |||
1797 | Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { | ||
1798 | value = +value | ||
1799 | offset = offset >>> 0 | ||
1800 | if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) | ||
1801 | if (value < 0) value = 0xffffffff + value + 1 | ||
1802 | this[offset] = (value >>> 24) | ||
1803 | this[offset + 1] = (value >>> 16) | ||
1804 | this[offset + 2] = (value >>> 8) | ||
1805 | this[offset + 3] = (value & 0xff) | ||
1806 | return offset + 4 | ||
1807 | } | ||
1808 | |||
1809 | function checkIEEE754 (buf, value, offset, ext, max, min) { | ||
1810 | if (offset + ext > buf.length) throw new RangeError('Index out of range') | ||
1811 | if (offset < 0) throw new RangeError('Index out of range') | ||
1812 | } | ||
1813 | |||
1814 | function writeFloat (buf, value, offset, littleEndian, noAssert) { | ||
1815 | value = +value | ||
1816 | offset = offset >>> 0 | ||
1817 | if (!noAssert) { | ||
1818 | checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) | ||
1819 | } | ||
1820 | ieee754.write(buf, value, offset, littleEndian, 23, 4) | ||
1821 | return offset + 4 | ||
1822 | } | ||
1823 | |||
1824 | Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { | ||
1825 | return writeFloat(this, value, offset, true, noAssert) | ||
1826 | } | ||
1827 | |||
1828 | Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { | ||
1829 | return writeFloat(this, value, offset, false, noAssert) | ||
1830 | } | ||
1831 | |||
1832 | function writeDouble (buf, value, offset, littleEndian, noAssert) { | ||
1833 | value = +value | ||
1834 | offset = offset >>> 0 | ||
1835 | if (!noAssert) { | ||
1836 | checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) | ||
1837 | } | ||
1838 | ieee754.write(buf, value, offset, littleEndian, 52, 8) | ||
1839 | return offset + 8 | ||
1840 | } | ||
1841 | |||
1842 | Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { | ||
1843 | return writeDouble(this, value, offset, true, noAssert) | ||
1844 | } | ||
1845 | |||
1846 | Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { | ||
1847 | return writeDouble(this, value, offset, false, noAssert) | ||
1848 | } | ||
1849 | |||
1850 | // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) | ||
1851 | Buffer.prototype.copy = function copy (target, targetStart, start, end) { | ||
1852 | if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') | ||
1853 | if (!start) start = 0 | ||
1854 | if (!end && end !== 0) end = this.length | ||
1855 | if (targetStart >= target.length) targetStart = target.length | ||
1856 | if (!targetStart) targetStart = 0 | ||
1857 | if (end > 0 && end < start) end = start | ||
1858 | |||
1859 | // Copy 0 bytes; we're done | ||
1860 | if (end === start) return 0 | ||
1861 | if (target.length === 0 || this.length === 0) return 0 | ||
1862 | |||
1863 | // Fatal error conditions | ||
1864 | if (targetStart < 0) { | ||
1865 | throw new RangeError('targetStart out of bounds') | ||
1866 | } | ||
1867 | if (start < 0 || start >= this.length) throw new RangeError('Index out of range') | ||
1868 | if (end < 0) throw new RangeError('sourceEnd out of bounds') | ||
1869 | |||
1870 | // Are we oob? | ||
1871 | if (end > this.length) end = this.length | ||
1872 | if (target.length - targetStart < end - start) { | ||
1873 | end = target.length - targetStart + start | ||
1874 | } | ||
1875 | |||
1876 | var len = end - start | ||
1877 | |||
1878 | if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { | ||
1879 | // Use built-in when available, missing from IE11 | ||
1880 | this.copyWithin(targetStart, start, end) | ||
1881 | } else if (this === target && start < targetStart && targetStart < end) { | ||
1882 | // descending copy from end | ||
1883 | for (var i = len - 1; i >= 0; --i) { | ||
1884 | target[i + targetStart] = this[i + start] | ||
1885 | } | ||
1886 | } else { | ||
1887 | Uint8Array.prototype.set.call( | ||
1888 | target, | ||
1889 | this.subarray(start, end), | ||
1890 | targetStart | ||
1891 | ) | ||
1892 | } | ||
1893 | |||
1894 | return len | ||
1895 | } | ||
1896 | |||
1897 | // Usage: | ||
1898 | // buffer.fill(number[, offset[, end]]) | ||
1899 | // buffer.fill(buffer[, offset[, end]]) | ||
1900 | // buffer.fill(string[, offset[, end]][, encoding]) | ||
1901 | Buffer.prototype.fill = function fill (val, start, end, encoding) { | ||
1902 | // Handle string cases: | ||
1903 | if (typeof val === 'string') { | ||
1904 | if (typeof start === 'string') { | ||
1905 | encoding = start | ||
1906 | start = 0 | ||
1907 | end = this.length | ||
1908 | } else if (typeof end === 'string') { | ||
1909 | encoding = end | ||
1910 | end = this.length | ||
1911 | } | ||
1912 | if (encoding !== undefined && typeof encoding !== 'string') { | ||
1913 | throw new TypeError('encoding must be a string') | ||
1914 | } | ||
1915 | if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { | ||
1916 | throw new TypeError('Unknown encoding: ' + encoding) | ||
1917 | } | ||
1918 | if (val.length === 1) { | ||
1919 | var code = val.charCodeAt(0) | ||
1920 | if ((encoding === 'utf8' && code < 128) || | ||
1921 | encoding === 'latin1') { | ||
1922 | // Fast path: If `val` fits into a single byte, use that numeric value. | ||
1923 | val = code | ||
1924 | } | ||
1925 | } | ||
1926 | } else if (typeof val === 'number') { | ||
1927 | val = val & 255 | ||
1928 | } | ||
1929 | |||
1930 | // Invalid ranges are not set to a default, so can range check early. | ||
1931 | if (start < 0 || this.length < start || this.length < end) { | ||
1932 | throw new RangeError('Out of range index') | ||
1933 | } | ||
1934 | |||
1935 | if (end <= start) { | ||
1936 | return this | ||
1937 | } | ||
1938 | |||
1939 | start = start >>> 0 | ||
1940 | end = end === undefined ? this.length : end >>> 0 | ||
1941 | |||
1942 | if (!val) val = 0 | ||
1943 | |||
1944 | var i | ||
1945 | if (typeof val === 'number') { | ||
1946 | for (i = start; i < end; ++i) { | ||
1947 | this[i] = val | ||
1948 | } | ||
1949 | } else { | ||
1950 | var bytes = Buffer.isBuffer(val) | ||
1951 | ? val | ||
1952 | : Buffer.from(val, encoding) | ||
1953 | var len = bytes.length | ||
1954 | if (len === 0) { | ||
1955 | throw new TypeError('The value "' + val + | ||
1956 | '" is invalid for argument "value"') | ||
1957 | } | ||
1958 | for (i = 0; i < end - start; ++i) { | ||
1959 | this[i + start] = bytes[i % len] | ||
1960 | } | ||
1961 | } | ||
1962 | |||
1963 | return this | ||
1964 | } | ||
1965 | |||
1966 | // HELPER FUNCTIONS | ||
1967 | // ================ | ||
1968 | |||
1969 | var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g | ||
1970 | |||
1971 | function base64clean (str) { | ||
1972 | // Node takes equal signs as end of the Base64 encoding | ||
1973 | str = str.split('=')[0] | ||
1974 | // Node strips out invalid characters like \n and \t from the string, base64-js does not | ||
1975 | str = str.trim().replace(INVALID_BASE64_RE, '') | ||
1976 | // Node converts strings with length < 2 to '' | ||
1977 | if (str.length < 2) return '' | ||
1978 | // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not | ||
1979 | while (str.length % 4 !== 0) { | ||
1980 | str = str + '=' | ||
1981 | } | ||
1982 | return str | ||
1983 | } | ||
1984 | |||
1985 | function toHex (n) { | ||
1986 | if (n < 16) return '0' + n.toString(16) | ||
1987 | return n.toString(16) | ||
1988 | } | ||
1989 | |||
1990 | function utf8ToBytes (string, units) { | ||
1991 | units = units || Infinity | ||
1992 | var codePoint | ||
1993 | var length = string.length | ||
1994 | var leadSurrogate = null | ||
1995 | var bytes = [] | ||
1996 | |||
1997 | for (var i = 0; i < length; ++i) { | ||
1998 | codePoint = string.charCodeAt(i) | ||
1999 | |||
2000 | // is surrogate component | ||
2001 | if (codePoint > 0xD7FF && codePoint < 0xE000) { | ||
2002 | // last char was a lead | ||
2003 | if (!leadSurrogate) { | ||
2004 | // no lead yet | ||
2005 | if (codePoint > 0xDBFF) { | ||
2006 | // unexpected trail | ||
2007 | if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) | ||
2008 | continue | ||
2009 | } else if (i + 1 === length) { | ||
2010 | // unpaired lead | ||
2011 | if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) | ||
2012 | continue | ||
2013 | } | ||
2014 | |||
2015 | // valid lead | ||
2016 | leadSurrogate = codePoint | ||
2017 | |||
2018 | continue | ||
2019 | } | ||
2020 | |||
2021 | // 2 leads in a row | ||
2022 | if (codePoint < 0xDC00) { | ||
2023 | if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) | ||
2024 | leadSurrogate = codePoint | ||
2025 | continue | ||
2026 | } | ||
2027 | |||
2028 | // valid surrogate pair | ||
2029 | codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 | ||
2030 | } else if (leadSurrogate) { | ||
2031 | // valid bmp char, but last char was a lead | ||
2032 | if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) | ||
2033 | } | ||
2034 | |||
2035 | leadSurrogate = null | ||
2036 | |||
2037 | // encode utf8 | ||
2038 | if (codePoint < 0x80) { | ||
2039 | if ((units -= 1) < 0) break | ||
2040 | bytes.push(codePoint) | ||
2041 | } else if (codePoint < 0x800) { | ||
2042 | if ((units -= 2) < 0) break | ||
2043 | bytes.push( | ||
2044 | codePoint >> 0x6 | 0xC0, | ||
2045 | codePoint & 0x3F | 0x80 | ||
2046 | ) | ||
2047 | } else if (codePoint < 0x10000) { | ||
2048 | if ((units -= 3) < 0) break | ||
2049 | bytes.push( | ||
2050 | codePoint >> 0xC | 0xE0, | ||
2051 | codePoint >> 0x6 & 0x3F | 0x80, | ||
2052 | codePoint & 0x3F | 0x80 | ||
2053 | ) | ||
2054 | } else if (codePoint < 0x110000) { | ||
2055 | if ((units -= 4) < 0) break | ||
2056 | bytes.push( | ||
2057 | codePoint >> 0x12 | 0xF0, | ||
2058 | codePoint >> 0xC & 0x3F | 0x80, | ||
2059 | codePoint >> 0x6 & 0x3F | 0x80, | ||
2060 | codePoint & 0x3F | 0x80 | ||
2061 | ) | ||
2062 | } else { | ||
2063 | throw new Error('Invalid code point') | ||
2064 | } | ||
2065 | } | ||
2066 | |||
2067 | return bytes | ||
2068 | } | ||
2069 | |||
2070 | function asciiToBytes (str) { | ||
2071 | var byteArray = [] | ||
2072 | for (var i = 0; i < str.length; ++i) { | ||
2073 | // Node's code seems to be doing this and not & 0x7F.. | ||
2074 | byteArray.push(str.charCodeAt(i) & 0xFF) | ||
2075 | } | ||
2076 | return byteArray | ||
2077 | } | ||
2078 | |||
2079 | function utf16leToBytes (str, units) { | ||
2080 | var c, hi, lo | ||
2081 | var byteArray = [] | ||
2082 | for (var i = 0; i < str.length; ++i) { | ||
2083 | if ((units -= 2) < 0) break | ||
2084 | |||
2085 | c = str.charCodeAt(i) | ||
2086 | hi = c >> 8 | ||
2087 | lo = c % 256 | ||
2088 | byteArray.push(lo) | ||
2089 | byteArray.push(hi) | ||
2090 | } | ||
2091 | |||
2092 | return byteArray | ||
2093 | } | ||
2094 | |||
2095 | function base64ToBytes (str) { | ||
2096 | return base64.toByteArray(base64clean(str)) | ||
2097 | } | ||
2098 | |||
2099 | function blitBuffer (src, dst, offset, length) { | ||
2100 | for (var i = 0; i < length; ++i) { | ||
2101 | if ((i + offset >= dst.length) || (i >= src.length)) break | ||
2102 | dst[i + offset] = src[i] | ||
2103 | } | ||
2104 | return i | ||
2105 | } | ||
2106 | |||
2107 | // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass | ||
2108 | // the `instanceof` check but they should be treated as of that type. | ||
2109 | // See: https://github.com/feross/buffer/issues/166 | ||
2110 | function isInstance (obj, type) { | ||
2111 | return obj instanceof type || | ||
2112 | (obj != null && obj.constructor != null && obj.constructor.name != null && | ||
2113 | obj.constructor.name === type.name) | ||
2114 | } | ||
2115 | function numberIsNaN (obj) { | ||
2116 | // For IE11 support | ||
2117 | return obj !== obj // eslint-disable-line no-self-compare | ||
2118 | } | ||
2119 | |||
2120 | }).call(this,require("buffer").Buffer) | ||
2121 | },{"base64-js":3,"buffer":6,"ieee754":12}],7:[function(require,module,exports){ | ||
2122 | var Buffer = require('safe-buffer').Buffer | ||
2123 | var Transform = require('stream').Transform | ||
2124 | var StringDecoder = require('string_decoder').StringDecoder | ||
2125 | var inherits = require('inherits') | ||
2126 | |||
2127 | function CipherBase (hashMode) { | ||
2128 | Transform.call(this) | ||
2129 | this.hashMode = typeof hashMode === 'string' | ||
2130 | if (this.hashMode) { | ||
2131 | this[hashMode] = this._finalOrDigest | ||
2132 | } else { | ||
2133 | this.final = this._finalOrDigest | ||
2134 | } | ||
2135 | if (this._final) { | ||
2136 | this.__final = this._final | ||
2137 | this._final = null | ||
2138 | } | ||
2139 | this._decoder = null | ||
2140 | this._encoding = null | ||
2141 | } | ||
2142 | inherits(CipherBase, Transform) | ||
2143 | |||
2144 | CipherBase.prototype.update = function (data, inputEnc, outputEnc) { | ||
2145 | if (typeof data === 'string') { | ||
2146 | data = Buffer.from(data, inputEnc) | ||
2147 | } | ||
2148 | |||
2149 | var outData = this._update(data) | ||
2150 | if (this.hashMode) return this | ||
2151 | |||
2152 | if (outputEnc) { | ||
2153 | outData = this._toString(outData, outputEnc) | ||
2154 | } | ||
2155 | |||
2156 | return outData | ||
2157 | } | ||
2158 | |||
2159 | CipherBase.prototype.setAutoPadding = function () {} | ||
2160 | CipherBase.prototype.getAuthTag = function () { | ||
2161 | throw new Error('trying to get auth tag in unsupported state') | ||
2162 | } | ||
2163 | |||
2164 | CipherBase.prototype.setAuthTag = function () { | ||
2165 | throw new Error('trying to set auth tag in unsupported state') | ||
2166 | } | ||
2167 | |||
2168 | CipherBase.prototype.setAAD = function () { | ||
2169 | throw new Error('trying to set aad in unsupported state') | ||
2170 | } | ||
2171 | |||
2172 | CipherBase.prototype._transform = function (data, _, next) { | ||
2173 | var err | ||
2174 | try { | ||
2175 | if (this.hashMode) { | ||
2176 | this._update(data) | ||
2177 | } else { | ||
2178 | this.push(this._update(data)) | ||
2179 | } | ||
2180 | } catch (e) { | ||
2181 | err = e | ||
2182 | } finally { | ||
2183 | next(err) | ||
2184 | } | ||
2185 | } | ||
2186 | CipherBase.prototype._flush = function (done) { | ||
2187 | var err | ||
2188 | try { | ||
2189 | this.push(this.__final()) | ||
2190 | } catch (e) { | ||
2191 | err = e | ||
2192 | } | ||
2193 | |||
2194 | done(err) | ||
2195 | } | ||
2196 | CipherBase.prototype._finalOrDigest = function (outputEnc) { | ||
2197 | var outData = this.__final() || Buffer.alloc(0) | ||
2198 | if (outputEnc) { | ||
2199 | outData = this._toString(outData, outputEnc, true) | ||
2200 | } | ||
2201 | return outData | ||
2202 | } | ||
2203 | |||
2204 | CipherBase.prototype._toString = function (value, enc, fin) { | ||
2205 | if (!this._decoder) { | ||
2206 | this._decoder = new StringDecoder(enc) | ||
2207 | this._encoding = enc | ||
2208 | } | ||
2209 | |||
2210 | if (this._encoding !== enc) throw new Error('can\'t switch encodings') | ||
2211 | |||
2212 | var out = this._decoder.write(value) | ||
2213 | if (fin) { | ||
2214 | out += this._decoder.end() | ||
2215 | } | ||
2216 | |||
2217 | return out | ||
2218 | } | ||
2219 | |||
2220 | module.exports = CipherBase | ||
2221 | |||
2222 | },{"inherits":13,"safe-buffer":34,"stream":43,"string_decoder":44}],8:[function(require,module,exports){ | ||
2223 | (function (Buffer){ | ||
2224 | // Copyright Joyent, Inc. and other Node contributors. | ||
2225 | // | ||
2226 | // Permission is hereby granted, free of charge, to any person obtaining a | ||
2227 | // copy of this software and associated documentation files (the | ||
2228 | // "Software"), to deal in the Software without restriction, including | ||
2229 | // without limitation the rights to use, copy, modify, merge, publish, | ||
2230 | // distribute, sublicense, and/or sell copies of the Software, and to permit | ||
2231 | // persons to whom the Software is furnished to do so, subject to the | ||
2232 | // following conditions: | ||
2233 | // | ||
2234 | // The above copyright notice and this permission notice shall be included | ||
2235 | // in all copies or substantial portions of the Software. | ||
2236 | // | ||
2237 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
2238 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
2239 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||
2240 | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
2241 | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
2242 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
2243 | // USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
2244 | |||
2245 | // NOTE: These type checking functions intentionally don't use `instanceof` | ||
2246 | // because it is fragile and can be easily faked with `Object.create()`. | ||
2247 | |||
2248 | function isArray(arg) { | ||
2249 | if (Array.isArray) { | ||
2250 | return Array.isArray(arg); | ||
2251 | } | ||
2252 | return objectToString(arg) === '[object Array]'; | ||
2253 | } | ||
2254 | exports.isArray = isArray; | ||
2255 | |||
2256 | function isBoolean(arg) { | ||
2257 | return typeof arg === 'boolean'; | ||
2258 | } | ||
2259 | exports.isBoolean = isBoolean; | ||
2260 | |||
2261 | function isNull(arg) { | ||
2262 | return arg === null; | ||
2263 | } | ||
2264 | exports.isNull = isNull; | ||
2265 | |||
2266 | function isNullOrUndefined(arg) { | ||
2267 | return arg == null; | ||
2268 | } | ||
2269 | exports.isNullOrUndefined = isNullOrUndefined; | ||
2270 | |||
2271 | function isNumber(arg) { | ||
2272 | return typeof arg === 'number'; | ||
2273 | } | ||
2274 | exports.isNumber = isNumber; | ||
2275 | |||
2276 | function isString(arg) { | ||
2277 | return typeof arg === 'string'; | ||
2278 | } | ||
2279 | exports.isString = isString; | ||
2280 | |||
2281 | function isSymbol(arg) { | ||
2282 | return typeof arg === 'symbol'; | ||
2283 | } | ||
2284 | exports.isSymbol = isSymbol; | ||
2285 | |||
2286 | function isUndefined(arg) { | ||
2287 | return arg === void 0; | ||
2288 | } | ||
2289 | exports.isUndefined = isUndefined; | ||
2290 | |||
2291 | function isRegExp(re) { | ||
2292 | return objectToString(re) === '[object RegExp]'; | ||
2293 | } | ||
2294 | exports.isRegExp = isRegExp; | ||
2295 | |||
2296 | function isObject(arg) { | ||
2297 | return typeof arg === 'object' && arg !== null; | ||
2298 | } | ||
2299 | exports.isObject = isObject; | ||
2300 | |||
2301 | function isDate(d) { | ||
2302 | return objectToString(d) === '[object Date]'; | ||
2303 | } | ||
2304 | exports.isDate = isDate; | ||
2305 | |||
2306 | function isError(e) { | ||
2307 | return (objectToString(e) === '[object Error]' || e instanceof Error); | ||
2308 | } | ||
2309 | exports.isError = isError; | ||
2310 | |||
2311 | function isFunction(arg) { | ||
2312 | return typeof arg === 'function'; | ||
2313 | } | ||
2314 | exports.isFunction = isFunction; | ||
2315 | |||
2316 | function isPrimitive(arg) { | ||
2317 | return arg === null || | ||
2318 | typeof arg === 'boolean' || | ||
2319 | typeof arg === 'number' || | ||
2320 | typeof arg === 'string' || | ||
2321 | typeof arg === 'symbol' || // ES6 symbol | ||
2322 | typeof arg === 'undefined'; | ||
2323 | } | ||
2324 | exports.isPrimitive = isPrimitive; | ||
2325 | |||
2326 | exports.isBuffer = Buffer.isBuffer; | ||
2327 | |||
2328 | function objectToString(o) { | ||
2329 | return Object.prototype.toString.call(o); | ||
2330 | } | ||
2331 | |||
2332 | }).call(this,{"isBuffer":require("../../is-buffer/index.js")}) | ||
2333 | },{"../../is-buffer/index.js":14}],9:[function(require,module,exports){ | ||
2334 | 'use strict' | ||
2335 | var inherits = require('inherits') | ||
2336 | var MD5 = require('md5.js') | ||
2337 | var RIPEMD160 = require('ripemd160') | ||
2338 | var sha = require('sha.js') | ||
2339 | var Base = require('cipher-base') | ||
2340 | |||
2341 | function Hash (hash) { | ||
2342 | Base.call(this, 'digest') | ||
2343 | |||
2344 | this._hash = hash | ||
2345 | } | ||
2346 | |||
2347 | inherits(Hash, Base) | ||
2348 | |||
2349 | Hash.prototype._update = function (data) { | ||
2350 | this._hash.update(data) | ||
2351 | } | ||
2352 | |||
2353 | Hash.prototype._final = function () { | ||
2354 | return this._hash.digest() | ||
2355 | } | ||
2356 | |||
2357 | module.exports = function createHash (alg) { | ||
2358 | alg = alg.toLowerCase() | ||
2359 | if (alg === 'md5') return new MD5() | ||
2360 | if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160() | ||
2361 | |||
2362 | return new Hash(sha(alg)) | ||
2363 | } | ||
2364 | |||
2365 | },{"cipher-base":7,"inherits":13,"md5.js":16,"ripemd160":33,"sha.js":36}],10:[function(require,module,exports){ | ||
2366 | // Copyright Joyent, Inc. and other Node contributors. | ||
2367 | // | ||
2368 | // Permission is hereby granted, free of charge, to any person obtaining a | ||
2369 | // copy of this software and associated documentation files (the | ||
2370 | // "Software"), to deal in the Software without restriction, including | ||
2371 | // without limitation the rights to use, copy, modify, merge, publish, | ||
2372 | // distribute, sublicense, and/or sell copies of the Software, and to permit | ||
2373 | // persons to whom the Software is furnished to do so, subject to the | ||
2374 | // following conditions: | ||
2375 | // | ||
2376 | // The above copyright notice and this permission notice shall be included | ||
2377 | // in all copies or substantial portions of the Software. | ||
2378 | // | ||
2379 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
2380 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
2381 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||
2382 | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
2383 | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
2384 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
2385 | // USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
2386 | |||
2387 | var objectCreate = Object.create || objectCreatePolyfill | ||
2388 | var objectKeys = Object.keys || objectKeysPolyfill | ||
2389 | var bind = Function.prototype.bind || functionBindPolyfill | ||
2390 | |||
2391 | function EventEmitter() { | ||
2392 | if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) { | ||
2393 | this._events = objectCreate(null); | ||
2394 | this._eventsCount = 0; | ||
2395 | } | ||
2396 | |||
2397 | this._maxListeners = this._maxListeners || undefined; | ||
2398 | } | ||
2399 | module.exports = EventEmitter; | ||
2400 | |||
2401 | // Backwards-compat with node 0.10.x | ||
2402 | EventEmitter.EventEmitter = EventEmitter; | ||
2403 | |||
2404 | EventEmitter.prototype._events = undefined; | ||
2405 | EventEmitter.prototype._maxListeners = undefined; | ||
2406 | |||
2407 | // By default EventEmitters will print a warning if more than 10 listeners are | ||
2408 | // added to it. This is a useful default which helps finding memory leaks. | ||
2409 | var defaultMaxListeners = 10; | ||
2410 | |||
2411 | var hasDefineProperty; | ||
2412 | try { | ||
2413 | var o = {}; | ||
2414 | if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 }); | ||
2415 | hasDefineProperty = o.x === 0; | ||
2416 | } catch (err) { hasDefineProperty = false } | ||
2417 | if (hasDefineProperty) { | ||
2418 | Object.defineProperty(EventEmitter, 'defaultMaxListeners', { | ||
2419 | enumerable: true, | ||
2420 | get: function() { | ||
2421 | return defaultMaxListeners; | ||
2422 | }, | ||
2423 | set: function(arg) { | ||
2424 | // check whether the input is a positive number (whose value is zero or | ||
2425 | // greater and not a NaN). | ||
2426 | if (typeof arg !== 'number' || arg < 0 || arg !== arg) | ||
2427 | throw new TypeError('"defaultMaxListeners" must be a positive number'); | ||
2428 | defaultMaxListeners = arg; | ||
2429 | } | ||
2430 | }); | ||
2431 | } else { | ||
2432 | EventEmitter.defaultMaxListeners = defaultMaxListeners; | ||
2433 | } | ||
2434 | |||
2435 | // Obviously not all Emitters should be limited to 10. This function allows | ||
2436 | // that to be increased. Set to zero for unlimited. | ||
2437 | EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { | ||
2438 | if (typeof n !== 'number' || n < 0 || isNaN(n)) | ||
2439 | throw new TypeError('"n" argument must be a positive number'); | ||
2440 | this._maxListeners = n; | ||
2441 | return this; | ||
2442 | }; | ||
2443 | |||
2444 | function $getMaxListeners(that) { | ||
2445 | if (that._maxListeners === undefined) | ||
2446 | return EventEmitter.defaultMaxListeners; | ||
2447 | return that._maxListeners; | ||
2448 | } | ||
2449 | |||
2450 | EventEmitter.prototype.getMaxListeners = function getMaxListeners() { | ||
2451 | return $getMaxListeners(this); | ||
2452 | }; | ||
2453 | |||
2454 | // These standalone emit* functions are used to optimize calling of event | ||
2455 | // handlers for fast cases because emit() itself often has a variable number of | ||
2456 | // arguments and can be deoptimized because of that. These functions always have | ||
2457 | // the same number of arguments and thus do not get deoptimized, so the code | ||
2458 | // inside them can execute faster. | ||
2459 | function emitNone(handler, isFn, self) { | ||
2460 | if (isFn) | ||
2461 | handler.call(self); | ||
2462 | else { | ||
2463 | var len = handler.length; | ||
2464 | var listeners = arrayClone(handler, len); | ||
2465 | for (var i = 0; i < len; ++i) | ||
2466 | listeners[i].call(self); | ||
2467 | } | ||
2468 | } | ||
2469 | function emitOne(handler, isFn, self, arg1) { | ||
2470 | if (isFn) | ||
2471 | handler.call(self, arg1); | ||
2472 | else { | ||
2473 | var len = handler.length; | ||
2474 | var listeners = arrayClone(handler, len); | ||
2475 | for (var i = 0; i < len; ++i) | ||
2476 | listeners[i].call(self, arg1); | ||
2477 | } | ||
2478 | } | ||
2479 | function emitTwo(handler, isFn, self, arg1, arg2) { | ||
2480 | if (isFn) | ||
2481 | handler.call(self, arg1, arg2); | ||
2482 | else { | ||
2483 | var len = handler.length; | ||
2484 | var listeners = arrayClone(handler, len); | ||
2485 | for (var i = 0; i < len; ++i) | ||
2486 | listeners[i].call(self, arg1, arg2); | ||
2487 | } | ||
2488 | } | ||
2489 | function emitThree(handler, isFn, self, arg1, arg2, arg3) { | ||
2490 | if (isFn) | ||
2491 | handler.call(self, arg1, arg2, arg3); | ||
2492 | else { | ||
2493 | var len = handler.length; | ||
2494 | var listeners = arrayClone(handler, len); | ||
2495 | for (var i = 0; i < len; ++i) | ||
2496 | listeners[i].call(self, arg1, arg2, arg3); | ||
2497 | } | ||
2498 | } | ||
2499 | |||
2500 | function emitMany(handler, isFn, self, args) { | ||
2501 | if (isFn) | ||
2502 | handler.apply(self, args); | ||
2503 | else { | ||
2504 | var len = handler.length; | ||
2505 | var listeners = arrayClone(handler, len); | ||
2506 | for (var i = 0; i < len; ++i) | ||
2507 | listeners[i].apply(self, args); | ||
2508 | } | ||
2509 | } | ||
2510 | |||
2511 | EventEmitter.prototype.emit = function emit(type) { | ||
2512 | var er, handler, len, args, i, events; | ||
2513 | var doError = (type === 'error'); | ||
2514 | |||
2515 | events = this._events; | ||
2516 | if (events) | ||
2517 | doError = (doError && events.error == null); | ||
2518 | else if (!doError) | ||
2519 | return false; | ||
2520 | |||
2521 | // If there is no 'error' event listener then throw. | ||
2522 | if (doError) { | ||
2523 | if (arguments.length > 1) | ||
2524 | er = arguments[1]; | ||
2525 | if (er instanceof Error) { | ||
2526 | throw er; // Unhandled 'error' event | ||
2527 | } else { | ||
2528 | // At least give some kind of context to the user | ||
2529 | var err = new Error('Unhandled "error" event. (' + er + ')'); | ||
2530 | err.context = er; | ||
2531 | throw err; | ||
2532 | } | ||
2533 | return false; | ||
2534 | } | ||
2535 | |||
2536 | handler = events[type]; | ||
2537 | |||
2538 | if (!handler) | ||
2539 | return false; | ||
2540 | |||
2541 | var isFn = typeof handler === 'function'; | ||
2542 | len = arguments.length; | ||
2543 | switch (len) { | ||
2544 | // fast cases | ||
2545 | case 1: | ||
2546 | emitNone(handler, isFn, this); | ||
2547 | break; | ||
2548 | case 2: | ||
2549 | emitOne(handler, isFn, this, arguments[1]); | ||
2550 | break; | ||
2551 | case 3: | ||
2552 | emitTwo(handler, isFn, this, arguments[1], arguments[2]); | ||
2553 | break; | ||
2554 | case 4: | ||
2555 | emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]); | ||
2556 | break; | ||
2557 | // slower | ||
2558 | default: | ||
2559 | args = new Array(len - 1); | ||
2560 | for (i = 1; i < len; i++) | ||
2561 | args[i - 1] = arguments[i]; | ||
2562 | emitMany(handler, isFn, this, args); | ||
2563 | } | ||
2564 | |||
2565 | return true; | ||
2566 | }; | ||
2567 | |||
2568 | function _addListener(target, type, listener, prepend) { | ||
2569 | var m; | ||
2570 | var events; | ||
2571 | var existing; | ||
2572 | |||
2573 | if (typeof listener !== 'function') | ||
2574 | throw new TypeError('"listener" argument must be a function'); | ||
2575 | |||
2576 | events = target._events; | ||
2577 | if (!events) { | ||
2578 | events = target._events = objectCreate(null); | ||
2579 | target._eventsCount = 0; | ||
2580 | } else { | ||
2581 | // To avoid recursion in the case that type === "newListener"! Before | ||
2582 | // adding it to the listeners, first emit "newListener". | ||
2583 | if (events.newListener) { | ||
2584 | target.emit('newListener', type, | ||
2585 | listener.listener ? listener.listener : listener); | ||
2586 | |||
2587 | // Re-assign `events` because a newListener handler could have caused the | ||
2588 | // this._events to be assigned to a new object | ||
2589 | events = target._events; | ||
2590 | } | ||
2591 | existing = events[type]; | ||
2592 | } | ||
2593 | |||
2594 | if (!existing) { | ||
2595 | // Optimize the case of one listener. Don't need the extra array object. | ||
2596 | existing = events[type] = listener; | ||
2597 | ++target._eventsCount; | ||
2598 | } else { | ||
2599 | if (typeof existing === 'function') { | ||
2600 | // Adding the second element, need to change to array. | ||
2601 | existing = events[type] = | ||
2602 | prepend ? [listener, existing] : [existing, listener]; | ||
2603 | } else { | ||
2604 | // If we've already got an array, just append. | ||
2605 | if (prepend) { | ||
2606 | existing.unshift(listener); | ||
2607 | } else { | ||
2608 | existing.push(listener); | ||
2609 | } | ||
2610 | } | ||
2611 | |||
2612 | // Check for listener leak | ||
2613 | if (!existing.warned) { | ||
2614 | m = $getMaxListeners(target); | ||
2615 | if (m && m > 0 && existing.length > m) { | ||
2616 | existing.warned = true; | ||
2617 | var w = new Error('Possible EventEmitter memory leak detected. ' + | ||
2618 | existing.length + ' "' + String(type) + '" listeners ' + | ||
2619 | 'added. Use emitter.setMaxListeners() to ' + | ||
2620 | 'increase limit.'); | ||
2621 | w.name = 'MaxListenersExceededWarning'; | ||
2622 | w.emitter = target; | ||
2623 | w.type = type; | ||
2624 | w.count = existing.length; | ||
2625 | if (typeof console === 'object' && console.warn) { | ||
2626 | console.warn('%s: %s', w.name, w.message); | ||
2627 | } | ||
2628 | } | ||
2629 | } | ||
2630 | } | ||
2631 | |||
2632 | return target; | ||
2633 | } | ||
2634 | |||
2635 | EventEmitter.prototype.addListener = function addListener(type, listener) { | ||
2636 | return _addListener(this, type, listener, false); | ||
2637 | }; | ||
2638 | |||
2639 | EventEmitter.prototype.on = EventEmitter.prototype.addListener; | ||
2640 | |||
2641 | EventEmitter.prototype.prependListener = | ||
2642 | function prependListener(type, listener) { | ||
2643 | return _addListener(this, type, listener, true); | ||
2644 | }; | ||
2645 | |||
2646 | function onceWrapper() { | ||
2647 | if (!this.fired) { | ||
2648 | this.target.removeListener(this.type, this.wrapFn); | ||
2649 | this.fired = true; | ||
2650 | switch (arguments.length) { | ||
2651 | case 0: | ||
2652 | return this.listener.call(this.target); | ||
2653 | case 1: | ||
2654 | return this.listener.call(this.target, arguments[0]); | ||
2655 | case 2: | ||
2656 | return this.listener.call(this.target, arguments[0], arguments[1]); | ||
2657 | case 3: | ||
2658 | return this.listener.call(this.target, arguments[0], arguments[1], | ||
2659 | arguments[2]); | ||
2660 | default: | ||
2661 | var args = new Array(arguments.length); | ||
2662 | for (var i = 0; i < args.length; ++i) | ||
2663 | args[i] = arguments[i]; | ||
2664 | this.listener.apply(this.target, args); | ||
2665 | } | ||
2666 | } | ||
2667 | } | ||
2668 | |||
2669 | function _onceWrap(target, type, listener) { | ||
2670 | var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; | ||
2671 | var wrapped = bind.call(onceWrapper, state); | ||
2672 | wrapped.listener = listener; | ||
2673 | state.wrapFn = wrapped; | ||
2674 | return wrapped; | ||
2675 | } | ||
2676 | |||
2677 | EventEmitter.prototype.once = function once(type, listener) { | ||
2678 | if (typeof listener !== 'function') | ||
2679 | throw new TypeError('"listener" argument must be a function'); | ||
2680 | this.on(type, _onceWrap(this, type, listener)); | ||
2681 | return this; | ||
2682 | }; | ||
2683 | |||
2684 | EventEmitter.prototype.prependOnceListener = | ||
2685 | function prependOnceListener(type, listener) { | ||
2686 | if (typeof listener !== 'function') | ||
2687 | throw new TypeError('"listener" argument must be a function'); | ||
2688 | this.prependListener(type, _onceWrap(this, type, listener)); | ||
2689 | return this; | ||
2690 | }; | ||
2691 | |||
2692 | // Emits a 'removeListener' event if and only if the listener was removed. | ||
2693 | EventEmitter.prototype.removeListener = | ||
2694 | function removeListener(type, listener) { | ||
2695 | var list, events, position, i, originalListener; | ||
2696 | |||
2697 | if (typeof listener !== 'function') | ||
2698 | throw new TypeError('"listener" argument must be a function'); | ||
2699 | |||
2700 | events = this._events; | ||
2701 | if (!events) | ||
2702 | return this; | ||
2703 | |||
2704 | list = events[type]; | ||
2705 | if (!list) | ||
2706 | return this; | ||
2707 | |||
2708 | if (list === listener || list.listener === listener) { | ||
2709 | if (--this._eventsCount === 0) | ||
2710 | this._events = objectCreate(null); | ||
2711 | else { | ||
2712 | delete events[type]; | ||
2713 | if (events.removeListener) | ||
2714 | this.emit('removeListener', type, list.listener || listener); | ||
2715 | } | ||
2716 | } else if (typeof list !== 'function') { | ||
2717 | position = -1; | ||
2718 | |||
2719 | for (i = list.length - 1; i >= 0; i--) { | ||
2720 | if (list[i] === listener || list[i].listener === listener) { | ||
2721 | originalListener = list[i].listener; | ||
2722 | position = i; | ||
2723 | break; | ||
2724 | } | ||
2725 | } | ||
2726 | |||
2727 | if (position < 0) | ||
2728 | return this; | ||
2729 | |||
2730 | if (position === 0) | ||
2731 | list.shift(); | ||
2732 | else | ||
2733 | spliceOne(list, position); | ||
2734 | |||
2735 | if (list.length === 1) | ||
2736 | events[type] = list[0]; | ||
2737 | |||
2738 | if (events.removeListener) | ||
2739 | this.emit('removeListener', type, originalListener || listener); | ||
2740 | } | ||
2741 | |||
2742 | return this; | ||
2743 | }; | ||
2744 | |||
2745 | EventEmitter.prototype.removeAllListeners = | ||
2746 | function removeAllListeners(type) { | ||
2747 | var listeners, events, i; | ||
2748 | |||
2749 | events = this._events; | ||
2750 | if (!events) | ||
2751 | return this; | ||
2752 | |||
2753 | // not listening for removeListener, no need to emit | ||
2754 | if (!events.removeListener) { | ||
2755 | if (arguments.length === 0) { | ||
2756 | this._events = objectCreate(null); | ||
2757 | this._eventsCount = 0; | ||
2758 | } else if (events[type]) { | ||
2759 | if (--this._eventsCount === 0) | ||
2760 | this._events = objectCreate(null); | ||
2761 | else | ||
2762 | delete events[type]; | ||
2763 | } | ||
2764 | return this; | ||
2765 | } | ||
2766 | |||
2767 | // emit removeListener for all listeners on all events | ||
2768 | if (arguments.length === 0) { | ||
2769 | var keys = objectKeys(events); | ||
2770 | var key; | ||
2771 | for (i = 0; i < keys.length; ++i) { | ||
2772 | key = keys[i]; | ||
2773 | if (key === 'removeListener') continue; | ||
2774 | this.removeAllListeners(key); | ||
2775 | } | ||
2776 | this.removeAllListeners('removeListener'); | ||
2777 | this._events = objectCreate(null); | ||
2778 | this._eventsCount = 0; | ||
2779 | return this; | ||
2780 | } | ||
2781 | |||
2782 | listeners = events[type]; | ||
2783 | |||
2784 | if (typeof listeners === 'function') { | ||
2785 | this.removeListener(type, listeners); | ||
2786 | } else if (listeners) { | ||
2787 | // LIFO order | ||
2788 | for (i = listeners.length - 1; i >= 0; i--) { | ||
2789 | this.removeListener(type, listeners[i]); | ||
2790 | } | ||
2791 | } | ||
2792 | |||
2793 | return this; | ||
2794 | }; | ||
2795 | |||
2796 | function _listeners(target, type, unwrap) { | ||
2797 | var events = target._events; | ||
2798 | |||
2799 | if (!events) | ||
2800 | return []; | ||
2801 | |||
2802 | var evlistener = events[type]; | ||
2803 | if (!evlistener) | ||
2804 | return []; | ||
2805 | |||
2806 | if (typeof evlistener === 'function') | ||
2807 | return unwrap ? [evlistener.listener || evlistener] : [evlistener]; | ||
2808 | |||
2809 | return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); | ||
2810 | } | ||
2811 | |||
2812 | EventEmitter.prototype.listeners = function listeners(type) { | ||
2813 | return _listeners(this, type, true); | ||
2814 | }; | ||
2815 | |||
2816 | EventEmitter.prototype.rawListeners = function rawListeners(type) { | ||
2817 | return _listeners(this, type, false); | ||
2818 | }; | ||
2819 | |||
2820 | EventEmitter.listenerCount = function(emitter, type) { | ||
2821 | if (typeof emitter.listenerCount === 'function') { | ||
2822 | return emitter.listenerCount(type); | ||
2823 | } else { | ||
2824 | return listenerCount.call(emitter, type); | ||
2825 | } | ||
2826 | }; | ||
2827 | |||
2828 | EventEmitter.prototype.listenerCount = listenerCount; | ||
2829 | function listenerCount(type) { | ||
2830 | var events = this._events; | ||
2831 | |||
2832 | if (events) { | ||
2833 | var evlistener = events[type]; | ||
2834 | |||
2835 | if (typeof evlistener === 'function') { | ||
2836 | return 1; | ||
2837 | } else if (evlistener) { | ||
2838 | return evlistener.length; | ||
2839 | } | ||
2840 | } | ||
2841 | |||
2842 | return 0; | ||
2843 | } | ||
2844 | |||
2845 | EventEmitter.prototype.eventNames = function eventNames() { | ||
2846 | return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; | ||
2847 | }; | ||
2848 | |||
2849 | // About 1.5x faster than the two-arg version of Array#splice(). | ||
2850 | function spliceOne(list, index) { | ||
2851 | for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) | ||
2852 | list[i] = list[k]; | ||
2853 | list.pop(); | ||
2854 | } | ||
2855 | |||
2856 | function arrayClone(arr, n) { | ||
2857 | var copy = new Array(n); | ||
2858 | for (var i = 0; i < n; ++i) | ||
2859 | copy[i] = arr[i]; | ||
2860 | return copy; | ||
2861 | } | ||
2862 | |||
2863 | function unwrapListeners(arr) { | ||
2864 | var ret = new Array(arr.length); | ||
2865 | for (var i = 0; i < ret.length; ++i) { | ||
2866 | ret[i] = arr[i].listener || arr[i]; | ||
2867 | } | ||
2868 | return ret; | ||
2869 | } | ||
2870 | |||
2871 | function objectCreatePolyfill(proto) { | ||
2872 | var F = function() {}; | ||
2873 | F.prototype = proto; | ||
2874 | return new F; | ||
2875 | } | ||
2876 | function objectKeysPolyfill(obj) { | ||
2877 | var keys = []; | ||
2878 | for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) { | ||
2879 | keys.push(k); | ||
2880 | } | ||
2881 | return k; | ||
2882 | } | ||
2883 | function functionBindPolyfill(context) { | ||
2884 | var fn = this; | ||
2885 | return function () { | ||
2886 | return fn.apply(context, arguments); | ||
2887 | }; | ||
2888 | } | ||
2889 | |||
2890 | },{}],11:[function(require,module,exports){ | ||
2891 | 'use strict' | ||
2892 | var Buffer = require('safe-buffer').Buffer | ||
2893 | var Transform = require('stream').Transform | ||
2894 | var inherits = require('inherits') | ||
2895 | |||
2896 | function throwIfNotStringOrBuffer (val, prefix) { | ||
2897 | if (!Buffer.isBuffer(val) && typeof val !== 'string') { | ||
2898 | throw new TypeError(prefix + ' must be a string or a buffer') | ||
2899 | } | ||
2900 | } | ||
2901 | |||
2902 | function HashBase (blockSize) { | ||
2903 | Transform.call(this) | ||
2904 | |||
2905 | this._block = Buffer.allocUnsafe(blockSize) | ||
2906 | this._blockSize = blockSize | ||
2907 | this._blockOffset = 0 | ||
2908 | this._length = [0, 0, 0, 0] | ||
2909 | |||
2910 | this._finalized = false | ||
2911 | } | ||
2912 | |||
2913 | inherits(HashBase, Transform) | ||
2914 | |||
2915 | HashBase.prototype._transform = function (chunk, encoding, callback) { | ||
2916 | var error = null | ||
2917 | try { | ||
2918 | this.update(chunk, encoding) | ||
2919 | } catch (err) { | ||
2920 | error = err | ||
2921 | } | ||
2922 | |||
2923 | callback(error) | ||
2924 | } | ||
2925 | |||
2926 | HashBase.prototype._flush = function (callback) { | ||
2927 | var error = null | ||
2928 | try { | ||
2929 | this.push(this.digest()) | ||
2930 | } catch (err) { | ||
2931 | error = err | ||
2932 | } | ||
2933 | |||
2934 | callback(error) | ||
2935 | } | ||
2936 | |||
2937 | HashBase.prototype.update = function (data, encoding) { | ||
2938 | throwIfNotStringOrBuffer(data, 'Data') | ||
2939 | if (this._finalized) throw new Error('Digest already called') | ||
2940 | if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding) | ||
2941 | |||
2942 | // consume data | ||
2943 | var block = this._block | ||
2944 | var offset = 0 | ||
2945 | while (this._blockOffset + data.length - offset >= this._blockSize) { | ||
2946 | for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++] | ||
2947 | this._update() | ||
2948 | this._blockOffset = 0 | ||
2949 | } | ||
2950 | while (offset < data.length) block[this._blockOffset++] = data[offset++] | ||
2951 | |||
2952 | // update length | ||
2953 | for (var j = 0, carry = data.length * 8; carry > 0; ++j) { | ||
2954 | this._length[j] += carry | ||
2955 | carry = (this._length[j] / 0x0100000000) | 0 | ||
2956 | if (carry > 0) this._length[j] -= 0x0100000000 * carry | ||
2957 | } | ||
2958 | |||
2959 | return this | ||
2960 | } | ||
2961 | |||
2962 | HashBase.prototype._update = function () { | ||
2963 | throw new Error('_update is not implemented') | ||
2964 | } | ||
2965 | |||
2966 | HashBase.prototype.digest = function (encoding) { | ||
2967 | if (this._finalized) throw new Error('Digest already called') | ||
2968 | this._finalized = true | ||
2969 | |||
2970 | var digest = this._digest() | ||
2971 | if (encoding !== undefined) digest = digest.toString(encoding) | ||
2972 | |||
2973 | // reset state | ||
2974 | this._block.fill(0) | ||
2975 | this._blockOffset = 0 | ||
2976 | for (var i = 0; i < 4; ++i) this._length[i] = 0 | ||
2977 | |||
2978 | return digest | ||
2979 | } | ||
2980 | |||
2981 | HashBase.prototype._digest = function () { | ||
2982 | throw new Error('_digest is not implemented') | ||
2983 | } | ||
2984 | |||
2985 | module.exports = HashBase | ||
2986 | |||
2987 | },{"inherits":13,"safe-buffer":34,"stream":43}],12:[function(require,module,exports){ | ||
2988 | exports.read = function (buffer, offset, isLE, mLen, nBytes) { | ||
2989 | var e, m | ||
2990 | var eLen = (nBytes * 8) - mLen - 1 | ||
2991 | var eMax = (1 << eLen) - 1 | ||
2992 | var eBias = eMax >> 1 | ||
2993 | var nBits = -7 | ||
2994 | var i = isLE ? (nBytes - 1) : 0 | ||
2995 | var d = isLE ? -1 : 1 | ||
2996 | var s = buffer[offset + i] | ||
2997 | |||
2998 | i += d | ||
2999 | |||
3000 | e = s & ((1 << (-nBits)) - 1) | ||
3001 | s >>= (-nBits) | ||
3002 | nBits += eLen | ||
3003 | for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} | ||
3004 | |||
3005 | m = e & ((1 << (-nBits)) - 1) | ||
3006 | e >>= (-nBits) | ||
3007 | nBits += mLen | ||
3008 | for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} | ||
3009 | |||
3010 | if (e === 0) { | ||
3011 | e = 1 - eBias | ||
3012 | } else if (e === eMax) { | ||
3013 | return m ? NaN : ((s ? -1 : 1) * Infinity) | ||
3014 | } else { | ||
3015 | m = m + Math.pow(2, mLen) | ||
3016 | e = e - eBias | ||
3017 | } | ||
3018 | return (s ? -1 : 1) * m * Math.pow(2, e - mLen) | ||
3019 | } | ||
3020 | |||
3021 | exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { | ||
3022 | var e, m, c | ||
3023 | var eLen = (nBytes * 8) - mLen - 1 | ||
3024 | var eMax = (1 << eLen) - 1 | ||
3025 | var eBias = eMax >> 1 | ||
3026 | var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) | ||
3027 | var i = isLE ? 0 : (nBytes - 1) | ||
3028 | var d = isLE ? 1 : -1 | ||
3029 | var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 | ||
3030 | |||
3031 | value = Math.abs(value) | ||
3032 | |||
3033 | if (isNaN(value) || value === Infinity) { | ||
3034 | m = isNaN(value) ? 1 : 0 | ||
3035 | e = eMax | ||
3036 | } else { | ||
3037 | e = Math.floor(Math.log(value) / Math.LN2) | ||
3038 | if (value * (c = Math.pow(2, -e)) < 1) { | ||
3039 | e-- | ||
3040 | c *= 2 | ||
3041 | } | ||
3042 | if (e + eBias >= 1) { | ||
3043 | value += rt / c | ||
3044 | } else { | ||
3045 | value += rt * Math.pow(2, 1 - eBias) | ||
3046 | } | ||
3047 | if (value * c >= 2) { | ||
3048 | e++ | ||
3049 | c /= 2 | ||
3050 | } | ||
3051 | |||
3052 | if (e + eBias >= eMax) { | ||
3053 | m = 0 | ||
3054 | e = eMax | ||
3055 | } else if (e + eBias >= 1) { | ||
3056 | m = ((value * c) - 1) * Math.pow(2, mLen) | ||
3057 | e = e + eBias | ||
3058 | } else { | ||
3059 | m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) | ||
3060 | e = 0 | ||
3061 | } | ||
3062 | } | ||
3063 | |||
3064 | for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} | ||
3065 | |||
3066 | e = (e << mLen) | m | ||
3067 | eLen += mLen | ||
3068 | for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} | ||
3069 | |||
3070 | buffer[offset + i - d] |= s * 128 | ||
3071 | } | ||
3072 | |||
3073 | },{}],13:[function(require,module,exports){ | ||
3074 | if (typeof Object.create === 'function') { | ||
3075 | // implementation from standard node.js 'util' module | ||
3076 | module.exports = function inherits(ctor, superCtor) { | ||
3077 | ctor.super_ = superCtor | ||
3078 | ctor.prototype = Object.create(superCtor.prototype, { | ||
3079 | constructor: { | ||
3080 | value: ctor, | ||
3081 | enumerable: false, | ||
3082 | writable: true, | ||
3083 | configurable: true | ||
3084 | } | ||
3085 | }); | ||
3086 | }; | ||
3087 | } else { | ||
3088 | // old school shim for old browsers | ||
3089 | module.exports = function inherits(ctor, superCtor) { | ||
3090 | ctor.super_ = superCtor | ||
3091 | var TempCtor = function () {} | ||
3092 | TempCtor.prototype = superCtor.prototype | ||
3093 | ctor.prototype = new TempCtor() | ||
3094 | ctor.prototype.constructor = ctor | ||
3095 | } | ||
3096 | } | ||
3097 | |||
3098 | },{}],14:[function(require,module,exports){ | ||
3099 | /*! | ||
3100 | * Determine if an object is a Buffer | ||
3101 | * | ||
3102 | * @author Feross Aboukhadijeh <https://feross.org> | ||
3103 | * @license MIT | ||
3104 | */ | ||
3105 | |||
3106 | // The _isBuffer check is for Safari 5-7 support, because it's missing | ||
3107 | // Object.prototype.constructor. Remove this eventually | ||
3108 | module.exports = function (obj) { | ||
3109 | return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) | ||
3110 | } | ||
3111 | |||
3112 | function isBuffer (obj) { | ||
3113 | return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) | ||
3114 | } | ||
3115 | |||
3116 | // For Node v0.10 support. Remove this eventually. | ||
3117 | function isSlowBuffer (obj) { | ||
3118 | return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) | ||
3119 | } | ||
3120 | |||
3121 | },{}],15:[function(require,module,exports){ | ||
3122 | var toString = {}.toString; | ||
3123 | |||
3124 | module.exports = Array.isArray || function (arr) { | ||
3125 | return toString.call(arr) == '[object Array]'; | ||
3126 | }; | ||
3127 | |||
3128 | },{}],16:[function(require,module,exports){ | ||
3129 | 'use strict' | ||
3130 | var inherits = require('inherits') | ||
3131 | var HashBase = require('hash-base') | ||
3132 | var Buffer = require('safe-buffer').Buffer | ||
3133 | |||
3134 | var ARRAY16 = new Array(16) | ||
3135 | |||
3136 | function MD5 () { | ||
3137 | HashBase.call(this, 64) | ||
3138 | |||
3139 | // state | ||
3140 | this._a = 0x67452301 | ||
3141 | this._b = 0xefcdab89 | ||
3142 | this._c = 0x98badcfe | ||
3143 | this._d = 0x10325476 | ||
3144 | } | ||
3145 | |||
3146 | inherits(MD5, HashBase) | ||
3147 | |||
3148 | MD5.prototype._update = function () { | ||
3149 | var M = ARRAY16 | ||
3150 | for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4) | ||
3151 | |||
3152 | var a = this._a | ||
3153 | var b = this._b | ||
3154 | var c = this._c | ||
3155 | var d = this._d | ||
3156 | |||
3157 | a = fnF(a, b, c, d, M[0], 0xd76aa478, 7) | ||
3158 | d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12) | ||
3159 | c = fnF(c, d, a, b, M[2], 0x242070db, 17) | ||
3160 | b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22) | ||
3161 | a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7) | ||
3162 | d = fnF(d, a, b, c, M[5], 0x4787c62a, 12) | ||
3163 | c = fnF(c, d, a, b, M[6], 0xa8304613, 17) | ||
3164 | b = fnF(b, c, d, a, M[7], 0xfd469501, 22) | ||
3165 | a = fnF(a, b, c, d, M[8], 0x698098d8, 7) | ||
3166 | d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12) | ||
3167 | c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17) | ||
3168 | b = fnF(b, c, d, a, M[11], 0x895cd7be, 22) | ||
3169 | a = fnF(a, b, c, d, M[12], 0x6b901122, 7) | ||
3170 | d = fnF(d, a, b, c, M[13], 0xfd987193, 12) | ||
3171 | c = fnF(c, d, a, b, M[14], 0xa679438e, 17) | ||
3172 | b = fnF(b, c, d, a, M[15], 0x49b40821, 22) | ||
3173 | |||
3174 | a = fnG(a, b, c, d, M[1], 0xf61e2562, 5) | ||
3175 | d = fnG(d, a, b, c, M[6], 0xc040b340, 9) | ||
3176 | c = fnG(c, d, a, b, M[11], 0x265e5a51, 14) | ||
3177 | b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20) | ||
3178 | a = fnG(a, b, c, d, M[5], 0xd62f105d, 5) | ||
3179 | d = fnG(d, a, b, c, M[10], 0x02441453, 9) | ||
3180 | c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14) | ||
3181 | b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20) | ||
3182 | a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5) | ||
3183 | d = fnG(d, a, b, c, M[14], 0xc33707d6, 9) | ||
3184 | c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14) | ||
3185 | b = fnG(b, c, d, a, M[8], 0x455a14ed, 20) | ||
3186 | a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5) | ||
3187 | d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9) | ||
3188 | c = fnG(c, d, a, b, M[7], 0x676f02d9, 14) | ||
3189 | b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20) | ||
3190 | |||
3191 | a = fnH(a, b, c, d, M[5], 0xfffa3942, 4) | ||
3192 | d = fnH(d, a, b, c, M[8], 0x8771f681, 11) | ||
3193 | c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16) | ||
3194 | b = fnH(b, c, d, a, M[14], 0xfde5380c, 23) | ||
3195 | a = fnH(a, b, c, d, M[1], 0xa4beea44, 4) | ||
3196 | d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11) | ||
3197 | c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16) | ||
3198 | b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23) | ||
3199 | a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4) | ||
3200 | d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11) | ||
3201 | c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16) | ||
3202 | b = fnH(b, c, d, a, M[6], 0x04881d05, 23) | ||
3203 | a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4) | ||
3204 | d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11) | ||
3205 | c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16) | ||
3206 | b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23) | ||
3207 | |||
3208 | a = fnI(a, b, c, d, M[0], 0xf4292244, 6) | ||
3209 | d = fnI(d, a, b, c, M[7], 0x432aff97, 10) | ||
3210 | c = fnI(c, d, a, b, M[14], 0xab9423a7, 15) | ||
3211 | b = fnI(b, c, d, a, M[5], 0xfc93a039, 21) | ||
3212 | a = fnI(a, b, c, d, M[12], 0x655b59c3, 6) | ||
3213 | d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10) | ||
3214 | c = fnI(c, d, a, b, M[10], 0xffeff47d, 15) | ||
3215 | b = fnI(b, c, d, a, M[1], 0x85845dd1, 21) | ||
3216 | a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6) | ||
3217 | d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10) | ||
3218 | c = fnI(c, d, a, b, M[6], 0xa3014314, 15) | ||
3219 | b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21) | ||
3220 | a = fnI(a, b, c, d, M[4], 0xf7537e82, 6) | ||
3221 | d = fnI(d, a, b, c, M[11], 0xbd3af235, 10) | ||
3222 | c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15) | ||
3223 | b = fnI(b, c, d, a, M[9], 0xeb86d391, 21) | ||
3224 | |||
3225 | this._a = (this._a + a) | 0 | ||
3226 | this._b = (this._b + b) | 0 | ||
3227 | this._c = (this._c + c) | 0 | ||
3228 | this._d = (this._d + d) | 0 | ||
3229 | } | ||
3230 | |||
3231 | MD5.prototype._digest = function () { | ||
3232 | // create padding and handle blocks | ||
3233 | this._block[this._blockOffset++] = 0x80 | ||
3234 | if (this._blockOffset > 56) { | ||
3235 | this._block.fill(0, this._blockOffset, 64) | ||
3236 | this._update() | ||
3237 | this._blockOffset = 0 | ||
3238 | } | ||
3239 | |||
3240 | this._block.fill(0, this._blockOffset, 56) | ||
3241 | this._block.writeUInt32LE(this._length[0], 56) | ||
3242 | this._block.writeUInt32LE(this._length[1], 60) | ||
3243 | this._update() | ||
3244 | |||
3245 | // produce result | ||
3246 | var buffer = Buffer.allocUnsafe(16) | ||
3247 | buffer.writeInt32LE(this._a, 0) | ||
3248 | buffer.writeInt32LE(this._b, 4) | ||
3249 | buffer.writeInt32LE(this._c, 8) | ||
3250 | buffer.writeInt32LE(this._d, 12) | ||
3251 | return buffer | ||
3252 | } | ||
3253 | |||
3254 | function rotl (x, n) { | ||
3255 | return (x << n) | (x >>> (32 - n)) | ||
3256 | } | ||
3257 | |||
3258 | function fnF (a, b, c, d, m, k, s) { | ||
3259 | return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0 | ||
3260 | } | ||
3261 | |||
3262 | function fnG (a, b, c, d, m, k, s) { | ||
3263 | return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0 | ||
3264 | } | ||
3265 | |||
3266 | function fnH (a, b, c, d, m, k, s) { | ||
3267 | return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0 | ||
3268 | } | ||
3269 | |||
3270 | function fnI (a, b, c, d, m, k, s) { | ||
3271 | return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0 | ||
3272 | } | ||
3273 | |||
3274 | module.exports = MD5 | ||
3275 | |||
3276 | },{"hash-base":11,"inherits":13,"safe-buffer":34}],17:[function(require,module,exports){ | ||
3277 | (function (process){ | ||
3278 | 'use strict'; | ||
3279 | |||
3280 | if (!process.version || | ||
3281 | process.version.indexOf('v0.') === 0 || | ||
3282 | process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { | ||
3283 | module.exports = { nextTick: nextTick }; | ||
3284 | } else { | ||
3285 | module.exports = process | ||
3286 | } | ||
3287 | |||
3288 | function nextTick(fn, arg1, arg2, arg3) { | ||
3289 | if (typeof fn !== 'function') { | ||
3290 | throw new TypeError('"callback" argument must be a function'); | ||
3291 | } | ||
3292 | var len = arguments.length; | ||
3293 | var args, i; | ||
3294 | switch (len) { | ||
3295 | case 0: | ||
3296 | case 1: | ||
3297 | return process.nextTick(fn); | ||
3298 | case 2: | ||
3299 | return process.nextTick(function afterTickOne() { | ||
3300 | fn.call(null, arg1); | ||
3301 | }); | ||
3302 | case 3: | ||
3303 | return process.nextTick(function afterTickTwo() { | ||
3304 | fn.call(null, arg1, arg2); | ||
3305 | }); | ||
3306 | case 4: | ||
3307 | return process.nextTick(function afterTickThree() { | ||
3308 | fn.call(null, arg1, arg2, arg3); | ||
3309 | }); | ||
3310 | default: | ||
3311 | args = new Array(len - 1); | ||
3312 | i = 0; | ||
3313 | while (i < args.length) { | ||
3314 | args[i++] = arguments[i]; | ||
3315 | } | ||
3316 | return process.nextTick(function afterTick() { | ||
3317 | fn.apply(null, args); | ||
3318 | }); | ||
3319 | } | ||
3320 | } | ||
3321 | |||
3322 | |||
3323 | }).call(this,require('_process')) | ||
3324 | },{"_process":18}],18:[function(require,module,exports){ | ||
3325 | // shim for using process in browser | ||
3326 | var process = module.exports = {}; | ||
3327 | |||
3328 | // cached from whatever global is present so that test runners that stub it | ||
3329 | // don't break things. But we need to wrap it in a try catch in case it is | ||
3330 | // wrapped in strict mode code which doesn't define any globals. It's inside a | ||
3331 | // function because try/catches deoptimize in certain engines. | ||
3332 | |||
3333 | var cachedSetTimeout; | ||
3334 | var cachedClearTimeout; | ||
3335 | |||
3336 | function defaultSetTimout() { | ||
3337 | throw new Error('setTimeout has not been defined'); | ||
3338 | } | ||
3339 | function defaultClearTimeout () { | ||
3340 | throw new Error('clearTimeout has not been defined'); | ||
3341 | } | ||
3342 | (function () { | ||
3343 | try { | ||
3344 | if (typeof setTimeout === 'function') { | ||
3345 | cachedSetTimeout = setTimeout; | ||
3346 | } else { | ||
3347 | cachedSetTimeout = defaultSetTimout; | ||
3348 | } | ||
3349 | } catch (e) { | ||
3350 | cachedSetTimeout = defaultSetTimout; | ||
3351 | } | ||
3352 | try { | ||
3353 | if (typeof clearTimeout === 'function') { | ||
3354 | cachedClearTimeout = clearTimeout; | ||
3355 | } else { | ||
3356 | cachedClearTimeout = defaultClearTimeout; | ||
3357 | } | ||
3358 | } catch (e) { | ||
3359 | cachedClearTimeout = defaultClearTimeout; | ||
3360 | } | ||
3361 | } ()) | ||
3362 | function runTimeout(fun) { | ||
3363 | if (cachedSetTimeout === setTimeout) { | ||
3364 | //normal enviroments in sane situations | ||
3365 | return setTimeout(fun, 0); | ||
3366 | } | ||
3367 | // if setTimeout wasn't available but was latter defined | ||
3368 | if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { | ||
3369 | cachedSetTimeout = setTimeout; | ||
3370 | return setTimeout(fun, 0); | ||
3371 | } | ||
3372 | try { | ||
3373 | // when when somebody has screwed with setTimeout but no I.E. maddness | ||
3374 | return cachedSetTimeout(fun, 0); | ||
3375 | } catch(e){ | ||
3376 | try { | ||
3377 | // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally | ||
3378 | return cachedSetTimeout.call(null, fun, 0); | ||
3379 | } catch(e){ | ||
3380 | // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error | ||
3381 | return cachedSetTimeout.call(this, fun, 0); | ||
3382 | } | ||
3383 | } | ||
3384 | |||
3385 | |||
3386 | } | ||
3387 | function runClearTimeout(marker) { | ||
3388 | if (cachedClearTimeout === clearTimeout) { | ||
3389 | //normal enviroments in sane situations | ||
3390 | return clearTimeout(marker); | ||
3391 | } | ||
3392 | // if clearTimeout wasn't available but was latter defined | ||
3393 | if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { | ||
3394 | cachedClearTimeout = clearTimeout; | ||
3395 | return clearTimeout(marker); | ||
3396 | } | ||
3397 | try { | ||
3398 | // when when somebody has screwed with setTimeout but no I.E. maddness | ||
3399 | return cachedClearTimeout(marker); | ||
3400 | } catch (e){ | ||
3401 | try { | ||
3402 | // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally | ||
3403 | return cachedClearTimeout.call(null, marker); | ||
3404 | } catch (e){ | ||
3405 | // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. | ||
3406 | // Some versions of I.E. have different rules for clearTimeout vs setTimeout | ||
3407 | return cachedClearTimeout.call(this, marker); | ||
3408 | } | ||
3409 | } | ||
3410 | |||
3411 | |||
3412 | |||
3413 | } | ||
3414 | var queue = []; | ||
3415 | var draining = false; | ||
3416 | var currentQueue; | ||
3417 | var queueIndex = -1; | ||
3418 | |||
3419 | function cleanUpNextTick() { | ||
3420 | if (!draining || !currentQueue) { | ||
3421 | return; | ||
3422 | } | ||
3423 | draining = false; | ||
3424 | if (currentQueue.length) { | ||
3425 | queue = currentQueue.concat(queue); | ||
3426 | } else { | ||
3427 | queueIndex = -1; | ||
3428 | } | ||
3429 | if (queue.length) { | ||
3430 | drainQueue(); | ||
3431 | } | ||
3432 | } | ||
3433 | |||
3434 | function drainQueue() { | ||
3435 | if (draining) { | ||
3436 | return; | ||
3437 | } | ||
3438 | var timeout = runTimeout(cleanUpNextTick); | ||
3439 | draining = true; | ||
3440 | |||
3441 | var len = queue.length; | ||
3442 | while(len) { | ||
3443 | currentQueue = queue; | ||
3444 | queue = []; | ||
3445 | while (++queueIndex < len) { | ||
3446 | if (currentQueue) { | ||
3447 | currentQueue[queueIndex].run(); | ||
3448 | } | ||
3449 | } | ||
3450 | queueIndex = -1; | ||
3451 | len = queue.length; | ||
3452 | } | ||
3453 | currentQueue = null; | ||
3454 | draining = false; | ||
3455 | runClearTimeout(timeout); | ||
3456 | } | ||
3457 | |||
3458 | process.nextTick = function (fun) { | ||
3459 | var args = new Array(arguments.length - 1); | ||
3460 | if (arguments.length > 1) { | ||
3461 | for (var i = 1; i < arguments.length; i++) { | ||
3462 | args[i - 1] = arguments[i]; | ||
3463 | } | ||
3464 | } | ||
3465 | queue.push(new Item(fun, args)); | ||
3466 | if (queue.length === 1 && !draining) { | ||
3467 | runTimeout(drainQueue); | ||
3468 | } | ||
3469 | }; | ||
3470 | |||
3471 | // v8 likes predictible objects | ||
3472 | function Item(fun, array) { | ||
3473 | this.fun = fun; | ||
3474 | this.array = array; | ||
3475 | } | ||
3476 | Item.prototype.run = function () { | ||
3477 | this.fun.apply(null, this.array); | ||
3478 | }; | ||
3479 | process.title = 'browser'; | ||
3480 | process.browser = true; | ||
3481 | process.env = {}; | ||
3482 | process.argv = []; | ||
3483 | process.version = ''; // empty string to avoid regexp issues | ||
3484 | process.versions = {}; | ||
3485 | |||
3486 | function noop() {} | ||
3487 | |||
3488 | process.on = noop; | ||
3489 | process.addListener = noop; | ||
3490 | process.once = noop; | ||
3491 | process.off = noop; | ||
3492 | process.removeListener = noop; | ||
3493 | process.removeAllListeners = noop; | ||
3494 | process.emit = noop; | ||
3495 | process.prependListener = noop; | ||
3496 | process.prependOnceListener = noop; | ||
3497 | |||
3498 | process.listeners = function (name) { return [] } | ||
3499 | |||
3500 | process.binding = function (name) { | ||
3501 | throw new Error('process.binding is not supported'); | ||
3502 | }; | ||
3503 | |||
3504 | process.cwd = function () { return '/' }; | ||
3505 | process.chdir = function (dir) { | ||
3506 | throw new Error('process.chdir is not supported'); | ||
3507 | }; | ||
3508 | process.umask = function() { return 0; }; | ||
3509 | |||
3510 | },{}],19:[function(require,module,exports){ | ||
3511 | module.exports = require('./lib/_stream_duplex.js'); | ||
3512 | |||
3513 | },{"./lib/_stream_duplex.js":20}],20:[function(require,module,exports){ | ||
3514 | // Copyright Joyent, Inc. and other Node contributors. | ||
3515 | // | ||
3516 | // Permission is hereby granted, free of charge, to any person obtaining a | ||
3517 | // copy of this software and associated documentation files (the | ||
3518 | // "Software"), to deal in the Software without restriction, including | ||
3519 | // without limitation the rights to use, copy, modify, merge, publish, | ||
3520 | // distribute, sublicense, and/or sell copies of the Software, and to permit | ||
3521 | // persons to whom the Software is furnished to do so, subject to the | ||
3522 | // following conditions: | ||
3523 | // | ||
3524 | // The above copyright notice and this permission notice shall be included | ||
3525 | // in all copies or substantial portions of the Software. | ||
3526 | // | ||
3527 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
3528 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
3529 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||
3530 | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
3531 | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
3532 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
3533 | // USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
3534 | |||
3535 | // a duplex stream is just a stream that is both readable and writable. | ||
3536 | // Since JS doesn't have multiple prototypal inheritance, this class | ||
3537 | // prototypally inherits from Readable, and then parasitically from | ||
3538 | // Writable. | ||
3539 | |||
3540 | 'use strict'; | ||
3541 | |||
3542 | /*<replacement>*/ | ||
3543 | |||
3544 | var pna = require('process-nextick-args'); | ||
3545 | /*</replacement>*/ | ||
3546 | |||
3547 | /*<replacement>*/ | ||
3548 | var objectKeys = Object.keys || function (obj) { | ||
3549 | var keys = []; | ||
3550 | for (var key in obj) { | ||
3551 | keys.push(key); | ||
3552 | }return keys; | ||
3553 | }; | ||
3554 | /*</replacement>*/ | ||
3555 | |||
3556 | module.exports = Duplex; | ||
3557 | |||
3558 | /*<replacement>*/ | ||
3559 | var util = require('core-util-is'); | ||
3560 | util.inherits = require('inherits'); | ||
3561 | /*</replacement>*/ | ||
3562 | |||
3563 | var Readable = require('./_stream_readable'); | ||
3564 | var Writable = require('./_stream_writable'); | ||
3565 | |||
3566 | util.inherits(Duplex, Readable); | ||
3567 | |||
3568 | { | ||
3569 | // avoid scope creep, the keys array can then be collected | ||
3570 | var keys = objectKeys(Writable.prototype); | ||
3571 | for (var v = 0; v < keys.length; v++) { | ||
3572 | var method = keys[v]; | ||
3573 | if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; | ||
3574 | } | ||
3575 | } | ||
3576 | |||
3577 | function Duplex(options) { | ||
3578 | if (!(this instanceof Duplex)) return new Duplex(options); | ||
3579 | |||
3580 | Readable.call(this, options); | ||
3581 | Writable.call(this, options); | ||
3582 | |||
3583 | if (options && options.readable === false) this.readable = false; | ||
3584 | |||
3585 | if (options && options.writable === false) this.writable = false; | ||
3586 | |||
3587 | this.allowHalfOpen = true; | ||
3588 | if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; | ||
3589 | |||
3590 | this.once('end', onend); | ||
3591 | } | ||
3592 | |||
3593 | Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { | ||
3594 | // making it explicit this property is not enumerable | ||
3595 | // because otherwise some prototype manipulation in | ||
3596 | // userland will fail | ||
3597 | enumerable: false, | ||
3598 | get: function () { | ||
3599 | return this._writableState.highWaterMark; | ||
3600 | } | ||
3601 | }); | ||
3602 | |||
3603 | // the no-half-open enforcer | ||
3604 | function onend() { | ||
3605 | // if we allow half-open state, or if the writable side ended, | ||
3606 | // then we're ok. | ||
3607 | if (this.allowHalfOpen || this._writableState.ended) return; | ||
3608 | |||
3609 | // no more data can be written. | ||
3610 | // But allow more writes to happen in this tick. | ||
3611 | pna.nextTick(onEndNT, this); | ||
3612 | } | ||
3613 | |||
3614 | function onEndNT(self) { | ||
3615 | self.end(); | ||
3616 | } | ||
3617 | |||
3618 | Object.defineProperty(Duplex.prototype, 'destroyed', { | ||
3619 | get: function () { | ||
3620 | if (this._readableState === undefined || this._writableState === undefined) { | ||
3621 | return false; | ||
3622 | } | ||
3623 | return this._readableState.destroyed && this._writableState.destroyed; | ||
3624 | }, | ||
3625 | set: function (value) { | ||
3626 | // we ignore the value if the stream | ||
3627 | // has not been initialized yet | ||
3628 | if (this._readableState === undefined || this._writableState === undefined) { | ||
3629 | return; | ||
3630 | } | ||
3631 | |||
3632 | // backward compatibility, the user is explicitly | ||
3633 | // managing destroyed | ||
3634 | this._readableState.destroyed = value; | ||
3635 | this._writableState.destroyed = value; | ||
3636 | } | ||
3637 | }); | ||
3638 | |||
3639 | Duplex.prototype._destroy = function (err, cb) { | ||
3640 | this.push(null); | ||
3641 | this.end(); | ||
3642 | |||
3643 | pna.nextTick(cb, err); | ||
3644 | }; | ||
3645 | },{"./_stream_readable":22,"./_stream_writable":24,"core-util-is":8,"inherits":13,"process-nextick-args":17}],21:[function(require,module,exports){ | ||
3646 | // Copyright Joyent, Inc. and other Node contributors. | ||
3647 | // | ||
3648 | // Permission is hereby granted, free of charge, to any person obtaining a | ||
3649 | // copy of this software and associated documentation files (the | ||
3650 | // "Software"), to deal in the Software without restriction, including | ||
3651 | // without limitation the rights to use, copy, modify, merge, publish, | ||
3652 | // distribute, sublicense, and/or sell copies of the Software, and to permit | ||
3653 | // persons to whom the Software is furnished to do so, subject to the | ||
3654 | // following conditions: | ||
3655 | // | ||
3656 | // The above copyright notice and this permission notice shall be included | ||
3657 | // in all copies or substantial portions of the Software. | ||
3658 | // | ||
3659 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
3660 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
3661 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||
3662 | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
3663 | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
3664 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
3665 | // USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
3666 | |||
3667 | // a passthrough stream. | ||
3668 | // basically just the most minimal sort of Transform stream. | ||
3669 | // Every written chunk gets output as-is. | ||
3670 | |||
3671 | 'use strict'; | ||
3672 | |||
3673 | module.exports = PassThrough; | ||
3674 | |||
3675 | var Transform = require('./_stream_transform'); | ||
3676 | |||
3677 | /*<replacement>*/ | ||
3678 | var util = require('core-util-is'); | ||
3679 | util.inherits = require('inherits'); | ||
3680 | /*</replacement>*/ | ||
3681 | |||
3682 | util.inherits(PassThrough, Transform); | ||
3683 | |||
3684 | function PassThrough(options) { | ||
3685 | if (!(this instanceof PassThrough)) return new PassThrough(options); | ||
3686 | |||
3687 | Transform.call(this, options); | ||
3688 | } | ||
3689 | |||
3690 | PassThrough.prototype._transform = function (chunk, encoding, cb) { | ||
3691 | cb(null, chunk); | ||
3692 | }; | ||
3693 | },{"./_stream_transform":23,"core-util-is":8,"inherits":13}],22:[function(require,module,exports){ | ||
3694 | (function (process,global){ | ||
3695 | // Copyright Joyent, Inc. and other Node contributors. | ||
3696 | // | ||
3697 | // Permission is hereby granted, free of charge, to any person obtaining a | ||
3698 | // copy of this software and associated documentation files (the | ||
3699 | // "Software"), to deal in the Software without restriction, including | ||
3700 | // without limitation the rights to use, copy, modify, merge, publish, | ||
3701 | // distribute, sublicense, and/or sell copies of the Software, and to permit | ||
3702 | // persons to whom the Software is furnished to do so, subject to the | ||
3703 | // following conditions: | ||
3704 | // | ||
3705 | // The above copyright notice and this permission notice shall be included | ||
3706 | // in all copies or substantial portions of the Software. | ||
3707 | // | ||
3708 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
3709 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
3710 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||
3711 | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
3712 | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
3713 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
3714 | // USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
3715 | |||
3716 | 'use strict'; | ||
3717 | |||
3718 | /*<replacement>*/ | ||
3719 | |||
3720 | var pna = require('process-nextick-args'); | ||
3721 | /*</replacement>*/ | ||
3722 | |||
3723 | module.exports = Readable; | ||
3724 | |||
3725 | /*<replacement>*/ | ||
3726 | var isArray = require('isarray'); | ||
3727 | /*</replacement>*/ | ||
3728 | |||
3729 | /*<replacement>*/ | ||
3730 | var Duplex; | ||
3731 | /*</replacement>*/ | ||
3732 | |||
3733 | Readable.ReadableState = ReadableState; | ||
3734 | |||
3735 | /*<replacement>*/ | ||
3736 | var EE = require('events').EventEmitter; | ||
3737 | |||
3738 | var EElistenerCount = function (emitter, type) { | ||
3739 | return emitter.listeners(type).length; | ||
3740 | }; | ||
3741 | /*</replacement>*/ | ||
3742 | |||
3743 | /*<replacement>*/ | ||
3744 | var Stream = require('./internal/streams/stream'); | ||
3745 | /*</replacement>*/ | ||
3746 | |||
3747 | /*<replacement>*/ | ||
3748 | |||
3749 | var Buffer = require('safe-buffer').Buffer; | ||
3750 | var OurUint8Array = global.Uint8Array || function () {}; | ||
3751 | function _uint8ArrayToBuffer(chunk) { | ||
3752 | return Buffer.from(chunk); | ||
3753 | } | ||
3754 | function _isUint8Array(obj) { | ||
3755 | return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; | ||
3756 | } | ||
3757 | |||
3758 | /*</replacement>*/ | ||
3759 | |||
3760 | /*<replacement>*/ | ||
3761 | var util = require('core-util-is'); | ||
3762 | util.inherits = require('inherits'); | ||
3763 | /*</replacement>*/ | ||
3764 | |||
3765 | /*<replacement>*/ | ||
3766 | var debugUtil = require('util'); | ||
3767 | var debug = void 0; | ||
3768 | if (debugUtil && debugUtil.debuglog) { | ||
3769 | debug = debugUtil.debuglog('stream'); | ||
3770 | } else { | ||
3771 | debug = function () {}; | ||
3772 | } | ||
3773 | /*</replacement>*/ | ||
3774 | |||
3775 | var BufferList = require('./internal/streams/BufferList'); | ||
3776 | var destroyImpl = require('./internal/streams/destroy'); | ||
3777 | var StringDecoder; | ||
3778 | |||
3779 | util.inherits(Readable, Stream); | ||
3780 | |||
3781 | var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; | ||
3782 | |||
3783 | function prependListener(emitter, event, fn) { | ||
3784 | // Sadly this is not cacheable as some libraries bundle their own | ||
3785 | // event emitter implementation with them. | ||
3786 | if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); | ||
3787 | |||
3788 | // This is a hack to make sure that our error handler is attached before any | ||
3789 | // userland ones. NEVER DO THIS. This is here only because this code needs | ||
3790 | // to continue to work with older versions of Node.js that do not include | ||
3791 | // the prependListener() method. The goal is to eventually remove this hack. | ||
3792 | if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; | ||
3793 | } | ||
3794 | |||
3795 | function ReadableState(options, stream) { | ||
3796 | Duplex = Duplex || require('./_stream_duplex'); | ||
3797 | |||
3798 | options = options || {}; | ||
3799 | |||
3800 | // Duplex streams are both readable and writable, but share | ||
3801 | // the same options object. | ||
3802 | // However, some cases require setting options to different | ||
3803 | // values for the readable and the writable sides of the duplex stream. | ||
3804 | // These options can be provided separately as readableXXX and writableXXX. | ||
3805 | var isDuplex = stream instanceof Duplex; | ||
3806 | |||
3807 | // object stream flag. Used to make read(n) ignore n and to | ||
3808 | // make all the buffer merging and length checks go away | ||
3809 | this.objectMode = !!options.objectMode; | ||
3810 | |||
3811 | if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; | ||
3812 | |||
3813 | // the point at which it stops calling _read() to fill the buffer | ||
3814 | // Note: 0 is a valid value, means "don't call _read preemptively ever" | ||
3815 | var hwm = options.highWaterMark; | ||
3816 | var readableHwm = options.readableHighWaterMark; | ||
3817 | var defaultHwm = this.objectMode ? 16 : 16 * 1024; | ||
3818 | |||
3819 | if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; | ||
3820 | |||
3821 | // cast to ints. | ||
3822 | this.highWaterMark = Math.floor(this.highWaterMark); | ||
3823 | |||
3824 | // A linked list is used to store data chunks instead of an array because the | ||
3825 | // linked list can remove elements from the beginning faster than | ||
3826 | // array.shift() | ||
3827 | this.buffer = new BufferList(); | ||
3828 | this.length = 0; | ||
3829 | this.pipes = null; | ||
3830 | this.pipesCount = 0; | ||
3831 | this.flowing = null; | ||
3832 | this.ended = false; | ||
3833 | this.endEmitted = false; | ||
3834 | this.reading = false; | ||
3835 | |||
3836 | // a flag to be able to tell if the event 'readable'/'data' is emitted | ||
3837 | // immediately, or on a later tick. We set this to true at first, because | ||
3838 | // any actions that shouldn't happen until "later" should generally also | ||
3839 | // not happen before the first read call. | ||
3840 | this.sync = true; | ||
3841 | |||
3842 | // whenever we return null, then we set a flag to say | ||
3843 | // that we're awaiting a 'readable' event emission. | ||
3844 | this.needReadable = false; | ||
3845 | this.emittedReadable = false; | ||
3846 | this.readableListening = false; | ||
3847 | this.resumeScheduled = false; | ||
3848 | |||
3849 | // has it been destroyed | ||
3850 | this.destroyed = false; | ||
3851 | |||
3852 | // Crypto is kind of old and crusty. Historically, its default string | ||
3853 | // encoding is 'binary' so we have to make this configurable. | ||
3854 | // Everything else in the universe uses 'utf8', though. | ||
3855 | this.defaultEncoding = options.defaultEncoding || 'utf8'; | ||
3856 | |||
3857 | // the number of writers that are awaiting a drain event in .pipe()s | ||
3858 | this.awaitDrain = 0; | ||
3859 | |||
3860 | // if true, a maybeReadMore has been scheduled | ||
3861 | this.readingMore = false; | ||
3862 | |||
3863 | this.decoder = null; | ||
3864 | this.encoding = null; | ||
3865 | if (options.encoding) { | ||
3866 | if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; | ||
3867 | this.decoder = new StringDecoder(options.encoding); | ||
3868 | this.encoding = options.encoding; | ||
3869 | } | ||
3870 | } | ||
3871 | |||
3872 | function Readable(options) { | ||
3873 | Duplex = Duplex || require('./_stream_duplex'); | ||
3874 | |||
3875 | if (!(this instanceof Readable)) return new Readable(options); | ||
3876 | |||
3877 | this._readableState = new ReadableState(options, this); | ||
3878 | |||
3879 | // legacy | ||
3880 | this.readable = true; | ||
3881 | |||
3882 | if (options) { | ||
3883 | if (typeof options.read === 'function') this._read = options.read; | ||
3884 | |||
3885 | if (typeof options.destroy === 'function') this._destroy = options.destroy; | ||
3886 | } | ||
3887 | |||
3888 | Stream.call(this); | ||
3889 | } | ||
3890 | |||
3891 | Object.defineProperty(Readable.prototype, 'destroyed', { | ||
3892 | get: function () { | ||
3893 | if (this._readableState === undefined) { | ||
3894 | return false; | ||
3895 | } | ||
3896 | return this._readableState.destroyed; | ||
3897 | }, | ||
3898 | set: function (value) { | ||
3899 | // we ignore the value if the stream | ||
3900 | // has not been initialized yet | ||
3901 | if (!this._readableState) { | ||
3902 | return; | ||
3903 | } | ||
3904 | |||
3905 | // backward compatibility, the user is explicitly | ||
3906 | // managing destroyed | ||
3907 | this._readableState.destroyed = value; | ||
3908 | } | ||
3909 | }); | ||
3910 | |||
3911 | Readable.prototype.destroy = destroyImpl.destroy; | ||
3912 | Readable.prototype._undestroy = destroyImpl.undestroy; | ||
3913 | Readable.prototype._destroy = function (err, cb) { | ||
3914 | this.push(null); | ||
3915 | cb(err); | ||
3916 | }; | ||
3917 | |||
3918 | // Manually shove something into the read() buffer. | ||
3919 | // This returns true if the highWaterMark has not been hit yet, | ||
3920 | // similar to how Writable.write() returns true if you should | ||
3921 | // write() some more. | ||
3922 | Readable.prototype.push = function (chunk, encoding) { | ||
3923 | var state = this._readableState; | ||
3924 | var skipChunkCheck; | ||
3925 | |||
3926 | if (!state.objectMode) { | ||
3927 | if (typeof chunk === 'string') { | ||
3928 | encoding = encoding || state.defaultEncoding; | ||
3929 | if (encoding !== state.encoding) { | ||
3930 | chunk = Buffer.from(chunk, encoding); | ||
3931 | encoding = ''; | ||
3932 | } | ||
3933 | skipChunkCheck = true; | ||
3934 | } | ||
3935 | } else { | ||
3936 | skipChunkCheck = true; | ||
3937 | } | ||
3938 | |||
3939 | return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); | ||
3940 | }; | ||
3941 | |||
3942 | // Unshift should *always* be something directly out of read() | ||
3943 | Readable.prototype.unshift = function (chunk) { | ||
3944 | return readableAddChunk(this, chunk, null, true, false); | ||
3945 | }; | ||
3946 | |||
3947 | function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { | ||
3948 | var state = stream._readableState; | ||
3949 | if (chunk === null) { | ||
3950 | state.reading = false; | ||
3951 | onEofChunk(stream, state); | ||
3952 | } else { | ||
3953 | var er; | ||
3954 | if (!skipChunkCheck) er = chunkInvalid(state, chunk); | ||
3955 | if (er) { | ||
3956 | stream.emit('error', er); | ||
3957 | } else if (state.objectMode || chunk && chunk.length > 0) { | ||
3958 | if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { | ||
3959 | chunk = _uint8ArrayToBuffer(chunk); | ||
3960 | } | ||
3961 | |||
3962 | if (addToFront) { | ||
3963 | if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); | ||
3964 | } else if (state.ended) { | ||
3965 | stream.emit('error', new Error('stream.push() after EOF')); | ||
3966 | } else { | ||
3967 | state.reading = false; | ||
3968 | if (state.decoder && !encoding) { | ||
3969 | chunk = state.decoder.write(chunk); | ||
3970 | if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); | ||
3971 | } else { | ||
3972 | addChunk(stream, state, chunk, false); | ||
3973 | } | ||
3974 | } | ||
3975 | } else if (!addToFront) { | ||
3976 | state.reading = false; | ||
3977 | } | ||
3978 | } | ||
3979 | |||
3980 | return needMoreData(state); | ||
3981 | } | ||
3982 | |||
3983 | function addChunk(stream, state, chunk, addToFront) { | ||
3984 | if (state.flowing && state.length === 0 && !state.sync) { | ||
3985 | stream.emit('data', chunk); | ||
3986 | stream.read(0); | ||
3987 | } else { | ||
3988 | // update the buffer info. | ||
3989 | state.length += state.objectMode ? 1 : chunk.length; | ||
3990 | if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); | ||
3991 | |||
3992 | if (state.needReadable) emitReadable(stream); | ||
3993 | } | ||
3994 | maybeReadMore(stream, state); | ||
3995 | } | ||
3996 | |||
3997 | function chunkInvalid(state, chunk) { | ||
3998 | var er; | ||
3999 | if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { | ||
4000 | er = new TypeError('Invalid non-string/buffer chunk'); | ||
4001 | } | ||
4002 | return er; | ||
4003 | } | ||
4004 | |||
4005 | // if it's past the high water mark, we can push in some more. | ||
4006 | // Also, if we have no data yet, we can stand some | ||
4007 | // more bytes. This is to work around cases where hwm=0, | ||
4008 | // such as the repl. Also, if the push() triggered a | ||
4009 | // readable event, and the user called read(largeNumber) such that | ||
4010 | // needReadable was set, then we ought to push more, so that another | ||
4011 | // 'readable' event will be triggered. | ||
4012 | function needMoreData(state) { | ||
4013 | return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); | ||
4014 | } | ||
4015 | |||
4016 | Readable.prototype.isPaused = function () { | ||
4017 | return this._readableState.flowing === false; | ||
4018 | }; | ||
4019 | |||
4020 | // backwards compatibility. | ||
4021 | Readable.prototype.setEncoding = function (enc) { | ||
4022 | if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; | ||
4023 | this._readableState.decoder = new StringDecoder(enc); | ||
4024 | this._readableState.encoding = enc; | ||
4025 | return this; | ||
4026 | }; | ||
4027 | |||
4028 | // Don't raise the hwm > 8MB | ||
4029 | var MAX_HWM = 0x800000; | ||
4030 | function computeNewHighWaterMark(n) { | ||
4031 | if (n >= MAX_HWM) { | ||
4032 | n = MAX_HWM; | ||
4033 | } else { | ||
4034 | // Get the next highest power of 2 to prevent increasing hwm excessively in | ||
4035 | // tiny amounts | ||
4036 | n--; | ||
4037 | n |= n >>> 1; | ||
4038 | n |= n >>> 2; | ||
4039 | n |= n >>> 4; | ||
4040 | n |= n >>> 8; | ||
4041 | n |= n >>> 16; | ||
4042 | n++; | ||
4043 | } | ||
4044 | return n; | ||
4045 | } | ||
4046 | |||
4047 | // This function is designed to be inlinable, so please take care when making | ||
4048 | // changes to the function body. | ||
4049 | function howMuchToRead(n, state) { | ||
4050 | if (n <= 0 || state.length === 0 && state.ended) return 0; | ||
4051 | if (state.objectMode) return 1; | ||
4052 | if (n !== n) { | ||
4053 | // Only flow one buffer at a time | ||
4054 | if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; | ||
4055 | } | ||
4056 | // If we're asking for more than the current hwm, then raise the hwm. | ||
4057 | if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); | ||
4058 | if (n <= state.length) return n; | ||
4059 | // Don't have enough | ||
4060 | if (!state.ended) { | ||
4061 | state.needReadable = true; | ||
4062 | return 0; | ||
4063 | } | ||
4064 | return state.length; | ||
4065 | } | ||
4066 | |||
4067 | // you can override either this method, or the async _read(n) below. | ||
4068 | Readable.prototype.read = function (n) { | ||
4069 | debug('read', n); | ||
4070 | n = parseInt(n, 10); | ||
4071 | var state = this._readableState; | ||
4072 | var nOrig = n; | ||
4073 | |||
4074 | if (n !== 0) state.emittedReadable = false; | ||
4075 | |||
4076 | // if we're doing read(0) to trigger a readable event, but we | ||
4077 | // already have a bunch of data in the buffer, then just trigger | ||
4078 | // the 'readable' event and move on. | ||
4079 | if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { | ||
4080 | debug('read: emitReadable', state.length, state.ended); | ||
4081 | if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); | ||
4082 | return null; | ||
4083 | } | ||
4084 | |||
4085 | n = howMuchToRead(n, state); | ||
4086 | |||
4087 | // if we've ended, and we're now clear, then finish it up. | ||
4088 | if (n === 0 && state.ended) { | ||
4089 | if (state.length === 0) endReadable(this); | ||
4090 | return null; | ||
4091 | } | ||
4092 | |||
4093 | // All the actual chunk generation logic needs to be | ||
4094 | // *below* the call to _read. The reason is that in certain | ||
4095 | // synthetic stream cases, such as passthrough streams, _read | ||
4096 | // may be a completely synchronous operation which may change | ||
4097 | // the state of the read buffer, providing enough data when | ||
4098 | // before there was *not* enough. | ||
4099 | // | ||
4100 | // So, the steps are: | ||
4101 | // 1. Figure out what the state of things will be after we do | ||
4102 | // a read from the buffer. | ||
4103 | // | ||
4104 | // 2. If that resulting state will trigger a _read, then call _read. | ||
4105 | // Note that this may be asynchronous, or synchronous. Yes, it is | ||
4106 | // deeply ugly to write APIs this way, but that still doesn't mean | ||
4107 | // that the Readable class should behave improperly, as streams are | ||
4108 | // designed to be sync/async agnostic. | ||
4109 | // Take note if the _read call is sync or async (ie, if the read call | ||
4110 | // has returned yet), so that we know whether or not it's safe to emit | ||
4111 | // 'readable' etc. | ||
4112 | // | ||
4113 | // 3. Actually pull the requested chunks out of the buffer and return. | ||
4114 | |||
4115 | // if we need a readable event, then we need to do some reading. | ||
4116 | var doRead = state.needReadable; | ||
4117 | debug('need readable', doRead); | ||
4118 | |||
4119 | // if we currently have less than the highWaterMark, then also read some | ||
4120 | if (state.length === 0 || state.length - n < state.highWaterMark) { | ||
4121 | doRead = true; | ||
4122 | debug('length less than watermark', doRead); | ||
4123 | } | ||
4124 | |||
4125 | // however, if we've ended, then there's no point, and if we're already | ||
4126 | // reading, then it's unnecessary. | ||
4127 | if (state.ended || state.reading) { | ||
4128 | doRead = false; | ||
4129 | debug('reading or ended', doRead); | ||
4130 | } else if (doRead) { | ||
4131 | debug('do read'); | ||
4132 | state.reading = true; | ||
4133 | state.sync = true; | ||
4134 | // if the length is currently zero, then we *need* a readable event. | ||
4135 | if (state.length === 0) state.needReadable = true; | ||
4136 | // call internal read method | ||
4137 | this._read(state.highWaterMark); | ||
4138 | state.sync = false; | ||
4139 | // If _read pushed data synchronously, then `reading` will be false, | ||
4140 | // and we need to re-evaluate how much data we can return to the user. | ||
4141 | if (!state.reading) n = howMuchToRead(nOrig, state); | ||
4142 | } | ||
4143 | |||
4144 | var ret; | ||
4145 | if (n > 0) ret = fromList(n, state);else ret = null; | ||
4146 | |||
4147 | if (ret === null) { | ||
4148 | state.needReadable = true; | ||
4149 | n = 0; | ||
4150 | } else { | ||
4151 | state.length -= n; | ||
4152 | } | ||
4153 | |||
4154 | if (state.length === 0) { | ||
4155 | // If we have nothing in the buffer, then we want to know | ||
4156 | // as soon as we *do* get something into the buffer. | ||
4157 | if (!state.ended) state.needReadable = true; | ||
4158 | |||
4159 | // If we tried to read() past the EOF, then emit end on the next tick. | ||
4160 | if (nOrig !== n && state.ended) endReadable(this); | ||
4161 | } | ||
4162 | |||
4163 | if (ret !== null) this.emit('data', ret); | ||
4164 | |||
4165 | return ret; | ||
4166 | }; | ||
4167 | |||
4168 | function onEofChunk(stream, state) { | ||
4169 | if (state.ended) return; | ||
4170 | if (state.decoder) { | ||
4171 | var chunk = state.decoder.end(); | ||
4172 | if (chunk && chunk.length) { | ||
4173 | state.buffer.push(chunk); | ||
4174 | state.length += state.objectMode ? 1 : chunk.length; | ||
4175 | } | ||
4176 | } | ||
4177 | state.ended = true; | ||
4178 | |||
4179 | // emit 'readable' now to make sure it gets picked up. | ||
4180 | emitReadable(stream); | ||
4181 | } | ||
4182 | |||
4183 | // Don't emit readable right away in sync mode, because this can trigger | ||
4184 | // another read() call => stack overflow. This way, it might trigger | ||
4185 | // a nextTick recursion warning, but that's not so bad. | ||
4186 | function emitReadable(stream) { | ||
4187 | var state = stream._readableState; | ||
4188 | state.needReadable = false; | ||
4189 | if (!state.emittedReadable) { | ||
4190 | debug('emitReadable', state.flowing); | ||
4191 | state.emittedReadable = true; | ||
4192 | if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); | ||
4193 | } | ||
4194 | } | ||
4195 | |||
4196 | function emitReadable_(stream) { | ||
4197 | debug('emit readable'); | ||
4198 | stream.emit('readable'); | ||
4199 | flow(stream); | ||
4200 | } | ||
4201 | |||
4202 | // at this point, the user has presumably seen the 'readable' event, | ||
4203 | // and called read() to consume some data. that may have triggered | ||
4204 | // in turn another _read(n) call, in which case reading = true if | ||
4205 | // it's in progress. | ||
4206 | // However, if we're not ended, or reading, and the length < hwm, | ||
4207 | // then go ahead and try to read some more preemptively. | ||
4208 | function maybeReadMore(stream, state) { | ||
4209 | if (!state.readingMore) { | ||
4210 | state.readingMore = true; | ||
4211 | pna.nextTick(maybeReadMore_, stream, state); | ||
4212 | } | ||
4213 | } | ||
4214 | |||
4215 | function maybeReadMore_(stream, state) { | ||
4216 | var len = state.length; | ||
4217 | while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { | ||
4218 | debug('maybeReadMore read 0'); | ||
4219 | stream.read(0); | ||
4220 | if (len === state.length) | ||
4221 | // didn't get any data, stop spinning. | ||
4222 | break;else len = state.length; | ||
4223 | } | ||
4224 | state.readingMore = false; | ||
4225 | } | ||
4226 | |||
4227 | // abstract method. to be overridden in specific implementation classes. | ||
4228 | // call cb(er, data) where data is <= n in length. | ||
4229 | // for virtual (non-string, non-buffer) streams, "length" is somewhat | ||
4230 | // arbitrary, and perhaps not very meaningful. | ||
4231 | Readable.prototype._read = function (n) { | ||
4232 | this.emit('error', new Error('_read() is not implemented')); | ||
4233 | }; | ||
4234 | |||
4235 | Readable.prototype.pipe = function (dest, pipeOpts) { | ||
4236 | var src = this; | ||
4237 | var state = this._readableState; | ||
4238 | |||
4239 | switch (state.pipesCount) { | ||
4240 | case 0: | ||
4241 | state.pipes = dest; | ||
4242 | break; | ||
4243 | case 1: | ||
4244 | state.pipes = [state.pipes, dest]; | ||
4245 | break; | ||
4246 | default: | ||
4247 | state.pipes.push(dest); | ||
4248 | break; | ||
4249 | } | ||
4250 | state.pipesCount += 1; | ||
4251 | debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); | ||
4252 | |||
4253 | var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; | ||
4254 | |||
4255 | var endFn = doEnd ? onend : unpipe; | ||
4256 | if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); | ||
4257 | |||
4258 | dest.on('unpipe', onunpipe); | ||
4259 | function onunpipe(readable, unpipeInfo) { | ||
4260 | debug('onunpipe'); | ||
4261 | if (readable === src) { | ||
4262 | if (unpipeInfo && unpipeInfo.hasUnpiped === false) { | ||
4263 | unpipeInfo.hasUnpiped = true; | ||
4264 | cleanup(); | ||
4265 | } | ||
4266 | } | ||
4267 | } | ||
4268 | |||
4269 | function onend() { | ||
4270 | debug('onend'); | ||
4271 | dest.end(); | ||
4272 | } | ||
4273 | |||
4274 | // when the dest drains, it reduces the awaitDrain counter | ||
4275 | // on the source. This would be more elegant with a .once() | ||
4276 | // handler in flow(), but adding and removing repeatedly is | ||
4277 | // too slow. | ||
4278 | var ondrain = pipeOnDrain(src); | ||
4279 | dest.on('drain', ondrain); | ||
4280 | |||
4281 | var cleanedUp = false; | ||
4282 | function cleanup() { | ||
4283 | debug('cleanup'); | ||
4284 | // cleanup event handlers once the pipe is broken | ||
4285 | dest.removeListener('close', onclose); | ||
4286 | dest.removeListener('finish', onfinish); | ||
4287 | dest.removeListener('drain', ondrain); | ||
4288 | dest.removeListener('error', onerror); | ||
4289 | dest.removeListener('unpipe', onunpipe); | ||
4290 | src.removeListener('end', onend); | ||
4291 | src.removeListener('end', unpipe); | ||
4292 | src.removeListener('data', ondata); | ||
4293 | |||
4294 | cleanedUp = true; | ||
4295 | |||
4296 | // if the reader is waiting for a drain event from this | ||
4297 | // specific writer, then it would cause it to never start | ||
4298 | // flowing again. | ||
4299 | // So, if this is awaiting a drain, then we just call it now. | ||
4300 | // If we don't know, then assume that we are waiting for one. | ||
4301 | if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); | ||
4302 | } | ||
4303 | |||
4304 | // If the user pushes more data while we're writing to dest then we'll end up | ||
4305 | // in ondata again. However, we only want to increase awaitDrain once because | ||
4306 | // dest will only emit one 'drain' event for the multiple writes. | ||
4307 | // => Introduce a guard on increasing awaitDrain. | ||
4308 | var increasedAwaitDrain = false; | ||
4309 | src.on('data', ondata); | ||
4310 | function ondata(chunk) { | ||
4311 | debug('ondata'); | ||
4312 | increasedAwaitDrain = false; | ||
4313 | var ret = dest.write(chunk); | ||
4314 | if (false === ret && !increasedAwaitDrain) { | ||
4315 | // If the user unpiped during `dest.write()`, it is possible | ||
4316 | // to get stuck in a permanently paused state if that write | ||
4317 | // also returned false. | ||
4318 | // => Check whether `dest` is still a piping destination. | ||
4319 | if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { | ||
4320 | debug('false write response, pause', src._readableState.awaitDrain); | ||
4321 | src._readableState.awaitDrain++; | ||
4322 | increasedAwaitDrain = true; | ||
4323 | } | ||
4324 | src.pause(); | ||
4325 | } | ||
4326 | } | ||
4327 | |||
4328 | // if the dest has an error, then stop piping into it. | ||
4329 | // however, don't suppress the throwing behavior for this. | ||
4330 | function onerror(er) { | ||
4331 | debug('onerror', er); | ||
4332 | unpipe(); | ||
4333 | dest.removeListener('error', onerror); | ||
4334 | if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); | ||
4335 | } | ||
4336 | |||
4337 | // Make sure our error handler is attached before userland ones. | ||
4338 | prependListener(dest, 'error', onerror); | ||
4339 | |||
4340 | // Both close and finish should trigger unpipe, but only once. | ||
4341 | function onclose() { | ||
4342 | dest.removeListener('finish', onfinish); | ||
4343 | unpipe(); | ||
4344 | } | ||
4345 | dest.once('close', onclose); | ||
4346 | function onfinish() { | ||
4347 | debug('onfinish'); | ||
4348 | dest.removeListener('close', onclose); | ||
4349 | unpipe(); | ||
4350 | } | ||
4351 | dest.once('finish', onfinish); | ||
4352 | |||
4353 | function unpipe() { | ||
4354 | debug('unpipe'); | ||
4355 | src.unpipe(dest); | ||
4356 | } | ||
4357 | |||
4358 | // tell the dest that it's being piped to | ||
4359 | dest.emit('pipe', src); | ||
4360 | |||
4361 | // start the flow if it hasn't been started already. | ||
4362 | if (!state.flowing) { | ||
4363 | debug('pipe resume'); | ||
4364 | src.resume(); | ||
4365 | } | ||
4366 | |||
4367 | return dest; | ||
4368 | }; | ||
4369 | |||
4370 | function pipeOnDrain(src) { | ||
4371 | return function () { | ||
4372 | var state = src._readableState; | ||
4373 | debug('pipeOnDrain', state.awaitDrain); | ||
4374 | if (state.awaitDrain) state.awaitDrain--; | ||
4375 | if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { | ||
4376 | state.flowing = true; | ||
4377 | flow(src); | ||
4378 | } | ||
4379 | }; | ||
4380 | } | ||
4381 | |||
4382 | Readable.prototype.unpipe = function (dest) { | ||
4383 | var state = this._readableState; | ||
4384 | var unpipeInfo = { hasUnpiped: false }; | ||
4385 | |||
4386 | // if we're not piping anywhere, then do nothing. | ||
4387 | if (state.pipesCount === 0) return this; | ||
4388 | |||
4389 | // just one destination. most common case. | ||
4390 | if (state.pipesCount === 1) { | ||
4391 | // passed in one, but it's not the right one. | ||
4392 | if (dest && dest !== state.pipes) return this; | ||
4393 | |||
4394 | if (!dest) dest = state.pipes; | ||
4395 | |||
4396 | // got a match. | ||
4397 | state.pipes = null; | ||
4398 | state.pipesCount = 0; | ||
4399 | state.flowing = false; | ||
4400 | if (dest) dest.emit('unpipe', this, unpipeInfo); | ||
4401 | return this; | ||
4402 | } | ||
4403 | |||
4404 | // slow case. multiple pipe destinations. | ||
4405 | |||
4406 | if (!dest) { | ||
4407 | // remove all. | ||
4408 | var dests = state.pipes; | ||
4409 | var len = state.pipesCount; | ||
4410 | state.pipes = null; | ||
4411 | state.pipesCount = 0; | ||
4412 | state.flowing = false; | ||
4413 | |||
4414 | for (var i = 0; i < len; i++) { | ||
4415 | dests[i].emit('unpipe', this, unpipeInfo); | ||
4416 | }return this; | ||
4417 | } | ||
4418 | |||
4419 | // try to find the right one. | ||
4420 | var index = indexOf(state.pipes, dest); | ||
4421 | if (index === -1) return this; | ||
4422 | |||
4423 | state.pipes.splice(index, 1); | ||
4424 | state.pipesCount -= 1; | ||
4425 | if (state.pipesCount === 1) state.pipes = state.pipes[0]; | ||
4426 | |||
4427 | dest.emit('unpipe', this, unpipeInfo); | ||
4428 | |||
4429 | return this; | ||
4430 | }; | ||
4431 | |||
4432 | // set up data events if they are asked for | ||
4433 | // Ensure readable listeners eventually get something | ||
4434 | Readable.prototype.on = function (ev, fn) { | ||
4435 | var res = Stream.prototype.on.call(this, ev, fn); | ||
4436 | |||
4437 | if (ev === 'data') { | ||
4438 | // Start flowing on next tick if stream isn't explicitly paused | ||
4439 | if (this._readableState.flowing !== false) this.resume(); | ||
4440 | } else if (ev === 'readable') { | ||
4441 | var state = this._readableState; | ||
4442 | if (!state.endEmitted && !state.readableListening) { | ||
4443 | state.readableListening = state.needReadable = true; | ||
4444 | state.emittedReadable = false; | ||
4445 | if (!state.reading) { | ||
4446 | pna.nextTick(nReadingNextTick, this); | ||
4447 | } else if (state.length) { | ||
4448 | emitReadable(this); | ||
4449 | } | ||
4450 | } | ||
4451 | } | ||
4452 | |||
4453 | return res; | ||
4454 | }; | ||
4455 | Readable.prototype.addListener = Readable.prototype.on; | ||
4456 | |||
4457 | function nReadingNextTick(self) { | ||
4458 | debug('readable nexttick read 0'); | ||
4459 | self.read(0); | ||
4460 | } | ||
4461 | |||
4462 | // pause() and resume() are remnants of the legacy readable stream API | ||
4463 | // If the user uses them, then switch into old mode. | ||
4464 | Readable.prototype.resume = function () { | ||
4465 | var state = this._readableState; | ||
4466 | if (!state.flowing) { | ||
4467 | debug('resume'); | ||
4468 | state.flowing = true; | ||
4469 | resume(this, state); | ||
4470 | } | ||
4471 | return this; | ||
4472 | }; | ||
4473 | |||
4474 | function resume(stream, state) { | ||
4475 | if (!state.resumeScheduled) { | ||
4476 | state.resumeScheduled = true; | ||
4477 | pna.nextTick(resume_, stream, state); | ||
4478 | } | ||
4479 | } | ||
4480 | |||
4481 | function resume_(stream, state) { | ||
4482 | if (!state.reading) { | ||
4483 | debug('resume read 0'); | ||
4484 | stream.read(0); | ||
4485 | } | ||
4486 | |||
4487 | state.resumeScheduled = false; | ||
4488 | state.awaitDrain = 0; | ||
4489 | stream.emit('resume'); | ||
4490 | flow(stream); | ||
4491 | if (state.flowing && !state.reading) stream.read(0); | ||
4492 | } | ||
4493 | |||
4494 | Readable.prototype.pause = function () { | ||
4495 | debug('call pause flowing=%j', this._readableState.flowing); | ||
4496 | if (false !== this._readableState.flowing) { | ||
4497 | debug('pause'); | ||
4498 | this._readableState.flowing = false; | ||
4499 | this.emit('pause'); | ||
4500 | } | ||
4501 | return this; | ||
4502 | }; | ||
4503 | |||
4504 | function flow(stream) { | ||
4505 | var state = stream._readableState; | ||
4506 | debug('flow', state.flowing); | ||
4507 | while (state.flowing && stream.read() !== null) {} | ||
4508 | } | ||
4509 | |||
4510 | // wrap an old-style stream as the async data source. | ||
4511 | // This is *not* part of the readable stream interface. | ||
4512 | // It is an ugly unfortunate mess of history. | ||
4513 | Readable.prototype.wrap = function (stream) { | ||
4514 | var _this = this; | ||
4515 | |||
4516 | var state = this._readableState; | ||
4517 | var paused = false; | ||
4518 | |||
4519 | stream.on('end', function () { | ||
4520 | debug('wrapped end'); | ||
4521 | if (state.decoder && !state.ended) { | ||
4522 | var chunk = state.decoder.end(); | ||
4523 | if (chunk && chunk.length) _this.push(chunk); | ||
4524 | } | ||
4525 | |||
4526 | _this.push(null); | ||
4527 | }); | ||
4528 | |||
4529 | stream.on('data', function (chunk) { | ||
4530 | debug('wrapped data'); | ||
4531 | if (state.decoder) chunk = state.decoder.write(chunk); | ||
4532 | |||
4533 | // don't skip over falsy values in objectMode | ||
4534 | if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; | ||
4535 | |||
4536 | var ret = _this.push(chunk); | ||
4537 | if (!ret) { | ||
4538 | paused = true; | ||
4539 | stream.pause(); | ||
4540 | } | ||
4541 | }); | ||
4542 | |||
4543 | // proxy all the other methods. | ||
4544 | // important when wrapping filters and duplexes. | ||
4545 | for (var i in stream) { | ||
4546 | if (this[i] === undefined && typeof stream[i] === 'function') { | ||
4547 | this[i] = function (method) { | ||
4548 | return function () { | ||
4549 | return stream[method].apply(stream, arguments); | ||
4550 | }; | ||
4551 | }(i); | ||
4552 | } | ||
4553 | } | ||
4554 | |||
4555 | // proxy certain important events. | ||
4556 | for (var n = 0; n < kProxyEvents.length; n++) { | ||
4557 | stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); | ||
4558 | } | ||
4559 | |||
4560 | // when we try to consume some more bytes, simply unpause the | ||
4561 | // underlying stream. | ||
4562 | this._read = function (n) { | ||
4563 | debug('wrapped _read', n); | ||
4564 | if (paused) { | ||
4565 | paused = false; | ||
4566 | stream.resume(); | ||
4567 | } | ||
4568 | }; | ||
4569 | |||
4570 | return this; | ||
4571 | }; | ||
4572 | |||
4573 | Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { | ||
4574 | // making it explicit this property is not enumerable | ||
4575 | // because otherwise some prototype manipulation in | ||
4576 | // userland will fail | ||
4577 | enumerable: false, | ||
4578 | get: function () { | ||
4579 | return this._readableState.highWaterMark; | ||
4580 | } | ||
4581 | }); | ||
4582 | |||
4583 | // exposed for testing purposes only. | ||
4584 | Readable._fromList = fromList; | ||
4585 | |||
4586 | // Pluck off n bytes from an array of buffers. | ||
4587 | // Length is the combined lengths of all the buffers in the list. | ||
4588 | // This function is designed to be inlinable, so please take care when making | ||
4589 | // changes to the function body. | ||
4590 | function fromList(n, state) { | ||
4591 | // nothing buffered | ||
4592 | if (state.length === 0) return null; | ||
4593 | |||
4594 | var ret; | ||
4595 | if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { | ||
4596 | // read it all, truncate the list | ||
4597 | if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); | ||
4598 | state.buffer.clear(); | ||
4599 | } else { | ||
4600 | // read part of list | ||
4601 | ret = fromListPartial(n, state.buffer, state.decoder); | ||
4602 | } | ||
4603 | |||
4604 | return ret; | ||
4605 | } | ||
4606 | |||
4607 | // Extracts only enough buffered data to satisfy the amount requested. | ||
4608 | // This function is designed to be inlinable, so please take care when making | ||
4609 | // changes to the function body. | ||
4610 | function fromListPartial(n, list, hasStrings) { | ||
4611 | var ret; | ||
4612 | if (n < list.head.data.length) { | ||
4613 | // slice is the same for buffers and strings | ||
4614 | ret = list.head.data.slice(0, n); | ||
4615 | list.head.data = list.head.data.slice(n); | ||
4616 | } else if (n === list.head.data.length) { | ||
4617 | // first chunk is a perfect match | ||
4618 | ret = list.shift(); | ||
4619 | } else { | ||
4620 | // result spans more than one buffer | ||
4621 | ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); | ||
4622 | } | ||
4623 | return ret; | ||
4624 | } | ||
4625 | |||
4626 | // Copies a specified amount of characters from the list of buffered data | ||
4627 | // chunks. | ||
4628 | // This function is designed to be inlinable, so please take care when making | ||
4629 | // changes to the function body. | ||
4630 | function copyFromBufferString(n, list) { | ||
4631 | var p = list.head; | ||
4632 | var c = 1; | ||
4633 | var ret = p.data; | ||
4634 | n -= ret.length; | ||
4635 | while (p = p.next) { | ||
4636 | var str = p.data; | ||
4637 | var nb = n > str.length ? str.length : n; | ||
4638 | if (nb === str.length) ret += str;else ret += str.slice(0, n); | ||
4639 | n -= nb; | ||
4640 | if (n === 0) { | ||
4641 | if (nb === str.length) { | ||
4642 | ++c; | ||
4643 | if (p.next) list.head = p.next;else list.head = list.tail = null; | ||
4644 | } else { | ||
4645 | list.head = p; | ||
4646 | p.data = str.slice(nb); | ||
4647 | } | ||
4648 | break; | ||
4649 | } | ||
4650 | ++c; | ||
4651 | } | ||
4652 | list.length -= c; | ||
4653 | return ret; | ||
4654 | } | ||
4655 | |||
4656 | // Copies a specified amount of bytes from the list of buffered data chunks. | ||
4657 | // This function is designed to be inlinable, so please take care when making | ||
4658 | // changes to the function body. | ||
4659 | function copyFromBuffer(n, list) { | ||
4660 | var ret = Buffer.allocUnsafe(n); | ||
4661 | var p = list.head; | ||
4662 | var c = 1; | ||
4663 | p.data.copy(ret); | ||
4664 | n -= p.data.length; | ||
4665 | while (p = p.next) { | ||
4666 | var buf = p.data; | ||
4667 | var nb = n > buf.length ? buf.length : n; | ||
4668 | buf.copy(ret, ret.length - n, 0, nb); | ||
4669 | n -= nb; | ||
4670 | if (n === 0) { | ||
4671 | if (nb === buf.length) { | ||
4672 | ++c; | ||
4673 | if (p.next) list.head = p.next;else list.head = list.tail = null; | ||
4674 | } else { | ||
4675 | list.head = p; | ||
4676 | p.data = buf.slice(nb); | ||
4677 | } | ||
4678 | break; | ||
4679 | } | ||
4680 | ++c; | ||
4681 | } | ||
4682 | list.length -= c; | ||
4683 | return ret; | ||
4684 | } | ||
4685 | |||
4686 | function endReadable(stream) { | ||
4687 | var state = stream._readableState; | ||
4688 | |||
4689 | // If we get here before consuming all the bytes, then that is a | ||
4690 | // bug in node. Should never happen. | ||
4691 | if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); | ||
4692 | |||
4693 | if (!state.endEmitted) { | ||
4694 | state.ended = true; | ||
4695 | pna.nextTick(endReadableNT, state, stream); | ||
4696 | } | ||
4697 | } | ||
4698 | |||
4699 | function endReadableNT(state, stream) { | ||
4700 | // Check that we didn't get one last unshift. | ||
4701 | if (!state.endEmitted && state.length === 0) { | ||
4702 | state.endEmitted = true; | ||
4703 | stream.readable = false; | ||
4704 | stream.emit('end'); | ||
4705 | } | ||
4706 | } | ||
4707 | |||
4708 | function indexOf(xs, x) { | ||
4709 | for (var i = 0, l = xs.length; i < l; i++) { | ||
4710 | if (xs[i] === x) return i; | ||
4711 | } | ||
4712 | return -1; | ||
4713 | } | ||
4714 | }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
4715 | },{"./_stream_duplex":20,"./internal/streams/BufferList":25,"./internal/streams/destroy":26,"./internal/streams/stream":27,"_process":18,"core-util-is":8,"events":10,"inherits":13,"isarray":15,"process-nextick-args":17,"safe-buffer":34,"string_decoder/":28,"util":4}],23:[function(require,module,exports){ | ||
4716 | // Copyright Joyent, Inc. and other Node contributors. | ||
4717 | // | ||
4718 | // Permission is hereby granted, free of charge, to any person obtaining a | ||
4719 | // copy of this software and associated documentation files (the | ||
4720 | // "Software"), to deal in the Software without restriction, including | ||
4721 | // without limitation the rights to use, copy, modify, merge, publish, | ||
4722 | // distribute, sublicense, and/or sell copies of the Software, and to permit | ||
4723 | // persons to whom the Software is furnished to do so, subject to the | ||
4724 | // following conditions: | ||
4725 | // | ||
4726 | // The above copyright notice and this permission notice shall be included | ||
4727 | // in all copies or substantial portions of the Software. | ||
4728 | // | ||
4729 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
4730 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
4731 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||
4732 | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
4733 | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
4734 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
4735 | // USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
4736 | |||
4737 | // a transform stream is a readable/writable stream where you do | ||
4738 | // something with the data. Sometimes it's called a "filter", | ||
4739 | // but that's not a great name for it, since that implies a thing where | ||
4740 | // some bits pass through, and others are simply ignored. (That would | ||
4741 | // be a valid example of a transform, of course.) | ||
4742 | // | ||
4743 | // While the output is causally related to the input, it's not a | ||
4744 | // necessarily symmetric or synchronous transformation. For example, | ||
4745 | // a zlib stream might take multiple plain-text writes(), and then | ||
4746 | // emit a single compressed chunk some time in the future. | ||
4747 | // | ||
4748 | // Here's how this works: | ||
4749 | // | ||
4750 | // The Transform stream has all the aspects of the readable and writable | ||
4751 | // stream classes. When you write(chunk), that calls _write(chunk,cb) | ||
4752 | // internally, and returns false if there's a lot of pending writes | ||
4753 | // buffered up. When you call read(), that calls _read(n) until | ||
4754 | // there's enough pending readable data buffered up. | ||
4755 | // | ||
4756 | // In a transform stream, the written data is placed in a buffer. When | ||
4757 | // _read(n) is called, it transforms the queued up data, calling the | ||
4758 | // buffered _write cb's as it consumes chunks. If consuming a single | ||
4759 | // written chunk would result in multiple output chunks, then the first | ||
4760 | // outputted bit calls the readcb, and subsequent chunks just go into | ||
4761 | // the read buffer, and will cause it to emit 'readable' if necessary. | ||
4762 | // | ||
4763 | // This way, back-pressure is actually determined by the reading side, | ||
4764 | // since _read has to be called to start processing a new chunk. However, | ||
4765 | // a pathological inflate type of transform can cause excessive buffering | ||
4766 | // here. For example, imagine a stream where every byte of input is | ||
4767 | // interpreted as an integer from 0-255, and then results in that many | ||
4768 | // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in | ||
4769 | // 1kb of data being output. In this case, you could write a very small | ||
4770 | // amount of input, and end up with a very large amount of output. In | ||
4771 | // such a pathological inflating mechanism, there'd be no way to tell | ||
4772 | // the system to stop doing the transform. A single 4MB write could | ||
4773 | // cause the system to run out of memory. | ||
4774 | // | ||
4775 | // However, even in such a pathological case, only a single written chunk | ||
4776 | // would be consumed, and then the rest would wait (un-transformed) until | ||
4777 | // the results of the previous transformed chunk were consumed. | ||
4778 | |||
4779 | 'use strict'; | ||
4780 | |||
4781 | module.exports = Transform; | ||
4782 | |||
4783 | var Duplex = require('./_stream_duplex'); | ||
4784 | |||
4785 | /*<replacement>*/ | ||
4786 | var util = require('core-util-is'); | ||
4787 | util.inherits = require('inherits'); | ||
4788 | /*</replacement>*/ | ||
4789 | |||
4790 | util.inherits(Transform, Duplex); | ||
4791 | |||
4792 | function afterTransform(er, data) { | ||
4793 | var ts = this._transformState; | ||
4794 | ts.transforming = false; | ||
4795 | |||
4796 | var cb = ts.writecb; | ||
4797 | |||
4798 | if (!cb) { | ||
4799 | return this.emit('error', new Error('write callback called multiple times')); | ||
4800 | } | ||
4801 | |||
4802 | ts.writechunk = null; | ||
4803 | ts.writecb = null; | ||
4804 | |||
4805 | if (data != null) // single equals check for both `null` and `undefined` | ||
4806 | this.push(data); | ||
4807 | |||
4808 | cb(er); | ||
4809 | |||
4810 | var rs = this._readableState; | ||
4811 | rs.reading = false; | ||
4812 | if (rs.needReadable || rs.length < rs.highWaterMark) { | ||
4813 | this._read(rs.highWaterMark); | ||
4814 | } | ||
4815 | } | ||
4816 | |||
4817 | function Transform(options) { | ||
4818 | if (!(this instanceof Transform)) return new Transform(options); | ||
4819 | |||
4820 | Duplex.call(this, options); | ||
4821 | |||
4822 | this._transformState = { | ||
4823 | afterTransform: afterTransform.bind(this), | ||
4824 | needTransform: false, | ||
4825 | transforming: false, | ||
4826 | writecb: null, | ||
4827 | writechunk: null, | ||
4828 | writeencoding: null | ||
4829 | }; | ||
4830 | |||
4831 | // start out asking for a readable event once data is transformed. | ||
4832 | this._readableState.needReadable = true; | ||
4833 | |||
4834 | // we have implemented the _read method, and done the other things | ||
4835 | // that Readable wants before the first _read call, so unset the | ||
4836 | // sync guard flag. | ||
4837 | this._readableState.sync = false; | ||
4838 | |||
4839 | if (options) { | ||
4840 | if (typeof options.transform === 'function') this._transform = options.transform; | ||
4841 | |||
4842 | if (typeof options.flush === 'function') this._flush = options.flush; | ||
4843 | } | ||
4844 | |||
4845 | // When the writable side finishes, then flush out anything remaining. | ||
4846 | this.on('prefinish', prefinish); | ||
4847 | } | ||
4848 | |||
4849 | function prefinish() { | ||
4850 | var _this = this; | ||
4851 | |||
4852 | if (typeof this._flush === 'function') { | ||
4853 | this._flush(function (er, data) { | ||
4854 | done(_this, er, data); | ||
4855 | }); | ||
4856 | } else { | ||
4857 | done(this, null, null); | ||
4858 | } | ||
4859 | } | ||
4860 | |||
4861 | Transform.prototype.push = function (chunk, encoding) { | ||
4862 | this._transformState.needTransform = false; | ||
4863 | return Duplex.prototype.push.call(this, chunk, encoding); | ||
4864 | }; | ||
4865 | |||
4866 | // This is the part where you do stuff! | ||
4867 | // override this function in implementation classes. | ||
4868 | // 'chunk' is an input chunk. | ||
4869 | // | ||
4870 | // Call `push(newChunk)` to pass along transformed output | ||
4871 | // to the readable side. You may call 'push' zero or more times. | ||
4872 | // | ||
4873 | // Call `cb(err)` when you are done with this chunk. If you pass | ||
4874 | // an error, then that'll put the hurt on the whole operation. If you | ||
4875 | // never call cb(), then you'll never get another chunk. | ||
4876 | Transform.prototype._transform = function (chunk, encoding, cb) { | ||
4877 | throw new Error('_transform() is not implemented'); | ||
4878 | }; | ||
4879 | |||
4880 | Transform.prototype._write = function (chunk, encoding, cb) { | ||
4881 | var ts = this._transformState; | ||
4882 | ts.writecb = cb; | ||
4883 | ts.writechunk = chunk; | ||
4884 | ts.writeencoding = encoding; | ||
4885 | if (!ts.transforming) { | ||
4886 | var rs = this._readableState; | ||
4887 | if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); | ||
4888 | } | ||
4889 | }; | ||
4890 | |||
4891 | // Doesn't matter what the args are here. | ||
4892 | // _transform does all the work. | ||
4893 | // That we got here means that the readable side wants more data. | ||
4894 | Transform.prototype._read = function (n) { | ||
4895 | var ts = this._transformState; | ||
4896 | |||
4897 | if (ts.writechunk !== null && ts.writecb && !ts.transforming) { | ||
4898 | ts.transforming = true; | ||
4899 | this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); | ||
4900 | } else { | ||
4901 | // mark that we need a transform, so that any data that comes in | ||
4902 | // will get processed, now that we've asked for it. | ||
4903 | ts.needTransform = true; | ||
4904 | } | ||
4905 | }; | ||
4906 | |||
4907 | Transform.prototype._destroy = function (err, cb) { | ||
4908 | var _this2 = this; | ||
4909 | |||
4910 | Duplex.prototype._destroy.call(this, err, function (err2) { | ||
4911 | cb(err2); | ||
4912 | _this2.emit('close'); | ||
4913 | }); | ||
4914 | }; | ||
4915 | |||
4916 | function done(stream, er, data) { | ||
4917 | if (er) return stream.emit('error', er); | ||
4918 | |||
4919 | if (data != null) // single equals check for both `null` and `undefined` | ||
4920 | stream.push(data); | ||
4921 | |||
4922 | // if there's nothing in the write buffer, then that means | ||
4923 | // that nothing more will ever be provided | ||
4924 | if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); | ||
4925 | |||
4926 | if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); | ||
4927 | |||
4928 | return stream.push(null); | ||
4929 | } | ||
4930 | },{"./_stream_duplex":20,"core-util-is":8,"inherits":13}],24:[function(require,module,exports){ | ||
4931 | (function (process,global,setImmediate){ | ||
4932 | // Copyright Joyent, Inc. and other Node contributors. | ||
4933 | // | ||
4934 | // Permission is hereby granted, free of charge, to any person obtaining a | ||
4935 | // copy of this software and associated documentation files (the | ||
4936 | // "Software"), to deal in the Software without restriction, including | ||
4937 | // without limitation the rights to use, copy, modify, merge, publish, | ||
4938 | // distribute, sublicense, and/or sell copies of the Software, and to permit | ||
4939 | // persons to whom the Software is furnished to do so, subject to the | ||
4940 | // following conditions: | ||
4941 | // | ||
4942 | // The above copyright notice and this permission notice shall be included | ||
4943 | // in all copies or substantial portions of the Software. | ||
4944 | // | ||
4945 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
4946 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
4947 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||
4948 | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
4949 | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
4950 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
4951 | // USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
4952 | |||
4953 | // A bit simpler than readable streams. | ||
4954 | // Implement an async ._write(chunk, encoding, cb), and it'll handle all | ||
4955 | // the drain event emission and buffering. | ||
4956 | |||
4957 | 'use strict'; | ||
4958 | |||
4959 | /*<replacement>*/ | ||
4960 | |||
4961 | var pna = require('process-nextick-args'); | ||
4962 | /*</replacement>*/ | ||
4963 | |||
4964 | module.exports = Writable; | ||
4965 | |||
4966 | /* <replacement> */ | ||
4967 | function WriteReq(chunk, encoding, cb) { | ||
4968 | this.chunk = chunk; | ||
4969 | this.encoding = encoding; | ||
4970 | this.callback = cb; | ||
4971 | this.next = null; | ||
4972 | } | ||
4973 | |||
4974 | // It seems a linked list but it is not | ||
4975 | // there will be only 2 of these for each stream | ||
4976 | function CorkedRequest(state) { | ||
4977 | var _this = this; | ||
4978 | |||
4979 | this.next = null; | ||
4980 | this.entry = null; | ||
4981 | this.finish = function () { | ||
4982 | onCorkedFinish(_this, state); | ||
4983 | }; | ||
4984 | } | ||
4985 | /* </replacement> */ | ||
4986 | |||
4987 | /*<replacement>*/ | ||
4988 | var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; | ||
4989 | /*</replacement>*/ | ||
4990 | |||
4991 | /*<replacement>*/ | ||
4992 | var Duplex; | ||
4993 | /*</replacement>*/ | ||
4994 | |||
4995 | Writable.WritableState = WritableState; | ||
4996 | |||
4997 | /*<replacement>*/ | ||
4998 | var util = require('core-util-is'); | ||
4999 | util.inherits = require('inherits'); | ||
5000 | /*</replacement>*/ | ||
5001 | |||
5002 | /*<replacement>*/ | ||
5003 | var internalUtil = { | ||
5004 | deprecate: require('util-deprecate') | ||
5005 | }; | ||
5006 | /*</replacement>*/ | ||
5007 | |||
5008 | /*<replacement>*/ | ||
5009 | var Stream = require('./internal/streams/stream'); | ||
5010 | /*</replacement>*/ | ||
5011 | |||
5012 | /*<replacement>*/ | ||
5013 | |||
5014 | var Buffer = require('safe-buffer').Buffer; | ||
5015 | var OurUint8Array = global.Uint8Array || function () {}; | ||
5016 | function _uint8ArrayToBuffer(chunk) { | ||
5017 | return Buffer.from(chunk); | ||
5018 | } | ||
5019 | function _isUint8Array(obj) { | ||
5020 | return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; | ||
5021 | } | ||
5022 | |||
5023 | /*</replacement>*/ | ||
5024 | |||
5025 | var destroyImpl = require('./internal/streams/destroy'); | ||
5026 | |||
5027 | util.inherits(Writable, Stream); | ||
5028 | |||
5029 | function nop() {} | ||
5030 | |||
5031 | function WritableState(options, stream) { | ||
5032 | Duplex = Duplex || require('./_stream_duplex'); | ||
5033 | |||
5034 | options = options || {}; | ||
5035 | |||
5036 | // Duplex streams are both readable and writable, but share | ||
5037 | // the same options object. | ||
5038 | // However, some cases require setting options to different | ||
5039 | // values for the readable and the writable sides of the duplex stream. | ||
5040 | // These options can be provided separately as readableXXX and writableXXX. | ||
5041 | var isDuplex = stream instanceof Duplex; | ||
5042 | |||
5043 | // object stream flag to indicate whether or not this stream | ||
5044 | // contains buffers or objects. | ||
5045 | this.objectMode = !!options.objectMode; | ||
5046 | |||
5047 | if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; | ||
5048 | |||
5049 | // the point at which write() starts returning false | ||
5050 | // Note: 0 is a valid value, means that we always return false if | ||
5051 | // the entire buffer is not flushed immediately on write() | ||
5052 | var hwm = options.highWaterMark; | ||
5053 | var writableHwm = options.writableHighWaterMark; | ||
5054 | var defaultHwm = this.objectMode ? 16 : 16 * 1024; | ||
5055 | |||
5056 | if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; | ||
5057 | |||
5058 | // cast to ints. | ||
5059 | this.highWaterMark = Math.floor(this.highWaterMark); | ||
5060 | |||
5061 | // if _final has been called | ||
5062 | this.finalCalled = false; | ||
5063 | |||
5064 | // drain event flag. | ||
5065 | this.needDrain = false; | ||
5066 | // at the start of calling end() | ||
5067 | this.ending = false; | ||
5068 | // when end() has been called, and returned | ||
5069 | this.ended = false; | ||
5070 | // when 'finish' is emitted | ||
5071 | this.finished = false; | ||
5072 | |||
5073 | // has it been destroyed | ||
5074 | this.destroyed = false; | ||
5075 | |||
5076 | // should we decode strings into buffers before passing to _write? | ||
5077 | // this is here so that some node-core streams can optimize string | ||
5078 | // handling at a lower level. | ||
5079 | var noDecode = options.decodeStrings === false; | ||
5080 | this.decodeStrings = !noDecode; | ||
5081 | |||
5082 | // Crypto is kind of old and crusty. Historically, its default string | ||
5083 | // encoding is 'binary' so we have to make this configurable. | ||
5084 | // Everything else in the universe uses 'utf8', though. | ||
5085 | this.defaultEncoding = options.defaultEncoding || 'utf8'; | ||
5086 | |||
5087 | // not an actual buffer we keep track of, but a measurement | ||
5088 | // of how much we're waiting to get pushed to some underlying | ||
5089 | // socket or file. | ||
5090 | this.length = 0; | ||
5091 | |||
5092 | // a flag to see when we're in the middle of a write. | ||
5093 | this.writing = false; | ||
5094 | |||
5095 | // when true all writes will be buffered until .uncork() call | ||
5096 | this.corked = 0; | ||
5097 | |||
5098 | // a flag to be able to tell if the onwrite cb is called immediately, | ||
5099 | // or on a later tick. We set this to true at first, because any | ||
5100 | // actions that shouldn't happen until "later" should generally also | ||
5101 | // not happen before the first write call. | ||
5102 | this.sync = true; | ||
5103 | |||
5104 | // a flag to know if we're processing previously buffered items, which | ||
5105 | // may call the _write() callback in the same tick, so that we don't | ||
5106 | // end up in an overlapped onwrite situation. | ||
5107 | this.bufferProcessing = false; | ||
5108 | |||
5109 | // the callback that's passed to _write(chunk,cb) | ||
5110 | this.onwrite = function (er) { | ||
5111 | onwrite(stream, er); | ||
5112 | }; | ||
5113 | |||
5114 | // the callback that the user supplies to write(chunk,encoding,cb) | ||
5115 | this.writecb = null; | ||
5116 | |||
5117 | // the amount that is being written when _write is called. | ||
5118 | this.writelen = 0; | ||
5119 | |||
5120 | this.bufferedRequest = null; | ||
5121 | this.lastBufferedRequest = null; | ||
5122 | |||
5123 | // number of pending user-supplied write callbacks | ||
5124 | // this must be 0 before 'finish' can be emitted | ||
5125 | this.pendingcb = 0; | ||
5126 | |||
5127 | // emit prefinish if the only thing we're waiting for is _write cbs | ||
5128 | // This is relevant for synchronous Transform streams | ||
5129 | this.prefinished = false; | ||
5130 | |||
5131 | // True if the error was already emitted and should not be thrown again | ||
5132 | this.errorEmitted = false; | ||
5133 | |||
5134 | // count buffered requests | ||
5135 | this.bufferedRequestCount = 0; | ||
5136 | |||
5137 | // allocate the first CorkedRequest, there is always | ||
5138 | // one allocated and free to use, and we maintain at most two | ||
5139 | this.corkedRequestsFree = new CorkedRequest(this); | ||
5140 | } | ||
5141 | |||
5142 | WritableState.prototype.getBuffer = function getBuffer() { | ||
5143 | var current = this.bufferedRequest; | ||
5144 | var out = []; | ||
5145 | while (current) { | ||
5146 | out.push(current); | ||
5147 | current = current.next; | ||
5148 | } | ||
5149 | return out; | ||
5150 | }; | ||
5151 | |||
5152 | (function () { | ||
5153 | try { | ||
5154 | Object.defineProperty(WritableState.prototype, 'buffer', { | ||
5155 | get: internalUtil.deprecate(function () { | ||
5156 | return this.getBuffer(); | ||
5157 | }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') | ||
5158 | }); | ||
5159 | } catch (_) {} | ||
5160 | })(); | ||
5161 | |||
5162 | // Test _writableState for inheritance to account for Duplex streams, | ||
5163 | // whose prototype chain only points to Readable. | ||
5164 | var realHasInstance; | ||
5165 | if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { | ||
5166 | realHasInstance = Function.prototype[Symbol.hasInstance]; | ||
5167 | Object.defineProperty(Writable, Symbol.hasInstance, { | ||
5168 | value: function (object) { | ||
5169 | if (realHasInstance.call(this, object)) return true; | ||
5170 | if (this !== Writable) return false; | ||
5171 | |||
5172 | return object && object._writableState instanceof WritableState; | ||
5173 | } | ||
5174 | }); | ||
5175 | } else { | ||
5176 | realHasInstance = function (object) { | ||
5177 | return object instanceof this; | ||
5178 | }; | ||
5179 | } | ||
5180 | |||
5181 | function Writable(options) { | ||
5182 | Duplex = Duplex || require('./_stream_duplex'); | ||
5183 | |||
5184 | // Writable ctor is applied to Duplexes, too. | ||
5185 | // `realHasInstance` is necessary because using plain `instanceof` | ||
5186 | // would return false, as no `_writableState` property is attached. | ||
5187 | |||
5188 | // Trying to use the custom `instanceof` for Writable here will also break the | ||
5189 | // Node.js LazyTransform implementation, which has a non-trivial getter for | ||
5190 | // `_writableState` that would lead to infinite recursion. | ||
5191 | if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { | ||
5192 | return new Writable(options); | ||
5193 | } | ||
5194 | |||
5195 | this._writableState = new WritableState(options, this); | ||
5196 | |||
5197 | // legacy. | ||
5198 | this.writable = true; | ||
5199 | |||
5200 | if (options) { | ||
5201 | if (typeof options.write === 'function') this._write = options.write; | ||
5202 | |||
5203 | if (typeof options.writev === 'function') this._writev = options.writev; | ||
5204 | |||
5205 | if (typeof options.destroy === 'function') this._destroy = options.destroy; | ||
5206 | |||
5207 | if (typeof options.final === 'function') this._final = options.final; | ||
5208 | } | ||
5209 | |||
5210 | Stream.call(this); | ||
5211 | } | ||
5212 | |||
5213 | // Otherwise people can pipe Writable streams, which is just wrong. | ||
5214 | Writable.prototype.pipe = function () { | ||
5215 | this.emit('error', new Error('Cannot pipe, not readable')); | ||
5216 | }; | ||
5217 | |||
5218 | function writeAfterEnd(stream, cb) { | ||
5219 | var er = new Error('write after end'); | ||
5220 | // TODO: defer error events consistently everywhere, not just the cb | ||
5221 | stream.emit('error', er); | ||
5222 | pna.nextTick(cb, er); | ||
5223 | } | ||
5224 | |||
5225 | // Checks that a user-supplied chunk is valid, especially for the particular | ||
5226 | // mode the stream is in. Currently this means that `null` is never accepted | ||
5227 | // and undefined/non-string values are only allowed in object mode. | ||
5228 | function validChunk(stream, state, chunk, cb) { | ||
5229 | var valid = true; | ||
5230 | var er = false; | ||
5231 | |||
5232 | if (chunk === null) { | ||
5233 | er = new TypeError('May not write null values to stream'); | ||
5234 | } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { | ||
5235 | er = new TypeError('Invalid non-string/buffer chunk'); | ||
5236 | } | ||
5237 | if (er) { | ||
5238 | stream.emit('error', er); | ||
5239 | pna.nextTick(cb, er); | ||
5240 | valid = false; | ||
5241 | } | ||
5242 | return valid; | ||
5243 | } | ||
5244 | |||
5245 | Writable.prototype.write = function (chunk, encoding, cb) { | ||
5246 | var state = this._writableState; | ||
5247 | var ret = false; | ||
5248 | var isBuf = !state.objectMode && _isUint8Array(chunk); | ||
5249 | |||
5250 | if (isBuf && !Buffer.isBuffer(chunk)) { | ||
5251 | chunk = _uint8ArrayToBuffer(chunk); | ||
5252 | } | ||
5253 | |||
5254 | if (typeof encoding === 'function') { | ||
5255 | cb = encoding; | ||
5256 | encoding = null; | ||
5257 | } | ||
5258 | |||
5259 | if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; | ||
5260 | |||
5261 | if (typeof cb !== 'function') cb = nop; | ||
5262 | |||
5263 | if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { | ||
5264 | state.pendingcb++; | ||
5265 | ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); | ||
5266 | } | ||
5267 | |||
5268 | return ret; | ||
5269 | }; | ||
5270 | |||
5271 | Writable.prototype.cork = function () { | ||
5272 | var state = this._writableState; | ||
5273 | |||
5274 | state.corked++; | ||
5275 | }; | ||
5276 | |||
5277 | Writable.prototype.uncork = function () { | ||
5278 | var state = this._writableState; | ||
5279 | |||
5280 | if (state.corked) { | ||
5281 | state.corked--; | ||
5282 | |||
5283 | if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); | ||
5284 | } | ||
5285 | }; | ||
5286 | |||
5287 | Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { | ||
5288 | // node::ParseEncoding() requires lower case. | ||
5289 | if (typeof encoding === 'string') encoding = encoding.toLowerCase(); | ||
5290 | if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); | ||
5291 | this._writableState.defaultEncoding = encoding; | ||
5292 | return this; | ||
5293 | }; | ||
5294 | |||
5295 | function decodeChunk(state, chunk, encoding) { | ||
5296 | if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { | ||
5297 | chunk = Buffer.from(chunk, encoding); | ||
5298 | } | ||
5299 | return chunk; | ||
5300 | } | ||
5301 | |||
5302 | Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { | ||
5303 | // making it explicit this property is not enumerable | ||
5304 | // because otherwise some prototype manipulation in | ||
5305 | // userland will fail | ||
5306 | enumerable: false, | ||
5307 | get: function () { | ||
5308 | return this._writableState.highWaterMark; | ||
5309 | } | ||
5310 | }); | ||
5311 | |||
5312 | // if we're already writing something, then just put this | ||
5313 | // in the queue, and wait our turn. Otherwise, call _write | ||
5314 | // If we return false, then we need a drain event, so set that flag. | ||
5315 | function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { | ||
5316 | if (!isBuf) { | ||
5317 | var newChunk = decodeChunk(state, chunk, encoding); | ||
5318 | if (chunk !== newChunk) { | ||
5319 | isBuf = true; | ||
5320 | encoding = 'buffer'; | ||
5321 | chunk = newChunk; | ||
5322 | } | ||
5323 | } | ||
5324 | var len = state.objectMode ? 1 : chunk.length; | ||
5325 | |||
5326 | state.length += len; | ||
5327 | |||
5328 | var ret = state.length < state.highWaterMark; | ||
5329 | // we must ensure that previous needDrain will not be reset to false. | ||
5330 | if (!ret) state.needDrain = true; | ||
5331 | |||
5332 | if (state.writing || state.corked) { | ||
5333 | var last = state.lastBufferedRequest; | ||
5334 | state.lastBufferedRequest = { | ||
5335 | chunk: chunk, | ||
5336 | encoding: encoding, | ||
5337 | isBuf: isBuf, | ||
5338 | callback: cb, | ||
5339 | next: null | ||
5340 | }; | ||
5341 | if (last) { | ||
5342 | last.next = state.lastBufferedRequest; | ||
5343 | } else { | ||
5344 | state.bufferedRequest = state.lastBufferedRequest; | ||
5345 | } | ||
5346 | state.bufferedRequestCount += 1; | ||
5347 | } else { | ||
5348 | doWrite(stream, state, false, len, chunk, encoding, cb); | ||
5349 | } | ||
5350 | |||
5351 | return ret; | ||
5352 | } | ||
5353 | |||
5354 | function doWrite(stream, state, writev, len, chunk, encoding, cb) { | ||
5355 | state.writelen = len; | ||
5356 | state.writecb = cb; | ||
5357 | state.writing = true; | ||
5358 | state.sync = true; | ||
5359 | if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); | ||
5360 | state.sync = false; | ||
5361 | } | ||
5362 | |||
5363 | function onwriteError(stream, state, sync, er, cb) { | ||
5364 | --state.pendingcb; | ||
5365 | |||
5366 | if (sync) { | ||
5367 | // defer the callback if we are being called synchronously | ||
5368 | // to avoid piling up things on the stack | ||
5369 | pna.nextTick(cb, er); | ||
5370 | // this can emit finish, and it will always happen | ||
5371 | // after error | ||
5372 | pna.nextTick(finishMaybe, stream, state); | ||
5373 | stream._writableState.errorEmitted = true; | ||
5374 | stream.emit('error', er); | ||
5375 | } else { | ||
5376 | // the caller expect this to happen before if | ||
5377 | // it is async | ||
5378 | cb(er); | ||
5379 | stream._writableState.errorEmitted = true; | ||
5380 | stream.emit('error', er); | ||
5381 | // this can emit finish, but finish must | ||
5382 | // always follow error | ||
5383 | finishMaybe(stream, state); | ||
5384 | } | ||
5385 | } | ||
5386 | |||
5387 | function onwriteStateUpdate(state) { | ||
5388 | state.writing = false; | ||
5389 | state.writecb = null; | ||
5390 | state.length -= state.writelen; | ||
5391 | state.writelen = 0; | ||
5392 | } | ||
5393 | |||
5394 | function onwrite(stream, er) { | ||
5395 | var state = stream._writableState; | ||
5396 | var sync = state.sync; | ||
5397 | var cb = state.writecb; | ||
5398 | |||
5399 | onwriteStateUpdate(state); | ||
5400 | |||
5401 | if (er) onwriteError(stream, state, sync, er, cb);else { | ||
5402 | // Check if we're actually ready to finish, but don't emit yet | ||
5403 | var finished = needFinish(state); | ||
5404 | |||
5405 | if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { | ||
5406 | clearBuffer(stream, state); | ||
5407 | } | ||
5408 | |||
5409 | if (sync) { | ||
5410 | /*<replacement>*/ | ||
5411 | asyncWrite(afterWrite, stream, state, finished, cb); | ||
5412 | /*</replacement>*/ | ||
5413 | } else { | ||
5414 | afterWrite(stream, state, finished, cb); | ||
5415 | } | ||
5416 | } | ||
5417 | } | ||
5418 | |||
5419 | function afterWrite(stream, state, finished, cb) { | ||
5420 | if (!finished) onwriteDrain(stream, state); | ||
5421 | state.pendingcb--; | ||
5422 | cb(); | ||
5423 | finishMaybe(stream, state); | ||
5424 | } | ||
5425 | |||
5426 | // Must force callback to be called on nextTick, so that we don't | ||
5427 | // emit 'drain' before the write() consumer gets the 'false' return | ||
5428 | // value, and has a chance to attach a 'drain' listener. | ||
5429 | function onwriteDrain(stream, state) { | ||
5430 | if (state.length === 0 && state.needDrain) { | ||
5431 | state.needDrain = false; | ||
5432 | stream.emit('drain'); | ||
5433 | } | ||
5434 | } | ||
5435 | |||
5436 | // if there's something in the buffer waiting, then process it | ||
5437 | function clearBuffer(stream, state) { | ||
5438 | state.bufferProcessing = true; | ||
5439 | var entry = state.bufferedRequest; | ||
5440 | |||
5441 | if (stream._writev && entry && entry.next) { | ||
5442 | // Fast case, write everything using _writev() | ||
5443 | var l = state.bufferedRequestCount; | ||
5444 | var buffer = new Array(l); | ||
5445 | var holder = state.corkedRequestsFree; | ||
5446 | holder.entry = entry; | ||
5447 | |||
5448 | var count = 0; | ||
5449 | var allBuffers = true; | ||
5450 | while (entry) { | ||
5451 | buffer[count] = entry; | ||
5452 | if (!entry.isBuf) allBuffers = false; | ||
5453 | entry = entry.next; | ||
5454 | count += 1; | ||
5455 | } | ||
5456 | buffer.allBuffers = allBuffers; | ||
5457 | |||
5458 | doWrite(stream, state, true, state.length, buffer, '', holder.finish); | ||
5459 | |||
5460 | // doWrite is almost always async, defer these to save a bit of time | ||
5461 | // as the hot path ends with doWrite | ||
5462 | state.pendingcb++; | ||
5463 | state.lastBufferedRequest = null; | ||
5464 | if (holder.next) { | ||
5465 | state.corkedRequestsFree = holder.next; | ||
5466 | holder.next = null; | ||
5467 | } else { | ||
5468 | state.corkedRequestsFree = new CorkedRequest(state); | ||
5469 | } | ||
5470 | state.bufferedRequestCount = 0; | ||
5471 | } else { | ||
5472 | // Slow case, write chunks one-by-one | ||
5473 | while (entry) { | ||
5474 | var chunk = entry.chunk; | ||
5475 | var encoding = entry.encoding; | ||
5476 | var cb = entry.callback; | ||
5477 | var len = state.objectMode ? 1 : chunk.length; | ||
5478 | |||
5479 | doWrite(stream, state, false, len, chunk, encoding, cb); | ||
5480 | entry = entry.next; | ||
5481 | state.bufferedRequestCount--; | ||
5482 | // if we didn't call the onwrite immediately, then | ||
5483 | // it means that we need to wait until it does. | ||
5484 | // also, that means that the chunk and cb are currently | ||
5485 | // being processed, so move the buffer counter past them. | ||
5486 | if (state.writing) { | ||
5487 | break; | ||
5488 | } | ||
5489 | } | ||
5490 | |||
5491 | if (entry === null) state.lastBufferedRequest = null; | ||
5492 | } | ||
5493 | |||
5494 | state.bufferedRequest = entry; | ||
5495 | state.bufferProcessing = false; | ||
5496 | } | ||
5497 | |||
5498 | Writable.prototype._write = function (chunk, encoding, cb) { | ||
5499 | cb(new Error('_write() is not implemented')); | ||
5500 | }; | ||
5501 | |||
5502 | Writable.prototype._writev = null; | ||
5503 | |||
5504 | Writable.prototype.end = function (chunk, encoding, cb) { | ||
5505 | var state = this._writableState; | ||
5506 | |||
5507 | if (typeof chunk === 'function') { | ||
5508 | cb = chunk; | ||
5509 | chunk = null; | ||
5510 | encoding = null; | ||
5511 | } else if (typeof encoding === 'function') { | ||
5512 | cb = encoding; | ||
5513 | encoding = null; | ||
5514 | } | ||
5515 | |||
5516 | if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); | ||
5517 | |||
5518 | // .end() fully uncorks | ||
5519 | if (state.corked) { | ||
5520 | state.corked = 1; | ||
5521 | this.uncork(); | ||
5522 | } | ||
5523 | |||
5524 | // ignore unnecessary end() calls. | ||
5525 | if (!state.ending && !state.finished) endWritable(this, state, cb); | ||
5526 | }; | ||
5527 | |||
5528 | function needFinish(state) { | ||
5529 | return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; | ||
5530 | } | ||
5531 | function callFinal(stream, state) { | ||
5532 | stream._final(function (err) { | ||
5533 | state.pendingcb--; | ||
5534 | if (err) { | ||
5535 | stream.emit('error', err); | ||
5536 | } | ||
5537 | state.prefinished = true; | ||
5538 | stream.emit('prefinish'); | ||
5539 | finishMaybe(stream, state); | ||
5540 | }); | ||
5541 | } | ||
5542 | function prefinish(stream, state) { | ||
5543 | if (!state.prefinished && !state.finalCalled) { | ||
5544 | if (typeof stream._final === 'function') { | ||
5545 | state.pendingcb++; | ||
5546 | state.finalCalled = true; | ||
5547 | pna.nextTick(callFinal, stream, state); | ||
5548 | } else { | ||
5549 | state.prefinished = true; | ||
5550 | stream.emit('prefinish'); | ||
5551 | } | ||
5552 | } | ||
5553 | } | ||
5554 | |||
5555 | function finishMaybe(stream, state) { | ||
5556 | var need = needFinish(state); | ||
5557 | if (need) { | ||
5558 | prefinish(stream, state); | ||
5559 | if (state.pendingcb === 0) { | ||
5560 | state.finished = true; | ||
5561 | stream.emit('finish'); | ||
5562 | } | ||
5563 | } | ||
5564 | return need; | ||
5565 | } | ||
5566 | |||
5567 | function endWritable(stream, state, cb) { | ||
5568 | state.ending = true; | ||
5569 | finishMaybe(stream, state); | ||
5570 | if (cb) { | ||
5571 | if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); | ||
5572 | } | ||
5573 | state.ended = true; | ||
5574 | stream.writable = false; | ||
5575 | } | ||
5576 | |||
5577 | function onCorkedFinish(corkReq, state, err) { | ||
5578 | var entry = corkReq.entry; | ||
5579 | corkReq.entry = null; | ||
5580 | while (entry) { | ||
5581 | var cb = entry.callback; | ||
5582 | state.pendingcb--; | ||
5583 | cb(err); | ||
5584 | entry = entry.next; | ||
5585 | } | ||
5586 | if (state.corkedRequestsFree) { | ||
5587 | state.corkedRequestsFree.next = corkReq; | ||
5588 | } else { | ||
5589 | state.corkedRequestsFree = corkReq; | ||
5590 | } | ||
5591 | } | ||
5592 | |||
5593 | Object.defineProperty(Writable.prototype, 'destroyed', { | ||
5594 | get: function () { | ||
5595 | if (this._writableState === undefined) { | ||
5596 | return false; | ||
5597 | } | ||
5598 | return this._writableState.destroyed; | ||
5599 | }, | ||
5600 | set: function (value) { | ||
5601 | // we ignore the value if the stream | ||
5602 | // has not been initialized yet | ||
5603 | if (!this._writableState) { | ||
5604 | return; | ||
5605 | } | ||
5606 | |||
5607 | // backward compatibility, the user is explicitly | ||
5608 | // managing destroyed | ||
5609 | this._writableState.destroyed = value; | ||
5610 | } | ||
5611 | }); | ||
5612 | |||
5613 | Writable.prototype.destroy = destroyImpl.destroy; | ||
5614 | Writable.prototype._undestroy = destroyImpl.undestroy; | ||
5615 | Writable.prototype._destroy = function (err, cb) { | ||
5616 | this.end(); | ||
5617 | cb(err); | ||
5618 | }; | ||
5619 | }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) | ||
5620 | },{"./_stream_duplex":20,"./internal/streams/destroy":26,"./internal/streams/stream":27,"_process":18,"core-util-is":8,"inherits":13,"process-nextick-args":17,"safe-buffer":34,"timers":45,"util-deprecate":46}],25:[function(require,module,exports){ | ||
5621 | 'use strict'; | ||
5622 | |||
5623 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
5624 | |||
5625 | var Buffer = require('safe-buffer').Buffer; | ||
5626 | var util = require('util'); | ||
5627 | |||
5628 | function copyBuffer(src, target, offset) { | ||
5629 | src.copy(target, offset); | ||
5630 | } | ||
5631 | |||
5632 | module.exports = function () { | ||
5633 | function BufferList() { | ||
5634 | _classCallCheck(this, BufferList); | ||
5635 | |||
5636 | this.head = null; | ||
5637 | this.tail = null; | ||
5638 | this.length = 0; | ||
5639 | } | ||
5640 | |||
5641 | BufferList.prototype.push = function push(v) { | ||
5642 | var entry = { data: v, next: null }; | ||
5643 | if (this.length > 0) this.tail.next = entry;else this.head = entry; | ||
5644 | this.tail = entry; | ||
5645 | ++this.length; | ||
5646 | }; | ||
5647 | |||
5648 | BufferList.prototype.unshift = function unshift(v) { | ||
5649 | var entry = { data: v, next: this.head }; | ||
5650 | if (this.length === 0) this.tail = entry; | ||
5651 | this.head = entry; | ||
5652 | ++this.length; | ||
5653 | }; | ||
5654 | |||
5655 | BufferList.prototype.shift = function shift() { | ||
5656 | if (this.length === 0) return; | ||
5657 | var ret = this.head.data; | ||
5658 | if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; | ||
5659 | --this.length; | ||
5660 | return ret; | ||
5661 | }; | ||
5662 | |||
5663 | BufferList.prototype.clear = function clear() { | ||
5664 | this.head = this.tail = null; | ||
5665 | this.length = 0; | ||
5666 | }; | ||
5667 | |||
5668 | BufferList.prototype.join = function join(s) { | ||
5669 | if (this.length === 0) return ''; | ||
5670 | var p = this.head; | ||
5671 | var ret = '' + p.data; | ||
5672 | while (p = p.next) { | ||
5673 | ret += s + p.data; | ||
5674 | }return ret; | ||
5675 | }; | ||
5676 | |||
5677 | BufferList.prototype.concat = function concat(n) { | ||
5678 | if (this.length === 0) return Buffer.alloc(0); | ||
5679 | if (this.length === 1) return this.head.data; | ||
5680 | var ret = Buffer.allocUnsafe(n >>> 0); | ||
5681 | var p = this.head; | ||
5682 | var i = 0; | ||
5683 | while (p) { | ||
5684 | copyBuffer(p.data, ret, i); | ||
5685 | i += p.data.length; | ||
5686 | p = p.next; | ||
5687 | } | ||
5688 | return ret; | ||
5689 | }; | ||
5690 | |||
5691 | return BufferList; | ||
5692 | }(); | ||
5693 | |||
5694 | if (util && util.inspect && util.inspect.custom) { | ||
5695 | module.exports.prototype[util.inspect.custom] = function () { | ||
5696 | var obj = util.inspect({ length: this.length }); | ||
5697 | return this.constructor.name + ' ' + obj; | ||
5698 | }; | ||
5699 | } | ||
5700 | },{"safe-buffer":34,"util":4}],26:[function(require,module,exports){ | ||
5701 | 'use strict'; | ||
5702 | |||
5703 | /*<replacement>*/ | ||
5704 | |||
5705 | var pna = require('process-nextick-args'); | ||
5706 | /*</replacement>*/ | ||
5707 | |||
5708 | // undocumented cb() API, needed for core, not for public API | ||
5709 | function destroy(err, cb) { | ||
5710 | var _this = this; | ||
5711 | |||
5712 | var readableDestroyed = this._readableState && this._readableState.destroyed; | ||
5713 | var writableDestroyed = this._writableState && this._writableState.destroyed; | ||
5714 | |||
5715 | if (readableDestroyed || writableDestroyed) { | ||
5716 | if (cb) { | ||
5717 | cb(err); | ||
5718 | } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { | ||
5719 | pna.nextTick(emitErrorNT, this, err); | ||
5720 | } | ||
5721 | return this; | ||
5722 | } | ||
5723 | |||
5724 | // we set destroyed to true before firing error callbacks in order | ||
5725 | // to make it re-entrance safe in case destroy() is called within callbacks | ||
5726 | |||
5727 | if (this._readableState) { | ||
5728 | this._readableState.destroyed = true; | ||
5729 | } | ||
5730 | |||
5731 | // if this is a duplex stream mark the writable part as destroyed as well | ||
5732 | if (this._writableState) { | ||
5733 | this._writableState.destroyed = true; | ||
5734 | } | ||
5735 | |||
5736 | this._destroy(err || null, function (err) { | ||
5737 | if (!cb && err) { | ||
5738 | pna.nextTick(emitErrorNT, _this, err); | ||
5739 | if (_this._writableState) { | ||
5740 | _this._writableState.errorEmitted = true; | ||
5741 | } | ||
5742 | } else if (cb) { | ||
5743 | cb(err); | ||
5744 | } | ||
5745 | }); | ||
5746 | |||
5747 | return this; | ||
5748 | } | ||
5749 | |||
5750 | function undestroy() { | ||
5751 | if (this._readableState) { | ||
5752 | this._readableState.destroyed = false; | ||
5753 | this._readableState.reading = false; | ||
5754 | this._readableState.ended = false; | ||
5755 | this._readableState.endEmitted = false; | ||
5756 | } | ||
5757 | |||
5758 | if (this._writableState) { | ||
5759 | this._writableState.destroyed = false; | ||
5760 | this._writableState.ended = false; | ||
5761 | this._writableState.ending = false; | ||
5762 | this._writableState.finished = false; | ||
5763 | this._writableState.errorEmitted = false; | ||
5764 | } | ||
5765 | } | ||
5766 | |||
5767 | function emitErrorNT(self, err) { | ||
5768 | self.emit('error', err); | ||
5769 | } | ||
5770 | |||
5771 | module.exports = { | ||
5772 | destroy: destroy, | ||
5773 | undestroy: undestroy | ||
5774 | }; | ||
5775 | },{"process-nextick-args":17}],27:[function(require,module,exports){ | ||
5776 | module.exports = require('events').EventEmitter; | ||
5777 | |||
5778 | },{"events":10}],28:[function(require,module,exports){ | ||
5779 | // Copyright Joyent, Inc. and other Node contributors. | ||
5780 | // | ||
5781 | // Permission is hereby granted, free of charge, to any person obtaining a | ||
5782 | // copy of this software and associated documentation files (the | ||
5783 | // "Software"), to deal in the Software without restriction, including | ||
5784 | // without limitation the rights to use, copy, modify, merge, publish, | ||
5785 | // distribute, sublicense, and/or sell copies of the Software, and to permit | ||
5786 | // persons to whom the Software is furnished to do so, subject to the | ||
5787 | // following conditions: | ||
5788 | // | ||
5789 | // The above copyright notice and this permission notice shall be included | ||
5790 | // in all copies or substantial portions of the Software. | ||
5791 | // | ||
5792 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
5793 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
5794 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||
5795 | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
5796 | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
5797 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
5798 | // USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
5799 | |||
5800 | 'use strict'; | ||
5801 | |||
5802 | /*<replacement>*/ | ||
5803 | |||
5804 | var Buffer = require('safe-buffer').Buffer; | ||
5805 | /*</replacement>*/ | ||
5806 | |||
5807 | var isEncoding = Buffer.isEncoding || function (encoding) { | ||
5808 | encoding = '' + encoding; | ||
5809 | switch (encoding && encoding.toLowerCase()) { | ||
5810 | case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': | ||
5811 | return true; | ||
5812 | default: | ||
5813 | return false; | ||
5814 | } | ||
5815 | }; | ||
5816 | |||
5817 | function _normalizeEncoding(enc) { | ||
5818 | if (!enc) return 'utf8'; | ||
5819 | var retried; | ||
5820 | while (true) { | ||
5821 | switch (enc) { | ||
5822 | case 'utf8': | ||
5823 | case 'utf-8': | ||
5824 | return 'utf8'; | ||
5825 | case 'ucs2': | ||
5826 | case 'ucs-2': | ||
5827 | case 'utf16le': | ||
5828 | case 'utf-16le': | ||
5829 | return 'utf16le'; | ||
5830 | case 'latin1': | ||
5831 | case 'binary': | ||
5832 | return 'latin1'; | ||
5833 | case 'base64': | ||
5834 | case 'ascii': | ||
5835 | case 'hex': | ||
5836 | return enc; | ||
5837 | default: | ||
5838 | if (retried) return; // undefined | ||
5839 | enc = ('' + enc).toLowerCase(); | ||
5840 | retried = true; | ||
5841 | } | ||
5842 | } | ||
5843 | }; | ||
5844 | |||
5845 | // Do not cache `Buffer.isEncoding` when checking encoding names as some | ||
5846 | // modules monkey-patch it to support additional encodings | ||
5847 | function normalizeEncoding(enc) { | ||
5848 | var nenc = _normalizeEncoding(enc); | ||
5849 | if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); | ||
5850 | return nenc || enc; | ||
5851 | } | ||
5852 | |||
5853 | // StringDecoder provides an interface for efficiently splitting a series of | ||
5854 | // buffers into a series of JS strings without breaking apart multi-byte | ||
5855 | // characters. | ||
5856 | exports.StringDecoder = StringDecoder; | ||
5857 | function StringDecoder(encoding) { | ||
5858 | this.encoding = normalizeEncoding(encoding); | ||
5859 | var nb; | ||
5860 | switch (this.encoding) { | ||
5861 | case 'utf16le': | ||
5862 | this.text = utf16Text; | ||
5863 | this.end = utf16End; | ||
5864 | nb = 4; | ||
5865 | break; | ||
5866 | case 'utf8': | ||
5867 | this.fillLast = utf8FillLast; | ||
5868 | nb = 4; | ||
5869 | break; | ||
5870 | case 'base64': | ||
5871 | this.text = base64Text; | ||
5872 | this.end = base64End; | ||
5873 | nb = 3; | ||
5874 | break; | ||
5875 | default: | ||
5876 | this.write = simpleWrite; | ||
5877 | this.end = simpleEnd; | ||
5878 | return; | ||
5879 | } | ||
5880 | this.lastNeed = 0; | ||
5881 | this.lastTotal = 0; | ||
5882 | this.lastChar = Buffer.allocUnsafe(nb); | ||
5883 | } | ||
5884 | |||
5885 | StringDecoder.prototype.write = function (buf) { | ||
5886 | if (buf.length === 0) return ''; | ||
5887 | var r; | ||
5888 | var i; | ||
5889 | if (this.lastNeed) { | ||
5890 | r = this.fillLast(buf); | ||
5891 | if (r === undefined) return ''; | ||
5892 | i = this.lastNeed; | ||
5893 | this.lastNeed = 0; | ||
5894 | } else { | ||
5895 | i = 0; | ||
5896 | } | ||
5897 | if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); | ||
5898 | return r || ''; | ||
5899 | }; | ||
5900 | |||
5901 | StringDecoder.prototype.end = utf8End; | ||
5902 | |||
5903 | // Returns only complete characters in a Buffer | ||
5904 | StringDecoder.prototype.text = utf8Text; | ||
5905 | |||
5906 | // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer | ||
5907 | StringDecoder.prototype.fillLast = function (buf) { | ||
5908 | if (this.lastNeed <= buf.length) { | ||
5909 | buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); | ||
5910 | return this.lastChar.toString(this.encoding, 0, this.lastTotal); | ||
5911 | } | ||
5912 | buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); | ||
5913 | this.lastNeed -= buf.length; | ||
5914 | }; | ||
5915 | |||
5916 | // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a | ||
5917 | // continuation byte. If an invalid byte is detected, -2 is returned. | ||
5918 | function utf8CheckByte(byte) { | ||
5919 | if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; | ||
5920 | return byte >> 6 === 0x02 ? -1 : -2; | ||
5921 | } | ||
5922 | |||
5923 | // Checks at most 3 bytes at the end of a Buffer in order to detect an | ||
5924 | // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) | ||
5925 | // needed to complete the UTF-8 character (if applicable) are returned. | ||
5926 | function utf8CheckIncomplete(self, buf, i) { | ||
5927 | var j = buf.length - 1; | ||
5928 | if (j < i) return 0; | ||
5929 | var nb = utf8CheckByte(buf[j]); | ||
5930 | if (nb >= 0) { | ||
5931 | if (nb > 0) self.lastNeed = nb - 1; | ||
5932 | return nb; | ||
5933 | } | ||
5934 | if (--j < i || nb === -2) return 0; | ||
5935 | nb = utf8CheckByte(buf[j]); | ||
5936 | if (nb >= 0) { | ||
5937 | if (nb > 0) self.lastNeed = nb - 2; | ||
5938 | return nb; | ||
5939 | } | ||
5940 | if (--j < i || nb === -2) return 0; | ||
5941 | nb = utf8CheckByte(buf[j]); | ||
5942 | if (nb >= 0) { | ||
5943 | if (nb > 0) { | ||
5944 | if (nb === 2) nb = 0;else self.lastNeed = nb - 3; | ||
5945 | } | ||
5946 | return nb; | ||
5947 | } | ||
5948 | return 0; | ||
5949 | } | ||
5950 | |||
5951 | // Validates as many continuation bytes for a multi-byte UTF-8 character as | ||
5952 | // needed or are available. If we see a non-continuation byte where we expect | ||
5953 | // one, we "replace" the validated continuation bytes we've seen so far with | ||
5954 | // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding | ||
5955 | // behavior. The continuation byte check is included three times in the case | ||
5956 | // where all of the continuation bytes for a character exist in the same buffer. | ||
5957 | // It is also done this way as a slight performance increase instead of using a | ||
5958 | // loop. | ||
5959 | function utf8CheckExtraBytes(self, buf, p) { | ||
5960 | if ((buf[0] & 0xC0) !== 0x80) { | ||
5961 | self.lastNeed = 0; | ||
5962 | return '\ufffd'; | ||
5963 | } | ||
5964 | if (self.lastNeed > 1 && buf.length > 1) { | ||
5965 | if ((buf[1] & 0xC0) !== 0x80) { | ||
5966 | self.lastNeed = 1; | ||
5967 | return '\ufffd'; | ||
5968 | } | ||
5969 | if (self.lastNeed > 2 && buf.length > 2) { | ||
5970 | if ((buf[2] & 0xC0) !== 0x80) { | ||
5971 | self.lastNeed = 2; | ||
5972 | return '\ufffd'; | ||
5973 | } | ||
5974 | } | ||
5975 | } | ||
5976 | } | ||
5977 | |||
5978 | // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. | ||
5979 | function utf8FillLast(buf) { | ||
5980 | var p = this.lastTotal - this.lastNeed; | ||
5981 | var r = utf8CheckExtraBytes(this, buf, p); | ||
5982 | if (r !== undefined) return r; | ||
5983 | if (this.lastNeed <= buf.length) { | ||
5984 | buf.copy(this.lastChar, p, 0, this.lastNeed); | ||
5985 | return this.lastChar.toString(this.encoding, 0, this.lastTotal); | ||
5986 | } | ||
5987 | buf.copy(this.lastChar, p, 0, buf.length); | ||
5988 | this.lastNeed -= buf.length; | ||
5989 | } | ||
5990 | |||
5991 | // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a | ||
5992 | // partial character, the character's bytes are buffered until the required | ||
5993 | // number of bytes are available. | ||
5994 | function utf8Text(buf, i) { | ||
5995 | var total = utf8CheckIncomplete(this, buf, i); | ||
5996 | if (!this.lastNeed) return buf.toString('utf8', i); | ||
5997 | this.lastTotal = total; | ||
5998 | var end = buf.length - (total - this.lastNeed); | ||
5999 | buf.copy(this.lastChar, 0, end); | ||
6000 | return buf.toString('utf8', i, end); | ||
6001 | } | ||
6002 | |||
6003 | // For UTF-8, a replacement character is added when ending on a partial | ||
6004 | // character. | ||
6005 | function utf8End(buf) { | ||
6006 | var r = buf && buf.length ? this.write(buf) : ''; | ||
6007 | if (this.lastNeed) return r + '\ufffd'; | ||
6008 | return r; | ||
6009 | } | ||
6010 | |||
6011 | // UTF-16LE typically needs two bytes per character, but even if we have an even | ||
6012 | // number of bytes available, we need to check if we end on a leading/high | ||
6013 | // surrogate. In that case, we need to wait for the next two bytes in order to | ||
6014 | // decode the last character properly. | ||
6015 | function utf16Text(buf, i) { | ||
6016 | if ((buf.length - i) % 2 === 0) { | ||
6017 | var r = buf.toString('utf16le', i); | ||
6018 | if (r) { | ||
6019 | var c = r.charCodeAt(r.length - 1); | ||
6020 | if (c >= 0xD800 && c <= 0xDBFF) { | ||
6021 | this.lastNeed = 2; | ||
6022 | this.lastTotal = 4; | ||
6023 | this.lastChar[0] = buf[buf.length - 2]; | ||
6024 | this.lastChar[1] = buf[buf.length - 1]; | ||
6025 | return r.slice(0, -1); | ||
6026 | } | ||
6027 | } | ||
6028 | return r; | ||
6029 | } | ||
6030 | this.lastNeed = 1; | ||
6031 | this.lastTotal = 2; | ||
6032 | this.lastChar[0] = buf[buf.length - 1]; | ||
6033 | return buf.toString('utf16le', i, buf.length - 1); | ||
6034 | } | ||
6035 | |||
6036 | // For UTF-16LE we do not explicitly append special replacement characters if we | ||
6037 | // end on a partial character, we simply let v8 handle that. | ||
6038 | function utf16End(buf) { | ||
6039 | var r = buf && buf.length ? this.write(buf) : ''; | ||
6040 | if (this.lastNeed) { | ||
6041 | var end = this.lastTotal - this.lastNeed; | ||
6042 | return r + this.lastChar.toString('utf16le', 0, end); | ||
6043 | } | ||
6044 | return r; | ||
6045 | } | ||
6046 | |||
6047 | function base64Text(buf, i) { | ||
6048 | var n = (buf.length - i) % 3; | ||
6049 | if (n === 0) return buf.toString('base64', i); | ||
6050 | this.lastNeed = 3 - n; | ||
6051 | this.lastTotal = 3; | ||
6052 | if (n === 1) { | ||
6053 | this.lastChar[0] = buf[buf.length - 1]; | ||
6054 | } else { | ||
6055 | this.lastChar[0] = buf[buf.length - 2]; | ||
6056 | this.lastChar[1] = buf[buf.length - 1]; | ||
6057 | } | ||
6058 | return buf.toString('base64', i, buf.length - n); | ||
6059 | } | ||
6060 | |||
6061 | function base64End(buf) { | ||
6062 | var r = buf && buf.length ? this.write(buf) : ''; | ||
6063 | if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); | ||
6064 | return r; | ||
6065 | } | ||
6066 | |||
6067 | // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) | ||
6068 | function simpleWrite(buf) { | ||
6069 | return buf.toString(this.encoding); | ||
6070 | } | ||
6071 | |||
6072 | function simpleEnd(buf) { | ||
6073 | return buf && buf.length ? this.write(buf) : ''; | ||
6074 | } | ||
6075 | },{"safe-buffer":34}],29:[function(require,module,exports){ | ||
6076 | module.exports = require('./readable').PassThrough | ||
6077 | |||
6078 | },{"./readable":30}],30:[function(require,module,exports){ | ||
6079 | exports = module.exports = require('./lib/_stream_readable.js'); | ||
6080 | exports.Stream = exports; | ||
6081 | exports.Readable = exports; | ||
6082 | exports.Writable = require('./lib/_stream_writable.js'); | ||
6083 | exports.Duplex = require('./lib/_stream_duplex.js'); | ||
6084 | exports.Transform = require('./lib/_stream_transform.js'); | ||
6085 | exports.PassThrough = require('./lib/_stream_passthrough.js'); | ||
6086 | |||
6087 | },{"./lib/_stream_duplex.js":20,"./lib/_stream_passthrough.js":21,"./lib/_stream_readable.js":22,"./lib/_stream_transform.js":23,"./lib/_stream_writable.js":24}],31:[function(require,module,exports){ | ||
6088 | module.exports = require('./readable').Transform | ||
6089 | |||
6090 | },{"./readable":30}],32:[function(require,module,exports){ | ||
6091 | module.exports = require('./lib/_stream_writable.js'); | ||
6092 | |||
6093 | },{"./lib/_stream_writable.js":24}],33:[function(require,module,exports){ | ||
6094 | 'use strict' | ||
6095 | var Buffer = require('buffer').Buffer | ||
6096 | var inherits = require('inherits') | ||
6097 | var HashBase = require('hash-base') | ||
6098 | |||
6099 | var ARRAY16 = new Array(16) | ||
6100 | |||
6101 | var zl = [ | ||
6102 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, | ||
6103 | 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, | ||
6104 | 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, | ||
6105 | 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, | ||
6106 | 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 | ||
6107 | ] | ||
6108 | |||
6109 | var zr = [ | ||
6110 | 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, | ||
6111 | 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, | ||
6112 | 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, | ||
6113 | 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, | ||
6114 | 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 | ||
6115 | ] | ||
6116 | |||
6117 | var sl = [ | ||
6118 | 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, | ||
6119 | 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, | ||
6120 | 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, | ||
6121 | 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, | ||
6122 | 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 | ||
6123 | ] | ||
6124 | |||
6125 | var sr = [ | ||
6126 | 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, | ||
6127 | 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, | ||
6128 | 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, | ||
6129 | 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, | ||
6130 | 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 | ||
6131 | ] | ||
6132 | |||
6133 | var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e] | ||
6134 | var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000] | ||
6135 | |||
6136 | function RIPEMD160 () { | ||
6137 | HashBase.call(this, 64) | ||
6138 | |||
6139 | // state | ||
6140 | this._a = 0x67452301 | ||
6141 | this._b = 0xefcdab89 | ||
6142 | this._c = 0x98badcfe | ||
6143 | this._d = 0x10325476 | ||
6144 | this._e = 0xc3d2e1f0 | ||
6145 | } | ||
6146 | |||
6147 | inherits(RIPEMD160, HashBase) | ||
6148 | |||
6149 | RIPEMD160.prototype._update = function () { | ||
6150 | var words = ARRAY16 | ||
6151 | for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4) | ||
6152 | |||
6153 | var al = this._a | 0 | ||
6154 | var bl = this._b | 0 | ||
6155 | var cl = this._c | 0 | ||
6156 | var dl = this._d | 0 | ||
6157 | var el = this._e | 0 | ||
6158 | |||
6159 | var ar = this._a | 0 | ||
6160 | var br = this._b | 0 | ||
6161 | var cr = this._c | 0 | ||
6162 | var dr = this._d | 0 | ||
6163 | var er = this._e | 0 | ||
6164 | |||
6165 | // computation | ||
6166 | for (var i = 0; i < 80; i += 1) { | ||
6167 | var tl | ||
6168 | var tr | ||
6169 | if (i < 16) { | ||
6170 | tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]) | ||
6171 | tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]) | ||
6172 | } else if (i < 32) { | ||
6173 | tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]) | ||
6174 | tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]) | ||
6175 | } else if (i < 48) { | ||
6176 | tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]) | ||
6177 | tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]) | ||
6178 | } else if (i < 64) { | ||
6179 | tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]) | ||
6180 | tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]) | ||
6181 | } else { // if (i<80) { | ||
6182 | tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]) | ||
6183 | tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]) | ||
6184 | } | ||
6185 | |||
6186 | al = el | ||
6187 | el = dl | ||
6188 | dl = rotl(cl, 10) | ||
6189 | cl = bl | ||
6190 | bl = tl | ||
6191 | |||
6192 | ar = er | ||
6193 | er = dr | ||
6194 | dr = rotl(cr, 10) | ||
6195 | cr = br | ||
6196 | br = tr | ||
6197 | } | ||
6198 | |||
6199 | // update state | ||
6200 | var t = (this._b + cl + dr) | 0 | ||
6201 | this._b = (this._c + dl + er) | 0 | ||
6202 | this._c = (this._d + el + ar) | 0 | ||
6203 | this._d = (this._e + al + br) | 0 | ||
6204 | this._e = (this._a + bl + cr) | 0 | ||
6205 | this._a = t | ||
6206 | } | ||
6207 | |||
6208 | RIPEMD160.prototype._digest = function () { | ||
6209 | // create padding and handle blocks | ||
6210 | this._block[this._blockOffset++] = 0x80 | ||
6211 | if (this._blockOffset > 56) { | ||
6212 | this._block.fill(0, this._blockOffset, 64) | ||
6213 | this._update() | ||
6214 | this._blockOffset = 0 | ||
6215 | } | ||
6216 | |||
6217 | this._block.fill(0, this._blockOffset, 56) | ||
6218 | this._block.writeUInt32LE(this._length[0], 56) | ||
6219 | this._block.writeUInt32LE(this._length[1], 60) | ||
6220 | this._update() | ||
6221 | |||
6222 | // produce result | ||
6223 | var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20) | ||
6224 | buffer.writeInt32LE(this._a, 0) | ||
6225 | buffer.writeInt32LE(this._b, 4) | ||
6226 | buffer.writeInt32LE(this._c, 8) | ||
6227 | buffer.writeInt32LE(this._d, 12) | ||
6228 | buffer.writeInt32LE(this._e, 16) | ||
6229 | return buffer | ||
6230 | } | ||
6231 | |||
6232 | function rotl (x, n) { | ||
6233 | return (x << n) | (x >>> (32 - n)) | ||
6234 | } | ||
6235 | |||
6236 | function fn1 (a, b, c, d, e, m, k, s) { | ||
6237 | return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0 | ||
6238 | } | ||
6239 | |||
6240 | function fn2 (a, b, c, d, e, m, k, s) { | ||
6241 | return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0 | ||
6242 | } | ||
6243 | |||
6244 | function fn3 (a, b, c, d, e, m, k, s) { | ||
6245 | return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0 | ||
6246 | } | ||
6247 | |||
6248 | function fn4 (a, b, c, d, e, m, k, s) { | ||
6249 | return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0 | ||
6250 | } | ||
6251 | |||
6252 | function fn5 (a, b, c, d, e, m, k, s) { | ||
6253 | return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0 | ||
6254 | } | ||
6255 | |||
6256 | module.exports = RIPEMD160 | ||
6257 | |||
6258 | },{"buffer":6,"hash-base":11,"inherits":13}],34:[function(require,module,exports){ | ||
6259 | /* eslint-disable node/no-deprecated-api */ | ||
6260 | var buffer = require('buffer') | ||
6261 | var Buffer = buffer.Buffer | ||
6262 | |||
6263 | // alternative to using Object.keys for old browsers | ||
6264 | function copyProps (src, dst) { | ||
6265 | for (var key in src) { | ||
6266 | dst[key] = src[key] | ||
6267 | } | ||
6268 | } | ||
6269 | if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { | ||
6270 | module.exports = buffer | ||
6271 | } else { | ||
6272 | // Copy properties from require('buffer') | ||
6273 | copyProps(buffer, exports) | ||
6274 | exports.Buffer = SafeBuffer | ||
6275 | } | 17 | } |
6276 | |||
6277 | function SafeBuffer (arg, encodingOrOffset, length) { | ||
6278 | return Buffer(arg, encodingOrOffset, length) | ||
6279 | } | ||
6280 | |||
6281 | // Copy static methods from Buffer | ||
6282 | copyProps(Buffer, SafeBuffer) | ||
6283 | |||
6284 | SafeBuffer.from = function (arg, encodingOrOffset, length) { | ||
6285 | if (typeof arg === 'number') { | ||
6286 | throw new TypeError('Argument must not be a number') | ||
6287 | } | ||
6288 | return Buffer(arg, encodingOrOffset, length) | ||
6289 | } | ||
6290 | |||
6291 | SafeBuffer.alloc = function (size, fill, encoding) { | ||
6292 | if (typeof size !== 'number') { | ||
6293 | throw new TypeError('Argument must be a number') | ||
6294 | } | ||
6295 | var buf = Buffer(size) | ||
6296 | if (fill !== undefined) { | ||
6297 | if (typeof encoding === 'string') { | ||
6298 | buf.fill(fill, encoding) | ||
6299 | } else { | ||
6300 | buf.fill(fill) | ||
6301 | } | ||
6302 | } else { | ||
6303 | buf.fill(0) | ||
6304 | } | ||
6305 | return buf | ||
6306 | } | ||
6307 | |||
6308 | SafeBuffer.allocUnsafe = function (size) { | ||
6309 | if (typeof size !== 'number') { | ||
6310 | throw new TypeError('Argument must be a number') | ||
6311 | } | ||
6312 | return Buffer(size) | ||
6313 | } | ||
6314 | |||
6315 | SafeBuffer.allocUnsafeSlow = function (size) { | ||
6316 | if (typeof size !== 'number') { | ||
6317 | throw new TypeError('Argument must be a number') | ||
6318 | } | ||
6319 | return buffer.SlowBuffer(size) | ||
6320 | } | ||
6321 | |||
6322 | },{"buffer":6}],35:[function(require,module,exports){ | ||
6323 | var Buffer = require('safe-buffer').Buffer | ||
6324 | |||
6325 | // prototype class for hash functions | ||
6326 | function Hash (blockSize, finalSize) { | ||
6327 | this._block = Buffer.alloc(blockSize) | ||
6328 | this._finalSize = finalSize | ||
6329 | this._blockSize = blockSize | ||
6330 | this._len = 0 | ||
6331 | } | ||
6332 | |||
6333 | Hash.prototype.update = function (data, enc) { | ||
6334 | if (typeof data === 'string') { | ||
6335 | enc = enc || 'utf8' | ||
6336 | data = Buffer.from(data, enc) | ||
6337 | } | ||
6338 | |||
6339 | var block = this._block | ||
6340 | var blockSize = this._blockSize | ||
6341 | var length = data.length | ||
6342 | var accum = this._len | ||
6343 | |||
6344 | for (var offset = 0; offset < length;) { | ||
6345 | var assigned = accum % blockSize | ||
6346 | var remainder = Math.min(length - offset, blockSize - assigned) | ||
6347 | |||
6348 | for (var i = 0; i < remainder; i++) { | ||
6349 | block[assigned + i] = data[offset + i] | ||
6350 | } | ||
6351 | |||
6352 | accum += remainder | ||
6353 | offset += remainder | ||
6354 | |||
6355 | if ((accum % blockSize) === 0) { | ||
6356 | this._update(block) | ||
6357 | } | ||
6358 | } | ||
6359 | |||
6360 | this._len += length | ||
6361 | return this | ||
6362 | } | ||
6363 | |||
6364 | Hash.prototype.digest = function (enc) { | ||
6365 | var rem = this._len % this._blockSize | ||
6366 | |||
6367 | this._block[rem] = 0x80 | ||
6368 | |||
6369 | // zero (rem + 1) trailing bits, where (rem + 1) is the smallest | ||
6370 | // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize | ||
6371 | this._block.fill(0, rem + 1) | ||
6372 | |||
6373 | if (rem >= this._finalSize) { | ||
6374 | this._update(this._block) | ||
6375 | this._block.fill(0) | ||
6376 | } | ||
6377 | |||
6378 | var bits = this._len * 8 | ||
6379 | |||
6380 | // uint32 | ||
6381 | if (bits <= 0xffffffff) { | ||
6382 | this._block.writeUInt32BE(bits, this._blockSize - 4) | ||
6383 | |||
6384 | // uint64 | ||
6385 | } else { | ||
6386 | var lowBits = (bits & 0xffffffff) >>> 0 | ||
6387 | var highBits = (bits - lowBits) / 0x100000000 | ||
6388 | |||
6389 | this._block.writeUInt32BE(highBits, this._blockSize - 8) | ||
6390 | this._block.writeUInt32BE(lowBits, this._blockSize - 4) | ||
6391 | } | ||
6392 | |||
6393 | this._update(this._block) | ||
6394 | var hash = this._hash() | ||
6395 | |||
6396 | return enc ? hash.toString(enc) : hash | ||
6397 | } | ||
6398 | |||
6399 | Hash.prototype._update = function () { | ||
6400 | throw new Error('_update must be implemented by subclass') | ||
6401 | } | ||
6402 | |||
6403 | module.exports = Hash | ||
6404 | |||
6405 | },{"safe-buffer":34}],36:[function(require,module,exports){ | ||
6406 | var exports = module.exports = function SHA (algorithm) { | ||
6407 | algorithm = algorithm.toLowerCase() | ||
6408 | |||
6409 | var Algorithm = exports[algorithm] | ||
6410 | if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') | ||
6411 | |||
6412 | return new Algorithm() | ||
6413 | } | ||
6414 | |||
6415 | exports.sha = require('./sha') | ||
6416 | exports.sha1 = require('./sha1') | ||
6417 | exports.sha224 = require('./sha224') | ||
6418 | exports.sha256 = require('./sha256') | ||
6419 | exports.sha384 = require('./sha384') | ||
6420 | exports.sha512 = require('./sha512') | ||
6421 | |||
6422 | },{"./sha":37,"./sha1":38,"./sha224":39,"./sha256":40,"./sha384":41,"./sha512":42}],37:[function(require,module,exports){ | ||
6423 | /* | ||
6424 | * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined | ||
6425 | * in FIPS PUB 180-1 | ||
6426 | * This source code is derived from sha1.js of the same repository. | ||
6427 | * The difference between SHA-0 and SHA-1 is just a bitwise rotate left | ||
6428 | * operation was added. | ||
6429 | */ | ||
6430 | |||
6431 | var inherits = require('inherits') | ||
6432 | var Hash = require('./hash') | ||
6433 | var Buffer = require('safe-buffer').Buffer | ||
6434 | |||
6435 | var K = [ | ||
6436 | 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 | ||
6437 | ] | ||
6438 | |||
6439 | var W = new Array(80) | ||
6440 | |||
6441 | function Sha () { | ||
6442 | this.init() | ||
6443 | this._w = W | ||
6444 | |||
6445 | Hash.call(this, 64, 56) | ||
6446 | } | ||
6447 | |||
6448 | inherits(Sha, Hash) | ||
6449 | |||
6450 | Sha.prototype.init = function () { | ||
6451 | this._a = 0x67452301 | ||
6452 | this._b = 0xefcdab89 | ||
6453 | this._c = 0x98badcfe | ||
6454 | this._d = 0x10325476 | ||
6455 | this._e = 0xc3d2e1f0 | ||
6456 | |||
6457 | return this | ||
6458 | } | ||
6459 | |||
6460 | function rotl5 (num) { | ||
6461 | return (num << 5) | (num >>> 27) | ||
6462 | } | ||
6463 | |||
6464 | function rotl30 (num) { | ||
6465 | return (num << 30) | (num >>> 2) | ||
6466 | } | ||
6467 | |||
6468 | function ft (s, b, c, d) { | ||
6469 | if (s === 0) return (b & c) | ((~b) & d) | ||
6470 | if (s === 2) return (b & c) | (b & d) | (c & d) | ||
6471 | return b ^ c ^ d | ||
6472 | } | ||
6473 | |||
6474 | Sha.prototype._update = function (M) { | ||
6475 | var W = this._w | ||
6476 | |||
6477 | var a = this._a | 0 | ||
6478 | var b = this._b | 0 | ||
6479 | var c = this._c | 0 | ||
6480 | var d = this._d | 0 | ||
6481 | var e = this._e | 0 | ||
6482 | |||
6483 | for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) | ||
6484 | for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16] | ||
6485 | |||
6486 | for (var j = 0; j < 80; ++j) { | ||
6487 | var s = ~~(j / 20) | ||
6488 | var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 | ||
6489 | |||
6490 | e = d | ||
6491 | d = c | ||
6492 | c = rotl30(b) | ||
6493 | b = a | ||
6494 | a = t | ||
6495 | } | ||
6496 | |||
6497 | this._a = (a + this._a) | 0 | ||
6498 | this._b = (b + this._b) | 0 | ||
6499 | this._c = (c + this._c) | 0 | ||
6500 | this._d = (d + this._d) | 0 | ||
6501 | this._e = (e + this._e) | 0 | ||
6502 | } | ||
6503 | |||
6504 | Sha.prototype._hash = function () { | ||
6505 | var H = Buffer.allocUnsafe(20) | ||
6506 | |||
6507 | H.writeInt32BE(this._a | 0, 0) | ||
6508 | H.writeInt32BE(this._b | 0, 4) | ||
6509 | H.writeInt32BE(this._c | 0, 8) | ||
6510 | H.writeInt32BE(this._d | 0, 12) | ||
6511 | H.writeInt32BE(this._e | 0, 16) | ||
6512 | |||
6513 | return H | ||
6514 | } | ||
6515 | |||
6516 | module.exports = Sha | ||
6517 | |||
6518 | },{"./hash":35,"inherits":13,"safe-buffer":34}],38:[function(require,module,exports){ | ||
6519 | /* | ||
6520 | * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined | ||
6521 | * in FIPS PUB 180-1 | ||
6522 | * Version 2.1a Copyright Paul Johnston 2000 - 2002. | ||
6523 | * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet | ||
6524 | * Distributed under the BSD License | ||
6525 | * See http://pajhome.org.uk/crypt/md5 for details. | ||
6526 | */ | ||
6527 | |||
6528 | var inherits = require('inherits') | ||
6529 | var Hash = require('./hash') | ||
6530 | var Buffer = require('safe-buffer').Buffer | ||
6531 | |||
6532 | var K = [ | ||
6533 | 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 | ||
6534 | ] | ||
6535 | |||
6536 | var W = new Array(80) | ||
6537 | |||
6538 | function Sha1 () { | ||
6539 | this.init() | ||
6540 | this._w = W | ||
6541 | |||
6542 | Hash.call(this, 64, 56) | ||
6543 | } | ||
6544 | |||
6545 | inherits(Sha1, Hash) | ||
6546 | |||
6547 | Sha1.prototype.init = function () { | ||
6548 | this._a = 0x67452301 | ||
6549 | this._b = 0xefcdab89 | ||
6550 | this._c = 0x98badcfe | ||
6551 | this._d = 0x10325476 | ||
6552 | this._e = 0xc3d2e1f0 | ||
6553 | |||
6554 | return this | ||
6555 | } | ||
6556 | |||
6557 | function rotl1 (num) { | ||
6558 | return (num << 1) | (num >>> 31) | ||
6559 | } | ||
6560 | |||
6561 | function rotl5 (num) { | ||
6562 | return (num << 5) | (num >>> 27) | ||
6563 | } | ||
6564 | |||
6565 | function rotl30 (num) { | ||
6566 | return (num << 30) | (num >>> 2) | ||
6567 | } | ||
6568 | |||
6569 | function ft (s, b, c, d) { | ||
6570 | if (s === 0) return (b & c) | ((~b) & d) | ||
6571 | if (s === 2) return (b & c) | (b & d) | (c & d) | ||
6572 | return b ^ c ^ d | ||
6573 | } | ||
6574 | |||
6575 | Sha1.prototype._update = function (M) { | ||
6576 | var W = this._w | ||
6577 | |||
6578 | var a = this._a | 0 | ||
6579 | var b = this._b | 0 | ||
6580 | var c = this._c | 0 | ||
6581 | var d = this._d | 0 | ||
6582 | var e = this._e | 0 | ||
6583 | |||
6584 | for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) | ||
6585 | for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]) | ||
6586 | |||
6587 | for (var j = 0; j < 80; ++j) { | ||
6588 | var s = ~~(j / 20) | ||
6589 | var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 | ||
6590 | |||
6591 | e = d | ||
6592 | d = c | ||
6593 | c = rotl30(b) | ||
6594 | b = a | ||
6595 | a = t | ||
6596 | } | ||
6597 | |||
6598 | this._a = (a + this._a) | 0 | ||
6599 | this._b = (b + this._b) | 0 | ||
6600 | this._c = (c + this._c) | 0 | ||
6601 | this._d = (d + this._d) | 0 | ||
6602 | this._e = (e + this._e) | 0 | ||
6603 | } | ||
6604 | |||
6605 | Sha1.prototype._hash = function () { | ||
6606 | var H = Buffer.allocUnsafe(20) | ||
6607 | |||
6608 | H.writeInt32BE(this._a | 0, 0) | ||
6609 | H.writeInt32BE(this._b | 0, 4) | ||
6610 | H.writeInt32BE(this._c | 0, 8) | ||
6611 | H.writeInt32BE(this._d | 0, 12) | ||
6612 | H.writeInt32BE(this._e | 0, 16) | ||
6613 | |||
6614 | return H | ||
6615 | } | ||
6616 | |||
6617 | module.exports = Sha1 | ||
6618 | |||
6619 | },{"./hash":35,"inherits":13,"safe-buffer":34}],39:[function(require,module,exports){ | ||
6620 | /** | ||
6621 | * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined | ||
6622 | * in FIPS 180-2 | ||
6623 | * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. | ||
6624 | * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet | ||
6625 | * | ||
6626 | */ | ||
6627 | |||
6628 | var inherits = require('inherits') | ||
6629 | var Sha256 = require('./sha256') | ||
6630 | var Hash = require('./hash') | ||
6631 | var Buffer = require('safe-buffer').Buffer | ||
6632 | |||
6633 | var W = new Array(64) | ||
6634 | |||
6635 | function Sha224 () { | ||
6636 | this.init() | ||
6637 | |||
6638 | this._w = W // new Array(64) | ||
6639 | |||
6640 | Hash.call(this, 64, 56) | ||
6641 | } | ||
6642 | |||
6643 | inherits(Sha224, Sha256) | ||
6644 | |||
6645 | Sha224.prototype.init = function () { | ||
6646 | this._a = 0xc1059ed8 | ||
6647 | this._b = 0x367cd507 | ||
6648 | this._c = 0x3070dd17 | ||
6649 | this._d = 0xf70e5939 | ||
6650 | this._e = 0xffc00b31 | ||
6651 | this._f = 0x68581511 | ||
6652 | this._g = 0x64f98fa7 | ||
6653 | this._h = 0xbefa4fa4 | ||
6654 | |||
6655 | return this | ||
6656 | } | ||
6657 | |||
6658 | Sha224.prototype._hash = function () { | ||
6659 | var H = Buffer.allocUnsafe(28) | ||
6660 | |||
6661 | H.writeInt32BE(this._a, 0) | ||
6662 | H.writeInt32BE(this._b, 4) | ||
6663 | H.writeInt32BE(this._c, 8) | ||
6664 | H.writeInt32BE(this._d, 12) | ||
6665 | H.writeInt32BE(this._e, 16) | ||
6666 | H.writeInt32BE(this._f, 20) | ||
6667 | H.writeInt32BE(this._g, 24) | ||
6668 | |||
6669 | return H | ||
6670 | } | ||
6671 | |||
6672 | module.exports = Sha224 | ||
6673 | |||
6674 | },{"./hash":35,"./sha256":40,"inherits":13,"safe-buffer":34}],40:[function(require,module,exports){ | ||
6675 | /** | ||
6676 | * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined | ||
6677 | * in FIPS 180-2 | ||
6678 | * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. | ||
6679 | * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet | ||
6680 | * | ||
6681 | */ | ||
6682 | |||
6683 | var inherits = require('inherits') | ||
6684 | var Hash = require('./hash') | ||
6685 | var Buffer = require('safe-buffer').Buffer | ||
6686 | |||
6687 | var K = [ | ||
6688 | 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, | ||
6689 | 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, | ||
6690 | 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, | ||
6691 | 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, | ||
6692 | 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, | ||
6693 | 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, | ||
6694 | 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, | ||
6695 | 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, | ||
6696 | 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, | ||
6697 | 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, | ||
6698 | 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, | ||
6699 | 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, | ||
6700 | 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, | ||
6701 | 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, | ||
6702 | 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, | ||
6703 | 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 | ||
6704 | ] | ||
6705 | |||
6706 | var W = new Array(64) | ||
6707 | |||
6708 | function Sha256 () { | ||
6709 | this.init() | ||
6710 | |||
6711 | this._w = W // new Array(64) | ||
6712 | |||
6713 | Hash.call(this, 64, 56) | ||
6714 | } | ||
6715 | |||
6716 | inherits(Sha256, Hash) | ||
6717 | |||
6718 | Sha256.prototype.init = function () { | ||
6719 | this._a = 0x6a09e667 | ||
6720 | this._b = 0xbb67ae85 | ||
6721 | this._c = 0x3c6ef372 | ||
6722 | this._d = 0xa54ff53a | ||
6723 | this._e = 0x510e527f | ||
6724 | this._f = 0x9b05688c | ||
6725 | this._g = 0x1f83d9ab | ||
6726 | this._h = 0x5be0cd19 | ||
6727 | |||
6728 | return this | ||
6729 | } | ||
6730 | |||
6731 | function ch (x, y, z) { | ||
6732 | return z ^ (x & (y ^ z)) | ||
6733 | } | ||
6734 | |||
6735 | function maj (x, y, z) { | ||
6736 | return (x & y) | (z & (x | y)) | ||
6737 | } | ||
6738 | |||
6739 | function sigma0 (x) { | ||
6740 | return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) | ||
6741 | } | ||
6742 | |||
6743 | function sigma1 (x) { | ||
6744 | return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) | ||
6745 | } | ||
6746 | |||
6747 | function gamma0 (x) { | ||
6748 | return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) | ||
6749 | } | ||
6750 | |||
6751 | function gamma1 (x) { | ||
6752 | return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) | ||
6753 | } | ||
6754 | |||
6755 | Sha256.prototype._update = function (M) { | ||
6756 | var W = this._w | ||
6757 | |||
6758 | var a = this._a | 0 | ||
6759 | var b = this._b | 0 | ||
6760 | var c = this._c | 0 | ||
6761 | var d = this._d | 0 | ||
6762 | var e = this._e | 0 | ||
6763 | var f = this._f | 0 | ||
6764 | var g = this._g | 0 | ||
6765 | var h = this._h | 0 | ||
6766 | |||
6767 | for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) | ||
6768 | for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0 | ||
6769 | |||
6770 | for (var j = 0; j < 64; ++j) { | ||
6771 | var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0 | ||
6772 | var T2 = (sigma0(a) + maj(a, b, c)) | 0 | ||
6773 | |||
6774 | h = g | ||
6775 | g = f | ||
6776 | f = e | ||
6777 | e = (d + T1) | 0 | ||
6778 | d = c | ||
6779 | c = b | ||
6780 | b = a | ||
6781 | a = (T1 + T2) | 0 | ||
6782 | } | ||
6783 | |||
6784 | this._a = (a + this._a) | 0 | ||
6785 | this._b = (b + this._b) | 0 | ||
6786 | this._c = (c + this._c) | 0 | ||
6787 | this._d = (d + this._d) | 0 | ||
6788 | this._e = (e + this._e) | 0 | ||
6789 | this._f = (f + this._f) | 0 | ||
6790 | this._g = (g + this._g) | 0 | ||
6791 | this._h = (h + this._h) | 0 | ||
6792 | } | ||
6793 | |||
6794 | Sha256.prototype._hash = function () { | ||
6795 | var H = Buffer.allocUnsafe(32) | ||
6796 | |||
6797 | H.writeInt32BE(this._a, 0) | ||
6798 | H.writeInt32BE(this._b, 4) | ||
6799 | H.writeInt32BE(this._c, 8) | ||
6800 | H.writeInt32BE(this._d, 12) | ||
6801 | H.writeInt32BE(this._e, 16) | ||
6802 | H.writeInt32BE(this._f, 20) | ||
6803 | H.writeInt32BE(this._g, 24) | ||
6804 | H.writeInt32BE(this._h, 28) | ||
6805 | |||
6806 | return H | ||
6807 | } | ||
6808 | |||
6809 | module.exports = Sha256 | ||
6810 | |||
6811 | },{"./hash":35,"inherits":13,"safe-buffer":34}],41:[function(require,module,exports){ | ||
6812 | var inherits = require('inherits') | ||
6813 | var SHA512 = require('./sha512') | ||
6814 | var Hash = require('./hash') | ||
6815 | var Buffer = require('safe-buffer').Buffer | ||
6816 | |||
6817 | var W = new Array(160) | ||
6818 | |||
6819 | function Sha384 () { | ||
6820 | this.init() | ||
6821 | this._w = W | ||
6822 | |||
6823 | Hash.call(this, 128, 112) | ||
6824 | } | ||
6825 | |||
6826 | inherits(Sha384, SHA512) | ||
6827 | |||
6828 | Sha384.prototype.init = function () { | ||
6829 | this._ah = 0xcbbb9d5d | ||
6830 | this._bh = 0x629a292a | ||
6831 | this._ch = 0x9159015a | ||
6832 | this._dh = 0x152fecd8 | ||
6833 | this._eh = 0x67332667 | ||
6834 | this._fh = 0x8eb44a87 | ||
6835 | this._gh = 0xdb0c2e0d | ||
6836 | this._hh = 0x47b5481d | ||
6837 | |||
6838 | this._al = 0xc1059ed8 | ||
6839 | this._bl = 0x367cd507 | ||
6840 | this._cl = 0x3070dd17 | ||
6841 | this._dl = 0xf70e5939 | ||
6842 | this._el = 0xffc00b31 | ||
6843 | this._fl = 0x68581511 | ||
6844 | this._gl = 0x64f98fa7 | ||
6845 | this._hl = 0xbefa4fa4 | ||
6846 | |||
6847 | return this | ||
6848 | } | ||
6849 | |||
6850 | Sha384.prototype._hash = function () { | ||
6851 | var H = Buffer.allocUnsafe(48) | ||
6852 | |||
6853 | function writeInt64BE (h, l, offset) { | ||
6854 | H.writeInt32BE(h, offset) | ||
6855 | H.writeInt32BE(l, offset + 4) | ||
6856 | } | ||
6857 | |||
6858 | writeInt64BE(this._ah, this._al, 0) | ||
6859 | writeInt64BE(this._bh, this._bl, 8) | ||
6860 | writeInt64BE(this._ch, this._cl, 16) | ||
6861 | writeInt64BE(this._dh, this._dl, 24) | ||
6862 | writeInt64BE(this._eh, this._el, 32) | ||
6863 | writeInt64BE(this._fh, this._fl, 40) | ||
6864 | |||
6865 | return H | ||
6866 | } | ||
6867 | |||
6868 | module.exports = Sha384 | ||
6869 | |||
6870 | },{"./hash":35,"./sha512":42,"inherits":13,"safe-buffer":34}],42:[function(require,module,exports){ | ||
6871 | var inherits = require('inherits') | ||
6872 | var Hash = require('./hash') | ||
6873 | var Buffer = require('safe-buffer').Buffer | ||
6874 | |||
6875 | var K = [ | ||
6876 | 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, | ||
6877 | 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, | ||
6878 | 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, | ||
6879 | 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, | ||
6880 | 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, | ||
6881 | 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, | ||
6882 | 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, | ||
6883 | 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, | ||
6884 | 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, | ||
6885 | 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, | ||
6886 | 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, | ||
6887 | 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, | ||
6888 | 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, | ||
6889 | 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, | ||
6890 | 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, | ||
6891 | 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, | ||
6892 | 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, | ||
6893 | 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, | ||
6894 | 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, | ||
6895 | 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, | ||
6896 | 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, | ||
6897 | 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, | ||
6898 | 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, | ||
6899 | 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, | ||
6900 | 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, | ||
6901 | 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, | ||
6902 | 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, | ||
6903 | 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, | ||
6904 | 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, | ||
6905 | 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, | ||
6906 | 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, | ||
6907 | 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, | ||
6908 | 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, | ||
6909 | 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, | ||
6910 | 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, | ||
6911 | 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, | ||
6912 | 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, | ||
6913 | 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, | ||
6914 | 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, | ||
6915 | 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 | ||
6916 | ] | ||
6917 | |||
6918 | var W = new Array(160) | ||
6919 | |||
6920 | function Sha512 () { | ||
6921 | this.init() | ||
6922 | this._w = W | ||
6923 | |||
6924 | Hash.call(this, 128, 112) | ||
6925 | } | ||
6926 | |||
6927 | inherits(Sha512, Hash) | ||
6928 | |||
6929 | Sha512.prototype.init = function () { | ||
6930 | this._ah = 0x6a09e667 | ||
6931 | this._bh = 0xbb67ae85 | ||
6932 | this._ch = 0x3c6ef372 | ||
6933 | this._dh = 0xa54ff53a | ||
6934 | this._eh = 0x510e527f | ||
6935 | this._fh = 0x9b05688c | ||
6936 | this._gh = 0x1f83d9ab | ||
6937 | this._hh = 0x5be0cd19 | ||
6938 | |||
6939 | this._al = 0xf3bcc908 | ||
6940 | this._bl = 0x84caa73b | ||
6941 | this._cl = 0xfe94f82b | ||
6942 | this._dl = 0x5f1d36f1 | ||
6943 | this._el = 0xade682d1 | ||
6944 | this._fl = 0x2b3e6c1f | ||
6945 | this._gl = 0xfb41bd6b | ||
6946 | this._hl = 0x137e2179 | ||
6947 | |||
6948 | return this | ||
6949 | } | ||
6950 | |||
6951 | function Ch (x, y, z) { | ||
6952 | return z ^ (x & (y ^ z)) | ||
6953 | } | ||
6954 | |||
6955 | function maj (x, y, z) { | ||
6956 | return (x & y) | (z & (x | y)) | ||
6957 | } | ||
6958 | |||
6959 | function sigma0 (x, xl) { | ||
6960 | return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) | ||
6961 | } | ||
6962 | |||
6963 | function sigma1 (x, xl) { | ||
6964 | return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) | ||
6965 | } | ||
6966 | |||
6967 | function Gamma0 (x, xl) { | ||
6968 | return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) | ||
6969 | } | ||
6970 | |||
6971 | function Gamma0l (x, xl) { | ||
6972 | return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) | ||
6973 | } | ||
6974 | |||
6975 | function Gamma1 (x, xl) { | ||
6976 | return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) | ||
6977 | } | ||
6978 | |||
6979 | function Gamma1l (x, xl) { | ||
6980 | return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) | ||
6981 | } | ||
6982 | |||
6983 | function getCarry (a, b) { | ||
6984 | return (a >>> 0) < (b >>> 0) ? 1 : 0 | ||
6985 | } | ||
6986 | |||
6987 | Sha512.prototype._update = function (M) { | ||
6988 | var W = this._w | ||
6989 | |||
6990 | var ah = this._ah | 0 | ||
6991 | var bh = this._bh | 0 | ||
6992 | var ch = this._ch | 0 | ||
6993 | var dh = this._dh | 0 | ||
6994 | var eh = this._eh | 0 | ||
6995 | var fh = this._fh | 0 | ||
6996 | var gh = this._gh | 0 | ||
6997 | var hh = this._hh | 0 | ||
6998 | |||
6999 | var al = this._al | 0 | ||
7000 | var bl = this._bl | 0 | ||
7001 | var cl = this._cl | 0 | ||
7002 | var dl = this._dl | 0 | ||
7003 | var el = this._el | 0 | ||
7004 | var fl = this._fl | 0 | ||
7005 | var gl = this._gl | 0 | ||
7006 | var hl = this._hl | 0 | ||
7007 | |||
7008 | for (var i = 0; i < 32; i += 2) { | ||
7009 | W[i] = M.readInt32BE(i * 4) | ||
7010 | W[i + 1] = M.readInt32BE(i * 4 + 4) | ||
7011 | } | ||
7012 | for (; i < 160; i += 2) { | ||
7013 | var xh = W[i - 15 * 2] | ||
7014 | var xl = W[i - 15 * 2 + 1] | ||
7015 | var gamma0 = Gamma0(xh, xl) | ||
7016 | var gamma0l = Gamma0l(xl, xh) | ||
7017 | |||
7018 | xh = W[i - 2 * 2] | ||
7019 | xl = W[i - 2 * 2 + 1] | ||
7020 | var gamma1 = Gamma1(xh, xl) | ||
7021 | var gamma1l = Gamma1l(xl, xh) | ||
7022 | |||
7023 | // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] | ||
7024 | var Wi7h = W[i - 7 * 2] | ||
7025 | var Wi7l = W[i - 7 * 2 + 1] | ||
7026 | |||
7027 | var Wi16h = W[i - 16 * 2] | ||
7028 | var Wi16l = W[i - 16 * 2 + 1] | ||
7029 | |||
7030 | var Wil = (gamma0l + Wi7l) | 0 | ||
7031 | var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0 | ||
7032 | Wil = (Wil + gamma1l) | 0 | ||
7033 | Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0 | ||
7034 | Wil = (Wil + Wi16l) | 0 | ||
7035 | Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0 | ||
7036 | |||
7037 | W[i] = Wih | ||
7038 | W[i + 1] = Wil | ||
7039 | } | ||
7040 | |||
7041 | for (var j = 0; j < 160; j += 2) { | ||
7042 | Wih = W[j] | ||
7043 | Wil = W[j + 1] | ||
7044 | |||
7045 | var majh = maj(ah, bh, ch) | ||
7046 | var majl = maj(al, bl, cl) | ||
7047 | |||
7048 | var sigma0h = sigma0(ah, al) | ||
7049 | var sigma0l = sigma0(al, ah) | ||
7050 | var sigma1h = sigma1(eh, el) | ||
7051 | var sigma1l = sigma1(el, eh) | ||
7052 | |||
7053 | // t1 = h + sigma1 + ch + K[j] + W[j] | ||
7054 | var Kih = K[j] | ||
7055 | var Kil = K[j + 1] | ||
7056 | |||
7057 | var chh = Ch(eh, fh, gh) | ||
7058 | var chl = Ch(el, fl, gl) | ||
7059 | |||
7060 | var t1l = (hl + sigma1l) | 0 | ||
7061 | var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0 | ||
7062 | t1l = (t1l + chl) | 0 | ||
7063 | t1h = (t1h + chh + getCarry(t1l, chl)) | 0 | ||
7064 | t1l = (t1l + Kil) | 0 | ||
7065 | t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0 | ||
7066 | t1l = (t1l + Wil) | 0 | ||
7067 | t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0 | ||
7068 | |||
7069 | // t2 = sigma0 + maj | ||
7070 | var t2l = (sigma0l + majl) | 0 | ||
7071 | var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0 | ||
7072 | |||
7073 | hh = gh | ||
7074 | hl = gl | ||
7075 | gh = fh | ||
7076 | gl = fl | ||
7077 | fh = eh | ||
7078 | fl = el | ||
7079 | el = (dl + t1l) | 0 | ||
7080 | eh = (dh + t1h + getCarry(el, dl)) | 0 | ||
7081 | dh = ch | ||
7082 | dl = cl | ||
7083 | ch = bh | ||
7084 | cl = bl | ||
7085 | bh = ah | ||
7086 | bl = al | ||
7087 | al = (t1l + t2l) | 0 | ||
7088 | ah = (t1h + t2h + getCarry(al, t1l)) | 0 | ||
7089 | } | ||
7090 | |||
7091 | this._al = (this._al + al) | 0 | ||
7092 | this._bl = (this._bl + bl) | 0 | ||
7093 | this._cl = (this._cl + cl) | 0 | ||
7094 | this._dl = (this._dl + dl) | 0 | ||
7095 | this._el = (this._el + el) | 0 | ||
7096 | this._fl = (this._fl + fl) | 0 | ||
7097 | this._gl = (this._gl + gl) | 0 | ||
7098 | this._hl = (this._hl + hl) | 0 | ||
7099 | |||
7100 | this._ah = (this._ah + ah + getCarry(this._al, al)) | 0 | ||
7101 | this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0 | ||
7102 | this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0 | ||
7103 | this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0 | ||
7104 | this._eh = (this._eh + eh + getCarry(this._el, el)) | 0 | ||
7105 | this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0 | ||
7106 | this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0 | ||
7107 | this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0 | ||
7108 | } | ||
7109 | |||
7110 | Sha512.prototype._hash = function () { | ||
7111 | var H = Buffer.allocUnsafe(64) | ||
7112 | |||
7113 | function writeInt64BE (h, l, offset) { | ||
7114 | H.writeInt32BE(h, offset) | ||
7115 | H.writeInt32BE(l, offset + 4) | ||
7116 | } | ||
7117 | |||
7118 | writeInt64BE(this._ah, this._al, 0) | ||
7119 | writeInt64BE(this._bh, this._bl, 8) | ||
7120 | writeInt64BE(this._ch, this._cl, 16) | ||
7121 | writeInt64BE(this._dh, this._dl, 24) | ||
7122 | writeInt64BE(this._eh, this._el, 32) | ||
7123 | writeInt64BE(this._fh, this._fl, 40) | ||
7124 | writeInt64BE(this._gh, this._gl, 48) | ||
7125 | writeInt64BE(this._hh, this._hl, 56) | ||
7126 | |||
7127 | return H | ||
7128 | } | ||
7129 | |||
7130 | module.exports = Sha512 | ||
7131 | |||
7132 | },{"./hash":35,"inherits":13,"safe-buffer":34}],43:[function(require,module,exports){ | ||
7133 | // Copyright Joyent, Inc. and other Node contributors. | ||
7134 | // | ||
7135 | // Permission is hereby granted, free of charge, to any person obtaining a | ||
7136 | // copy of this software and associated documentation files (the | ||
7137 | // "Software"), to deal in the Software without restriction, including | ||
7138 | // without limitation the rights to use, copy, modify, merge, publish, | ||
7139 | // distribute, sublicense, and/or sell copies of the Software, and to permit | ||
7140 | // persons to whom the Software is furnished to do so, subject to the | ||
7141 | // following conditions: | ||
7142 | // | ||
7143 | // The above copyright notice and this permission notice shall be included | ||
7144 | // in all copies or substantial portions of the Software. | ||
7145 | // | ||
7146 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
7147 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
7148 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||
7149 | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
7150 | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
7151 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
7152 | // USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
7153 | |||
7154 | module.exports = Stream; | ||
7155 | |||
7156 | var EE = require('events').EventEmitter; | ||
7157 | var inherits = require('inherits'); | ||
7158 | |||
7159 | inherits(Stream, EE); | ||
7160 | Stream.Readable = require('readable-stream/readable.js'); | ||
7161 | Stream.Writable = require('readable-stream/writable.js'); | ||
7162 | Stream.Duplex = require('readable-stream/duplex.js'); | ||
7163 | Stream.Transform = require('readable-stream/transform.js'); | ||
7164 | Stream.PassThrough = require('readable-stream/passthrough.js'); | ||
7165 | |||
7166 | // Backwards-compat with node 0.4.x | ||
7167 | Stream.Stream = Stream; | ||
7168 | |||
7169 | |||
7170 | |||
7171 | // old-style streams. Note that the pipe method (the only relevant | ||
7172 | // part of this class) is overridden in the Readable class. | ||
7173 | |||
7174 | function Stream() { | ||
7175 | EE.call(this); | ||
7176 | } | ||
7177 | |||
7178 | Stream.prototype.pipe = function(dest, options) { | ||
7179 | var source = this; | ||
7180 | |||
7181 | function ondata(chunk) { | ||
7182 | if (dest.writable) { | ||
7183 | if (false === dest.write(chunk) && source.pause) { | ||
7184 | source.pause(); | ||
7185 | } | ||
7186 | } | ||
7187 | } | ||
7188 | |||
7189 | source.on('data', ondata); | ||
7190 | |||
7191 | function ondrain() { | ||
7192 | if (source.readable && source.resume) { | ||
7193 | source.resume(); | ||
7194 | } | ||
7195 | } | ||
7196 | |||
7197 | dest.on('drain', ondrain); | ||
7198 | |||
7199 | // If the 'end' option is not supplied, dest.end() will be called when | ||
7200 | // source gets the 'end' or 'close' events. Only dest.end() once. | ||
7201 | if (!dest._isStdio && (!options || options.end !== false)) { | ||
7202 | source.on('end', onend); | ||
7203 | source.on('close', onclose); | ||
7204 | } | ||
7205 | |||
7206 | var didOnEnd = false; | ||
7207 | function onend() { | ||
7208 | if (didOnEnd) return; | ||
7209 | didOnEnd = true; | ||
7210 | |||
7211 | dest.end(); | ||
7212 | } | ||
7213 | |||
7214 | |||
7215 | function onclose() { | ||
7216 | if (didOnEnd) return; | ||
7217 | didOnEnd = true; | ||
7218 | |||
7219 | if (typeof dest.destroy === 'function') dest.destroy(); | ||
7220 | } | ||
7221 | |||
7222 | // don't leave dangling pipes when there are errors. | ||
7223 | function onerror(er) { | ||
7224 | cleanup(); | ||
7225 | if (EE.listenerCount(this, 'error') === 0) { | ||
7226 | throw er; // Unhandled stream error in pipe. | ||
7227 | } | ||
7228 | } | ||
7229 | |||
7230 | source.on('error', onerror); | ||
7231 | dest.on('error', onerror); | ||
7232 | |||
7233 | // remove all the event listeners that were added. | ||
7234 | function cleanup() { | ||
7235 | source.removeListener('data', ondata); | ||
7236 | dest.removeListener('drain', ondrain); | ||
7237 | |||
7238 | source.removeListener('end', onend); | ||
7239 | source.removeListener('close', onclose); | ||
7240 | |||
7241 | source.removeListener('error', onerror); | ||
7242 | dest.removeListener('error', onerror); | ||
7243 | |||
7244 | source.removeListener('end', cleanup); | ||
7245 | source.removeListener('close', cleanup); | ||
7246 | |||
7247 | dest.removeListener('close', cleanup); | ||
7248 | } | ||
7249 | |||
7250 | source.on('end', cleanup); | ||
7251 | source.on('close', cleanup); | ||
7252 | |||
7253 | dest.on('close', cleanup); | ||
7254 | |||
7255 | dest.emit('pipe', source); | ||
7256 | |||
7257 | // Allow for unix-like usage: A.pipe(B).pipe(C) | ||
7258 | return dest; | ||
7259 | }; | ||
7260 | |||
7261 | },{"events":10,"inherits":13,"readable-stream/duplex.js":19,"readable-stream/passthrough.js":29,"readable-stream/readable.js":30,"readable-stream/transform.js":31,"readable-stream/writable.js":32}],44:[function(require,module,exports){ | ||
7262 | arguments[4][28][0].apply(exports,arguments) | ||
7263 | },{"dup":28,"safe-buffer":34}],45:[function(require,module,exports){ | ||
7264 | (function (setImmediate,clearImmediate){ | ||
7265 | var nextTick = require('process/browser.js').nextTick; | ||
7266 | var apply = Function.prototype.apply; | ||
7267 | var slice = Array.prototype.slice; | ||
7268 | var immediateIds = {}; | ||
7269 | var nextImmediateId = 0; | ||
7270 | |||
7271 | // DOM APIs, for completeness | ||
7272 | |||
7273 | exports.setTimeout = function() { | ||
7274 | return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); | ||
7275 | }; | ||
7276 | exports.setInterval = function() { | ||
7277 | return new Timeout(apply.call(setInterval, window, arguments), clearInterval); | ||
7278 | }; | ||
7279 | exports.clearTimeout = | ||
7280 | exports.clearInterval = function(timeout) { timeout.close(); }; | ||
7281 | |||
7282 | function Timeout(id, clearFn) { | ||
7283 | this._id = id; | ||
7284 | this._clearFn = clearFn; | ||
7285 | } | ||
7286 | Timeout.prototype.unref = Timeout.prototype.ref = function() {}; | ||
7287 | Timeout.prototype.close = function() { | ||
7288 | this._clearFn.call(window, this._id); | ||
7289 | }; | ||
7290 | |||
7291 | // Does not start the time, just sets up the members needed. | ||
7292 | exports.enroll = function(item, msecs) { | ||
7293 | clearTimeout(item._idleTimeoutId); | ||
7294 | item._idleTimeout = msecs; | ||
7295 | }; | ||
7296 | |||
7297 | exports.unenroll = function(item) { | ||
7298 | clearTimeout(item._idleTimeoutId); | ||
7299 | item._idleTimeout = -1; | ||
7300 | }; | ||
7301 | |||
7302 | exports._unrefActive = exports.active = function(item) { | ||
7303 | clearTimeout(item._idleTimeoutId); | ||
7304 | |||
7305 | var msecs = item._idleTimeout; | ||
7306 | if (msecs >= 0) { | ||
7307 | item._idleTimeoutId = setTimeout(function onTimeout() { | ||
7308 | if (item._onTimeout) | ||
7309 | item._onTimeout(); | ||
7310 | }, msecs); | ||
7311 | } | ||
7312 | }; | ||
7313 | |||
7314 | // That's not how node.js implements it but the exposed api is the same. | ||
7315 | exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { | ||
7316 | var id = nextImmediateId++; | ||
7317 | var args = arguments.length < 2 ? false : slice.call(arguments, 1); | ||
7318 | |||
7319 | immediateIds[id] = true; | ||
7320 | |||
7321 | nextTick(function onNextTick() { | ||
7322 | if (immediateIds[id]) { | ||
7323 | // fn.call() is faster so we optimize for the common use-case | ||
7324 | // @see http://jsperf.com/call-apply-segu | ||
7325 | if (args) { | ||
7326 | fn.apply(null, args); | ||
7327 | } else { | ||
7328 | fn.call(null); | ||
7329 | } | ||
7330 | // Prevent ids from leaking | ||
7331 | exports.clearImmediate(id); | ||
7332 | } | ||
7333 | }); | ||
7334 | |||
7335 | return id; | ||
7336 | }; | ||
7337 | |||
7338 | exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { | ||
7339 | delete immediateIds[id]; | ||
7340 | }; | ||
7341 | }).call(this,require("timers").setImmediate,require("timers").clearImmediate) | ||
7342 | },{"process/browser.js":18,"timers":45}],46:[function(require,module,exports){ | ||
7343 | (function (global){ | ||
7344 | |||
7345 | /** | ||
7346 | * Module exports. | ||
7347 | */ | ||
7348 | |||
7349 | module.exports = deprecate; | ||
7350 | |||
7351 | /** | ||
7352 | * Mark that a method should not be used. | ||
7353 | * Returns a modified function which warns once by default. | ||
7354 | * | ||
7355 | * If `localStorage.noDeprecation = true` is set, then it is a no-op. | ||
7356 | * | ||
7357 | * If `localStorage.throwDeprecation = true` is set, then deprecated functions | ||
7358 | * will throw an Error when invoked. | ||
7359 | * | ||
7360 | * If `localStorage.traceDeprecation = true` is set, then deprecated functions | ||
7361 | * will invoke `console.trace()` instead of `console.error()`. | ||
7362 | * | ||
7363 | * @param {Function} fn - the function to deprecate | ||
7364 | * @param {String} msg - the string to print to the console when `fn` is invoked | ||
7365 | * @returns {Function} a new "deprecated" version of `fn` | ||
7366 | * @api public | ||
7367 | */ | ||
7368 | |||
7369 | function deprecate (fn, msg) { | ||
7370 | if (config('noDeprecation')) { | ||
7371 | return fn; | ||
7372 | } | ||
7373 | |||
7374 | var warned = false; | ||
7375 | function deprecated() { | ||
7376 | if (!warned) { | ||
7377 | if (config('throwDeprecation')) { | ||
7378 | throw new Error(msg); | ||
7379 | } else if (config('traceDeprecation')) { | ||
7380 | console.trace(msg); | ||
7381 | } else { | ||
7382 | console.warn(msg); | ||
7383 | } | ||
7384 | warned = true; | ||
7385 | } | ||
7386 | return fn.apply(this, arguments); | ||
7387 | } | ||
7388 | |||
7389 | return deprecated; | ||
7390 | } | ||
7391 | |||
7392 | /** | ||
7393 | * Checks `localStorage` for boolean values for the given `name`. | ||
7394 | * | ||
7395 | * @param {String} name | ||
7396 | * @returns {Boolean} | ||
7397 | * @api private | ||
7398 | */ | ||
7399 | |||
7400 | function config (name) { | ||
7401 | // accessing global.localStorage can trigger a DOMException in sandboxed iframes | ||
7402 | try { | ||
7403 | if (!global.localStorage) return false; | ||
7404 | } catch (_) { | ||
7405 | return false; | ||
7406 | } | ||
7407 | var val = global.localStorage[name]; | ||
7408 | if (null == val) return false; | ||
7409 | return String(val).toLowerCase() === 'true'; | ||
7410 | } | ||
7411 | |||
7412 | }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
7413 | },{}]},{},[1])(1) | ||
7414 | }); | ||
diff --git a/src/js/index.js b/src/js/index.js index a00aa66..cb60941 100644 --- a/src/js/index.js +++ b/src/js/index.js | |||
@@ -1139,6 +1139,17 @@ | |||
1139 | privkey = libs.ethUtil.bufferToHex(keyPair.d.toBuffer()); | 1139 | privkey = libs.ethUtil.bufferToHex(keyPair.d.toBuffer()); |
1140 | } | 1140 | } |
1141 | } | 1141 | } |
1142 | //TRX is different | ||
1143 | if (networks[DOM.network.val()].name == "TRX - Tron") { | ||
1144 | keyPair = new libs.bitcoin.ECPair(keyPair.d, null, { network: network, compressed: false }); | ||
1145 | var pubkeyBuffer = keyPair.getPublicKeyBuffer(); | ||
1146 | var ethPubkey = libs.ethUtil.importPublic(pubkeyBuffer); | ||
1147 | var addressBuffer = libs.ethUtil.publicToAddress(ethPubkey); | ||
1148 | address = libs.bitcoin.address.toBase58Check(addressBuffer, 0x41); | ||
1149 | if (hasPrivkey) { | ||
1150 | privkey = keyPair.d.toBuffer().toString('hex'); | ||
1151 | } | ||
1152 | } | ||
1142 | 1153 | ||
1143 | // RSK values are different | 1154 | // RSK values are different |
1144 | if (networkIsRsk()) { | 1155 | if (networkIsRsk()) { |
@@ -1275,8 +1286,8 @@ | |||
1275 | 1286 | ||
1276 | if (networks[DOM.network.val()].name == "EOS - EOSIO") { | 1287 | if (networks[DOM.network.val()].name == "EOS - EOSIO") { |
1277 | address = "" | 1288 | address = "" |
1278 | pubkey = eosUtil.bufferToPublic(keyPair.getPublicKeyBuffer()); | 1289 | pubkey = EOSbufferToPublic(keyPair.getPublicKeyBuffer()); |
1279 | privkey = eosUtil.bufferToPrivate(keyPair.d.toBuffer(32)); | 1290 | privkey = EOSbufferToPrivate(keyPair.d.toBuffer(32)); |
1280 | } | 1291 | } |
1281 | 1292 | ||
1282 | if (networks[DOM.network.val()].name == "FIO - Foundation for Interwallet Operability") { | 1293 | if (networks[DOM.network.val()].name == "FIO - Foundation for Interwallet Operability") { |
@@ -1735,7 +1746,7 @@ | |||
1735 | var numberOfBits = entropy.binaryStr.length; | 1746 | var numberOfBits = entropy.binaryStr.length; |
1736 | var timeToCrack = "unknown"; | 1747 | var timeToCrack = "unknown"; |
1737 | try { | 1748 | try { |
1738 | var z = libs.zxcvbn(entropy.base.parts.join("")); | 1749 | var z = libs.zxcvbn(entropy.base.events.join("")); |
1739 | timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second; | 1750 | timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second; |
1740 | if (z.feedback.warning != "") { | 1751 | if (z.feedback.warning != "") { |
1741 | timeToCrack = timeToCrack + " - " + z.feedback.warning; | 1752 | timeToCrack = timeToCrack + " - " + z.feedback.warning; |
@@ -1754,7 +1765,7 @@ | |||
1754 | DOM.entropyFiltered.html(entropy.cleanHtml); | 1765 | DOM.entropyFiltered.html(entropy.cleanHtml); |
1755 | DOM.entropyType.text(entropyTypeStr); | 1766 | DOM.entropyType.text(entropyTypeStr); |
1756 | DOM.entropyCrackTime.text(timeToCrack); | 1767 | DOM.entropyCrackTime.text(timeToCrack); |
1757 | DOM.entropyEventCount.text(entropy.base.ints.length); | 1768 | DOM.entropyEventCount.text(entropy.base.events.length); |
1758 | DOM.entropyBits.text(numberOfBits); | 1769 | DOM.entropyBits.text(numberOfBits); |
1759 | DOM.entropyWordCount.text(wordCount); | 1770 | DOM.entropyWordCount.text(wordCount); |
1760 | DOM.entropyBinary.text(spacedBinaryStr); | 1771 | DOM.entropyBinary.text(spacedBinaryStr); |
@@ -1779,8 +1790,8 @@ | |||
1779 | // Detect duplicates | 1790 | // Detect duplicates |
1780 | var dupes = []; | 1791 | var dupes = []; |
1781 | var dupeTracker = {}; | 1792 | var dupeTracker = {}; |
1782 | for (var i=0; i<entropy.base.parts.length; i++) { | 1793 | for (var i=0; i<entropy.base.events.length; i++) { |
1783 | var card = entropy.base.parts[i]; | 1794 | var card = entropy.base.events[i]; |
1784 | var cardUpper = card.toUpperCase(); | 1795 | var cardUpper = card.toUpperCase(); |
1785 | if (cardUpper in dupeTracker) { | 1796 | if (cardUpper in dupeTracker) { |
1786 | dupes.push(card); | 1797 | dupes.push(card); |
@@ -1896,6 +1907,7 @@ | |||
1896 | || (name == "ESN - Ethersocial Network") | 1907 | || (name == "ESN - Ethersocial Network") |
1897 | || (name == "VET - VeChain") | 1908 | || (name == "VET - VeChain") |
1898 | || (name == "ERE - EtherCore") | 1909 | || (name == "ERE - EtherCore") |
1910 | || (name == "BSC - Binance Smart Chain") | ||
1899 | } | 1911 | } |
1900 | 1912 | ||
1901 | function networkIsRsk() { | 1913 | function networkIsRsk() { |
@@ -2242,6 +2254,13 @@ | |||
2242 | }, | 2254 | }, |
2243 | }, | 2255 | }, |
2244 | { | 2256 | { |
2257 | name: "BSC - Binance Smart Chain", | ||
2258 | onSelect: function() { | ||
2259 | network = libs.bitcoin.networks.bitcoin; | ||
2260 | setHdCoin(60); | ||
2261 | }, | ||
2262 | }, | ||
2263 | { | ||
2245 | name: "BSV - BitcoinSV", | 2264 | name: "BSV - BitcoinSV", |
2246 | onSelect: function() { | 2265 | onSelect: function() { |
2247 | network = libs.bitcoin.networks.bitcoinsv; | 2266 | network = libs.bitcoin.networks.bitcoinsv; |
@@ -3245,6 +3264,12 @@ | |||
3245 | }, | 3264 | }, |
3246 | }, | 3265 | }, |
3247 | { | 3266 | { |
3267 | name: "TRX - Tron", | ||
3268 | onSelect: function() { | ||
3269 | setHdCoin(195); | ||
3270 | }, | ||
3271 | }, | ||
3272 | { | ||
3248 | name: "TWINS - TWINS", | 3273 | name: "TWINS - TWINS", |
3249 | onSelect: function() { | 3274 | onSelect: function() { |
3250 | network = libs.bitcoin.networks.twins; | 3275 | network = libs.bitcoin.networks.twins; |