aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdev_env_setup.sh58
-rw-r--r--libs/combined/npm-shrinkwrap.json294
-rw-r--r--libs/combined/package-lock.json106
-rw-r--r--[-rwxr-xr-x]libs/combined/package.json2
-rw-r--r--libs/stellar-util/package-lock.json24
-rw-r--r--src/css/bootstrap.css (renamed from src/css/bootstrap-3.3.7.css)985
-rw-r--r--src/css/bootstrap.css.map1
-rw-r--r--src/index.html10
-rw-r--r--src/js/bootstrap.js (renamed from src/js/bootstrap-3.3.7.js)397
-rw-r--r--src/js/entropy.js345
-rw-r--r--src/js/eos-util.js7415
-rw-r--r--src/js/index.js37
-rw-r--r--tests/spec/tests.js117
13 files changed, 1552 insertions, 8239 deletions
diff --git a/dev_env_setup.sh b/dev_env_setup.sh
new file mode 100755
index 0000000..68af109
--- /dev/null
+++ b/dev_env_setup.sh
@@ -0,0 +1,58 @@
1# this script is intended to be run in a VM
2# running ubuntu 20.04 server
3# from the root directory of this repo
4
5echo "This script is intended to be run in a VM."
6echo "It may do things to your OS that you don't want to be peristent."
7echo "Please type virtualmachine to continue, or Ctrl-C to quit."
8
9read passage
10
11if [ "$passage" = "virtualmachine" ]; then
12 echo "Installing dev environment"
13else
14 echo "Did not type virtualmachine, quitting with no changes applied"
15 exit
16fi
17
18# set up place for local binaries
19mkdir $HOME/.bin
20echo "export PATH=$PATH:$HOME/.bin" >> $HOME/.bashrc
21source $HOME/.bashrc
22
23# allow python3 to be run with python command
24ln -s /usr/bin/python3 $HOME/.bin/python
25
26# install firefox and other dependencies
27sudo apt-get -y install firefox unzip openjdk-11-jre-headless xvfb libxi6 libgconf-2-4
28# install chrome
29curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add
30sudo sh -c "echo \"deb https://dl.google.com/linux/chrome/deb/ stable main\" >> /etc/apt/sources.list.d/google-chrome.list"
31sudo apt-get -y update
32sudo apt-get -y install google-chrome-stable
33
34# install nodejs for running tests
35curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.36.0/install.sh | bash
36# load nvm
37source $HOME/.bashrc
38export NVM_DIR="$HOME/.nvm"
39[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
40[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
41# install latest node
42nvm install node
43# install jasmine
44cd tests
45npm install --global jasmine
46npm install selenium-webdriver
47# install gecko webdriver for firefox
48wget https://github.com/mozilla/geckodriver/releases/download/v0.27.0/geckodriver-v0.27.0-linux64.tar.gz --output-document=/tmp/geckodriver.tar.gz
49tar -xf /tmp/geckodriver.tar.gz -C $HOME/.bin
50# install chrome webdriver for chromium
51wget https://chromedriver.storage.googleapis.com/85.0.4183.87/chromedriver_linux64.zip --output-document=/tmp/chromedriver.zip
52unzip /tmp/chromedriver.zip -d $HOME/.bin
53
54# to run tests
55# cd tests
56# Xvfb :1 -screen 1 1024x768x24 & export DISPLAY=:1.1
57# BROWSER=firefox jasmine spec/tests.js
58# BROWSER=chrome jasmine spec/tests.js
diff --git a/libs/combined/npm-shrinkwrap.json b/libs/combined/npm-shrinkwrap.json
index eeb18eb..2674af1 100644
--- a/libs/combined/npm-shrinkwrap.json
+++ b/libs/combined/npm-shrinkwrap.json
@@ -602,8 +602,8 @@
602 } 602 }
603 }, 603 },
604 "bs58grscheck": { 604 "bs58grscheck": {
605 "version": "git+https://github.com/Groestlcoin/bs58grscheck.git#8ff31333a7626161c1484b461c20710bb9f97b93", 605 "version": "2.1.2",
606 "from": "git+https://github.com/Groestlcoin/bs58grscheck.git", 606 "resolved": "git+https://github.com/Groestlcoin/bs58grscheck.git#8ff31333a7626161c1484b461c20710bb9f97b93",
607 "requires": { 607 "requires": {
608 "bs58": "^4.0.0", 608 "bs58": "^4.0.0",
609 "create-hash": "^1.1.0", 609 "create-hash": "^1.1.0",
@@ -717,6 +717,7 @@
717 "version": "1.6.2", 717 "version": "1.6.2",
718 "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 718 "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
719 "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 719 "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
720 "dev": true,
720 "requires": { 721 "requires": {
721 "buffer-from": "^1.0.0", 722 "buffer-from": "^1.0.0",
722 "inherits": "^2.0.3", 723 "inherits": "^2.0.3",
@@ -728,6 +729,7 @@
728 "version": "2.3.7", 729 "version": "2.3.7",
729 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 730 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
730 "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 731 "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
732 "dev": true,
731 "requires": { 733 "requires": {
732 "core-util-is": "~1.0.0", 734 "core-util-is": "~1.0.0",
733 "inherits": "~2.0.3", 735 "inherits": "~2.0.3",
@@ -747,6 +749,7 @@
747 "version": "1.1.1", 749 "version": "1.1.1",
748 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 750 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
749 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 751 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
752 "dev": true,
750 "requires": { 753 "requires": {
751 "safe-buffer": "~5.1.0" 754 "safe-buffer": "~5.1.0"
752 } 755 }
@@ -1052,9 +1055,9 @@
1052 }, 1055 },
1053 "dependencies": { 1056 "dependencies": {
1054 "lodash": { 1057 "lodash": {
1055 "version": "4.17.11", 1058 "version": "4.17.12",
1056 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 1059 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.12.tgz",
1057 "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" 1060 "integrity": "sha512-+CiwtLnsJhX03p20mwXuvhoebatoh5B3tt+VvYlrPgZC1g36y+RRbkufX95Xa+X4I59aWEacDFYwnJZiyBh9gA=="
1058 } 1061 }
1059 } 1062 }
1060 }, 1063 },
@@ -1398,6 +1401,285 @@
1398 } 1401 }
1399 } 1402 }
1400 }, 1403 },
1404 "elliptic": {
1405 "version": "6.5.3",
1406 "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
1407 "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
1408 "requires": {
1409 "bn.js": "^4.4.0",
1410 "brorand": "^1.0.1",
1411 "hash.js": "^1.0.0",
1412 "hmac-drbg": "^1.0.0",
1413 "inherits": "^2.0.1",
1414 "minimalistic-assert": "^1.0.0",
1415 "minimalistic-crypto-utils": "^1.0.0"
1416 }
1417 },
1418 "ethereumjs-util": {
1419 "version": "6.0.0",
1420 "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.0.0.tgz",
1421 "integrity": "sha512-E3yKUyl0Fs95nvTFQZe/ZSNcofhDzUsDlA5y2uoRmf1+Ec7gpGhNCsgKkZBRh7Br5op8mJcYF/jFbmjj909+nQ==",
1422 "requires": {
1423 "bn.js": "^4.11.0",
1424 "create-hash": "^1.1.2",
1425 "ethjs-util": "^0.1.6",
1426 "keccak": "^1.0.2",
1427 "rlp": "^2.0.0",
1428 "safe-buffer": "^5.1.1",
1429 "secp256k1": "^3.0.1"
1430 }
1431 },
1432 "ethjs-util": {
1433 "version": "0.1.6",
1434 "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz",
1435 "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==",
1436 "requires": {
1437 "is-hex-prefixed": "1.0.0",
1438 "strip-hex-prefix": "1.0.0"
1439 }
1440 },
1441 "events": {
1442 "version": "2.1.0",
1443 "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
1444 "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
1445 "dev": true
1446 },
1447 "evp_bytestokey": {
1448 "version": "1.0.3",
1449 "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
1450 "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
1451 "requires": {
1452 "md5.js": "^1.3.4",
1453 "safe-buffer": "^5.1.1"
1454 }
1455 },
1456 "extend": {
1457 "version": "3.0.2",
1458 "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1459 "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1460 },
1461 "fast-levenshtein": {
1462 "version": "2.0.6",
1463 "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1464 "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
1465 },
1466 "fast-safe-stringify": {
1467 "version": "2.0.7",
1468 "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
1469 "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==",
1470 "dev": true
1471 },
1472 "file-uri-to-path": {
1473 "version": "1.0.0",
1474 "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
1475 "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
1476 },
1477 "follow-redirects": {
1478 "version": "1.5.10",
1479 "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
1480 "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
1481 "requires": {
1482 "debug": "=3.1.0"
1483 }
1484 },
1485 "fs.realpath": {
1486 "version": "1.0.0",
1487 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1488 "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
1489 },
1490 "function-bind": {
1491 "version": "1.1.1",
1492 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1493 "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1494 "dev": true
1495 },
1496 "get-assigned-identifiers": {
1497 "version": "1.2.0",
1498 "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
1499 "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
1500 "dev": true
1501 },
1502 "glob": {
1503 "version": "7.1.6",
1504 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
1505 "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
1506 "requires": {
1507 "fs.realpath": "^1.0.0",
1508 "inflight": "^1.0.4",
1509 "inherits": "2",
1510 "minimatch": "^3.0.4",
1511 "once": "^1.3.0",
1512 "path-is-absolute": "^1.0.0"
1513 }
1514 },
1515 "globby": {
1516 "version": "5.0.0",
1517 "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
1518 "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
1519 "requires": {
1520 "array-union": "^1.0.1",
1521 "arrify": "^1.0.0",
1522 "glob": "^7.0.3",
1523 "object-assign": "^4.0.1",
1524 "pify": "^2.0.0",
1525 "pinkie-promise": "^2.0.0"
1526 }
1527 },
1528 "graceful-fs": {
1529 "version": "4.2.4",
1530 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
1531 "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
1532 },
1533 "groestl-hash-js": {
1534 "version": "1.0.0",
1535 "resolved": "https://registry.npmjs.org/groestl-hash-js/-/groestl-hash-js-1.0.0.tgz",
1536 "integrity": "sha1-yewyVxbsSLIjz6ruZzxfj/12Bsk="
1537 },
1538 "groestlcoinjs-lib": {
1539 "version": "git://github.com/Groestlcoin/groestlcoinjs-lib.git#7c4ee3de832171731e7591d5462f54e50240add8",
1540 "from": "git://github.com/Groestlcoin/groestlcoinjs-lib.git#3.3.2",
1541 "requires": {
1542 "bech32": "^1.1.2",
1543 "bigi": "^1.4.0",
1544 "bip66": "^1.1.0",
1545 "bitcoin-ops": "^1.3.0",
1546 "bs58grscheck": "git+https://github.com/Groestlcoin/bs58grscheck.git",
1547 "create-hash": "^1.1.0",
1548 "create-hmac": "^1.1.3",
1549 "ecurve": "^1.0.0",
1550 "groestl-hash-js": "git+https://github.com/Groestlcoin/groestl-hash-js.git",
1551 "merkle-lib": "^2.0.10",
1552 "pushdata-bitcoin": "^1.0.1",
1553 "randombytes": "^2.0.1",
1554 "safe-buffer": "^5.0.1",
1555 "typeforce": "^1.11.3",
1556 "varuint-bitcoin": "^1.0.4",
1557 "wifgrs": "git+https://github.com/Groestlcoin/wifgrs.git"
1558 },
1559 "dependencies": {
1560 "groestl-hash-js": {
1561 "version": "git+https://github.com/Groestlcoin/groestl-hash-js.git#ef6a04f1c4d2f0448f0882b5f213ef7a0659baee",
1562 "from": "git+https://github.com/Groestlcoin/groestl-hash-js.git"
1563 }
1564 }
1565 },
1566 "handshake-util": {
1567 "version": "1.2.0",
1568 "resolved": "https://registry.npmjs.org/handshake-util/-/handshake-util-1.2.0.tgz",
1569 "integrity": "sha512-LhjqYdYggZjFvaPoFl3MMZU3IdPS7OwF6AZdPg+B14aJHQ72FRXYalezjFE3tAV/wBTVdHfpis89MOGhbVWBbw==",
1570 "requires": {
1571 "bech32": "^1.1.3",
1572 "blake2b": "^2.1.3"
1573 }
1574 },
1575 "has": {
1576 "version": "1.0.3",
1577 "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1578 "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1579 "dev": true,
1580 "requires": {
1581 "function-bind": "^1.1.1"
1582 }
1583 },
1584 "hash-base": {
1585 "version": "3.1.0",
1586 "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
1587 "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
1588 "requires": {
1589 "inherits": "^2.0.4",
1590 "readable-stream": "^3.6.0",
1591 "safe-buffer": "^5.2.0"
1592 }
1593 },
1594 "hash.js": {
1595 "version": "1.1.7",
1596 "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
1597 "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
1598 "requires": {
1599 "inherits": "^2.0.3",
1600 "minimalistic-assert": "^1.0.1"
1601 }
1602 },
1603 "hmac-drbg": {
1604 "version": "1.0.1",
1605 "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
1606 "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
1607 "requires": {
1608 "hash.js": "^1.0.3",
1609 "minimalistic-assert": "^1.0.0",
1610 "minimalistic-crypto-utils": "^1.0.1"
1611 }
1612 },
1613 "htmlescape": {
1614 "version": "1.1.1",
1615 "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
1616 "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E="
1617 },
1618 "https-browserify": {
1619 "version": "1.0.0",
1620 "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
1621 "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
1622 "dev": true
1623 },
1624 "ieee754": {
1625 "version": "1.1.13",
1626 "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
1627 "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
1628 },
1629 "imurmurhash": {
1630 "version": "0.1.4",
1631 "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1632 "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
1633 },
1634 "inflight": {
1635 "version": "1.0.6",
1636 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1637 "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1638 "requires": {
1639 "once": "^1.3.0",
1640 "wrappy": "1"
1641 }
1642 },
1643 "inherits": {
1644 "version": "2.0.4",
1645 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1646 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1647 },
1648 "inline-source-map": {
1649 "version": "0.6.2",
1650 "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
1651 "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
1652 "dev": true,
1653 "requires": {
1654 "source-map": "~0.5.3"
1655 }
1656 },
1657 "insert-module-globals": {
1658 "version": "7.2.0",
1659 "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz",
1660 "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==",
1661 "dev": true,
1662 "requires": {
1663 "JSONStream": "^1.0.3",
1664 "acorn-node": "^1.5.2",
1665 "combine-source-map": "^0.8.0",
1666 "concat-stream": "^1.6.1",
1667 "is-buffer": "^1.1.0",
1668 "path-is-absolute": "^1.0.1",
1669 "process": "~0.11.0",
1670 "through2": "^2.0.0",
1671 "undeclared-identifiers": "^1.1.2",
1672 "xtend": "^4.0.0"
1673 },
1674 "dependencies": {
1675 "is-buffer": {
1676 "version": "1.1.6",
1677 "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
1678 "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
1679 "dev": true
1680 }
1681 }
1682 },
1401 "is-buffer": { 1683 "is-buffer": {
1402 "version": "2.0.4", 1684 "version": "2.0.4",
1403 "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", 1685 "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
@@ -1432,7 +1714,7 @@
1432 "isarray": { 1714 "isarray": {
1433 "version": "1.0.0", 1715 "version": "1.0.0",
1434 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1716 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1435 "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1717 "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1436 }, 1718 },
1437 "javascript-biginteger": { 1719 "javascript-biginteger": {
1438 "version": "0.9.2", 1720 "version": "0.9.2",
diff --git a/libs/combined/package-lock.json b/libs/combined/package-lock.json
index 19c189c..1bcd3ee 100644
--- a/libs/combined/package-lock.json
+++ b/libs/combined/package-lock.json
@@ -225,8 +225,7 @@
225 "base64-js": { 225 "base64-js": {
226 "version": "1.3.1", 226 "version": "1.3.1",
227 "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 227 "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
228 "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", 228 "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
229 "dev": true
230 }, 229 },
231 "bchaddrjs": { 230 "bchaddrjs": {
232 "version": "0.4.4", 231 "version": "0.4.4",
@@ -237,10 +236,18 @@
237 "cashaddrjs": "^0.3.8" 236 "cashaddrjs": "^0.3.8"
238 } 237 }
239 }, 238 },
239 "bchaddrjs-slp": {
240 "version": "git://github.com/simpleledger/bchaddrjs.git#af16e44a6bfbe4b3980a62dba50e2f68ed864c6b",
241 "from": "git://github.com/simpleledger/bchaddrjs.git#af16e44a6bfbe4b3980a62dba50e2f68ed864c6b",
242 "requires": {
243 "bs58check": "^2.1.2",
244 "cashaddrjs-slp": "^0.2.12"
245 }
246 },
240 "bech32": { 247 "bech32": {
241 "version": "1.1.3", 248 "version": "1.1.4",
242 "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.3.tgz", 249 "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
243 "integrity": "sha512-yuVFUvrNcoJi0sv5phmqc6P+Fl1HjRDRNOOkHY2X/3LBy2bIGNSFx4fZ95HMaXHupuS7cZR15AsvtmCIF4UEyg==" 250 "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="
244 }, 251 },
245 "big-integer": { 252 "big-integer": {
246 "version": "1.6.36", 253 "version": "1.6.36",
@@ -290,6 +297,18 @@
290 "create-hash": "^1.1.1", 297 "create-hash": "^1.1.1",
291 "ecurve": "^1.0.0", 298 "ecurve": "^1.0.0",
292 "scryptsy": "^2.0.0" 299 "scryptsy": "^2.0.0"
300 },
301 "dependencies": {
302 "bs58grscheck": {
303 "version": "git+https://github.com/Groestlcoin/bs58grscheck.git#020feec2b3153aeb278596ea70ce3579a37f4e21",
304 "from": "git+https://github.com/Groestlcoin/bs58grscheck.git",
305 "requires": {
306 "bs58": "^4.0.0",
307 "create-hash": "^1.1.0",
308 "groestl-hash-js": "git+https://github.com/Groestlcoin/groestl-hash-js.git",
309 "safe-buffer": "^5.1.2"
310 }
311 }
293 } 312 }
294 }, 313 },
295 "bip39": { 314 "bip39": {
@@ -318,9 +337,8 @@
318 "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" 337 "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow=="
319 }, 338 },
320 "bitcoinjs-lib": { 339 "bitcoinjs-lib": {
321 "version": "3.3.2", 340 "version": "git://github.com/iancoleman/bitcoinjs-lib.git#ac212f04e81313ddfda7ed28856ac6c7dfbe6f75",
322 "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-3.3.2.tgz", 341 "from": "git://github.com/iancoleman/bitcoinjs-lib.git#v3.3.2_16bit",
323 "integrity": "sha512-l5qqvbaK8wwtANPf6oEffykycg4383XgEYdia1rI7/JpGf1jfRWlOUCvx5TiTZS7kyIvY4j/UhIQ2urLsvGkzw==",
324 "requires": { 342 "requires": {
325 "bech32": "^1.1.2", 343 "bech32": "^1.1.2",
326 "bigi": "^1.4.0", 344 "bigi": "^1.4.0",
@@ -378,6 +396,23 @@
378 } 396 }
379 } 397 }
380 }, 398 },
399 "blake2b": {
400 "version": "2.1.3",
401 "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz",
402 "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==",
403 "requires": {
404 "blake2b-wasm": "^1.1.0",
405 "nanoassert": "^1.0.0"
406 }
407 },
408 "blake2b-wasm": {
409 "version": "1.1.7",
410 "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz",
411 "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==",
412 "requires": {
413 "nanoassert": "^1.0.0"
414 }
415 },
381 "bn.js": { 416 "bn.js": {
382 "version": "4.11.8", 417 "version": "4.11.8",
383 "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 418 "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
@@ -573,20 +608,26 @@
573 } 608 }
574 }, 609 },
575 "bs58grscheck": { 610 "bs58grscheck": {
576 "version": "git+https://github.com/Groestlcoin/bs58grscheck.git#020feec2b3153aeb278596ea70ce3579a37f4e21", 611 "version": "2.1.2",
577 "from": "git+https://github.com/Groestlcoin/bs58grscheck.git", 612 "resolved": "git+https://github.com/Groestlcoin/bs58grscheck.git#8ff31333a7626161c1484b461c20710bb9f97b93",
578 "requires": { 613 "requires": {
579 "bs58": "^4.0.0", 614 "bs58": "^4.0.0",
580 "create-hash": "^1.1.0", 615 "create-hash": "^1.1.0",
581 "groestl-hash-js": "git+https://github.com/Groestlcoin/groestl-hash-js.git#ef6a04f1c4d2f0448f0882b5f213ef7a0659baee", 616 "groestl-hash-js": "^1.0.0",
582 "safe-buffer": "^5.1.2" 617 "safe-buffer": "^5.1.2"
618 },
619 "dependencies": {
620 "groestl-hash-js": {
621 "version": "1.0.0",
622 "resolved": "https://registry.npmjs.org/groestl-hash-js/-/groestl-hash-js-1.0.0.tgz",
623 "integrity": "sha1-yewyVxbsSLIjz6ruZzxfj/12Bsk="
624 }
583 } 625 }
584 }, 626 },
585 "buffer": { 627 "buffer": {
586 "version": "5.4.3", 628 "version": "5.4.3",
587 "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", 629 "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz",
588 "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", 630 "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==",
589 "dev": true,
590 "requires": { 631 "requires": {
591 "base64-js": "^1.0.2", 632 "base64-js": "^1.0.2",
592 "ieee754": "^1.1.4" 633 "ieee754": "^1.1.4"
@@ -632,6 +673,14 @@
632 "big-integer": "1.6.36" 673 "big-integer": "1.6.36"
633 } 674 }
634 }, 675 },
676 "cashaddrjs-slp": {
677 "version": "0.2.12",
678 "resolved": "https://registry.npmjs.org/cashaddrjs-slp/-/cashaddrjs-slp-0.2.12.tgz",
679 "integrity": "sha512-n2TTIuW6vZZxYvjvsUAA+wOM0Zkj+3RRKUtDC1XSu4Ic4XVr0yFJkl1bzQkHWda7nkVT51sxjZneygz7D0SyrQ==",
680 "requires": {
681 "big-integer": "^1.6.34"
682 }
683 },
635 "cipher-base": { 684 "cipher-base": {
636 "version": "1.0.4", 685 "version": "1.0.4",
637 "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 686 "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
@@ -1114,18 +1163,27 @@
1114 "bigi": "^1.4.0", 1163 "bigi": "^1.4.0",
1115 "bip66": "^1.1.0", 1164 "bip66": "^1.1.0",
1116 "bitcoin-ops": "^1.3.0", 1165 "bitcoin-ops": "^1.3.0",
1117 "bs58grscheck": "git+https://github.com/Groestlcoin/bs58grscheck.git#020feec2b3153aeb278596ea70ce3579a37f4e21", 1166 "bs58grscheck": "git+https://github.com/Groestlcoin/bs58grscheck.git",
1118 "create-hash": "^1.1.0", 1167 "create-hash": "^1.1.0",
1119 "create-hmac": "^1.1.3", 1168 "create-hmac": "^1.1.3",
1120 "ecurve": "^1.0.0", 1169 "ecurve": "^1.0.0",
1121 "groestl-hash-js": "git+https://github.com/Groestlcoin/groestl-hash-js.git#ef6a04f1c4d2f0448f0882b5f213ef7a0659baee", 1170 "groestl-hash-js": "git+https://github.com/Groestlcoin/groestl-hash-js.git",
1122 "merkle-lib": "^2.0.10", 1171 "merkle-lib": "^2.0.10",
1123 "pushdata-bitcoin": "^1.0.1", 1172 "pushdata-bitcoin": "^1.0.1",
1124 "randombytes": "^2.0.1", 1173 "randombytes": "^2.0.1",
1125 "safe-buffer": "^5.0.1", 1174 "safe-buffer": "^5.0.1",
1126 "typeforce": "^1.11.3", 1175 "typeforce": "^1.11.3",
1127 "varuint-bitcoin": "^1.0.4", 1176 "varuint-bitcoin": "^1.0.4",
1128 "wifgrs": "git+https://github.com/Groestlcoin/wifgrs.git#5e0ed45865ae5f9736dd8855f401da04423b0e86" 1177 "wifgrs": "git+https://github.com/Groestlcoin/wifgrs.git"
1178 }
1179 },
1180 "handshake-util": {
1181 "version": "1.2.0",
1182 "resolved": "https://registry.npmjs.org/handshake-util/-/handshake-util-1.2.0.tgz",
1183 "integrity": "sha512-LhjqYdYggZjFvaPoFl3MMZU3IdPS7OwF6AZdPg+B14aJHQ72FRXYalezjFE3tAV/wBTVdHfpis89MOGhbVWBbw==",
1184 "requires": {
1185 "bech32": "^1.1.3",
1186 "blake2b": "^2.1.3"
1129 } 1187 }
1130 }, 1188 },
1131 "has": { 1189 "has": {
@@ -1198,8 +1256,7 @@
1198 "ieee754": { 1256 "ieee754": {
1199 "version": "1.1.13", 1257 "version": "1.1.13",
1200 "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 1258 "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
1201 "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", 1259 "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
1202 "dev": true
1203 }, 1260 },
1204 "imurmurhash": { 1261 "imurmurhash": {
1205 "version": "0.1.4", 1262 "version": "0.1.4",
@@ -1322,9 +1379,9 @@
1322 "dev": true 1379 "dev": true
1323 }, 1380 },
1324 "jsrsasign": { 1381 "jsrsasign": {
1325 "version": "8.0.12", 1382 "version": "8.0.19",
1326 "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-8.0.12.tgz", 1383 "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-8.0.19.tgz",
1327 "integrity": "sha1-Iqu5ZW00owuVMENnIINeicLlwxY=" 1384 "integrity": "sha512-qf+F41huTh9ThXj5n3yfAJJRp8vx05JYbGlGvCjusYX50rsfqY6ASK08LCOutl0yA1BHIpGG8bd1w5x9aGy7Zg=="
1328 }, 1385 },
1329 "jssha": { 1386 "jssha": {
1330 "version": "2.3.1", 1387 "version": "2.3.1",
@@ -1485,6 +1542,11 @@
1485 "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", 1542 "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
1486 "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" 1543 "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
1487 }, 1544 },
1545 "nanoassert": {
1546 "version": "1.1.0",
1547 "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz",
1548 "integrity": "sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40="
1549 },
1488 "nebulas": { 1550 "nebulas": {
1489 "version": "0.5.6", 1551 "version": "0.5.6",
1490 "resolved": "https://registry.npmjs.org/nebulas/-/nebulas-0.5.6.tgz", 1552 "resolved": "https://registry.npmjs.org/nebulas/-/nebulas-0.5.6.tgz",
@@ -2204,10 +2266,10 @@
2204 } 2266 }
2205 }, 2267 },
2206 "wifgrs": { 2268 "wifgrs": {
2207 "version": "git+https://github.com/Groestlcoin/wifgrs.git#5e0ed45865ae5f9736dd8855f401da04423b0e86", 2269 "version": "git+https://github.com/Groestlcoin/wifgrs.git#970dafa1633f1b6e8bf51eb933c76a7203567ec2",
2208 "from": "git+https://github.com/Groestlcoin/wifgrs.git", 2270 "from": "git+https://github.com/Groestlcoin/wifgrs.git",
2209 "requires": { 2271 "requires": {
2210 "bs58grscheck": "git+https://github.com/Groestlcoin/bs58grscheck.git#020feec2b3153aeb278596ea70ce3579a37f4e21", 2272 "bs58grscheck": "^2.1.2",
2211 "safe-buffer": "^5.1.1" 2273 "safe-buffer": "^5.1.1"
2212 } 2274 }
2213 }, 2275 },
diff --git a/libs/combined/package.json b/libs/combined/package.json
index 1914ccd..455d263 100755..100644
--- a/libs/combined/package.json
+++ b/libs/combined/package.json
@@ -21,7 +21,7 @@
21 "groestlcoinjs-lib": "git://github.com/Groestlcoin/groestlcoinjs-lib.git#3.3.2", 21 "groestlcoinjs-lib": "git://github.com/Groestlcoin/groestlcoinjs-lib.git#3.3.2",
22 "handshake-util": "1.2.0", 22 "handshake-util": "1.2.0",
23 "javascript-biginteger": "0.9.2", 23 "javascript-biginteger": "0.9.2",
24 "jsrsasign": "^8.0.15", 24 "jsrsasign": "^8.0.19",
25 "kjua": "0.6.0", 25 "kjua": "0.6.0",
26 "nanocurrency-web": "^1.2.2", 26 "nanocurrency-web": "^1.2.2",
27 "nebulas": "0.5.6", 27 "nebulas": "0.5.6",
diff --git a/libs/stellar-util/package-lock.json b/libs/stellar-util/package-lock.json
index 5c428ee..07e9724 100644
--- a/libs/stellar-util/package-lock.json
+++ b/libs/stellar-util/package-lock.json
@@ -15,9 +15,9 @@
15 } 15 }
16 }, 16 },
17 "acorn": { 17 "acorn": {
18 "version": "6.0.4", 18 "version": "6.4.1",
19 "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", 19 "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
20 "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", 20 "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
21 "dev": true 21 "dev": true
22 }, 22 },
23 "acorn-dynamic-import": { 23 "acorn-dynamic-import": {
@@ -90,7 +90,7 @@
90 }, 90 },
91 "util": { 91 "util": {
92 "version": "0.10.3", 92 "version": "0.10.3",
93 "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", 93 "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
94 "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 94 "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
95 "dev": true, 95 "dev": true,
96 "requires": { 96 "requires": {
@@ -186,7 +186,7 @@
186 "dependencies": { 186 "dependencies": {
187 "resolve": { 187 "resolve": {
188 "version": "1.1.7", 188 "version": "1.1.7",
189 "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 189 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
190 "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 190 "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
191 "dev": true 191 "dev": true
192 } 192 }
@@ -581,9 +581,9 @@
581 } 581 }
582 }, 582 },
583 "elliptic": { 583 "elliptic": {
584 "version": "6.4.1", 584 "version": "6.5.3",
585 "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", 585 "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
586 "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", 586 "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
587 "dev": true, 587 "dev": true,
588 "requires": { 588 "requires": {
589 "bn.js": "^4.4.0", 589 "bn.js": "^4.4.0",
@@ -810,9 +810,9 @@
810 } 810 }
811 }, 811 },
812 "lodash": { 812 "lodash": {
813 "version": "4.17.11", 813 "version": "4.17.19",
814 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 814 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
815 "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" 815 "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
816 }, 816 },
817 "lodash.memoize": { 817 "lodash.memoize": {
818 "version": "3.0.4", 818 "version": "3.0.4",
@@ -1085,7 +1085,7 @@
1085 "dependencies": { 1085 "dependencies": {
1086 "string_decoder": { 1086 "string_decoder": {
1087 "version": "1.1.1", 1087 "version": "1.1.1",
1088 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1088 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1089 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1089 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1090 "dev": true, 1090 "dev": true,
1091 "requires": { 1091 "requires": {
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 */
7html { 7html {
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}
12body { 12body {
13 margin: 0; 13 margin: 0;
@@ -50,7 +50,11 @@ a:hover {
50 outline: 0; 50 outline: 0;
51} 51}
52abbr[title] { 52abbr[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}
55b, 59b,
56strong { 60strong {
@@ -60,28 +64,28 @@ dfn {
60 font-style: italic; 64 font-style: italic;
61} 65}
62h1 { 66h1 {
63 margin: .67em 0;
64 font-size: 2em; 67 font-size: 2em;
68 margin: 0.67em 0;
65} 69}
66mark { 70mark {
67 color: #000;
68 background: #ff0; 71 background: #ff0;
72 color: #000;
69} 73}
70small { 74small {
71 font-size: 80%; 75 font-size: 80%;
72} 76}
73sub, 77sub,
74sup { 78sup {
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}
80sup { 84sup {
81 top: -.5em; 85 top: -0.5em;
82} 86}
83sub { 87sub {
84 bottom: -.25em; 88 bottom: -0.25em;
85} 89}
86img { 90img {
87 border: 0; 91 border: 0;
@@ -93,10 +97,10 @@ figure {
93 margin: 1em 40px; 97 margin: 1em 40px;
94} 98}
95hr { 99hr {
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}
101pre { 105pre {
102 overflow: auto; 106 overflow: auto;
@@ -113,9 +117,9 @@ input,
113optgroup, 117optgroup,
114select, 118select,
115textarea { 119textarea {
116 margin: 0;
117 font: inherit;
118 color: inherit; 120 color: inherit;
121 font: inherit;
122 margin: 0;
119} 123}
120button { 124button {
121 overflow: visible; 125 overflow: visible;
@@ -137,8 +141,8 @@ html input[disabled] {
137} 141}
138button::-moz-focus-inner, 142button::-moz-focus-inner,
139input::-moz-focus-inner { 143input::-moz-focus-inner {
140 padding: 0;
141 border: 0; 144 border: 0;
145 padding: 0;
142} 146}
143input { 147input {
144 line-height: normal; 148 line-height: normal;
@@ -146,8 +150,8 @@ input {
146input[type="checkbox"], 150input[type="checkbox"],
147input[type="radio"] { 151input[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}
153input[type="number"]::-webkit-inner-spin-button, 157input[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}
157input[type="search"] { 161input[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}
163input[type="search"]::-webkit-search-cancel-button, 167input[type="search"]::-webkit-search-cancel-button,
164input[type="search"]::-webkit-search-decoration { 168input[type="search"]::-webkit-search-decoration {
165 -webkit-appearance: none; 169 -webkit-appearance: none;
166} 170}
167fieldset { 171fieldset {
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}
172legend { 176legend {
173 padding: 0;
174 border: 0; 177 border: 0;
178 padding: 0;
175} 179}
176textarea { 180textarea {
177 overflow: auto; 181 overflow: auto;
@@ -180,8 +184,8 @@ optgroup {
180 font-weight: bold; 184 font-weight: bold;
181} 185}
182table { 186table {
183 border-spacing: 0;
184 border-collapse: collapse; 187 border-collapse: collapse;
188 border-spacing: 0;
185} 189}
186td, 190td,
187th { 191th {
@@ -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}
1079html { 1080html {
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}
1084body { 1084body {
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}
1091input, 1091input,
@@ -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}
1219h1, 1219h1,
1220.h1, 1220.h1,
@@ -1306,7 +1306,7 @@ small,
1306} 1306}
1307mark, 1307mark,
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}
1415ul, 1415ul,
1416ol { 1416ol {
@@ -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}
1448dt { 1448dt {
1449 font-weight: bold; 1449 font-weight: 700;
1450} 1450}
1451dd { 1451dd {
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 {
1468abbr[title], 1468abbr[title],
1469abbr[data-original-title] { 1469abbr[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}
1483blockquote p:last-child, 1482blockquote p:last-child,
1484blockquote ul:last-child, 1483blockquote 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}
1496blockquote footer:before, 1495blockquote footer:before,
1497blockquote small:before, 1496blockquote small:before,
1498blockquote .small:before { 1497blockquote .small:before {
1499 content: '\2014 \00A0'; 1498 content: "\2014 \00A0";
1500} 1499}
1501.blockquote-reverse, 1500.blockquote-reverse,
1502blockquote.pull-right { 1501blockquote.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,
1512blockquote.pull-right small:before, 1511blockquote.pull-right small:before,
1513.blockquote-reverse .small:before, 1512.blockquote-reverse .small:before,
1514blockquote.pull-right .small:before { 1513blockquote.pull-right .small:before {
1515 content: ''; 1514 content: "";
1516} 1515}
1517.blockquote-reverse footer:after, 1516.blockquote-reverse footer:after,
1518blockquote.pull-right footer:after, 1517blockquote.pull-right footer:after,
@@ -1520,7 +1519,7 @@ blockquote.pull-right footer:after,
1520blockquote.pull-right small:after, 1519blockquote.pull-right small:after,
1521.blockquote-reverse .small:after, 1520.blockquote-reverse .small:after,
1522blockquote.pull-right .small:after { 1521blockquote.pull-right .small:after {
1523 content: '\00A0 \2014'; 1522 content: "\00A0 \2014";
1524} 1523}
1525address { 1524address {
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}
1552kbd kbd { 1551kbd 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}
1559pre { 1558pre {
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}
2251table { 2349table {
2252 background-color: transparent; 2350 background-color: transparent;
2253} 2351}
2352table col[class*="col-"] {
2353 position: static;
2354 display: table-column;
2355 float: none;
2356}
2357table td[class*="col-"],
2358table th[class*="col-"] {
2359 position: static;
2360 display: table-cell;
2361 float: none;
2362}
2254caption { 2363caption {
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}
2260th { 2369th {
@@ -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}
2326table col[class*="col-"] {
2327 position: static;
2328 display: table-column;
2329 float: none;
2330}
2331table td[class*="col-"],
2332table 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}
2514input[type="search"] { 2612input[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}
2519input[type="radio"], 2620input[type="radio"],
2520input[type="checkbox"] { 2621input[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}
2626input[type="radio"][disabled],
2627input[type="checkbox"][disabled],
2628input[type="radio"].disabled,
2629input[type="checkbox"].disabled,
2630fieldset[disabled] input[type="radio"],
2631fieldset[disabled] input[type="checkbox"] {
2632 cursor: not-allowed;
2633}
2525input[type="file"] { 2634input[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],
2589fieldset[disabled] .form-control { 2701fieldset[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 {
2597textarea.form-control { 2709textarea.form-control {
2598 height: auto; 2710 height: auto;
2599} 2711}
2600input[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,
2752fieldset[disabled] .radio label,
2753fieldset[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}
2676input[type="radio"][disabled],
2677input[type="checkbox"][disabled],
2678input[type="radio"].disabled,
2679input[type="checkbox"].disabled,
2680fieldset[disabled] input[type="radio"],
2681fieldset[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,
2686fieldset[disabled] .radio-inline, 2788fieldset[disabled] .radio-inline,
2687fieldset[disabled] .checkbox-inline { 2789fieldset[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 {
2692fieldset[disabled] .radio label, 2794 margin-top: 0;
2693fieldset[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],
3048fieldset[disabled] .btn { 3149fieldset[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}
3055a.btn.disabled, 3156a.btn.disabled,
3056fieldset[disabled] a.btn { 3157fieldset[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,
3102fieldset[disabled] .btn-default:hover, 3199fieldset[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,
3159fieldset[disabled] .btn-primary:hover, 3252fieldset[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,
3216fieldset[disabled] .btn-success:hover, 3305fieldset[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,
3273fieldset[disabled] .btn-info:hover, 3358fieldset[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,
3330fieldset[disabled] .btn-warning:hover, 3411fieldset[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,
3387fieldset[disabled] .btn-danger:hover, 3464fieldset[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 {
3410fieldset[disabled] .btn-link { 3487fieldset[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 {
3428fieldset[disabled] .btn-link:hover, 3505fieldset[disabled] .btn-link:hover,
3429.btn-link[disabled]:focus, 3506.btn-link[disabled]:focus,
3430fieldset[disabled] .btn-link:focus { 3507fieldset[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}
4857a.label:hover, 4933a.label:hover,
4858a.label:focus { 4934a.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}
5265a.list-group-item,
5266button.list-group-item {
5267 color: #555;
5268}
5269a.list-group-item .list-group-item-heading,
5270button.list-group-item .list-group-item-heading {
5271 color: #333;
5272}
5273a.list-group-item:hover,
5274button.list-group-item:hover,
5275a.list-group-item:focus,
5276button.list-group-item:focus {
5277 color: #555;
5278 text-decoration: none;
5279 background-color: #f5f5f5;
5280}
5281button.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}
5382a.list-group-item,
5383button.list-group-item {
5384 color: #555;
5385}
5386a.list-group-item .list-group-item-heading,
5387button.list-group-item .list-group-item-heading {
5388 color: #333;
5389}
5390a.list-group-item:hover,
5391button.list-group-item:hover,
5392a.list-group-item:focus,
5393button.list-group-item:focus {
5394 color: #555;
5395 text-decoration: none;
5396 background-color: #f5f5f5;
5397}
5398button.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}
5859button.close { 5935button.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
17window.Entropy = new (function() { 17window.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){ 1function EOSbufferToPublic(pubBuf) {
2const createHash = require("create-hash"); 2 const Buffer = libs.buffer.Buffer;
3const base58 = require("bs58");
4const { Buffer } = require("buffer");
5
6function 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
13function bufferToPrivate(privBuf) { 9function 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
22module.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
34const Buffer = require('safe-buffer').Buffer
35
36module.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
182exports.byteLength = byteLength
183exports.toByteArray = toByteArray
184exports.fromByteArray = fromByteArray
185
186var lookup = []
187var revLookup = []
188var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
189
190var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
191for (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
198revLookup['-'.charCodeAt(0)] = 62
199revLookup['_'.charCodeAt(0)] = 63
200
201function 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
221function 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
228function _byteLength (b64, validLen, placeHoldersLen) {
229 return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
230}
231
232function 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
277function tripletToBase64 (num) {
278 return lookup[num >> 18 & 0x3F] +
279 lookup[num >> 12 & 0x3F] +
280 lookup[num >> 6 & 0x3F] +
281 lookup[num & 0x3F]
282}
283
284function 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
297function 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){
335var basex = require('base-x')
336var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
337
338module.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
352var base64 = require('base64-js')
353var ieee754 = require('ieee754')
354
355exports.Buffer = Buffer
356exports.SlowBuffer = SlowBuffer
357exports.INSPECT_MAX_BYTES = 50
358
359var K_MAX_LENGTH = 0x7fffffff
360exports.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 */
376Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
377
378if (!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
386function 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
397Object.defineProperty(Buffer.prototype, 'parent', {
398 enumerable: true,
399 get: function () {
400 if (!Buffer.isBuffer(this)) return undefined
401 return this.buffer
402 }
403})
404
405Object.defineProperty(Buffer.prototype, 'offset', {
406 enumerable: true,
407 get: function () {
408 if (!Buffer.isBuffer(this)) return undefined
409 return this.byteOffset
410 }
411})
412
413function 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
433function 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
447if (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
457Buffer.poolSize = 8192 // not used by this implementation
458
459function 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 **/
515Buffer.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
521Buffer.prototype.__proto__ = Uint8Array.prototype
522Buffer.__proto__ = Uint8Array
523
524function 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
532function 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 **/
552Buffer.alloc = function (size, fill, encoding) {
553 return alloc(size, fill, encoding)
554}
555
556function 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 * */
564Buffer.allocUnsafe = function (size) {
565 return allocUnsafe(size)
566}
567/**
568 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
569 */
570Buffer.allocUnsafeSlow = function (size) {
571 return allocUnsafe(size)
572}
573
574function 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
598function 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
607function 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
630function 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
655function 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
665function SlowBuffer (length) {
666 if (+length != length) { // eslint-disable-line eqeqeq
667 length = 0
668 }
669 return Buffer.alloc(+length)
670}
671
672Buffer.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
677Buffer.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
704Buffer.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
723Buffer.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
756function 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}
803Buffer.byteLength = byteLength
804
805function 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
881Buffer.prototype._isBuffer = true
882
883function swap (b, n, m) {
884 var i = b[n]
885 b[n] = b[m]
886 b[m] = i
887}
888
889Buffer.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
900Buffer.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
912Buffer.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
926Buffer.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
933Buffer.prototype.toLocaleString = Buffer.prototype.toString
934
935Buffer.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
941Buffer.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
949Buffer.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
1023function 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
1079function 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
1135Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
1136 return this.indexOf(val, byteOffset, encoding) !== -1
1137}
1138
1139Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
1140 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
1141}
1142
1143Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
1144 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
1145}
1146
1147function 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
1172function utf8Write (buf, string, offset, length) {
1173 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
1174}
1175
1176function asciiWrite (buf, string, offset, length) {
1177 return blitBuffer(asciiToBytes(string), buf, offset, length)
1178}
1179
1180function latin1Write (buf, string, offset, length) {
1181 return asciiWrite(buf, string, offset, length)
1182}
1183
1184function base64Write (buf, string, offset, length) {
1185 return blitBuffer(base64ToBytes(string), buf, offset, length)
1186}
1187
1188function ucs2Write (buf, string, offset, length) {
1189 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
1190}
1191
1192Buffer.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
1263Buffer.prototype.toJSON = function toJSON () {
1264 return {
1265 type: 'Buffer',
1266 data: Array.prototype.slice.call(this._arr || this, 0)
1267 }
1268}
1269
1270function 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
1278function 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
1354var MAX_ARGUMENTS_LENGTH = 0x1000
1355
1356function 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
1374function 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
1384function 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
1394function 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
1407function 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
1416Buffer.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 */
1446function 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
1451Buffer.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
1466Buffer.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
1482Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
1483 offset = offset >>> 0
1484 if (!noAssert) checkOffset(offset, 1, this.length)
1485 return this[offset]
1486}
1487
1488Buffer.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
1494Buffer.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
1500Buffer.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
1510Buffer.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
1520Buffer.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
1538Buffer.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
1556Buffer.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
1563Buffer.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
1570Buffer.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
1577Buffer.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
1587Buffer.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
1597Buffer.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
1603Buffer.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
1609Buffer.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
1615Buffer.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
1621function 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
1627Buffer.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
1646Buffer.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
1665Buffer.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
1673Buffer.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
1682Buffer.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
1691Buffer.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
1702Buffer.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
1713Buffer.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
1736Buffer.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
1759Buffer.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
1768Buffer.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
1777Buffer.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
1786Buffer.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
1797Buffer.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
1809function 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
1814function 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
1824Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
1825 return writeFloat(this, value, offset, true, noAssert)
1826}
1827
1828Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
1829 return writeFloat(this, value, offset, false, noAssert)
1830}
1831
1832function 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
1842Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
1843 return writeDouble(this, value, offset, true, noAssert)
1844}
1845
1846Buffer.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)
1851Buffer.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])
1901Buffer.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
1969var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
1970
1971function 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
1985function toHex (n) {
1986 if (n < 16) return '0' + n.toString(16)
1987 return n.toString(16)
1988}
1989
1990function 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
2070function 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
2079function 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
2095function base64ToBytes (str) {
2096 return base64.toByteArray(base64clean(str))
2097}
2098
2099function 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
2110function 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}
2115function 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){
2122var Buffer = require('safe-buffer').Buffer
2123var Transform = require('stream').Transform
2124var StringDecoder = require('string_decoder').StringDecoder
2125var inherits = require('inherits')
2126
2127function 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}
2142inherits(CipherBase, Transform)
2143
2144CipherBase.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
2159CipherBase.prototype.setAutoPadding = function () {}
2160CipherBase.prototype.getAuthTag = function () {
2161 throw new Error('trying to get auth tag in unsupported state')
2162}
2163
2164CipherBase.prototype.setAuthTag = function () {
2165 throw new Error('trying to set auth tag in unsupported state')
2166}
2167
2168CipherBase.prototype.setAAD = function () {
2169 throw new Error('trying to set aad in unsupported state')
2170}
2171
2172CipherBase.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}
2186CipherBase.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}
2196CipherBase.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
2204CipherBase.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
2220module.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
2248function isArray(arg) {
2249 if (Array.isArray) {
2250 return Array.isArray(arg);
2251 }
2252 return objectToString(arg) === '[object Array]';
2253}
2254exports.isArray = isArray;
2255
2256function isBoolean(arg) {
2257 return typeof arg === 'boolean';
2258}
2259exports.isBoolean = isBoolean;
2260
2261function isNull(arg) {
2262 return arg === null;
2263}
2264exports.isNull = isNull;
2265
2266function isNullOrUndefined(arg) {
2267 return arg == null;
2268}
2269exports.isNullOrUndefined = isNullOrUndefined;
2270
2271function isNumber(arg) {
2272 return typeof arg === 'number';
2273}
2274exports.isNumber = isNumber;
2275
2276function isString(arg) {
2277 return typeof arg === 'string';
2278}
2279exports.isString = isString;
2280
2281function isSymbol(arg) {
2282 return typeof arg === 'symbol';
2283}
2284exports.isSymbol = isSymbol;
2285
2286function isUndefined(arg) {
2287 return arg === void 0;
2288}
2289exports.isUndefined = isUndefined;
2290
2291function isRegExp(re) {
2292 return objectToString(re) === '[object RegExp]';
2293}
2294exports.isRegExp = isRegExp;
2295
2296function isObject(arg) {
2297 return typeof arg === 'object' && arg !== null;
2298}
2299exports.isObject = isObject;
2300
2301function isDate(d) {
2302 return objectToString(d) === '[object Date]';
2303}
2304exports.isDate = isDate;
2305
2306function isError(e) {
2307 return (objectToString(e) === '[object Error]' || e instanceof Error);
2308}
2309exports.isError = isError;
2310
2311function isFunction(arg) {
2312 return typeof arg === 'function';
2313}
2314exports.isFunction = isFunction;
2315
2316function 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}
2324exports.isPrimitive = isPrimitive;
2325
2326exports.isBuffer = Buffer.isBuffer;
2327
2328function 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'
2335var inherits = require('inherits')
2336var MD5 = require('md5.js')
2337var RIPEMD160 = require('ripemd160')
2338var sha = require('sha.js')
2339var Base = require('cipher-base')
2340
2341function Hash (hash) {
2342 Base.call(this, 'digest')
2343
2344 this._hash = hash
2345}
2346
2347inherits(Hash, Base)
2348
2349Hash.prototype._update = function (data) {
2350 this._hash.update(data)
2351}
2352
2353Hash.prototype._final = function () {
2354 return this._hash.digest()
2355}
2356
2357module.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
2387var objectCreate = Object.create || objectCreatePolyfill
2388var objectKeys = Object.keys || objectKeysPolyfill
2389var bind = Function.prototype.bind || functionBindPolyfill
2390
2391function 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}
2399module.exports = EventEmitter;
2400
2401// Backwards-compat with node 0.10.x
2402EventEmitter.EventEmitter = EventEmitter;
2403
2404EventEmitter.prototype._events = undefined;
2405EventEmitter.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.
2409var defaultMaxListeners = 10;
2410
2411var hasDefineProperty;
2412try {
2413 var o = {};
2414 if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });
2415 hasDefineProperty = o.x === 0;
2416} catch (err) { hasDefineProperty = false }
2417if (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.
2437EventEmitter.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
2444function $getMaxListeners(that) {
2445 if (that._maxListeners === undefined)
2446 return EventEmitter.defaultMaxListeners;
2447 return that._maxListeners;
2448}
2449
2450EventEmitter.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.
2459function 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}
2469function 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}
2479function 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}
2489function 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
2500function 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
2511EventEmitter.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
2568function _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
2635EventEmitter.prototype.addListener = function addListener(type, listener) {
2636 return _addListener(this, type, listener, false);
2637};
2638
2639EventEmitter.prototype.on = EventEmitter.prototype.addListener;
2640
2641EventEmitter.prototype.prependListener =
2642 function prependListener(type, listener) {
2643 return _addListener(this, type, listener, true);
2644 };
2645
2646function 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
2669function _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
2677EventEmitter.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
2684EventEmitter.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.
2693EventEmitter.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
2745EventEmitter.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
2796function _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
2812EventEmitter.prototype.listeners = function listeners(type) {
2813 return _listeners(this, type, true);
2814};
2815
2816EventEmitter.prototype.rawListeners = function rawListeners(type) {
2817 return _listeners(this, type, false);
2818};
2819
2820EventEmitter.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
2828EventEmitter.prototype.listenerCount = listenerCount;
2829function 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
2845EventEmitter.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().
2850function 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
2856function 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
2863function 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
2871function objectCreatePolyfill(proto) {
2872 var F = function() {};
2873 F.prototype = proto;
2874 return new F;
2875}
2876function 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}
2883function 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'
2892var Buffer = require('safe-buffer').Buffer
2893var Transform = require('stream').Transform
2894var inherits = require('inherits')
2895
2896function 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
2902function 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
2913inherits(HashBase, Transform)
2914
2915HashBase.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
2926HashBase.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
2937HashBase.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
2962HashBase.prototype._update = function () {
2963 throw new Error('_update is not implemented')
2964}
2965
2966HashBase.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
2981HashBase.prototype._digest = function () {
2982 throw new Error('_digest is not implemented')
2983}
2984
2985module.exports = HashBase
2986
2987},{"inherits":13,"safe-buffer":34,"stream":43}],12:[function(require,module,exports){
2988exports.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
3021exports.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){
3074if (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
3108module.exports = function (obj) {
3109 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
3110}
3111
3112function 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.
3117function 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){
3122var toString = {}.toString;
3123
3124module.exports = Array.isArray || function (arr) {
3125 return toString.call(arr) == '[object Array]';
3126};
3127
3128},{}],16:[function(require,module,exports){
3129'use strict'
3130var inherits = require('inherits')
3131var HashBase = require('hash-base')
3132var Buffer = require('safe-buffer').Buffer
3133
3134var ARRAY16 = new Array(16)
3135
3136function 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
3146inherits(MD5, HashBase)
3147
3148MD5.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
3231MD5.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
3254function rotl (x, n) {
3255 return (x << n) | (x >>> (32 - n))
3256}
3257
3258function fnF (a, b, c, d, m, k, s) {
3259 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0
3260}
3261
3262function fnG (a, b, c, d, m, k, s) {
3263 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0
3264}
3265
3266function fnH (a, b, c, d, m, k, s) {
3267 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0
3268}
3269
3270function fnI (a, b, c, d, m, k, s) {
3271 return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0
3272}
3273
3274module.exports = MD5
3275
3276},{"hash-base":11,"inherits":13,"safe-buffer":34}],17:[function(require,module,exports){
3277(function (process){
3278'use strict';
3279
3280if (!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
3288function 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
3326var 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
3333var cachedSetTimeout;
3334var cachedClearTimeout;
3335
3336function defaultSetTimout() {
3337 throw new Error('setTimeout has not been defined');
3338}
3339function 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} ())
3362function 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}
3387function 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}
3414var queue = [];
3415var draining = false;
3416var currentQueue;
3417var queueIndex = -1;
3418
3419function 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
3434function 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
3458process.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
3472function Item(fun, array) {
3473 this.fun = fun;
3474 this.array = array;
3475}
3476Item.prototype.run = function () {
3477 this.fun.apply(null, this.array);
3478};
3479process.title = 'browser';
3480process.browser = true;
3481process.env = {};
3482process.argv = [];
3483process.version = ''; // empty string to avoid regexp issues
3484process.versions = {};
3485
3486function noop() {}
3487
3488process.on = noop;
3489process.addListener = noop;
3490process.once = noop;
3491process.off = noop;
3492process.removeListener = noop;
3493process.removeAllListeners = noop;
3494process.emit = noop;
3495process.prependListener = noop;
3496process.prependOnceListener = noop;
3497
3498process.listeners = function (name) { return [] }
3499
3500process.binding = function (name) {
3501 throw new Error('process.binding is not supported');
3502};
3503
3504process.cwd = function () { return '/' };
3505process.chdir = function (dir) {
3506 throw new Error('process.chdir is not supported');
3507};
3508process.umask = function() { return 0; };
3509
3510},{}],19:[function(require,module,exports){
3511module.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
3544var pna = require('process-nextick-args');
3545/*</replacement>*/
3546
3547/*<replacement>*/
3548var 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
3556module.exports = Duplex;
3557
3558/*<replacement>*/
3559var util = require('core-util-is');
3560util.inherits = require('inherits');
3561/*</replacement>*/
3562
3563var Readable = require('./_stream_readable');
3564var Writable = require('./_stream_writable');
3565
3566util.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
3577function 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
3593Object.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
3604function 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
3614function onEndNT(self) {
3615 self.end();
3616}
3617
3618Object.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
3639Duplex.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
3673module.exports = PassThrough;
3674
3675var Transform = require('./_stream_transform');
3676
3677/*<replacement>*/
3678var util = require('core-util-is');
3679util.inherits = require('inherits');
3680/*</replacement>*/
3681
3682util.inherits(PassThrough, Transform);
3683
3684function PassThrough(options) {
3685 if (!(this instanceof PassThrough)) return new PassThrough(options);
3686
3687 Transform.call(this, options);
3688}
3689
3690PassThrough.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
3720var pna = require('process-nextick-args');
3721/*</replacement>*/
3722
3723module.exports = Readable;
3724
3725/*<replacement>*/
3726var isArray = require('isarray');
3727/*</replacement>*/
3728
3729/*<replacement>*/
3730var Duplex;
3731/*</replacement>*/
3732
3733Readable.ReadableState = ReadableState;
3734
3735/*<replacement>*/
3736var EE = require('events').EventEmitter;
3737
3738var EElistenerCount = function (emitter, type) {
3739 return emitter.listeners(type).length;
3740};
3741/*</replacement>*/
3742
3743/*<replacement>*/
3744var Stream = require('./internal/streams/stream');
3745/*</replacement>*/
3746
3747/*<replacement>*/
3748
3749var Buffer = require('safe-buffer').Buffer;
3750var OurUint8Array = global.Uint8Array || function () {};
3751function _uint8ArrayToBuffer(chunk) {
3752 return Buffer.from(chunk);
3753}
3754function _isUint8Array(obj) {
3755 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
3756}
3757
3758/*</replacement>*/
3759
3760/*<replacement>*/
3761var util = require('core-util-is');
3762util.inherits = require('inherits');
3763/*</replacement>*/
3764
3765/*<replacement>*/
3766var debugUtil = require('util');
3767var debug = void 0;
3768if (debugUtil && debugUtil.debuglog) {
3769 debug = debugUtil.debuglog('stream');
3770} else {
3771 debug = function () {};
3772}
3773/*</replacement>*/
3774
3775var BufferList = require('./internal/streams/BufferList');
3776var destroyImpl = require('./internal/streams/destroy');
3777var StringDecoder;
3778
3779util.inherits(Readable, Stream);
3780
3781var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
3782
3783function 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
3795function 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
3872function 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
3891Object.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
3911Readable.prototype.destroy = destroyImpl.destroy;
3912Readable.prototype._undestroy = destroyImpl.undestroy;
3913Readable.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.
3922Readable.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()
3943Readable.prototype.unshift = function (chunk) {
3944 return readableAddChunk(this, chunk, null, true, false);
3945};
3946
3947function 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
3983function 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
3997function 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.
4012function needMoreData(state) {
4013 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
4014}
4015
4016Readable.prototype.isPaused = function () {
4017 return this._readableState.flowing === false;
4018};
4019
4020// backwards compatibility.
4021Readable.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
4029var MAX_HWM = 0x800000;
4030function 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.
4049function 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.
4068Readable.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
4168function 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.
4186function 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
4196function 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.
4208function maybeReadMore(stream, state) {
4209 if (!state.readingMore) {
4210 state.readingMore = true;
4211 pna.nextTick(maybeReadMore_, stream, state);
4212 }
4213}
4214
4215function 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.
4231Readable.prototype._read = function (n) {
4232 this.emit('error', new Error('_read() is not implemented'));
4233};
4234
4235Readable.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
4370function 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
4382Readable.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
4434Readable.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};
4455Readable.prototype.addListener = Readable.prototype.on;
4456
4457function 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.
4464Readable.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
4474function resume(stream, state) {
4475 if (!state.resumeScheduled) {
4476 state.resumeScheduled = true;
4477 pna.nextTick(resume_, stream, state);
4478 }
4479}
4480
4481function 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
4494Readable.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
4504function 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.
4513Readable.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
4573Object.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.
4584Readable._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.
4590function 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.
4610function 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.
4630function 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.
4659function 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
4686function 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
4699function 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
4708function 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
4781module.exports = Transform;
4782
4783var Duplex = require('./_stream_duplex');
4784
4785/*<replacement>*/
4786var util = require('core-util-is');
4787util.inherits = require('inherits');
4788/*</replacement>*/
4789
4790util.inherits(Transform, Duplex);
4791
4792function 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
4817function 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
4849function 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
4861Transform.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.
4876Transform.prototype._transform = function (chunk, encoding, cb) {
4877 throw new Error('_transform() is not implemented');
4878};
4879
4880Transform.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.
4894Transform.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
4907Transform.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
4916function 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
4961var pna = require('process-nextick-args');
4962/*</replacement>*/
4963
4964module.exports = Writable;
4965
4966/* <replacement> */
4967function 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
4976function 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>*/
4988var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
4989/*</replacement>*/
4990
4991/*<replacement>*/
4992var Duplex;
4993/*</replacement>*/
4994
4995Writable.WritableState = WritableState;
4996
4997/*<replacement>*/
4998var util = require('core-util-is');
4999util.inherits = require('inherits');
5000/*</replacement>*/
5001
5002/*<replacement>*/
5003var internalUtil = {
5004 deprecate: require('util-deprecate')
5005};
5006/*</replacement>*/
5007
5008/*<replacement>*/
5009var Stream = require('./internal/streams/stream');
5010/*</replacement>*/
5011
5012/*<replacement>*/
5013
5014var Buffer = require('safe-buffer').Buffer;
5015var OurUint8Array = global.Uint8Array || function () {};
5016function _uint8ArrayToBuffer(chunk) {
5017 return Buffer.from(chunk);
5018}
5019function _isUint8Array(obj) {
5020 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
5021}
5022
5023/*</replacement>*/
5024
5025var destroyImpl = require('./internal/streams/destroy');
5026
5027util.inherits(Writable, Stream);
5028
5029function nop() {}
5030
5031function 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
5142WritableState.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.
5164var realHasInstance;
5165if (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
5181function 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.
5214Writable.prototype.pipe = function () {
5215 this.emit('error', new Error('Cannot pipe, not readable'));
5216};
5217
5218function 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.
5228function 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
5245Writable.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
5271Writable.prototype.cork = function () {
5272 var state = this._writableState;
5273
5274 state.corked++;
5275};
5276
5277Writable.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
5287Writable.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
5295function 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
5302Object.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.
5315function 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
5354function 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
5363function 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
5387function onwriteStateUpdate(state) {
5388 state.writing = false;
5389 state.writecb = null;
5390 state.length -= state.writelen;
5391 state.writelen = 0;
5392}
5393
5394function 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
5419function 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.
5429function 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
5437function 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
5498Writable.prototype._write = function (chunk, encoding, cb) {
5499 cb(new Error('_write() is not implemented'));
5500};
5501
5502Writable.prototype._writev = null;
5503
5504Writable.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
5528function needFinish(state) {
5529 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
5530}
5531function 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}
5542function 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
5555function 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
5567function 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
5577function 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
5593Object.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
5613Writable.prototype.destroy = destroyImpl.destroy;
5614Writable.prototype._undestroy = destroyImpl.undestroy;
5615Writable.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
5623function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
5624
5625var Buffer = require('safe-buffer').Buffer;
5626var util = require('util');
5627
5628function copyBuffer(src, target, offset) {
5629 src.copy(target, offset);
5630}
5631
5632module.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
5694if (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
5705var pna = require('process-nextick-args');
5706/*</replacement>*/
5707
5708// undocumented cb() API, needed for core, not for public API
5709function 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
5750function 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
5767function emitErrorNT(self, err) {
5768 self.emit('error', err);
5769}
5770
5771module.exports = {
5772 destroy: destroy,
5773 undestroy: undestroy
5774};
5775},{"process-nextick-args":17}],27:[function(require,module,exports){
5776module.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
5804var Buffer = require('safe-buffer').Buffer;
5805/*</replacement>*/
5806
5807var 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
5817function _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
5847function 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.
5856exports.StringDecoder = StringDecoder;
5857function 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
5885StringDecoder.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
5901StringDecoder.prototype.end = utf8End;
5902
5903// Returns only complete characters in a Buffer
5904StringDecoder.prototype.text = utf8Text;
5905
5906// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
5907StringDecoder.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.
5918function 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.
5926function 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.
5959function 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.
5979function 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.
5994function 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.
6005function 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.
6015function 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.
6038function 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
6047function 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
6061function 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)
6068function simpleWrite(buf) {
6069 return buf.toString(this.encoding);
6070}
6071
6072function simpleEnd(buf) {
6073 return buf && buf.length ? this.write(buf) : '';
6074}
6075},{"safe-buffer":34}],29:[function(require,module,exports){
6076module.exports = require('./readable').PassThrough
6077
6078},{"./readable":30}],30:[function(require,module,exports){
6079exports = module.exports = require('./lib/_stream_readable.js');
6080exports.Stream = exports;
6081exports.Readable = exports;
6082exports.Writable = require('./lib/_stream_writable.js');
6083exports.Duplex = require('./lib/_stream_duplex.js');
6084exports.Transform = require('./lib/_stream_transform.js');
6085exports.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){
6088module.exports = require('./readable').Transform
6089
6090},{"./readable":30}],32:[function(require,module,exports){
6091module.exports = require('./lib/_stream_writable.js');
6092
6093},{"./lib/_stream_writable.js":24}],33:[function(require,module,exports){
6094'use strict'
6095var Buffer = require('buffer').Buffer
6096var inherits = require('inherits')
6097var HashBase = require('hash-base')
6098
6099var ARRAY16 = new Array(16)
6100
6101var 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
6109var 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
6117var 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
6125var 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
6133var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]
6134var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]
6135
6136function 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
6147inherits(RIPEMD160, HashBase)
6148
6149RIPEMD160.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
6208RIPEMD160.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
6232function rotl (x, n) {
6233 return (x << n) | (x >>> (32 - n))
6234}
6235
6236function fn1 (a, b, c, d, e, m, k, s) {
6237 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
6238}
6239
6240function 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
6244function fn3 (a, b, c, d, e, m, k, s) {
6245 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
6246}
6247
6248function 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
6252function fn5 (a, b, c, d, e, m, k, s) {
6253 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
6254}
6255
6256module.exports = RIPEMD160
6257
6258},{"buffer":6,"hash-base":11,"inherits":13}],34:[function(require,module,exports){
6259/* eslint-disable node/no-deprecated-api */
6260var buffer = require('buffer')
6261var Buffer = buffer.Buffer
6262
6263// alternative to using Object.keys for old browsers
6264function copyProps (src, dst) {
6265 for (var key in src) {
6266 dst[key] = src[key]
6267 }
6268}
6269if (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
6277function SafeBuffer (arg, encodingOrOffset, length) {
6278 return Buffer(arg, encodingOrOffset, length)
6279}
6280
6281// Copy static methods from Buffer
6282copyProps(Buffer, SafeBuffer)
6283
6284SafeBuffer.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
6291SafeBuffer.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
6308SafeBuffer.allocUnsafe = function (size) {
6309 if (typeof size !== 'number') {
6310 throw new TypeError('Argument must be a number')
6311 }
6312 return Buffer(size)
6313}
6314
6315SafeBuffer.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){
6323var Buffer = require('safe-buffer').Buffer
6324
6325// prototype class for hash functions
6326function Hash (blockSize, finalSize) {
6327 this._block = Buffer.alloc(blockSize)
6328 this._finalSize = finalSize
6329 this._blockSize = blockSize
6330 this._len = 0
6331}
6332
6333Hash.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
6364Hash.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
6399Hash.prototype._update = function () {
6400 throw new Error('_update must be implemented by subclass')
6401}
6402
6403module.exports = Hash
6404
6405},{"safe-buffer":34}],36:[function(require,module,exports){
6406var 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
6415exports.sha = require('./sha')
6416exports.sha1 = require('./sha1')
6417exports.sha224 = require('./sha224')
6418exports.sha256 = require('./sha256')
6419exports.sha384 = require('./sha384')
6420exports.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
6431var inherits = require('inherits')
6432var Hash = require('./hash')
6433var Buffer = require('safe-buffer').Buffer
6434
6435var K = [
6436 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
6437]
6438
6439var W = new Array(80)
6440
6441function Sha () {
6442 this.init()
6443 this._w = W
6444
6445 Hash.call(this, 64, 56)
6446}
6447
6448inherits(Sha, Hash)
6449
6450Sha.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
6460function rotl5 (num) {
6461 return (num << 5) | (num >>> 27)
6462}
6463
6464function rotl30 (num) {
6465 return (num << 30) | (num >>> 2)
6466}
6467
6468function 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
6474Sha.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
6504Sha.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
6516module.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
6528var inherits = require('inherits')
6529var Hash = require('./hash')
6530var Buffer = require('safe-buffer').Buffer
6531
6532var K = [
6533 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
6534]
6535
6536var W = new Array(80)
6537
6538function Sha1 () {
6539 this.init()
6540 this._w = W
6541
6542 Hash.call(this, 64, 56)
6543}
6544
6545inherits(Sha1, Hash)
6546
6547Sha1.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
6557function rotl1 (num) {
6558 return (num << 1) | (num >>> 31)
6559}
6560
6561function rotl5 (num) {
6562 return (num << 5) | (num >>> 27)
6563}
6564
6565function rotl30 (num) {
6566 return (num << 30) | (num >>> 2)
6567}
6568
6569function 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
6575Sha1.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
6605Sha1.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
6617module.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
6628var inherits = require('inherits')
6629var Sha256 = require('./sha256')
6630var Hash = require('./hash')
6631var Buffer = require('safe-buffer').Buffer
6632
6633var W = new Array(64)
6634
6635function Sha224 () {
6636 this.init()
6637
6638 this._w = W // new Array(64)
6639
6640 Hash.call(this, 64, 56)
6641}
6642
6643inherits(Sha224, Sha256)
6644
6645Sha224.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
6658Sha224.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
6672module.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
6683var inherits = require('inherits')
6684var Hash = require('./hash')
6685var Buffer = require('safe-buffer').Buffer
6686
6687var 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
6706var W = new Array(64)
6707
6708function Sha256 () {
6709 this.init()
6710
6711 this._w = W // new Array(64)
6712
6713 Hash.call(this, 64, 56)
6714}
6715
6716inherits(Sha256, Hash)
6717
6718Sha256.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
6731function ch (x, y, z) {
6732 return z ^ (x & (y ^ z))
6733}
6734
6735function maj (x, y, z) {
6736 return (x & y) | (z & (x | y))
6737}
6738
6739function sigma0 (x) {
6740 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
6741}
6742
6743function sigma1 (x) {
6744 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
6745}
6746
6747function gamma0 (x) {
6748 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
6749}
6750
6751function gamma1 (x) {
6752 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
6753}
6754
6755Sha256.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
6794Sha256.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
6809module.exports = Sha256
6810
6811},{"./hash":35,"inherits":13,"safe-buffer":34}],41:[function(require,module,exports){
6812var inherits = require('inherits')
6813var SHA512 = require('./sha512')
6814var Hash = require('./hash')
6815var Buffer = require('safe-buffer').Buffer
6816
6817var W = new Array(160)
6818
6819function Sha384 () {
6820 this.init()
6821 this._w = W
6822
6823 Hash.call(this, 128, 112)
6824}
6825
6826inherits(Sha384, SHA512)
6827
6828Sha384.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
6850Sha384.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
6868module.exports = Sha384
6869
6870},{"./hash":35,"./sha512":42,"inherits":13,"safe-buffer":34}],42:[function(require,module,exports){
6871var inherits = require('inherits')
6872var Hash = require('./hash')
6873var Buffer = require('safe-buffer').Buffer
6874
6875var 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
6918var W = new Array(160)
6919
6920function Sha512 () {
6921 this.init()
6922 this._w = W
6923
6924 Hash.call(this, 128, 112)
6925}
6926
6927inherits(Sha512, Hash)
6928
6929Sha512.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
6951function Ch (x, y, z) {
6952 return z ^ (x & (y ^ z))
6953}
6954
6955function maj (x, y, z) {
6956 return (x & y) | (z & (x | y))
6957}
6958
6959function sigma0 (x, xl) {
6960 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
6961}
6962
6963function sigma1 (x, xl) {
6964 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
6965}
6966
6967function Gamma0 (x, xl) {
6968 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
6969}
6970
6971function Gamma0l (x, xl) {
6972 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
6973}
6974
6975function Gamma1 (x, xl) {
6976 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
6977}
6978
6979function Gamma1l (x, xl) {
6980 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
6981}
6982
6983function getCarry (a, b) {
6984 return (a >>> 0) < (b >>> 0) ? 1 : 0
6985}
6986
6987Sha512.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
7110Sha512.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
7130module.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
7154module.exports = Stream;
7155
7156var EE = require('events').EventEmitter;
7157var inherits = require('inherits');
7158
7159inherits(Stream, EE);
7160Stream.Readable = require('readable-stream/readable.js');
7161Stream.Writable = require('readable-stream/writable.js');
7162Stream.Duplex = require('readable-stream/duplex.js');
7163Stream.Transform = require('readable-stream/transform.js');
7164Stream.PassThrough = require('readable-stream/passthrough.js');
7165
7166// Backwards-compat with node 0.4.x
7167Stream.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
7174function Stream() {
7175 EE.call(this);
7176}
7177
7178Stream.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){
7262arguments[4][28][0].apply(exports,arguments)
7263},{"dup":28,"safe-buffer":34}],45:[function(require,module,exports){
7264(function (setImmediate,clearImmediate){
7265var nextTick = require('process/browser.js').nextTick;
7266var apply = Function.prototype.apply;
7267var slice = Array.prototype.slice;
7268var immediateIds = {};
7269var nextImmediateId = 0;
7270
7271// DOM APIs, for completeness
7272
7273exports.setTimeout = function() {
7274 return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);
7275};
7276exports.setInterval = function() {
7277 return new Timeout(apply.call(setInterval, window, arguments), clearInterval);
7278};
7279exports.clearTimeout =
7280exports.clearInterval = function(timeout) { timeout.close(); };
7281
7282function Timeout(id, clearFn) {
7283 this._id = id;
7284 this._clearFn = clearFn;
7285}
7286Timeout.prototype.unref = Timeout.prototype.ref = function() {};
7287Timeout.prototype.close = function() {
7288 this._clearFn.call(window, this._id);
7289};
7290
7291// Does not start the time, just sets up the members needed.
7292exports.enroll = function(item, msecs) {
7293 clearTimeout(item._idleTimeoutId);
7294 item._idleTimeout = msecs;
7295};
7296
7297exports.unenroll = function(item) {
7298 clearTimeout(item._idleTimeoutId);
7299 item._idleTimeout = -1;
7300};
7301
7302exports._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.
7315exports.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
7338exports.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
7349module.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
7369function 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
7400function 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;
diff --git a/tests/spec/tests.js b/tests/spec/tests.js
index d17c8ef..78110af 100644
--- a/tests/spec/tests.js
+++ b/tests/spec/tests.js
@@ -2285,6 +2285,27 @@ it('Allows selection of Scribe', function(done) {
2285 }; 2285 };
2286 testNetwork(done, params); 2286 testNetwork(done, params);
2287}); 2287});
2288it('Allows selection of Binance Smart Chain', function(done) {
2289 var params = {
2290 selectText: "BSC - Binance Smart Chain",
2291 phrase: "abandon abandon ability",
2292 firstAddress: "0xe5815d5902Ad612d49283DEdEc02100Bd44C2772",
2293 firstPubKey: "0x03e723e5b3aa7d72213f01139aa4783e1b34f74e1a04534e3fd8e29bfe2768af8a",
2294 firstPrivKey: "0x8f253078b73d7498302bb78c171b23ce7a8fb511987d2b2702b731638a4a15e7",
2295 };
2296 testNetwork(done, params);
2297});
2298
2299it('Allows selection of TRX on Tron', function(done) {
2300 var params = {
2301 selectText: "TRX - Tron",
2302 phrase: "abandon abandon ability",
2303 firstAddress: "TA891Fu7vVz595BGQpNX2MCzr7yBcxuoC7",
2304 firstPubKey: "0337bbb060e6166066f7f9e59e52f67bc23a6c9d0cbc815b82b6d89112444842e7",
2305 firstPrivKey: "3a8fbd0379a815764979de86a3fcda759cb62d49e784e7b2a9a03206c90cfae2",
2306 };
2307 testNetwork(done, params);
2308});
2288 2309
2289// BIP39 seed is set from phrase 2310// BIP39 seed is set from phrase
2290it('Sets the bip39 seed from the prhase', function(done) { 2311it('Sets the bip39 seed from the prhase', function(done) {
@@ -3130,7 +3151,7 @@ it("Shows the number of bits of entropy for 4 bits of binary", function(done) {
3130 testEntropyBits(done, "0000", "4"); 3151 testEntropyBits(done, "0000", "4");
3131}); 3152});
3132it("Shows the number of bits of entropy for 1 character of base 6 (dice)", function(done) { 3153it("Shows the number of bits of entropy for 1 character of base 6 (dice)", function(done) {
3133 // 6 in card is 0 in base 6, 0 in base 6 is 2.6 bits (rounded down to 2 bits) 3154 // 6 in card is 0 in base 6, 0 is mapped to 00 by entropy.js
3134 testEntropyBits(done, "6", "2"); 3155 testEntropyBits(done, "6", "2");
3135}); 3156});
3136it("Shows the number of bits of entropy for 1 character of base 10 with 3 bits", function(done) { 3157it("Shows the number of bits of entropy for 1 character of base 10 with 3 bits", function(done) {
@@ -3138,13 +3159,15 @@ it("Shows the number of bits of entropy for 1 character of base 10 with 3 bits",
3138 testEntropyBits(done, "7", "3"); 3159 testEntropyBits(done, "7", "3");
3139}); 3160});
3140it("Shows the number of bits of entropy for 1 character of base 10 with 4 bis", function(done) { 3161it("Shows the number of bits of entropy for 1 character of base 10 with 4 bis", function(done) {
3141 testEntropyBits(done, "8", "4"); 3162 // 8 in base 10 is mapped to 0 by entropy.js
3163 testEntropyBits(done, "8", "1");
3142}); 3164});
3143it("Shows the number of bits of entropy for 1 character of hex", function(done) { 3165it("Shows the number of bits of entropy for 1 character of hex", function(done) {
3144 testEntropyBits(done, "F", "4"); 3166 testEntropyBits(done, "F", "4");
3145}); 3167});
3146it("Shows the number of bits of entropy for 2 characters of base 10", function(done) { 3168it("Shows the number of bits of entropy for 2 characters of base 10", function(done) {
3147 testEntropyBits(done, "29", "6"); 3169 // 2 as base 10 is binary 010, 9 is mapped to binary 1 by entropy.js
3170 testEntropyBits(done, "29", "4");
3148}); 3171});
3149it("Shows the number of bits of entropy for 2 characters of hex", function(done) { 3172it("Shows the number of bits of entropy for 2 characters of hex", function(done) {
3150 testEntropyBits(done, "0A", "8"); 3173 testEntropyBits(done, "0A", "8");
@@ -3169,17 +3192,17 @@ it("Shows the number of bits of entropy for 4 characters of hex with leading zer
3169 testEntropyBits(done, "000A", "16"); 3192 testEntropyBits(done, "000A", "16");
3170}); 3193});
3171it("Shows the number of bits of entropy for 4 characters of base 6", function(done) { 3194it("Shows the number of bits of entropy for 4 characters of base 6", function(done) {
3172 testEntropyBits(done, "5555", "11"); 3195 // 5 in base 6 is mapped to binary 1
3196 testEntropyBits(done, "5555", "4");
3173}); 3197});
3174it("Shows the number of bits of entropy for 4 characters of base 6 dice", function(done) { 3198it("Shows the number of bits of entropy for 4 characters of base 6 dice", function(done) {
3175 // uses dice, so entropy is actually 0000 in base 6, which is 4 lots of 3199 // uses dice, so entropy is actually 0000 in base 6, which is 4 lots of
3176 // 2.58 bits, which is 10.32 bits (rounded down to 10 bits) 3200 // binary 00
3177 testEntropyBits(done, "6666", "10"); 3201 testEntropyBits(done, "6666", "8");
3178}); 3202});
3179it("Shows the number of bits of entropy for 4 charactes of base 10", function(done) { 3203it("Shows the number of bits of entropy for 4 charactes of base 10", function(done) {
3180 // Uses base 10, which is 4 lots of 3.32 bits, which is 13.3 bits (rounded 3204 // 2 in base 10 is binary 010 and 7 is binary 111 so is 4 events of 3 bits
3181 // down to 13) 3205 testEntropyBits(done, "2227", "12");
3182 testEntropyBits(done, "2227", "13");
3183}); 3206});
3184it("Shows the number of bits of entropy for 4 characters of hex with 2 leading zeros", function(done) { 3207it("Shows the number of bits of entropy for 4 characters of hex with 2 leading zeros", function(done) {
3185 testEntropyBits(done, "222F", "16"); 3208 testEntropyBits(done, "222F", "16");
@@ -3188,13 +3211,16 @@ it("Shows the number of bits of entropy for 4 characters of hex starting with F"
3188 testEntropyBits(done, "FFFF", "16"); 3211 testEntropyBits(done, "FFFF", "16");
3189}); 3212});
3190it("Shows the number of bits of entropy for 10 characters of base 10", function(done) { 3213it("Shows the number of bits of entropy for 10 characters of base 10", function(done) {
3191 // 10 events at 3.32 bits per event 3214 // 10 events with 3 bits for each event
3192 testEntropyBits(done, "0000101017", "33"); 3215 testEntropyBits(done, "0000101017", "30");
3216});
3217it("Shows the number of bits of entropy for 10 characters of base 10 account for bias", function(done) {
3218 // 9 events with 3 bits per event and 1 event with 1 bit per event
3219 testEntropyBits(done, "0000101018", "28");
3193}); 3220});
3194it("Shows the number of bits of entropy for a full deck of cards", function(done) { 3221it("Shows the number of bits of entropy for a full deck of cards", function(done) {
3195 // cards are not replaced, so a full deck is not 52^52 entropy which is 296 3222 // removing bias is 32*5 + 16*4 + 4*2
3196 // bits, it's 52!, which is 225 bits 3223 testEntropyBits(done, "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks", "232");
3197 testEntropyBits(done, "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks", "225");
3198}); 3224});
3199 3225
3200it("Shows details about the entered entropy", function(done) { 3226it("Shows details about the entered entropy", function(done) {
@@ -3320,7 +3346,7 @@ it("Shows details about the entered entropy", function(done) {
3320 entropy: "7d", 3346 entropy: "7d",
3321 type: "card", 3347 type: "card",
3322 events: "1", 3348 events: "1",
3323 bits: "4", 3349 bits: "5",
3324 words: 0, 3350 words: 0,
3325 strength: "less than a second", 3351 strength: "less than a second",
3326 } 3352 }
@@ -3332,7 +3358,7 @@ it("Shows details about the entered entropy", function(done) {
3332 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks", 3358 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
3333 type: "card (full deck)", 3359 type: "card (full deck)",
3334 events: "52", 3360 events: "52",
3335 bits: "225", 3361 bits: "232",
3336 words: 21, 3362 words: 21,
3337 strength: "centuries", 3363 strength: "centuries",
3338 } 3364 }
@@ -3344,7 +3370,7 @@ it("Shows details about the entered entropy", function(done) {
3344 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks3d", 3370 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks3d",
3345 type: "card (full deck, 1 duplicate: 3d)", 3371 type: "card (full deck, 1 duplicate: 3d)",
3346 events: "53", 3372 events: "53",
3347 bits: "254", 3373 bits: "237",
3348 words: 21, 3374 words: 21,
3349 strength: "centuries", 3375 strength: "centuries",
3350 } 3376 }
@@ -3356,7 +3382,7 @@ it("Shows details about the entered entropy", function(done) {
3356 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqs3d4d", 3382 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqs3d4d",
3357 type: "card (2 duplicates: 3d 4d, 1 missing: KS)", 3383 type: "card (2 duplicates: 3d 4d, 1 missing: KS)",
3358 events: "53", 3384 events: "53",
3359 bits: "254", 3385 bits: "240",
3360 words: 21, 3386 words: 21,
3361 strength: "centuries", 3387 strength: "centuries",
3362 } 3388 }
@@ -3368,8 +3394,8 @@ it("Shows details about the entered entropy", function(done) {
3368 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqs3d4d5d6d", 3394 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqs3d4d5d6d",
3369 type: "card (4 duplicates: 3d 4d 5d..., 1 missing: KS)", 3395 type: "card (4 duplicates: 3d 4d 5d..., 1 missing: KS)",
3370 events: "55", 3396 events: "55",
3371 bits: "264", 3397 bits: "250",
3372 words: 24, 3398 words: 21,
3373 strength: "centuries", 3399 strength: "centuries",
3374 } 3400 }
3375 ); 3401 );
@@ -3377,13 +3403,12 @@ it("Shows details about the entered entropy", function(done) {
3377it("Shows details about the entered entropy", function(done) { 3403it("Shows details about the entered entropy", function(done) {
3378 testEntropyFeedback(done, 3404 testEntropyFeedback(done,
3379 // Next test was throwing uncaught error in zxcvbn 3405 // Next test was throwing uncaught error in zxcvbn
3380 // Also tests 451 bits, ie Math.log2(52!)*2 = 225.58 * 2
3381 { 3406 {
3382 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsksac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks", 3407 entropy: "ac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsksac2c3c4c5c6c7c8c9ctcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
3383 type: "card (full deck, 52 duplicates: ac 2c 3c...)", 3408 type: "card (full deck, 52 duplicates: ac 2c 3c...)",
3384 events: "104", 3409 events: "104",
3385 bits: "499", 3410 bits: "464",
3386 words: 45, 3411 words: 42,
3387 strength: "centuries", 3412 strength: "centuries",
3388 } 3413 }
3389 ); 3414 );
@@ -3395,7 +3420,7 @@ it("Shows details about the entered entropy", function(done) {
3395 entropy: "asAS", 3420 entropy: "asAS",
3396 type: "card (1 duplicate: AS)", 3421 type: "card (1 duplicate: AS)",
3397 events: "2", 3422 events: "2",
3398 bits: "9", 3423 bits: "8",
3399 words: 0, 3424 words: 0,
3400 strength: "less than a second", 3425 strength: "less than a second",
3401 } 3426 }
@@ -3407,7 +3432,7 @@ it("Shows details about the entered entropy", function(done) {
3407 entropy: "ASas", 3432 entropy: "ASas",
3408 type: "card (1 duplicate: as)", 3433 type: "card (1 duplicate: as)",
3409 events: "2", 3434 events: "2",
3410 bits: "9", 3435 bits: "8",
3411 words: 0, 3436 words: 0,
3412 strength: "less than a second", 3437 strength: "less than a second",
3413 } 3438 }
@@ -3420,8 +3445,8 @@ it("Shows details about the entered entropy", function(done) {
3420 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks", 3445 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d5d6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
3421 type: "card (1 missing: 9C)", 3446 type: "card (1 missing: 9C)",
3422 events: "51", 3447 events: "51",
3423 bits: "221", 3448 bits: "227",
3424 words: 18, 3449 words: 21,
3425 strength: "centuries", 3450 strength: "centuries",
3426 } 3451 }
3427 ); 3452 );
@@ -3432,7 +3457,7 @@ it("Shows details about the entered entropy", function(done) {
3432 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d 6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks", 3457 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d 6d7d8d9dtdjdqdkdah2h3h4h5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
3433 type: "card (2 missing: 9C 5D)", 3458 type: "card (2 missing: 9C 5D)",
3434 events: "50", 3459 events: "50",
3435 bits: "216", 3460 bits: "222",
3436 words: 18, 3461 words: 18,
3437 strength: "centuries", 3462 strength: "centuries",
3438 } 3463 }
@@ -3444,7 +3469,7 @@ it("Shows details about the entered entropy", function(done) {
3444 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d 6d7d8d9dtdjd kdah2h3h 5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks", 3469 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d 6d7d8d9dtdjd kdah2h3h 5h6h7h8h9hthjhqhkhas2s3s4s5s6s7s8s9stsjsqsks",
3445 type: "card (4 missing: 9C 5D QD...)", 3470 type: "card (4 missing: 9C 5D QD...)",
3446 events: "48", 3471 events: "48",
3447 bits: "208", 3472 bits: "212",
3448 words: 18, 3473 words: 18,
3449 strength: "centuries", 3474 strength: "centuries",
3450 } 3475 }
@@ -3457,20 +3482,21 @@ it("Shows details about the entered entropy", function(done) {
3457 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d 6d 8d9d jd kdah2h3h 5h6h7h8h9hthjhqhkh 2s3s4s5s6s7s8s9stsjsqsks", 3482 entropy: "ac2c3c4c5c6c7c8c tcjcqckcad2d3d4d 6d 8d9d jd kdah2h3h 5h6h7h8h9hthjhqhkh 2s3s4s5s6s7s8s9stsjsqsks",
3458 type: "card", 3483 type: "card",
3459 events: "45", 3484 events: "45",
3460 bits: "195", 3485 bits: "198",
3461 words: 18, 3486 words: 18,
3462 strength: "centuries", 3487 strength: "centuries",
3463 } 3488 }
3464 ); 3489 );
3465}); 3490});
3466it("Shows details about the entered entropy", function(done) { 3491it("Shows details about the entered entropy", function(done) {
3492 // multiple decks does not affect the bits per event
3493 // since the bits are hardcoded in entropy.js
3467 testEntropyFeedback(done, 3494 testEntropyFeedback(done,
3468 // Multiple decks of cards increases bits per event
3469 { 3495 {
3470 entropy: "3d", 3496 entropy: "3d",
3471 events: "1", 3497 events: "1",
3472 bits: "4", 3498 bits: "5",
3473 bitsPerEvent: "4.34", 3499 bitsPerEvent: "4.46",
3474 } 3500 }
3475 ); 3501 );
3476}); 3502});
@@ -3479,8 +3505,8 @@ it("Shows details about the entered entropy", function(done) {
3479 { 3505 {
3480 entropy: "3d3d", 3506 entropy: "3d3d",
3481 events: "2", 3507 events: "2",
3482 bits: "9", 3508 bits: "10",
3483 bitsPerEvent: "4.80", 3509 bitsPerEvent: "4.46",
3484 } 3510 }
3485 ); 3511 );
3486}); 3512});
@@ -3490,7 +3516,7 @@ it("Shows details about the entered entropy", function(done) {
3490 entropy: "3d3d3d", 3516 entropy: "3d3d3d",
3491 events: "3", 3517 events: "3",
3492 bits: "15", 3518 bits: "15",
3493 bitsPerEvent: "5.01", 3519 bitsPerEvent: "4.46",
3494 } 3520 }
3495 ); 3521 );
3496}); 3522});
@@ -3500,7 +3526,7 @@ it("Shows details about the entered entropy", function(done) {
3500 entropy: "3d3d3d3d", 3526 entropy: "3d3d3d3d",
3501 events: "4", 3527 events: "4",
3502 bits: "20", 3528 bits: "20",
3503 bitsPerEvent: "5.14", 3529 bitsPerEvent: "4.46",
3504 } 3530 }
3505 ); 3531 );
3506}); 3532});
@@ -3509,8 +3535,8 @@ it("Shows details about the entered entropy", function(done) {
3509 { 3535 {
3510 entropy: "3d3d3d3d3d", 3536 entropy: "3d3d3d3d3d",
3511 events: "5", 3537 events: "5",
3512 bits: "26", 3538 bits: "25",
3513 bitsPerEvent: "5.22", 3539 bitsPerEvent: "4.46",
3514 } 3540 }
3515 ); 3541 );
3516}); 3542});
@@ -3519,8 +3545,8 @@ it("Shows details about the entered entropy", function(done) {
3519 { 3545 {
3520 entropy: "3d3d3d3d3d3d", 3546 entropy: "3d3d3d3d3d3d",
3521 events: "6", 3547 events: "6",
3522 bits: "31", 3548 bits: "30",
3523 bitsPerEvent: "5.28", 3549 bitsPerEvent: "4.46",
3524 } 3550 }
3525 ); 3551 );
3526}); 3552});
@@ -3529,8 +3555,8 @@ it("Shows details about the entered entropy", function(done) {
3529 { 3555 {
3530 entropy: "3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d", 3556 entropy: "3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d",
3531 events: "33", 3557 events: "33",
3532 bits: "184", 3558 bits: "165",
3533 bitsPerEvent: "5.59", 3559 bitsPerEvent: "4.46",
3534 strength: 'less than a second - Repeats like "abcabcabc" are only slightly harder to guess than "abc"', 3560 strength: 'less than a second - Repeats like "abcabcabc" are only slightly harder to guess than "abc"',
3535 } 3561 }
3536 ); 3562 );
@@ -3581,10 +3607,11 @@ it('Converts very long entropy to very long mnemonics', function(done) {
3581// https://bip32jp.github.io/english/index.html 3607// https://bip32jp.github.io/english/index.html
3582// NOTES: 3608// NOTES:
3583// Is incompatible with: 3609// Is incompatible with:
3610// base 6
3584// base 20 3611// base 20
3585it('Is compatible with bip32jp.github.io', function(done) { 3612it('Is compatible with bip32jp.github.io', function(done) {
3586 var entropy = "543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543"; 3613 var entropy = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
3587 var expectedPhrase = "train then jungle barely whip fiber purpose puppy eagle cloud clump hospital robot brave balcony utility detect estate old green desk skill multiply virus"; 3614 var expectedPhrase = "primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary foster";
3588 driver.findElement(By.css('.use-entropy')) 3615 driver.findElement(By.css('.use-entropy'))
3589 .click(); 3616 .click();
3590 driver.findElement(By.css('.entropy')) 3617 driver.findElement(By.css('.entropy'))