aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.bowerrc4
-rw-r--r--.eslintrc.json4
-rw-r--r--.gitignore8
-rw-r--r--.travis.yml25
-rw-r--r--Gruntfile.js216
-rw-r--r--README.md7
-rw-r--r--app/AppKernel.php2
-rw-r--r--app/DoctrineMigrations/Version20160410190541.php46
-rw-r--r--app/DoctrineMigrations/Version20160812120952.php48
-rw-r--r--app/DoctrineMigrations/Version20160911214952.php42
-rw-r--r--app/DoctrineMigrations/Version20160916201049.php46
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.da.yml4
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.de.yml4
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.en.yml4
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.es.yml4
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fa.yml9
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fr.yml4
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.it.yml4
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.oc.yml4
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.pl.yml9
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.ro.yml9
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.tr.yml31
-rwxr-xr-xapp/Resources/static/themes/_global/img/appicon/apple-touch-icon-114.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-114.png)bin2281 -> 2281 bytes
-rwxr-xr-xapp/Resources/static/themes/_global/img/appicon/apple-touch-icon-120.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-120.png)bin2318 -> 2318 bytes
-rwxr-xr-xapp/Resources/static/themes/_global/img/appicon/apple-touch-icon-144.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-144.png)bin2718 -> 2718 bytes
-rwxr-xr-xapp/Resources/static/themes/_global/img/appicon/apple-touch-icon-152.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-152.png)bin2835 -> 2835 bytes
-rwxr-xr-xapp/Resources/static/themes/_global/img/appicon/apple-touch-icon-57.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-57.png)bin1582 -> 1582 bytes
-rwxr-xr-xapp/Resources/static/themes/_global/img/appicon/apple-touch-icon-72.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-72.png)bin1709 -> 1709 bytes
-rwxr-xr-xapp/Resources/static/themes/_global/img/appicon/apple-touch-icon-76.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-76.png)bin1838 -> 1838 bytes
-rwxr-xr-xapp/Resources/static/themes/_global/img/appicon/apple-touch-icon.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon.png)bin1579 -> 1579 bytes
-rwxr-xr-xapp/Resources/static/themes/_global/img/appicon/favicon.ico (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/favicon.ico)bin34494 -> 34494 bytes
-rw-r--r--app/Resources/static/themes/_global/img/bg-select.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/bg-select.png)bin1095 -> 1095 bytes
-rw-r--r--app/Resources/static/themes/_global/img/icons/carrot-icon--black.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/carrot-icon--black.png)bin1538 -> 1538 bytes
-rw-r--r--app/Resources/static/themes/_global/img/icons/carrot-icon--white.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/carrot-icon--white.png)bin1605 -> 1605 bytes
-rw-r--r--app/Resources/static/themes/_global/img/icons/diaspora-icon--black.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/diaspora-icon--black.png)bin1555 -> 1555 bytes
-rw-r--r--app/Resources/static/themes/_global/img/icons/diaspora-icon--white.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/diaspora-icon--white.png)bin612 -> 612 bytes
-rwxr-xr-xapp/Resources/static/themes/_global/img/logo-other_themes.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-other_themes.png)bin3058 -> 3058 bytes
-rw-r--r--app/Resources/static/themes/_global/img/logo-square.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-square.png)bin3314 -> 3314 bytes
-rwxr-xr-xapp/Resources/static/themes/_global/img/logo-w.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo-w.png)bin4916 -> 4916 bytes
-rw-r--r--app/Resources/static/themes/_global/img/logo-wallabag.svg (renamed from src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo-wallabag.svg)0
-rw-r--r--app/Resources/static/themes/_global/js/bookmarklet.js (renamed from src/Wallabag/CoreBundle/Resources/public/themes/_global/js/bookmarklet.js)0
-rw-r--r--app/Resources/static/themes/_global/js/restoreScroll.js25
-rwxr-xr-xapp/Resources/static/themes/baggy/css/font.css6
-rwxr-xr-xapp/Resources/static/themes/baggy/css/main.css (renamed from src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/main.css)760
-rwxr-xr-xapp/Resources/static/themes/baggy/css/messages.css19
-rwxr-xr-xapp/Resources/static/themes/baggy/css/print.css66
-rw-r--r--app/Resources/static/themes/baggy/css/ratatouille.css (renamed from src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/ratatouille.css)121
-rw-r--r--app/Resources/static/themes/baggy/font/icomoon.eotbin0 -> 97236 bytes
-rw-r--r--app/Resources/static/themes/baggy/font/icomoon.svg501
-rw-r--r--app/Resources/static/themes/baggy/font/icomoon.ttfbin0 -> 97072 bytes
-rw-r--r--app/Resources/static/themes/baggy/font/icomoon.woffbin0 -> 97148 bytes
-rwxr-xr-xapp/Resources/static/themes/baggy/img/blank.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/blank.png)bin141 -> 141 bytes
-rw-r--r--app/Resources/static/themes/baggy/img/down.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/down.png)bin216 -> 216 bytes
-rwxr-xr-xapp/Resources/static/themes/baggy/img/list.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/list.png)bin201 -> 201 bytes
-rwxr-xr-xapp/Resources/static/themes/baggy/img/table.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/table.png)bin229 -> 229 bytes
-rw-r--r--app/Resources/static/themes/baggy/img/top.png (renamed from src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/top.png)bin212 -> 212 bytes
-rw-r--r--app/Resources/static/themes/baggy/js/autoClose.js8
-rwxr-xr-xapp/Resources/static/themes/baggy/js/autoCompleteTags.js46
-rw-r--r--app/Resources/static/themes/baggy/js/closeMessage.js19
-rwxr-xr-xapp/Resources/static/themes/baggy/js/init.js98
-rw-r--r--app/Resources/static/themes/baggy/js/popupForm.js101
-rwxr-xr-xapp/Resources/static/themes/baggy/js/saveLink.js75
-rwxr-xr-xapp/Resources/static/themes/material/css/main.css680
-rwxr-xr-xapp/Resources/static/themes/material/css/print.css77
-rwxr-xr-xapp/Resources/static/themes/material/js/init.js117
-rw-r--r--app/config/config.yml124
-rw-r--r--app/config/config_dev.yml11
-rw-r--r--app/config/parameters.yml.dist13
-rw-r--r--app/config/parameters_test.yml2
-rw-r--r--app/config/security.yml1
-rw-r--r--app/config/services.yml5
-rwxr-xr-xbin/symfony_requirements13
-rw-r--r--bower.json39
-rw-r--r--composer.json14
-rw-r--r--docker-compose.yml13
-rw-r--r--docs/de/conf.py2
-rw-r--r--docs/de/developer/rabbitmq.rst77
-rw-r--r--docs/de/developer/redis.rst71
-rw-r--r--docs/de/index.rst10
-rw-r--r--docs/de/user/installation.rst7
-rw-r--r--docs/de/user/upgrade-2.0.x-2.0.y.rst (renamed from docs/de/user/upgrade.rst)4
-rw-r--r--docs/de/user/upgrade-2.0.x-2.1.y.rst64
-rw-r--r--docs/en/conf.py2
-rw-r--r--docs/en/developer/rabbitmq.rst76
-rw-r--r--docs/en/developer/redis.rst71
-rw-r--r--docs/en/index.rst11
-rw-r--r--docs/en/user/import.rst35
-rw-r--r--docs/en/user/installation.rst9
-rw-r--r--docs/en/user/migration.rst36
-rw-r--r--docs/en/user/share.rst17
-rw-r--r--docs/en/user/upgrade-2.0.x-2.0.y.rst (renamed from docs/en/user/upgrade.rst)6
-rw-r--r--docs/en/user/upgrade-2.0.x-2.1.y.rst64
-rw-r--r--docs/fr/conf.py2
-rw-r--r--docs/fr/developer/rabbitmq.rst76
-rw-r--r--docs/fr/developer/redis.rst71
-rw-r--r--docs/fr/index.rst11
-rw-r--r--docs/fr/user/import.rst33
-rw-r--r--docs/fr/user/installation.rst11
-rw-r--r--docs/fr/user/migration.rst38
-rw-r--r--docs/fr/user/share.rst17
-rw-r--r--docs/fr/user/upgrade-2.0.x-2.0.y.rst (renamed from docs/fr/user/upgrade.rst)6
-rw-r--r--docs/fr/user/upgrade-2.0.x-2.1.y.rst65
-rw-r--r--docs/img/user/share.pngbin0 -> 9435 bytes
-rwxr-xr-xinstall.sh18
-rwxr-xr-xinstall_dev.sh16
-rw-r--r--package.json89
-rw-r--r--phpunit.xml.dist1
-rw-r--r--src/Wallabag/ApiBundle/Controller/WallabagRestController.php138
-rw-r--r--src/Wallabag/ApiBundle/Entity/Client.php31
-rw-r--r--src/Wallabag/CoreBundle/Command/InstallCommand.php37
-rw-r--r--src/Wallabag/CoreBundle/Controller/DeveloperController.php13
-rw-r--r--src/Wallabag/CoreBundle/Controller/EntryController.php150
-rw-r--r--src/Wallabag/CoreBundle/Controller/ExportController.php2
-rw-r--r--src/Wallabag/CoreBundle/Controller/FooterController.php27
-rw-r--r--src/Wallabag/CoreBundle/Controller/RssController.php2
-rw-r--r--src/Wallabag/CoreBundle/Controller/StaticController.php6
-rw-r--r--src/Wallabag/CoreBundle/Controller/TagController.php54
-rw-r--r--src/Wallabag/CoreBundle/DataFixtures/ORM/LoadConfigData.php3
-rw-r--r--src/Wallabag/CoreBundle/DataFixtures/ORM/LoadSettingData.php14
-rw-r--r--src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTagData.php7
-rw-r--r--src/Wallabag/CoreBundle/DependencyInjection/Configuration.php3
-rw-r--r--src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php1
-rw-r--r--src/Wallabag/CoreBundle/Entity/Config.php31
-rw-r--r--src/Wallabag/CoreBundle/Entity/Entry.php69
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/ClientType.php4
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/ConfigType.php3
-rw-r--r--src/Wallabag/CoreBundle/Helper/ContentProxy.php26
-rw-r--r--src/Wallabag/CoreBundle/Helper/EntriesExport.php3
-rw-r--r--src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php34
-rw-r--r--src/Wallabag/CoreBundle/Repository/EntryRepository.php45
-rw-r--r--src/Wallabag/CoreBundle/Repository/TagRepository.php30
-rw-r--r--src/Wallabag/CoreBundle/Resources/config/parameters.yml4
-rw-r--r--src/Wallabag/CoreBundle/Resources/config/services.yml14
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/_global/js/annotator.min.js23
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/_global/js/jquery-2.0.3.min.js1
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/_global/js/jquery.cookie.js117
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/_global/js/restoreScroll.js25
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/baggy/css/font.css6
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/baggy/css/messages.css19
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/baggy/css/print.css62
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.eotbin6672 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.svg43
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.ttfbin6508 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.woffbin6584 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/ptsans.woffbin24816 -> 0 bytes
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo-other_themes.pngbin3922 -> 0 bytes
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo.pngbin1350 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo.svg8
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/autoClose.js6
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/baggy/js/autoCompleteTags.js47
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/closeMessage.js17
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/baggy/js/init.js63
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/popupForm.js83
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/restoreScroll.js25
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js96
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css550
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/css/materialize.css8198
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/css/materialize.min.css16
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/material/css/print.css62
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.eotbin3188 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.svg17
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.ttfbin3024 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.woffbin3100 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/LICENSE.txt428
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.eotbin102112 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.svg769
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.ttfbin101892 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.woffbin101968 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.woff2bin33220 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.ttfbin127744 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.woffbin62876 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.woff2bin49976 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.ttfbin126792 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.woffbin62316 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.woff2bin49380 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.ttfbin127488 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.woffbin62980 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.woff2bin50224 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.ttfbin126072 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.woffbin61736 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.woff2bin49236 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.ttfbin127584 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.woffbin61628 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.woff2bin48524 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/img/bg-select.pngbin1095 -> 0 bytes
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-w.pngbin4916 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-wallabag.svg300
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js79
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery-2.1.4.min.js4
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js103
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js1
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/js/materialize.js6219
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/js/materialize.min.js9
-rw-r--r--src/Wallabag/CoreBundle/Resources/public/themes/material/js/restoreScroll.js25
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.da.yml34
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.de.yml34
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.en.yml46
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.es.yml40
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml48
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml54
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.it.yml34
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml46
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml40
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml34
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml34
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/base.html.twig4
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig13
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig38
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig168
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/pager.html.twig3
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig170
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig28
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig66
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig6
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig16
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig)6
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client_parameters.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig)1
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/howto_app.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/index.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig)8
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/_title.html.twig15
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/entries.xml.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig)10
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/share.html.twig40
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Mail/forgotPassword.txt.twig6
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Static/_bookmarklet.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/_bookmarklet.html.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Static/about.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Static/howto.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig)2
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Static/quickstart.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig)1
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig16
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig31
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig22
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig63
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig69
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig45
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig34
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig101
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig5
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/footer.html.twig41
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig53
-rw-r--r--src/Wallabag/CoreBundle/Twig/WallabagExtension.php93
-rw-r--r--src/Wallabag/ImportBundle/Command/ImportCommand.php29
-rw-r--r--src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php44
-rw-r--r--src/Wallabag/ImportBundle/Consumer/AMQPEntryConsumer.php17
-rw-r--r--src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php74
-rw-r--r--src/Wallabag/ImportBundle/Consumer/RedisEntryConsumer.php29
-rw-r--r--src/Wallabag/ImportBundle/Controller/BrowserController.php90
-rw-r--r--src/Wallabag/ImportBundle/Controller/ChromeController.php41
-rw-r--r--src/Wallabag/ImportBundle/Controller/FirefoxController.php41
-rw-r--r--src/Wallabag/ImportBundle/Controller/ImportController.php78
-rw-r--r--src/Wallabag/ImportBundle/Controller/InstapaperController.php77
-rw-r--r--src/Wallabag/ImportBundle/Controller/PocketController.php35
-rw-r--r--src/Wallabag/ImportBundle/Controller/ReadabilityController.php77
-rw-r--r--src/Wallabag/ImportBundle/Controller/WallabagController.php10
-rw-r--r--src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php10
-rw-r--r--src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php10
-rw-r--r--src/Wallabag/ImportBundle/Form/Type/UploadImportType.php1
-rw-r--r--src/Wallabag/ImportBundle/Import/AbstractImport.php148
-rw-r--r--src/Wallabag/ImportBundle/Import/BrowserImport.php207
-rw-r--r--src/Wallabag/ImportBundle/Import/ChromeImport.php53
-rw-r--r--src/Wallabag/ImportBundle/Import/FirefoxImport.php53
-rw-r--r--src/Wallabag/ImportBundle/Import/InstapaperImport.php140
-rw-r--r--src/Wallabag/ImportBundle/Import/PocketImport.php219
-rw-r--r--src/Wallabag/ImportBundle/Import/ReadabilityImport.php134
-rw-r--r--src/Wallabag/ImportBundle/Import/WallabagImport.php134
-rw-r--r--src/Wallabag/ImportBundle/Import/WallabagV1Import.php15
-rw-r--r--src/Wallabag/ImportBundle/Import/WallabagV2Import.php14
-rw-r--r--src/Wallabag/ImportBundle/Redis/Producer.php36
-rw-r--r--src/Wallabag/ImportBundle/Resources/config/rabbit.yml51
-rw-r--r--src/Wallabag/ImportBundle/Resources/config/redis.yml141
-rw-r--r--src/Wallabag/ImportBundle/Resources/config/services.yml44
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/Chrome/index.html.twig43
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/Firefox/index.html.twig43
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/Import/_workerEnabled.html.twig8
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/Import/check_queue.html.twig23
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig2
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/Instapaper/index.html.twig45
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig12
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/Readability/index.html.twig45
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig2
-rw-r--r--src/Wallabag/UserBundle/Controller/RegistrationController.php18
-rw-r--r--src/Wallabag/UserBundle/Controller/SecurityController.php21
-rw-r--r--src/Wallabag/UserBundle/DependencyInjection/Configuration.php8
-rw-r--r--src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php1
-rw-r--r--src/Wallabag/UserBundle/Resources/config/services.yml6
-rw-r--r--src/Wallabag/UserBundle/Resources/translations/wallabag_user.pl.yml11
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig4
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Registration/confirmed.html.twig2
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Registration/register_content.html.twig4
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Resetting/request_content.html.twig2
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Resetting/reset_content.html.twig2
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Security/login.html.twig6
-rw-r--r--src/Wallabag/UserBundle/Resources/views/layout.html.twig2
-rw-r--r--tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php182
-rw-r--r--tests/Wallabag/CoreBundle/Command/InstallCommandTest.php8
-rw-r--r--tests/Wallabag/CoreBundle/Controller/DeveloperControllerTest.php9
-rw-r--r--tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php53
-rw-r--r--tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php6
-rw-r--r--tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php15
-rw-r--r--tests/Wallabag/CoreBundle/Controller/TagControllerTest.php35
-rw-r--r--tests/Wallabag/CoreBundle/EventListener/LocaleListenerTest.php6
-rw-r--r--tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php23
-rw-r--r--tests/Wallabag/CoreBundle/WallabagCoreTestCase.php15
-rw-r--r--tests/Wallabag/ImportBundle/Command/ImportCommandTest.php85
-rw-r--r--tests/Wallabag/ImportBundle/Command/RedisWorkerCommandTest.php74
-rw-r--r--tests/Wallabag/ImportBundle/Consumer/AMQPEntryConsumerTest.php225
-rw-r--r--tests/Wallabag/ImportBundle/Consumer/RedisEntryConsumerTest.php225
-rw-r--r--tests/Wallabag/ImportBundle/Controller/ChromeControllerTest.php152
-rw-r--r--tests/Wallabag/ImportBundle/Controller/FirefoxControllerTest.php165
-rw-r--r--tests/Wallabag/ImportBundle/Controller/ImportControllerTest.php2
-rw-r--r--tests/Wallabag/ImportBundle/Controller/InstapaperControllerTest.php196
-rw-r--r--tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php31
-rw-r--r--tests/Wallabag/ImportBundle/Controller/ReadabilityControllerTest.php197
-rw-r--r--tests/Wallabag/ImportBundle/Controller/WallabagV1ControllerTest.php75
-rw-r--r--tests/Wallabag/ImportBundle/Controller/WallabagV2ControllerTest.php77
-rw-r--r--tests/Wallabag/ImportBundle/Import/ChromeImportTest.php233
-rw-r--r--tests/Wallabag/ImportBundle/Import/FirefoxImportTest.php233
-rw-r--r--tests/Wallabag/ImportBundle/Import/InstapaperImportTest.php233
-rw-r--r--tests/Wallabag/ImportBundle/Import/PocketImportTest.php248
-rw-r--r--tests/Wallabag/ImportBundle/Import/ReadabilityImportTest.php233
-rw-r--r--tests/Wallabag/ImportBundle/Import/WallabagV1ImportTest.php101
-rw-r--r--tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php97
-rw-r--r--tests/Wallabag/ImportBundle/fixtures/chrome-bookmarks36
-rw-r--r--tests/Wallabag/ImportBundle/fixtures/firefox-bookmarks.json63
-rw-r--r--tests/Wallabag/ImportBundle/fixtures/instapaper-export.csv4
-rw-r--r--tests/Wallabag/ImportBundle/fixtures/readability-read.json25
-rw-r--r--tests/Wallabag/ImportBundle/fixtures/readability.json176
-rw-r--r--tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json4
-rw-r--r--tests/Wallabag/ImportBundle/fixtures/wallabag-v2.json48
-rw-r--r--tests/Wallabag/UserBundle/Mailer/AuthCodeMailerTest.php2
-rw-r--r--var/SymfonyRequirements.php74
329 files changed, 11136 insertions, 19186 deletions
diff --git a/.bowerrc b/.bowerrc
new file mode 100644
index 00000000..e0163687
--- /dev/null
+++ b/.bowerrc
@@ -0,0 +1,4 @@
1{
2 "directory" : "app/Resources/static/lib",
3 "json" : "bower.json"
4}
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 00000000..976a9eb5
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,4 @@
1{
2 "extends": "airbnb",
3 "installedESLint": true,
4}
diff --git a/.gitignore b/.gitignore
index f596c7b8..fb51034e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,3 +41,11 @@ docker/data/
41 41
42# To avoid crazy stuff on some PR, we must manually FORCE ADD IT on each new release 42# To avoid crazy stuff on some PR, we must manually FORCE ADD IT on each new release
43composer.lock 43composer.lock
44
45# assets stuff
46/node_modules/
47!app/Resources/static/lib
48app/Resources/static/lib/*
49/bin
50!/src/Wallabag/CoreBundle/Resources/public
51/src/Wallabag/CoreBundle/Resources/public/*
diff --git a/.travis.yml b/.travis.yml
index 53cf9bb5..c5fe7b01 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,9 @@
1language: php 1language: php
2 2
3services:
4 - rabbitmq
5 - redis
6
3# faster builds on docker-container setup 7# faster builds on docker-container setup
4sudo: false 8sudo: false
5 9
@@ -15,6 +19,9 @@ cache:
15 directories: 19 directories:
16 - vendor 20 - vendor
17 - $HOME/.composer/cache 21 - $HOME/.composer/cache
22 - node_modules
23 - $HOME/.cache/bower
24 - $HOME/.npm
18 25
19php: 26php:
20 - 5.5 27 - 5.5
@@ -23,6 +30,9 @@ php:
23 - 7.1 30 - 7.1
24 - nightly 31 - nightly
25 32
33node_js:
34 - "5"
35
26env: 36env:
27 - DB=mysql 37 - DB=mysql
28 - DB=pgsql 38 - DB=pgsql
@@ -52,6 +62,8 @@ matrix:
52 env: DB=sqlite 62 env: DB=sqlite
53 - php: 7.0 63 - php: 7.0
54 env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite 64 env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite
65 - php: 7.0
66 env: DB=sqlite ASSETS=build
55 allow_failures: 67 allow_failures:
56 - php: hhvm-3.12 68 - php: hhvm-3.12
57 - php: 7.1 69 - php: 7.1
@@ -67,15 +79,20 @@ before_script:
67 - if [[ ! $PHP = hhvm* ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi; 79 - if [[ ! $PHP = hhvm* ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
68 # xdebug isn't enable for PHP 7.1 80 # xdebug isn't enable for PHP 7.1
69 - if [[ ! $PHP = hhvm* ]]; then phpenv config-rm xdebug.ini || echo "xdebug not available"; fi 81 - if [[ ! $PHP = hhvm* ]]; then phpenv config-rm xdebug.ini || echo "xdebug not available"; fi
82 - if [[ $PHP = 5.5 ]]; then composer require "phpunit/phpunit:4.*" --no-update; fi;
70 - composer self-update --no-progress 83 - composer self-update --no-progress
71 - if [[ "$DB" = "pgsql" ]]; then psql -c 'create database wallabag_test;' -U postgres; fi; 84 - if [[ $DB = pgsql ]]; then psql -c 'create database wallabag_test;' -U postgres; fi;
85
86install:
87 - if [[ $ASSETS = build ]]; then source ~/.nvm/nvm.sh && nvm install 5.0; fi;
88 - if [[ $ASSETS = build ]]; then npm install -g npm@latest; fi;
72 89
73before_install: 90before_install:
74 - if [[ $TRAVIS_REPO_SLUG = wallabag/wallabag ]]; then cp .composer-auth.json ~/.composer/auth.json; fi; 91 - if [[ $TRAVIS_REPO_SLUG = wallabag/wallabag ]]; then cp .composer-auth.json ~/.composer/auth.json; fi;
75 92
76script: 93script:
77 - travis_wait composer install --no-interaction --no-progress --prefer-dist -o 94 - travis_wait bash install.sh
78 - ant prepare-$DB 95 - ant prepare-$DB
79 - phpunit -v 96 - phpunit -v
80 - if [ "$CS_FIXER" = "run" ]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi; 97 - if [[ $CS_FIXER = run ]]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi;
81 - if [ "$VALIDATE_TRANSLATION_FILE" = "run" ]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi; 98 - if [[ $VALIDATE_TRANSLATION_FILE = run ]]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi;
diff --git a/Gruntfile.js b/Gruntfile.js
new file mode 100644
index 00000000..8dc5b83b
--- /dev/null
+++ b/Gruntfile.js
@@ -0,0 +1,216 @@
1module.exports = function (grunt) {
2 require('load-grunt-tasks')(grunt);
3
4 grunt.initConfig({
5 appDir: 'app/Resources/static',
6 buildDir: 'web/bundles/wallabagcore',
7
8 postcss: {
9 material: {
10 options: {
11 map: {
12 inline: false,
13 },
14
15 processors: [
16 require('pixrem')(),
17 require('autoprefixer')({ browsers: 'last 2 versions' }),
18 require('cssnano')(),
19 ],
20 },
21 src: '<%= buildDir %>/material.css',
22 dest: '<%= buildDir %>/themes/material/css/style.min.css',
23 },
24 baggy: {
25 options: {
26 map: {
27 inline: false,
28 },
29
30 processors: [
31 require('pixrem')(),
32 require('autoprefixer')({ browsers: 'last 2 versions' }),
33 require('cssnano')(),
34 ],
35 },
36 src: '<%= buildDir %>/baggy.css',
37 dest: '<%= buildDir %>/themes/baggy/css/style.min.css',
38 },
39 },
40 concat: {
41 options: {
42 separator: ';',
43 },
44 jsMaterial: {
45 src: [
46 '<%= appDir %>/themes/material/js/init.js',
47 '<%= appDir %>/themes/_global/js/restoreScroll.js',
48 'node_modules/jquery.tinydot/src/jquery.tinydot.js',
49 ],
50 dest: '<%= buildDir %>/material.js',
51 },
52 jsBaggy: {
53 src: [
54 '<%= appDir %>/themes/baggy/js/init.js',
55 '<%= appDir %>/themes/_global/js/restoreScroll.js',
56 '<%= appDir %>/themes/baggy/js/autoClose.js',
57 '<%= appDir %>/themes/baggy/js/autoCompleteTags.js',
58 '<%= appDir %>/themes/baggy/js/closeMessage.js',
59 '<%= appDir %>/themes/baggy/js/popupForm.js',
60 // Save link is no more used for now
61 // '<%= appDir %>/themes/baggy/js/saveLink.js',
62 ],
63 dest: '<%= buildDir %>/baggy.js',
64 },
65 cssMaterial: {
66 src: [
67 'node_modules/materialize-css/bin/materialize.css',
68 '<%= appDir %>/themes/material/css/*.css',
69 ],
70 dest: '<%= buildDir %>/material.css',
71 },
72 cssBaggy: {
73 src: [
74 '<%= appDir %>/themes/baggy/css/*.css',
75 ],
76 dest: '<%= buildDir %>/baggy.css',
77 },
78 },
79 browserify: {
80 '<%= buildDir %>/material.browser.js': ['<%= buildDir %>/material.js'],
81 '<%= buildDir %>/baggy.browser.js': ['<%= buildDir %>/baggy.js'],
82 },
83 uglify: {
84 material: {
85 files: {
86 '<%= buildDir %>/themes/material/js/material.min.js':
87 ['<%= buildDir %>/material.browser.js'],
88 },
89 options: {
90 sourceMap: true,
91 },
92 },
93 baggy: {
94 files: {
95 '<%= buildDir %>/themes/baggy/js/baggy.min.js':
96 ['<%= buildDir %>/baggy.browser.js'],
97 },
98 options: {
99 sourceMap: true,
100 },
101 },
102 },
103 copy: {
104 pickerjs: {
105 expand: true,
106 cwd: 'node_modules/pickadate/lib',
107 src: 'picker.js',
108 dest: '<%= buildDir %>',
109 },
110 annotator: {
111 expand: true,
112 cwd: 'node_modules/annotator/pkg',
113 src: 'annotator.min.js',
114 dest: '<%= buildDir %>/themes/_global/js/',
115 },
116 },
117 symlink: {
118 baggyfonts: {
119 files: [
120 {
121 expand: true,
122 overwrite: true,
123 cwd: '<%= appDir %>/lib/icomoon-bower/',
124 src: 'fonts',
125 dest: '<%= buildDir %>/themes/baggy/',
126 },
127 {
128 expand: true,
129 overwrite: true,
130 cwd: '<%= appDir %>/lib/bower-pt-sans/fonts',
131 src: '*',
132 dest: '<%= buildDir %>/themes/baggy/fonts/',
133 },
134 ],
135 },
136 materialfonts: {
137 files: [
138 {
139 expand: true,
140 overwrite: true,
141 cwd: '<%= appDir %>/lib/icomoon-bower/',
142 src: 'fonts',
143 dest: '<%= buildDir %>/themes/material/',
144 },
145 {
146 expand: true,
147 overwrite: true,
148 cwd: 'node_modules/materialize-css/',
149 src: 'font',
150 dest: '<%= buildDir %>/themes/material',
151 },
152 {
153 expand: true,
154 overwrite: true,
155 cwd: '<%= appDir %>/lib/roboto-fontface/fonts/',
156 src: '*',
157 dest: '<%= buildDir %>/themes/material/fonts/roboto/',
158 },
159 {
160 expand: true,
161 overwrite: true,
162 cwd: '<%= appDir %>/lib/material-design-icons-iconfont/dist/fonts/',
163 src: '*',
164 dest: '<%= buildDir %>/themes/material/fonts/',
165 },
166 ],
167 },
168 pics: {
169 files: [
170 {
171 expand: true,
172 overwrite: true,
173 cwd: '<%= appDir %>/themes/_global/',
174 src: 'img',
175 dest: '<%= buildDir %>/themes/_global/',
176 },
177 ],
178 },
179 },
180 clean: {
181 css: {
182 src: ['<%= buildDir %>/**/*.css'],
183 },
184 js: {
185 src: ['<%= buildDir %>/**/*.js', '<%= buildDir %>/**/*.map'],
186 },
187 all: {
188 src: ['./<%= buildDir %>'],
189 },
190 },
191 });
192
193 grunt.registerTask(
194 'fonts',
195 'Install fonts',
196 ['symlink:baggyfonts', 'symlink:materialfonts']
197 );
198
199 grunt.registerTask(
200 'js',
201 'Build and install js files',
202 ['clean:js', 'copy:pickerjs', 'concat:jsMaterial', 'concat:jsBaggy', 'browserify', 'uglify']
203 );
204
205 grunt.registerTask(
206 'default',
207 'Build and install everything',
208 ['clean', 'copy:pickerjs', 'concat', 'browserify', 'uglify', 'postcss', 'symlink']
209 );
210
211 grunt.registerTask(
212 'css',
213 'Compiles the stylesheets.',
214 ['clean:css', 'concat:cssMaterial', 'concat:cssBaggy', 'postcss']
215 );
216};
diff --git a/README.md b/README.md
index 2ce6479e..ca61f029 100644
--- a/README.md
+++ b/README.md
@@ -10,15 +10,14 @@ More informations on our website: [wallabag.org](https://wallabag.org)
10 10
11# Install wallabag 11# Install wallabag
12 12
13If you don't have it yet, please [install composer](https://getcomposer.org/download/) or be sure to use Composer 1.2 (`composer selfupdate` can help you about that). 13If you don't have it yet, please [install composer](https://getcomposer.org/download/) or be sure to use Composer 1.2 (`composer selfupdate` can help you about that). Read [our documentation](http://doc.wallabag.org) to have more information about installation.
14Then you can install wallabag by executing the following commands: 14Then you can install wallabag by executing the following commands:
15 15
16``` 16```
17 git clone https://github.com/wallabag/wallabag.git 17 git clone https://github.com/wallabag/wallabag.git
18 cd wallabag 18 cd wallabag
19 git checkout 2.0.8 19 git checkout 2.1.0
20 SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist 20 ./install.sh
21 php bin/console wallabag:install --env=prod
22 php bin/console server:run --env=prod 21 php bin/console server:run --env=prod
23``` 22```
24 23
diff --git a/app/AppKernel.php b/app/AppKernel.php
index 04f86eb7..52f85558 100644
--- a/app/AppKernel.php
+++ b/app/AppKernel.php
@@ -13,7 +13,6 @@ class AppKernel extends Kernel
13 new Symfony\Bundle\TwigBundle\TwigBundle(), 13 new Symfony\Bundle\TwigBundle\TwigBundle(),
14 new Symfony\Bundle\MonologBundle\MonologBundle(), 14 new Symfony\Bundle\MonologBundle\MonologBundle(),
15 new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), 15 new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
16 new Symfony\Bundle\AsseticBundle\AsseticBundle(),
17 new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), 16 new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
18 new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), 17 new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
19 new FOS\RestBundle\FOSRestBundle(), 18 new FOS\RestBundle\FOSRestBundle(),
@@ -39,6 +38,7 @@ class AppKernel extends Kernel
39 new Wallabag\UserBundle\WallabagUserBundle(), 38 new Wallabag\UserBundle\WallabagUserBundle(),
40 new Wallabag\ImportBundle\WallabagImportBundle(), 39 new Wallabag\ImportBundle\WallabagImportBundle(),
41 new Wallabag\AnnotationBundle\WallabagAnnotationBundle(), 40 new Wallabag\AnnotationBundle\WallabagAnnotationBundle(),
41 new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(),
42 ]; 42 ];
43 43
44 if (in_array($this->getEnvironment(), ['dev', 'test'], true)) { 44 if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
diff --git a/app/DoctrineMigrations/Version20160410190541.php b/app/DoctrineMigrations/Version20160410190541.php
new file mode 100644
index 00000000..4014857b
--- /dev/null
+++ b/app/DoctrineMigrations/Version20160410190541.php
@@ -0,0 +1,46 @@
1<?php
2
3namespace Application\Migrations;
4
5use Doctrine\DBAL\Migrations\AbstractMigration;
6use Doctrine\DBAL\Schema\Schema;
7use Symfony\Component\DependencyInjection\ContainerAwareInterface;
8use Symfony\Component\DependencyInjection\ContainerInterface;
9
10class Version20160410190541 extends AbstractMigration implements ContainerAwareInterface
11{
12 /**
13 * @var ContainerInterface
14 */
15 private $container;
16
17 public function setContainer(ContainerInterface $container = null)
18 {
19 $this->container = $container;
20 }
21
22 private function getTable($tableName)
23 {
24 return $this->container->getParameter('database_table_prefix') . $tableName;
25 }
26
27 /**
28 * @param Schema $schema
29 */
30 public function up(Schema $schema)
31 {
32 $this->addSql('ALTER TABLE `'.$this->getTable('entry').'` ADD `uuid` LONGTEXT DEFAULT NULL');
33 $this->addSql("INSERT INTO `".$this->getTable('craue_config_setting')."` (`name`, `value`, `section`) VALUES ('share_public', '1', 'entry')");
34 }
35
36 /**
37 * @param Schema $schema
38 */
39 public function down(Schema $schema)
40 {
41 $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'sqlite', 'This down migration can\'t be executed on SQLite databases, because SQLite don\'t support DROP COLUMN.');
42
43 $this->addSql('ALTER TABLE `'.$this->getTable('entry').'` DROP `uuid`');
44 $this->addSql("DELETE FROM `".$this->getTable('craue_config_setting')."` WHERE `name` = 'share_public'");
45 }
46}
diff --git a/app/DoctrineMigrations/Version20160812120952.php b/app/DoctrineMigrations/Version20160812120952.php
new file mode 100644
index 00000000..a8d3bcf2
--- /dev/null
+++ b/app/DoctrineMigrations/Version20160812120952.php
@@ -0,0 +1,48 @@
1<?php
2
3namespace Application\Migrations;
4
5use Doctrine\DBAL\Migrations\AbstractMigration;
6use Doctrine\DBAL\Schema\Schema;
7use Symfony\Component\DependencyInjection\ContainerAwareInterface;
8use Symfony\Component\DependencyInjection\ContainerInterface;
9
10class Version20160812120952 extends AbstractMigration implements ContainerAwareInterface
11{
12 /**
13 * @var ContainerInterface
14 */
15 private $container;
16
17 public function setContainer(ContainerInterface $container = null)
18 {
19 $this->container = $container;
20 }
21
22 private function getTable($tableName)
23 {
24 return $this->container->getParameter('database_table_prefix') . $tableName;
25 }
26
27 /**
28 * @param Schema $schema
29 */
30 public function up(Schema $schema)
31 {
32 if ($this->connection->getDatabasePlatform()->getName() == 'sqlite') {
33 $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name longtext DEFAULT NULL');
34 } else {
35 $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name longtext COLLATE \'utf8_unicode_ci\' DEFAULT NULL');
36 }
37 }
38
39 /**
40 * @param Schema $schema
41 */
42 public function down(Schema $schema)
43 {
44 $this->abortIf($this->connection->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
45
46 $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' DROP COLUMN name');
47 }
48}
diff --git a/app/DoctrineMigrations/Version20160911214952.php b/app/DoctrineMigrations/Version20160911214952.php
new file mode 100644
index 00000000..35809cec
--- /dev/null
+++ b/app/DoctrineMigrations/Version20160911214952.php
@@ -0,0 +1,42 @@
1<?php
2
3namespace Application\Migrations;
4
5use Doctrine\DBAL\Migrations\AbstractMigration;
6use Doctrine\DBAL\Schema\Schema;
7use Symfony\Component\DependencyInjection\ContainerAwareInterface;
8use Symfony\Component\DependencyInjection\ContainerInterface;
9
10class Version20160911214952 extends AbstractMigration implements ContainerAwareInterface
11{
12 /**
13 * @var ContainerInterface
14 */
15 private $container;
16
17 public function setContainer(ContainerInterface $container = null)
18 {
19 $this->container = $container;
20 }
21
22 private function getTable($tableName)
23 {
24 return $this->container->getParameter('database_table_prefix') . $tableName;
25 }
26
27 /**
28 * @param Schema $schema
29 */
30 public function up(Schema $schema)
31 {
32 $this->addSql('INSERT INTO `'.$this->getTable('craue_config_setting').'` (`name`, `value`, `section`) VALUES (\'import_with_redis\', \'0\', \'import\')');
33 $this->addSql('INSERT INTO `'.$this->getTable('craue_config_setting').'` (`name`, `value`, `section`) VALUES (\'import_with_rabbitmq\', \'0\', \'import\')');
34 }
35
36 /**
37 * @param Schema $schema
38 */
39 public function down(Schema $schema)
40 {
41 }
42}
diff --git a/app/DoctrineMigrations/Version20160916201049.php b/app/DoctrineMigrations/Version20160916201049.php
new file mode 100644
index 00000000..202901e6
--- /dev/null
+++ b/app/DoctrineMigrations/Version20160916201049.php
@@ -0,0 +1,46 @@
1<?php
2
3namespace Application\Migrations;
4
5use Doctrine\DBAL\Migrations\AbstractMigration;
6use Doctrine\DBAL\Schema\Schema;
7use Symfony\Component\DependencyInjection\ContainerAwareInterface;
8use Symfony\Component\DependencyInjection\ContainerInterface;
9
10class Version20160916201049 extends AbstractMigration implements ContainerAwareInterface
11{
12 /**
13 * @var ContainerInterface
14 */
15 private $container;
16
17 public function setContainer(ContainerInterface $container = null)
18 {
19 $this->container = $container;
20 }
21
22 private function getTable($tableName)
23 {
24 return $this->container->getParameter('database_table_prefix') . $tableName;
25 }
26
27 /**
28 * @param Schema $schema
29 */
30 public function up(Schema $schema)
31 {
32 $this->addSql('ALTER TABLE '.$this->getTable('config').' ADD pocket_consumer_key VARCHAR(255) DEFAULT NULL');
33 $this->addSql("DELETE FROM `".$this->getTable('craue_config_setting')."` WHERE `name` = 'pocket_consumer_key';");
34 }
35
36 /**
37 * @param Schema $schema
38 */
39 public function down(Schema $schema)
40 {
41 $this->abortIf($this->connection->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
42
43 $this->addSql('ALTER TABLE `'.$this->getTable('config').'` DROP pocket_consumer_key');
44 $this->addSql("INSERT INTO `".$this->getTable('craue_config_setting')."` (`name`, `value`, `section`) VALUES ('pocket_consumer_key', NULL, 'import')");
45 }
46}
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.da.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.da.yml
index c46fdb14..85079330 100644
--- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.da.yml
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.da.yml
@@ -8,7 +8,8 @@ export_csv: Aktiver eksport til CSV
8export_json: Aktiver eksport til JSON 8export_json: Aktiver eksport til JSON
9export_txt: Aktiver eksport til TXT 9export_txt: Aktiver eksport til TXT
10export_xml: Aktiver eksport til XML 10export_xml: Aktiver eksport til XML
11pocket_consumer_key: Brugers nøgle til Pocket for at importere materialer (https://getpocket.com/developer/docs/authentication) 11# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
12# import_with_redis: Enable Redis to import data asynchronously
12shaarli_url: Shaarli-URL, hvis tjenesten er aktiv 13shaarli_url: Shaarli-URL, hvis tjenesten er aktiv
13share_diaspora: Aktiver deling til Diaspora 14share_diaspora: Aktiver deling til Diaspora
14share_mail: Aktiver deling med email 15share_mail: Aktiver deling med email
@@ -27,3 +28,4 @@ piwik_site_id: ID for din side hos Piwik
27piwik_enabled: Aktiver Piwik 28piwik_enabled: Aktiver Piwik
28demo_mode_enabled: "Aktiver demo-indstilling? (anvendes kun til wallabags offentlige demo)" 29demo_mode_enabled: "Aktiver demo-indstilling? (anvendes kun til wallabags offentlige demo)"
29demo_mode_username: "Demobruger" 30demo_mode_username: "Demobruger"
31# share_public: Allow public url for entries
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.de.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.de.yml
index fa2093b5..eaba14cd 100644
--- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.de.yml
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.de.yml
@@ -8,7 +8,8 @@ export_csv: CSV-Export aktivieren
8export_json: JSON-Export aktivieren 8export_json: JSON-Export aktivieren
9export_txt: TXT-Export aktivieren 9export_txt: TXT-Export aktivieren
10export_xml: XML-Export aktivieren 10export_xml: XML-Export aktivieren
11pocket_consumer_key: Consumer-Key für Pocket, um Inhalte zu importieren (https://getpocket.com/developer/docs/authentication) 11# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
12# import_with_redis: Enable Redis to import data asynchronously
12shaarli_url: Shaarli-URL, sofern der Service aktiviert ist 13shaarli_url: Shaarli-URL, sofern der Service aktiviert ist
13share_diaspora: Teilen zu Diaspora aktiveren 14share_diaspora: Teilen zu Diaspora aktiveren
14share_mail: Teilen via E-Mail aktiveren 15share_mail: Teilen via E-Mail aktiveren
@@ -27,3 +28,4 @@ piwik_site_id: ID deiner Webseite in Piwik
27piwik_enabled: Piwik aktivieren 28piwik_enabled: Piwik aktivieren
28demo_mode_enabled: "Test-Modus aktivieren? (nur für die öffentliche wallabag-Demo genutzt)" 29demo_mode_enabled: "Test-Modus aktivieren? (nur für die öffentliche wallabag-Demo genutzt)"
29demo_mode_username: "Test-Benutzer" 30demo_mode_username: "Test-Benutzer"
31# share_public: Allow public url for entries
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.en.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.en.yml
index b627376e..8aaa27e7 100644
--- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.en.yml
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.en.yml
@@ -8,7 +8,8 @@ export_csv: Enable CSV export
8export_json: Enable JSON export 8export_json: Enable JSON export
9export_txt: Enable TXT export 9export_txt: Enable TXT export
10export_xml: Enable XML export 10export_xml: Enable XML export
11pocket_consumer_key: Consumer key for Pocket to import contents (https://getpocket.com/developer/docs/authentication) 11import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
12import_with_redis: Enable Redis to import data asynchronously
12shaarli_url: Shaarli URL, if the service is enabled 13shaarli_url: Shaarli URL, if the service is enabled
13share_diaspora: Enable share to Diaspora 14share_diaspora: Enable share to Diaspora
14share_mail: Enable share by email 15share_mail: Enable share by email
@@ -27,3 +28,4 @@ piwik_site_id: ID of your website in Piwik
27piwik_enabled: Enable Piwik 28piwik_enabled: Enable Piwik
28demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)" 29demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
29demo_mode_username: "Demo user" 30demo_mode_username: "Demo user"
31share_public: Allow public url for entries
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.es.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.es.yml
index af1657e4..bf3a79af 100644
--- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.es.yml
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.es.yml
@@ -8,7 +8,8 @@ export_csv: Activar exportación a CSV
8export_json: Activar exportación a JSON 8export_json: Activar exportación a JSON
9export_txt: Activar exportación a TXT 9export_txt: Activar exportación a TXT
10export_xml: Activar exportación a XML 10export_xml: Activar exportación a XML
11pocket_consumer_key: Consumer key for Pocket to import contents (https://getpocket.com/developer/docs/authentication) 11# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
12# import_with_redis: Enable Redis to import data asynchronously
12shaarli_url: Shaarli URL, si el servicio está activado 13shaarli_url: Shaarli URL, si el servicio está activado
13share_diaspora: Activar compartir con Diaspora 14share_diaspora: Activar compartir con Diaspora
14share_mail: Activar compartir con email 15share_mail: Activar compartir con email
@@ -27,3 +28,4 @@ piwik_site_id: ID de tu website de Piwik
27piwik_enabled: Activar Piwik 28piwik_enabled: Activar Piwik
28demo_mode_enabled: "Activar modo demo (sólo usado para la demo de wallabag)" 29demo_mode_enabled: "Activar modo demo (sólo usado para la demo de wallabag)"
29demo_mode_username: "Nombre de usuario demo" 30demo_mode_username: "Nombre de usuario demo"
31# share_public: Allow public url for entries
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fa.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fa.yml
index 7cb4e833..d86c4343 100644
--- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fa.yml
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fa.yml
@@ -8,7 +8,8 @@ export_csv: فعال‌سازی برون‌سپاری به CSV
8export_json: فعال‌سازی برون‌سپاری به JSON 8export_json: فعال‌سازی برون‌سپاری به JSON
9export_txt: فعال‌سازی برون‌سپاری به TXT 9export_txt: فعال‌سازی برون‌سپاری به TXT
10export_xml: فعال‌سازی برون‌سپاری به XML 10export_xml: فعال‌سازی برون‌سپاری به XML
11pocket_consumer_key: کلید کاربری Pocket برای درون‌ریزی مطالب (https://getpocket.com/developer/docs/authentication) 11# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
12# import_with_redis: Enable Redis to import data asynchronously
12shaarli_url: نشانی Shaarli، اگر فعال بود 13shaarli_url: نشانی Shaarli، اگر فعال بود
13share_diaspora: فعال‌سازی هم‌رسانی به Diaspora 14share_diaspora: فعال‌سازی هم‌رسانی به Diaspora
14share_mail: فعال‌سازی هم‌رسانی با ایمیل 15share_mail: فعال‌سازی هم‌رسانی با ایمیل
@@ -22,3 +23,9 @@ export: "برون‌سپاری"
22import: "درون‌ریزی" 23import: "درون‌ریزی"
23misc: "غیره" 24misc: "غیره"
24modify_settings: "اعمال" 25modify_settings: "اعمال"
26# piwik_host: Host of your website in Piwik
27# piwik_site_id: ID of your website in Piwik
28# piwik_enabled: Enable Piwik
29# demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
30# demo_mode_username: "Demo user"
31# share_public: Allow public url for entries
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fr.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fr.yml
index 084eb6df..5e1ecf26 100644
--- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fr.yml
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.fr.yml
@@ -8,7 +8,8 @@ export_csv: Activer l'export CSV
8export_json: Activer l'export JSON 8export_json: Activer l'export JSON
9export_txt: Activer l'export TXT 9export_txt: Activer l'export TXT
10export_xml: Activer l'export XML 10export_xml: Activer l'export XML
11pocket_consumer_key: Clé d'authentification Pocket pour importer les données (https://getpocket.com/developer/docs/authentication) 11import_with_rabbitmq: Activer RabbitMQ pour gérer les imports de façon asynchrone
12import_with_redis: Activer Redis pour gérer les imports de façon asynchrone
12shaarli_url: URL de Shaarli, si le service Shaarli est activé 13shaarli_url: URL de Shaarli, si le service Shaarli est activé
13share_diaspora: Activer le partage vers Diaspora 14share_diaspora: Activer le partage vers Diaspora
14share_mail: Activer le partage par email 15share_mail: Activer le partage par email
@@ -27,3 +28,4 @@ piwik_site_id: ID de votre site dans Piwik
27piwik_enabled: Activer Piwik 28piwik_enabled: Activer Piwik
28demo_mode_enabled: "Activer le mode démo ? (utiliser uniquement pour la démo publique de wallabag)" 29demo_mode_enabled: "Activer le mode démo ? (utiliser uniquement pour la démo publique de wallabag)"
29demo_mode_username: "Utilisateur de la démo" 30demo_mode_username: "Utilisateur de la démo"
31share_public: Autoriser une URL publique pour les articles
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.it.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.it.yml
index e4417139..9d820e4b 100644
--- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.it.yml
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.it.yml
@@ -8,7 +8,8 @@ export_csv: Abilita esportazione CSV
8export_json: Abilita esportazione JSON 8export_json: Abilita esportazione JSON
9export_txt: Abilita esportazione TXT 9export_txt: Abilita esportazione TXT
10export_xml: Abilita esportazione XML 10export_xml: Abilita esportazione XML
11pocket_consumer_key: Consumer key per Pocket per importare i contenuti (https://getpocket.com/developer/docs/authentication) 11# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
12# import_with_redis: Enable Redis to import data asynchronously
12shaarli_url: Shaarli URL, se il servizio è abilitato 13shaarli_url: Shaarli URL, se il servizio è abilitato
13share_diaspora: Abilita la condivisione con Diaspora 14share_diaspora: Abilita la condivisione con Diaspora
14share_mail: Abilita la condivisione per email 15share_mail: Abilita la condivisione per email
@@ -27,3 +28,4 @@ piwik_site_id: ID del tuo sito in Piwik
27piwik_enabled: Abilita Piwik 28piwik_enabled: Abilita Piwik
28demo_mode_enabled: "Abilita modalità demo ? (usato solo per la demo pubblica di wallabag)" 29demo_mode_enabled: "Abilita modalità demo ? (usato solo per la demo pubblica di wallabag)"
29demo_mode_username: "Utente Demo" 30demo_mode_username: "Utente Demo"
31# share_public: Allow public url for entries
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.oc.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.oc.yml
index 67880b8b..49dc7732 100644
--- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.oc.yml
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.oc.yml
@@ -8,7 +8,8 @@ export_csv: Activar l'expòrt CSV
8export_json: Activar l'expòrt JSON 8export_json: Activar l'expòrt JSON
9export_txt: Activar l'expòrt TXT 9export_txt: Activar l'expòrt TXT
10export_xml: Activar l'expòrt XML 10export_xml: Activar l'expòrt XML
11pocket_consumer_key: Clau d'autentificacion Pocket per importar las donadas (https://getpocket.com/developer/docs/authentication) 11# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
12# import_with_redis: Enable Redis to import data asynchronously
12shaarli_url: URL de Shaarli, se lo servici Shaarli es activat 13shaarli_url: URL de Shaarli, se lo servici Shaarli es activat
13share_diaspora: Activar lo partatge cap a Diaspora 14share_diaspora: Activar lo partatge cap a Diaspora
14share_mail: Activar lo partatge per corrièl 15share_mail: Activar lo partatge per corrièl
@@ -27,3 +28,4 @@ piwik_site_id: ID de vòstre site dins Piwik
27piwik_enabled: Activar Piwik 28piwik_enabled: Activar Piwik
28demo_mode_enabled: "Activar lo mode demostracion ? (utilizar solament per la demostracion publica de wallabag)" 29demo_mode_enabled: "Activar lo mode demostracion ? (utilizar solament per la demostracion publica de wallabag)"
29demo_mode_username: "Utilizaire de la demostracion" 30demo_mode_username: "Utilizaire de la demostracion"
31# share_public: Allow public url for entries
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.pl.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.pl.yml
index 87ca5060..7432b0a7 100644
--- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.pl.yml
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.pl.yml
@@ -8,7 +8,8 @@ export_csv: Włącz eksport do CSV
8export_json: Włącz eksport do JSON 8export_json: Włącz eksport do JSON
9export_txt: Włącz eksport do TXT 9export_txt: Włącz eksport do TXT
10export_xml: Włącz eksport do XML 10export_xml: Włącz eksport do XML
11pocket_consumer_key: Klucz klienta Pocket do importu zawartości (https://getpocket.com/developer/docs/authentication) 11import_with_rabbitmq: Włącz RabbitMQ dla asynchronicznego importu danych
12import_with_redis: Włącz Redis dla asynchronicznego importu danych
12shaarli_url: Adress URL Shaarli, jeżeli usługa jest włączona 13shaarli_url: Adress URL Shaarli, jeżeli usługa jest włączona
13share_diaspora: Włącz udostępnianie dla Diaspora 14share_diaspora: Włącz udostępnianie dla Diaspora
14share_mail: Włącz udostępnianie przez email 15share_mail: Włącz udostępnianie przez email
@@ -22,3 +23,9 @@ export: "eksport"
22import: "import" 23import: "import"
23misc: "różne" 24misc: "różne"
24modify_settings: "zatwierdz" 25modify_settings: "zatwierdz"
26piwik_host: Host twojej strony Piwik
27piwik_site_id: ID twojej strony Piwik
28piwik_enabled: Włacz Piwik
29demo_mode_enabled: "Włacz tryb demo? (używany wyłącznie dla publicznej demonstracji Wallabag)"
30demo_mode_username: "Użytkownik Demonstracyjny"
31share_public: Zezwalaj na publiczny adres url dla wpisow
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.ro.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.ro.yml
index f5ff8c6a..20d664f7 100644
--- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.ro.yml
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.ro.yml
@@ -8,7 +8,8 @@ export_csv: Permite exportare CSV
8export_json: Permite exportare JSON 8export_json: Permite exportare JSON
9export_txt: Permite exportare TXT 9export_txt: Permite exportare TXT
10export_xml: Permite exportare XML 10export_xml: Permite exportare XML
11pocket_consumer_key: Cheie consumator pentru importarea contentului din Pocket (https://getpocket.com/developer/docs/authentication) 11# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
12# import_with_redis: Enable Redis to import data asynchronously
12shaarli_url: Shaarli URL, dacă serviciul este permis 13shaarli_url: Shaarli URL, dacă serviciul este permis
13share_diaspora: Permite share către Diaspora 14share_diaspora: Permite share către Diaspora
14share_mail: Permite share prin email 15share_mail: Permite share prin email
@@ -22,3 +23,9 @@ export: "exportă"
22import: "importă" 23import: "importă"
23misc: "diverse" 24misc: "diverse"
24modify_settings: "aplică" 25modify_settings: "aplică"
26# piwik_host: Host of your website in Piwik
27# piwik_site_id: ID of your website in Piwik
28# piwik_enabled: Enable Piwik
29# demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
30# demo_mode_username: "Demo user"
31# share_public: Allow public url for entries
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.tr.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.tr.yml
new file mode 100644
index 00000000..4b4d3edb
--- /dev/null
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.tr.yml
@@ -0,0 +1,31 @@
1# download_pictures: Download pictures on your server
2# carrot: Enable share to Carrot
3# diaspora_url: Diaspora URL, if the service is enabled
4# export_epub: Enable ePub export
5# export_mobi: Enable .mobi export
6# export_pdf: Enable PDF export
7# export_csv: Enable CSV export
8# export_json: Enable JSON export
9# export_txt: Enable TXT export
10# export_xml: Enable XML export
11# import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
12# import_with_redis: Enable Redis to import data asynchronously
13# shaarli_url: Shaarli URL, if the service is enabled
14# share_diaspora: Enable share to Diaspora
15# share_mail: Enable share by email
16# share_shaarli: Enable share to Shaarli
17# share_twitter: Enable share to Twitter
18# show_printlink: Display a link to print content
19# wallabag_support_url: Support URL for wallabag
20# wallabag_url: URL of *your* wallabag instance
21# entry: "article"
22# export: "export"
23# import: "import"
24# misc: "misc"
25# modify_settings: "apply"
26# piwik_host: Host of your website in Piwik
27# piwik_site_id: ID of your website in Piwik
28# piwik_enabled: Enable Piwik
29# demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
30# demo_mode_username: "Demo user"
31# share_public: Allow public url for entries
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-114.png b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-114.png
index 0e96edd5..0e96edd5 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-114.png
+++ b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-114.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-120.png b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-120.png
index dc5aab1c..dc5aab1c 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-120.png
+++ b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-120.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-144.png b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-144.png
index 1d005db6..1d005db6 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-144.png
+++ b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-144.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-152.png b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-152.png
index f915231f..f915231f 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-152.png
+++ b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-152.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-57.png b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-57.png
index 5aa19ed9..5aa19ed9 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-57.png
+++ b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-57.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-72.png b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-72.png
index b8b48e1b..b8b48e1b 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-72.png
+++ b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-72.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-76.png b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-76.png
index 9f9dba27..9f9dba27 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon-76.png
+++ b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon-76.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon.png b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon.png
index 9cf29e2b..9cf29e2b 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/apple-touch-icon.png
+++ b/app/Resources/static/themes/_global/img/appicon/apple-touch-icon.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/favicon.ico b/app/Resources/static/themes/_global/img/appicon/favicon.ico
index 0346558b..0346558b 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/appicon/favicon.ico
+++ b/app/Resources/static/themes/_global/img/appicon/favicon.ico
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/bg-select.png b/app/Resources/static/themes/_global/img/bg-select.png
index 95120441..95120441 100644
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/bg-select.png
+++ b/app/Resources/static/themes/_global/img/bg-select.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/carrot-icon--black.png b/app/Resources/static/themes/_global/img/icons/carrot-icon--black.png
index 6da7925b..6da7925b 100644
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/carrot-icon--black.png
+++ b/app/Resources/static/themes/_global/img/icons/carrot-icon--black.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/carrot-icon--white.png b/app/Resources/static/themes/_global/img/icons/carrot-icon--white.png
index a70044b6..a70044b6 100644
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/carrot-icon--white.png
+++ b/app/Resources/static/themes/_global/img/icons/carrot-icon--white.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/diaspora-icon--black.png b/app/Resources/static/themes/_global/img/icons/diaspora-icon--black.png
index 32bca194..32bca194 100644
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/diaspora-icon--black.png
+++ b/app/Resources/static/themes/_global/img/icons/diaspora-icon--black.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/diaspora-icon--white.png b/app/Resources/static/themes/_global/img/icons/diaspora-icon--white.png
index fc48d47c..fc48d47c 100644
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/img/icons/diaspora-icon--white.png
+++ b/app/Resources/static/themes/_global/img/icons/diaspora-icon--white.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-other_themes.png b/app/Resources/static/themes/_global/img/logo-other_themes.png
index c90aa46f..c90aa46f 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-other_themes.png
+++ b/app/Resources/static/themes/_global/img/logo-other_themes.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-square.png b/app/Resources/static/themes/_global/img/logo-square.png
index d5e05977..d5e05977 100644
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-square.png
+++ b/app/Resources/static/themes/_global/img/logo-square.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo-w.png b/app/Resources/static/themes/_global/img/logo-w.png
index 65dc607b..65dc607b 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo-w.png
+++ b/app/Resources/static/themes/_global/img/logo-w.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo-wallabag.svg b/app/Resources/static/themes/_global/img/logo-wallabag.svg
index 40193e1c..40193e1c 100644
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo-wallabag.svg
+++ b/app/Resources/static/themes/_global/img/logo-wallabag.svg
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/bookmarklet.js b/app/Resources/static/themes/_global/js/bookmarklet.js
index 2afdfc3c..2afdfc3c 100644
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/bookmarklet.js
+++ b/app/Resources/static/themes/_global/js/bookmarklet.js
diff --git a/app/Resources/static/themes/_global/js/restoreScroll.js b/app/Resources/static/themes/_global/js/restoreScroll.js
new file mode 100644
index 00000000..9c4d7e20
--- /dev/null
+++ b/app/Resources/static/themes/_global/js/restoreScroll.js
@@ -0,0 +1,25 @@
1function supportsLocalStorage() {
2 try {
3 return 'localStorage' in window && window.localStorage !== null;
4 } catch (e) {
5 return false;
6 }
7}
8
9function savePercent(id, percent) {
10 if (!supportsLocalStorage()) { return false; }
11 localStorage['wallabag.article.' + id + '.percent'] = percent;
12 return true;
13}
14
15function retrievePercent(id) {
16 if (!supportsLocalStorage()) { return false; }
17
18 var bheight = $(document).height();
19 var percent = localStorage['wallabag.article.' + id + '.percent'];
20 var scroll = bheight * percent;
21
22 $('html,body').animate({ scrollTop: scroll }, 'fast');
23
24 return true;
25}
diff --git a/app/Resources/static/themes/baggy/css/font.css b/app/Resources/static/themes/baggy/css/font.css
new file mode 100755
index 00000000..cae7904a
--- /dev/null
+++ b/app/Resources/static/themes/baggy/css/font.css
@@ -0,0 +1,6 @@
1@font-face {
2 font-family: "PT Sans";
3 font-style: normal;
4 font-weight: 700;
5 src: local("PT Sans Bold"), local("PTSans-Bold"), url("../fonts/pt_sans/regular/PTS55F.woff") format("woff");
6}
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/main.css b/app/Resources/static/themes/baggy/css/main.css
index ba430cc4..7ffaa12c 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/main.css
+++ b/app/Resources/static/themes/baggy/css/main.css
@@ -15,7 +15,7 @@ html {
15} 15}
16 16
17body { 17body {
18 background-color: #EEE; 18 background-color: #eee;
19} 19}
20 20
21.login { 21.login {
@@ -28,9 +28,9 @@ body {
28} 28}
29 29
30.login form { 30.login form {
31 background-color: #FFF; 31 background-color: #fff;
32 padding: 1.5em; 32 padding: 1.5em;
33 box-shadow: 0 1px 8px rgba(0,0,0,0.9); 33 box-shadow: 0 1px 8px rgba(0, 0, 0, 0.9);
34 width: 20em; 34 width: 20em;
35 position: absolute; 35 position: absolute;
36 top: 8em; 36 top: 8em;
@@ -50,7 +50,7 @@ body {
50 ========================================================================== */ 50 ========================================================================== */
51 51
52::selection { 52::selection {
53 color: #FFF; 53 color: #fff;
54 background-color: #000; 54 background-color: #000;
55} 55}
56 56
@@ -65,12 +65,16 @@ body {
65 left: 0.6em; 65 left: 0.6em;
66} 66}
67 67
68h2, h3, h4 { 68h2,
69 font-family: 'PT Sans', sans-serif; 69h3,
70h4 {
71 font-family: "PT Sans", sans-serif;
70 text-transform: uppercase; 72 text-transform: uppercase;
71} 73}
72 74
73p, li, label { 75p,
76li,
77label {
74 color: #666; 78 color: #666;
75} 79}
76 80
@@ -79,28 +83,38 @@ a {
79 font-weight: bold; 83 font-weight: bold;
80} 84}
81 85
82a:hover, a:focus { 86a.nostyle {
87 text-decoration: none;
88}
89
90a:hover,
91a:focus {
83 text-decoration: none; 92 text-decoration: none;
84} 93}
85 94
86form fieldset { 95form fieldset {
87 border:0; 96 border: 0;
88 padding: 0; 97 padding: 0;
89 margin: 0; 98 margin: 0;
90} 99}
91 100
92form input[type="text"], form input[type="number"], select, form input[type="password"], form input[type="url"], form input[type="email"] { 101form input[type="text"],
102form input[type="number"],
103select,
104form input[type="password"],
105form input[type="url"],
106form input[type="email"] {
93 border: 1px solid #999; 107 border: 1px solid #999;
94 padding: 0.5em 1em; 108 padding: 0.5em 1em;
95 min-width: 12em; 109 min-width: 12em;
96 color: #666; 110 color: #666;
97} 111}
98 112
99@media screen and (-webkit-min-device-pixel-ratio:0){ 113@media screen and (-webkit-min-device-pixel-ratio: 0) {
100 select{ 114 select {
101 -webkit-appearance: none; 115 -webkit-appearance: none;
102 border-radius: 0; 116 border-radius: 0;
103 background: #FFF url(../img/bg-select.png) no-repeat right center; 117 background: #fff url("../../_global/img/bg-select.png") no-repeat right center;
104 } 118 }
105} 119}
106 120
@@ -127,31 +141,34 @@ form .row {
127 margin-bottom: 0.5em; 141 margin-bottom: 0.5em;
128} 142}
129 143
130form button, input[type="submit"] { 144form button,
131 cursor:pointer; 145input[type="submit"] {
146 cursor: pointer;
132 background-color: #000; 147 background-color: #000;
133 color: #FFF; 148 color: #fff;
134 border:0;
135 padding: 0.5em 1em; 149 padding: 0.5em 1em;
136 display: inline-block; 150 display: inline-block;
137 border:1px solid #000; 151 border: 1px solid #000;
138} 152}
139 153
140 form button:hover, form button:focus, input[type="submit"]:hover, input[type="submit"]:focus { 154form button:hover,
141 background-color: #FFF; 155form button:focus,
142 color: #000; 156input[type="submit"]:hover,
143 -webkit-transition: all 0.5s ease; 157input[type="submit"]:focus {
144 -moz-transition: all 0.5s ease; 158 background-color: #fff;
145 -ms-transition: all 0.5s ease; 159 color: #000;
146 -o-transition: all 0.5s ease; 160 -webkit-transition: all 0.5s ease;
147 transition: all 0.5s ease; 161 -moz-transition: all 0.5s ease;
148 } 162 -ms-transition: all 0.5s ease;
163 -o-transition: all 0.5s ease;
164 transition: all 0.5s ease;
165}
149 166
150#bookmarklet { 167#bookmarklet {
151 cursor: move; 168 cursor: move;
152} 169}
153 170
154h2:after { 171h2::after {
155 content: ""; 172 content: "";
156 height: 4px; 173 height: 4px;
157 width: 70px; 174 width: 70px;
@@ -163,12 +180,12 @@ h2:after {
163 padding: 0; 180 padding: 0;
164 margin: 0; 181 margin: 0;
165} 182}
166 .links li {
167 list-style: none;
168 margin: 0;
169 padding: 0;
170 }
171 183
184.links li {
185 list-style: none;
186 margin: 0;
187 padding: 0;
188}
172 189
173#links { 190#links {
174 position: fixed; 191 position: fixed;
@@ -179,119 +196,132 @@ h2:after {
179 background-color: #333; 196 background-color: #333;
180 padding-top: 9.5em; 197 padding-top: 9.5em;
181 height: 100%; 198 height: 100%;
182 box-shadow:inset -4px 0 20px rgba(0,0,0,0.6); 199 box-shadow: inset -4px 0 20px rgba(0, 0, 0, 0.6);
183 z-index: 15; 200 z-index: 15;
184} 201}
185 202
186#main { 203#main {
187 margin-left: 13em; 204 margin-left: 12em;
188 position: relative; 205 position: relative;
189 z-index: 10; 206 z-index: 10;
190 padding-right: 5%; 207 padding-right: 5%;
191 padding-bottom: 1em; 208 padding-bottom: 1em;
192} 209}
193 210
194 #links > li > a { 211#links > li > a {
195 display: block; 212 display: block;
196 padding: 0.5em 2em 0.5em 1em; 213 padding: 0.5em 2em 0.5em 1em;
197 color: #FFF; 214 color: #fff;
198 position: relative; 215 position: relative;
199 text-transform: uppercase; 216 text-transform: uppercase;
200 text-decoration: none; 217 text-decoration: none;
201 font-weight: normal; 218 font-weight: normal;
202 font-family: 'PT Sans', sans-serif; 219 font-family: "PT Sans", sans-serif;
203 -webkit-transition: all 0.5s ease; 220 -webkit-transition: all 0.5s ease;
204 -moz-transition: all 0.5s ease; 221 -moz-transition: all 0.5s ease;
205 -ms-transition: all 0.5s ease; 222 -ms-transition: all 0.5s ease;
206 -o-transition: all 0.5s ease; 223 -o-transition: all 0.5s ease;
207 transition: all 0.5s ease; 224 transition: all 0.5s ease;
208 } 225}
209
210 #links > li > a:hover, #links > li > a:focus {
211 background-color: #999;
212 color: #000;
213 }
214 226
215 #links .current:after { 227#links > li > a:hover,
216 content: ""; 228#links > li > a:focus {
217 width: 0; 229 background-color: #999;
218 height: 0; 230 color: #000;
219 position: absolute; 231}
220 border-style: solid;
221 border-width: 10px;
222 border-color: transparent #EEE transparent transparent;
223 right: 0;
224 top: 50%;
225 margin-top: -10px;
226 }
227 232
228 #links li:last-child { 233#links .current::after {
229 position: fixed; 234 content: "";
230 bottom: 1em; 235 width: 0;
231 width: 10em; 236 height: 0;
232 } 237 position: absolute;
238 border-style: solid;
239 border-width: 10px;
240 border-color: transparent #eee transparent transparent;
241 right: 0;
242 top: 50%;
243 margin-top: -10px;
244}
233 245
234 #links li:last-child a:before { 246#links li:last-child {
235 font-size: 1.2em; 247 position: fixed;
236 position: relative; 248 bottom: 1em;
237 top: 2px; 249 width: 10em;
238 } 250}
239 251
252#links li:last-child a::before {
253 font-size: 1.2em;
254 position: relative;
255 top: 2px;
256}
240 257
241#sort { 258#sort {
242 padding: 0; 259 padding: 0;
243 list-style-type: none; 260 list-style-type: none;
244 opacity: 0.5; 261 opacity: 0.5;
245 display: inline-block; 262 display: inline-block;
246} 263}
247 264
248#sort li { 265#sort li {
249 display: inline; 266 display: inline;
250 font-size: 0.9em; 267 font-size: 0.9em;
251} 268}
252 269
253#sort li + li { 270#sort li + li {
254 margin-left: 10px; 271 margin-left: 10px;
255} 272}
256 273
257#sort a { 274#sort a {
258 padding: 2px 2px 0; 275 padding: 2px 2px 0;
259 vertical-align: middle; 276 vertical-align: middle;
260} 277}
261 278
262#sort img { 279#sort img {
263 vertical-align: baseline; 280 vertical-align: baseline;
264} 281}
282
265#sort img:hover { 283#sort img:hover {
266 cursor: pointer; 284 cursor: pointer;
267} 285}
268 286
269#display-mode { 287#display-mode {
270 float: right; 288 float: right;
271 vertical-align: middle;
272 margin-top: 10px; 289 margin-top: 10px;
273 margin-bottom: 10px; 290 margin-bottom: 10px;
274 opacity: 0.5; 291 opacity: 0.5;
275} 292}
293
276#listmode { 294#listmode {
277 width: 16px; 295 width: 16px;
278 display: inline-block; 296 display: inline-block;
279 text-decoration: none; 297 text-decoration: none;
280} 298}
299
281#listmode a:hover { 300#listmode a:hover {
282 opacity: 1; 301 opacity: 1;
283} 302}
303
284#listmode.tablemode { 304#listmode.tablemode {
285 background-image: url("../img/baggy/table.png"); 305 background-image: url("../img/baggy/table.png");
286 background-repeat: no-repeat; 306 background-repeat: no-repeat;
287 background-position: bottom; 307 background-position: bottom;
288} 308}
309
289#listmode.listmode { 310#listmode.listmode {
290 background-image: url("../img/baggy/list.png"); 311 background-image: url("../img/baggy/list.png");
291 background-repeat: no-repeat; 312 background-repeat: no-repeat;
292 background-position: bottom; 313 background-position: bottom;
293} 314}
294 315
316#warning_message {
317 position: fixed;
318 background-color: #ff6347;
319 z-index: 1000;
320 bottom: 0;
321 left: 0;
322 width: 100%;
323 color: #000;
324}
295 325
296/* ========================================================================== 326/* ==========================================================================
297 2 = Layout 327 2 = Layout
@@ -319,12 +349,52 @@ footer a {
319} 349}
320 350
321.list-entries { 351.list-entries {
322 letter-spacing:-5px; 352 letter-spacing: -5px;
323} 353}
324 354
325.listmode .entry { 355.listmode .entry {
326 width: 100%!important; 356 width: 100% !important;
327 margin-left: 0!important; 357 margin-left: 0 !important;
358}
359
360.card-entry-labels {
361 position: absolute;
362 top: 100px;
363 left: -1em;
364 z-index: 90;
365 max-width: 50%;
366 padding-left: 0;
367}
368
369.card-entry-labels li {
370 margin: 10px 10px 10px auto;
371 padding: 5px 12px 5px 25px;
372 background-color: rgba(0, 0, 0, 0.6);
373 border-radius: 0 3px 3px 0;
374 color: #fff;
375 cursor: default;
376 max-height: 2em;
377 overflow: hidden;
378 text-overflow: ellipsis;
379 white-space: nowrap;
380}
381
382.card-entry-tags {
383 max-height: 2em;
384 overflow-y: hidden;
385 padding: 0;
386}
387
388.card-entry-tags li {
389 display: inline-block;
390 margin: 0 5px;
391 padding: 5px 12px;
392 background-color: rgba(0, 0, 0, 0.6);
393 border-radius: 3px;
394 max-height: 2em;
395 overflow: hidden;
396 text-overflow: ellipsis;
397 color: #fff;
328} 398}
329 399
330.list-entries + .results { 400.list-entries + .results {
@@ -344,47 +414,39 @@ footer a {
344} 414}
345 415
346.entry { 416.entry {
347 background-color: #FFF; 417 background-color: #fff;
348 letter-spacing:normal; 418 letter-spacing: normal;
349 box-shadow: 0 3px 7px rgba(0,0,0,0.3); 419 box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
350 display: inline-block; 420 display: inline-block;
351 width: 32%; 421 width: 32%;
352 margin-bottom: 1.5em; 422 margin-bottom: 1.5em;
353 vertical-align: top; 423 vertical-align: top;
354 margin-left: 1.5%; 424 margin-right: 1%;
355 position: relative; 425 position: relative;
356 overflow: hidden; 426 overflow: hidden;
357 padding: 1.5em 1.5em 3em 1.5em; 427 padding: 1.5em 1.5em 3em;
358 428 height: 440px;
359 /* Removing CSS transitions because they make the switch from list view to
360 * table view jerky
361 */
362 /* -webkit-transition: all 0.5s ease; */
363 /* -moz-transition: all 0.5s ease; */
364 /* -ms-transition: all 0.5s ease; */
365 /* -o-transition: all 0.5s ease; */
366 /* transition: all 0.5s ease; */
367} 429}
368 430
369.entry:before { 431.entry::before {
370 content: ""; 432 content: "";
371 width: 0; 433 width: 0;
372 height: 0; 434 height: 0;
373 border-style:solid; 435 border-style: solid;
374 border-color: transparent transparent #000 transparent; 436 border-color: transparent transparent #000;
375 border-width: 10px; 437 border-width: 10px;
376 position: absolute; 438 position: absolute;
377 bottom: 0.3em; 439 bottom: 0.3em;
378 z-index: 10; 440 z-index: 10;
379 right: 1.5em; 441 right: 1.5em;
380 -webkit-transition: all 0.5s ease; 442 -webkit-transition: all 0.5s ease;
381 -moz-transition: all 0.5s ease; 443 -moz-transition: all 0.5s ease;
382 -ms-transition: all 0.5s ease; 444 -ms-transition: all 0.5s ease;
383 -o-transition: all 0.5s ease; 445 -o-transition: all 0.5s ease;
384 transition: all 0.5s ease; 446 transition: all 0.5s ease;
385} 447}
386 448
387.entry:after { 449.entry::after {
388 content: ""; 450 content: "";
389 position: absolute; 451 position: absolute;
390 height: 7px; 452 height: 7px;
@@ -393,21 +455,21 @@ footer a {
393 left: 0; 455 left: 0;
394 background-color: #000; 456 background-color: #000;
395 -webkit-transition: all 0.5s ease; 457 -webkit-transition: all 0.5s ease;
396 -moz-transition: all 0.5s ease; 458 -moz-transition: all 0.5s ease;
397 -ms-transition: all 0.5s ease; 459 -ms-transition: all 0.5s ease;
398 -o-transition: all 0.5s ease; 460 -o-transition: all 0.5s ease;
399 transition: all 0.5s ease; 461 transition: all 0.5s ease;
400} 462}
401 463
402.entry:hover { 464.entry:hover {
403 box-shadow: 0 3px 10px rgba(0,0,0,1); 465 box-shadow: 0 3px 10px rgba(0, 0, 0, 1);
404} 466}
405 467
406.entry:hover:after { 468.entry:hover::after {
407 height: 40px; 469 height: 40px;
408} 470}
409 471
410.entry:hover:before { 472.entry:hover::before {
411 bottom: 2.4em; 473 bottom: 2.4em;
412} 474}
413 475
@@ -419,12 +481,14 @@ footer a {
419 text-transform: none; 481 text-transform: none;
420 margin-bottom: 0; 482 margin-bottom: 0;
421 line-height: 1.2; 483 line-height: 1.2;
484 text-align: justify;
485 -moz-text-align-last: center;
486 text-align-last: center;
422} 487}
423 488
424 .entry h2:after { 489.entry h2::after {
425 content: none; 490 content: none;
426 } 491}
427
428 492
429.entry h2 a { 493.entry h2 a {
430 display: block; 494 display: block;
@@ -432,24 +496,16 @@ footer a {
432 color: #000; 496 color: #000;
433 word-wrap: break-word; 497 word-wrap: break-word;
434 -webkit-transition: all 0.5s ease; 498 -webkit-transition: all 0.5s ease;
435 -moz-transition: all 0.5s ease; 499 -moz-transition: all 0.5s ease;
436 -ms-transition: all 0.5s ease; 500 -ms-transition: all 0.5s ease;
437 -o-transition: all 0.5s ease; 501 -o-transition: all 0.5s ease;
438 transition: all 0.5s ease; 502 transition: all 0.5s ease;
439} 503}
440/*
441.entry h2 a:after {
442 content: "";
443 position: absolute;
444 top: 0;
445 width: 100%;
446 height: 100%;
447 left: 0;
448}
449*/
450 504
451img.preview { 505img.preview {
452 max-width: 100%; 506 max-width: calc(100% + 3em);
507 left: -1.5em;
508 position: relative;
453} 509}
454 510
455.entry p { 511.entry p {
@@ -458,9 +514,9 @@ img.preview {
458 line-height: 1.7; 514 line-height: 1.7;
459} 515}
460 516
461 .entry h2 a:first-letter { 517.entry h2 a::first-letter {
462 text-transform: uppercase; 518 text-transform: uppercase;
463 } 519}
464 520
465.entry:hover .tools { 521.entry:hover .tools {
466 bottom: 0; 522 bottom: 0;
@@ -475,26 +531,26 @@ img.preview {
475 padding-right: 0.5em; 531 padding-right: 0.5em;
476 text-align: right; 532 text-align: right;
477 -webkit-transition: all 0.5s ease; 533 -webkit-transition: all 0.5s ease;
478 -moz-transition: all 0.5s ease; 534 -moz-transition: all 0.5s ease;
479 -ms-transition: all 0.5s ease; 535 -ms-transition: all 0.5s ease;
480 -o-transition: all 0.5s ease; 536 -o-transition: all 0.5s ease;
481 transition: all 0.5s ease; 537 transition: all 0.5s ease;
482} 538}
483 539
484 .entry .tools a { 540.entry .tools a {
485 color: #666; 541 color: #666;
486 text-decoration: none; 542 text-decoration: none;
487 display: block; 543 display: block;
488 padding: 0.4em; 544 padding: 0.4em;
489 } 545}
490 546
491 .entry .tools a:hover { 547.entry .tools a:hover {
492 color: #FFF; 548 color: #fff;
493 } 549}
494 550
495 .entry .tools li { 551.entry .tools li {
496 display: inline-block; 552 display: inline-block;
497 } 553}
498 554
499.entry:nth-child(3n+1) { 555.entry:nth-child(3n+1) {
500 margin-left: 0; 556 margin-left: 0;
@@ -510,11 +566,12 @@ img.preview {
510 vertical-align: top; 566 vertical-align: top;
511 letter-spacing: normal; 567 letter-spacing: normal;
512 width: 50%; 568 width: 50%;
569 text-align: right;
513} 570}
514 571
515div.pagination ul { 572div.pagination ul {
516 text-align: right; 573 text-align: right;
517 margin-bottom:50px; 574 margin-bottom: 50px;
518} 575}
519 576
520.nb-results { 577.nb-results {
@@ -533,11 +590,13 @@ div.pagination ul a {
533 text-decoration: none; 590 text-decoration: none;
534} 591}
535 592
536div.pagination ul a:hover, div.pagination ul a:focus { 593div.pagination ul a:hover,
537 text-decoration: underline; 594div.pagination ul a:focus {
595 text-decoration: underline;
538} 596}
539 597
540div.pagination ul .disabled { 598div.pagination ul .prev.disabled,
599div.pagination ul .next.disabled {
541 display: none; 600 display: none;
542} 601}
543 602
@@ -556,7 +615,7 @@ div.pagination ul .current {
556 ========================================================================== */ 615 ========================================================================== */
557 616
558.popup-form { 617.popup-form {
559 background: rgba(0,0,0,0.5); 618 background: rgba(0, 0, 0, 0.5);
560 position: absolute; 619 position: absolute;
561 top: 0; 620 top: 0;
562 left: 10em; 621 left: 10em;
@@ -567,11 +626,11 @@ div.pagination ul .current {
567 margin-top: -30% !important; 626 margin-top: -30% !important;
568 padding: 2em; 627 padding: 2em;
569 display: none; 628 display: none;
570 border-left: 1px #EEE solid; 629 border-left: 1px #eee solid;
571} 630}
572 631
573 .popup-form form { 632.popup-form form {
574 background-color: #FFF; 633 background-color: #fff;
575 position: absolute; 634 position: absolute;
576 top: 0; 635 top: 0;
577 left: 0; 636 left: 0;
@@ -580,51 +639,52 @@ div.pagination ul .current {
580 width: 400px; 639 width: 400px;
581 height: 200px; 640 height: 200px;
582 padding: 2em; 641 padding: 2em;
583 } 642}
584 643
585#bagit-form-form .addurl { 644#bagit-form-form .addurl {
586 margin-left: 0; 645 margin-left: 0;
587} 646}
588 647
589.closeMessage, 648.closeMessage,
590.close-button { 649.close-button {
591 background-color: #000; 650 background-color: #000;
592 color: #FFF; 651 color: #fff;
593 font-size: 1.2em; 652 font-size: 1.2em;
594 line-height: 1.6; 653 line-height: 1.6;
595 width: 1.6em; 654 width: 1.6em;
596 height: 1.6em; 655 height: 1.6em;
597 text-align: center; 656 text-align: center;
598 text-decoration: none; 657 text-decoration: none;
599} 658}
600 .closeMessage:hover, 659
601 .closeMessage:focus, 660.closeMessage:hover,
602 .close-button:hover, 661.closeMessage:focus,
603 .close-button:focus { 662.close-button:hover,
663.close-button:focus {
604 background-color: #999; 664 background-color: #999;
605 color: #000; 665 color: #000;
606 } 666}
607 667
608.close-button--popup { 668.close-button--popup {
609 display: inline-block; 669 display: inline-block;
610 position: absolute; 670 position: absolute;
611 top: 0; 671 top: 0;
612 right: 0; 672 right: 0;
613 font-size: 1.4em; 673 font-size: 1.4em;
614} 674}
615 675
616.active-current { 676.active-current {
617 background-color: #999; 677 background-color: #999;
618} 678}
619 679
620.active-current:after { 680.active-current::after {
621 content: ""; 681 content: "";
622 width: 0; 682 width: 0;
623 height: 0; 683 height: 0;
624 position: absolute; 684 position: absolute;
625 border-style: solid; 685 border-style: solid;
626 border-width: 10px; 686 border-width: 10px;
627 border-color: transparent #EEE transparent transparent; 687 border-color: transparent #eee transparent transparent;
628 right: 0; 688 right: 0;
629 top: 50%; 689 top: 50%;
630 margin-top: -10px; 690 margin-top: -10px;
@@ -637,26 +697,27 @@ div.pagination ul .current {
637.add-to-wallabag-link-after { 697.add-to-wallabag-link-after {
638 background-color: #000; 698 background-color: #000;
639 color: #fff; 699 color: #fff;
640 padding: 0 3px 2px 3px; 700 padding: 0 3px 2px;
641} 701}
642 702
643a.add-to-wallabag-link-after { 703a.add-to-wallabag-link-after {
644 visibility: hidden; 704 visibility: hidden;
645 position: absolute; 705 position: absolute;
646 opacity: 0; 706 opacity: 0;
647 transition-duration: 2s; 707 transition-duration: 2s;
648 transition-timing-function: ease-out; 708 transition-timing-function: ease-out;
649} 709}
650 710
651#article article a:hover + a.add-to-wallabag-link-after, a.add-to-wallabag-link-after:hover { 711#article article a:hover + a.add-to-wallabag-link-after,
652 opacity: 1; 712a.add-to-wallabag-link-after:hover {
653 visibility: visible; 713 opacity: 1;
654 transition-duration: .3s; 714 visibility: visible;
655 transition-timing-function: ease-in; 715 transition-duration: 0.3s;
716 transition-timing-function: ease-in;
656} 717}
657 718
658a.add-to-wallabag-link-after:after { 719a.add-to-wallabag-link-after::after {
659 content: "w"; 720 content: "w";
660} 721}
661 722
662#add-link-result { 723#add-link-result {
@@ -664,29 +725,78 @@ a.add-to-wallabag-link-after:after {
664 font-size: 0.9em; 725 font-size: 0.9em;
665} 726}
666 727
728.btn-clickable {
729 cursor: pointer;
730}
731
667/* ========================================================================== 732/* ==========================================================================
668 3 = Pictos 733 3 = Pictos
669 ========================================================================== */ 734 ========================================================================== */
670 735
671@font-face { 736@font-face {
672 font-family: 'icomoon'; 737 font-family: icomoon;
673 src:url('../fonts/icomoon.eot?-s0mcsx'); 738 src: url("../fonts/icomoon.eot?-s0mcsx");
674 src:url('../fonts/icomoon.eot?#iefix-s0mcsx') format('embedded-opentype'), 739 src:
675 url('../fonts/icomoon.woff?-s0mcsx') format('woff'), 740 url("../fonts/icomoon.eot?#iefix-s0mcsx") format("embedded-opentype"),
676 url('../fonts/icomoon.ttf?-s0mcsx') format('truetype'), 741 url("../fonts/icomoon.woff?-s0mcsx") format("woff"),
677 url('../fonts/icomoon.svg?-s0mcsx#icomoon') format('svg'); 742 url("../fonts/icomoon.ttf?-s0mcsx") format("truetype"),
743 url("../fonts/icomoon.svg?-s0mcsx#icomoon") format("svg");
744 font-weight: normal;
745 font-style: normal;
746}
747
748@font-face {
749 font-family: 'Material Icons';
750 font-style: normal;
751 font-weight: 400;
752 src: url(../fonts/MaterialIcons-Regular.eot);
753
754 /* For IE6-8 */
755 src: local("Material Icons"), local("MaterialIcons-Regular"), url(../fonts/MaterialIcons-Regular.woff2) format("woff2"), url(../fonts/MaterialIcons-Regular.woff) format("woff"), url(../fonts/MaterialIcons-Regular.ttf) format("truetype");
756}
757
758.material-icons {
759 font-family: 'Material Icons';
678 font-weight: normal; 760 font-weight: normal;
679 font-style: normal; 761 font-style: normal;
762 font-size: 1em; /* Preferred icon size */
763 width: 1em;
764 height: 1em;
765 display: inline-block;
766 line-height: 1;
767 text-transform: none;
768 letter-spacing: normal;
769 word-wrap: normal;
770 white-space: nowrap;
771 direction: ltr;
772
773 /* Support for all WebKit browsers. */
774 -webkit-font-smoothing: antialiased;
775
776 /* Support for Safari and Chrome. */
777 text-rendering: optimizeLegibility;
778
779 /* Support for Firefox. */
780 -moz-osx-font-smoothing: grayscale;
781
782 /* Support for IE. */
783 font-feature-settings: 'liga';
680} 784}
681 785
786.material-icons.md-18 { font-size: 18px; }
787.material-icons.md-24 { font-size: 24px; }
788.material-icons.md-36 { font-size: 36px; }
789.material-icons.md-48 { font-size: 48px; }
790
682.icon span, 791.icon span,
683.icon-image span { 792.icon-image span {
684 position: absolute; 793 position: absolute;
685 top: -9999px; 794 top: -9999px;
686} 795}
687 796
688[class^="icon-"]:before, [class*=" icon-"]:before { 797[class^="icon-"]::before,
689 font-family: 'icomoon'; 798[class*=" icon-"]::before {
799 font-family: icomoon;
690 speak: none; 800 speak: none;
691 font-style: normal; 801 font-style: normal;
692 font-weight: normal; 802 font-weight: normal;
@@ -699,93 +809,113 @@ a.add-to-wallabag-link-after:after {
699 -moz-osx-font-smoothing: grayscale; 809 -moz-osx-font-smoothing: grayscale;
700} 810}
701 811
702.icon-flattr:before { 812.icon-flattr::before {
703 content: "\e800"; 813 content: "\ead4";
704} 814}
705.icon-mail:before { 815
706 content: "\e80a"; 816.icon-mail::before {
817 content: "\ea86";
707} 818}
708.icon-up-open:before { 819
820.icon-up-open::before {
709 content: "\e80b"; 821 content: "\e80b";
710} 822}
711.icon-star:before { 823
712 content: "\e805"; 824.icon-star::before {
825 content: "\e9d9";
713} 826}
714.icon-check:before { 827
715 content: "\e804"; 828.icon-check::before {
829 content: "\ea10";
716} 830}
717.icon-link:before { 831
718 content: "\e801"; 832.icon-link::before {
833 content: "\e9cb";
719} 834}
720.icon-reply:before { 835
836.icon-reply::before {
721 content: "\e806"; 837 content: "\e806";
722} 838}
723.icon-menu:before { 839
724 content: "\e802"; 840.icon-menu::before {
841 content: "\e9bd";
725} 842}
726.icon-clock:before { 843
844.icon-clock::before {
727 content: "\e803"; 845 content: "\e803";
728} 846}
729.icon-twitter:before { 847
730 content: "\e807"; 848.icon-twitter::before {
849 content: "\ea91";
731} 850}
732.icon-down-open:before { 851
852.icon-down-open::before {
733 content: "\e809"; 853 content: "\e809";
734} 854}
735.icon-trash:before { 855
736 content: "\e80c"; 856.icon-trash::before {
857 content: "\e9ac";
737} 858}
738.icon-delete:before { 859
739 content: "\e600"; 860.icon-delete::before {
861 content: "\ea0d";
740} 862}
741.icon-power:before { 863
742 content: "\e601"; 864.icon-power::before {
865 content: "\ea14";
743} 866}
744.icon-arrow-up-thick:before { 867
745 content: "\e602"; 868.icon-arrow-up-thick::before {
869 content: "\ea3a";
746} 870}
747.icon-rss:before { 871
872.icon-rss::before {
748 content: "\e808"; 873 content: "\e808";
749} 874}
750.icon-print:before { 875
751 content: "\e80d"; 876.icon-print::before {
877 content: "\e954";
752} 878}
753.icon-reload:before { 879
880.icon-reload::before {
754 content: "\ea2e"; 881 content: "\ea2e";
755} 882}
756 883
884.icon-price-tags::before {
885 content: "\e936";
886}
757 887
758/* .icon-image class, for image-based icons 888/* .icon-image class, for image-based icons
759 ========================================================================== */ 889 ========================================================================== */
760 890
761.icon-image { 891.icon-image {
762 background-size: 16px 16px; 892 background-size: 16px 16px;
763 background-repeat: no-repeat; 893 background-repeat: no-repeat;
764 background-position: center; 894 background-position: center;
765 padding-right: 1em !important; 895 padding-right: 1em !important;
766 padding-left: 1em !important; 896 padding-left: 1em !important;
767} 897}
768 898
769/* Carrot (http://carrot.org) */ 899/* Carrot (http://carrot.org) */
770.icon-image--carrot { 900.icon-image--carrot {
771 background-image: url('../../_global/img/icons/carrot-icon--white.png'); 901 background-image: url("../../_global/img/icons/carrot-icon--white.png");
772} 902}
773 903
774/* Diaspora */ 904/* Diaspora */
775.icon-image--diaspora { 905.icon-image--diaspora {
776 background-image: url('../../_global/img/icons/diaspora-icon--black.png'); 906 background-image: url("../../_global/img/icons/diaspora-icon--black.png");
777} 907}
778 908
779/* ========================================================================== 909/* ==========================================================================
780 Icon selected 910 Icon selected
781 ========================================================================== */ 911 ========================================================================== */
782 912
783.icon-star.fav:before { 913.icon-star.fav::before {
784 color: #FFF; 914 color: #fff;
785} 915}
786 916
787.icon-check.archive:before { 917.icon-check.archive::before {
788 color: #FFF; 918 color: #fff;
789} 919}
790 920
791/* ========================================================================== 921/* ==========================================================================
@@ -797,33 +927,25 @@ a.add-to-wallabag-link-after:after {
797 margin-top: 1em; 927 margin-top: 1em;
798} 928}
799 929
800.messages > * { display: inline-block;} 930.messages > * {
931 display: inline-block;
932}
801 933
802.warning { 934.warning {
803 /* font-size: 3em;
804 color: #999;
805 font-style: italic;
806 position: absolute;
807 top: 50%;
808 left: 0;
809 width: 100%;
810 text-align: center;
811 padding-right: 5%;
812 margin-top: -2em;*/
813 font-weight: bold; 935 font-weight: bold;
814 display: block; 936 display: block;
815 width: 100%; 937 width: 100%;
816} 938}
817 939
818.more-info { 940.more-info {
819 font-size: 0.85em; 941 font-size: 0.85em;
820 line-height: 1.5; 942 line-height: 1.5;
821 color: #aaa; 943 color: #aaa;
822} 944}
823 945
824 .more-info a { 946.more-info a {
825 color: #aaa; 947 color: #aaa;
826 } 948}
827 949
828/* ========================================================================== 950/* ==========================================================================
829 5 = Article 951 5 = Article
@@ -844,8 +966,8 @@ a.add-to-wallabag-link-after:after {
844} 966}
845 967
846blockquote { 968blockquote {
847 border:1px solid #999; 969 border: 1px solid #999;
848 background-color: #FFF; 970 background-color: #fff;
849 padding: 1em; 971 padding: 1em;
850 margin: 0; 972 margin: 0;
851} 973}
@@ -854,11 +976,13 @@ blockquote {
854 text-align: left; 976 text-align: left;
855} 977}
856 978
857#article h2, #article h3, #article h4 { 979#article h2,
980#article h3,
981#article h4 {
858 text-transform: none; 982 text-transform: none;
859} 983}
860 984
861#article h2:after { 985#article h2::after {
862 content: none; 986 content: none;
863} 987}
864 988
@@ -880,19 +1004,20 @@ blockquote {
880#article_toolbar a { 1004#article_toolbar a {
881 background-color: #000; 1005 background-color: #000;
882 padding: 0.3em 0.5em 0.2em; 1006 padding: 0.3em 0.5em 0.2em;
883 color: #FFF; 1007 color: #fff;
884 text-decoration: none; 1008 text-decoration: none;
885} 1009}
886 1010
887#article_toolbar a:hover, #article_toolbar a:focus { 1011#article_toolbar a:hover,
1012#article_toolbar a:focus {
888 background-color: #999; 1013 background-color: #999;
889} 1014}
890 1015
891#nav-btn-add-tag { 1016#nav-btn-add-tag {
892 cursor: pointer; 1017 cursor: pointer;
893} 1018}
894 1019
895.shaarli:before { 1020.shaarli::before {
896 content: "*"; 1021 content: "*";
897} 1022}
898 1023
@@ -902,7 +1027,7 @@ blockquote {
902 display: block; 1027 display: block;
903} 1028}
904 1029
905.return:before { 1030.return::before {
906 margin-right: 0.5em; 1031 margin-right: 0.5em;
907} 1032}
908 1033
@@ -913,11 +1038,11 @@ blockquote {
913 1038
914.icon-rss { 1039.icon-rss {
915 background-color: #000; 1040 background-color: #000;
916 color: #FFF; 1041 color: #fff;
917 padding: 0.2em 0.5em; 1042 padding: 0.2em 0.5em;
918} 1043}
919 1044
920.icon-rss:before { 1045.icon-rss::before {
921 position: relative; 1046 position: relative;
922 top: 2px; 1047 top: 2px;
923} 1048}
@@ -926,8 +1051,9 @@ blockquote {
926 margin-bottom: 0.5em; 1051 margin-bottom: 0.5em;
927} 1052}
928 1053
929.list-tags .icon-rss:hover, .list-tags .icon-rss:focus { 1054.list-tags .icon-rss:hover,
930 background-color: #FFF; 1055.list-tags .icon-rss:focus {
1056 background-color: #fff;
931 color: #000; 1057 color: #000;
932 text-decoration: none; 1058 text-decoration: none;
933} 1059}
@@ -936,14 +1062,13 @@ blockquote {
936 text-decoration: none; 1062 text-decoration: none;
937} 1063}
938 1064
939.list-tags a:hover, .list-tags a:focus { 1065.list-tags a:hover,
1066.list-tags a:focus {
940 text-decoration: underline; 1067 text-decoration: underline;
941} 1068}
942 1069
943pre code { 1070pre code {
944 font-family: "Courier New", Courier, monospace; 1071 font-family: "Courier New", Courier, monospace;
945 border: 1px solid #ccc;
946 font-size: 0.96em;
947} 1072}
948 1073
949#filter-form { 1074#filter-form {
@@ -952,28 +1077,45 @@ pre code {
952 height: 100%; 1077 height: 100%;
953 top: 0; 1078 top: 0;
954 right: 0; 1079 right: 0;
955 background-color: #FFF; 1080 background-color: #fff;
956 padding: 15px; 1081 padding: 15px;
957 padding-right: 30px; 1082 padding-right: 30px;
958 padding-top: 30px; 1083 padding-top: 30px;
959 border-left: 1px #333 solid; 1084 border-left: 1px #333 solid;
960 z-index: 12; 1085 z-index: 12;
961 1086 min-width: 300px;
962 /*transition-property: transform;
963 transition-duration: 0.3s;
964 transition-delay: 0.3s;
965
966 transform: translate3d(100%, 0, 0);*/
967}
968
969#filter-form form {
970
971} 1087}
972 1088
973#filter-form form .filter-group { 1089#filter-form form .filter-group {
974 margin: 5px; 1090 margin: 5px;
975} 1091}
976 1092
1093#download-form {
1094 position: fixed;
1095 width: 10%;
1096 height: 100%;
1097 top: 0;
1098 right: 0;
1099 background-color: #fff;
1100 padding: 15px;
1101 padding-right: 30px;
1102 padding-top: 30px;
1103 border-left: 1px #333 solid;
1104 z-index: 12;
1105 min-width: 200px;
1106}
1107
1108#download-form li {
1109 display: block;
1110 padding: 0.5em 2em 0.5em 1em;
1111 color: #fff;
1112 position: relative;
1113 text-transform: uppercase;
1114 text-decoration: none;
1115 font-weight: 400;
1116 font-family: PT Sans, sans-serif;
1117 transition: all 0.5s ease;
1118}
977 1119
978/* ========================================================================== 1120/* ==========================================================================
979 6 = Media Queries 1121 6 = Media Queries
@@ -1015,6 +1157,7 @@ pre code {
1015 width: 100%; 1157 width: 100%;
1016 margin-left: 0; 1158 margin-left: 0;
1017 } 1159 }
1160
1018 body > header { 1161 body > header {
1019 background-color: #333; 1162 background-color: #333;
1020 position: fixed; 1163 position: fixed;
@@ -1023,70 +1166,86 @@ pre code {
1023 height: 3em; 1166 height: 3em;
1024 z-index: 11; 1167 z-index: 11;
1025 } 1168 }
1169
1026 #links li:last-child { 1170 #links li:last-child {
1027 position: static; 1171 position: static;
1028 width: auto; 1172 width: auto;
1029 } 1173 }
1030 #links li:last-child a:before { 1174
1175 #links li:last-child a::before {
1031 content: none; 1176 content: none;
1032 } 1177 }
1178
1033 .logo { 1179 .logo {
1034 width: 1.25em; 1180 width: 1.25em;
1035 height: 1.25em; 1181 height: 1.25em;
1036 left: 0; 1182 left: 0;
1037 top: 0; 1183 top: 0;
1038 } 1184 }
1185
1039 .login > header { 1186 .login > header {
1040 position: static; 1187 position: static;
1041 } 1188 }
1189
1042 .login form { 1190 .login form {
1043 width: 100%; 1191 width: 100%;
1044 position: static; 1192 position: static;
1045 margin-left: 0; 1193 margin-left: 0;
1046 } 1194 }
1195
1047 .login .logo { 1196 .login .logo {
1048 width: auto;
1049 height: auto; 1197 height: auto;
1050 top: 0.5em; 1198 top: 0.5em;
1051 width: 75px; 1199 width: 75px;
1052 height: 75px; 1200 height: 75px;
1053 margin-left: -37.5px; 1201 margin-left: -37.5px;
1054 } 1202 }
1203
1055 .desktopHide { 1204 .desktopHide {
1056 display: block; 1205 display: block;
1057 position: fixed; 1206 position: fixed;
1058 z-index: 20; 1207 z-index: 20;
1059 top: 0; 1208 top: 0;
1060 right: 0; 1209 right: 0;
1061 border:0; 1210 border: 0;
1062 width: 2.5em; 1211 width: 2.5em;
1063 height: 2.5em; 1212 height: 2.5em;
1064 cursor: pointer; 1213 cursor: pointer;
1065 background-color: #999; 1214 background-color: #999;
1066 font-size: 1.2em; 1215 font-size: 1.2em;
1067 } 1216 }
1068 .desktopHide:hover, .desktopHide:focus { 1217 .desktopHide:hover,
1069 background-color: #FFF; 1218 .desktopHide:focus {
1070 } 1219 background-color: #fff;
1220 }
1221
1071 #links { 1222 #links {
1072 display: none; 1223 display: none;
1073 width: 100%; 1224 width: 100%;
1074 height: auto; 1225 height: auto;
1075 padding-top: 3em; 1226 padding-top: 3em;
1076 } 1227 }
1228
1077 #links.menu--open { 1229 #links.menu--open {
1078 display: block; 1230 display: block;
1079 } 1231 }
1080 footer { 1232
1233 footer {
1081 position: static; 1234 position: static;
1082 margin-right: 3em; 1235 margin-right: 3em;
1083 } 1236 }
1237
1084 #main { 1238 #main {
1085 margin-left: 1.5em; 1239 margin-left: 1.5em;
1086 padding-right: 1.5em; 1240 padding-right: 1.5em;
1087 position: static; 1241 position: static;
1088 margin-top: 3em; 1242 margin-top: 3em;
1089 } 1243 }
1244
1245 .card-entry-labels {
1246 display: none;
1247 }
1248
1090 #article_toolbar .topPosF { 1249 #article_toolbar .topPosF {
1091 display: none; 1250 display: none;
1092 } 1251 }
@@ -1098,6 +1257,7 @@ pre code {
1098 #article h1 { 1257 #article h1 {
1099 font-size: 1.5em; 1258 font-size: 1.5em;
1100 } 1259 }
1260
1101 #article_toolbar a { 1261 #article_toolbar a {
1102 padding: 0.3em 0.4em 0.2em; 1262 padding: 0.3em 0.4em 0.2em;
1103 } 1263 }
@@ -1106,7 +1266,9 @@ pre code {
1106 display: none; 1266 display: none;
1107 } 1267 }
1108 1268
1109 .popup-form, #bagit-form, #search-form { 1269 .popup-form,
1270 #bagit-form,
1271 #search-form {
1110 left: 0; 1272 left: 0;
1111 width: 100%; 1273 width: 100%;
1112 border-left: none; 1274 border-left: none;
diff --git a/app/Resources/static/themes/baggy/css/messages.css b/app/Resources/static/themes/baggy/css/messages.css
new file mode 100755
index 00000000..bfaf1448
--- /dev/null
+++ b/app/Resources/static/themes/baggy/css/messages.css
@@ -0,0 +1,19 @@
1.messages.error.install {
2 border: 1px solid #c42608;
3 color: #c00 !important;
4 background: #fff0ef;
5 text-align: left;
6}
7
8.messages.notice.install {
9 border: 1px solid #ebcd41;
10 color: #000;
11 background: #fffcd3;
12 text-align: left;
13}
14
15.messages.success.install {
16 border: 1px solid #6dc70c;
17 background: #e0fbcc !important;
18 text-align: left;
19}
diff --git a/app/Resources/static/themes/baggy/css/print.css b/app/Resources/static/themes/baggy/css/print.css
new file mode 100755
index 00000000..f7f6a8ad
--- /dev/null
+++ b/app/Resources/static/themes/baggy/css/print.css
@@ -0,0 +1,66 @@
1@media print {
2 /* ### Layout ### */
3
4 body {
5 font-family: Serif;
6 background-color: #fff;
7 }
8
9 @page {
10 margin: 1cm;
11 }
12
13 img {
14 max-width: 100% !important;
15 }
16
17 /* ### Content ### */
18
19 /* Hide useless blocks */
20 body > header,
21 #article_toolbar,
22 #links,
23 #sort,
24 body > footer,
25 .top_link,
26 div.tools,
27 header div,
28 .messages,
29 .entrie + .results,
30 #article .mbm a,
31 #article-informations {
32 display: none !important;
33 }
34
35 article {
36 border: none !important;
37 }
38
39 /* Add URL after links */
40 .vieworiginal a::after {
41 content: " (" attr(href) ")";
42 }
43
44 /* Add explanation after abbr */
45 abbr[title]::after {
46 content: " (" attr(title) ")";
47 }
48
49 /* Change border on current pager item */
50 .pagination span.current {
51 border-style: dashed;
52 }
53
54 #main {
55 width: 100%;
56 padding: 0;
57 margin: 0;
58 margin-left: 0;
59 padding-right: 0;
60 padding-bottom: 0;
61 }
62
63 #article {
64 width: 100%;
65 }
66}
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/ratatouille.css b/app/Resources/static/themes/baggy/css/ratatouille.css
index 605eb641..b5aeb54e 100644
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/ratatouille.css
+++ b/app/Resources/static/themes/baggy/css/ratatouille.css
@@ -6,8 +6,8 @@
6 6
7* { 7* {
8 -webkit-box-sizing: border-box; 8 -webkit-box-sizing: border-box;
9 -moz-box-sizing: border-box; 9 -moz-box-sizing: border-box;
10 box-sizing: border-box; 10 box-sizing: border-box;
11} 11}
12 12
13html { 13html {
@@ -18,7 +18,7 @@ html {
18 18
19body { 19body {
20 font-size: 1em; 20 font-size: 1em;
21 line-height:1.5; 21 line-height: 1.5;
22 margin: 0; 22 margin: 0;
23} 23}
24 24
@@ -35,7 +35,7 @@ h6:first-child,
35p:first-child, 35p:first-child,
36ul:first-child, 36ul:first-child,
37ol:first-child, 37ol:first-child,
38dl:first-child{ 38dl:first-child {
39 margin-top: 0; 39 margin-top: 0;
40} 40}
41 41
@@ -43,14 +43,13 @@ code,
43kbd, 43kbd,
44pre, 44pre,
45samp { 45samp {
46 font-family: monospace, serif; 46 font-family: monospace, serif;
47} 47}
48 48
49pre { 49pre {
50 white-space: pre-wrap; 50 white-space: pre-wrap;
51} 51}
52 52
53
54.upper { 53.upper {
55 text-transform: uppercase; 54 text-transform: uppercase;
56} 55}
@@ -61,12 +60,12 @@ pre {
61 60
62.inner { 61.inner {
63 margin: 0 auto; 62 margin: 0 auto;
64 max-width: 61.25em;/*980px*/ 63 max-width: 61.25em; /* 980px */
65} 64}
66 65
67table, img, figure { 66table, img, figure {
68 max-width: 100%; 67 max-width: 100%;
69 height :auto; 68 height: auto;
70} 69}
71 70
72iframe { 71iframe {
@@ -93,13 +92,13 @@ button,
93input, 92input,
94select, 93select,
95textarea { 94textarea {
96 font-family: inherit; 95 font-family: inherit;
97 font-size: 100%; 96 font-size: 100%;
98 margin: 0; 97 margin: 0;
99} 98}
100 99
101input[type="search"] { 100input[type="search"] {
102 -webkit-appearance: textfield; 101 -webkit-appearance: textfield;
103} 102}
104 103
105/* ========================================================================== 104/* ==========================================================================
@@ -115,11 +114,17 @@ input[type="search"] {
115 display: none; 114 display: none;
116} 115}
117 116
118.dtable { display:table } 117.dtable {
118 display: table;
119}
119 120
120 .dtable > * { display:table-row; } 121.dtable > * {
122 display: table-row;
123}
121 124
122 .dtable > * > * { display:table-cell; } 125.dtable > * > * {
126 display: table-cell;
127}
123 128
124.element-invisible { 129.element-invisible {
125 border: 0; 130 border: 0;
@@ -133,32 +138,60 @@ input[type="search"] {
133} 138}
134 139
135.small { 140.small {
136 font-size:0.8em; 141 font-size: 0.8em;
137} 142}
138 143
139.big { 144.big {
140 font-size: 1.2em; 145 font-size: 1.2em;
141} 146}
142 147
143/*Width*/ 148/* Width */
144 149
145.w100 { width:100%; } 150.w100 {
146.w90 { width:90%; } 151 width: 100%;
147.w80 { width:80%; } 152}
148.w70 { width:70%; } 153
149.w60 { width:60%; } 154.w90 {
150.w50 { width:50%; } 155 width: 90%;
151.w40 { width:40%; } 156}
152.w30 { width:30%; } 157
153.w20 { width:20%; } 158.w80 {
154.w10 { width:10%; } 159 width: 80%;
160}
155 161
162.w70 {
163 width: 70%;
164}
165
166.w60 {
167 width: 60%;
168}
169
170.w50 {
171 width: 50%;
172}
173
174.w40 {
175 width: 40%;
176}
177
178.w30 {
179 width: 30%;
180}
181
182.w20 {
183 width: 20%;
184}
185
186.w10 {
187 width: 10%;
188}
156 189
157/* ========================================================================== 190/* ==========================================================================
158 Internet Explorer 191 Internet Explorer
159 ========================================================================== */ 192 ========================================================================== */
160 193
161/*IE8 and IE9*/ 194/* IE8 and IE9 */
162 195
163article, 196article,
164aside, 197aside,
@@ -172,40 +205,20 @@ main,
172nav, 205nav,
173section, 206section,
174summary { 207summary {
175 display: block; 208 display: block;
176} 209}
177 210
178/*IE8 and IE9*/ 211/* IE8 and IE9 */
179 212
180audio, 213audio,
181canvas, 214canvas,
182video { 215video {
183 display: inline-block; 216 display: inline-block;
184} 217}
185 218
186@media screen and (-webkit-min-device-pixel-ratio:0){ 219@media screen and (-webkit-min-device-pixel-ratio: 0) {
187 select{ 220 select {
188 -webkit-appearance: none; 221 -webkit-appearance: none;
189 border-radius: 0; 222 border-radius: 0;
190 } 223 }
191} 224}
192
193/* ==========================================================================
194 Medias Queries
195 ========================================================================== */
196
197/*Desktop 1080px*/
198
199@media screen and (max-width: 67.50em) {
200}
201
202/*Tablet 800px*/
203
204@media screen and (max-width: 50em) {
205}
206
207/*Mobile 640px*/
208
209@media screen and (max-width: 40em) {
210}
211
diff --git a/app/Resources/static/themes/baggy/font/icomoon.eot b/app/Resources/static/themes/baggy/font/icomoon.eot
new file mode 100644
index 00000000..248758fb
--- /dev/null
+++ b/app/Resources/static/themes/baggy/font/icomoon.eot
Binary files differ
diff --git a/app/Resources/static/themes/baggy/font/icomoon.svg b/app/Resources/static/themes/baggy/font/icomoon.svg
new file mode 100644
index 00000000..b1b9c92a
--- /dev/null
+++ b/app/Resources/static/themes/baggy/font/icomoon.svg
@@ -0,0 +1,501 @@
1<?xml version="1.0" standalone="no"?>
2<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3<svg xmlns="http://www.w3.org/2000/svg">
4<metadata>Generated by IcoMoon</metadata>
5<defs>
6<font id="icomoon" horiz-adv-x="1024">
7<font-face units-per-em="1024" ascent="960" descent="-64" />
8<missing-glyph horiz-adv-x="1024" />
9<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10<glyph unicode="&#xe900;" glyph-name="home" d="M1024 369.556l-512 397.426-512-397.428v162.038l512 397.426 512-397.428zM896 384v-384h-256v256h-256v-256h-256v384l384 288z" />
11<glyph unicode="&#xe901;" glyph-name="home2" d="M512 928l-512-512 96-96 96 96v-416h256v192h128v-192h256v416l96-96 96 96-512 512zM512 512c-35.346 0-64 28.654-64 64s28.654 64 64 64c35.346 0 64-28.654 64-64s-28.654-64-64-64z" />
12<glyph unicode="&#xe902;" glyph-name="home3" d="M1024 352l-192 192v288h-128v-160l-192 192-512-512v-32h128v-320h320v192h128v-192h320v320h128z" />
13<glyph unicode="&#xe903;" glyph-name="office" d="M0-64h512v1024h-512v-1024zM320 832h128v-128h-128v128zM320 576h128v-128h-128v128zM320 320h128v-128h-128v128zM64 832h128v-128h-128v128zM64 576h128v-128h-128v128zM64 320h128v-128h-128v128zM576 640h448v-64h-448zM576-64h128v256h192v-256h128v576h-448z" />
14<glyph unicode="&#xe904;" glyph-name="newspaper" d="M896 704v128h-896v-704c0-35.346 28.654-64 64-64h864c53.022 0 96 42.978 96 96v544h-128zM832 128h-768v640h768v-640zM128 640h640v-64h-640zM512 512h256v-64h-256zM512 384h256v-64h-256zM512 256h192v-64h-192zM128 512h320v-320h-320z" />
15<glyph unicode="&#xe905;" glyph-name="pencil" d="M864 960c88.364 0 160-71.634 160-160 0-36.020-11.91-69.258-32-96l-64-64-224 224 64 64c26.742 20.090 59.978 32 96 32zM64 224l-64-288 288 64 592 592-224 224-592-592zM715.578 596.422l-448-448-55.156 55.156 448 448 55.156-55.156z" />
16<glyph unicode="&#xe906;" glyph-name="pencil2" d="M384 320l128 64 448 448-64 64-448-448-64-128zM289.3 92.902c-31.632 66.728-65.666 100.762-132.396 132.394l99.096 272.792 128 77.912 384 384h-192l-384-384-192-640 640 192 384 384v192l-384-384-77.912-128z" />
17<glyph unicode="&#xe907;" glyph-name="quill" d="M0-64c128 384 463 1024 1024 1024-263-211-384-704-576-704s-192 0-192 0l-192-320h-64z" />
18<glyph unicode="&#xe908;" glyph-name="pen" d="M1018.17 668.11l-286.058 286.058c-9.334 9.334-21.644 7.234-27.356-4.666l-38.354-79.904 267.198-267.198 79.904 38.354c11.9 5.712 14 18.022 4.666 27.356zM615.384 824.616l-263.384-21.95c-17.5-2.166-32.080-5.898-37.090-28.752-0.006-0.024-0.012-0.042-0.018-0.066-71.422-343.070-314.892-677.848-314.892-677.848l57.374-57.374 271.986 271.99c-5.996 12.53-9.36 26.564-9.36 41.384 0 53.020 42.98 96 96 96s96-42.98 96-96-42.98-96-96-96c-14.82 0-28.852 3.364-41.384 9.36l-271.988-271.986 57.372-57.374c0 0 334.778 243.47 677.848 314.892 0.024 0.006 0.042 0.012 0.066 0.018 22.854 5.010 26.586 19.59 28.752 37.090l21.95 263.384-273.232 273.232z" />
19<glyph unicode="&#xe909;" glyph-name="blog" d="M384 960v-96c73.482 0 144.712-14.37 211.716-42.71 64.768-27.394 122.958-66.632 172.948-116.624s89.228-108.18 116.624-172.948c28.342-67.004 42.712-138.238 42.712-211.718h96c0 353.46-286.54 640-640 640zM384 768v-96c94.022 0 182.418-36.614 248.9-103.098 66.486-66.484 103.1-154.878 103.1-248.902h96c0 247.422-200.576 448-448 448zM480 576l-64-64-224-64-192-416 25.374-25.374 232.804 232.804c-1.412 5.286-2.178 10.84-2.178 16.57 0 35.346 28.654 64 64 64s64-28.654 64-64-28.654-64-64-64c-5.732 0-11.282 0.764-16.568 2.178l-232.804-232.804 25.372-25.374 416 192 64 224 64 64-160 160z" />
20<glyph unicode="&#xe90a;" glyph-name="eyedropper" d="M986.51 922.51c-49.988 49.986-131.032 49.986-181.020 0l-172.118-172.118-121.372 121.372-135.764-135.764 106.426-106.426-472.118-472.118c-8.048-8.048-11.468-18.958-10.3-29.456h-0.244v-160c0-17.674 14.328-32 32-32h160c0 0 2.664 0 4 0 9.212 0 18.426 3.516 25.456 10.544l472.118 472.118 106.426-106.426 135.764 135.764-121.372 121.372 172.118 172.118c49.986 49.988 49.986 131.032 0 181.020zM173.090 0h-109.090v109.090l469.574 469.572 109.088-109.088-469.572-469.574z" />
21<glyph unicode="&#xe90b;" glyph-name="droplet" d="M864.626 486.838c-65.754 183.44-205.11 348.15-352.626 473.162-147.516-125.012-286.87-289.722-352.626-473.162-40.664-113.436-44.682-236.562 12.584-345.4 65.846-125.14 198.632-205.438 340.042-205.438s274.196 80.298 340.040 205.44c57.27 108.838 53.25 231.962 12.586 345.398zM738.764 201.044c-43.802-83.252-132.812-137.044-226.764-137.044-55.12 0-108.524 18.536-152.112 50.652 13.242-1.724 26.632-2.652 40.112-2.652 117.426 0 228.668 67.214 283.402 171.242 44.878 85.292 40.978 173.848 23.882 244.338 14.558-28.15 26.906-56.198 36.848-83.932 22.606-63.062 40.024-156.34-5.368-242.604z" />
22<glyph unicode="&#xe90c;" glyph-name="paint-format" d="M1024 384v384h-192v64c0 35.2-28.8 64-64 64h-704c-35.2 0-64-28.8-64-64v-192c0-35.2 28.8-64 64-64h704c35.2 0 64 28.8 64 64v64h128v-256h-576v-128h-32c-17.674 0-32-14.326-32-32v-320c0-17.674 14.326-32 32-32h128c17.674 0 32 14.326 32 32v320c0 17.674-14.326 32-32 32h-32v64h576zM768 768h-704v64h704v-64z" />
23<glyph unicode="&#xe90d;" glyph-name="image" d="M959.884 832c0.040-0.034 0.082-0.076 0.116-0.116v-767.77c-0.034-0.040-0.076-0.082-0.116-0.116h-895.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.772c0.034 0.040 0.076 0.082 0.114 0.114h895.77zM960 896h-896c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v768c0 35.2-28.8 64-64 64v0zM832 672c0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM896 128h-768v128l224 384 256-320h64l224 192z" />
24<glyph unicode="&#xe90e;" glyph-name="images" horiz-adv-x="1152" d="M1088 832h-64v64c0 35.2-28.8 64-64 64h-896c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h64v-64c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v768c0 35.2-28.8 64-64 64zM128 768v-640h-63.886c-0.040 0.034-0.082 0.076-0.114 0.116v767.77c0.034 0.040 0.076 0.082 0.114 0.114h895.77c0.040-0.034 0.082-0.076 0.116-0.116v-63.884h-768c-35.2 0-64-28.8-64-64v0zM1088 0.116c-0.034-0.040-0.076-0.082-0.116-0.116h-895.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.77c0.034 0.040 0.076 0.082 0.114 0.114h895.77c0.040-0.034 0.082-0.076 0.116-0.116v-767.768zM960 608c0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM1024 64h-768v128l224 384 256-320h64l224 192z" />
25<glyph unicode="&#xe90f;" glyph-name="camera" d="M304 352c0-114.876 93.124-208 208-208s208 93.124 208 208-93.124 208-208 208-208-93.124-208-208zM960 704h-224c-16 64-32 128-96 128h-256c-64 0-80-64-96-128h-224c-35.2 0-64-28.8-64-64v-576c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v576c0 35.2-28.8 64-64 64zM512 68c-156.85 0-284 127.148-284 284 0 156.85 127.15 284 284 284 156.852 0 284-127.15 284-284 0-156.852-127.146-284-284-284zM960 512h-128v64h128v-64z" />
26<glyph unicode="&#xe910;" glyph-name="headphones" d="M288 384h-64v-448h64c17.6 0 32 14.4 32 32v384c0 17.6-14.4 32-32 32zM736 384c-17.602 0-32-14.4-32-32v-384c0-17.6 14.398-32 32-32h64v448h-64zM1024 448c0 282.77-229.23 512-512 512s-512-229.23-512-512c0-61.412 10.83-120.29 30.656-174.848-19.478-33.206-30.656-71.87-30.656-113.152 0-112.846 83.448-206.188 192-221.716v443.418c-31.914-4.566-61.664-15.842-87.754-32.378-5.392 26.718-8.246 54.364-8.246 82.676 0 229.75 186.25 416 416 416s416-186.25 416-416c0-28.314-2.83-55.968-8.22-82.696-26.1 16.546-55.854 27.848-87.78 32.418v-443.44c108.548 15.532 192 108.874 192 221.714 0 41.274-11.178 79.934-30.648 113.138 19.828 54.566 30.648 113.452 30.648 174.866z" />
27<glyph unicode="&#xe911;" glyph-name="music" d="M960 960h64v-736c0-88.366-100.29-160-224-160s-224 71.634-224 160c0 88.368 100.29 160 224 160 62.684 0 119.342-18.4 160-48.040v368.040l-512-113.778v-494.222c0-88.366-100.288-160-224-160s-224 71.634-224 160c0 88.368 100.288 160 224 160 62.684 0 119.342-18.4 160-48.040v624.040l576 128z" />
28<glyph unicode="&#xe912;" glyph-name="play" d="M981.188 799.892c-143.632 20.65-302.332 32.108-469.186 32.108-166.86 0-325.556-11.458-469.194-32.108-27.53-107.726-42.808-226.75-42.808-351.892 0-125.14 15.278-244.166 42.808-351.89 143.638-20.652 302.336-32.11 469.194-32.11 166.854 0 325.552 11.458 469.186 32.11 27.532 107.724 42.812 226.75 42.812 351.89 0 125.142-15.28 244.166-42.812 351.892zM384.002 256v384l320-192-320-192z" />
29<glyph unicode="&#xe913;" glyph-name="film" d="M0 832v-768h1024v768h-1024zM192 128h-128v128h128v-128zM192 384h-128v128h128v-128zM192 640h-128v128h128v-128zM768 128h-512v640h512v-640zM960 128h-128v128h128v-128zM960 384h-128v128h128v-128zM960 640h-128v128h128v-128zM384 640v-384l256 192z" />
30<glyph unicode="&#xe914;" glyph-name="video-camera" d="M384 672c0 88.366 71.634 160 160 160s160-71.634 160-160c0-88.366-71.634-160-160-160s-160 71.634-160 160zM0 672c0 88.366 71.634 160 160 160s160-71.634 160-160c0-88.366-71.634-160-160-160s-160 71.634-160 160zM768 352v96c0 35.2-28.8 64-64 64h-640c-35.2 0-64-28.8-64-64v-320c0-35.2 28.8-64 64-64h640c35.2 0 64 28.8 64 64v96l256-160v448l-256-160zM640 192h-512v192h512v-192z" />
31<glyph unicode="&#xe915;" glyph-name="dice" d="M864 768h-512c-88 0-160-72-160-160v-512c0-88 72-160 160-160h512c88 0 160 72 160 160v512c0 88-72 160-160 160zM416 64c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM416 448c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM608 256c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM800 64c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM800 448c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM828.76 832c-14.93 72.804-79.71 128-156.76 128h-512c-88 0-160-72-160-160v-512c0-77.046 55.196-141.83 128-156.76v636.76c0 35.2 28.8 64 64 64h636.76z" />
32<glyph unicode="&#xe916;" glyph-name="pacman" d="M964.73 781.196c-93.902 109.45-233.21 178.804-388.73 178.804-282.77 0-512-229.23-512-512s229.23-512 512-512c155.52 0 294.828 69.356 388.728 178.804l-324.728 333.196 324.73 333.196zM704 839.398c39.432 0 71.398-31.964 71.398-71.398 0-39.432-31.966-71.398-71.398-71.398s-71.398 31.966-71.398 71.398c0 39.432 31.966 71.398 71.398 71.398z" />
33<glyph unicode="&#xe917;" glyph-name="spades" d="M817.57 611.85c-193.566 143.858-260.266 259.018-305.566 348.148v0c-0.004 0-0.004 0.002-0.004 0.002v-0.002c-45.296-89.13-112-204.292-305.566-348.148-330.036-245.286-19.376-587.668 253.758-399.224-17.796-116.93-78.53-202.172-140.208-238.882v-37.744h384.032v37.74c-61.682 36.708-122.41 121.954-140.212 238.884 273.136-188.446 583.8 153.94 253.766 399.226z" />
34<glyph unicode="&#xe918;" glyph-name="clubs" d="M786.832 567.228c-59.032 0-112.086-24.596-149.852-64.694-15.996-16.984-43.762-37.112-73.8-54.81 14.11 53.868 58.676 121.7 89.628 151.456 39.64 38.17 63.984 91.83 63.984 151.5 0.006 114.894-91.476 208.096-204.788 209.32-113.32-1.222-204.796-94.426-204.796-209.318 0-59.672 24.344-113.33 63.986-151.5 30.954-29.756 75.52-97.588 89.628-151.456-30.042 17.7-57.806 37.826-73.8 54.81-37.768 40.098-90.82 64.694-149.85 64.694-114.386 0-207.080-93.664-207.080-209.328 0-115.638 92.692-209.338 207.080-209.338 59.042 0 112.082 25.356 149.85 65.452 16.804 17.872 46.444 40.138 78.292 58.632-3.002-147.692-73.532-256.168-145.318-298.906v-37.742h384.014v37.74c-71.792 42.736-142.32 151.216-145.32 298.906 31.852-18.494 61.488-40.768 78.292-58.632 37.766-40.094 90.808-65.452 149.852-65.452 114.386 0 207.078 93.7 207.078 209.338-0.002 115.664-92.692 209.328-207.080 209.328z" />
35<glyph unicode="&#xe919;" glyph-name="diamonds" d="M512 960l-320-512 320-512 320 512z" />
36<glyph unicode="&#xe91a;" glyph-name="bullhorn" d="M1024 530.744c0 200.926-58.792 363.938-131.482 365.226 0.292 0.006 0.578 0.030 0.872 0.030h-82.942c0 0-194.8-146.336-475.23-203.754-8.56-45.292-14.030-99.274-14.030-161.502s5.466-116.208 14.030-161.5c280.428-57.418 475.23-203.756 475.23-203.756h82.942c-0.292 0-0.578 0.024-0.872 0.032 72.696 1.288 131.482 164.298 131.482 365.224zM864.824 220.748c-9.382 0-19.532 9.742-24.746 15.548-12.63 14.064-24.792 35.96-35.188 63.328-23.256 61.232-36.066 143.31-36.066 231.124 0 87.81 12.81 169.89 36.066 231.122 10.394 27.368 22.562 49.266 35.188 63.328 5.214 5.812 15.364 15.552 24.746 15.552 9.38 0 19.536-9.744 24.744-15.552 12.634-14.064 24.796-35.958 35.188-63.328 23.258-61.23 36.068-143.312 36.068-231.122 0-87.804-12.81-169.888-36.068-231.124-10.39-27.368-22.562-49.264-35.188-63.328-5.208-5.806-15.36-15.548-24.744-15.548zM251.812 530.744c0 51.95 3.81 102.43 11.052 149.094-47.372-6.554-88.942-10.324-140.34-10.324-67.058 0-67.058 0-67.058 0l-55.466-94.686v-88.17l55.46-94.686c0 0 0 0 67.060 0 51.398 0 92.968-3.774 140.34-10.324-7.236 46.664-11.048 97.146-11.048 149.096zM368.15 317.828l-127.998 24.51 81.842-321.544c4.236-16.634 20.744-25.038 36.686-18.654l118.556 47.452c15.944 6.376 22.328 23.964 14.196 39.084l-123.282 229.152zM864.824 411.27c-3.618 0-7.528 3.754-9.538 5.992-4.87 5.42-9.556 13.86-13.562 24.408-8.962 23.6-13.9 55.234-13.9 89.078s4.938 65.478 13.9 89.078c4.006 10.548 8.696 18.988 13.562 24.408 2.010 2.24 5.92 5.994 9.538 5.994 3.616 0 7.53-3.756 9.538-5.994 4.87-5.42 9.556-13.858 13.56-24.408 8.964-23.598 13.902-55.234 13.902-89.078 0-33.842-4.938-65.478-13.902-89.078-4.004-10.548-8.696-18.988-13.56-24.408-2.008-2.238-5.92-5.992-9.538-5.992z" />
37<glyph unicode="&#xe91b;" glyph-name="connection" horiz-adv-x="1280" d="M640 384c105.87 0 201.87-43.066 271.402-112.598l-90.468-90.468c-46.354 46.356-110.356 75.066-180.934 75.066s-134.578-28.71-180.934-75.066l-90.468 90.468c69.532 69.532 165.532 112.598 271.402 112.598zM187.452 452.548c120.88 120.88 281.598 187.452 452.548 187.452s331.668-66.572 452.55-187.452l-90.51-90.508c-96.706 96.704-225.28 149.96-362.040 149.96-136.762 0-265.334-53.256-362.038-149.962l-90.51 90.51zM988.784 825.562c106.702-45.132 202.516-109.728 284.782-191.996v0l-90.508-90.508c-145.056 145.056-337.92 224.942-543.058 224.942-205.14 0-398-79.886-543.058-224.942l-90.51 90.51c82.268 82.266 178.082 146.862 284.784 191.994 110.504 46.738 227.852 70.438 348.784 70.438s238.278-23.7 348.784-70.438zM576 64c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64z" />
38<glyph unicode="&#xe91c;" glyph-name="podcast" d="M1024 448c0 282.77-229.23 512-512 512s-512-229.23-512-512c0-220.054 138.836-407.664 333.686-480.068l-13.686-31.932h384l-13.686 31.932c194.85 72.404 333.686 260.014 333.686 480.068zM486.79 325.174c-22.808 9.788-38.79 32.436-38.79 58.826 0 35.346 28.654 64 64 64s64-28.654 64-64c0-26.39-15.978-49.044-38.786-58.834l-25.214 58.834-25.21-58.826zM538.268 322.708c58.092 12.118 101.732 63.602 101.732 125.292 0 70.694-57.306 128-128 128-70.692 0-128-57.306-128-128 0-61.692 43.662-113.122 101.76-125.228l-74.624-174.122c-91.23 39.15-155.136 129.784-155.136 235.35 0 141.384 114.616 268 256 268s256-126.616 256-268c0-105.566-63.906-196.2-155.136-235.35l-74.596 174.058zM688.448-27.708l-73.924 172.486c126.446 42.738 217.476 162.346 217.476 303.222 0 176.73-143.268 320-320 320-176.73 0-320-143.27-320-320 0-140.876 91.030-260.484 217.476-303.222l-73.924-172.486c-159.594 68.488-271.386 227.034-271.386 411.708 0 247.332 200.502 459.834 447.834 459.834s447.834-212.502 447.834-459.834c0-184.674-111.792-343.22-271.386-411.708z" />
39<glyph unicode="&#xe91d;" glyph-name="feed" d="M384 448c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM664.348 729.474c99.852-54.158 167.652-159.898 167.652-281.474s-67.8-227.316-167.652-281.474c44.066 70.126 71.652 170.27 71.652 281.474s-27.586 211.348-71.652 281.474zM288 448c0-111.204 27.584-211.348 71.652-281.474-99.852 54.16-167.652 159.898-167.652 281.474s67.8 227.314 167.652 281.474c-44.068-70.126-71.652-170.27-71.652-281.474zM96 448c0-171.9 54.404-326.184 140.652-431.722-142.302 90.948-236.652 250.314-236.652 431.722s94.35 340.774 236.652 431.722c-86.248-105.538-140.652-259.822-140.652-431.722zM787.352 879.72c142.298-90.946 236.648-250.312 236.648-431.72s-94.35-340.774-236.648-431.72c86.244 105.536 140.648 259.82 140.648 431.72s-54.404 326.184-140.648 431.72z" />
40<glyph unicode="&#xe91e;" glyph-name="mic" d="M480 256c88.366 0 160 71.634 160 160v384c0 88.366-71.634 160-160 160s-160-71.634-160-160v-384c0-88.366 71.636-160 160-160zM704 512v-96c0-123.71-100.29-224-224-224-123.712 0-224 100.29-224 224v96h-64v-96c0-148.238 112.004-270.3 256-286.22v-129.78h-128v-64h320v64h-128v129.78c143.994 15.92 256 137.982 256 286.22v96h-64z" />
41<glyph unicode="&#xe91f;" glyph-name="book" d="M896 832v-832h-672c-53.026 0-96 42.98-96 96s42.974 96 96 96h608v768h-640c-70.398 0-128-57.6-128-128v-768c0-70.4 57.602-128 128-128h768v896h-64zM224.056 128v0c-0.018-0.002-0.038 0-0.056 0-17.672 0-32-14.326-32-32s14.328-32 32-32c0.018 0 0.038 0.002 0.056 0.002v-0.002h607.89v64h-607.89z" />
42<glyph unicode="&#xe920;" glyph-name="books" horiz-adv-x="1152" d="M224 832h-192c-17.6 0-32-14.4-32-32v-704c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v704c0 17.6-14.4 32-32 32zM192 640h-128v64h128v-64zM544 832h-192c-17.6 0-32-14.4-32-32v-704c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v704c0 17.6-14.4 32-32 32zM512 640h-128v64h128v-64zM765.088 782.52l-171.464-86.394c-15.716-7.918-22.096-27.258-14.178-42.976l287.978-571.548c7.918-15.718 27.258-22.098 42.976-14.178l171.464 86.392c15.716 7.92 22.096 27.26 14.178 42.974l-287.978 571.55c-7.92 15.718-27.26 22.1-42.976 14.18zM928 96c0-17.673-14.327-32-32-32s-32 14.327-32 32c0 17.673 14.327 32 32 32s32-14.327 32-32z" />
43<glyph unicode="&#xe921;" glyph-name="library" horiz-adv-x="1088" d="M1024 0v64h-64v384h64v64h-192v-64h64v-384h-192v384h64v64h-192v-64h64v-384h-192v384h64v64h-192v-64h64v-384h-192v384h64v64h-192v-64h64v-384h-64v-64h-64v-64h1088v64h-64zM512 960h64l512-320v-64h-1088v64l512 320z" />
44<glyph unicode="&#xe922;" glyph-name="file-text" d="M864 960h-768c-52.8 0-96-43.2-96-96v-832c0-52.8 43.2-96 96-96h768c52.8 0 96 43.2 96 96v832c0 52.8-43.2 96-96 96zM832 64h-704v768h704v-768zM256 512h448v-64h-448zM256 384h448v-64h-448zM256 256h448v-64h-448zM256 640h448v-64h-448z" />
45<glyph unicode="&#xe923;" glyph-name="profile" d="M864 960h-768c-52.8 0-96-43.2-96-96v-832c0-52.8 43.2-96 96-96h768c52.8 0 96 43.2 96 96v832c0 52.8-43.2 96-96 96zM832 64h-704v768h704v-768zM256 384h448v-64h-448zM256 256h448v-64h-448zM320 672c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM480 576h-128c-52.8 0-96-28.8-96-64v-64h320v64c0 35.2-43.2 64-96 64z" />
46<glyph unicode="&#xe924;" glyph-name="file-empty" d="M917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624z" />
47<glyph unicode="&#xe925;" glyph-name="files-empty" d="M917.806 602.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-368c-44.114 0-80-35.888-80-80v-736c0-44.112 35.886-80 80-80h608c44.112 0 80 35.888 80 80v496c0 14.332-4.372 39.35-42.194 90.924zM785.374 657.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-608c-8.672 0-16 7.328-16 16v736c0 8.672 7.328 16 16 16 0 0 367.956 0.002 368 0v-224c0-17.672 14.324-32 32-32h224v-496zM602.924 917.804c-51.574 37.822-76.592 42.196-90.924 42.196h-368c-44.112 0-80-35.888-80-80v-736c0-38.632 27.528-70.958 64-78.39v814.39c0 8.672 7.328 16 16 16h486.876c-9.646 7.92-19.028 15.26-27.952 21.804z" />
48<glyph unicode="&#xe926;" glyph-name="file-text2" d="M917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624zM736 128h-448c-17.672 0-32 14.326-32 32s14.328 32 32 32h448c17.674 0 32-14.326 32-32s-14.326-32-32-32zM736 256h-448c-17.672 0-32 14.326-32 32s14.328 32 32 32h448c17.674 0 32-14.326 32-32s-14.326-32-32-32zM736 384h-448c-17.672 0-32 14.326-32 32s14.328 32 32 32h448c17.674 0 32-14.326 32-32s-14.326-32-32-32z" />
49<glyph unicode="&#xe927;" glyph-name="file-picture" d="M832 64h-640v128l192 320 263-320 185 128v-256zM832 480c0-53.020-42.98-96-96-96-53.022 0-96 42.98-96 96s42.978 96 96 96c53.020 0 96-42.98 96-96zM917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624z" />
50<glyph unicode="&#xe928;" glyph-name="file-music" d="M917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624zM756.288 568.748c-7.414 6.080-17.164 8.514-26.562 6.632l-320-64c-14.958-2.994-25.726-16.126-25.726-31.38v-236.876c-18.832 8.174-40.678 12.876-64 12.876-70.692 0-128-42.98-128-96s57.308-96 128-96 128 42.98 128 96v229.766l256 51.202v-133.842c-18.832 8.174-40.678 12.876-64 12.876-70.692 0-128-42.98-128-96s57.308-96 128-96 128 42.98 128 96v319.998c0 9.586-4.298 18.668-11.712 24.748z" />
51<glyph unicode="&#xe929;" glyph-name="file-play" d="M384 576l320-224-320-224v448zM917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624z" />
52<glyph unicode="&#xe92a;" glyph-name="file-video" d="M917.806 730.924c-22.208 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.594 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.882-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0 0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.98-17.78 50.678-41.878 81.374-72.572v0 0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.32-32 32-32h224v-624zM256 448h320v-320h-320v320zM576 320l192 128v-320l-192 128z" />
53<glyph unicode="&#xe92b;" glyph-name="file-zip" d="M917.806 730.924c-22.208 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.884-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0 0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.98-17.78 50.678-41.878 81.374-72.572v0 0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.322-32 32-32h224v-624zM256 896h128v-64h-128v64zM384 832h128v-64h-128v64zM256 768h128v-64h-128v64zM384 704h128v-64h-128v64zM256 640h128v-64h-128v64zM384 576h128v-64h-128v64zM256 512h128v-64h-128v64zM384 448h128v-64h-128v64zM256 112c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-80v64h-128v-272zM448 192v-64h-128v64h128z" />
54<glyph unicode="&#xe92c;" glyph-name="copy" d="M640 704v256h-448l-192-192v-576h384v-256h640v768h-384zM192 869.49v-101.49h-101.49l101.49 101.49zM64 256v448h192v192h320v-192l-192-192v-256h-320zM576 613.49v-101.49h-101.49l101.49 101.49zM960 0h-512v448h192v192h320v-640z" />
55<glyph unicode="&#xe92d;" glyph-name="paste" d="M704 832h-128v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-128v-128h512v128zM512 832h-128v63.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886zM832 640v160c0 17.6-14.4 32-32 32h-64v-64h32v-128h-192l-192-192v-256h-256v576h32v64h-64c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h640v704h-192zM576 549.49v-101.49h-101.49l101.49 101.49zM960 0h-512v384h192v192h320v-576z" />
56<glyph unicode="&#xe92e;" glyph-name="stack" d="M1024 640l-512 256-512-256 512-256 512 256zM512 811.030l342.058-171.030-342.058-171.030-342.058 171.030 342.058 171.030zM921.444 499.278l102.556-51.278-512-256-512 256 102.556 51.278 409.444-204.722zM921.444 307.278l102.556-51.278-512-256-512 256 102.556 51.278 409.444-204.722z" />
57<glyph unicode="&#xe92f;" glyph-name="folder" d="M448 832l128-128h448v-704h-1024v832z" />
58<glyph unicode="&#xe930;" glyph-name="folder-open" d="M832 0l192 512h-832l-192-512zM128 576l-128-576v832h288l128-128h416v-128z" />
59<glyph unicode="&#xe931;" glyph-name="folder-plus" d="M576 704l-128 128h-448v-832h1024v704h-448zM704 256h-128v-128h-128v128h-128v128h128v128h128v-128h128v-128z" />
60<glyph unicode="&#xe932;" glyph-name="folder-minus" d="M576 704l-128 128h-448v-832h1024v704h-448zM704 256h-384v128h384v-128z" />
61<glyph unicode="&#xe933;" glyph-name="folder-download" d="M576 704l-128 128h-448v-832h1024v704h-448zM512 96l-224 224h160v256h128v-256h160l-224-224z" />
62<glyph unicode="&#xe934;" glyph-name="folder-upload" d="M576 704l-128 128h-448v-832h1024v704h-448zM512 480l224-224h-160v-256h-128v256h-160l224 224z" />
63<glyph unicode="&#xe935;" glyph-name="price-tag" d="M976 960h-384c-26.4 0-63.274-15.274-81.942-33.942l-476.116-476.116c-18.668-18.668-18.668-49.214 0-67.882l412.118-412.118c18.668-18.668 49.214-18.668 67.882 0l476.118 476.118c18.666 18.666 33.94 55.54 33.94 81.94v384c0 26.4-21.6 48-48 48zM736 576c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96z" />
64<glyph unicode="&#xe936;" glyph-name="price-tags" horiz-adv-x="1280" d="M1232 960h-384c-26.4 0-63.274-15.274-81.942-33.942l-476.116-476.116c-18.668-18.668-18.668-49.214 0-67.882l412.118-412.118c18.668-18.668 49.214-18.668 67.882 0l476.118 476.118c18.666 18.666 33.94 55.54 33.94 81.94v384c0 26.4-21.6 48-48 48zM992 576c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM128 416l544 544h-80c-26.4 0-63.274-15.274-81.942-33.942l-476.116-476.116c-18.668-18.668-18.668-49.214 0-67.882l412.118-412.118c18.668-18.668 49.214-18.668 67.882 0l30.058 30.058-416 416z" />
65<glyph unicode="&#xe937;" glyph-name="barcode" d="M0 832h128v-640h-128zM192 832h64v-640h-64zM320 832h64v-640h-64zM512 832h64v-640h-64zM768 832h64v-640h-64zM960 832h64v-640h-64zM640 832h32v-640h-32zM448 832h32v-640h-32zM864 832h32v-640h-32zM0 128h64v-64h-64zM192 128h64v-64h-64zM320 128h64v-64h-64zM640 128h64v-64h-64zM960 128h64v-64h-64zM768 128h128v-64h-128zM448 128h128v-64h-128z" />
66<glyph unicode="&#xe938;" glyph-name="qrcode" d="M320 896h-256v-256h256v256zM384 960v0-384h-384v384h384zM128 832h128v-128h-128zM960 896h-256v-256h256v256zM1024 960v0-384h-384v384h384zM768 832h128v-128h-128zM320 256h-256v-256h256v256zM384 320v0-384h-384v384h384zM128 192h128v-128h-128zM448 960h64v-64h-64zM512 896h64v-64h-64zM448 832h64v-64h-64zM512 768h64v-64h-64zM448 704h64v-64h-64zM512 640h64v-64h-64zM448 576h64v-64h-64zM448 448h64v-64h-64zM512 384h64v-64h-64zM448 320h64v-64h-64zM512 256h64v-64h-64zM448 192h64v-64h-64zM512 128h64v-64h-64zM448 64h64v-64h-64zM512 0h64v-64h-64zM960 448h64v-64h-64zM64 448h64v-64h-64zM128 512h64v-64h-64zM0 512h64v-64h-64zM256 512h64v-64h-64zM320 448h64v-64h-64zM384 512h64v-64h-64zM576 448h64v-64h-64zM640 512h64v-64h-64zM704 448h64v-64h-64zM768 512h64v-64h-64zM832 448h64v-64h-64zM896 512h64v-64h-64zM960 320h64v-64h-64zM576 320h64v-64h-64zM640 384h64v-64h-64zM704 320h64v-64h-64zM832 320h64v-64h-64zM896 384h64v-64h-64zM960 192h64v-64h-64zM576 192h64v-64h-64zM640 256h64v-64h-64zM768 256h64v-64h-64zM832 192h64v-64h-64zM896 256h64v-64h-64zM960 64h64v-64h-64zM640 128h64v-64h-64zM704 64h64v-64h-64zM768 128h64v-64h-64zM832 64h64v-64h-64zM640 0h64v-64h-64zM768 0h64v-64h-64zM896 0h64v-64h-64z" />
67<glyph unicode="&#xe939;" glyph-name="ticket" d="M575.996 640l127.998-127.998-255.994-255.994-127.998 127.998zM1001.526 662.496l-73.516 73.516-32.008-32.008c-16.378-16.38-39.010-26.51-64-26.51-49.988 0-90.514 40.522-90.514 90.51 0 25.002 10.14 47.638 26.534 64.018l31.988 31.986-73.518 73.516c-29.968 29.968-79.008 29.968-108.976 0l-595.040-595.038c-29.966-29.968-29.966-79.010 0-108.976l73.52-73.518 31.962 31.964c16.382 16.406 39.030 26.552 64.044 26.552 49.988 0 90.51-40.524 90.51-90.51 0-25.006-10.14-47.64-26.534-64.022l-31.984-31.986 73.516-73.518c29.966-29.966 79.008-29.966 108.976 0l595.040 595.040c29.964 29.976 29.964 79.016 0 108.984zM448.002 128.004l-256 256 384 384 256-256-384-384z" />
68<glyph unicode="&#xe93a;" glyph-name="cart" d="M384 32c0-53.019-42.981-96-96-96s-96 42.981-96 96c0 53.019 42.981 96 96 96s96-42.981 96-96zM1024 32c0-53.019-42.981-96-96-96s-96 42.981-96 96c0 53.019 42.981 96 96 96s96-42.981 96-96zM1024 448v384h-768c0 35.346-28.654 64-64 64h-192v-64h128l48.074-412.054c-29.294-23.458-48.074-59.5-48.074-99.946 0-70.696 57.308-128 128-128h768v64h-768c-35.346 0-64 28.654-64 64 0 0.218 0.014 0.436 0.016 0.656l831.984 127.344z" />
69<glyph unicode="&#xe93b;" glyph-name="coin-dollar" d="M480 896c-265.096 0-480-214.904-480-480 0-265.098 214.904-480 480-480 265.098 0 480 214.902 480 480 0 265.096-214.902 480-480 480zM480 32c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384s-171.922-384-384-384zM512 448v128h128v64h-128v64h-64v-64h-128v-256h128v-128h-128v-64h128v-64h64v64h128.002l-0.002 256h-128zM448 448h-64v128h64v-128zM576.002 256h-64.002v128h64.002v-128z" />
70<glyph unicode="&#xe93c;" glyph-name="coin-euro" d="M480 896c-265.096 0-480-214.904-480-480s214.904-480 480-480c265.098 0 480 214.902 480 480s-214.902 480-480 480zM480 32c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.076 0 384-171.922 384-384s-171.924-384-384-384zM670.824 315.66c-15.27 8.884-34.862 3.708-43.75-11.57-17.256-29.662-49.088-48.090-83.074-48.090h-128c-41.716 0-77.286 26.754-90.496 64h154.496c17.672 0 32 14.326 32 32s-14.328 32-32 32h-160v64h160c17.672 0 32 14.328 32 32s-14.328 32-32 32h-154.496c13.21 37.246 48.78 64 90.496 64h128c33.986 0 65.818-18.426 83.074-48.090 8.888-15.276 28.478-20.456 43.752-11.568 15.276 8.888 20.456 28.476 11.568 43.752-28.672 49.288-81.702 79.906-138.394 79.906h-128c-77.268 0-141.914-55.056-156.78-128h-35.22c-17.672 0-32-14.328-32-32s14.328-32 32-32h32v-64h-32c-17.672 0-32-14.326-32-32s14.328-32 32-32h35.22c14.866-72.944 79.512-128 156.78-128h128c56.692 0 109.72 30.62 138.394 79.91 8.888 15.276 3.708 34.864-11.57 43.75z" />
71<glyph unicode="&#xe93d;" glyph-name="coin-pound" d="M480 896c-265.096 0-480-214.904-480-480s214.904-480 480-480c265.098 0 480 214.902 480 480s-214.902 480-480 480zM480 32c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.074 0 384-171.922 384-384s-171.926-384-384-384zM608 256h-224v128h96c17.672 0 32 14.326 32 32s-14.328 32-32 32h-96v32c0 52.934 43.066 96 96 96 34.17 0 66.042-18.404 83.18-48.030 8.85-15.298 28.426-20.526 43.722-11.676 15.296 8.848 20.526 28.424 11.676 43.722-28.538 49.336-81.638 79.984-138.578 79.984-88.224 0-160-71.776-160-160v-32h-32c-17.672 0-32-14.326-32-32s14.328-32 32-32h32v-192h288c17.674 0 32 14.326 32 32s-14.326 32-32 32z" />
72<glyph unicode="&#xe93e;" glyph-name="coin-yen" d="M480 896c-265.096 0-480-214.904-480-480s214.904-480 480-480c265.098 0 480 214.902 480 480s-214.902 480-480 480zM480 32c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.076 0 384-171.922 384-384s-171.924-384-384-384zM608 384c17.674 0 32 14.326 32 32s-14.326 32-32 32h-68.208l94.832 142.25c9.804 14.704 5.83 34.572-8.876 44.376-14.704 9.802-34.572 5.83-44.376-8.876l-101.372-152.062-101.374 152.062c-9.804 14.706-29.672 18.68-44.376 8.876-14.706-9.804-18.678-29.672-8.876-44.376l94.834-142.25h-68.208c-17.672 0-32-14.326-32-32s14.328-32 32-32h96v-64h-96c-17.672 0-32-14.326-32-32s14.328-32 32-32h96v-96c0-17.674 14.328-32 32-32s32 14.326 32 32v96h96c17.674 0 32 14.326 32 32s-14.326 32-32 32h-96v64h96z" />
73<glyph unicode="&#xe93f;" glyph-name="credit-card" d="M928 832h-832c-52.8 0-96-43.2-96-96v-576c0-52.8 43.2-96 96-96h832c52.8 0 96 43.2 96 96v576c0 52.8-43.2 96-96 96zM96 768h832c17.346 0 32-14.654 32-32v-96h-896v96c0 17.346 14.654 32 32 32zM928 128h-832c-17.346 0-32 14.654-32 32v288h896v-288c0-17.346-14.654-32-32-32zM128 320h64v-128h-64zM256 320h64v-128h-64zM384 320h64v-128h-64z" />
74<glyph unicode="&#xe940;" glyph-name="calculator" d="M384 896h-320c-35.2 0-64-28.8-64-64v-320c0-35.2 28.796-64 64-64h320c35.2 0 64 28.8 64 64v320c0 35.2-28.8 64-64 64zM384 640h-320v64h320v-64zM896 896h-320c-35.204 0-64-28.8-64-64v-832c0-35.2 28.796-64 64-64h320c35.2 0 64 28.8 64 64v832c0 35.2-28.8 64-64 64zM896 320h-320v64h320v-64zM896 512h-320v64h320v-64zM384 384h-320c-35.2 0-64-28.8-64-64v-320c0-35.2 28.796-64 64-64h320c35.2 0 64 28.8 64 64v320c0 35.2-28.8 64-64 64zM384 128h-128v-128h-64v128h-128v64h128v128h64v-128h128v-64z" />
75<glyph unicode="&#xe941;" glyph-name="lifebuoy" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM320 448c0 106.040 85.96 192 192 192s192-85.96 192-192-85.96-192-192-192-192 85.96-192 192zM925.98 276.524v0l-177.42 73.49c12.518 30.184 19.44 63.276 19.44 97.986s-6.922 67.802-19.44 97.986l177.42 73.49c21.908-52.822 34.020-110.73 34.020-171.476s-12.114-118.654-34.020-171.476v0zM683.478 861.98v0 0l-73.49-177.42c-30.184 12.518-63.276 19.44-97.988 19.44s-67.802-6.922-97.986-19.44l-73.49 177.422c52.822 21.904 110.732 34.018 171.476 34.018 60.746 0 118.654-12.114 171.478-34.020zM98.020 619.476l177.422-73.49c-12.518-30.184-19.442-63.276-19.442-97.986s6.922-67.802 19.44-97.986l-177.42-73.49c-21.906 52.822-34.020 110.73-34.020 171.476s12.114 118.654 34.020 171.476zM340.524 34.020l73.49 177.42c30.184-12.518 63.276-19.44 97.986-19.44s67.802 6.922 97.986 19.44l73.49-177.42c-52.822-21.904-110.73-34.020-171.476-34.020-60.744 0-118.654 12.114-171.476 34.020z" />
76<glyph unicode="&#xe942;" glyph-name="phone" d="M704 320c-64-64-64-128-128-128s-128 64-192 128-128 128-128 192 64 64 128 128-128 256-192 256-192-192-192-192c0-128 131.5-387.5 256-512s384-256 512-256c0 0 192 128 192 192s-192 256-256 192z" />
77<glyph unicode="&#xe943;" glyph-name="phone-hang-up" d="M1017.378 384.006c8.004-55.482 13.216-131.392-11.664-160.446-41.142-48.044-301.712-48.044-301.712 48.042 0 48.398 42.856 80.134 1.712 128.178-40.472 47.262-113.026 48.030-193.714 48.042-80.686-0.012-153.242-0.78-193.714-48.042-41.142-48.046 1.714-79.78 1.714-128.178 0-96.086-260.57-96.086-301.714-48.044-24.878 29.054-19.668 104.964-11.662 160.446 6.16 37.038 21.724 76.996 71.548 127.994 0 0.002 0.002 0.002 0.002 0.004 74.738 69.742 187.846 126.738 429.826 127.968v0.030c1.344 0 2.664-0.010 4-0.014 1.338 0.004 2.656 0.014 4 0.014v-0.028c241.98-1.23 355.088-58.226 429.826-127.968 0.002-0.002 0.002-0.004 0.002-0.004 49.824-50.996 65.39-90.954 71.55-127.994z" />
78<glyph unicode="&#xe944;" glyph-name="address-book" d="M192 960v-1024h768v1024h-768zM576 703.67c70.51 0 127.67-57.16 127.67-127.67s-57.16-127.67-127.67-127.67-127.67 57.16-127.67 127.67 57.16 127.67 127.67 127.67v0zM768 192h-384v64c0 70.696 57.306 128 128 128v0h128c70.696 0 128-57.304 128-128v-64zM64 896h96v-192h-96v192zM64 640h96v-192h-96v192zM64 384h96v-192h-96v192zM64 128h96v-192h-96v192z" />
79<glyph unicode="&#xe945;" glyph-name="envelop" d="M928 832h-832c-52.8 0-96-43.2-96-96v-640c0-52.8 43.2-96 96-96h832c52.8 0 96 43.2 96 96v640c0 52.8-43.2 96-96 96zM398.74 409.628l-270.74-210.892v501.642l270.74-290.75zM176.38 704h671.24l-335.62-252-335.62 252zM409.288 398.302l102.712-110.302 102.71 110.302 210.554-270.302h-626.528l210.552 270.302zM625.26 409.628l270.74 290.75v-501.642l-270.74 210.892z" />
80<glyph unicode="&#xe946;" glyph-name="pushpin" d="M544 960l-96-96 96-96-224-256h-224l176-176-272-360.616v-39.384h39.384l360.616 272 176-176v224l256 224 96-96 96 96-480 480zM448 416l-64 64 224 224 64-64-224-224z" />
81<glyph unicode="&#xe947;" glyph-name="location" d="M512 960c-176.732 0-320-143.268-320-320 0-320 320-704 320-704s320 384 320 704c0 176.732-143.27 320-320 320zM512 448c-106.040 0-192 85.96-192 192s85.96 192 192 192 192-85.96 192-192-85.96-192-192-192z" />
82<glyph unicode="&#xe948;" glyph-name="location2" d="M512 960c-176.732 0-320-143.268-320-320 0-320 320-704 320-704s320 384 320 704c0 176.732-143.27 320-320 320zM512 444c-108.248 0-196 87.752-196 196s87.752 196 196 196 196-87.752 196-196-87.752-196-196-196zM388 640c0 68.483 55.517 124 124 124s124-55.517 124-124c0-68.483-55.517-124-124-124s-124 55.517-124 124z" />
83<glyph unicode="&#xe949;" glyph-name="compass" d="M544.010-64.004c-2.296 0-4.622 0.25-6.94 0.764-14.648 3.25-25.070 16.238-25.070 31.24v480h-480c-15.002 0-27.992 10.422-31.24 25.070-3.25 14.646 4.114 29.584 17.708 35.928l960 448c12.196 5.688 26.644 3.144 36.16-6.372 9.516-9.514 12.060-23.966 6.372-36.16l-448-960c-5.342-11.44-16.772-18.47-28.99-18.47zM176.242 512h367.758c17.674 0 32-14.328 32-32v-367.758l349.79 749.546-749.548-349.788z" />
84<glyph unicode="&#xe94a;" glyph-name="compass2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM96 448c0 229.75 186.25 416 416 416 109.574 0 209.232-42.386 283.534-111.628l-411.534-176.372-176.372-411.534c-69.242 74.302-111.628 173.96-111.628 283.534zM585.166 374.834l-256.082-109.75 109.75 256.082 146.332-146.332zM512 32c-109.574 0-209.234 42.386-283.532 111.628l411.532 176.372 176.372 411.532c69.242-74.298 111.628-173.958 111.628-283.532 0-229.75-186.25-416-416-416z" />
85<glyph unicode="&#xe94b;" glyph-name="map" d="M0 768l320 128v-768l-320-128zM384 928l320-192v-736l-320 160zM768 736l256 192v-768l-256-192z" />
86<glyph unicode="&#xe94c;" glyph-name="map2" d="M672 768l-320 128-352-128v-768l352 128 320-128 352 128v768l-352-128zM384 814.27l256-102.4v-630.138l-256 102.398v630.14zM64 723.172l256 93.090v-631.8l-256-93.088v631.798zM960 172.828l-256-93.092v631.8l256 93.090v-631.798z" />
87<glyph unicode="&#xe94d;" glyph-name="history" horiz-adv-x="1088" d="M640 896c247.424 0 448-200.576 448-448s-200.576-448-448-448v96c94.024 0 182.418 36.614 248.902 103.098s103.098 154.878 103.098 248.902c0 94.022-36.614 182.418-103.098 248.902s-154.878 103.098-248.902 103.098c-94.022 0-182.418-36.614-248.902-103.098-51.14-51.138-84.582-115.246-97.306-184.902h186.208l-224-256-224 256h164.57c31.060 217.102 217.738 384 443.43 384zM832 512v-128h-256v320h128v-192z" />
88<glyph unicode="&#xe94e;" glyph-name="clock" d="M658.744 210.744l-210.744 210.746v282.51h128v-229.49l173.256-173.254zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 64c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384s-171.922-384-384-384z" />
89<glyph unicode="&#xe94f;" glyph-name="clock2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM658.744 210.744l-210.744 210.746v282.51h128v-229.49l173.256-173.254-90.512-90.512z" />
90<glyph unicode="&#xe950;" glyph-name="alarm" d="M512 832c-247.424 0-448-200.576-448-448s200.576-448 448-448 448 200.576 448 448-200.576 448-448 448zM512 24c-198.824 0-360 161.178-360 360 0 198.824 161.176 360 360 360 198.822 0 360-161.176 360-360 0-198.822-161.178-360-360-360zM934.784 672.826c16.042 28.052 25.216 60.542 25.216 95.174 0 106.040-85.96 192-192 192-61.818 0-116.802-29.222-151.92-74.596 131.884-27.236 245.206-105.198 318.704-212.578v0zM407.92 885.404c-35.116 45.374-90.102 74.596-151.92 74.596-106.040 0-192-85.96-192-192 0-34.632 9.174-67.122 25.216-95.174 73.5 107.38 186.822 185.342 318.704 212.578zM512 384v256h-64v-320h256v64z" />
91<glyph unicode="&#xe951;" glyph-name="bell" d="M1025.5 160c0 288-256 224-256 448 0 18.56-1.788 34.42-5.048 47.928-16.83 113.018-92.156 203.72-189.772 231.36 0.866 3.948 1.32 8.032 1.32 12.21 0 33.278-28.8 60.502-64 60.502s-64-27.224-64-60.5c0-4.18 0.456-8.264 1.32-12.21-109.47-30.998-190.914-141.298-193.254-273.442-0.040-1.92-0.066-3.864-0.066-5.846 0-224.002-256-160.002-256-448.002 0-76.226 170.59-139.996 398.97-156.080 21.524-40.404 64.056-67.92 113.030-67.92s91.508 27.516 113.030 67.92c228.38 16.084 398.97 79.854 398.97 156.080 0 0.228-0.026 0.456-0.028 0.682l1.528-0.682zM826.246 105.904c-54.23-14.47-118.158-24.876-186.768-30.648-5.704 65.418-60.582 116.744-127.478 116.744s-121.774-51.326-127.478-116.744c-68.608 5.772-132.538 16.178-186.768 30.648-74.63 19.914-110.31 42.19-123.368 54.096 13.058 11.906 48.738 34.182 123.368 54.096 86.772 23.152 198.372 35.904 314.246 35.904s227.474-12.752 314.246-35.904c74.63-19.914 110.31-42.19 123.368-54.096-13.058-11.906-48.738-34.182-123.368-54.096z" />
92<glyph unicode="&#xe952;" glyph-name="stopwatch" d="M512.002 766.788v65.212h128v64c0 35.346-28.654 64-64.002 64h-191.998c-35.346 0-64-28.654-64-64v-64h128v-65.212c-214.798-16.338-384-195.802-384-414.788 0-229.75 186.25-416 416-416s416 186.25 416 416c0 218.984-169.202 398.448-384 414.788zM706.276 125.726c-60.442-60.44-140.798-93.726-226.274-93.726s-165.834 33.286-226.274 93.726c-60.44 60.44-93.726 140.8-93.726 226.274s33.286 165.834 93.726 226.274c58.040 58.038 134.448 91.018 216.114 93.548l-21.678-314.020c-1.86-26.29 12.464-37.802 31.836-37.802s33.698 11.512 31.836 37.802l-21.676 314.022c81.666-2.532 158.076-35.512 216.116-93.55 60.44-60.44 93.726-140.8 93.726-226.274s-33.286-165.834-93.726-226.274z" />
93<glyph unicode="&#xe953;" glyph-name="calendar" d="M320 576h128v-128h-128zM512 576h128v-128h-128zM704 576h128v-128h-128zM128 192h128v-128h-128zM320 192h128v-128h-128zM512 192h128v-128h-128zM320 384h128v-128h-128zM512 384h128v-128h-128zM704 384h128v-128h-128zM128 384h128v-128h-128zM832 960v-64h-128v64h-448v-64h-128v64h-128v-1024h960v1024h-128zM896 0h-832v704h832v-704z" />
94<glyph unicode="&#xe954;" glyph-name="printer" d="M256 896h512v-128h-512v128zM960 704h-896c-35.2 0-64-28.8-64-64v-320c0-35.2 28.794-64 64-64h192v-256h512v256h192c35.2 0 64 28.8 64 64v320c0 35.2-28.8 64-64 64zM128 512c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.652-64-64-64zM704 64h-384v320h384v-320z" />
95<glyph unicode="&#xe955;" glyph-name="keyboard" horiz-adv-x="1152" d="M1088 832h-1024c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h1024c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM640 704h128v-128h-128v128zM832 512v-128h-128v128h128zM448 704h128v-128h-128v128zM640 512v-128h-128v128h128zM256 704h128v-128h-128v128zM448 512v-128h-128v128h128zM128 704h64v-128h-64v128zM128 512h128v-128h-128v128zM192 192h-64v128h64v-128zM768 192h-512v128h512v-128zM1024 192h-192v128h192v-128zM1024 384h-128v128h128v-128zM1024 576h-192v128h192v-128z" />
96<glyph unicode="&#xe956;" glyph-name="display" d="M0 896v-640h1024v640h-1024zM960 320h-896v512h896v-512zM672 192h-320l-32-128-64-64h512l-64 64z" />
97<glyph unicode="&#xe957;" glyph-name="laptop" d="M896 256v512c0 35.2-28.8 64-64 64h-640c-35.2 0-64-28.8-64-64v-512h-128v-192h1024v192h-128zM640 128h-256v64h256v-64zM832 256h-640v511.886c0.034 0.040 0.076 0.082 0.114 0.114h639.77c0.040-0.034 0.082-0.076 0.116-0.116v-511.884z" />
98<glyph unicode="&#xe958;" glyph-name="mobile" d="M736 960h-448c-52.8 0-96-43.2-96-96v-832c0-52.8 43.2-96 96-96h448c52.8 0 96 43.2 96 96v832c0 52.8-43.2 96-96 96zM384 912h256v-32h-256v32zM512 0c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zM768 192h-512v640h512v-640z" />
99<glyph unicode="&#xe959;" glyph-name="mobile2" d="M768 960h-576c-35.2 0-64-28.798-64-64v-896c0-35.2 28.798-64 64-64h576c35.2 0 64 28.8 64 64v896c0 35.202-28.8 64-64 64zM480-17.782c-27.492 0-49.782 22.29-49.782 49.782s22.29 49.782 49.782 49.782 49.782-22.29 49.782-49.782-22.29-49.782-49.782-49.782zM768 128h-576v704h576v-704z" />
100<glyph unicode="&#xe95a;" glyph-name="tablet" d="M800 960h-640c-52.8 0-96-43.2-96-96v-832c0-52.8 43.2-96 96-96h640c52.8 0 96 43.2 96 96v832c0 52.8-43.2 96-96 96zM480-32c-17.672 0-32 14.326-32 32s14.328 32 32 32 32-14.326 32-32-14.328-32-32-32zM768 64h-576v768h576v-768z" />
101<glyph unicode="&#xe95b;" glyph-name="tv" d="M981.188 671.892c-88.808 12.768-183.382 22.016-282.076 27.22l164.888 164.888-64 64-224.558-224.556c-21.006 0.368-42.156 0.556-63.442 0.556v0l-256 256-64-64 194.196-194.196c-120.922-4.242-236.338-14.524-343.386-29.912-27.532-107.726-42.81-226.752-42.81-351.892s15.278-244.166 42.804-351.89c143.642-20.652 302.34-32.11 469.196-32.11s325.55 11.458 469.188 32.11c27.534 107.724 42.812 226.75 42.812 351.89s-15.278 244.166-42.812 351.892zM863.892 85.406c-107.73-13.766-226.75-21.406-351.892-21.406s-244.166 7.64-351.892 21.406c-20.648 71.816-32.108 151.166-32.108 234.594 0 83.43 11.458 162.78 32.108 234.596 107.726 13.766 226.75 21.404 351.892 21.404 125.136 0 244.162-7.638 351.886-21.404 20.656-71.816 32.114-151.166 32.114-234.596 0-83.428-11.458-162.778-32.108-234.594z" />
102<glyph unicode="&#xe95c;" glyph-name="drawer" d="M1016.988 307.99l-256 320c-6.074 7.592-15.266 12.010-24.988 12.010h-448c-9.72 0-18.916-4.418-24.988-12.010l-256-320c-4.538-5.674-7.012-12.724-7.012-19.99v-288c0-35.346 28.654-64 64-64h896c35.348 0 64 28.654 64 64v288c0 7.266-2.472 14.316-7.012 19.99zM960 256h-224l-128-128h-192l-128 128h-224v20.776l239.38 299.224h417.24l239.38-299.224v-20.776zM736 448h-448c-17.672 0-32 14.328-32 32s14.328 32 32 32h448c17.674 0 32-14.328 32-32s-14.326-32-32-32zM800 320h-576c-17.672 0-32 14.326-32 32s14.328 32 32 32h576c17.674 0 32-14.326 32-32s-14.326-32-32-32z" />
103<glyph unicode="&#xe95d;" glyph-name="drawer2" d="M1016.988 307.99l-256 320c-6.074 7.592-15.266 12.010-24.988 12.010h-448c-9.72 0-18.916-4.418-24.988-12.010l-256-320c-4.538-5.674-7.012-12.724-7.012-19.99v-288c0-35.346 28.654-64 64-64h896c35.348 0 64 28.654 64 64v288c0 7.266-2.472 14.316-7.012 19.99zM960 256h-224l-128-128h-192l-128 128h-224v20.776l239.38 299.224h417.24l239.38-299.224v-20.776z" />
104<glyph unicode="&#xe95e;" glyph-name="box-add" d="M832 896h-640l-192-192v-672c0-17.674 14.326-32 32-32h960c17.672 0 32 14.326 32 32v672l-192 192zM512 128l-320 256h192v192h256v-192h192l-320-256zM154.51 768l64 64h586.978l64-64h-714.978z" />
105<glyph unicode="&#xe95f;" glyph-name="box-remove" d="M832 896h-640l-192-192v-672c0-17.674 14.326-32 32-32h960c17.672 0 32 14.326 32 32v672l-192 192zM640 320v-192h-256v192h-192l320 256 320-256h-192zM154.51 768l64 64h586.976l64-64h-714.976z" />
106<glyph unicode="&#xe960;" glyph-name="download" d="M512 384l256 256h-192v256h-128v-256h-192zM744.726 488.728l-71.74-71.742 260.080-96.986-421.066-157.018-421.066 157.018 260.080 96.986-71.742 71.742-279.272-104.728v-256l512-192 512 192v256z" />
107<glyph unicode="&#xe961;" glyph-name="upload" d="M448 384h128v256h192l-256 256-256-256h192zM640 528v-98.712l293.066-109.288-421.066-157.018-421.066 157.018 293.066 109.288v98.712l-384-144v-256l512-192 512 192v256z" />
108<glyph unicode="&#xe962;" glyph-name="floppy-disk" d="M896 960h-896v-1024h1024v896l-128 128zM512 832h128v-256h-128v256zM896 64h-768v768h64v-320h576v320h74.978l53.022-53.018v-714.982z" />
109<glyph unicode="&#xe963;" glyph-name="drive" d="M192 64h640c106.038 0 192 85.96 192 192h-1024c0-106.040 85.962-192 192-192zM832 192h64v-64h-64v64zM960 832h-896l-64-512h1024z" />
110<glyph unicode="&#xe964;" glyph-name="database" d="M512 960c-282.77 0-512-71.634-512-160v-128c0-88.366 229.23-160 512-160s512 71.634 512 160v128c0 88.366-229.23 160-512 160zM512 416c-282.77 0-512 71.634-512 160v-192c0-88.366 229.23-160 512-160s512 71.634 512 160v192c0-88.366-229.23-160-512-160zM512 128c-282.77 0-512 71.634-512 160v-192c0-88.366 229.23-160 512-160s512 71.634 512 160v192c0-88.366-229.23-160-512-160z" />
111<glyph unicode="&#xe965;" glyph-name="undo" d="M512 896c-141.384 0-269.376-57.32-362.032-149.978l-149.968 149.978v-384h384l-143.532 143.522c69.496 69.492 165.492 112.478 271.532 112.478 212.068 0 384-171.924 384-384 0-114.696-50.292-217.636-130.018-288l84.666-96c106.302 93.816 173.352 231.076 173.352 384 0 282.77-229.23 512-512 512z" />
112<glyph unicode="&#xe966;" glyph-name="redo" d="M0 384c0-152.924 67.048-290.184 173.35-384l84.666 96c-79.726 70.364-130.016 173.304-130.016 288 0 212.076 171.93 384 384 384 106.042 0 202.038-42.986 271.53-112.478l-143.53-143.522h384v384l-149.97-149.978c-92.654 92.658-220.644 149.978-362.030 149.978-282.77 0-512-229.23-512-512z" />
113<glyph unicode="&#xe967;" glyph-name="undo2" d="M761.862-64c113.726 206.032 132.888 520.306-313.862 509.824v-253.824l-384 384 384 384v-248.372c534.962 13.942 594.57-472.214 313.862-775.628z" />
114<glyph unicode="&#xe968;" glyph-name="redo2" d="M576 711.628v248.372l384-384-384-384v253.824c-446.75 10.482-427.588-303.792-313.86-509.824-280.712 303.414-221.1 789.57 313.86 775.628z" />
115<glyph unicode="&#xe969;" glyph-name="forward" d="M262.14 960c-113.728-206.032-132.89-520.304 313.86-509.824v253.824l384-384-384-384v248.372c-534.96-13.942-594.572 472.214-313.86 775.628z" />
116<glyph unicode="&#xe96a;" glyph-name="reply" d="M448 184.372v-248.372l-384 384 384 384v-253.824c446.75-10.48 427.588 303.792 313.862 509.824 280.71-303.414 221.1-789.57-313.862-775.628z" />
117<glyph unicode="&#xe96b;" glyph-name="bubble" d="M512 896c282.77 0 512-186.25 512-416 0-229.752-229.23-416-512-416-27.156 0-53.81 1.734-79.824 5.044-109.978-109.978-241.25-129.7-368.176-132.596v26.916c68.536 33.578 128 94.74 128 164.636 0 9.754-0.758 19.33-2.164 28.696-115.796 76.264-189.836 192.754-189.836 323.304 0 229.75 229.23 416 512 416z" />
118<glyph unicode="&#xe96c;" glyph-name="bubbles" horiz-adv-x="1152" d="M1088 58.834c0-45.5 26.028-84.908 64-104.184v-15.938c-10.626-1.454-21.472-2.224-32.5-2.224-68.008 0-129.348 28.528-172.722 74.264-26.222-6.982-54.002-10.752-82.778-10.752-159.058 0-288 114.616-288 256s128.942 256 288 256c159.058 0 288-114.616 288-256 0-55.348-19.764-106.592-53.356-148.466-6.824-14.824-10.644-31.312-10.644-48.7zM512 960c278.458 0 504.992-180.614 511.836-405.52-49.182 21.92-103.586 33.52-159.836 33.52-95.56 0-185.816-33.446-254.138-94.178-70.846-62.972-109.862-147.434-109.862-237.822 0-44.672 9.544-87.888 27.736-127.788-5.228-0.126-10.468-0.212-15.736-0.212-27.156 0-53.81 1.734-79.824 5.044-109.978-109.978-241.25-129.7-368.176-132.596v26.916c68.536 33.578 128 94.74 128 164.636 0 9.754-0.758 19.33-2.164 28.696-115.796 76.264-189.836 192.754-189.836 323.304 0 229.75 229.23 416 512 416z" />
119<glyph unicode="&#xe96d;" glyph-name="bubbles2" horiz-adv-x="1152" d="M480 960v0c265.096 0 480-173.914 480-388.448s-214.904-388.448-480-388.448c-25.458 0-50.446 1.62-74.834 4.71-103.106-102.694-222.172-121.108-341.166-123.814v25.134c64.252 31.354 116 88.466 116 153.734 0 9.106-0.712 18.048-2.030 26.794-108.558 71.214-177.97 179.988-177.97 301.89 0 214.534 214.904 388.448 480 388.448zM996 89.314c0-55.942 36.314-104.898 92-131.772v-21.542c-103.126 2.318-197.786 18.102-287.142 106.126-21.14-2.65-42.794-4.040-64.858-4.040-95.47 0-183.408 25.758-253.614 69.040 144.674 0.506 281.26 46.854 384.834 130.672 52.208 42.252 93.394 91.826 122.414 147.348 30.766 58.866 46.366 121.582 46.366 186.406 0 10.448-0.45 20.836-1.258 31.168 72.57-59.934 117.258-141.622 117.258-231.676 0-104.488-60.158-197.722-154.24-258.764-1.142-7.496-1.76-15.16-1.76-22.966z" />
120<glyph unicode="&#xe96e;" glyph-name="bubble2" d="M512 768c-54.932 0-107.988-8.662-157.694-25.742-46.712-16.054-88.306-38.744-123.628-67.444-66.214-53.798-102.678-122.984-102.678-194.814 0-40.298 11.188-79.378 33.252-116.152 22.752-37.92 56.982-72.586 98.988-100.252 30.356-19.992 50.78-51.948 56.176-87.894 1.8-11.984 2.928-24.088 3.37-36.124 7.47 6.194 14.75 12.846 21.88 19.976 24.154 24.152 56.78 37.49 90.502 37.49 5.368 0 10.762-0.336 16.156-1.024 20.974-2.666 42.398-4.020 63.676-4.020 54.934 0 107.988 8.66 157.694 25.742 46.712 16.054 88.306 38.744 123.628 67.444 66.214 53.796 102.678 122.984 102.678 194.814s-36.464 141.016-102.678 194.814c-35.322 28.698-76.916 51.39-123.628 67.444-49.706 17.080-102.76 25.742-157.694 25.742zM512 896v0c282.77 0 512-186.25 512-416 0-229.752-229.23-416-512-416-27.156 0-53.81 1.734-79.824 5.044-109.978-109.978-241.25-129.7-368.176-132.596v26.916c68.536 33.578 128 94.74 128 164.636 0 9.754-0.758 19.33-2.164 28.696-115.796 76.264-189.836 192.754-189.836 323.304 0 229.75 229.23 416 512 416z" />
121<glyph unicode="&#xe96f;" glyph-name="bubbles3" horiz-adv-x="1152" d="M1088 58.834c0-45.5 26.028-84.908 64-104.184v-15.938c-10.626-1.454-21.472-2.224-32.5-2.224-68.008 0-129.348 28.528-172.722 74.264-26.222-6.982-54.002-10.752-82.778-10.752-159.058 0-288 114.616-288 256s128.942 256 288 256c159.058 0 288-114.616 288-256 0-55.348-19.764-106.592-53.356-148.466-6.824-14.824-10.644-31.312-10.644-48.7zM230.678 738.814c-66.214-53.798-102.678-122.984-102.678-194.814 0-40.298 11.188-79.378 33.252-116.15 22.752-37.92 56.982-72.586 98.988-100.252 30.356-19.992 50.78-51.948 56.176-87.894 1.8-11.984 2.928-24.088 3.37-36.124 7.47 6.194 14.75 12.846 21.88 19.976 24.154 24.152 56.78 37.49 90.502 37.49 5.368 0 10.762-0.336 16.156-1.024 20.948-2.662 42.344-4.016 63.594-4.020v-128c-27.128 0.002-53.754 1.738-79.742 5.042-109.978-109.978-241.25-129.7-368.176-132.596v26.916c68.536 33.578 128 94.74 128 164.636 0 9.754-0.758 19.33-2.164 28.696-115.796 76.264-189.836 192.754-189.836 323.304 0 229.75 229.23 416 512 416 278.458 0 504.992-180.614 511.836-405.52-41.096 18.316-85.84 29.422-132.262 32.578-11.53 56.068-45.402 108.816-98.252 151.756-35.322 28.698-76.916 51.39-123.628 67.444-49.706 17.080-102.76 25.742-157.694 25.742-54.932 0-107.988-8.662-157.694-25.742-46.712-16.054-88.306-38.744-123.628-67.444z" />
122<glyph unicode="&#xe970;" glyph-name="bubbles4" horiz-adv-x="1152" d="M480 832c-50.666 0-99.582-7.95-145.386-23.628-42.924-14.694-81.114-35.436-113.502-61.646-60.044-48.59-93.112-110.802-93.112-175.174 0-35.99 10.066-70.948 29.92-103.898 20.686-34.34 51.898-65.794 90.26-90.958 30.44-19.968 50.936-51.952 56.362-87.95 0.902-5.99 1.63-12.006 2.18-18.032 2.722 2.52 5.424 5.114 8.114 7.794 24.138 24.040 56.688 37.312 90.322 37.312 5.348 0 10.718-0.336 16.094-1.018 19.36-2.452 39.124-3.696 58.748-3.696 50.666 0 99.58 7.948 145.384 23.628 42.926 14.692 81.116 35.434 113.504 61.644 60.046 48.59 93.112 110.802 93.112 175.174s-33.066 126.582-93.112 175.174c-32.388 26.212-70.578 46.952-113.504 61.646-45.804 15.678-94.718 23.628-145.384 23.628zM480 960v0c265.096 0 480-173.914 480-388.448s-214.904-388.448-480-388.448c-25.458 0-50.446 1.62-74.834 4.71-103.106-102.694-222.172-121.108-341.166-123.814v25.134c64.252 31.354 116 88.466 116 153.734 0 9.106-0.712 18.048-2.030 26.794-108.558 71.214-177.97 179.988-177.97 301.89 0 214.534 214.904 388.448 480 388.448zM996 89.314c0-55.942 36.314-104.898 92-131.772v-21.542c-103.126 2.318-197.786 18.102-287.142 106.126-21.14-2.65-42.794-4.040-64.858-4.040-95.47 0-183.408 25.758-253.614 69.040 144.674 0.506 281.26 46.854 384.834 130.672 52.208 42.252 93.394 91.826 122.414 147.348 30.766 58.866 46.366 121.582 46.366 186.406 0 10.448-0.45 20.836-1.258 31.168 72.57-59.934 117.258-141.622 117.258-231.676 0-104.488-60.158-197.722-154.24-258.764-1.142-7.496-1.76-15.16-1.76-22.966z" />
123<glyph unicode="&#xe971;" glyph-name="user" d="M576 253.388v52.78c70.498 39.728 128 138.772 128 237.832 0 159.058 0 288-192 288s-192-128.942-192-288c0-99.060 57.502-198.104 128-237.832v-52.78c-217.102-17.748-384-124.42-384-253.388h896c0 128.968-166.898 235.64-384 253.388z" />
124<glyph unicode="&#xe972;" glyph-name="users" horiz-adv-x="1152" d="M768 189.388v52.78c70.498 39.728 128 138.772 128 237.832 0 159.058 0 288-192 288s-192-128.942-192-288c0-99.060 57.502-198.104 128-237.832v-52.78c-217.102-17.748-384-124.42-384-253.388h896c0 128.968-166.898 235.64-384 253.388zM327.196 164.672c55.31 36.15 124.080 63.636 199.788 80.414-15.054 17.784-28.708 37.622-40.492 59.020-30.414 55.234-46.492 116.058-46.492 175.894 0 86.042 0 167.31 30.6 233.762 29.706 64.504 83.128 104.496 159.222 119.488-16.914 76.48-61.94 126.75-181.822 126.75-192 0-192-128.942-192-288 0-99.060 57.502-198.104 128-237.832v-52.78c-217.102-17.748-384-124.42-384-253.388h279.006c14.518 12.91 30.596 25.172 48.19 36.672z" />
125<glyph unicode="&#xe973;" glyph-name="user-plus" d="M384 224c0 151.234 95.874 280.486 230.032 330.2 16.28 36.538 25.968 77.164 25.968 117.8 0 159.058 0 288-192 288s-192-128.942-192-288c0-99.060 57.502-198.104 128-237.832v-52.78c-217.102-17.748-384-124.42-384-253.388h397.306c-8.664 30.53-13.306 62.732-13.306 96zM736 512c-159.058 0-288-128.942-288-288s128.942-288 288-288c159.056 0 288 128.942 288 288s-128.942 288-288 288zM896 192h-128v-128h-64v128h-128v64h128v128h64v-128h128v-64z" />
126<glyph unicode="&#xe974;" glyph-name="user-minus" d="M384 224c0 151.234 95.874 280.486 230.032 330.2 16.28 36.538 25.968 77.164 25.968 117.8 0 159.058 0 288-192 288s-192-128.942-192-288c0-99.060 57.502-198.104 128-237.832v-52.78c-217.102-17.748-384-124.42-384-253.388h397.306c-8.664 30.53-13.306 62.732-13.306 96zM736 512c-159.058 0-288-128.942-288-288s128.942-288 288-288c159.056 0 288 128.942 288 288s-128.942 288-288 288zM896 192h-320v64h320v-64z" />
127<glyph unicode="&#xe975;" glyph-name="user-check" d="M960 352l-288-288-96 96-64-64 160-160 352 352zM448 192h320v115.128c-67.22 39.2-156.308 66.11-256 74.26v52.78c70.498 39.728 128 138.772 128 237.832 0 159.058 0 288-192 288s-192-128.942-192-288c0-99.060 57.502-198.104 128-237.832v-52.78c-217.102-17.748-384-124.42-384-253.388h448v64z" />
128<glyph unicode="&#xe976;" glyph-name="user-tie" d="M320 768c0 106.039 85.961 192 192 192s192-85.961 192-192c0-106.039-85.961-192-192-192s-192 85.961-192 192zM768.078 512h-35.424l-199.104-404.244 74.45 372.244-96 96-96-96 74.45-372.244-199.102 404.244h-35.424c-127.924 0-127.924-85.986-127.924-192v-320h768v320c0 106.014 0 192-127.922 192z" />
129<glyph unicode="&#xe977;" glyph-name="quotes-left" d="M225 512c123.712 0 224-100.29 224-224 0-123.712-100.288-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.634-11.636-22.252-24.016-31.83-37.020 11.438 1.8 23.16 2.746 35.104 2.746zM801 512c123.71 0 224-100.29 224-224 0-123.712-100.29-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.636-11.636-22.254-24.016-31.832-37.020 11.44 1.8 23.16 2.746 35.106 2.746z" />
130<glyph unicode="&#xe978;" glyph-name="quotes-right" d="M800 320c-123.712 0-224 100.29-224 224 0 123.712 100.288 224 224 224s224-100.288 224-224l1-32c0-247.424-200.576-448-448-448v128c85.474 0 165.834 33.286 226.274 93.726 11.634 11.636 22.252 24.016 31.83 37.020-11.438-1.8-23.16-2.746-35.104-2.746zM224 320c-123.71 0-224 100.29-224 224 0 123.712 100.29 224 224 224s224-100.288 224-224l1-32c0-247.424-200.576-448-448-448v128c85.474 0 165.834 33.286 226.274 93.726 11.636 11.636 22.254 24.016 31.832 37.020-11.44-1.8-23.16-2.746-35.106-2.746z" />
131<glyph unicode="&#xe979;" glyph-name="hour-glass" d="M728.992 448c137.754 87.334 231.008 255.208 231.008 448 0 21.676-1.192 43.034-3.478 64h-889.042c-2.29-20.968-3.48-42.326-3.48-64 0-192.792 93.254-360.666 231.006-448-137.752-87.334-231.006-255.208-231.006-448 0-21.676 1.19-43.034 3.478-64h889.042c2.288 20.966 3.478 42.324 3.478 64 0.002 192.792-93.252 360.666-231.006 448zM160 0c0 186.912 80.162 345.414 224 397.708v100.586c-143.838 52.29-224 210.792-224 397.706v0h704c0-186.914-80.162-345.416-224-397.706v-100.586c143.838-52.294 224-210.796 224-397.708h-704zM619.626 290.406c-71.654 40.644-75.608 93.368-75.626 125.366v64.228c0 31.994 3.804 84.914 75.744 125.664 38.504 22.364 71.808 56.348 97.048 98.336h-409.582c25.266-42.032 58.612-76.042 97.166-98.406 71.654-40.644 75.606-93.366 75.626-125.366v-64.228c0-31.992-3.804-84.914-75.744-125.664-72.622-42.18-126.738-125.684-143.090-226.336h501.67c-16.364 100.708-70.53 184.248-143.212 226.406z" />
132<glyph unicode="&#xe97a;" glyph-name="spinner" d="M384 832c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM655.53 719.53c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM832 448c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM719.53 176.47c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM448.002 64c0 0 0 0 0 0 0 35.346 28.654 64 64 64s64-28.654 64-64c0 0 0 0 0 0 0-35.346-28.654-64-64-64s-64 28.654-64 64zM176.472 176.47c0 0 0 0 0 0 0 35.346 28.654 64 64 64s64-28.654 64-64c0 0 0 0 0 0 0-35.346-28.654-64-64-64s-64 28.654-64 64zM144.472 719.53c0 0 0 0 0 0 0 53.019 42.981 96 96 96s96-42.981 96-96c0 0 0 0 0 0 0-53.019-42.981-96-96-96s-96 42.981-96 96zM56 448c0 39.765 32.235 72 72 72s72-32.235 72-72c0-39.765-32.235-72-72-72s-72 32.235-72 72z" />
133<glyph unicode="&#xe97b;" glyph-name="spinner2" d="M1024 448c-1.278 66.862-15.784 133.516-42.576 194.462-26.704 61-65.462 116.258-113.042 161.92-47.552 45.696-103.944 81.82-164.984 105.652-61.004 23.924-126.596 35.352-191.398 33.966-64.81-1.282-129.332-15.374-188.334-41.356-59.048-25.896-112.542-63.47-156.734-109.576-44.224-46.082-79.16-100.708-102.186-159.798-23.114-59.062-34.128-122.52-32.746-185.27 1.286-62.76 14.964-125.148 40.134-182.206 25.088-57.1 61.476-108.828 106.11-151.548 44.61-42.754 97.472-76.504 154.614-98.72 57.118-22.304 118.446-32.902 179.142-31.526 60.708 1.29 120.962 14.554 176.076 38.914 55.15 24.282 105.116 59.48 146.366 102.644 41.282 43.14 73.844 94.236 95.254 149.43 13.034 33.458 21.88 68.4 26.542 103.798 1.246-0.072 2.498-0.12 3.762-0.12 35.346 0 64 28.652 64 64 0 1.796-0.094 3.572-0.238 5.332h0.238zM922.306 278.052c-23.472-53.202-57.484-101.4-99.178-141.18-41.67-39.81-91-71.186-144.244-91.79-53.228-20.678-110.29-30.452-166.884-29.082-56.604 1.298-112.596 13.736-163.82 36.474-51.25 22.666-97.684 55.49-135.994 95.712-38.338 40.198-68.528 87.764-88.322 139.058-19.87 51.284-29.228 106.214-27.864 160.756 1.302 54.552 13.328 108.412 35.254 157.69 21.858 49.3 53.498 93.97 92.246 130.81 38.73 36.868 84.53 65.87 133.874 84.856 49.338 19.060 102.136 28.006 154.626 26.644 52.5-1.306 104.228-12.918 151.562-34.034 47.352-21.050 90.256-51.502 125.624-88.782 35.396-37.258 63.21-81.294 81.39-128.688 18.248-47.392 26.782-98.058 25.424-148.496h0.238c-0.144-1.76-0.238-3.536-0.238-5.332 0-33.012 24.992-60.174 57.086-63.624-6.224-34.822-16.53-68.818-30.78-100.992z" />
134<glyph unicode="&#xe97c;" glyph-name="spinner3" d="M512 656.904c-32.964 0-59.686 26.724-59.686 59.686v179.060c0 32.964 26.722 59.686 59.686 59.686 32.962 0 59.688-26.722 59.688-59.686v-179.060c0-32.964-26.726-59.686-59.688-59.686zM512-36.956c-20.602 0-37.304 16.702-37.304 37.304v179.060c0 20.602 16.702 37.304 37.304 37.304 20.604 0 37.304-16.704 37.304-37.304v-179.060c0-20.602-16.7-37.304-37.304-37.304zM377.756 624.64c-19.34 0-38.146 10.034-48.512 27.988l-89.53 155.070c-15.452 26.764-6.282 60.986 20.482 76.438 26.762 15.45 60.986 6.284 76.438-20.482l89.53-155.072c15.452-26.764 6.282-60.986-20.482-76.438-8.81-5.084-18.432-7.504-27.926-7.504zM735.856 26.744c-11.602 0-22.886 6.022-29.108 16.792l-89.53 155.070c-9.27 16.056-3.77 36.592 12.29 45.864 16.056 9.264 36.59 3.77 45.864-12.292l89.532-155.068c9.27-16.058 3.768-36.592-12.292-45.864-5.286-3.048-11.060-4.502-16.756-4.502zM279.344 530.060c-8.86 0-17.838 2.256-26.064 7.006l-155.072 89.53c-24.978 14.422-33.538 46.362-19.116 71.342 14.42 24.978 46.364 33.538 71.342 19.116l155.070-89.53c24.98-14.422 33.538-46.362 19.116-71.34-9.668-16.756-27.226-26.124-45.276-26.124zM899.648 194.326c-5.064 0-10.196 1.29-14.894 4.004l-155.068 89.53c-14.274 8.24-19.164 26.494-10.924 40.768 8.242 14.276 26.496 19.166 40.766 10.924l155.070-89.532c14.274-8.24 19.164-26.492 10.924-40.766-5.53-9.574-15.562-14.928-25.874-14.928zM243.41 399.504h-179.060c-26.784 0-48.496 21.712-48.496 48.496s21.712 48.496 48.496 48.496h179.060c26.784 0 48.496-21.712 48.496-48.496s-21.712-48.496-48.496-48.496zM959.65 418.156c-0.002 0 0 0 0 0h-179.060c-16.482 0.002-29.844 13.364-29.844 29.844s13.364 29.844 29.844 29.844c0.002 0 0 0 0 0h179.060c16.482 0 29.844-13.362 29.844-29.844 0-16.48-13.364-29.844-29.844-29.844zM124.366 179.402c-15.472 0-30.518 8.028-38.81 22.39-12.362 21.41-5.026 48.79 16.384 61.148l155.072 89.532c21.41 12.368 48.79 5.028 61.15-16.384 12.362-21.412 5.026-48.79-16.384-61.15l-155.072-89.53c-7.050-4.070-14.748-6.006-22.34-6.006zM744.632 552.448c-10.314 0-20.346 5.352-25.874 14.926-8.24 14.274-3.35 32.526 10.924 40.768l155.070 89.528c14.272 8.236 32.526 3.352 40.768-10.922 8.24-14.274 3.35-32.526-10.924-40.768l-155.070-89.528c-4.7-2.714-9.83-4.004-14.894-4.004zM288.136 19.284c-6.962 0-14.016 1.774-20.48 5.504-19.626 11.332-26.35 36.428-15.020 56.054l89.53 155.070c11.33 19.628 36.426 26.352 56.054 15.022 19.626-11.332 26.35-36.43 15.020-56.054l-89.53-155.072c-7.598-13.166-21.392-20.524-35.574-20.524zM646.266 650.758c-5.062 0-10.196 1.29-14.894 4.002-14.274 8.242-19.164 26.494-10.924 40.766l89.534 155.070c8.24 14.274 26.492 19.166 40.766 10.922 14.274-8.242 19.164-26.494 10.924-40.766l-89.532-155.070c-5.53-9.57-15.56-14.924-25.874-14.924z" />
135<glyph unicode="&#xe97d;" glyph-name="spinner4" d="M192 448c0 12.18 0.704 24.196 2.030 36.022l-184.98 60.104c-5.916-31.14-9.050-63.264-9.050-96.126 0-147.23 62.166-279.922 161.654-373.324l114.284 157.296c-52.124 56.926-83.938 132.758-83.938 216.028zM832 448c0-83.268-31.812-159.102-83.938-216.028l114.284-157.296c99.488 93.402 161.654 226.094 161.654 373.324 0 32.862-3.132 64.986-9.048 96.126l-184.98-60.104c1.324-11.828 2.028-23.842 2.028-36.022zM576 761.592c91.934-18.662 169.544-76.742 214.45-155.826l184.978 60.102c-73.196 155.42-222.24 268.060-399.428 290.156v-194.432zM233.55 605.768c44.906 79.084 122.516 137.164 214.45 155.826v194.43c-177.188-22.096-326.23-134.736-399.426-290.154l184.976-60.102zM644.556 156.672c-40.39-18.408-85.272-28.672-132.556-28.672s-92.166 10.264-132.554 28.67l-114.292-157.31c73.206-40.366 157.336-63.36 246.846-63.36s173.64 22.994 246.848 63.36l-114.292 157.312z" />
136<glyph unicode="&#xe97e;" glyph-name="spinner5" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 704c141.384 0 256-114.616 256-256s-114.616-256-256-256-256 114.616-256 256 114.616 256 256 256zM817.47 142.53c-81.594-81.594-190.080-126.53-305.47-126.53-115.392 0-223.876 44.936-305.47 126.53s-126.53 190.078-126.53 305.47c0 115.39 44.936 223.876 126.53 305.47l67.882-67.882c0 0 0 0 0 0-131.006-131.006-131.006-344.17 0-475.176 63.462-63.462 147.838-98.412 237.588-98.412 89.748 0 174.124 34.95 237.588 98.412 131.006 131.006 131.006 344.168 0 475.176l67.882 67.882c81.594-81.594 126.53-190.080 126.53-305.47 0-115.392-44.936-223.876-126.53-305.47z" />
137<glyph unicode="&#xe97f;" glyph-name="spinner6" d="M384 832c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM790.994 448c0 0 0 0 0 0 0 57.993 47.013 105.006 105.006 105.006s105.006-47.013 105.006-105.006c0 0 0 0 0 0 0-57.993-47.013-105.006-105.006-105.006s-105.006 47.013-105.006 105.006zM688.424 176.47c0 52.526 42.58 95.106 95.106 95.106s95.106-42.58 95.106-95.106c0-52.526-42.58-95.106-95.106-95.106s-95.106 42.58-95.106 95.106zM425.862 64c0 47.573 38.565 86.138 86.138 86.138s86.138-38.565 86.138-86.138c0-47.573-38.565-86.138-86.138-86.138s-86.138 38.565-86.138 86.138zM162.454 176.47c0 43.088 34.93 78.018 78.018 78.018s78.018-34.93 78.018-78.018c0-43.088-34.93-78.018-78.018-78.018s-78.018 34.93-78.018 78.018zM57.338 448c0 39.026 31.636 70.662 70.662 70.662s70.662-31.636 70.662-70.662c0-39.026-31.636-70.662-70.662-70.662s-70.662 31.636-70.662 70.662zM176.472 719.528c0 0 0 0 0 0 0 35.346 28.654 64 64 64s64-28.654 64-64c0 0 0 0 0 0 0-35.346-28.654-64-64-64s-64 28.654-64 64zM899.464 719.528c0-64.024-51.906-115.934-115.936-115.934-64.024 0-115.936 51.91-115.936 115.934 0 64.032 51.912 115.934 115.936 115.934 64.030 0 115.936-51.902 115.936-115.934z" />
138<glyph unicode="&#xe980;" glyph-name="spinner7" d="M416 32c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM0 448c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM832 448c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM121.844 742.156c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM710.156 153.844c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM121.844 153.844c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM710.156 742.156c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96z" />
139<glyph unicode="&#xe981;" glyph-name="spinner8" d="M512-64c-136.76 0-265.334 53.258-362.040 149.96-96.702 96.706-149.96 225.28-149.96 362.040 0 96.838 27.182 191.134 78.606 272.692 50 79.296 120.664 143.372 204.356 185.3l43-85.832c-68.038-34.084-125.492-86.186-166.15-150.67-41.746-66.208-63.812-142.798-63.812-221.49 0-229.382 186.618-416 416-416s416 186.618 416 416c0 78.692-22.066 155.282-63.81 221.49-40.66 64.484-98.114 116.584-166.15 150.67l43 85.832c83.692-41.928 154.358-106.004 204.356-185.3 51.422-81.558 78.604-175.854 78.604-272.692 0-136.76-53.258-265.334-149.96-362.040-96.706-96.702-225.28-149.96-362.040-149.96z" />
140<glyph unicode="&#xe982;" glyph-name="spinner9" d="M512 960c-278.748 0-505.458-222.762-511.848-499.974 5.92 241.864 189.832 435.974 415.848 435.974 229.75 0 416-200.576 416-448 0-53.020 42.98-96 96-96s96 42.98 96 96c0 282.77-229.23 512-512 512zM512-64c278.748 0 505.458 222.762 511.848 499.974-5.92-241.864-189.832-435.974-415.848-435.974-229.75 0-416 200.576-416 448 0 53.020-42.98 96-96 96s-96-42.98-96-96c0-282.77 229.23-512 512-512z" />
141<glyph unicode="&#xe983;" glyph-name="spinner10" d="M0.042 446.382l-0.022-0.004c0 0 0.012-0.090 0.028-0.222 0.11-3.878 0.55-7.676 1.322-11.352 0.204-1.746 0.428-3.66 0.674-5.774 0.222-1.886 0.46-3.914 0.718-6.078 0.374-2.566 0.77-5.292 1.19-8.176 0.856-5.746 1.8-12.124 2.908-18.958 1.348-6.446 2.804-13.414 4.364-20.864 0.71-3.718 1.776-7.504 2.786-11.406 1.024-3.89 2.078-7.894 3.16-12.004 0.566-2.042 1.040-4.132 1.708-6.208 0.656-2.074 1.32-4.176 1.988-6.3 1.348-4.234 2.726-8.566 4.136-12.988 0.352-1.106 0.708-2.21 1.064-3.324 0.408-1.102 0.814-2.208 1.226-3.316 0.826-2.218 1.658-4.458 2.502-6.714 1.696-4.496 3.422-9.078 5.18-13.742 1.968-4.566 3.97-9.214 6.004-13.934 1.018-2.348 2.044-4.714 3.078-7.098 1.048-2.376 2.27-4.704 3.408-7.074 2.322-4.714 4.678-9.496 7.062-14.332 2.47-4.786 5.208-9.512 7.846-14.328 1.336-2.398 2.68-4.808 4.028-7.23 1.368-2.41 2.902-4.75 4.356-7.14 2.95-4.738 5.93-9.524 8.934-14.348 12.64-18.894 26.676-37.566 42.21-55.278 15.712-17.578 32.726-34.25 50.692-49.602 18.18-15.136 37.264-28.902 56.726-41.114 19.604-12.036 39.644-22.312 59.376-31.144 5.004-2.040 9.964-4.062 14.878-6.066 2.462-0.972 4.868-2.032 7.336-2.918 2.47-0.868 4.93-1.734 7.376-2.594 4.898-1.684 9.678-3.468 14.484-4.992 4.832-1.43 9.604-2.844 14.312-4.242 2.356-0.672 4.66-1.426 7.004-2.012 2.346-0.574 4.676-1.14 6.986-1.704 4.606-1.118 9.142-2.214 13.604-3.296 4.5-0.868 8.926-1.722 13.27-2.558 2.166-0.41 4.31-0.82 6.434-1.222 1.062-0.2 2.118-0.398 3.166-0.598 1.060-0.148 2.118-0.292 3.166-0.442 4.192-0.582 8.292-1.152 12.3-1.71 1.998-0.274 3.972-0.546 5.922-0.816 1.946-0.286 3.904-0.378 5.814-0.57 3.822-0.336 7.544-0.664 11.164-0.98 3.616-0.304 7.104-0.688 10.526-0.738 0.23-0.008 0.452-0.016 0.682-0.026 0.614-34.812 29.008-62.846 63.968-62.846 0.542 0 1.080 0.028 1.62 0.042v-0.022c0 0 0.090 0.012 0.224 0.028 3.878 0.11 7.674 0.55 11.35 1.322 1.748 0.204 3.662 0.426 5.776 0.672 1.884 0.222 3.912 0.462 6.076 0.718 2.566 0.376 5.292 0.772 8.176 1.192 5.746 0.856 12.124 1.8 18.958 2.908 6.446 1.348 13.414 2.804 20.864 4.362 3.718 0.712 7.504 1.778 11.406 2.786 3.892 1.026 7.894 2.080 12.004 3.162 2.044 0.566 4.132 1.040 6.208 1.708 2.074 0.656 4.174 1.318 6.3 1.988 4.232 1.348 8.564 2.726 12.988 4.134 1.104 0.354 2.21 0.708 3.324 1.066 1.1 0.406 2.206 0.814 3.316 1.226 2.216 0.824 4.456 1.658 6.714 2.5 4.496 1.698 9.078 3.424 13.74 5.182 4.568 1.968 9.216 3.97 13.936 6.004 2.348 1.018 4.714 2.044 7.098 3.078 2.376 1.048 4.702 2.27 7.074 3.408 4.714 2.322 9.494 4.678 14.33 7.062 4.786 2.47 9.512 5.208 14.328 7.846 2.398 1.336 4.808 2.678 7.23 4.028 2.41 1.366 4.75 2.9 7.14 4.354 4.738 2.952 9.524 5.93 14.35 8.936 18.89 12.64 37.564 26.674 55.278 42.21 17.574 15.712 34.248 32.726 49.602 50.69 15.136 18.182 28.902 37.264 41.112 56.728 12.036 19.602 22.314 39.644 31.142 59.376 2.042 5.002 4.062 9.964 6.068 14.878 0.974 2.462 2.032 4.868 2.918 7.334 0.87 2.472 1.732 4.932 2.592 7.376 1.686 4.898 3.468 9.678 4.994 14.484 1.432 4.832 2.846 9.604 4.24 14.31 0.674 2.358 1.43 4.66 2.016 7.004 0.57 2.348 1.138 4.676 1.702 6.988 1.118 4.606 2.216 9.14 3.296 13.602 0.868 4.502 1.72 8.928 2.558 13.272 0.41 2.164 0.818 4.308 1.222 6.434 0.2 1.060 0.398 2.116 0.596 3.164 0.148 1.062 0.296 2.118 0.444 3.168 0.582 4.19 1.152 8.292 1.708 12.3 0.278 1.996 0.55 3.97 0.82 5.922 0.284 1.946 0.376 3.902 0.568 5.812 0.336 3.822 0.664 7.546 0.98 11.164 0.304 3.616 0.686 7.106 0.738 10.528 0.020 0.534 0.040 1.044 0.058 1.574 35.224 0.146 63.732 28.738 63.732 63.992 0 0.542-0.028 1.080-0.042 1.62h0.022c0 0-0.012 0.090-0.028 0.224-0.11 3.878-0.55 7.674-1.322 11.35-0.204 1.748-0.428 3.662-0.674 5.776-0.222 1.886-0.46 3.914-0.718 6.076-0.374 2.566-0.77 5.294-1.19 8.176-0.856 5.746-1.8 12.124-2.908 18.958-1.348 6.444-2.804 13.414-4.364 20.862-0.71 3.72-1.776 7.506-2.786 11.408-1.024 3.892-2.078 7.894-3.16 12.002-0.566 2.044-1.040 4.134-1.708 6.208-0.656 2.076-1.32 4.174-1.988 6.3-1.348 4.234-2.726 8.566-4.136 12.99-0.352 1.102-0.708 2.21-1.064 3.324-0.408 1.1-0.814 2.206-1.226 3.316-0.826 2.216-1.658 4.454-2.502 6.714-1.696 4.498-3.422 9.080-5.18 13.74-1.968 4.57-3.97 9.216-6.004 13.936-1.020 2.348-2.044 4.714-3.078 7.098-1.048 2.376-2.27 4.702-3.408 7.076-2.322 4.714-4.678 9.494-7.062 14.33-2.47 4.786-5.208 9.512-7.846 14.328-1.336 2.398-2.68 4.808-4.028 7.23-1.368 2.41-2.902 4.75-4.356 7.14-2.95 4.74-5.93 9.524-8.934 14.35-12.64 18.892-26.676 37.564-42.21 55.278-15.712 17.576-32.726 34.25-50.692 49.602-18.18 15.136-37.264 28.902-56.726 41.112-19.604 12.036-39.644 22.314-59.376 31.142-5.004 2.040-9.964 4.062-14.878 6.068-2.462 0.974-4.868 2.032-7.336 2.918-2.47 0.87-4.93 1.734-7.376 2.592-4.898 1.684-9.678 3.468-14.484 4.994-4.832 1.432-9.604 2.846-14.312 4.242-2.356 0.672-4.66 1.428-7.004 2.014-2.346 0.572-4.676 1.138-6.986 1.702-4.606 1.118-9.142 2.216-13.604 3.298-4.5 0.868-8.926 1.72-13.27 2.558-2.166 0.412-4.31 0.82-6.434 1.222-1.062 0.2-2.118 0.398-3.166 0.596-1.060 0.148-2.118 0.296-3.166 0.442-4.192 0.584-8.292 1.154-12.3 1.71-1.998 0.276-3.972 0.55-5.922 0.82-1.946 0.284-3.904 0.376-5.814 0.57-3.822 0.336-7.544 0.664-11.164 0.98-3.616 0.304-7.104 0.686-10.526 0.738-0.852 0.032-1.674 0.062-2.512 0.092-0.65 34.78-29.028 62.778-63.966 62.778-0.542 0-1.080-0.028-1.62-0.042l-0.002 0.022c0 0-0.090-0.012-0.222-0.028-3.878-0.11-7.676-0.55-11.352-1.322-1.748-0.204-3.662-0.426-5.776-0.672-1.884-0.222-3.912-0.462-6.076-0.718-2.566-0.376-5.292-0.772-8.176-1.192-5.746-0.856-12.124-1.8-18.958-2.908-6.446-1.348-13.414-2.804-20.864-4.362-3.718-0.712-7.504-1.778-11.406-2.786-3.892-1.026-7.894-2.080-12.004-3.162-2.044-0.566-4.132-1.040-6.208-1.708-2.074-0.656-4.174-1.318-6.3-1.988-4.232-1.348-8.564-2.726-12.988-4.134-1.104-0.354-2.21-0.708-3.324-1.066-1.1-0.406-2.206-0.814-3.316-1.226-2.216-0.824-4.456-1.658-6.714-2.5-4.496-1.698-9.078-3.424-13.74-5.182-4.568-1.968-9.216-3.97-13.936-6.004-2.348-1.018-4.714-2.044-7.098-3.078-2.376-1.048-4.702-2.27-7.074-3.408-4.714-2.322-9.494-4.678-14.33-7.062-4.786-2.47-9.512-5.208-14.328-7.846-2.398-1.336-4.808-2.678-7.23-4.028-2.41-1.366-4.75-2.9-7.14-4.354-4.738-2.952-9.524-5.93-14.35-8.936-18.89-12.64-37.564-26.674-55.278-42.21-17.574-15.712-34.248-32.726-49.602-50.69-15.136-18.182-28.902-37.264-41.112-56.728-12.036-19.602-22.314-39.644-31.142-59.376-2.042-5.002-4.062-9.964-6.068-14.878-0.974-2.462-2.032-4.868-2.918-7.334-0.87-2.472-1.732-4.932-2.592-7.376-1.686-4.898-3.468-9.678-4.994-14.484-1.432-4.832-2.846-9.604-4.24-14.31-0.674-2.358-1.43-4.66-2.016-7.004-0.57-2.348-1.138-4.676-1.702-6.988-1.118-4.606-2.216-9.14-3.296-13.602-0.868-4.502-1.72-8.928-2.558-13.272-0.41-2.164-0.818-4.308-1.222-6.434-0.2-1.060-0.398-2.116-0.596-3.164-0.148-1.062-0.296-2.118-0.444-3.168-0.582-4.19-1.152-8.292-1.708-12.3-0.278-1.996-0.55-3.97-0.82-5.922-0.284-1.946-0.376-3.902-0.568-5.812-0.336-3.822-0.664-7.546-0.98-11.164-0.304-3.616-0.686-7.106-0.738-10.528-0.020-0.548-0.040-1.076-0.058-1.62-34.376-1.112-61.902-29.304-61.902-63.946 0-0.542 0.028-1.078 0.042-1.618zM73.518 511.294c0.042 0.196 0.086 0.384 0.128 0.58 0.644 3.248 1.632 6.542 2.556 9.942 0.934 3.388 1.894 6.876 2.88 10.454 0.516 1.78 0.934 3.602 1.546 5.406 0.596 1.802 1.202 3.628 1.81 5.476 1.218 3.682 2.464 7.45 3.736 11.294 0.316 0.958 0.634 1.924 0.956 2.892 0.37 0.954 0.74 1.914 1.114 2.876 0.746 1.924 1.5 3.868 2.26 5.83 1.52 3.904 3.070 7.882 4.646 11.93 1.768 3.96 3.566 7.99 5.392 12.080 0.908 2.038 1.824 4.090 2.746 6.156 0.932 2.060 2.036 4.072 3.052 6.126 2.070 4.084 4.17 8.222 6.294 12.412 2.202 4.142 4.654 8.224 6.998 12.392 1.184 2.074 2.374 4.16 3.57 6.256 1.21 2.086 2.586 4.102 3.876 6.166 2.616 4.098 5.256 8.232 7.918 12.402 11.234 16.298 23.632 32.398 37.33 47.638 13.874 15.104 28.842 29.404 44.598 42.548 15.974 12.928 32.686 24.65 49.676 35.022 17.13 10.194 34.6 18.838 51.734 26.258 4.35 1.7 8.662 3.382 12.934 5.050 2.136 0.812 4.216 1.71 6.36 2.444 2.146 0.714 4.28 1.428 6.404 2.136 4.25 1.386 8.382 2.888 12.548 4.142 4.184 1.174 8.314 2.332 12.392 3.474 2.038 0.55 4.026 1.19 6.054 1.662 2.030 0.458 4.044 0.914 6.044 1.368 3.978 0.91 7.896 1.806 11.748 2.688 3.888 0.686 7.71 1.36 11.462 2.022 1.868 0.33 3.716 0.658 5.546 0.98 0.914 0.162 1.824 0.324 2.728 0.484 0.916 0.112 1.828 0.222 2.734 0.332 3.612 0.448 7.148 0.882 10.604 1.31 1.72 0.216 3.422 0.432 5.102 0.644 1.674 0.226 3.364 0.266 5.010 0.408 3.292 0.238 6.498 0.472 9.616 0.7 3.11 0.218 6.11 0.524 9.058 0.508 5.848 0.132 11.32 0.256 16.38 0.372 4.664-0.168 8.948-0.324 12.818-0.462 1.914-0.054 3.726-0.108 5.432-0.156 2.122-0.134 4.108-0.26 5.958-0.378 2.13-0.138 4.060-0.266 5.82-0.38 3.256-0.51 6.592-0.782 9.99-0.782 0.466 0 0.93 0.026 1.396 0.036 0.132-0.008 0.224-0.014 0.224-0.014v0.020c31.14 0.778 56.75 23.784 61.556 53.754 0.542-0.12 1.064-0.236 1.612-0.356 3.246-0.644 6.542-1.632 9.942-2.556 3.386-0.934 6.876-1.894 10.454-2.88 1.778-0.516 3.602-0.934 5.404-1.546 1.802-0.596 3.63-1.202 5.478-1.812 3.68-1.218 7.448-2.464 11.292-3.736 0.96-0.316 1.924-0.634 2.892-0.956 0.956-0.37 1.914-0.74 2.876-1.112 1.926-0.746 3.868-1.5 5.83-2.26 3.904-1.52 7.884-3.070 11.932-4.646 3.96-1.768 7.988-3.566 12.080-5.392 2.038-0.908 4.088-1.824 6.156-2.746 2.060-0.932 4.072-2.036 6.126-3.054 4.082-2.070 8.222-4.17 12.41-6.294 4.144-2.202 8.226-4.654 12.394-6.998 2.074-1.184 4.16-2.374 6.256-3.572 2.086-1.21 4.102-2.586 6.166-3.876 4.098-2.616 8.23-5.256 12.402-7.918 16.296-11.234 32.398-23.632 47.636-37.33 15.104-13.874 29.406-28.842 42.55-44.598 12.928-15.974 24.648-32.686 35.020-49.676 10.196-17.13 18.84-34.6 26.26-51.736 1.698-4.348 3.382-8.662 5.050-12.932 0.812-2.136 1.71-4.216 2.444-6.36 0.714-2.146 1.428-4.28 2.136-6.404 1.386-4.25 2.888-8.384 4.142-12.548 1.174-4.184 2.33-8.316 3.474-12.392 0.55-2.038 1.19-4.026 1.66-6.054 0.46-2.030 0.916-4.046 1.368-6.046 0.91-3.978 1.808-7.896 2.688-11.748 0.688-3.888 1.362-7.71 2.024-11.462 0.33-1.868 0.656-3.716 0.98-5.548 0.162-0.914 0.324-1.824 0.484-2.728 0.11-0.916 0.222-1.828 0.332-2.734 0.446-3.612 0.882-7.148 1.31-10.604 0.216-1.72 0.432-3.42 0.642-5.1 0.226-1.674 0.268-3.364 0.41-5.010 0.238-3.292 0.472-6.498 0.7-9.616 0.218-3.11 0.524-6.11 0.508-9.058 0.132-5.848 0.256-11.32 0.372-16.38-0.168-4.664-0.324-8.948-0.462-12.818-0.054-1.914-0.108-3.726-0.156-5.432-0.134-2.122-0.26-4.108-0.378-5.958-0.138-2.13-0.266-4.060-0.38-5.82-0.498-3.256-0.768-6.592-0.768-9.99 0-0.468 0.026-0.93 0.036-1.396-0.008-0.132-0.016-0.224-0.016-0.224h0.022c0.768-30.766 23.236-56.128 52.682-61.37-0.066-0.296-0.13-0.584-0.198-0.884-0.644-3.248-1.632-6.542-2.556-9.942-0.934-3.388-1.894-6.876-2.88-10.454-0.516-1.78-0.934-3.602-1.546-5.406-0.596-1.802-1.202-3.628-1.81-5.476-1.218-3.682-2.464-7.45-3.736-11.294-0.316-0.958-0.634-1.924-0.956-2.892-0.37-0.954-0.74-1.914-1.114-2.876-0.746-1.924-1.5-3.868-2.26-5.83-1.52-3.904-3.070-7.882-4.646-11.93-1.768-3.96-3.566-7.99-5.392-12.080-0.908-2.038-1.824-4.090-2.746-6.156-0.932-2.060-2.036-4.072-3.052-6.126-2.070-4.084-4.17-8.222-6.294-12.412-2.202-4.142-4.654-8.224-6.998-12.392-1.184-2.074-2.374-4.16-3.57-6.256-1.21-2.086-2.586-4.102-3.876-6.166-2.616-4.098-5.256-8.232-7.918-12.402-11.234-16.298-23.632-32.398-37.33-47.638-13.874-15.104-28.842-29.404-44.598-42.548-15.974-12.928-32.686-24.65-49.676-35.022-17.13-10.194-34.6-18.838-51.734-26.258-4.35-1.7-8.662-3.382-12.934-5.050-2.136-0.812-4.216-1.71-6.36-2.444-2.146-0.714-4.28-1.428-6.404-2.136-4.25-1.386-8.382-2.888-12.548-4.142-4.184-1.174-8.314-2.332-12.392-3.474-2.038-0.55-4.026-1.19-6.054-1.662-2.030-0.458-4.044-0.914-6.044-1.368-3.978-0.91-7.896-1.806-11.748-2.688-3.888-0.686-7.71-1.36-11.462-2.022-1.868-0.33-3.716-0.658-5.546-0.98-0.914-0.162-1.824-0.324-2.728-0.484-0.916-0.112-1.828-0.222-2.734-0.332-3.612-0.448-7.148-0.882-10.604-1.31-1.72-0.216-3.422-0.432-5.102-0.644-1.674-0.226-3.364-0.266-5.010-0.408-3.292-0.238-6.498-0.472-9.616-0.7-3.11-0.218-6.11-0.524-9.058-0.508-5.848-0.132-11.32-0.256-16.38-0.372-4.664 0.168-8.948 0.324-12.818 0.462-1.914 0.054-3.726 0.108-5.432 0.156-2.122 0.134-4.108 0.26-5.958 0.378-2.13 0.138-4.060 0.266-5.82 0.38-3.256 0.51-6.592 0.782-9.99 0.782-0.466 0-0.93-0.026-1.396-0.036-0.132 0.008-0.224 0.014-0.224 0.014v-0.020c-31.004-0.774-56.524-23.586-61.488-53.364-3.2 0.64-6.446 1.61-9.792 2.522-3.386 0.934-6.876 1.894-10.454 2.878-1.778 0.516-3.602 0.938-5.404 1.546-1.802 0.598-3.63 1.204-5.478 1.812-3.68 1.218-7.448 2.464-11.292 3.738-0.96 0.316-1.924 0.632-2.892 0.954-0.956 0.372-1.914 0.742-2.876 1.114-1.926 0.746-3.868 1.5-5.83 2.258-3.904 1.524-7.884 3.070-11.932 4.648-3.96 1.77-7.988 3.566-12.080 5.39-2.038 0.91-4.088 1.824-6.156 2.746-2.060 0.934-4.072 2.036-6.126 3.054-4.082 2.070-8.222 4.172-12.41 6.296-4.144 2.2-8.226 4.652-12.394 6.996-2.074 1.184-4.16 2.376-6.256 3.57-2.086 1.21-4.102 2.586-6.166 3.878-4.098 2.614-8.23 5.254-12.402 7.918-16.296 11.23-32.398 23.632-47.636 37.328-15.104 13.876-29.406 28.84-42.55 44.598-12.928 15.972-24.648 32.684-35.020 49.676-10.196 17.128-18.84 34.602-26.26 51.734-1.698 4.352-3.382 8.664-5.050 12.934-0.812 2.136-1.71 4.218-2.444 6.36-0.714 2.148-1.428 4.282-2.136 6.406-1.386 4.25-2.888 8.382-4.142 12.546-1.174 4.184-2.33 8.316-3.474 12.394-0.55 2.036-1.19 4.024-1.66 6.054-0.46 2.028-0.916 4.042-1.368 6.042-0.91 3.98-1.808 7.898-2.688 11.75-0.688 3.886-1.362 7.71-2.024 11.46-0.33 1.868-0.656 3.718-0.98 5.546-0.162 0.914-0.324 1.824-0.484 2.73-0.11 0.914-0.222 1.828-0.332 2.734-0.446 3.61-0.882 7.148-1.31 10.602-0.216 1.722-0.432 3.422-0.642 5.102-0.226 1.676-0.268 3.364-0.41 5.012-0.238 3.29-0.472 6.496-0.7 9.614-0.218 3.11-0.524 6.11-0.508 9.058-0.132 5.848-0.256 11.32-0.372 16.382 0.168 4.664 0.324 8.946 0.462 12.816 0.054 1.914 0.108 3.726 0.156 5.434 0.134 2.122 0.26 4.106 0.378 5.958 0.138 2.128 0.266 4.058 0.38 5.82 0.496 3.26 0.766 6.596 0.766 9.994 0 0.466-0.026 0.93-0.036 1.396 0.008 0.132 0.016 0.224 0.016 0.224h-0.022c-0.78 31.38-24.134 57.154-54.44 61.674z" />
142<glyph unicode="&#xe984;" glyph-name="spinner11" d="M1024 576h-384l143.53 143.53c-72.53 72.526-168.96 112.47-271.53 112.47s-199-39.944-271.53-112.47c-72.526-72.53-112.47-168.96-112.47-271.53s39.944-199 112.47-271.53c72.53-72.526 168.96-112.47 271.53-112.47s199 39.944 271.528 112.472c6.056 6.054 11.86 12.292 17.456 18.668l96.32-84.282c-93.846-107.166-231.664-174.858-385.304-174.858-282.77 0-512 229.23-512 512s229.23 512 512 512c141.386 0 269.368-57.326 362.016-149.984l149.984 149.984v-384z" />
143<glyph unicode="&#xe985;" glyph-name="binoculars" d="M64 960h384v-64h-384zM576 960h384v-64h-384zM952 640h-56v256h-256v-256h-256v256h-256v-256h-56c-39.6 0-72-32.4-72-72v-560c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v376h128v-376c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v560c0 39.6-32.4 72-72 72zM348 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM924 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
144<glyph unicode="&#xe986;" glyph-name="search" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256z" />
145<glyph unicode="&#xe987;" glyph-name="zoom-in" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM448 768h-128v-128h-128v-128h128v-128h128v128h128v128h-128z" />
146<glyph unicode="&#xe988;" glyph-name="zoom-out" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM192 640h384v-128h-384z" />
147<glyph unicode="&#xe989;" glyph-name="enlarge" d="M1024 960h-416l160-160-192-192 96-96 192 192 160-160zM1024-64v416l-160-160-192 192-96-96 192-192-160-160zM0-64h416l-160 160 192 192-96 96-192-192-160 160zM0 960v-416l160 160 192-192 96 96-192 192 160 160z" />
148<glyph unicode="&#xe98a;" glyph-name="shrink" d="M576 512h416l-160 160 192 192-96 96-192-192-160 160zM576 384v-416l160 160 192-192 96 96-192 192 160 160zM448 384.004h-416l160-160-192-192 96-96 192 192 160-160zM448 512v416l-160-160-192 192-96-96 192-192-160-160z" />
149<glyph unicode="&#xe98b;" glyph-name="enlarge2" d="M1024 960v-416l-160 160-192-192-96 96 192 192-160 160zM448 288l-192-192 160-160h-416v416l160-160 192 192z" />
150<glyph unicode="&#xe98c;" glyph-name="shrink2" d="M448 384v-416l-160 160-192-192-96 96 192 192-160 160zM1024 864l-192-192 160-160h-416v416l160-160 192 192z" />
151<glyph unicode="&#xe98d;" glyph-name="key" d="M704 960c-176.73 0-320-143.268-320-320 0-20.026 1.858-39.616 5.376-58.624l-389.376-389.376v-192c0-35.346 28.654-64 64-64h64v64h128v128h128v128h128l83.042 83.042c34.010-12.316 70.696-19.042 108.958-19.042 176.73 0 320 143.268 320 320s-143.27 320-320 320zM799.874 639.874c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96z" />
152<glyph unicode="&#xe98e;" glyph-name="key2" d="M1002.132 645.758l-101.106 101.104c-24.792 24.794-65.37 65.368-90.162 90.164l-101.106 101.104c-24.792 24.794-68.954 29.166-98.13 9.716l-276.438-184.292c-29.176-19.452-40.218-61.028-24.536-92.39l70.486-140.974c2.154-4.306 4.646-8.896 7.39-13.66l-356.53-356.53-32-224h192v64h128v128h128v128h128v71.186c6.396-3.812 12.534-7.216 18.192-10.044l140.97-70.488c31.366-15.682 72.94-4.638 92.39 24.538l184.294 276.44c19.454 29.172 15.078 73.33-9.714 98.126zM150.628 105.374l-45.254 45.254 311.572 311.57 45.254-45.254-311.572-311.57zM917.020 536.236l-45.256-45.256c-12.446-12.444-32.808-12.444-45.254 0l-271.53 271.53c-12.446 12.444-12.446 32.81 0 45.254l45.256 45.256c12.446 12.444 32.808 12.444 45.254 0l271.53-271.53c12.446-12.444 12.446-32.81 0-45.254z" />
153<glyph unicode="&#xe98f;" glyph-name="lock" d="M592 512h-16v192c0 105.87-86.13 192-192 192h-128c-105.87 0-192-86.13-192-192v-192h-16c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h544c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48zM192 704c0 35.29 28.71 64 64 64h128c35.29 0 64-28.71 64-64v-192h-256v192z" />
154<glyph unicode="&#xe990;" glyph-name="unlocked" d="M768 896c105.87 0 192-86.13 192-192v-192h-128v192c0 35.29-28.71 64-64 64h-128c-35.29 0-64-28.71-64-64v-192h16c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48h-544c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h400v192c0 105.87 86.13 192 192 192h128z" />
155<glyph unicode="&#xe991;" glyph-name="wrench" d="M1002.934 142.124l-460.552 394.76c21.448 40.298 33.618 86.282 33.618 135.116 0 159.058-128.942 288-288 288-29.094 0-57.172-4.332-83.646-12.354l166.39-166.39c24.89-24.89 24.89-65.62 0-90.51l-101.49-101.49c-24.89-24.89-65.62-24.89-90.51 0l-166.39 166.39c-8.022-26.474-12.354-54.552-12.354-83.646 0-159.058 128.942-288 288-288 48.834 0 94.818 12.17 135.116 33.62l394.76-460.552c22.908-26.724 62.016-28.226 86.904-3.338l101.492 101.492c24.888 24.888 23.386 63.994-3.338 86.902z" />
156<glyph unicode="&#xe992;" glyph-name="equalizer" d="M448 832v16c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-192v-128h192v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h576v128h-576zM256 704v128h128v-128h-128zM832 528c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-576v-128h576v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h192v128h-192v16zM640 384v128h128v-128h-128zM448 208c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-192v-128h192v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h576v128h-576v16zM256 64v128h128v-128h-128z" />
157<glyph unicode="&#xe993;" glyph-name="equalizer2" d="M896 512h16c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-16v192h-128v-192h-16c-26.4 0-48-21.6-48-48v-160c0-26.4 21.6-48 48-48h16v-576h128v576zM768 704h128v-128h-128v128zM592 128c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-16v576h-128v-576h-16c-26.4 0-48-21.6-48-48v-160c0-26.4 21.6-48 48-48h16v-192h128v192h16zM448 320h128v-128h-128v128zM272 512c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-16v192h-128v-192h-16c-26.4 0-48-21.6-48-48v-160c0-26.4 21.6-48 48-48h16v-576h128v576h16zM128 704h128v-128h-128v128z" />
158<glyph unicode="&#xe994;" glyph-name="cog" d="M933.79 349.75c-53.726 93.054-21.416 212.304 72.152 266.488l-100.626 174.292c-28.75-16.854-62.176-26.518-97.846-26.518-107.536 0-194.708 87.746-194.708 195.99h-201.258c0.266-33.41-8.074-67.282-25.958-98.252-53.724-93.056-173.156-124.702-266.862-70.758l-100.624-174.292c28.97-16.472 54.050-40.588 71.886-71.478 53.638-92.908 21.512-211.92-71.708-266.224l100.626-174.292c28.65 16.696 61.916 26.254 97.4 26.254 107.196 0 194.144-87.192 194.7-194.958h201.254c-0.086 33.074 8.272 66.57 25.966 97.218 53.636 92.906 172.776 124.594 266.414 71.012l100.626 174.29c-28.78 16.466-53.692 40.498-71.434 71.228zM512 240.668c-114.508 0-207.336 92.824-207.336 207.334 0 114.508 92.826 207.334 207.336 207.334 114.508 0 207.332-92.826 207.332-207.334-0.002-114.51-92.824-207.334-207.332-207.334z" />
159<glyph unicode="&#xe995;" glyph-name="cogs" d="M363.722 237.948l41.298 57.816-45.254 45.256-57.818-41.296c-10.722 5.994-22.204 10.774-34.266 14.192l-11.682 70.084h-64l-11.68-70.086c-12.062-3.418-23.544-8.198-34.266-14.192l-57.818 41.298-45.256-45.256 41.298-57.816c-5.994-10.72-10.774-22.206-14.192-34.266l-70.086-11.682v-64l70.086-11.682c3.418-12.060 8.198-23.544 14.192-34.266l-41.298-57.816 45.254-45.256 57.818 41.296c10.722-5.994 22.204-10.774 34.266-14.192l11.682-70.084h64l11.68 70.086c12.062 3.418 23.544 8.198 34.266 14.192l57.818-41.296 45.254 45.256-41.298 57.816c5.994 10.72 10.774 22.206 14.192 34.266l70.088 11.68v64l-70.086 11.682c-3.418 12.060-8.198 23.544-14.192 34.266zM224 96c-35.348 0-64 28.654-64 64s28.652 64 64 64 64-28.654 64-64-28.652-64-64-64zM1024 576v64l-67.382 12.25c-1.242 8.046-2.832 15.978-4.724 23.79l57.558 37.1-24.492 59.128-66.944-14.468c-4.214 6.91-8.726 13.62-13.492 20.13l39.006 56.342-45.256 45.254-56.342-39.006c-6.512 4.766-13.22 9.276-20.13 13.494l14.468 66.944-59.128 24.494-37.1-57.558c-7.812 1.892-15.744 3.482-23.79 4.724l-12.252 67.382h-64l-12.252-67.382c-8.046-1.242-15.976-2.832-23.79-4.724l-37.098 57.558-59.128-24.492 14.468-66.944c-6.91-4.216-13.62-8.728-20.13-13.494l-56.342 39.006-45.254-45.254 39.006-56.342c-4.766-6.51-9.278-13.22-13.494-20.13l-66.944 14.468-24.492-59.128 57.558-37.1c-1.892-7.812-3.482-15.742-4.724-23.79l-67.384-12.252v-64l67.382-12.25c1.242-8.046 2.832-15.978 4.724-23.79l-57.558-37.1 24.492-59.128 66.944 14.468c4.216-6.91 8.728-13.618 13.494-20.13l-39.006-56.342 45.254-45.256 56.342 39.006c6.51-4.766 13.22-9.276 20.13-13.492l-14.468-66.944 59.128-24.492 37.102 57.558c7.81-1.892 15.742-3.482 23.788-4.724l12.252-67.384h64l12.252 67.382c8.044 1.242 15.976 2.832 23.79 4.724l37.1-57.558 59.128 24.492-14.468 66.944c6.91 4.216 13.62 8.726 20.13 13.492l56.342-39.006 45.256 45.256-39.006 56.342c4.766 6.512 9.276 13.22 13.492 20.13l66.944-14.468 24.492 59.13-57.558 37.1c1.892 7.812 3.482 15.742 4.724 23.79l67.382 12.25zM672 468.8c-76.878 0-139.2 62.322-139.2 139.2s62.32 139.2 139.2 139.2 139.2-62.322 139.2-139.2c0-76.878-62.32-139.2-139.2-139.2z" />
160<glyph unicode="&#xe996;" glyph-name="hammer" d="M1009.996 131.024l-301.544 301.544c-18.668 18.668-49.214 18.668-67.882 0l-22.626-22.626-184 184 302.056 302.058h-320l-142.058-142.058-14.060 14.058h-67.882v-67.882l14.058-14.058-206.058-206.060 160-160 206.058 206.058 184-184-22.626-22.626c-18.668-18.668-18.668-49.214 0-67.882l301.544-301.544c18.668-18.668 49.214-18.668 67.882 0l113.136 113.136c18.67 18.666 18.67 49.214 0.002 67.882z" />
161<glyph unicode="&#xe997;" glyph-name="magic-wand" d="M256 768l-128 128h-64v-64l128-128zM320 960h64v-128h-64zM576 640h128v-64h-128zM640 832v64h-64l-128-128 64-64zM0 640h128v-64h-128zM320 384h64v-128h-64zM64 384v-64h64l128 128-64 64zM1010 78l-636.118 636.118c-18.668 18.668-49.214 18.668-67.882 0l-60.118-60.118c-18.668-18.668-18.668-49.214 0-67.882l636.118-636.118c18.668-18.668 49.214-18.668 67.882 0l60.118 60.118c18.668 18.668 18.668 49.214 0 67.882zM480 416l-192 192 64 64 192-192-64-64z" />
162<glyph unicode="&#xe998;" glyph-name="aid-kit" d="M896 704h-192v128c0 35.2-28.8 64-64 64h-256c-35.2 0-64-28.8-64-64v-128h-192c-70.4 0-128-57.6-128-128v-512c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v512c0 70.4-57.6 128-128 128zM384 832h256v-128h-256v128zM768 256h-192v-192h-128v192h-192v128h192v192h128v-192h192v-128z" />
163<glyph unicode="&#xe999;" glyph-name="bug" d="M1024 384v64h-193.29c-5.862 72.686-31.786 139.026-71.67 192.25h161.944l70.060 280.24-62.090 15.522-57.94-231.76h-174.68c-0.892 0.694-1.796 1.374-2.698 2.056 6.71 19.502 10.362 40.422 10.362 62.194 0.002 105.76-85.958 191.498-191.998 191.498s-192-85.738-192-191.5c0-21.772 3.65-42.692 10.362-62.194-0.9-0.684-1.804-1.362-2.698-2.056h-174.68l-57.94 231.76-62.090-15.522 70.060-280.24h161.944c-39.884-53.222-65.806-119.562-71.668-192.248h-193.29v-64h193.37c3.802-45.664 15.508-88.812 33.638-127.75h-123.992l-70.060-280.238 62.090-15.524 57.94 231.762h112.354c58.692-78.032 147.396-127.75 246.66-127.75s187.966 49.718 246.662 127.75h112.354l57.94-231.762 62.090 15.524-70.060 280.238h-123.992c18.13 38.938 29.836 82.086 33.636 127.75h193.37z" />
164<glyph unicode="&#xe99a;" glyph-name="pie-chart" d="M448 384v448c-247.424 0-448-200.576-448-448s200.576-448 448-448 448 200.576 448 448c0 72.034-17.028 140.084-47.236 200.382l-400.764-200.382zM912.764 712.382c-73.552 146.816-225.374 247.618-400.764 247.618v-448l400.764 200.382z" />
165<glyph unicode="&#xe99b;" glyph-name="stats-dots" d="M128 64h896v-128h-1024v1024h128zM288 128c-53.020 0-96 42.98-96 96s42.98 96 96 96c2.828 0 5.622-0.148 8.388-0.386l103.192 171.986c-9.84 15.070-15.58 33.062-15.58 52.402 0 53.020 42.98 96 96 96s96-42.98 96-96c0-19.342-5.74-37.332-15.58-52.402l103.192-171.986c2.766 0.238 5.56 0.386 8.388 0.386 2.136 0 4.248-0.094 6.35-0.23l170.356 298.122c-10.536 15.408-16.706 34.036-16.706 54.11 0 53.020 42.98 96 96 96s96-42.98 96-96c0-53.020-42.98-96-96-96-2.14 0-4.248 0.094-6.35 0.232l-170.356-298.124c10.536-15.406 16.706-34.036 16.706-54.11 0-53.020-42.98-96-96-96s-96 42.98-96 96c0 19.34 5.74 37.332 15.578 52.402l-103.19 171.984c-2.766-0.238-5.56-0.386-8.388-0.386s-5.622 0.146-8.388 0.386l-103.192-171.986c9.84-15.068 15.58-33.060 15.58-52.4 0-53.020-42.98-96-96-96z" />
166<glyph unicode="&#xe99c;" glyph-name="stats-bars" d="M0 128h1024v-128h-1024zM128 384h128v-192h-128zM320 640h128v-448h-128zM512 448h128v-256h-128zM704 832h128v-640h-128z" />
167<glyph unicode="&#xe99d;" glyph-name="stats-bars2" d="M288 576h-192c-17.6 0-32-14.4-32-32v-576c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v576c0 17.6-14.4 32-32 32zM288 0h-192v256h192v-256zM608 704h-192c-17.6 0-32-14.4-32-32v-704c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v704c0 17.6-14.4 32-32 32zM608 0h-192v320h192v-320zM928 832h-192c-17.6 0-32-14.4-32-32v-832c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v832c0 17.6-14.4 32-32 32zM928 0h-192v384h192v-384z" />
168<glyph unicode="&#xe99e;" glyph-name="trophy" d="M832 768v128h-640v-128h-192v-128c0-106.038 85.958-192 192-192 20.076 0 39.43 3.086 57.62 8.802 46.174-66.008 116.608-113.796 198.38-130.396v-198.406h-64c-70.694 0-128-57.306-128-128h512c0 70.694-57.306 128-128 128h-64v198.406c81.772 16.6 152.206 64.386 198.38 130.396 18.19-5.716 37.544-8.802 57.62-8.802 106.042 0 192 85.962 192 192v128h-192zM192 524c-63.962 0-116 52.038-116 116v64h116v-64c0-40.186 7.43-78.632 20.954-114.068-6.802-1.246-13.798-1.932-20.954-1.932zM948 640c0-63.962-52.038-116-116-116-7.156 0-14.152 0.686-20.954 1.932 13.524 35.436 20.954 73.882 20.954 114.068v64h116v-64z" />
169<glyph unicode="&#xe99f;" glyph-name="gift" d="M771.516 640c18.126 12.88 35.512 27.216 51.444 43.148 33.402 33.402 55.746 74.5 62.912 115.722 7.858 45.186-3.672 87.14-31.63 115.1-22.3 22.298-52.51 34.086-87.364 34.086-49.632 0-101.922-23.824-143.46-65.362-66.476-66.476-105.226-158.238-126.076-223.722-15.44 65.802-46.206 154.644-106.018 214.458-32.094 32.092-73.114 48.57-111.846 48.57-31.654 0-61.78-11.004-84.26-33.486-49.986-49.988-43.232-137.786 15.086-196.104 20.792-20.792 45.098-38.062 70.72-52.412h-217.024v-256h64v-448h768v448.002h64v256h-188.484zM674.326 831.782c27.724 27.724 62.322 44.274 92.55 44.274 10.7 0 25.708-2.254 36.45-12.998 26.030-26.028 11.412-86.308-31.28-128.998-43.946-43.946-103.060-74.168-154.432-94.060h-50.672c18.568 57.548 52.058 136.456 107.384 191.782zM233.934 799.11c-0.702 9.12-0.050 26.248 12.196 38.494 10.244 10.244 23.788 12.396 33.348 12.396v0c21.258 0 43.468-10.016 60.932-27.48 33.872-33.872 61.766-87.772 80.668-155.876 0.51-1.84 1.008-3.67 1.496-5.486-1.816 0.486-3.646 0.984-5.486 1.496-68.104 18.904-122.002 46.798-155.874 80.67-15.828 15.826-25.77 36.16-27.28 55.786zM448 0h-256v416h256v-416zM448 448h-320v128h320v-128zM832 0h-256v416h256v-416zM896 448h-320v128h320v-128z" />
170<glyph unicode="&#xe9a0;" glyph-name="glass" d="M777.784 943.144c-5.576 10.38-16.406 16.856-28.19 16.856h-475.188c-11.784 0-22.614-6.476-28.19-16.856-35.468-66.020-54.216-143.184-54.216-223.144 0-105.412 32.372-204.828 91.154-279.938 45.428-58.046 102.48-96.54 164.846-112.172v-327.89h-96c-17.672 0-32-14.326-32-32s14.328-32 32-32h320c17.674 0 32 14.326 32 32s-14.326 32-32 32h-96v327.89c62.368 15.632 119.418 54.124 164.846 112.172 58.782 75.11 91.154 174.526 91.154 279.938 0 79.96-18.748 157.122-54.216 223.144zM294.1 896h435.8c24.974-52.902 38.1-113.338 38.1-176 0-5.364-0.108-10.696-0.296-16h-511.406c-0.19 5.304-0.296 10.636-0.296 16-0.002 62.664 13.126 123.098 38.098 176z" />
171<glyph unicode="&#xe9a1;" glyph-name="glass2" d="M889.162 780.23c7.568 9.632 8.972 22.742 3.62 33.758-5.356 11.018-16.532 18.012-28.782 18.012h-704c-12.25 0-23.426-6.994-28.78-18.012-5.356-11.018-3.95-24.126 3.618-33.758l313.162-398.57v-381.66h-96c-17.672 0-32-14.326-32-32s14.328-32 32-32h320c17.674 0 32 14.326 32 32s-14.326 32-32 32h-96v381.66l313.162 398.57zM798.162 768l-100.572-128h-371.18l-100.57 128h572.322z" />
172<glyph unicode="&#xe9a2;" glyph-name="mug" d="M960 640h-192v96c0 88.366-171.922 160-384 160s-384-71.634-384-160v-640c0-88.366 171.922-160 384-160s384 71.634 384 160v96h192c35.346 0 64 28.654 64 64v320c0 35.346-28.654 64-64 64zM176.056 701.602c-36.994 12.19-59.408 25.246-71.41 34.398 12.004 9.152 34.416 22.208 71.41 34.398 57.942 19.090 131.79 29.602 207.944 29.602s150.004-10.512 207.944-29.602c36.994-12.188 59.408-25.246 71.41-34.398-12.002-9.152-34.416-22.208-71.41-34.398-57.94-19.090-131.79-29.602-207.944-29.602s-150.002 10.512-207.944 29.602zM896 320h-128v192h128v-192z" />
173<glyph unicode="&#xe9a3;" glyph-name="spoon-knife" d="M224 960c-106.040 0-192-100.288-192-224 0-105.924 63.022-194.666 147.706-217.998l-31.788-518.124c-2.154-35.132 24.882-63.878 60.082-63.878h32c35.2 0 62.236 28.746 60.082 63.878l-31.788 518.124c84.684 23.332 147.706 112.074 147.706 217.998 0 123.712-85.96 224-192 224zM869.334 960l-53.334-320h-40l-26.666 320h-26.668l-26.666-320h-40l-53.334 320h-26.666v-416c0-17.672 14.326-32 32-32h83.338l-31.42-512.122c-2.154-35.132 24.882-63.878 60.082-63.878h32c35.2 0 62.236 28.746 60.082 63.878l-31.42 512.122h83.338c17.674 0 32 14.328 32 32v416h-26.666z" />
174<glyph unicode="&#xe9a4;" glyph-name="leaf" d="M1011.328 825.504c-110.752 83.928-281.184 134.034-455.91 134.034-216.12 0-392.226-75.456-483.16-207.020-42.708-61.79-66.33-134.958-70.208-217.474-3.454-73.474 8.884-154.726 36.684-242.146 94.874 284.384 359.82 507.102 665.266 507.102 0 0-285.826-75.232-465.524-308.192-0.112-0.138-2.494-3.090-6.614-8.698-36.080-48.278-67.538-103.162-91.078-165.328-39.87-94.83-76.784-224.948-76.784-381.782h128c0 0-19.43 122.222 14.36 262.79 55.89-7.556 105.858-11.306 150.852-11.306 117.678 0 201.37 25.46 263.388 80.124 55.568 48.978 86.198 114.786 118.624 184.456 49.524 106.408 105.654 227.010 268.654 320.152 9.33 5.332 15.362 14.992 16.056 25.716s-4.040 21.080-12.606 27.572z" />
175<glyph unicode="&#xe9a5;" glyph-name="rocket" d="M704 896l-320-320h-192l-192-256c0 0 203.416 56.652 322.066 30.084l-322.066-414.084 421.902 328.144c58.838-134.654-37.902-328.144-37.902-328.144l256 192v192l320 320 64 320-320-64z" />
176<glyph unicode="&#xe9a6;" glyph-name="meter" d="M512 896c282.77 0 512-229.23 512-512 0-192.792-106.576-360.666-264.008-448h-495.984c-157.432 87.334-264.008 255.208-264.008 448 0 282.77 229.23 512 512 512zM801.914 94.086c77.438 77.44 120.086 180.398 120.086 289.914h-90v64h85.038c-7.014 44.998-21.39 88.146-42.564 128h-106.474v64h64.284c-9.438 11.762-19.552 23.096-30.37 33.914-46.222 46.22-101.54 80.038-161.914 99.798v-69.712h-64v85.040c-20.982 3.268-42.36 4.96-64 4.96s-43.018-1.69-64-4.96v-85.040h-64v69.712c-60.372-19.76-115.692-53.576-161.914-99.798-10.818-10.818-20.932-22.152-30.37-33.914h64.284v-64h-106.476c-21.174-39.854-35.552-83.002-42.564-128h85.040v-64h-90c0-109.516 42.648-212.474 120.086-289.914 10.71-10.71 21.924-20.728 33.56-30.086h192.354l36.572 512h54.856l36.572-512h192.354c11.636 9.358 22.852 19.378 33.56 30.086z" />
177<glyph unicode="&#xe9a7;" glyph-name="meter2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM302.836 125.848c11.106 30.632 17.164 63.688 17.164 98.152 0 124.35-78.81 230.292-189.208 270.606 10.21 84.924 48.254 163.498 109.678 224.924 72.53 72.526 168.96 112.47 271.53 112.47s199-39.944 271.53-112.47c61.428-61.426 99.468-140 109.682-224.924-110.402-40.314-189.212-146.256-189.212-270.606 0-34.468 6.060-67.52 17.166-98.15-61.706-40.242-133.77-61.85-209.166-61.85-75.394 0-147.458 21.608-209.164 61.848zM551.754 319.004c13.878-3.494 24.246-16.080 24.246-31.004v-64c0-17.6-14.4-32-32-32h-64c-17.6 0-32 14.4-32 32v64c0 14.924 10.368 27.51 24.246 31.004l23.754 448.996h32l23.754-448.996z" />
178<glyph unicode="&#xe9a8;" glyph-name="hammer2" d="M1010.174 44.25l-548.634 499.458 25.534 25.598c20.894 20.954 32.188 48.030 33.918 75.61 1.002 0.45 2.002 0.912 2.958 1.442l102.99 64.402c13.934 16.392 12.916 42.268-2.284 57.502l-179.12 179.608c-15.19 15.234-40.998 16.262-57.344 2.284l-64.236-103.268c-0.526-0.966-0.99-1.966-1.44-2.974-27.502-1.736-54.5-13.056-75.398-34.006l-97.428-97.702c-20.898-20.956-32.184-48.026-33.918-75.604-1.004-0.45-2.004-0.916-2.964-1.446l-102.986-64.406c-13.942-16.39-12.916-42.264 2.276-57.496l179.12-179.604c15.194-15.238 40.996-16.262 57.35-2.286l64.228 103.27c0.528 0.958 0.988 1.96 1.442 2.966 27.502 1.738 54.504 13.050 75.398 34.004l28.292 28.372 498.122-550.114c14.436-15.944 36.7-18.518 49.474-5.712l50.356 50.488c12.764 12.808 10.196 35.132-5.706 49.614z" />
179<glyph unicode="&#xe9a9;" glyph-name="fire" d="M321.008-64c-68.246 142.008-31.902 223.378 20.55 300.044 57.44 83.956 72.244 167.066 72.244 167.066s45.154-58.7 27.092-150.508c79.772 88.8 94.824 230.28 82.782 284.464 180.314-126.012 257.376-398.856 153.522-601.066 552.372 312.532 137.398 780.172 65.154 832.85 24.082-52.676 28.648-141.85-20-185.126-82.352 312.276-285.972 376.276-285.972 376.276 24.082-161.044-87.296-337.144-194.696-468.73-3.774 64.216-7.782 108.528-41.55 169.98-7.58-116.656-96.732-211.748-120.874-328.628-32.702-158.286 24.496-274.18 241.748-396.622z" />
180<glyph unicode="&#xe9aa;" glyph-name="lab" d="M956.29 155.518l-316.29 527.024v213.458h32c17.6 0 32 14.4 32 32s-14.4 32-32 32h-320c-17.6 0-32-14.4-32-32s14.4-32 32-32h32v-213.458l-316.288-527.024c-72.442-120.734-16.512-219.518 124.288-219.518h640c140.8 0 196.73 98.784 124.29 219.518zM241.038 320l206.962 344.938v231.062h128v-231.062l206.964-344.938h-541.926z" />
181<glyph unicode="&#xe9ab;" glyph-name="magnet" d="M896 960h-256l64-576c0-106.040-85.96-192-192-192s-192 85.96-192 192l64 576h-256l-64-576c0-247.424 200.576-448 448-448s448 200.576 448 448l-64 576zM777.874 118.126c-71.018-71.014-165.44-110.126-265.874-110.126s-194.856 39.112-265.872 110.126c-70.116 70.118-109.13 163.048-110.11 262.054l36.092 324.82h111.114l-35.224-317.010v-3.99c0-70.518 27.46-136.814 77.324-186.676 49.862-49.864 116.158-77.324 186.676-77.324s136.814 27.46 186.676 77.324c49.864 49.862 77.324 116.158 77.324 186.676v3.988l-0.44 3.962-34.782 313.050h111.114l36.090-324.818c-0.98-99.006-39.994-191.938-110.108-262.056z" />
182<glyph unicode="&#xe9ac;" glyph-name="bin" d="M128 640v-640c0-35.2 28.8-64 64-64h576c35.2 0 64 28.8 64 64v640h-704zM320 64h-64v448h64v-448zM448 64h-64v448h64v-448zM576 64h-64v448h64v-448zM704 64h-64v448h64v-448zM848 832h-208v80c0 26.4-21.6 48-48 48h-224c-26.4 0-48-21.6-48-48v-80h-208c-26.4 0-48-21.6-48-48v-80h832v80c0 26.4-21.6 48-48 48zM576 832h-192v63.198h192v-63.198z" />
183<glyph unicode="&#xe9ad;" glyph-name="bin2" d="M192-64h640l64 704h-768zM640 832v128h-256v-128h-320v-192l64 64h768l64-64v192h-320zM576 832h-128v64h128v-64z" />
184<glyph unicode="&#xe9ae;" glyph-name="briefcase" d="M960 704h-256v64c0 35.2-28.8 64-64 64h-256c-35.204 0-64-28.8-64-64v-64h-256c-35.2 0-64-28.8-64-64v-576c0-35.202 28.796-64 64-64h896c35.2 0 64 28.798 64 64v576c0 35.2-28.8 64-64 64zM384 767.884c0.034 0.040 0.074 0.082 0.114 0.116h255.772c0.042-0.034 0.082-0.076 0.118-0.116v-63.884h-256.004v63.884zM960 448h-128v-96c0-17.602-14.4-32-32-32h-64c-17.604 0-32 14.398-32 32v96h-384v-96c0-17.602-14.4-32-32-32h-64c-17.602 0-32 14.398-32 32v96h-128v64h896v-64z" />
185<glyph unicode="&#xe9af;" glyph-name="airplane" d="M768 320.032l-182.82 182.822 438.82 329.15-128.010 127.996-548.52-219.442-172.7 172.706c-49.78 49.778-119.302 61.706-154.502 26.508-35.198-35.198-23.268-104.726 26.51-154.5l172.686-172.684-219.464-548.582 127.99-128.006 329.19 438.868 182.826-182.828v-255.98h127.994l63.992 191.988 191.988 63.996v127.992l-255.98-0.004z" />
186<glyph unicode="&#xe9b0;" glyph-name="truck" d="M1024 384l-128 256h-192v128c0 35.2-28.8 64-64 64h-576c-35.2 0-64-28.8-64-64v-512l64-64h81.166c-10.898-18.832-17.166-40.678-17.166-64 0-70.692 57.308-128 128-128s128 57.308 128 128c0 23.322-6.268 45.168-17.166 64h354.334c-10.898-18.832-17.168-40.678-17.168-64 0-70.692 57.308-128 128-128s128 57.308 128 128c0 23.322-6.27 45.168-17.168 64h81.168v192zM704 384v192h132.668l96-192h-228.668z" />
187<glyph unicode="&#xe9b1;" glyph-name="road" d="M704-64h320l-256 1024h-192l32-256h-192l32 256h-192l-256-1024h320l32 256h320l32-256zM368 320l32 256h224l32-256h-288z" />
188<glyph unicode="&#xe9b2;" glyph-name="accessibility" d="M416 864c0 53.018 42.98 96 96 96s96-42.982 96-96c0-53.020-42.98-96-96-96s-96 42.98-96 96zM640 640l329.596 142.172-23.77 59.424-401.826-137.596h-64l-401.826 137.596-23.77-59.424 329.596-142.172v-256l-131.27-424.57 59.84-22.7 185.716 415.27h27.428l185.716-415.27 59.84 22.7-131.27 424.57z" />
189<glyph unicode="&#xe9b3;" glyph-name="target" d="M1024 512h-100.924c-27.64 178.24-168.836 319.436-347.076 347.076v100.924h-128v-100.924c-178.24-27.64-319.436-168.836-347.076-347.076h-100.924v-128h100.924c27.64-178.24 168.836-319.436 347.076-347.076v-100.924h128v100.924c178.24 27.64 319.436 168.836 347.076 347.076h100.924v128zM792.822 512h-99.762c-19.284 54.55-62.51 97.778-117.060 117.060v99.762c107.514-24.49 192.332-109.31 216.822-216.822zM512 384c-35.346 0-64 28.654-64 64s28.654 64 64 64c35.346 0 64-28.654 64-64s-28.654-64-64-64zM448 728.822v-99.762c-54.55-19.282-97.778-62.51-117.060-117.060h-99.762c24.49 107.512 109.31 192.332 216.822 216.822zM231.178 384h99.762c19.282-54.55 62.51-97.778 117.060-117.060v-99.762c-107.512 24.49-192.332 109.308-216.822 216.822zM576 167.178v99.762c54.55 19.284 97.778 62.51 117.060 117.060h99.762c-24.49-107.514-109.308-192.332-216.822-216.822z" />
190<glyph unicode="&#xe9b4;" glyph-name="shield" d="M960 960l-448-128-448 128c0 0-4.5-51.698 0-128l448-140.090 448 140.090c4.498 76.302 0 128 0 128zM72.19 764.894c23.986-250.696 113.49-672.234 439.81-828.894 326.32 156.66 415.824 578.198 439.81 828.894l-439.81-165.358-439.81 165.358z" />
191<glyph unicode="&#xe9b5;" glyph-name="power" d="M384 960l-384-512h384l-256-512 896 640h-512l384 384z" />
192<glyph unicode="&#xe9b6;" glyph-name="switch" d="M640 813.412v-135.958c36.206-15.804 69.5-38.408 98.274-67.18 60.442-60.44 93.726-140.8 93.726-226.274s-33.286-165.834-93.726-226.274c-60.44-60.44-140.798-93.726-226.274-93.726s-165.834 33.286-226.274 93.726c-60.44 60.44-93.726 140.8-93.726 226.274s33.286 165.834 93.726 226.274c28.774 28.774 62.068 51.378 98.274 67.182v135.956c-185.048-55.080-320-226.472-320-429.412 0-247.424 200.578-448 448-448 247.424 0 448 200.576 448 448 0 202.94-134.95 374.332-320 429.412zM448 960h128v-512h-128z" />
193<glyph unicode="&#xe9b7;" glyph-name="power-cord" d="M1024 677.5l-90.506 90.5-178.746-178.752-101.5 101.502 178.75 178.75-90.5 90.5-178.75-178.75-114.748 114.75-86.626-86.624 512.002-512 86.624 86.622-114.752 114.752 178.752 178.75zM794.040 286.21l-443.824 443.824c-95.818-114.904-204.52-292.454-129.396-445.216l-132.248-132.248c-31.112-31.114-31.112-82.024 0-113.136l14.858-14.858c31.114-31.114 82.026-31.114 113.138 0l132.246 132.244c152.764-75.132 330.318 33.566 445.226 129.39z" />
194<glyph unicode="&#xe9b8;" glyph-name="clipboard" d="M928 832h-288c0 70.692-57.306 128-128 128-70.692 0-128-57.308-128-128h-288c-17.672 0-32-14.328-32-32v-832c0-17.674 14.328-32 32-32h832c17.674 0 32 14.326 32 32v832c0 17.672-14.326 32-32 32zM512 896c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64zM896 0h-768v768h128v-96c0-17.672 14.328-32 32-32h448c17.674 0 32 14.328 32 32v96h128v-768zM448 101.49l-205.254 237.254 58.508 58.51 146.746-114.744 274.742 242.744 58.514-58.508z" />
195<glyph unicode="&#xe9b9;" glyph-name="list-numbered" d="M384 128h640v-128h-640zM384 512h640v-128h-640zM384 896h640v-128h-640zM192 960v-256h-64v192h-64v64zM128 434v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM256 256v-320h-192v64h128v64h-128v64h128v64h-128v64z" />
196<glyph unicode="&#xe9ba;" glyph-name="list" d="M0 960h256v-256h-256zM384 896h640v-128h-640zM0 576h256v-256h-256zM384 512h640v-128h-640zM0 192h256v-256h-256zM384 128h640v-128h-640z" />
197<glyph unicode="&#xe9bb;" glyph-name="list2" d="M384 896h640v-128h-640v128zM384 512h640v-128h-640v128zM384 128h640v-128h-640v128zM0 832c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 448c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 64c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128z" />
198<glyph unicode="&#xe9bc;" glyph-name="tree" d="M976 192h-16v208c0 61.756-50.242 112-112 112h-272v128h16c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-160c0-26.4 21.6-48 48-48h16v-128h-272c-61.756 0-112-50.244-112-112v-208h-16c-26.4 0-48-21.6-48-48v-160c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-16v192h256v-192h-16c-26.4 0-48-21.6-48-48v-160c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-16v192h256v-192h-16c-26.4 0-48-21.6-48-48v-160c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48zM192 0h-128v128h128v-128zM576 0h-128v128h128v-128zM448 704v128h128v-128h-128zM960 0h-128v128h128v-128z" />
199<glyph unicode="&#xe9bd;" glyph-name="menu" d="M64 768h896v-192h-896zM64 512h896v-192h-896zM64 256h896v-192h-896z" />
200<glyph unicode="&#xe9be;" glyph-name="menu2" horiz-adv-x="1408" d="M0 768h896v-192h-896v192zM0 512h896v-192h-896v192zM0 256h896v-192h-896v192zM992 384l192-192 192 192zM1376 448l-192 192-192-192z" />
201<glyph unicode="&#xe9bf;" glyph-name="menu3" horiz-adv-x="1408" d="M0 768h896v-192h-896v192zM0 512h896v-192h-896v192zM0 256h896v-192h-896v192zM992 512l192-192 192 192z" />
202<glyph unicode="&#xe9c0;" glyph-name="menu4" horiz-adv-x="1408" d="M0 768h896v-192h-896v192zM0 512h896v-192h-896v192zM0 256h896v-192h-896v192zM992 320l192 192 192-192z" />
203<glyph unicode="&#xe9c1;" glyph-name="cloud" d="M1024 302.458c0 82.090-56.678 150.9-132.996 169.48-3.242 128.7-108.458 232.062-237.862 232.062-75.792 0-143.266-35.494-186.854-90.732-24.442 31.598-62.69 51.96-105.708 51.96-73.81 0-133.642-59.874-133.642-133.722 0-6.436 0.48-12.76 1.364-18.954-11.222 2.024-22.766 3.138-34.57 3.138-106.998 0.002-193.732-86.786-193.732-193.842 0-107.062 86.734-193.848 193.73-193.848l656.262 0.012c96.138 0.184 174.008 78.212 174.008 174.446z" />
204<glyph unicode="&#xe9c2;" glyph-name="cloud-download" d="M891.004 599.94c-3.242 128.698-108.458 232.060-237.862 232.060-75.792 0-143.266-35.494-186.854-90.732-24.442 31.598-62.69 51.96-105.708 51.96-73.81 0-133.642-59.876-133.642-133.722 0-6.436 0.48-12.76 1.364-18.954-11.222 2.024-22.766 3.138-34.57 3.138-106.998 0.002-193.732-86.786-193.732-193.842 0-107.062 86.734-193.848 193.73-193.848h91.76l226.51-234.51 226.51 234.51 111.482 0.012c96.138 0.184 174.008 78.21 174.008 174.446 0 82.090-56.678 150.9-132.996 169.482zM512 128l-192 192h128v192h128v-192h128l-192-192z" />
205<glyph unicode="&#xe9c3;" glyph-name="cloud-upload" d="M892.268 573.51c2.444 11.11 3.732 22.648 3.732 34.49 0 88.366-71.634 160-160 160-14.222 0-28.014-1.868-41.132-5.352-24.798 77.352-97.29 133.352-182.868 133.352-87.348 0-161.054-58.336-184.326-138.17-22.742 6.622-46.792 10.17-71.674 10.17-141.384 0-256-114.616-256-256 0-141.388 114.616-256 256-256h128v-192h256v192h224c88.366 0 160 71.632 160 160 0 78.72-56.854 144.162-131.732 157.51zM576 320v-192h-128v192h-160l224 224 224-224h-160z" />
206<glyph unicode="&#xe9c4;" glyph-name="cloud-check" d="M892.268 445.51c2.442 11.108 3.732 22.646 3.732 34.49 0 88.366-71.634 160-160 160-14.224 0-28.014-1.868-41.134-5.352-24.796 77.352-97.288 133.352-182.866 133.352-87.348 0-161.054-58.336-184.326-138.17-22.742 6.62-46.792 10.17-71.674 10.17-141.384 0-256-114.616-256-256 0-141.382 114.616-256 256-256h608c88.366 0 160 71.632 160 160 0 78.718-56.854 144.16-131.732 157.51zM416 192l-160 160 64 64 96-96 224 224 64-64-288-288z" />
207<glyph unicode="&#xe9c5;" glyph-name="download2" d="M896 448h-160l-224-224-224 224h-160l-128-256v-64h1024v64l-128 256zM0 64h1024v-64h-1024v64zM576 640v256h-128v-256h-224l288-288 288 288h-224z" />
208<glyph unicode="&#xe9c6;" glyph-name="upload2" d="M0 64h1024v-64h-1024zM1024 192v-64h-1024v64l128 256h256v-128h256v128h256zM224 640l288 288 288-288h-224v-256h-128v256z" />
209<glyph unicode="&#xe9c7;" glyph-name="download3" d="M736 512l-256-256-256 256h160v384h192v-384zM480 256h-480v-256h960v256h-480zM896 128h-128v64h128v-64z" />
210<glyph unicode="&#xe9c8;" glyph-name="upload3" d="M480 256h-480v-256h960v256h-480zM896 128h-128v64h128v-64zM224 640l256 256 256-256h-160v-320h-192v320z" />
211<glyph unicode="&#xe9c9;" glyph-name="sphere" d="M480 896c-265.096 0-480-214.904-480-480 0-265.098 214.904-480 480-480 265.098 0 480 214.902 480 480 0 265.096-214.902 480-480 480zM751.59 256c8.58 40.454 13.996 83.392 15.758 128h127.446c-3.336-44.196-13.624-87.114-30.68-128h-112.524zM208.41 576c-8.58-40.454-13.996-83.392-15.758-128h-127.444c3.336 44.194 13.622 87.114 30.678 128h112.524zM686.036 576c9.614-40.962 15.398-83.854 17.28-128h-191.316v128h174.036zM512 640v187.338c14.59-4.246 29.044-11.37 43.228-21.37 26.582-18.74 52.012-47.608 73.54-83.486 14.882-24.802 27.752-52.416 38.496-82.484h-155.264zM331.232 722.484c21.528 35.878 46.956 64.748 73.54 83.486 14.182 10 28.638 17.124 43.228 21.37v-187.34h-155.264c10.746 30.066 23.616 57.68 38.496 82.484zM448 576v-128h-191.314c1.88 44.146 7.666 87.038 17.278 128h174.036zM95.888 256c-17.056 40.886-27.342 83.804-30.678 128h127.444c1.762-44.608 7.178-87.546 15.758-128h-112.524zM256.686 384h191.314v-128h-174.036c-9.612 40.96-15.398 83.854-17.278 128zM448 192v-187.34c-14.588 4.246-29.044 11.372-43.228 21.37-26.584 18.74-52.014 47.61-73.54 83.486-14.882 24.804-27.75 52.418-38.498 82.484h155.266zM628.768 109.516c-21.528-35.876-46.958-64.746-73.54-83.486-14.184-9.998-28.638-17.124-43.228-21.37v187.34h155.266c-10.746-30.066-23.616-57.68-38.498-82.484zM512 256v128h191.314c-1.88-44.146-7.666-87.040-17.28-128h-174.034zM767.348 448c-1.762 44.608-7.178 87.546-15.758 128h112.524c17.056-40.886 27.344-83.806 30.68-128h-127.446zM830.658 640h-95.9c-18.638 58.762-44.376 110.294-75.316 151.428 42.536-20.34 81.058-47.616 114.714-81.272 21.48-21.478 40.362-44.938 56.502-70.156zM185.844 710.156c33.658 33.658 72.18 60.932 114.714 81.272-30.942-41.134-56.676-92.666-75.316-151.428h-95.898c16.138 25.218 35.022 48.678 56.5 70.156zM129.344 192h95.898c18.64-58.762 44.376-110.294 75.318-151.43-42.536 20.34-81.058 47.616-114.714 81.274-21.48 21.478-40.364 44.938-56.502 70.156zM774.156 121.844c-33.656-33.658-72.18-60.934-114.714-81.274 30.942 41.134 56.678 92.668 75.316 151.43h95.9c-16.14-25.218-35.022-48.678-56.502-70.156z" />
212<glyph unicode="&#xe9ca;" glyph-name="earth" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512-0.002c-62.958 0-122.872 13.012-177.23 36.452l233.148 262.29c5.206 5.858 8.082 13.422 8.082 21.26v96c0 17.674-14.326 32-32 32-112.99 0-232.204 117.462-233.374 118.626-6 6.002-14.14 9.374-22.626 9.374h-128c-17.672 0-32-14.328-32-32v-192c0-12.122 6.848-23.202 17.69-28.622l110.31-55.156v-187.886c-116.052 80.956-192 215.432-192 367.664 0 68.714 15.49 133.806 43.138 192h116.862c8.488 0 16.626 3.372 22.628 9.372l128 128c6 6.002 9.372 14.14 9.372 22.628v77.412c40.562 12.074 83.518 18.588 128 18.588 70.406 0 137.004-16.26 196.282-45.2-4.144-3.502-8.176-7.164-12.046-11.036-36.266-36.264-56.236-84.478-56.236-135.764s19.97-99.5 56.236-135.764c36.434-36.432 85.218-56.264 135.634-56.26 3.166 0 6.342 0.080 9.518 0.236 13.814-51.802 38.752-186.656-8.404-372.334-0.444-1.744-0.696-3.488-0.842-5.224-81.324-83.080-194.7-134.656-320.142-134.656z" />
213<glyph unicode="&#xe9cb;" glyph-name="link" d="M440.236 324.234c-13.31 0-26.616 5.076-36.77 15.23-95.134 95.136-95.134 249.934 0 345.070l192 192c46.088 46.086 107.36 71.466 172.534 71.466s126.448-25.38 172.536-71.464c95.132-95.136 95.132-249.934 0-345.070l-87.766-87.766c-20.308-20.308-53.23-20.308-73.54 0-20.306 20.306-20.306 53.232 0 73.54l87.766 87.766c54.584 54.586 54.584 143.404 0 197.99-26.442 26.442-61.6 41.004-98.996 41.004s-72.552-14.562-98.996-41.006l-192-191.998c-54.586-54.586-54.586-143.406 0-197.992 20.308-20.306 20.306-53.232 0-73.54-10.15-10.152-23.462-15.23-36.768-15.23zM256-52c-65.176 0-126.45 25.38-172.534 71.464-95.134 95.136-95.134 249.934 0 345.070l87.764 87.764c20.308 20.306 53.234 20.306 73.54 0 20.308-20.306 20.308-53.232 0-73.54l-87.764-87.764c-54.586-54.586-54.586-143.406 0-197.992 26.44-26.44 61.598-41.002 98.994-41.002s72.552 14.562 98.998 41.006l192 191.998c54.584 54.586 54.584 143.406 0 197.992-20.308 20.308-20.306 53.232 0 73.54 20.306 20.306 53.232 20.306 73.54-0.002 95.132-95.134 95.132-249.932 0.002-345.068l-192.002-192c-46.090-46.088-107.364-71.466-172.538-71.466z" />
214<glyph unicode="&#xe9cc;" glyph-name="flag" d="M0 960h128v-1024h-128v1024zM832 316.998c82.624 0 154.57 19.984 192 49.5v512c-37.43-29.518-109.376-49.502-192-49.502s-154.57 19.984-192 49.502v-512c37.43-29.516 109.376-49.5 192-49.5zM608 927.472c-46.906 19.94-115.52 32.528-192 32.528-96.396 0-180.334-19.984-224-49.502v-512c43.666 29.518 127.604 49.502 224 49.502 76.48 0 145.094-12.588 192-32.528v512z" />
215<glyph unicode="&#xe9cd;" glyph-name="attachment" d="M665.832 632.952l-64.952 64.922-324.81-324.742c-53.814-53.792-53.814-141.048 0-194.844 53.804-53.792 141.060-53.792 194.874 0l389.772 389.708c89.714 89.662 89.714 235.062 0 324.726-89.666 89.704-235.112 89.704-324.782 0l-409.23-409.178c-0.29-0.304-0.612-0.576-0.876-0.846-125.102-125.096-125.102-327.856 0-452.906 125.054-125.056 327.868-125.056 452.988 0 0.274 0.274 0.516 0.568 0.82 0.876l0.032-0.034 279.332 279.292-64.986 64.92-279.33-279.262c-0.296-0.268-0.564-0.57-0.846-0.844-89.074-89.058-233.98-89.058-323.076 0-89.062 89.042-89.062 233.922 0 322.978 0.304 0.304 0.604 0.582 0.888 0.846l-0.046 0.060 409.28 409.166c53.712 53.738 141.144 53.738 194.886 0 53.712-53.734 53.712-141.148 0-194.84l-389.772-389.7c-17.936-17.922-47.054-17.922-64.972 0-17.894 17.886-17.894 47.032 0 64.92l324.806 324.782z" />
216<glyph unicode="&#xe9ce;" glyph-name="eye" d="M512 768c-223.318 0-416.882-130.042-512-320 95.118-189.958 288.682-320 512-320 223.312 0 416.876 130.042 512 320-95.116 189.958-288.688 320-512 320zM764.45 598.296c60.162-38.374 111.142-89.774 149.434-150.296-38.292-60.522-89.274-111.922-149.436-150.296-75.594-48.218-162.89-73.704-252.448-73.704-89.56 0-176.858 25.486-252.452 73.704-60.158 38.372-111.138 89.772-149.432 150.296 38.292 60.524 89.274 111.924 149.434 150.296 3.918 2.5 7.876 4.922 11.86 7.3-9.96-27.328-15.41-56.822-15.41-87.596 0-141.382 114.616-256 256-256 141.382 0 256 114.618 256 256 0 30.774-5.452 60.268-15.408 87.598 3.978-2.378 7.938-4.802 11.858-7.302v0zM512 544c0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.982 96-96z" />
217<glyph unicode="&#xe9cf;" glyph-name="eye-plus" d="M1024 832h-128v128h-128v-128h-128v-128h128v-128h128v128h128zM863.862 513.972c18.436-20.478 35.192-42.53 50.022-65.972-38.292-60.522-89.274-111.922-149.436-150.296-75.594-48.218-162.89-73.704-252.448-73.704-89.56 0-176.86 25.486-252.454 73.704-60.156 38.372-111.136 89.772-149.43 150.296 38.292 60.524 89.274 111.924 149.434 150.296 3.918 2.5 7.876 4.922 11.862 7.3-9.962-27.328-15.412-56.822-15.412-87.596 0-141.382 114.616-256 256-256 141.38 0 256 114.618 256 256 0 0.692-0.018 1.38-0.024 2.072-109.284 28.138-190.298 126.63-191.932 244.31-21.026 2.38-42.394 3.618-64.044 3.618-223.318 0-416.882-130.042-512-320 95.118-189.958 288.682-320 512-320 223.31 0 416.876 130.042 512 320-17.64 35.23-38.676 68.394-62.65 99.054-29.28-17.178-62.272-28.71-97.488-33.082zM416 640c53.020 0 96-42.982 96-96 0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96z" />
218<glyph unicode="&#xe9d0;" glyph-name="eye-minus" d="M640 832h384v-128h-384v128zM870.32 640h-294.32v124.388c-21.014 2.376-42.364 3.612-64 3.612-223.318 0-416.882-130.042-512-320 95.118-189.958 288.682-320 512-320 223.31 0 416.876 130.042 512 320-37.396 74.686-90.020 140.1-153.68 192zM416 640c53.020 0 96-42.982 96-96 0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96zM764.448 297.704c-75.594-48.218-162.89-73.704-252.448-73.704-89.56 0-176.86 25.486-252.454 73.704-60.156 38.372-111.136 89.772-149.43 150.296 38.292 60.524 89.274 111.924 149.434 150.296 3.918 2.5 7.876 4.922 11.862 7.3-9.962-27.328-15.412-56.822-15.412-87.596 0-141.382 114.616-256 256-256 141.38 0 256 114.618 256 256 0 30.774-5.454 60.268-15.408 87.598 3.976-2.378 7.938-4.802 11.858-7.302 60.162-38.374 111.142-89.774 149.434-150.296-38.292-60.522-89.274-111.922-149.436-150.296z" />
219<glyph unicode="&#xe9d1;" glyph-name="eye-blocked" d="M945.942 945.942c-18.746 18.744-49.136 18.744-67.882 0l-202.164-202.164c-51.938 15.754-106.948 24.222-163.896 24.222-223.318 0-416.882-130.042-512-320 41.122-82.124 100.648-153.040 173.022-207.096l-158.962-158.962c-18.746-18.746-18.746-49.136 0-67.882 9.372-9.374 21.656-14.060 33.94-14.060s24.568 4.686 33.942 14.058l864 864c18.744 18.746 18.744 49.138 0 67.884zM416 640c42.24 0 78.082-27.294 90.92-65.196l-121.724-121.724c-37.902 12.838-65.196 48.68-65.196 90.92 0 53.020 42.98 96 96 96zM110.116 448c38.292 60.524 89.274 111.924 149.434 150.296 3.918 2.5 7.876 4.922 11.862 7.3-9.962-27.328-15.412-56.822-15.412-87.596 0-54.89 17.286-105.738 46.7-147.418l-60.924-60.924c-52.446 36.842-97.202 83.882-131.66 138.342zM768 518c0 27.166-4.256 53.334-12.102 77.898l-321.808-321.808c24.568-7.842 50.742-12.090 77.91-12.090 141.382 0 256 114.618 256 256zM830.026 670.026l-69.362-69.362c1.264-0.786 2.53-1.568 3.786-2.368 60.162-38.374 111.142-89.774 149.434-150.296-38.292-60.522-89.274-111.922-149.436-150.296-75.594-48.218-162.89-73.704-252.448-73.704-38.664 0-76.902 4.76-113.962 14.040l-76.894-76.894c59.718-21.462 123.95-33.146 190.856-33.146 223.31 0 416.876 130.042 512 320-45.022 89.916-112.118 166.396-193.974 222.026z" />
220<glyph unicode="&#xe9d2;" glyph-name="bookmark" d="M192 960v-1024l320 320 320-320v1024z" />
221<glyph unicode="&#xe9d3;" glyph-name="bookmarks" d="M256 832v-896l320 320 320-320v896zM768 960h-640v-896l64 64v768h576z" />
222<glyph unicode="&#xe9d4;" glyph-name="sun" d="M512 128c35.346 0 64-28.654 64-64v-64c0-35.346-28.654-64-64-64s-64 28.654-64 64v64c0 35.346 28.654 64 64 64zM512 768c-35.346 0-64 28.654-64 64v64c0 35.346 28.654 64 64 64s64-28.654 64-64v-64c0-35.346-28.654-64-64-64zM960 512c35.346 0 64-28.654 64-64s-28.654-64-64-64h-64c-35.348 0-64 28.654-64 64s28.652 64 64 64h64zM192 448c0-35.346-28.654-64-64-64h-64c-35.346 0-64 28.654-64 64s28.654 64 64 64h64c35.346 0 64-28.654 64-64zM828.784 221.726l45.256-45.258c24.992-24.99 24.992-65.516 0-90.508-24.994-24.992-65.518-24.992-90.51 0l-45.256 45.256c-24.992 24.99-24.992 65.516 0 90.51 24.994 24.992 65.518 24.992 90.51 0zM195.216 674.274l-45.256 45.256c-24.994 24.994-24.994 65.516 0 90.51s65.516 24.994 90.51 0l45.256-45.256c24.994-24.994 24.994-65.516 0-90.51s-65.516-24.994-90.51 0zM828.784 674.274c-24.992-24.992-65.516-24.992-90.51 0-24.992 24.994-24.992 65.516 0 90.51l45.256 45.254c24.992 24.994 65.516 24.994 90.51 0 24.992-24.994 24.992-65.516 0-90.51l-45.256-45.254zM195.216 221.726c24.992 24.992 65.518 24.992 90.508 0 24.994-24.994 24.994-65.52 0-90.51l-45.254-45.256c-24.994-24.992-65.516-24.992-90.51 0s-24.994 65.518 0 90.508l45.256 45.258zM512 704c-141.384 0-256-114.616-256-256 0-141.382 114.616-256 256-256 141.382 0 256 114.618 256 256 0 141.384-114.616 256-256 256zM512 288c-88.366 0-160 71.634-160 160s71.634 160 160 160 160-71.634 160-160-71.634-160-160-160z" />
223<glyph unicode="&#xe9d5;" glyph-name="contrast" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM128 448c0 212.078 171.922 384 384 384v-768c-212.078 0-384 171.922-384 384z" />
224<glyph unicode="&#xe9d6;" glyph-name="brightness-contrast" d="M512 704c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.616 256-256 256zM512 288v320c88.224 0 160-71.776 160-160s-71.776-160-160-160zM512 128c35.346 0 64-28.654 64-64v-64c0-35.346-28.654-64-64-64s-64 28.654-64 64v64c0 35.346 28.654 64 64 64zM512 768c-35.346 0-64 28.654-64 64v64c0 35.346 28.654 64 64 64s64-28.654 64-64v-64c0-35.346-28.654-64-64-64zM960 512c35.346 0 64-28.654 64-64s-28.654-64-64-64h-64c-35.346 0-64 28.654-64 64s28.654 64 64 64h64zM192 448c0-35.346-28.654-64-64-64h-64c-35.346 0-64 28.654-64 64s28.654 64 64 64h64c35.346 0 64-28.654 64-64zM828.784 221.726l45.256-45.256c24.992-24.992 24.992-65.516 0-90.51-24.994-24.992-65.518-24.992-90.51 0l-45.256 45.256c-24.992 24.992-24.992 65.516 0 90.51 24.994 24.992 65.518 24.992 90.51 0zM195.216 674.274l-45.256 45.256c-24.994 24.994-24.994 65.516 0 90.51s65.516 24.994 90.51 0l45.256-45.256c24.994-24.994 24.994-65.516 0-90.51s-65.516-24.994-90.51 0zM828.784 674.274c-24.992-24.992-65.516-24.992-90.51 0-24.992 24.994-24.992 65.516 0 90.51l45.256 45.254c24.992 24.994 65.516 24.994 90.51 0 24.992-24.994 24.992-65.516 0-90.51l-45.256-45.254zM195.216 221.726c24.992 24.992 65.516 24.992 90.508 0 24.994-24.994 24.994-65.518 0-90.51l-45.254-45.256c-24.994-24.992-65.516-24.992-90.51 0-24.994 24.994-24.994 65.518 0 90.51l45.256 45.256z" />
225<glyph unicode="&#xe9d7;" glyph-name="star-empty" d="M1024 562.95l-353.78 51.408-158.22 320.582-158.216-320.582-353.784-51.408 256-249.538-60.432-352.352 316.432 166.358 316.432-166.358-60.434 352.352 256.002 249.538zM512 206.502l-223.462-117.48 42.676 248.83-180.786 176.222 249.84 36.304 111.732 226.396 111.736-226.396 249.836-36.304-180.788-176.222 42.678-248.83-223.462 117.48z" />
226<glyph unicode="&#xe9d8;" glyph-name="star-half" d="M1024 562.95l-353.78 51.408-158.22 320.582-158.216-320.582-353.784-51.408 256-249.538-60.432-352.352 316.432 166.358 316.432-166.358-60.434 352.352 256.002 249.538zM512 206.502l-0.942-0.496 0.942 570.768 111.736-226.396 249.836-36.304-180.788-176.222 42.678-248.83-223.462 117.48z" />
227<glyph unicode="&#xe9d9;" glyph-name="star-full" d="M1024 562.95l-353.78 51.408-158.22 320.582-158.216-320.582-353.784-51.408 256-249.538-60.432-352.352 316.432 166.358 316.432-166.358-60.434 352.352 256.002 249.538z" />
228<glyph unicode="&#xe9da;" glyph-name="heart" d="M755.188 896c-107.63 0-200.258-87.554-243.164-179-42.938 91.444-135.578 179-243.216 179-148.382 0-268.808-120.44-268.808-268.832 0-301.846 304.5-380.994 512.022-679.418 196.154 296.576 511.978 387.206 511.978 679.418 0 148.392-120.43 268.832-268.812 268.832z" />
229<glyph unicode="&#xe9db;" glyph-name="heart-broken" d="M755.188 896c148.382 0 268.812-120.44 268.812-268.832 0-292.21-315.824-382.842-511.978-679.418-207.522 298.424-512.022 377.572-512.022 679.418 0 148.392 120.426 268.832 268.808 268.832 60.354 0 115.99-27.53 160.796-67.834l-77.604-124.166 224-128-128-320 352 384-224 128 61.896 92.846c35.42 21.768 75.21 35.154 117.292 35.154z" />
230<glyph unicode="&#xe9dc;" glyph-name="man" d="M576 864c0-53.019-42.981-96-96-96s-96 42.981-96 96c0 53.019 42.981 96 96 96s96-42.981 96-96zM576 704h-192c-35.346 0-64-28.654-64-64v-320h64v-384h80v384h32v-384h80v384h64v320c0 35.346-28.652 64-64 64z" />
231<glyph unicode="&#xe9dd;" glyph-name="woman" d="M576 864c0-53.019-42.981-96-96-96s-96 42.981-96 96c0 53.019 42.981 96 96 96s96-42.981 96-96zM719 448l49 35.5-133.286 206.116c-5.92 8.98-15.958 14.384-26.714 14.384h-256c-10.756 0-20.792-5.404-26.714-14.384l-133.286-206.116 49-35.5 110.644 143.596 38.458-89.74-134.102-245.856h122.666l21.334-320h64v320h32v-320h64l21.334 320h122.666l-134.104 245.858 38.458 89.74 110.646-143.598z" />
232<glyph unicode="&#xe9de;" glyph-name="man-woman" d="M256 864c0-53.019-42.981-96-96-96s-96 42.981-96 96c0 53.019 42.981 96 96 96s96-42.981 96-96zM832 864c0-53.019-42.981-96-96-96s-96 42.981-96 96c0 53.019 42.981 96 96 96s96-42.981 96-96zM256 704h-192c-35.346 0-64-28.654-64-64v-320h64v-384h80v384h32v-384h80v384h64v320c0 35.346-28.652 64-64 64zM975 448l49 35.5-133.286 206.116c-5.92 8.98-15.958 14.384-26.714 14.384h-256c-10.756 0-20.792-5.404-26.714-14.384l-133.286-206.116 49-35.5 110.644 143.596 38.458-89.74-134.102-245.856h122.666l21.334-320h64v320h32v-320h64l21.334 320h122.666l-134.104 245.858 38.458 89.74 110.646-143.598z" />
233<glyph unicode="&#xe9df;" glyph-name="happy" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM512 361.24c115.95 0 226.23 30.806 320 84.92-14.574-178.438-153.128-318.16-320-318.16-166.868 0-305.422 139.872-320 318.304 93.77-54.112 204.050-85.064 320-85.064zM256 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96zM640 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96z" />
234<glyph unicode="&#xe9e0;" glyph-name="happy2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM704 704c35.348 0 64-42.98 64-96s-28.652-96-64-96-64 42.98-64 96 28.652 96 64 96zM320 704c35.346 0 64-42.98 64-96s-28.654-96-64-96-64 42.98-64 96 28.654 96 64 96zM512 64c-166.868 0-305.422 139.872-320 318.304 93.77-54.114 204.050-85.064 320-85.064s226.23 30.806 320 84.92c-14.574-178.438-153.128-318.16-320-318.16z" />
235<glyph unicode="&#xe9e1;" glyph-name="smile" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM704.098 332.74l82.328-49.396c-55.962-93.070-157.916-155.344-274.426-155.344s-218.464 62.274-274.426 155.344l82.328 49.396c39.174-65.148 110.542-108.74 192.098-108.74s152.924 43.592 192.098 108.74z" />
236<glyph unicode="&#xe9e2;" glyph-name="smile2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM512 128c-116.51 0-218.464 62.274-274.426 155.344l82.328 49.396c39.174-65.148 110.542-108.74 192.098-108.74s152.924 43.592 192.098 108.74l82.328-49.396c-55.962-93.070-157.916-155.344-274.426-155.344z" />
237<glyph unicode="&#xe9e3;" glyph-name="tongue" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM768 384v-64h-64v-96c0-53.020-42.98-96-96-96s-96 42.98-96 96v96h-256v64h512z" />
238<glyph unicode="&#xe9e4;" glyph-name="tongue2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM768 320h-64v-96c0-53.020-42.98-96-96-96s-96 42.98-96 96v96h-256v64h512v-64zM704 576c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z" />
239<glyph unicode="&#xe9e5;" glyph-name="sad" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM319.902 179.26l-82.328 49.396c55.962 93.070 157.916 155.344 274.426 155.344 116.508 0 218.462-62.274 274.426-155.344l-82.328-49.396c-39.174 65.148-110.542 108.74-192.098 108.74-81.558 0-152.924-43.592-192.098-108.74z" />
240<glyph unicode="&#xe9e6;" glyph-name="sad2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM704.098 179.26c-39.174 65.148-110.544 108.74-192.098 108.74-81.556 0-152.924-43.592-192.098-108.74l-82.328 49.396c55.96 93.070 157.916 155.344 274.426 155.344 116.508 0 218.464-62.274 274.426-155.344l-82.328-49.396z" />
241<glyph unicode="&#xe9e7;" glyph-name="wink" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM542.74 248.972c140.248 27.706 249.11 91.542 288.454 176.594-21.654-167.956-161.518-297.566-330.85-297.566-119.242 0-223.858 64.282-282.892 160.948 70.41-55.058 194.534-65.808 325.288-39.976zM640 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96zM352 588.5c-41.796 0-77.334-15.656-90.516-37.5-3.54 5.866-5.484 32.174-5.484 38.75 0 31.066 42.98 56.25 96 56.25s96-25.184 96-56.25c0-6.576-1.944-32.884-5.484-38.75-13.182 21.844-48.72 37.5-90.516 37.5z" />
242<glyph unicode="&#xe9e8;" glyph-name="wink2" d="M512 960c-282.77 0-512-229.228-512-512 0-282.77 229.228-512 512-512 282.77 0 512 229.23 512 512 0 282.772-229.23 512-512 512zM704 704c35.346 0 64-42.98 64-96s-28.654-96-64-96-64 42.98-64 96 28.654 96 64 96zM352 647.938c59.646 0 102-22.332 102-57.282 0-7.398 3.812-42.994-0.17-49.594-14.828 24.576-54.81 42.188-101.83 42.188s-87.002-17.612-101.83-42.188c-3.982 6.6-0.17 42.196-0.17 49.594 0 34.95 42.354 57.282 102 57.282zM500.344 128c-119.242 0-223.858 64.28-282.892 160.952 70.41-55.060 194.534-65.81 325.288-39.978 140.248 27.706 249.11 91.542 288.454 176.594-21.654-167.96-161.518-297.568-330.85-297.568z" />
243<glyph unicode="&#xe9e9;" glyph-name="grin" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM192 448v-64c0-140.8 115.2-256 256-256h128c140.8 0 256 115.2 256 256v64h-640zM384 203.012c-26.538 9.458-50.924 24.822-71.544 45.446-36.406 36.402-56.456 84.54-56.456 135.542h128v-180.988zM576 192h-128v192h128v-192zM711.544 248.458c-20.624-20.624-45.010-35.988-71.544-45.446v180.988h128c0-51.002-20.048-99.14-56.456-135.542zM225.352 576c0.002 0 0 0 0 0 9.768 0 18.108 7.056 19.724 16.69 6.158 36.684 37.668 63.31 74.924 63.31s68.766-26.626 74.924-63.31c1.616-9.632 9.956-16.69 19.722-16.69 9.768 0 18.108 7.056 19.724 16.688 1.082 6.436 1.628 12.934 1.628 19.312 0 63.962-52.038 116-116 116s-116-52.038-116-116c0-6.378 0.548-12.876 1.628-19.312 1.62-9.632 9.96-16.688 19.726-16.688zM609.352 576c0.002 0 0 0 0 0 9.77 0 18.112 7.056 19.724 16.69 6.158 36.684 37.668 63.31 74.924 63.31s68.766-26.626 74.924-63.31c1.616-9.632 9.958-16.69 19.722-16.69s18.108 7.056 19.722 16.688c1.082 6.436 1.628 12.934 1.628 19.312 0 63.962-52.038 116-116 116s-116-52.038-116-116c0-6.378 0.544-12.876 1.626-19.312 1.624-9.632 9.964-16.688 19.73-16.688z" />
244<glyph unicode="&#xe9ea;" glyph-name="grin2" d="M512 960c-282.77 0-512-229.23-512-512s229.226-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM704 724c63.962 0 116-52.038 116-116 0-6.378-0.546-12.876-1.628-19.312-1.618-9.632-9.958-16.688-19.724-16.688s-18.108 7.056-19.722 16.69c-6.16 36.684-37.67 53.31-74.926 53.31s-68.766-16.626-74.924-53.31c-1.616-9.632-9.956-16.69-19.722-16.69-0.002 0 0 0-0.002 0-9.766 0-18.106 7.056-19.722 16.688-1.084 6.436-1.63 12.934-1.63 19.312 0 63.962 52.038 116 116 116zM320 724c63.962 0 116-52.038 116-116 0-6.378-0.548-12.876-1.628-19.312-1.618-9.632-9.956-16.688-19.724-16.688s-18.106 7.056-19.722 16.69c-6.16 36.684-37.67 53.31-74.926 53.31s-68.766-16.626-74.924-53.31c-1.616-9.632-9.956-16.69-19.722-16.69 0 0 0 0 0 0-9.766 0-18.106 7.056-19.724 16.688-1.082 6.436-1.63 12.934-1.63 19.312 0 63.962 52.038 116 116 116zM192 384h192v-247.846c-110.094 28.606-192 129.124-192 247.846zM448 128v256h128v-256h-128zM640 136.154v247.846h192c0-118.722-81.904-219.24-192-247.846z" />
245<glyph unicode="&#xe9eb;" glyph-name="cool" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM800 704c17.6 0 32-14.4 32-32v-96c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64h-128c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v96c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-32h128v32c0 17.6 14.4 32 32 32h192zM512 192c93.208 0 174.772 49.818 219.546 124.278l54.88-32.934c-55.966-93.070-157.916-155.344-274.426-155.344-48.458 0-94.384 10.796-135.54 30.082l33.162 55.278c31.354-13.714 65.964-21.36 102.378-21.36z" />
246<glyph unicode="&#xe9ec;" glyph-name="cool2" d="M512 960c-282.77 0-512-229.23-512-512s229.226-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM512 128c-48.458 0-94.384 10.796-135.542 30.082l33.162 55.276c31.356-13.712 65.966-21.358 102.38-21.358 93.208 0 174.772 49.818 219.542 124.278l54.882-32.934c-55.964-93.070-157.914-155.344-274.424-155.344zM832 576c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64h-128c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v96c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-32h128v32c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-96z" />
247<glyph unicode="&#xe9ed;" glyph-name="angry" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM704.098 179.26c-39.174 65.148-110.544 108.74-192.098 108.74-81.556 0-152.924-43.592-192.098-108.74l-82.328 49.396c55.96 93.070 157.916 155.344 274.426 155.344 116.508 0 218.464-62.274 274.426-155.344l-82.328-49.396zM767.042 679.76c4.284-17.144-6.14-34.518-23.282-38.804-17.626-4.45-38.522-12.12-56.936-21.35 10.648-11.43 17.174-26.752 17.174-43.606 0-35.346-28.654-64-64-64s-64 28.654-64 64c0 1.17 0.036 2.33 0.098 3.484 2.032 47.454 45.212 78.946 81.592 97.138 34.742 17.37 69.102 26.060 70.548 26.422 17.146 4.288 34.518-6.138 38.806-23.284zM256.958 679.76c4.288 17.146 21.66 27.572 38.806 23.284 1.446-0.362 35.806-9.052 70.548-26.422 36.38-18.192 79.56-49.684 81.592-97.138 0.062-1.154 0.098-2.314 0.098-3.484 0-35.346-28.654-64-64-64s-64 28.654-64 64c0 16.854 6.526 32.176 17.174 43.606-18.414 9.23-39.31 16.9-56.936 21.35-17.142 4.286-27.566 21.66-23.282 38.804z" />
248<glyph unicode="&#xe9ee;" glyph-name="angry2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM576.094 579.484c2.032 47.454 45.21 78.948 81.592 97.138 34.742 17.372 69.104 26.060 70.548 26.422 17.146 4.288 34.52-6.138 38.806-23.284s-6.138-34.518-23.284-38.806c-17.624-4.45-38.522-12.12-56.936-21.35 10.648-11.43 17.174-26.752 17.174-43.606 0-35.346-28.654-64-64-64s-64 28.654-64 64c0.002 1.17 0.038 2.332 0.1 3.486zM256.958 679.76c4.288 17.146 21.66 27.572 38.806 23.284 1.446-0.362 35.806-9.052 70.548-26.422 36.38-18.192 79.56-49.684 81.592-97.138 0.062-1.154 0.098-2.314 0.098-3.484 0-35.346-28.654-64-64-64s-64 28.654-64 64c0 16.854 6.526 32.176 17.174 43.606-18.414 9.23-39.31 16.9-56.936 21.35-17.142 4.286-27.566 21.66-23.282 38.804zM704.098 179.26c-39.174 65.148-110.544 108.74-192.098 108.74-81.556 0-152.924-43.592-192.098-108.74l-82.328 49.396c55.96 93.070 157.916 155.344 274.426 155.344 116.508 0 218.464-62.274 274.426-155.344l-82.328-49.396z" />
249<glyph unicode="&#xe9ef;" glyph-name="evil" d="M639.996 512c-35.346 0-64 28.654-63.998 64.002 0 1.17 0.036 2.33 0.098 3.484 2.032 47.454 45.212 78.946 81.592 97.138 34.742 17.37 69.102 26.060 70.548 26.422 17.146 4.288 34.518-6.138 38.806-23.284 4.284-17.146-6.14-34.518-23.284-38.806-17.626-4.45-38.522-12.12-56.936-21.35 10.648-11.43 17.174-26.752 17.174-43.606 0-35.346-28.654-64-64-64zM280.242 640.956c-17.144 4.286-27.568 21.66-23.282 38.804 4.286 17.146 21.66 27.572 38.806 23.284 1.444-0.362 35.806-9.050 70.548-26.422 36.382-18.19 79.56-49.684 81.592-97.138 0.062-1.154 0.098-2.316 0.098-3.484 0-35.346-28.654-64-64-64s-64 28.654-64 64c0 16.854 6.526 32.176 17.174 43.606-18.414 9.23-39.312 16.9-56.936 21.35zM512 224c81.554 0 152.924 43.592 192.098 108.74l82.328-49.396c-55.962-93.070-157.916-155.344-274.426-155.344s-218.464 62.274-274.426 155.344l82.328 49.396c39.174-65.148 110.542-108.74 192.098-108.74zM1024 896c0 45.516-9.524 88.8-26.652 128-33.576-76.836-96.448-137.932-174.494-169.178-86.194 65.96-193.936 105.178-310.854 105.178s-224.66-39.218-310.854-105.178c-78.048 31.246-140.918 92.342-174.494 169.178-17.128-39.2-26.652-82.484-26.652-128 0-73.574 24.85-141.328 66.588-195.378-42.37-74.542-66.588-160.75-66.588-252.622 0-282.77 229.23-512 512-512s512 229.23 512 512c0 91.872-24.218 178.080-66.588 252.622 41.738 54.050 66.588 121.804 66.588 195.378zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416z" />
250<glyph unicode="&#xe9f0;" glyph-name="evil2" d="M1024 896c0 45.516-9.524 88.8-26.652 128-33.576-76.836-96.448-137.932-174.494-169.178-86.194 65.96-193.936 105.178-310.854 105.178s-224.66-39.218-310.854-105.178c-78.048 31.246-140.918 92.342-174.494 169.178-17.128-39.2-26.652-82.484-26.652-128 0-73.574 24.85-141.328 66.588-195.378-42.37-74.542-66.588-160.75-66.588-252.622 0-282.77 229.23-512 512-512s512 229.23 512 512c0 91.872-24.218 178.080-66.588 252.622 41.738 54.050 66.588 121.804 66.588 195.378zM576.094 579.484c2.032 47.454 45.21 78.948 81.592 97.138 34.742 17.372 69.104 26.060 70.548 26.422 17.146 4.288 34.52-6.138 38.806-23.284s-6.138-34.518-23.284-38.806c-17.624-4.45-38.522-12.12-56.936-21.35 10.648-11.43 17.174-26.752 17.174-43.606 0-35.346-28.654-64-64-64s-64 28.654-64 64c0.002 1.17 0.038 2.332 0.1 3.486zM256.958 679.76c4.288 17.146 21.66 27.572 38.806 23.284 1.446-0.362 35.806-9.052 70.548-26.422 36.38-18.192 79.56-49.684 81.592-97.138 0.062-1.154 0.098-2.314 0.098-3.484 0-35.346-28.654-64-64-64s-64 28.654-64 64c0 16.854 6.526 32.176 17.174 43.606-18.414 9.23-39.31 16.9-56.936 21.35-17.142 4.286-27.566 21.66-23.282 38.804zM512 128c-116.51 0-218.464 62.274-274.426 155.344l82.328 49.396c39.174-65.148 110.542-108.74 192.098-108.74 81.554 0 152.924 43.592 192.098 108.74l82.328-49.396c-55.962-93.070-157.916-155.344-274.426-155.344z" />
251<glyph unicode="&#xe9f1;" glyph-name="shocked" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM384 256c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM640 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96zM256 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96z" />
252<glyph unicode="&#xe9f2;" glyph-name="shocked2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM320 512c-35.346 0-64 42.98-64 96s28.654 96 64 96 64-42.98 64-96-28.654-96-64-96zM512 128c-70.692 0-128 57.308-128 128s57.308 128 128 128c70.692 0 128-57.308 128-128s-57.308-128-128-128zM704 512c-35.346 0-64 42.98-64 96s28.654 96 64 96 64-42.98 64-96-28.654-96-64-96z" />
253<glyph unicode="&#xe9f3;" glyph-name="baffled" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM384 544c0-17.673-14.327-32-32-32s-32 14.327-32 32c0 17.673 14.327 32 32 32s32-14.327 32-32zM352 640c53.020 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM352 704c-88.224 0-160-71.776-160-160s71.776-160 160-160 160 71.776 160 160-71.776 160-160 160v0zM704 544c0-17.673-14.327-32-32-32s-32 14.327-32 32c0 17.673 14.327 32 32 32s32-14.327 32-32zM672 640c53.020 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM672 704c-88.224 0-160-71.776-160-160s71.776-160 160-160 160 71.776 160 160-71.776 160-160 160v0zM384 256h256v-64h-256v64z" />
254<glyph unicode="&#xe9f4;" glyph-name="baffled2" d="M384 544c0-17.674-14.326-32-32-32s-32 14.326-32 32 14.326 32 32 32 32-14.326 32-32zM704 544c0-17.674-14.326-32-32-32s-32 14.326-32 32 14.326 32 32 32 32-14.326 32-32zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM256 544c0 53.020 42.98 96 96 96s96-42.98 96-96-42.98-96-96-96-96 42.98-96 96zM640 192h-256v64h256v-64zM672 448c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96z" />
255<glyph unicode="&#xe9f5;" glyph-name="confused" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM726.106 320h64.864c9.246-72.506-32.452-144.53-103.958-170.56-82.904-30.176-174.9 12.716-205.080 95.616-18.108 49.744-73.306 75.482-123.048 57.372-45.562-16.588-70.956-64.298-60.988-110.424h-64.86c-9.242 72.508 32.45 144.528 103.956 170.56 82.904 30.178 174.902-12.716 205.082-95.614 18.104-49.748 73.306-75.482 123.044-57.372 45.562 16.584 70.956 64.298 60.988 110.422z" />
256<glyph unicode="&#xe9f6;" glyph-name="confused2" d="M512 960c-282.77 0-512-229.23-512-512s229.226-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64c0 35.346 28.654 64 64 64zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64c0 35.346 28.654 64 64 64zM687.010 149.44c-82.902-30.18-174.9 12.712-205.080 95.614-18.108 49.742-73.306 75.478-123.048 57.372-45.562-16.588-70.958-64.296-60.988-110.424h-64.86c-9.244 72.508 32.45 144.532 103.956 170.56 82.904 30.18 174.902-12.712 205.082-95.614 18.108-49.742 73.306-75.476 123.046-57.37 45.562 16.584 70.958 64.294 60.988 110.422h64.864c9.24-72.506-32.454-144.532-103.96-170.56z" />
257<glyph unicode="&#xe9f7;" glyph-name="neutral" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64-64-28.654-64-64zM640 640c0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64-64-28.654-64-64zM384 256h256v-64h-256v64z" />
258<glyph unicode="&#xe9f8;" glyph-name="neutral2" d="M512 960c-282.77 0-512-229.23-512-512s229.226-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM640 192h-256v64h256v-64zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64c0 35.346 28.654 64 64 64zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64c0 35.346 28.654 64 64 64z" />
259<glyph unicode="&#xe9f9;" glyph-name="hipster" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64-28.654-64-64-64-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64-28.654-64-64-64-64 28.654-64 64zM675.882 419.882c-37.49 37.49-98.276 37.49-135.766 0s-37.49-98.276 0-135.766c1.204-1.204 2.434-2.368 3.684-3.492 86.528-78.512 288.2 1.842 288.2 103.376-62-40-110.45-9.786-156.118 35.882zM348.118 419.882c37.49 37.49 98.276 37.49 135.766 0s37.49-98.276 0-135.766c-1.204-1.204-2.434-2.368-3.684-3.492-86.528-78.512-288.2 1.842-288.2 103.376 62-40 110.45-9.786 156.118 35.882z" />
260<glyph unicode="&#xe9fa;" glyph-name="hipster2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM543.8 280.624c-1.25 1.124-2.48 2.29-3.684 3.492-18.74 18.74-28.112 43.3-28.118 67.864-0.004-24.562-9.376-49.124-28.118-67.864-1.204-1.204-2.434-2.368-3.684-3.492-86.524-78.512-288.196 1.842-288.196 103.376 62-40 110.45-9.786 156.118 35.882 37.49 37.49 98.276 37.49 135.766 0 18.74-18.74 28.112-43.3 28.118-67.864 0.004 24.562 9.376 49.124 28.118 67.864 37.49 37.49 98.276 37.49 135.766 0 45.664-45.668 94.114-75.882 156.114-35.882 0-101.534-201.672-181.888-288.2-103.376z" />
261<glyph unicode="&#xe9fb;" glyph-name="wondering" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM745.74 358.38l22.488-76.776-437.008-128.002-22.488 76.776zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64z" />
262<glyph unicode="&#xe9fc;" glyph-name="wondering2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64-28.654-64-64-64-64 28.654-64 64zM331.244 153.614l-22.488 76.774 437 128 22.488-76.774-437-128z" />
263<glyph unicode="&#xe9fd;" glyph-name="sleepy" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM640 288c0-88.366-57.308-160-128.002-160s-128.002 71.634-128.002 160c0 88.366 57.308 160 128.002 160s128.002-71.634 128.002-160zM416 620c-8.19 0-16.378 3.124-22.626 9.374-19.334 19.332-63.412 19.332-82.746 0-12.496-12.498-32.758-12.498-45.254 0-12.498 12.496-12.498 32.758 0 45.254 44.528 44.53 128.726 44.53 173.254 0 12.498-12.496 12.498-32.758 0-45.254-6.248-6.25-14.438-9.374-22.628-9.374zM736 620c-8.19 0-16.378 3.124-22.626 9.374-19.332 19.332-63.414 19.332-82.746 0-12.496-12.498-32.758-12.498-45.254 0-12.498 12.496-12.498 32.758 0 45.254 44.528 44.53 128.726 44.53 173.254 0 12.498-12.496 12.498-32.758 0-45.254-6.248-6.25-14.438-9.374-22.628-9.374z" />
264<glyph unicode="&#xe9fe;" glyph-name="sleepy2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM310.628 629.374c-12.496-12.498-32.758-12.498-45.254 0-12.498 12.496-12.498 32.758 0 45.254 44.528 44.53 128.726 44.53 173.254 0 12.498-12.496 12.498-32.758 0-45.254-6.248-6.25-14.438-9.374-22.628-9.374s-16.378 3.124-22.626 9.374c-19.334 19.332-63.412 19.332-82.746 0zM511.998 128c-70.694 0-128.002 71.634-128.002 160s57.308 160 128.002 160 128.002-71.634 128.002-160-57.308-160-128.002-160zM758.628 629.374c-6.248-6.25-14.438-9.374-22.628-9.374s-16.378 3.124-22.626 9.374c-19.332 19.332-63.414 19.332-82.746 0-12.496-12.498-32.758-12.498-45.254 0-12.498 12.496-12.498 32.758 0 45.254 44.528 44.53 128.726 44.53 173.254 0 12.498-12.498 12.498-32.758 0-45.254z" />
265<glyph unicode="&#xe9ff;" glyph-name="frustrated" d="M366.312 676.622c-34.742 17.37-69.102 26.060-70.548 26.422-17.146 4.288-34.518-6.138-38.806-23.284-4.284-17.144 6.14-34.518 23.282-38.804 17.626-4.45 38.522-12.12 56.936-21.35-10.648-11.43-17.174-26.752-17.174-43.606 0-35.346 28.654-64 64-64s64 28.654 64 64c0 1.17-0.036 2.33-0.098 3.484-2.032 47.454-45.212 78.946-81.592 97.138zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM236.498 136.336c10.706-5.324 22.756-8.336 35.502-8.336h480c12.746 0 24.796 3.012 35.502 8.338-73.378-64.914-169.828-104.338-275.502-104.338-105.672 0-202.124 39.424-275.502 104.336zM256 208v96c0 8.674 7.328 16 16 16h112v-128h-112c-8.672 0-16 7.326-16 16zM448 192v128h128v-128h-128zM640 192v128h112c8.674 0 16-7.326 16-16v-96c0-8.674-7.326-16-16-16h-112zM823.662 172.498c5.326 10.706 8.338 22.756 8.338 35.502v96c0 44.112-35.888 80-80 80h-480c-44.112 0-80-35.888-80-80v-96c0-12.746 3.012-24.796 8.336-35.502-64.912 73.378-104.336 169.828-104.336 275.502 0 229.75 186.25 416 416 416s416-186.25 416-416c0-105.674-39.424-202.124-104.338-275.502zM728.236 703.044c-1.448-0.362-35.806-9.052-70.548-26.422-36.378-18.192-79.558-49.684-81.592-97.138-0.060-1.154-0.098-2.314-0.098-3.484 0-35.346 28.654-64 64-64s64 28.654 64 64c0 16.854-6.526 32.176-17.174 43.606 18.414 9.23 39.31 16.9 56.936 21.35 17.142 4.286 27.566 21.66 23.284 38.804-4.29 17.146-21.662 27.572-38.808 23.284z" />
266<glyph unicode="&#xea00;" glyph-name="frustrated2" d="M256 304v-96c0-8.674 7.328-16 16-16h112v128h-112c-8.672 0-16-7.326-16-16zM448 320h128v-128h-128v128zM752 320h-112v-128h112c8.674 0 16 7.326 16 16v96c0 8.674-7.326 16-16 16zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM576.096 579.484c2.034 47.454 45.212 78.946 81.592 97.138 34.742 17.37 69.102 26.060 70.548 26.422 17.146 4.288 34.518-6.138 38.806-23.284 4.284-17.144-6.14-34.518-23.284-38.804-17.624-4.45-38.522-12.12-56.936-21.35 10.648-11.43 17.174-26.752 17.174-43.606 0-35.346-28.654-64-64-64s-64 28.654-64 64c0.002 1.17 0.040 2.33 0.1 3.484zM256.958 679.76c4.288 17.146 21.66 27.572 38.806 23.284 1.446-0.362 35.806-9.052 70.548-26.422 36.38-18.192 79.56-49.684 81.592-97.138 0.062-1.154 0.098-2.314 0.098-3.484 0-35.346-28.654-64-64-64s-64 28.654-64 64c0 16.854 6.526 32.176 17.174 43.606-18.414 9.23-39.31 16.9-56.936 21.35-17.142 4.286-27.566 21.66-23.282 38.804zM832 208c0-44.112-35.888-80-80-80h-480c-44.112 0-80 35.888-80 80v96c0 44.112 35.888 80 80 80h480c44.112 0 80-35.888 80-80v-96z" />
267<glyph unicode="&#xea01;" glyph-name="crying" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM800 576h-128c-17.674 0-32 14.328-32 32s14.326 32 32 32h128c17.674 0 32-14.328 32-32s-14.326-32-32-32zM352 576h-128c-17.672 0-32 14.328-32 32s14.328 32 32 32h128c17.672 0 32-14.328 32-32s-14.328-32-32-32zM608 104c-8.19 0-16.378 3.124-22.626 9.374-4.582 4.582-29.42 14.626-73.374 14.626s-68.79-10.044-73.374-14.626c-12.496-12.496-32.758-12.496-45.254 0-12.498 12.496-12.498 32.758 0 45.254 30.122 30.12 92.994 33.372 118.628 33.372 25.632 0 88.506-3.252 118.626-33.374 12.498-12.496 12.498-32.758 0-45.254-6.248-6.248-14.436-9.372-22.626-9.372zM736 384c-17.674 0-32 14.326-32 32v64c0 17.672 14.326 32 32 32s32-14.328 32-32v-64c0-17.674-14.326-32-32-32zM736 192c-17.674 0-32 14.326-32 32v64c0 17.674 14.326 32 32 32s32-14.326 32-32v-64c0-17.674-14.326-32-32-32zM288 384c-17.672 0-32 14.326-32 32v64c0 17.672 14.328 32 32 32s32-14.328 32-32v-64c0-17.674-14.328-32-32-32zM288 192c-17.672 0-32 14.326-32 32v64c0 17.674 14.328 32 32 32s32-14.326 32-32v-64c0-17.674-14.328-32-32-32z" />
268<glyph unicode="&#xea02;" glyph-name="crying2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM320 224c0-17.674-14.328-32-32-32s-32 14.326-32 32v64c0 17.674 14.328 32 32 32s32-14.326 32-32v-64zM320 416c0-17.674-14.328-32-32-32s-32 14.326-32 32v64c0 17.672 14.328 32 32 32s32-14.328 32-32v-64zM352 576h-128c-17.672 0-32 14.328-32 32s14.328 32 32 32h128c17.672 0 32-14.328 32-32s-14.328-32-32-32zM630.626 113.374c-6.248-6.25-14.436-9.374-22.626-9.374s-16.378 3.124-22.626 9.374c-4.582 4.582-29.42 14.626-73.374 14.626s-68.79-10.044-73.374-14.626c-12.496-12.496-32.758-12.496-45.254 0-12.498 12.496-12.498 32.758 0 45.254 30.122 30.12 92.994 33.372 118.628 33.372 25.632 0 88.506-3.252 118.626-33.374 12.498-12.496 12.498-32.756 0-45.252zM768 224c0-17.674-14.326-32-32-32s-32 14.326-32 32v64c0 17.674 14.326 32 32 32s32-14.326 32-32v-64zM768 416c0-17.674-14.326-32-32-32s-32 14.326-32 32v64c0 17.672 14.326 32 32 32s32-14.328 32-32v-64zM800 576h-128c-17.674 0-32 14.328-32 32s14.326 32 32 32h128c17.674 0 32-14.328 32-32s-14.326-32-32-32z" />
269<glyph unicode="&#xea03;" glyph-name="point-up" d="M960 352v160c0 52.934-43.066 96-96 96-17.104 0-33.176-4.494-47.098-12.368-17.076 26.664-46.958 44.368-80.902 44.368-24.564 0-47.004-9.274-64-24.504-16.996 15.23-39.436 24.504-64 24.504-11.214 0-21.986-1.934-32-5.484v229.484c0 52.934-43.066 96-96 96s-96-43.066-96-96v-394.676l-176.018 93.836c-14.536 8.4-31.126 12.84-47.982 12.84-52.934 0-96-43.066-96-96 0-26.368 10.472-50.954 29.49-69.226 0.248-0.238 0.496-0.47 0.75-0.7l239.17-218.074h-45.41c-17.672 0-32-14.326-32-32v-192c0-17.674 14.328-32 32-32h640c17.674 0 32 14.326 32 32v192c0 17.674-14.326 32-32 32h-44.222l72.844 145.69c2.222 4.442 3.378 9.342 3.378 14.31zM896 96c0-17.674-14.326-32-32-32s-32 14.326-32 32 14.326 32 32 32 32-14.326 32-32zM896 359.554l-83.776-167.554h-383.826l-290.818 265.166c-6.18 6.070-9.58 14.164-9.58 22.834 0 17.644 14.356 32 32 32 5.46 0 10.612-1.31 15.324-3.894 0.53-0.324 1.070-0.632 1.622-0.926l224-119.416c9.92-5.288 21.884-4.986 31.52 0.8 9.638 5.782 15.534 16.196 15.534 27.436v448c0 17.644 14.356 32 32 32s32-14.356 32-32v-320c0-17.672 14.326-32 32-32s32 14.328 32 32c0 17.644 14.356 32 32 32s32-14.356 32-32c0-17.672 14.326-32 32-32s32 14.328 32 32c0 17.644 14.356 32 32 32s32-14.356 32-32v-32c0-17.672 14.326-32 32-32s32 14.328 32 32c0 17.644 14.356 32 32 32s32-14.356 32-32v-152.446z" />
270<glyph unicode="&#xea04;" glyph-name="point-right" d="M416 0h160c52.934 0 96 43.066 96 96 0 17.104-4.494 33.176-12.368 47.098 26.664 17.076 44.368 46.958 44.368 80.902 0 24.564-9.276 47.004-24.504 64 15.228 16.996 24.504 39.436 24.504 64 0 11.214-1.934 21.986-5.484 32h229.484c52.934 0 96 43.066 96 96s-43.066 96-96 96h-394.676l93.836 176.018c8.4 14.536 12.84 31.126 12.84 47.982 0 52.934-43.066 96-96 96-26.368 0-50.954-10.472-69.226-29.49-0.238-0.248-0.47-0.496-0.7-0.75l-218.074-239.17v45.41c0 17.672-14.326 32-32 32h-192c-17.674 0-32-14.328-32-32v-640c0-17.674 14.326-32 32-32h192c17.674 0 32 14.326 32 32v44.222l145.69-72.844c4.444-2.222 9.342-3.378 14.31-3.378zM160 64c-17.674 0-32 14.326-32 32s14.326 32 32 32 32-14.326 32-32-14.326-32-32-32zM423.556 64l-167.556 83.778v383.824l265.168 290.818c6.066 6.18 14.162 9.58 22.832 9.58 17.644 0 32-14.356 32-32 0-5.46-1.308-10.612-3.894-15.324-0.324-0.53-0.632-1.070-0.926-1.622l-119.418-224c-5.288-9.92-4.986-21.884 0.8-31.52 5.784-9.638 16.198-15.534 27.438-15.534h448c17.644 0 32-14.356 32-32s-14.356-32-32-32h-320c-17.672 0-32-14.326-32-32s14.328-32 32-32c17.644 0 32-14.356 32-32s-14.356-32-32-32c-17.674 0-32-14.326-32-32s14.326-32 32-32c17.644 0 32-14.356 32-32s-14.356-32-32-32h-32c-17.674 0-32-14.326-32-32s14.326-32 32-32c17.644 0 32-14.356 32-32s-14.356-32-32-32h-152.444z" />
271<glyph unicode="&#xea05;" glyph-name="point-down" d="M960 544v-160c0-52.934-43.066-96-96-96-17.104 0-33.176 4.494-47.098 12.368-17.076-26.662-46.96-44.368-80.902-44.368-24.564 0-47.004 9.276-64 24.504-16.996-15.228-39.436-24.504-64-24.504-11.214 0-21.986 1.934-32 5.484v-229.484c0-52.934-43.066-96-96-96-52.936 0-96 43.066-96 96v394.676l-176.018-93.836c-14.538-8.398-31.126-12.84-47.982-12.84-52.936 0-96 43.066-96 96 0 26.368 10.472 50.952 29.488 69.226 0.248 0.238 0.496 0.47 0.75 0.7l239.17 218.074h-45.408c-17.674 0-32 14.326-32 32v192c0 17.674 14.326 32 32 32h640c17.674 0 32-14.326 32-32v-192c0-17.674-14.326-32-32-32h-44.222l72.842-145.69c2.224-4.442 3.38-9.342 3.38-14.31zM896 800c0 17.674-14.326 32-32 32s-32-14.326-32-32 14.326-32 32-32 32 14.326 32 32zM896 536.446l-83.778 167.554h-383.824l-290.82-265.168c-6.18-6.066-9.578-14.162-9.578-22.832 0-17.644 14.356-32 32-32 5.458 0 10.612 1.308 15.324 3.894 0.53 0.324 1.070 0.632 1.622 0.926l224 119.416c9.92 5.288 21.884 4.986 31.52-0.8 9.638-5.782 15.534-16.196 15.534-27.436v-448c0-17.644 14.356-32 32-32s32 14.356 32 32v320c0 17.672 14.326 32 32 32s32-14.328 32-32c0-17.644 14.356-32 32-32s32 14.356 32 32c0 17.674 14.326 32 32 32s32-14.326 32-32c0-17.644 14.356-32 32-32s32 14.356 32 32v32c0 17.674 14.326 32 32 32s32-14.326 32-32c0-17.644 14.356-32 32-32s32 14.356 32 32v152.446z" />
272<glyph unicode="&#xea06;" glyph-name="point-left" d="M608 0h-160c-52.934 0-96 43.066-96 96 0 17.104 4.494 33.176 12.368 47.098-26.662 17.076-44.368 46.958-44.368 80.902 0 24.564 9.276 47.004 24.504 64-15.228 16.996-24.504 39.436-24.504 64 0 11.214 1.934 21.986 5.484 32h-229.484c-52.934 0-96 43.066-96 96 0 52.936 43.066 96 96 96h394.676l-93.836 176.018c-8.398 14.536-12.84 31.126-12.84 47.982 0 52.936 43.066 96 96 96 26.368 0 50.952-10.472 69.224-29.488 0.238-0.248 0.472-0.496 0.7-0.75l218.076-239.17v45.408c0 17.674 14.326 32 32 32h192c17.674 0 32-14.326 32-32v-640c0-17.674-14.326-32-32-32h-192c-17.674 0-32 14.326-32 32v44.222l-145.69-72.844c-4.442-2.222-9.34-3.378-14.31-3.378zM864 64c17.674 0 32 14.326 32 32s-14.326 32-32 32-32-14.326-32-32 14.326-32 32-32zM600.446 64l167.554 83.778v383.824l-265.168 290.82c-6.066 6.18-14.162 9.578-22.832 9.578-17.644 0-32-14.356-32-32 0-5.458 1.308-10.612 3.894-15.324 0.324-0.53 0.632-1.070 0.926-1.622l119.416-224c5.29-9.92 4.988-21.884-0.798-31.52-5.784-9.638-16.198-15.534-27.438-15.534h-448c-17.644 0-32-14.356-32-32s14.356-32 32-32h320c17.672 0 32-14.326 32-32s-14.328-32-32-32c-17.644 0-32-14.356-32-32s14.356-32 32-32c17.674 0 32-14.326 32-32s-14.326-32-32-32c-17.644 0-32-14.356-32-32s14.356-32 32-32h32c17.674 0 32-14.326 32-32s-14.326-32-32-32c-17.644 0-32-14.356-32-32s14.356-32 32-32h152.446z" />
273<glyph unicode="&#xea07;" glyph-name="warning" d="M512 867.226l429.102-855.226h-858.206l429.104 855.226zM512 960c-22.070 0-44.14-14.882-60.884-44.648l-437.074-871.112c-33.486-59.532-5-108.24 63.304-108.24h869.308c68.3 0 96.792 48.708 63.3 108.24h0.002l-437.074 871.112c-16.742 29.766-38.812 44.648-60.882 44.648v0zM576 128c0-35.346-28.654-64-64-64s-64 28.654-64 64c0 35.346 28.654 64 64 64s64-28.654 64-64zM512 256c-35.346 0-64 28.654-64 64v192c0 35.346 28.654 64 64 64s64-28.654 64-64v-192c0-35.346-28.654-64-64-64z" />
274<glyph unicode="&#xea08;" glyph-name="notification" d="M512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512zM448 256h128v-128h-128zM448 768h128v-384h-128z" />
275<glyph unicode="&#xea09;" glyph-name="question" d="M448 256h128v-128h-128zM704 704c35.346 0 64-28.654 64-64v-192l-192-128h-128v64l192 128v64h-320v128h384zM512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512z" />
276<glyph unicode="&#xea0a;" glyph-name="plus" d="M992 576h-352v352c0 17.672-14.328 32-32 32h-192c-17.672 0-32-14.328-32-32v-352h-352c-17.672 0-32-14.328-32-32v-192c0-17.672 14.328-32 32-32h352v-352c0-17.672 14.328-32 32-32h192c17.672 0 32 14.328 32 32v352h352c17.672 0 32 14.328 32 32v192c0 17.672-14.328 32-32 32z" />
277<glyph unicode="&#xea0b;" glyph-name="minus" d="M0 544v-192c0-17.672 14.328-32 32-32h960c17.672 0 32 14.328 32 32v192c0 17.672-14.328 32-32 32h-960c-17.672 0-32-14.328-32-32z" />
278<glyph unicode="&#xea0c;" glyph-name="info" d="M448 656c0 26.4 21.6 48 48 48h32c26.4 0 48-21.6 48-48v-32c0-26.4-21.6-48-48-48h-32c-26.4 0-48 21.6-48 48v32zM640 192h-256v64h64v192h-64v64h192v-256h64zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416z" />
279<glyph unicode="&#xea0d;" glyph-name="cancel-circle" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM672 704l-160-160-160 160-96-96 160-160-160-160 96-96 160 160 160-160 96 96-160 160 160 160z" />
280<glyph unicode="&#xea0e;" glyph-name="blocked" d="M874.040 810.040c-96.706 96.702-225.28 149.96-362.040 149.96s-265.334-53.258-362.040-149.96c-96.702-96.706-149.96-225.28-149.96-362.040s53.258-265.334 149.96-362.040c96.706-96.702 225.28-149.96 362.040-149.96s265.334 53.258 362.040 149.96c96.702 96.706 149.96 225.28 149.96 362.040s-53.258 265.334-149.96 362.040zM896 448c0-82.814-26.354-159.588-71.112-222.38l-535.266 535.268c62.792 44.758 139.564 71.112 222.378 71.112 211.738 0 384-172.262 384-384zM128 448c0 82.814 26.354 159.586 71.112 222.378l535.27-535.268c-62.794-44.756-139.568-71.11-222.382-71.11-211.738 0-384 172.262-384 384z" />
281<glyph unicode="&#xea0f;" glyph-name="cross" d="M1014.662 137.34c-0.004 0.004-0.008 0.008-0.012 0.010l-310.644 310.65 310.644 310.65c0.004 0.004 0.008 0.006 0.012 0.010 3.344 3.346 5.762 7.254 7.312 11.416 4.246 11.376 1.824 24.682-7.324 33.83l-146.746 146.746c-9.148 9.146-22.45 11.566-33.828 7.32-4.16-1.55-8.070-3.968-11.418-7.31 0-0.004-0.004-0.006-0.008-0.010l-310.648-310.652-310.648 310.65c-0.004 0.004-0.006 0.006-0.010 0.010-3.346 3.342-7.254 5.76-11.414 7.31-11.38 4.248-24.682 1.826-33.83-7.32l-146.748-146.748c-9.148-9.148-11.568-22.452-7.322-33.828 1.552-4.16 3.97-8.072 7.312-11.416 0.004-0.002 0.006-0.006 0.010-0.010l310.65-310.648-310.65-310.652c-0.002-0.004-0.006-0.006-0.008-0.010-3.342-3.346-5.76-7.254-7.314-11.414-4.248-11.376-1.826-24.682 7.322-33.83l146.748-146.746c9.15-9.148 22.452-11.568 33.83-7.322 4.16 1.552 8.070 3.97 11.416 7.312 0.002 0.004 0.006 0.006 0.010 0.010l310.648 310.65 310.648-310.65c0.004-0.002 0.008-0.006 0.012-0.008 3.348-3.344 7.254-5.762 11.414-7.314 11.378-4.246 24.684-1.826 33.828 7.322l146.746 146.748c9.148 9.148 11.57 22.454 7.324 33.83-1.552 4.16-3.97 8.068-7.314 11.414z" />
282<glyph unicode="&#xea10;" glyph-name="checkmark" d="M864 832l-480-480-224 224-160-160 384-384 640 640z" />
283<glyph unicode="&#xea11;" glyph-name="checkmark2" d="M397.434 42.304l-397.868 391.6 197.378 194.27 200.49-197.332 429.62 422.852 197.378-194.27-626.998-617.12zM107.912 433.904l289.524-284.962 518.656 510.482-89.036 87.632-429.62-422.852-200.49 197.334-89.034-87.634z" />
284<glyph unicode="&#xea12;" glyph-name="spell-check" d="M128 704h128v-192h64v384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-384h64v192zM128 896h128v-128h-128v128zM960 896v64h-192c-35.202 0-64-28.8-64-64v-320c0-35.2 28.798-64 64-64h192v64h-192v320h192zM640 800v96c0 35.2-28.8 64-64 64h-192v-448h192c35.2 0 64 28.8 64 64v96c0 35.2-8.8 64-44 64 35.2 0 44 28.8 44 64zM576 576h-128v128h128v-128zM576 768h-128v128h128v-128zM832 384l-416-448-224 288 82 70 142-148 352 302z" />
285<glyph unicode="&#xea13;" glyph-name="enter" d="M384 448h-320v128h320v128l192-192-192-192zM1024 960v-832l-384-192v192h-384v256h64v-192h320v576l256 128h-576v-256h-64v320z" />
286<glyph unicode="&#xea14;" glyph-name="exit" d="M768 320v128h-320v128h320v128l192-192zM704 384v-256h-320v-192l-384 192v832h704v-320h-64v256h-512l256-128v-576h256v192z" />
287<glyph unicode="&#xea15;" glyph-name="play2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM384 672l384-224-384-224z" />
288<glyph unicode="&#xea16;" glyph-name="pause" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM320 640h128v-384h-128zM576 640h128v-384h-128z" />
289<glyph unicode="&#xea17;" glyph-name="stop" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM320 640h384v-384h-384z" />
290<glyph unicode="&#xea18;" glyph-name="previous" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM448 448l256 192v-384zM320 640h128v-384h-128v384z" />
291<glyph unicode="&#xea19;" glyph-name="next" d="M512 960c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 32c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM576 448l-256 192v-384zM704 640h-128v-384h128v384z" />
292<glyph unicode="&#xea1a;" glyph-name="backward" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM704 288l-224 160 224 160zM448 288l-224 160 224 160z" />
293<glyph unicode="&#xea1b;" glyph-name="forward2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM320 608l224-160-224-160zM576 608l224-160-224-160z" />
294<glyph unicode="&#xea1c;" glyph-name="play3" d="M192 832l640-384-640-384z" />
295<glyph unicode="&#xea1d;" glyph-name="pause2" d="M128 832h320v-768h-320zM576 832h320v-768h-320z" />
296<glyph unicode="&#xea1e;" glyph-name="stop2" d="M128 832h768v-768h-768z" />
297<glyph unicode="&#xea1f;" glyph-name="backward2" d="M576 800v-320l320 320v-704l-320 320v-320l-352 352z" />
298<glyph unicode="&#xea20;" glyph-name="forward3" d="M512 96v320l-320-320v704l320-320v320l352-352z" />
299<glyph unicode="&#xea21;" glyph-name="first" d="M128 64v768h128v-352l320 320v-320l320 320v-704l-320 320v-320l-320 320v-352z" />
300<glyph unicode="&#xea22;" glyph-name="last" d="M896 832v-768h-128v352l-320-320v320l-320-320v704l320-320v320l320-320v352z" />
301<glyph unicode="&#xea23;" glyph-name="previous2" d="M256 64v768h128v-352l320 320v-704l-320 320v-352z" />
302<glyph unicode="&#xea24;" glyph-name="next2" d="M768 832v-768h-128v352l-320-320v704l320-320v352z" />
303<glyph unicode="&#xea25;" glyph-name="eject" d="M0 192h1024v-128h-1024zM512 832l512-512h-1024z" />
304<glyph unicode="&#xea26;" glyph-name="volume-high" horiz-adv-x="1088" d="M890.040 37.96c-12.286 0-24.566 4.686-33.942 14.056-18.744 18.746-18.744 49.136 0 67.882 87.638 87.642 135.904 204.16 135.904 328.1 0 123.938-48.266 240.458-135.904 328.098-18.744 18.746-18.744 49.138 0 67.882s49.138 18.744 67.882 0c105.77-105.772 164.022-246.4 164.022-395.98s-58.252-290.208-164.022-395.98c-9.372-9.372-21.656-14.058-33.94-14.058zM719.53 128.47c-12.286 0-24.566 4.686-33.942 14.056-18.744 18.744-18.744 49.136 0 67.882 131.006 131.006 131.006 344.17 0 475.176-18.744 18.746-18.744 49.138 0 67.882 18.744 18.742 49.138 18.744 67.882 0 81.594-81.59 126.53-190.074 126.53-305.466 0-115.39-44.936-223.876-126.53-305.47-9.372-9.374-21.656-14.060-33.94-14.060v0zM549.020 218.98c-12.286 0-24.568 4.686-33.942 14.058-18.746 18.746-18.746 49.134 0 67.88 81.1 81.1 81.1 213.058 0 294.156-18.746 18.746-18.746 49.138 0 67.882s49.136 18.744 67.882 0c118.53-118.53 118.53-311.392 0-429.922-9.372-9.368-21.656-14.054-33.94-14.054zM416.006 0c-8.328 0-16.512 3.25-22.634 9.374l-246.626 246.626h-114.746c-17.672 0-32 14.326-32 32v320c0 17.672 14.328 32 32 32h114.746l246.626 246.628c9.154 9.154 22.916 11.89 34.874 6.936 11.958-4.952 19.754-16.622 19.754-29.564v-832c0-12.944-7.796-24.612-19.754-29.564-3.958-1.64-8.118-2.436-12.24-2.436z" />
305<glyph unicode="&#xea27;" glyph-name="volume-medium" d="M719.53 128.47c-12.286 0-24.566 4.686-33.942 14.056-18.744 18.744-18.744 49.136 0 67.882 131.006 131.006 131.006 344.17 0 475.176-18.744 18.746-18.744 49.138 0 67.882 18.744 18.742 49.138 18.744 67.882 0 81.594-81.59 126.53-190.074 126.53-305.466 0-115.39-44.936-223.876-126.53-305.47-9.372-9.374-21.656-14.060-33.94-14.060v0zM549.020 218.98c-12.286 0-24.566 4.686-33.942 14.058-18.746 18.746-18.746 49.134 0 67.88 81.1 81.1 81.1 213.058 0 294.156-18.746 18.746-18.746 49.138 0 67.882s49.136 18.744 67.882 0c118.53-118.53 118.53-311.392 0-429.922-9.372-9.368-21.656-14.054-33.94-14.054zM416.006 0c-8.328 0-16.512 3.25-22.634 9.374l-246.626 246.626h-114.746c-17.672 0-32 14.326-32 32v320c0 17.672 14.328 32 32 32h114.746l246.626 246.628c9.154 9.154 22.916 11.89 34.874 6.936 11.958-4.952 19.754-16.622 19.754-29.564v-832c0-12.944-7.796-24.612-19.754-29.564-3.958-1.64-8.118-2.436-12.24-2.436z" />
306<glyph unicode="&#xea28;" glyph-name="volume-low" d="M549.020 218.98c-12.286 0-24.566 4.686-33.942 14.058-18.746 18.746-18.746 49.134 0 67.88 81.1 81.1 81.1 213.058 0 294.156-18.746 18.746-18.746 49.138 0 67.882s49.136 18.744 67.882 0c118.53-118.53 118.53-311.392 0-429.922-9.372-9.368-21.656-14.054-33.94-14.054zM416.006 0c-8.328 0-16.512 3.25-22.634 9.374l-246.626 246.626h-114.746c-17.672 0-32 14.326-32 32v320c0 17.672 14.328 32 32 32h114.746l246.626 246.628c9.154 9.154 22.916 11.89 34.874 6.936 11.958-4.952 19.754-16.622 19.754-29.564v-832c0-12.944-7.796-24.612-19.754-29.564-3.958-1.64-8.118-2.436-12.24-2.436z" />
307<glyph unicode="&#xea29;" glyph-name="volume-mute" d="M416.006 0c-8.328 0-16.512 3.25-22.634 9.374l-246.626 246.626h-114.746c-17.672 0-32 14.326-32 32v320c0 17.672 14.328 32 32 32h114.746l246.626 246.628c9.154 9.154 22.916 11.89 34.874 6.936 11.958-4.952 19.754-16.622 19.754-29.564v-832c0-12.944-7.796-24.612-19.754-29.564-3.958-1.64-8.118-2.436-12.24-2.436z" />
308<glyph unicode="&#xea2a;" glyph-name="volume-mute2" d="M960 340.852v-84.852h-84.852l-107.148 107.148-107.148-107.148h-84.852v84.852l107.148 107.148-107.148 107.148v84.852h84.852l107.148-107.148 107.148 107.148h84.852v-84.852l-107.148-107.148 107.148-107.148zM416.006 0c-8.328 0-16.512 3.25-22.634 9.374l-246.626 246.626h-114.746c-17.672 0-32 14.326-32 32v320c0 17.672 14.328 32 32 32h114.746l246.626 246.628c9.154 9.154 22.916 11.89 34.874 6.936 11.958-4.952 19.754-16.622 19.754-29.564v-832c0-12.944-7.796-24.612-19.754-29.564-3.958-1.64-8.118-2.436-12.24-2.436z" />
309<glyph unicode="&#xea2b;" glyph-name="volume-increase" d="M1024 384h-192v-192h-128v192h-192v128h192v192h128v-192h192v-128zM416.006 0c-8.328 0-16.512 3.25-22.634 9.374l-246.626 246.626h-114.746c-17.672 0-32 14.326-32 32v320c0 17.672 14.328 32 32 32h114.746l246.626 246.628c9.154 9.154 22.916 11.89 34.874 6.936 11.958-4.952 19.754-16.622 19.754-29.564v-832c0-12.944-7.796-24.612-19.754-29.564-3.958-1.64-8.118-2.436-12.24-2.436z" />
310<glyph unicode="&#xea2c;" glyph-name="volume-decrease" d="M512 512h512v-128h-512v128zM416.006 0c-8.328 0-16.512 3.25-22.634 9.374l-246.626 246.626h-114.746c-17.672 0-32 14.326-32 32v320c0 17.672 14.328 32 32 32h114.746l246.626 246.628c9.154 9.154 22.916 11.89 34.874 6.936 11.958-4.952 19.754-16.622 19.754-29.564v-832c0-12.944-7.796-24.612-19.754-29.564-3.958-1.64-8.118-2.436-12.24-2.436z" />
311<glyph unicode="&#xea2d;" glyph-name="loop" d="M128 640h640v-192l256 256-256 256v-192h-768v-384h128zM896 256h-640v192l-256-256 256-256v192h768v384h-128z" />
312<glyph unicode="&#xea2e;" glyph-name="loop2" d="M889.68 793.68c-93.608 102.216-228.154 166.32-377.68 166.32-282.77 0-512-229.23-512-512h96c0 229.75 186.25 416 416 416 123.020 0 233.542-53.418 309.696-138.306l-149.696-149.694h352v352l-134.32-134.32zM928 448c0-229.75-186.25-416-416-416-123.020 0-233.542 53.418-309.694 138.306l149.694 149.694h-352v-352l134.32 134.32c93.608-102.216 228.154-166.32 377.68-166.32 282.77 0 512 229.23 512 512h-96z" />
313<glyph unicode="&#xea2f;" glyph-name="infinite" d="M783.988 207.988c-64.104 0-124.372 24.96-169.7 70.288l-102.288 102.282-102.276-102.27c-45.332-45.336-105.6-70.3-169.706-70.3-64.118 0-124.39 24.964-169.722 70.3-45.332 45.334-70.296 105.604-70.296 169.712s24.964 124.38 70.296 169.714c45.334 45.332 105.608 70.296 169.714 70.296 64.108 0 124.38-24.964 169.712-70.296l102.278-102.276 102.276 102.276c45.332 45.332 105.604 70.298 169.712 70.298 64.112 0 124.384-24.966 169.71-70.298 45.338-45.334 70.302-105.606 70.302-169.714 0-64.112-24.964-124.382-70.3-169.71-45.326-45.336-105.598-70.302-169.712-70.302zM681.72 345.712c27.322-27.31 63.64-42.354 102.268-42.352 38.634 0 74.958 15.044 102.276 42.362 27.316 27.322 42.364 63.644 42.364 102.278s-15.046 74.956-42.364 102.274c-27.32 27.318-63.64 42.364-102.276 42.364-38.632 0-74.956-15.044-102.278-42.364l-102.268-102.274 102.278-102.288zM240.012 592.638c-38.634 0-74.956-15.044-102.274-42.364-27.32-27.318-42.364-63.64-42.364-102.274 0-38.632 15.044-74.954 42.364-102.276 27.32-27.316 63.642-42.364 102.274-42.364 38.634 0 74.956 15.044 102.272 42.362l102.276 102.278-102.276 102.274c-27.318 27.32-63.64 42.366-102.272 42.364v0z" />
314<glyph unicode="&#xea30;" glyph-name="shuffle" d="M768 256h-101.49l-160 160 160 160h101.49v-160l224 224-224 224v-160h-128c-16.974 0-33.252-6.744-45.254-18.746l-178.746-178.744-178.746 178.746c-12 12-28.28 18.744-45.254 18.744h-192v-128h165.49l160-160-160-160h-165.49v-128h192c16.974 0 33.252 6.742 45.254 18.746l178.746 178.744 178.746-178.744c12.002-12.004 28.28-18.746 45.254-18.746h128v-160l224 224-224 224v-160z" />
315<glyph unicode="&#xea31;" glyph-name="arrow-up-left" d="M0 224l256 256 544-544 224 224-544 544 255.998 256h-735.998v-736z" />
316<glyph unicode="&#xea32;" glyph-name="arrow-up" d="M512 928l-480-480h288v-512h384v512h288z" />
317<glyph unicode="&#xea33;" glyph-name="arrow-up-right" d="M288 960l256-256-544-544 224-224 544 544 256-255.998v735.998h-736z" />
318<glyph unicode="&#xea34;" glyph-name="arrow-right" d="M992 448l-480 480v-288h-512v-384h512v-288z" />
319<glyph unicode="&#xea35;" glyph-name="arrow-down-right" d="M1024 672l-256-256-544 544-224-224 544-544-255.998-256h735.998v736z" />
320<glyph unicode="&#xea36;" glyph-name="arrow-down" d="M512-32l480 480h-288v512h-384v-512h-288z" />
321<glyph unicode="&#xea37;" glyph-name="arrow-down-left" d="M736-64l-256 256 544 544-224 224-544-544-256 255.998v-735.998h736z" />
322<glyph unicode="&#xea38;" glyph-name="arrow-left" d="M32 448l480-480v288h512v384h-512v288z" />
323<glyph unicode="&#xea39;" glyph-name="arrow-up-left2" d="M877.254 173.254l-530.744 530.746h229.49c35.346 0 64 28.654 64 64s-28.654 64-64 64h-384c-25.886 0-49.222-15.592-59.128-39.508-3.282-7.924-4.84-16.242-4.838-24.492h-0.034v-384c0-35.346 28.654-64 64-64s64 28.654 64 64v229.49l530.746-530.744c12.496-12.498 28.876-18.746 45.254-18.746s32.758 6.248 45.254 18.746c24.994 24.992 24.994 65.516 0 90.508z" />
324<glyph unicode="&#xea3a;" glyph-name="arrow-up2" d="M877.254 557.254l-320 320c-24.992 24.994-65.514 24.994-90.508 0l-320-320c-24.994-24.994-24.994-65.516 0-90.51 24.994-24.996 65.516-24.996 90.51 0l210.744 210.746v-613.49c0-35.346 28.654-64 64-64s64 28.654 64 64v613.49l210.746-210.746c12.496-12.496 28.876-18.744 45.254-18.744s32.758 6.248 45.254 18.746c24.994 24.994 24.994 65.514 0 90.508z" />
325<glyph unicode="&#xea3b;" glyph-name="arrow-up-right2" d="M237.254 82.746l530.746 530.744v-229.49c0-35.346 28.654-64 64-64s64 28.654 64 64v384c0 25.884-15.594 49.222-39.508 59.126-7.924 3.284-16.242 4.84-24.492 4.838v0.036h-384c-35.346 0-64-28.654-64-64 0-35.348 28.654-64 64-64h229.49l-530.744-530.746c-12.498-12.496-18.746-28.876-18.746-45.254s6.248-32.758 18.746-45.254c24.992-24.994 65.516-24.994 90.508 0z" />
326<glyph unicode="&#xea3c;" glyph-name="arrow-right2" d="M621.254 82.746l320 320c24.994 24.992 24.994 65.516 0 90.51l-320 320c-24.994 24.992-65.516 24.992-90.51 0-24.994-24.994-24.994-65.516 0-90.51l210.746-210.746h-613.49c-35.346 0-64-28.654-64-64s28.654-64 64-64h613.49l-210.746-210.746c-12.496-12.496-18.744-28.876-18.744-45.254s6.248-32.758 18.744-45.254c24.994-24.994 65.516-24.994 90.51 0z" />
327<glyph unicode="&#xea3d;" glyph-name="arrow-down-right2" d="M146.746 722.746l530.742-530.746h-229.488c-35.346 0-64-28.654-64-64s28.654-64 64-64h384c25.884 0 49.222 15.594 59.126 39.508 3.284 7.924 4.84 16.242 4.838 24.492h0.036v384c0 35.346-28.654 64-64 64-35.348 0-64-28.654-64-64v-229.49l-530.746 530.744c-12.496 12.498-28.874 18.746-45.254 18.746s-32.758-6.248-45.254-18.746c-24.994-24.992-24.994-65.516 0-90.508z" />
328<glyph unicode="&#xea3e;" glyph-name="arrow-down2" d="M877.254 338.746l-320-320c-24.992-24.994-65.514-24.994-90.508 0l-320 320c-24.994 24.994-24.994 65.516 0 90.51 24.994 24.996 65.516 24.996 90.51 0l210.744-210.746v613.49c0 35.346 28.654 64 64 64s64-28.654 64-64v-613.49l210.746 210.746c12.496 12.496 28.876 18.744 45.254 18.744s32.758-6.248 45.254-18.746c24.994-24.994 24.994-65.514 0-90.508z" />
329<glyph unicode="&#xea3f;" glyph-name="arrow-down-left2" d="M786.744 813.256l-530.744-530.744v229.49c0 35.346-28.654 64-64 64s-64-28.654-64-64v-384.002c0-25.886 15.592-49.222 39.508-59.128 7.924-3.282 16.242-4.84 24.492-4.836v-0.036l384 0.002c35.344 0 64 28.654 64 63.998 0 35.348-28.656 64-64 64h-229.49l530.744 530.746c12.496 12.496 18.746 28.876 18.746 45.256 0 16.376-6.25 32.758-18.746 45.254-24.992 24.992-65.518 24.992-90.51 0v0z" />
330<glyph unicode="&#xea40;" glyph-name="arrow-left2" d="M402.746 82.746l-320 320c-24.994 24.992-24.994 65.516 0 90.51l320 320c24.994 24.992 65.516 24.992 90.51 0 24.994-24.994 24.994-65.516 0-90.51l-210.746-210.746h613.49c35.346 0 64-28.654 64-64s-28.654-64-64-64h-613.49l210.746-210.746c12.496-12.496 18.744-28.876 18.744-45.254s-6.248-32.758-18.744-45.254c-24.994-24.994-65.516-24.994-90.51 0z" />
331<glyph unicode="&#xea41;" glyph-name="circle-up" d="M0 448c0-282.77 229.23-512 512-512s512 229.23 512 512-229.23 512-512 512-512-229.23-512-512zM928 448c0-229.75-186.25-416-416-416s-416 186.25-416 416 186.25 416 416 416 416-186.25 416-416zM706.744 290.744l90.512 90.512-285.256 285.254-285.254-285.256 90.508-90.508 194.746 194.744z" />
332<glyph unicode="&#xea42;" glyph-name="circle-right" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM354.744 253.256l90.512-90.512 285.254 285.256-285.256 285.254-90.508-90.508 194.744-194.746z" />
333<glyph unicode="&#xea43;" glyph-name="circle-down" d="M1024 448c0 282.77-229.23 512-512 512s-512-229.23-512-512 229.23-512 512-512 512 229.23 512 512zM96 448c0 229.75 186.25 416 416 416s416-186.25 416-416-186.25-416-416-416-416 186.25-416 416zM317.256 605.256l-90.512-90.512 285.256-285.254 285.254 285.256-90.508 90.508-194.746-194.744z" />
334<glyph unicode="&#xea44;" glyph-name="circle-left" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM669.256 642.744l-90.512 90.512-285.254-285.256 285.256-285.254 90.508 90.508-194.744 194.746z" />
335<glyph unicode="&#xea45;" glyph-name="tab" d="M960 960h64v-512h-64v512zM0 448h64v-512h-64v512zM320 256h704v-128h-704v-160l-224 224 224 224v-160zM704 640h-704v128h704v160l224-224-224-224z" />
336<glyph unicode="&#xea46;" glyph-name="move-up" d="M704 448v-384h64v384h160l-192 192-192-192zM64 768h96v-64h-96v64zM192 768h96v-64h-96v64zM320 768h64v-96h-64v96zM64 544h64v-96h-64v96zM160 512h96v-64h-96v64zM288 512h96v-64h-96v64zM64 672h64v-96h-64v96zM320 640h64v-96h-64v96zM320 256v-192h-192v192h192zM384 320h-320v-320h320v320z" />
337<glyph unicode="&#xea47;" glyph-name="move-down" d="M768 256v384h-64v-384h-160l192-192 192 192zM320 704v-192h-192v192h192zM384 768h-320v-320h320v320zM64 320h96v-64h-96v64zM192 320h96v-64h-96v64zM320 320h64v-96h-64v96zM64 96h64v-96h-64v96zM160 64h96v-64h-96v64zM288 64h96v-64h-96v64zM64 224h64v-96h-64v96zM320 192h64v-96h-64v96z" />
338<glyph unicode="&#xea48;" glyph-name="sort-alpha-asc" d="M320 192v768h-128v-768h-160l224-224 224 224h-160zM928-64h-256c-11.8 0-22.644 6.496-28.214 16.9-5.566 10.404-4.958 23.030 1.59 32.85l222.832 334.25h-196.208c-17.672 0-32 14.328-32 32s14.328 32 32 32h256c11.8 0 22.644-6.496 28.214-16.9 5.566-10.404 4.958-23.030-1.59-32.85l-222.83-334.25h196.206c17.672 0 32-14.328 32-32s-14.328-32-32-32zM1020.622 558.314l-192.002 384c-5.42 10.842-16.502 17.69-28.622 17.69-12.122 0-23.202-6.848-28.624-17.69l-191.996-384c-7.904-15.806-1.496-35.030 14.31-42.932 4.594-2.296 9.476-3.386 14.288-3.386 11.736 0 23.040 6.484 28.644 17.698l55.156 110.31h216.446l55.156-110.31c7.902-15.806 27.124-22.21 42.932-14.31 15.808 7.902 22.216 27.124 14.312 42.93zM723.778 704.004l76.22 152.446 76.224-152.446h-152.444z" />
339<glyph unicode="&#xea49;" glyph-name="sort-alpha-desc" d="M320 192v768h-128v-768h-160l224-224 224 224h-160zM928 512h-256c-11.8 0-22.644 6.496-28.214 16.9-5.566 10.406-4.958 23.030 1.59 32.85l222.832 334.25h-196.208c-17.672 0-32 14.328-32 32s14.328 32 32 32h256c11.8 0 22.644-6.496 28.214-16.9 5.566-10.406 4.958-23.030-1.59-32.85l-222.83-334.25h196.206c17.672 0 32-14.328 32-32s-14.328-32-32-32zM1020.622-17.69l-192.002 384c-5.42 10.842-16.502 17.69-28.622 17.69-12.122 0-23.202-6.848-28.624-17.69l-191.996-384c-7.904-15.806-1.496-35.030 14.31-42.932 4.594-2.296 9.476-3.386 14.288-3.386 11.736 0 23.040 6.484 28.644 17.698l55.158 110.31h216.446l55.156-110.31c7.902-15.806 27.124-22.21 42.932-14.31 15.806 7.902 22.214 27.124 14.31 42.93zM723.778 128l76.22 152.446 76.226-152.446h-152.446z" />
340<glyph unicode="&#xea4a;" glyph-name="sort-numeric-asc" d="M320 192v768h-128v-768h-160l224-224 224 224h-160zM864 512c-17.674 0-32 14.328-32 32v352h-32c-17.674 0-32 14.328-32 32s14.326 32 32 32h64c17.674 0 32-14.328 32-32v-384c0-17.672-14.326-32-32-32zM928 384h-192c-17.674 0-32-14.326-32-32v-192c0-17.674 14.326-32 32-32h160v-128h-160c-17.674 0-32-14.326-32-32s14.326-32 32-32h192c17.674 0 32 14.326 32 32v384c0 17.674-14.326 32-32 32zM768 320h128v-128h-128v128z" />
341<glyph unicode="&#xea4b;" glyph-name="sort-numberic-desc" d="M320 192v768h-128v-768h-160l224-224 224 224h-160zM864-64c-17.674 0-32 14.328-32 32v352h-32c-17.674 0-32 14.328-32 32s14.326 32 32 32h64c17.674 0 32-14.328 32-32v-384c0-17.672-14.326-32-32-32zM928 960h-192c-17.674 0-32-14.326-32-32v-192c0-17.674 14.326-32 32-32h160v-128h-160c-17.674 0-32-14.326-32-32s14.326-32 32-32h192c17.674 0 32 14.326 32 32v384c0 17.674-14.326 32-32 32zM768 896h128v-128h-128v128z" />
342<glyph unicode="&#xea4c;" glyph-name="sort-amount-asc" d="M320 192v768h-128v-768h-160l224-224 224 224h-160zM448 384h576v-128h-576v128zM448 576h448v-128h-448v128zM448 768h320v-128h-320v128zM448 960h192v-128h-192v128z" />
343<glyph unicode="&#xea4d;" glyph-name="sort-amount-desc" d="M320 192v768h-128v-768h-160l224-224 224 224h-160zM448 960h576v-128h-576v128zM448 768h448v-128h-448v128zM448 576h320v-128h-320v128zM448 384h192v-128h-192v128z" />
344<glyph unicode="&#xea4e;" glyph-name="command" d="M736 64c-88.224 0-160 71.776-160 160v96h-128v-96c0-88.224-71.776-160-160-160s-160 71.776-160 160 71.776 160 160 160h96v128h-96c-88.224 0-160 71.776-160 160s71.776 160 160 160 160-71.776 160-160v-96h128v96c0 88.224 71.776 160 160 160s160-71.776 160-160-71.776-160-160-160h-96v-128h96c88.224 0 160-71.776 160-160s-71.774-160-160-160zM640 320v-96c0-52.934 43.066-96 96-96s96 43.066 96 96-43.066 96-96 96h-96zM288 320c-52.934 0-96-43.066-96-96s43.066-96 96-96 96 43.066 96 96v96h-96zM448 384h128v128h-128v-128zM640 576h96c52.934 0 96 43.066 96 96s-43.066 96-96 96-96-43.066-96-96v-96zM288 768c-52.934 0-96-43.066-96-96s43.066-96 96-96h96v96c0 52.934-43.064 96-96 96z" />
345<glyph unicode="&#xea4f;" glyph-name="shift" d="M672 64h-320c-17.672 0-32 14.326-32 32v352h-128c-12.942 0-24.612 7.796-29.564 19.754-4.954 11.958-2.214 25.722 6.936 34.874l320 320c12.498 12.496 32.758 12.496 45.254 0l320-320c9.152-9.152 11.89-22.916 6.938-34.874s-16.62-19.754-29.564-19.754h-128v-352c0-17.674-14.326-32-32-32zM384 128h256v352c0 17.672 14.326 32 32 32h82.744l-242.744 242.746-242.744-242.746h82.744c17.672 0 32-14.328 32-32v-352z" />
346<glyph unicode="&#xea50;" glyph-name="ctrl" d="M736.014 512c-8.908 0-17.77 3.698-24.096 10.928l-199.918 228.478-199.918-228.478c-11.636-13.3-31.856-14.65-45.154-3.010-13.3 11.638-14.648 31.854-3.010 45.154l224 256c6.076 6.944 14.854 10.928 24.082 10.928s18.006-3.984 24.082-10.928l224-256c11.638-13.3 10.292-33.516-3.010-45.154-6.070-5.312-13.582-7.918-21.058-7.918z" />
347<glyph unicode="&#xea51;" glyph-name="opt" d="M928 128h-256c-12.646 0-24.106 7.448-29.242 19.004l-247.554 556.996h-299.204c-17.672 0-32 14.328-32 32s14.328 32 32 32h320c12.646 0 24.106-7.448 29.242-19.004l247.556-556.996h235.202c17.674 0 32-14.326 32-32s-14.326-32-32-32zM928 704h-320c-17.674 0-32 14.328-32 32s14.326 32 32 32h320c17.674 0 32-14.328 32-32s-14.326-32-32-32z" />
348<glyph unicode="&#xea52;" glyph-name="checkbox-checked" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM448 165.49l-237.254 237.256 90.51 90.508 146.744-146.744 306.746 306.746 90.508-90.51-397.254-397.256z" />
349<glyph unicode="&#xea53;" glyph-name="checkbox-unchecked" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM896 64h-768v768h768v-768z" />
350<glyph unicode="&#xea54;" glyph-name="radio-checked" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 64c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384s-171.922-384-384-384zM320 448c0 106.039 85.961 192 192 192s192-85.961 192-192c0-106.039-85.961-192-192-192s-192 85.961-192 192z" />
351<glyph unicode="&#xea55;" glyph-name="radio-checked2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 320c-70.692 0-128 57.306-128 128 0 70.692 57.308 128 128 128 70.694 0 128-57.308 128-128 0-70.694-57.306-128-128-128z" />
352<glyph unicode="&#xea56;" glyph-name="radio-unchecked" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 64c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384s-171.922-384-384-384z" />
353<glyph unicode="&#xea57;" glyph-name="crop" d="M832 704l192 192-64 64-192-192h-448v192h-128v-192h-192v-128h192v-512h512v-192h128v192h192v128h-192v448zM320 640h320l-320-320v320zM384 256l320 320v-320h-320z" />
354<glyph unicode="&#xea58;" glyph-name="make-group" d="M320 832h-128c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64h128c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64zM704 576h128c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64zM704 768h128v-128h-128v128zM320 320h-128c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64h128c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64zM320 128h-128v128h128v-128zM832 320h-128c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64h128c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64zM896 448h-64c-85.476 0-165.834 33.286-226.274 93.724-60.44 60.442-93.726 140.802-93.726 226.276v64c0 70.4-57.6 128-128 128h-256c-70.4 0-128-57.6-128-128v-256c0-70.4 57.6-128 128-128h64c85.476 0 165.834-33.286 226.274-93.724 60.44-60.442 93.726-140.802 93.726-226.276v-64c0-70.4 57.6-128 128-128h256c70.4 0 128 57.6 128 128v256c0 70.4-57.6 128-128 128zM960 64c0-16.954-6.696-32.986-18.856-45.144-12.158-12.16-28.19-18.856-45.144-18.856h-256c-16.954 0-32.986 6.696-45.144 18.856-12.16 12.158-18.856 28.19-18.856 45.144v64c0 212.078-171.922 384-384 384h-64c-16.954 0-32.986 6.696-45.146 18.854-12.158 12.16-18.854 28.192-18.854 45.146v256c0 16.954 6.696 32.986 18.854 45.146 12.16 12.158 28.192 18.854 45.146 18.854h256c16.954 0 32.986-6.696 45.146-18.854 12.158-12.16 18.854-28.192 18.854-45.146v-64c0-212.078 171.922-384 384-384h64c16.954 0 32.986-6.696 45.144-18.856 12.16-12.158 18.856-28.19 18.856-45.144v-256z" />
355<glyph unicode="&#xea59;" glyph-name="ungroup" d="M384 496c0-26.4-21.6-48-48-48h-96c-26.4 0-48 21.6-48 48v96c0 26.4 21.6 48 48 48h96c26.4 0 48-21.6 48-48v-96zM704 496c0-26.4-21.6-48-48-48h-96c-26.4 0-48 21.6-48 48v96c0 26.4 21.6 48 48 48h96c26.4 0 48-21.6 48-48v-96zM384 176c0-26.4-21.6-48-48-48h-96c-26.4 0-48 21.6-48 48v96c0 26.4 21.6 48 48 48h96c26.4 0 48-21.6 48-48v-96zM704 176c0-26.4-21.6-48-48-48h-96c-26.4 0-48 21.6-48 48v96c0 26.4 21.6 48 48 48h96c26.4 0 48-21.6 48-48v-96zM912.082 800l111.918 111.916v48.084h-48.082l-111.918-111.916-111.918 111.916h-48.082v-48.084l111.918-111.916-111.918-111.916v-48.084h48.082l111.918 111.916 111.918-111.916h48.082v48.084zM0 192h64v-128h-64v128zM0 384h64v-128h-64v128zM832 512h64v-128h-64v128zM832 128h64v-128h-64v128zM832 320h64v-128h-64v128zM0 576h64v-128h-64v128zM0 768h64v-128h-64v128zM512 832h128v-64h-128v64zM320 832h128v-64h-128v64zM128 832h128v-64h-128v64zM448 0h128v-64h-128v64zM640 0h128v-64h-128v64zM256 0h128v-64h-128v64zM64 0h128v-64h-128v64z" />
356<glyph unicode="&#xea5a;" glyph-name="scissors" d="M913.826 280.306c-66.684 104.204-181.078 150.064-255.51 102.434-6.428-4.116-12.334-8.804-17.744-13.982l-79.452 124.262 183.462 287.972c15.016 27.73 20.558 60.758 13.266 93.974-6.972 31.75-24.516 58.438-48.102 77.226l-12.278 7.808-217.468-340.114-217.47 340.114-12.276-7.806c-23.586-18.79-41.13-45.476-48.1-77.226-7.292-33.216-1.75-66.244 13.264-93.974l183.464-287.972-79.454-124.262c-5.41 5.178-11.316 9.868-17.744 13.982-74.432 47.63-188.826 1.77-255.51-102.434-66.68-104.2-60.398-227.286 14.032-274.914 74.43-47.632 188.824-1.77 255.508 102.432l164.286 257.87 164.288-257.872c66.684-104.202 181.078-150.064 255.508-102.432 74.428 47.63 80.71 170.716 14.030 274.914zM234.852 159.57c-30.018-46.904-68.534-69.726-94.572-75.446-0.004 0-0.004 0-0.004 0-8.49-1.868-20.294-3.010-28.324 2.128-8.898 5.694-14.804 20.748-15.8 40.276-1.616 31.644 9.642 68.836 30.888 102.034 30.014 46.906 68.53 69.726 94.562 75.444 8.496 1.866 20.308 3.010 28.336-2.126 8.898-5.694 14.802-20.75 15.798-40.272 1.618-31.65-9.64-68.84-30.884-102.038zM480 448c-17.672 0-32 14.328-32 32s14.328 32 32 32 32-14.328 32-32-14.328-32-32-32zM863.85 126.53c-0.996-19.528-6.902-34.582-15.8-40.276-8.030-5.138-19.834-3.996-28.324-2.128 0 0 0 0-0.004 0-26.040 5.718-64.554 28.542-94.572 75.446-21.244 33.198-32.502 70.388-30.884 102.038 0.996 19.522 6.9 34.578 15.798 40.272 8.028 5.136 19.84 3.992 28.336 2.126 26.034-5.716 64.548-28.538 94.562-75.444 21.246-33.198 32.502-70.39 30.888-102.034z" />
357<glyph unicode="&#xea5b;" glyph-name="filter" d="M512 960c-282.77 0-512-71.634-512-160v-96l384-384v-320c0-35.346 57.306-64 128-64 70.692 0 128 28.654 128 64v320l384 384v96c0 88.366-229.23 160-512 160zM94.384 821.176c23.944 13.658 57.582 26.62 97.278 37.488 87.944 24.076 201.708 37.336 320.338 37.336 118.628 0 232.394-13.26 320.338-37.336 39.696-10.868 73.334-23.83 97.28-37.488 15.792-9.006 24.324-16.624 28.296-21.176-3.972-4.552-12.506-12.168-28.296-21.176-23.946-13.658-57.584-26.62-97.28-37.488-87.942-24.076-201.708-37.336-320.338-37.336s-232.394 13.26-320.338 37.336c-39.696 10.868-73.334 23.83-97.278 37.488-15.792 9.008-24.324 16.624-28.298 21.176 3.974 4.552 12.506 12.168 28.298 21.176z" />
358<glyph unicode="&#xea5c;" glyph-name="font" d="M799.596 943.792c-90.526 0-148.62 16.208-241.848 16.208-301.284 0-441.792-171.584-441.792-345.872 0-102.678 48.64-136.458 144.564-136.458-6.758 14.864-18.914 31.080-18.914 104.034 0 204.010 77.006 263.458 175.636 267.51 0 0-80.918-793.374-315.778-888.542v-24.672h316.594l108.026 512h197.844l44.072 128h-214.908l51.944 246.19c59.446-12.156 117.542-24.316 167.532-24.316 62.148 0 118.894 18.914 149.968 162.126-37.826-12.16-78.362-16.208-122.94-16.208z" />
359<glyph unicode="&#xea5d;" glyph-name="ligature" d="M768 88.178c0 0.040 0.002 0.076 0.002 0.116l-0.344 436.562-127.492-6.19h-251.93v21.494c0 81.542 5.8 162.976 17.24 194.716 7.896 21.948 22.598 41.744 43.698 58.836 20.618 16.702 41.178 25.17 61.11 25.17 16.772 0 30.702-2.878 41.402-8.554 15.026-8.562 29.716-22.964 43.67-42.818 36.95-52.504 51.99-66.454 60.094-72.376 13.804-10.094 30.512-15.212 49.658-15.212 18.668 0 34.962 6.97 48.436 20.714 13.372 13.636 20.15 30.682 20.15 50.666 0 21.452-8.916 44.204-26.502 67.622-17.184 22.888-43.708 41.742-78.834 56.032-34.322 13.964-72.94 21.044-114.778 21.044-60.716 0-116.012-14.596-164.356-43.384-48.424-28.834-85.558-68.952-110.37-119.24-22.994-46.604-21.334-134.706-22.732-214.712h-125.732v-71.402h125.598v-324.668c0-71.666-21.906-91.008-30.216-101.324-11.436-14.202-32.552-29.104-60.444-29.104h-38.654v-56.166h385.326v56.168h-6.708c-91.144 0-117.020 9.832-117.020 120.842 0 0.018 0 0.034 0 0.048l-0.038 334.206h140.204c74.404 0 91.496-3.444 95.392-4.924 4.706-1.79 10.798-4.832 13.084-9.144 0.868-1.684 5.194-25.008 5.194-82.972v-250.67c0-58.454-7.124-77.896-11.45-84.402-9.248-14.194-20.41-22.066-54.66-22.904v-56.248h293.61v55.846c-91.608 0-101.608 9.82-101.608 96.332z" />
360<glyph unicode="&#xea5e;" glyph-name="ligature2" d="M855.328 42.546c-11.734 0-83.62 13.2-88.020 29.338-10.274 39.612-11.738 82.152-11.738 130.568v540.974c0 80.686 16.138 127.632 16.138 127.632-1.468 7.334-8.804 23.472-17.604 23.472h-4.404c-4.4 0-55.746-32.276-102.692-32.276-38.14 0.002-61.89 33.746-105.902 33.746-185.106 0-271.942-150.31-271.942-363.032v-11.072c0-4.402-2.934-8.804-7.336-8.804h-60.148c-7.336 0-22.006-41.078-22.006-60.148 0-5.87 1.466-8.8 4.4-8.8h77.754c4.402 0 7.336-5.872 7.336-10.27 0-130.566-1.466-259.298-1.466-259.298 0-20.54-1.466-66.016-10.27-102.692-4.4-16.138-71.884-29.338-89.488-29.338-7.334 0-7.334-35.212 0-42.546 60.148 2.934 99.758 7.334 159.908 7.334 55.75 0 98.292-4.4 156.974-7.334 2.934 8.802 2.934 42.546-4.4 42.546-11.736 0-83.624 13.2-88.022 29.338-10.27 39.612-10.27 82.152-11.738 130.568v232.888c0 4.402 4.402 8.804 8.802 8.804h151.104c10.27 20.538 17.606 45.476 17.606 58.68 0 8.802 0 10.27-7.336 10.27h-162.84c-2.934 0-7.336 4.402-7.336 7.334v52.82c0 130.568 53.482 245.538 142.97 245.538 63.372 0 118.666-41.060 118.666-197.922 0-0.006 0-0.012 0-0.018 0.208-4.036 0.314-7.294 0.314-9.452v-436.816c0-20.54-1.47-66.016-10.27-102.692-4.404-16.138-71.884-29.338-89.492-29.338-7.336 0-7.336-35.212 0-42.546 60.15 2.934 99.762 7.334 159.912 7.334 55.746 0 98.288-4.4 156.972-7.334 2.928 8.8 2.928 42.544-4.406 42.544z" />
361<glyph unicode="&#xea5f;" glyph-name="text-height" d="M896 192h128l-160-192-160 192h128v512h-128l160 192 160-192h-128zM640 896v-256l-64 128h-192v-704h128v-64h-384v64h128v704h-192l-64-128v256z" />
362<glyph unicode="&#xea60;" glyph-name="text-width" d="M256 64v-128l-192 160 192 160v-128h512v128l192-160-192-160v128zM832 896v-256l-64 128h-192v-448h128v-64h-384v64h128v448h-192l-64-128v256z" />
363<glyph unicode="&#xea61;" glyph-name="font-size" d="M64 448h384v-128h-128v-384h-128v384h-128zM960 704h-251.75v-768h-136.5v768h-251.75v128h640z" />
364<glyph unicode="&#xea62;" glyph-name="bold" d="M707.88 475.348c37.498 44.542 60.12 102.008 60.12 164.652 0 141.16-114.842 256-256 256h-320v-896h384c141.158 0 256 114.842 256 256 0 92.956-49.798 174.496-124.12 219.348zM384 768h101.5c55.968 0 101.5-57.42 101.5-128s-45.532-128-101.5-128h-101.5v256zM543 128h-159v256h159c58.45 0 106-57.42 106-128s-47.55-128-106-128z" />
365<glyph unicode="&#xea63;" glyph-name="underline" d="M704 896h128v-416c0-159.058-143.268-288-320-288-176.73 0-320 128.942-320 288v416h128v-416c0-40.166 18.238-78.704 51.354-108.506 36.896-33.204 86.846-51.494 140.646-51.494s103.75 18.29 140.646 51.494c33.116 29.802 51.354 68.34 51.354 108.506v416zM192 128h640v-128h-640z" />
366<glyph unicode="&#xea64;" glyph-name="italic" d="M896 896v-64h-128l-320-768h128v-64h-448v64h128l320 768h-128v64z" />
367<glyph unicode="&#xea65;" glyph-name="strikethrough" d="M1024 448v-64h-234.506c27.504-38.51 42.506-82.692 42.506-128 0-70.878-36.66-139.026-100.58-186.964-59.358-44.518-137.284-69.036-219.42-69.036-82.138 0-160.062 24.518-219.42 69.036-63.92 47.938-100.58 116.086-100.58 186.964h128c0-69.382 87.926-128 192-128s192 58.618 192 128c0 69.382-87.926 128-192 128h-512v64h299.518c-2.338 1.654-4.656 3.324-6.938 5.036-63.92 47.94-100.58 116.086-100.58 186.964s36.66 139.024 100.58 186.964c59.358 44.518 137.282 69.036 219.42 69.036 82.136 0 160.062-24.518 219.42-69.036 63.92-47.94 100.58-116.086 100.58-186.964h-128c0 69.382-87.926 128-192 128s-192-58.618-192-128c0-69.382 87.926-128 192-128 78.978 0 154.054-22.678 212.482-64h299.518z" />
368<glyph unicode="&#xea66;" glyph-name="omega" d="M704 64h256l64 128v-256h-384v214.214c131.112 56.484 224 197.162 224 361.786 0 214.432-157.598 382.266-352 382.266-194.406 0-352-167.832-352-382.266 0-164.624 92.886-305.302 224-361.786v-214.214h-384v256l64-128h256v32.59c-187.63 66.46-320 227.402-320 415.41 0 247.424 229.23 448 512 448s512-200.576 512-448c0-188.008-132.37-348.95-320-415.41v-32.59z" />
369<glyph unicode="&#xea67;" glyph-name="sigma" d="M941.606 225.292l44.394 94.708h38l-64-384h-960v74.242l331.546 391.212-331.546 331.546v227h980l44-256h-34.376l-18.72 38.88c-35.318 73.364-61.904 89.12-138.904 89.12h-662l353.056-353.056-297.42-350.944h542.364c116.008 0 146.648 41.578 173.606 97.292z" />
370<glyph unicode="&#xea68;" glyph-name="page-break" d="M0 448h128v-64h-128zM192 448h192v-64h-192zM448 448h128v-64h-128zM640 448h192v-64h-192zM896 448h128v-64h-128zM880 960l16-448h-768l16 448h32l16-384h640l16 384zM144-64l-16 384h768l-16-384h-32l-16 320h-640l-16-320z" />
371<glyph unicode="&#xea69;" glyph-name="superscript" d="M768 754v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
372<glyph unicode="&#xea6a;" glyph-name="subscript" d="M768 50v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
373<glyph unicode="&#xea6b;" glyph-name="superscript2" d="M194.018 128l57.6 192h264.764l57.6-192h113.632l-192 640h-223.232l-192-640h113.636zM347.618 640h72.764l57.6-192h-187.964l57.6 192zM704 128l160 256 160-256h-320zM864 832h-64c-17.644 0-32 14.356-32 32s14.356 32 32 32h128c17.674 0 32 14.328 32 32s-14.326 32-32 32h-128c-52.936 0-96-43.066-96-96 0-24.568 9.288-47.002 24.524-64 17.588-19.624 43.11-32 71.476-32h64c17.644 0 32-14.356 32-32s-14.356-32-32-32h-128c-17.674 0-32-14.328-32-32s14.326-32 32-32h128c52.936 0 96 43.066 96 96 0 24.568-9.288 47.002-24.524 64-17.588 19.624-43.108 32-71.476 32z" />
374<glyph unicode="&#xea6c;" glyph-name="subscript2" d="M194.018 128l57.6 192h264.764l57.6-192h113.632l-192 640h-223.232l-192-640h113.636zM347.618 640h72.764l57.6-192h-187.964l57.6 192zM1024 768l-160-256-160 256h320zM864 128h-64c-17.644 0-32 14.356-32 32s14.356 32 32 32h128c17.674 0 32 14.328 32 32s-14.326 32-32 32h-128c-52.936 0-96-43.066-96-96 0-24.568 9.29-47.002 24.524-64 17.588-19.624 43.112-32 71.476-32h64c17.644 0 32-14.356 32-32s-14.356-32-32-32h-128c-17.674 0-32-14.328-32-32s14.326-32 32-32h128c52.936 0 96 43.066 96 96 0 24.568-9.29 47.002-24.524 64-17.588 19.624-43.108 32-71.476 32z" />
375<glyph unicode="&#xea6d;" glyph-name="text-color" d="M322.018 128l57.6 192h264.764l57.6-192h113.632l-191.996 640h-223.236l-192-640h113.636zM475.618 640h72.764l57.6-192h-187.964l57.6 192z" />
376<glyph unicode="&#xea6e;" glyph-name="pagebreak" d="M256 576v384h768v-384h-64v320h-640v-320zM1024 384v-448h-768v448h64v-384h640v384zM512 512h128v-64h-128zM320 512h128v-64h-128zM704 512h128v-64h-128zM896 512h128v-64h-128zM0 672l192-192-192-192z" />
377<glyph unicode="&#xea6f;" glyph-name="clear-formatting" d="M0 64h576v-128h-576zM896 832h-302.56l-183.764-704h-132.288l183.762 704h-269.15v128h704zM929.774-64l-129.774 129.774-129.774-129.774-62.226 62.226 129.774 129.774-129.774 129.774 62.226 62.226 129.774-129.774 129.774 129.774 62.226-62.226-129.774-129.774 129.774-129.774z" />
378<glyph unicode="&#xea70;" glyph-name="table" d="M0 768v-704h1024v704h-1024zM384 320v128h256v-128h-256zM640 256v-128h-256v128h256zM640 640v-128h-256v128h256zM320 640v-128h-256v128h256zM64 448h256v-128h-256v128zM704 448h256v-128h-256v128zM704 512v128h256v-128h-256zM64 256h256v-128h-256v128zM704 128v128h256v-128h-256z" />
379<glyph unicode="&#xea71;" glyph-name="table2" d="M0 896v-896h1024v896h-1024zM384 320v192h256v-192h-256zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
380<glyph unicode="&#xea72;" glyph-name="insert-template" d="M384 768h128v-64h-128zM576 768h128v-64h-128zM896 768v-256h-192v64h128v128h-64v64zM320 576h128v-64h-128zM512 576h128v-64h-128zM192 704v-128h64v-64h-128v256h192v-64zM384 384h128v-64h-128zM576 384h128v-64h-128zM896 384v-256h-192v64h128v128h-64v64zM320 192h128v-64h-128zM512 192h128v-64h-128zM192 320v-128h64v-64h-128v256h192v-64zM960 896h-896v-896h896v896zM1024 960v0-1024h-1024v1024h1024z" />
381<glyph unicode="&#xea73;" glyph-name="pilcrow" d="M384 960h512v-128h-128v-896h-128v896h-128v-896h-128v512c-141.384 0-256 114.616-256 256s114.616 256 256 256z" />
382<glyph unicode="&#xea74;" glyph-name="ltr" d="M512 960c-141.384 0-256-114.616-256-256s114.616-256 256-256v-512h128v896h128v-896h128v896h128v128h-512zM0 256l256 256-256 256z" />
383<glyph unicode="&#xea75;" glyph-name="rtl" d="M256 960c-141.384 0-256-114.616-256-256s114.616-256 256-256v-512h128v896h128v-896h128v896h128v128h-512zM1024 768l-256-256 256-256z" />
384<glyph unicode="&#xea76;" glyph-name="section" d="M495.964-64c-49.36 0-91.116 14.406-124.104 42.82-33.224 28.614-50.068 62.038-50.068 99.344 0 18.128 6.6 33.756 19.622 46.458 13.232 12.914 29.782 19.744 47.85 19.744 18.002 0 34.194-6.41 46.826-18.542 12.472-11.972 18.796-27.824 18.796-47.104 0-11.318-1.85-23.818-5.494-37.146-3.616-13.178-4.376-19.938-4.376-23.292 0-3.682 0.924-8.076 7.774-12.756 12.76-8.824 28.066-13.084 46.876-13.084 22.576 0 42.718 7.858 61.574 24.022 18.578 15.942 27.612 32.318 27.612 50.056 0 19.736-5.27 36.826-16.12 52.242-18.336 25.758-52.878 55.954-102.612 89.668-79.858 53.454-133.070 99.766-162.58 141.52-22.89 32.684-34.476 67.89-34.476 104.704 0 37.062 12.142 73.948 36.092 109.63 20.508 30.554 50.8 58.12 90.228 82.138-21.096 22.7-36.896 44.064-47.094 63.688-12.872 24.76-19.398 50.372-19.398 76.122 0 47.814 18.91 89.16 56.206 122.89 37.32 33.76 83.86 50.878 138.322 50.878 50.086 0 92.206-14.082 125.182-41.852 33.328-28.082 50.222-60.898 50.222-97.54 0-18.656-6.986-35.364-20.766-49.66l-0.276-0.282c-7.976-7.924-22.618-17.37-47.046-17.37-19.148 0-35.934 6.272-48.54 18.136-12.558 11.794-18.93 25.918-18.93 41.966 0 6.934 1.702 17.416 5.352 32.98 1.778 7.364 2.668 14.142 2.668 20.25 0 10.338-3.726 18.272-11.724 24.966-8.282 6.93-20.108 10.302-36.142 10.302-24.868 0-45.282-7.562-62.41-23.118-17.19-15.606-25.544-34.088-25.544-56.508 0-20.156 4.568-36.762 13.58-49.362 17.112-23.938 46.796-49.79 88.22-76.836 84.17-54.588 142.902-104.672 174.518-148.826 23.35-33.12 35.152-68.34 35.152-104.792 0-36.598-11.882-73.496-35.318-109.676-20.208-31.18-50.722-59.276-90.884-83.71 22.178-23.466 37.812-44.042 47.554-62.538 12.082-22.97 18.208-48.048 18.208-74.542 0-49.664-18.926-91.862-56.244-125.422-37.34-33.554-83.866-50.566-138.288-50.566zM446.416 603.654c-48.222-28.952-71.712-62.19-71.712-101.314 0-22.756 6.498-43.13 19.86-62.278 19.936-27.926 59.27-62.054 116.804-101.288 24.358-16.586 46.36-32.712 65.592-48.060 49.060 29.504 72.956 62.366 72.956 100.178 0 20.598-8.142 42.774-24.204 65.916-16.808 24.196-52.85 55.796-107.128 93.914-28.328 19.562-52.558 37.334-72.168 52.932z" />
385<glyph unicode="&#xea77;" glyph-name="paragraph-left" d="M0 896h1024v-128h-1024zM0 704h640v-128h-640zM0 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
386<glyph unicode="&#xea78;" glyph-name="paragraph-center" d="M0 896h1024v-128h-1024zM192 704h640v-128h-640zM192 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
387<glyph unicode="&#xea79;" glyph-name="paragraph-right" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
388<glyph unicode="&#xea7a;" glyph-name="paragraph-justify" d="M0 896h1024v-128h-1024zM0 704h1024v-128h-1024zM0 512h1024v-128h-1024zM0 320h1024v-128h-1024zM0 128h1024v-128h-1024z" />
389<glyph unicode="&#xea7b;" glyph-name="indent-increase" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM0 256v384l256-192z" />
390<glyph unicode="&#xea7c;" glyph-name="indent-decrease" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM256 640v-384l-256 192z" />
391<glyph unicode="&#xea7d;" glyph-name="share" d="M256 320c0 0 58.824 192 384 192v-192l384 256-384 256v-192c-256 0-384-159.672-384-320zM704 192h-576v384h125.876c10.094 11.918 20.912 23.334 32.488 34.18 43.964 41.19 96.562 72.652 156.114 93.82h-442.478v-640h832v268.624l-128-85.334v-55.29z" />
392<glyph unicode="&#xea7e;" glyph-name="new-tab" d="M192 896v-768h768v768h-768zM896 192h-640v640h640v-640zM128 64v672l-64 64v-800h800l-64 64h-672zM352 704l160-160-192-192 96-96 192 192 160-160v416z" />
393<glyph unicode="&#xea7f;" glyph-name="embed" d="M576 224l96-96 320 320-320 320-96-96 224-224zM448 672l-96 96-320-320 320-320 96 96-224 224z" />
394<glyph unicode="&#xea80;" glyph-name="embed2" horiz-adv-x="1280" d="M832 224l96-96 320 320-320 320-96-96 224-224zM448 672l-96 96-320-320 320-320 96 96-224 224zM701.298 809.481l69.468-18.944-191.987-704.026-69.468 18.944 191.987 704.026z" />
395<glyph unicode="&#xea81;" glyph-name="terminal" d="M0 896v-896h1024v896h-1024zM960 64h-896v768h896v-768zM896 768h-768v-640h768v640zM448 448h-64v-64h-64v-64h-64v64h64v64h64v64h-64v64h-64v64h64v-64h64v-64h64v-64zM704 320h-192v64h192v-64z" />
396<glyph unicode="&#xea82;" glyph-name="share2" d="M864 256c-45.16 0-85.92-18.738-115.012-48.83l-431.004 215.502c1.314 8.252 2.016 16.706 2.016 25.328s-0.702 17.076-2.016 25.326l431.004 215.502c29.092-30.090 69.852-48.828 115.012-48.828 88.366 0 160 71.634 160 160s-71.634 160-160 160-160-71.634-160-160c0-8.622 0.704-17.076 2.016-25.326l-431.004-215.504c-29.092 30.090-69.852 48.83-115.012 48.83-88.366 0-160-71.636-160-160 0-88.368 71.634-160 160-160 45.16 0 85.92 18.738 115.012 48.828l431.004-215.502c-1.312-8.25-2.016-16.704-2.016-25.326 0-88.368 71.634-160 160-160s160 71.632 160 160c0 88.364-71.634 160-160 160z" />
397<glyph unicode="&#xea83;" glyph-name="mail" d="M853.31 960h-682.62c-93.88 0-170.69-76.784-170.69-170.658v-682.656c0-93.876 76.81-170.686 170.69-170.686h682.622c93.938 0 170.688 76.81 170.688 170.686v682.656c0 93.874-76.75 170.658-170.69 170.658zM256 704h512c9.138 0 18.004-1.962 26.144-5.662l-282.144-329.168-282.144 329.17c8.14 3.696 17.006 5.66 26.144 5.66zM192 256v384c0 1.34 0.056 2.672 0.14 4l187.664-218.94-185.598-185.6c-1.444 5.338-2.206 10.886-2.206 16.54zM768 192h-512c-5.654 0-11.202 0.762-16.54 2.206l182.118 182.118 90.422-105.496 90.424 105.494 182.116-182.118c-5.34-1.442-10.886-2.204-16.54-2.204zM832 256c0-5.654-0.762-11.2-2.206-16.54l-185.598 185.598 187.664 218.942c0.084-1.328 0.14-2.66 0.14-4v-384z" />
398<glyph unicode="&#xea84;" glyph-name="mail2" d="M853.342 960h-682.656c-93.874 0-170.686-76.81-170.686-170.69v-682.622c0-93.938 76.812-170.688 170.686-170.688h682.656c93.876 0 170.658 76.75 170.658 170.69v682.62c0 93.88-76.782 170.69-170.658 170.69zM853.342 832c7.988 0 15.546-2.334 22.020-6.342l-363.362-300.404-363.354 300.4c6.478 4.010 14.044 6.346 22.040 6.346h682.656zM170.686 64c-1.924 0-3.82 0.146-5.684 0.408l225.626 312.966-29.256 29.254-233.372-233.37v611.138l384-464.396 384 464.394v-611.136l-233.372 233.37-29.254-29.254 225.628-312.968c-1.858-0.26-3.746-0.406-5.662-0.406h-682.654z" />
399<glyph unicode="&#xea85;" glyph-name="mail3" d="M853.342 960h-682.656c-93.874 0-170.686-76.81-170.686-170.69v-682.622c0-93.938 76.812-170.688 170.686-170.688h682.656c93.876 0 170.658 76.75 170.658 170.69v682.62c0 93.88-76.782 170.69-170.658 170.69zM182.628 73.374l-77.256 77.254 256 256 29.256-29.254-208-304zM153.372 761.372l29.256 29.256 329.372-265.374 329.374 265.374 29.254-29.256-358.628-422.626-358.628 422.626zM841.374 73.374l-208 304 29.254 29.254 256-256-77.254-77.254z" />
400<glyph unicode="&#xea86;" glyph-name="mail4" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM256 704h512c9.138 0 18.004-1.962 26.144-5.662l-282.144-329.168-282.144 329.17c8.14 3.696 17.006 5.66 26.144 5.66zM192 256v384c0 1.34 0.056 2.672 0.14 4l187.664-218.942-185.598-185.598c-1.444 5.336-2.206 10.886-2.206 16.54zM768 192h-512c-5.654 0-11.202 0.762-16.54 2.208l182.118 182.118 90.422-105.498 90.424 105.494 182.116-182.12c-5.34-1.44-10.886-2.202-16.54-2.202zM832 256c0-5.654-0.762-11.2-2.206-16.54l-185.6 185.598 187.666 218.942c0.084-1.328 0.14-2.66 0.14-4v-384z" />
401<glyph unicode="&#xea87;" glyph-name="google" d="M789.534 896c0 0-200.956 0-267.94 0-120.122 0-233.17-91.006-233.17-196.422 0-107.726 81.882-194.666 204.088-194.666 8.498 0 16.756 0.17 24.84 0.752-7.928-15.186-13.6-32.288-13.6-50.042 0-29.938 16.104-54.21 36.468-74.024-15.386 0-30.242-0.448-46.452-0.448-148.782 0.002-263.3-94.76-263.3-193.022 0-96.778 125.542-157.312 274.334-157.312 169.624 0 263.306 96.244 263.306 193.028 0 77.602-22.896 124.072-93.686 174.134-24.216 17.142-70.532 58.836-70.532 83.344 0 28.72 8.196 42.868 51.428 76.646 44.312 34.624 75.674 83.302 75.674 139.916 0 67.406-30.022 133.098-86.374 154.772h84.956l59.96 43.344zM695.948 240.542c2.126-8.972 3.284-18.208 3.284-27.628 0-78.2-50.39-139.31-194.974-139.31-102.842 0-177.116 65.104-177.116 143.3 0 76.642 92.126 140.444 194.964 139.332 24-0.254 46.368-4.116 66.668-10.69 55.828-38.828 95.876-60.76 107.174-105.004zM531.286 532.224c-69.038 2.064-134.636 77.226-146.552 167.86-11.916 90.666 34.37 160.042 103.388 157.99 69.008-2.074 134.636-74.814 146.558-165.458 11.906-90.66-34.39-162.458-103.394-160.392z" />
402<glyph unicode="&#xea88;" glyph-name="google-plus" d="M559.066 896c0 0-200.956 0-267.94 0-120.12 0-233.17-91.006-233.17-196.422 0-107.726 81.882-194.666 204.088-194.666 8.498 0 16.756 0.17 24.842 0.752-7.93-15.186-13.602-32.288-13.602-50.042 0-29.938 16.104-54.21 36.468-74.024-15.386 0-30.242-0.448-46.452-0.448-148.782 0.002-263.3-94.758-263.3-193.020 0-96.778 125.542-157.314 274.334-157.314 169.624 0 263.306 96.244 263.306 193.028 0 77.6-22.896 124.072-93.686 174.134-24.216 17.144-70.53 58.836-70.53 83.344 0 28.72 8.196 42.868 51.428 76.646 44.312 34.624 75.672 83.302 75.672 139.916 0 67.406-30.020 133.098-86.372 154.772h84.954l59.96 43.344zM465.48 240.542c2.126-8.972 3.284-18.206 3.284-27.628 0-78.2-50.392-139.31-194.974-139.31-102.842 0-177.116 65.104-177.116 143.3 0 76.642 92.126 140.444 194.964 139.332 24-0.254 46.368-4.116 66.67-10.69 55.826-38.826 95.876-60.762 107.172-105.004zM300.818 532.224c-69.038 2.064-134.636 77.226-146.552 167.86-11.916 90.666 34.37 160.042 103.388 157.99 69.010-2.074 134.638-74.814 146.558-165.458 11.906-90.66-34.39-162.458-103.394-160.392zM832 704v192h-64v-192h-192v-64h192v-192h64v192h192v64z" />
403<glyph unicode="&#xea89;" glyph-name="google-plus2" d="M0.806 90.336c-0.244 2.532-0.452 5.070-0.584 7.63 0.13-2.56 0.34-5.098 0.584-7.63zM235.908 394.852c92.010-2.738 153.734 92.698 137.862 213.198-15.894 120.48-103.396 217.168-195.408 219.922-92.026 2.73-153.74-89.482-137.852-210 15.882-120.468 103.352-220.374 195.398-223.12zM1024 704v85.31c0 93.88-76.782 170.69-170.658 170.69h-682.656c-92.276 0-168.012-74.232-170.564-165.926 58.362 51.386 139.324 94.316 222.874 94.316 89.304 0 357.244 0 357.244 0l-79.948-67.618h-113.268c75.13-28.804 115.156-116.124 115.156-205.722 0-75.248-41.81-139.954-100.888-185.968-57.644-44.902-68.572-63.708-68.572-101.878 0-32.578 61.746-88 94.032-110.788 94.382-66.538 124.916-128.312 124.916-231.456 0-16.428-2.042-32.83-6.066-48.96h307.742c93.874 0 170.656 76.75 170.656 170.69v533.308h-192v-191.998h-64v192h-191.998v64h191.998v192h64v-192h192zM185.886 194.064c21.614 0 41.422 0.59 61.936 0.59-27.146 26.334-48.626 58.6-48.626 98.38 0 23.608 7.564 46.336 18.134 66.52-10.782-0.77-21.79-0.994-33.126-0.994-74.356 0-137.506 24.076-184.204 63.854v-67.242l0.006-201.73c53.44 25.374 116.888 40.622 185.88 40.622zM3.42 72.742c-1.112 5.458-1.966 11.006-2.542 16.634 0.574-5.628 1.43-11.176 2.542-16.634zM455.45 7.154c-15.058 58.806-68.454 87.964-142.888 139.568-27.072 8.732-56.894 13.874-88.894 14.208-89.618 0.964-173.108-34.942-220.216-88.372 15.92-77.706 85.034-136.558 167.234-136.558h286.444c1.816 11.128 2.696 22.632 2.696 34.432 0 12.534-1.534 24.792-4.376 36.722z" />
404<glyph unicode="&#xea8a;" glyph-name="google-plus3" d="M437.006 141.838c0-75.068-46.39-134.392-177.758-139.176-76.984 43.786-141.49 106.952-186.908 182.866 23.69 58.496 97.692 103.046 182.316 102.114 24.022-0.252 46.41-4.114 66.744-10.7 55.908-38.866 101-63.152 112.324-107.448 2.114-8.964 3.282-18.206 3.282-27.656zM512 960c-147.94 0-281.196-62.77-374.666-163.098 36.934 20.452 80.538 32.638 126.902 32.638 67.068 0 256.438 0 256.438 0l-57.304-60.14h-67.31c47.496-27.212 72.752-83.248 72.752-145.012 0-56.692-31.416-102.38-75.78-137.058-43.28-33.802-51.492-47.966-51.492-76.734 0-24.542 51.722-61.098 75.5-78.936 82.818-62.112 99.578-101.184 99.578-178.87 0-78.726-68.936-157.104-185.866-183.742 56.348-21.338 117.426-33.048 181.248-33.048 282.77 0 512 229.23 512 512s-229.23 512-512 512zM768 576v-128h-64v128h-128v64h128v128h64v-128h128v-64h-128zM365.768 620.528c11.922-90.776-27.846-149.19-96.934-147.134-69.126 2.082-134.806 65.492-146.74 156.242-11.928 90.788 34.418 160.254 103.53 158.196 69.090-2.074 128.22-76.542 140.144-167.304zM220.886 317.932c-74.68 0-138.128-25.768-182.842-63.864-24.502 59.82-38.044 125.29-38.044 193.932 0 56.766 9.256 111.368 26.312 162.396 7.374-99.442 77.352-176.192 192.97-176.192 8.514 0 16.764 0.442 24.874 1.022-7.95-15.23-13.622-32.19-13.622-49.982 0-29.97 16.488-47.070 36.868-66.894-15.402 0-30.27-0.418-46.516-0.418z" />
405<glyph unicode="&#xea8b;" glyph-name="google-drive" d="M459.33 300.168l-170.654-295.668h564.654l170.67 295.668zM975.612 384l-292.934 507.5h-341.348l292.956-507.5zM292.836 807.486l-292.836-507.318 170.676-295.668 292.832 507.324z" />
406<glyph unicode="&#xea8c;" glyph-name="facebook" d="M672 768c-88.366 0-160-71.634-160-160v-96h-128v-128h128v-448h128v448h144l32 128h-176v96c0 17.672 14.326 32 32 32h160v128h-160z" />
407<glyph unicode="&#xea8d;" glyph-name="facebook2" d="M853.35 960h-682.702c-94.25 0-170.648-76.42-170.648-170.686v-682.63c0-94.266 76.398-170.684 170.648-170.684h341.352v448h-128v128h128v96c0 88.366 71.634 160 160 160h160v-128h-160c-17.674 0-32-14.328-32-32v-96h176l-32-128h-144v-448h213.35c94.25 0 170.65 76.418 170.65 170.684v682.63c0 94.266-76.4 170.686-170.65 170.686z" />
408<glyph unicode="&#xea8e;" glyph-name="facebook3" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512v384h-128v128h128v96c0 88.366 71.632 160 160 160h160v-128h-160c-17.674 0-32-14.328-32-32v-96h176l-32-128h-144v-367.87c220.828 56.838 384 257.3 384 495.87 0 282.77-229.23 512-512 512z" />
409<glyph unicode="&#xea8f;" glyph-name="ello" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM824.636 370.402c-36.798-142.716-165.358-242.402-312.63-242.402-147.282 0-275.85 99.686-312.654 242.42-6.232 24.158 8.352 48.886 32.512 55.124 3.71 0.958 7.528 1.446 11.338 1.446 20.624 0 38.628-13.972 43.788-33.976 26.512-102.748 119.042-174.51 225.014-174.51 105.978 0 198.502 71.76 225 174.51 5.152 20.006 23.15 33.982 43.766 33.982 3.822 0 7.65-0.49 11.376-1.456 11.692-3.016 21.526-10.418 27.668-20.842 6.142-10.416 7.854-22.596 4.822-34.296z" />
410<glyph unicode="&#xea90;" glyph-name="instagram" d="M854 960h-684c-93.5 0-170-76.5-170-170v-684c0-93.5 76.5-170 170-170h684c93.5 0 170 76.5 170 170v684c0 93.5-76.5 170-170 170zM327.8 512h368.4c6.988-20.058 10.8-41.59 10.8-64 0-107.524-87.476-195-195-195s-195 87.476-195 195c0 22.41 3.812 43.942 10.8 64zM896 511.95v-383.95c0-35.2-28.8-64-64-64h-640c-35.2 0-64 28.8-64 64v384h100.108c-4.642-20.602-7.108-42.016-7.108-64 0-160.458 130.542-291 291-291s291 130.542 291 291c0 21.984-2.464 43.398-7.108 64l100.108-0.050zM896 736c0-17.6-14.4-32-32-32h-64c-17.6 0-32 14.4-32 32v64c0 17.6 14.4 32 32 32h64c17.6 0 32-14.4 32-32v-64z" />
411<glyph unicode="&#xea91;" glyph-name="twitter" d="M1024 765.582c-37.676-16.708-78.164-28.002-120.66-33.080 43.372 26 76.686 67.17 92.372 116.23-40.596-24.078-85.556-41.56-133.41-50.98-38.32 40.83-92.922 66.34-153.346 66.34-116.022 0-210.088-94.058-210.088-210.078 0-16.466 1.858-32.5 5.44-47.878-174.6 8.764-329.402 92.4-433.018 219.506-18.084-31.028-28.446-67.116-28.446-105.618 0-72.888 37.088-137.192 93.46-174.866-34.438 1.092-66.832 10.542-95.154 26.278-0.020-0.876-0.020-1.756-0.020-2.642 0-101.788 72.418-186.696 168.522-206-17.626-4.8-36.188-7.372-55.348-7.372-13.538 0-26.698 1.32-39.528 3.772 26.736-83.46 104.32-144.206 196.252-145.896-71.9-56.35-162.486-89.934-260.916-89.934-16.958 0-33.68 0.994-50.116 2.94 92.972-59.61 203.402-94.394 322.042-94.394 386.422 0 597.736 320.124 597.736 597.744 0 9.108-0.206 18.168-0.61 27.18 41.056 29.62 76.672 66.62 104.836 108.748z" />
412<glyph unicode="&#xea92;" glyph-name="twitter2" d="M853.342 960h-682.656c-93.874 0-170.686-76.81-170.686-170.69v-682.624c0-93.936 76.812-170.686 170.686-170.686h682.656c93.876 0 170.658 76.75 170.658 170.69v682.62c0 93.88-76.782 170.69-170.658 170.69zM766.478 578.52c0.252-5.632 0.38-11.296 0.38-16.988 0-173.51-132.070-373.588-373.584-373.588-74.15 0-143.168 21.738-201.276 58.996 10.272-1.218 20.724-1.84 31.322-1.84 61.518 0 118.134 20.992 163.072 56.21-57.458 1.054-105.948 39.020-122.658 91.184 8.018-1.532 16.244-2.36 24.704-2.36 11.976 0 23.578 1.61 34.592 4.61-60.064 12.066-105.326 65.132-105.326 128.75 0 0.554 0 1.104 0.012 1.652 17.7-9.834 37.948-15.742 59.47-16.424-35.232 23.546-58.414 63.736-58.414 109.292 0 24.064 6.476 46.62 17.78 66.010 64.76-79.44 161.51-131.712 270.634-137.19-2.238 9.612-3.4 19.632-3.4 29.924 0 72.512 58.792 131.298 131.304 131.298 37.766 0 71.892-15.944 95.842-41.462 29.908 5.886 58.008 16.814 83.38 31.862-9.804-30.662-30.624-56.394-57.732-72.644 26.56 3.174 51.866 10.232 75.412 20.674-17.594-26.328-39.854-49.454-65.514-67.966z" />
413<glyph unicode="&#xea93;" glyph-name="twitter3" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM766.478 578.52c0.252-5.632 0.38-11.296 0.38-16.988 0-173.51-132.070-373.588-373.584-373.588-74.15 0-143.168 21.738-201.276 58.996 10.272-1.218 20.724-1.84 31.322-1.84 61.518 0 118.134 20.992 163.072 56.21-57.458 1.054-105.948 39.020-122.658 91.184 8.018-1.532 16.244-2.36 24.704-2.36 11.976 0 23.578 1.61 34.592 4.61-60.064 12.066-105.326 65.132-105.326 128.75 0 0.554 0 1.104 0.012 1.652 17.7-9.834 37.948-15.742 59.47-16.424-35.232 23.546-58.414 63.736-58.414 109.292 0 24.064 6.476 46.62 17.78 66.010 64.76-79.44 161.51-131.712 270.634-137.19-2.238 9.612-3.4 19.632-3.4 29.924 0 72.512 58.792 131.298 131.304 131.298 37.766 0 71.892-15.944 95.842-41.462 29.908 5.886 58.008 16.814 83.38 31.862-9.804-30.662-30.624-56.394-57.732-72.644 26.56 3.174 51.866 10.232 75.412 20.674-17.594-26.328-39.854-49.454-65.514-67.966z" />
414<glyph unicode="&#xea94;" glyph-name="feed2" d="M136.294 209.070c-75.196 0-136.292-61.334-136.292-136.076 0-75.154 61.1-135.802 136.292-135.802 75.466 0 136.494 60.648 136.494 135.802-0.002 74.742-61.024 136.076-136.494 136.076zM0.156 612.070v-196.258c127.784 0 247.958-49.972 338.458-140.512 90.384-90.318 140.282-211.036 140.282-339.3h197.122c-0.002 372.82-303.282 676.070-675.862 676.070zM0.388 960v-196.356c455.782 0 826.756-371.334 826.756-827.644h196.856c0 564.47-459.254 1024-1023.612 1024z" />
415<glyph unicode="&#xea95;" glyph-name="feed3" d="M853.34 960h-682.654c-93.876 0-170.686-76.812-170.686-170.688v-682.628c0-93.934 76.812-170.684 170.688-170.684h682.652c93.876 0 170.66 76.748 170.66 170.684v682.628c0 93.876-76.784 170.688-170.66 170.688zM278.944 128.752c-47.97 0-86.944 38.692-86.944 86.628 0 47.684 38.972 86.812 86.944 86.812 48.158 0 87.060-39.128 87.060-86.812-0.002-47.936-38.904-86.628-87.060-86.628zM497.468 128.004c0 81.81-31.808 158.818-89.46 216.444-57.714 57.75-134.376 89.626-215.904 89.626v125.186c237.652 0 431.126-193.442 431.126-431.254l-125.762-0.002zM719.628 128.004c0 291.062-236.658 527.94-527.376 527.94v125.248c360.002 0 652.946-293.124 652.946-653.192l-125.57 0.004z" />
416<glyph unicode="&#xea96;" glyph-name="feed4" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM320 192c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zM496 192c0 132.336-107.664 240-240 240v96c185.272 0 336-150.728 336-336h-96zM688 192c0 115.39-44.936 223.876-126.53 305.47s-190.078 126.53-305.47 126.53v96c141.034 0 273.626-54.922 373.354-154.648 99.724-99.726 154.646-232.318 154.646-373.352h-96z" />
417<glyph unicode="&#xea97;" glyph-name="youtube" d="M832 832h-640c-105.6 0-192-86.4-192-192v-384c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v384c0 105.6-86.4 192-192 192zM384 192v512l320-256-320-256z" />
418<glyph unicode="&#xea98;" glyph-name="youtube2" d="M832 832h-640c-105.6 0-192-86.4-192-192v-384c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v384c0 105.6-86.4 192-192 192zM960 256c0-33.978-13.374-66.062-37.654-90.346-24.284-24.28-56.366-37.654-90.346-37.654h-640c-33.978 0-66.062 13.374-90.344 37.654-24.282 24.284-37.656 56.368-37.656 90.346v384c0 33.978 13.374 66.062 37.656 90.344s56.366 37.656 90.344 37.656h640c33.978 0 66.062-13.374 90.346-37.656 24.282-24.282 37.654-56.366 37.654-90.344v-384zM384 192l320 256-320 256z" />
419<glyph unicode="&#xea99;" glyph-name="youtube3" d="M293.188 960l-69.188-137.234-69.188 137.234h-88.248l124.71-217.314 0.726 0.43v-167.116h64v167.116l0.726-0.43 124.71 217.314zM480 832c17.346 0 32-14.654 32-32v-128c0-17.346-14.654-32-32-32s-32 14.654-32 32v128c0 17.346 14.654 32 32 32zM480 896c-52.8 0-96-43.2-96-96v-128c0-52.8 43.2-96 96-96s96 43.2 96 96v128c0 52.8-43.2 96-96 96v0zM768 896v-251.968c-27.922-23.288-64-37.332-64 45.634v206.334h-64v-219.324h0.096c0.986-52.91 12.142-148.168 127.904-70.712v-29.964h64v320h-64zM864 256c-17.644 0-32-14.356-32-32v-32h64v32c0 17.644-14.356 32-32 32zM576 224v-168c21.666-21.666 64-24 64 8s0 118 0 150-32 42-64 10zM1018.766 378.46c-2.792 36.862-16.046 66.942-39.778 90.244-23.726 23.298-54.080 35.994-91.068 38.080-69.784 3.478-229.452 5.216-369.716 5.216-140.266 0-311.294-1.738-381.078-5.216-36.986-2.086-67.342-14.782-91.068-38.080-23.728-23.302-36.988-53.382-39.778-90.244-4.188-75.116-6.28-102.352-6.28-139.91 0-37.56 2.092-93.894 6.28-169.012 2.792-36.862 16.050-66.944 39.778-90.244 23.726-23.298 54.082-35.992 91.068-38.080 69.782-3.476 240.81-5.214 381.078-5.214 140.266 0 299.934 1.738 369.716 5.214 36.988 2.088 67.342 14.782 91.068 38.080 23.73 23.3 36.986 53.382 39.778 90.244 3.49 62.598 5.234 118.934 5.234 169.012 0 50.076-1.744 77.314-5.234 139.91zM192 0h-64v320h-64v64h192v-64h-64v-320zM448 0h-64v29.962c-121.666-68.294-126.918-2.198-127.904 50.712h-0.096v175.326h64v-176.334c0-38.666 36.078-34.924 64-11.634v187.968h64v-256zM704 64.914c0-66.892-68.504-86.402-128-34.39v-30.524h-64v384h64v-104c64 64 128 40 128-24s0-121.172 0-191.086zM960 192v-32h-128v-64c0-17.644 14.356-32 32-32s32 14.356 32 32v32h64v-32c0-52.934-43.066-96-96-96s-96 43.066-96 96v128c0 52.934 43.066 96 96 96s96-43.066 96-96v-32z" />
420<glyph unicode="&#xea9a;" glyph-name="youtube4" horiz-adv-x="2569" d="M344.012 790.601c0.209 0.865 0.344 1.479 0.388 1.8l1.042 7.559-47.349 0.267c-42.779 0.242-55.87-0.007-57.047-1.084-0.565-0.516-15.333-56.633-41.655-158.273-12.556-48.484-23.124-87.206-23.487-86.051s-15.391 56.498-33.397 122.98c-18.006 66.482-33.104 121.243-33.55 121.692-0.623 0.623-57.98 0.9-104.417 0.502-6.735-0.056-10.477 13.11 60.021-211.133 9.759-31.041 24.371-74.997 32.469-97.679 9.333-26.141 15.989-46.323 20.534-63.173 8.038-32.067 8.319-52.163 6.565-75.625-2.026-27.101-2.321-218.438-0.342-221.638 1.512-2.449 91.223-3.589 99.712-1.268 1.358 0.372 2.265 1.691 2.87 8.928 2.119 6.219 2.286 30.969 2.286 133.744v131.281l5.742 18.112c3.756 11.849 13.201 42.995 20.989 69.22 7.789 26.222 17.21 57.619 20.938 69.771 33.834 110.319 66.14 218.831 66.994 225.011l0.693 5.056zM846.122 631.349l-0.021-6.838-1.065-0.014-0.595-188.993-0.577-183.227-14.666-14.929c-16.424-16.719-29.585-23.101-41.488-20.113-12.963 3.254-12.64-1.8-13.722 214.768l-0.998 199.347h-94.316v-6.851h-1.086v-216.289c0-231.737-0.007-231.599 11.752-254.875 9.366-18.536 23.010-27.559 46.391-30.671h0.002c30.79-4.1 64.001 9.849 94.77 39.809l13.373 13.022v-22.445c0-19.396 0.554-22.601 4.070-23.58 5.756-1.605 77.173-1.707 84.89-0.126l6.396 1.314v6.628l1.086 0.223v495.098l-94.195-1.258zM606.892 533.67c-8.935 38.341-25.68 64.115-53.233 81.939-43.281 27.999-92.718 30.957-138.586 8.291-33.425-16.515-54.951-43.914-66.071-84.083-1.326-4.786-2.298-8.812-3.033-14.815-2.83-14.184-3.163-35.351-3.889-133.951-1.121-151.928 0.616-170.003 19.643-204.51 18.664-33.848 57.403-58.661 99.572-63.782 12.696-1.54 38.43 0.858 53.23 4.961 33.632 9.326 65.864 35.906 80.118 66.078 6.158 13.033 9.875 22.096 12.115 38.651 4.175 22.617 4.47 59.175 4.47 152.375-0.002 118.875-0.379 131.862-4.337 148.847zM499.34 223.997c-7.907-6.028-21.734-8.649-32.983-6.249-8.656 1.847-20.338 15.419-23.934 27.801-4.479 15.436-4.823 229.985-0.954 272.059 6.379 21.054 24.19 32.050 43.635 26.813 15.157-4.082 22.915-13.575 27.336-33.457 3.282-14.754 3.67-33.129 2.972-141.26-0.46-71.701-0.716-106.742-3.058-125.553-2.382-11.87-6.319-15.047-13.015-20.154zM2300.389 425.863h45.57l-0.726 41.281c-0.705 37.869-1.263 42.2-6.324 52.472-7.982 16.21-19.759 23.401-38.446 23.401-22.448 0-36.678-10.849-43.388-33.141-2.858-9.486-5.863-74.685-3.707-80.308 1.205-3.144 7.724-3.705 47.021-3.705zM1995.795 519.763c-6.077 12.247-17.385 18.278-30.525 17.806-10.221-0.365-21.561-4.677-32.488-13.010l-8.14-6.177v-296.598l8.14-6.177c18.429-14.052 38.674-17.031 52.619-7.703 5.519 3.691 9.117 8.779 11.919 16.861 3.647 10.524 3.965 24.003 3.489 148.772-0.495 130.043-0.781 137.702-5.014 146.226zM2560.878 653.367c-9.080 108.842-16.303 144.165-38.751 189.544-29.729 60.101-72.692 91.788-133.876 98.747-47.309 5.379-225.315 12.97-390.044 16.631-285.188 6.338-754.057-5.858-813.939-21.173-27.673-7.077-48.426-19.11-70.022-40.604-37.844-37.662-60.391-91.679-69.452-166.396-20.692-170.606-21.134-376.727-1.188-553.515 8.577-76.041 26.243-125.443 59.41-166.159 20.694-25.406 56.352-46.998 88.26-53.442 22.385-4.523 134.42-10.798 297.605-16.668 24.306-0.874 88.667-2.379 143.030-3.344 113.301-2.012 321.627-0.821 440.719 2.519 80.127 2.249 226.201 8.172 253.5 10.282 7.677 0.593 25.469 1.728 39.537 2.523 47.277 2.67 77.353 12.568 105.596 34.76 36.553 28.718 64.857 81.795 76.815 144.037 11.314 58.894 18.887 163.773 20.422 282.851 1.284 99.491-0.426 153.175-7.621 239.409zM1425.273 692.808l-52.982-0.654-2.326-565.143-45.932-0.581c-35.525-0.488-46.307 0.044-47.167 2.326-0.616 1.626-1.356 129.020-1.672 283.153l-0.581 280.246-103.493 1.307v88.304l305.829-1.235 1.307-87.069-52.982-0.654zM1750.216 368.883v-243.035h-83.725v25.583c0 19.247-0.735 25.583-2.979 25.583-1.64 0-9.226-6.344-16.861-14.098-16.557-16.817-36.171-30.367-52.91-36.63-34.662-12.968-67.589-5.4-81.618 18.75-12.838 22.11-13.082 27.052-13.082 256.335v210.547h83.653l0.654-198.265c0.623-194.821 0.714-198.393 5.377-206.333 6.182-10.521 15.608-13.347 30.597-9.231 8.817 2.423 14.836 6.707 29.143 20.931l18.024 17.952v374.946h83.725v-243.035zM2076.757 160.59c-7.372-16.424-23.806-32.509-37.283-36.485-35.167-10.382-63.375-1.923-95.935 28.708-10.103 9.505-19.51 17.224-20.931 17.224-1.712 0-2.616-7.449-2.616-22.094v-22.094h-83.725v655.845h83.725v-106.982c0-58.84 0.786-106.982 1.744-106.982s9.789 7.807 19.624 17.298c22.629 21.841 41.548 31.399 65.557 33.213 42.811 3.24 68.327-18.794 80.018-69.117 3.647-15.696 3.998-33.625 3.998-179.078-0.002-177.178-0.021-177.918-14.175-209.457zM2430.99 257.832c-0.744-18.226-2.954-39.137-4.942-46.514-11.642-43.167-42.635-73.731-87.432-86.269-60.315-16.878-126.704 10.777-153.205 63.812-14.875 29.769-15.408 35.706-15.408 181.185 0 118.617 0.419 133.171 4.214 149.354 10.747 45.788 37.392 75.422 82.49 91.865 13.068 4.765 26.708 7.207 40.337 7.486 48.672 0.998 96.984-25.18 117.229-67.808 13.659-28.76 15.35-41.060 16.717-122.099l1.235-72.678-178.497-1.235-0.654-48.84c-0.93-68.901 3.716-90.088 22.313-102.621 15.645-10.54 39.679-9.745 52.765 1.744 12.263 10.768 15.726 22.336 16.933 56.107l1.091 29.653h86.195l-1.381-33.143z" />
421<glyph unicode="&#xea9b;" glyph-name="twitch" d="M96 960l-96-160v-736h256v-128h128l128 128h160l288 288v608h-864zM832 416l-160-160h-160l-128-128v128h-192v576h640v-416zM608 704h96v-256h-96v256zM416 704h96v-256h-96v256z" />
422<glyph unicode="&#xea9c;" glyph-name="vimeo" d="M0 651.63l41.594-54.544c0 0 85.77 67.608 114.36 33.802 28.588-33.802 137.736-441.956 174.17-517.246 31.8-66.030 119.518-153.32 215.714-90.982 96.136 62.34 415.84 335.286 473.066 657.616 57.18 322.226-384.72 254.726-431.53-26.010 116.99 70.236 179.436-28.538 119.57-140.372-59.758-111.724-114.36-184.592-142.952-184.592-28.538 0-50.49 74.768-83.188 205.446-33.798 135.102-33.592 378.46-174.116 350.87-132.518-26.012-306.688-233.988-306.688-233.988z" />
423<glyph unicode="&#xea9d;" glyph-name="vimeo2" d="M853.31 960h-682.62c-93.878 0-170.69-76.816-170.69-170.692v-682.62c0-93.938 76.812-170.688 170.69-170.688h682.62c93.878 0 170.69 76.75 170.69 170.69v682.618c0 93.876-76.812 170.692-170.69 170.692zM812.868 521.874c-33.958-191.296-223.708-353.296-280.78-390.31-57.088-37.006-109.154 14.822-128.038 53.994-21.616 44.708-86.41 286.94-103.368 307.020-16.964 20.038-67.876-20.080-67.876-20.080l-24.692 32.376c0 0 103.382 123.448 182.040 138.878 83.404 16.366 83.28-128.066 103.34-208.242 19.4-77.564 32.44-121.952 49.376-121.952 16.97 0 49.382 43.262 84.852 109.57 35.536 66.376-1.538 125.010-70.972 83.292 27.786 166.652 290.062 206.72 256.118 15.454z" />
424<glyph unicode="&#xea9e;" glyph-name="vimeo3" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM812.868 521.874c-33.958-191.296-223.708-353.296-280.78-390.31-57.088-37.006-109.154 14.822-128.038 53.994-21.616 44.708-86.41 286.94-103.368 307.020-16.964 20.038-67.876-20.080-67.876-20.080l-24.692 32.376c0 0 103.382 123.448 182.040 138.878 83.404 16.366 83.28-128.066 103.34-208.242 19.4-77.564 32.44-121.952 49.376-121.952 16.97 0 49.382 43.262 84.852 109.57 35.536 66.376-1.538 125.010-70.972 83.292 27.786 166.652 290.062 206.72 256.118 15.454z" />
425<glyph unicode="&#xea9f;" glyph-name="lanyrd" d="M852 960h-680c-94.6 0-172-77.4-172-172v-680c0-94.6 77.4-172 172-172h680c94.6 0 172 77.4 172 172v680c0 94.6-77.4 172-172 172zM843.668 152.334c-113.332-37.334-334.666-110-376-120.334s-84-27.668-108 41.666c0 0-204 602.666-222.666 656s-36.848 85.486 5.332 102.334c97.376 38.894 198.666 88.5 217.334 32 16.702-50.546 194.666-608 194.666-608s209.332 73.668 266.666 89.668 77.002 26.668 92-52 44-104-69.332-141.334z" />
426<glyph unicode="&#xeaa0;" glyph-name="flickr" d="M0 416c0 123.712 100.288 224 224 224s224-100.288 224-224c0-123.712-100.288-224-224-224s-224 100.288-224 224zM576 416c0 123.712 100.288 224 224 224s224-100.288 224-224c0-123.712-100.288-224-224-224s-224 100.288-224 224z" />
427<glyph unicode="&#xeaa1;" glyph-name="flickr2" d="M800 544c-70.58 0-128-57.42-128-128s57.42-128 128-128c70.58 0 128 57.42 128 128s-57.42 128-128 128zM800 640v0c123.71 0 224-100.288 224-224 0-123.71-100.29-224-224-224s-224 100.29-224 224c0 123.712 100.29 224 224 224zM0 416c0 123.712 100.288 224 224 224s224-100.288 224-224c0-123.712-100.288-224-224-224s-224 100.288-224 224z" />
428<glyph unicode="&#xeaa2;" glyph-name="flickr3" d="M853.376 960h-682.688c-93.876 0-170.688-76.812-170.688-170.682v-682.626c0-93.942 76.812-170.692 170.688-170.692h682.682c93.874 0 170.63 76.754 170.63 170.696v682.622c0 93.87-76.756 170.682-170.624 170.682zM288 288c-88.366 0-160 71.634-160 160s71.634 160 160 160 160-71.634 160-160c0-88.366-71.634-160-160-160zM736 288c-88.368 0-160 71.634-160 160s71.632 160 160 160 160-71.634 160-160c0-88.366-71.632-160-160-160z" />
429<glyph unicode="&#xeaa3;" glyph-name="flickr4" d="M512 960c-282.77 0-512-230.796-512-515.5s229.23-515.5 512-515.5 512 230.796 512 515.5-229.23 515.5-512 515.5zM288 288c-88.366 0-160 71.634-160 160s71.634 160 160 160 160-71.634 160-160c0-88.366-71.634-160-160-160zM736 288c-88.368 0-160 71.634-160 160s71.632 160 160 160 160-71.634 160-160c0-88.366-71.632-160-160-160z" />
430<glyph unicode="&#xeaa4;" glyph-name="picassa" d="M704 565.74l-364.456 364.456c53.89 19.276 111.94 29.804 172.456 29.804 67.904 0 132.704-13.25 192-37.256v-357.004zM768 256v635.486c153.034-88.528 256-253.978 256-443.486 0-67.904-13.25-132.704-37.256-192h-218.744zM320 192h635.486c-88.528-153.034-253.978-256-443.486-256-67.904 0-132.704 13.25-192 37.256v218.744zM426.26 736l-411.282-411.282c-9.764 39.49-14.978 80.774-14.978 123.282 0 193.382 107.226 361.702 265.452 448.808l160.808-160.808zM256 458.26v-453.746c-94.596 54.722-170.036 138.848-213.874 239.872l213.874 213.874z" />
431<glyph unicode="&#xeaa5;" glyph-name="picassa2" d="M853.376 960h-682.688c-93.876 0-170.688-76.812-170.688-170.682v-682.626c0-93.942 76.812-170.692 170.688-170.692h682.68c93.876 0 170.632 76.754 170.632 170.696v682.622c0 93.87-76.756 170.682-170.624 170.682zM512 896c68.714 0 133.804-15.49 192-43.138v-287.122l-313.558 313.558c38.656 10.874 79.426 16.702 121.558 16.702zM64 448c0 175.888 101.376 328.074 248.874 401.386l113.386-113.386-356.974-356.974c-3.474 22.484-5.286 45.516-5.286 68.974zM256 80.338c-74.684 52.098-132.764 126.348-164.672 213.25l164.672 164.672v-377.922zM512 0c-68.714 0-133.804 15.49-192 43.138v148.862h559.662c-80.956-116.052-215.43-192-367.662-192zM916.862 256h-148.862v559.664c116.052-80.958 192-215.43 192-367.664 0-68.714-15.49-133.804-43.138-192z" />
432<glyph unicode="&#xeaa6;" glyph-name="dribbble" d="M512.002-64c-282.32 0-512.002 229.682-512.002 512s229.682 512 512.002 512c282.322 0 511.998-229.682 511.998-512s-229.676-512-511.998-512zM943.798 377.914c-14.962 4.72-135.364 40.632-272.41 18.698 57.204-157.186 80.478-285.208 84.958-311.808 98.114 66.336 167.958 171.426 187.452 293.11zM682.832 44.762c-6.506 38.37-31.898 172.090-93.298 331.64-0.96-0.328-1.922-0.64-2.88-0.972-246.67-85.958-335.216-257.016-343.086-273.104 74.15-57.824 167.336-92.32 268.436-92.32 60.58 0 118.318 12.39 170.828 34.756zM187.098 154.922c9.908 16.96 129.93 215.684 355.476 288.594 5.704 1.84 11.448 3.57 17.236 5.2-10.98 24.844-22.94 49.714-35.456 74.216-218.398-65.36-430.324-62.63-449.46-62.236-0.132-4.442-0.222-8.89-0.222-13.366 0-112.32 42.58-214.874 112.426-292.408zM83.912 536.904c19.558-0.26 199.736-1.042 404.302 53.282-72.46 128.812-150.612 237.11-162.142 252.92-122.348-57.708-213.802-170.496-242.16-306.202zM409.518 872.5c12.088-16.184 91.518-124.348 163.18-256.014 155.508 58.284 221.34 146.77 229.208 157.974-77.23 68.518-178.782 110.2-289.902 110.2-35.29 0-69.6-4.232-102.486-12.16zM850.522 723.888c-9.216-12.474-82.504-106.418-244.202-172.434 10.178-20.832 19.934-42.018 29.016-63.344 3.216-7.56 6.354-15.084 9.418-22.57 145.518 18.298 290.104-11.028 304.526-14.078-0.968 103.224-37.85 198.010-98.758 272.426z" />
433<glyph unicode="&#xeaa7;" glyph-name="dribbble2" d="M538.752 444.076c-197.352-63.796-302.372-237.678-311.042-252.522-61.116 67.842-98.374 157.576-98.374 255.858 0 3.916 0.078 7.81 0.196 11.696 16.744-0.342 202.18-2.732 393.278 54.458 10.952-21.44 21.416-43.202 31.024-64.94-5.064-1.426-10.092-2.94-15.082-4.55zM765.666 733.654c-6.882-9.804-64.486-87.23-200.556-138.228-62.704 115.206-132.206 209.85-142.782 224.012 28.776 6.936 58.798 10.64 89.674 10.64 97.23 0 186.088-36.47 253.664-96.424zM491.188 572.412c-178.996-47.532-336.65-46.848-353.766-46.622 24.814 118.742 104.836 217.432 211.892 267.926 10.088-13.834 78.472-108.594 141.874-221.304zM577.32 384.5c0.84 0.292 1.68 0.564 2.522 0.852 53.724-139.606 75.942-256.612 81.636-290.186-45.946-19.568-96.466-30.41-149.476-30.41-88.464 0-170.002 30.184-234.882 80.78 6.886 14.078 84.364 163.754 300.2 238.964zM852 960h-680c-94.6 0-172-77.4-172-172v-680c0-94.6 77.4-172 172-172h680c94.6 0 172 77.4 172 172v680c0 94.6-77.4 172-172 172zM512.002 0c-247.030 0-448.002 200.97-448.002 448 0 247.028 200.972 448 448.002 448 247.032 0 447.998-200.972 447.998-448 0-247.030-200.966-448-447.998-448zM651.464 403.036c119.916 19.192 225.266-12.232 238.36-16.36-17.060-106.474-78.172-198.428-164.020-256.472-3.922 23.276-24.288 135.294-74.34 272.832zM594.532 538.524c141.484 57.764 205.608 139.964 213.674 150.88 53.292-65.116 85.566-148.052 86.412-238.372-12.618 2.668-139.13 28.328-266.458 12.316-2.682 6.552-5.426 13.134-8.242 19.75-7.944 18.66-16.482 37.198-25.386 55.426z" />
434<glyph unicode="&#xeaa8;" glyph-name="dribbble3" d="M765.666 733.654c-6.882-9.804-64.486-87.23-200.556-138.228-62.704 115.206-132.206 209.85-142.782 224.012 28.776 6.936 58.798 10.64 89.674 10.64 97.23 0 186.088-36.47 253.664-96.424zM538.752 444.076c-197.352-63.796-302.372-237.678-311.042-252.522-61.116 67.842-98.374 157.576-98.374 255.858 0 3.916 0.078 7.81 0.196 11.696 16.744-0.342 202.18-2.732 393.278 54.458 10.952-21.44 21.416-43.202 31.024-64.94-5.064-1.426-10.092-2.94-15.082-4.55zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512.002 0c-247.030 0-448.002 200.97-448.002 448 0 247.028 200.972 448 448.002 448 247.032 0 447.998-200.972 447.998-448 0-247.030-200.966-448-447.998-448zM619.918 483.098c-7.946 18.66-16.482 37.198-25.388 55.428 141.484 57.762 205.61 139.964 213.676 150.878 53.292-65.116 85.566-148.052 86.412-238.372-12.618 2.668-139.13 28.328-266.458 12.316-2.682 6.552-5.426 13.134-8.242 19.75zM491.188 572.412c-178.996-47.532-336.65-46.848-353.766-46.622 24.814 118.742 104.836 217.432 211.892 267.926 10.088-13.834 78.472-108.594 141.874-221.304zM577.32 384.5c0.84 0.292 1.68 0.564 2.522 0.852 53.724-139.606 75.942-256.612 81.636-290.186-45.946-19.568-96.466-30.41-149.476-30.41-88.464 0-170.002 30.184-234.882 80.78 6.886 14.078 84.364 163.754 300.2 238.964zM651.464 403.036c119.916 19.192 225.266-12.232 238.36-16.36-17.060-106.474-78.172-198.428-164.020-256.472-3.922 23.276-24.288 135.294-74.34 272.832z" />
435<glyph unicode="&#xeaa9;" glyph-name="forrst" d="M384 64h-384l448 896 448-896h-384v128h128v64h-128v128h-128zM384 64h128v-128h-128z" />
436<glyph unicode="&#xeaaa;" glyph-name="forrst2" d="M448 384h128v-256h-128zM852 960h-680c-94.6 0-172-77.4-172-172v-680c0-94.6 77.4-172 172-172h680c94.6 0 172 77.4 172 172v680c0 94.6-77.4 172-172 172zM576 128v-128h-128v128h-256l320 704 320-704h-256z" />
437<glyph unicode="&#xeaab;" glyph-name="deviantart" d="M561.856 553c-39.042 2.282-84.082-0.048-136.25-8.95l120.334-216.888 478.060 131.266c-5.154 12.26-12.686 24.226-22.662 35.798-49.474 57.278-156.74 108.374-273.604 131.418l0.002 0.026c-114.644 26.874-238.802 25.744-365.96 6.548-4.584-0.688-9.144-1.422-13.68-2.184l-42.272 78.292c-41.142-5.492-79.808-14.050-115.606-25.474l40.26-84.198c-65.76-25.476-119.722-61.76-158.658-105.432-64.212-73.064-89.59-164.908-58.746-254.352 6.204-18.042 14.588-35.16 24.936-51.196l478.068 131.298-132.75 245.848c4.558 0.88 9.196 1.768 13.928 2.624 214.682 38.298 332.102-20.864 396.416-83.83l-163.558-39.648-68.258 109.034zM174.722 333.61c-14.758 67.352-3.012 142.526 90.404 192.594l73.138-152.948-163.542-39.646z" />
438<glyph unicode="&#xeaac;" glyph-name="deviantart2" d="M852 960h-680c-94.6 0-172-77.4-172-172v-680c0-94.6 77.4-172 172-172h680c94.6 0 172 77.4 172 172v680c0 94.6-77.4 172-172 172zM960 192h-384v236c0 0 70.334-1 108-40v-68h154.41c-11.82 37.882-37.068 75.112-73.128 106.664-61.98 54.23-163.194 81.336-253.282 81.336v-316h-448v96c0 43.396 14.65 86.538 42.364 124.76 24.594 33.918 58.864 63.832 101.86 88.914 50.432 29.418 110.562 50.708 175.776 62.778v139.548h128v-128c147 0 221.612-26.396 303.778-74.326 42.996-25.082 77.266-54.996 101.86-88.914 27.714-38.222 42.362-81.364 42.362-124.76v-96zM199.59 320c11.82 37.882 37.070 75.112 73.128 106.664 31.54 27.596 69.62 49.188 111.282 63.756v-170.42h-184.41z" />
439<glyph unicode="&#xeaad;" glyph-name="steam" d="M704 672c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM958.392 830.392c-87.478 87.476-229.306 87.476-316.786 0-35.578-35.578-56.684-80.146-63.322-126.392v0l-204.694-310.228c-27.506-1.41-54.776-8.416-79.966-21.016l-157.892 123.424c-36.55 28.574-89.342 22.102-117.912-14.448-28.572-36.55-22.102-89.342 14.448-117.912l155.934-121.892c-16.96-66.782 0.672-140.538 52.93-192.794 78.906-78.904 206.832-78.904 285.736 0 48.466 48.466 67.15 115.428 56.076 178.166l249.054 222.986c46.248 6.638 90.816 27.744 126.394 63.322 87.478 87.476 87.478 229.306 0 316.784zM384 57.302c-74.39 0-134.698 60.304-134.698 134.698 0 0.712 0.042 1.414 0.054 2.124l66.912-52.304c15.36-12.006 33.582-17.824 51.674-17.824 24.962 0 49.672 11.080 66.238 32.272 28.572 36.55 22.102 89.342-14.448 117.912l-63.5 49.636c8.962 1.878 18.248 2.88 27.768 2.88 74.392 0 134.698-60.304 134.698-134.698s-60.306-134.696-134.698-134.696zM800 512c-88.366 0-160 71.634-160 160s71.634 160 160 160 160-71.634 160-160-71.634-160-160-160z" />
440<glyph unicode="&#xeaae;" glyph-name="steam2" d="M303.922 123.99c27.144 0 53.786 13.136 69.972 37.416 25.734 38.602 15.302 90.754-23.298 116.488l-66.074 44.048c11.308 3.080 23.194 4.756 35.478 4.756 74.392 0 134.696-60.304 134.696-134.698s-60.306-134.698-134.698-134.698c-72.404 0-131.444 57.132-134.548 128.774l71.954-47.968c14.322-9.548 30.506-14.118 46.518-14.118zM853.34 960c93.876 0 170.66-76.812 170.66-170.688v-682.628c0-93.936-76.784-170.684-170.66-170.684h-682.652c-93.876 0-170.688 76.75-170.688 170.682v203.028l121.334-80.888c-11.652-63.174 6.938-130.83 55.798-179.69 78.904-78.904 206.83-78.904 285.736 0 48.468 48.466 67.15 115.43 56.076 178.166l249.056 222.988c46.248 6.638 90.816 27.744 126.394 63.322 87.476 87.476 87.476 229.306 0 316.784-87.48 87.478-229.308 87.478-316.786 0-35.578-35.578-56.684-80.146-63.322-126.392v0l-204.694-310.23c-31.848-1.632-63.378-10.764-91.726-27.392l-217.866 145.244v277.69c0 93.876 76.81 170.688 170.686 170.688h682.654zM896 672c0 88.366-71.634 160-160 160s-160-71.634-160-160 71.634-160 160-160 160 71.634 160 160zM640 672c0 53.020 42.98 96 96 96s96-42.98 96-96-42.98-96-96-96-96 42.98-96 96z" />
441<glyph unicode="&#xeaaf;" glyph-name="dropbox" d="M736 928l-224-192 288-192 224 192zM512 736l-224 192-288-192 224-192zM800 544l224-192-288-160-224 192zM512 384l-288 160-224-192 288-160zM728.156 114.43l-216.156 185.278-216.158-185.278-135.842 75.468v-93.898l352-160 352 160v93.898z" />
442<glyph unicode="&#xeab0;" glyph-name="onedrive" d="M350.868 131.612c-60.274 15.060-93.856 62.97-93.962 134.064-0.032 22.726 1.612 33.62 7.286 48.236 13.908 35.834 50.728 62.872 99.176 72.822 24.11 4.95 31.536 10.266 31.536 22.572 0 3.862 2.872 15.36 6.378 25.552 15.932 46.306 45.43 84.91 76.948 100.702 32.99 16.526 49.642 20.254 89.548 20.040 56.674-0.304 84.952-12.598 124.496-54.128l21.75-22.842 19.484 6.742c94.3 32.636 188.306-22.916 195.888-115.756l2.072-25.398 18.57-6.65c53.032-19.004 77.96-58.904 73.442-117.556-2.958-38.358-20.89-68.98-49.3-84.184l-13.356-7.146-296.822-0.57c-228.094-0.44-300.6 0.368-313.134 3.5v0zM103.218 174.034c-36.176 9.086-74.506 42.854-92.48 81.47-10.196 21.906-10.738 25.128-10.738 63.88 0 36.864 0.87 42.778 8.988 61.080 17.11 38.582 49.894 66.46 91.030 77.408 8.684 2.312 16.842 6 18.128 8.196 1.29 2.198 2.722 14.164 3.182 26.592 2.866 77.196 50.79 145.214 117.708 167.056 36.154 11.8 83.572 12.898 122.896-3.726 12.47-5.274 11.068-6.404 37.438 30.14 15.594 21.612 45.108 44.49 70.9 58.18 27.838 14.776 56.792 21.584 91.412 21.494 96.768-0.252 180.166-64.22 211.004-161.848 9.854-31.192 9.362-39.926-2.26-40.184-5.072-0.112-19.604-3.064-32.292-6.558l-23.072-6.358-21.052 22.25c-59.362 62.734-156.238 76.294-238.592 33.396-32.9-17.138-59.34-41.746-79.31-73.81-14.236-22.858-32.39-65.504-32.39-76.094 0-7.51-5.754-11.264-30.332-19.782-76.094-26.376-120.508-87.282-120.476-165.218 0.010-28.368 6.922-63.074 16.52-82.956 3.618-7.494 5.634-14.622 4.484-15.836-2.946-3.106-97.608-2.060-110.696 1.228v0z" />
443<glyph unicode="&#xeab1;" glyph-name="github" d="M512.008 947.358c-282.738 0-512.008-229.218-512.008-511.998 0-226.214 146.704-418.132 350.136-485.836 25.586-4.738 34.992 11.11 34.992 24.632 0 12.204-0.48 52.542-0.696 95.324-142.448-30.976-172.504 60.41-172.504 60.41-23.282 59.176-56.848 74.916-56.848 74.916-46.452 31.778 3.51 31.124 3.51 31.124 51.4-3.61 78.476-52.766 78.476-52.766 45.672-78.27 119.776-55.64 149.004-42.558 4.588 33.086 17.852 55.68 32.506 68.464-113.73 12.942-233.276 56.85-233.276 253.032 0 55.898 20.004 101.574 52.76 137.428-5.316 12.9-22.854 64.972 4.952 135.5 0 0 43.006 13.752 140.84-52.49 40.836 11.348 84.636 17.036 128.154 17.234 43.502-0.198 87.336-5.886 128.256-17.234 97.734 66.244 140.656 52.49 140.656 52.49 27.872-70.528 10.35-122.6 5.036-135.5 32.82-35.856 52.694-81.532 52.694-137.428 0-196.654-119.778-239.95-233.79-252.624 18.364-15.89 34.724-47.046 34.724-94.812 0-68.508-0.596-123.644-0.596-140.508 0-13.628 9.222-29.594 35.172-24.566 203.322 67.776 349.842 259.626 349.842 485.768 0 282.78-229.234 511.998-511.992 511.998z" />
444<glyph unicode="&#xeab2;" glyph-name="github2" d="M0 403.59c0-46.398 4.34-88.38 13.022-125.934 8.678-37.554 20.696-70.184 36.052-97.892s34.884-52.078 58.586-73.108c23.7-21.032 49.406-38.224 77.112-51.576 27.706-13.35 59.336-24.198 94.888-32.546 35.552-8.346 71.856-14.188 108.91-17.528 37.054-3.338 77.78-5.006 122.178-5.006 44.732 0 85.628 1.668 122.68 5.006 37.054 3.34 73.442 9.184 109.16 17.528s67.512 19.192 95.388 32.546c27.876 13.354 53.746 30.544 77.616 51.576 23.87 21.030 43.566 45.404 59.086 73.108s27.622 60.336 36.302 97.892c8.68 37.556 13.020 79.536 13.020 125.934 0 82.788-27.708 154.394-83.118 214.816 3.004 8.012 5.758 17.108 8.262 27.29s4.84 24.702 7.010 43.564c2.17 18.862 1.336 40.642-2.504 65.346-3.838 24.704-10.932 49.906-21.284 75.612l-7.51 1.502c-5.342 1-14.106 0.75-26.29-0.752s-26.372-4.506-42.562-9.014c-16.19-4.506-37.054-13.186-62.592-26.038s-52.494-28.958-80.87-48.32c-48.736 13.352-115.668 20.030-200.792 20.030-84.792 0-151.556-6.678-200.294-20.030-28.376 19.362-55.5 35.468-81.37 48.32s-46.484 21.532-61.84 26.038c-15.354 4.508-29.71 7.428-43.062 8.764-13.354 1.336-21.784 1.752-25.288 1.252s-6.26-1.086-8.262-1.752c-10.348-25.706-17.442-50.906-21.28-75.612-3.838-24.704-4.674-46.486-2.504-65.346s4.508-33.382 7.010-43.564c2.504-10.182 5.258-19.278 8.262-27.29-55.414-60.422-83.122-132.026-83.122-214.816zM125.684 277.906c0 48.070 21.866 92.136 65.596 132.194 13.018 12.020 28.208 21.114 45.566 27.292 17.358 6.176 36.97 9.68 58.836 10.516 21.866 0.834 42.812 0.668 62.842-0.502 20.028-1.168 44.732-2.754 74.108-4.756 29.376-2.004 54.748-3.004 76.112-3.004 21.366 0 46.736 1 76.112 3.004 29.378 2.002 54.078 3.588 74.11 4.756 20.030 1.17 40.974 1.336 62.842 0.502 21.866-0.836 41.476-4.34 58.838-10.516 17.356-6.176 32.544-15.27 45.564-27.292 43.73-39.394 65.598-83.456 65.598-132.194 0-28.712-3.59-54.162-10.768-76.364-7.178-22.2-16.358-40.81-27.542-55.83s-26.704-27.79-46.568-38.306c-19.862-10.516-39.222-18.61-58.084-24.288-18.862-5.674-43.066-10.098-72.608-13.27-29.546-3.172-55.916-5.092-79.118-5.758-23.2-0.668-52.66-1.002-88.378-1.002s-65.178 0.334-88.378 1.002c-23.2 0.666-49.574 2.586-79.116 5.758s-53.744 7.596-72.606 13.27c-18.86 5.678-38.222 13.774-58.084 24.288s-35.386 23.282-46.568 38.306c-11.182 15.022-20.364 33.63-27.54 55.83-7.178 22.202-10.766 47.656-10.766 76.364zM640 288c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96zM256 288c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96z" />
445<glyph unicode="&#xeab3;" glyph-name="github3" d="M512 128.108c-19.154 0-38.308 9.916-58.142 29.75-7.81 7.81-7.81 20.474 0 28.286 7.81 7.808 20.474 7.808 28.286 0 12.206-12.21 21.972-18.144 29.856-18.144 7.882 0 17.65 5.934 29.858 18.142 7.812 7.808 20.472 7.808 28.286 0 7.81-7.81 7.81-20.474 0-28.286-19.836-19.832-38.99-29.748-58.144-29.748zM0 434.508c0-49.892 4.266-95.122 12.8-135.682s20.534-75.74 36-105.532c15.466-29.792 35.022-55.904 58.666-78.34s49.332-40.92 77.066-55.458c27.734-14.536 59.466-26.296 95.2-35.266 35.732-8.974 72.088-15.256 109.066-18.846s77.69-5.384 122.134-5.384c44.444 0 85.242 1.79 122.398 5.38s73.602 9.872 109.332 18.846c35.734 8.974 67.558 20.73 95.468 35.266 27.91 14.538 53.778 33.026 77.598 55.458 23.824 22.436 43.47 48.548 58.934 78.34 15.47 29.794 27.56 64.974 36.27 105.532 8.71 40.56 13.066 85.788 13.066 135.68 0 89.38-27.736 166.372-83.2 230.982 3.2 8.616 5.954 18.486 8.266 29.614 2.308 11.128 4.532 26.832 6.664 47.112 2.138 20.282 1.336 43.704-2.398 70.264-3.734 26.564-10.754 53.664-21.066 81.302l-8 1.618c-5.332 1.076-14.042 0.718-26.132-1.080-12.086-1.794-26.222-5.022-42.398-9.69-16.176-4.664-37.066-13.908-62.668-27.728-25.598-13.818-52.62-31.318-81.066-52.496-48.356 14.718-115.020 30.116-200 30.116-84.976 0-151.822-15.396-200.53-30.114-28.446 21.18-55.556 38.588-81.334 52.228-25.78 13.642-46.402 22.974-61.868 27.998-15.468 5.024-29.778 8.256-42.934 9.69-13.156 1.436-21.602 1.886-25.334 1.346-3.732-0.538-6.488-1.166-8.266-1.884-10.314-27.64-17.424-54.74-21.336-81.304-3.91-26.56-4.8-49.892-2.666-69.992 2.134-20.102 4.444-35.898 6.934-47.382 2.49-11.486 5.334-21.358 8.534-29.614-55.466-64.25-83.2-141.242-83.2-230.98zM136.536 320.596c0 58.022 21.332 110.638 64 157.856 12.8 14.406 27.646 25.312 44.534 32.712 16.89 7.402 36.088 11.606 57.6 12.606s42.044 0.8 61.6-0.6c19.556-1.402 43.734-3.302 72.534-5.702 28.798-2.404 53.688-3.602 74.666-3.602 20.976 0 45.868 1.2 74.664 3.602 28.806 2.4 52.982 4.3 72.536 5.702 19.56 1.4 40.090 1.6 61.602 0.6 21.512-1.002 40.802-5.204 57.868-12.606 17.066-7.4 32-18.306 44.8-32.712 42.664-47.218 64-99.834 64-157.856 0-34.012-3.554-64.324-10.668-90.934-7.11-26.612-16.090-48.916-26.934-66.922-10.844-18.008-26.048-33.218-45.598-45.62-19.558-12.406-38.492-22.010-56.8-28.81-18.312-6.8-41.958-12.104-70.934-15.906-28.982-3.796-54.934-6.102-77.872-6.9-22.934-0.8-51.82-1.2-86.664-1.2s-63.644 0.402-86.4 1.2c-22.756 0.798-48.622 3.104-77.6 6.9-28.978 3.802-52.622 9.104-70.934 15.906-18.31 6.802-37.244 16.404-56.8 28.81-19.556 12.404-34.756 27.612-45.6 45.62-10.846 18.006-19.824 40.31-26.934 66.922-7.11 26.61-10.666 56.922-10.666 90.934zM256 351.996c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96zM640 351.996c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96z" />
446<glyph unicode="&#xeab4;" glyph-name="github4" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM816.056 143.944c-39.518-39.516-85.512-70.532-136.708-92.186-13.006-5.5-26.214-10.328-39.6-14.492v76.734c0 40.334-13.834 70-41.5 89 17.334 1.666 33.25 4 47.75 7s29.834 7.334 46 13 30.666 12.416 43.5 20.25 25.166 18 37 30.5 21.75 26.666 29.75 42.5 14.334 34.834 19 57 7 46.584 7 73.25c0 51.666-16.834 95.666-50.5 132 15.334 40 13.666 83.5-5 130.5l-12.5 1.5c-8.666 1-24.25-2.666-46.75-11s-47.75-22-75.75-41c-39.666 11-80.834 16.5-123.5 16.5-43 0-84-5.5-123-16.5-17.666 12-34.416 21.916-50.25 29.75s-28.5 13.166-38 16-18.334 4.584-26.5 5.25-13.416 0.834-15.75 0.5-4-0.666-5-1c-18.666-47.334-20.334-90.834-5-130.5-33.666-36.334-50.5-80.334-50.5-132 0-26.666 2.334-51.084 7-73.25s11-41.166 19-57 17.916-30 29.75-42.5 24.166-22.666 37-30.5 27.334-14.584 43.5-20.25 31.5-10 46-13 30.416-5.334 47.75-7c-27.334-18.666-41-48.334-41-89v-78.23c-15.098 4.494-29.98 9.804-44.6 15.988-51.194 21.654-97.188 52.67-136.706 92.186-39.516 39.518-70.534 85.512-92.186 136.708-22.398 52.958-33.756 109.262-33.756 167.348s11.358 114.39 33.758 167.35c21.654 51.194 52.67 97.188 92.186 136.706s85.512 70.534 136.706 92.186c52.96 22.4 109.264 33.758 167.35 33.758s114.39-11.358 167.35-33.758c51.196-21.654 97.19-52.67 136.708-92.186 39.516-39.516 70.532-85.512 92.186-136.706 22.398-52.96 33.756-109.264 33.756-167.35s-11.358-114.39-33.758-167.35c-21.654-51.194-52.67-97.19-92.186-136.706z" />
447<glyph unicode="&#xeab5;" glyph-name="github5" d="M235.278 711.28c-50.792 0-94.484-16.806-131.084-50.416-38.086-35.852-57.14-80.66-57.14-134.436 0-35.852 10.376-69.462 31.294-100.832 18.674-29.126 38.18-47.806 63.778-56.024v-2.242c-25.598-10.448-36.966-36.59-36.966-78.418 0-32.124 11.372-56.022 36.966-71.708v-2.242c-70.654-23.146-102.992-66.094-102.992-128.83 0-54.534 23.748-94.488 70.066-119.878 36.59-20.172 83.578-30.254 140.346-30.254 138.17 0 207.406 57.882 207.406 173.664 0 72.446-53.322 116.882-160.128 133.316-24.646 3.726-43.286 12.696-55.982 26.89-9.708 9.708-14.542 19.418-14.542 29.126 0 27.632 14.958 43.696 44.82 48.176 45.558 6.714 82.728 27.824 111.486 63.296 28.75 35.48 43.13 77.118 43.13 124.916 0 14.938-4.518 30.996-10.488 48.172 19.418 4.488 33.050 8.594 43.292 12.332v115.392c-45.054-17.928-86.99-26.884-122.842-26.884-31.374 17.922-63.824 26.884-100.42 26.884zM247.602 152.23c62.744 0 94.104-19.042 94.104-57.14 0-40.336-28.754-60.492-86.264-60.492-65.724 0-98.586 19.422-98.586 58.254-0.002 39.59 30.244 59.378 90.746 59.378zM239.76 448c-47.054 0-70.586 25.764-70.586 77.308 0 55.262 23.532 82.906 70.586 82.906 22.402 0 39.958-8.596 52.652-25.768 10.458-15.69 15.69-34.36 15.69-56.022 0-52.278-22.786-78.424-68.342-78.424zM580.384 960c-21.656 0-40.14-8.214-55.454-24.648-15.314-16.436-22.97-36.216-22.97-59.376 0-22.41 7.658-41.82 22.97-58.258 15.308-16.434 33.792-24.64 55.454-24.64 20.91 0 39.028 8.208 54.34 24.64 15.312 16.438 22.96 35.848 22.96 58.258 0 23.16-7.648 42.944-22.96 59.376-15.318 16.434-33.43 24.648-54.34 24.648zM643.13 704.002h-126.606c1.496-14.336-0.64-36.042-0.64-71.14v-348.432c0-35.856 2.136-64.774 0.64-76.036h126.606c-1.5 16.376-5.394 44.668-5.394 82.758v343.946c-0.006 32.864 3.894 54.568 5.394 68.904zM922.336 315.8c-32.872 0-49.082 25.028-49.082 75.066v206.64h49.864c8.96 0 17.032 0.492 27.118-0.246 10.086-0.748 14.152-0.25 19.278-0.25v106.99h-96.258v47.616c0 17.922 2.816 34.302 5.054 44.542h-129.958c2.242-10.24 2.028-25.876 2.028-46.79v-45.368h-56.32v-106.988c15.364 2.24 29.090 3.356 38.796 3.356l17.524-1.118v-202.786c0-62.742 7.958-108.672 23.636-137.8 20.922-38.84 57.622-58.258 112.136-58.258 38.848 0 73.118 7.464 98.714 22.41v112.032c-20.474-12.7-39.382-19.048-62.53-19.048z" />
448<glyph unicode="&#xeab6;" glyph-name="wordpress" d="M128 448.008c0-148.026 88.322-275.968 216.43-336.578l-183.178 488.784c-21.308-46.508-33.252-97.982-33.252-152.206zM771.228 466.872c0 46.234-17.054 78.236-31.654 103.142-19.458 30.82-37.72 56.894-37.72 87.716 0 34.374 26.766 66.376 64.486 66.376 1.704 0 3.32-0.204 4.976-0.302-68.316 60.97-159.34 98.196-259.308 98.196-134.16 0-252.186-67.046-320.844-168.568 9.010-0.282 17.506-0.454 24.712-0.454 40.154 0 102.34 4.752 102.34 4.752 20.69 1.182 23.132-28.434 2.458-30.822 0 0-20.81-2.368-43.952-3.55l139.834-405.106 84.044 245.456-59.822 159.65c-20.688 1.184-40.278 3.55-40.278 3.55-20.702 1.192-18.272 32.002 2.438 30.822 0 0 63.4-4.752 101.134-4.752 40.146 0 102.35 4.752 102.35 4.752 20.702 1.182 23.14-28.434 2.446-30.822 0 0-20.834-2.372-43.948-3.55l138.78-402.018 38.312 124.632c16.58 51.75 29.216 88.9 29.216 120.9zM518.742 415.296l-115.226-326.058c34.416-9.858 70.794-15.238 108.488-15.238 44.716 0 87.604 7.518 127.518 21.2-1.018 1.602-1.974 3.304-2.75 5.154l-118.030 314.942zM848.962 627.428c1.652-11.91 2.588-24.686 2.588-38.458 0-37.93-7.292-80.596-29.202-133.95l-117.286-330.272c114.162 64.828 190.938 185.288 190.938 323.258 0 65.030-17.060 126.16-47.038 179.422zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 0c-247.424 0-448 200.576-448 448s200.576 448 448 448 448-200.576 448-448-200.576-448-448-448z" />
449<glyph unicode="&#xeab7;" glyph-name="wordpress2" d="M518.742 415.296l118.030-314.942c0.778-1.85 1.732-3.55 2.75-5.154-39.912-13.682-82.804-21.2-127.518-21.2-37.694 0-74.072 5.38-108.488 15.238l115.226 326.058zM896 448.006c0-137.97-76.776-258.43-190.94-323.258l117.286 330.272c21.912 53.354 29.204 96.020 29.204 133.95 0 13.772-0.938 26.548-2.588 38.458 29.978-53.262 47.038-114.392 47.038-179.422zM128 448.008c0 54.224 11.944 105.698 33.252 152.206l183.178-488.784c-128.108 60.61-216.43 188.552-216.43 336.578zM191.164 653.432c68.658 101.522 186.684 168.568 320.844 168.568 99.968 0 190.992-37.226 259.308-98.196-1.656 0.098-3.27 0.302-4.976 0.302-37.72 0-64.486-32.002-64.486-66.376 0-30.822 18.262-56.896 37.72-87.716 14.6-24.906 31.654-56.908 31.654-103.142 0-32.002-12.636-69.15-29.216-120.9l-38.312-124.632-138.78 402.018c23.116 1.178 43.948 3.55 43.948 3.55 20.694 2.388 18.258 32.004-2.446 30.822 0 0-62.204-4.752-102.35-4.752-37.734 0-101.134 4.752-101.134 4.752-20.71 1.18-23.14-29.63-2.438-30.822 0 0 19.59-2.366 40.278-3.55l59.822-159.65-84.044-245.456-139.834 405.106c23.142 1.182 43.952 3.55 43.952 3.55 20.674 2.388 18.232 32.004-2.458 30.822 0 0-62.186-4.752-102.34-4.752-7.206 0-15.702 0.172-24.712 0.454zM852 960h-680c-94.6 0-172-77.4-172-172v-680c0-94.6 77.4-172 172-172h680c94.6 0 172 77.4 172 172v680c0 94.6-77.4 172-172 172zM960 448c0-247.424-200.576-448-448-448s-448 200.576-448 448 200.576 448 448 448 448-200.576 448-448z" />
450<glyph unicode="&#xeab8;" glyph-name="joomla" d="M266.004 683.322c32.832 32.844 86.002 32.844 118.804 0.032l7.826-7.868 101.104 101.156-7.874 7.88c-57.624 57.7-138.514 77.878-212.42 60.522-10.594 65.182-67.088 114.924-135.174 114.956-75.65 0-136.954-61.442-136.97-137.158 0-65.336 45.59-120 106.662-133.83-23.138-77.45-4.242-164.834 56.846-225.984l227.826-227.9 100.996 101.214-227.81 227.886c-32.682 32.722-32.742 86.126 0.184 119.094zM1022.712 822.842c0.016 75.762-61.318 137.158-136.984 137.158-69.234 0-126.478-51.444-135.682-118.238-77.074 22.664-163.784 3.496-224.64-57.408l-227.84-227.9 101.102-101.172 227.766 227.856c32.94 32.966 85.988 32.906 118.684 0.184 32.8-32.83 32.8-86.114-0.032-118.956l-7.794-7.836 101.010-101.248 7.858 7.928c60.458 60.566 79.678 146.756 57.612 223.638 67.15 8.834 118.94 66.364 118.94 135.994zM906.266 208.936c18.102 74.458-1.976 156.324-60.108 214.5l-227.49 227.992-101.102-101.122 227.52-228.012c32.94-32.996 32.864-86.096 0.184-118.848-32.802-32.814-86.004-32.814-118.836 0.030l-7.766 7.79-100.994-101.246 7.732-7.728c61.516-61.594 149.618-80.438 227.368-56.488 12.632-62.682 67.934-109.804 134.258-109.804 75.604 0 136.968 61.35 136.968 137.126 0 69.2-51.18 126.456-117.734 135.81zM612.344 431.316l-227.536-227.992c-32.71-32.768-86.034-32.828-118.944 0.124-32.818 32.904-32.832 86.098-0.044 118.97l7.808 7.774-101.086 101.124-7.734-7.712c-58.76-58.802-78.56-141.834-59.45-216.982-60.398-14.26-105.358-68.634-105.358-133.496-0.016-75.746 61.332-137.126 136.982-137.126 65.1 0.032 119.588 45.418 133.54 106.382 74.702-18.552 156.998 1.304 215.344 59.756l227.49 227.96-101.012 101.218z" />
451<glyph unicode="&#xeab9;" glyph-name="blogger" d="M957.796 576h-57.406c-35.166 0-65.988 29.742-68.39 64v0c0.004 182.668-147.258 320-331.19 320h-167.824c-183.812 0-332.856-148-332.986-330.666v-362.798c0-182.654 149.174-330.536 332.984-330.536h358.42c183.948 0 332.596 147.882 332.596 330.536v234.382c0 36.502-29.44 75.082-66.204 75.082zM320 704h192c35.2 0 64-28.8 64-64s-28.8-64-64-64h-192c-35.2 0-64 28.8-64 64s28.8 64 64 64zM704 192h-384c-35.2 0-64 28.8-64 64s28.8 64 64 64h384c35.2 0 64-28.8 64-64s-28.8-64-64-64z" />
452<glyph unicode="&#xeaba;" glyph-name="blogger2" d="M853.348 960h-682.698c-94.246 0-170.65-76.418-170.65-170.682v-682.636c0-94.266 76.404-170.682 170.65-170.682h682.696c94.25 0 170.648 76.416 170.648 170.682l0.006 682.636c0 94.264-76.404 170.682-170.652 170.682zM896 311.902c0-136.99-111.486-247.902-249.444-247.902h-268.818c-137.856 0-249.738 110.912-249.738 247.902v272.098c0.096 137 111.88 248 249.738 248h125.868c137.952 0 248.398-103 248.394-240 1.802-25.694 24.922-48 51.292-48h43.052c27.574 0 49.656-28.934 49.656-56.312v-175.786zM704 320c0-35.2-28.8-64-64-64h-256c-35.2 0-64 28.8-64 64v0c0 35.2 28.8 64 64 64h256c35.2 0 64-28.8 64-64v0zM576 576c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v0c0 35.2 28.8 64 64 64h128c35.2 0 64-28.8 64-64v0z" />
453<glyph unicode="&#xeabb;" glyph-name="tumblr" d="M576.032 512l-0.002-234.184c0-59.418-0.77-93.656 5.53-110.5 6.25-16.754 21.918-34.146 38.99-44.202 22.684-13.588 48.542-20.376 77.708-20.376 51.854 0 82.478 6.848 133.742 40.54v-153.944c-43.7-20.552-81.866-32.594-117.324-40.922-35.5-8.242-73.86-12.406-115.064-12.406-46.828 0-74.456 5.886-110.41 17.656-35.958 11.868-66.66 28.806-92.020 50.54-25.45 21.922-43.022 45.208-52.848 69.832-9.826 24.636-14.716 60.414-14.716 107.244v359.1h-137.426v145.006c40.208 13.042 85.164 31.788 113.78 56.152 28.754 24.45 51.766 53.706 69.106 87.944 17.392 34.146 29.348 77.712 35.872 130.516h165.084l-0.002-255.996h255.968v-192h-255.968z" />
454<glyph unicode="&#xeabc;" glyph-name="tumblr2" d="M853.38 960h-682.692c-93.878 0-170.686-76.814-170.686-170.686v-682.626c0-93.938 76.808-170.688 170.686-170.688h682.692c93.87 0 170.62 76.75 170.62 170.688v682.628c-0.008 93.87-76.758 170.684-170.62 170.684zM731.716 135.312c-30.152-14.188-57.528-24.188-82-29.938-24.496-5.69-50.96-8.558-79.402-8.558-32.312 0-51.376 4.058-76.188 12.188-24.808 8.188-46 19.872-63.5 34.872-17.558 15.128-29.686 31.198-36.466 48.194-6.784 17.004-10.156 41.692-10.156 74.004v247.802h-95.996v100.066c27.744 9 59.936 21.934 79.684 38.75 19.84 16.872 35.718 37.058 47.684 60.684 12.004 23.566 20.25 53.626 24.752 90.066h100.5v-163.442h163.372v-126.126h-163.378v-181.188c0-41-0.528-64.626 3.816-76.25 4.312-11.56 15.126-23.56 26.902-30.5 15.656-9.376 33.504-14.060 53.626-14.060 35.786 0 71.378 11.626 106.75 34.876v-111.44z" />
455<glyph unicode="&#xeabd;" glyph-name="yahoo" d="M848 320l-14.858 416.020c-0.628 17.59 13.258 31.98 30.858 31.98h128c17.6 0 29.468-14.176 26.376-31.502l-74.376-416.498zM960 184c0-30.8-25.2-56-56-56h-16c-30.8 0-56 25.2-56 56v16c0 30.8 25.2 56 56 56h16c30.8 0 56-25.2 56-56v-16zM384 768c-212.078 0-384-143.268-384-320 0-176.73 171.922-320 384-320s384 143.27 384 320c0 176.732-171.922 320-384 320zM640 512h-74.262l-117.738-117.74v-74.26h96v-64h-256v64h96v74.26l-181.74 181.74h-42.062v64h191.606v-64h-42.064l106.26-106.26 32 32v74.26h192v-64z" />
456<glyph unicode="&#xeabe;" glyph-name="tux" d="M567.656 223.084c-81.944-38.118-158.158-37.716-209.34-34.020-61.052 4.41-110.158 21.124-131.742 35.732-13.3 9.006-31.384 5.522-40.39-7.782-9.004-13.302-5.52-31.386 7.782-40.39 34.698-23.486 96.068-40.954 160.162-45.58 10.866-0.784 22.798-1.278 35.646-1.278 55.782 0 126.626 5.316 202.42 40.57 14.564 6.778 20.878 24.074 14.104 38.64-6.776 14.566-24.076 20.872-38.642 14.108zM890.948 266.184c2.786 252.688 28.762 730.206-454.97 691.612-477.6-38.442-350.964-542.968-358.082-711.95-6.308-89.386-35.978-198.648-77.896-309.846h129.1c13.266 47.122 23.024 93.72 27.232 138.15 7.782-5.428 16.108-10.674 24.994-15.7 14.458-8.518 26.884-19.844 40.040-31.834 30.744-28.018 65.59-59.774 133.712-63.752 4.572-0.262 9.174-0.394 13.676-0.394 68.896 0 116.014 30.154 153.878 54.382 18.14 11.612 33.818 21.64 48.564 26.452 41.91 13.12 78.532 34.296 105.904 61.252 4.276 4.208 8.242 8.538 11.962 12.948 15.246-55.878 36.118-118.758 59.288-181.504h275.65c-66.174 102.224-134.436 202.374-133.052 330.184zM124.11 403.648c0 0.016 0 0.030-0.002 0.046-4.746 82.462 34.71 151.832 88.126 154.936 53.412 3.106 100.56-61.228 105.304-143.692 0-0.014 0.004-0.030 0.004-0.044 0.256-4.446 0.368-8.846 0.37-13.206-16.924-4.256-32.192-10.436-45.872-17.63-0.052 0.612-0.092 1.216-0.152 1.83 0 0.008 0 0.018 0 0.026-4.57 46.81-29.572 82.16-55.852 78.958-26.28-3.204-43.88-43.75-39.312-90.558 0-0.010 0.004-0.018 0.004-0.026 1.992-20.408 7.868-38.636 16.042-52.444-2.034-1.604-7.784-5.812-14.406-10.656-4.97-3.634-11.020-8.058-18.314-13.43-19.882 26.094-33.506 63.58-35.94 105.89zM665.26 199.822c-1.9-43.586-58.908-84.592-111.582-101.044l-0.296-0.096c-21.9-7.102-41.428-19.6-62.104-32.83-34.732-22.224-70.646-45.208-122.522-45.208-3.404 0-6.894 0.104-10.326 0.296-47.516 2.778-69.742 23.032-97.88 48.676-14.842 13.526-30.19 27.514-49.976 39.124l-0.424 0.244c-42.706 24.104-69.212 54.082-70.908 80.194-0.842 12.98 4.938 24.218 17.182 33.4 26.636 19.972 44.478 33.022 56.284 41.658 13.11 9.588 17.068 12.48 20 15.264 2.096 1.986 4.364 4.188 6.804 6.562 24.446 23.774 65.36 63.562 128.15 63.562 38.404 0 80.898-14.8 126.17-43.902 21.324-13.878 39.882-20.286 63.38-28.4 16.156-5.578 34.468-11.902 58.992-22.404l0.396-0.164c22.88-9.404 49.896-26.564 48.66-54.932zM652.646 302.194c-4.4 2.214-8.974 4.32-13.744 6.286-22.106 9.456-39.832 15.874-54.534 20.998 8.116 15.894 13.16 35.72 13.624 57.242 0 0.010 0 0.022 0 0.030 1.126 52.374-25.288 94.896-58.996 94.976-33.71 0.078-61.95-42.314-63.076-94.686 0-0.010 0-0.018 0-0.028-0.038-1.714-0.042-3.416-0.020-5.11-20.762 9.552-41.18 16.49-61.166 20.76-0.092 1.968-0.204 3.932-0.244 5.92 0 0.016 0 0.036 0 0.050-1.938 95.412 56.602 174.39 130.754 176.402 74.15 2.014 135.828-73.7 137.772-169.11 0-0.018 0-0.038 0-0.052 0.874-43.146-10.66-82.866-30.37-113.678z" />
457<glyph unicode="&#xeabf;" glyph-name="apple" d="M791.498 415.908c-1.294 129.682 105.758 191.876 110.542 194.966-60.152 88.020-153.85 100.078-187.242 101.472-79.742 8.074-155.596-46.948-196.066-46.948-40.368 0-102.818 45.754-168.952 44.552-86.916-1.292-167.058-50.538-211.812-128.38-90.304-156.698-23.126-388.84 64.89-515.926 43.008-62.204 94.292-132.076 161.626-129.58 64.842 2.588 89.362 41.958 167.756 41.958s100.428-41.958 169.050-40.67c69.774 1.296 113.982 63.398 156.692 125.796 49.39 72.168 69.726 142.038 70.924 145.626-1.548 0.706-136.060 52.236-137.408 207.134zM662.562 796.478c35.738 43.358 59.86 103.512 53.28 163.522-51.478-2.096-113.878-34.29-150.81-77.55-33.142-38.376-62.148-99.626-54.374-158.436 57.466-4.484 116.128 29.204 151.904 72.464z" />
458<glyph unicode="&#xeac0;" glyph-name="finder" d="M569.226 181.744c-0.002 0.044-0.002 0.088-0.004 0.132 0.002-0.044 0.002-0.088 0.004-0.132zM570.596 145.462c-0.012 0.234-0.022 0.466-0.032 0.702 0.010-0.234 0.020-0.466 0.032-0.702zM569.814 163.688c-0.006 0.178-0.012 0.356-0.020 0.536 0.010-0.182 0.016-0.358 0.020-0.536zM960 960h-896c-35.2 0-64-28.8-64-64v-896c0-35.2 28.8-64 64-64h493.832c0.044 0 0.088-0.006 0.132-0.006 0.042 0 0.084 0.006 0.126 0.006h401.91c35.2 0 64 28.8 64 64v896c0 35.2-28.8 64-64 64zM192 736c0 17.672 14.328 32 32 32s32-14.328 32-32v-64c0-17.672-14.328-32-32-32s-32 14.328-32 32v64zM960 0h-375.058c-6.7 42.082-10.906 85.476-13.388 127.604 0.006-0.116 0.010-0.228 0.018-0.344-19.696-2.146-39.578-3.26-59.572-3.26-133.65 0-262.382 48.656-362.484 137.006-14.906 13.156-16.326 35.906-3.168 50.812 13.158 14.904 35.906 16.326 50.814 3.168 86.936-76.728 198.748-118.986 314.838-118.986 19.086 0 38.052 1.166 56.816 3.416-2.192 118.194 6.876 211.914 7.026 213.404 0.898 8.996-2.050 17.952-8.118 24.654-6.066 6.702-14.682 10.526-23.724 10.526h-95.174c1.384 34.614 5.082 93.814 14.958 160.188 18.864 126.76 51.994 225.77 96.152 287.812h400.064v-896zM800 640c-17.674 0-32 14.328-32 32v64c0 17.672 14.326 32 32 32s32-14.328 32-32v-64c0-17.672-14.326-32-32-32zM540.496 124.768c-3.646-0.192-7.298-0.336-10.956-0.454 3.658 0.116 7.31 0.264 10.956 0.454zM512 124c4.692 0 9.374 0.074 14.050 0.196-4.676-0.122-9.358-0.196-14.050-0.196zM539.074 196.798c0.784 0.044 1.568 0.084 2.352 0.132-0.782-0.048-1.568-0.088-2.352-0.132zM525.084 196.2c1.074 0.030 2.146 0.072 3.218 0.11-1.072-0.038-2.144-0.082-3.218-0.11zM877.65 311.818c-13.156 14.91-35.908 16.322-50.812 3.168-72.642-64.114-162.658-104.136-258.022-115.57 0.43-23.278 1.294-47.496 2.754-72.156 111.954 12.21 217.786 58.614 302.912 133.746 14.908 13.156 16.326 35.906 3.168 50.812zM571.498 127.252c-4.606-0.5-9.222-0.936-13.848-1.322 4.626 0.384 9.244 0.822 13.848 1.322zM555.488 125.758c-3.906-0.312-7.822-0.576-11.742-0.806 3.92 0.226 7.834 0.496 11.742 0.806z" />
459<glyph unicode="&#xeac1;" glyph-name="android" d="M896 576c-35.2 0-64-28.8-64-64v-256c0-35.2 28.8-64 64-64s64 28.8 64 64v256c0 35.2-28.8 64-64 64zM128 576c-35.2 0-64-28.8-64-64v-256c0-35.2 28.8-64 64-64s64 28.8 64 64v256c0 35.2-28.802 64-64 64zM224 224c0-53.020 42.98-96 96-96v0-128c0-35.2 28.8-64 64-64s64 28.8 64 64v128h128v-128c0-35.2 28.8-64 64-64s64 28.8 64 64v128c53.020 0 96 42.98 96 96v352h-576v-352zM798.216 639.998c-9.716 87.884-59.004 163.792-129.62 209.646l32.024 64.046c7.904 15.806 1.496 35.028-14.31 42.932s-35.030 1.496-42.932-14.312l-32.142-64.286-8.35 3.316c-28.568 9.502-59.122 14.66-90.886 14.66-31.762 0-62.316-5.158-90.888-14.656l-8.348-3.316-32.142 64.282c-7.904 15.808-27.128 22.212-42.932 14.312-15.808-7.904-22.214-27.126-14.312-42.932l32.022-64.046c-70.616-45.852-119.904-121.762-129.622-209.644v-32h574.222v31.998h-1.784zM416 704c-17.674 0-32 14.328-32 32 0 17.648 14.288 31.958 31.93 31.996 0.032 0 0.062-0.002 0.094-0.002 0.018 0 0.036 0.002 0.052 0.002 17.638-0.042 31.924-14.35 31.924-31.996 0-17.672-14.326-32-32-32zM608 704c-17.674 0-32 14.328-32 32 0 17.646 14.286 31.954 31.924 31.996 0.016 0 0.034-0.002 0.050-0.002 0.032 0 0.064 0.002 0.096 0.002 17.64-0.038 31.93-14.348 31.93-31.996 0-17.672-14.326-32-32-32z" />
460<glyph unicode="&#xeac2;" glyph-name="windows" d="M412.23 448.086c-47.708 24.518-94.086 36.958-137.88 36.958-5.956 0-11.952-0.18-17.948-0.708-55.88-4.624-106.922-19.368-139.75-30.828-8.708-3.198-17.634-6.576-26.83-10.306l-89.822-311.394c61.702 22.832 116.292 33.938 166.27 33.938 80.846 0 139.528-30.208 187.992-61.304 22.962 77.918 78.044 266.090 94.482 322.324-11.95 7.284-24.076 14.57-36.514 21.32zM528.348 368.93l-90.446-314.148c26.832-15.372 117.098-64.050 186.212-64.050 55.792 0 118.252 14.296 190.834 43.792l86.356 301.976c-58.632-18.922-114.876-28.52-167.464-28.52-95.95 0-163.114 31.098-205.492 60.95zM292.822 591.21c77.118-0.798 134.152-30.208 181.416-60.502l92.752 317.344c-19.546 11.196-70.806 39.094-107.858 48.6-24.386 5.684-50.020 8.616-77.204 8.616-51.796-0.976-108.388-13.946-172.888-39.8l-88.44-310.596c64.808 24.436 120.644 36.34 172.086 36.34 0.046-0.002 0.136-0.002 0.136-0.002zM1024 761.876c-58.814-22.832-116.208-34.466-171.028-34.466-91.686 0-159.292 31.802-203.094 62.366l-91.95-318.236c61.746-39.708 128.29-59.878 198.122-59.878 56.948 0 115.94 13.68 175.462 40.688l-0.182 2.222 3.734 0.886 88.936 306.418z" />
461<glyph unicode="&#xeac3;" glyph-name="windows8" d="M0.35 448l-0.35 312.074 384 52.144v-364.218zM448 821.518l511.872 74.482v-448h-511.872zM959.998 384l-0.126-448-511.872 72.016v375.984zM384 16.164l-383.688 52.594-0.020 315.242h383.708z" />
462<glyph unicode="&#xeac4;" glyph-name="soundcloud" d="M891.96 445.796c-18.086 0-35.348-3.52-51.064-9.856-10.506 114.358-110.29 204.060-232 204.060-29.786 0-58.682-5.63-84.318-15.164-9.96-3.702-12.578-7.52-12.578-14.916v-402.714c0-7.766 6.24-14.234 14.124-14.996 0.336-0.034 363.536-0.21 365.89-0.21 72.904 0 131.986 56.816 131.986 126.894s-59.134 126.902-132.040 126.902zM400 192h32l16 224.22-16 223.78h-32l-16-223.78zM304 192h-32l-16 162.75 16 157.25h32l16-160zM144 192h32l16 128-16 128h-32l-16-128zM16 256h32l16 64-16 64h-32l-16-64z" />
463<glyph unicode="&#xeac5;" glyph-name="soundcloud2" d="M853.372 960h-682.684c-93.874 0-170.686-76.806-170.686-170.68v-469.316l15.998 63.996h32l16-64-16-64h-32l-16 63.996v-213.304c0.002-93.938 76.814-170.692 170.688-170.692h682.684c93.878 0 170.628 76.754 170.628 170.692v212.202c0-70.078-59.082-126.894-131.986-126.894-2.354 0-365.554 0.176-365.89 0.21-7.882 0.762-14.124 7.23-14.124 14.996v402.714c0 7.394 2.618 11.212 12.578 14.916 25.636 9.534 54.534 15.164 84.318 15.164 121.708 0 221.492-89.702 231.998-204.058 15.716 6.336 32.978 9.856 51.064 9.856 72.906 0 132.042-56.824 132.042-126.902v470.422c0 93.876-76.758 170.682-170.628 170.682zM176 192h-32l-16 128 16 128h32l16-128-16-128zM304 192h-32l-16 162.75 16 157.25h32l16-160-16-160zM432 192h-32l-16 224.22 16 223.78h32l16-223.78-16-224.22z" />
464<glyph unicode="&#xeac6;" glyph-name="skype" d="M975.31 382.062c2.812 20.8 4.43 41.946 4.43 63.472 0 258.31-210.542 467.744-470.206 467.744-25.808 0-51.11-2.12-75.732-6.16-44.144 28.768-96.684 45.534-153.224 45.534-155.046 0-280.578-125.616-280.578-280.612 0-56.396 16.598-108.788 45.18-152.778-3.85-24.034-5.818-48.646-5.818-73.718 0-258.352 210.434-467.764 470.17-467.764 29.314 0 57.854 2.854 85.592 7.866 43.1-26.738 93.868-42.296 148.292-42.296 155.004-0.002 280.584 125.646 280.584 280.626-0.006 58.586-17.92 113.056-48.69 158.086zM553.48 100.808c-149.41-7.784-219.328 25.274-283.378 85.382-71.53 67.134-42.796 143.708 15.48 147.602 58.244 3.888 93.214-66.026 124.3-85.472 31.048-19.376 149.188-63.52 211.588 7.816 67.952 77.656-45.188 117.84-128.118 130.004-118.406 17.532-267.9 81.584-256.27 207.814 11.632 126.148 107.164 190.828 207.7 199.952 128.154 11.634 211.582-19.414 277.57-75.72 76.3-65.058 35.016-137.788-13.598-143.64-48.424-5.818-102.808 107.008-209.582 108.704-110.054 1.728-184.434-114.522-48.572-147.568 135.932-33.010 281.5-46.572 333.922-170.834 52.458-124.274-81.508-256.25-231.042-264.040z" />
465<glyph unicode="&#xeac7;" glyph-name="reddit" d="M256 320c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 320c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM643.112 183.222c16.482 12.986 40.376 10.154 53.364-6.332s10.152-40.378-6.334-53.366c-45.896-36.158-115.822-59.524-178.142-59.524-62.322 0-132.248 23.366-178.144 59.522-16.486 12.99-19.32 36.882-6.332 53.368 12.99 16.482 36.882 19.318 53.366 6.332 26.422-20.818 78.722-43.222 131.11-43.222s104.688 22.404 131.112 43.222zM1024 448c0 70.692-57.308 128-128 128-48.116 0-89.992-26.57-111.852-65.82-65.792 35.994-145.952 59.246-233.28 64.608l76.382 171.526 146.194-42.2c13.152-37.342 48.718-64.114 90.556-64.114 53.020 0 96 42.98 96 96s-42.98 96-96 96c-36.56 0-68.342-20.442-84.554-50.514l-162.906 47.024c-18.224 5.258-37.538-3.722-45.252-21.052l-103.77-233.026c-85.138-5.996-163.262-29.022-227.636-64.236-21.864 39.25-63.766 65.804-111.882 65.804-70.692 0-128-57.308-128-128 0-52.312 31.402-97.254 76.372-117.102-8.070-24.028-12.372-49.104-12.372-74.898 0-176.73 200.576-320 448-320 247.422 0 448 143.27 448 320 0 25.792-4.3 50.862-12.368 74.886 44.97 19.85 76.368 64.802 76.368 117.114zM864 772c19.882 0 36-16.118 36-36s-16.118-36-36-36-36 16.118-36 36 16.118 36 36 36zM64 448c0 35.29 28.71 64 64 64 25.508 0 47.572-15.004 57.846-36.646-33.448-25.366-61.166-54.626-81.666-86.738-23.524 9.47-40.18 32.512-40.18 59.384zM512 12c-205.45 0-372 109.242-372 244s166.55 244 372 244c205.45 0 372-109.242 372-244s-166.55-244-372-244zM919.82 388.616c-20.5 32.112-48.218 61.372-81.666 86.738 10.276 21.642 32.338 36.646 57.846 36.646 35.29 0 64-28.71 64-64 0-26.872-16.656-49.914-40.18-59.384z" />
466<glyph unicode="&#xeac8;" glyph-name="linkedin" d="M852 960h-680c-94.6 0-172-77.4-172-172v-680c0-94.6 77.4-172 172-172h680c94.6 0 172 77.4 172 172v680c0 94.6-77.4 172-172 172zM384 128h-128v448h128v-448zM320 640c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zM832 128h-128v256c0 35.346-28.654 64-64 64s-64-28.654-64-64v-256h-128v448h128v-79.472c26.398 36.264 66.752 79.472 112 79.472 79.53 0 144-71.634 144-160v-288z" />
467<glyph unicode="&#xeac9;" glyph-name="linkedin2" d="M384 576h177.106v-90.782h2.532c24.64 44.194 84.958 90.782 174.842 90.782 186.946 0 221.52-116.376 221.52-267.734v-308.266h-184.61v273.278c0 65.184-1.334 149.026-96.028 149.026-96.148 0-110.82-70.986-110.82-144.292v-278.012h-184.542v576zM64 576h192v-576h-192v576zM256 736c0-53.019-42.981-96-96-96s-96 42.981-96 96c0 53.019 42.981 96 96 96s96-42.981 96-96z" />
468<glyph unicode="&#xeaca;" glyph-name="lastfm" d="M819.58 146.372c-106.666 0.418-163.498 52.582-202.992 144.502l-11.298 25.082-97.37 222c-32.292 78.586-112.422 131.672-202.834 131.672-122.334 0-221.584-99.252-221.584-221.672 0-122.418 99.248-221.668 221.584-221.668 85.338 0 159.542 48.25 196.582 119l39.376-90.832c-55.912-68.17-140.876-111.584-235.954-111.584-168.51 0-305.090 136.502-305.090 305.086 0 168.504 136.58 305.172 305.084 305.172 127.166 0 229.836-67.918 282-188.252 3.956-9.336 55.158-129.086 99.826-231 27.668-63.082 51.26-104.918 127.756-107.504 75.168-2.582 126.756 43.168 126.756 101.008 0 56.5-39.336 70.082-105.75 92.164-119.382 39.334-181.006 78.834-181.006 173.502 0 92.336 62.832 153.918 164.914 153.918 66.496 0 114.506-29.586 147.76-88.586l-65.256-33.332c-24.59 34.414-51.708 48-86.172 48-47.912 0-82.126-33.336-82.126-77.666 0-62.922 56.294-72.422 135.006-98.254 105.958-34.5 155.208-73.92 155.208-172.336 0.002-103.336-88.672-178.588-204.42-178.42z" />
469<glyph unicode="&#xeacb;" glyph-name="lastfm2" d="M852 960h-680c-94.6 0-172-77.4-172-172v-680c0-94.6 77.4-172 172-172h680c94.6 0 172 77.4 172 172v680c0 94.6-77.4 172-172 172zM746.516 199.112c-177.558 0-239.138 80.056-271.972 179.604l-32.85 102.636c-24.638 74.926-53.374 133.424-143.684 133.424-62.62 0-126.246-45.158-126.246-171.398 0-98.528 50.288-160.112 121.114-160.112 80.042 0 133.42 59.53 133.42 59.53l32.85-89.288c0 0-55.436-54.394-171.398-54.394-143.692 0-223.75 84.152-223.75 240.164 0 162.162 80.058 257.61 230.928 257.61 136.506 0 205.28-49.264 248.376-182.692l33.872-102.626c24.636-74.93 67.734-129.324 171.396-129.324 69.792 0 106.734 15.398 106.734 53.368 0 29.77-17.44 51.32-69.784 63.64l-69.8 16.414c-85.174 20.524-119.044 64.658-119.044 134.452 0 111.872 90.32 146.768 182.686 146.768 104.69 0 168.322-37.976 176.532-130.344l-102.634-12.32c-4.108 44.132-30.792 62.61-80.054 62.61-45.164 0-72.872-20.53-72.872-55.426 0-30.79 13.342-49.266 58.494-59.53l65.684-14.364c88.27-20.532 135.492-63.64 135.492-146.772-0.004-102.634-86.216-141.63-213.49-141.63z" />
470<glyph unicode="&#xeacc;" glyph-name="delicious" d="M853.376 960h-682.69c-93.876 0-170.686-76.816-170.686-170.692v-682.624c0-93.93 76.81-170.684 170.686-170.684h682.69c93.874 0 170.624 76.752 170.624 170.684v682.624c0 93.876-76.75 170.692-170.624 170.692zM960 106.684c0-28.334-11.14-55.082-31.37-75.316-20.222-20.228-46.948-31.368-75.254-31.368h-341.376v448h-448v341.308c0 28.308 11.15 55.050 31.396 75.296 20.244 20.246 46.984 31.396 75.29 31.396h341.314v-448h448v-341.316z" />
471<glyph unicode="&#xeacd;" glyph-name="stumbleupon" d="M852 960h-680c-94.6 0-172-77.4-172-172v-680c0-94.6 77.4-172 172-172h680c94.6 0 172 77.4 172 172v680c0 94.6-77.4 172-172 172zM512 640c-35.29 0-64-28.71-64-64v-256c0-105.872-86.13-192-192-192s-192 86.128-192 192v128h128v-128c0-35.29 28.71-64 64-64s64 28.71 64 64v256c0 105.87 86.13 192 192 192s192-86.13 192-178v-62l-82-24-46 24v62c0 21.29-28.71 50-64 50zM960 320c0-105.872-86.13-192-192-192s-192 86.128-192 206v124l46-24 82 24v-124c0-49.29 28.71-78 64-78s64 28.71 64 64v128h128v-128z" />
472<glyph unicode="&#xeace;" glyph-name="stumbleupon2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 704c-35.29 0-64-28.71-64-64v-256c0-105.87-86.13-192-192-192s-192 86.13-192 192v128h128v-128c0-35.29 28.71-64 64-64s64 28.71 64 64v256c0 105.87 86.13 192 192 192s192-86.13 192-178v-62l-82-24-46 24v62c0 21.29-28.71 50-64 50zM768 192c-105.87 0-192 86.13-192 206v124l46-24 82 24v-124c0-49.29 28.71-78 64-78s64 28.71 64 64v128h128v-128c0-105.87-86.13-192-192-192z" />
473<glyph unicode="&#xeacf;" glyph-name="stackoverflow" d="M1024 320v-384h-1024v384h128v-256h768v256zM192 256h640v-128h-640zM207.152 394.534l27.698 124.964 624.832-138.496-27.698-124.964zM279.658 651.442l54.092 116.006 580.032-270.464-54.092-116.006zM991.722 598.524l-77.922-101.55-507.746 389.608 56.336 73.418h58.244z" />
474<glyph unicode="&#xead0;" glyph-name="pinterest" d="M512.006 959.998c-282.774 0-512.006-229.23-512.006-511.996 0-216.906 134.952-402.166 325.414-476.772-4.478 40.508-8.518 102.644 1.774 146.876 9.298 39.954 60.040 254.5 60.040 254.5s-15.32 30.664-15.32 76.008c0 71.19 41.268 124.336 92.644 124.336 43.68 0 64.784-32.794 64.784-72.12 0-43.928-27.964-109.604-42.404-170.464-12.060-50.972 25.556-92.536 75.814-92.536 91.008 0 160.958 95.96 160.958 234.466 0 122.584-88.088 208.298-213.868 208.298-145.678 0-231.186-109.274-231.186-222.19 0-44.008 16.95-91.196 38.102-116.844 4.182-5.070 4.792-9.516 3.548-14.68-3.884-16.18-12.522-50.96-14.216-58.076-2.234-9.368-7.422-11.356-17.124-6.842-63.95 29.77-103.926 123.264-103.926 198.348 0 161.51 117.348 309.834 338.294 309.834 177.61 0 315.634-126.56 315.634-295.704 0-176.458-111.256-318.466-265.676-318.466-51.886 0-100.652 26.958-117.35 58.796 0 0-25.672-97.766-31.894-121.71-11.564-44.468-42.768-100.218-63.642-134.226 47.91-14.832 98.818-22.832 151.604-22.832 282.768 0.002 511.996 229.23 511.996 512 0 282.766-229.228 511.996-511.994 511.996z" />
475<glyph unicode="&#xead1;" glyph-name="pinterest2" d="M853.35 960h-682.704c-94.25 0-170.646-76.42-170.646-170.686v-682.63c0-94.266 76.398-170.684 170.646-170.684h682.704c94.25 0 170.65 76.418 170.65 170.684v682.63c0 94.266-76.4 170.686-170.65 170.686zM573.288 155.976c-51.886 0-100.652 26.958-117.35 58.796 0 0-25.674-97.766-31.896-121.71-11.562-44.468-42.766-100.218-63.64-134.226l-34.986 12.394c-4.478 40.508-8.518 102.644 1.774 146.876 9.298 39.954 60.040 254.5 60.040 254.5s-15.32 30.664-15.32 76.008c0 71.19 41.268 124.336 92.64 124.336 43.684 0 64.786-32.794 64.786-72.12 0-43.928-27.964-109.604-42.404-170.464-12.060-50.972 25.556-92.536 75.814-92.536 91.008 0 160.958 95.96 160.958 234.466 0 122.584-88.088 208.298-213.87 208.298-145.676 0-231.186-109.274-231.186-222.19 0-44.008 16.95-91.196 38.102-116.844 4.182-5.070 4.792-9.516 3.548-14.68-3.884-16.18-12.522-50.96-14.216-58.076-2.234-9.368-7.422-11.356-17.124-6.842-63.95 29.77-103.926 123.264-103.926 198.348 0 161.51 117.348 309.834 338.294 309.834 177.61 0 315.634-126.56 315.634-295.704 0.004-176.456-111.252-318.464-265.672-318.464z" />
476<glyph unicode="&#xead2;" glyph-name="xing" d="M853.342 960h-682.656c-93.874 0-170.686-76.81-170.686-170.69v-682.622c0-93.938 76.812-170.688 170.686-170.688h682.656c93.876 0 170.658 76.75 170.658 170.69v682.62c0 93.88-76.782 170.69-170.658 170.69zM311.778 293.212h-111.264c-6.702 0-11.708 3.008-14.542 7.584-2.934 4.758-3.084 10.928 0 17.068l118.22 208.626c0.126 0.228 0.126 0.38 0 0.632l-75.23 130.232c-3.112 6.196-3.566 12.314-0.632 17.068 2.834 4.602 8.47 6.954 15.172 6.954h111.264c17.070 0 25.44-10.998 30.978-20.862 0 0 76.040-132.66 76.498-133.392-4.504-7.94-120.118-212.42-120.118-212.42-5.688-10.262-13.704-21.49-30.346-21.49zM837.912 809.462l-246.352-435.58c-0.15-0.23-0.15-0.51 0-0.734l156.862-286.59c3.112-6.168 3.186-12.442 0.226-17.194-2.83-4.576-8.066-7.104-14.766-7.104h-111.14c-17.044 0-25.566 11.326-31.080 21.192 0 0-157.696 289.292-158.1 290.046 7.888 13.96 247.594 439.046 247.594 439.046 5.968 10.724 13.174 21.192 29.788 21.192h112.406c6.702 0 11.962-2.53 14.792-7.106 2.932-4.752 2.856-11.022-0.23-17.168z" />
477<glyph unicode="&#xead3;" glyph-name="xing2" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM345.482 319.594h-92.534c-5.576 0-9.74 2.494-12.098 6.292-2.438 3.952-2.564 9.066 0 14.16l98.324 173.070c0.104 0.19 0.104 0.316 0 0.526l-62.568 108.038c-2.588 5.138-2.966 10.212-0.526 14.158 2.358 3.818 7.044 5.77 12.62 5.77h92.534c14.2 0 21.158-9.124 25.768-17.308 0 0 63.24-110.050 63.618-110.656-3.746-6.59-99.9-176.22-99.9-176.22-4.732-8.516-11.398-17.83-25.238-17.83zM783.050 747.862l-204.882-361.344c-0.124-0.194-0.124-0.428 0-0.612l130.458-237.75c2.59-5.116 2.652-10.32 0.192-14.264-2.356-3.794-6.708-5.892-12.282-5.892h-92.434c-14.176 0-21.266 9.398-25.848 17.58 0 0-131.152 239.992-131.488 240.614 6.56 11.582 205.916 364.226 205.916 364.226 4.96 8.896 10.954 17.58 24.774 17.58h93.484c5.578 0 9.954-2.098 12.304-5.894 2.44-3.948 2.374-9.146-0.194-14.244z" />
478<glyph unicode="&#xead4;" glyph-name="flattr" d="M367.562 960c-243.358 0-367.562-140.162-367.562-401.856v0-549.034l238.39 238.628v278.896c0 108.416 28.73 177.406 125.118 192.894v0c33.672 6.584 103.75 4.278 148.306 4.278v0-165.596c0-1.51 0.208-4.206 0.594-5.586v0c1.87-6.704 7.93-11.616 15.116-11.63v0c4.062-0.008 7.868 2.104 11.79 5.97v0l413.122 412.974-584.874 0.062zM785.61 648.254v-278.89c0-108.414-28.736-177.414-125.116-192.894v0c-33.672-6.582-103.756-4.278-148.312-4.278v0 165.594c0 1.5-0.206 4.204-0.594 5.582v0c-1.864 6.712-7.922 11.622-15.112 11.63v0c-4.064 0.008-7.866-2.112-11.79-5.966v0l-413.124-412.966 584.874-0.066c243.354 0 367.564 140.168 367.564 401.852v0 549.028l-238.39-238.626z" />
479<glyph unicode="&#xead5;" glyph-name="foursquare" d="M851.564 869.91c-12.060 16.404-31.204 26.090-51.564 26.090h-608c-35.346 0-64-28.654-64-64v-768c0-25.884 15.592-49.222 39.508-59.128 7.918-3.28 16.234-4.874 24.478-4.874 16.656 0 33.026 6.504 45.268 18.748l237.256 237.254h165.49c27.992 0 52.736 18.192 61.086 44.91l160 512c6.074 19.432 2.538 40.596-9.522 57zM672.948 640h-224.948c-35.346 0-64-28.654-64-64s28.654-64 64-64h184.948l-40-128h-144.948c-16.974 0-33.252-6.742-45.254-18.746l-146.746-146.744v549.49h456.948l-40-128z" />
480<glyph unicode="&#xead6;" glyph-name="paypal" d="M880.634 829.226c25.698-12.576 48.094-30.486 64.502-52.482 34.536-46.3 44.236-109.372 28.836-187.466-15.56-79.026-50.416-145.734-101.166-194.044-9.282-9.702-19.222-18.746-29.804-27.080-54.356-42.802-122.998-65.428-198.508-65.428h-240.060l-64.564-302.726h-132.424l10.086 46.3h46.128l64.564 302.726h188.27c180.25 0 330.938 111.078 371.258 299.936 45.722 213.834-107.598 311.038-239.41 311.038h-449.278l-199.064-913.7h152.032l-24.032-110.3h263.66l64.564 302.726h188.27c180.25 0 330.938 111.078 371.258 299.936 33.716 157.68-40.804 251.932-135.118 290.564zM422.344 773.918h129.132c64.592 0 107.602-55.538 88.786-124.956-16.136-69.44-83.386-124.976-150.64-124.976h-123.758l56.48 249.932z" />
481<glyph unicode="&#xead7;" glyph-name="paypal2" d="M880.634 829.226c25.698-12.576 48.094-30.486 64.502-52.482 34.536-46.3 44.236-109.372 28.836-187.466-15.56-79.026-50.416-145.734-101.166-194.044-9.282-9.702-19.222-18.746-29.804-27.080-54.356-42.802-122.998-65.428-198.508-65.428h-240.060l-64.564-302.726h-132.424l10.086 46.3h46.128l64.564 302.726h188.27c180.25 0 330.938 111.078 371.258 299.936 45.722 213.834-107.598 311.038-239.41 311.038h-449.278l-199.064-913.7h152.032l-24.032-110.3h263.66l64.564 302.726h188.27c180.25 0 330.938 111.078 371.258 299.936 33.716 157.68-40.804 251.932-135.118 290.564zM640.262 648.962c-13.724-59.060-64.428-108.040-120.656-121.368l30.738 136.022h92.986c-0.728-4.806-1.722-9.69-3.068-14.654zM422.344 773.918h129.132c36.76 0 66.508-18.004 81.87-46.3h-134.154l-46.016-203.63h-87.312l56.48 249.93z" />
482<glyph unicode="&#xead8;" glyph-name="paypal3" d="M648.342 896c28.332 0 56.918-5.804 82.666-16.784 27.084-11.548 49.324-27.924 66.104-48.672 33.598-41.542 43.038-98.132 28.050-168.218-16.306-76.378-54.398-139.96-110.16-183.87-54.356-42.802-122.998-65.428-198.508-65.428h-240.060l-64.564-302.728h-132.424l171.176 785.7h397.72zM285.786 459.986h203.836c47.436 0 95.494 18.17 135.318 51.164 38.82 32.162 66.274 75.522 77.396 122.2 13.902 52.524 4.63 105.152-25.514 144.554-29.176 38.14-74.864 60.014-125.346 60.014h-180.282l-85.408-377.932zM648.342 960h-449.278l-199.064-913.7h152.032l-24.032-110.3h263.66l64.564 302.726h188.27c180.25 0 330.938 111.078 371.258 299.936 33.716 157.68-40.804 251.932-135.118 290.564 25.698-12.576 48.094-30.486 64.502-52.482 34.536-46.3 44.236-109.372 28.836-187.466-15.56-79.026-50.416-145.734-101.166-194.044-9.282-9.702-19.222-18.746-29.804-27.080-54.356-42.802-122.998-65.428-198.508-65.428h-240.060l-64.564-302.726h-132.424l10.086 46.3h46.128l64.564 302.726h188.27c180.25 0 330.938 111.078 371.258 299.936 45.722 213.834-107.598 311.038-239.41 311.038v0zM365.864 523.986l56.482 249.932h129.132c64.592 0 107.602-55.538 88.786-124.956-16.136-69.44-83.386-124.976-150.64-124.976h-123.76z" />
483<glyph unicode="&#xead9;" glyph-name="yelp" d="M608.876 306.532c-17.282-17.426-2.668-49.128-2.668-49.128l130.090-217.218c0 0 21.36-28.64 39.864-28.64 18.59 0 36.954 15.27 36.954 15.27l102.844 147.008c0 0 10.36 18.546 10.598 34.792 0.372 23.106-34.454 29.434-34.454 29.434l-243.488 78.192c-0.002-0.004-23.858 6.328-39.74-9.71zM596.532 416.016c12.46-21.128 46.828-14.972 46.828-14.972l242.938 71.006c0 0 33.106 13.466 37.832 31.418 4.64 17.954-5.46 39.622-5.46 39.622l-116.098 136.752c0 0-10.062 17.292-30.938 19.032-23.016 1.958-37.18-25.898-37.18-25.898l-137.27-216.010c0-0.004-12.134-21.516-0.652-40.95zM481.754 500.232c28.608 7.044 33.148 48.604 33.148 48.604l-1.944 345.87c0 0-4.314 42.666-23.486 54.232-30.070 18.242-38.982 8.718-47.596 7.444l-201.696-74.944c0 0-19.754-6.536-30.042-23.018-14.69-23.352 14.928-57.544 14.928-57.544l209.644-285.756c0 0 20.69-21.396 47.044-14.888zM431.944 360.262c0.722 26.676-32.030 42.7-32.030 42.7l-216.796 109.524c0 0-32.126 13.246-47.722 4.016-11.95-7.060-22.536-19.84-23.572-31.134l-14.12-173.812c0 0-2.116-30.114 5.69-43.82 11.054-19.442 47.428-5.902 47.428-5.902l253.096 55.942c9.832 6.61 27.074 7.204 28.026 42.486zM494.88 266.458c-21.726 11.156-47.724-11.95-47.724-11.95l-169.468-186.566c0 0-21.144-28.528-15.768-46.050 5.066-16.418 13.454-24.578 25.318-30.328l170.192-53.726c0 0 20.634-4.286 36.258 0.242 22.18 6.43 18.094 41.152 18.094 41.152l3.848 252.602c-0.002-0.002-0.868 24.334-20.75 34.624z" />
484<glyph unicode="&#xeada;" glyph-name="file-pdf" d="M842.012 370.52c-13.648 13.446-43.914 20.566-89.972 21.172-31.178 0.344-68.702-2.402-108.17-7.928-17.674 10.198-35.892 21.294-50.188 34.658-38.462 35.916-70.568 85.772-90.576 140.594 1.304 5.12 2.414 9.62 3.448 14.212 0 0 21.666 123.060 15.932 164.666-0.792 5.706-1.276 7.362-2.808 11.796l-1.882 4.834c-5.894 13.592-17.448 27.994-35.564 27.208l-10.916 0.344c-20.202 0-36.664-10.332-40.986-25.774-13.138-48.434 0.418-120.892 24.98-214.738l-6.288-15.286c-17.588-42.876-39.63-86.060-59.078-124.158l-2.528-4.954c-20.46-40.040-39.026-74.028-55.856-102.822l-17.376-9.188c-1.264-0.668-31.044-16.418-38.028-20.644-59.256-35.38-98.524-75.542-105.038-107.416-2.072-10.17-0.53-23.186 10.014-29.212l16.806-8.458c7.292-3.652 14.978-5.502 22.854-5.502 42.206 0 91.202 52.572 158.698 170.366 77.93 25.37 166.652 46.458 244.412 58.090 59.258-33.368 132.142-56.544 178.142-56.544 8.168 0 15.212 0.78 20.932 2.294 8.822 2.336 16.258 7.368 20.792 14.194 8.926 13.432 10.734 31.932 8.312 50.876-0.72 5.622-5.21 12.574-10.068 17.32zM211.646 145.952c7.698 21.042 38.16 62.644 83.206 99.556 2.832 2.296 9.808 8.832 16.194 14.902-47.104-75.124-78.648-105.066-99.4-114.458zM478.434 760.314c13.566 0 21.284-34.194 21.924-66.254s-6.858-54.56-16.158-71.208c-7.702 24.648-11.426 63.5-11.426 88.904 0 0-0.566 48.558 5.66 48.558v0zM398.852 322.506c9.45 16.916 19.282 34.756 29.33 53.678 24.492 46.316 39.958 82.556 51.478 112.346 22.91-41.684 51.444-77.12 84.984-105.512 4.186-3.542 8.62-7.102 13.276-10.65-68.21-13.496-127.164-29.91-179.068-49.862v0zM828.902 326.348c-4.152-2.598-16.052-4.1-23.708-4.1-24.708 0-55.272 11.294-98.126 29.666 16.468 1.218 31.562 1.838 45.102 1.838 24.782 0 32.12 0.108 56.35-6.072 24.228-6.18 24.538-18.734 20.382-21.332v0zM917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624z" />
485<glyph unicode="&#xeadb;" glyph-name="file-openoffice" d="M690.22 488.318c-60.668 28.652-137.97 34.42-194.834-6.048 69.14 6.604 144.958-4.838 195.106-57.124 48 55.080 124.116 65.406 192.958 59.732-57.488 38.144-133.22 33.024-193.23 3.44v0zM665.646 354.25c-68.376 1.578-134.434-23.172-191.1-60.104-107.176 45.588-242.736 37.124-334.002-38.982 26.33 0.934 52.006 7.446 78.056 10.792 95.182 9.488 196.588-14.142 268.512-79.824 29.772 43.542 71.644 78.242 119.652 99.922 63.074 30.52 134.16 33.684 202.82 34.52-41.688 28.648-94.614 33.954-143.938 33.676zM917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624z" />
486<glyph unicode="&#xeadc;" glyph-name="file-word" d="M639.778 484.108h44.21l-51.012-226.178-66.324 318.010h-106.55l-77.114-318.010-57.816 318.010h-111.394l113.092-511.88h108.838l76.294 302.708 68.256-302.708h100.336l129.628 511.88h-170.446v-91.832zM917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624z" />
487<glyph unicode="&#xeadd;" glyph-name="file-excel" d="M743.028 576h-135.292l-95.732-141.032-95.742 141.032h-135.29l162.162-242.464-182.972-269.536h251.838v91.576h-50.156l50.156 74.994 111.396-166.57h140.444l-182.976 269.536 162.164 242.464zM917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624z" />
488<glyph unicode="&#xeade;" glyph-name="libreoffice" d="M534.626 937.372c-12.444 12.444-37.026 22.628-54.626 22.628h-384c-17.6 0-32-14.4-32-32v-960c0-17.6 14.4-32 32-32h768c17.6 0 32 14.4 32 32v576c0 17.6-10.182 42.182-22.626 54.626l-338.748 338.746zM832 0h-704v896h351.158c2.916-0.48 8.408-2.754 10.81-4.478l337.556-337.554c1.722-2.402 3.996-7.894 4.476-10.81v-543.158zM864 960h-192c-17.6 0-21.818-10.182-9.374-22.626l210.746-210.746c12.446-12.446 22.628-8.228 22.628 9.372v192c0 17.6-14.4 32-32 32z" />
489<glyph unicode="&#xeadf;" glyph-name="html5" d="M60.538 960l82.144-921.63 368.756-102.37 369.724 102.524 82.3 921.476h-902.924zM784.63 658.572h-432.54l10.302-115.75h411.968l-31.042-347.010-231.844-64.254-231.572 64.254-15.83 177.512h113.494l8.048-90.232 125.862-33.916 0.278 0.078 125.934 33.992 13.070 146.55h-391.74l-30.494 341.8h566.214l-10.108-113.024z" />
490<glyph unicode="&#xeae0;" glyph-name="html52" d="M60.538 960l82.144-921.63 368.756-102.37 369.724 102.524 82.3 921.476h-902.924zM810.762 97.176l-297.226-82.376v-0.466l-0.776 0.234-0.782-0.234v0.466l-297.222 82.376-70.242 787.486h736.496l-70.248-787.486zM650.754 429.796l-13.070-146.552-126.21-34.070-125.862 33.916-8.050 90.234h-113.49l15.83-177.512 232.076-64.176 231.342 64.176 31.040 347.012h-411.966l-10.302 115.748h432.534l10.112 113.026h-566.218l30.498-341.802z" />
491<glyph unicode="&#xeae1;" glyph-name="css3" d="M152.388 911.478l-34.36-171.926h699.748l-21.884-111.054h-700.188l-33.892-171.898h699.684l-39.018-196.064-282.012-93.422-244.4 93.422 16.728 85.042h-171.898l-40.896-206.352 404.226-154.704 466.006 154.704 153.768 772.252z" />
492<glyph unicode="&#xeae2;" glyph-name="git" d="M1004.692 493.606l-447.096 447.080c-25.738 25.754-67.496 25.754-93.268 0l-103.882-103.876 78.17-78.17c12.532 5.996 26.564 9.36 41.384 9.36 53.020 0 96-42.98 96-96 0-14.82-3.364-28.854-9.362-41.386l127.976-127.974c12.532 5.996 26.566 9.36 41.386 9.36 53.020 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96c0 14.82 3.364 28.854 9.362 41.386l-127.976 127.974c-3.042-1.456-6.176-2.742-9.384-3.876v-266.968c37.282-13.182 64-48.718 64-90.516 0-53.020-42.98-96-96-96s-96 42.98-96 96c0 41.796 26.718 77.334 64 90.516v266.968c-37.282 13.18-64 48.72-64 90.516 0 14.82 3.364 28.852 9.36 41.384l-78.17 78.17-295.892-295.876c-25.75-25.776-25.75-67.534 0-93.288l447.12-447.080c25.738-25.75 67.484-25.75 93.268 0l445.006 445.006c25.758 25.762 25.758 67.54-0.002 93.29z" />
493<glyph unicode="&#xeae3;" glyph-name="svg" d="M928 544c-28.428 0-53.958-12.366-71.536-32h-189.956l134.318 134.318c26.312-1.456 53.11 7.854 73.21 27.956 37.49 37.49 37.49 98.274 0 135.764s-98.274 37.49-135.766 0c-20.102-20.102-29.41-46.898-27.956-73.21l-134.314-134.318v189.954c19.634 17.578 32 43.108 32 71.536 0 53.020-42.98 96-96 96s-96-42.98-96-96c0-28.428 12.366-53.958 32-71.536v-189.954l-134.318 134.318c1.454 26.312-7.856 53.11-27.958 73.21-37.49 37.49-98.274 37.49-135.764 0-37.49-37.492-37.49-98.274 0-135.764 20.102-20.102 46.898-29.412 73.212-27.956l134.32-134.318h-189.956c-17.578 19.634-43.108 32-71.536 32-53.020 0-96-42.98-96-96s42.98-96 96-96c28.428 0 53.958 12.366 71.536 32h189.956l-134.318-134.318c-26.314 1.456-53.11-7.854-73.212-27.956-37.49-37.492-37.49-98.276 0-135.766 37.492-37.49 98.274-37.49 135.764 0 20.102 20.102 29.412 46.898 27.958 73.21l134.316 134.32v-189.956c-19.634-17.576-32-43.108-32-71.536 0-53.020 42.98-96 96-96s96 42.98 96 96c0 28.428-12.366 53.958-32 71.536v189.956l134.318-134.318c-1.456-26.312 7.854-53.11 27.956-73.21 37.492-37.49 98.276-37.49 135.766 0s37.49 98.274 0 135.766c-20.102 20.102-46.898 29.41-73.21 27.956l-134.32 134.316h189.956c17.576-19.634 43.108-32 71.536-32 53.020 0 96 42.98 96 96s-42.982 96-96.002 96z" />
494<glyph unicode="&#xeae4;" glyph-name="codepen" d="M945.75 591.958l-448 298.666c-10.748 7.166-24.752 7.166-35.5 0l-448-298.666c-8.902-5.934-14.25-15.926-14.25-26.624v-298.666c0-10.7 5.348-20.692 14.25-26.624l448-298.666c5.374-3.584 11.562-5.376 17.75-5.376s12.376 1.792 17.75 5.376l448 298.666c8.902 5.934 14.25 15.926 14.25 26.624v298.666c0 10.698-5.348 20.69-14.25 26.624zM480 305.124l-166.312 110.876 166.312 110.874 166.312-110.874-166.312-110.876zM512 582.458v221.75l358.31-238.876-166.31-110.874-192 128zM448 582.458l-192-128-166.312 110.874 358.312 238.876v-221.75zM198.312 416l-134.312-89.542v179.082l134.312-89.54zM256 377.542l192-128v-221.748l-358.312 238.872 166.312 110.876zM512 249.542l192 128 166.312-110.876-358.312-238.874v221.75zM761.688 416l134.312 89.54v-179.084l-134.312 89.544z" />
495<glyph unicode="&#xeae5;" glyph-name="chrome" d="M258.278 513.458l-146.532 253.802c93.818 117.464 238.234 192.74 400.254 192.74 187.432 0 351.31-100.736 440.532-251h-417.77c-7.504 0.65-15.092 1-22.762 1-121.874 0-224.578-83.644-253.722-196.542zM695.306 635h293.46c22.74-57.93 35.234-121.004 35.234-187 0-280.826-226.1-508.804-506.186-511.926l209.394 362.678c29.48 42.378 46.792 93.826 46.792 149.248 0 73.17-30.164 139.42-78.694 187zM326 448c0 102.56 83.44 186 186 186s186-83.44 186-186c0-102.56-83.44-186-186-186s-186 83.44-186 186zM582.182 195.558l-146.578-253.878c-246.532 36.884-435.604 249.516-435.604 506.32 0 91.218 23.884 176.846 65.696 251.024l209.030-362.054c41.868-89.112 132.476-150.97 237.274-150.97 24.3 0 47.836 3.34 70.182 9.558z" />
496<glyph unicode="&#xeae6;" glyph-name="firefox" d="M1022.526 625.86l-11.86-76.080c0 0-16.954 140.856-37.732 193.514-31.846 80.688-46.014 80.040-46.108 79.922 21.33-54.204 17.462-83.324 17.462-83.324s-37.792 102.998-137.712 135.768c-110.686 36.282-170.57 26.364-177.488 24.486-1.050 0.008-2.064 0.010-3.030 0.010 0.818-0.062 1.612-0.146 2.426-0.212-0.034-0.020-0.090-0.042-0.082-0.052 0.45-0.548 122.306-21.302 143.916-50.996 0 0-51.76 0-103.272-14.842-2.328-0.666 189.524-23.964 228.746-215.674 0 0-21.030 43.876-47.040 51.328 17.106-52.036 12.714-150.776-3.576-199.85-2.096-6.312-4.24 27.282-36.328 41.75 10.28-73.646-0.616-190.456-51.708-222.632-3.982-2.504 32.030 115.31 7.242 69.762-142.708-218.802-311.404-100.972-387.248-49.11 38.866-8.462 112.654 1.318 145.314 25.612 0.042 0.030 0.078 0.056 0.118 0.086 35.468 24.252 56.472 41.964 75.334 37.772 18.874-4.214 31.438 14.726 16.78 31.53-14.676 16.838-50.314 39.978-98.524 27.366-34-8.904-76.134-46.522-140.448-8.432-49.364 29.25-54.012 53.546-54.45 70.376 1.218 5.966 2.754 11.536 4.576 16.624 5.682 15.87 22.912 20.658 32.494 24.438 16.256-2.792 30.262-7.862 44.968-15.406 0.19 4.894 0.252 11.39-0.018 18.76 1.41 2.802 0.538 11.252-1.722 21.58-1.302 10.308-3.42 20.974-6.752 30.692 0.012 0.002 0.020 0.010 0.030 0.014 0.056 0.018 0.108 0.040 0.156 0.070 0.078 0.044 0.146 0.112 0.208 0.19 0.012 0.020 0.030 0.034 0.044 0.052 0.082 0.124 0.154 0.272 0.198 0.466 1.020 4.618 12.022 13.524 25.718 23.1 12.272 8.58 26.702 17.696 38.068 24.752 10.060 6.248 17.72 10.882 19.346 12.098 0.618 0.466 1.358 1.012 2.164 1.636 0.15 0.116 0.3 0.232 0.454 0.354 0.094 0.074 0.19 0.148 0.286 0.226 5.41 4.308 13.484 12.448 15.178 29.578 0.004 0.042 0.010 0.080 0.012 0.122 0.050 0.504 0.092 1.014 0.13 1.534 0.028 0.362 0.050 0.726 0.072 1.096 0.014 0.284 0.032 0.566 0.044 0.856 0.030 0.674 0.050 1.364 0.060 2.064 0 0.040 0.002 0.076 0.004 0.116 0.022 1.658-0.006 3.386-0.104 5.202-0.054 1.014-0.126 1.93-0.298 2.762-0.008 0.044-0.018 0.092-0.028 0.136-0.018 0.082-0.036 0.164-0.058 0.244-0.036 0.146-0.076 0.292-0.122 0.43-0.006 0.018-0.010 0.032-0.016 0.046-0.052 0.16-0.112 0.314-0.174 0.464-0.004 0.006-0.004 0.010-0.006 0.016-1.754 4.108-8.32 5.658-35.442 6.118-0.026 0.002-0.050 0.002-0.076 0.002v0c-11.066 0.188-25.538 0.194-44.502 0.118-33.25-0.134-51.628 32.504-57.494 45.132 8.040 44.46 31.276 76.142 69.45 97.626 0.722 0.406 0.58 0.742-0.274 0.978 7.464 4.514-90.246 0.124-135.186-57.036-39.888 9.914-74.654 9.246-104.616 2.214-5.754 0.162-12.924 0.88-21.434 2.652-19.924 18.056-48.448 51.402-49.976 91.208 0 0-0.092-0.072-0.252-0.204-0.020 0.382-0.056 0.76-0.072 1.142 0 0-60.716-46.664-51.628-173.882-0.022-2.036-0.064-3.986-0.12-5.874-16.432-22.288-24.586-41.020-25.192-45.156-14.56-29.644-29.334-74.254-41.356-141.98 0 0 8.408 26.666 25.284 56.866-12.412-38.022-22.164-97.156-16.436-185.856 0 0 1.514 19.666 6.874 47.994 4.186-55.010 22.518-122.924 68.858-202.788 88.948-153.32 225.67-230.74 376.792-242.616 26.836-2.212 54.050-2.264 81.424-0.186 2.516 0.178 5.032 0.364 7.55 0.574 30.964 2.174 62.134 6.852 93.238 14.366 425.172 102.798 378.942 616.198 378.942 616.198z" />
497<glyph unicode="&#xeae7;" glyph-name="IE" d="M734.202 331.17h236.050c1.82 16.37 2.548 33.098 2.548 50.196 0 80.224-21.534 155.468-59.124 220.266 38.88 103.308 37.492 190.988-14.556 243.39-49.496 49.28-182.29 41.28-332.412-25.198-11.104 0.84-22.318 1.272-33.638 1.272-206.048 0-378.926-141.794-426.708-332.85 64.638 82.754 132.638 142.754 223.478 186.448-8.26-7.74-56.454-55.652-64.56-63.764-239.548-239.478-315.090-552.306-233.806-633.604 61.786-61.774 173.758-51.342 302.376 11.648 59.806-30.458 127.5-47.63 199.218-47.63 193.134 0 356.804 124.316 416.090 297.448h-237.868c-32.734-60.382-96.748-101.48-170.218-101.48-73.468 0-137.484 41.098-170.216 101.48-14.55 27.274-22.914 58.554-22.914 91.656v0.722h386.26zM348.302 447.196c5.456 97.11 86.2 174.584 184.766 174.584s179.312-77.472 184.766-174.584h-369.532zM896.966 796.192c33.526-33.88 32.688-96.214 4.012-174.022-49.136 74.908-120.518 133.936-204.792 167.64 90.106 38.638 163.406 43.756 200.78 6.382zM93.482-7.256c-42.782 42.796-29.884 132.618 25.23 240.832 34.308-96.27 101.156-177.090 187.336-229.154-95.43-43.318-173.536-50.674-212.566-11.678z" />
498<glyph unicode="&#xeae8;" glyph-name="opera" d="M510.046 960c-279.724 0-480.748-202.896-480.748-507.224 0-270.818 195.502-516.776 480.784-516.776 288.078 0 484.62 245.886 484.62 516.776 0 306.76-207.446 507.224-484.656 507.224zM688.358 461.458c-0.068-169.352-9.098-410.482-178.276-410.482v-0.034c-166.784 0-173.432 241.266-173.432 410.308 0 198.38 18.56 388.568 173.432 388.568 154.874 0 178.276-192.584 178.276-388.36z" />
499<glyph unicode="&#xeae9;" glyph-name="safari" d="M512 896c-24.064 0-47.708-1.792-70.824-5.212-0.3 0.782-0.624 1.548-0.982 2.296 12.826 10.002 19.55 23.83 16.634 37.552-3.734 17.564-22.394 29.364-46.434 29.364-5.18 0-10.458-0.562-15.68-1.672-30.168-6.414-50.146-28.622-45.482-50.562 2.834-13.338 14.292-23.338 30.164-27.384-0.032-0.972-0.016-1.95 0.042-2.934-200.622-57.53-347.438-242.338-347.438-461.448 0-265.098 214.904-480 480-480 265.098 0 480 214.902 480 480 0 265.096-214.902 480-480 480zM364.882 911.092c-2.706 12.726 12.48 27.19 33.158 31.584 4.132 0.878 8.29 1.324 12.354 1.324 16.036 0 28.694-6.864 30.784-16.69 1.596-7.51-3.070-15.61-11.386-21.904-7.034 4.966-16.016 7.126-25.1 5.196-9.044-1.922-16.348-7.508-20.758-14.856-10.184 2.45-17.508 8.084-19.052 15.346zM769.386 158.614c-43.968-43.968-97.21-75.278-155.31-92.154l-42.396 68.768-10.746-79.958c-16.090-2.152-32.426-3.27-48.934-3.27-97.228 0-188.636 37.864-257.386 106.614-43.968 43.966-75.278 97.21-92.154 155.308l68.768 42.398-79.96 10.746c-2.15 16.090-3.268 32.426-3.268 48.934 0 97.228 37.862 188.636 106.614 257.386 43.968 43.968 97.212 75.278 155.31 92.156l42.396-68.77 10.748 79.96c16.088 2.15 32.424 3.268 48.932 3.268 97.228 0 188.636-37.862 257.386-106.614 43.968-43.968 75.278-97.212 92.154-155.31l-68.77-42.398 79.96-10.746c2.152-16.088 3.27-32.424 3.27-48.932 0-97.228-37.864-188.636-106.614-257.386zM760.902 664.902l-196.978-149.704c-14.644 7.658-30.876 12.062-47.416 12.726l-51.080 107.18-3.068-118.664c-13.284-6.536-25.104-15.664-34.876-26.95l-63.088 22.364 46.092-48.538c-6.334-13.518-9.866-28.030-10.434-42.824l-107.158-51.066 118.738-3.068c0.38-0.768 0.774-1.526 1.17-2.282l-149.704-196.98 196.978 149.704c14.644-7.656 30.874-12.060 47.416-12.724l51.080-107.182 3.066 118.664c13.286 6.538 25.106 15.664 34.878 26.952l63.090-22.368-46.094 48.54c6.336 13.52 9.868 28.030 10.436 42.824l107.156 51.066-118.736 3.070c-0.378 0.766-0.774 1.524-1.17 2.28l149.702 196.98zM512.102 515.466v0zM492.042 509.902c6.726 1.43 13.444 2.118 20.056 2.118 4.144 0 8.25-0.27 12.294-0.796l0.092-0.032-0.010 0.022c8.732-1.144 17.176-3.5 25.132-6.896l-71.546-54.376-54.38-71.552c-2.376 5.594-4.27 11.484-5.58 17.652-11.026 51.86 22.080 102.836 73.942 113.86zM562.12 334.116v0 0c-9.056-5.544-19.182-9.684-30.16-12.018-6.726-1.43-13.444-2.118-20.054-2.118-4.15 0-8.258 0.272-12.308 0.798l-0.068 0.010c-8.734 1.142-17.174 3.5-25.132 6.894l71.544 54.376 54.38 71.554c2.376-5.594 4.27-11.486 5.58-17.654 8.69-40.882-10.056-81.2-43.782-101.842z" />
500<glyph unicode="&#xeaea;" glyph-name="IcoMoon" d="M259.544 448.002c0 65.416 53.030 118.446 118.446 118.446s118.446-53.030 118.446-118.446c0-65.416-53.030-118.446-118.446-118.446s-118.446 53.030-118.446 118.446zM512.004 960c-282.774 0-512.004-229.232-512.004-512s229.226-512 512.004-512c282.764 0 511.996 229.23 511.996 512 0 282.768-229.23 512-511.996 512zM379.396 0.718c-153.956 89.574-257.468 256.324-257.468 447.282s103.512 357.708 257.462 447.282c154.010-89.562 257.59-256.288 257.59-447.282 0-190.988-103.58-357.718-257.584-447.282z" />
501</font></defs></svg> \ No newline at end of file
diff --git a/app/Resources/static/themes/baggy/font/icomoon.ttf b/app/Resources/static/themes/baggy/font/icomoon.ttf
new file mode 100644
index 00000000..c03770c6
--- /dev/null
+++ b/app/Resources/static/themes/baggy/font/icomoon.ttf
Binary files differ
diff --git a/app/Resources/static/themes/baggy/font/icomoon.woff b/app/Resources/static/themes/baggy/font/icomoon.woff
new file mode 100644
index 00000000..121e0bdd
--- /dev/null
+++ b/app/Resources/static/themes/baggy/font/icomoon.woff
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/blank.png b/app/Resources/static/themes/baggy/img/blank.png
index 63e09844..63e09844 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/blank.png
+++ b/app/Resources/static/themes/baggy/img/blank.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/down.png b/app/Resources/static/themes/baggy/img/down.png
index b9d536a7..b9d536a7 100644
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/down.png
+++ b/app/Resources/static/themes/baggy/img/down.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/list.png b/app/Resources/static/themes/baggy/img/list.png
index bd5aff5a..bd5aff5a 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/list.png
+++ b/app/Resources/static/themes/baggy/img/list.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/table.png b/app/Resources/static/themes/baggy/img/table.png
index 859c4cd8..859c4cd8 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/table.png
+++ b/app/Resources/static/themes/baggy/img/table.png
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/top.png b/app/Resources/static/themes/baggy/img/top.png
index 954a8c0a..954a8c0a 100644
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/baggy/top.png
+++ b/app/Resources/static/themes/baggy/img/top.png
Binary files differ
diff --git a/app/Resources/static/themes/baggy/js/autoClose.js b/app/Resources/static/themes/baggy/js/autoClose.js
new file mode 100644
index 00000000..b0dafab2
--- /dev/null
+++ b/app/Resources/static/themes/baggy/js/autoClose.js
@@ -0,0 +1,8 @@
1var $ = global.jquery = require('jquery');
2
3$(document).ready(function () {
4 var currentUrl = window.location.href;
5 if (currentUrl.match('&closewin=true')) {
6 window.close();
7 }
8});
diff --git a/app/Resources/static/themes/baggy/js/autoCompleteTags.js b/app/Resources/static/themes/baggy/js/autoCompleteTags.js
new file mode 100755
index 00000000..edd0a421
--- /dev/null
+++ b/app/Resources/static/themes/baggy/js/autoCompleteTags.js
@@ -0,0 +1,46 @@
1var $ = global.jquery = require('jquery');
2
3jQuery(function ($) {
4 function split(val) {
5 return val.split(/,\s*/);
6 }
7 function extractLast(term) {
8 return split(term).pop();
9 }
10
11
12 $('#value').bind('keydown', function (event) {
13 if (event.keyCode === $.ui.keyCode.TAB && $(this).data('ui-autocomplete').menu.active) {
14 event.preventDefault();
15 }
16 }).autocomplete({
17 source: function (request, response) {
18 $.getJSON('./?view=tags', {
19 term: extractLast(request.term),
20 //id: $(':hidden#entry_id').val()
21 }, response);
22 },
23 search: function () {
24 // custom minLength
25 var term = extractLast(this.value);
26 if (term.length < 1) {
27 return false;
28 }
29 },
30 focus: function () {
31 // prevent value inserted on focus
32 return false;
33 },
34 select: function (event, ui) {
35 var terms = split(this.value);
36 // remove the current input
37 terms.pop();
38 // add the selected item
39 terms.push(ui.item.value);
40 // add placeholder to get the comma-and-space at the end
41 terms.push('');
42 this.value = terms.join(', ');
43 return false;
44 },
45 });
46});
diff --git a/app/Resources/static/themes/baggy/js/closeMessage.js b/app/Resources/static/themes/baggy/js/closeMessage.js
new file mode 100644
index 00000000..ae4b1791
--- /dev/null
+++ b/app/Resources/static/themes/baggy/js/closeMessage.js
@@ -0,0 +1,19 @@
1var $ = global.jquery = require('jquery');
2
3$(function () {
4 //---------------------------------------------------------------------------
5 // Show the close icon when the user hover over a message
6 //---------------------------------------------------------------------------
7 // $('.messages').on('mouseenter', function(){
8 // $(this).find('a.closeMessage').stop(true, true).show();
9 // }).on('mouseleave', function(){
10 // $(this).find('a.closeMessage').stop(true, true).hide();
11 // });
12 //---------------------------------------------------------------------------
13 // Close the message box when the user clicks the close icon
14 //---------------------------------------------------------------------------
15 $('a.closeMessage').on('click', function () {
16 $(this).parents('div.messages').slideUp(300, function () { $(this).remove(); });
17 return false;
18 });
19});
diff --git a/app/Resources/static/themes/baggy/js/init.js b/app/Resources/static/themes/baggy/js/init.js
new file mode 100755
index 00000000..d7d4b166
--- /dev/null
+++ b/app/Resources/static/themes/baggy/js/init.js
@@ -0,0 +1,98 @@
1var $ = global.jquery = require('jquery');
2require('jquery.cookie');
3require('jquery-ui');
4var annotator = require('annotator');
5
6
7$.fn.ready(function () {
8 var $listmode = $('#listmode');
9 var $listentries = $('#list-entries');
10
11 /* ==========================================================================
12 Menu
13 ========================================================================== */
14
15 $('#menu').click(function () {
16 $('#links').toggleClass('menu--open');
17 if ($('#content').hasClass('opacity03')) {
18 $('#content').removeClass('opacity03');
19 }
20 });
21
22 /* ==========================================================================
23 List mode or Table Mode
24 ========================================================================== */
25
26 $listmode.click(function () {
27 if (jquery.cookie('listmode') === 1) {
28 // Cookie
29 $.removeCookie('listmode');
30
31 $listentries.removeClass('listmode');
32 $listmode.removeClass('tablemode');
33 $listmode.addClass('listmode');
34 } else {
35 // Cookie
36 jquery.cookie('listmode', 1, { expires: 365 });
37
38 $listentries.addClass('listmode');
39 $listmode.removeClass('listmode');
40 $listmode.addClass('tablemode');
41 }
42 });
43
44 /* ==========================================================================
45 Cookie listmode
46 ========================================================================== */
47
48 if (jquery.cookie('listmode') === 1) {
49 $listentries.addClass('listmode');
50 $listmode.removeClass('listmode');
51 $listmode.addClass('tablemode');
52 }
53
54 /* ==========================================================================
55 Add tag panel
56 ========================================================================== */
57
58
59 $('#nav-btn-add-tag').on('click', function () {
60 $('.nav-panel-add-tag').toggle(100);
61 $('.nav-panel-menu').addClass('hidden');
62 $('#tag_label').focus();
63 return false;
64 });
65
66 /* ==========================================================================
67 Annotations & Remember position
68 ========================================================================== */
69
70 if ($('article').length) {
71 var app = new annotator.App();
72
73 app.include(annotator.ui.main, {
74 element: document.querySelector('article'),
75 });
76
77 var x = JSON.parse($('#annotationroutes').html());
78 app.include(annotator.storage.http, x);
79
80 app.start().then(function () {
81 app.annotations.load({ entry: x.entryId });
82 });
83
84 $(window).scroll(function (e) {
85 var scrollTop = $(window).scrollTop();
86 var docHeight = $(document).height();
87 var scrollPercent = (scrollTop) / (docHeight);
88 var scrollPercentRounded = Math.round(scrollPercent * 100) / 100;
89 savePercent(x.entryId, scrollPercentRounded);
90 });
91
92 retrievePercent(x.entryId);
93
94 $(window).resize(function () {
95 retrievePercent(x.entryId);
96 });
97 }
98});
diff --git a/app/Resources/static/themes/baggy/js/popupForm.js b/app/Resources/static/themes/baggy/js/popupForm.js
new file mode 100644
index 00000000..95ba60ee
--- /dev/null
+++ b/app/Resources/static/themes/baggy/js/popupForm.js
@@ -0,0 +1,101 @@
1var $ = global.jquery = require('jquery');
2
3$(document).ready(function () {
4 $('#search-form').hide();
5 $('#bagit-form').hide();
6 $('#filter-form').hide();
7 $('#download-form').hide();
8
9 //---------------------------------------------------------------------------
10 // Toggle the 'Search' popup in the sidebar
11 //---------------------------------------------------------------------------
12 function toggleSearch() {
13 $('#search-form').toggle();
14 $('#search').toggleClass('current');
15 $('#search').toggleClass('active-current');
16 $('#search-arrow').toggleClass('arrow-down');
17 if ($('#search').hasClass('current')) {
18 $('#content').addClass('opacity03');
19 } else {
20 $('#content').removeClass('opacity03');
21 }
22 }
23
24 //---------------------------------------------------------------------------
25 // Toggle the 'Filter' popup on entries list
26 //---------------------------------------------------------------------------
27 function toggleFilter() {
28 $('#filter-form').toggle();
29 }
30
31 //---------------------------------------------------------------------------
32 // Toggle the 'Download' popup on entries list
33 //---------------------------------------------------------------------------
34 function toggleDownload() {
35 $('#download-form').toggle();
36 }
37
38 //---------------------------------------------------------------------------
39 // Toggle the 'Save a Link' popup in the sidebar
40 //---------------------------------------------------------------------------
41 function toggleBagit() {
42 $('#bagit-form').toggle();
43 $('#bagit').toggleClass('current');
44 $('#bagit').toggleClass('active-current');
45 $('#bagit-arrow').toggleClass('arrow-down');
46 if ($('#bagit').hasClass('current')) {
47 $('#content').addClass('opacity03');
48 } else {
49 $('#content').removeClass('opacity03');
50 }
51 }
52
53 //---------------------------------------------------------------------------
54 // Close all #links popups in the sidebar
55 //---------------------------------------------------------------------------
56 function closePopups() {
57 $('#links .messages').hide();
58 $('#links > li > a').removeClass('active-current');
59 $('#links > li > a').removeClass('current');
60 $('[id$=-arrow]').removeClass('arrow-down');
61 $('#content').removeClass('opacity03');
62 }
63
64 $('#search').click(function () {
65 closePopups();
66 toggleSearch();
67 $('#searchfield').focus();
68 });
69
70 $('.filter-btn').click(function () {
71 closePopups();
72 toggleFilter();
73 });
74
75 $('.download-btn').click(function () {
76 closePopups();
77 toggleDownload();
78 });
79
80 $('#bagit').click(function () {
81 closePopups();
82 toggleBagit();
83 $('#plainurl').focus();
84 });
85
86 $('#search-form-close').click(function () {
87 toggleSearch();
88 });
89
90 $('#filter-form-close').click(function () {
91 toggleFilter();
92 });
93
94 $('#download-form-close').click(function () {
95 toggleDownload();
96 });
97
98 $('#bagit-form-close').click(function () {
99 toggleBagit();
100 });
101});
diff --git a/app/Resources/static/themes/baggy/js/saveLink.js b/app/Resources/static/themes/baggy/js/saveLink.js
new file mode 100755
index 00000000..5c720886
--- /dev/null
+++ b/app/Resources/static/themes/baggy/js/saveLink.js
@@ -0,0 +1,75 @@
1var $ = global.jquery = require('jquery');
2
3$.fn.ready(function () {
4 var $bagit = $('#bagit');
5 var $bagitForm = $('#bagit-form');
6 var $bagitFormForm = $('#bagit-form-form');
7
8 /* ==========================================================================
9 bag it link and close button
10 ========================================================================== */
11
12 function toggleSaveLinkForm(url, event) {
13 $('#add-link-result').empty();
14
15 $bagit.toggleClass('active-current');
16
17 // only if bag-it link is not presented on page
18 if ($bagit.length === 0) {
19 if (event !== 'undefined' && event) {
20 $bagitForm.css({ position: 'absolute', top: event.pageY, left: event.pageX - 200 });
21 } else {
22 $bagitForm.css({ position: 'relative', top: 'auto', left: 'auto' });
23 }
24 }
25
26 if ($('#search-form').length !== 0) {
27 $('#search').removeClass('current');
28 $('#search-arrow').removeClass('arrow-down');
29 $('#search-form').hide();
30 }
31 $bagitForm.toggle();
32 $('#content').toggleClass('opacity03');
33 if (url !== 'undefined' && url) {
34 $('#plainurl').val(url);
35 }
36 $('#plainurl').focus();
37 }
38
39 // send 'bag it link' form request via ajax
40 $bagitFormForm.submit(function (event) {
41 $('body').css('cursor', 'wait');
42 $('#add-link-result').empty();
43
44 $.ajax({
45 type: $bagitFormForm.attr('method'),
46 url: $bagitFormForm.attr('action'),
47 data: $bagitFormForm.serialize(),
48 success: function (data) {
49 $('#add-link-result').html('Done!');
50 $('#plainurl').val('');
51 $('#plainurl').blur('');
52 $('body').css('cursor', 'auto');
53 },
54 error: function (data) {
55 $('#add-link-result').html('Failed!');
56 $('body').css('cursor', 'auto');
57 },
58 });
59
60 event.preventDefault();
61 });
62
63 /* ==========================================================================
64 Process all links inside an article
65 ========================================================================== */
66
67 $('article a[href^="http"]').after(function () {
68 return ' <a href="' + $(this).attr('href') + '" class="add-to-wallabag-link-after" alt="add to wallabag" title="add to wallabag"></a> ';
69 });
70
71 $('.add-to-wallabag-link-after').click(function (event) {
72 toggleSaveLinkForm($(this).attr('href'), event);
73 event.preventDefault();
74 });
75});
diff --git a/app/Resources/static/themes/material/css/main.css b/app/Resources/static/themes/material/css/main.css
new file mode 100755
index 00000000..9ea59eb0
--- /dev/null
+++ b/app/Resources/static/themes/material/css/main.css
@@ -0,0 +1,680 @@
1/* ==========================================================================
2 Sommaire
3
4 0 = Common
5 1 = Nav
6 2 = Side-nav
7 3 = Filters slider
8 4 = Cards
9 5 = Article
10 6 = Media queries
11 7 = Font
12 8 = Others
13
14 ========================================================================== */
15
16/* ==========================================================================
17 0 = Common
18 ========================================================================== */
19
20@font-face {
21 font-family: icomoon;
22 src: url("../fonts/icomoon.eot");
23 src:
24 url("../fonts/icomoon.eot#iefix") format("embedded-opentype"),
25 url("../fonts/icomoon.ttf") format("truetype"),
26 url("../fonts/icomoon.woff") format("woff"),
27 url("../fonts/icomoon.svg#icomoon") format("svg");
28 font-weight: normal;
29 font-style: normal;
30}
31
32@font-face {
33 font-family: 'Material Icons';
34 font-style: normal;
35 font-weight: 400;
36 src: url(../fonts/MaterialIcons-Regular.eot);
37
38 /* For IE6-8 */
39 src: local("Material Icons"), local("MaterialIcons-Regular"), url(../fonts/MaterialIcons-Regular.woff2) format("woff2"), url(../fonts/MaterialIcons-Regular.woff) format("woff"), url(../fonts/MaterialIcons-Regular.ttf) format("truetype");
40}
41
42.material-icons {
43 font-family: 'Material Icons';
44 font-weight: normal;
45 font-style: normal;
46 font-size: 24px; /* Preferred icon size */
47 width: 1em;
48 height: 1em;
49 display: inline-block;
50 line-height: 1;
51 text-transform: none;
52 letter-spacing: normal;
53 word-wrap: normal;
54 white-space: nowrap;
55 direction: ltr;
56
57 /* Support for all WebKit browsers. */
58 -webkit-font-smoothing: antialiased;
59
60 /* Support for Safari and Chrome. */
61 text-rendering: optimizeLegibility;
62
63 /* Support for Firefox. */
64 -moz-osx-font-smoothing: grayscale;
65
66 /* Support for IE. */
67 font-feature-settings: 'liga';
68}
69
70[class^="icon-"],
71[class*=" icon-"] {
72 font-family: icomoon;
73 speak: none;
74 font-style: normal;
75 font-weight: normal;
76 font-variant: normal;
77 text-transform: none;
78 line-height: 1;
79
80 /* Better Font Rendering =========== */
81 -webkit-font-smoothing: antialiased;
82 -moz-osx-font-smoothing: grayscale;
83}
84
85body {
86 display: flex;
87 min-height: 100vh;
88 flex-direction: column;
89 background: #f0f0f0;
90}
91
92body.login main {
93 padding: 0;
94 min-height: 100vh;
95}
96
97.border-bottom {
98 border-bottom: 1px solid #ddd;
99}
100
101nav,
102main,
103footer {
104 padding-left: 240px;
105}
106
107main,
108#content,
109.valign-wrapper {
110 height: 100%;
111}
112
113#main {
114 flex: 1 0 auto;
115}
116
117.results {
118 height: 1em;
119 line-height: 30px;
120}
121
122.results .nb-results,
123.results .pagination {
124 margin: 15px;
125 margin-bottom: 0;
126}
127
128.pagination {
129 float: right;
130}
131
132.pagination ul {
133 margin: 0 !important;
134}
135
136.pagination li {
137 padding: 0;
138}
139
140.pagination a {
141 padding: 0 10px;
142 height: 30px;
143 display: block;
144}
145
146.pagination .disabled {
147 margin-right: 10px;
148 margin-left: 10px;
149}
150
151div.pagination ul .prev.disabled,
152div.pagination ul .next.disabled {
153 display: none;
154}
155
156.pagination li.active span {
157 padding: 0 10px;
158 height: 30px;
159 display: block;
160 color: #fff;
161}
162
163.page-footer .footer-copyright p {
164 display: inline;
165}
166
167.hidden {
168 display: none;
169}
170
171.picker__date-display {
172 display: none;
173}
174
175footer.page-footer {
176 margin-top: 10px;
177 padding-top: 0px;
178}
179
180footer .row {
181 margin-bottom: 10px;
182}
183
184/* ==========================================================================
185 1 = Nav
186 ========================================================================== */
187
188nav input {
189 color: #aaa;
190}
191
192.nav-wrapper .button-collapse {
193 padding: 0 15px;
194}
195
196.nav-input {
197 display: none;
198}
199
200.nav-panels {
201 overflow: hidden;
202}
203
204.nav-panel-buttom li {
205 max-height: 64px;
206}
207
208.nav-panels {
209 transition: background 0.2s ease;
210}
211
212.nav-panel-add .add,
213.nav-panel-search .search,
214.nav-panels .close {
215 color: #444 !important;
216}
217
218.nav-panels .action {
219 padding-left: 0.75rem;
220 font-size: 2.1rem;
221 white-space: nowrap;
222}
223
224.nav-panels .input-field input {
225 display: block;
226 line-height: inherit;
227 padding-left: 4rem !important;
228 width: calc(100% - 8rem);
229}
230
231.nav-panels .input-field input:focus {
232 background-color: #fff;
233 border: 0;
234 box-shadow: none;
235 color: #444;
236}
237
238.input-field.nav-panel-add label {
239 left: 1rem;
240}
241
242.input-field.nav-panel-add .close {
243 position: absolute;
244 top: 0;
245 right: 1rem;
246 color: transparent;
247 cursor: pointer;
248 font-size: 2rem;
249 transition: 0.3s color;
250}
251
252#button_filters {
253 display: none;
254}
255
256#button_export {
257 display: none;
258}
259
260.input-field.nav-panel-add, .input-field.nav-panel-add form {
261 height: 100%;
262}
263
264/* ==========================================================================
265 2 = Side-nav
266 ========================================================================== */
267
268.side-nav.fixed a {
269 font-size: 13px;
270 line-height: 44px;
271 height: 44px;
272}
273
274.side-nav .collapsible-header,
275.side-nav.fixed .collapsible-header {
276 height: 45px;
277 line-height: 44px;
278 padding: 0 20px;
279}
280
281.bold > a {
282 font-weight: bold;
283}
284
285.side-nav > li.logo {
286 line-height: 0;
287 text-align: center;
288}
289
290#main .logo a {
291 height: 100pt;
292}
293
294#main .logo img {
295 height: 100pt;
296 width: 100pt;
297}
298
299#main .logo:hover {
300 background: transparent;
301}
302
303.side-nav li {
304 padding: 0;
305}
306
307.side-nav a {
308 margin: 0 1rem;
309}
310
311span.numberItems {
312 float: right;
313}
314
315/* ==========================================================================
316 * 3 = Filters slider
317 * ========================================================================== */
318
319#filters button {
320 padding: 0;
321 width: 100%;
322}
323
324.side-nav.fixed.right-aligned {
325 right: -250px;
326 left: auto !important;
327 overflow-y: visible;
328}
329
330#filters div.with-checkbox {
331 height: 3rem;
332 margin-top: 0;
333}
334
335/* ==========================================================================
336 4 = Cards
337 ========================================================================== */
338
339main #content {
340 padding: 0 0.5rem;
341}
342
343main ul.row {
344 padding: 0 0.75rem;
345}
346
347.data .card .card-body {
348 height: 22em;
349 overflow: hidden;
350}
351
352.card .card-content .card-title {
353 line-height: 32px;
354 max-height: 64px;
355}
356
357.card .card-content i.right, .card .card-reveal i.right {
358 margin-left: 0;
359}
360
361.card .card-entry-labels {
362 position: absolute;
363 top: 10px;
364 z-index: 90;
365 max-width: 50%;
366}
367
368.card .card-entry-labels li {
369 margin: 10px 10px 10px auto;
370 padding: 5px 12px 5px 16px;
371 background-color: rgba(0, 151, 167, 0.85);
372 border-radius: 0 3px 3px 0;
373 color: #fff;
374 cursor: default;
375 max-height: 2em;
376 overflow: hidden;
377 text-overflow: ellipsis;
378 white-space: nowrap;
379}
380
381.card .card-entry-labels-hidden {
382 margin-top: 5px;
383}
384
385.card .card-entry-labels-hidden li {
386 display: inline-block;
387 background-color: rgba(0, 151, 167, 0.85);
388 margin: 0 5px;
389 padding: 5px 12px;
390 border-radius: 3px;
391 color: #fff;
392 max-height: 2em;
393 max-width: calc(100% - 15px);
394 overflow: hidden;
395 text-overflow: ellipsis;
396 white-space: nowrap;
397}
398
399.card .card-content .estimatedTime {
400 margin-bottom: 10px;
401}
402
403.card .card-action .original {
404 line-height: 24px;
405}
406
407.card .card-action ul.links {
408 margin: 0;
409 font-size: 24px;
410 line-height: 24px;
411}
412
413.card .card-action a {
414 color: #fff;
415 margin: 0;
416}
417
418.card .card-action a:hover {
419 color: #fff;
420}
421
422.settings .div_tabs {
423 padding-bottom: 15px;
424}
425
426.card.sw {
427 max-width: 370px;
428 margin-left: auto;
429 margin-right: auto;
430}
431
432.card .card-image {
433 height: 14em;
434}
435
436.card .card-image .preview {
437 height: 14em;
438 background-size: cover;
439 background-repeat: no-repeat;
440 background-position: 50%;
441}
442
443/* ==========================================================================
444 5 = Article
445 ========================================================================== */
446
447#article {
448 font-size: 20px;
449 margin: 0 auto;
450 max-width: 40em;
451}
452
453#article img,
454#article figure {
455 max-width: 100%;
456 height: auto;
457}
458
459#article > header > h1 {
460 font-size: 2em;
461}
462
463.reader-mode {
464 width: 95px !important;
465 transition: width 0.2s ease;
466}
467
468.reader-mode:hover {
469 width: 240px !important;
470}
471
472.reader-mode .collapsible-body {
473 height: 0;
474 overflow: hidden;
475}
476
477.reader-mode:hover .collapsible-body {
478 height: auto;
479}
480
481.reader-mode span {
482 opacity: 0;
483 transition: opacity 0.2s ease;
484}
485
486.reader-mode:hover span {
487 opacity: 1;
488}
489
490.progress {
491 position: fixed;
492 top: 0;
493 width: 100%;
494 height: 3px;
495 margin: 0;
496 z-index: 9999;
497}
498
499#article aside .link {
500 color: #000;
501 font-size: 0.8em;
502 text-decoration: none;
503}
504
505#article aside #list {
506 float: right;
507 margin: 0 15px 10px;
508}
509
510#article aside .chip {
511 background-color: rgba(0, 151, 167, 0.85);
512 color: #fff;
513 padding: 0 15px 0 10px;
514}
515
516#article aside .chip i {
517 color: #fff;
518}
519
520/* ==========================================================================
521 6 = Media queries
522 ========================================================================== */
523
524@media only screen and (max-width: 992px) {
525 header,
526 main,
527 footer {
528 padding-left: 0;
529 }
530 nav,
531 main,
532 footer {
533 padding-left: 0;
534 }
535 .pagination {
536 width: auto;
537 }
538 .reader-mode {
539 width: 240px !important;
540 }
541 .reader-mode span {
542 opacity: 1;
543 }
544 .tabs {
545 display: inline-block;
546 height: auto;
547 }
548 .tab {
549 min-width: 100%;
550 }
551 .indicator {
552 display: none;
553 }
554 .pagination li.prev,
555 .pagination li.next {
556 width: auto;
557 }
558}
559
560@media only screen and (min-width: 400px) {
561 .nav-panel-buttom {
562 float: right;
563 }
564}
565
566@media only screen and (min-width: 993px) and (max-width: 1180px) {
567 .row .col.l1 {
568 width: 25%;
569 margin-left: 0;
570 }
571 .row .col.l2 {
572 width: 33.33333%;
573 margin-left: 0;
574 }
575 .row .col.l3 {
576 width: 41.66667%;
577 margin-left: 0;
578 }
579 .row .col.l4 {
580 width: 50%;
581 margin-left: 0;
582 }
583 .row .col.l5 {
584 width: 58.33333%;
585 margin-left: 0;
586 }
587 .row .col.l6 {
588 width: 66.66667%;
589 margin-left: 0;
590 }
591 .row .col.l7 {
592 width: 75%;
593 margin-left: 0;
594 }
595 .row .col.l8 {
596 width: 83.33333%;
597 margin-left: 0;
598 }
599 .row .col.l9 {
600 width: 91.66667%;
601 margin-left: 0;
602 }
603 .row .col.l10 {
604 width: 100%;
605 margin-left: 0;
606 }
607}
608
609@media only screen and (max-width: 350px) {
610 .nb-results {
611 display: none;
612 }
613}
614
615/* ==========================================================================
616 7 = Font
617 ========================================================================== */
618
619.icon-google-plus2::before {
620 content: "\ea89";
621}
622
623.icon-facebook2::before {
624 content: "\ea8d";
625}
626
627.icon-twitter::before {
628 content: "\ea91";
629}
630
631.icon-apple::before {
632 content: "\eabf";
633}
634
635.icon-android::before {
636 content: "\eac1";
637}
638
639.icon-chrome::before {
640 content: "\eae5";
641}
642
643.icon-firefox::before {
644 content: "\eae6";
645}
646
647.icon-link::before {
648 content: "\e9cb";
649}
650
651footer [class^="icon-"],
652footer [class*=" icon-"] {
653 font-size: 2em;
654 transition: text-shadow 0.2s ease;
655 padding-right: 10px;
656}
657
658footer [class^="icon-"]:hover,
659footer [class*=" icon-"]:hover {
660 text-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
661}
662
663/* ==========================================================================
664 8 = Others
665 ========================================================================== */
666
667/* force height on non-input field in the settings page */
668div.settings div.input-field div,
669div.settings div.input-field ul {
670 margin-top: 40px;
671}
672
673/* but avoid to kill all file input */
674div.settings div.file-field div {
675 margin-top: inherit;
676}
677
678.input-field label.active {
679 font-size: 1rem;
680}
diff --git a/app/Resources/static/themes/material/css/print.css b/app/Resources/static/themes/material/css/print.css
new file mode 100755
index 00000000..1eb96735
--- /dev/null
+++ b/app/Resources/static/themes/material/css/print.css
@@ -0,0 +1,77 @@
1@media print {
2 /* ### Layout ### */
3
4 body {
5 font-family: Serif;
6 background-color: #fff;
7 }
8
9 @page {
10 margin: 1cm;
11 }
12
13 img {
14 max-width: 100% !important;
15 }
16
17 /* ### Content ### */
18
19 /* Hide useless blocks */
20 body > header,
21 #article_toolbar,
22 #links,
23 #sort,
24 body > footer,
25 .top_link,
26 div.tools,
27 header div,
28 .messages,
29 .entry + .results,
30 #slide-out,
31 .progress, .hide-on-large-only,
32 #article > aside,
33 #article .mbm a
34 {
35 display: none !important;
36 }
37
38 main {
39 padding-left: 0 !important;
40 }
41
42 #article {
43 margin: inherit !important;
44 }
45
46 article {
47 border: none !important;
48 }
49
50 /* Add URL after links */
51 .vieworiginal a::after {
52 content: " (" attr(href) ")";
53 }
54
55 /* Add explanation after abbr */
56 abbr[title]::after {
57 content: " (" attr(title) ")";
58 }
59
60 /* Change border on current pager item */
61 .pagination span.current {
62 border-style: dashed;
63 }
64
65 #main {
66 width: 100%;
67 padding: 0;
68 margin: 0;
69 margin-left: 0;
70 padding-right: 0;
71 padding-bottom: 0;
72 }
73
74 #article {
75 width: 100%;
76 }
77}
diff --git a/app/Resources/static/themes/material/js/init.js b/app/Resources/static/themes/material/js/init.js
new file mode 100755
index 00000000..d6a87941
--- /dev/null
+++ b/app/Resources/static/themes/material/js/init.js
@@ -0,0 +1,117 @@
1var $ = require('jquery');
2require('materialize');
3var annotator = require('annotator');
4
5function initFilters() {
6 // no display if filters not aviable
7 if ($('div').is('#filters')) {
8 $('#button_filters').show();
9 $('.button-collapse-right').sideNav({ edge: 'right' });
10 $('#clear_form_filters').on('click', function () {
11 $('#filters input').val('');
12 $('#filters :checked').removeAttr('checked');
13 return false;
14 });
15 }
16}
17
18function initExport() {
19 // no display if export not aviable
20 if ($('div').is('#export')) {
21 $('#button_export').show();
22 $('.button-collapse-right').sideNav({ edge: 'right' });
23 }
24}
25
26$(document).ready(function () {
27 // sideNav
28 $('.button-collapse').sideNav();
29 $('select').material_select();
30 $('.collapsible').collapsible({
31 accordion: false,
32 });
33 $('.datepicker').pickadate({
34 selectMonths: true,
35 selectYears: 15,
36 formatSubmit: 'dd/mm/yyyy',
37 hiddenName: true,
38 format: 'dd/mm/yyyy',
39 });
40 initFilters();
41 initExport();
42
43 $('#nav-btn-add-tag').on('click', function () {
44 $('.nav-panel-add-tag').toggle(100);
45 $('.nav-panel-menu').addClass('hidden');
46 $('#tag_label').focus();
47 return false;
48 });
49 $('#nav-btn-add').on('click', function () {
50 $('.nav-panel-buttom').hide(100);
51 $('.nav-panel-add').show(100);
52 $('.nav-panels .action').hide(100);
53 $('.nav-panel-menu').addClass('hidden');
54 $('.nav-panels').css('background', 'white');
55 $('#entry_url').focus();
56 return false;
57 });
58 $('#nav-btn-search').on('click', function () {
59 $('.nav-panel-buttom').hide(100);
60 $('.nav-panel-search').show(100);
61 $('.nav-panels .action').hide(100);
62 $('.nav-panel-menu').addClass('hidden');
63 $('.nav-panels').css('background', 'white');
64 $('#searchfield').focus();
65 return false;
66 });
67 $('.close').on('click', function () {
68 $('.nav-panel-add').hide(100);
69 $('.nav-panel-search').hide(100);
70 $('.nav-panel-buttom').show(100);
71 $('.nav-panels .action').show(100);
72 $('.nav-panel-menu').removeClass('hidden');
73 $('.nav-panels').css('background', 'transparent');
74 return false;
75 });
76 $(window).scroll(function () {
77 var s = $(window).scrollTop();
78 var d = $(document).height();
79 var c = $(window).height();
80 var scrollPercent = (s / (d - c)) * 100;
81 $('.progress .determinate').css('width', scrollPercent + '%');
82 });
83
84/* ==========================================================================
85 Annotations & Remember position
86 ========================================================================== */
87
88 if ($('article').length) {
89 var app = new annotator.App();
90 var x = JSON.parse($('#annotationroutes').html());
91
92
93 app.include(annotator.ui.main, {
94 element: document.querySelector('article'),
95 });
96
97 app.include(annotator.storage.http, x);
98
99 app.start().then(function () {
100 app.annotations.load({ entry: x.entryId });
101 });
102
103 $(window).scroll(function (e) {
104 var scrollTop = $(window).scrollTop();
105 var docHeight = $(document).height();
106 var scrollPercent = (scrollTop) / (docHeight);
107 var scrollPercentRounded = Math.round(scrollPercent * 100) / 100;
108 savePercent(x.entryId, scrollPercentRounded);
109 });
110
111 retrievePercent(x.entryId);
112
113 $(window).resize(function () {
114 retrievePercent(x.entryId);
115 });
116 }
117});
diff --git a/app/config/config.yml b/app/config/config.yml
index 2b11937c..b5d82ed9 100644
--- a/app/config/config.yml
+++ b/app/config/config.yml
@@ -30,7 +30,7 @@ framework:
30 assets: ~ 30 assets: ~
31 31
32wallabag_core: 32wallabag_core:
33 version: 2.0.8 33 version: 2.1.0
34 paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb" 34 paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
35 languages: 35 languages:
36 en: 'English' 36 en: 'English'
@@ -49,9 +49,13 @@ wallabag_core:
49 language: en 49 language: en
50 rss_limit: 50 50 rss_limit: 50
51 reading_speed: 1 51 reading_speed: 1
52 cache_lifetime: 10
53
54wallabag_user:
55 registration_enabled: "%fosuser_registration%"
52 56
53wallabag_import: 57wallabag_import:
54 allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain'] 58 allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain', 'text/csv']
55 resource_dir: "%kernel.root_dir%/../web/uploads/import" 59 resource_dir: "%kernel.root_dir%/../web/uploads/import"
56 60
57# Twig Configuration 61# Twig Configuration
@@ -61,19 +65,6 @@ twig:
61 form_themes: 65 form_themes:
62 - "LexikFormFilterBundle:Form:form_div_layout.html.twig" 66 - "LexikFormFilterBundle:Form:form_div_layout.html.twig"
63 67
64# Assetic Configuration
65assetic:
66 debug: "%kernel.debug%"
67 use_controller: false
68 bundles: [ ]
69 #java: /usr/bin/java
70 filters:
71 cssrewrite: ~
72 #closure:
73 # jar: "%kernel.root_dir%/Resources/java/compiler.jar"
74 #yui_css:
75 # jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
76
77# Doctrine Configuration 68# Doctrine Configuration
78doctrine: 69doctrine:
79 dbal: 70 dbal:
@@ -224,3 +215,106 @@ lexik_maintenance:
224 response: 215 response:
225 code: 503 216 code: 503
226 status: "wallabag Service Temporarily Unavailable" 217 status: "wallabag Service Temporarily Unavailable"
218
219old_sound_rabbit_mq:
220 connections:
221 default:
222 host: "%rabbitmq_host%"
223 port: "%rabbitmq_port%"
224 user: "%rabbitmq_user%"
225 password: "%rabbitmq_password%"
226 vhost: /
227 lazy: true
228 producers:
229 import_pocket:
230 connection: default
231 exchange_options:
232 name: 'wallabag.import.pocket'
233 type: topic
234 import_readability:
235 connection: default
236 exchange_options:
237 name: 'wallabag.import.readability'
238 type: topic
239 import_instapaper:
240 connection: default
241 exchange_options:
242 name: 'wallabag.import.instapaper'
243 type: topic
244 import_wallabag_v1:
245 connection: default
246 exchange_options:
247 name: 'wallabag.import.wallabag_v1'
248 type: topic
249 import_wallabag_v2:
250 connection: default
251 exchange_options:
252 name: 'wallabag.import.wallabag_v2'
253 type: topic
254 import_firefox:
255 connection: default
256 exchange_options:
257 name: 'wallabag.import.firefox'
258 type: topic
259 import_chrome:
260 connection: default
261 exchange_options:
262 name: 'wallabag.import.chrome'
263 type: topic
264 consumers:
265 import_pocket:
266 connection: default
267 exchange_options:
268 name: 'wallabag.import.pocket'
269 type: topic
270 queue_options:
271 name: 'wallabag.import.pocket'
272 callback: wallabag_import.consumer.amqp.pocket
273 import_readability:
274 connection: default
275 exchange_options:
276 name: 'wallabag.import.readability'
277 type: topic
278 queue_options:
279 name: 'wallabag.import.readability'
280 callback: wallabag_import.consumer.amqp.readability
281 import_instapaper:
282 connection: default
283 exchange_options:
284 name: 'wallabag.import.instapaper'
285 type: topic
286 queue_options:
287 name: 'wallabag.import.instapaper'
288 callback: wallabag_import.consumer.amqp.instapaper
289 import_wallabag_v1:
290 connection: default
291 exchange_options:
292 name: 'wallabag.import.wallabag_v1'
293 type: topic
294 queue_options:
295 name: 'wallabag.import.wallabag_v1'
296 callback: wallabag_import.consumer.amqp.wallabag_v1
297 import_wallabag_v2:
298 connection: default
299 exchange_options:
300 name: 'wallabag.import.wallabag_v2'
301 type: topic
302 queue_options:
303 name: 'wallabag.import.wallabag_v2'
304 callback: wallabag_import.consumer.amqp.wallabag_v2
305 import_firefox:
306 connection: default
307 exchange_options:
308 name: 'wallabag.import.firefox'
309 type: topic
310 queue_options:
311 name: 'wallabag.import.firefox'
312 callback: wallabag_import.consumer.amqp.firefox
313 import_chrome:
314 connection: default
315 exchange_options:
316 name: 'wallabag.import.chrome'
317 type: topic
318 queue_options:
319 name: 'wallabag.import.chrome'
320 callback: wallabag_import.consumer.amqp.chrome
diff --git a/app/config/config_dev.yml b/app/config/config_dev.yml
index 0fa23dbf..3b67d8f6 100644
--- a/app/config/config_dev.yml
+++ b/app/config/config_dev.yml
@@ -35,11 +35,16 @@ monolog:
35 VERBOSITY_DEBUG: DEBUG 35 VERBOSITY_DEBUG: DEBUG
36 channels: [doctrine] 36 channels: [doctrine]
37 37
38assetic:
39 use_controller: true
40
41swiftmailer: 38swiftmailer:
42 # see http://mailcatcher.me/ 39 # see http://mailcatcher.me/
43 transport: smtp 40 transport: smtp
44 host: 'localhost' 41 host: 'localhost'
45 port: 1025 42 port: 1025
43
44# If you want to use cache for queries used in WallabagExtension
45# Uncomment the following lines
46#doctrine:
47# orm:
48# metadata_cache_driver: apcu
49# result_cache_driver: apcu
50# query_cache_driver: apcu
diff --git a/app/config/parameters.yml.dist b/app/config/parameters.yml.dist
index d45839f4..f2e5bec3 100644
--- a/app/config/parameters.yml.dist
+++ b/app/config/parameters.yml.dist
@@ -34,6 +34,19 @@ parameters:
34 twofactor_sender: no-reply@wallabag.org 34 twofactor_sender: no-reply@wallabag.org
35 35
36 # fosuser stuff 36 # fosuser stuff
37 fosuser_registration: true
37 fosuser_confirmation: true 38 fosuser_confirmation: true
38 39
39 from_email: no-reply@wallabag.org 40 from_email: no-reply@wallabag.org
41
42 rss_limit: 50
43
44 # RabbitMQ processing
45 rabbitmq_host: localhost
46 rabbitmq_port: 5672
47 rabbitmq_user: guest
48 rabbitmq_password: guest
49
50 # Redis processing
51 redis_host: localhost
52 redis_port: 6379
diff --git a/app/config/parameters_test.yml b/app/config/parameters_test.yml
index 696c95ef..2943b27a 100644
--- a/app/config/parameters_test.yml
+++ b/app/config/parameters_test.yml
@@ -5,4 +5,4 @@ parameters:
5 test_database_name: null 5 test_database_name: null
6 test_database_user: null 6 test_database_user: null
7 test_database_password: null 7 test_database_password: null
8 test_database_path: '%kernel.root_dir%/../data/db/wallabag_testYO.sqlite' 8 test_database_path: '%kernel.root_dir%/../data/db/wallabag_test.sqlite'
diff --git a/app/config/security.yml b/app/config/security.yml
index e24e03df..1f30e58b 100644
--- a/app/config/security.yml
+++ b/app/config/security.yml
@@ -60,6 +60,7 @@ security:
60 - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 60 - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
61 - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 61 - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
62 - { path: /(unread|starred|archive).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 62 - { path: /(unread|starred|archive).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
63 - { path: ^/share, roles: IS_AUTHENTICATED_ANONYMOUSLY }
63 - { path: ^/settings, roles: ROLE_SUPER_ADMIN } 64 - { path: ^/settings, roles: ROLE_SUPER_ADMIN }
64 - { path: ^/annotations, roles: ROLE_USER } 65 - { path: ^/annotations, roles: ROLE_USER }
65 - { path: ^/, roles: ROLE_USER } 66 - { path: ^/, roles: ROLE_USER }
diff --git a/app/config/services.yml b/app/config/services.yml
index 480408d9..76bbce27 100644
--- a/app/config/services.yml
+++ b/app/config/services.yml
@@ -16,6 +16,11 @@ services:
16 wallabag.twig_extension: 16 wallabag.twig_extension:
17 class: Wallabag\CoreBundle\Twig\WallabagExtension 17 class: Wallabag\CoreBundle\Twig\WallabagExtension
18 public: false 18 public: false
19 arguments:
20 - "@wallabag_core.entry_repository"
21 - "@wallabag_core.tag_repository"
22 - "@security.token_storage"
23 - "%wallabag_core.cache_lifetime%"
19 tags: 24 tags:
20 - { name: twig.extension } 25 - { name: twig.extension }
21 26
diff --git a/bin/symfony_requirements b/bin/symfony_requirements
index 8825a964..a7bf65a1 100755
--- a/bin/symfony_requirements
+++ b/bin/symfony_requirements
@@ -22,7 +22,6 @@ echo '> Checking Symfony requirements:'.PHP_EOL.' ';
22 22
23$messages = array(); 23$messages = array();
24foreach ($symfonyRequirements->getRequirements() as $req) { 24foreach ($symfonyRequirements->getRequirements() as $req) {
25 /** @var $req Requirement */
26 if ($helpText = get_error_message($req, $lineSize)) { 25 if ($helpText = get_error_message($req, $lineSize)) {
27 echo_style('red', 'E'); 26 echo_style('red', 'E');
28 $messages['error'][] = $helpText; 27 $messages['error'][] = $helpText;
@@ -121,10 +120,14 @@ function echo_block($style, $title, $message)
121 120
122 echo PHP_EOL.PHP_EOL; 121 echo PHP_EOL.PHP_EOL;
123 122
124 echo_style($style, str_repeat(' ', $width).PHP_EOL); 123 echo_style($style, str_repeat(' ', $width));
125 echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT).PHP_EOL); 124 echo PHP_EOL;
126 echo_style($style, str_pad($message, $width, ' ', STR_PAD_RIGHT).PHP_EOL); 125 echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT));
127 echo_style($style, str_repeat(' ', $width).PHP_EOL); 126 echo PHP_EOL;
127 echo_style($style, $message);
128 echo PHP_EOL;
129 echo_style($style, str_repeat(' ', $width));
130 echo PHP_EOL;
128} 131}
129 132
130function has_color_support() 133function has_color_support()
diff --git a/bower.json b/bower.json
new file mode 100644
index 00000000..f2d2bd26
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,39 @@
1{
2 "name": "wallabag",
3 "version": "2.0.0-beta.1",
4 "homepage": "https://github.com/wallabag/wallabag",
5 "authors": [
6 {
7 "name": "Nicolas Lœuillet",
8 "email": "nicolas@loeuillet.org",
9 "homepage": "http://www.cdetc.fr",
10 "role": "Developer"
11 },
12 {
13 "name": "Thomas Citharel",
14 "homepage": "http://tcit.fr",
15 "role": "Developer"
16 },
17 {
18 "name": "Jérémy Benoist",
19 "homepage": "http://www.j0k3r.net",
20 "role": "Developer"
21 }
22 ],
23 "description": "wallabag is a self hostable application for saving web pages",
24 "license": "MIT",
25 "main": "bower.json",
26 "ignore": [
27 "**/.*",
28 "node_modules",
29 "bower_components",
30 "test",
31 "tests"
32 ],
33 "dependencies": {
34 "icomoon-bower": "^0.1.0",
35 "bower-pt-sans": "pt-sans#*",
36 "roboto-fontface": "^0.4.5",
37 "material-design-icons-iconfont": "^2.0.4"
38 }
39}
diff --git a/composer.json b/composer.json
index c7830a14..8220ed45 100644
--- a/composer.json
+++ b/composer.json
@@ -48,7 +48,6 @@
48 "doctrine/doctrine-bundle": "^1.6", 48 "doctrine/doctrine-bundle": "^1.6",
49 "doctrine/doctrine-cache-bundle": "^1.2", 49 "doctrine/doctrine-cache-bundle": "^1.2",
50 "twig/extensions": "~1.0", 50 "twig/extensions": "~1.0",
51 "symfony/assetic-bundle": "~2.3",
52 "symfony/swiftmailer-bundle": "^2.3", 51 "symfony/swiftmailer-bundle": "^2.3",
53 "symfony/monolog-bundle": "^2.8", 52 "symfony/monolog-bundle": "^2.8",
54 "sensio/distribution-bundle": "^5.0", 53 "sensio/distribution-bundle": "^5.0",
@@ -81,22 +80,26 @@
81 "mnapoli/piwik-twig-extension": "^1.0", 80 "mnapoli/piwik-twig-extension": "^1.0",
82 "lexik/maintenance-bundle": "~2.1", 81 "lexik/maintenance-bundle": "~2.1",
83 "ocramius/proxy-manager": "1.*", 82 "ocramius/proxy-manager": "1.*",
84 "white-october/pagerfanta-bundle": "^1.0" 83 "white-october/pagerfanta-bundle": "^1.0",
84 "mouf/nodejs-installer": "~1.0",
85 "php-amqplib/rabbitmq-bundle": "^1.8",
86 "predis/predis": "^1.0",
87 "javibravo/simpleue": "^1.0"
85 }, 88 },
86 "require-dev": { 89 "require-dev": {
87 "doctrine/doctrine-fixtures-bundle": "~2.2", 90 "doctrine/doctrine-fixtures-bundle": "~2.2",
88 "doctrine/data-fixtures": "~1.1.1", 91 "doctrine/data-fixtures": "~1.1.1",
89 "sensio/generator-bundle": "^3.0", 92 "sensio/generator-bundle": "^3.0",
90 "phpunit/phpunit": "~4.4", 93 "phpunit/phpunit": "~5.0",
91 "symfony/phpunit-bridge": "^3.0", 94 "symfony/phpunit-bridge": "^3.0",
92 "friendsofphp/php-cs-fixer": "~1.9" 95 "friendsofphp/php-cs-fixer": "~1.9",
96 "m6web/redis-mock": "^2.0"
93 }, 97 },
94 "scripts": { 98 "scripts": {
95 "post-cmd": [ 99 "post-cmd": [
96 "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 100 "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
97 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", 101 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
98 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 102 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
99 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
100 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", 103 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
101 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" 104 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
102 ], 105 ],
@@ -113,7 +116,6 @@
113 "symfony-var-dir": "var", 116 "symfony-var-dir": "var",
114 "symfony-web-dir": "web", 117 "symfony-web-dir": "web",
115 "symfony-tests-dir": "tests", 118 "symfony-tests-dir": "tests",
116 "symfony-assets-install": "relative",
117 "incenteev-parameters": { 119 "incenteev-parameters": {
118 "file": "app/config/parameters.yml" 120 "file": "app/config/parameters.yml"
119 } 121 }
diff --git a/docker-compose.yml b/docker-compose.yml
index 50d8c546..3c28f2f1 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -11,6 +11,7 @@ services:
11 links: 11 links:
12 - php:php 12 - php:php
13 command: nginx -c /nginx.conf 13 command: nginx -c /nginx.conf
14
14 php: 15 php:
15 build: 16 build:
16 context: docker/php 17 context: docker/php
@@ -30,6 +31,7 @@ services:
30 # If all DBMS are commented out, sqlite will be used as default 31 # If all DBMS are commented out, sqlite will be used as default
31 # - ./docker/postgres/env 32 # - ./docker/postgres/env
32 # - ./docker/mariadb/env 33 # - ./docker/mariadb/env
34
33 #postgres: 35 #postgres:
34 # image: postgres:9 36 # image: postgres:9
35 # ports: 37 # ports:
@@ -38,6 +40,7 @@ services:
38 # - ./docker/data/pgsql:/var/lib/postgresql/data 40 # - ./docker/data/pgsql:/var/lib/postgresql/data
39 # env_file: 41 # env_file:
40 # - ./docker/postgres/env 42 # - ./docker/postgres/env
43
41 #mariadb: 44 #mariadb:
42 # image: mariadb:10 45 # image: mariadb:10
43 # ports: 46 # ports:
@@ -46,3 +49,13 @@ services:
46 # - ./docker/data/mariadb:/var/lib/mysql 49 # - ./docker/data/mariadb:/var/lib/mysql
47 # env_file: 50 # env_file:
48 # - ./docker/mariadb/env 51 # - ./docker/mariadb/env
52
53 rabbitmq:
54 image: rabbitmq:3-management
55 ports:
56 - "15672:15672"
57
58 redis:
59 image: redis
60 ports:
61 - "6379:6379"
diff --git a/docs/de/conf.py b/docs/de/conf.py
index 8f2d130d..cc9dcdf8 100644
--- a/docs/de/conf.py
+++ b/docs/de/conf.py
@@ -12,7 +12,7 @@ source_suffix = '.rst'
12master_doc = 'index' 12master_doc = 'index'
13project = u'wallabag-fr' 13project = u'wallabag-fr'
14copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence' 14copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence'
15version = '2.0.0' 15version = '2.1.0'
16release = version 16release = version
17exclude_patterns = ['_build'] 17exclude_patterns = ['_build']
18pygments_style = 'sphinx' 18pygments_style = 'sphinx'
diff --git a/docs/de/developer/rabbitmq.rst b/docs/de/developer/rabbitmq.rst
new file mode 100644
index 00000000..bea02ff4
--- /dev/null
+++ b/docs/de/developer/rabbitmq.rst
@@ -0,0 +1,77 @@
1Installiere RabbitMQ für asynchrone Aufgaben
2============================================
3
4Um asynchrone Aufgaben zu starten (nützlich z.B. für große Imports), können wir RabbitMQ nutzen.
5
6Voraussetzungen
7---------------
8
9Du musst RabbitMQ auf deinem Server installiert haben.
10
11Installation
12~~~~~~~~~~~~
13
14.. code:: bash
15
16 wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
17 apt-key add rabbitmq-signing-key-public.asc
18 apt-get update
19 apt-get install rabbitmq-server
20
21Konfiguration und Starten
22~~~~~~~~~~~~~~~~~~~~~~~~~
23
24.. code:: bash
25
26 rabbitmq-plugins enable rabbitmq_management # (useful to have a web interface, available at http://localhost:15672/ (guest/guest)
27 rabbitmq-server -detached
28
29RabbitMQ stoppen
30~~~~~~~~~~~~~~~
31
32.. code:: bash
33
34 rabbitmqctl stop
35
36
37Konfigure RabbitMQ in wallabag
38------------------------------
39
40Bearbeite die Datei ``parameters.yml``, um die RabbitMQ Konfiguration einzurichten. Die Standardkonfiguration sollte ok sein:
41
42.. code:: yaml
43
44 rabbitmq_host: localhost
45 rabbitmq_port: 5672
46 rabbitmq_user: guest
47 rabbitmq_password: guest
48
49
50Starte den RabbitMQ Consumer
51----------------------------
52
53Abhängig von welchem Service du importieren möchtest, solltest du einen Cron Job aktivieren (oder mehrere, wenn du viele unterstützen willst):
54
55.. code:: bash
56
57 # for Pocket import
58 bin/console rabbitmq:consumer import_pocket -w
59
60 # for Readability import
61 bin/console rabbitmq:consumer import_readability -w
62
63 # for Instapaper import
64 bin/console rabbitmq:consumer import_instapaper -w
65
66 # for wallabag v1 import
67 bin/console rabbitmq:consumer import_wallabag_v1 -w
68
69 # for wallabag v2 import
70 bin/console rabbitmq:consumer import_wallabag_v2 -w
71
72 # for Firefox import
73 bin/console rabbitmq:consumer import_firefox -w
74
75 # for Chrome import
76 bin/console rabbitmq:consumer import_chrome -w
77
diff --git a/docs/de/developer/redis.rst b/docs/de/developer/redis.rst
new file mode 100644
index 00000000..d613ce6c
--- /dev/null
+++ b/docs/de/developer/redis.rst
@@ -0,0 +1,71 @@
1Installiere Redis für asynchrone Aufgaben
2=========================================
3
4Um asynchrone Aufgaben zu starten (nützlich z.B. für große Imports), können wir Redis nutzen.
5
6Voraussetzungen
7---------------
8
9Du musst Redis auf deinem Server installiert haben.
10
11Installation
12~~~~~~~~~~~~
13
14.. code:: bash
15
16 apt-get install redis-server
17
18Starten
19~~~~~~
20
21Der Redis Service läuft eventuell schon direkt nach der Installation. Falls nicht kannst du ihn wie folgt starten:
22
23.. code:: bash
24
25 redis-server
26
27
28Konfigure Redis in wallabag
29---------------------------
30
31Bearbeite die Datei ``parameters.yml``, um die RabbitMQ Konfiguration einzurichten. Die Standardkonfiguration sollte ok sein:
32
33.. code:: yaml
34
35 redis_host: localhost
36 redis_port: 6379
37
38
39Starte den Redis Consumer
40-------------------------
41
42Abhängig von welchem Service du importieren möchtest, solltest du einen Cron Job aktivieren (oder mehrere, wenn du viele unterstützen willst):
43
44.. code:: bash
45
46 # for Pocket import
47 bin/console wallabag:import:redis-worker pocket -vv >> /path/to/wallabag/var/logs/redis-pocket.log
48
49 # for Readability import
50 bin/console wallabag:import:redis-worker readability -vv >> /path/to/wallabag/var/logs/redis-readability.log
51
52 # for Instapaper import
53 bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-instapaper.log
54
55 # for wallabag v1 import
56 bin/console wallabag:import:redis-worker wallabag_v1 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v1.log
57
58 # for wallabag v2 import
59 bin/console wallabag:import:redis-worker wallabag_v2 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v2.log
60
61 # for Firefox import
62 bin/console wallabag:import:redis-worker firefox -vv >> /path/to/wallabag/var/logs/redis-firefox.log
63
64 # for Chrome import
65 bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-chrome.log
66
67Wenn du den Import nur für ein paar Nachrichten und nicht für alle starten willst, kannst du die Nummer (im folgenden Beispiel 12) angeben. Der Redis Worker wird dann nach der 12. Nachricht stoppen:
68
69.. code:: bash
70
71 bin/console wallabag:import:redis-worker pocket -vv --maxIterations=12
diff --git a/docs/de/index.rst b/docs/de/index.rst
index 5311150f..b3cd33b0 100644
--- a/docs/de/index.rst
+++ b/docs/de/index.rst
@@ -17,6 +17,11 @@ Die Hauptdokumentation für diese Applikation ist in einigen Abschnitten organis
17* :ref:`user-docs` 17* :ref:`user-docs`
18* :ref:`dev-docs` 18* :ref:`dev-docs`
19 19
20Die Dokumentation ist in anderen Sprachen verfügbar :
21
22* `Documentation in english <http://doc.wallabag.org/en/master/>`_
23* `Documentation en français <http://doc.wallabag.org/fr/master/>`_
24
20.. _user-docs: 25.. _user-docs:
21 26
22.. toctree:: 27.. toctree::
@@ -25,7 +30,8 @@ Die Hauptdokumentation für diese Applikation ist in einigen Abschnitten organis
25 30
26 user/faq 31 user/faq
27 user/installation 32 user/installation
28 user/upgrade 33 user/upgrade-2.0.x-2.1.y
34 user/upgrade-2.0.x-2.0.y
29 user/migration 35 user/migration
30 user/import 36 user/import
31 user/create_account 37 user/create_account
@@ -50,3 +56,5 @@ Die Hauptdokumentation für diese Applikation ist in einigen Abschnitten organis
50 developer/documentation 56 developer/documentation
51 developer/translate 57 developer/translate
52 developer/maintenance 58 developer/maintenance
59 developer/redis
60 developer/rabbitmq
diff --git a/docs/de/user/installation.rst b/docs/de/user/installation.rst
index fced2ed4..05602bf3 100644
--- a/docs/de/user/installation.rst
+++ b/docs/de/user/installation.rst
@@ -46,7 +46,7 @@ Composer installieren:
46 46
47 curl -s http://getcomposer.org/installer | php 47 curl -s http://getcomposer.org/installer | php
48 48
49Du kannst eine spezifische Anleitung `hier <https://getcomposer.org/doc/00-intro.md>`__ finden: 49Du kannst eine spezifische Anleitung `hier <https://getcomposer.org/doc/00-intro.md>`__ finden.
50 50
51Um wallabag selbst zu installieren, musst du die folgenden Kommandos ausführen: 51Um wallabag selbst zu installieren, musst du die folgenden Kommandos ausführen:
52 52
@@ -54,9 +54,8 @@ Um wallabag selbst zu installieren, musst du die folgenden Kommandos ausführen:
54 54
55 git clone https://github.com/wallabag/wallabag.git 55 git clone https://github.com/wallabag/wallabag.git
56 cd wallabag 56 cd wallabag
57 git checkout 2.0.8 57 git checkout 2.1.0
58 SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist 58 ./install.sh
59 php bin/console wallabag:install --env=prod
60 59
61Um PHPs eingebauten Server zu starten und zu testen, ob alles korrekt installiert wurde, kannst du folgendes Kommando ausführen: 60Um PHPs eingebauten Server zu starten und zu testen, ob alles korrekt installiert wurde, kannst du folgendes Kommando ausführen:
62 61
diff --git a/docs/de/user/upgrade.rst b/docs/de/user/upgrade-2.0.x-2.0.y.rst
index c04b68f3..adf288bd 100644
--- a/docs/de/user/upgrade.rst
+++ b/docs/de/user/upgrade-2.0.x-2.0.y.rst
@@ -1,5 +1,5 @@
1Wallabag updaten 1Wallabag updaten 2.0.x -> 2.1.x
2================ 2===============================
3 3
4Update auf einem dedizierten Webserver 4Update auf einem dedizierten Webserver
5-------------------------------------- 5--------------------------------------
diff --git a/docs/de/user/upgrade-2.0.x-2.1.y.rst b/docs/de/user/upgrade-2.0.x-2.1.y.rst
new file mode 100644
index 00000000..85229d30
--- /dev/null
+++ b/docs/de/user/upgrade-2.0.x-2.1.y.rst
@@ -0,0 +1,64 @@
1Wallabag updaten
2================
3
4.. warning::
5Wenn du den Import von Pocket durch das Hinzufügen des Consumer Key in den internen Einstellungen konfiguriert hast, fertige bitte ein Backup deines Keys an, bevor du auf das neue Release migrierst: Du wirst den Key nach dem Update in der Konfiguration erneut eintragen müssen.
6
7Update auf einem dedizierten Webserver
8--------------------------------------
9
10Das neueste Release ist auf https://www.wallabag.org/pages/download-wallabag.html veröffentlicht. Um deine wallabag-Installation auf die neueste Version zu aktualisieren, führe die folgenden Kommandos in deinem wallabag-Ordner aus (ersetze ``2.1.0`` mit der neuesten Releasenummer):
11
12::
13
14 git fetch origin
15 git fetch --tags
16 git checkout 2.1.0
17 ASSETS=build ./install.sh
18 php bin/console doctrine:migrations:migrate --env=prod
19 php bin/console cache:clear --env=prod
20
21Update auf einem Shared Webhosting
22----------------------------------
23
24Sichere deine ``app/config/parameters.yml`` Datei.
25
26Lade das neueste Release von wallabag herunter:
27
28.. code-block:: bash
29
30 wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
31
32(md5 hash: ``4f84c725d1d6e3345eae0a406115e5ff``)
33
34Entpacke das Archiv in deinen wallabag-Ordner und ersetze ``app/config/parameters.yml`` mit deiner Datei.
35
36Bitte beachte, dass wir in dieser Version neue Parameter hinzugefügt haben. Du musst die Datei ``app/config/parameters.yml`` bearbeiten und die folgenden Zeilen hinzufügen (ersetze die Werte mit deiner Konfiguration):
37
38.. code-block:: bash
39
40 # RabbitMQ processing
41 rabbitmq_host: localhost
42 rabbitmq_port: 5672
43 rabbitmq_user: guest
44 rabbitmq_password: guest
45
46 # Redis processing
47 redis_host: localhost
48 redis_port: 6379
49
50Wenn du SQLite nutzt, musst auch das ``data/`` Verzeichnis in die neue Installation kopieren.
51
52Leere den ``var/cache`` Ordner.
53
54Du musst einige SQL-Abfragen ausführen, um die Datenbank zu aktualisieren. Wir nehmen in diesem Fall an, dass das Tabellenpräfix ``wallabag_`` ist und eine MySQL-Datenbank genutzt wird:
55
56.. code-block:: sql
57
58 ALTER TABLE `wallabag_entry` ADD `uuid` LONGTEXT DEFAULT NULL;
59 INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('share_public', '1', 'entry');
60 ALTER TABLE `wallabag_oauth2_clients` ADD name longtext COLLATE 'utf8_unicode_ci' DEFAULT NULL;
61 INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_redis', '0', 'import');
62 INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_rabbitmq', '0', 'import');
63 ALTER TABLE `wallabag_config` ADD `pocket_consumer_key` VARCHAR(255) DEFAULT NULL;
64 DELETE FROM `wallabag_craue_config_setting` WHERE `name` = 'pocket_consumer_key';
diff --git a/docs/en/conf.py b/docs/en/conf.py
index 86e33704..717b35f1 100644
--- a/docs/en/conf.py
+++ b/docs/en/conf.py
@@ -12,7 +12,7 @@ source_suffix = '.rst'
12master_doc = 'index' 12master_doc = 'index'
13project = u'wallabag' 13project = u'wallabag'
14copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence' 14copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence'
15version = '2.0.0' 15version = '2.1.0'
16release = version 16release = version
17exclude_patterns = ['_build'] 17exclude_patterns = ['_build']
18pygments_style = 'sphinx' 18pygments_style = 'sphinx'
diff --git a/docs/en/developer/rabbitmq.rst b/docs/en/developer/rabbitmq.rst
new file mode 100644
index 00000000..63b85106
--- /dev/null
+++ b/docs/en/developer/rabbitmq.rst
@@ -0,0 +1,76 @@
1Install RabbitMQ for asynchronous tasks
2=======================================
3
4In order to launch asynchronous tasks (useful for huge imports for example), we can use RabbitMQ.
5
6Requirements
7------------
8
9You need to have RabbitMQ installed on your server.
10
11Installation
12~~~~~~~~~~~~
13
14.. code:: bash
15
16 wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
17 apt-key add rabbitmq-signing-key-public.asc
18 apt-get update
19 apt-get install rabbitmq-server
20
21Configuration and launch
22~~~~~~~~~~~~~~~~~~~~~~~~
23
24.. code:: bash
25
26 rabbitmq-plugins enable rabbitmq_management # (useful to have a web interface, available at http://localhost:15672/ (guest/guest)
27 rabbitmq-server -detached
28
29Stop RabbitMQ
30~~~~~~~~~~~~~
31
32.. code:: bash
33
34 rabbitmqctl stop
35
36
37Configure RabbitMQ in wallabag
38------------------------------
39
40Edit your ``parameters.yml`` file to edit RabbitMQ configuration. The default one should be ok:
41
42.. code:: yaml
43
44 rabbitmq_host: localhost
45 rabbitmq_port: 5672
46 rabbitmq_user: guest
47 rabbitmq_password: guest
48
49
50Launch RabbitMQ consumer
51------------------------
52
53Depending on which service you want to import from you need to enable one (or many if you want to support many) cron job:
54
55.. code:: bash
56
57 # for Pocket import
58 bin/console rabbitmq:consumer import_pocket -w
59
60 # for Readability import
61 bin/console rabbitmq:consumer import_readability -w
62
63 # for Instapaper import
64 bin/console rabbitmq:consumer import_instapaper -w
65
66 # for wallabag v1 import
67 bin/console rabbitmq:consumer import_wallabag_v1 -w
68
69 # for wallabag v2 import
70 bin/console rabbitmq:consumer import_wallabag_v2 -w
71
72 # for Firefox import
73 bin/console rabbitmq:consumer import_firefox -w
74
75 # for Chrome import
76 bin/console rabbitmq:consumer import_chrome -w
diff --git a/docs/en/developer/redis.rst b/docs/en/developer/redis.rst
new file mode 100644
index 00000000..820a52e9
--- /dev/null
+++ b/docs/en/developer/redis.rst
@@ -0,0 +1,71 @@
1Install Redis for asynchronous tasks
2====================================
3
4In order to launch asynchronous tasks (useful for huge imports for example), we can use Redis.
5
6Requirements
7------------
8
9You need to have Redis installed on your server.
10
11Installation
12~~~~~~~~~~~~
13
14.. code:: bash
15
16 apt-get install redis-server
17
18Launch
19~~~~~~
20
21The server might be already running after installing, if not you can launch it using:
22
23.. code:: bash
24
25 redis-server
26
27
28Configure Redis in wallabag
29---------------------------
30
31Edit your ``parameters.yml`` file to edit Redis configuration. The default one should be ok:
32
33.. code:: yaml
34
35 redis_host: localhost
36 redis_port: 6379
37
38
39Launch Redis consumer
40---------------------
41
42Depending on which service you want to import from you need to enable one (or many if you want to support many) cron job:
43
44.. code:: bash
45
46 # for Pocket import
47 bin/console wallabag:import:redis-worker pocket -vv >> /path/to/wallabag/var/logs/redis-pocket.log
48
49 # for Readability import
50 bin/console wallabag:import:redis-worker readability -vv >> /path/to/wallabag/var/logs/redis-readability.log
51
52 # for Instapaper import
53 bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-instapaper.log
54
55 # for wallabag v1 import
56 bin/console wallabag:import:redis-worker wallabag_v1 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v1.log
57
58 # for wallabag v2 import
59 bin/console wallabag:import:redis-worker wallabag_v2 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v2.log
60
61 # for Firefox import
62 bin/console wallabag:import:redis-worker firefox -vv >> /path/to/wallabag/var/logs/redis-firefox.log
63
64 # for Chrome import
65 bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-chrome.log
66
67If you want to launch the import only for some messages and not all, you can specify this number (here 12) and the worker will stop right after the 12th message :
68
69.. code:: bash
70
71 bin/console wallabag:import:redis-worker pocket -vv --maxIterations=12
diff --git a/docs/en/index.rst b/docs/en/index.rst
index 03025ef9..beb3816e 100644
--- a/docs/en/index.rst
+++ b/docs/en/index.rst
@@ -17,6 +17,11 @@ The main documentation for this application is organized into a couple sections:
17* :ref:`user-docs` 17* :ref:`user-docs`
18* :ref:`dev-docs` 18* :ref:`dev-docs`
19 19
20The documentation is available in other languages:
21
22* `Documentation en français <http://doc.wallabag.org/fr/master/>`_
23* `Deutsch Dokumentation <http://doc.wallabag.org/de/master/>`_
24
20.. _user-docs: 25.. _user-docs:
21 26
22.. toctree:: 27.. toctree::
@@ -25,7 +30,8 @@ The main documentation for this application is organized into a couple sections:
25 30
26 user/faq 31 user/faq
27 user/installation 32 user/installation
28 user/upgrade 33 user/upgrade-2.0.x-2.1.y
34 user/upgrade-2.0.x-2.0.y
29 user/migration 35 user/migration
30 user/import 36 user/import
31 user/create_account 37 user/create_account
@@ -35,6 +41,7 @@ The main documentation for this application is organized into a couple sections:
35 user/errors_during_fetching 41 user/errors_during_fetching
36 user/annotations 42 user/annotations
37 user/download_articles 43 user/download_articles
44 user/share
38 user/filters 45 user/filters
39 user/tags 46 user/tags
40 user/android 47 user/android
@@ -50,3 +57,5 @@ The main documentation for this application is organized into a couple sections:
50 developer/documentation 57 developer/documentation
51 developer/translate 58 developer/translate
52 developer/maintenance 59 developer/maintenance
60 developer/redis
61 developer/rabbitmq
diff --git a/docs/en/user/import.rst b/docs/en/user/import.rst
index 63210484..758e3816 100644
--- a/docs/en/user/import.rst
+++ b/docs/en/user/import.rst
@@ -23,22 +23,43 @@ Now, all is fine to migrate from Pocket.
23Import your data into wallabag 2.x 23Import your data into wallabag 2.x
24~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25 25
26Click on ``Import`` link in the menu, on ``Import contents`` in Pocket section 26Click on ``Import`` link in the menu, on ``Import contents`` in Pocket section
27and then on ``Connect to Pocket and import data``. 27and then on ``Connect to Pocket and import data``.
28 28
29You need to authorize wallabag to interact with your Pocket account. 29You need to authorize wallabag to interact with your Pocket account.
30Your data will be imported. Data import can be a demanding process for your server 30Your data will be imported. Data import can be a demanding process for your server.
31(we need to work on this import to improve it). 31
32From Readability
33----------------
34
35Export your Readability data
36~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37
38On the tools (`https://www.readability.com/tools/<https://www.readability.com/tools/>`_) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).
39
40Import your data into wallabag 2.x
41~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42
43Click on ``Import`` link in the menu, on ``Import contents`` in Readability section
44and then select your json file and upload it.
45
46Your data will be imported. Data import can be a demanding process for your server.
32 47
33From Instapaper 48From Instapaper
34--------------- 49---------------
35 50
36*Feature not yet implemented in wallabag v2.* 51Export your Instapaper data
52~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 53
38From Readability 54On the settings (`https://www.instapaper.com/user<https://www.instapaper.com/user>`_) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like ``instapaper-export.csv``).
39----------------
40 55
41*Feature not yet implemented in wallabag v2.* 56Import your data into wallabag 2.x
57~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58
59Click on ``Import`` link in the menu, on ``Import contents`` in Instapaper section
60and then select your CSV file and upload it.
61
62Your data will be imported. Data import can be a demanding process for your server.
42 63
43From HTML or JSON file 64From HTML or JSON file
44---------------------- 65----------------------
diff --git a/docs/en/user/installation.rst b/docs/en/user/installation.rst
index 763d7c66..8e9f71d4 100644
--- a/docs/en/user/installation.rst
+++ b/docs/en/user/installation.rst
@@ -37,7 +37,7 @@ Installation
37On a dedicated web server (recommended way) 37On a dedicated web server (recommended way)
38~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 38~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39 39
40wallabag uses a large number of libraries in order to function. These libraries must be installed with a tool called Composer. You need to install it if you have not already done so and be sure to use the 1.2 version (if you already have Composer, run a ``composer selfupdate``). 40wallabag uses a large number of PHP libraries in order to function. These libraries must be installed with a tool called Composer. You need to install it if you have not already done so and be sure to use the 1.2 version (if you already have Composer, run a ``composer selfupdate``).
41 41
42Install Composer: 42Install Composer:
43 43
@@ -45,7 +45,7 @@ Install Composer:
45 45
46 curl -s http://getcomposer.org/installer | php 46 curl -s http://getcomposer.org/installer | php
47 47
48You can find specific instructions `here <https://getcomposer.org/doc/00-intro.md>`__: 48You can find specific instructions `here <https://getcomposer.org/doc/00-intro.md>`__.
49 49
50To install wallabag itself, you must run the following commands: 50To install wallabag itself, you must run the following commands:
51 51
@@ -53,9 +53,8 @@ To install wallabag itself, you must run the following commands:
53 53
54 git clone https://github.com/wallabag/wallabag.git 54 git clone https://github.com/wallabag/wallabag.git
55 cd wallabag 55 cd wallabag
56 git checkout 2.0.8 56 git checkout 2.1.0
57 SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist 57 ./install.sh
58 php bin/console wallabag:install --env=prod
59 58
60To start PHP's build-in server and test if everything did install correctly, you can do: 59To start PHP's build-in server and test if everything did install correctly, you can do:
61 60
diff --git a/docs/en/user/migration.rst b/docs/en/user/migration.rst
index e141ae40..42062796 100644
--- a/docs/en/user/migration.rst
+++ b/docs/en/user/migration.rst
@@ -24,20 +24,38 @@ After creating an user account on your new wallabag v2 instance, you must head o
24 :alt: Import from wallabag v1 24 :alt: Import from wallabag v1
25 :align: center 25 :align: center
26 26
27From wallabag 2.x
28-----------------
29
30From the previous wallabag instance on which you were before, go to `All articles`, then export these articles as json.
31
32.. image:: ../../img/user/export_v2.png
33 :alt: Export depuis wallabag v2
34 :align: center
35
36From your new wallabag instance, create your user account and click on the link in the menu to proceed to import. Choose import from wallabag v2 and select your json file to upload it.
37
38.. note::
39 If you encounter issues during the export or the import, don't hesitate to `ask for support <https://www.wallabag.org/pages/support.html>`__.
40
27Import via command-line interface (CLI) 41Import via command-line interface (CLI)
28~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 42---------------------------------------
29 43
30If you have a CLI access on your web server, you can execute this command to import your wallabag v1 export: 44If you have a CLI access on your web server, you can execute this command to import your wallabag v1 export:
31 45
32:: 46::
33 47
34 bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod 48 bin/console wallabag:import 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
35 49
36Please replace values: 50Please replace values:
37 51
38* ``1`` is the user identifier in database (The ID of the first user created on wallabag is 1) 52* ``1`` is the user identifier in database (The ID of the first user created on wallabag is 1)
39* ``~/Downloads/wallabag-export-1-2016-04-05.json`` is the path of your wallabag v1 export 53* ``~/Downloads/wallabag-export-1-2016-04-05.json`` is the path of your wallabag v1 export
40 54
55If you want to mark all these entries as read, you can add the ``--markAsRead`` option.
56
57To import a wallabag v2 file, you need to add the option ``--importer=v2``.
58
41You'll have this in return: 59You'll have this in return:
42 60
43:: 61::
@@ -46,17 +64,3 @@ You'll have this in return:
46 403 imported 64 403 imported
47 0 already saved 65 0 already saved
48 End : 05-04-2016 11:36:09 --- 66 End : 05-04-2016 11:36:09 ---
49
50From wallabag 2.x
51-----------------
52
53From the previous wallabag instance on which you were before, go to `All articles`, then export these articles as json.
54
55.. image:: ../../img/user/export_v2.png
56 :alt: Export depuis wallabag v2
57 :align: center
58
59From your new wallabag instance, create your user account and click on the link in the menu to proceed to import. Choose import from wallabag v2 and select your json file to upload it.
60
61.. note::
62 If you encounter issues during the export or the import, don't hesitate to `ask for support <https://www.wallabag.org/pages/support.html>`__.
diff --git a/docs/en/user/share.rst b/docs/en/user/share.rst
new file mode 100644
index 00000000..e99e51ab
--- /dev/null
+++ b/docs/en/user/share.rst
@@ -0,0 +1,17 @@
1Share articles
2==============
3
4When you're reading an article, you can share it. Just click on the share button:
5
6.. image:: ../../img/user/share.png
7 :alt: share article
8 :align: center
9
10Now, you can share the article:
11
12- with a public URL (you'll have a light view of the article)
13- with a tweet
14- into your Shaarli
15- with a post in Diaspora*
16- to Carrot
17- with an email
diff --git a/docs/en/user/upgrade.rst b/docs/en/user/upgrade-2.0.x-2.0.y.rst
index 90ed6c70..6a0818b3 100644
--- a/docs/en/user/upgrade.rst
+++ b/docs/en/user/upgrade-2.0.x-2.0.y.rst
@@ -1,5 +1,5 @@
1Upgrade wallabag 1Upgrade from 2.0.x to 2.0.y
2================ 2===========================
3 3
4Upgrade on a dedicated web server 4Upgrade on a dedicated web server
5--------------------------------- 5---------------------------------
@@ -25,7 +25,7 @@ Download the last release of wallabag:
25 25
26 wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package 26 wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
27 27
28(md5 hash of the package: ``4f84c725d1d6e3345eae0a406115e5ff``) 28(md5 hash of the 2.0.8 package: ``4f84c725d1d6e3345eae0a406115e5ff``)
29 29
30Extract the archive in your wallabag folder and replace ``app/config/parameters.yml`` with yours. 30Extract the archive in your wallabag folder and replace ``app/config/parameters.yml`` with yours.
31 31
diff --git a/docs/en/user/upgrade-2.0.x-2.1.y.rst b/docs/en/user/upgrade-2.0.x-2.1.y.rst
new file mode 100644
index 00000000..5ae5eb43
--- /dev/null
+++ b/docs/en/user/upgrade-2.0.x-2.1.y.rst
@@ -0,0 +1,64 @@
1Upgrading from 2.0.x to 2.1.y
2=============================
3
4.. warning::
5Before this migration, if you configured the Pocket import by adding your consumer key in Internal settings, please do a backup of it: you'll have to add it into the Config page after the upgrade.
6
7Upgrade on a dedicated web server
8---------------------------------
9
10The last release is published on https://www.wallabag.org/pages/download-wallabag.html. In order to upgrade your wallabag installation and get the last version, run the following commands in you wallabag folder (replace ``2.1.0`` by the last release number):
11
12::
13
14 git fetch origin
15 git fetch --tags
16 git checkout 2.1.0
17 ASSETS=build ./install.sh
18 php bin/console doctrine:migrations:migrate --env=prod
19 php bin/console cache:clear --env=prod
20
21Upgrade on a shared hosting
22---------------------------
23
24Backup your ``app/config/parameters.yml`` file.
25
26Download the last release of wallabag:
27
28.. code-block:: bash
29
30 wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
31
32(md5 hash of the package: ``4f84c725d1d6e3345eae0a406115e5ff``)
33
34Extract the archive in your wallabag folder and replace ``app/config/parameters.yml`` with yours.
35
36Please note that we added new parameters in this version. You have to edit ``app/config/parameters.yml`` by adding these lines (replace with your configuration) :
37
38.. code-block:: bash
39
40 # RabbitMQ processing
41 rabbitmq_host: localhost
42 rabbitmq_port: 5672
43 rabbitmq_user: guest
44 rabbitmq_password: guest
45
46 # Redis processing
47 redis_host: localhost
48 redis_port: 6379
49
50If you use SQLite, you must also copy your ``data/`` folder inside the new installation.
51
52Empty ``var/cache`` folder.
53
54You must run some SQL queries to upgrade your database. We assume that the table prefix is ``wallabag_`` and the database server is a MySQL one:
55
56.. code-block:: sql
57
58 ALTER TABLE `wallabag_entry` ADD `uuid` LONGTEXT DEFAULT NULL;
59 INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('share_public', '1', 'entry');
60 ALTER TABLE `wallabag_oauth2_clients` ADD name longtext COLLATE 'utf8_unicode_ci' DEFAULT NULL;
61 INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_redis', '0', 'import');
62 INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_rabbitmq', '0', 'import');
63 ALTER TABLE `wallabag_config` ADD `pocket_consumer_key` VARCHAR(255) DEFAULT NULL;
64 DELETE FROM `wallabag_craue_config_setting` WHERE `name` = 'pocket_consumer_key';
diff --git a/docs/fr/conf.py b/docs/fr/conf.py
index f1fe3967..49a57e2d 100644
--- a/docs/fr/conf.py
+++ b/docs/fr/conf.py
@@ -12,7 +12,7 @@ source_suffix = '.rst'
12master_doc = 'index' 12master_doc = 'index'
13project = u'wallabag-fr' 13project = u'wallabag-fr'
14copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence' 14copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence'
15version = '2.0.0' 15version = '2.1.0'
16release = version 16release = version
17exclude_patterns = ['_build'] 17exclude_patterns = ['_build']
18pygments_style = 'sphinx' 18pygments_style = 'sphinx'
diff --git a/docs/fr/developer/rabbitmq.rst b/docs/fr/developer/rabbitmq.rst
new file mode 100644
index 00000000..20182e6e
--- /dev/null
+++ b/docs/fr/developer/rabbitmq.rst
@@ -0,0 +1,76 @@
1Installer RabbitMQ pour des tâches asynchrones
2==============================================
3
4Pour lancer des tâches asynchrones (utile pour des imports importants par exemple), nous pouvons utiliser RabbitMQ.
5
6Pré-requis
7----------
8
9Vous devez installer RabbitMQ sur votre serveur.
10
11Installation
12~~~~~~~~~~~~
13
14.. code:: bash
15
16 wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
17 apt-key add rabbitmq-signing-key-public.asc
18 apt-get update
19 apt-get install rabbitmq-server
20
21Configuration et démarrage
22~~~~~~~~~~~~~~~~~~~~~~~~~~
23
24.. code:: bash
25
26 rabbitmq-plugins enable rabbitmq_management # (useful to have a web interface, available at http://localhost:15672/ (guest/guest)
27 rabbitmq-server -detached
28
29Arrêter RabbitMQ
30~~~~~~~~~~~~~~~~
31
32.. code:: bash
33
34 rabbitmqctl stop
35
36
37Configurer RabbitMQ dans wallabag
38---------------------------------
39
40Modifiez votre fichier ``parameters.yml`` pour éditer la configuration RabbitMQ. Celle par défaut devrait convenir :
41
42.. code:: yaml
43
44 rabbitmq_host: localhost
45 rabbitmq_port: 5672
46 rabbitmq_user: guest
47 rabbitmq_password: guest
48
49
50Démarrer les clients RabbitMQ
51-----------------------------
52
53En fonction du service dont vous souhaitez importer vos données, vous devez activer un (ou plusieurs si vous souhaitez en supporter plusieurs) cron job :
54
55.. code:: bash
56
57 # for Pocket import
58 bin/console rabbitmq:consumer import_pocket -w
59
60 # for Readability import
61 bin/console rabbitmq:consumer import_readability -w
62
63 # for Instapaper import
64 bin/console rabbitmq:consumer import_instapaper -w
65
66 # for wallabag v1 import
67 bin/console rabbitmq:consumer import_wallabag_v1 -w
68
69 # for wallabag v2 import
70 bin/console rabbitmq:consumer import_wallabag_v2 -w
71
72 # for Firefox import
73 bin/console rabbitmq:consumer import_firefox -w
74
75 # for Chrome import
76 bin/console rabbitmq:consumer import_chrome -w
diff --git a/docs/fr/developer/redis.rst b/docs/fr/developer/redis.rst
new file mode 100644
index 00000000..097e375d
--- /dev/null
+++ b/docs/fr/developer/redis.rst
@@ -0,0 +1,71 @@
1Installer Redis pour des tâches asynchrones
2===========================================
3
4Pour lancer des tâches asynchrones (utile pour des imports importants par exemple), nous pouvons utiliser Redis.
5
6Pré-requis
7----------
8
9Vous devez installer Redis sur votre serveur.
10
11Installation
12~~~~~~~~~~~~
13
14.. code:: bash
15
16 apt-get install redis-server
17
18Démarrage
19~~~~~~~~~
20
21Le serveur devrait déjà être démarré après l'installation. Si ce n'est pas le cas, vous pouvez le démarrer ainsi :
22
23.. code:: bash
24
25 redis-server
26
27
28Configurer Redis dans wallabag
29-------------------------------
30
31Modifiez votre fichier ``parameters.yml`` pour éditer la configuration Redis. Celle par défaut devrait convenir :
32
33.. code:: yaml
34
35 redis_host: localhost
36 redis_port: 6379
37
38
39Démarrer les clients Redis
40--------------------------
41
42En fonction du service dont vous souhaitez importer vos données, vous devez activer un (ou plusieurs si vous souhaitez en supporter plusieurs) cron job :
43
44.. code:: bash
45
46 # for Pocket import
47 bin/console wallabag:import:redis-worker pocket -vv >> /path/to/wallabag/var/logs/redis-pocket.log
48
49 # for Readability import
50 bin/console wallabag:import:redis-worker readability -vv >> /path/to/wallabag/var/logs/redis-readability.log
51
52 # for Instapaper import
53 bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-instapaper.log
54
55 # for wallabag v1 import
56 bin/console wallabag:import:redis-worker wallabag_v1 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v1.log
57
58 # for wallabag v2 import
59 bin/console wallabag:import:redis-worker wallabag_v2 -vv >> /path/to/wallabag/var/logs/redis-wallabag_v2.log
60
61 # for Firefox import
62 bin/console wallabag:import:redis-worker firefox -vv >> /path/to/wallabag/var/logs/redis-firefox.log
63
64 # for Chrome import
65 bin/console wallabag:import:redis-worker instapaper -vv >> /path/to/wallabag/var/logs/redis-chrome.log
66
67Si vous souhaitez démarrer l'import pour quelques messages uniquement, vous pouvez spécifier cette valeur en paramètre (ici 12) et le client va s'arrêter après le 12ème message :
68
69.. code:: bash
70
71 bin/console wallabag:import:redis-worker pocket -vv --maxIterations=12
diff --git a/docs/fr/index.rst b/docs/fr/index.rst
index 1e72dae7..359b103c 100644
--- a/docs/fr/index.rst
+++ b/docs/fr/index.rst
@@ -18,6 +18,11 @@ La documentation principale de cette application est découpée en plusieurs sec
18* :ref:`user-docs` 18* :ref:`user-docs`
19* :ref:`dev-docs` 19* :ref:`dev-docs`
20 20
21La documentation est disponible dans d'autres langues :
22
23* `Documentation in english <http://doc.wallabag.org/en/master/>`_
24* `Deutsch Dokumentation <http://doc.wallabag.org/de/master/>`_
25
21.. _user-docs: 26.. _user-docs:
22 27
23.. toctree:: 28.. toctree::
@@ -26,7 +31,8 @@ La documentation principale de cette application est découpée en plusieurs sec
26 31
27 user/faq 32 user/faq
28 user/installation 33 user/installation
29 user/upgrade 34 user/upgrade-2.0.x-2.1.y
35 user/upgrade-2.0.x-2.0.y
30 user/migration 36 user/migration
31 user/import 37 user/import
32 user/create_account 38 user/create_account
@@ -36,6 +42,7 @@ La documentation principale de cette application est découpée en plusieurs sec
36 user/errors_during_fetching 42 user/errors_during_fetching
37 user/annotations 43 user/annotations
38 user/download_articles 44 user/download_articles
45 user/share
39 user/filters 46 user/filters
40 user/tags 47 user/tags
41 48
@@ -50,3 +57,5 @@ La documentation principale de cette application est découpée en plusieurs sec
50 developer/documentation 57 developer/documentation
51 developer/translate 58 developer/translate
52 developer/maintenance 59 developer/maintenance
60 developer/redis
61 developer/rabbitmq
diff --git a/docs/fr/user/import.rst b/docs/fr/user/import.rst
index e6c2fa02..6f114dd6 100644
--- a/docs/fr/user/import.rst
+++ b/docs/fr/user/import.rst
@@ -28,17 +28,40 @@ la section Pocket puis sur ``Se connecter à Pocket et importer les données``.
28 28
29Vous devez autoriser wallabag à se connecter à votre compte Pocket. 29Vous devez autoriser wallabag à se connecter à votre compte Pocket.
30Vos données vont être importées. L'import de données est une action qui peut être couteuse 30Vos données vont être importées. L'import de données est une action qui peut être couteuse
31pour votre serveur (nous devons encore travailler pour améliorer cet import). 31pour votre serveur.
32
33Depuis Readability
34------------------
35
36Exportez vos données de Readability
37~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38
39Sur la page des outils (`https://www.readability.com/tools/<https://www.readability.com/tools/>`_), cliquez sur "Export your data" dans la section "Data Export". Vous allez recevoir un email avec un lien pour télécharger le json.
40
41Importez vos données dans wallabag 2.x
42~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43
44Cliquez sur le lien ``Importer`` dans le menu, sur ``Importer les contenus`` dans
45la section Readability et ensuite sélectionnez votre fichier json pour l'uploader.
46
47Vos données vont être importées. L'import de données est une action qui peut être couteuse pour votre serveur.
32 48
33Depuis Instapaper 49Depuis Instapaper
34----------------- 50-----------------
35 51
36*Fonctionnalité pas encore implémentée dans wallabag v2.* 52Exportez vos données de Instapaper
53~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 54
38Depuis Readability 55Sur la page des paramètres (`https://www.instapaper.com/user<https://www.instapaper.com/user>`_), cliquez sur "Download .CSV file" dans la section "Export". Un fichier CSV se téléchargera (``instapaper-export.csv``).
39------------------ 56
57Importez vos données dans wallabag 2.x
58~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
59
60Cliquez sur le lien ``Importer`` dans le menu, sur ``Importer les contenus`` dans
61la section Instapaper et ensuite sélectionnez votre fichier CSV pour l'uploader.
62
63Vos données vont être importées. L'import de données est une action qui peut être couteuse pour votre serveur.
40 64
41*Fonctionnalité pas encore implémentée dans wallabag v2.*
42 65
43Depuis un fichier HTML ou JSON 66Depuis un fichier HTML ou JSON
44------------------------------ 67------------------------------
diff --git a/docs/fr/user/installation.rst b/docs/fr/user/installation.rst
index 480970c5..4fccd0d4 100644
--- a/docs/fr/user/installation.rst
+++ b/docs/fr/user/installation.rst
@@ -35,7 +35,7 @@ Installation
35Sur un serveur dédié (méthode conseillée) 35Sur un serveur dédié (méthode conseillée)
36~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 37
38wallabag utilise un grand nombre de bibliothèques pour fonctionner. Ces bibliothèques doivent être installées à l'aide d'un outil nommé Composer. Vous devez l'installer si ce n'est déjà fait et vous assurer que vous utilisez bien la version 1.2 (si vous avez déjà Composer, faite un ``composer selfupdate``). 38wallabag utilise un grand nombre de bibliothèques PHP pour fonctionner. Ces bibliothèques doivent être installées à l'aide d'un outil nommé Composer. Vous devez l'installer si ce n'est déjà fait et vous assurer que vous utilisez bien la version 1.2 (si vous avez déjà Composer, faite un ``composer selfupdate``).
39 39
40Installation de Composer : 40Installation de Composer :
41 41
@@ -43,17 +43,16 @@ Installation de Composer :
43 43
44 curl -s http://getcomposer.org/installer | php 44 curl -s http://getcomposer.org/installer | php
45 45
46Vous pouvez trouver des instructions spécifiques `ici (en anglais) <https://getcomposer.org/doc/00-intro.md>`__ : 46Vous pouvez trouver des instructions spécifiques `ici (en anglais) <https://getcomposer.org/doc/00-intro.md>`__.
47 47
48Pour installer wallabag, vous devez exécuter ces deux commandes : 48Pour installer wallabag, vous devez exécuter ces commandes :
49 49
50:: 50::
51 51
52 git clone https://github.com/wallabag/wallabag.git 52 git clone https://github.com/wallabag/wallabag.git
53 cd wallabag 53 cd wallabag
54 git checkout 2.0.8 54 git checkout 2.1.0
55 SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist 55 ./install.sh
56 php bin/console wallabag:install --env=prod
57 56
58Pour démarrer le serveur interne à php et vérifier que tout s'est installé correctement, vous pouvez exécuter : 57Pour démarrer le serveur interne à php et vérifier que tout s'est installé correctement, vous pouvez exécuter :
59 58
diff --git a/docs/fr/user/migration.rst b/docs/fr/user/migration.rst
index 66024572..91f8bab2 100644
--- a/docs/fr/user/migration.rst
+++ b/docs/fr/user/migration.rst
@@ -24,20 +24,38 @@ Une fois que vous avez créé un compte utilisateur sur votre nouvelle instance
24 :alt: Import depuis wallabag v1 24 :alt: Import depuis wallabag v1
25 :align: center 25 :align: center
26 26
27Import via via la ligne de commande (CLI) 27Depuis wallabag 2.x
28~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 28-------------------
29
30Depuis l'instance sur laquelle vous étiez, rendez-vous dans la section `Tous les articles`, puis exportez ces articles au format json.
31
32.. image:: ../../img/user/export_v2.png
33 :alt: Export depuis wallabag v2
34 :align: center
35
36Depuis votre nouvelle instance de wallabag, créez votre compte utilisateur puis cliquez sur le lien dans le menu pour accéder à l'import. Choisissez l'import depuis wallabag v2 puis sélectionnez votre fichier json pour l'uploader.
37
38.. note::
39 S'il vous arrive des problèmes durant l'export ou l'import, n'hésitez pas à `demander de l'aide <https://www.wallabag.org/pages/support.html>`__.
40
41Import via la ligne de commande (CLI)
42-------------------------------------
29 43
30Si vous avez accès à la ligne de commandes de votre serveur web, vous pouvez exécuter cette commande pour import votre fichier wallabag v1 : 44Si vous avez accès à la ligne de commandes de votre serveur web, vous pouvez exécuter cette commande pour import votre fichier wallabag v1 :
31 45
32:: 46::
33 47
34 bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod 48 bin/console wallabag:import 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
35 49
36Remplacez les valeurs : 50Remplacez les valeurs :
37 51
38* ``1`` est l'identifiant de votre utilisateur en base (l'ID de votre premier utilisateur créé sur wallabag est 1) 52* ``1`` est l'identifiant de votre utilisateur en base (l'ID de votre premier utilisateur créé sur wallabag est 1)
39* ``~/Downloads/wallabag-export-1-2016-04-05.json`` est le chemin de votre export wallabag v1 53* ``~/Downloads/wallabag-export-1-2016-04-05.json`` est le chemin de votre export wallabag v1
40 54
55Si vous voulez marquer tous ces articles comme lus, vous pouvez ajouter l'option ``--markAsRead``.
56
57Pour importer un fichier wallabag v2, vous devez ajouter l'option ``--importer=v2``.
58
41Vous obtiendrez : 59Vous obtiendrez :
42 60
43:: 61::
@@ -46,17 +64,3 @@ Vous obtiendrez :
46 403 imported 64 403 imported
47 0 already saved 65 0 already saved
48 End : 05-04-2016 11:36:09 --- 66 End : 05-04-2016 11:36:09 ---
49
50Depuis wallabag 2.x
51-------------------
52
53Depuis l'instance sur laquelle vous étiez, rendez-vous dans la section `Tous les articles`, puis exportez ces articles au format json.
54
55.. image:: ../../img/user/export_v2.png
56 :alt: Export depuis wallabag v2
57 :align: center
58
59Depuis votre nouvelle instance de wallabag, créez votre compte utilisateur puis cliquez sur le lien dans le menu pour accéder à l'import. Choisissez l'import depuis wallabag v2 puis sélectionnez votre fichier json pour l'uploader.
60
61.. note::
62 S'il vous arrive des problèmes durant l'export ou l'import, n'hésitez pas à `demander de l'aide <https://www.wallabag.org/pages/support.html>`__.
diff --git a/docs/fr/user/share.rst b/docs/fr/user/share.rst
new file mode 100644
index 00000000..b5faa5ba
--- /dev/null
+++ b/docs/fr/user/share.rst
@@ -0,0 +1,17 @@
1Partager des articles
2=====================
3
4Quand vous lisez un article, vous pouvez le partager. Cliquez sur le bouton de partage :
5
6.. image:: ../../img/user/share.png
7 :alt: partager un article
8 :align: center
9
10Vous pouvez maintenant le partager :
11
12- avec une URL publique (vous obtiendrez une vue allégée de l'article)
13- avec un tweet
14- dans votre Shaarli
15- avec un message dans Diaspora*
16- sur Carrot
17- avec un email
diff --git a/docs/fr/user/upgrade.rst b/docs/fr/user/upgrade-2.0.x-2.0.y.rst
index 1ead2c94..d8dfac6e 100644
--- a/docs/fr/user/upgrade.rst
+++ b/docs/fr/user/upgrade-2.0.x-2.0.y.rst
@@ -1,5 +1,5 @@
1Mettre à jour wallabag 1Mettre à jour de la 2.0.x à la 2.0.y
2====================== 2====================================
3 3
4Mise à jour sur un serveur dédié 4Mise à jour sur un serveur dédié
5-------------------------------- 5--------------------------------
@@ -25,7 +25,7 @@ Téléchargez la dernière version de wallabag :
25 25
26 wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package 26 wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
27 27
28(hash md5 de l'archive : ``4f84c725d1d6e3345eae0a406115e5ff``) 28(hash md5 de l'archive 2.0.8 : ``4f84c725d1d6e3345eae0a406115e5ff``)
29 29
30Décompressez l'archive dans votre répertoire d'installation et remplacez le fichier ``app/config/parameters.yml`` avec le votre. 30Décompressez l'archive dans votre répertoire d'installation et remplacez le fichier ``app/config/parameters.yml`` avec le votre.
31 31
diff --git a/docs/fr/user/upgrade-2.0.x-2.1.y.rst b/docs/fr/user/upgrade-2.0.x-2.1.y.rst
new file mode 100644
index 00000000..a4afe768
--- /dev/null
+++ b/docs/fr/user/upgrade-2.0.x-2.1.y.rst
@@ -0,0 +1,65 @@
1Mettre à jour de la 2.0.x à la 2.1.y
2====================================
3
4.. warning::
5Avant cette migration, si vous aviez configuré l'import depuis Pocket en ajoutant votre consumer key dans les paramètres internes, pensez à effectuer une sauvegarde de celle-ci : vous devrez l'ajouter dans la configuration de wallabag après la mise à jour.
6
7Mise à jour sur un serveur dédié
8--------------------------------
9
10La dernière version de wallabag est publiée à cette adresse : https://www.wallabag.org/pages/download-wallabag.html. Pour mettre à jour votre installation de wallabag, exécutez les commandes suivantes dans votre répertoire d'installation (remplacez ``2.1.0`` par le numéro de la dernière version) :
11
12::
13
14 git fetch origin
15 git fetch --tags
16 git checkout 2.1.0
17 ASSETS=build ./install.sh
18 php bin/console doctrine:migrations:migrate --env=prod
19 php bin/console cache:clear --env=prod
20
21Mise à jour sur un hébergement mutualisé
22----------------------------------------
23
24Effectuez une sauvegarde du fichier ``app/config/parameters.yml``.
25
26Téléchargez la dernière version de wallabag :
27
28.. code-block:: bash
29
30 wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
31
32(hash md5 de l'archive : ``4f84c725d1d6e3345eae0a406115e5ff``)
33
34Décompressez l'archive dans votre répertoire d'installation et remplacez le fichier ``app/config/parameters.yml`` avec le votre.
35
36Nous avons ajouté de nouveaux paramètres dans cette nouvelle version. Vous devez donc éditer le fichier ``app/config/parameters.yml`` en ajoutant ces lignes (et en remplaçant par votre configuration) :
37
38.. code-block:: bash
39
40 # RabbitMQ processing
41 rabbitmq_host: localhost
42 rabbitmq_port: 5672
43 rabbitmq_user: guest
44 rabbitmq_password: guest
45
46 # Redis processing
47 redis_host: localhost
48 redis_port: 6379
49
50Si vous utilisez SQLite, vous devez également conserver le contenu du répertoire ``data/``.
51
52Videz le répertoire ``var/cache``.
53
54Vous allez devoir également exécuter des requêtes SQL pour mettre à jour votre base de données. Nous partons du principe que le préfixe de vos tables est ``wallabag_`` et que le serveur SQL est un serveur MySQL :
55
56.. code-block:: sql
57
58 ALTER TABLE `wallabag_entry` ADD `uuid` LONGTEXT DEFAULT NULL;
59 INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('share_public', '1', 'entry');
60 ALTER TABLE `wallabag_oauth2_clients` ADD name longtext COLLATE 'utf8_unicode_ci' DEFAULT NULL;
61 INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_redis', '0', 'import');
62 INSERT INTO `wallabag_craue_config_setting` (`name`, `value`, `section`) VALUES ('import_with_rabbitmq', '0', 'import');
63 ALTER TABLE `wallabag_config` ADD `pocket_consumer_key` VARCHAR(255) DEFAULT NULL;
64 DELETE FROM `wallabag_craue_config_setting` WHERE `name` = 'pocket_consumer_key';
65
diff --git a/docs/img/user/share.png b/docs/img/user/share.png
new file mode 100644
index 00000000..4cfe9edb
--- /dev/null
+++ b/docs/img/user/share.png
Binary files differ
diff --git a/install.sh b/install.sh
new file mode 100755
index 00000000..a486e8a5
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,18 @@
1#! /usr/bin/env bash
2
3if [[ $ASSETS == 'build' ]]; then
4 echo "Installing PHP dependencies through Composer..."
5 composer install --no-interaction --no-progress --prefer-dist -o
6
7 chmod ugo+x vendor/mouf/nodejs-installer/bin/local/npm
8 echo "Downloading javascript librairies through npm..."
9 vendor/mouf/nodejs-installer/bin/local/npm install
10
11 echo "Downloading fonts librairies through bower..."
12 node_modules/bower/bin/bower install
13
14 echo "Concat, minify and installing assets..."
15 node_modules/grunt/bin/grunt
16else
17 composer install --no-interaction --no-progress --prefer-dist -o
18fi
diff --git a/install_dev.sh b/install_dev.sh
new file mode 100755
index 00000000..81f871da
--- /dev/null
+++ b/install_dev.sh
@@ -0,0 +1,16 @@
1#! /usr/bin/env bash
2
3echo "Installing PHP dependencies (including dev) through Composer..."
4composer install
5
6echo "Downloading javascript librairies through npm..."
7npm install
8
9echo "Downloading fonts librairies through bower..."
10bower install
11
12echo "Concat, minify and installing assets..."
13grunt
14
15echo "Installing wallabag..."
16php bin/console wallabag:install
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..39a10e9c
--- /dev/null
+++ b/package.json
@@ -0,0 +1,89 @@
1{
2 "name": "wallabag",
3 "version": "2.1.0",
4 "description": "wallabag is a self hostable application for saving web pages",
5 "main": "index.js",
6 "private": true,
7 "directories": {
8 "doc": "docs"
9 },
10 "dependencies": {
11 "annotator": "git://github.com/wallabag/annotator.git#0f076c7d371ed25eb0793346f46982d90f2c4c85",
12 "autoprefixer": "^6.3.6",
13 "bower": "^1.7.7",
14 "browserify": "^13.0.0",
15 "browserify-shim": "^3.8.12",
16 "cssnano": "^3.5.2",
17 "es6-promise": "^3.2.1",
18 "grunt": ">=0.4.0",
19 "grunt-browserify": "^5.0.0",
20 "grunt-cli": "^1.2.0",
21 "grunt-contrib-clean": "^1.0.0",
22 "grunt-contrib-concat": "^1.0.0",
23 "grunt-contrib-copy": "^1.0.0",
24 "grunt-contrib-symlink": "^1.0.0",
25 "grunt-contrib-uglify": "^1.0.0",
26 "grunt-postcss": "^0.8.0",
27 "hammerjs": "^2.0.6",
28 "jquery": "^2.2.1",
29 "jquery-ui": "^1.10.5",
30 "jquery.cookie": "^1.4.1",
31 "jquery.tinydot": "^0.2.1",
32 "load-grunt-tasks": "^3.4.1",
33 "materialize-css": "0.97.5",
34 "npm": "^3.8.3",
35 "pickadate": "^3.5.6",
36 "pixrem": "^3.0.0",
37 "postcss-cssnext": "^2.5.1",
38 "prismjs": "^1.4.1",
39 "through": "^2.3.8"
40 },
41 "engines": {
42 "node": ">0.12"
43 },
44 "browser": {
45 "jquery": "./node_modules/jquery/dist/jquery.js",
46 "jQuery": "./node_modules/jquery/dist/jquery.js",
47 "materialize": "./node_modules/materialize-css/bin/materialize.js"
48 },
49 "browserify-shim": {
50 "jquery": "$",
51 "jQuery": "jQuery",
52 "materialize": "materialize"
53 },
54 "browserify": {
55 "transform": [
56 "browserify-shim"
57 ]
58 },
59 "repository": {
60 "type": "git",
61 "url": "https://github.com/wallabag/wallabag"
62 },
63 "contributors": [
64 {
65 "name": "Nicolas Lœuillet",
66 "email": "nicolas@loeuillet.org",
67 "homepage": "http://www.cdetc.fr",
68 "role": "Developer"
69 },
70 {
71 "name": "Thomas Citharel",
72 "homepage": "http://tcit.fr",
73 "role": "Developer"
74 },
75 {
76 "name": "Jérémy Benoist",
77 "homepage": "http://www.j0k3r.net",
78 "role": "Developer"
79 }
80 ],
81 "license": "MIT",
82 "bugs": {
83 "url": "https://github.com/wallabag/wallabag/issues"
84 },
85 "devDependencies": {
86 "eslint": "^2.11.1",
87 "eslint-config-airbnb": "^9.0.1"
88 }
89}
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 38880908..3216b6ff 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -16,6 +16,7 @@
16 <php> 16 <php>
17 <ini name="error_reporting" value="-1" /> 17 <ini name="error_reporting" value="-1" />
18 <server name="KERNEL_DIR" value="app/" /> 18 <server name="KERNEL_DIR" value="app/" />
19 <env name="SYMFONY_DEPRECATIONS_HELPER" value="weak" />
19 </php> 20 </php>
20 21
21 <filter> 22 <filter>
diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php
index af24e498..dd17ef97 100644
--- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php
+++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php
@@ -7,7 +7,7 @@ use Hateoas\Configuration\Route;
7use Hateoas\Representation\Factory\PagerfantaFactory; 7use Hateoas\Representation\Factory\PagerfantaFactory;
8use Nelmio\ApiDocBundle\Annotation\ApiDoc; 8use Nelmio\ApiDocBundle\Annotation\ApiDoc;
9use Symfony\Component\HttpFoundation\Request; 9use Symfony\Component\HttpFoundation\Request;
10use Symfony\Component\HttpFoundation\Response; 10use Symfony\Component\HttpFoundation\JsonResponse;
11use Symfony\Component\Routing\Generator\UrlGeneratorInterface; 11use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
12use Symfony\Component\Security\Core\Exception\AccessDeniedException; 12use Symfony\Component\Security\Core\Exception\AccessDeniedException;
13use Wallabag\CoreBundle\Entity\Entry; 13use Wallabag\CoreBundle\Entity\Entry;
@@ -34,10 +34,11 @@ class WallabagRestController extends FOSRestController
34 * {"name"="page", "dataType"="integer", "required"=false, "format"="default '1'", "description"="what page you want."}, 34 * {"name"="page", "dataType"="integer", "required"=false, "format"="default '1'", "description"="what page you want."},
35 * {"name"="perPage", "dataType"="integer", "required"=false, "format"="default'30'", "description"="results per page."}, 35 * {"name"="perPage", "dataType"="integer", "required"=false, "format"="default'30'", "description"="results per page."},
36 * {"name"="tags", "dataType"="string", "required"=false, "format"="api,rest", "description"="a list of tags url encoded. Will returns entries that matches ALL tags."}, 36 * {"name"="tags", "dataType"="string", "required"=false, "format"="api,rest", "description"="a list of tags url encoded. Will returns entries that matches ALL tags."},
37 * {"name"="since", "dataType"="integer", "required"=false, "format"="default '0'", "description"="The timestamp since when you want entries updated."},
37 * } 38 * }
38 * ) 39 * )
39 * 40 *
40 * @return Response 41 * @return JsonResponse
41 */ 42 */
42 public function getEntriesAction(Request $request) 43 public function getEntriesAction(Request $request)
43 { 44 {
@@ -49,10 +50,12 @@ class WallabagRestController extends FOSRestController
49 $order = $request->query->get('order', 'desc'); 50 $order = $request->query->get('order', 'desc');
50 $page = (int) $request->query->get('page', 1); 51 $page = (int) $request->query->get('page', 1);
51 $perPage = (int) $request->query->get('perPage', 30); 52 $perPage = (int) $request->query->get('perPage', 30);
53 $since = $request->query->get('since', 0);
54 $tags = $request->query->get('tags', '');
52 55
53 $pager = $this->getDoctrine() 56 $pager = $this->getDoctrine()
54 ->getRepository('WallabagCoreBundle:Entry') 57 ->getRepository('WallabagCoreBundle:Entry')
55 ->findEntries($this->getUser()->getId(), $isArchived, $isStarred, $sort, $order); 58 ->findEntries($this->getUser()->getId(), $isArchived, $isStarred, $sort, $order, $since, $tags);
56 59
57 $pager->setCurrentPage($page); 60 $pager->setCurrentPage($page);
58 $pager->setMaxPerPage($perPage); 61 $pager->setMaxPerPage($perPage);
@@ -65,7 +68,7 @@ class WallabagRestController extends FOSRestController
65 68
66 $json = $this->get('serializer')->serialize($paginatedCollection, 'json'); 69 $json = $this->get('serializer')->serialize($paginatedCollection, 'json');
67 70
68 return $this->renderJsonResponse($json); 71 return (new JsonResponse())->setJson($json);
69 } 72 }
70 73
71 /** 74 /**
@@ -77,7 +80,7 @@ class WallabagRestController extends FOSRestController
77 * } 80 * }
78 * ) 81 * )
79 * 82 *
80 * @return Response 83 * @return JsonResponse
81 */ 84 */
82 public function getEntryAction(Entry $entry) 85 public function getEntryAction(Entry $entry)
83 { 86 {
@@ -86,7 +89,7 @@ class WallabagRestController extends FOSRestController
86 89
87 $json = $this->get('serializer')->serialize($entry, 'json'); 90 $json = $this->get('serializer')->serialize($entry, 'json');
88 91
89 return $this->renderJsonResponse($json); 92 return (new JsonResponse())->setJson($json);
90 } 93 }
91 94
92 /** 95 /**
@@ -102,7 +105,7 @@ class WallabagRestController extends FOSRestController
102 * } 105 * }
103 * ) 106 * )
104 * 107 *
105 * @return Response 108 * @return JsonResponse
106 */ 109 */
107 public function postEntriesAction(Request $request) 110 public function postEntriesAction(Request $request)
108 { 111 {
@@ -146,7 +149,7 @@ class WallabagRestController extends FOSRestController
146 149
147 $json = $this->get('serializer')->serialize($entry, 'json'); 150 $json = $this->get('serializer')->serialize($entry, 'json');
148 151
149 return $this->renderJsonResponse($json); 152 return (new JsonResponse())->setJson($json);
150 } 153 }
151 154
152 /** 155 /**
@@ -164,7 +167,7 @@ class WallabagRestController extends FOSRestController
164 * } 167 * }
165 * ) 168 * )
166 * 169 *
167 * @return Response 170 * @return JsonResponse
168 */ 171 */
169 public function patchEntriesAction(Entry $entry, Request $request) 172 public function patchEntriesAction(Entry $entry, Request $request)
170 { 173 {
@@ -197,7 +200,7 @@ class WallabagRestController extends FOSRestController
197 200
198 $json = $this->get('serializer')->serialize($entry, 'json'); 201 $json = $this->get('serializer')->serialize($entry, 'json');
199 202
200 return $this->renderJsonResponse($json); 203 return (new JsonResponse())->setJson($json);
201 } 204 }
202 205
203 /** 206 /**
@@ -209,7 +212,7 @@ class WallabagRestController extends FOSRestController
209 * } 212 * }
210 * ) 213 * )
211 * 214 *
212 * @return Response 215 * @return JsonResponse
213 */ 216 */
214 public function deleteEntriesAction(Entry $entry) 217 public function deleteEntriesAction(Entry $entry)
215 { 218 {
@@ -222,7 +225,7 @@ class WallabagRestController extends FOSRestController
222 225
223 $json = $this->get('serializer')->serialize($entry, 'json'); 226 $json = $this->get('serializer')->serialize($entry, 'json');
224 227
225 return $this->renderJsonResponse($json); 228 return (new JsonResponse())->setJson($json);
226 } 229 }
227 230
228 /** 231 /**
@@ -234,7 +237,7 @@ class WallabagRestController extends FOSRestController
234 * } 237 * }
235 * ) 238 * )
236 * 239 *
237 * @return Response 240 * @return JsonResponse
238 */ 241 */
239 public function getEntriesTagsAction(Entry $entry) 242 public function getEntriesTagsAction(Entry $entry)
240 { 243 {
@@ -243,7 +246,7 @@ class WallabagRestController extends FOSRestController
243 246
244 $json = $this->get('serializer')->serialize($entry->getTags(), 'json'); 247 $json = $this->get('serializer')->serialize($entry->getTags(), 'json');
245 248
246 return $this->renderJsonResponse($json); 249 return (new JsonResponse())->setJson($json);
247 } 250 }
248 251
249 /** 252 /**
@@ -258,7 +261,7 @@ class WallabagRestController extends FOSRestController
258 * } 261 * }
259 * ) 262 * )
260 * 263 *
261 * @return Response 264 * @return JsonResponse
262 */ 265 */
263 public function postEntriesTagsAction(Request $request, Entry $entry) 266 public function postEntriesTagsAction(Request $request, Entry $entry)
264 { 267 {
@@ -276,7 +279,7 @@ class WallabagRestController extends FOSRestController
276 279
277 $json = $this->get('serializer')->serialize($entry, 'json'); 280 $json = $this->get('serializer')->serialize($entry, 'json');
278 281
279 return $this->renderJsonResponse($json); 282 return (new JsonResponse())->setJson($json);
280 } 283 }
281 284
282 /** 285 /**
@@ -289,7 +292,7 @@ class WallabagRestController extends FOSRestController
289 * } 292 * }
290 * ) 293 * )
291 * 294 *
292 * @return Response 295 * @return JsonResponse
293 */ 296 */
294 public function deleteEntriesTagsAction(Entry $entry, Tag $tag) 297 public function deleteEntriesTagsAction(Entry $entry, Tag $tag)
295 { 298 {
@@ -303,7 +306,7 @@ class WallabagRestController extends FOSRestController
303 306
304 $json = $this->get('serializer')->serialize($entry, 'json'); 307 $json = $this->get('serializer')->serialize($entry, 'json');
305 308
306 return $this->renderJsonResponse($json); 309 return (new JsonResponse())->setJson($json);
307 } 310 }
308 311
309 /** 312 /**
@@ -311,7 +314,7 @@ class WallabagRestController extends FOSRestController
311 * 314 *
312 * @ApiDoc() 315 * @ApiDoc()
313 * 316 *
314 * @return Response 317 * @return JsonResponse
315 */ 318 */
316 public function getTagsAction() 319 public function getTagsAction()
317 { 320 {
@@ -319,11 +322,82 @@ class WallabagRestController extends FOSRestController
319 322
320 $tags = $this->getDoctrine() 323 $tags = $this->getDoctrine()
321 ->getRepository('WallabagCoreBundle:Tag') 324 ->getRepository('WallabagCoreBundle:Tag')
322 ->findAllTags($this->getUser()->getId()); 325 ->findAllTagsWithEntries($this->getUser()->getId());
323 326
324 $json = $this->get('serializer')->serialize($tags, 'json'); 327 $json = $this->get('serializer')->serialize($tags, 'json');
325 328
326 return $this->renderJsonResponse($json); 329 return (new JsonResponse())->setJson($json);
330 }
331
332 /**
333 * Permanently remove one tag from **every** entry.
334 *
335 * @ApiDoc(
336 * requirements={
337 * {"name"="tag", "dataType"="string", "required"=true, "requirement"="\w+", "description"="Tag as a string"}
338 * }
339 * )
340 *
341 * @return JsonResponse
342 */
343 public function deleteTagLabelAction(Request $request)
344 {
345 $this->validateAuthentication();
346 $label = $request->request->get('tag', '');
347
348 $tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label);
349
350 if (empty($tag)) {
351 throw $this->createNotFoundException('Tag not found');
352 }
353
354 $this->getDoctrine()
355 ->getRepository('WallabagCoreBundle:Entry')
356 ->removeTag($this->getUser()->getId(), $tag);
357
358 $json = $this->get('serializer')->serialize($tag, 'json');
359
360 return (new JsonResponse())->setJson($json);
361 }
362
363 /**
364 * Permanently remove some tags from **every** entry.
365 *
366 * @ApiDoc(
367 * requirements={
368 * {"name"="tags", "dataType"="string", "required"=true, "format"="tag1,tag2", "description"="Tags as strings (comma splitted)"}
369 * }
370 * )
371 *
372 * @return JsonResponse
373 */
374 public function deleteTagsLabelAction(Request $request)
375 {
376 $this->validateAuthentication();
377
378 $tagsLabels = $request->request->get('tags', '');
379
380 $tags = [];
381
382 foreach (explode(',', $tagsLabels) as $tagLabel) {
383 $tagEntity = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel);
384
385 if (!empty($tagEntity)) {
386 $tags[] = $tagEntity;
387 }
388 }
389
390 if (empty($tags)) {
391 throw $this->createNotFoundException('Tags not found');
392 }
393
394 $this->getDoctrine()
395 ->getRepository('WallabagCoreBundle:Entry')
396 ->removeTags($this->getUser()->getId(), $tags);
397
398 $json = $this->get('serializer')->serialize($tags, 'json');
399
400 return (new JsonResponse())->setJson($json);
327 } 401 }
328 402
329 /** 403 /**
@@ -335,7 +409,7 @@ class WallabagRestController extends FOSRestController
335 * } 409 * }
336 * ) 410 * )
337 * 411 *
338 * @return Response 412 * @return JsonResponse
339 */ 413 */
340 public function deleteTagAction(Tag $tag) 414 public function deleteTagAction(Tag $tag)
341 { 415 {
@@ -347,14 +421,15 @@ class WallabagRestController extends FOSRestController
347 421
348 $json = $this->get('serializer')->serialize($tag, 'json'); 422 $json = $this->get('serializer')->serialize($tag, 'json');
349 423
350 return $this->renderJsonResponse($json); 424 return (new JsonResponse())->setJson($json);
351 } 425 }
426
352 /** 427 /**
353 * Retrieve version number. 428 * Retrieve version number.
354 * 429 *
355 * @ApiDoc() 430 * @ApiDoc()
356 * 431 *
357 * @return Response 432 * @return JsonResponse
358 */ 433 */
359 public function getVersionAction() 434 public function getVersionAction()
360 { 435 {
@@ -362,7 +437,7 @@ class WallabagRestController extends FOSRestController
362 437
363 $json = $this->get('serializer')->serialize($version, 'json'); 438 $json = $this->get('serializer')->serialize($version, 'json');
364 439
365 return $this->renderJsonResponse($json); 440 return (new JsonResponse())->setJson($json);
366 } 441 }
367 442
368 /** 443 /**
@@ -378,17 +453,4 @@ class WallabagRestController extends FOSRestController
378 throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$requestUserId.', logged user id: '.$user->getId()); 453 throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$requestUserId.', logged user id: '.$user->getId());
379 } 454 }
380 } 455 }
381
382 /**
383 * Send a JSON Response.
384 * We don't use the Symfony JsonRespone, because it takes an array as parameter instead of a JSON string.
385 *
386 * @param string $json
387 *
388 * @return Response
389 */
390 private function renderJsonResponse($json)
391 {
392 return new Response($json, 200, ['application/json']);
393 }
394} 456}
diff --git a/src/Wallabag/ApiBundle/Entity/Client.php b/src/Wallabag/ApiBundle/Entity/Client.php
index c04ed0f6..3e2f491c 100644
--- a/src/Wallabag/ApiBundle/Entity/Client.php
+++ b/src/Wallabag/ApiBundle/Entity/Client.php
@@ -18,8 +18,39 @@ class Client extends BaseClient
18 */ 18 */
19 protected $id; 19 protected $id;
20 20
21 /**
22 * @var string
23 *
24 * @ORM\Column(name="name", type="text", nullable=true)
25 */
26 protected $name;
27
21 public function __construct() 28 public function __construct()
22 { 29 {
23 parent::__construct(); 30 parent::__construct();
24 } 31 }
32
33 /**
34 * Get name.
35 *
36 * @return string
37 */
38 public function getName()
39 {
40 return $this->name;
41 }
42
43 /**
44 * Set name.
45 *
46 * @param string $name
47 *
48 * @return Client
49 */
50 public function setName($name)
51 {
52 $this->name = $name;
53
54 return $this;
55 }
25} 56}
diff --git a/src/Wallabag/CoreBundle/Command/InstallCommand.php b/src/Wallabag/CoreBundle/Command/InstallCommand.php
index 035eb865..3873d2d3 100644
--- a/src/Wallabag/CoreBundle/Command/InstallCommand.php
+++ b/src/Wallabag/CoreBundle/Command/InstallCommand.php
@@ -61,7 +61,6 @@ class InstallCommand extends ContainerAwareCommand
61 ->setupDatabase() 61 ->setupDatabase()
62 ->setupAdmin() 62 ->setupAdmin()
63 ->setupConfig() 63 ->setupConfig()
64 ->setupAsset()
65 ; 64 ;
66 65
67 $output->writeln('<info>Wallabag has been successfully installed.</info>'); 66 $output->writeln('<info>Wallabag has been successfully installed.</info>');
@@ -70,7 +69,7 @@ class InstallCommand extends ContainerAwareCommand
70 69
71 protected function checkRequirements() 70 protected function checkRequirements()
72 { 71 {
73 $this->defaultOutput->writeln('<info><comment>Step 1 of 5.</comment> Checking system requirements.</info>'); 72 $this->defaultOutput->writeln('<info><comment>Step 1 of 4.</comment> Checking system requirements.</info>');
74 73
75 $rows = []; 74 $rows = [];
76 75
@@ -138,7 +137,7 @@ class InstallCommand extends ContainerAwareCommand
138 137
139 protected function setupDatabase() 138 protected function setupDatabase()
140 { 139 {
141 $this->defaultOutput->writeln('<info><comment>Step 2 of 5.</comment> Setting up database.</info>'); 140 $this->defaultOutput->writeln('<info><comment>Step 2 of 4.</comment> Setting up database.</info>');
142 141
143 // user want to reset everything? Don't care about what is already here 142 // user want to reset everything? Don't care about what is already here
144 if (true === $this->defaultInput->getOption('reset')) { 143 if (true === $this->defaultInput->getOption('reset')) {
@@ -209,7 +208,7 @@ class InstallCommand extends ContainerAwareCommand
209 208
210 protected function setupAdmin() 209 protected function setupAdmin()
211 { 210 {
212 $this->defaultOutput->writeln('<info><comment>Step 3 of 5.</comment> Administration setup.</info>'); 211 $this->defaultOutput->writeln('<info><comment>Step 3 of 4.</comment> Administration setup.</info>');
213 212
214 $questionHelper = $this->getHelperSet()->get('question'); 213 $questionHelper = $this->getHelperSet()->get('question');
215 $question = new ConfirmationQuestion('Would you like to create a new admin user (recommended) ? (Y/n)', true); 214 $question = new ConfirmationQuestion('Would you like to create a new admin user (recommended) ? (Y/n)', true);
@@ -253,7 +252,7 @@ class InstallCommand extends ContainerAwareCommand
253 252
254 protected function setupConfig() 253 protected function setupConfig()
255 { 254 {
256 $this->defaultOutput->writeln('<info><comment>Step 4 of 5.</comment> Config setup.</info>'); 255 $this->defaultOutput->writeln('<info><comment>Step 4 of 4.</comment> Config setup.</info>');
257 $em = $this->getContainer()->get('doctrine.orm.entity_manager'); 256 $em = $this->getContainer()->get('doctrine.orm.entity_manager');
258 257
259 // cleanup before insert new stuff 258 // cleanup before insert new stuff
@@ -261,6 +260,11 @@ class InstallCommand extends ContainerAwareCommand
261 260
262 $settings = [ 261 $settings = [
263 [ 262 [
263 'name' => 'share_public',
264 'value' => '1',
265 'section' => 'entry',
266 ],
267 [
264 'name' => 'carrot', 268 'name' => 'carrot',
265 'value' => '1', 269 'value' => '1',
266 'section' => 'entry', 270 'section' => 'entry',
@@ -331,8 +335,13 @@ class InstallCommand extends ContainerAwareCommand
331 'section' => 'export', 335 'section' => 'export',
332 ], 336 ],
333 [ 337 [
334 'name' => 'pocket_consumer_key', 338 'name' => 'import_with_redis',
335 'value' => null, 339 'value' => '0',
340 'section' => 'import',
341 ],
342 [
343 'name' => 'import_with_rabbitmq',
344 'value' => '0',
336 'section' => 'import', 345 'section' => 'import',
337 ], 346 ],
338 [ 347 [
@@ -392,20 +401,6 @@ class InstallCommand extends ContainerAwareCommand
392 return $this; 401 return $this;
393 } 402 }
394 403
395 protected function setupAsset()
396 {
397 $this->defaultOutput->writeln('<info><comment>Step 5 of 5.</comment> Installing assets.</info>');
398
399 $this
400 ->runCommand('assets:install')
401 ->runCommand('assetic:dump')
402 ;
403
404 $this->defaultOutput->writeln('');
405
406 return $this;
407 }
408
409 /** 404 /**
410 * Run a command. 405 * Run a command.
411 * 406 *
diff --git a/src/Wallabag/CoreBundle/Controller/DeveloperController.php b/src/Wallabag/CoreBundle/Controller/DeveloperController.php
index d85ba5ee..f3492b74 100644
--- a/src/Wallabag/CoreBundle/Controller/DeveloperController.php
+++ b/src/Wallabag/CoreBundle/Controller/DeveloperController.php
@@ -21,7 +21,7 @@ class DeveloperController extends Controller
21 { 21 {
22 $clients = $this->getDoctrine()->getRepository('WallabagApiBundle:Client')->findAll(); 22 $clients = $this->getDoctrine()->getRepository('WallabagApiBundle:Client')->findAll();
23 23
24 return $this->render('WallabagCoreBundle:Developer:index.html.twig', [ 24 return $this->render('@WallabagCore/themes/common/Developer/index.html.twig', [
25 'clients' => $clients, 25 'clients' => $clients,
26 ]); 26 ]);
27 } 27 }
@@ -49,16 +49,17 @@ class DeveloperController extends Controller
49 49
50 $this->get('session')->getFlashBag()->add( 50 $this->get('session')->getFlashBag()->add(
51 'notice', 51 'notice',
52 'flashes.developer.notice.client_created' 52 $this->get('translator')->trans('flashes.developer.notice.client_created', ['%name%' => $client->getName()])
53 ); 53 );
54 54
55 return $this->render('WallabagCoreBundle:Developer:client_parameters.html.twig', [ 55 return $this->render('@WallabagCore/themes/common/Developer/client_parameters.html.twig', [
56 'client_id' => $client->getPublicId(), 56 'client_id' => $client->getPublicId(),
57 'client_secret' => $client->getSecret(), 57 'client_secret' => $client->getSecret(),
58 'client_name' => $client->getName(),
58 ]); 59 ]);
59 } 60 }
60 61
61 return $this->render('WallabagCoreBundle:Developer:client.html.twig', [ 62 return $this->render('@WallabagCore/themes/common/Developer/client.html.twig', [
62 'form' => $clientForm->createView(), 63 'form' => $clientForm->createView(),
63 ]); 64 ]);
64 } 65 }
@@ -80,7 +81,7 @@ class DeveloperController extends Controller
80 81
81 $this->get('session')->getFlashBag()->add( 82 $this->get('session')->getFlashBag()->add(
82 'notice', 83 'notice',
83 'flashes.developer.notice.client_deleted' 84 $this->get('translator')->trans('flashes.developer.notice.client_deleted', ['%name%' => $client->getName()])
84 ); 85 );
85 86
86 return $this->redirect($this->generateUrl('developer')); 87 return $this->redirect($this->generateUrl('developer'));
@@ -95,6 +96,6 @@ class DeveloperController extends Controller
95 */ 96 */
96 public function howtoFirstAppAction() 97 public function howtoFirstAppAction()
97 { 98 {
98 return $this->render('WallabagCoreBundle:Developer:howto_app.html.twig'); 99 return $this->render('@WallabagCore/themes/common/Developer/howto_app.html.twig');
99 } 100 }
100} 101}
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php
index ccdf9406..3b28e635 100644
--- a/src/Wallabag/CoreBundle/Controller/EntryController.php
+++ b/src/Wallabag/CoreBundle/Controller/EntryController.php
@@ -4,7 +4,6 @@ namespace Wallabag\CoreBundle\Controller;
4 4
5use Pagerfanta\Adapter\DoctrineORMAdapter; 5use Pagerfanta\Adapter\DoctrineORMAdapter;
6use Pagerfanta\Exception\OutOfRangeCurrentPageException; 6use Pagerfanta\Exception\OutOfRangeCurrentPageException;
7use Pagerfanta\Pagerfanta;
8use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 7use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
9use Symfony\Bundle\FrameworkBundle\Controller\Controller; 8use Symfony\Bundle\FrameworkBundle\Controller\Controller;
10use Symfony\Component\HttpFoundation\Request; 9use Symfony\Component\HttpFoundation\Request;
@@ -13,30 +12,40 @@ use Wallabag\CoreBundle\Entity\Entry;
13use Wallabag\CoreBundle\Form\Type\EntryFilterType; 12use Wallabag\CoreBundle\Form\Type\EntryFilterType;
14use Wallabag\CoreBundle\Form\Type\EditEntryType; 13use Wallabag\CoreBundle\Form\Type\EditEntryType;
15use Wallabag\CoreBundle\Form\Type\NewEntryType; 14use Wallabag\CoreBundle\Form\Type\NewEntryType;
15use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
16 16
17class EntryController extends Controller 17class EntryController extends Controller
18{ 18{
19 /** 19 /**
20 * @param Entry $entry 20 * Fetch content and update entry.
21 * In case it fails, entry will return to avod loosing the data.
22 *
23 * @param Entry $entry
24 * @param string $prefixMessage Should be the translation key: entry_saved or entry_reloaded
25 *
26 * @return Entry
21 */ 27 */
22 private function updateEntry(Entry $entry) 28 private function updateEntry(Entry $entry, $prefixMessage = 'entry_saved')
23 { 29 {
30 // put default title in case of fetching content failed
31 $entry->setTitle('No title found');
32
33 $message = 'flashes.entry.notice.'.$prefixMessage;
34
24 try { 35 try {
25 $entry = $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl()); 36 $entry = $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl());
26
27 $em = $this->getDoctrine()->getManager();
28 $em->persist($entry);
29 $em->flush();
30 } catch (\Exception $e) { 37 } catch (\Exception $e) {
31 $this->get('logger')->error('Error while saving an entry', [ 38 $this->get('logger')->error('Error while saving an entry', [
32 'exception' => $e, 39 'exception' => $e,
33 'entry' => $entry, 40 'entry' => $entry,
34 ]); 41 ]);
35 42
36 return false; 43 $message = 'flashes.entry.notice.'.$prefixMessage.'_failed';
37 } 44 }
38 45
39 return true; 46 $this->get('session')->getFlashBag()->add('notice', $message);
47
48 return $entry;
40 } 49 }
41 50
42 /** 51 /**
@@ -66,12 +75,11 @@ class EntryController extends Controller
66 return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()])); 75 return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()]));
67 } 76 }
68 77
69 $message = 'flashes.entry.notice.entry_saved'; 78 $this->updateEntry($entry);
70 if (false === $this->updateEntry($entry)) {
71 $message = 'flashes.entry.notice.entry_saved_failed';
72 }
73 79
74 $this->get('session')->getFlashBag()->add('notice', $message); 80 $em = $this->getDoctrine()->getManager();
81 $em->persist($entry);
82 $em->flush();
75 83
76 return $this->redirect($this->generateUrl('homepage')); 84 return $this->redirect($this->generateUrl('homepage'));
77 } 85 }
@@ -95,6 +103,10 @@ class EntryController extends Controller
95 103
96 if (false === $this->checkIfEntryAlreadyExists($entry)) { 104 if (false === $this->checkIfEntryAlreadyExists($entry)) {
97 $this->updateEntry($entry); 105 $this->updateEntry($entry);
106
107 $em = $this->getDoctrine()->getManager();
108 $em->persist($entry);
109 $em->flush();
98 } 110 }
99 111
100 return $this->redirect($this->generateUrl('homepage')); 112 return $this->redirect($this->generateUrl('homepage'));
@@ -226,6 +238,10 @@ class EntryController extends Controller
226 $repository = $this->get('wallabag_core.entry_repository'); 238 $repository = $this->get('wallabag_core.entry_repository');
227 239
228 switch ($type) { 240 switch ($type) {
241 case 'untagged':
242 $qb = $repository->getBuilderForUntaggedByUser($this->getUser()->getId());
243
244 break;
229 case 'starred': 245 case 'starred':
230 $qb = $repository->getBuilderForStarredByUser($this->getUser()->getId()); 246 $qb = $repository->getBuilderForStarredByUser($this->getUser()->getId());
231 break; 247 break;
@@ -257,9 +273,10 @@ class EntryController extends Controller
257 } 273 }
258 274
259 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery()); 275 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
260 $entries = new Pagerfanta($pagerAdapter);
261 276
262 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage()); 277 $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')
278 ->prepare($pagerAdapter, $page);
279
263 try { 280 try {
264 $entries->setCurrentPage($page); 281 $entries->setCurrentPage($page);
265 } catch (OutOfRangeCurrentPageException $e) { 282 } catch (OutOfRangeCurrentPageException $e) {
@@ -311,15 +328,11 @@ class EntryController extends Controller
311 { 328 {
312 $this->checkUserAction($entry); 329 $this->checkUserAction($entry);
313 330
314 $message = 'flashes.entry.notice.entry_reloaded'; 331 $this->updateEntry($entry, 'entry_reloaded');
315 if (false === $this->updateEntry($entry)) {
316 $message = 'flashes.entry.notice.entry_reload_failed';
317 }
318 332
319 $this->get('session')->getFlashBag()->add( 333 $em = $this->getDoctrine()->getManager();
320 'notice', 334 $em->persist($entry);
321 $message 335 $em->flush();
322 );
323 336
324 return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()])); 337 return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
325 } 338 }
@@ -434,7 +447,7 @@ class EntryController extends Controller
434 */ 447 */
435 private function checkUserAction(Entry $entry) 448 private function checkUserAction(Entry $entry)
436 { 449 {
437 if ($this->getUser()->getId() != $entry->getUser()->getId()) { 450 if (null === $this->getUser() || $this->getUser()->getId() != $entry->getUser()->getId()) {
438 throw $this->createAccessDeniedException('You can not access this entry.'); 451 throw $this->createAccessDeniedException('You can not access this entry.');
439 } 452 }
440 } 453 }
@@ -450,4 +463,91 @@ class EntryController extends Controller
450 { 463 {
451 return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId()); 464 return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
452 } 465 }
466
467 /**
468 * Get public URL for entry (and generate it if necessary).
469 *
470 * @param Entry $entry
471 *
472 * @Route("/share/{id}", requirements={"id" = "\d+"}, name="share")
473 *
474 * @return \Symfony\Component\HttpFoundation\Response
475 */
476 public function shareAction(Entry $entry)
477 {
478 $this->checkUserAction($entry);
479
480 if (null === $entry->getUuid()) {
481 $entry->generateUuid();
482
483 $em = $this->getDoctrine()->getManager();
484 $em->persist($entry);
485 $em->flush();
486 }
487
488 return $this->redirect($this->generateUrl('share_entry', [
489 'uuid' => $entry->getUuid(),
490 ]));
491 }
492
493 /**
494 * Disable public sharing for an entry.
495 *
496 * @param Entry $entry
497 *
498 * @Route("/share/delete/{id}", requirements={"id" = "\d+"}, name="delete_share")
499 *
500 * @return \Symfony\Component\HttpFoundation\Response
501 */
502 public function deleteShareAction(Entry $entry)
503 {
504 $this->checkUserAction($entry);
505
506 $entry->cleanUuid();
507
508 $em = $this->getDoctrine()->getManager();
509 $em->persist($entry);
510 $em->flush();
511
512 return $this->redirect($this->generateUrl('view', [
513 'id' => $entry->getId(),
514 ]));
515 }
516
517 /**
518 * Ability to view a content publicly.
519 *
520 * @param Entry $entry
521 *
522 * @Route("/share/{uuid}", requirements={"uuid" = ".+"}, name="share_entry")
523 * @Cache(maxage="25200", smaxage="25200", public=true)
524 *
525 * @return \Symfony\Component\HttpFoundation\Response
526 */
527 public function shareEntryAction(Entry $entry)
528 {
529 if (!$this->get('craue_config')->get('share_public')) {
530 throw $this->createAccessDeniedException('Sharing an entry is disabled for this user.');
531 }
532
533 return $this->render(
534 '@WallabagCore/themes/common/Entry/share.html.twig',
535 ['entry' => $entry]
536 );
537 }
538
539 /**
540 * Shows untagged articles for current user.
541 *
542 * @param Request $request
543 * @param int $page
544 *
545 * @Route("/untagged/list/{page}", name="untagged", defaults={"page" = "1"})
546 *
547 * @return \Symfony\Component\HttpFoundation\Response
548 */
549 public function showUntaggedEntriesAction(Request $request, $page)
550 {
551 return $this->showEntries('untagged', $request, $page);
552 }
453} 553}
diff --git a/src/Wallabag/CoreBundle/Controller/ExportController.php b/src/Wallabag/CoreBundle/Controller/ExportController.php
index 944c755d..6191d5d7 100644
--- a/src/Wallabag/CoreBundle/Controller/ExportController.php
+++ b/src/Wallabag/CoreBundle/Controller/ExportController.php
@@ -46,7 +46,7 @@ class ExportController extends Controller
46 * 46 *
47 * @Route("/export/{category}.{format}", name="export_entries", requirements={ 47 * @Route("/export/{category}.{format}", name="export_entries", requirements={
48 * "format": "epub|mobi|pdf|json|xml|txt|csv", 48 * "format": "epub|mobi|pdf|json|xml|txt|csv",
49 * "category": "all|unread|starred|archive" 49 * "category": "all|unread|starred|archive|tag_entries|untagged"
50 * }) 50 * })
51 * 51 *
52 * @return \Symfony\Component\HttpFoundation\Response 52 * @return \Symfony\Component\HttpFoundation\Response
diff --git a/src/Wallabag/CoreBundle/Controller/FooterController.php b/src/Wallabag/CoreBundle/Controller/FooterController.php
deleted file mode 100644
index fd93c436..00000000
--- a/src/Wallabag/CoreBundle/Controller/FooterController.php
+++ /dev/null
@@ -1,27 +0,0 @@
1<?php
2
3namespace Wallabag\CoreBundle\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6
7class FooterController extends Controller
8{
9 /**
10 * Display the footer.
11 *
12 * @return \Symfony\Component\HttpFoundation\Response
13 */
14 public function indexAction()
15 {
16 $addonsUrl = $this->container->getParameter('addons_url');
17 $socialsUrl = $this->container->getParameter('socials_url');
18
19 return $this->render(
20 'WallabagCoreBundle::footer.html.twig',
21 [
22 'addonsUrl' => $addonsUrl,
23 'socialsUrl' => $socialsUrl,
24 ]
25 );
26 }
27}
diff --git a/src/Wallabag/CoreBundle/Controller/RssController.php b/src/Wallabag/CoreBundle/Controller/RssController.php
index 2118885c..38e3b5a0 100644
--- a/src/Wallabag/CoreBundle/Controller/RssController.php
+++ b/src/Wallabag/CoreBundle/Controller/RssController.php
@@ -87,7 +87,7 @@ class RssController extends Controller
87 $perPage = $user->getConfig()->getRssLimit() ?: $this->getParameter('wallabag_core.rss_limit'); 87 $perPage = $user->getConfig()->getRssLimit() ?: $this->getParameter('wallabag_core.rss_limit');
88 $entries->setMaxPerPage($perPage); 88 $entries->setMaxPerPage($perPage);
89 89
90 return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', [ 90 return $this->render('@WallabagCore/themes/common/Entry/entries.xml.twig', [
91 'type' => $type, 91 'type' => $type,
92 'entries' => $entries, 92 'entries' => $entries,
93 ]); 93 ]);
diff --git a/src/Wallabag/CoreBundle/Controller/StaticController.php b/src/Wallabag/CoreBundle/Controller/StaticController.php
index 2a57f06f..82714217 100644
--- a/src/Wallabag/CoreBundle/Controller/StaticController.php
+++ b/src/Wallabag/CoreBundle/Controller/StaticController.php
@@ -15,7 +15,7 @@ class StaticController extends Controller
15 $addonsUrl = $this->container->getParameter('addons_url'); 15 $addonsUrl = $this->container->getParameter('addons_url');
16 16
17 return $this->render( 17 return $this->render(
18 'WallabagCoreBundle:Static:howto.html.twig', 18 '@WallabagCore/themes/common/Static/howto.html.twig',
19 ['addonsUrl' => $addonsUrl] 19 ['addonsUrl' => $addonsUrl]
20 ); 20 );
21 } 21 }
@@ -26,7 +26,7 @@ class StaticController extends Controller
26 public function aboutAction() 26 public function aboutAction()
27 { 27 {
28 return $this->render( 28 return $this->render(
29 'WallabagCoreBundle:Static:about.html.twig', 29 '@WallabagCore/themes/common/Static/about.html.twig',
30 [ 30 [
31 'version' => $this->getParameter('wallabag_core.version'), 31 'version' => $this->getParameter('wallabag_core.version'),
32 'paypal_url' => $this->getParameter('wallabag_core.paypal_url'), 32 'paypal_url' => $this->getParameter('wallabag_core.paypal_url'),
@@ -40,7 +40,7 @@ class StaticController extends Controller
40 public function quickstartAction() 40 public function quickstartAction()
41 { 41 {
42 return $this->render( 42 return $this->render(
43 'WallabagCoreBundle:Static:quickstart.html.twig', 43 '@WallabagCore/themes/common/Static/quickstart.html.twig',
44 [] 44 []
45 ); 45 );
46 } 46 }
diff --git a/src/Wallabag/CoreBundle/Controller/TagController.php b/src/Wallabag/CoreBundle/Controller/TagController.php
index 8645fb44..623a6146 100644
--- a/src/Wallabag/CoreBundle/Controller/TagController.php
+++ b/src/Wallabag/CoreBundle/Controller/TagController.php
@@ -2,12 +2,15 @@
2 2
3namespace Wallabag\CoreBundle\Controller; 3namespace Wallabag\CoreBundle\Controller;
4 4
5use Pagerfanta\Adapter\ArrayAdapter;
6use Pagerfanta\Exception\OutOfRangeCurrentPageException;
5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 7use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6use Symfony\Bundle\FrameworkBundle\Controller\Controller; 8use Symfony\Bundle\FrameworkBundle\Controller\Controller;
7use Symfony\Component\HttpFoundation\Request; 9use Symfony\Component\HttpFoundation\Request;
8use Wallabag\CoreBundle\Entity\Entry; 10use Wallabag\CoreBundle\Entity\Entry;
9use Wallabag\CoreBundle\Entity\Tag; 11use Wallabag\CoreBundle\Entity\Tag;
10use Wallabag\CoreBundle\Form\Type\NewTagType; 12use Wallabag\CoreBundle\Form\Type\NewTagType;
13use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
11 14
12class TagController extends Controller 15class TagController extends Controller
13{ 16{
@@ -81,13 +84,48 @@ class TagController extends Controller
81 { 84 {
82 $tags = $this->getDoctrine() 85 $tags = $this->getDoctrine()
83 ->getRepository('WallabagCoreBundle:Tag') 86 ->getRepository('WallabagCoreBundle:Tag')
84 ->findAllTags($this->getUser()->getId()); 87 ->findAllTagsWithEntries($this->getUser()->getId());
85 88
86 return $this->render( 89 return $this->render('WallabagCoreBundle:Tag:tags.html.twig', [
87 'WallabagCoreBundle:Tag:tags.html.twig', 90 'tags' => $tags,
88 [ 91 ]);
89 'tags' => $tags, 92 }
90 ] 93
91 ); 94 /**
95 * @param Tag $tag
96 * @param int $page
97 *
98 * @Route("/tag/list/{slug}/{page}", name="tag_entries", defaults={"page" = "1"})
99 * @ParamConverter("tag", options={"mapping": {"slug": "slug"}})
100 *
101 * @return \Symfony\Component\HttpFoundation\Response
102 */
103 public function showEntriesForTagAction(Tag $tag, $page, Request $request)
104 {
105 $entriesByTag = $this->getDoctrine()
106 ->getRepository('WallabagCoreBundle:Entry')
107 ->findAllByTagId($this->getUser()->getId(), $tag->getId());
108
109 $pagerAdapter = new ArrayAdapter($entriesByTag);
110
111 $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')
112 ->prepare($pagerAdapter, $page);
113
114 try {
115 $entries->setCurrentPage($page);
116 } catch (OutOfRangeCurrentPageException $e) {
117 if ($page > 1) {
118 return $this->redirect($this->generateUrl($request->get('_route'), [
119 'slug' => $tag->getSlug(),
120 'page' => $entries->getNbPages(),
121 ]), 302);
122 }
123 }
124
125 return $this->render('WallabagCoreBundle:Entry:entries.html.twig', [
126 'form' => null,
127 'entries' => $entries,
128 'currentPage' => $page,
129 ]);
92 } 130 }
93} 131}
diff --git a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadConfigData.php b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadConfigData.php
index 03be9667..921c739f 100644
--- a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadConfigData.php
+++ b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadConfigData.php
@@ -20,6 +20,7 @@ class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface
20 $adminConfig->setItemsPerPage(30); 20 $adminConfig->setItemsPerPage(30);
21 $adminConfig->setReadingSpeed(1); 21 $adminConfig->setReadingSpeed(1);
22 $adminConfig->setLanguage('en'); 22 $adminConfig->setLanguage('en');
23 $adminConfig->setPocketConsumerKey('xxxxx');
23 24
24 $manager->persist($adminConfig); 25 $manager->persist($adminConfig);
25 26
@@ -30,6 +31,7 @@ class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface
30 $bobConfig->setItemsPerPage(10); 31 $bobConfig->setItemsPerPage(10);
31 $bobConfig->setReadingSpeed(1); 32 $bobConfig->setReadingSpeed(1);
32 $bobConfig->setLanguage('fr'); 33 $bobConfig->setLanguage('fr');
34 $bobConfig->setPocketConsumerKey(null);
33 35
34 $manager->persist($bobConfig); 36 $manager->persist($bobConfig);
35 37
@@ -40,6 +42,7 @@ class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface
40 $emptyConfig->setItemsPerPage(10); 42 $emptyConfig->setItemsPerPage(10);
41 $emptyConfig->setReadingSpeed(1); 43 $emptyConfig->setReadingSpeed(1);
42 $emptyConfig->setLanguage('en'); 44 $emptyConfig->setLanguage('en');
45 $emptyConfig->setPocketConsumerKey(null);
43 46
44 $manager->persist($emptyConfig); 47 $manager->persist($emptyConfig);
45 48
diff --git a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadSettingData.php b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadSettingData.php
index 09058796..9425f961 100644
--- a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadSettingData.php
+++ b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadSettingData.php
@@ -16,6 +16,11 @@ class LoadSettingData extends AbstractFixture implements OrderedFixtureInterface
16 { 16 {
17 $settings = [ 17 $settings = [
18 [ 18 [
19 'name' => 'share_public',
20 'value' => '1',
21 'section' => 'entry',
22 ],
23 [
19 'name' => 'carrot', 24 'name' => 'carrot',
20 'value' => '1', 25 'value' => '1',
21 'section' => 'entry', 26 'section' => 'entry',
@@ -86,8 +91,13 @@ class LoadSettingData extends AbstractFixture implements OrderedFixtureInterface
86 'section' => 'export', 91 'section' => 'export',
87 ], 92 ],
88 [ 93 [
89 'name' => 'pocket_consumer_key', 94 'name' => 'import_with_redis',
90 'value' => null, 95 'value' => '0',
96 'section' => 'import',
97 ],
98 [
99 'name' => 'import_with_rabbitmq',
100 'value' => '0',
91 'section' => 'import', 101 'section' => 'import',
92 ], 102 ],
93 [ 103 [
diff --git a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTagData.php b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTagData.php
index 8553dced..09e99f36 100644
--- a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTagData.php
+++ b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTagData.php
@@ -28,6 +28,13 @@ class LoadTagData extends AbstractFixture implements OrderedFixtureInterface
28 28
29 $this->addReference('bar-tag', $tag2); 29 $this->addReference('bar-tag', $tag2);
30 30
31 $tag3 = new Tag();
32 $tag3->setLabel('baz');
33
34 $manager->persist($tag3);
35
36 $this->addReference('baz-tag', $tag3);
37
31 $manager->flush(); 38 $manager->flush();
32 } 39 }
33 40
diff --git a/src/Wallabag/CoreBundle/DependencyInjection/Configuration.php b/src/Wallabag/CoreBundle/DependencyInjection/Configuration.php
index d1bb9820..d8141eea 100644
--- a/src/Wallabag/CoreBundle/DependencyInjection/Configuration.php
+++ b/src/Wallabag/CoreBundle/DependencyInjection/Configuration.php
@@ -36,6 +36,9 @@ class Configuration implements ConfigurationInterface
36 ->end() 36 ->end()
37 ->scalarNode('paypal_url') 37 ->scalarNode('paypal_url')
38 ->end() 38 ->end()
39 ->integerNode('cache_lifetime')
40 ->defaultValue(10)
41 ->end()
39 ->end() 42 ->end()
40 ; 43 ;
41 44
diff --git a/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php b/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php
index 7d08b73b..0cbde908 100644
--- a/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php
+++ b/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php
@@ -22,6 +22,7 @@ class WallabagCoreExtension extends Extension
22 $container->setParameter('wallabag_core.reading_speed', $config['reading_speed']); 22 $container->setParameter('wallabag_core.reading_speed', $config['reading_speed']);
23 $container->setParameter('wallabag_core.version', $config['version']); 23 $container->setParameter('wallabag_core.version', $config['version']);
24 $container->setParameter('wallabag_core.paypal_url', $config['paypal_url']); 24 $container->setParameter('wallabag_core.paypal_url', $config['paypal_url']);
25 $container->setParameter('wallabag_core.cache_lifetime', $config['cache_lifetime']);
25 26
26 $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 27 $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
27 $loader->load('services.yml'); 28 $loader->load('services.yml');
diff --git a/src/Wallabag/CoreBundle/Entity/Config.php b/src/Wallabag/CoreBundle/Entity/Config.php
index a25656d3..d0f0e3f3 100644
--- a/src/Wallabag/CoreBundle/Entity/Config.php
+++ b/src/Wallabag/CoreBundle/Entity/Config.php
@@ -81,6 +81,13 @@ class Config
81 private $readingSpeed; 81 private $readingSpeed;
82 82
83 /** 83 /**
84 * @var string
85 *
86 * @ORM\Column(name="pocket_consumer_key", type="string", nullable=true)
87 */
88 private $pocketConsumerKey;
89
90 /**
84 * @ORM\OneToOne(targetEntity="Wallabag\UserBundle\Entity\User", inversedBy="config") 91 * @ORM\OneToOne(targetEntity="Wallabag\UserBundle\Entity\User", inversedBy="config")
85 */ 92 */
86 private $user; 93 private $user;
@@ -279,6 +286,30 @@ class Config
279 } 286 }
280 287
281 /** 288 /**
289 * Set pocketConsumerKey.
290 *
291 * @param string $pocketConsumerKey
292 *
293 * @return Config
294 */
295 public function setPocketConsumerKey($pocketConsumerKey)
296 {
297 $this->pocketConsumerKey = $pocketConsumerKey;
298
299 return $this;
300 }
301
302 /**
303 * Get pocketConsumerKey.
304 *
305 * @return string
306 */
307 public function getPocketConsumerKey()
308 {
309 return $this->pocketConsumerKey;
310 }
311
312 /**
282 * @param TaggingRule $rule 313 * @param TaggingRule $rule
283 * 314 *
284 * @return Config 315 * @return Config
diff --git a/src/Wallabag/CoreBundle/Entity/Entry.php b/src/Wallabag/CoreBundle/Entity/Entry.php
index ceae78b0..a4b0d7a8 100644
--- a/src/Wallabag/CoreBundle/Entity/Entry.php
+++ b/src/Wallabag/CoreBundle/Entity/Entry.php
@@ -40,6 +40,15 @@ class Entry
40 /** 40 /**
41 * @var string 41 * @var string
42 * 42 *
43 * @ORM\Column(name="uuid", type="text", nullable=true)
44 *
45 * @Groups({"entries_for_user", "export_all"})
46 */
47 private $uuid;
48
49 /**
50 * @var string
51 *
43 * @ORM\Column(name="title", type="text", nullable=true) 52 * @ORM\Column(name="title", type="text", nullable=true)
44 * 53 *
45 * @Groups({"entries_for_user", "export_all"}) 54 * @Groups({"entries_for_user", "export_all"})
@@ -88,20 +97,20 @@ class Entry
88 private $content; 97 private $content;
89 98
90 /** 99 /**
91 * @var date 100 * @var \DateTime
92 * 101 *
93 * @ORM\Column(name="created_at", type="datetime") 102 * @ORM\Column(name="created_at", type="datetime")
94 * 103 *
95 * @Groups({"export_all"}) 104 * @Groups({"entries_for_user", "export_all"})
96 */ 105 */
97 private $createdAt; 106 private $createdAt;
98 107
99 /** 108 /**
100 * @var date 109 * @var \DateTime
101 * 110 *
102 * @ORM\Column(name="updated_at", type="datetime") 111 * @ORM\Column(name="updated_at", type="datetime")
103 * 112 *
104 * @Groups({"export_all"}) 113 * @Groups({"entries_for_user", "export_all"})
105 */ 114 */
106 private $updatedAt; 115 private $updatedAt;
107 116
@@ -401,7 +410,22 @@ class Entry
401 } 410 }
402 411
403 /** 412 /**
404 * @return string 413 * Set created_at.
414 * Only used when importing data from an other service.
415 *
416 * @param \DateTime $createdAt
417 *
418 * @return Entry
419 */
420 public function setCreatedAt(\DateTime $createdAt)
421 {
422 $this->createdAt = $createdAt;
423
424 return $this;
425 }
426
427 /**
428 * @return \DateTime
405 */ 429 */
406 public function getCreatedAt() 430 public function getCreatedAt()
407 { 431 {
@@ -409,7 +433,7 @@ class Entry
409 } 433 }
410 434
411 /** 435 /**
412 * @return string 436 * @return \DateTime
413 */ 437 */
414 public function getUpdatedAt() 438 public function getUpdatedAt()
415 { 439 {
@@ -595,4 +619,37 @@ class Entry
595 { 619 {
596 return $this->language; 620 return $this->language;
597 } 621 }
622
623 /**
624 * @return string
625 */
626 public function getUuid()
627 {
628 return $this->uuid;
629 }
630
631 /**
632 * @param string $uuid
633 *
634 * @return Entry
635 */
636 public function setUuid($uuid)
637 {
638 $this->uuid = $uuid;
639
640 return $this;
641 }
642
643 public function generateUuid()
644 {
645 if (null === $this->uuid) {
646 // @see http://blog.kevingomez.fr/til/2015/07/26/why-is-uniqid-slow/ for true parameter
647 $this->uuid = uniqid('', true);
648 }
649 }
650
651 public function cleanUuid()
652 {
653 $this->uuid = null;
654 }
598} 655}
diff --git a/src/Wallabag/CoreBundle/Form/Type/ClientType.php b/src/Wallabag/CoreBundle/Form/Type/ClientType.php
index 8b351e60..d1fa94e6 100644
--- a/src/Wallabag/CoreBundle/Form/Type/ClientType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/ClientType.php
@@ -6,6 +6,7 @@ use Symfony\Component\Form\AbstractType;
6use Symfony\Component\Form\CallbackTransformer; 6use Symfony\Component\Form\CallbackTransformer;
7use Symfony\Component\Form\Extension\Core\Type\SubmitType; 7use Symfony\Component\Form\Extension\Core\Type\SubmitType;
8use Symfony\Component\Form\Extension\Core\Type\UrlType; 8use Symfony\Component\Form\Extension\Core\Type\UrlType;
9use Symfony\Component\Form\Extension\Core\Type\TextType;
9use Symfony\Component\Form\FormBuilderInterface; 10use Symfony\Component\Form\FormBuilderInterface;
10use Symfony\Component\OptionsResolver\OptionsResolver; 11use Symfony\Component\OptionsResolver\OptionsResolver;
11 12
@@ -14,7 +15,8 @@ class ClientType extends AbstractType
14 public function buildForm(FormBuilderInterface $builder, array $options) 15 public function buildForm(FormBuilderInterface $builder, array $options)
15 { 16 {
16 $builder 17 $builder
17 ->add('redirect_uris', UrlType::class, ['required' => true, 'label' => 'developer.client.form.redirect_uris_label']) 18 ->add('name', TextType::class, ['label' => 'developer.client.form.name_label'])
19 ->add('redirect_uris', UrlType::class, ['required' => false, 'label' => 'developer.client.form.redirect_uris_label'])
18 ->add('save', SubmitType::class, ['label' => 'developer.client.form.save_label']) 20 ->add('save', SubmitType::class, ['label' => 'developer.client.form.save_label'])
19 ; 21 ;
20 22
diff --git a/src/Wallabag/CoreBundle/Form/Type/ConfigType.php b/src/Wallabag/CoreBundle/Form/Type/ConfigType.php
index 7d25cc80..0bac2874 100644
--- a/src/Wallabag/CoreBundle/Form/Type/ConfigType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/ConfigType.php
@@ -52,6 +52,9 @@ class ConfigType extends AbstractType
52 'choices' => array_flip($this->languages), 52 'choices' => array_flip($this->languages),
53 'label' => 'config.form_settings.language_label', 53 'label' => 'config.form_settings.language_label',
54 ]) 54 ])
55 ->add('pocket_consumer_key', null, [
56 'label' => 'config.form_settings.pocket_consumer_key_label',
57 ])
55 ->add('save', SubmitType::class, [ 58 ->add('save', SubmitType::class, [
56 'label' => 'config.form.save', 59 'label' => 'config.form.save',
57 ]) 60 ])
diff --git a/src/Wallabag/CoreBundle/Helper/ContentProxy.php b/src/Wallabag/CoreBundle/Helper/ContentProxy.php
index 5dd684f2..8019df42 100644
--- a/src/Wallabag/CoreBundle/Helper/ContentProxy.php
+++ b/src/Wallabag/CoreBundle/Helper/ContentProxy.php
@@ -95,14 +95,24 @@ class ContentProxy
95 * Assign some tags to an entry. 95 * Assign some tags to an entry.
96 * 96 *
97 * @param Entry $entry 97 * @param Entry $entry
98 * @param array|string $tags An array of tag or a string coma separated of tag 98 * @param array|string $tags An array of tag or a string coma separated of tag
99 * @param array $entitiesReady Entities from the EntityManager which are persisted but not yet flushed
100 * It is mostly to fix duplicate tag on import @see http://stackoverflow.com/a/7879164/569101
99 */ 101 */
100 public function assignTagsToEntry(Entry $entry, $tags) 102 public function assignTagsToEntry(Entry $entry, $tags, array $entitiesReady = [])
101 { 103 {
102 if (!is_array($tags)) { 104 if (!is_array($tags)) {
103 $tags = explode(',', $tags); 105 $tags = explode(',', $tags);
104 } 106 }
105 107
108 // keeps only Tag entity from the "not yet flushed entities"
109 $tagsNotYetFlushed = [];
110 foreach ($entitiesReady as $entity) {
111 if ($entity instanceof Tag) {
112 $tagsNotYetFlushed[$entity->getLabel()] = $entity;
113 }
114 }
115
106 foreach ($tags as $label) { 116 foreach ($tags as $label) {
107 $label = trim($label); 117 $label = trim($label);
108 118
@@ -111,11 +121,15 @@ class ContentProxy
111 continue; 121 continue;
112 } 122 }
113 123
114 $tagEntity = $this->tagRepository->findOneByLabel($label); 124 if (isset($tagsNotYetFlushed[$label])) {
125 $tagEntity = $tagsNotYetFlushed[$label];
126 } else {
127 $tagEntity = $this->tagRepository->findOneByLabel($label);
115 128
116 if (is_null($tagEntity)) { 129 if (is_null($tagEntity)) {
117 $tagEntity = new Tag(); 130 $tagEntity = new Tag();
118 $tagEntity->setLabel($label); 131 $tagEntity->setLabel($label);
132 }
119 } 133 }
120 134
121 // only add the tag on the entry if the relation doesn't exist 135 // only add the tag on the entry if the relation doesn't exist
diff --git a/src/Wallabag/CoreBundle/Helper/EntriesExport.php b/src/Wallabag/CoreBundle/Helper/EntriesExport.php
index e91007e1..1dfa12c8 100644
--- a/src/Wallabag/CoreBundle/Helper/EntriesExport.php
+++ b/src/Wallabag/CoreBundle/Helper/EntriesExport.php
@@ -302,7 +302,7 @@ class EntriesExport
302 $enclosure = '"'; 302 $enclosure = '"';
303 $handle = fopen('php://memory', 'rb+'); 303 $handle = fopen('php://memory', 'rb+');
304 304
305 fputcsv($handle, ['Title', 'URL', 'Content', 'Tags', 'MIME Type', 'Language'], $delimiter, $enclosure); 305 fputcsv($handle, ['Title', 'URL', 'Content', 'Tags', 'MIME Type', 'Language', 'Creation date'], $delimiter, $enclosure);
306 306
307 foreach ($this->entries as $entry) { 307 foreach ($this->entries as $entry) {
308 fputcsv( 308 fputcsv(
@@ -315,6 +315,7 @@ class EntriesExport
315 implode(', ', $entry->getTags()->toArray()), 315 implode(', ', $entry->getTags()->toArray()),
316 $entry->getMimetype(), 316 $entry->getMimetype(),
317 $entry->getLanguage(), 317 $entry->getLanguage(),
318 $entry->getCreatedAt()->format('d/m/Y h:i:s'),
318 ], 319 ],
319 $delimiter, 320 $delimiter,
320 $enclosure 321 $enclosure
diff --git a/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php b/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php
new file mode 100644
index 00000000..f9066bee
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php
@@ -0,0 +1,34 @@
1<?php
2
3namespace Wallabag\CoreBundle\Helper;
4
5use Pagerfanta\Adapter\AdapterInterface;
6use Pagerfanta\Pagerfanta;
7use Symfony\Component\Routing\Router;
8use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
9
10class PreparePagerForEntries
11{
12 private $user;
13 private $router;
14
15 public function __construct(TokenStorage $token, Router $router)
16 {
17 $this->user = $token->getToken()->getUser();
18 $this->router = $router;
19 }
20
21 /**
22 * @param AdapterInterface $adapter
23 * @param int $page
24 *
25 * @return null|Pagerfanta
26 */
27 public function prepare(AdapterInterface $adapter, $page = 1)
28 {
29 $entries = new Pagerfanta($adapter);
30 $entries->setMaxPerPage($this->user->getConfig()->getItemsPerPage());
31
32 return $entries;
33 }
34}
diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
index 4d45e5f5..302e5a53 100644
--- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php
+++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
@@ -3,6 +3,7 @@
3namespace Wallabag\CoreBundle\Repository; 3namespace Wallabag\CoreBundle\Repository;
4 4
5use Doctrine\ORM\EntityRepository; 5use Doctrine\ORM\EntityRepository;
6use Doctrine\ORM\Query;
6use Pagerfanta\Adapter\DoctrineORMAdapter; 7use Pagerfanta\Adapter\DoctrineORMAdapter;
7use Pagerfanta\Pagerfanta; 8use Pagerfanta\Pagerfanta;
8use Wallabag\CoreBundle\Entity\Tag; 9use Wallabag\CoreBundle\Entity\Tag;
@@ -85,6 +86,22 @@ class EntryRepository extends EntityRepository
85 } 86 }
86 87
87 /** 88 /**
89 * Retrieves untagged entries for a user.
90 *
91 * @param int $userId
92 *
93 * @return QueryBuilder
94 */
95 public function getBuilderForUntaggedByUser($userId)
96 {
97 return $this
98 ->getBuilderByUser($userId)
99 ->leftJoin('e.tags', 't')
100 ->groupBy('e.id')
101 ->having('count(t.id) = 0');
102 }
103
104 /**
88 * Find Entries. 105 * Find Entries.
89 * 106 *
90 * @param int $userId 107 * @param int $userId
@@ -92,12 +109,15 @@ class EntryRepository extends EntityRepository
92 * @param bool $isStarred 109 * @param bool $isStarred
93 * @param string $sort 110 * @param string $sort
94 * @param string $order 111 * @param string $order
112 * @param int $since
113 * @param string $tags
95 * 114 *
96 * @return array 115 * @return array
97 */ 116 */
98 public function findEntries($userId, $isArchived = null, $isStarred = null, $sort = 'created', $order = 'ASC') 117 public function findEntries($userId, $isArchived = null, $isStarred = null, $sort = 'created', $order = 'ASC', $since = 0, $tags = '')
99 { 118 {
100 $qb = $this->createQueryBuilder('e') 119 $qb = $this->createQueryBuilder('e')
120 ->leftJoin('e.tags', 't')
101 ->where('e.user =:userId')->setParameter('userId', $userId); 121 ->where('e.user =:userId')->setParameter('userId', $userId);
102 122
103 if (null !== $isArchived) { 123 if (null !== $isArchived) {
@@ -108,6 +128,16 @@ class EntryRepository extends EntityRepository
108 $qb->andWhere('e.isStarred =:isStarred')->setParameter('isStarred', (bool) $isStarred); 128 $qb->andWhere('e.isStarred =:isStarred')->setParameter('isStarred', (bool) $isStarred);
109 } 129 }
110 130
131 if ($since >= 0) {
132 $qb->andWhere('e.updatedAt > :since')->setParameter('since', new \DateTime(date('Y-m-d H:i:s', $since)));
133 }
134
135 if ('' !== $tags) {
136 foreach (explode(',', $tags) as $tag) {
137 $qb->andWhere('t.label = :label')->setParameter('label', $tag);
138 }
139 }
140
111 if ('created' === $sort) { 141 if ('created' === $sort) {
112 $qb->orderBy('e.id', $order); 142 $qb->orderBy('e.id', $order);
113 } elseif ('updated' === $sort) { 143 } elseif ('updated' === $sort) {
@@ -210,6 +240,19 @@ class EntryRepository extends EntityRepository
210 } 240 }
211 241
212 /** 242 /**
243 * Remove tags from all user entries.
244 *
245 * @param int $userId
246 * @param Array<Tag> $tags
247 */
248 public function removeTags($userId, $tags)
249 {
250 foreach ($tags as $tag) {
251 $this->removeTag($userId, $tag);
252 }
253 }
254
255 /**
213 * Find all entries that are attached to a give tag id. 256 * Find all entries that are attached to a give tag id.
214 * 257 *
215 * @param int $userId 258 * @param int $userId
diff --git a/src/Wallabag/CoreBundle/Repository/TagRepository.php b/src/Wallabag/CoreBundle/Repository/TagRepository.php
index abf915fe..9d127da7 100644
--- a/src/Wallabag/CoreBundle/Repository/TagRepository.php
+++ b/src/Wallabag/CoreBundle/Repository/TagRepository.php
@@ -7,13 +7,39 @@ use Doctrine\ORM\EntityRepository;
7class TagRepository extends EntityRepository 7class TagRepository extends EntityRepository
8{ 8{
9 /** 9 /**
10 * Find Tags. 10 * Count all tags per user.
11 *
12 * @param int $userId
13 * @param int $cacheLifeTime Duration of the cache for this query
14 *
15 * @return int
16 */
17 public function countAllTags($userId, $cacheLifeTime = null)
18 {
19 $query = $this->createQueryBuilder('t')
20 ->select('t.slug')
21 ->leftJoin('t.entries', 'e')
22 ->where('e.user = :userId')->setParameter('userId', $userId)
23 ->groupBy('t.slug')
24 ->getQuery();
25
26 if (null !== $cacheLifeTime) {
27 $query->useQueryCache(true);
28 $query->useResultCache(true);
29 $query->setResultCacheLifetime($cacheLifeTime);
30 }
31
32 return count($query->getArrayResult());
33 }
34
35 /**
36 * Find all tags with associated entries per user.
11 * 37 *
12 * @param int $userId 38 * @param int $userId
13 * 39 *
14 * @return array 40 * @return array
15 */ 41 */
16 public function findAllTags($userId) 42 public function findAllTagsWithEntries($userId)
17 { 43 {
18 return $this->createQueryBuilder('t') 44 return $this->createQueryBuilder('t')
19 ->leftJoin('t.entries', 'e') 45 ->leftJoin('t.entries', 'e')
diff --git a/src/Wallabag/CoreBundle/Resources/config/parameters.yml b/src/Wallabag/CoreBundle/Resources/config/parameters.yml
index abd9ab68..6068e84c 100644
--- a/src/Wallabag/CoreBundle/Resources/config/parameters.yml
+++ b/src/Wallabag/CoreBundle/Resources/config/parameters.yml
@@ -6,7 +6,3 @@ parameters:
6 google_play: https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche 6 google_play: https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche
7 ios: https://itunes.apple.com/app/wallabag/id828331015?mt=8 7 ios: https://itunes.apple.com/app/wallabag/id828331015?mt=8
8 windows: https://www.microsoft.com/store/apps/wallabag/9nblggh11646 8 windows: https://www.microsoft.com/store/apps/wallabag/9nblggh11646
9 socials_url:
10 twitter: https://twitter.com/wallabagapp
11 google_plus: https://plus.google.com/+WallabagOrg/posts
12 facebook: https://facebook.com/Wallabag
diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml
index f8835198..23e6d3ca 100644
--- a/src/Wallabag/CoreBundle/Resources/config/services.yml
+++ b/src/Wallabag/CoreBundle/Resources/config/services.yml
@@ -119,3 +119,17 @@ services:
119 class: Wallabag\CoreBundle\Helper\Redirect 119 class: Wallabag\CoreBundle\Helper\Redirect
120 arguments: 120 arguments:
121 - "@router" 121 - "@router"
122
123 wallabag_core.helper.prepare_pager_for_entries:
124 class: Wallabag\CoreBundle\Helper\PreparePagerForEntries
125 arguments:
126 - "@security.token_storage"
127 - "@router"
128
129 wallabag_core.redis.client:
130 class: Predis\Client
131 arguments:
132 -
133 host: '%redis_host%'
134 port: '%redis_port%'
135 schema: tcp
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/annotator.min.js b/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/annotator.min.js
deleted file mode 100644
index fdc35c69..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/annotator.min.js
+++ /dev/null
@@ -1,23 +0,0 @@
1/*
2** Annotator v2.0.0-alpha.3-0f076c7
3** https://github.com/okfn/annotator/
4**
5** Copyright 2016, the Annotator project contributors.
6** Dual licensed under the MIT and GPLv3 licenses.
7** https://github.com/okfn/annotator/blob/master/LICENSE
8**
9** Built at: 2016-02-26 15:02:00Z
10*/
11(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.annotator=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){(function(global){"use strict";var insertCss=require("insert-css");var css=require("./css/annotator.css");insertCss(css);var app=require("./src/app");var util=require("./src/util");exports.App=app.App;exports.authz=require("./src/authz");exports.identity=require("./src/identity");exports.notification=require("./src/notification");exports.storage=require("./src/storage");exports.ui=require("./src/ui");exports.util=util;exports.ext={};var wgxpath=global.wgxpath;if(typeof wgxpath!=="undefined"&&wgxpath!==null&&typeof wgxpath.install==="function"){wgxpath.install()}var _annotator=global.annotator;exports.noConflict=function noConflict(){global.annotator=_annotator;return this}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./css/annotator.css":2,"./src/app":13,"./src/authz":14,"./src/identity":15,"./src/notification":16,"./src/storage":18,"./src/ui":19,"./src/util":30,"insert-css":6}],2:[function(require,module,exports){module.exports='.annotator-filter *,.annotator-notice,.annotator-widget *{font-family:"Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:400;text-align:left;margin:0;padding:0;background:0 0;-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;-moz-box-shadow:none;-webkit-box-shadow:none;-o-box-shadow:none;box-shadow:none;color:#909090}.annotator-adder{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAAAwCAYAAAD+WvNWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMzgwMTE3NDA3MjA2ODExODRCQUU5RDY0RTkyQTJDNiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowOUY5RUFERDYwOEIxMUUxOTQ1RDkyQzU2OTNEMDZENCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowOUY5RUFEQzYwOEIxMUUxOTQ1RDkyQzU2OTNEMDZENCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA1ODAxMTc0MDcyMDY4MTE5MTA5OUIyNDhFRUQ1QkM4IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAzODAxMTc0MDcyMDY4MTE4NEJBRTlENjRFOTJBMkM2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+CtAI3wAAGEBJREFUeNrMnAd8FMe9x3+7d6cuEIgqhCQQ3cI0QQyIblPiENcQ20KiPPzBuLzkYSeOA6Q5zufl896L7cQxOMYRVWAgxjE2YDq2qAIZJJkiUYR6Be5O0p3ubnfezF7R6rS7VxBlkvEdd3s735n57b/M7IojhIDjOKgU9xfchnXrFtPjltE6Gne/CJQrj9bVmQsXrqf/JuzDTRs2EO8D52dmap3Hwz/9+X9K/PTtPeGnyBL/oS2LPfwzXljXjv9g9kK/+H8WNXsxB8aPe8SPPAKy+v3GvR7+n0fNacfPaQiIfch98vHHY/R6/bL+ycmLhg0bhq6xsXednjHdbGhAYWEhbpSUrHU4HKv/48UXz7GvNq5f36YTGQsWaA0+N3XeR2N4Xr8sKTF5Ub9+QxEZ1ZWe/673AM2NN3Hl6vcoKy9ZK4qO1Ue2LZX4Zzyf1ab1g1sWafK/GjVzjA78sjE/GLto8oxpiI/vA4h3EZ22KhIRFRUVOPT1AeTnnVsrQFz9QeM+id9bRHoteFaZeCakpS1KSkqCzWaDyWTCvSjhERFIm5SGuLi4JSeOH2cfveQWjLeItPg5TrcsdczERTFdk2G2AMY61+V0V+eAg8EQi8HDJqNnj95Lcs+28jPBTH/un37z6zh+2U8XpC8aO3QUSIMV4qVbd78DPNAnNAaZz83HqeFDl2zfsMXD/17jHvw8ulVEvBb8P9eulSwPU31jY6MkIFEU70llbZnNjeibkIDExMQljMXNRUUkWU6ibEo4mfVZlpiQvCiyUzLqjYC1hdpmevWKd7myNlhbDbeByM4DEd8ncQljcXMd2kq9kaQCbf7XomctG00tT2rScJByM9BsZ+YBkgm9m1UgUlukzIxx/Udg+KgRSxiLm+s98x5OS0DuTvC0LB0ydAgsFus9E453tVgsSHl4OINZKufVEJCHn+P4pX2TUmBsdgmH3NvqoG2aaNv9B4wEYwmUn7qupdPSJkNssECkkyqK97iyNustmDnjMTAWJb3o1a6AH86ZE0YnLSUsLAxWdjndxxISYmC+KGXkyJGGc+fOsVEXifroS/wJQ2aH8RyfwuliYLfffauvViSrFNaJubWUbnEjDPWV5yV++OBPDekfpjPoUnqEdAFpbrl/HaAiiuWjqZr5lP76HoZrjlonP+ck4tWi/oS+fSN0Oh0dfBsEQbjP1QEai+GRceOi3YwLFy/mFObAwx8VEx9BOw2b/d64LS135hB46PQ69EgY6+E/vO1FjrSPhj383XWdIgwGA4iFuhJ6EiLep0rb5h0EIaEhGGyI8/C/Z3K6MVULZLFaeTZBbldyPwtrn7EwJlmMQLRiIIfdIvELrknUSPnQaCxDk7kqYK4e8WNhs95GSFgMc1GqxzkEp8tiTP7y2+Dg2TspLBGJRr5HUG6uRVVjfcD8qb2GwtjSiM6hUdTf85pWiLFITDJ+9l/VLMxht3NuATEroFbs1D+sWfMRNm3aFHAHvv32Wxw7loNHHnkE4eHhGgLiXRNg52RXqWYMIQr0WJqOSvGIhoCs5nI8MyMUT82cGDD/whWlGJpowaUbTdCH91EVkTT/jEVoy88+U+WHyHkuHo0OlFvqEPHjAZg699mA+Ytf2gnb4EiYixsQZ+iiKiLO1b6LifNK2JSvALsgcCK7gn24l3/84x9BiefGjRJs3LgRK1asxOrVa6RgWasdxsKYZFeA9JkaPxGd/CwYFDTqE9OYePoEzL/490Y8Ng54Y8kgPEnPYWmsoJZGUGxDCkhZ0Cy25deyQAKI8xiRaNbIHw5AwtyRAfPXvrYP+mnxGPafjyLy8WRUWm7ScRZV23GuLpI2/FoWCILD4UmVtVzY7t17pNedOz/DuHHj/IvL6EAfPXpUEhB7/+mnn0qB8qJFi+hriOLCouSOKJP35+pWi/GLPl3Y9PHdpdd3PmlBcTnve4lQFKglNCIxrjOendMXOp7DE4/GweaowFfHacqli2rfX5GxihJTW351MHa1Ow2XtgXqOWWQ9Gr6v1zgutmPmFiEyd6Mzgnd0O3JUeBonNj38REotYtoPlCFSBKmmAmQVgskc5/tBcTJV6iJy31pubCWFmeGFh0djStXrvjsALM0Z86cxejRo/CHP/web7/9R2lx8rPPdkquLCUlRVFwRPQkLq2MYrvggGt9lYIHnwIKMThFc6OaaMdK7gl31GFIvAVXK5uwcXc8np+lR2Q4jx9N642L5QKKy6AoIKe7asuvENxwbV453y6MD3FOob3CBJ2onaoxK9hAzLAODEfj9Urot11GxDODwEcYED87BY1XHBCvGZVdGKfASHug17ASflkguZBY1qZVrFYrvvzyK8nlTZkyBa+/vhy/+tWbePfd95CZmYGHH34YDodD3QI5XZh/FsjFL/oKomWT7PM4Wx2mjgGef3wAvsmtxebd5eD5BDwzHdh/muBqhfI5RNHJKgbA73FhgjMT8mkZaaDr67gGwQw+rTeGPTsG1ceKUbK9EP2oBQ2bmwzb0TII143KHXB95mbyZyvD2WFpArQtkDxT8nXcnj17sGvXLixYkIkPP1xNU3Mdli9fjuTkZAwYMAC3b99WHFTGICosvImam1rE6TZ8BNHyeFbrOIu5ErPH6yRL8+XRevxkVk8a89Rg2yEzymujcfmGugVzLh6L7VaetVxY674U0czCWseIJkUax1U1NSB8eiL6zh6Oqq8voM+TI0AcIhq+uIqYqibYi2+5on0FDEK8QudWPrUgGm4X5lyVVF8plgtIq2ZnZ2P//gOSeE6ePCVZmiNHjiI3Nxfx8fG4efOmM1hW/D2Ru7BWRuUZ59yTI0/j1ao8U1U7pslUhSemGvBYWg98cZi6sKQQ6HUcpozrjv4JUSi4SlBbcU6zHacVFdsxauzAA7IYSK16RKlxTDVN8aNooBw3Yygq9hQifGA3KfbpNWkQovt1h+1iPfJriny0o8zIq1+/8Fz1WtXbzSjV7du34/jxE3j66aewb99+nD59GrGxsTRoXojhw4dL+2zp6fM1zyGxKPh0TQskiU97oU82/u0XAanIm6l45k7SYcrYbjhwvAGpw8IxalgMjI0C9p6gqXBJC+rLT2Hz/4zQbKfNZPtjgVy5DnNNoiCq1lb+9t/ZHHZpfSh8Vj/0nDAQ1UcuI3pkHGIf7guHyQrrgRtoLq5DbvUFjP94gWobxLUO1M4KcRoCgmfyxKAtkNlspsHxZzTj+gZPPfWkZHFOnTqFLl26UMGkY968eaiqqsKsWbOllWa1NtzWxPs+DK0YQmKH6HO/Su5m2uxjOWzgHJX40eQQzJjQHfuP12Hk4DCkpsTA1CTi65PAvw6LiIrkcHhjmuI55JUo7F74dGF+WSDl42yUv1q8jaiZyeg9dQgqD19EVEpPdBuVCMHcAuvhUjR/eQVcpAFzvnrdZ1tqRTsGoj9soYGvpbnZZ0dZgCyf4Pr6euz8/HNqXZowZ/ZsfL7zc1y8dAnstpDXXnuNZlw/QGVFRZugWa0dGip5VqO94y5Nfnr11Jpo8GjSWsl1lhp6TKOVuAbSjq5htUif2wU9YsPw9bEGTBnTGQ8NiEJZjQPrdhPsO0Ngp+gtQqsLrDIqt2Ojsad0JXsLyEdwxgRWe+EaBKNV9Ziu4mPSa92F60Cj3bnyTQSYYoGkF9MQ2SMGJbvOoMe0oYhN6QtL6U3UrT0N417qsuwUvmcE4thYOgTUFChn0brOYcpi11oHct9swG4207hjsa3FdR1369YtfPXVbjQ3NUuZ1cFDhyTxJCQk4KWXlmLUyBGoq61t5/DV2mGfK938QHy4MCkyVr1rQrnDRHSgU0gd5s+JQq9uYSgsNmHiyChJPBV1AtbvEbAvl6bN7iUdoqBGxXO3d2Hww4VxAtsW8OMeJHaMw7XO04Wgb+Z4RPXsgvqCUnSnsQ4Tj7X8Nmo/zoVp92WqatE59kIro1o7jCFgF+bLdKkVFs/s+vJLlNy4IYnn22+/ke4s7NOnjySeQYMG4ZZKtuWPKffXAkliCOLWwwjDbaTPMmBY/3DkF93EhBERGDE4GtUNIjbsJTh9kW2rcAGf1+mCA7kAPHsamtX7uKYIET0XpCImJR4150rQLW0AdVtJaKkyoeHjM7AeKwXv0D6HVjv+uzB3Bzn4Z4FcluokjXHYWk9cXG/s2LEDVdXVGDhwIN5++w/oS7Mto9Eo7Z+5B09+btV2OHdM4/8EEFcaH5gBIpg+miD98ThU1bXg6RndEdc9FNcrBfx5sw3fFet8nkN9LEUQBB4D+ZrA1lTbue3RaeZADF4wGU0Vt5A0bywi+3SF5WoDKn53AC1nKtunUV4CUmNQmxefMZBLQX70gJOyory87ySBlJdXSGk5i3lWrPg1uyEMdfX1bY5v8+r93os00BgIUuAtBGQlOGLDlNERMOg59OkRCh1N1ctqBLy7TURZnR53clOOxOIlGE0+uQvzoxvsGAc9f4/pg8EbdIiK7wpOz8N64xZq3zkC8bpJ+Tyil6sK0IXpfWVhfsdA9Bi2lsPclfvfDz30EJYv/y/JfTFRsaq17KEZAwWahYH4dYXLS2xUE0YN6e7hKioTseZzEXlFzoD5TkqwFogXtUMl+XH2biHolprkGVbrhVrUvXsc1hMVUsDMqyygus0kL6qfO+gsTEl4ahdMYUEhevXqheeeew5paRMl12W1WNDU1OQUo49VM07j3IFbIBJQDCTYTJgwPgb1Rg67jjtw5hLB5VKaEJi19sjYBi/bwIz0MwYKfCWaJ/4JqEmwonfacIg1zbi54wKaj5XB9n0thAYLtSCi4tgyQVscLZ4xVhUQgepKtM8YyJcFiomJkdZ7mOtiT1E8/czTUlvSExw03nGn6UrnYC7ufP556X337t19WqCAYiDXSrqvYmwiiIoAUgfcwjfHS3Ekh8DcJMBqE6jV0RYgc3EjU3rQd73QYPQjCQgkjWdxHxOQQPsuqI+/eIum+NFhcIzvgfzDuSAHTsFuskCw2CHatX0fc3GJ41Kdc1HXLLWlKCDGoGBJiIqASBsL5ENAmZmZeOedd/Dff/7zHZn4n86bpykgLwtENCwQke+F+So7jnD42U+A/31jyB3x//sYD60Htrz2woiGBSJtLBC7g0JUH/+mdQUI/c0k/OCjzDvit26+AJ1KOxIDp8DoTwwEHwJ64okfIzw8DCtXrgoYmu3es62M+fPTkTZxIhoaGjouBnKtRPsq2fsFKb5543ldwPxMvxdvEHz+rYAvckSt/CLolWieXeYah5k/yqPmXkDXP04NXDUCQUtBDRo3FaJpy/eqazq8xrKFqoAKCgsbJ0+Zwp6NkTIotcmqr6vDzMcek24GC2ZthN0fxITDnkRVEqr0Gf2/xWq1HTh40OjvXtjt2kuNvRIfgY46dl7KENU5th8WpHo3Cs+sCC/QGKvZVn09x+jvQmKRtapxnDAAOnbbjchpJoDNa/OleidFB/UlFFZaHDbbCXOR0VcM5MYkNTU1gt1mO2M0GVNDQyNosKg+wEwAatbD7xRaxcqxpxnY2pHDbv/Om1EhhvB8Z22qpyFWyxnOXpaq1ydIT2fcj6KnI8y1lFFrpcBP1Pkb7GbBQYQz1Tpzam9dGIhNuC/8XIgOFbwZAsR2/NqbqfQAk9mclZd3nrqoUPDU3XDUEt3LysQTFhaKgoILMJpMWd4LMdq78TRzbWnMaijZg+hwZkXv/eDraJus7VtlB2Gzmtvx+3BhpFlsyfrG+j30ESHQcbwUo9zTSttkbZ+0XUYTZWm3EKYiIPfiLXn//fe3FhUVbygs/B6RkWEwGPSSO3MH1nersjZYW0y4hYUFuHDh4oa//vWv2+VsGjGQ55hLp7O23qou2GCv34Ou0RxCDezc7pju7lQnP4ewEA5dogjsdV+hoTJvw+XcdQr8oiZ/VtWRrRcbSzccNRRB3ykMOjb+7H90cu9qZWKlbek6heKw/jIKzNc3rKs60p5fIwYirpRCzMnJ+RO7FbO8rCxjzJjR6BzTBexpVfcEOhyilKqLYnCrtGyw2Z2JrLrdGHuU2nj7JnLPnMX1ayXrjxw9+o6bp00qI4rwxV9XdvZP9ECuU31RRvd+M4GweBBdJ9c9RtS322gGYvPvtlc1KxMWAoSGOOMdqQ+CEZytAnUX98JYf3l9bekpRX6NPxPi4T9jvvYnGsNy10NrMqbEPoQ4eydECqHO37IO2GhwbnU4bwcIqgP05KFUBqG81AGOVhPfgmqDCUeshSg2V64/aSxS5tdI491VOHHiRD2tby7IzDxcUlKaodfrh1ML0c198JChgzFhwgTYaJARqIiYeEJDDcg9nYv8/EL5AmENFeWF2trajes3bNjLlpXg3DcOyAKx39RX5NXT+ma/4U8dNtVfzuB43XCOa+WP7TMWnfu+AGMTH7CImHg6RVIRVm5HWWmO3DXVEFG4YG1u2Hi9YKcGv+iTP890rZ7WN5/t9cjhq7aqDD3lpz7Awz8quj+e0o8CZ3Y4H8YPVDyRIdgVWYBTlstOQkF67rrGYREu0Dhs447qk6r8akE054Z3vWcrgbxrIg9KAbuzMvfHv/rqqyx/f2EiTcMDEZFbPKdOncaxYye2/u1vf/u9TOWCq115FWSdwFtvvUUUYiBVftdEtuMfOMa8qhchL3ROSA9IRG7xWCu3oap479ais5sC4h82fqlaEK3I75rIdvwL46etQiT3wjNigCJyieffEfk42JS/NavsUED8rybNIWouzG0+OVknIDt5mw588MEHv6WnY4/ppk+aNMkvETHxsOfATp48ycSzhZ7jNzJwUQbr3QE3m8bfVgiMv/jspt+yxzd6gqR3Tpjvl4g84qn4FFVX9m4pOrs5YH6NFD4g/nXlh3/LJXCEi+TSf+KviFzi2RlNxdNcsIWKJ3B+V7jhKwaC68dEdmJe1gGpM1QAq1555RV2zPzJkydrisgtHuoWmXiy6W9XymAFlY4I3j7Yxz5XQPxFeZtXsYioJxHnd07M1BRRq3i2orJ4b3ZxXnaQ/GKH8WeVHlqFRI4gGvN/SkaDM2mIiIknKgSfdTqPg5b87KzSg0Hxu2WtZoG4Nmpr3wFe1gF2DvHvf/87BXmFWYaMqVOmKIqIBWihVDzHqXhyco5n09+soB/bvVQuqlSP7/3lL3/pywIFzF+ct2WlcwsfGZ2TlEXkEU/5Fqd4vtsSFP/QcYsJOpg/6wYVQhIVUScu4zlxNHglEVHxgIrnX53PY39LQTb9TVD8ryQ/7qHXskDenZGbVvdfadDJG6WCWEXIy2xsMqZNYyJqzc5YdsJinmPHjkni+fDDD3/tgpd3QAm4DfwvfvEL4scue1D8VBDMEqEXCBXRgjYicovHUp5NxbMn+8p3nwbFP2TcQuLHFktQ/FklB1ZREYGLQcbzxEtETDzRIdjRJd8pnpIDQfG/kvwjv/5GohK8fFPf3Yl26qTCWEkI+2tohIpoGux2h3SxMfHk5OTIxWPz6oCgkCq2uaHwjTfeIAHcohEUPxXGShaf9IJIRbRIEhErTvFsRmURFc+5bUHxDxmbSeD/PUpB8WeV7F9J+nEgXbiMdLclYmNGLc+2rvnYZyvIXleyPyj+lwfMbTf6ej+vBO9/K5lYT2OrV69e6XwkCBmPPjpDsj7s0Z6cnGOb6Xdu5du84NunibS8/vrrxJ/N047kv3Juu8Tfi/J3TV4srdk33tjELM9m+l1A/INTM+45/7rr+1aiPz0olsuYz4+RNkM/7XoO++35m+l3AfG/PHCuJrQ+yM4QtL3JsV1H16xZs4IKh32eyf7ihks8b8lUr2Q6iVwwHVwC4r96fgfll1brMnX6MCqe3VQ8//LJPzg13etc4n3hX3dt3woumY5/F2SGwoB9joLNWdf2+eR/edCPAxp/fQd0SJ4ttFkMY4KxWCx5Op0u4pNPPlkvi/YV4ZcvX04IuWd/DNAnPxOMYG/J4zg+4lrhFz75B495geAB4s+6+vVbln72PB3l33ztgE/+ZYOfCJie8/GX6v06h8wnyzMDveu9/CqRp4vtxBNM43/5y1/ueMO5I/gl8QRRLp/NfiD4mXiC2oq6U3rXxBOFVUzmY1tcr/Lq6CjxdERxTfwd8Qcrno4orom/I/5gxdMhAlIQkXwF064CLzwI4lERUUD891M8KiIKiP9OxNNhAvISEVFZDpevaJIHRTwKIvKb/0EQj4KI/Oa/U/F0qIA03JnS+wdKPD7cmSL/gyQeH+5Mkb8jxHOnWZiWiOTBLVH6/kEtbmHIglui9P2DWtzCWH3534r8HSUcd/l/AQYA7PGYKl3+RK0AAAAASUVORK5CYII=);background-repeat:no-repeat}.annotator-editor a:after,.annotator-filter .annotator-filter-navigation button:after,.annotator-filter .annotator-filter-property .annotator-filter-clear,.annotator-resize,.annotator-viewer .annotator-controls a,.annotator-viewer .annotator-controls button,.annotator-widget:after{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAEiCAYAAAD0w4JOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDY0MTMzNTM2QUQzMTFFMUE2REJERDgwQTM3Njg5NTUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDY0MTMzNTQ2QUQzMTFFMUE2REJERDgwQTM3Njg5NTUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2ODkwQjlFQzZBRDExMUUxQTZEQkREODBBMzc2ODk1NSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpENjQxMzM1MjZBRDMxMUUxQTZEQkREODBBMzc2ODk1NSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkijPpwAABBRSURBVHja7JsJVBRXFoarq5tNQZZWo6BxTRQXNOooxhWQBLcYlwRkMirmOKMnmVFHUcYdDUp0Yo5OopM4cQM1TlyjUSFGwIUWFQUjatxNQEFEFtnX+W/7Sovqqt7w5EwMdc6ltldf3/fevffderxSZWVlZbi5uTXh6rAVFBTkqbVubl07eno2d3BwaGgtZNPGjYf5wsLCDRu/+ir20aNH2dZCcnNzN6uPHTv2S2xsbHZaWpqLJZqJIR9FRMTxdHFJeHiiJZrl5+fniiF0jRdumgsjyOZNm44AshHPxAnXeXEhUzAJJEF8j5cWVoIZg9CmqqiokK3CksWLX3d0dJwy+f3331Cr1RoliEajMQ4Sw2xsbHglTZ6CampquOex8dxz2l5gkEY4qKyslOu1Qa6urpPRs9VkW2RjFmskQCaFhASQLZEZkDlYBBJDnJ2dXSnwmYLxpiDCdVMw3hyIObCnlr1g/nwfQCYpQcQbOTM5tbgDeDEkZPLkoaYgSpqpKysqnkIaNWrkYq7dUEim0EwhmkI1bw1ETjNVTk7OA2sg0jarDyO/ZhiJjtpS4923L1dWVs5VV1vW8Dyv4uzsbLnkc+c4dceOnn1LS0vat23bhnvSgypOpTItajXP2dvbcefOneVSL146ys+dOzvgyuWrMadOJeKGrb6AeRBb7syZM1xqyo9HwfDncZ0L+0dowGXATpw4qVfVGEyAJCUBkvrjUTzrTwzUkirDcfOewk5w9oBp8AD9iljoGt07rTvNpaRcPDqPIOx5+mlOkPnz5wakpV2JiU84ztlRNTVqTsXzeuHValyz4xJ1Ou4CICjrL37WoPsXLAgD7HJMXFw8Z2ur4dT8E23s7Wy4UydPchcupB5FGX8ZOxKUeyYLF84LSLt0OebYsXi9ZvYOdtwJBsE9f7lnVAUFuYp2smxpxJFOnTu9aWtry6VcSDm6cNF8f6WyRkEMFg7rclq0aP7fjZWrDyNmeL9c8iDedu7YMRK7xoHjx28y2tjGcsivt29PaOTsPNAGeSIGidNBwcF9La6aAPH18+UG+QzmtFqtN67pLALt2LYtAUOUHoLMWO/1BMM45o17OgUQ2dEz2R4drYf4AMLzakTNahY5n8FQRid9rpZG26KiE5ypOkP89JqIjZWOVSqeG+zrw7lp3bxRVidbteitUQnOLtQmhhApzMfXFzCtN57R1QJFbdkKiMtAP0Ao7lB16CE5oXtUTYJRB+BZPUzd6uWXE1xcXQcO8R+iqIms3aADWrdpw2VmZrbQJeoCeBdoYinkWTVVHNVC21jrrSopKakh67Y2ChCMXmw0xizbXM2I8dyc9gUObBpTBTw8WqixGw45n5GRnl4XjaZD9kP+DaibVSA8OAu7SHZKWm3GtTYWgfDATOxWQGxElynsepkNAoSq808JhII7DZKHzWpsQGYwiPhHyPzD0NifmtVGrE1WUlSQaDIXkNVm2REgc1jDiqtTBQk1pkmtqgEyCLu/SqpKkFmArDHLsgGxw57euaiXIkSQOeZCBI1egtCs324IxVGy3s9NtYkcqCtkGBtXHkLeAyTBGl8rZPZxCfIAkNIXLB6h9/4A6a/gMv0hvUyCUKgLdlsoXODYXwJ5E7sDzPM7G7OjPtjvgnjSizNkqwDDPoD9AL08E2QXaa7Ua40gLUTXmkHW44Gd2I9ndiZsLVh52ar9AAlmNiRs7eg9ByIOYtkMHGe0+6HBW9ithbSSKXcH8iFs7DuTvYZC31KKpFAuyhhE2v3kJkEK5YJZwytbtru7B8GGQjZCmhopmwkJgcRCu2o5jXwh2yWQWyxS3pH05teQwUpVK4Jkia49YA07l/ast8T3ihR7DfXvhuP/Mq2CATksarsRrBPuQQJx76Kp7vfGzh4F42V8zQe7YtxL+u2EkVoDZJ8+fej8VQi9vPRmg8BpCKXAN5OSkqpNVg0QR7VaPR3n05FLN6k9mcJnYLcK178ErEQRBIgTMtMNyG4Djaqv0XyJMtMBM4jrPCC8vb19KEHatWtXMHbs2LtOTk7lQoHGjRuXjBs37q6Hh0cRyvwZr+5/kW1s3GhXVVWlfxXv27fvhTlz5iybNm1aCuBVeEsqnzFjRmJoaOjS7t27X2fVXIgfdzfQtnnz5sPv3r2r/3/Rvn37WkdHR/8I1UNdXV1X4kdK+vfvPxsPNm3YsKE++JWWlmpbtNBH0C21QDY2NgOEk8LCwlY4340HhwM2DZfKcaxFJ+wsKip6OlfZoEGDwVIQD/Vrzc1Ciyb+/v4UGS9A0nx8fDxRHSdxGbzTaQ2q1qpVq3vnz58XGrYUbZIM0FVo0gOXyqBZ8p49ey6tW7fO8/Hjx7ZUrm3btgbZLe/p6Xnczs6ODI8bMWJEGiDTAfGAFjGo5nc4rh4zZswMaKYPKdSjXl5e8XLdfzQgIEBf6ODBg2qcv47qRcH4GuNlpRWOd+Bap8TERH0CNnz48Gv9+vVLkDNINXrtg8jIyEWootaYQaIHs2AKc5s1a7aVZS8GLuJ0//798M2bN4+NiYlxxztcLR90dHSsGDlyZHpwcHBU06ZNKWUuNRZGnGAjwTdu3BifkpLS7PLly05oJ65r164FMMZ0WH0UXIRG5GJz4pGajaad2RBOnXCZSYa0OrVAMueOEFc23tODuUyKxSBpQBS3hcbd3b396NGj+/v6+np16NDhVfRcNar40/fff5+ya9euk/n5+XeYlsoRomfPnv3j4+O3oJ0e1Ug2uMeDQ4cOfdmlS5deQlSVzgfoqzNkyJDXrl+/Hl9jYrt48eIh/GBHWRCq4HTq1KmtVLC4uDgZu48QVrKFhxGD7mC3DCZxjc5jY2M/o9HGAAQfGlBeXv6YCqEtKLd2weFYNM9jALNwTJ7e5OzZs1Hsx7JXrlzZ3QCk0+nmCb+el5d3Jzw8/ANKpnDqC6FBQLt27dp5CDGZQrnjx49/aACCe2yRNOx9wPsJvQBN3iorK8sXl7l58+bnUpDGwcGh1lQEQqyNt7d3GYUdeqXo1atXKQraissgWlbIDAyaZOzfZ/8+TMd5iEqluhMWFvZHmEIpjncDNAHttR6RUsuC31kDA4LanihUxOq+ivLGNWvWzAYjF4Hs3qJFi6bgWuvU1NStrBepR1satBH+0ERLJBXKyMi4AMP7Ag2bJbRHbm7unQMHDqzPzs7+ic5RNgw7lZxB0oErfumgKYOE5tHYNVSybAHmBlkB+8mXAnDtISALcdhI7LRiUUnmgowmEWj4akXvF1+g4Zs6hYmGRUIyhXLKRIzlUuJshEYOyvZDUBUHaTaCax/jcINcAiHORlpi6NmJHulrIhtZi06ZDViF3HAE43aINAahZAIWD0bl3wD7E55RGYBcXFy84f3vKkFo9IWVJ82aNSsVY34lNF8Ky25pAELW8Ta6VnZCSqvV0hB+ys/Pb/qZM2d2oRxlI+4Y194wAKFLe9IBDduBgYG3e/TooX/dwg+UzZw5U4chnNKatgjDoXAnDc07oikGGrQf1G1AB+3bt8/FABgJ1duvWrXqvUGDBl0HZBYgbSgtRBu6irIRZwONkDTRywqH0UL7zjvvvILBMQLD9+qhQ4cS5GVAvkIju4pMoQY/+osBCDFbh8arIkdEo89euHDhAgC+ZZpsFEP0bzbNmhUhG/nBADRgwIADqEbG0ymaqqrZqN5+xJ5NgBhMzmHcO4cU57gBqGXLlmkTJ07c0K1bt0dPp68qKjoCaLAOibJbZL00o5Oj5CKu6enpS5CIvo3hpjnito2kOsVBQUE/jxo16hP0zUY2q6OYRDijjQJv3boViDzJHdGyCaUz6Lnszp07X0GnbGRv5JXmZCPk/ZRD08wE2UoBez2/xhIJztxshGfZiBsbRSgePWKQEuk8tlI2Yo8M1xOJZz9kI52QWL2CqpYg6F9FHE/duXMnrX24K9c+4s0B7jEKxngQXV6ikI18gQy4h7FsRD116tQ3MzMzL5kK/uiEfTDgNrIgdKv7lStXYk2MHlmIkAV0jKHpYyRkDQxAyOqDULDMCITSGh/kRpMoa8GWsXr16l5SEA8H7AdHtJVrOGjxC+5NQui4mpyc3Ap7Ncb95sgHDGe+7t279x0biovhGovx8H6mSQZpQoYdFRW1VEgJcb/q9u3b6wyq9vDhwz1suD6PzL4nUhZnnG6AUBRshiQ+HJA80WBZmZWV9YkBKCcnZxErUI3R4Ru4Ak1wksO6b9q0abEYwjQtR0IWaABCKvc6bhYLBRGbd+NV9D1UJ4IyEmnjI9ymYecul43YoTfWiwtTBoJrRXK9iLYMUkwicPASChwxIxtZRm9TprKRxpDlaKocmWzkKnYTITbmZiNqNuNH89tjWSSk6aBk2FCWMe9/kf+7vnz5ilp1k55b8q+/moiI5TWiHpCemyVKD1sM44w8bDXI6mrJgercRnWGGbPsGpkB1CqDVP3GXeR3CLI4CsgZFzPGOvmaVRADkLWQWiApxKp4pACxDPQ8IIL3S728xlKHFexIVRevr3faFwZkdQIhE0ZeoJFWLh5ZBTOlidkwc6plFkwpibA4tPAW/FOh3tfqQRaBrHrRMZWNmDvyPheIrPdbmwO8wBmbNB5ZldLI2ZGq3td+RRBNz0NWWr2ShRaguLi4LFOr1R9UVVXdx6U5FoP8/Pym2dvbr8jLy3O2em1NUFDQ4cLCwoA6t9G2bdscpk6des3BwaGyTiC0yachISHX9+zZk4Qq3qtrxuYEmQWJO3v2bEzv3r2/qWui1R6y5Hl4f72vWTgjY0n78UoDZp2rplKpHCCd6gIiB+44evTod1NSUhZb21Yvd+jQYZROp9tZWVlZVlxcnKU03aFo2di8du/evVa88MQqEP58IZ0Itxakhkyj1R51AkkWDui1QzXvWw0SAWmVyjeWguq9vx70XCIkxjD6T3E4ZGlSUlK+1Rrt3buXFpPSmtFbyEimQdRWgRo0aPA2O6b/X6+DXAQs4Hm0EYXZw4CF1Qnk5uZWGhgY+CnaK9KqjM3W1rZ62LBhVydMmDDdw8PjqMWNlJubewL5UWZiYmIo/WPTmgRCiJBLIc2tBdTHo/+3tMaS1IZnRknLX23qpNLBgwddk5OT93p5edG/nFtLtTTbIOPi4uif4TXl5eUFBw4cWOfo6EgfWTS1GiRa7vnzmjVrKD9qXyeQaAuzBCS37OxnyAykf3utCiPck9U8tEIzEpASa15qaHkHLfloY860UL3314Pk4pG7u4ex+7QYhT60bA6Jh2yAlGZkpBu1bOlGn6HtF52P4Z587duVk6xpM1a1cSLIEchJkYazzG0jWuxOCTstfKMv6OhLMlquF8vuDzcH1I5BaKO1o/tEk3jC0sUcUyD69RvckwWDHIuStIDSHjKE3actwlgYoRXj/2HH9GYkfGlInyreEZ3/jXuyoFlWIy8RRBgAxJ+WCRD6cPdfxgzyI3ZMHwPu4Z6sgKaPLO+z6ze5J0usPzMVIYWPKZ0YuJr1lPB91ihImjmhlj5bfI118SlIHkRIRqeYAxFchNZiX+EMP6ScImq7WpuSi5SwTHYyc4u7rFEvWuS09TH79wz6nwADANCoQA3w0fcjAAAAAElFTkSuQmCC);background-repeat:no-repeat}.annotator-hl{background:#FFFF0A;background:rgba(255,255,10,.3);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4DFFFF0A, endColorstr=#4DFFFF0A)"}.annotator-hl-temporary{background:#007CFF;background:rgba(0,124,255,.3);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4D007CFF, endColorstr=#4D007CFF)"}.annotator-wrapper{position:relative}.annotator-adder,.annotator-notice,.annotator-outer{z-index:1020}.annotator-adder,.annotator-notice,.annotator-outer,.annotator-widget{position:absolute;font-size:10px;line-height:1}.annotator-hide{display:none;visibility:hidden}.annotator-adder{margin-top:-48px;margin-left:-24px;width:48px;height:48px;background-position:left top}.annotator-adder:hover{background-position:center top}.annotator-adder:active{background-position:center right}.annotator-adder button{display:block;width:36px;height:41px;margin:0 auto;border:none;background:0 0;text-indent:-999em;cursor:pointer}.annotator-outer{width:0;height:0}.annotator-widget{margin:0;padding:0;bottom:15px;left:-18px;min-width:265px;background-color:#FBFBFB;background-color:rgba(251,251,251,.98);border:1px solid #7A7A7A;border:1px solid rgba(122,122,122,.6);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.2);-moz-box-shadow:0 5px 15px rgba(0,0,0,.2);-o-box-shadow:0 5px 15px rgba(0,0,0,.2);box-shadow:0 5px 15px rgba(0,0,0,.2)}.annotator-invert-x .annotator-widget{left:auto;right:-18px}.annotator-invert-y .annotator-widget{bottom:auto;top:8px}.annotator-widget strong{font-weight:700}.annotator-widget .annotator-item,.annotator-widget .annotator-listing{padding:0;margin:0;list-style:none}.annotator-widget:after{content:"";display:block;width:18px;height:10px;background-position:0 0;position:absolute;bottom:-10px;left:8px}.annotator-invert-x .annotator-widget:after{left:auto;right:8px}.annotator-invert-y .annotator-widget:after{background-position:0 -15px;bottom:auto;top:-9px}.annotator-editor .annotator-item input,.annotator-editor .annotator-item textarea,.annotator-widget .annotator-item{position:relative;font-size:12px}.annotator-viewer .annotator-item{border-top:2px solid #7A7A7A;border-top:2px solid rgba(122,122,122,.2)}.annotator-widget .annotator-item:first-child{border-top:none}.annotator-editor .annotator-item,.annotator-viewer div{border-top:1px solid #858585;border-top:1px solid rgba(133,133,133,.11)}.annotator-viewer div{padding:6px}.annotator-viewer .annotator-item ol,.annotator-viewer .annotator-item ul{padding:4px 16px}.annotator-editor .annotator-item:first-child textarea,.annotator-viewer div:first-of-type{padding-top:12px;padding-bottom:12px;color:#3c3c3c;font-size:13px;font-style:italic;line-height:1.3;border-top:none}.annotator-viewer .annotator-controls{position:relative;top:5px;right:5px;padding-left:5px;opacity:0;-webkit-transition:opacity .2s ease-in;-moz-transition:opacity .2s ease-in;-o-transition:opacity .2s ease-in;transition:opacity .2s ease-in;float:right}.annotator-viewer li .annotator-controls.annotator-visible,.annotator-viewer li:hover .annotator-controls{opacity:1}.annotator-viewer .annotator-controls a,.annotator-viewer .annotator-controls button{cursor:pointer;display:inline-block;width:13px;height:13px;margin-left:2px;border:none;opacity:.2;text-indent:-900em;background-color:transparent;outline:0}.annotator-viewer .annotator-controls a:focus,.annotator-viewer .annotator-controls a:hover,.annotator-viewer .annotator-controls button:focus,.annotator-viewer .annotator-controls button:hover{opacity:.9}.annotator-viewer .annotator-controls a:active,.annotator-viewer .annotator-controls button:active{opacity:1}.annotator-viewer .annotator-controls button[disabled]{display:none}.annotator-viewer .annotator-controls .annotator-edit{background-position:0 -60px}.annotator-viewer .annotator-controls .annotator-delete{background-position:0 -75px}.annotator-viewer .annotator-controls .annotator-link{background-position:0 -270px}.annotator-editor .annotator-item{position:relative}.annotator-editor .annotator-item label{top:0;display:inline;cursor:pointer;font-size:12px}.annotator-editor .annotator-item input,.annotator-editor .annotator-item textarea{display:block;min-width:100%;padding:10px 8px;border:none;margin:0;color:#3c3c3c;background:0 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;resize:none}.annotator-editor .annotator-item textarea::-webkit-scrollbar{height:8px;width:8px}.annotator-editor .annotator-item textarea::-webkit-scrollbar-track-piece{margin:13px 0 3px;background-color:#e5e5e5;-webkit-border-radius:4px}.annotator-editor .annotator-item textarea::-webkit-scrollbar-thumb:vertical{height:25px;background-color:#ccc;-webkit-border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1)}.annotator-editor .annotator-item textarea::-webkit-scrollbar-thumb:horizontal{width:25px;background-color:#ccc;-webkit-border-radius:4px}.annotator-editor .annotator-item:first-child textarea{min-height:5.5em;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-o-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.annotator-editor .annotator-item input:focus,.annotator-editor .annotator-item textarea:focus{background-color:#f3f3f3;outline:0}.annotator-editor .annotator-item input[type=checkbox],.annotator-editor .annotator-item input[type=radio]{width:auto;min-width:0;padding:0;display:inline;margin:0 4px 0 0;cursor:pointer}.annotator-editor .annotator-checkbox{padding:8px 6px}.annotator-editor .annotator-controls,.annotator-filter,.annotator-filter .annotator-filter-navigation button{text-align:right;padding:3px;border-top:1px solid #d4d4d4;background-color:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),color-stop(.6,#dcdcdc),to(#d2d2d2));background-image:-moz-linear-gradient(to bottom,#f5f5f5,#dcdcdc 60%,#d2d2d2);background-image:-webkit-linear-gradient(to bottom,#f5f5f5,#dcdcdc 60%,#d2d2d2);background-image:linear-gradient(to bottom,#f5f5f5,#dcdcdc 60%,#d2d2d2);-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.7),inset -1px 0 0 rgba(255,255,255,.7),inset 0 1px 0 rgba(255,255,255,.7);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.7),inset -1px 0 0 rgba(255,255,255,.7),inset 0 1px 0 rgba(255,255,255,.7);-o-box-shadow:inset 1px 0 0 rgba(255,255,255,.7),inset -1px 0 0 rgba(255,255,255,.7),inset 0 1px 0 rgba(255,255,255,.7);box-shadow:inset 1px 0 0 rgba(255,255,255,.7),inset -1px 0 0 rgba(255,255,255,.7),inset 0 1px 0 rgba(255,255,255,.7);-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-o-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.annotator-editor.annotator-invert-y .annotator-controls{border-top:none;border-bottom:1px solid #b4b4b4;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-o-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.annotator-editor a,.annotator-filter .annotator-filter-property label{position:relative;display:inline-block;padding:0 6px 0 22px;color:#363636;text-shadow:0 1px 0 rgba(255,255,255,.75);text-decoration:none;line-height:24px;font-size:12px;font-weight:700;border:1px solid #a2a2a2;background-color:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),color-stop(.5,#d2d2d2),color-stop(.5,#bebebe),to(#d2d2d2));background-image:-moz-linear-gradient(to bottom,#f5f5f5,#d2d2d2 50%,#bebebe 50%,#d2d2d2);background-image:-webkit-linear-gradient(to bottom,#f5f5f5,#d2d2d2 50%,#bebebe 50%,#d2d2d2);background-image:linear-gradient(to bottom,#f5f5f5,#d2d2d2 50%,#bebebe 50%,#d2d2d2);-webkit-box-shadow:inset 0 0 5px rgba(255,255,255,.2),inset 0 0 1px rgba(255,255,255,.8);-moz-box-shadow:inset 0 0 5px rgba(255,255,255,.2),inset 0 0 1px rgba(255,255,255,.8);-o-box-shadow:inset 0 0 5px rgba(255,255,255,.2),inset 0 0 1px rgba(255,255,255,.8);box-shadow:inset 0 0 5px rgba(255,255,255,.2),inset 0 0 1px rgba(255,255,255,.8);-webkit-border-radius:5px;-moz-border-radius:5px;-o-border-radius:5px;border-radius:5px}.annotator-editor a:after{position:absolute;top:50%;left:5px;display:block;content:"";width:15px;height:15px;margin-top:-7px;background-position:0 -90px}.annotator-editor a.annotator-focus,.annotator-editor a:focus,.annotator-editor a:hover,.annotator-filter .annotator-filter-active label,.annotator-filter .annotator-filter-navigation button:hover{outline:0;border-color:#435aa0;background-color:#3865f9;background-image:-webkit-gradient(linear,left top,left bottom,from(#7691fb),color-stop(.5,#5075fb),color-stop(.5,#3865f9),to(#3665fa));background-image:-moz-linear-gradient(to bottom,#7691fb,#5075fb 50%,#3865f9 50%,#3665fa);background-image:-webkit-linear-gradient(to bottom,#7691fb,#5075fb 50%,#3865f9 50%,#3665fa);background-image:linear-gradient(to bottom,#7691fb,#5075fb 50%,#3865f9 50%,#3665fa);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.42)}.annotator-editor a:focus:after,.annotator-editor a:hover:after{margin-top:-8px;background-position:0 -105px}.annotator-editor a:active,.annotator-filter .annotator-filter-navigation button:active{border-color:#700c49;background-color:#d12e8e;background-image:-webkit-gradient(linear,left top,left bottom,from(#fc7cca),color-stop(.5,#e85db2),color-stop(.5,#d12e8e),to(#ff009c));background-image:-moz-linear-gradient(to bottom,#fc7cca,#e85db2 50%,#d12e8e 50%,#ff009c);background-image:-webkit-linear-gradient(to bottom,#fc7cca,#e85db2 50%,#d12e8e 50%,#ff009c);background-image:linear-gradient(to bottom,#fc7cca,#e85db2 50%,#d12e8e 50%,#ff009c)}.annotator-editor a.annotator-save:after{background-position:0 -120px}.annotator-editor a.annotator-save.annotator-focus:after,.annotator-editor a.annotator-save:focus:after,.annotator-editor a.annotator-save:hover:after{margin-top:-8px;background-position:0 -135px}.annotator-editor .annotator-widget:after{background-position:0 -30px}.annotator-editor.annotator-invert-y .annotator-widget .annotator-controls{background-color:#f2f2f2}.annotator-editor.annotator-invert-y .annotator-widget:after{background-position:0 -45px;height:11px}.annotator-resize{position:absolute;top:0;right:0;width:12px;height:12px;background-position:2px -150px}.annotator-invert-x .annotator-resize{right:auto;left:0;background-position:0 -195px}.annotator-invert-y .annotator-resize{top:auto;bottom:0;background-position:2px -165px}.annotator-invert-y.annotator-invert-x .annotator-resize{background-position:0 -180px}.annotator-notice{color:#fff;position:fixed;top:-54px;left:0;width:100%;font-size:14px;line-height:50px;text-align:center;background:#000;background:rgba(0,0,0,.9);border-bottom:4px solid #d4d4d4;-webkit-transition:top .4s ease-out;-moz-transition:top .4s ease-out;-o-transition:top .4s ease-out;transition:top .4s ease-out}.annotator-notice-success{border-color:#3665f9}.annotator-notice-error{border-color:#ff7e00}.annotator-notice p{margin:0}.annotator-notice a{color:#fff}.annotator-notice-show{top:0}.annotator-tags{margin-bottom:-2px}.annotator-tags .annotator-tag{display:inline-block;padding:0 8px;margin-bottom:2px;line-height:1.6;font-weight:700;background-color:#e6e6e6;-webkit-border-radius:8px;-moz-border-radius:8px;-o-border-radius:8px;border-radius:8px}.annotator-filter{z-index:1010;position:fixed;top:0;right:0;left:0;text-align:left;line-height:0;border:none;border-bottom:1px solid #878787;padding-left:10px;padding-right:10px;-webkit-border-radius:0;-moz-border-radius:0;-o-border-radius:0;border-radius:0;-webkit-box-shadow:inset 0 -1px 0 rgba(255,255,255,.3);-moz-box-shadow:inset 0 -1px 0 rgba(255,255,255,.3);-o-box-shadow:inset 0 -1px 0 rgba(255,255,255,.3);box-shadow:inset 0 -1px 0 rgba(255,255,255,.3)}.annotator-filter strong{font-size:12px;font-weight:700;color:#3c3c3c;text-shadow:0 1px 0 rgba(255,255,255,.7);position:relative;top:-9px}.annotator-filter .annotator-filter-navigation,.annotator-filter .annotator-filter-property{position:relative;display:inline-block;overflow:hidden;line-height:10px;padding:2px 0;margin-right:8px}.annotator-filter .annotator-filter-navigation button,.annotator-filter .annotator-filter-property label{text-align:left;display:block;float:left;line-height:20px;-webkit-border-radius:10px 0 0 10px;-moz-border-radius:10px 0 0 10px;-o-border-radius:10px 0 0 10px;border-radius:10px 0 0 10px}.annotator-filter .annotator-filter-property label{padding-left:8px}.annotator-filter .annotator-filter-property input{display:block;float:right;-webkit-appearance:none;border:1px solid #878787;border-left:none;padding:2px 4px;line-height:16px;min-height:16px;font-size:12px;width:150px;color:#333;background-color:#f8f8f8;-webkit-border-radius:0 10px 10px 0;-moz-border-radius:0 10px 10px 0;-o-border-radius:0 10px 10px 0;border-radius:0 10px 10px 0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.2);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.2);-o-box-shadow:inset 0 1px 1px rgba(0,0,0,.2);box-shadow:inset 0 1px 1px rgba(0,0,0,.2)}.annotator-filter .annotator-filter-property input:focus{outline:0;background-color:#fff}.annotator-filter .annotator-filter-clear{position:absolute;right:3px;top:6px;border:none;text-indent:-900em;width:15px;height:15px;background-position:0 -90px;opacity:.4}.annotator-filter .annotator-filter-clear:focus,.annotator-filter .annotator-filter-clear:hover{opacity:.8}.annotator-filter .annotator-filter-clear:active{opacity:1}.annotator-filter .annotator-filter-navigation button{border:1px solid #a2a2a2;padding:0;text-indent:-900px;width:20px;min-height:22px;-webkit-box-shadow:inset 0 0 5px rgba(255,255,255,.2),inset 0 0 1px rgba(255,255,255,.8);-moz-box-shadow:inset 0 0 5px rgba(255,255,255,.2),inset 0 0 1px rgba(255,255,255,.8);-o-box-shadow:inset 0 0 5px rgba(255,255,255,.2),inset 0 0 1px rgba(255,255,255,.8);box-shadow:inset 0 0 5px rgba(255,255,255,.2),inset 0 0 1px rgba(255,255,255,.8)}.annotator-filter .annotator-filter-navigation button,.annotator-filter .annotator-filter-navigation button:focus,.annotator-filter .annotator-filter-navigation button:hover{color:transparent}.annotator-filter .annotator-filter-navigation button:after{position:absolute;top:8px;left:8px;content:"";display:block;width:9px;height:9px;background-position:0 -210px}.annotator-filter .annotator-filter-navigation button:hover:after{background-position:0 -225px}.annotator-filter .annotator-filter-navigation .annotator-filter-next{-webkit-border-radius:0 10px 10px 0;-moz-border-radius:0 10px 10px 0;-o-border-radius:0 10px 10px 0;border-radius:0 10px 10px 0;border-left:none}.annotator-filter .annotator-filter-navigation .annotator-filter-next:after{left:auto;right:7px;background-position:0 -240px}.annotator-filter .annotator-filter-navigation .annotator-filter-next:hover:after{background-position:0 -255px}.annotator-hl-active{background:#FFFF0A;background:rgba(255,255,10,.8);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#CCFFFF0A, endColorstr=#CCFFFF0A)"}.annotator-hl-filtered{background-color:transparent}';
12},{}],3:[function(require,module,exports){(function(definition){if(typeof exports==="object"){module.exports=definition()}else if(typeof define==="function"&&define.amd){define(definition)}else{window.BackboneExtend=definition()}})(function(){"use strict";var _={has:function(obj,key){return Object.prototype.hasOwnProperty.call(obj,key)},extend:function(obj){for(var i=1;i<arguments.length;++i){var source=arguments[i];if(source){for(var prop in source){obj[prop]=source[prop]}}}return obj}};var extend=function(protoProps,staticProps){var parent=this;var child;if(protoProps&&_.has(protoProps,"constructor")){child=protoProps.constructor}else{child=function(){return parent.apply(this,arguments)}}_.extend(child,parent,staticProps);var Surrogate=function(){this.constructor=child};Surrogate.prototype=parent.prototype;child.prototype=new Surrogate;if(protoProps)_.extend(child.prototype,protoProps);child.__super__=parent.prototype;return child};return extend})},{}],4:[function(require,module,exports){var process=module.exports={};var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=setTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run()}}queueIndex=-1;len=queue.length}currentQueue=null;draining=false;clearTimeout(timeout)}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1){for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i]}}queue.push(new Item(fun,args));if(queue.length===1&&!draining){setTimeout(drainQueue,0)}};function Item(fun,array){this.fun=fun;this.array=array}Item.prototype.run=function(){this.fun.apply(null,this.array)};process.title="browser";process.browser=true;process.env={};process.argv=[];process.version="";process.versions={};function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")};process.umask=function(){return 0}},{}],5:[function(require,module,exports){(function(process,global){(function(){"use strict";function lib$es6$promise$utils$$objectOrFunction(x){return typeof x==="function"||typeof x==="object"&&x!==null}function lib$es6$promise$utils$$isFunction(x){return typeof x==="function"}function lib$es6$promise$utils$$isMaybeThenable(x){return typeof x==="object"&&x!==null}var lib$es6$promise$utils$$_isArray;if(!Array.isArray){lib$es6$promise$utils$$_isArray=function(x){return Object.prototype.toString.call(x)==="[object Array]"}}else{lib$es6$promise$utils$$_isArray=Array.isArray}var lib$es6$promise$utils$$isArray=lib$es6$promise$utils$$_isArray;var lib$es6$promise$asap$$len=0;var lib$es6$promise$asap$$vertxNext;var lib$es6$promise$asap$$customSchedulerFn;var lib$es6$promise$asap$$asap=function asap(callback,arg){lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len]=callback;lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len+1]=arg;lib$es6$promise$asap$$len+=2;if(lib$es6$promise$asap$$len===2){if(lib$es6$promise$asap$$customSchedulerFn){lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush)}else{lib$es6$promise$asap$$scheduleFlush()}}};function lib$es6$promise$asap$$setScheduler(scheduleFn){lib$es6$promise$asap$$customSchedulerFn=scheduleFn}function lib$es6$promise$asap$$setAsap(asapFn){lib$es6$promise$asap$$asap=asapFn}var lib$es6$promise$asap$$browserWindow=typeof window!=="undefined"?window:undefined;var lib$es6$promise$asap$$browserGlobal=lib$es6$promise$asap$$browserWindow||{};var lib$es6$promise$asap$$BrowserMutationObserver=lib$es6$promise$asap$$browserGlobal.MutationObserver||lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;var lib$es6$promise$asap$$isNode=typeof process!=="undefined"&&{}.toString.call(process)==="[object process]";var lib$es6$promise$asap$$isWorker=typeof Uint8ClampedArray!=="undefined"&&typeof importScripts!=="undefined"&&typeof MessageChannel!=="undefined";function lib$es6$promise$asap$$useNextTick(){return function(){process.nextTick(lib$es6$promise$asap$$flush)}}function lib$es6$promise$asap$$useVertxTimer(){return function(){lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush)}}function lib$es6$promise$asap$$useMutationObserver(){var iterations=0;var observer=new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);var node=document.createTextNode("");observer.observe(node,{characterData:true});return function(){node.data=iterations=++iterations%2}}function lib$es6$promise$asap$$useMessageChannel(){var channel=new MessageChannel;channel.port1.onmessage=lib$es6$promise$asap$$flush;return function(){channel.port2.postMessage(0)}}function lib$es6$promise$asap$$useSetTimeout(){return function(){setTimeout(lib$es6$promise$asap$$flush,1)}}var lib$es6$promise$asap$$queue=new Array(1e3);function lib$es6$promise$asap$$flush(){for(var i=0;i<lib$es6$promise$asap$$len;i+=2){var callback=lib$es6$promise$asap$$queue[i];var arg=lib$es6$promise$asap$$queue[i+1];callback(arg);lib$es6$promise$asap$$queue[i]=undefined;lib$es6$promise$asap$$queue[i+1]=undefined}lib$es6$promise$asap$$len=0}function lib$es6$promise$asap$$attemptVertx(){try{var r=require;var vertx=r("vertx");lib$es6$promise$asap$$vertxNext=vertx.runOnLoop||vertx.runOnContext;return lib$es6$promise$asap$$useVertxTimer()}catch(e){return lib$es6$promise$asap$$useSetTimeout()}}var lib$es6$promise$asap$$scheduleFlush;if(lib$es6$promise$asap$$isNode){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useNextTick()}else if(lib$es6$promise$asap$$BrowserMutationObserver){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useMutationObserver()}else if(lib$es6$promise$asap$$isWorker){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useMessageChannel()}else if(lib$es6$promise$asap$$browserWindow===undefined&&typeof require==="function"){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$attemptVertx()}else{lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useSetTimeout()}function lib$es6$promise$then$$then(onFulfillment,onRejection){var parent=this;var state=parent._state;if(state===lib$es6$promise$$internal$$FULFILLED&&!onFulfillment||state===lib$es6$promise$$internal$$REJECTED&&!onRejection){return this}var child=new this.constructor(lib$es6$promise$$internal$$noop);var result=parent._result;if(state){var callback=arguments[state-1];lib$es6$promise$asap$$asap(function(){lib$es6$promise$$internal$$invokeCallback(state,child,callback,result)})}else{lib$es6$promise$$internal$$subscribe(parent,child,onFulfillment,onRejection)}return child}var lib$es6$promise$then$$default=lib$es6$promise$then$$then;function lib$es6$promise$promise$resolve$$resolve(object){var Constructor=this;if(object&&typeof object==="object"&&object.constructor===Constructor){return object}var promise=new Constructor(lib$es6$promise$$internal$$noop);lib$es6$promise$$internal$$resolve(promise,object);return promise}var lib$es6$promise$promise$resolve$$default=lib$es6$promise$promise$resolve$$resolve;function lib$es6$promise$$internal$$noop(){}var lib$es6$promise$$internal$$PENDING=void 0;var lib$es6$promise$$internal$$FULFILLED=1;var lib$es6$promise$$internal$$REJECTED=2;var lib$es6$promise$$internal$$GET_THEN_ERROR=new lib$es6$promise$$internal$$ErrorObject;function lib$es6$promise$$internal$$selfFulfillment(){return new TypeError("You cannot resolve a promise with itself")}function lib$es6$promise$$internal$$cannotReturnOwn(){return new TypeError("A promises callback cannot return that same promise.")}function lib$es6$promise$$internal$$getThen(promise){try{return promise.then}catch(error){lib$es6$promise$$internal$$GET_THEN_ERROR.error=error;return lib$es6$promise$$internal$$GET_THEN_ERROR}}function lib$es6$promise$$internal$$tryThen(then,value,fulfillmentHandler,rejectionHandler){try{then.call(value,fulfillmentHandler,rejectionHandler)}catch(e){return e}}function lib$es6$promise$$internal$$handleForeignThenable(promise,thenable,then){lib$es6$promise$asap$$asap(function(promise){var sealed=false;var error=lib$es6$promise$$internal$$tryThen(then,thenable,function(value){if(sealed){return}sealed=true;if(thenable!==value){lib$es6$promise$$internal$$resolve(promise,value)}else{lib$es6$promise$$internal$$fulfill(promise,value)}},function(reason){if(sealed){return}sealed=true;lib$es6$promise$$internal$$reject(promise,reason)},"Settle: "+(promise._label||" unknown promise"));if(!sealed&&error){sealed=true;lib$es6$promise$$internal$$reject(promise,error)}},promise)}function lib$es6$promise$$internal$$handleOwnThenable(promise,thenable){if(thenable._state===lib$es6$promise$$internal$$FULFILLED){lib$es6$promise$$internal$$fulfill(promise,thenable._result)}else if(thenable._state===lib$es6$promise$$internal$$REJECTED){lib$es6$promise$$internal$$reject(promise,thenable._result)}else{lib$es6$promise$$internal$$subscribe(thenable,undefined,function(value){lib$es6$promise$$internal$$resolve(promise,value)},function(reason){lib$es6$promise$$internal$$reject(promise,reason)})}}function lib$es6$promise$$internal$$handleMaybeThenable(promise,maybeThenable,then){if(maybeThenable.constructor===promise.constructor&&then===lib$es6$promise$then$$default&&constructor.resolve===lib$es6$promise$promise$resolve$$default){lib$es6$promise$$internal$$handleOwnThenable(promise,maybeThenable)}else{if(then===lib$es6$promise$$internal$$GET_THEN_ERROR){lib$es6$promise$$internal$$reject(promise,lib$es6$promise$$internal$$GET_THEN_ERROR.error)}else if(then===undefined){lib$es6$promise$$internal$$fulfill(promise,maybeThenable)}else if(lib$es6$promise$utils$$isFunction(then)){lib$es6$promise$$internal$$handleForeignThenable(promise,maybeThenable,then)}else{lib$es6$promise$$internal$$fulfill(promise,maybeThenable)}}}function lib$es6$promise$$internal$$resolve(promise,value){if(promise===value){lib$es6$promise$$internal$$reject(promise,lib$es6$promise$$internal$$selfFulfillment())}else if(lib$es6$promise$utils$$objectOrFunction(value)){lib$es6$promise$$internal$$handleMaybeThenable(promise,value,lib$es6$promise$$internal$$getThen(value))}else{lib$es6$promise$$internal$$fulfill(promise,value)}}function lib$es6$promise$$internal$$publishRejection(promise){if(promise._onerror){promise._onerror(promise._result)}lib$es6$promise$$internal$$publish(promise)}function lib$es6$promise$$internal$$fulfill(promise,value){if(promise._state!==lib$es6$promise$$internal$$PENDING){return}promise._result=value;promise._state=lib$es6$promise$$internal$$FULFILLED;if(promise._subscribers.length!==0){lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish,promise)}}function lib$es6$promise$$internal$$reject(promise,reason){if(promise._state!==lib$es6$promise$$internal$$PENDING){return}promise._state=lib$es6$promise$$internal$$REJECTED;promise._result=reason;lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection,promise)}function lib$es6$promise$$internal$$subscribe(parent,child,onFulfillment,onRejection){var subscribers=parent._subscribers;var length=subscribers.length;parent._onerror=null;subscribers[length]=child;subscribers[length+lib$es6$promise$$internal$$FULFILLED]=onFulfillment;subscribers[length+lib$es6$promise$$internal$$REJECTED]=onRejection;if(length===0&&parent._state){lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish,parent)}}function lib$es6$promise$$internal$$publish(promise){var subscribers=promise._subscribers;var settled=promise._state;if(subscribers.length===0){return}var child,callback,detail=promise._result;for(var i=0;i<subscribers.length;i+=3){child=subscribers[i];callback=subscribers[i+settled];if(child){lib$es6$promise$$internal$$invokeCallback(settled,child,callback,detail)}else{callback(detail)}}promise._subscribers.length=0}function lib$es6$promise$$internal$$ErrorObject(){this.error=null}var lib$es6$promise$$internal$$TRY_CATCH_ERROR=new lib$es6$promise$$internal$$ErrorObject;function lib$es6$promise$$internal$$tryCatch(callback,detail){try{return callback(detail)}catch(e){lib$es6$promise$$internal$$TRY_CATCH_ERROR.error=e;return lib$es6$promise$$internal$$TRY_CATCH_ERROR}}function lib$es6$promise$$internal$$invokeCallback(settled,promise,callback,detail){var hasCallback=lib$es6$promise$utils$$isFunction(callback),value,error,succeeded,failed;if(hasCallback){value=lib$es6$promise$$internal$$tryCatch(callback,detail);if(value===lib$es6$promise$$internal$$TRY_CATCH_ERROR){failed=true;error=value.error;value=null}else{succeeded=true}if(promise===value){lib$es6$promise$$internal$$reject(promise,lib$es6$promise$$internal$$cannotReturnOwn());return}}else{value=detail;succeeded=true}if(promise._state!==lib$es6$promise$$internal$$PENDING){}else if(hasCallback&&succeeded){lib$es6$promise$$internal$$resolve(promise,value)}else if(failed){lib$es6$promise$$internal$$reject(promise,error)}else if(settled===lib$es6$promise$$internal$$FULFILLED){lib$es6$promise$$internal$$fulfill(promise,value)}else if(settled===lib$es6$promise$$internal$$REJECTED){lib$es6$promise$$internal$$reject(promise,value)}}function lib$es6$promise$$internal$$initializePromise(promise,resolver){try{resolver(function resolvePromise(value){lib$es6$promise$$internal$$resolve(promise,value)},function rejectPromise(reason){lib$es6$promise$$internal$$reject(promise,reason)})}catch(e){lib$es6$promise$$internal$$reject(promise,e)}}function lib$es6$promise$promise$all$$all(entries){return new lib$es6$promise$enumerator$$default(this,entries).promise}var lib$es6$promise$promise$all$$default=lib$es6$promise$promise$all$$all;function lib$es6$promise$promise$race$$race(entries){var Constructor=this;var promise=new Constructor(lib$es6$promise$$internal$$noop);if(!lib$es6$promise$utils$$isArray(entries)){lib$es6$promise$$internal$$reject(promise,new TypeError("You must pass an array to race."));return promise}var length=entries.length;function onFulfillment(value){lib$es6$promise$$internal$$resolve(promise,value)}function onRejection(reason){lib$es6$promise$$internal$$reject(promise,reason)}for(var i=0;promise._state===lib$es6$promise$$internal$$PENDING&&i<length;i++){lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]),undefined,onFulfillment,onRejection)}return promise}var lib$es6$promise$promise$race$$default=lib$es6$promise$promise$race$$race;function lib$es6$promise$promise$reject$$reject(reason){var Constructor=this;var promise=new Constructor(lib$es6$promise$$internal$$noop);lib$es6$promise$$internal$$reject(promise,reason);return promise}var lib$es6$promise$promise$reject$$default=lib$es6$promise$promise$reject$$reject;var lib$es6$promise$promise$$counter=0;function lib$es6$promise$promise$$needsResolver(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function lib$es6$promise$promise$$needsNew(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}var lib$es6$promise$promise$$default=lib$es6$promise$promise$$Promise;function lib$es6$promise$promise$$Promise(resolver){this._id=lib$es6$promise$promise$$counter++;this._state=undefined;this._result=undefined;this._subscribers=[];if(lib$es6$promise$$internal$$noop!==resolver){typeof resolver!=="function"&&lib$es6$promise$promise$$needsResolver();this instanceof lib$es6$promise$promise$$Promise?lib$es6$promise$$internal$$initializePromise(this,resolver):lib$es6$promise$promise$$needsNew()}}lib$es6$promise$promise$$Promise.all=lib$es6$promise$promise$all$$default;lib$es6$promise$promise$$Promise.race=lib$es6$promise$promise$race$$default;lib$es6$promise$promise$$Promise.resolve=lib$es6$promise$promise$resolve$$default;lib$es6$promise$promise$$Promise.reject=lib$es6$promise$promise$reject$$default;lib$es6$promise$promise$$Promise._setScheduler=lib$es6$promise$asap$$setScheduler;lib$es6$promise$promise$$Promise._setAsap=lib$es6$promise$asap$$setAsap;lib$es6$promise$promise$$Promise._asap=lib$es6$promise$asap$$asap;lib$es6$promise$promise$$Promise.prototype={constructor:lib$es6$promise$promise$$Promise,then:lib$es6$promise$then$$default,"catch":function(onRejection){return this.then(null,onRejection)}};var lib$es6$promise$enumerator$$default=lib$es6$promise$enumerator$$Enumerator;function lib$es6$promise$enumerator$$Enumerator(Constructor,input){this._instanceConstructor=Constructor;this.promise=new Constructor(lib$es6$promise$$internal$$noop);if(Array.isArray(input)){this._input=input;this.length=input.length;this._remaining=input.length;this._result=new Array(this.length);if(this.length===0){lib$es6$promise$$internal$$fulfill(this.promise,this._result)}else{this.length=this.length||0;this._enumerate();if(this._remaining===0){lib$es6$promise$$internal$$fulfill(this.promise,this._result)}}}else{lib$es6$promise$$internal$$reject(this.promise,this._validationError())}}lib$es6$promise$enumerator$$Enumerator.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")};lib$es6$promise$enumerator$$Enumerator.prototype._enumerate=function(){var length=this.length;var input=this._input;for(var i=0;this._state===lib$es6$promise$$internal$$PENDING&&i<length;i++){this._eachEntry(input[i],i)}};lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry=function(entry,i){var c=this._instanceConstructor;var resolve=c.resolve;if(resolve===lib$es6$promise$promise$resolve$$default){var then=lib$es6$promise$$internal$$getThen(entry);if(then===lib$es6$promise$then$$default&&entry._state!==lib$es6$promise$$internal$$PENDING){this._settledAt(entry._state,i,entry._result)}else if(typeof then!=="function"){this._remaining--;this._result[i]=entry}else if(c===lib$es6$promise$promise$$default){var promise=new c(lib$es6$promise$$internal$$noop);lib$es6$promise$$internal$$handleMaybeThenable(promise,entry,then);this._willSettleAt(promise,i)}else{this._willSettleAt(new c(function(resolve){resolve(entry)}),i)}}else{this._willSettleAt(resolve(entry),i)}};lib$es6$promise$enumerator$$Enumerator.prototype._settledAt=function(state,i,value){var promise=this.promise;if(promise._state===lib$es6$promise$$internal$$PENDING){this._remaining--;if(state===lib$es6$promise$$internal$$REJECTED){lib$es6$promise$$internal$$reject(promise,value)}else{this._result[i]=value}}if(this._remaining===0){lib$es6$promise$$internal$$fulfill(promise,this._result)}};lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt=function(promise,i){var enumerator=this;lib$es6$promise$$internal$$subscribe(promise,undefined,function(value){enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED,i,value)},function(reason){enumerator._settledAt(lib$es6$promise$$internal$$REJECTED,i,reason)})};function lib$es6$promise$polyfill$$polyfill(){var local;if(typeof global!=="undefined"){local=global}else if(typeof self!=="undefined"){local=self}else{try{local=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}}var P=local.Promise;if(P&&Object.prototype.toString.call(P.resolve())==="[object Promise]"&&!P.cast){return}local.Promise=lib$es6$promise$promise$$default}var lib$es6$promise$polyfill$$default=lib$es6$promise$polyfill$$polyfill;var lib$es6$promise$umd$$ES6Promise={Promise:lib$es6$promise$promise$$default,polyfill:lib$es6$promise$polyfill$$default};if(typeof define==="function"&&define["amd"]){define(function(){return lib$es6$promise$umd$$ES6Promise})}else if(typeof module!=="undefined"&&module["exports"]){module["exports"]=lib$es6$promise$umd$$ES6Promise}else if(typeof this!=="undefined"){this["ES6Promise"]=lib$es6$promise$umd$$ES6Promise}lib$es6$promise$polyfill$$default()}).call(this)}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{_process:4}],6:[function(require,module,exports){var inserted={};module.exports=function(css,options){if(inserted[css])return;inserted[css]=true;var elem=document.createElement("style");elem.setAttribute("type","text/css");if("textContent"in elem){elem.textContent=css}else{elem.styleSheet.cssText=css}var head=document.getElementsByTagName("head")[0];if(options&&options.prepend){head.insertBefore(elem,head.childNodes[0])}else{head.appendChild(elem)}}},{}],7:[function(require,module,exports){(function(global,factory){if(typeof module==="object"&&typeof module.exports==="object"){module.exports=global.document?factory(global,true):function(w){if(!w.document){throw new Error("jQuery requires a window with a document")}return factory(w)}}else{factory(global)}})(typeof window!=="undefined"?window:this,function(window,noGlobal){var deletedIds=[];var document=window.document;var slice=deletedIds.slice;var concat=deletedIds.concat;var push=deletedIds.push;var indexOf=deletedIds.indexOf;var class2type={};var toString=class2type.toString;var hasOwn=class2type.hasOwnProperty;var support={};var version="1.12.1",jQuery=function(selector,context){return new jQuery.fn.init(selector,context)},rtrim=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,rmsPrefix=/^-ms-/,rdashAlpha=/-([\da-z])/gi,fcamelCase=function(all,letter){return letter.toUpperCase()};jQuery.fn=jQuery.prototype={jquery:version,constructor:jQuery,selector:"",length:0,toArray:function(){return slice.call(this)},get:function(num){return num!=null?num<0?this[num+this.length]:this[num]:slice.call(this)},pushStack:function(elems){var ret=jQuery.merge(this.constructor(),elems);ret.prevObject=this;ret.context=this.context;return ret},each:function(callback){return jQuery.each(this,callback)},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem)}))},slice:function(){return this.pushStack(slice.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j<len?[this[j]]:[])},end:function(){return this.prevObject||this.constructor()},push:push,sort:deletedIds.sort,splice:deletedIds.splice};jQuery.extend=jQuery.fn.extend=function(){var src,copyIsArray,copy,name,options,clone,target=arguments[0]||{},i=1,length=arguments.length,deep=false;if(typeof target==="boolean"){deep=target;target=arguments[i]||{};i++}if(typeof target!=="object"&&!jQuery.isFunction(target)){target={}}if(i===length){target=this;i--}for(;i<length;i++){if((options=arguments[i])!=null){for(name in options){src=target[name];copy=options[name];if(target===copy){continue}if(deep&&copy&&(jQuery.isPlainObject(copy)||(copyIsArray=jQuery.isArray(copy)))){if(copyIsArray){copyIsArray=false;clone=src&&jQuery.isArray(src)?src:[]}else{clone=src&&jQuery.isPlainObject(src)?src:{}}target[name]=jQuery.extend(deep,clone,copy)}else if(copy!==undefined){target[name]=copy}}}}return target};jQuery.extend({expando:"jQuery"+(version+Math.random()).replace(/\D/g,""),isReady:true,error:function(msg){throw new Error(msg)},noop:function(){},isFunction:function(obj){return jQuery.type(obj)==="function"},isArray:Array.isArray||function(obj){return jQuery.type(obj)==="array"},isWindow:function(obj){return obj!=null&&obj==obj.window},isNumeric:function(obj){var realStringObj=obj&&obj.toString();return!jQuery.isArray(obj)&&realStringObj-parseFloat(realStringObj)+1>=0},isEmptyObject:function(obj){var name;for(name in obj){return false}return true},isPlainObject:function(obj){var key;if(!obj||jQuery.type(obj)!=="object"||obj.nodeType||jQuery.isWindow(obj)){return false}try{if(obj.constructor&&!hasOwn.call(obj,"constructor")&&!hasOwn.call(obj.constructor.prototype,"isPrototypeOf")){return false}}catch(e){return false}if(!support.ownFirst){for(key in obj){return hasOwn.call(obj,key)}}for(key in obj){}return key===undefined||hasOwn.call(obj,key)},type:function(obj){if(obj==null){return obj+""}return typeof obj==="object"||typeof obj==="function"?class2type[toString.call(obj)]||"object":typeof obj},globalEval:function(data){if(data&&jQuery.trim(data)){(window.execScript||function(data){window["eval"].call(window,data)})(data)}},camelCase:function(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase)},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase()},each:function(obj,callback){var length,i=0;if(isArrayLike(obj)){length=obj.length;for(;i<length;i++){if(callback.call(obj[i],i,obj[i])===false){break}}}else{for(i in obj){if(callback.call(obj[i],i,obj[i])===false){break}}}return obj},trim:function(text){return text==null?"":(text+"").replace(rtrim,"")},makeArray:function(arr,results){var ret=results||[];if(arr!=null){if(isArrayLike(Object(arr))){jQuery.merge(ret,typeof arr==="string"?[arr]:arr)}else{push.call(ret,arr)}}return ret},inArray:function(elem,arr,i){var len;if(arr){if(indexOf){return indexOf.call(arr,elem,i)}len=arr.length;i=i?i<0?Math.max(0,len+i):i:0;for(;i<len;i++){if(i in arr&&arr[i]===elem){return i}}}return-1},merge:function(first,second){var len=+second.length,j=0,i=first.length;while(j<len){first[i++]=second[j++]}if(len!==len){while(second[j]!==undefined){first[i++]=second[j++]}}first.length=i;return first},grep:function(elems,callback,invert){var callbackInverse,matches=[],i=0,length=elems.length,callbackExpect=!invert;for(;i<length;i++){callbackInverse=!callback(elems[i],i);if(callbackInverse!==callbackExpect){matches.push(elems[i])}}return matches},map:function(elems,callback,arg){var length,value,i=0,ret=[];if(isArrayLike(elems)){length=elems.length;for(;i<length;i++){value=callback(elems[i],i,arg);if(value!=null){ret.push(value)}}}else{for(i in elems){value=callback(elems[i],i,arg);if(value!=null){ret.push(value)}}}return concat.apply([],ret)},guid:1,proxy:function(fn,context){var args,proxy,tmp;if(typeof context==="string"){tmp=fn[context];context=fn;fn=tmp}if(!jQuery.isFunction(fn)){return undefined}args=slice.call(arguments,2);proxy=function(){return fn.apply(context||this,args.concat(slice.call(arguments)))};proxy.guid=fn.guid=fn.guid||jQuery.guid++;return proxy},now:function(){return+new Date},support:support});if(typeof Symbol==="function"){jQuery.fn[Symbol.iterator]=deletedIds[Symbol.iterator]}jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(i,name){class2type["[object "+name+"]"]=name.toLowerCase()});function isArrayLike(obj){var length=!!obj&&"length"in obj&&obj.length,type=jQuery.type(obj);if(type==="function"||jQuery.isWindow(obj)){return false}return type==="array"||length===0||typeof length==="number"&&length>0&&length-1 in obj}var Sizzle=function(window){var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate,setDocument,document,docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains,expando="sizzle"+1*new Date,preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),sortOrder=function(a,b){if(a===b){hasDuplicate=true}return 0},MAX_NEGATIVE=1<<31,hasOwn={}.hasOwnProperty,arr=[],pop=arr.pop,push_native=arr.push,push=arr.push,slice=arr.slice,indexOf=function(list,elem){var i=0,len=list.length;for(;i<len;i++){if(list[i]===elem){return i}}return-1},booleans="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",whitespace="[\\x20\\t\\r\\n\\f]",identifier="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",attributes="\\["+whitespace+"*("+identifier+")(?:"+whitespace+"*([*^$|!~]?=)"+whitespace+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+identifier+"))|)"+whitespace+"*\\]",pseudos=":("+identifier+")(?:\\(("+"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|"+"((?:\\\\.|[^\\\\()[\\]]|"+attributes+")*)|"+".*"+")\\)|)",rwhitespace=new RegExp(whitespace+"+","g"),rtrim=new RegExp("^"+whitespace+"+|((?:^|[^\\\\])(?:\\\\.)*)"+whitespace+"+$","g"),rcomma=new RegExp("^"+whitespace+"*,"+whitespace+"*"),rcombinators=new RegExp("^"+whitespace+"*([>+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+identifier+")"),CLASS:new RegExp("^\\.("+identifier+")"),TAG:new RegExp("^("+identifier+"|[*])"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)},unloadHandler=function(){setDocument()};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var m,i,elem,nid,nidselect,match,groups,newSelector,newContext=context&&context.ownerDocument,nodeType=context?context.nodeType:9;results=results||[];if(typeof selector!=="string"||!selector||nodeType!==1&&nodeType!==9&&nodeType!==11){return results}if(!seed){if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;if(documentIsHTML){if(nodeType!==11&&(match=rquickExpr.exec(selector))){if(m=match[1]){if(nodeType===9){if(elem=context.getElementById(m)){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(newContext&&(elem=newContext.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&!compilerCache[selector+" "]&&(!rbuggyQSA||!rbuggyQSA.test(selector))){if(nodeType!==1){newContext=context;newSelector=selector}else if(context.nodeName.toLowerCase()!=="object"){if(nid=context.getAttribute("id")){nid=nid.replace(rescape,"\\$&")}else{context.setAttribute("id",nid=expando)}groups=tokenize(selector);i=groups.length;nidselect=ridentifier.test(nid)?"#"+nid:"[id='"+nid+"']";while(i--){groups[i]=nidselect+" "+toSelector(groups[i])}newSelector=groups.join(",");newContext=rsibling.test(selector)&&testContext(context.parentNode)||context}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(nid===expando){context.removeAttribute("id")}}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;
13return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=arr.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!=="undefined"&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,parent,doc=node?node.ownerDocument||node:preferredDoc;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=document.documentElement;documentIsHTML=!isXML(document);if((parent=document.defaultView)&&parent.top!==parent){if(parent.addEventListener){parent.addEventListener("unload",unloadHandler,false)}else if(parent.attachEvent){parent.attachEvent("onunload",unloadHandler)}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(document.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(document.getElementsByClassName);support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!document.getElementsByName||!document.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var m=context.getElementById(id);return m?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!=="undefined"){return context.getElementsByTagName(tag)}else if(support.qsa){return context.querySelectorAll(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!=="undefined"&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(document.querySelectorAll)){assert(function(div){docElem.appendChild(div).innerHTML="<a id='"+expando+"'></a>"+"<select id='"+expando+"-\r\\' msallowcapture=''>"+"<option selected=''></option></select>";if(div.querySelectorAll("[msallowcapture^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll("[id~="+expando+"-]").length){rbuggyQSA.push("~=")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}if(!div.querySelectorAll("a#"+expando+"+*").length){rbuggyQSA.push(".#.+[+~]")}});assert(function(div){var input=document.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.matches||docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===document||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===document||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===document?-1:b===document?1:aup?-1:bup?1:sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return document};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&!compilerCache[expr+" "]&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[3]||match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[6]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]){match[2]=match[4]||match[5]||""}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!=="undefined"&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result.replace(rwhitespace," ")+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,uniqueCache,outerCache,node,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType,diff=false;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){node=parent;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){uniqueCache[type]=[dirruns,nodeIndex,diff];break}}}else{if(useCache){node=elem;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex}if(diff===false){while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});uniqueCache[type]=[dirruns,diff]}if(node===elem){break}}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);input[0]=null;return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){text=text.replace(runescape,funescape);return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i<length;i+=2){matchIndexes.push(i)}return matchIndexes}),odd:createPositionalPseudo(function(matchIndexes,length){var i=1;for(;i<length;i+=2){matchIndexes.push(i)}return matchIndexes}),lt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;--i>=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i<length;){matchIndexes.push(i)}return matchIndexes})}};Expr.pseudos["nth"]=Expr.pseudos["eq"];for(i in{radio:true,checkbox:true,file:true,password:true,image:true}){Expr.pseudos[i]=createInputPseudo(i)}for(i in{submit:true,reset:true}){Expr.pseudos[i]=createButtonPseudo(i)}function setFilters(){}setFilters.prototype=Expr.filters=Expr.pseudos;Expr.setFilters=new setFilters;tokenize=Sizzle.tokenize=function(selector,parseOnly){var matched,match,tokens,type,soFar,groups,preFilters,cached=tokenCache[selector+" "];if(cached){return parseOnly?0:cached.slice(0)}soFar=selector;groups=[];preFilters=Expr.preFilter;while(soFar){if(!matched||(match=rcomma.exec(soFar))){if(match){soFar=soFar.slice(match[0].length)||soFar}groups.push(tokens=[])}matched=false;if(match=rcombinators.exec(soFar)){matched=match.shift();tokens.push({value:matched,type:match[0].replace(rtrim," ")});soFar=soFar.slice(matched.length)}for(type in Expr.filter){if((match=matchExpr[type].exec(soFar))&&(!preFilters[type]||(match=preFilters[type](match)))){matched=match.shift();tokens.push({value:matched,type:type,matches:match});soFar=soFar.slice(matched.length)}}if(!matched){break}}return parseOnly?soFar.length:soFar?Sizzle.error(selector):tokenCache(selector,groups).slice(0)};function toSelector(tokens){var i=0,len=tokens.length,selector="";for(;i<len;i++){selector+=tokens[i].value}return selector}function addCombinator(matcher,combinator,base){var dir=combinator.dir,checkNonElements=base&&dir==="parentNode",doneName=done++;return combinator.first?function(elem,context,xml){while(elem=elem[dir]){if(elem.nodeType===1||checkNonElements){return matcher(elem,context,xml)}}}:function(elem,context,xml){var oldCache,uniqueCache,outerCache,newCache=[dirruns,doneName];if(xml){while(elem=elem[dir]){if(elem.nodeType===1||checkNonElements){if(matcher(elem,context,xml)){return true}}}}else{while(elem=elem[dir]){if(elem.nodeType===1||checkNonElements){outerCache=elem[expando]||(elem[expando]={});uniqueCache=outerCache[elem.uniqueID]||(outerCache[elem.uniqueID]={});if((oldCache=uniqueCache[dir])&&oldCache[0]===dirruns&&oldCache[1]===doneName){return newCache[2]=oldCache[2]}else{uniqueCache[dir]=newCache;if(newCache[2]=matcher(elem,context,xml)){return true}}}}}}}function elementMatcher(matchers){return matchers.length>1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i<len;i++){Sizzle(selector,contexts[i],results)}return results}function condense(unmatched,map,filter,context,xml){var elem,newUnmatched=[],i=0,len=unmatched.length,mapped=map!=null;for(;i<len;i++){if(elem=unmatched[i]){if(!filter||filter(elem,context,xml)){newUnmatched.push(elem);if(mapped){map.push(i)}}}}return newUnmatched}function setMatcher(preFilter,selector,matcher,postFilter,postFinder,postSelector){if(postFilter&&!postFilter[expando]){postFilter=setMatcher(postFilter)}if(postFinder&&!postFinder[expando]){postFinder=setMatcher(postFinder,postSelector)}return markFunction(function(seed,results,context,xml){var temp,i,elem,preMap=[],postMap=[],preexisting=results.length,elems=seed||multipleContexts(selector||"*",context.nodeType?[context]:context,[]),matcherIn=preFilter&&(seed||!selector)?condense(elems,preMap,preFilter,context,xml):elems,matcherOut=matcher?postFinder||(seed?preFilter:preexisting||postFilter)?[]:results:matcherIn;if(matcher){matcher(matcherIn,matcherOut,context,xml)}if(postFilter){temp=condense(matcherOut,postMap);postFilter(temp,[],context,xml);i=temp.length;while(i--){if(elem=temp[i]){matcherOut[postMap[i]]=!(matcherIn[postMap[i]]=elem)}}}if(seed){if(postFinder||preFilter){if(postFinder){temp=[];i=matcherOut.length;while(i--){if(elem=matcherOut[i]){temp.push(matcherIn[i]=elem)}}postFinder(null,matcherOut=[],temp,xml)}i=matcherOut.length;while(i--){if((elem=matcherOut[i])&&(temp=postFinder?indexOf(seed,elem):preMap[i])>-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){var ret=!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml));checkContext=null;return ret}];for(;i<len;i++){if(matcher=Expr.relative[tokens[i].type]){matchers=[addCombinator(elementMatcher(matchers),matcher)]}else{matcher=Expr.filter[tokens[i].type].apply(null,tokens[i].matches);if(matcher[expando]){j=++i;for(;j<len;j++){if(Expr.relative[tokens[j].type]){break}}return setMatcher(i>1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i<j&&matcherFromTokens(tokens.slice(i,j)),j<len&&matcherFromTokens(tokens=tokens.slice(j)),j<len&&toSelector(tokens))}matchers.push(matcher)}}return elementMatcher(matchers)}function matcherFromGroupMatchers(elementMatchers,setMatchers){var bySet=setMatchers.length>0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context===document||context||outermost}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;if(!context&&elem.ownerDocument!==document){setDocument(elem);xml=!documentIsHTML}while(matcher=elementMatchers[j++]){if(matcher(elem,context||document,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,!context||rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="<a href='#'></a>";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="<input/>";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}return Sizzle}(window);jQuery.find=Sizzle;jQuery.expr=Sizzle.selectors;jQuery.expr[":"]=jQuery.expr.pseudos;jQuery.uniqueSort=jQuery.unique=Sizzle.uniqueSort;jQuery.text=Sizzle.getText;jQuery.isXMLDoc=Sizzle.isXML;jQuery.contains=Sizzle.contains;var dir=function(elem,dir,until){var matched=[],truncate=until!==undefined;while((elem=elem[dir])&&elem.nodeType!==9){if(elem.nodeType===1){if(truncate&&jQuery(elem).is(until)){break}matched.push(elem)}}return matched};var siblings=function(n,elem){var matched=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){matched.push(n)}}return matched};var rneedsContext=jQuery.expr.match.needsContext;var rsingleTag=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/;var risSimple=/^.[^:#\[\.,]*$/;function winnow(elements,qualifier,not){if(jQuery.isFunction(qualifier)){return jQuery.grep(elements,function(elem,i){return!!qualifier.call(elem,i,elem)!==not})}if(qualifier.nodeType){return jQuery.grep(elements,function(elem){return elem===qualifier!==not})}if(typeof qualifier==="string"){if(risSimple.test(qualifier)){return jQuery.filter(qualifier,elements,not)}qualifier=jQuery.filter(qualifier,elements)}return jQuery.grep(elements,function(elem){return jQuery.inArray(elem,qualifier)>-1!==not})}jQuery.filter=function(expr,elems,not){var elem=elems[0];if(not){expr=":not("+expr+")"}return elems.length===1&&elem.nodeType===1?jQuery.find.matchesSelector(elem,expr)?[elem]:[]:jQuery.find.matches(expr,jQuery.grep(elems,function(elem){return elem.nodeType===1}))};jQuery.fn.extend({find:function(selector){var i,ret=[],self=this,len=self.length;if(typeof selector!=="string"){return this.pushStack(jQuery(selector).filter(function(){for(i=0;i<len;i++){if(jQuery.contains(self[i],this)){return true}}}))}for(i=0;i<len;i++){jQuery.find(selector,self[i],ret)}ret=this.pushStack(len>1?jQuery.unique(ret):ret);ret.selector=this.selector?this.selector+" "+selector:selector;return ret},filter:function(selector){return this.pushStack(winnow(this,selector||[],false))},not:function(selector){return this.pushStack(winnow(this,selector||[],true))},is:function(selector){return!!winnow(this,typeof selector==="string"&&rneedsContext.test(selector)?jQuery(selector):selector||[],false).length}});var rootjQuery,rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,init=jQuery.fn.init=function(selector,context,root){var match,elem;if(!selector){return this}root=root||rootjQuery;if(typeof selector==="string"){if(selector.charAt(0)==="<"&&selector.charAt(selector.length-1)===">"&&selector.length>=3){match=[null,selector,null]}else{match=rquickExpr.exec(selector)}if(match&&(match[1]||!context)){if(match[1]){context=context instanceof jQuery?context[0]:context;jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,true));if(rsingleTag.test(match[1])&&jQuery.isPlainObject(context)){for(match in context){if(jQuery.isFunction(this[match])){this[match](context[match])}else{this.attr(match,context[match])}}}return this}else{elem=document.getElementById(match[2]);if(elem&&elem.parentNode){if(elem.id!==match[2]){return rootjQuery.find(selector)}this.length=1;this[0]=elem}this.context=document;this.selector=selector;return this}}else if(!context||context.jquery){return(context||root).find(selector)}else{return this.constructor(context).find(selector)}}else if(selector.nodeType){this.context=this[0]=selector;this.length=1;return this}else if(jQuery.isFunction(selector)){return typeof root.ready!=="undefined"?root.ready(selector):selector(jQuery)}if(selector.selector!==undefined){this.selector=selector.selector;this.context=selector.context}return jQuery.makeArray(selector,this)};init.prototype=jQuery.fn;rootjQuery=jQuery(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/,guaranteedUnique={children:true,contents:true,next:true,prev:true};jQuery.fn.extend({has:function(target){var i,targets=jQuery(target,this),len=targets.length;return this.filter(function(){for(i=0;i<len;i++){if(jQuery.contains(this,targets[i])){return true}}})},closest:function(selectors,context){var cur,i=0,l=this.length,matched=[],pos=rneedsContext.test(selectors)||typeof selectors!=="string"?jQuery(selectors,context||this.context):0;for(;i<l;i++){for(cur=this[i];cur&&cur!==context;cur=cur.parentNode){if(cur.nodeType<11&&(pos?pos.index(cur)>-1:cur.nodeType===1&&jQuery.find.matchesSelector(cur,selectors))){matched.push(cur);break}}}return this.pushStack(matched.length>1?jQuery.uniqueSort(matched):matched)},index:function(elem){if(!elem){return this[0]&&this[0].parentNode?this.first().prevAll().length:-1}if(typeof elem==="string"){return jQuery.inArray(this[0],jQuery(elem))}return jQuery.inArray(elem.jquery?elem[0]:elem,this)},add:function(selector,context){return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(),jQuery(selector,context))))},addBack:function(selector){return this.add(selector==null?this.prevObject:this.prevObject.filter(selector))}});function sibling(cur,dir){do{cur=cur[dir]}while(cur&&cur.nodeType!==1);return cur}jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&parent.nodeType!==11?parent:null},parents:function(elem){return dir(elem,"parentNode")},parentsUntil:function(elem,i,until){return dir(elem,"parentNode",until)},next:function(elem){return sibling(elem,"nextSibling")},prev:function(elem){return sibling(elem,"previousSibling")},nextAll:function(elem){return dir(elem,"nextSibling")},prevAll:function(elem){return dir(elem,"previousSibling")},nextUntil:function(elem,i,until){return dir(elem,"nextSibling",until)},prevUntil:function(elem,i,until){return dir(elem,"previousSibling",until)},siblings:function(elem){return siblings((elem.parentNode||{}).firstChild,elem)},children:function(elem){return siblings(elem.firstChild)},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.merge([],elem.childNodes)}},function(name,fn){jQuery.fn[name]=function(until,selector){var ret=jQuery.map(this,fn,until);if(name.slice(-5)!=="Until"){selector=until}if(selector&&typeof selector==="string"){ret=jQuery.filter(selector,ret)}if(this.length>1){if(!guaranteedUnique[name]){ret=jQuery.uniqueSort(ret)}if(rparentsprev.test(name)){ret=ret.reverse()}}return this.pushStack(ret)}});var rnotwhite=/\S+/g;function createOptions(options){
14var object={};jQuery.each(options.match(rnotwhite)||[],function(_,flag){object[flag]=true});return object}jQuery.Callbacks=function(options){options=typeof options==="string"?createOptions(options):jQuery.extend({},options);var firing,memory,fired,locked,list=[],queue=[],firingIndex=-1,fire=function(){locked=options.once;fired=firing=true;for(;queue.length;firingIndex=-1){memory=queue.shift();while(++firingIndex<list.length){if(list[firingIndex].apply(memory[0],memory[1])===false&&options.stopOnFalse){firingIndex=list.length;memory=false}}}if(!options.memory){memory=false}firing=false;if(locked){if(memory){list=[]}else{list=""}}},self={add:function(){if(list){if(memory&&!firing){firingIndex=list.length-1;queue.push(memory)}(function add(args){jQuery.each(args,function(_,arg){if(jQuery.isFunction(arg)){if(!options.unique||!self.has(arg)){list.push(arg)}}else if(arg&&arg.length&&jQuery.type(arg)!=="string"){add(arg)}})})(arguments);if(memory&&!firing){fire()}}return this},remove:function(){jQuery.each(arguments,function(_,arg){var index;while((index=jQuery.inArray(arg,list,index))>-1){list.splice(index,1);if(index<=firingIndex){firingIndex--}}});return this},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:list.length>0},empty:function(){if(list){list=[]}return this},disable:function(){locked=queue=[];list=memory="";return this},disabled:function(){return!list},lock:function(){locked=true;if(!memory){self.disable()}return this},locked:function(){return!!locked},fireWith:function(context,args){if(!locked){args=args||[];args=[context,args.slice?args.slice():args];queue.push(args);if(!firing){fire()}}return this},fire:function(){self.fireWith(this,arguments);return this},fired:function(){return!!fired}};return self};jQuery.extend({Deferred:function(func){var tuples=[["resolve","done",jQuery.Callbacks("once memory"),"resolved"],["reject","fail",jQuery.Callbacks("once memory"),"rejected"],["notify","progress",jQuery.Callbacks("memory")]],state="pending",promise={state:function(){return state},always:function(){deferred.done(arguments).fail(arguments);return this},then:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){var fn=jQuery.isFunction(fns[i])&&fns[i];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);if(returned&&jQuery.isFunction(returned.promise)){returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject)}else{newDefer[tuple[0]+"With"](this===promise?newDefer.promise():this,fn?[returned]:arguments)}})});fns=null}).promise()},promise:function(obj){return obj!=null?jQuery.extend(obj,promise):promise}},deferred={};promise.pipe=promise.then;jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[3];promise[tuple[1]]=list.add;if(stateString){list.add(function(){state=stateString},tuples[i^1][2].disable,tuples[2][2].lock)}deferred[tuple[0]]=function(){deferred[tuple[0]+"With"](this===deferred?promise:this,arguments);return this};deferred[tuple[0]+"With"]=list.fireWith});promise.promise(deferred);if(func){func.call(deferred,deferred)}return deferred},when:function(subordinate){var i=0,resolveValues=slice.call(arguments),length=resolveValues.length,remaining=length!==1||subordinate&&jQuery.isFunction(subordinate.promise)?length:0,deferred=remaining===1?subordinate:jQuery.Deferred(),updateFunc=function(i,contexts,values){return function(value){contexts[i]=this;values[i]=arguments.length>1?slice.call(arguments):value;if(values===progressValues){deferred.notifyWith(contexts,values)}else if(!--remaining){deferred.resolveWith(contexts,values)}}},progressValues,progressContexts,resolveContexts;if(length>1){progressValues=new Array(length);progressContexts=new Array(length);resolveContexts=new Array(length);for(;i<length;i++){if(resolveValues[i]&&jQuery.isFunction(resolveValues[i].promise)){resolveValues[i].promise().progress(updateFunc(i,progressContexts,progressValues)).done(updateFunc(i,resolveContexts,resolveValues)).fail(deferred.reject)}else{--remaining}}}if(!remaining){deferred.resolveWith(resolveContexts,resolveValues)}return deferred.promise()}});var readyList;jQuery.fn.ready=function(fn){jQuery.ready.promise().done(fn);return this};jQuery.extend({isReady:false,readyWait:1,holdReady:function(hold){if(hold){jQuery.readyWait++}else{jQuery.ready(true)}},ready:function(wait){if(wait===true?--jQuery.readyWait:jQuery.isReady){return}jQuery.isReady=true;if(wait!==true&&--jQuery.readyWait>0){return}readyList.resolveWith(document,[jQuery]);if(jQuery.fn.triggerHandler){jQuery(document).triggerHandler("ready");jQuery(document).off("ready")}}});function detach(){if(document.addEventListener){document.removeEventListener("DOMContentLoaded",completed);window.removeEventListener("load",completed)}else{document.detachEvent("onreadystatechange",completed);window.detachEvent("onload",completed)}}function completed(){if(document.addEventListener||window.event.type==="load"||document.readyState==="complete"){detach();jQuery.ready()}}jQuery.ready.promise=function(obj){if(!readyList){readyList=jQuery.Deferred();if(document.readyState==="complete"||document.readyState!=="loading"&&!document.documentElement.doScroll){window.setTimeout(jQuery.ready)}else if(document.addEventListener){document.addEventListener("DOMContentLoaded",completed);window.addEventListener("load",completed)}else{document.attachEvent("onreadystatechange",completed);window.attachEvent("onload",completed);var top=false;try{top=window.frameElement==null&&document.documentElement}catch(e){}if(top&&top.doScroll){(function doScrollCheck(){if(!jQuery.isReady){try{top.doScroll("left")}catch(e){return window.setTimeout(doScrollCheck,50)}detach();jQuery.ready()}})()}}}return readyList.promise(obj)};jQuery.ready.promise();var i;for(i in jQuery(support)){break}support.ownFirst=i==="0";support.inlineBlockNeedsLayout=false;jQuery(function(){var val,div,body,container;body=document.getElementsByTagName("body")[0];if(!body||!body.style){return}div=document.createElement("div");container=document.createElement("div");container.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px";body.appendChild(container).appendChild(div);if(typeof div.style.zoom!=="undefined"){div.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";support.inlineBlockNeedsLayout=val=div.offsetWidth===3;if(val){body.style.zoom=1}}body.removeChild(container)});(function(){var div=document.createElement("div");support.deleteExpando=true;try{delete div.test}catch(e){support.deleteExpando=false}div=null})();var acceptData=function(elem){var noData=jQuery.noData[(elem.nodeName+" ").toLowerCase()],nodeType=+elem.nodeType||1;return nodeType!==1&&nodeType!==9?false:!noData||noData!==true&&elem.getAttribute("classid")===noData};var rbrace=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,rmultiDash=/([A-Z])/g;function dataAttr(elem,key,data){if(data===undefined&&elem.nodeType===1){var name="data-"+key.replace(rmultiDash,"-$1").toLowerCase();data=elem.getAttribute(name);if(typeof data==="string"){try{data=data==="true"?true:data==="false"?false:data==="null"?null:+data+""===data?+data:rbrace.test(data)?jQuery.parseJSON(data):data}catch(e){}jQuery.data(elem,key,data)}else{data=undefined}}return data}function isEmptyDataObject(obj){var name;for(name in obj){if(name==="data"&&jQuery.isEmptyObject(obj[name])){continue}if(name!=="toJSON"){return false}}return true}function internalData(elem,name,data,pvt){if(!acceptData(elem)){return}var ret,thisCache,internalKey=jQuery.expando,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[internalKey]:elem[internalKey]&&internalKey;if((!id||!cache[id]||!pvt&&!cache[id].data)&&data===undefined&&typeof name==="string"){return}if(!id){if(isNode){id=elem[internalKey]=deletedIds.pop()||jQuery.guid++}else{id=internalKey}}if(!cache[id]){cache[id]=isNode?{}:{toJSON:jQuery.noop}}if(typeof name==="object"||typeof name==="function"){if(pvt){cache[id]=jQuery.extend(cache[id],name)}else{cache[id].data=jQuery.extend(cache[id].data,name)}}thisCache=cache[id];if(!pvt){if(!thisCache.data){thisCache.data={}}thisCache=thisCache.data}if(data!==undefined){thisCache[jQuery.camelCase(name)]=data}if(typeof name==="string"){ret=thisCache[name];if(ret==null){ret=thisCache[jQuery.camelCase(name)]}}else{ret=thisCache}return ret}function internalRemoveData(elem,name,pvt){if(!acceptData(elem)){return}var thisCache,i,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[jQuery.expando]:jQuery.expando;if(!cache[id]){return}if(name){thisCache=pvt?cache[id]:cache[id].data;if(thisCache){if(!jQuery.isArray(name)){if(name in thisCache){name=[name]}else{name=jQuery.camelCase(name);if(name in thisCache){name=[name]}else{name=name.split(" ")}}}else{name=name.concat(jQuery.map(name,jQuery.camelCase))}i=name.length;while(i--){delete thisCache[name[i]]}if(pvt?!isEmptyDataObject(thisCache):!jQuery.isEmptyObject(thisCache)){return}}}if(!pvt){delete cache[id].data;if(!isEmptyDataObject(cache[id])){return}}if(isNode){jQuery.cleanData([elem],true)}else if(support.deleteExpando||cache!=cache.window){delete cache[id]}else{cache[id]=undefined}}jQuery.extend({cache:{},noData:{"applet ":true,"embed ":true,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(elem){elem=elem.nodeType?jQuery.cache[elem[jQuery.expando]]:elem[jQuery.expando];return!!elem&&!isEmptyDataObject(elem)},data:function(elem,name,data){return internalData(elem,name,data)},removeData:function(elem,name){return internalRemoveData(elem,name)},_data:function(elem,name,data){return internalData(elem,name,data,true)},_removeData:function(elem,name){return internalRemoveData(elem,name,true)}});jQuery.fn.extend({data:function(key,value){var i,name,data,elem=this[0],attrs=elem&&elem.attributes;if(key===undefined){if(this.length){data=jQuery.data(elem);if(elem.nodeType===1&&!jQuery._data(elem,"parsedAttrs")){i=attrs.length;while(i--){if(attrs[i]){name=attrs[i].name;if(name.indexOf("data-")===0){name=jQuery.camelCase(name.slice(5));dataAttr(elem,name,data[name])}}}jQuery._data(elem,"parsedAttrs",true)}}return data}if(typeof key==="object"){return this.each(function(){jQuery.data(this,key)})}return arguments.length>1?this.each(function(){jQuery.data(this,key,value)}):elem?dataAttr(elem,key,jQuery.data(elem,key)):undefined},removeData:function(key){return this.each(function(){jQuery.removeData(this,key)})}});jQuery.extend({queue:function(elem,type,data){var queue;if(elem){type=(type||"fx")+"queue";queue=jQuery._data(elem,type);if(data){if(!queue||jQuery.isArray(data)){queue=jQuery._data(elem,type,jQuery.makeArray(data))}else{queue.push(data)}}return queue||[]}},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function(){jQuery.dequeue(elem,type)};if(fn==="inprogress"){fn=queue.shift();startLength--}if(fn){if(type==="fx"){queue.unshift("inprogress")}delete hooks.stop;fn.call(elem,next,hooks)}if(!startLength&&hooks){hooks.empty.fire()}},_queueHooks:function(elem,type){var key=type+"queueHooks";return jQuery._data(elem,key)||jQuery._data(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){jQuery._removeData(elem,type+"queue");jQuery._removeData(elem,key)})})}});jQuery.fn.extend({queue:function(type,data){var setter=2;if(typeof type!=="string"){data=type;type="fx";setter--}if(arguments.length<setter){return jQuery.queue(this[0],type)}return data===undefined?this:this.each(function(){var queue=jQuery.queue(this,type,data);jQuery._queueHooks(this,type);if(type==="fx"&&queue[0]!=="inprogress"){jQuery.dequeue(this,type)}})},dequeue:function(type){return this.each(function(){jQuery.dequeue(this,type)})},clearQueue:function(type){return this.queue(type||"fx",[])},promise:function(type,obj){var tmp,count=1,defer=jQuery.Deferred(),elements=this,i=this.length,resolve=function(){if(!--count){defer.resolveWith(elements,[elements])}};if(typeof type!=="string"){obj=type;type=undefined}type=type||"fx";while(i--){tmp=jQuery._data(elements[i],type+"queueHooks");if(tmp&&tmp.empty){count++;tmp.empty.add(resolve)}}resolve();return defer.promise(obj)}});(function(){var shrinkWrapBlocksVal;support.shrinkWrapBlocks=function(){if(shrinkWrapBlocksVal!=null){return shrinkWrapBlocksVal}shrinkWrapBlocksVal=false;var div,body,container;body=document.getElementsByTagName("body")[0];if(!body||!body.style){return}div=document.createElement("div");container=document.createElement("div");container.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px";body.appendChild(container).appendChild(div);if(typeof div.style.zoom!=="undefined"){div.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;"+"box-sizing:content-box;display:block;margin:0;border:0;"+"padding:1px;width:1px;zoom:1";div.appendChild(document.createElement("div")).style.width="5px";shrinkWrapBlocksVal=div.offsetWidth!==3}body.removeChild(container);return shrinkWrapBlocksVal}})();var pnum=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;var rcssNum=new RegExp("^(?:([+-])=|)("+pnum+")([a-z%]*)$","i");var cssExpand=["Top","Right","Bottom","Left"];var isHidden=function(elem,el){elem=el||elem;return jQuery.css(elem,"display")==="none"||!jQuery.contains(elem.ownerDocument,elem)};function adjustCSS(elem,prop,valueParts,tween){var adjusted,scale=1,maxIterations=20,currentValue=tween?function(){return tween.cur()}:function(){return jQuery.css(elem,prop,"")},initial=currentValue(),unit=valueParts&&valueParts[3]||(jQuery.cssNumber[prop]?"":"px"),initialInUnit=(jQuery.cssNumber[prop]||unit!=="px"&&+initial)&&rcssNum.exec(jQuery.css(elem,prop));if(initialInUnit&&initialInUnit[3]!==unit){unit=unit||initialInUnit[3];valueParts=valueParts||[];initialInUnit=+initial||1;do{scale=scale||".5";initialInUnit=initialInUnit/scale;jQuery.style(elem,prop,initialInUnit+unit)}while(scale!==(scale=currentValue()/initial)&&scale!==1&&--maxIterations)}if(valueParts){initialInUnit=+initialInUnit||+initial||0;adjusted=valueParts[1]?initialInUnit+(valueParts[1]+1)*valueParts[2]:+valueParts[2];if(tween){tween.unit=unit;tween.start=initialInUnit;tween.end=adjusted}}return adjusted}var access=function(elems,fn,key,value,chainable,emptyGet,raw){var i=0,length=elems.length,bulk=key==null;if(jQuery.type(key)==="object"){chainable=true;for(i in key){access(elems,fn,i,key[i],true,emptyGet,raw)}}else if(value!==undefined){chainable=true;if(!jQuery.isFunction(value)){raw=true}if(bulk){if(raw){fn.call(elems,value);fn=null}else{bulk=fn;fn=function(elem,key,value){return bulk.call(jQuery(elem),value)}}}if(fn){for(;i<length;i++){fn(elems[i],key,raw?value:value.call(elems[i],i,fn(elems[i],key)))}}}return chainable?elems:bulk?fn.call(elems):length?fn(elems[0],key):emptyGet};var rcheckableType=/^(?:checkbox|radio)$/i;var rtagName=/<([\w:-]+)/;var rscriptType=/^$|\/(?:java|ecma)script/i;var rleadingWhitespace=/^\s+/;var nodeNames="abbr|article|aside|audio|bdi|canvas|data|datalist|"+"details|dialog|figcaption|figure|footer|header|hgroup|main|"+"mark|meter|nav|output|picture|progress|section|summary|template|time|video";function createSafeFragment(document){var list=nodeNames.split("|"),safeFrag=document.createDocumentFragment();if(safeFrag.createElement){while(list.length){safeFrag.createElement(list.pop())}}return safeFrag}(function(){var div=document.createElement("div"),fragment=document.createDocumentFragment(),input=document.createElement("input");div.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";support.leadingWhitespace=div.firstChild.nodeType===3;support.tbody=!div.getElementsByTagName("tbody").length;support.htmlSerialize=!!div.getElementsByTagName("link").length;support.html5Clone=document.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>";input.type="checkbox";input.checked=true;fragment.appendChild(input);support.appendChecked=input.checked;div.innerHTML="<textarea>x</textarea>";support.noCloneChecked=!!div.cloneNode(true).lastChild.defaultValue;fragment.appendChild(div);input=document.createElement("input");input.setAttribute("type","radio");input.setAttribute("checked","checked");input.setAttribute("name","t");div.appendChild(input);support.checkClone=div.cloneNode(true).cloneNode(true).lastChild.checked;support.noCloneEvent=!!div.addEventListener;div[jQuery.expando]=1;support.attributes=!div.getAttribute(jQuery.expando)})();var wrapMap={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};wrapMap.optgroup=wrapMap.option;wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;function getAll(context,tag){var elems,elem,i=0,found=typeof context.getElementsByTagName!=="undefined"?context.getElementsByTagName(tag||"*"):typeof context.querySelectorAll!=="undefined"?context.querySelectorAll(tag||"*"):undefined;if(!found){for(found=[],elems=context.childNodes||context;(elem=elems[i])!=null;i++){if(!tag||jQuery.nodeName(elem,tag)){found.push(elem)}else{jQuery.merge(found,getAll(elem,tag))}}}return tag===undefined||tag&&jQuery.nodeName(context,tag)?jQuery.merge([context],found):found}function setGlobalEval(elems,refElements){var elem,i=0;for(;(elem=elems[i])!=null;i++){jQuery._data(elem,"globalEval",!refElements||jQuery._data(refElements[i],"globalEval"))}}var rhtml=/<|&#?\w+;/,rtbody=/<tbody/i;function fixDefaultChecked(elem){if(rcheckableType.test(elem.type)){elem.defaultChecked=elem.checked}}function buildFragment(elems,context,scripts,selection,ignored){var j,elem,contains,tmp,tag,tbody,wrap,l=elems.length,safe=createSafeFragment(context),nodes=[],i=0;for(;i<l;i++){elem=elems[i];if(elem||elem===0){if(jQuery.type(elem)==="object"){jQuery.merge(nodes,elem.nodeType?[elem]:elem)}else if(!rhtml.test(elem)){nodes.push(context.createTextNode(elem))}else{tmp=tmp||safe.appendChild(context.createElement("div"));tag=(rtagName.exec(elem)||["",""])[1].toLowerCase();wrap=wrapMap[tag]||wrapMap._default;tmp.innerHTML=wrap[1]+jQuery.htmlPrefilter(elem)+wrap[2];j=wrap[0];while(j--){tmp=tmp.lastChild}if(!support.leadingWhitespace&&rleadingWhitespace.test(elem)){nodes.push(context.createTextNode(rleadingWhitespace.exec(elem)[0]))}if(!support.tbody){elem=tag==="table"&&!rtbody.test(elem)?tmp.firstChild:wrap[1]==="<table>"&&!rtbody.test(elem)?tmp:0;j=elem&&elem.childNodes.length;while(j--){if(jQuery.nodeName(tbody=elem.childNodes[j],"tbody")&&!tbody.childNodes.length){elem.removeChild(tbody)}}}jQuery.merge(nodes,tmp.childNodes);tmp.textContent="";while(tmp.firstChild){tmp.removeChild(tmp.firstChild)}tmp=safe.lastChild}}}if(tmp){safe.removeChild(tmp)}if(!support.appendChecked){jQuery.grep(getAll(nodes,"input"),fixDefaultChecked)}i=0;while(elem=nodes[i++]){if(selection&&jQuery.inArray(elem,selection)>-1){if(ignored){ignored.push(elem)}continue}contains=jQuery.contains(elem.ownerDocument,elem);tmp=getAll(safe.appendChild(elem),"script");if(contains){setGlobalEval(tmp)}if(scripts){j=0;while(elem=tmp[j++]){if(rscriptType.test(elem.type||"")){scripts.push(elem)}}}}tmp=null;return safe}(function(){var i,eventName,div=document.createElement("div");for(i in{submit:true,change:true,focusin:true}){eventName="on"+i;if(!(support[i]=eventName in window)){div.setAttribute(eventName,"t");support[i]=div.attributes[eventName].expando===false}}div=null})();var rformElems=/^(?:input|select|textarea)$/i,rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,rtypenamespace=/^([^.]*)(?:\.(.+)|)/;function returnTrue(){return true}function returnFalse(){return false}function safeActiveElement(){try{return document.activeElement}catch(err){}}function on(elem,types,selector,data,fn,one){var origFn,type;if(typeof types==="object"){if(typeof selector!=="string"){data=data||selector;selector=undefined}for(type in types){on(elem,type,selector,data,types[type],one)}return elem}if(data==null&&fn==null){fn=selector;data=selector=undefined}else if(fn==null){if(typeof selector==="string"){fn=data;data=undefined}else{fn=data;data=selector;selector=undefined}}if(fn===false){fn=returnFalse}else if(!fn){return elem}if(one===1){origFn=fn;fn=function(event){jQuery().off(event);return origFn.apply(this,arguments)};fn.guid=origFn.guid||(origFn.guid=jQuery.guid++)}return elem.each(function(){jQuery.event.add(this,types,fn,data,selector)})}jQuery.event={global:{},add:function(elem,types,handler,data,selector){var tmp,events,t,handleObjIn,special,eventHandle,handleObj,handlers,type,namespaces,origType,elemData=jQuery._data(elem);if(!elemData){return}if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;selector=handleObjIn.selector}if(!handler.guid){handler.guid=jQuery.guid++}if(!(events=elemData.events)){events=elemData.events={}}if(!(eventHandle=elemData.handle)){eventHandle=elemData.handle=function(e){return typeof jQuery!=="undefined"&&(!e||jQuery.event.triggered!==e.type)?jQuery.event.dispatch.apply(eventHandle.elem,arguments):undefined};eventHandle.elem=elem}types=(types||"").match(rnotwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){continue}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;special=jQuery.event.special[type]||{};handleObj=jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn);if(!(handlers=events[type])){handlers=events[type]=[];handlers.delegateCount=0;if(!special.setup||special.setup.call(elem,data,namespaces,eventHandle)===false){if(elem.addEventListener){elem.addEventListener(type,eventHandle,false)}else if(elem.attachEvent){elem.attachEvent("on"+type,eventHandle)}}}if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid=handler.guid}}if(selector){handlers.splice(handlers.delegateCount++,0,handleObj)}else{handlers.push(handleObj)}jQuery.event.global[type]=true}elem=null},remove:function(elem,types,handler,selector,mappedTypes){var j,handleObj,tmp,origCount,t,events,special,handlers,type,namespaces,origType,elemData=jQuery.hasData(elem)&&jQuery._data(elem);if(!elemData||!(events=elemData.events)){return}types=(types||"").match(rnotwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){for(type in events){jQuery.event.remove(elem,type+types[t],handler,selector,true)}continue}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;handlers=events[type]||[];tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)");origCount=j=handlers.length;while(j--){handleObj=handlers[j];if((mappedTypes||origType===handleObj.origType)&&(!handler||handler.guid===handleObj.guid)&&(!tmp||tmp.test(handleObj.namespace))&&(!selector||selector===handleObj.selector||selector==="**"&&handleObj.selector)){handlers.splice(j,1);if(handleObj.selector){handlers.delegateCount--}if(special.remove){special.remove.call(elem,handleObj)}}}if(origCount&&!handlers.length){if(!special.teardown||special.teardown.call(elem,namespaces,elemData.handle)===false){jQuery.removeEvent(elem,type,elemData.handle)}delete events[type]}}if(jQuery.isEmptyObject(events)){delete elemData.handle;jQuery._removeData(elem,"events")}},trigger:function(event,data,elem,onlyHandlers){var handle,ontype,cur,bubbleType,special,tmp,i,eventPath=[elem||document],type=hasOwn.call(event,"type")?event.type:event,namespaces=hasOwn.call(event,"namespace")?event.namespace.split("."):[];cur=tmp=elem=elem||document;if(elem.nodeType===3||elem.nodeType===8){return}if(rfocusMorph.test(type+jQuery.event.triggered)){return}if(type.indexOf(".")>-1){namespaces=type.split(".");type=namespaces.shift();namespaces.sort()}ontype=type.indexOf(":")<0&&"on"+type;event=event[jQuery.expando]?event:new jQuery.Event(type,typeof event==="object"&&event);event.isTrigger=onlyHandlers?2:3;event.namespace=namespaces.join(".");event.rnamespace=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;event.result=undefined;if(!event.target){event.target=elem}data=data==null?[event]:jQuery.makeArray(data,[event]);special=jQuery.event.special[type]||{};if(!onlyHandlers&&special.trigger&&special.trigger.apply(elem,data)===false){return}if(!onlyHandlers&&!special.noBubble&&!jQuery.isWindow(elem)){bubbleType=special.delegateType||type;if(!rfocusMorph.test(bubbleType+type)){cur=cur.parentNode}for(;cur;cur=cur.parentNode){eventPath.push(cur);tmp=cur}if(tmp===(elem.ownerDocument||document)){eventPath.push(tmp.defaultView||tmp.parentWindow||window)}}i=0;while((cur=eventPath[i++])&&!event.isPropagationStopped()){event.type=i>1?bubbleType:special.bindType||type;handle=(jQuery._data(cur,"events")||{})[event.type]&&jQuery._data(cur,"handle");if(handle){handle.apply(cur,data)}handle=ontype&&cur[ontype];if(handle&&handle.apply&&acceptData(cur)){event.result=handle.apply(cur,data);if(event.result===false){event.preventDefault()}}}event.type=type;if(!onlyHandlers&&!event.isDefaultPrevented()){if((!special._default||special._default.apply(eventPath.pop(),data)===false)&&acceptData(elem)){if(ontype&&elem[type]&&!jQuery.isWindow(elem)){tmp=elem[ontype];if(tmp){elem[ontype]=null}jQuery.event.triggered=type;try{elem[type]()}catch(e){}jQuery.event.triggered=undefined;if(tmp){elem[ontype]=tmp}}}}return event.result},dispatch:function(event){event=jQuery.event.fix(event);var i,j,ret,matched,handleObj,handlerQueue=[],args=slice.call(arguments),handlers=(jQuery._data(this,"events")||{})[event.type]||[],special=jQuery.event.special[event.type]||{};args[0]=event;event.delegateTarget=this;if(special.preDispatch&&special.preDispatch.call(this,event)===false){return}handlerQueue=jQuery.event.handlers.call(this,event,handlers);i=0;while((matched=handlerQueue[i++])&&!event.isPropagationStopped()){event.currentTarget=matched.elem;j=0;while((handleObj=matched.handlers[j++])&&!event.isImmediatePropagationStopped()){if(!event.rnamespace||event.rnamespace.test(handleObj.namespace)){event.handleObj=handleObj;event.data=handleObj.data;ret=((jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler).apply(matched.elem,args);if(ret!==undefined){if((event.result=ret)===false){event.preventDefault();event.stopPropagation()}}}}}if(special.postDispatch){special.postDispatch.call(this,event)}return event.result},handlers:function(event,handlers){var i,matches,sel,handleObj,handlerQueue=[],delegateCount=handlers.delegateCount,cur=event.target;if(delegateCount&&cur.nodeType&&(event.type!=="click"||isNaN(event.button)||event.button<1)){for(;cur!=this;cur=cur.parentNode||this){if(cur.nodeType===1&&(cur.disabled!==true||event.type!=="click")){matches=[];for(i=0;i<delegateCount;i++){handleObj=handlers[i];sel=handleObj.selector+" ";if(matches[sel]===undefined){matches[sel]=handleObj.needsContext?jQuery(sel,this).index(cur)>-1:jQuery.find(sel,this,null,[cur]).length}if(matches[sel]){matches.push(handleObj)}}if(matches.length){handlerQueue.push({elem:cur,handlers:matches})}}}}if(delegateCount<handlers.length){handlerQueue.push({elem:this,handlers:handlers.slice(delegateCount)})}return handlerQueue},fix:function(event){if(event[jQuery.expando]){return event}var i,prop,copy,type=event.type,originalEvent=event,fixHook=this.fixHooks[type];if(!fixHook){this.fixHooks[type]=fixHook=rmouseEvent.test(type)?this.mouseHooks:rkeyEvent.test(type)?this.keyHooks:{}}copy=fixHook.props?this.props.concat(fixHook.props):this.props;event=new jQuery.Event(originalEvent);i=copy.length;while(i--){prop=copy[i];event[prop]=originalEvent[prop]}if(!event.target){event.target=originalEvent.srcElement||document}if(event.target.nodeType===3){event.target=event.target.parentNode}event.metaKey=!!event.metaKey;return fixHook.filter?fixHook.filter(event,originalEvent):event},props:("altKey bubbles cancelable ctrlKey currentTarget detail eventPhase "+"metaKey relatedTarget shiftKey target timeStamp view which").split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(event,original){if(event.which==null){event.which=original.charCode!=null?original.charCode:original.keyCode}return event}},mouseHooks:{props:("button buttons clientX clientY fromElement offsetX offsetY "+"pageX pageY screenX screenY toElement").split(" "),filter:function(event,original){var body,eventDoc,doc,button=original.button,fromElement=original.fromElement;if(event.pageX==null&&original.clientX!=null){eventDoc=event.target.ownerDocument||document;doc=eventDoc.documentElement;body=eventDoc.body;event.pageX=original.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc&&doc.clientLeft||body&&body.clientLeft||0);event.pageY=original.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc&&doc.clientTop||body&&body.clientTop||0)}if(!event.relatedTarget&&fromElement){event.relatedTarget=fromElement===event.target?original.toElement:fromElement}if(!event.which&&button!==undefined){event.which=button&1?1:button&2?3:button&4?2:0}return event}},special:{load:{noBubble:true},focus:{trigger:function(){if(this!==safeActiveElement()&&this.focus){try{this.focus();return false}catch(e){}}},delegateType:"focusin"},blur:{trigger:function(){if(this===safeActiveElement()&&this.blur){this.blur();return false}},delegateType:"focusout"},click:{trigger:function(){if(jQuery.nodeName(this,"input")&&this.type==="checkbox"&&this.click){this.click();return false}},_default:function(event){return jQuery.nodeName(event.target,"a")}},beforeunload:{postDispatch:function(event){if(event.result!==undefined&&event.originalEvent){event.originalEvent.returnValue=event.result}}}},simulate:function(type,elem,event){var e=jQuery.extend(new jQuery.Event,event,{type:type,isSimulated:true});jQuery.event.trigger(e,null,elem);if(e.isDefaultPrevented()){event.preventDefault()}}};jQuery.removeEvent=document.removeEventListener?function(elem,type,handle){if(elem.removeEventListener){elem.removeEventListener(type,handle)}}:function(elem,type,handle){var name="on"+type;if(elem.detachEvent){if(typeof elem[name]==="undefined"){elem[name]=null}elem.detachEvent(name,handle)}};jQuery.Event=function(src,props){if(!(this instanceof jQuery.Event)){return new jQuery.Event(src,props)}if(src&&src.type){this.originalEvent=src;this.type=src.type;this.isDefaultPrevented=src.defaultPrevented||src.defaultPrevented===undefined&&src.returnValue===false?returnTrue:returnFalse}else{this.type=src}if(props){jQuery.extend(this,props)}this.timeStamp=src&&src.timeStamp||jQuery.now();this[jQuery.expando]=true};jQuery.Event.prototype={constructor:jQuery.Event,isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=returnTrue;if(!e){return}if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=returnTrue;if(!e||this.isSimulated){return}if(e.stopPropagation){e.stopPropagation()}e.cancelBubble=true},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=returnTrue;if(e&&e.stopImmediatePropagation){e.stopImmediatePropagation()}this.stopPropagation()}};jQuery.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(orig,fix){jQuery.event.special[orig]={
15delegateType:fix,bindType:fix,handle:function(event){var ret,target=this,related=event.relatedTarget,handleObj=event.handleObj;if(!related||related!==target&&!jQuery.contains(target,related)){event.type=handleObj.origType;ret=handleObj.handler.apply(this,arguments);event.type=fix}return ret}}});if(!support.submit){jQuery.event.special.submit={setup:function(){if(jQuery.nodeName(this,"form")){return false}jQuery.event.add(this,"click._submit keypress._submit",function(e){var elem=e.target,form=jQuery.nodeName(elem,"input")||jQuery.nodeName(elem,"button")?jQuery.prop(elem,"form"):undefined;if(form&&!jQuery._data(form,"submit")){jQuery.event.add(form,"submit._submit",function(event){event._submitBubble=true});jQuery._data(form,"submit",true)}})},postDispatch:function(event){if(event._submitBubble){delete event._submitBubble;if(this.parentNode&&!event.isTrigger){jQuery.event.simulate("submit",this.parentNode,event)}}},teardown:function(){if(jQuery.nodeName(this,"form")){return false}jQuery.event.remove(this,"._submit")}}}if(!support.change){jQuery.event.special.change={setup:function(){if(rformElems.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){jQuery.event.add(this,"propertychange._change",function(event){if(event.originalEvent.propertyName==="checked"){this._justChanged=true}});jQuery.event.add(this,"click._change",function(event){if(this._justChanged&&!event.isTrigger){this._justChanged=false}jQuery.event.simulate("change",this,event)})}return false}jQuery.event.add(this,"beforeactivate._change",function(e){var elem=e.target;if(rformElems.test(elem.nodeName)&&!jQuery._data(elem,"change")){jQuery.event.add(elem,"change._change",function(event){if(this.parentNode&&!event.isSimulated&&!event.isTrigger){jQuery.event.simulate("change",this.parentNode,event)}});jQuery._data(elem,"change",true)}})},handle:function(event){var elem=event.target;if(this!==elem||event.isSimulated||event.isTrigger||elem.type!=="radio"&&elem.type!=="checkbox"){return event.handleObj.handler.apply(this,arguments)}},teardown:function(){jQuery.event.remove(this,"._change");return!rformElems.test(this.nodeName)}}}if(!support.focusin){jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){var handler=function(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event))};jQuery.event.special[fix]={setup:function(){var doc=this.ownerDocument||this,attaches=jQuery._data(doc,fix);if(!attaches){doc.addEventListener(orig,handler,true)}jQuery._data(doc,fix,(attaches||0)+1)},teardown:function(){var doc=this.ownerDocument||this,attaches=jQuery._data(doc,fix)-1;if(!attaches){doc.removeEventListener(orig,handler,true);jQuery._removeData(doc,fix)}else{jQuery._data(doc,fix,attaches)}}}})}jQuery.fn.extend({on:function(types,selector,data,fn){return on(this,types,selector,data,fn)},one:function(types,selector,data,fn){return on(this,types,selector,data,fn,1)},off:function(types,selector,fn){var handleObj,type;if(types&&types.preventDefault&&types.handleObj){handleObj=types.handleObj;jQuery(types.delegateTarget).off(handleObj.namespace?handleObj.origType+"."+handleObj.namespace:handleObj.origType,handleObj.selector,handleObj.handler);return this}if(typeof types==="object"){for(type in types){this.off(type,selector,types[type])}return this}if(selector===false||typeof selector==="function"){fn=selector;selector=undefined}if(fn===false){fn=returnFalse}return this.each(function(){jQuery.event.remove(this,types,fn,selector)})},trigger:function(type,data){return this.each(function(){jQuery.event.trigger(type,data,this)})},triggerHandler:function(type,data){var elem=this[0];if(elem){return jQuery.event.trigger(type,data,elem,true)}}});var rinlinejQuery=/ jQuery\d+="(?:null|\d+)"/g,rnoshimcache=new RegExp("<(?:"+nodeNames+")[\\s/>]","i"),rxhtmlTag=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,rnoInnerhtml=/<script|<style|<link/i,rchecked=/checked\s*(?:[^=]|=\s*.checked.)/i,rscriptTypeMasked=/^true\/(.*)/,rcleanScript=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,safeFragment=createSafeFragment(document),fragmentDiv=safeFragment.appendChild(document.createElement("div"));function manipulationTarget(elem,content){return jQuery.nodeName(elem,"table")&&jQuery.nodeName(content.nodeType!==11?content:content.firstChild,"tr")?elem.getElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.createElement("tbody")):elem}function disableScript(elem){elem.type=(jQuery.find.attr(elem,"type")!==null)+"/"+elem.type;return elem}function restoreScript(elem){var match=rscriptTypeMasked.exec(elem.type);if(match){elem.type=match[1]}else{elem.removeAttribute("type")}return elem}function cloneCopyEvent(src,dest){if(dest.nodeType!==1||!jQuery.hasData(src)){return}var type,i,l,oldData=jQuery._data(src),curData=jQuery._data(dest,oldData),events=oldData.events;if(events){delete curData.handle;curData.events={};for(type in events){for(i=0,l=events[type].length;i<l;i++){jQuery.event.add(dest,type,events[type][i])}}}if(curData.data){curData.data=jQuery.extend({},curData.data)}}function fixCloneNodeIssues(src,dest){var nodeName,e,data;if(dest.nodeType!==1){return}nodeName=dest.nodeName.toLowerCase();if(!support.noCloneEvent&&dest[jQuery.expando]){data=jQuery._data(dest);for(e in data.events){jQuery.removeEvent(dest,e,data.handle)}dest.removeAttribute(jQuery.expando)}if(nodeName==="script"&&dest.text!==src.text){disableScript(dest).text=src.text;restoreScript(dest)}else if(nodeName==="object"){if(dest.parentNode){dest.outerHTML=src.outerHTML}if(support.html5Clone&&(src.innerHTML&&!jQuery.trim(dest.innerHTML))){dest.innerHTML=src.innerHTML}}else if(nodeName==="input"&&rcheckableType.test(src.type)){dest.defaultChecked=dest.checked=src.checked;if(dest.value!==src.value){dest.value=src.value}}else if(nodeName==="option"){dest.defaultSelected=dest.selected=src.defaultSelected}else if(nodeName==="input"||nodeName==="textarea"){dest.defaultValue=src.defaultValue}}function domManip(collection,args,callback,ignored){args=concat.apply([],args);var first,node,hasScripts,scripts,doc,fragment,i=0,l=collection.length,iNoClone=l-1,value=args[0],isFunction=jQuery.isFunction(value);if(isFunction||l>1&&typeof value==="string"&&!support.checkClone&&rchecked.test(value)){return collection.each(function(index){var self=collection.eq(index);if(isFunction){args[0]=value.call(this,index,self.html())}domManip(self,args,callback,ignored)})}if(l){fragment=buildFragment(args,collection[0].ownerDocument,false,collection,ignored);first=fragment.firstChild;if(fragment.childNodes.length===1){fragment=first}if(first||ignored){scripts=jQuery.map(getAll(fragment,"script"),disableScript);hasScripts=scripts.length;for(;i<l;i++){node=fragment;if(i!==iNoClone){node=jQuery.clone(node,true,true);if(hasScripts){jQuery.merge(scripts,getAll(node,"script"))}}callback.call(collection[i],node,i)}if(hasScripts){doc=scripts[scripts.length-1].ownerDocument;jQuery.map(scripts,restoreScript);for(i=0;i<hasScripts;i++){node=scripts[i];if(rscriptType.test(node.type||"")&&!jQuery._data(node,"globalEval")&&jQuery.contains(doc,node)){if(node.src){if(jQuery._evalUrl){jQuery._evalUrl(node.src)}}else{jQuery.globalEval((node.text||node.textContent||node.innerHTML||"").replace(rcleanScript,""))}}}}fragment=first=null}}return collection}function remove(elem,selector,keepData){var node,elems=selector?jQuery.filter(selector,elem):elem,i=0;for(;(node=elems[i])!=null;i++){if(!keepData&&node.nodeType===1){jQuery.cleanData(getAll(node))}if(node.parentNode){if(keepData&&jQuery.contains(node.ownerDocument,node)){setGlobalEval(getAll(node,"script"))}node.parentNode.removeChild(node)}}return elem}jQuery.extend({htmlPrefilter:function(html){return html.replace(rxhtmlTag,"<$1></$2>")},clone:function(elem,dataAndEvents,deepDataAndEvents){var destElements,node,clone,i,srcElements,inPage=jQuery.contains(elem.ownerDocument,elem);if(support.html5Clone||jQuery.isXMLDoc(elem)||!rnoshimcache.test("<"+elem.nodeName+">")){clone=elem.cloneNode(true)}else{fragmentDiv.innerHTML=elem.outerHTML;fragmentDiv.removeChild(clone=fragmentDiv.firstChild)}if((!support.noCloneEvent||!support.noCloneChecked)&&(elem.nodeType===1||elem.nodeType===11)&&!jQuery.isXMLDoc(elem)){destElements=getAll(clone);srcElements=getAll(elem);for(i=0;(node=srcElements[i])!=null;++i){if(destElements[i]){fixCloneNodeIssues(node,destElements[i])}}}if(dataAndEvents){if(deepDataAndEvents){srcElements=srcElements||getAll(elem);destElements=destElements||getAll(clone);for(i=0;(node=srcElements[i])!=null;i++){cloneCopyEvent(node,destElements[i])}}else{cloneCopyEvent(elem,clone)}}destElements=getAll(clone,"script");if(destElements.length>0){setGlobalEval(destElements,!inPage&&getAll(elem,"script"))}destElements=srcElements=node=null;return clone},cleanData:function(elems,forceAcceptData){var elem,type,id,data,i=0,internalKey=jQuery.expando,cache=jQuery.cache,attributes=support.attributes,special=jQuery.event.special;for(;(elem=elems[i])!=null;i++){if(forceAcceptData||acceptData(elem)){id=elem[internalKey];data=id&&cache[id];if(data){if(data.events){for(type in data.events){if(special[type]){jQuery.event.remove(elem,type)}else{jQuery.removeEvent(elem,type,data.handle)}}}if(cache[id]){delete cache[id];if(!attributes&&typeof elem.removeAttribute!=="undefined"){elem.removeAttribute(internalKey)}else{elem[internalKey]=undefined}deletedIds.push(id)}}}}}});jQuery.fn.extend({domManip:domManip,detach:function(selector){return remove(this,selector,true)},remove:function(selector){return remove(this,selector)},text:function(value){return access(this,function(value){return value===undefined?jQuery.text(this):this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(value))},null,value,arguments.length)},append:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.appendChild(elem)}})},prepend:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.insertBefore(elem,target.firstChild)}})},before:function(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this)}})},after:function(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this.nextSibling)}})},empty:function(){var elem,i=0;for(;(elem=this[i])!=null;i++){if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false))}while(elem.firstChild){elem.removeChild(elem.firstChild)}if(elem.options&&jQuery.nodeName(elem,"select")){elem.options.length=0}}return this},clone:function(dataAndEvents,deepDataAndEvents){dataAndEvents=dataAndEvents==null?false:dataAndEvents;deepDataAndEvents=deepDataAndEvents==null?dataAndEvents:deepDataAndEvents;return this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents)})},html:function(value){return access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(value===undefined){return elem.nodeType===1?elem.innerHTML.replace(rinlinejQuery,""):undefined}if(typeof value==="string"&&!rnoInnerhtml.test(value)&&(support.htmlSerialize||!rnoshimcache.test(value))&&(support.leadingWhitespace||!rleadingWhitespace.test(value))&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=jQuery.htmlPrefilter(value);try{for(;i<l;i++){elem=this[i]||{};if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false));elem.innerHTML=value}}elem=0}catch(e){}}if(elem){this.empty().append(value)}},null,value,arguments.length)},replaceWith:function(){var ignored=[];return domManip(this,arguments,function(elem){var parent=this.parentNode;if(jQuery.inArray(this,ignored)<0){jQuery.cleanData(getAll(this));if(parent){parent.replaceChild(elem,this)}}},ignored)}});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){var elems,i=0,ret=[],insert=jQuery(selector),last=insert.length-1;for(;i<=last;i++){elems=i===last?this:this.clone(true);jQuery(insert[i])[original](elems);push.apply(ret,elems.get())}return this.pushStack(ret)}});var iframe,elemdisplay={HTML:"block",BODY:"block"};function actualDisplay(name,doc){var elem=jQuery(doc.createElement(name)).appendTo(doc.body),display=jQuery.css(elem[0],"display");elem.detach();return display}function defaultDisplay(nodeName){var doc=document,display=elemdisplay[nodeName];if(!display){display=actualDisplay(nodeName,doc);if(display==="none"||!display){iframe=(iframe||jQuery("<iframe frameborder='0' width='0' height='0'/>")).appendTo(doc.documentElement);doc=(iframe[0].contentWindow||iframe[0].contentDocument).document;doc.write();doc.close();display=actualDisplay(nodeName,doc);iframe.detach()}elemdisplay[nodeName]=display}return display}var rmargin=/^margin/;var rnumnonpx=new RegExp("^("+pnum+")(?!px)[a-z%]+$","i");var swap=function(elem,options,callback,args){var ret,name,old={};for(name in options){old[name]=elem.style[name];elem.style[name]=options[name]}ret=callback.apply(elem,args||[]);for(name in options){elem.style[name]=old[name]}return ret};var documentElement=document.documentElement;(function(){var pixelPositionVal,pixelMarginRightVal,boxSizingReliableVal,reliableHiddenOffsetsVal,reliableMarginRightVal,reliableMarginLeftVal,container=document.createElement("div"),div=document.createElement("div");if(!div.style){return}div.style.cssText="float:left;opacity:.5";support.opacity=div.style.opacity==="0.5";support.cssFloat=!!div.style.cssFloat;div.style.backgroundClip="content-box";div.cloneNode(true).style.backgroundClip="";support.clearCloneStyle=div.style.backgroundClip==="content-box";container=document.createElement("div");container.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;"+"padding:0;margin-top:1px;position:absolute";div.innerHTML="";container.appendChild(div);support.boxSizing=div.style.boxSizing===""||div.style.MozBoxSizing===""||div.style.WebkitBoxSizing==="";jQuery.extend(support,{reliableHiddenOffsets:function(){if(pixelPositionVal==null){computeStyleTests()}return reliableHiddenOffsetsVal},boxSizingReliable:function(){if(pixelPositionVal==null){computeStyleTests()}return boxSizingReliableVal},pixelMarginRight:function(){if(pixelPositionVal==null){computeStyleTests()}return pixelMarginRightVal},pixelPosition:function(){if(pixelPositionVal==null){computeStyleTests()}return pixelPositionVal},reliableMarginRight:function(){if(pixelPositionVal==null){computeStyleTests()}return reliableMarginRightVal},reliableMarginLeft:function(){if(pixelPositionVal==null){computeStyleTests()}return reliableMarginLeftVal}});function computeStyleTests(){var contents,divStyle,documentElement=document.documentElement;documentElement.appendChild(container);div.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;"+"position:relative;display:block;"+"margin:auto;border:1px;padding:1px;"+"top:1%;width:50%";pixelPositionVal=boxSizingReliableVal=reliableMarginLeftVal=false;pixelMarginRightVal=reliableMarginRightVal=true;if(window.getComputedStyle){divStyle=window.getComputedStyle(div);pixelPositionVal=(divStyle||{}).top!=="1%";reliableMarginLeftVal=(divStyle||{}).marginLeft==="2px";boxSizingReliableVal=(divStyle||{width:"4px"}).width==="4px";div.style.marginRight="50%";pixelMarginRightVal=(divStyle||{marginRight:"4px"}).marginRight==="4px";contents=div.appendChild(document.createElement("div"));contents.style.cssText=div.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;"+"box-sizing:content-box;display:block;margin:0;border:0;padding:0";contents.style.marginRight=contents.style.width="0";div.style.width="1px";reliableMarginRightVal=!parseFloat((window.getComputedStyle(contents)||{}).marginRight);div.removeChild(contents)}div.style.display="none";reliableHiddenOffsetsVal=div.getClientRects().length===0;if(reliableHiddenOffsetsVal){div.style.display="";div.innerHTML="<table><tr><td></td><td>t</td></tr></table>";contents=div.getElementsByTagName("td");contents[0].style.cssText="margin:0;border:0;padding:0;display:none";reliableHiddenOffsetsVal=contents[0].offsetHeight===0;if(reliableHiddenOffsetsVal){contents[0].style.display="";contents[1].style.display="none";reliableHiddenOffsetsVal=contents[0].offsetHeight===0}}documentElement.removeChild(container)}})();var getStyles,curCSS,rposition=/^(top|right|bottom|left)$/;if(window.getComputedStyle){getStyles=function(elem){var view=elem.ownerDocument.defaultView;if(!view||!view.opener){view=window}return view.getComputedStyle(elem)};curCSS=function(elem,name,computed){var width,minWidth,maxWidth,ret,style=elem.style;computed=computed||getStyles(elem);ret=computed?computed.getPropertyValue(name)||computed[name]:undefined;if((ret===""||ret===undefined)&&!jQuery.contains(elem.ownerDocument,elem)){ret=jQuery.style(elem,name)}if(computed){if(!support.pixelMarginRight()&&rnumnonpx.test(ret)&&rmargin.test(name)){width=style.width;minWidth=style.minWidth;maxWidth=style.maxWidth;style.minWidth=style.maxWidth=style.width=ret;ret=computed.width;style.width=width;style.minWidth=minWidth;style.maxWidth=maxWidth}}return ret===undefined?ret:ret+""}}else if(documentElement.currentStyle){getStyles=function(elem){return elem.currentStyle};curCSS=function(elem,name,computed){var left,rs,rsLeft,ret,style=elem.style;computed=computed||getStyles(elem);ret=computed?computed[name]:undefined;if(ret==null&&style&&style[name]){ret=style[name]}if(rnumnonpx.test(ret)&&!rposition.test(name)){left=style.left;rs=elem.runtimeStyle;rsLeft=rs&&rs.left;if(rsLeft){rs.left=elem.currentStyle.left}style.left=name==="fontSize"?"1em":ret;ret=style.pixelLeft+"px";style.left=left;if(rsLeft){rs.left=rsLeft}}return ret===undefined?ret:ret+""||"auto"}}function addGetHookIf(conditionFn,hookFn){return{get:function(){if(conditionFn()){delete this.get;return}return(this.get=hookFn).apply(this,arguments)}}}var ralpha=/alpha\([^)]*\)/i,ropacity=/opacity\s*=\s*([^)]*)/i,rdisplayswap=/^(none|table(?!-c[ea]).+)/,rnumsplit=new RegExp("^("+pnum+")(.*)$","i"),cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:"0",fontWeight:"400"},cssPrefixes=["Webkit","O","Moz","ms"],emptyStyle=document.createElement("div").style;function vendorPropName(name){if(name in emptyStyle){return name}var capName=name.charAt(0).toUpperCase()+name.slice(1),i=cssPrefixes.length;while(i--){name=cssPrefixes[i]+capName;if(name in emptyStyle){return name}}}function showHide(elements,show){var display,elem,hidden,values=[],index=0,length=elements.length;for(;index<length;index++){elem=elements[index];if(!elem.style){continue}values[index]=jQuery._data(elem,"olddisplay");display=elem.style.display;if(show){if(!values[index]&&display==="none"){elem.style.display=""}if(elem.style.display===""&&isHidden(elem)){values[index]=jQuery._data(elem,"olddisplay",defaultDisplay(elem.nodeName))}}else{hidden=isHidden(elem);if(display&&display!=="none"||!hidden){jQuery._data(elem,"olddisplay",hidden?display:jQuery.css(elem,"display"))}}}for(index=0;index<length;index++){elem=elements[index];if(!elem.style){continue}if(!show||elem.style.display==="none"||elem.style.display===""){elem.style.display=show?values[index]||"":"none"}}return elements}function setPositiveNumber(elem,value,subtract){var matches=rnumsplit.exec(value);return matches?Math.max(0,matches[1]-(subtract||0))+(matches[2]||"px"):value}function augmentWidthOrHeight(elem,name,extra,isBorderBox,styles){var i=extra===(isBorderBox?"border":"content")?4:name==="width"?1:0,val=0;for(;i<4;i+=2){if(extra==="margin"){val+=jQuery.css(elem,extra+cssExpand[i],true,styles)}if(isBorderBox){if(extra==="content"){val-=jQuery.css(elem,"padding"+cssExpand[i],true,styles)}if(extra!=="margin"){val-=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles)}}else{val+=jQuery.css(elem,"padding"+cssExpand[i],true,styles);if(extra!=="padding"){val+=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles)}}}return val}function getWidthOrHeight(elem,name,extra){var valueIsBorderBox=true,val=name==="width"?elem.offsetWidth:elem.offsetHeight,styles=getStyles(elem),isBorderBox=support.boxSizing&&jQuery.css(elem,"boxSizing",false,styles)==="border-box";if(document.msFullscreenElement&&window.top!==window){if(elem.getClientRects().length){val=Math.round(elem.getBoundingClientRect()[name]*100)}}if(val<=0||val==null){val=curCSS(elem,name,styles);if(val<0||val==null){val=elem.style[name]}if(rnumnonpx.test(val)){return val}valueIsBorderBox=isBorderBox&&(support.boxSizingReliable()||val===elem.style[name]);val=parseFloat(val)||0}return val+augmentWidthOrHeight(elem,name,extra||(isBorderBox?"border":"content"),valueIsBorderBox,styles)+"px"}jQuery.extend({cssHooks:{opacity:{get:function(elem,computed){if(computed){var ret=curCSS(elem,"opacity");return ret===""?"1":ret}}}},cssNumber:{animationIterationCount:true,columnCount:true,fillOpacity:true,flexGrow:true,flexShrink:true,fontWeight:true,lineHeight:true,opacity:true,order:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":support.cssFloat?"cssFloat":"styleFloat"},style:function(elem,name,value,extra){if(!elem||elem.nodeType===3||elem.nodeType===8||!elem.style){return}var ret,type,hooks,origName=jQuery.camelCase(name),style=elem.style;name=jQuery.cssProps[origName]||(jQuery.cssProps[origName]=vendorPropName(origName)||origName);hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName];if(value!==undefined){type=typeof value;if(type==="string"&&(ret=rcssNum.exec(value))&&ret[1]){value=adjustCSS(elem,name,ret);type="number"}if(value==null||value!==value){return}if(type==="number"){value+=ret&&ret[3]||(jQuery.cssNumber[origName]?"":"px")}if(!support.clearCloneStyle&&value===""&&name.indexOf("background")===0){style[name]="inherit"}if(!hooks||!("set"in hooks)||(value=hooks.set(elem,value,extra))!==undefined){try{style[name]=value}catch(e){}}}else{if(hooks&&"get"in hooks&&(ret=hooks.get(elem,false,extra))!==undefined){return ret}return style[name]}},css:function(elem,name,extra,styles){var num,val,hooks,origName=jQuery.camelCase(name);name=jQuery.cssProps[origName]||(jQuery.cssProps[origName]=vendorPropName(origName)||origName);hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName];if(hooks&&"get"in hooks){val=hooks.get(elem,true,extra)}if(val===undefined){val=curCSS(elem,name,styles)}if(val==="normal"&&name in cssNormalTransform){val=cssNormalTransform[name]}if(extra===""||extra){num=parseFloat(val);return extra===true||isFinite(num)?num||0:val}return val}});jQuery.each(["height","width"],function(i,name){jQuery.cssHooks[name]={get:function(elem,computed,extra){if(computed){return rdisplayswap.test(jQuery.css(elem,"display"))&&elem.offsetWidth===0?swap(elem,cssShow,function(){return getWidthOrHeight(elem,name,extra)}):getWidthOrHeight(elem,name,extra)}},set:function(elem,value,extra){var styles=extra&&getStyles(elem);return setPositiveNumber(elem,value,extra?augmentWidthOrHeight(elem,name,extra,support.boxSizing&&jQuery.css(elem,"boxSizing",false,styles)==="border-box",styles):0)}}});if(!support.opacity){jQuery.cssHooks.opacity={get:function(elem,computed){return ropacity.test((computed&&elem.currentStyle?elem.currentStyle.filter:elem.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":computed?"1":""},set:function(elem,value){var style=elem.style,currentStyle=elem.currentStyle,opacity=jQuery.isNumeric(value)?"alpha(opacity="+value*100+")":"",filter=currentStyle&&currentStyle.filter||style.filter||"";style.zoom=1;if((value>=1||value==="")&&jQuery.trim(filter.replace(ralpha,""))===""&&style.removeAttribute){style.removeAttribute("filter");if(value===""||currentStyle&&!currentStyle.filter){return}}style.filter=ralpha.test(filter)?filter.replace(ralpha,opacity):filter+" "+opacity}}}jQuery.cssHooks.marginRight=addGetHookIf(support.reliableMarginRight,function(elem,computed){if(computed){return swap(elem,{display:"inline-block"},curCSS,[elem,"marginRight"])}});jQuery.cssHooks.marginLeft=addGetHookIf(support.reliableMarginLeft,function(elem,computed){if(computed){return(parseFloat(curCSS(elem,"marginLeft"))||(jQuery.contains(elem.ownerDocument,elem)?elem.getBoundingClientRect().left-swap(elem,{marginLeft:0},function(){return elem.getBoundingClientRect().left}):0))+"px"}});jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix+suffix]={expand:function(value){var i=0,expanded={},parts=typeof value==="string"?value.split(" "):[value];for(;i<4;i++){expanded[prefix+cssExpand[i]+suffix]=parts[i]||parts[i-2]||parts[0]}return expanded}};if(!rmargin.test(prefix)){jQuery.cssHooks[prefix+suffix].set=setPositiveNumber}});jQuery.fn.extend({css:function(name,value){return access(this,function(elem,name,value){var styles,len,map={},i=0;if(jQuery.isArray(name)){styles=getStyles(elem);len=name.length;for(;i<len;i++){map[name[i]]=jQuery.css(elem,name[i],false,styles)}return map}return value!==undefined?jQuery.style(elem,name,value):jQuery.css(elem,name)},name,value,arguments.length>1)},show:function(){return showHide(this,true)},hide:function(){return showHide(this)},toggle:function(state){if(typeof state==="boolean"){return state?this.show():this.hide()}return this.each(function(){if(isHidden(this)){jQuery(this).show()}else{jQuery(this).hide()}})}});function Tween(elem,options,prop,end,easing){return new Tween.prototype.init(elem,options,prop,end,easing)}jQuery.Tween=Tween;Tween.prototype={constructor:Tween,init:function(elem,options,prop,end,easing,unit){this.elem=elem;this.prop=prop;this.easing=easing||jQuery.easing._default;this.options=options;this.start=this.now=this.cur();this.end=end;this.unit=unit||(jQuery.cssNumber[prop]?"":"px")},cur:function(){var hooks=Tween.propHooks[this.prop];return hooks&&hooks.get?hooks.get(this):Tween.propHooks._default.get(this)},run:function(percent){var eased,hooks=Tween.propHooks[this.prop];if(this.options.duration){this.pos=eased=jQuery.easing[this.easing](percent,this.options.duration*percent,0,1,this.options.duration)}else{this.pos=eased=percent}this.now=(this.end-this.start)*eased+this.start;if(this.options.step){this.options.step.call(this.elem,this.now,this)}if(hooks&&hooks.set){hooks.set(this)}else{Tween.propHooks._default.set(this)}return this}};Tween.prototype.init.prototype=Tween.prototype;Tween.propHooks={_default:{get:function(tween){var result;if(tween.elem.nodeType!==1||tween.elem[tween.prop]!=null&&tween.elem.style[tween.prop]==null){return tween.elem[tween.prop]}result=jQuery.css(tween.elem,tween.prop,"");return!result||result==="auto"?0:result},set:function(tween){if(jQuery.fx.step[tween.prop]){jQuery.fx.step[tween.prop](tween)}else if(tween.elem.nodeType===1&&(tween.elem.style[jQuery.cssProps[tween.prop]]!=null||jQuery.cssHooks[tween.prop])){jQuery.style(tween.elem,tween.prop,tween.now+tween.unit)}else{tween.elem[tween.prop]=tween.now}}}};Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(tween){if(tween.elem.nodeType&&tween.elem.parentNode){tween.elem[tween.prop]=tween.now}}};jQuery.easing={linear:function(p){return p},swing:function(p){return.5-Math.cos(p*Math.PI)/2},_default:"swing"};jQuery.fx=Tween.prototype.init;jQuery.fx.step={};var fxNow,timerId,rfxtypes=/^(?:toggle|show|hide)$/,rrun=/queueHooks$/;function createFxNow(){window.setTimeout(function(){fxNow=undefined});return fxNow=jQuery.now()}function genFx(type,includeWidth){var which,attrs={height:type},i=0;includeWidth=includeWidth?1:0;for(;i<4;i+=2-includeWidth){which=cssExpand[i];attrs["margin"+which]=attrs["padding"+which]=type}if(includeWidth){attrs.opacity=attrs.width=type}return attrs}function createTween(value,prop,animation){var tween,collection=(Animation.tweeners[prop]||[]).concat(Animation.tweeners["*"]),index=0,length=collection.length;for(;index<length;index++){if(tween=collection[index].call(animation,prop,value)){return tween}}}function defaultPrefilter(elem,props,opts){var prop,value,toggle,tween,hooks,oldfire,display,checkDisplay,anim=this,orig={},style=elem.style,hidden=elem.nodeType&&isHidden(elem),dataShow=jQuery._data(elem,"fxshow");if(!opts.queue){hooks=jQuery._queueHooks(elem,"fx");if(hooks.unqueued==null){hooks.unqueued=0;oldfire=hooks.empty.fire;hooks.empty.fire=function(){if(!hooks.unqueued){oldfire()}}}hooks.unqueued++;anim.always(function(){anim.always(function(){hooks.unqueued--;if(!jQuery.queue(elem,"fx").length){hooks.empty.fire()}})})}if(elem.nodeType===1&&("height"in props||"width"in props)){opts.overflow=[style.overflow,style.overflowX,style.overflowY];display=jQuery.css(elem,"display");checkDisplay=display==="none"?jQuery._data(elem,"olddisplay")||defaultDisplay(elem.nodeName):display;if(checkDisplay==="inline"&&jQuery.css(elem,"float")==="none"){if(!support.inlineBlockNeedsLayout||defaultDisplay(elem.nodeName)==="inline"){style.display="inline-block"}else{style.zoom=1}}}if(opts.overflow){style.overflow="hidden";if(!support.shrinkWrapBlocks()){anim.always(function(){style.overflow=opts.overflow[0];style.overflowX=opts.overflow[1];style.overflowY=opts.overflow[2]})}}for(prop in props){value=props[prop];if(rfxtypes.exec(value)){delete props[prop];toggle=toggle||value==="toggle";if(value===(hidden?"hide":"show")){if(value==="show"&&dataShow&&dataShow[prop]!==undefined){hidden=true}else{continue}}orig[prop]=dataShow&&dataShow[prop]||jQuery.style(elem,prop)}else{display=undefined}}if(!jQuery.isEmptyObject(orig)){if(dataShow){if("hidden"in dataShow){hidden=dataShow.hidden}}else{dataShow=jQuery._data(elem,"fxshow",{})}if(toggle){dataShow.hidden=!hidden}if(hidden){jQuery(elem).show()}else{anim.done(function(){jQuery(elem).hide()})}anim.done(function(){var prop;jQuery._removeData(elem,"fxshow");for(prop in orig){jQuery.style(elem,prop,orig[prop])}});for(prop in orig){tween=createTween(hidden?dataShow[prop]:0,prop,anim);if(!(prop in dataShow)){dataShow[prop]=tween.start;if(hidden){tween.end=tween.start;tween.start=prop==="width"||prop==="height"?1:0}}}}else if((display==="none"?defaultDisplay(elem.nodeName):display)==="inline"){style.display=display}}function propFilter(props,specialEasing){var index,name,easing,value,hooks;for(index in props){name=jQuery.camelCase(index);easing=specialEasing[name];value=props[index];if(jQuery.isArray(value)){easing=value[1];value=props[index]=value[0]}if(index!==name){props[name]=value;delete props[index]}hooks=jQuery.cssHooks[name];if(hooks&&"expand"in hooks){value=hooks.expand(value);delete props[name];for(index in value){if(!(index in props)){props[index]=value[index];specialEasing[index]=easing}}}else{specialEasing[name]=easing}}}function Animation(elem,properties,options){var result,stopped,index=0,length=Animation.prefilters.length,deferred=jQuery.Deferred().always(function(){delete tick.elem}),tick=function(){if(stopped){return false}var currentTime=fxNow||createFxNow(),remaining=Math.max(0,animation.startTime+animation.duration-currentTime),temp=remaining/animation.duration||0,percent=1-temp,index=0,length=animation.tweens.length;for(;index<length;index++){animation.tweens[index].run(percent)}deferred.notifyWith(elem,[animation,percent,remaining]);if(percent<1&&length){return remaining}else{deferred.resolveWith(elem,[animation]);return false}},animation=deferred.promise({elem:elem,props:jQuery.extend({},properties),opts:jQuery.extend(true,{specialEasing:{},easing:jQuery.easing._default},options),originalProperties:properties,originalOptions:options,startTime:fxNow||createFxNow(),duration:options.duration,tweens:[],createTween:function(prop,end){var tween=jQuery.Tween(elem,animation.opts,prop,end,animation.opts.specialEasing[prop]||animation.opts.easing);animation.tweens.push(tween);return tween},stop:function(gotoEnd){var index=0,length=gotoEnd?animation.tweens.length:0;if(stopped){return this}stopped=true;for(;index<length;index++){animation.tweens[index].run(1)}if(gotoEnd){deferred.notifyWith(elem,[animation,1,0]);deferred.resolveWith(elem,[animation,gotoEnd]);
16}else{deferred.rejectWith(elem,[animation,gotoEnd])}return this}}),props=animation.props;propFilter(props,animation.opts.specialEasing);for(;index<length;index++){result=Animation.prefilters[index].call(animation,elem,props,animation.opts);if(result){if(jQuery.isFunction(result.stop)){jQuery._queueHooks(animation.elem,animation.opts.queue).stop=jQuery.proxy(result.stop,result)}return result}}jQuery.map(props,createTween,animation);if(jQuery.isFunction(animation.opts.start)){animation.opts.start.call(elem,animation)}jQuery.fx.timer(jQuery.extend(tick,{elem:elem,anim:animation,queue:animation.opts.queue}));return animation.progress(animation.opts.progress).done(animation.opts.done,animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always)}jQuery.Animation=jQuery.extend(Animation,{tweeners:{"*":[function(prop,value){var tween=this.createTween(prop,value);adjustCSS(tween.elem,prop,rcssNum.exec(value),tween);return tween}]},tweener:function(props,callback){if(jQuery.isFunction(props)){callback=props;props=["*"]}else{props=props.match(rnotwhite)}var prop,index=0,length=props.length;for(;index<length;index++){prop=props[index];Animation.tweeners[prop]=Animation.tweeners[prop]||[];Animation.tweeners[prop].unshift(callback)}},prefilters:[defaultPrefilter],prefilter:function(callback,prepend){if(prepend){Animation.prefilters.unshift(callback)}else{Animation.prefilters.push(callback)}}});jQuery.speed=function(speed,easing,fn){var opt=speed&&typeof speed==="object"?jQuery.extend({},speed):{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!jQuery.isFunction(easing)&&easing};opt.duration=jQuery.fx.off?0:typeof opt.duration==="number"?opt.duration:opt.duration in jQuery.fx.speeds?jQuery.fx.speeds[opt.duration]:jQuery.fx.speeds._default;if(opt.queue==null||opt.queue===true){opt.queue="fx"}opt.old=opt.complete;opt.complete=function(){if(jQuery.isFunction(opt.old)){opt.old.call(this)}if(opt.queue){jQuery.dequeue(this,opt.queue)}};return opt};jQuery.fn.extend({fadeTo:function(speed,to,easing,callback){return this.filter(isHidden).css("opacity",0).show().end().animate({opacity:to},speed,easing,callback)},animate:function(prop,speed,easing,callback){var empty=jQuery.isEmptyObject(prop),optall=jQuery.speed(speed,easing,callback),doAnimation=function(){var anim=Animation(this,jQuery.extend({},prop),optall);if(empty||jQuery._data(this,"finish")){anim.stop(true)}};doAnimation.finish=doAnimation;return empty||optall.queue===false?this.each(doAnimation):this.queue(optall.queue,doAnimation)},stop:function(type,clearQueue,gotoEnd){var stopQueue=function(hooks){var stop=hooks.stop;delete hooks.stop;stop(gotoEnd)};if(typeof type!=="string"){gotoEnd=clearQueue;clearQueue=type;type=undefined}if(clearQueue&&type!==false){this.queue(type||"fx",[])}return this.each(function(){var dequeue=true,index=type!=null&&type+"queueHooks",timers=jQuery.timers,data=jQuery._data(this);if(index){if(data[index]&&data[index].stop){stopQueue(data[index])}}else{for(index in data){if(data[index]&&data[index].stop&&rrun.test(index)){stopQueue(data[index])}}}for(index=timers.length;index--;){if(timers[index].elem===this&&(type==null||timers[index].queue===type)){timers[index].anim.stop(gotoEnd);dequeue=false;timers.splice(index,1)}}if(dequeue||!gotoEnd){jQuery.dequeue(this,type)}})},finish:function(type){if(type!==false){type=type||"fx"}return this.each(function(){var index,data=jQuery._data(this),queue=data[type+"queue"],hooks=data[type+"queueHooks"],timers=jQuery.timers,length=queue?queue.length:0;data.finish=true;jQuery.queue(this,type,[]);if(hooks&&hooks.stop){hooks.stop.call(this,true)}for(index=timers.length;index--;){if(timers[index].elem===this&&timers[index].queue===type){timers[index].anim.stop(true);timers.splice(index,1)}}for(index=0;index<length;index++){if(queue[index]&&queue[index].finish){queue[index].finish.call(this)}}delete data.finish})}});jQuery.each(["toggle","show","hide"],function(i,name){var cssFn=jQuery.fn[name];jQuery.fn[name]=function(speed,easing,callback){return speed==null||typeof speed==="boolean"?cssFn.apply(this,arguments):this.animate(genFx(name,true),speed,easing,callback)}});jQuery.each({slideDown:genFx("show"),slideUp:genFx("hide"),slideToggle:genFx("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(name,props){jQuery.fn[name]=function(speed,easing,callback){return this.animate(props,speed,easing,callback)}});jQuery.timers=[];jQuery.fx.tick=function(){var timer,timers=jQuery.timers,i=0;fxNow=jQuery.now();for(;i<timers.length;i++){timer=timers[i];if(!timer()&&timers[i]===timer){timers.splice(i--,1)}}if(!timers.length){jQuery.fx.stop()}fxNow=undefined};jQuery.fx.timer=function(timer){jQuery.timers.push(timer);if(timer()){jQuery.fx.start()}else{jQuery.timers.pop()}};jQuery.fx.interval=13;jQuery.fx.start=function(){if(!timerId){timerId=window.setInterval(jQuery.fx.tick,jQuery.fx.interval)}};jQuery.fx.stop=function(){window.clearInterval(timerId);timerId=null};jQuery.fx.speeds={slow:600,fast:200,_default:400};jQuery.fn.delay=function(time,type){time=jQuery.fx?jQuery.fx.speeds[time]||time:time;type=type||"fx";return this.queue(type,function(next,hooks){var timeout=window.setTimeout(next,time);hooks.stop=function(){window.clearTimeout(timeout)}})};(function(){var a,input=document.createElement("input"),div=document.createElement("div"),select=document.createElement("select"),opt=select.appendChild(document.createElement("option"));div=document.createElement("div");div.setAttribute("className","t");div.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";a=div.getElementsByTagName("a")[0];input.setAttribute("type","checkbox");div.appendChild(input);a=div.getElementsByTagName("a")[0];a.style.cssText="top:1px";support.getSetAttribute=div.className!=="t";support.style=/top/.test(a.getAttribute("style"));support.hrefNormalized=a.getAttribute("href")==="/a";support.checkOn=!!input.value;support.optSelected=opt.selected;support.enctype=!!document.createElement("form").enctype;select.disabled=true;support.optDisabled=!opt.disabled;input=document.createElement("input");input.setAttribute("value","");support.input=input.getAttribute("value")==="";input.value="t";input.setAttribute("type","radio");support.radioValue=input.value==="t"})();var rreturn=/\r/g;jQuery.fn.extend({val:function(value){var hooks,ret,isFunction,elem=this[0];if(!arguments.length){if(elem){hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()];if(hooks&&"get"in hooks&&(ret=hooks.get(elem,"value"))!==undefined){return ret}ret=elem.value;return typeof ret==="string"?ret.replace(rreturn,""):ret==null?"":ret}return}isFunction=jQuery.isFunction(value);return this.each(function(i){var val;if(this.nodeType!==1){return}if(isFunction){val=value.call(this,i,jQuery(this).val())}else{val=value}if(val==null){val=""}else if(typeof val==="number"){val+=""}else if(jQuery.isArray(val)){val=jQuery.map(val,function(value){return value==null?"":value+""})}hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()];if(!hooks||!("set"in hooks)||hooks.set(this,val,"value")===undefined){this.value=val}})}});jQuery.extend({valHooks:{option:{get:function(elem){var val=jQuery.find.attr(elem,"value");return val!=null?val:jQuery.trim(jQuery.text(elem))}},select:{get:function(elem){var value,option,options=elem.options,index=elem.selectedIndex,one=elem.type==="select-one"||index<0,values=one?null:[],max=one?index+1:options.length,i=index<0?max:one?index:0;for(;i<max;i++){option=options[i];if((option.selected||i===index)&&(support.optDisabled?!option.disabled:option.getAttribute("disabled")===null)&&(!option.parentNode.disabled||!jQuery.nodeName(option.parentNode,"optgroup"))){value=jQuery(option).val();if(one){return value}values.push(value)}}return values},set:function(elem,value){var optionSet,option,options=elem.options,values=jQuery.makeArray(value),i=options.length;while(i--){option=options[i];if(jQuery.inArray(jQuery.valHooks.option.get(option),values)>=0){try{option.selected=optionSet=true}catch(_){option.scrollHeight}}else{option.selected=false}}if(!optionSet){elem.selectedIndex=-1}return options}}}});jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={set:function(elem,value){if(jQuery.isArray(value)){return elem.checked=jQuery.inArray(jQuery(elem).val(),value)>-1}}};if(!support.checkOn){jQuery.valHooks[this].get=function(elem){return elem.getAttribute("value")===null?"on":elem.value}}});var nodeHook,boolHook,attrHandle=jQuery.expr.attrHandle,ruseDefault=/^(?:checked|selected)$/i,getSetAttribute=support.getSetAttribute,getSetInput=support.input;jQuery.fn.extend({attr:function(name,value){return access(this,jQuery.attr,name,value,arguments.length>1)},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name)})}});jQuery.extend({attr:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return}if(typeof elem.getAttribute==="undefined"){return jQuery.prop(elem,name,value)}if(nType!==1||!jQuery.isXMLDoc(elem)){name=name.toLowerCase();hooks=jQuery.attrHooks[name]||(jQuery.expr.match.bool.test(name)?boolHook:nodeHook)}if(value!==undefined){if(value===null){jQuery.removeAttr(elem,name);return}if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret}elem.setAttribute(name,value+"");return value}if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret}ret=jQuery.find.attr(elem,name);return ret==null?undefined:ret},attrHooks:{type:{set:function(elem,value){if(!support.radioValue&&value==="radio"&&jQuery.nodeName(elem,"input")){var val=elem.value;elem.setAttribute("type",value);if(val){elem.value=val}return value}}}},removeAttr:function(elem,value){var name,propName,i=0,attrNames=value&&value.match(rnotwhite);if(attrNames&&elem.nodeType===1){while(name=attrNames[i++]){propName=jQuery.propFix[name]||name;if(jQuery.expr.match.bool.test(name)){if(getSetInput&&getSetAttribute||!ruseDefault.test(name)){elem[propName]=false}else{elem[jQuery.camelCase("default-"+name)]=elem[propName]=false}}else{jQuery.attr(elem,name,"")}elem.removeAttribute(getSetAttribute?name:propName)}}}});boolHook={set:function(elem,value,name){if(value===false){jQuery.removeAttr(elem,name)}else if(getSetInput&&getSetAttribute||!ruseDefault.test(name)){elem.setAttribute(!getSetAttribute&&jQuery.propFix[name]||name,name)}else{elem[jQuery.camelCase("default-"+name)]=elem[name]=true}return name}};jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g),function(i,name){var getter=attrHandle[name]||jQuery.find.attr;if(getSetInput&&getSetAttribute||!ruseDefault.test(name)){attrHandle[name]=function(elem,name,isXML){var ret,handle;if(!isXML){handle=attrHandle[name];attrHandle[name]=ret;ret=getter(elem,name,isXML)!=null?name.toLowerCase():null;attrHandle[name]=handle}return ret}}else{attrHandle[name]=function(elem,name,isXML){if(!isXML){return elem[jQuery.camelCase("default-"+name)]?name.toLowerCase():null}}}});if(!getSetInput||!getSetAttribute){jQuery.attrHooks.value={set:function(elem,value,name){if(jQuery.nodeName(elem,"input")){elem.defaultValue=value}else{return nodeHook&&nodeHook.set(elem,value,name)}}}}if(!getSetAttribute){nodeHook={set:function(elem,value,name){var ret=elem.getAttributeNode(name);if(!ret){elem.setAttributeNode(ret=elem.ownerDocument.createAttribute(name))}ret.value=value+="";if(name==="value"||value===elem.getAttribute(name)){return value}}};attrHandle.id=attrHandle.name=attrHandle.coords=function(elem,name,isXML){var ret;if(!isXML){return(ret=elem.getAttributeNode(name))&&ret.value!==""?ret.value:null}};jQuery.valHooks.button={get:function(elem,name){var ret=elem.getAttributeNode(name);if(ret&&ret.specified){return ret.value}},set:nodeHook.set};jQuery.attrHooks.contenteditable={set:function(elem,value,name){nodeHook.set(elem,value===""?false:value,name)}};jQuery.each(["width","height"],function(i,name){jQuery.attrHooks[name]={set:function(elem,value){if(value===""){elem.setAttribute(name,"auto");return value}}}})}if(!support.style){jQuery.attrHooks.style={get:function(elem){return elem.style.cssText||undefined},set:function(elem,value){return elem.style.cssText=value+""}}}var rfocusable=/^(?:input|select|textarea|button|object)$/i,rclickable=/^(?:a|area)$/i;jQuery.fn.extend({prop:function(name,value){return access(this,jQuery.prop,name,value,arguments.length>1)},removeProp:function(name){name=jQuery.propFix[name]||name;return this.each(function(){try{this[name]=undefined;delete this[name]}catch(e){}})}});jQuery.extend({prop:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return}if(nType!==1||!jQuery.isXMLDoc(elem)){name=jQuery.propFix[name]||name;hooks=jQuery.propHooks[name]}if(value!==undefined){if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret}return elem[name]=value}if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret}return elem[name]},propHooks:{tabIndex:{get:function(elem){var tabindex=jQuery.find.attr(elem,"tabindex");return tabindex?parseInt(tabindex,10):rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}});if(!support.hrefNormalized){jQuery.each(["href","src"],function(i,name){jQuery.propHooks[name]={get:function(elem){return elem.getAttribute(name,4)}}})}if(!support.optSelected){jQuery.propHooks.selected={get:function(elem){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex}}return null}}}jQuery.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){jQuery.propFix[this.toLowerCase()]=this});if(!support.enctype){jQuery.propFix.enctype="encoding"}var rclass=/[\t\r\n\f]/g;function getClass(elem){return jQuery.attr(elem,"class")||""}jQuery.fn.extend({addClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).addClass(value.call(this,j,getClass(this)))})}if(typeof value==="string"&&value){classes=value.match(rnotwhite)||[];while(elem=this[i++]){curValue=getClass(elem);cur=elem.nodeType===1&&(" "+curValue+" ").replace(rclass," ");if(cur){j=0;while(clazz=classes[j++]){if(cur.indexOf(" "+clazz+" ")<0){cur+=clazz+" "}}finalValue=jQuery.trim(cur);if(curValue!==finalValue){jQuery.attr(elem,"class",finalValue)}}}}return this},removeClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).removeClass(value.call(this,j,getClass(this)))})}if(!arguments.length){return this.attr("class","")}if(typeof value==="string"&&value){classes=value.match(rnotwhite)||[];while(elem=this[i++]){curValue=getClass(elem);cur=elem.nodeType===1&&(" "+curValue+" ").replace(rclass," ");if(cur){j=0;while(clazz=classes[j++]){while(cur.indexOf(" "+clazz+" ")>-1){cur=cur.replace(" "+clazz+" "," ")}}finalValue=jQuery.trim(cur);if(curValue!==finalValue){jQuery.attr(elem,"class",finalValue)}}}}return this},toggleClass:function(value,stateVal){var type=typeof value;if(typeof stateVal==="boolean"&&type==="string"){return stateVal?this.addClass(value):this.removeClass(value)}if(jQuery.isFunction(value)){return this.each(function(i){jQuery(this).toggleClass(value.call(this,i,getClass(this),stateVal),stateVal)})}return this.each(function(){var className,i,self,classNames;if(type==="string"){i=0;self=jQuery(this);classNames=value.match(rnotwhite)||[];while(className=classNames[i++]){if(self.hasClass(className)){self.removeClass(className)}else{self.addClass(className)}}}else if(value===undefined||type==="boolean"){className=getClass(this);if(className){jQuery._data(this,"__className__",className)}jQuery.attr(this,"class",className||value===false?"":jQuery._data(this,"__className__")||"")}})},hasClass:function(selector){var className,elem,i=0;className=" "+selector+" ";while(elem=this[i++]){if(elem.nodeType===1&&(" "+getClass(elem)+" ").replace(rclass," ").indexOf(className)>-1){return true}}return false}});jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick "+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+"change select submit keydown keypress keyup error contextmenu").split(" "),function(i,name){jQuery.fn[name]=function(data,fn){return arguments.length>0?this.on(name,null,data,fn):this.trigger(name)}});jQuery.fn.extend({hover:function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver)}});var location=window.location;var nonce=jQuery.now();var rquery=/\?/;var rvalidtokens=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;jQuery.parseJSON=function(data){if(window.JSON&&window.JSON.parse){return window.JSON.parse(data+"")}var requireNonComma,depth=null,str=jQuery.trim(data+"");return str&&!jQuery.trim(str.replace(rvalidtokens,function(token,comma,open,close){if(requireNonComma&&comma){depth=0}if(depth===0){return token}requireNonComma=open||comma;depth+=!close-!open;return""}))?Function("return "+str)():jQuery.error("Invalid JSON: "+data)};jQuery.parseXML=function(data){var xml,tmp;if(!data||typeof data!=="string"){return null}try{if(window.DOMParser){tmp=new window.DOMParser;xml=tmp.parseFromString(data,"text/xml")}else{xml=new window.ActiveXObject("Microsoft.XMLDOM");xml.async="false";xml.loadXML(data)}}catch(e){xml=undefined}if(!xml||!xml.documentElement||xml.getElementsByTagName("parsererror").length){jQuery.error("Invalid XML: "+data)}return xml};var rhash=/#.*$/,rts=/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,rurl=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,prefilters={},transports={},allTypes="*/".concat("*"),ajaxLocation=location.href,ajaxLocParts=rurl.exec(ajaxLocation.toLowerCase())||[];function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){if(typeof dataTypeExpression!=="string"){func=dataTypeExpression;dataTypeExpression="*"}var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(rnotwhite)||[];if(jQuery.isFunction(func)){while(dataType=dataTypes[i++]){if(dataType.charAt(0)==="+"){dataType=dataType.slice(1)||"*";(structure[dataType]=structure[dataType]||[]).unshift(func)}else{(structure[dataType]=structure[dataType]||[]).push(func)}}}}}function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR){var inspected={},seekingTransport=structure===transports;function inspect(dataType){var selected;inspected[dataType]=true;jQuery.each(structure[dataType]||[],function(_,prefilterOrFactory){var dataTypeOrTransport=prefilterOrFactory(options,originalOptions,jqXHR);if(typeof dataTypeOrTransport==="string"&&!seekingTransport&&!inspected[dataTypeOrTransport]){options.dataTypes.unshift(dataTypeOrTransport);inspect(dataTypeOrTransport);return false}else if(seekingTransport){return!(selected=dataTypeOrTransport)}});return selected}return inspect(options.dataTypes[0])||!inspected["*"]&&inspect("*")}function ajaxExtend(target,src){var deep,key,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src){if(src[key]!==undefined){(flatOptions[key]?target:deep||(deep={}))[key]=src[key]}}if(deep){jQuery.extend(true,target,deep)}return target}function ajaxHandleResponses(s,jqXHR,responses){var firstDataType,ct,finalDataType,type,contents=s.contents,dataTypes=s.dataTypes;while(dataTypes[0]==="*"){dataTypes.shift();if(ct===undefined){ct=s.mimeType||jqXHR.getResponseHeader("Content-Type")}}if(ct){for(type in contents){if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break}}}if(dataTypes[0]in responses){finalDataType=dataTypes[0]}else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break}if(!firstDataType){firstDataType=type}}finalDataType=finalDataType||firstDataType}if(finalDataType){if(finalDataType!==dataTypes[0]){dataTypes.unshift(finalDataType)}return responses[finalDataType]}}function ajaxConvert(s,response,jqXHR,isSuccess){var conv2,current,conv,tmp,prev,converters={},dataTypes=s.dataTypes.slice();if(dataTypes[1]){for(conv in s.converters){converters[conv.toLowerCase()]=s.converters[conv]}}current=dataTypes.shift();while(current){if(s.responseFields[current]){jqXHR[s.responseFields[current]]=response}if(!prev&&isSuccess&&s.dataFilter){response=s.dataFilter(response,s.dataType)}prev=current;current=dataTypes.shift();if(current){if(current==="*"){current=prev}else if(prev!=="*"&&prev!==current){conv=converters[prev+" "+current]||converters["* "+current];if(!conv){for(conv2 in converters){tmp=conv2.split(" ");if(tmp[1]===current){conv=converters[prev+" "+tmp[0]]||converters["* "+tmp[0]];if(conv){if(conv===true){conv=converters[conv2]}else if(converters[conv2]!==true){current=tmp[0];dataTypes.unshift(tmp[1])}break}}}}if(conv!==true){if(conv&&s["throws"]){response=conv(response)}else{try{response=conv(response)}catch(e){return{state:"parsererror",error:conv?e:"No conversion from "+prev+" to "+current}}}}}}}return{state:"success",data:response}}jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ajaxLocation,type:"GET",isLocal:rlocalProtocol.test(ajaxLocParts[1]),global:true,processData:true,async:true,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":true,"text json":jQuery.parseJSON,"text xml":jQuery.parseXML},flatOptions:{url:true,context:true}},ajaxSetup:function(target,settings){return settings?ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings):ajaxExtend(jQuery.ajaxSettings,target)},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){if(typeof url==="object"){options=url;url=undefined}options=options||{};var parts,i,cacheURL,responseHeadersString,timeoutTimer,fireGlobals,transport,responseHeaders,s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=s.context&&(callbackContext.nodeType||callbackContext.jquery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},requestHeaders={},requestHeadersNames={},state=0,strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(state===2){if(!responseHeaders){responseHeaders={};while(match=rheaders.exec(responseHeadersString)){responseHeaders[match[1].toLowerCase()]=match[2]}}match=responseHeaders[key.toLowerCase()]}return match==null?null:match},getAllResponseHeaders:function(){return state===2?responseHeadersString:null},setRequestHeader:function(name,value){var lname=name.toLowerCase();if(!state){name=requestHeadersNames[lname]=requestHeadersNames[lname]||name;requestHeaders[name]=value}return this},overrideMimeType:function(type){if(!state){s.mimeType=type}return this},statusCode:function(map){var code;if(map){if(state<2){for(code in map){statusCode[code]=[statusCode[code],map[code]]}}else{jqXHR.always(map[jqXHR.status])}}return this},abort:function(statusText){var finalText=statusText||strAbort;if(transport){transport.abort(finalText)}done(0,finalText);return this}};deferred.promise(jqXHR).complete=completeDeferred.add;jqXHR.success=jqXHR.done;jqXHR.error=jqXHR.fail;s.url=((url||s.url||ajaxLocation)+"").replace(rhash,"").replace(rprotocol,ajaxLocParts[1]+"//");s.type=options.method||options.type||s.method||s.type;s.dataTypes=jQuery.trim(s.dataType||"*").toLowerCase().match(rnotwhite)||[""];if(s.crossDomain==null){parts=rurl.exec(s.url.toLowerCase());s.crossDomain=!!(parts&&(parts[1]!==ajaxLocParts[1]||parts[2]!==ajaxLocParts[2]||(parts[3]||(parts[1]==="http:"?"80":"443"))!==(ajaxLocParts[3]||(ajaxLocParts[1]==="http:"?"80":"443"))))}if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data,s.traditional)}inspectPrefiltersOrTransports(prefilters,s,options,jqXHR);if(state===2){return jqXHR}fireGlobals=jQuery.event&&s.global;if(fireGlobals&&jQuery.active++===0){jQuery.event.trigger("ajaxStart")}s.type=s.type.toUpperCase();s.hasContent=!rnoContent.test(s.type);cacheURL=s.url;if(!s.hasContent){if(s.data){cacheURL=s.url+=(rquery.test(cacheURL)?"&":"?")+s.data;delete s.data}if(s.cache===false){s.url=rts.test(cacheURL)?cacheURL.replace(rts,"$1_="+nonce++):cacheURL+(rquery.test(cacheURL)?"&":"?")+"_="+nonce++}}if(s.ifModified){if(jQuery.lastModified[cacheURL]){jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[cacheURL])}if(jQuery.etag[cacheURL]){jqXHR.setRequestHeader("If-None-Match",jQuery.etag[cacheURL])}}if(s.data&&s.hasContent&&s.contentType!==false||options.contentType){jqXHR.setRequestHeader("Content-Type",s.contentType)}jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+(s.dataTypes[0]!=="*"?", "+allTypes+"; q=0.01":""):s.accepts["*"]);for(i in s.headers){jqXHR.setRequestHeader(i,s.headers[i])}if(s.beforeSend&&(s.beforeSend.call(callbackContext,jqXHR,s)===false||state===2)){return jqXHR.abort()}strAbort="abort";for(i in{success:1,error:1,complete:1}){jqXHR[i](s[i])}transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR);if(!transport){done(-1,"No Transport")}else{jqXHR.readyState=1;if(fireGlobals){globalEventContext.trigger("ajaxSend",[jqXHR,s])}if(state===2){return jqXHR}if(s.async&&s.timeout>0){timeoutTimer=window.setTimeout(function(){jqXHR.abort("timeout")},s.timeout)}try{state=1;transport.send(requestHeaders,done)}catch(e){if(state<2){done(-1,e)}else{throw e}}}function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;if(state===2){return}state=2;if(timeoutTimer){window.clearTimeout(timeoutTimer)}transport=undefined;responseHeadersString=headers||"";jqXHR.readyState=status>0?4:0;isSuccess=status>=200&&status<300||status===304;if(responses){response=ajaxHandleResponses(s,jqXHR,responses)}response=ajaxConvert(s,response,jqXHR,isSuccess);if(isSuccess){if(s.ifModified){modified=jqXHR.getResponseHeader("Last-Modified");if(modified){jQuery.lastModified[cacheURL]=modified}modified=jqXHR.getResponseHeader("etag");if(modified){jQuery.etag[cacheURL]=modified}}if(status===204||s.type==="HEAD"){statusText="nocontent"}else if(status===304){statusText="notmodified"}else{statusText=response.state;success=response.data;error=response.error;isSuccess=!error}}else{error=statusText;if(status||!statusText){statusText="error";if(status<0){status=0}}}jqXHR.status=status;jqXHR.statusText=(nativeStatusText||statusText)+"";if(isSuccess){deferred.resolveWith(callbackContext,[success,statusText,jqXHR])}else{deferred.rejectWith(callbackContext,[jqXHR,statusText,error])}jqXHR.statusCode(statusCode);statusCode=undefined;if(fireGlobals){globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error])}completeDeferred.fireWith(callbackContext,[jqXHR,statusText]);if(fireGlobals){globalEventContext.trigger("ajaxComplete",[jqXHR,s]);if(!--jQuery.active){jQuery.event.trigger("ajaxStop")}}}return jqXHR},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json")},getScript:function(url,callback){return jQuery.get(url,undefined,callback,"script")}});jQuery.each(["get","post"],function(i,method){jQuery[method]=function(url,data,callback,type){if(jQuery.isFunction(data)){type=type||callback;callback=data;data=undefined}return jQuery.ajax(jQuery.extend({url:url,type:method,dataType:type,data:data,success:callback},jQuery.isPlainObject(url)&&url))}});jQuery._evalUrl=function(url){return jQuery.ajax({url:url,type:"GET",dataType:"script",cache:true,async:false,global:false,"throws":true})};jQuery.fn.extend({wrapAll:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapAll(html.call(this,i))})}if(this[0]){var wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){wrap.insertBefore(this[0])}wrap.map(function(){var elem=this;while(elem.firstChild&&elem.firstChild.nodeType===1){elem=elem.firstChild}return elem}).append(this)}return this},wrapInner:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapInner(html.call(this,i))})}return this.each(function(){var self=jQuery(this),contents=self.contents();if(contents.length){contents.wrapAll(html)}else{self.append(html)}})},wrap:function(html){var isFunction=jQuery.isFunction(html);return this.each(function(i){jQuery(this).wrapAll(isFunction?html.call(this,i):html)})},unwrap:function(){return this.parent().each(function(){if(!jQuery.nodeName(this,"body")){jQuery(this).replaceWith(this.childNodes)}}).end()}});function getDisplay(elem){return elem.style&&elem.style.display||jQuery.css(elem,"display")}function filterHidden(elem){while(elem&&elem.nodeType===1){if(getDisplay(elem)==="none"||elem.type==="hidden"){return true}elem=elem.parentNode}return false}jQuery.expr.filters.hidden=function(elem){return support.reliableHiddenOffsets()?elem.offsetWidth<=0&&elem.offsetHeight<=0&&!elem.getClientRects().length:filterHidden(elem)};jQuery.expr.filters.visible=function(elem){return!jQuery.expr.filters.hidden(elem)};var r20=/%20/g,rbracket=/\[\]$/,rCRLF=/\r?\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;function buildParams(prefix,obj,traditional,add){var name;if(jQuery.isArray(obj)){jQuery.each(obj,function(i,v){if(traditional||rbracket.test(prefix)){add(prefix,v)}else{buildParams(prefix+"["+(typeof v==="object"&&v!=null?i:"")+"]",v,traditional,add)}})}else if(!traditional&&jQuery.type(obj)==="object"){for(name in obj){buildParams(prefix+"["+name+"]",obj[name],traditional,add)}}else{add(prefix,obj)}}jQuery.param=function(a,traditional){var prefix,s=[],add=function(key,value){value=jQuery.isFunction(value)?value():value==null?"":value;s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value)};if(traditional===undefined){traditional=jQuery.ajaxSettings&&jQuery.ajaxSettings.traditional}if(jQuery.isArray(a)||a.jquery&&!jQuery.isPlainObject(a)){jQuery.each(a,function(){add(this.name,this.value)})}else{for(prefix in a){buildParams(prefix,a[prefix],traditional,add)}}return s.join("&").replace(r20,"+")};jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this}).filter(function(){var type=this.type;return this.name&&!jQuery(this).is(":disabled")&&rsubmittable.test(this.nodeName)&&!rsubmitterTypes.test(type)&&(this.checked||!rcheckableType.test(type))}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:jQuery.isArray(val)?jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")}}):{name:elem.name,value:val.replace(rCRLF,"\r\n")}}).get()}});jQuery.ajaxSettings.xhr=window.ActiveXObject!==undefined?function(){if(this.isLocal){return createActiveXHR()}if(document.documentMode>8){return createStandardXHR()}return/^(get|post|head|put|delete|options)$/i.test(this.type)&&createStandardXHR()||createActiveXHR()}:createStandardXHR;var xhrId=0,xhrCallbacks={},xhrSupported=jQuery.ajaxSettings.xhr();if(window.attachEvent){window.attachEvent("onunload",function(){for(var key in xhrCallbacks){xhrCallbacks[key](undefined,true)}})}support.cors=!!xhrSupported&&"withCredentials"in xhrSupported;
17xhrSupported=support.ajax=!!xhrSupported;if(xhrSupported){jQuery.ajaxTransport(function(options){if(!options.crossDomain||support.cors){var callback;return{send:function(headers,complete){var i,xhr=options.xhr(),id=++xhrId;xhr.open(options.type,options.url,options.async,options.username,options.password);if(options.xhrFields){for(i in options.xhrFields){xhr[i]=options.xhrFields[i]}}if(options.mimeType&&xhr.overrideMimeType){xhr.overrideMimeType(options.mimeType)}if(!options.crossDomain&&!headers["X-Requested-With"]){headers["X-Requested-With"]="XMLHttpRequest"}for(i in headers){if(headers[i]!==undefined){xhr.setRequestHeader(i,headers[i]+"")}}xhr.send(options.hasContent&&options.data||null);callback=function(_,isAbort){var status,statusText,responses;if(callback&&(isAbort||xhr.readyState===4)){delete xhrCallbacks[id];callback=undefined;xhr.onreadystatechange=jQuery.noop;if(isAbort){if(xhr.readyState!==4){xhr.abort()}}else{responses={};status=xhr.status;if(typeof xhr.responseText==="string"){responses.text=xhr.responseText}try{statusText=xhr.statusText}catch(e){statusText=""}if(!status&&options.isLocal&&!options.crossDomain){status=responses.text?200:404}else if(status===1223){status=204}}}if(responses){complete(status,statusText,responses,xhr.getAllResponseHeaders())}};if(!options.async){callback()}else if(xhr.readyState===4){window.setTimeout(callback)}else{xhr.onreadystatechange=xhrCallbacks[id]=callback}},abort:function(){if(callback){callback(undefined,true)}}}}})}function createStandardXHR(){try{return new window.XMLHttpRequest}catch(e){}}function createActiveXHR(){try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}jQuery.ajaxPrefilter(function(s){if(s.crossDomain){s.contents.script=false}});jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, "+"application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(text){jQuery.globalEval(text);return text}}});jQuery.ajaxPrefilter("script",function(s){if(s.cache===undefined){s.cache=false}if(s.crossDomain){s.type="GET";s.global=false}});jQuery.ajaxTransport("script",function(s){if(s.crossDomain){var script,head=document.head||jQuery("head")[0]||document.documentElement;return{send:function(_,callback){script=document.createElement("script");script.async=true;if(s.scriptCharset){script.charset=s.scriptCharset}script.src=s.url;script.onload=script.onreadystatechange=function(_,isAbort){if(isAbort||!script.readyState||/loaded|complete/.test(script.readyState)){script.onload=script.onreadystatechange=null;if(script.parentNode){script.parentNode.removeChild(script)}script=null;if(!isAbort){callback(200,"success")}}};head.insertBefore(script,head.firstChild)},abort:function(){if(script){script.onload(undefined,true)}}}}});var oldCallbacks=[],rjsonp=/(=)\?(?=&|$)|\?\?/;jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var callback=oldCallbacks.pop()||jQuery.expando+"_"+nonce++;this[callback]=true;return callback}});jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var callbackName,overwritten,responseContainer,jsonProp=s.jsonp!==false&&(rjsonp.test(s.url)?"url":typeof s.data==="string"&&(s.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&rjsonp.test(s.data)&&"data");if(jsonProp||s.dataTypes[0]==="jsonp"){callbackName=s.jsonpCallback=jQuery.isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback;if(jsonProp){s[jsonProp]=s[jsonProp].replace(rjsonp,"$1"+callbackName)}else if(s.jsonp!==false){s.url+=(rquery.test(s.url)?"&":"?")+s.jsonp+"="+callbackName}s.converters["script json"]=function(){if(!responseContainer){jQuery.error(callbackName+" was not called")}return responseContainer[0]};s.dataTypes[0]="json";overwritten=window[callbackName];window[callbackName]=function(){responseContainer=arguments};jqXHR.always(function(){if(overwritten===undefined){jQuery(window).removeProp(callbackName)}else{window[callbackName]=overwritten}if(s[callbackName]){s.jsonpCallback=originalSettings.jsonpCallback;oldCallbacks.push(callbackName)}if(responseContainer&&jQuery.isFunction(overwritten)){overwritten(responseContainer[0])}responseContainer=overwritten=undefined});return"script"}});support.createHTMLDocument=function(){if(!document.implementation.createHTMLDocument){return false}var doc=document.implementation.createHTMLDocument("");doc.body.innerHTML="<form></form><form></form>";return doc.body.childNodes.length===2}();jQuery.parseHTML=function(data,context,keepScripts){if(!data||typeof data!=="string"){return null}if(typeof context==="boolean"){keepScripts=context;context=false}context=context||(support.createHTMLDocument?document.implementation.createHTMLDocument(""):document);var parsed=rsingleTag.exec(data),scripts=!keepScripts&&[];if(parsed){return[context.createElement(parsed[1])]}parsed=buildFragment([data],context,scripts);if(scripts&&scripts.length){jQuery(scripts).remove()}return jQuery.merge([],parsed.childNodes)};var _load=jQuery.fn.load;jQuery.fn.load=function(url,params,callback){if(typeof url!=="string"&&_load){return _load.apply(this,arguments)}var selector,type,response,self=this,off=url.indexOf(" ");if(off>-1){selector=jQuery.trim(url.slice(off,url.length));url=url.slice(0,off)}if(jQuery.isFunction(params)){callback=params;params=undefined}else if(params&&typeof params==="object"){type="POST"}if(self.length>0){jQuery.ajax({url:url,type:type||"GET",dataType:"html",data:params}).done(function(responseText){response=arguments;self.html(selector?jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector):responseText)}).always(callback&&function(jqXHR,status){self.each(function(){callback.apply(self,response||[jqXHR.responseText,status,jqXHR])})})}return this};jQuery.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(i,type){jQuery.fn[type]=function(fn){return this.on(type,fn)}});jQuery.expr.filters.animated=function(elem){return jQuery.grep(jQuery.timers,function(fn){return elem===fn.elem}).length};function getWindow(elem){return jQuery.isWindow(elem)?elem:elem.nodeType===9?elem.defaultView||elem.parentWindow:false}jQuery.offset={setOffset:function(elem,options,i){var curPosition,curLeft,curCSSTop,curTop,curOffset,curCSSLeft,calculatePosition,position=jQuery.css(elem,"position"),curElem=jQuery(elem),props={};if(position==="static"){elem.style.position="relative"}curOffset=curElem.offset();curCSSTop=jQuery.css(elem,"top");curCSSLeft=jQuery.css(elem,"left");calculatePosition=(position==="absolute"||position==="fixed")&&jQuery.inArray("auto",[curCSSTop,curCSSLeft])>-1;if(calculatePosition){curPosition=curElem.position();curTop=curPosition.top;curLeft=curPosition.left}else{curTop=parseFloat(curCSSTop)||0;curLeft=parseFloat(curCSSLeft)||0}if(jQuery.isFunction(options)){options=options.call(elem,i,jQuery.extend({},curOffset))}if(options.top!=null){props.top=options.top-curOffset.top+curTop}if(options.left!=null){props.left=options.left-curOffset.left+curLeft}if("using"in options){options.using.call(elem,props)}else{curElem.css(props)}}};jQuery.fn.extend({offset:function(options){if(arguments.length){return options===undefined?this:this.each(function(i){jQuery.offset.setOffset(this,options,i)})}var docElem,win,box={top:0,left:0},elem=this[0],doc=elem&&elem.ownerDocument;if(!doc){return}docElem=doc.documentElement;if(!jQuery.contains(docElem,elem)){return box}if(typeof elem.getBoundingClientRect!=="undefined"){box=elem.getBoundingClientRect()}win=getWindow(doc);return{top:box.top+(win.pageYOffset||docElem.scrollTop)-(docElem.clientTop||0),left:box.left+(win.pageXOffset||docElem.scrollLeft)-(docElem.clientLeft||0)}},position:function(){if(!this[0]){return}var offsetParent,offset,parentOffset={top:0,left:0},elem=this[0];if(jQuery.css(elem,"position")==="fixed"){offset=elem.getBoundingClientRect()}else{offsetParent=this.offsetParent();offset=this.offset();if(!jQuery.nodeName(offsetParent[0],"html")){parentOffset=offsetParent.offset()}parentOffset.top+=jQuery.css(offsetParent[0],"borderTopWidth",true);parentOffset.left+=jQuery.css(offsetParent[0],"borderLeftWidth",true)}return{top:offset.top-parentOffset.top-jQuery.css(elem,"marginTop",true),left:offset.left-parentOffset.left-jQuery.css(elem,"marginLeft",true)}},offsetParent:function(){return this.map(function(){var offsetParent=this.offsetParent;while(offsetParent&&(!jQuery.nodeName(offsetParent,"html")&&jQuery.css(offsetParent,"position")==="static")){offsetParent=offsetParent.offsetParent}return offsetParent||documentElement})}});jQuery.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(method,prop){var top=/Y/.test(prop);jQuery.fn[method]=function(val){return access(this,function(elem,method,val){var win=getWindow(elem);if(val===undefined){return win?prop in win?win[prop]:win.document.documentElement[method]:elem[method]}if(win){win.scrollTo(!top?val:jQuery(win).scrollLeft(),top?val:jQuery(win).scrollTop())}else{elem[method]=val}},method,val,arguments.length,null)}});jQuery.each(["top","left"],function(i,prop){jQuery.cssHooks[prop]=addGetHookIf(support.pixelPosition,function(elem,computed){if(computed){computed=curCSS(elem,prop);return rnumnonpx.test(computed)?jQuery(elem).position()[prop]+"px":computed}})});jQuery.each({Height:"height",Width:"width"},function(name,type){jQuery.each({padding:"inner"+name,content:type,"":"outer"+name},function(defaultExtra,funcName){jQuery.fn[funcName]=function(margin,value){var chainable=arguments.length&&(defaultExtra||typeof margin!=="boolean"),extra=defaultExtra||(margin===true||value===true?"margin":"border");return access(this,function(elem,type,value){var doc;if(jQuery.isWindow(elem)){return elem.document.documentElement["client"+name]}if(elem.nodeType===9){doc=elem.documentElement;return Math.max(elem.body["scroll"+name],doc["scroll"+name],elem.body["offset"+name],doc["offset"+name],doc["client"+name])}return value===undefined?jQuery.css(elem,type,extra):jQuery.style(elem,type,value,extra)},type,chainable?margin:undefined,chainable,null)}})});jQuery.fn.extend({bind:function(types,data,fn){return this.on(types,null,data,fn)},unbind:function(types,fn){return this.off(types,null,fn)},delegate:function(selector,types,data,fn){return this.on(types,selector,data,fn)},undelegate:function(selector,types,fn){return arguments.length===1?this.off(selector,"**"):this.off(types,selector||"**",fn)}});jQuery.fn.size=function(){return this.length};jQuery.fn.andSelf=jQuery.fn.addBack;if(typeof define==="function"&&define.amd){define("jquery",[],function(){return jQuery})}var _jQuery=window.jQuery,_$=window.$;jQuery.noConflict=function(deep){if(window.$===jQuery){window.$=_$}if(deep&&window.jQuery===jQuery){window.jQuery=_jQuery}return jQuery};if(!noGlobal){window.jQuery=window.$=jQuery}return jQuery})},{}],8:[function(require,module,exports){(function(){module.exports={xpath:require("./xpath"),Range:require("./range")}}).call(this)},{"./range":9,"./xpath":11}],9:[function(require,module,exports){(function(){var $,Range,Util,xpath,__hasProp={}.hasOwnProperty,__extends=function(child,parent){for(var key in parent){if(__hasProp.call(parent,key))child[key]=parent[key]}function ctor(){this.constructor=child}ctor.prototype=parent.prototype;child.prototype=new ctor;child.__super__=parent.prototype;return child};xpath=require("./xpath");Util=require("./util");$=require("jquery");Range={};Range.sniff=function(r){if(r.commonAncestorContainer!=null){return new Range.BrowserRange(r)}else if(typeof r.start==="string"){return new Range.SerializedRange(r)}else if(r.start&&typeof r.start==="object"){return new Range.NormalizedRange(r)}else{console.error("Could not sniff range type");return false}};Range.RangeError=function(_super){__extends(RangeError,_super);function RangeError(type,message,parent){this.type=type;this.message=message;this.parent=parent!=null?parent:null;RangeError.__super__.constructor.call(this,this.message)}return RangeError}(Error);Range.BrowserRange=function(){function BrowserRange(obj){this.commonAncestorContainer=obj.commonAncestorContainer;this.startContainer=obj.startContainer;this.startOffset=obj.startOffset;this.endContainer=obj.endContainer;this.endOffset=obj.endOffset}BrowserRange.prototype.normalize=function(root){var nr,r;if(this.tainted){console.error("You may only call normalize() once on a BrowserRange!");return false}else{this.tainted=true}r={};this._normalizeStart(r);this._normalizeEnd(r);nr={};if(r.startOffset>0){if(r.start.nodeValue.length>r.startOffset){nr.start=r.start.splitText(r.startOffset)}else{nr.start=r.start.nextSibling}}else{nr.start=r.start}if(r.start===r.end){if(nr.start.nodeValue.length>r.endOffset-r.startOffset){nr.start.splitText(r.endOffset-r.startOffset)}nr.end=nr.start}else{if(r.end.nodeValue.length>r.endOffset){r.end.splitText(r.endOffset)}nr.end=r.end}nr.commonAncestor=this.commonAncestorContainer;while(nr.commonAncestor.nodeType!==Util.NodeTypes.ELEMENT_NODE){nr.commonAncestor=nr.commonAncestor.parentNode}return new Range.NormalizedRange(nr)};BrowserRange.prototype._normalizeStart=function(r){if(this.startContainer.nodeType===Util.NodeTypes.ELEMENT_NODE){r.start=Util.getFirstTextNodeNotBefore(this.startContainer.childNodes[this.startOffset]);return r.startOffset=0}else{r.start=this.startContainer;return r.startOffset=this.startOffset}};BrowserRange.prototype._normalizeEnd=function(r){var n,node;if(this.endContainer.nodeType===Util.NodeTypes.ELEMENT_NODE){node=this.endContainer.childNodes[this.endOffset];if(node!=null){n=node;while(n!=null&&n.nodeType!==Util.NodeTypes.TEXT_NODE){n=n.firstChild}if(n!=null){r.end=n;r.endOffset=0}}if(r.end==null){if(this.endOffset){node=this.endContainer.childNodes[this.endOffset-1]}else{node=this.endContainer.previousSibling}r.end=Util.getLastTextNodeUpTo(node);return r.endOffset=r.end.nodeValue.length}}else{r.end=this.endContainer;return r.endOffset=this.endOffset}};BrowserRange.prototype.serialize=function(root,ignoreSelector){return this.normalize(root).serialize(root,ignoreSelector)};return BrowserRange}();Range.NormalizedRange=function(){function NormalizedRange(obj){this.commonAncestor=obj.commonAncestor;this.start=obj.start;this.end=obj.end}NormalizedRange.prototype.normalize=function(root){return this};NormalizedRange.prototype.limit=function(bounds){var nodes,parent,startParents,_i,_len,_ref;nodes=$.grep(this.textNodes(),function(node){return node.parentNode===bounds||$.contains(bounds,node.parentNode)});if(!nodes.length){return null}this.start=nodes[0];this.end=nodes[nodes.length-1];startParents=$(this.start).parents();_ref=$(this.end).parents();for(_i=0,_len=_ref.length;_i<_len;_i++){parent=_ref[_i];if(startParents.index(parent)!==-1){this.commonAncestor=parent;break}}return this};NormalizedRange.prototype.serialize=function(root,ignoreSelector){var end,serialization,start;serialization=function(node,isEnd){var n,nodes,offset,origParent,path,textNodes,_i,_len;if(ignoreSelector){origParent=$(node).parents(":not("+ignoreSelector+")").eq(0)}else{origParent=$(node).parent()}path=xpath.fromNode(origParent,root)[0];textNodes=Util.getTextNodes(origParent);nodes=textNodes.slice(0,textNodes.index(node));offset=0;for(_i=0,_len=nodes.length;_i<_len;_i++){n=nodes[_i];offset+=n.nodeValue.length}if(isEnd){return[path,offset+node.nodeValue.length]}else{return[path,offset]}};start=serialization(this.start);end=serialization(this.end,true);return new Range.SerializedRange({start:start[0],end:end[0],startOffset:start[1],endOffset:end[1]})};NormalizedRange.prototype.text=function(){var node;return function(){var _i,_len,_ref,_results;_ref=this.textNodes();_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){node=_ref[_i];_results.push(node.nodeValue)}return _results}.call(this).join("")};NormalizedRange.prototype.textNodes=function(){var end,start,textNodes,_ref;textNodes=Util.getTextNodes($(this.commonAncestor));_ref=[textNodes.index(this.start),textNodes.index(this.end)],start=_ref[0],end=_ref[1];return $.makeArray(textNodes.slice(start,+end+1||9e9))};return NormalizedRange}();Range.SerializedRange=function(){function SerializedRange(obj){this.start=obj.start;this.startOffset=obj.startOffset;this.end=obj.end;this.endOffset=obj.endOffset}SerializedRange.prototype.normalize=function(root){var contains,e,length,node,p,range,targetOffset,tn,_i,_j,_len,_len1,_ref,_ref1;range={};_ref=["start","end"];for(_i=0,_len=_ref.length;_i<_len;_i++){p=_ref[_i];try{node=xpath.toNode(this[p],root)}catch(_error){e=_error;throw new Range.RangeError(p,"Error while finding "+p+" node: "+this[p]+": "+e,e)}if(!node){throw new Range.RangeError(p,"Couldn't find "+p+" node: "+this[p])}length=0;targetOffset=this[p+"Offset"];if(p==="end"){targetOffset-=1}_ref1=Util.getTextNodes($(node));for(_j=0,_len1=_ref1.length;_j<_len1;_j++){tn=_ref1[_j];if(length+tn.nodeValue.length>targetOffset){range[p+"Container"]=tn;range[p+"Offset"]=this[p+"Offset"]-length;break}else{length+=tn.nodeValue.length}}if(range[p+"Offset"]==null){throw new Range.RangeError(""+p+"offset","Couldn't find offset "+this[p+"Offset"]+" in element "+this[p])}}contains=document.compareDocumentPosition!=null?function(a,b){return a.compareDocumentPosition(b)&Node.DOCUMENT_POSITION_CONTAINED_BY}:function(a,b){return a.contains(b)};$(range.startContainer).parents().each(function(){var endContainer;if(range.endContainer.nodeType===Util.NodeTypes.TEXT_NODE){endContainer=range.endContainer.parentNode}else{endContainer=range.endContainer}if(contains(this,endContainer)){range.commonAncestorContainer=this;return false}});return new Range.BrowserRange(range).normalize(root)};SerializedRange.prototype.serialize=function(root,ignoreSelector){return this.normalize(root).serialize(root,ignoreSelector)};SerializedRange.prototype.toObject=function(){return{start:this.start,startOffset:this.startOffset,end:this.end,endOffset:this.endOffset}};return SerializedRange}();module.exports=Range}).call(this)},{"./util":10,"./xpath":11,jquery:12}],10:[function(require,module,exports){(function(){var $,Util;$=require("jquery");Util={};Util.NodeTypes={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12};Util.getFirstTextNodeNotBefore=function(n){var result;switch(n.nodeType){case Util.NodeTypes.TEXT_NODE:return n;case Util.NodeTypes.ELEMENT_NODE:if(n.firstChild!=null){result=Util.getFirstTextNodeNotBefore(n.firstChild);if(result!=null){return result}}break}n=n.nextSibling;if(n!=null){return Util.getFirstTextNodeNotBefore(n)}else{return null}};Util.getLastTextNodeUpTo=function(n){var result;switch(n.nodeType){case Util.NodeTypes.TEXT_NODE:return n;case Util.NodeTypes.ELEMENT_NODE:if(n.lastChild!=null){result=Util.getLastTextNodeUpTo(n.lastChild);if(result!=null){return result}}break}n=n.previousSibling;if(n!=null){return Util.getLastTextNodeUpTo(n)}else{return null}};Util.getTextNodes=function(jq){var getTextNodes;getTextNodes=function(node){var nodes;if(node&&node.nodeType!==Util.NodeTypes.TEXT_NODE){nodes=[];if(node.nodeType!==Util.NodeTypes.COMMENT_NODE){node=node.lastChild;while(node){nodes.push(getTextNodes(node));node=node.previousSibling}}return nodes.reverse()}else{return node}};return jq.map(function(){return Util.flatten(getTextNodes(this))})};Util.getGlobal=function(){return function(){return this}()};Util.contains=function(parent,child){var node;node=child;while(node!=null){if(node===parent){return true}node=node.parentNode}return false};Util.flatten=function(array){var flatten;flatten=function(ary){var el,flat,_i,_len;flat=[];for(_i=0,_len=ary.length;_i<_len;_i++){el=ary[_i];flat=flat.concat(el&&$.isArray(el)?flatten(el):el)}return flat};return flatten(array)};module.exports=Util}).call(this)},{jquery:12}],11:[function(require,module,exports){(function(){var $,Util,evaluateXPath,findChild,fromNode,getNodeName,getNodePosition,simpleXPathJQuery,simpleXPathPure,toNode;$=require("jquery");Util=require("./util");evaluateXPath=function(xp,root,nsResolver){var exception,idx,name,node,step,steps,_i,_len,_ref;if(root==null){root=document}if(nsResolver==null){nsResolver=null}try{return document.evaluate("."+xp,root,nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue}catch(_error){exception=_error;console.log("XPath evaluation failed.");console.log("Trying fallback...");steps=xp.substring(1).split("/");node=root;for(_i=0,_len=steps.length;_i<_len;_i++){step=steps[_i];_ref=step.split("["),name=_ref[0],idx=_ref[1];idx=idx!=null?parseInt((idx!=null?idx.split("]"):void 0)[0]):1;node=findChild(node,name.toLowerCase(),idx)}return node}};simpleXPathJQuery=function($el,relativeRoot){var jq;jq=$el.map(function(){var elem,idx,path,tagName;path="";elem=this;while((elem!=null?elem.nodeType:void 0)===Util.NodeTypes.ELEMENT_NODE&&elem!==relativeRoot){tagName=elem.tagName.replace(":","\\:");idx=$(elem.parentNode).children(tagName).index(elem)+1;idx="["+idx+"]";path="/"+elem.tagName.toLowerCase()+idx+path;elem=elem.parentNode}return path});return jq.get()};simpleXPathPure=function($el,relativeRoot){var getPathSegment,getPathTo,jq,rootNode;getPathSegment=function(node){var name,pos;name=getNodeName(node);pos=getNodePosition(node);return""+name+"["+pos+"]"};rootNode=relativeRoot;getPathTo=function(node){var xpath;xpath="";while(node!==rootNode){if(node==null){throw new Error("Called getPathTo on a node which was not a descendant of @rootNode. "+rootNode)}xpath=getPathSegment(node)+"/"+xpath;node=node.parentNode}xpath="/"+xpath;xpath=xpath.replace(/\/$/,"");return xpath};jq=$el.map(function(){var path;path=getPathTo(this);return path});return jq.get()};findChild=function(node,type,index){var child,children,found,name,_i,_len;if(!node.hasChildNodes()){throw new Error("XPath error: node has no children!")}children=node.childNodes;found=0;for(_i=0,_len=children.length;_i<_len;_i++){child=children[_i];name=getNodeName(child);if(name===type){found+=1;if(found===index){return child}}}throw new Error("XPath error: wanted child not found.")};getNodeName=function(node){var nodeName;nodeName=node.nodeName.toLowerCase();switch(nodeName){case"#text":return"text()";case"#comment":return"comment()";case"#cdata-section":return"cdata-section()";default:return nodeName}};getNodePosition=function(node){var pos,tmp;pos=0;tmp=node;while(tmp){if(tmp.nodeName===node.nodeName){pos+=1}tmp=tmp.previousSibling}return pos};fromNode=function($el,relativeRoot){var exception,result;try{result=simpleXPathJQuery($el,relativeRoot)}catch(_error){exception=_error;console.log("jQuery-based XPath construction failed! Falling back to manual.");result=simpleXPathPure($el,relativeRoot)}return result};toNode=function(path,root){var customResolver,namespace,node,segment;if(root==null){root=document}if(!$.isXMLDoc(document.documentElement)){return evaluateXPath(path,root)}else{customResolver=document.createNSResolver(document.ownerDocument===null?document.documentElement:document.ownerDocument.documentElement);node=evaluateXPath(path,root,customResolver);if(!node){path=function(){var _i,_len,_ref,_results;_ref=path.split("/");_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){segment=_ref[_i];if(segment&&segment.indexOf(":")===-1){_results.push(segment.replace(/^([a-z]+)/,"xhtml:$1"))}else{_results.push(segment)}}return _results}().join("/");namespace=document.lookupNamespaceURI(null);customResolver=function(ns){if(ns==="xhtml"){return namespace}else{return document.documentElement.getAttribute("xmlns:"+ns)}};node=evaluateXPath(path,root,customResolver)}return node}};module.exports={fromNode:fromNode,toNode:toNode}}).call(this)},{"./util":10,jquery:12}],12:[function(require,module,exports){(function(global,factory){if(typeof module==="object"&&typeof module.exports==="object"){module.exports=global.document?factory(global,true):function(w){if(!w.document){throw new Error("jQuery requires a window with a document")}return factory(w)}}else{factory(global)}})(typeof window!=="undefined"?window:this,function(window,noGlobal){var deletedIds=[];var slice=deletedIds.slice;var concat=deletedIds.concat;var push=deletedIds.push;var indexOf=deletedIds.indexOf;var class2type={};var toString=class2type.toString;var hasOwn=class2type.hasOwnProperty;var support={};var version="1.11.3",jQuery=function(selector,context){return new jQuery.fn.init(selector,context)},rtrim=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,rmsPrefix=/^-ms-/,rdashAlpha=/-([\da-z])/gi,fcamelCase=function(all,letter){return letter.toUpperCase()};jQuery.fn=jQuery.prototype={jquery:version,constructor:jQuery,selector:"",length:0,toArray:function(){return slice.call(this)},get:function(num){return num!=null?num<0?this[num+this.length]:this[num]:slice.call(this)},pushStack:function(elems){var ret=jQuery.merge(this.constructor(),elems);ret.prevObject=this;ret.context=this.context;return ret},each:function(callback,args){return jQuery.each(this,callback,args)},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem)}))},slice:function(){return this.pushStack(slice.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j<len?[this[j]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:push,sort:deletedIds.sort,splice:deletedIds.splice};jQuery.extend=jQuery.fn.extend=function(){var src,copyIsArray,copy,name,options,clone,target=arguments[0]||{},i=1,length=arguments.length,deep=false;if(typeof target==="boolean"){deep=target;target=arguments[i]||{};i++}if(typeof target!=="object"&&!jQuery.isFunction(target)){target={}}if(i===length){target=this;i--}for(;i<length;i++){if((options=arguments[i])!=null){for(name in options){src=target[name];copy=options[name];if(target===copy){continue}if(deep&&copy&&(jQuery.isPlainObject(copy)||(copyIsArray=jQuery.isArray(copy)))){if(copyIsArray){copyIsArray=false;clone=src&&jQuery.isArray(src)?src:[]}else{clone=src&&jQuery.isPlainObject(src)?src:{}}target[name]=jQuery.extend(deep,clone,copy)}else if(copy!==undefined){target[name]=copy}}}}return target};jQuery.extend({expando:"jQuery"+(version+Math.random()).replace(/\D/g,""),isReady:true,error:function(msg){throw new Error(msg)},noop:function(){},isFunction:function(obj){return jQuery.type(obj)==="function"},isArray:Array.isArray||function(obj){return jQuery.type(obj)==="array"},isWindow:function(obj){return obj!=null&&obj==obj.window},isNumeric:function(obj){return!jQuery.isArray(obj)&&obj-parseFloat(obj)+1>=0},isEmptyObject:function(obj){var name;for(name in obj){return false}return true},isPlainObject:function(obj){var key;if(!obj||jQuery.type(obj)!=="object"||obj.nodeType||jQuery.isWindow(obj)){return false}try{if(obj.constructor&&!hasOwn.call(obj,"constructor")&&!hasOwn.call(obj.constructor.prototype,"isPrototypeOf")){return false}}catch(e){return false}if(support.ownLast){for(key in obj){return hasOwn.call(obj,key)}}for(key in obj){}return key===undefined||hasOwn.call(obj,key)},type:function(obj){if(obj==null){return obj+""}return typeof obj==="object"||typeof obj==="function"?class2type[toString.call(obj)]||"object":typeof obj},globalEval:function(data){if(data&&jQuery.trim(data)){(window.execScript||function(data){window["eval"].call(window,data)})(data)}},camelCase:function(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase)},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase()},each:function(obj,callback,args){var value,i=0,length=obj.length,isArray=isArraylike(obj);if(args){if(isArray){for(;i<length;i++){value=callback.apply(obj[i],args);if(value===false){break}}}else{for(i in obj){value=callback.apply(obj[i],args);if(value===false){break}}}}else{if(isArray){for(;i<length;i++){value=callback.call(obj[i],i,obj[i]);if(value===false){break}}}else{for(i in obj){value=callback.call(obj[i],i,obj[i]);if(value===false){break}}}}return obj},trim:function(text){return text==null?"":(text+"").replace(rtrim,"")},makeArray:function(arr,results){var ret=results||[];if(arr!=null){if(isArraylike(Object(arr))){jQuery.merge(ret,typeof arr==="string"?[arr]:arr)}else{push.call(ret,arr)}}return ret},inArray:function(elem,arr,i){var len;if(arr){if(indexOf){return indexOf.call(arr,elem,i)}len=arr.length;i=i?i<0?Math.max(0,len+i):i:0;for(;i<len;i++){if(i in arr&&arr[i]===elem){return i}}}return-1},merge:function(first,second){var len=+second.length,j=0,i=first.length;while(j<len){first[i++]=second[j++]}if(len!==len){while(second[j]!==undefined){first[i++]=second[j++]}}first.length=i;return first},grep:function(elems,callback,invert){var callbackInverse,matches=[],i=0,length=elems.length,callbackExpect=!invert;for(;i<length;i++){callbackInverse=!callback(elems[i],i);if(callbackInverse!==callbackExpect){matches.push(elems[i])}}return matches},map:function(elems,callback,arg){var value,i=0,length=elems.length,isArray=isArraylike(elems),ret=[];if(isArray){for(;i<length;i++){value=callback(elems[i],i,arg);if(value!=null){ret.push(value)}}}else{for(i in elems){value=callback(elems[i],i,arg);if(value!=null){ret.push(value)}}}return concat.apply([],ret)},guid:1,proxy:function(fn,context){var args,proxy,tmp;if(typeof context==="string"){tmp=fn[context];context=fn;fn=tmp}if(!jQuery.isFunction(fn)){return undefined}args=slice.call(arguments,2);proxy=function(){return fn.apply(context||this,args.concat(slice.call(arguments)))};proxy.guid=fn.guid=fn.guid||jQuery.guid++;return proxy},now:function(){return+new Date},support:support});jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(i,name){class2type["[object "+name+"]"]=name.toLowerCase()});function isArraylike(obj){var length="length"in obj&&obj.length,type=jQuery.type(obj);if(type==="function"||jQuery.isWindow(obj)){return false}if(obj.nodeType===1&&length){return true}return type==="array"||length===0||typeof length==="number"&&length>0&&length-1 in obj}var Sizzle=function(window){var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate,setDocument,document,docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains,expando="sizzle"+1*new Date,preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),sortOrder=function(a,b){if(a===b){hasDuplicate=true}return 0},MAX_NEGATIVE=1<<31,hasOwn={}.hasOwnProperty,arr=[],pop=arr.pop,push_native=arr.push,push=arr.push,slice=arr.slice,indexOf=function(list,elem){var i=0,len=list.length;for(;i<len;i++){if(list[i]===elem){return i}}return-1},booleans="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",whitespace="[\\x20\\t\\r\\n\\f]",characterEncoding="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",identifier=characterEncoding.replace("w","w#"),attributes="\\["+whitespace+"*("+characterEncoding+")(?:"+whitespace+"*([*^$|!~]?=)"+whitespace+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+identifier+"))|)"+whitespace+"*\\]",pseudos=":("+characterEncoding+")(?:\\(("+"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|"+"((?:\\\\.|[^\\\\()[\\]]|"+attributes+")*)|"+".*"+")\\)|)",rwhitespace=new RegExp(whitespace+"+","g"),rtrim=new RegExp("^"+whitespace+"+|((?:^|[^\\\\])(?:\\\\.)*)"+whitespace+"+$","g"),rcomma=new RegExp("^"+whitespace+"*,"+whitespace+"*"),rcombinators=new RegExp("^"+whitespace+"*([>+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),
18CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)},unloadHandler=function(){setDocument()};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];nodeType=context.nodeType;if(typeof selector!=="string"||!selector||nodeType!==1&&nodeType!==9&&nodeType!==11){return results}if(!seed&&documentIsHTML){if(nodeType!==11&&(match=rquickExpr.exec(selector))){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType!==1&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!=="undefined"&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,parent,doc=node?node.ownerDocument||node:preferredDoc;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;parent=doc.defaultView;if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",unloadHandler,false)}else if(parent.attachEvent){parent.attachEvent("onunload",unloadHandler)}}documentIsHTML=!isXML(doc);support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName);support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!=="undefined"){return context.getElementsByTagName(tag)}else if(support.qsa){return context.querySelectorAll(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){docElem.appendChild(div).innerHTML="<a id='"+expando+"'></a>"+"<select id='"+expando+"-\f]' msallowcapture=''>"+"<option selected=''></option></select>";if(div.querySelectorAll("[msallowcapture^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll("[id~="+expando+"-]").length){rbuggyQSA.push("~=")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}if(!div.querySelectorAll("a#"+expando+"+*").length){rbuggyQSA.push(".#.+[+~]")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.matches||docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[3]||match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[6]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]){match[2]=match[4]||match[5]||""}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!=="undefined"&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result.replace(rwhitespace," ")+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);input[0]=null;return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){text=text.replace(runescape,funescape);return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i<length;i+=2){matchIndexes.push(i)}return matchIndexes}),odd:createPositionalPseudo(function(matchIndexes,length){var i=1;for(;i<length;i+=2){matchIndexes.push(i)}return matchIndexes}),lt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;--i>=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i<length;){matchIndexes.push(i)}return matchIndexes})}};Expr.pseudos["nth"]=Expr.pseudos["eq"];for(i in{radio:true,checkbox:true,file:true,password:true,image:true}){Expr.pseudos[i]=createInputPseudo(i)}for(i in{submit:true,reset:true}){Expr.pseudos[i]=createButtonPseudo(i)}function setFilters(){}setFilters.prototype=Expr.filters=Expr.pseudos;Expr.setFilters=new setFilters;tokenize=Sizzle.tokenize=function(selector,parseOnly){var matched,match,tokens,type,soFar,groups,preFilters,cached=tokenCache[selector+" "];if(cached){return parseOnly?0:cached.slice(0)}soFar=selector;groups=[];preFilters=Expr.preFilter;while(soFar){if(!matched||(match=rcomma.exec(soFar))){if(match){soFar=soFar.slice(match[0].length)||soFar}groups.push(tokens=[])}matched=false;if(match=rcombinators.exec(soFar)){matched=match.shift();tokens.push({value:matched,type:match[0].replace(rtrim," ")});soFar=soFar.slice(matched.length)}for(type in Expr.filter){if((match=matchExpr[type].exec(soFar))&&(!preFilters[type]||(match=preFilters[type](match)))){matched=match.shift();tokens.push({value:matched,type:type,matches:match});soFar=soFar.slice(matched.length)}}if(!matched){break}}return parseOnly?soFar.length:soFar?Sizzle.error(selector):tokenCache(selector,groups).slice(0)};function toSelector(tokens){var i=0,len=tokens.length,selector="";for(;i<len;i++){selector+=tokens[i].value}return selector}function addCombinator(matcher,combinator,base){var dir=combinator.dir,checkNonElements=base&&dir==="parentNode",doneName=done++;return combinator.first?function(elem,context,xml){while(elem=elem[dir]){if(elem.nodeType===1||checkNonElements){return matcher(elem,context,xml)}}}:function(elem,context,xml){var oldCache,outerCache,newCache=[dirruns,doneName];if(xml){while(elem=elem[dir]){if(elem.nodeType===1||checkNonElements){if(matcher(elem,context,xml)){return true}}}}else{while(elem=elem[dir]){if(elem.nodeType===1||checkNonElements){outerCache=elem[expando]||(elem[expando]={});if((oldCache=outerCache[dir])&&oldCache[0]===dirruns&&oldCache[1]===doneName){return newCache[2]=oldCache[2]}else{outerCache[dir]=newCache;if(newCache[2]=matcher(elem,context,xml)){return true}}}}}}}function elementMatcher(matchers){return matchers.length>1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i<len;i++){Sizzle(selector,contexts[i],results)}return results}function condense(unmatched,map,filter,context,xml){var elem,newUnmatched=[],i=0,len=unmatched.length,mapped=map!=null;for(;i<len;i++){if(elem=unmatched[i]){if(!filter||filter(elem,context,xml)){newUnmatched.push(elem);if(mapped){map.push(i)}}}}return newUnmatched}function setMatcher(preFilter,selector,matcher,postFilter,postFinder,postSelector){if(postFilter&&!postFilter[expando]){postFilter=setMatcher(postFilter)}if(postFinder&&!postFinder[expando]){postFinder=setMatcher(postFinder,postSelector)}return markFunction(function(seed,results,context,xml){var temp,i,elem,preMap=[],postMap=[],preexisting=results.length,elems=seed||multipleContexts(selector||"*",context.nodeType?[context]:context,[]),matcherIn=preFilter&&(seed||!selector)?condense(elems,preMap,preFilter,context,xml):elems,matcherOut=matcher?postFinder||(seed?preFilter:preexisting||postFilter)?[]:results:matcherIn;if(matcher){matcher(matcherIn,matcherOut,context,xml)}if(postFilter){temp=condense(matcherOut,postMap);postFilter(temp,[],context,xml);i=temp.length;while(i--){if(elem=temp[i]){matcherOut[postMap[i]]=!(matcherIn[postMap[i]]=elem)}}}if(seed){if(postFinder||preFilter){if(postFinder){temp=[];i=matcherOut.length;while(i--){if(elem=matcherOut[i]){temp.push(matcherIn[i]=elem)}}postFinder(null,matcherOut=[],temp,xml)}i=matcherOut.length;while(i--){if((elem=matcherOut[i])&&(temp=postFinder?indexOf(seed,elem):preMap[i])>-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){var ret=!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml));checkContext=null;return ret}];for(;i<len;i++){if(matcher=Expr.relative[tokens[i].type]){matchers=[addCombinator(elementMatcher(matchers),matcher)]}else{matcher=Expr.filter[tokens[i].type].apply(null,tokens[i].matches);if(matcher[expando]){j=++i;for(;j<len;j++){if(Expr.relative[tokens[j].type]){break}}return setMatcher(i>1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i<j&&matcherFromTokens(tokens.slice(i,j)),j<len&&matcherFromTokens(tokens=tokens.slice(j)),j<len&&toSelector(tokens))}matchers.push(matcher)}}return elementMatcher(matchers)}function matcherFromGroupMatchers(elementMatchers,setMatchers){var bySet=setMatchers.length>0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="<a href='#'></a>";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="<input/>";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}return Sizzle}(window);jQuery.find=Sizzle;jQuery.expr=Sizzle.selectors;jQuery.expr[":"]=jQuery.expr.pseudos;jQuery.unique=Sizzle.uniqueSort;jQuery.text=Sizzle.getText;jQuery.isXMLDoc=Sizzle.isXML;jQuery.contains=Sizzle.contains;var rneedsContext=jQuery.expr.match.needsContext;var rsingleTag=/^<(\w+)\s*\/?>(?:<\/\1>|)$/;var risSimple=/^.[^:#\[\.,]*$/;function winnow(elements,qualifier,not){if(jQuery.isFunction(qualifier)){return jQuery.grep(elements,function(elem,i){return!!qualifier.call(elem,i,elem)!==not})}if(qualifier.nodeType){return jQuery.grep(elements,function(elem){return elem===qualifier!==not})}if(typeof qualifier==="string"){if(risSimple.test(qualifier)){return jQuery.filter(qualifier,elements,not)}qualifier=jQuery.filter(qualifier,elements)}return jQuery.grep(elements,function(elem){return jQuery.inArray(elem,qualifier)>=0!==not})}jQuery.filter=function(expr,elems,not){var elem=elems[0];if(not){expr=":not("+expr+")"}return elems.length===1&&elem.nodeType===1?jQuery.find.matchesSelector(elem,expr)?[elem]:[]:jQuery.find.matches(expr,jQuery.grep(elems,function(elem){return elem.nodeType===1}))};jQuery.fn.extend({find:function(selector){var i,ret=[],self=this,len=self.length;if(typeof selector!=="string"){return this.pushStack(jQuery(selector).filter(function(){for(i=0;i<len;i++){if(jQuery.contains(self[i],this)){return true}}}))}for(i=0;i<len;i++){jQuery.find(selector,self[i],ret)}ret=this.pushStack(len>1?jQuery.unique(ret):ret);ret.selector=this.selector?this.selector+" "+selector:selector;return ret},filter:function(selector){return this.pushStack(winnow(this,selector||[],false))},not:function(selector){return this.pushStack(winnow(this,selector||[],true))},is:function(selector){return!!winnow(this,typeof selector==="string"&&rneedsContext.test(selector)?jQuery(selector):selector||[],false).length}});var rootjQuery,document=window.document,rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,init=jQuery.fn.init=function(selector,context){var match,elem;if(!selector){return this}if(typeof selector==="string"){if(selector.charAt(0)==="<"&&selector.charAt(selector.length-1)===">"&&selector.length>=3){match=[null,selector,null]}else{match=rquickExpr.exec(selector)}if(match&&(match[1]||!context)){if(match[1]){context=context instanceof jQuery?context[0]:context;jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,true));if(rsingleTag.test(match[1])&&jQuery.isPlainObject(context)){for(match in context){if(jQuery.isFunction(this[match])){this[match](context[match])}else{this.attr(match,context[match])}}}return this}else{elem=document.getElementById(match[2]);if(elem&&elem.parentNode){if(elem.id!==match[2]){return rootjQuery.find(selector)}this.length=1;this[0]=elem}this.context=document;this.selector=selector;return this}}else if(!context||context.jquery){return(context||rootjQuery).find(selector)}else{return this.constructor(context).find(selector)}}else if(selector.nodeType){this.context=this[0]=selector;this.length=1;return this}else if(jQuery.isFunction(selector)){return typeof rootjQuery.ready!=="undefined"?rootjQuery.ready(selector):selector(jQuery)}if(selector.selector!==undefined){this.selector=selector.selector;this.context=selector.context}return jQuery.makeArray(selector,this)};init.prototype=jQuery.fn;rootjQuery=jQuery(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/,guaranteedUnique={children:true,contents:true,next:true,prev:true};jQuery.extend({dir:function(elem,dir,until){var matched=[],cur=elem[dir];while(cur&&cur.nodeType!==9&&(until===undefined||cur.nodeType!==1||!jQuery(cur).is(until))){if(cur.nodeType===1){matched.push(cur)}cur=cur[dir]}return matched},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){r.push(n);
19}}return r}});jQuery.fn.extend({has:function(target){var i,targets=jQuery(target,this),len=targets.length;return this.filter(function(){for(i=0;i<len;i++){if(jQuery.contains(this,targets[i])){return true}}})},closest:function(selectors,context){var cur,i=0,l=this.length,matched=[],pos=rneedsContext.test(selectors)||typeof selectors!=="string"?jQuery(selectors,context||this.context):0;for(;i<l;i++){for(cur=this[i];cur&&cur!==context;cur=cur.parentNode){if(cur.nodeType<11&&(pos?pos.index(cur)>-1:cur.nodeType===1&&jQuery.find.matchesSelector(cur,selectors))){matched.push(cur);break}}}return this.pushStack(matched.length>1?jQuery.unique(matched):matched)},index:function(elem){if(!elem){return this[0]&&this[0].parentNode?this.first().prevAll().length:-1}if(typeof elem==="string"){return jQuery.inArray(this[0],jQuery(elem))}return jQuery.inArray(elem.jquery?elem[0]:elem,this)},add:function(selector,context){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),jQuery(selector,context))))},addBack:function(selector){return this.add(selector==null?this.prevObject:this.prevObject.filter(selector))}});function sibling(cur,dir){do{cur=cur[dir]}while(cur&&cur.nodeType!==1);return cur}jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&parent.nodeType!==11?parent:null},parents:function(elem){return jQuery.dir(elem,"parentNode")},parentsUntil:function(elem,i,until){return jQuery.dir(elem,"parentNode",until)},next:function(elem){return sibling(elem,"nextSibling")},prev:function(elem){return sibling(elem,"previousSibling")},nextAll:function(elem){return jQuery.dir(elem,"nextSibling")},prevAll:function(elem){return jQuery.dir(elem,"previousSibling")},nextUntil:function(elem,i,until){return jQuery.dir(elem,"nextSibling",until)},prevUntil:function(elem,i,until){return jQuery.dir(elem,"previousSibling",until)},siblings:function(elem){return jQuery.sibling((elem.parentNode||{}).firstChild,elem)},children:function(elem){return jQuery.sibling(elem.firstChild)},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.merge([],elem.childNodes)}},function(name,fn){jQuery.fn[name]=function(until,selector){var ret=jQuery.map(this,fn,until);if(name.slice(-5)!=="Until"){selector=until}if(selector&&typeof selector==="string"){ret=jQuery.filter(selector,ret)}if(this.length>1){if(!guaranteedUnique[name]){ret=jQuery.unique(ret)}if(rparentsprev.test(name)){ret=ret.reverse()}}return this.pushStack(ret)}});var rnotwhite=/\S+/g;var optionsCache={};function createOptions(options){var object=optionsCache[options]={};jQuery.each(options.match(rnotwhite)||[],function(_,flag){object[flag]=true});return object}jQuery.Callbacks=function(options){options=typeof options==="string"?optionsCache[options]||createOptions(options):jQuery.extend({},options);var firing,memory,fired,firingLength,firingIndex,firingStart,list=[],stack=!options.once&&[],fire=function(data){memory=options.memory&&data;fired=true;firingIndex=firingStart||0;firingStart=0;firingLength=list.length;firing=true;for(;list&&firingIndex<firingLength;firingIndex++){if(list[firingIndex].apply(data[0],data[1])===false&&options.stopOnFalse){memory=false;break}}firing=false;if(list){if(stack){if(stack.length){fire(stack.shift())}}else if(memory){list=[]}else{self.disable()}}},self={add:function(){if(list){var start=list.length;(function add(args){jQuery.each(args,function(_,arg){var type=jQuery.type(arg);if(type==="function"){if(!options.unique||!self.has(arg)){list.push(arg)}}else if(arg&&arg.length&&type!=="string"){add(arg)}})})(arguments);if(firing){firingLength=list.length}else if(memory){firingStart=start;fire(memory)}}return this},remove:function(){if(list){jQuery.each(arguments,function(_,arg){var index;while((index=jQuery.inArray(arg,list,index))>-1){list.splice(index,1);if(firing){if(index<=firingLength){firingLength--}if(index<=firingIndex){firingIndex--}}}})}return this},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:!!(list&&list.length)},empty:function(){list=[];firingLength=0;return this},disable:function(){list=stack=memory=undefined;return this},disabled:function(){return!list},lock:function(){stack=undefined;if(!memory){self.disable()}return this},locked:function(){return!stack},fireWith:function(context,args){if(list&&(!fired||stack)){args=args||[];args=[context,args.slice?args.slice():args];if(firing){stack.push(args)}else{fire(args)}}return this},fire:function(){self.fireWith(this,arguments);return this},fired:function(){return!!fired}};return self};jQuery.extend({Deferred:function(func){var tuples=[["resolve","done",jQuery.Callbacks("once memory"),"resolved"],["reject","fail",jQuery.Callbacks("once memory"),"rejected"],["notify","progress",jQuery.Callbacks("memory")]],state="pending",promise={state:function(){return state},always:function(){deferred.done(arguments).fail(arguments);return this},then:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){var fn=jQuery.isFunction(fns[i])&&fns[i];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);if(returned&&jQuery.isFunction(returned.promise)){returned.promise().done(newDefer.resolve).fail(newDefer.reject).progress(newDefer.notify)}else{newDefer[tuple[0]+"With"](this===promise?newDefer.promise():this,fn?[returned]:arguments)}})});fns=null}).promise()},promise:function(obj){return obj!=null?jQuery.extend(obj,promise):promise}},deferred={};promise.pipe=promise.then;jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[3];promise[tuple[1]]=list.add;if(stateString){list.add(function(){state=stateString},tuples[i^1][2].disable,tuples[2][2].lock)}deferred[tuple[0]]=function(){deferred[tuple[0]+"With"](this===deferred?promise:this,arguments);return this};deferred[tuple[0]+"With"]=list.fireWith});promise.promise(deferred);if(func){func.call(deferred,deferred)}return deferred},when:function(subordinate){var i=0,resolveValues=slice.call(arguments),length=resolveValues.length,remaining=length!==1||subordinate&&jQuery.isFunction(subordinate.promise)?length:0,deferred=remaining===1?subordinate:jQuery.Deferred(),updateFunc=function(i,contexts,values){return function(value){contexts[i]=this;values[i]=arguments.length>1?slice.call(arguments):value;if(values===progressValues){deferred.notifyWith(contexts,values)}else if(!--remaining){deferred.resolveWith(contexts,values)}}},progressValues,progressContexts,resolveContexts;if(length>1){progressValues=new Array(length);progressContexts=new Array(length);resolveContexts=new Array(length);for(;i<length;i++){if(resolveValues[i]&&jQuery.isFunction(resolveValues[i].promise)){resolveValues[i].promise().done(updateFunc(i,resolveContexts,resolveValues)).fail(deferred.reject).progress(updateFunc(i,progressContexts,progressValues))}else{--remaining}}}if(!remaining){deferred.resolveWith(resolveContexts,resolveValues)}return deferred.promise()}});var readyList;jQuery.fn.ready=function(fn){jQuery.ready.promise().done(fn);return this};jQuery.extend({isReady:false,readyWait:1,holdReady:function(hold){if(hold){jQuery.readyWait++}else{jQuery.ready(true)}},ready:function(wait){if(wait===true?--jQuery.readyWait:jQuery.isReady){return}if(!document.body){return setTimeout(jQuery.ready)}jQuery.isReady=true;if(wait!==true&&--jQuery.readyWait>0){return}readyList.resolveWith(document,[jQuery]);if(jQuery.fn.triggerHandler){jQuery(document).triggerHandler("ready");jQuery(document).off("ready")}}});function detach(){if(document.addEventListener){document.removeEventListener("DOMContentLoaded",completed,false);window.removeEventListener("load",completed,false)}else{document.detachEvent("onreadystatechange",completed);window.detachEvent("onload",completed)}}function completed(){if(document.addEventListener||event.type==="load"||document.readyState==="complete"){detach();jQuery.ready()}}jQuery.ready.promise=function(obj){if(!readyList){readyList=jQuery.Deferred();if(document.readyState==="complete"){setTimeout(jQuery.ready)}else if(document.addEventListener){document.addEventListener("DOMContentLoaded",completed,false);window.addEventListener("load",completed,false)}else{document.attachEvent("onreadystatechange",completed);window.attachEvent("onload",completed);var top=false;try{top=window.frameElement==null&&document.documentElement}catch(e){}if(top&&top.doScroll){(function doScrollCheck(){if(!jQuery.isReady){try{top.doScroll("left")}catch(e){return setTimeout(doScrollCheck,50)}detach();jQuery.ready()}})()}}}return readyList.promise(obj)};var strundefined=typeof undefined;var i;for(i in jQuery(support)){break}support.ownLast=i!=="0";support.inlineBlockNeedsLayout=false;jQuery(function(){var val,div,body,container;body=document.getElementsByTagName("body")[0];if(!body||!body.style){return}div=document.createElement("div");container=document.createElement("div");container.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px";body.appendChild(container).appendChild(div);if(typeof div.style.zoom!==strundefined){div.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";support.inlineBlockNeedsLayout=val=div.offsetWidth===3;if(val){body.style.zoom=1}}body.removeChild(container)});(function(){var div=document.createElement("div");if(support.deleteExpando==null){support.deleteExpando=true;try{delete div.test}catch(e){support.deleteExpando=false}}div=null})();jQuery.acceptData=function(elem){var noData=jQuery.noData[(elem.nodeName+" ").toLowerCase()],nodeType=+elem.nodeType||1;return nodeType!==1&&nodeType!==9?false:!noData||noData!==true&&elem.getAttribute("classid")===noData};var rbrace=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,rmultiDash=/([A-Z])/g;function dataAttr(elem,key,data){if(data===undefined&&elem.nodeType===1){var name="data-"+key.replace(rmultiDash,"-$1").toLowerCase();data=elem.getAttribute(name);if(typeof data==="string"){try{data=data==="true"?true:data==="false"?false:data==="null"?null:+data+""===data?+data:rbrace.test(data)?jQuery.parseJSON(data):data}catch(e){}jQuery.data(elem,key,data)}else{data=undefined}}return data}function isEmptyDataObject(obj){var name;for(name in obj){if(name==="data"&&jQuery.isEmptyObject(obj[name])){continue}if(name!=="toJSON"){return false}}return true}function internalData(elem,name,data,pvt){if(!jQuery.acceptData(elem)){return}var ret,thisCache,internalKey=jQuery.expando,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[internalKey]:elem[internalKey]&&internalKey;if((!id||!cache[id]||!pvt&&!cache[id].data)&&data===undefined&&typeof name==="string"){return}if(!id){if(isNode){id=elem[internalKey]=deletedIds.pop()||jQuery.guid++}else{id=internalKey}}if(!cache[id]){cache[id]=isNode?{}:{toJSON:jQuery.noop}}if(typeof name==="object"||typeof name==="function"){if(pvt){cache[id]=jQuery.extend(cache[id],name)}else{cache[id].data=jQuery.extend(cache[id].data,name)}}thisCache=cache[id];if(!pvt){if(!thisCache.data){thisCache.data={}}thisCache=thisCache.data}if(data!==undefined){thisCache[jQuery.camelCase(name)]=data}if(typeof name==="string"){ret=thisCache[name];if(ret==null){ret=thisCache[jQuery.camelCase(name)]}}else{ret=thisCache}return ret}function internalRemoveData(elem,name,pvt){if(!jQuery.acceptData(elem)){return}var thisCache,i,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[jQuery.expando]:jQuery.expando;if(!cache[id]){return}if(name){thisCache=pvt?cache[id]:cache[id].data;if(thisCache){if(!jQuery.isArray(name)){if(name in thisCache){name=[name]}else{name=jQuery.camelCase(name);if(name in thisCache){name=[name]}else{name=name.split(" ")}}}else{name=name.concat(jQuery.map(name,jQuery.camelCase))}i=name.length;while(i--){delete thisCache[name[i]]}if(pvt?!isEmptyDataObject(thisCache):!jQuery.isEmptyObject(thisCache)){return}}}if(!pvt){delete cache[id].data;if(!isEmptyDataObject(cache[id])){return}}if(isNode){jQuery.cleanData([elem],true)}else if(support.deleteExpando||cache!=cache.window){delete cache[id]}else{cache[id]=null}}jQuery.extend({cache:{},noData:{"applet ":true,"embed ":true,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(elem){elem=elem.nodeType?jQuery.cache[elem[jQuery.expando]]:elem[jQuery.expando];return!!elem&&!isEmptyDataObject(elem)},data:function(elem,name,data){return internalData(elem,name,data)},removeData:function(elem,name){return internalRemoveData(elem,name)},_data:function(elem,name,data){return internalData(elem,name,data,true)},_removeData:function(elem,name){return internalRemoveData(elem,name,true)}});jQuery.fn.extend({data:function(key,value){var i,name,data,elem=this[0],attrs=elem&&elem.attributes;if(key===undefined){if(this.length){data=jQuery.data(elem);if(elem.nodeType===1&&!jQuery._data(elem,"parsedAttrs")){i=attrs.length;while(i--){if(attrs[i]){name=attrs[i].name;if(name.indexOf("data-")===0){name=jQuery.camelCase(name.slice(5));dataAttr(elem,name,data[name])}}}jQuery._data(elem,"parsedAttrs",true)}}return data}if(typeof key==="object"){return this.each(function(){jQuery.data(this,key)})}return arguments.length>1?this.each(function(){jQuery.data(this,key,value)}):elem?dataAttr(elem,key,jQuery.data(elem,key)):undefined},removeData:function(key){return this.each(function(){jQuery.removeData(this,key)})}});jQuery.extend({queue:function(elem,type,data){var queue;if(elem){type=(type||"fx")+"queue";queue=jQuery._data(elem,type);if(data){if(!queue||jQuery.isArray(data)){queue=jQuery._data(elem,type,jQuery.makeArray(data))}else{queue.push(data)}}return queue||[]}},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function(){jQuery.dequeue(elem,type)};if(fn==="inprogress"){fn=queue.shift();startLength--}if(fn){if(type==="fx"){queue.unshift("inprogress")}delete hooks.stop;fn.call(elem,next,hooks)}if(!startLength&&hooks){hooks.empty.fire()}},_queueHooks:function(elem,type){var key=type+"queueHooks";return jQuery._data(elem,key)||jQuery._data(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){jQuery._removeData(elem,type+"queue");jQuery._removeData(elem,key)})})}});jQuery.fn.extend({queue:function(type,data){var setter=2;if(typeof type!=="string"){data=type;type="fx";setter--}if(arguments.length<setter){return jQuery.queue(this[0],type)}return data===undefined?this:this.each(function(){var queue=jQuery.queue(this,type,data);jQuery._queueHooks(this,type);if(type==="fx"&&queue[0]!=="inprogress"){jQuery.dequeue(this,type)}})},dequeue:function(type){return this.each(function(){jQuery.dequeue(this,type)})},clearQueue:function(type){return this.queue(type||"fx",[])},promise:function(type,obj){var tmp,count=1,defer=jQuery.Deferred(),elements=this,i=this.length,resolve=function(){if(!--count){defer.resolveWith(elements,[elements])}};if(typeof type!=="string"){obj=type;type=undefined}type=type||"fx";while(i--){tmp=jQuery._data(elements[i],type+"queueHooks");if(tmp&&tmp.empty){count++;tmp.empty.add(resolve)}}resolve();return defer.promise(obj)}});var pnum=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;var cssExpand=["Top","Right","Bottom","Left"];var isHidden=function(elem,el){elem=el||elem;return jQuery.css(elem,"display")==="none"||!jQuery.contains(elem.ownerDocument,elem)};var access=jQuery.access=function(elems,fn,key,value,chainable,emptyGet,raw){var i=0,length=elems.length,bulk=key==null;if(jQuery.type(key)==="object"){chainable=true;for(i in key){jQuery.access(elems,fn,i,key[i],true,emptyGet,raw)}}else if(value!==undefined){chainable=true;if(!jQuery.isFunction(value)){raw=true}if(bulk){if(raw){fn.call(elems,value);fn=null}else{bulk=fn;fn=function(elem,key,value){return bulk.call(jQuery(elem),value)}}}if(fn){for(;i<length;i++){fn(elems[i],key,raw?value:value.call(elems[i],i,fn(elems[i],key)))}}}return chainable?elems:bulk?fn.call(elems):length?fn(elems[0],key):emptyGet};var rcheckableType=/^(?:checkbox|radio)$/i;(function(){var input=document.createElement("input"),div=document.createElement("div"),fragment=document.createDocumentFragment();div.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";support.leadingWhitespace=div.firstChild.nodeType===3;support.tbody=!div.getElementsByTagName("tbody").length;support.htmlSerialize=!!div.getElementsByTagName("link").length;support.html5Clone=document.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>";input.type="checkbox";input.checked=true;fragment.appendChild(input);support.appendChecked=input.checked;div.innerHTML="<textarea>x</textarea>";support.noCloneChecked=!!div.cloneNode(true).lastChild.defaultValue;fragment.appendChild(div);div.innerHTML="<input type='radio' checked='checked' name='t'/>";support.checkClone=div.cloneNode(true).cloneNode(true).lastChild.checked;support.noCloneEvent=true;if(div.attachEvent){div.attachEvent("onclick",function(){support.noCloneEvent=false});div.cloneNode(true).click()}if(support.deleteExpando==null){support.deleteExpando=true;try{delete div.test}catch(e){support.deleteExpando=false}}})();(function(){var i,eventName,div=document.createElement("div");for(i in{submit:true,change:true,focusin:true}){eventName="on"+i;if(!(support[i+"Bubbles"]=eventName in window)){div.setAttribute(eventName,"t");support[i+"Bubbles"]=div.attributes[eventName].expando===false}}div=null})();var rformElems=/^(?:input|select|textarea)$/i,rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu)|click/,rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,rtypenamespace=/^([^.]*)(?:\.(.+)|)$/;function returnTrue(){return true}function returnFalse(){return false}function safeActiveElement(){try{return document.activeElement}catch(err){}}jQuery.event={global:{},add:function(elem,types,handler,data,selector){var tmp,events,t,handleObjIn,special,eventHandle,handleObj,handlers,type,namespaces,origType,elemData=jQuery._data(elem);if(!elemData){return}if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;selector=handleObjIn.selector}if(!handler.guid){handler.guid=jQuery.guid++}if(!(events=elemData.events)){events=elemData.events={}}if(!(eventHandle=elemData.handle)){eventHandle=elemData.handle=function(e){return typeof jQuery!==strundefined&&(!e||jQuery.event.triggered!==e.type)?jQuery.event.dispatch.apply(eventHandle.elem,arguments):undefined};eventHandle.elem=elem}types=(types||"").match(rnotwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){continue}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;special=jQuery.event.special[type]||{};handleObj=jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn);if(!(handlers=events[type])){handlers=events[type]=[];handlers.delegateCount=0;if(!special.setup||special.setup.call(elem,data,namespaces,eventHandle)===false){if(elem.addEventListener){elem.addEventListener(type,eventHandle,false)}else if(elem.attachEvent){elem.attachEvent("on"+type,eventHandle)}}}if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid=handler.guid}}if(selector){handlers.splice(handlers.delegateCount++,0,handleObj)}else{handlers.push(handleObj)}jQuery.event.global[type]=true}elem=null},remove:function(elem,types,handler,selector,mappedTypes){var j,handleObj,tmp,origCount,t,events,special,handlers,type,namespaces,origType,elemData=jQuery.hasData(elem)&&jQuery._data(elem);if(!elemData||!(events=elemData.events)){return}types=(types||"").match(rnotwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){for(type in events){jQuery.event.remove(elem,type+types[t],handler,selector,true)}continue}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;handlers=events[type]||[];tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)");origCount=j=handlers.length;while(j--){handleObj=handlers[j];if((mappedTypes||origType===handleObj.origType)&&(!handler||handler.guid===handleObj.guid)&&(!tmp||tmp.test(handleObj.namespace))&&(!selector||selector===handleObj.selector||selector==="**"&&handleObj.selector)){handlers.splice(j,1);if(handleObj.selector){handlers.delegateCount--}if(special.remove){special.remove.call(elem,handleObj)}}}if(origCount&&!handlers.length){if(!special.teardown||special.teardown.call(elem,namespaces,elemData.handle)===false){jQuery.removeEvent(elem,type,elemData.handle)}delete events[type]}}if(jQuery.isEmptyObject(events)){delete elemData.handle;jQuery._removeData(elem,"events")}},trigger:function(event,data,elem,onlyHandlers){var handle,ontype,cur,bubbleType,special,tmp,i,eventPath=[elem||document],type=hasOwn.call(event,"type")?event.type:event,namespaces=hasOwn.call(event,"namespace")?event.namespace.split("."):[];cur=tmp=elem=elem||document;if(elem.nodeType===3||elem.nodeType===8){return}if(rfocusMorph.test(type+jQuery.event.triggered)){return}if(type.indexOf(".")>=0){namespaces=type.split(".");type=namespaces.shift();namespaces.sort()}ontype=type.indexOf(":")<0&&"on"+type;event=event[jQuery.expando]?event:new jQuery.Event(type,typeof event==="object"&&event);event.isTrigger=onlyHandlers?2:3;event.namespace=namespaces.join(".");event.namespace_re=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;event.result=undefined;if(!event.target){event.target=elem}data=data==null?[event]:jQuery.makeArray(data,[event]);special=jQuery.event.special[type]||{};if(!onlyHandlers&&special.trigger&&special.trigger.apply(elem,data)===false){return}if(!onlyHandlers&&!special.noBubble&&!jQuery.isWindow(elem)){bubbleType=special.delegateType||type;if(!rfocusMorph.test(bubbleType+type)){cur=cur.parentNode}for(;cur;cur=cur.parentNode){eventPath.push(cur);tmp=cur}if(tmp===(elem.ownerDocument||document)){eventPath.push(tmp.defaultView||tmp.parentWindow||window)}}i=0;while((cur=eventPath[i++])&&!event.isPropagationStopped()){event.type=i>1?bubbleType:special.bindType||type;handle=(jQuery._data(cur,"events")||{})[event.type]&&jQuery._data(cur,"handle");if(handle){handle.apply(cur,data)}handle=ontype&&cur[ontype];if(handle&&handle.apply&&jQuery.acceptData(cur)){event.result=handle.apply(cur,data);if(event.result===false){event.preventDefault()}}}event.type=type;if(!onlyHandlers&&!event.isDefaultPrevented()){if((!special._default||special._default.apply(eventPath.pop(),data)===false)&&jQuery.acceptData(elem)){if(ontype&&elem[type]&&!jQuery.isWindow(elem)){tmp=elem[ontype];if(tmp){elem[ontype]=null}jQuery.event.triggered=type;try{elem[type]()}catch(e){}jQuery.event.triggered=undefined;if(tmp){elem[ontype]=tmp}}}}return event.result},dispatch:function(event){event=jQuery.event.fix(event);var i,ret,handleObj,matched,j,handlerQueue=[],args=slice.call(arguments),handlers=(jQuery._data(this,"events")||{})[event.type]||[],special=jQuery.event.special[event.type]||{};args[0]=event;event.delegateTarget=this;if(special.preDispatch&&special.preDispatch.call(this,event)===false){return}handlerQueue=jQuery.event.handlers.call(this,event,handlers);i=0;while((matched=handlerQueue[i++])&&!event.isPropagationStopped()){event.currentTarget=matched.elem;j=0;while((handleObj=matched.handlers[j++])&&!event.isImmediatePropagationStopped()){if(!event.namespace_re||event.namespace_re.test(handleObj.namespace)){event.handleObj=handleObj;event.data=handleObj.data;ret=((jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler).apply(matched.elem,args);if(ret!==undefined){if((event.result=ret)===false){event.preventDefault();event.stopPropagation()}}}}}if(special.postDispatch){special.postDispatch.call(this,event)}return event.result},handlers:function(event,handlers){var sel,handleObj,matches,i,handlerQueue=[],delegateCount=handlers.delegateCount,cur=event.target;if(delegateCount&&cur.nodeType&&(!event.button||event.type!=="click")){for(;cur!=this;cur=cur.parentNode||this){if(cur.nodeType===1&&(cur.disabled!==true||event.type!=="click")){matches=[];for(i=0;i<delegateCount;i++){handleObj=handlers[i];sel=handleObj.selector+" ";if(matches[sel]===undefined){matches[sel]=handleObj.needsContext?jQuery(sel,this).index(cur)>=0:jQuery.find(sel,this,null,[cur]).length}if(matches[sel]){matches.push(handleObj)}}if(matches.length){handlerQueue.push({elem:cur,handlers:matches})}}}}if(delegateCount<handlers.length){handlerQueue.push({elem:this,handlers:handlers.slice(delegateCount)})}return handlerQueue},fix:function(event){if(event[jQuery.expando]){return event}var i,prop,copy,type=event.type,originalEvent=event,fixHook=this.fixHooks[type];if(!fixHook){this.fixHooks[type]=fixHook=rmouseEvent.test(type)?this.mouseHooks:rkeyEvent.test(type)?this.keyHooks:{}}copy=fixHook.props?this.props.concat(fixHook.props):this.props;event=new jQuery.Event(originalEvent);i=copy.length;while(i--){prop=copy[i];event[prop]=originalEvent[prop]}if(!event.target){event.target=originalEvent.srcElement||document}if(event.target.nodeType===3){event.target=event.target.parentNode}event.metaKey=!!event.metaKey;return fixHook.filter?fixHook.filter(event,originalEvent):event},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(event,original){if(event.which==null){event.which=original.charCode!=null?original.charCode:original.keyCode}return event}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(event,original){var body,eventDoc,doc,button=original.button,fromElement=original.fromElement;if(event.pageX==null&&original.clientX!=null){eventDoc=event.target.ownerDocument||document;doc=eventDoc.documentElement;body=eventDoc.body;event.pageX=original.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc&&doc.clientLeft||body&&body.clientLeft||0);event.pageY=original.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc&&doc.clientTop||body&&body.clientTop||0)}if(!event.relatedTarget&&fromElement){event.relatedTarget=fromElement===event.target?original.toElement:fromElement}if(!event.which&&button!==undefined){event.which=button&1?1:button&2?3:button&4?2:0}return event}},special:{load:{noBubble:true},focus:{trigger:function(){if(this!==safeActiveElement()&&this.focus){try{this.focus();return false}catch(e){}}},delegateType:"focusin"},blur:{trigger:function(){if(this===safeActiveElement()&&this.blur){this.blur();return false}},delegateType:"focusout"},click:{trigger:function(){if(jQuery.nodeName(this,"input")&&this.type==="checkbox"&&this.click){this.click();return false}},_default:function(event){return jQuery.nodeName(event.target,"a")}},beforeunload:{postDispatch:function(event){if(event.result!==undefined&&event.originalEvent){event.originalEvent.returnValue=event.result}}}},simulate:function(type,elem,event,bubble){var e=jQuery.extend(new jQuery.Event,event,{type:type,isSimulated:true,originalEvent:{}});if(bubble){jQuery.event.trigger(e,null,elem)}else{jQuery.event.dispatch.call(elem,e)}if(e.isDefaultPrevented()){event.preventDefault()}}};jQuery.removeEvent=document.removeEventListener?function(elem,type,handle){if(elem.removeEventListener){elem.removeEventListener(type,handle,false)}}:function(elem,type,handle){var name="on"+type;if(elem.detachEvent){if(typeof elem[name]===strundefined){elem[name]=null}elem.detachEvent(name,handle)}};jQuery.Event=function(src,props){if(!(this instanceof jQuery.Event)){return new jQuery.Event(src,props)}if(src&&src.type){this.originalEvent=src;this.type=src.type;this.isDefaultPrevented=src.defaultPrevented||src.defaultPrevented===undefined&&src.returnValue===false?returnTrue:returnFalse}else{this.type=src}if(props){jQuery.extend(this,props)}this.timeStamp=src&&src.timeStamp||jQuery.now();this[jQuery.expando]=true};jQuery.Event.prototype={isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=returnTrue;if(!e){return}if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=returnTrue;if(!e){return}if(e.stopPropagation){e.stopPropagation()}e.cancelBubble=true},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=returnTrue;if(e&&e.stopImmediatePropagation){e.stopImmediatePropagation()}this.stopPropagation()}};jQuery.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(orig,fix){jQuery.event.special[orig]={delegateType:fix,bindType:fix,handle:function(event){var ret,target=this,related=event.relatedTarget,handleObj=event.handleObj;if(!related||related!==target&&!jQuery.contains(target,related)){event.type=handleObj.origType;ret=handleObj.handler.apply(this,arguments);event.type=fix}return ret}}});if(!support.submitBubbles){jQuery.event.special.submit={setup:function(){if(jQuery.nodeName(this,"form")){return false}jQuery.event.add(this,"click._submit keypress._submit",function(e){var elem=e.target,form=jQuery.nodeName(elem,"input")||jQuery.nodeName(elem,"button")?elem.form:undefined;if(form&&!jQuery._data(form,"submitBubbles")){jQuery.event.add(form,"submit._submit",function(event){event._submit_bubble=true});jQuery._data(form,"submitBubbles",true)}})},postDispatch:function(event){if(event._submit_bubble){delete event._submit_bubble;if(this.parentNode&&!event.isTrigger){jQuery.event.simulate("submit",this.parentNode,event,true)}}},teardown:function(){if(jQuery.nodeName(this,"form")){return false}jQuery.event.remove(this,"._submit")}}}if(!support.changeBubbles){jQuery.event.special.change={setup:function(){if(rformElems.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){jQuery.event.add(this,"propertychange._change",function(event){if(event.originalEvent.propertyName==="checked"){this._just_changed=true}});jQuery.event.add(this,"click._change",function(event){if(this._just_changed&&!event.isTrigger){this._just_changed=false}jQuery.event.simulate("change",this,event,true)})}return false}jQuery.event.add(this,"beforeactivate._change",function(e){var elem=e.target;if(rformElems.test(elem.nodeName)&&!jQuery._data(elem,"changeBubbles")){jQuery.event.add(elem,"change._change",function(event){if(this.parentNode&&!event.isSimulated&&!event.isTrigger){jQuery.event.simulate("change",this.parentNode,event,true)}});jQuery._data(elem,"changeBubbles",true)}})},handle:function(event){var elem=event.target;if(this!==elem||event.isSimulated||event.isTrigger||elem.type!=="radio"&&elem.type!=="checkbox"){return event.handleObj.handler.apply(this,arguments)}},teardown:function(){jQuery.event.remove(this,"._change");return!rformElems.test(this.nodeName)}}}if(!support.focusinBubbles){jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){var handler=function(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event),true)};jQuery.event.special[fix]={setup:function(){var doc=this.ownerDocument||this,attaches=jQuery._data(doc,fix);if(!attaches){doc.addEventListener(orig,handler,true)}jQuery._data(doc,fix,(attaches||0)+1)},teardown:function(){var doc=this.ownerDocument||this,attaches=jQuery._data(doc,fix)-1;if(!attaches){doc.removeEventListener(orig,handler,true);jQuery._removeData(doc,fix)}else{jQuery._data(doc,fix,attaches)}}}})}jQuery.fn.extend({on:function(types,selector,data,fn,one){var type,origFn;if(typeof types==="object"){if(typeof selector!=="string"){data=data||selector;selector=undefined}for(type in types){this.on(type,selector,data,types[type],one);
20}return this}if(data==null&&fn==null){fn=selector;data=selector=undefined}else if(fn==null){if(typeof selector==="string"){fn=data;data=undefined}else{fn=data;data=selector;selector=undefined}}if(fn===false){fn=returnFalse}else if(!fn){return this}if(one===1){origFn=fn;fn=function(event){jQuery().off(event);return origFn.apply(this,arguments)};fn.guid=origFn.guid||(origFn.guid=jQuery.guid++)}return this.each(function(){jQuery.event.add(this,types,fn,data,selector)})},one:function(types,selector,data,fn){return this.on(types,selector,data,fn,1)},off:function(types,selector,fn){var handleObj,type;if(types&&types.preventDefault&&types.handleObj){handleObj=types.handleObj;jQuery(types.delegateTarget).off(handleObj.namespace?handleObj.origType+"."+handleObj.namespace:handleObj.origType,handleObj.selector,handleObj.handler);return this}if(typeof types==="object"){for(type in types){this.off(type,selector,types[type])}return this}if(selector===false||typeof selector==="function"){fn=selector;selector=undefined}if(fn===false){fn=returnFalse}return this.each(function(){jQuery.event.remove(this,types,fn,selector)})},trigger:function(type,data){return this.each(function(){jQuery.event.trigger(type,data,this)})},triggerHandler:function(type,data){var elem=this[0];if(elem){return jQuery.event.trigger(type,data,elem,true)}}});function createSafeFragment(document){var list=nodeNames.split("|"),safeFrag=document.createDocumentFragment();if(safeFrag.createElement){while(list.length){safeFrag.createElement(list.pop())}}return safeFrag}var nodeNames="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|"+"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",rinlinejQuery=/ jQuery\d+="(?:null|\d+)"/g,rnoshimcache=new RegExp("<(?:"+nodeNames+")[\\s/>]","i"),rleadingWhitespace=/^\s+/,rxhtmlTag=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,rtagName=/<([\w:]+)/,rtbody=/<tbody/i,rhtml=/<|&#?\w+;/,rnoInnerhtml=/<(?:script|style|link)/i,rchecked=/checked\s*(?:[^=]|=\s*.checked.)/i,rscriptType=/^$|\/(?:java|ecma)script/i,rscriptTypeMasked=/^true\/(.*)/,rcleanScript=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,wrapMap={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},safeFragment=createSafeFragment(document),fragmentDiv=safeFragment.appendChild(document.createElement("div"));wrapMap.optgroup=wrapMap.option;wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;function getAll(context,tag){var elems,elem,i=0,found=typeof context.getElementsByTagName!==strundefined?context.getElementsByTagName(tag||"*"):typeof context.querySelectorAll!==strundefined?context.querySelectorAll(tag||"*"):undefined;if(!found){for(found=[],elems=context.childNodes||context;(elem=elems[i])!=null;i++){if(!tag||jQuery.nodeName(elem,tag)){found.push(elem)}else{jQuery.merge(found,getAll(elem,tag))}}}return tag===undefined||tag&&jQuery.nodeName(context,tag)?jQuery.merge([context],found):found}function fixDefaultChecked(elem){if(rcheckableType.test(elem.type)){elem.defaultChecked=elem.checked}}function manipulationTarget(elem,content){return jQuery.nodeName(elem,"table")&&jQuery.nodeName(content.nodeType!==11?content:content.firstChild,"tr")?elem.getElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.createElement("tbody")):elem}function disableScript(elem){elem.type=(jQuery.find.attr(elem,"type")!==null)+"/"+elem.type;return elem}function restoreScript(elem){var match=rscriptTypeMasked.exec(elem.type);if(match){elem.type=match[1]}else{elem.removeAttribute("type")}return elem}function setGlobalEval(elems,refElements){var elem,i=0;for(;(elem=elems[i])!=null;i++){jQuery._data(elem,"globalEval",!refElements||jQuery._data(refElements[i],"globalEval"))}}function cloneCopyEvent(src,dest){if(dest.nodeType!==1||!jQuery.hasData(src)){return}var type,i,l,oldData=jQuery._data(src),curData=jQuery._data(dest,oldData),events=oldData.events;if(events){delete curData.handle;curData.events={};for(type in events){for(i=0,l=events[type].length;i<l;i++){jQuery.event.add(dest,type,events[type][i])}}}if(curData.data){curData.data=jQuery.extend({},curData.data)}}function fixCloneNodeIssues(src,dest){var nodeName,e,data;if(dest.nodeType!==1){return}nodeName=dest.nodeName.toLowerCase();if(!support.noCloneEvent&&dest[jQuery.expando]){data=jQuery._data(dest);for(e in data.events){jQuery.removeEvent(dest,e,data.handle)}dest.removeAttribute(jQuery.expando)}if(nodeName==="script"&&dest.text!==src.text){disableScript(dest).text=src.text;restoreScript(dest)}else if(nodeName==="object"){if(dest.parentNode){dest.outerHTML=src.outerHTML}if(support.html5Clone&&(src.innerHTML&&!jQuery.trim(dest.innerHTML))){dest.innerHTML=src.innerHTML}}else if(nodeName==="input"&&rcheckableType.test(src.type)){dest.defaultChecked=dest.checked=src.checked;if(dest.value!==src.value){dest.value=src.value}}else if(nodeName==="option"){dest.defaultSelected=dest.selected=src.defaultSelected}else if(nodeName==="input"||nodeName==="textarea"){dest.defaultValue=src.defaultValue}}jQuery.extend({clone:function(elem,dataAndEvents,deepDataAndEvents){var destElements,node,clone,i,srcElements,inPage=jQuery.contains(elem.ownerDocument,elem);if(support.html5Clone||jQuery.isXMLDoc(elem)||!rnoshimcache.test("<"+elem.nodeName+">")){clone=elem.cloneNode(true)}else{fragmentDiv.innerHTML=elem.outerHTML;fragmentDiv.removeChild(clone=fragmentDiv.firstChild)}if((!support.noCloneEvent||!support.noCloneChecked)&&(elem.nodeType===1||elem.nodeType===11)&&!jQuery.isXMLDoc(elem)){destElements=getAll(clone);srcElements=getAll(elem);for(i=0;(node=srcElements[i])!=null;++i){if(destElements[i]){fixCloneNodeIssues(node,destElements[i])}}}if(dataAndEvents){if(deepDataAndEvents){srcElements=srcElements||getAll(elem);destElements=destElements||getAll(clone);for(i=0;(node=srcElements[i])!=null;i++){cloneCopyEvent(node,destElements[i])}}else{cloneCopyEvent(elem,clone)}}destElements=getAll(clone,"script");if(destElements.length>0){setGlobalEval(destElements,!inPage&&getAll(elem,"script"))}destElements=srcElements=node=null;return clone},buildFragment:function(elems,context,scripts,selection){var j,elem,contains,tmp,tag,tbody,wrap,l=elems.length,safe=createSafeFragment(context),nodes=[],i=0;for(;i<l;i++){elem=elems[i];if(elem||elem===0){if(jQuery.type(elem)==="object"){jQuery.merge(nodes,elem.nodeType?[elem]:elem)}else if(!rhtml.test(elem)){nodes.push(context.createTextNode(elem))}else{tmp=tmp||safe.appendChild(context.createElement("div"));tag=(rtagName.exec(elem)||["",""])[1].toLowerCase();wrap=wrapMap[tag]||wrapMap._default;tmp.innerHTML=wrap[1]+elem.replace(rxhtmlTag,"<$1></$2>")+wrap[2];j=wrap[0];while(j--){tmp=tmp.lastChild}if(!support.leadingWhitespace&&rleadingWhitespace.test(elem)){nodes.push(context.createTextNode(rleadingWhitespace.exec(elem)[0]))}if(!support.tbody){elem=tag==="table"&&!rtbody.test(elem)?tmp.firstChild:wrap[1]==="<table>"&&!rtbody.test(elem)?tmp:0;j=elem&&elem.childNodes.length;while(j--){if(jQuery.nodeName(tbody=elem.childNodes[j],"tbody")&&!tbody.childNodes.length){elem.removeChild(tbody)}}}jQuery.merge(nodes,tmp.childNodes);tmp.textContent="";while(tmp.firstChild){tmp.removeChild(tmp.firstChild)}tmp=safe.lastChild}}}if(tmp){safe.removeChild(tmp)}if(!support.appendChecked){jQuery.grep(getAll(nodes,"input"),fixDefaultChecked)}i=0;while(elem=nodes[i++]){if(selection&&jQuery.inArray(elem,selection)!==-1){continue}contains=jQuery.contains(elem.ownerDocument,elem);tmp=getAll(safe.appendChild(elem),"script");if(contains){setGlobalEval(tmp)}if(scripts){j=0;while(elem=tmp[j++]){if(rscriptType.test(elem.type||"")){scripts.push(elem)}}}}tmp=null;return safe},cleanData:function(elems,acceptData){var elem,type,id,data,i=0,internalKey=jQuery.expando,cache=jQuery.cache,deleteExpando=support.deleteExpando,special=jQuery.event.special;for(;(elem=elems[i])!=null;i++){if(acceptData||jQuery.acceptData(elem)){id=elem[internalKey];data=id&&cache[id];if(data){if(data.events){for(type in data.events){if(special[type]){jQuery.event.remove(elem,type)}else{jQuery.removeEvent(elem,type,data.handle)}}}if(cache[id]){delete cache[id];if(deleteExpando){delete elem[internalKey]}else if(typeof elem.removeAttribute!==strundefined){elem.removeAttribute(internalKey)}else{elem[internalKey]=null}deletedIds.push(id)}}}}}});jQuery.fn.extend({text:function(value){return access(this,function(value){return value===undefined?jQuery.text(this):this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(value))},null,value,arguments.length)},append:function(){return this.domManip(arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.appendChild(elem)}})},prepend:function(){return this.domManip(arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.insertBefore(elem,target.firstChild)}})},before:function(){return this.domManip(arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this)}})},after:function(){return this.domManip(arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this.nextSibling)}})},remove:function(selector,keepData){var elem,elems=selector?jQuery.filter(selector,this):this,i=0;for(;(elem=elems[i])!=null;i++){if(!keepData&&elem.nodeType===1){jQuery.cleanData(getAll(elem))}if(elem.parentNode){if(keepData&&jQuery.contains(elem.ownerDocument,elem)){setGlobalEval(getAll(elem,"script"))}elem.parentNode.removeChild(elem)}}return this},empty:function(){var elem,i=0;for(;(elem=this[i])!=null;i++){if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false))}while(elem.firstChild){elem.removeChild(elem.firstChild)}if(elem.options&&jQuery.nodeName(elem,"select")){elem.options.length=0}}return this},clone:function(dataAndEvents,deepDataAndEvents){dataAndEvents=dataAndEvents==null?false:dataAndEvents;deepDataAndEvents=deepDataAndEvents==null?dataAndEvents:deepDataAndEvents;return this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents)})},html:function(value){return access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(value===undefined){return elem.nodeType===1?elem.innerHTML.replace(rinlinejQuery,""):undefined}if(typeof value==="string"&&!rnoInnerhtml.test(value)&&(support.htmlSerialize||!rnoshimcache.test(value))&&(support.leadingWhitespace||!rleadingWhitespace.test(value))&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=value.replace(rxhtmlTag,"<$1></$2>");try{for(;i<l;i++){elem=this[i]||{};if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false));elem.innerHTML=value}}elem=0}catch(e){}}if(elem){this.empty().append(value)}},null,value,arguments.length)},replaceWith:function(){var arg=arguments[0];this.domManip(arguments,function(elem){arg=this.parentNode;jQuery.cleanData(getAll(this));if(arg){arg.replaceChild(elem,this)}});return arg&&(arg.length||arg.nodeType)?this:this.remove()},detach:function(selector){return this.remove(selector,true)},domManip:function(args,callback){args=concat.apply([],args);var first,node,hasScripts,scripts,doc,fragment,i=0,l=this.length,set=this,iNoClone=l-1,value=args[0],isFunction=jQuery.isFunction(value);if(isFunction||l>1&&typeof value==="string"&&!support.checkClone&&rchecked.test(value)){return this.each(function(index){var self=set.eq(index);if(isFunction){args[0]=value.call(this,index,self.html())}self.domManip(args,callback)})}if(l){fragment=jQuery.buildFragment(args,this[0].ownerDocument,false,this);first=fragment.firstChild;if(fragment.childNodes.length===1){fragment=first}if(first){scripts=jQuery.map(getAll(fragment,"script"),disableScript);hasScripts=scripts.length;for(;i<l;i++){node=fragment;if(i!==iNoClone){node=jQuery.clone(node,true,true);if(hasScripts){jQuery.merge(scripts,getAll(node,"script"))}}callback.call(this[i],node,i)}if(hasScripts){doc=scripts[scripts.length-1].ownerDocument;jQuery.map(scripts,restoreScript);for(i=0;i<hasScripts;i++){node=scripts[i];if(rscriptType.test(node.type||"")&&!jQuery._data(node,"globalEval")&&jQuery.contains(doc,node)){if(node.src){if(jQuery._evalUrl){jQuery._evalUrl(node.src)}}else{jQuery.globalEval((node.text||node.textContent||node.innerHTML||"").replace(rcleanScript,""))}}}}fragment=first=null}}return this}});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){var elems,i=0,ret=[],insert=jQuery(selector),last=insert.length-1;for(;i<=last;i++){elems=i===last?this:this.clone(true);jQuery(insert[i])[original](elems);push.apply(ret,elems.get())}return this.pushStack(ret)}});var iframe,elemdisplay={};function actualDisplay(name,doc){var style,elem=jQuery(doc.createElement(name)).appendTo(doc.body),display=window.getDefaultComputedStyle&&(style=window.getDefaultComputedStyle(elem[0]))?style.display:jQuery.css(elem[0],"display");elem.detach();return display}function defaultDisplay(nodeName){var doc=document,display=elemdisplay[nodeName];if(!display){display=actualDisplay(nodeName,doc);if(display==="none"||!display){iframe=(iframe||jQuery("<iframe frameborder='0' width='0' height='0'/>")).appendTo(doc.documentElement);doc=(iframe[0].contentWindow||iframe[0].contentDocument).document;doc.write();doc.close();display=actualDisplay(nodeName,doc);iframe.detach()}elemdisplay[nodeName]=display}return display}(function(){var shrinkWrapBlocksVal;support.shrinkWrapBlocks=function(){if(shrinkWrapBlocksVal!=null){return shrinkWrapBlocksVal}shrinkWrapBlocksVal=false;var div,body,container;body=document.getElementsByTagName("body")[0];if(!body||!body.style){return}div=document.createElement("div");container=document.createElement("div");container.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px";body.appendChild(container).appendChild(div);if(typeof div.style.zoom!==strundefined){div.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;"+"box-sizing:content-box;display:block;margin:0;border:0;"+"padding:1px;width:1px;zoom:1";div.appendChild(document.createElement("div")).style.width="5px";shrinkWrapBlocksVal=div.offsetWidth!==3}body.removeChild(container);return shrinkWrapBlocksVal}})();var rmargin=/^margin/;var rnumnonpx=new RegExp("^("+pnum+")(?!px)[a-z%]+$","i");var getStyles,curCSS,rposition=/^(top|right|bottom|left)$/;if(window.getComputedStyle){getStyles=function(elem){if(elem.ownerDocument.defaultView.opener){return elem.ownerDocument.defaultView.getComputedStyle(elem,null)}return window.getComputedStyle(elem,null)};curCSS=function(elem,name,computed){var width,minWidth,maxWidth,ret,style=elem.style;computed=computed||getStyles(elem);ret=computed?computed.getPropertyValue(name)||computed[name]:undefined;if(computed){if(ret===""&&!jQuery.contains(elem.ownerDocument,elem)){ret=jQuery.style(elem,name)}if(rnumnonpx.test(ret)&&rmargin.test(name)){width=style.width;minWidth=style.minWidth;maxWidth=style.maxWidth;style.minWidth=style.maxWidth=style.width=ret;ret=computed.width;style.width=width;style.minWidth=minWidth;style.maxWidth=maxWidth}}return ret===undefined?ret:ret+""}}else if(document.documentElement.currentStyle){getStyles=function(elem){return elem.currentStyle};curCSS=function(elem,name,computed){var left,rs,rsLeft,ret,style=elem.style;computed=computed||getStyles(elem);ret=computed?computed[name]:undefined;if(ret==null&&style&&style[name]){ret=style[name]}if(rnumnonpx.test(ret)&&!rposition.test(name)){left=style.left;rs=elem.runtimeStyle;rsLeft=rs&&rs.left;if(rsLeft){rs.left=elem.currentStyle.left}style.left=name==="fontSize"?"1em":ret;ret=style.pixelLeft+"px";style.left=left;if(rsLeft){rs.left=rsLeft}}return ret===undefined?ret:ret+""||"auto"}}function addGetHookIf(conditionFn,hookFn){return{get:function(){var condition=conditionFn();if(condition==null){return}if(condition){delete this.get;return}return(this.get=hookFn).apply(this,arguments)}}}(function(){var div,style,a,pixelPositionVal,boxSizingReliableVal,reliableHiddenOffsetsVal,reliableMarginRightVal;div=document.createElement("div");div.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";a=div.getElementsByTagName("a")[0];style=a&&a.style;if(!style){return}style.cssText="float:left;opacity:.5";support.opacity=style.opacity==="0.5";support.cssFloat=!!style.cssFloat;div.style.backgroundClip="content-box";div.cloneNode(true).style.backgroundClip="";support.clearCloneStyle=div.style.backgroundClip==="content-box";support.boxSizing=style.boxSizing===""||style.MozBoxSizing===""||style.WebkitBoxSizing==="";jQuery.extend(support,{reliableHiddenOffsets:function(){if(reliableHiddenOffsetsVal==null){computeStyleTests()}return reliableHiddenOffsetsVal},boxSizingReliable:function(){if(boxSizingReliableVal==null){computeStyleTests()}return boxSizingReliableVal},pixelPosition:function(){if(pixelPositionVal==null){computeStyleTests()}return pixelPositionVal},reliableMarginRight:function(){if(reliableMarginRightVal==null){computeStyleTests()}return reliableMarginRightVal}});function computeStyleTests(){var div,body,container,contents;body=document.getElementsByTagName("body")[0];if(!body||!body.style){return}div=document.createElement("div");container=document.createElement("div");container.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px";body.appendChild(container).appendChild(div);div.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;"+"box-sizing:border-box;display:block;margin-top:1%;top:1%;"+"border:1px;padding:1px;width:4px;position:absolute";pixelPositionVal=boxSizingReliableVal=false;reliableMarginRightVal=true;if(window.getComputedStyle){pixelPositionVal=(window.getComputedStyle(div,null)||{}).top!=="1%";boxSizingReliableVal=(window.getComputedStyle(div,null)||{width:"4px"}).width==="4px";contents=div.appendChild(document.createElement("div"));contents.style.cssText=div.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;"+"box-sizing:content-box;display:block;margin:0;border:0;padding:0";contents.style.marginRight=contents.style.width="0";div.style.width="1px";reliableMarginRightVal=!parseFloat((window.getComputedStyle(contents,null)||{}).marginRight);div.removeChild(contents)}div.innerHTML="<table><tr><td></td><td>t</td></tr></table>";contents=div.getElementsByTagName("td");contents[0].style.cssText="margin:0;border:0;padding:0;display:none";reliableHiddenOffsetsVal=contents[0].offsetHeight===0;if(reliableHiddenOffsetsVal){contents[0].style.display="";contents[1].style.display="none";reliableHiddenOffsetsVal=contents[0].offsetHeight===0}body.removeChild(container)}})();jQuery.swap=function(elem,options,callback,args){var ret,name,old={};for(name in options){old[name]=elem.style[name];elem.style[name]=options[name]}ret=callback.apply(elem,args||[]);for(name in options){elem.style[name]=old[name]}return ret};var ralpha=/alpha\([^)]*\)/i,ropacity=/opacity\s*=\s*([^)]*)/,rdisplayswap=/^(none|table(?!-c[ea]).+)/,rnumsplit=new RegExp("^("+pnum+")(.*)$","i"),rrelNum=new RegExp("^([+-])=("+pnum+")","i"),cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:"0",fontWeight:"400"},cssPrefixes=["Webkit","O","Moz","ms"];function vendorPropName(style,name){if(name in style){return name}var capName=name.charAt(0).toUpperCase()+name.slice(1),origName=name,i=cssPrefixes.length;while(i--){name=cssPrefixes[i]+capName;if(name in style){return name}}return origName}function showHide(elements,show){var display,elem,hidden,values=[],index=0,length=elements.length;for(;index<length;index++){elem=elements[index];if(!elem.style){continue}values[index]=jQuery._data(elem,"olddisplay");display=elem.style.display;if(show){if(!values[index]&&display==="none"){elem.style.display=""}if(elem.style.display===""&&isHidden(elem)){values[index]=jQuery._data(elem,"olddisplay",defaultDisplay(elem.nodeName))}}else{hidden=isHidden(elem);if(display&&display!=="none"||!hidden){jQuery._data(elem,"olddisplay",hidden?display:jQuery.css(elem,"display"))}}}for(index=0;index<length;index++){elem=elements[index];if(!elem.style){continue}if(!show||elem.style.display==="none"||elem.style.display===""){elem.style.display=show?values[index]||"":"none"}}return elements}function setPositiveNumber(elem,value,subtract){var matches=rnumsplit.exec(value);return matches?Math.max(0,matches[1]-(subtract||0))+(matches[2]||"px"):value}function augmentWidthOrHeight(elem,name,extra,isBorderBox,styles){var i=extra===(isBorderBox?"border":"content")?4:name==="width"?1:0,val=0;for(;i<4;i+=2){if(extra==="margin"){val+=jQuery.css(elem,extra+cssExpand[i],true,styles)}if(isBorderBox){if(extra==="content"){val-=jQuery.css(elem,"padding"+cssExpand[i],true,styles)}if(extra!=="margin"){val-=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles)}}else{val+=jQuery.css(elem,"padding"+cssExpand[i],true,styles);if(extra!=="padding"){val+=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles)}}}return val}function getWidthOrHeight(elem,name,extra){var valueIsBorderBox=true,val=name==="width"?elem.offsetWidth:elem.offsetHeight,styles=getStyles(elem),isBorderBox=support.boxSizing&&jQuery.css(elem,"boxSizing",false,styles)==="border-box";if(val<=0||val==null){val=curCSS(elem,name,styles);if(val<0||val==null){val=elem.style[name]}if(rnumnonpx.test(val)){return val}valueIsBorderBox=isBorderBox&&(support.boxSizingReliable()||val===elem.style[name]);val=parseFloat(val)||0}return val+augmentWidthOrHeight(elem,name,extra||(isBorderBox?"border":"content"),valueIsBorderBox,styles)+"px"}jQuery.extend({cssHooks:{opacity:{get:function(elem,computed){if(computed){var ret=curCSS(elem,"opacity");return ret===""?"1":ret}}}},cssNumber:{columnCount:true,fillOpacity:true,flexGrow:true,flexShrink:true,fontWeight:true,lineHeight:true,opacity:true,order:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":support.cssFloat?"cssFloat":"styleFloat"},style:function(elem,name,value,extra){if(!elem||elem.nodeType===3||elem.nodeType===8||!elem.style){return}var ret,type,hooks,origName=jQuery.camelCase(name),style=elem.style;name=jQuery.cssProps[origName]||(jQuery.cssProps[origName]=vendorPropName(style,origName));hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName];if(value!==undefined){type=typeof value;if(type==="string"&&(ret=rrelNum.exec(value))){value=(ret[1]+1)*ret[2]+parseFloat(jQuery.css(elem,name));type="number"}if(value==null||value!==value){return}if(type==="number"&&!jQuery.cssNumber[origName]){value+="px"}if(!support.clearCloneStyle&&value===""&&name.indexOf("background")===0){style[name]="inherit"}if(!hooks||!("set"in hooks)||(value=hooks.set(elem,value,extra))!==undefined){try{style[name]=value}catch(e){}}}else{if(hooks&&"get"in hooks&&(ret=hooks.get(elem,false,extra))!==undefined){return ret}return style[name]}},css:function(elem,name,extra,styles){var num,val,hooks,origName=jQuery.camelCase(name);name=jQuery.cssProps[origName]||(jQuery.cssProps[origName]=vendorPropName(elem.style,origName));hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName];if(hooks&&"get"in hooks){val=hooks.get(elem,true,extra)}if(val===undefined){val=curCSS(elem,name,styles)}if(val==="normal"&&name in cssNormalTransform){val=cssNormalTransform[name]}if(extra===""||extra){num=parseFloat(val);return extra===true||jQuery.isNumeric(num)?num||0:val}return val}});jQuery.each(["height","width"],function(i,name){jQuery.cssHooks[name]={get:function(elem,computed,extra){if(computed){return rdisplayswap.test(jQuery.css(elem,"display"))&&elem.offsetWidth===0?jQuery.swap(elem,cssShow,function(){return getWidthOrHeight(elem,name,extra)}):getWidthOrHeight(elem,name,extra)}},set:function(elem,value,extra){var styles=extra&&getStyles(elem);return setPositiveNumber(elem,value,extra?augmentWidthOrHeight(elem,name,extra,support.boxSizing&&jQuery.css(elem,"boxSizing",false,styles)==="border-box",styles):0)}}});if(!support.opacity){jQuery.cssHooks.opacity={get:function(elem,computed){return ropacity.test((computed&&elem.currentStyle?elem.currentStyle.filter:elem.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":computed?"1":""},set:function(elem,value){var style=elem.style,currentStyle=elem.currentStyle,opacity=jQuery.isNumeric(value)?"alpha(opacity="+value*100+")":"",filter=currentStyle&&currentStyle.filter||style.filter||"";style.zoom=1;if((value>=1||value==="")&&jQuery.trim(filter.replace(ralpha,""))===""&&style.removeAttribute){style.removeAttribute("filter");if(value===""||currentStyle&&!currentStyle.filter){return}}style.filter=ralpha.test(filter)?filter.replace(ralpha,opacity):filter+" "+opacity}}}jQuery.cssHooks.marginRight=addGetHookIf(support.reliableMarginRight,function(elem,computed){if(computed){return jQuery.swap(elem,{display:"inline-block"},curCSS,[elem,"marginRight"])}});jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix+suffix]={expand:function(value){var i=0,expanded={},parts=typeof value==="string"?value.split(" "):[value];for(;i<4;i++){expanded[prefix+cssExpand[i]+suffix]=parts[i]||parts[i-2]||parts[0]}return expanded}};if(!rmargin.test(prefix)){jQuery.cssHooks[prefix+suffix].set=setPositiveNumber}});jQuery.fn.extend({css:function(name,value){return access(this,function(elem,name,value){var styles,len,map={},i=0;if(jQuery.isArray(name)){styles=getStyles(elem);len=name.length;for(;i<len;i++){map[name[i]]=jQuery.css(elem,name[i],false,styles)}return map}return value!==undefined?jQuery.style(elem,name,value):jQuery.css(elem,name)},name,value,arguments.length>1)},show:function(){return showHide(this,true)},hide:function(){return showHide(this)},toggle:function(state){if(typeof state==="boolean"){return state?this.show():this.hide()}return this.each(function(){if(isHidden(this)){jQuery(this).show()}else{jQuery(this).hide()}})}});function Tween(elem,options,prop,end,easing){return new Tween.prototype.init(elem,options,prop,end,easing)}jQuery.Tween=Tween;Tween.prototype={constructor:Tween,init:function(elem,options,prop,end,easing,unit){this.elem=elem;this.prop=prop;this.easing=easing||"swing";this.options=options;this.start=this.now=this.cur();this.end=end;this.unit=unit||(jQuery.cssNumber[prop]?"":"px")},cur:function(){var hooks=Tween.propHooks[this.prop];return hooks&&hooks.get?hooks.get(this):Tween.propHooks._default.get(this)},run:function(percent){var eased,hooks=Tween.propHooks[this.prop];if(this.options.duration){this.pos=eased=jQuery.easing[this.easing](percent,this.options.duration*percent,0,1,this.options.duration)}else{this.pos=eased=percent}this.now=(this.end-this.start)*eased+this.start;if(this.options.step){this.options.step.call(this.elem,this.now,this)}if(hooks&&hooks.set){hooks.set(this)}else{Tween.propHooks._default.set(this)}return this}};Tween.prototype.init.prototype=Tween.prototype;Tween.propHooks={_default:{get:function(tween){var result;if(tween.elem[tween.prop]!=null&&(!tween.elem.style||tween.elem.style[tween.prop]==null)){return tween.elem[tween.prop]}result=jQuery.css(tween.elem,tween.prop,"");return!result||result==="auto"?0:result},set:function(tween){if(jQuery.fx.step[tween.prop]){jQuery.fx.step[tween.prop](tween)}else if(tween.elem.style&&(tween.elem.style[jQuery.cssProps[tween.prop]]!=null||jQuery.cssHooks[tween.prop])){jQuery.style(tween.elem,tween.prop,tween.now+tween.unit)}else{tween.elem[tween.prop]=tween.now}}}};Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(tween){if(tween.elem.nodeType&&tween.elem.parentNode){tween.elem[tween.prop]=tween.now}}};jQuery.easing={linear:function(p){return p},swing:function(p){return.5-Math.cos(p*Math.PI)/2}};jQuery.fx=Tween.prototype.init;jQuery.fx.step={};var fxNow,timerId,rfxtypes=/^(?:toggle|show|hide)$/,rfxnum=new RegExp("^(?:([+-])=|)("+pnum+")([a-z%]*)$","i"),rrun=/queueHooks$/,animationPrefilters=[defaultPrefilter],tweeners={"*":[function(prop,value){var tween=this.createTween(prop,value),target=tween.cur(),parts=rfxnum.exec(value),unit=parts&&parts[3]||(jQuery.cssNumber[prop]?"":"px"),start=(jQuery.cssNumber[prop]||unit!=="px"&&+target)&&rfxnum.exec(jQuery.css(tween.elem,prop)),scale=1,maxIterations=20;if(start&&start[3]!==unit){unit=unit||start[3];parts=parts||[];start=+target||1;do{scale=scale||".5";start=start/scale;jQuery.style(tween.elem,prop,start+unit)}while(scale!==(scale=tween.cur()/target)&&scale!==1&&--maxIterations)}if(parts){start=tween.start=+start||+target||0;tween.unit=unit;tween.end=parts[1]?start+(parts[1]+1)*parts[2]:+parts[2]}return tween}]};function createFxNow(){setTimeout(function(){fxNow=undefined});return fxNow=jQuery.now()}function genFx(type,includeWidth){var which,attrs={height:type},i=0;includeWidth=includeWidth?1:0;for(;i<4;i+=2-includeWidth){which=cssExpand[i];attrs["margin"+which]=attrs["padding"+which]=type}if(includeWidth){attrs.opacity=attrs.width=type}return attrs}function createTween(value,prop,animation){var tween,collection=(tweeners[prop]||[]).concat(tweeners["*"]),index=0,length=collection.length;for(;index<length;index++){if(tween=collection[index].call(animation,prop,value)){return tween}}}function defaultPrefilter(elem,props,opts){var prop,value,toggle,tween,hooks,oldfire,display,checkDisplay,anim=this,orig={},style=elem.style,hidden=elem.nodeType&&isHidden(elem),dataShow=jQuery._data(elem,"fxshow");if(!opts.queue){hooks=jQuery._queueHooks(elem,"fx");if(hooks.unqueued==null){hooks.unqueued=0;oldfire=hooks.empty.fire;hooks.empty.fire=function(){if(!hooks.unqueued){oldfire()}}}hooks.unqueued++;anim.always(function(){anim.always(function(){hooks.unqueued--;if(!jQuery.queue(elem,"fx").length){hooks.empty.fire()}})})}if(elem.nodeType===1&&("height"in props||"width"in props)){opts.overflow=[style.overflow,style.overflowX,style.overflowY];display=jQuery.css(elem,"display");checkDisplay=display==="none"?jQuery._data(elem,"olddisplay")||defaultDisplay(elem.nodeName):display;if(checkDisplay==="inline"&&jQuery.css(elem,"float")==="none"){if(!support.inlineBlockNeedsLayout||defaultDisplay(elem.nodeName)==="inline"){style.display="inline-block"}else{style.zoom=1}}}if(opts.overflow){style.overflow="hidden";if(!support.shrinkWrapBlocks()){anim.always(function(){style.overflow=opts.overflow[0];style.overflowX=opts.overflow[1];style.overflowY=opts.overflow[2]})}}for(prop in props){value=props[prop];if(rfxtypes.exec(value)){delete props[prop];toggle=toggle||value==="toggle";if(value===(hidden?"hide":"show")){if(value==="show"&&dataShow&&dataShow[prop]!==undefined){hidden=true}else{continue}}orig[prop]=dataShow&&dataShow[prop]||jQuery.style(elem,prop)}else{display=undefined}}if(!jQuery.isEmptyObject(orig)){if(dataShow){if("hidden"in dataShow){hidden=dataShow.hidden}}else{dataShow=jQuery._data(elem,"fxshow",{})}if(toggle){dataShow.hidden=!hidden}if(hidden){jQuery(elem).show()}else{anim.done(function(){jQuery(elem).hide()})}anim.done(function(){var prop;jQuery._removeData(elem,"fxshow");for(prop in orig){jQuery.style(elem,prop,orig[prop])}});for(prop in orig){tween=createTween(hidden?dataShow[prop]:0,prop,anim);if(!(prop in dataShow)){dataShow[prop]=tween.start;if(hidden){tween.end=tween.start;tween.start=prop==="width"||prop==="height"?1:0}}}}else if((display==="none"?defaultDisplay(elem.nodeName):display)==="inline"){style.display=display}}function propFilter(props,specialEasing){var index,name,easing,value,hooks;for(index in props){name=jQuery.camelCase(index);easing=specialEasing[name];value=props[index];if(jQuery.isArray(value)){easing=value[1];value=props[index]=value[0]}if(index!==name){
21props[name]=value;delete props[index]}hooks=jQuery.cssHooks[name];if(hooks&&"expand"in hooks){value=hooks.expand(value);delete props[name];for(index in value){if(!(index in props)){props[index]=value[index];specialEasing[index]=easing}}}else{specialEasing[name]=easing}}}function Animation(elem,properties,options){var result,stopped,index=0,length=animationPrefilters.length,deferred=jQuery.Deferred().always(function(){delete tick.elem}),tick=function(){if(stopped){return false}var currentTime=fxNow||createFxNow(),remaining=Math.max(0,animation.startTime+animation.duration-currentTime),temp=remaining/animation.duration||0,percent=1-temp,index=0,length=animation.tweens.length;for(;index<length;index++){animation.tweens[index].run(percent)}deferred.notifyWith(elem,[animation,percent,remaining]);if(percent<1&&length){return remaining}else{deferred.resolveWith(elem,[animation]);return false}},animation=deferred.promise({elem:elem,props:jQuery.extend({},properties),opts:jQuery.extend(true,{specialEasing:{}},options),originalProperties:properties,originalOptions:options,startTime:fxNow||createFxNow(),duration:options.duration,tweens:[],createTween:function(prop,end){var tween=jQuery.Tween(elem,animation.opts,prop,end,animation.opts.specialEasing[prop]||animation.opts.easing);animation.tweens.push(tween);return tween},stop:function(gotoEnd){var index=0,length=gotoEnd?animation.tweens.length:0;if(stopped){return this}stopped=true;for(;index<length;index++){animation.tweens[index].run(1)}if(gotoEnd){deferred.resolveWith(elem,[animation,gotoEnd])}else{deferred.rejectWith(elem,[animation,gotoEnd])}return this}}),props=animation.props;propFilter(props,animation.opts.specialEasing);for(;index<length;index++){result=animationPrefilters[index].call(animation,elem,props,animation.opts);if(result){return result}}jQuery.map(props,createTween,animation);if(jQuery.isFunction(animation.opts.start)){animation.opts.start.call(elem,animation)}jQuery.fx.timer(jQuery.extend(tick,{elem:elem,anim:animation,queue:animation.opts.queue}));return animation.progress(animation.opts.progress).done(animation.opts.done,animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always)}jQuery.Animation=jQuery.extend(Animation,{tweener:function(props,callback){if(jQuery.isFunction(props)){callback=props;props=["*"]}else{props=props.split(" ")}var prop,index=0,length=props.length;for(;index<length;index++){prop=props[index];tweeners[prop]=tweeners[prop]||[];tweeners[prop].unshift(callback)}},prefilter:function(callback,prepend){if(prepend){animationPrefilters.unshift(callback)}else{animationPrefilters.push(callback)}}});jQuery.speed=function(speed,easing,fn){var opt=speed&&typeof speed==="object"?jQuery.extend({},speed):{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!jQuery.isFunction(easing)&&easing};opt.duration=jQuery.fx.off?0:typeof opt.duration==="number"?opt.duration:opt.duration in jQuery.fx.speeds?jQuery.fx.speeds[opt.duration]:jQuery.fx.speeds._default;if(opt.queue==null||opt.queue===true){opt.queue="fx"}opt.old=opt.complete;opt.complete=function(){if(jQuery.isFunction(opt.old)){opt.old.call(this)}if(opt.queue){jQuery.dequeue(this,opt.queue)}};return opt};jQuery.fn.extend({fadeTo:function(speed,to,easing,callback){return this.filter(isHidden).css("opacity",0).show().end().animate({opacity:to},speed,easing,callback)},animate:function(prop,speed,easing,callback){var empty=jQuery.isEmptyObject(prop),optall=jQuery.speed(speed,easing,callback),doAnimation=function(){var anim=Animation(this,jQuery.extend({},prop),optall);if(empty||jQuery._data(this,"finish")){anim.stop(true)}};doAnimation.finish=doAnimation;return empty||optall.queue===false?this.each(doAnimation):this.queue(optall.queue,doAnimation)},stop:function(type,clearQueue,gotoEnd){var stopQueue=function(hooks){var stop=hooks.stop;delete hooks.stop;stop(gotoEnd)};if(typeof type!=="string"){gotoEnd=clearQueue;clearQueue=type;type=undefined}if(clearQueue&&type!==false){this.queue(type||"fx",[])}return this.each(function(){var dequeue=true,index=type!=null&&type+"queueHooks",timers=jQuery.timers,data=jQuery._data(this);if(index){if(data[index]&&data[index].stop){stopQueue(data[index])}}else{for(index in data){if(data[index]&&data[index].stop&&rrun.test(index)){stopQueue(data[index])}}}for(index=timers.length;index--;){if(timers[index].elem===this&&(type==null||timers[index].queue===type)){timers[index].anim.stop(gotoEnd);dequeue=false;timers.splice(index,1)}}if(dequeue||!gotoEnd){jQuery.dequeue(this,type)}})},finish:function(type){if(type!==false){type=type||"fx"}return this.each(function(){var index,data=jQuery._data(this),queue=data[type+"queue"],hooks=data[type+"queueHooks"],timers=jQuery.timers,length=queue?queue.length:0;data.finish=true;jQuery.queue(this,type,[]);if(hooks&&hooks.stop){hooks.stop.call(this,true)}for(index=timers.length;index--;){if(timers[index].elem===this&&timers[index].queue===type){timers[index].anim.stop(true);timers.splice(index,1)}}for(index=0;index<length;index++){if(queue[index]&&queue[index].finish){queue[index].finish.call(this)}}delete data.finish})}});jQuery.each(["toggle","show","hide"],function(i,name){var cssFn=jQuery.fn[name];jQuery.fn[name]=function(speed,easing,callback){return speed==null||typeof speed==="boolean"?cssFn.apply(this,arguments):this.animate(genFx(name,true),speed,easing,callback)}});jQuery.each({slideDown:genFx("show"),slideUp:genFx("hide"),slideToggle:genFx("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(name,props){jQuery.fn[name]=function(speed,easing,callback){return this.animate(props,speed,easing,callback)}});jQuery.timers=[];jQuery.fx.tick=function(){var timer,timers=jQuery.timers,i=0;fxNow=jQuery.now();for(;i<timers.length;i++){timer=timers[i];if(!timer()&&timers[i]===timer){timers.splice(i--,1)}}if(!timers.length){jQuery.fx.stop()}fxNow=undefined};jQuery.fx.timer=function(timer){jQuery.timers.push(timer);if(timer()){jQuery.fx.start()}else{jQuery.timers.pop()}};jQuery.fx.interval=13;jQuery.fx.start=function(){if(!timerId){timerId=setInterval(jQuery.fx.tick,jQuery.fx.interval)}};jQuery.fx.stop=function(){clearInterval(timerId);timerId=null};jQuery.fx.speeds={slow:600,fast:200,_default:400};jQuery.fn.delay=function(time,type){time=jQuery.fx?jQuery.fx.speeds[time]||time:time;type=type||"fx";return this.queue(type,function(next,hooks){var timeout=setTimeout(next,time);hooks.stop=function(){clearTimeout(timeout)}})};(function(){var input,div,select,a,opt;div=document.createElement("div");div.setAttribute("className","t");div.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";a=div.getElementsByTagName("a")[0];select=document.createElement("select");opt=select.appendChild(document.createElement("option"));input=div.getElementsByTagName("input")[0];a.style.cssText="top:1px";support.getSetAttribute=div.className!=="t";support.style=/top/.test(a.getAttribute("style"));support.hrefNormalized=a.getAttribute("href")==="/a";support.checkOn=!!input.value;support.optSelected=opt.selected;support.enctype=!!document.createElement("form").enctype;select.disabled=true;support.optDisabled=!opt.disabled;input=document.createElement("input");input.setAttribute("value","");support.input=input.getAttribute("value")==="";input.value="t";input.setAttribute("type","radio");support.radioValue=input.value==="t"})();var rreturn=/\r/g;jQuery.fn.extend({val:function(value){var hooks,ret,isFunction,elem=this[0];if(!arguments.length){if(elem){hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()];if(hooks&&"get"in hooks&&(ret=hooks.get(elem,"value"))!==undefined){return ret}ret=elem.value;return typeof ret==="string"?ret.replace(rreturn,""):ret==null?"":ret}return}isFunction=jQuery.isFunction(value);return this.each(function(i){var val;if(this.nodeType!==1){return}if(isFunction){val=value.call(this,i,jQuery(this).val())}else{val=value}if(val==null){val=""}else if(typeof val==="number"){val+=""}else if(jQuery.isArray(val)){val=jQuery.map(val,function(value){return value==null?"":value+""})}hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()];if(!hooks||!("set"in hooks)||hooks.set(this,val,"value")===undefined){this.value=val}})}});jQuery.extend({valHooks:{option:{get:function(elem){var val=jQuery.find.attr(elem,"value");return val!=null?val:jQuery.trim(jQuery.text(elem))}},select:{get:function(elem){var value,option,options=elem.options,index=elem.selectedIndex,one=elem.type==="select-one"||index<0,values=one?null:[],max=one?index+1:options.length,i=index<0?max:one?index:0;for(;i<max;i++){option=options[i];if((option.selected||i===index)&&(support.optDisabled?!option.disabled:option.getAttribute("disabled")===null)&&(!option.parentNode.disabled||!jQuery.nodeName(option.parentNode,"optgroup"))){value=jQuery(option).val();if(one){return value}values.push(value)}}return values},set:function(elem,value){var optionSet,option,options=elem.options,values=jQuery.makeArray(value),i=options.length;while(i--){option=options[i];if(jQuery.inArray(jQuery.valHooks.option.get(option),values)>=0){try{option.selected=optionSet=true}catch(_){option.scrollHeight}}else{option.selected=false}}if(!optionSet){elem.selectedIndex=-1}return options}}}});jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={set:function(elem,value){if(jQuery.isArray(value)){return elem.checked=jQuery.inArray(jQuery(elem).val(),value)>=0}}};if(!support.checkOn){jQuery.valHooks[this].get=function(elem){return elem.getAttribute("value")===null?"on":elem.value}}});var nodeHook,boolHook,attrHandle=jQuery.expr.attrHandle,ruseDefault=/^(?:checked|selected)$/i,getSetAttribute=support.getSetAttribute,getSetInput=support.input;jQuery.fn.extend({attr:function(name,value){return access(this,jQuery.attr,name,value,arguments.length>1)},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name)})}});jQuery.extend({attr:function(elem,name,value){var hooks,ret,nType=elem.nodeType;if(!elem||nType===3||nType===8||nType===2){return}if(typeof elem.getAttribute===strundefined){return jQuery.prop(elem,name,value)}if(nType!==1||!jQuery.isXMLDoc(elem)){name=name.toLowerCase();hooks=jQuery.attrHooks[name]||(jQuery.expr.match.bool.test(name)?boolHook:nodeHook)}if(value!==undefined){if(value===null){jQuery.removeAttr(elem,name)}else if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret}else{elem.setAttribute(name,value+"");return value}}else if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret}else{ret=jQuery.find.attr(elem,name);return ret==null?undefined:ret}},removeAttr:function(elem,value){var name,propName,i=0,attrNames=value&&value.match(rnotwhite);if(attrNames&&elem.nodeType===1){while(name=attrNames[i++]){propName=jQuery.propFix[name]||name;if(jQuery.expr.match.bool.test(name)){if(getSetInput&&getSetAttribute||!ruseDefault.test(name)){elem[propName]=false}else{elem[jQuery.camelCase("default-"+name)]=elem[propName]=false}}else{jQuery.attr(elem,name,"")}elem.removeAttribute(getSetAttribute?name:propName)}}},attrHooks:{type:{set:function(elem,value){if(!support.radioValue&&value==="radio"&&jQuery.nodeName(elem,"input")){var val=elem.value;elem.setAttribute("type",value);if(val){elem.value=val}return value}}}}});boolHook={set:function(elem,value,name){if(value===false){jQuery.removeAttr(elem,name)}else if(getSetInput&&getSetAttribute||!ruseDefault.test(name)){elem.setAttribute(!getSetAttribute&&jQuery.propFix[name]||name,name)}else{elem[jQuery.camelCase("default-"+name)]=elem[name]=true}return name}};jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g),function(i,name){var getter=attrHandle[name]||jQuery.find.attr;attrHandle[name]=getSetInput&&getSetAttribute||!ruseDefault.test(name)?function(elem,name,isXML){var ret,handle;if(!isXML){handle=attrHandle[name];attrHandle[name]=ret;ret=getter(elem,name,isXML)!=null?name.toLowerCase():null;attrHandle[name]=handle}return ret}:function(elem,name,isXML){if(!isXML){return elem[jQuery.camelCase("default-"+name)]?name.toLowerCase():null}}});if(!getSetInput||!getSetAttribute){jQuery.attrHooks.value={set:function(elem,value,name){if(jQuery.nodeName(elem,"input")){elem.defaultValue=value}else{return nodeHook&&nodeHook.set(elem,value,name)}}}}if(!getSetAttribute){nodeHook={set:function(elem,value,name){var ret=elem.getAttributeNode(name);if(!ret){elem.setAttributeNode(ret=elem.ownerDocument.createAttribute(name))}ret.value=value+="";if(name==="value"||value===elem.getAttribute(name)){return value}}};attrHandle.id=attrHandle.name=attrHandle.coords=function(elem,name,isXML){var ret;if(!isXML){return(ret=elem.getAttributeNode(name))&&ret.value!==""?ret.value:null}};jQuery.valHooks.button={get:function(elem,name){var ret=elem.getAttributeNode(name);if(ret&&ret.specified){return ret.value}},set:nodeHook.set};jQuery.attrHooks.contenteditable={set:function(elem,value,name){nodeHook.set(elem,value===""?false:value,name)}};jQuery.each(["width","height"],function(i,name){jQuery.attrHooks[name]={set:function(elem,value){if(value===""){elem.setAttribute(name,"auto");return value}}}})}if(!support.style){jQuery.attrHooks.style={get:function(elem){return elem.style.cssText||undefined},set:function(elem,value){return elem.style.cssText=value+""}}}var rfocusable=/^(?:input|select|textarea|button|object)$/i,rclickable=/^(?:a|area)$/i;jQuery.fn.extend({prop:function(name,value){return access(this,jQuery.prop,name,value,arguments.length>1)},removeProp:function(name){name=jQuery.propFix[name]||name;return this.each(function(){try{this[name]=undefined;delete this[name]}catch(e){}})}});jQuery.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(elem,name,value){var ret,hooks,notxml,nType=elem.nodeType;if(!elem||nType===3||nType===8||nType===2){return}notxml=nType!==1||!jQuery.isXMLDoc(elem);if(notxml){name=jQuery.propFix[name]||name;hooks=jQuery.propHooks[name]}if(value!==undefined){return hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined?ret:elem[name]=value}else{return hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null?ret:elem[name]}},propHooks:{tabIndex:{get:function(elem){var tabindex=jQuery.find.attr(elem,"tabindex");return tabindex?parseInt(tabindex,10):rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href?0:-1}}}});if(!support.hrefNormalized){jQuery.each(["href","src"],function(i,name){jQuery.propHooks[name]={get:function(elem){return elem.getAttribute(name,4)}}})}if(!support.optSelected){jQuery.propHooks.selected={get:function(elem){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex}}return null}}}jQuery.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){jQuery.propFix[this.toLowerCase()]=this});if(!support.enctype){jQuery.propFix.enctype="encoding"}var rclass=/[\t\r\n\f]/g;jQuery.fn.extend({addClass:function(value){var classes,elem,cur,clazz,j,finalValue,i=0,len=this.length,proceed=typeof value==="string"&&value;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).addClass(value.call(this,j,this.className))})}if(proceed){classes=(value||"").match(rnotwhite)||[];for(;i<len;i++){elem=this[i];cur=elem.nodeType===1&&(elem.className?(" "+elem.className+" ").replace(rclass," "):" ");if(cur){j=0;while(clazz=classes[j++]){if(cur.indexOf(" "+clazz+" ")<0){cur+=clazz+" "}}finalValue=jQuery.trim(cur);if(elem.className!==finalValue){elem.className=finalValue}}}}return this},removeClass:function(value){var classes,elem,cur,clazz,j,finalValue,i=0,len=this.length,proceed=arguments.length===0||typeof value==="string"&&value;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).removeClass(value.call(this,j,this.className))})}if(proceed){classes=(value||"").match(rnotwhite)||[];for(;i<len;i++){elem=this[i];cur=elem.nodeType===1&&(elem.className?(" "+elem.className+" ").replace(rclass," "):"");if(cur){j=0;while(clazz=classes[j++]){while(cur.indexOf(" "+clazz+" ")>=0){cur=cur.replace(" "+clazz+" "," ")}}finalValue=value?jQuery.trim(cur):"";if(elem.className!==finalValue){elem.className=finalValue}}}}return this},toggleClass:function(value,stateVal){var type=typeof value;if(typeof stateVal==="boolean"&&type==="string"){return stateVal?this.addClass(value):this.removeClass(value)}if(jQuery.isFunction(value)){return this.each(function(i){jQuery(this).toggleClass(value.call(this,i,this.className,stateVal),stateVal)})}return this.each(function(){if(type==="string"){var className,i=0,self=jQuery(this),classNames=value.match(rnotwhite)||[];while(className=classNames[i++]){if(self.hasClass(className)){self.removeClass(className)}else{self.addClass(className)}}}else if(type===strundefined||type==="boolean"){if(this.className){jQuery._data(this,"__className__",this.className)}this.className=this.className||value===false?"":jQuery._data(this,"__className__")||""}})},hasClass:function(selector){var className=" "+selector+" ",i=0,l=this.length;for(;i<l;i++){if(this[i].nodeType===1&&(" "+this[i].className+" ").replace(rclass," ").indexOf(className)>=0){return true}}return false}});jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick "+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+"change select submit keydown keypress keyup error contextmenu").split(" "),function(i,name){jQuery.fn[name]=function(data,fn){return arguments.length>0?this.on(name,null,data,fn):this.trigger(name)}});jQuery.fn.extend({hover:function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver)},bind:function(types,data,fn){return this.on(types,null,data,fn)},unbind:function(types,fn){return this.off(types,null,fn)},delegate:function(selector,types,data,fn){return this.on(types,selector,data,fn)},undelegate:function(selector,types,fn){return arguments.length===1?this.off(selector,"**"):this.off(types,selector||"**",fn)}});var nonce=jQuery.now();var rquery=/\?/;var rvalidtokens=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;jQuery.parseJSON=function(data){if(window.JSON&&window.JSON.parse){return window.JSON.parse(data+"")}var requireNonComma,depth=null,str=jQuery.trim(data+"");return str&&!jQuery.trim(str.replace(rvalidtokens,function(token,comma,open,close){if(requireNonComma&&comma){depth=0}if(depth===0){return token}requireNonComma=open||comma;depth+=!close-!open;return""}))?Function("return "+str)():jQuery.error("Invalid JSON: "+data)};jQuery.parseXML=function(data){var xml,tmp;if(!data||typeof data!=="string"){return null}try{if(window.DOMParser){tmp=new DOMParser;xml=tmp.parseFromString(data,"text/xml")}else{xml=new ActiveXObject("Microsoft.XMLDOM");xml.async="false";xml.loadXML(data)}}catch(e){xml=undefined}if(!xml||!xml.documentElement||xml.getElementsByTagName("parsererror").length){jQuery.error("Invalid XML: "+data)}return xml};var ajaxLocParts,ajaxLocation,rhash=/#.*$/,rts=/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,rurl=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,prefilters={},transports={},allTypes="*/".concat("*");try{ajaxLocation=location.href}catch(e){ajaxLocation=document.createElement("a");ajaxLocation.href="";ajaxLocation=ajaxLocation.href}ajaxLocParts=rurl.exec(ajaxLocation.toLowerCase())||[];function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){if(typeof dataTypeExpression!=="string"){func=dataTypeExpression;dataTypeExpression="*"}var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(rnotwhite)||[];if(jQuery.isFunction(func)){while(dataType=dataTypes[i++]){if(dataType.charAt(0)==="+"){dataType=dataType.slice(1)||"*";(structure[dataType]=structure[dataType]||[]).unshift(func)}else{(structure[dataType]=structure[dataType]||[]).push(func)}}}}}function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR){var inspected={},seekingTransport=structure===transports;function inspect(dataType){var selected;inspected[dataType]=true;jQuery.each(structure[dataType]||[],function(_,prefilterOrFactory){var dataTypeOrTransport=prefilterOrFactory(options,originalOptions,jqXHR);if(typeof dataTypeOrTransport==="string"&&!seekingTransport&&!inspected[dataTypeOrTransport]){options.dataTypes.unshift(dataTypeOrTransport);inspect(dataTypeOrTransport);return false}else if(seekingTransport){return!(selected=dataTypeOrTransport)}});return selected}return inspect(options.dataTypes[0])||!inspected["*"]&&inspect("*")}function ajaxExtend(target,src){var deep,key,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src){if(src[key]!==undefined){(flatOptions[key]?target:deep||(deep={}))[key]=src[key]}}if(deep){jQuery.extend(true,target,deep)}return target}function ajaxHandleResponses(s,jqXHR,responses){var firstDataType,ct,finalDataType,type,contents=s.contents,dataTypes=s.dataTypes;while(dataTypes[0]==="*"){dataTypes.shift();if(ct===undefined){ct=s.mimeType||jqXHR.getResponseHeader("Content-Type")}}if(ct){for(type in contents){if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break}}}if(dataTypes[0]in responses){finalDataType=dataTypes[0]}else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break}if(!firstDataType){firstDataType=type}}finalDataType=finalDataType||firstDataType}if(finalDataType){if(finalDataType!==dataTypes[0]){dataTypes.unshift(finalDataType)}return responses[finalDataType]}}function ajaxConvert(s,response,jqXHR,isSuccess){var conv2,current,conv,tmp,prev,converters={},dataTypes=s.dataTypes.slice();if(dataTypes[1]){for(conv in s.converters){converters[conv.toLowerCase()]=s.converters[conv]}}current=dataTypes.shift();while(current){if(s.responseFields[current]){jqXHR[s.responseFields[current]]=response}if(!prev&&isSuccess&&s.dataFilter){response=s.dataFilter(response,s.dataType)}prev=current;current=dataTypes.shift();if(current){if(current==="*"){current=prev}else if(prev!=="*"&&prev!==current){conv=converters[prev+" "+current]||converters["* "+current];if(!conv){for(conv2 in converters){tmp=conv2.split(" ");if(tmp[1]===current){conv=converters[prev+" "+tmp[0]]||converters["* "+tmp[0]];if(conv){if(conv===true){conv=converters[conv2]}else if(converters[conv2]!==true){current=tmp[0];dataTypes.unshift(tmp[1])}break}}}}if(conv!==true){if(conv&&s["throws"]){response=conv(response)}else{try{response=conv(response)}catch(e){return{state:"parsererror",error:conv?e:"No conversion from "+prev+" to "+current}}}}}}}return{state:"success",data:response}}jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ajaxLocation,type:"GET",isLocal:rlocalProtocol.test(ajaxLocParts[1]),global:true,processData:true,async:true,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":true,"text json":jQuery.parseJSON,"text xml":jQuery.parseXML},flatOptions:{url:true,context:true}},ajaxSetup:function(target,settings){return settings?ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings):ajaxExtend(jQuery.ajaxSettings,target)},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){if(typeof url==="object"){options=url;url=undefined}options=options||{};var parts,i,cacheURL,responseHeadersString,timeoutTimer,fireGlobals,transport,responseHeaders,s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=s.context&&(callbackContext.nodeType||callbackContext.jquery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},requestHeaders={},requestHeadersNames={},state=0,strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(state===2){if(!responseHeaders){responseHeaders={};while(match=rheaders.exec(responseHeadersString)){responseHeaders[match[1].toLowerCase()]=match[2]}}match=responseHeaders[key.toLowerCase()]}return match==null?null:match},getAllResponseHeaders:function(){return state===2?responseHeadersString:null},setRequestHeader:function(name,value){var lname=name.toLowerCase();if(!state){name=requestHeadersNames[lname]=requestHeadersNames[lname]||name;requestHeaders[name]=value}return this},overrideMimeType:function(type){if(!state){s.mimeType=type}return this},statusCode:function(map){var code;if(map){if(state<2){for(code in map){statusCode[code]=[statusCode[code],map[code]]}}else{jqXHR.always(map[jqXHR.status])}}return this},abort:function(statusText){var finalText=statusText||strAbort;if(transport){transport.abort(finalText)}done(0,finalText);return this}};deferred.promise(jqXHR).complete=completeDeferred.add;jqXHR.success=jqXHR.done;jqXHR.error=jqXHR.fail;s.url=((url||s.url||ajaxLocation)+"").replace(rhash,"").replace(rprotocol,ajaxLocParts[1]+"//");s.type=options.method||options.type||s.method||s.type;s.dataTypes=jQuery.trim(s.dataType||"*").toLowerCase().match(rnotwhite)||[""];if(s.crossDomain==null){parts=rurl.exec(s.url.toLowerCase());s.crossDomain=!!(parts&&(parts[1]!==ajaxLocParts[1]||parts[2]!==ajaxLocParts[2]||(parts[3]||(parts[1]==="http:"?"80":"443"))!==(ajaxLocParts[3]||(ajaxLocParts[1]==="http:"?"80":"443"))))}if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data,s.traditional)}inspectPrefiltersOrTransports(prefilters,s,options,jqXHR);if(state===2){return jqXHR}fireGlobals=jQuery.event&&s.global;if(fireGlobals&&jQuery.active++===0){jQuery.event.trigger("ajaxStart")}s.type=s.type.toUpperCase();s.hasContent=!rnoContent.test(s.type);cacheURL=s.url;if(!s.hasContent){if(s.data){cacheURL=s.url+=(rquery.test(cacheURL)?"&":"?")+s.data;delete s.data}if(s.cache===false){s.url=rts.test(cacheURL)?cacheURL.replace(rts,"$1_="+nonce++):cacheURL+(rquery.test(cacheURL)?"&":"?")+"_="+nonce++}}if(s.ifModified){if(jQuery.lastModified[cacheURL]){jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[cacheURL])}if(jQuery.etag[cacheURL]){jqXHR.setRequestHeader("If-None-Match",jQuery.etag[cacheURL])}}if(s.data&&s.hasContent&&s.contentType!==false||options.contentType){jqXHR.setRequestHeader("Content-Type",s.contentType)}jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+(s.dataTypes[0]!=="*"?", "+allTypes+"; q=0.01":""):s.accepts["*"]);for(i in s.headers){jqXHR.setRequestHeader(i,s.headers[i])}if(s.beforeSend&&(s.beforeSend.call(callbackContext,jqXHR,s)===false||state===2)){return jqXHR.abort()}strAbort="abort";for(i in{success:1,error:1,complete:1}){jqXHR[i](s[i])}transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR);if(!transport){done(-1,"No Transport")}else{jqXHR.readyState=1;if(fireGlobals){globalEventContext.trigger("ajaxSend",[jqXHR,s])}if(s.async&&s.timeout>0){timeoutTimer=setTimeout(function(){jqXHR.abort("timeout")},s.timeout)}try{state=1;transport.send(requestHeaders,done)}catch(e){if(state<2){done(-1,e)}else{throw e}}}function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;if(state===2){return}state=2;if(timeoutTimer){clearTimeout(timeoutTimer)}transport=undefined;responseHeadersString=headers||"";jqXHR.readyState=status>0?4:0;isSuccess=status>=200&&status<300||status===304;if(responses){response=ajaxHandleResponses(s,jqXHR,responses)}response=ajaxConvert(s,response,jqXHR,isSuccess);if(isSuccess){if(s.ifModified){modified=jqXHR.getResponseHeader("Last-Modified");if(modified){jQuery.lastModified[cacheURL]=modified}modified=jqXHR.getResponseHeader("etag");if(modified){jQuery.etag[cacheURL]=modified}}if(status===204||s.type==="HEAD"){statusText="nocontent"}else if(status===304){statusText="notmodified"}else{statusText=response.state;success=response.data;error=response.error;isSuccess=!error}}else{error=statusText;if(status||!statusText){statusText="error";if(status<0){status=0}}}jqXHR.status=status;jqXHR.statusText=(nativeStatusText||statusText)+"";if(isSuccess){deferred.resolveWith(callbackContext,[success,statusText,jqXHR])}else{deferred.rejectWith(callbackContext,[jqXHR,statusText,error])}jqXHR.statusCode(statusCode);statusCode=undefined;if(fireGlobals){globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error])}completeDeferred.fireWith(callbackContext,[jqXHR,statusText]);if(fireGlobals){globalEventContext.trigger("ajaxComplete",[jqXHR,s]);if(!--jQuery.active){jQuery.event.trigger("ajaxStop")}}}return jqXHR},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json")},getScript:function(url,callback){return jQuery.get(url,undefined,callback,"script")}});jQuery.each(["get","post"],function(i,method){jQuery[method]=function(url,data,callback,type){if(jQuery.isFunction(data)){type=type||callback;callback=data;data=undefined}return jQuery.ajax({url:url,type:method,dataType:type,data:data,success:callback})}});jQuery._evalUrl=function(url){return jQuery.ajax({url:url,type:"GET",dataType:"script",async:false,global:false,"throws":true})};jQuery.fn.extend({wrapAll:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapAll(html.call(this,i))})}if(this[0]){var wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){wrap.insertBefore(this[0])}wrap.map(function(){var elem=this;while(elem.firstChild&&elem.firstChild.nodeType===1){elem=elem.firstChild}return elem}).append(this)}return this},wrapInner:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapInner(html.call(this,i))})}return this.each(function(){var self=jQuery(this),contents=self.contents();if(contents.length){contents.wrapAll(html)}else{self.append(html)}})},wrap:function(html){var isFunction=jQuery.isFunction(html);return this.each(function(i){jQuery(this).wrapAll(isFunction?html.call(this,i):html)})},unwrap:function(){return this.parent().each(function(){if(!jQuery.nodeName(this,"body")){jQuery(this).replaceWith(this.childNodes)}}).end()}});jQuery.expr.filters.hidden=function(elem){return elem.offsetWidth<=0&&elem.offsetHeight<=0||!support.reliableHiddenOffsets()&&(elem.style&&elem.style.display||jQuery.css(elem,"display"))==="none"};jQuery.expr.filters.visible=function(elem){return!jQuery.expr.filters.hidden(elem)};var r20=/%20/g,rbracket=/\[\]$/,rCRLF=/\r?\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;function buildParams(prefix,obj,traditional,add){var name;if(jQuery.isArray(obj)){jQuery.each(obj,function(i,v){if(traditional||rbracket.test(prefix)){add(prefix,v)}else{buildParams(prefix+"["+(typeof v==="object"?i:"")+"]",v,traditional,add)}})}else if(!traditional&&jQuery.type(obj)==="object"){for(name in obj){buildParams(prefix+"["+name+"]",obj[name],traditional,add)}}else{add(prefix,obj)}}jQuery.param=function(a,traditional){var prefix,s=[],add=function(key,value){value=jQuery.isFunction(value)?value():value==null?"":value;s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value)};if(traditional===undefined){traditional=jQuery.ajaxSettings&&jQuery.ajaxSettings.traditional}if(jQuery.isArray(a)||a.jquery&&!jQuery.isPlainObject(a)){jQuery.each(a,function(){add(this.name,this.value)})}else{for(prefix in a){buildParams(prefix,a[prefix],traditional,add)}}return s.join("&").replace(r20,"+")};jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray());
22},serializeArray:function(){return this.map(function(){var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this}).filter(function(){var type=this.type;return this.name&&!jQuery(this).is(":disabled")&&rsubmittable.test(this.nodeName)&&!rsubmitterTypes.test(type)&&(this.checked||!rcheckableType.test(type))}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:jQuery.isArray(val)?jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")}}):{name:elem.name,value:val.replace(rCRLF,"\r\n")}}).get()}});jQuery.ajaxSettings.xhr=window.ActiveXObject!==undefined?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&createStandardXHR()||createActiveXHR()}:createStandardXHR;var xhrId=0,xhrCallbacks={},xhrSupported=jQuery.ajaxSettings.xhr();if(window.attachEvent){window.attachEvent("onunload",function(){for(var key in xhrCallbacks){xhrCallbacks[key](undefined,true)}})}support.cors=!!xhrSupported&&"withCredentials"in xhrSupported;xhrSupported=support.ajax=!!xhrSupported;if(xhrSupported){jQuery.ajaxTransport(function(options){if(!options.crossDomain||support.cors){var callback;return{send:function(headers,complete){var i,xhr=options.xhr(),id=++xhrId;xhr.open(options.type,options.url,options.async,options.username,options.password);if(options.xhrFields){for(i in options.xhrFields){xhr[i]=options.xhrFields[i]}}if(options.mimeType&&xhr.overrideMimeType){xhr.overrideMimeType(options.mimeType)}if(!options.crossDomain&&!headers["X-Requested-With"]){headers["X-Requested-With"]="XMLHttpRequest"}for(i in headers){if(headers[i]!==undefined){xhr.setRequestHeader(i,headers[i]+"")}}xhr.send(options.hasContent&&options.data||null);callback=function(_,isAbort){var status,statusText,responses;if(callback&&(isAbort||xhr.readyState===4)){delete xhrCallbacks[id];callback=undefined;xhr.onreadystatechange=jQuery.noop;if(isAbort){if(xhr.readyState!==4){xhr.abort()}}else{responses={};status=xhr.status;if(typeof xhr.responseText==="string"){responses.text=xhr.responseText}try{statusText=xhr.statusText}catch(e){statusText=""}if(!status&&options.isLocal&&!options.crossDomain){status=responses.text?200:404}else if(status===1223){status=204}}}if(responses){complete(status,statusText,responses,xhr.getAllResponseHeaders())}};if(!options.async){callback()}else if(xhr.readyState===4){setTimeout(callback)}else{xhr.onreadystatechange=xhrCallbacks[id]=callback}},abort:function(){if(callback){callback(undefined,true)}}}}})}function createStandardXHR(){try{return new window.XMLHttpRequest}catch(e){}}function createActiveXHR(){try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(text){jQuery.globalEval(text);return text}}});jQuery.ajaxPrefilter("script",function(s){if(s.cache===undefined){s.cache=false}if(s.crossDomain){s.type="GET";s.global=false}});jQuery.ajaxTransport("script",function(s){if(s.crossDomain){var script,head=document.head||jQuery("head")[0]||document.documentElement;return{send:function(_,callback){script=document.createElement("script");script.async=true;if(s.scriptCharset){script.charset=s.scriptCharset}script.src=s.url;script.onload=script.onreadystatechange=function(_,isAbort){if(isAbort||!script.readyState||/loaded|complete/.test(script.readyState)){script.onload=script.onreadystatechange=null;if(script.parentNode){script.parentNode.removeChild(script)}script=null;if(!isAbort){callback(200,"success")}}};head.insertBefore(script,head.firstChild)},abort:function(){if(script){script.onload(undefined,true)}}}}});var oldCallbacks=[],rjsonp=/(=)\?(?=&|$)|\?\?/;jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var callback=oldCallbacks.pop()||jQuery.expando+"_"+nonce++;this[callback]=true;return callback}});jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var callbackName,overwritten,responseContainer,jsonProp=s.jsonp!==false&&(rjsonp.test(s.url)?"url":typeof s.data==="string"&&!(s.contentType||"").indexOf("application/x-www-form-urlencoded")&&rjsonp.test(s.data)&&"data");if(jsonProp||s.dataTypes[0]==="jsonp"){callbackName=s.jsonpCallback=jQuery.isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback;if(jsonProp){s[jsonProp]=s[jsonProp].replace(rjsonp,"$1"+callbackName)}else if(s.jsonp!==false){s.url+=(rquery.test(s.url)?"&":"?")+s.jsonp+"="+callbackName}s.converters["script json"]=function(){if(!responseContainer){jQuery.error(callbackName+" was not called")}return responseContainer[0]};s.dataTypes[0]="json";overwritten=window[callbackName];window[callbackName]=function(){responseContainer=arguments};jqXHR.always(function(){window[callbackName]=overwritten;if(s[callbackName]){s.jsonpCallback=originalSettings.jsonpCallback;oldCallbacks.push(callbackName)}if(responseContainer&&jQuery.isFunction(overwritten)){overwritten(responseContainer[0])}responseContainer=overwritten=undefined});return"script"}});jQuery.parseHTML=function(data,context,keepScripts){if(!data||typeof data!=="string"){return null}if(typeof context==="boolean"){keepScripts=context;context=false}context=context||document;var parsed=rsingleTag.exec(data),scripts=!keepScripts&&[];if(parsed){return[context.createElement(parsed[1])]}parsed=jQuery.buildFragment([data],context,scripts);if(scripts&&scripts.length){jQuery(scripts).remove()}return jQuery.merge([],parsed.childNodes)};var _load=jQuery.fn.load;jQuery.fn.load=function(url,params,callback){if(typeof url!=="string"&&_load){return _load.apply(this,arguments)}var selector,response,type,self=this,off=url.indexOf(" ");if(off>=0){selector=jQuery.trim(url.slice(off,url.length));url=url.slice(0,off)}if(jQuery.isFunction(params)){callback=params;params=undefined}else if(params&&typeof params==="object"){type="POST"}if(self.length>0){jQuery.ajax({url:url,type:type,dataType:"html",data:params}).done(function(responseText){response=arguments;self.html(selector?jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector):responseText)}).complete(callback&&function(jqXHR,status){self.each(callback,response||[jqXHR.responseText,status,jqXHR])})}return this};jQuery.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(i,type){jQuery.fn[type]=function(fn){return this.on(type,fn)}});jQuery.expr.filters.animated=function(elem){return jQuery.grep(jQuery.timers,function(fn){return elem===fn.elem}).length};var docElem=window.document.documentElement;function getWindow(elem){return jQuery.isWindow(elem)?elem:elem.nodeType===9?elem.defaultView||elem.parentWindow:false}jQuery.offset={setOffset:function(elem,options,i){var curPosition,curLeft,curCSSTop,curTop,curOffset,curCSSLeft,calculatePosition,position=jQuery.css(elem,"position"),curElem=jQuery(elem),props={};if(position==="static"){elem.style.position="relative"}curOffset=curElem.offset();curCSSTop=jQuery.css(elem,"top");curCSSLeft=jQuery.css(elem,"left");calculatePosition=(position==="absolute"||position==="fixed")&&jQuery.inArray("auto",[curCSSTop,curCSSLeft])>-1;if(calculatePosition){curPosition=curElem.position();curTop=curPosition.top;curLeft=curPosition.left}else{curTop=parseFloat(curCSSTop)||0;curLeft=parseFloat(curCSSLeft)||0}if(jQuery.isFunction(options)){options=options.call(elem,i,curOffset)}if(options.top!=null){props.top=options.top-curOffset.top+curTop}if(options.left!=null){props.left=options.left-curOffset.left+curLeft}if("using"in options){options.using.call(elem,props)}else{curElem.css(props)}}};jQuery.fn.extend({offset:function(options){if(arguments.length){return options===undefined?this:this.each(function(i){jQuery.offset.setOffset(this,options,i)})}var docElem,win,box={top:0,left:0},elem=this[0],doc=elem&&elem.ownerDocument;if(!doc){return}docElem=doc.documentElement;if(!jQuery.contains(docElem,elem)){return box}if(typeof elem.getBoundingClientRect!==strundefined){box=elem.getBoundingClientRect()}win=getWindow(doc);return{top:box.top+(win.pageYOffset||docElem.scrollTop)-(docElem.clientTop||0),left:box.left+(win.pageXOffset||docElem.scrollLeft)-(docElem.clientLeft||0)}},position:function(){if(!this[0]){return}var offsetParent,offset,parentOffset={top:0,left:0},elem=this[0];if(jQuery.css(elem,"position")==="fixed"){offset=elem.getBoundingClientRect()}else{offsetParent=this.offsetParent();offset=this.offset();if(!jQuery.nodeName(offsetParent[0],"html")){parentOffset=offsetParent.offset()}parentOffset.top+=jQuery.css(offsetParent[0],"borderTopWidth",true);parentOffset.left+=jQuery.css(offsetParent[0],"borderLeftWidth",true)}return{top:offset.top-parentOffset.top-jQuery.css(elem,"marginTop",true),left:offset.left-parentOffset.left-jQuery.css(elem,"marginLeft",true)}},offsetParent:function(){return this.map(function(){var offsetParent=this.offsetParent||docElem;while(offsetParent&&(!jQuery.nodeName(offsetParent,"html")&&jQuery.css(offsetParent,"position")==="static")){offsetParent=offsetParent.offsetParent}return offsetParent||docElem})}});jQuery.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(method,prop){var top=/Y/.test(prop);jQuery.fn[method]=function(val){return access(this,function(elem,method,val){var win=getWindow(elem);if(val===undefined){return win?prop in win?win[prop]:win.document.documentElement[method]:elem[method]}if(win){win.scrollTo(!top?val:jQuery(win).scrollLeft(),top?val:jQuery(win).scrollTop())}else{elem[method]=val}},method,val,arguments.length,null)}});jQuery.each(["top","left"],function(i,prop){jQuery.cssHooks[prop]=addGetHookIf(support.pixelPosition,function(elem,computed){if(computed){computed=curCSS(elem,prop);return rnumnonpx.test(computed)?jQuery(elem).position()[prop]+"px":computed}})});jQuery.each({Height:"height",Width:"width"},function(name,type){jQuery.each({padding:"inner"+name,content:type,"":"outer"+name},function(defaultExtra,funcName){jQuery.fn[funcName]=function(margin,value){var chainable=arguments.length&&(defaultExtra||typeof margin!=="boolean"),extra=defaultExtra||(margin===true||value===true?"margin":"border");return access(this,function(elem,type,value){var doc;if(jQuery.isWindow(elem)){return elem.document.documentElement["client"+name]}if(elem.nodeType===9){doc=elem.documentElement;return Math.max(elem.body["scroll"+name],doc["scroll"+name],elem.body["offset"+name],doc["offset"+name],doc["client"+name])}return value===undefined?jQuery.css(elem,type,extra):jQuery.style(elem,type,value,extra)},type,chainable?margin:undefined,chainable,null)}})});jQuery.fn.size=function(){return this.length};jQuery.fn.andSelf=jQuery.fn.addBack;if(typeof define==="function"&&define.amd){define("jquery",[],function(){return jQuery})}var _jQuery=window.jQuery,_$=window.$;jQuery.noConflict=function(deep){if(window.$===jQuery){window.$=_$}if(deep&&window.jQuery===jQuery){window.jQuery=_jQuery}return jQuery};if(typeof noGlobal===strundefined){window.jQuery=window.$=jQuery}return jQuery})},{}],13:[function(require,module,exports){"use strict";var extend=require("backbone-extend-standalone");var Promise=require("es6-promise").Promise;var authz=require("./authz");var identity=require("./identity");var notification=require("./notification");var registry=require("./registry");var storage=require("./storage");function App(){this.modules=[];this.registry=new registry.Registry;this._started=false;this.registry.registerUtility(notification.defaultNotifier,"notifier");this.include(authz.acl);this.include(identity.simple);this.include(storage.noop)}App.prototype.include=function(module,options){var mod=module(options);if(typeof mod.configure==="function"){mod.configure(this.registry)}this.modules.push(mod);return this};App.prototype.start=function(){if(this._started){return}this._started=true;var self=this;var reg=this.registry;this.authz=reg.getUtility("authorizationPolicy");this.ident=reg.getUtility("identityPolicy");this.notify=reg.getUtility("notifier");this.annotations=new storage.StorageAdapter(reg.getUtility("storage"),function(){return self.runHook.apply(self,arguments)});return this.runHook("start",[this])};App.prototype.destroy=function(){return this.runHook("destroy")};App.prototype.runHook=function(name,args){var results=[];for(var i=0,len=this.modules.length;i<len;i++){var mod=this.modules[i];if(typeof mod[name]==="function"){results.push(mod[name].apply(mod,args))}}return Promise.all(results)};App.extend=extend;exports.App=App},{"./authz":14,"./identity":15,"./notification":16,"./registry":17,"./storage":18,"backbone-extend-standalone":3,"es6-promise":5}],14:[function(require,module,exports){"use strict";var AclAuthzPolicy;exports.acl=function acl(){var authorization=new AclAuthzPolicy;return{configure:function(registry){registry.registerUtility(authorization,"authorizationPolicy")}}};AclAuthzPolicy=exports.AclAuthzPolicy=function AclAuthzPolicy(){};AclAuthzPolicy.prototype.permits=function(action,context,identity){var userid=this.authorizedUserId(identity);var permissions=context.permissions;if(permissions){var tokens=permissions[action];if(typeof tokens==="undefined"||tokens===null){return true}for(var i=0,len=tokens.length;i<len;i++){if(userid===tokens[i]){return true}}return false}else if(context.user){return userid===context.user}return true};AclAuthzPolicy.prototype.authorizedUserId=function(identity){return identity}},{}],15:[function(require,module,exports){"use strict";var SimpleIdentityPolicy;exports.simple=function simple(){var identity=new SimpleIdentityPolicy;return{configure:function(registry){registry.registerUtility(identity,"identityPolicy")},beforeAnnotationCreated:function(annotation){annotation.user=identity.who()}}};SimpleIdentityPolicy=function SimpleIdentityPolicy(){this.identity=null};exports.SimpleIdentityPolicy=SimpleIdentityPolicy;SimpleIdentityPolicy.prototype.who=function(){return this.identity}},{}],16:[function(require,module,exports){(function(global){"use strict";var util=require("./util");var $=util.$;var INFO="info",SUCCESS="success",ERROR="error";var bannerTemplate="<div class='annotator-notice'></div>";var bannerClasses={show:"annotator-notice-show",info:"annotator-notice-info",success:"annotator-notice-success",error:"annotator-notice-error"};function banner(message,severity){if(typeof severity==="undefined"||severity===null){severity=INFO}var element=$(bannerTemplate)[0];var closed=false;var close=function(){if(closed){return}closed=true;$(element).removeClass(bannerClasses.show).removeClass(bannerClasses[severity]);setTimeout(function(){$(element).remove()},500)};$(element).addClass(bannerClasses.show).addClass(bannerClasses[severity]).html(util.escapeHtml(message||"")).appendTo(global.document.body);$(element).on("click",close);setTimeout(close,5e3);return{close:close}}exports.banner=banner;exports.defaultNotifier=banner;exports.INFO=INFO;exports.SUCCESS=SUCCESS;exports.ERROR=ERROR}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./util":30}],17:[function(require,module,exports){"use strict";function Registry(){this.utilities={}}Registry.prototype.registerUtility=function(component,iface){this.utilities[iface]=component};Registry.prototype.getUtility=function(iface){var component=this.queryUtility(iface);if(component===null){throw new LookupError(iface)}return component};Registry.prototype.queryUtility=function(iface){var component=this.utilities[iface];if(typeof component==="undefined"||component===null){return null}return component};function LookupError(iface){this.name="LookupError";this.message='No utility registered for interface "'+iface+'".'}LookupError.prototype=Object.create(Error.prototype);LookupError.prototype.constructor=LookupError;exports.LookupError=LookupError;exports.Registry=Registry},{}],18:[function(require,module,exports){"use strict";var util=require("./util");var $=util.$;var _t=util.gettext;var Promise=util.Promise;var id=function(){var counter;counter=-1;return function(){return counter+=1}}();exports.debug=function(){function trace(action,annotation){var copyAnno=JSON.parse(JSON.stringify(annotation));console.debug("annotator.storage.debug: "+action,copyAnno)}return{create:function(annotation){annotation.id=id();trace("create",annotation);return annotation},update:function(annotation){trace("update",annotation);return annotation},"delete":function(annotation){trace("destroy",annotation);return annotation},query:function(queryObj){trace("query",queryObj);return{results:[],meta:{total:0}}},configure:function(registry){registry.registerUtility(this,"storage")}}};exports.noop=function(){return{create:function(annotation){if(typeof annotation.id==="undefined"||annotation.id===null){annotation.id=id()}return annotation},update:function(annotation){return annotation},"delete":function(annotation){return annotation},query:function(){return{results:[]}},configure:function(registry){registry.registerUtility(this,"storage")}}};var HttpStorage;exports.http=function http(options){var notify=function(){};if(typeof options==="undefined"||options===null){options={}}options.onError=options.onError||function(msg,xhr){console.error(msg,xhr);notify(msg,"error")};var storage=new HttpStorage(options);return{configure:function(registry){registry.registerUtility(storage,"storage")},start:function(app){notify=app.notify}}};HttpStorage=exports.HttpStorage=function HttpStorage(options){this.options=$.extend(true,{},HttpStorage.options,options);this.onError=this.options.onError};HttpStorage.prototype.create=function(annotation){return this._apiRequest("create",annotation)};HttpStorage.prototype.update=function(annotation){return this._apiRequest("update",annotation)};HttpStorage.prototype["delete"]=function(annotation){return this._apiRequest("destroy",annotation)};HttpStorage.prototype.query=function(queryObj){return this._apiRequest("search",queryObj).then(function(obj){var rows=obj.rows;delete obj.rows;return{results:rows,meta:obj}})};HttpStorage.prototype.setHeader=function(key,value){this.options.headers[key]=value};HttpStorage.prototype._apiRequest=function(action,obj){var id=obj&&obj.id;var url=this._urlFor(action,id);var options=this._apiRequestOptions(action,obj);var request=$.ajax(url,options);request._id=id;request._action=action;return request};HttpStorage.prototype._apiRequestOptions=function(action,obj){var method=this._methodFor(action);var self=this;var opts={type:method,dataType:"json",error:function(){self._onError.apply(self,arguments)},headers:this.options.headers};if(this.options.emulateHTTP&&(method==="PUT"||method==="DELETE")){opts.headers=$.extend(opts.headers,{"X-HTTP-Method-Override":method});opts.type="POST"}if(action==="search"){opts=$.extend(opts,{data:obj});return opts}var data=obj&&JSON.stringify(obj);if(this.options.emulateJSON){opts.data={json:data};if(this.options.emulateHTTP){opts.data._method=method}return opts}opts=$.extend(opts,{data:data,contentType:"application/json; charset=utf-8"});return opts};HttpStorage.prototype._urlFor=function(action,id){if(typeof id==="undefined"||id===null){id=""}var url="";if(typeof this.options.prefix!=="undefined"&&this.options.prefix!==null){url=this.options.prefix}url+=this.options.urls[action];url=url.replace(/idAnnotation/,id);return url};HttpStorage.prototype._methodFor=function(action){var table={create:"POST",update:"PUT",destroy:"DELETE",search:"GET"};return table[action]};HttpStorage.prototype._onError=function(xhr){if(typeof this.onError!=="function"){return}var message;if(xhr.status===400){message=_t("The annotation store did not understand the request! "+"(Error 400)")}else if(xhr.status===401){message=_t("You must be logged in to perform this operation! "+"(Error 401)")}else if(xhr.status===403){message=_t("You don't have permission to perform this operation! "+"(Error 403)")}else if(xhr.status===404){message=_t("Could not connect to the annotation store! "+"(Error 404)")}else if(xhr.status===500){message=_t("Internal error in annotation store! "+"(Error 500)")}else{message=_t("Unknown error while speaking to annotation store!")}this.onError(message,xhr)};HttpStorage.options={emulateHTTP:false,emulateJSON:false,headers:{},onError:function(message){console.error("API request failed: "+message)},prefix:"/store",urls:{create:"/annotations",update:"/annotations/idAnnotation",destroy:"/annotations/idAnnotation",search:"/search"}};function StorageAdapter(store,runHook){this.store=store;this.runHook=runHook}StorageAdapter.prototype.create=function(obj){if(typeof obj==="undefined"||obj===null){obj={}}return this._cycle(obj,"create","beforeAnnotationCreated","annotationCreated")};StorageAdapter.prototype.update=function(obj){if(typeof obj.id==="undefined"||obj.id===null){throw new TypeError("annotation must have an id for update()")}return this._cycle(obj,"update","beforeAnnotationUpdated","annotationUpdated")};StorageAdapter.prototype["delete"]=function(obj){if(typeof obj.id==="undefined"||obj.id===null){throw new TypeError("annotation must have an id for delete()")}return this._cycle(obj,"delete","beforeAnnotationDeleted","annotationDeleted")};StorageAdapter.prototype.query=function(query){return Promise.resolve(this.store.query(query))};StorageAdapter.prototype.load=function(query){var self=this;return this.query(query).then(function(data){self.runHook("annotationsLoaded",[data.results])})};StorageAdapter.prototype._cycle=function(obj,storeFunc,beforeEvent,afterEvent){var self=this;return this.runHook(beforeEvent,[obj]).then(function(){var safeCopy=$.extend(true,{},obj);delete safeCopy._local;var result=self.store[storeFunc](safeCopy);return Promise.resolve(result)}).then(function(ret){for(var k in obj){if(obj.hasOwnProperty(k)){if(k!=="_local"){delete obj[k]}}}$.extend(obj,ret);self.runHook(afterEvent,[obj]);return obj})};exports.StorageAdapter=StorageAdapter},{"./util":30}],19:[function(require,module,exports){exports.main=require("./ui/main").main;exports.adder=require("./ui/adder");exports.editor=require("./ui/editor");exports.filter=require("./ui/filter");exports.highlighter=require("./ui/highlighter");exports.markdown=require("./ui/markdown");exports.tags=require("./ui/tags");exports.textselector=require("./ui/textselector");exports.viewer=require("./ui/viewer");exports.widget=require("./ui/widget")},{"./ui/adder":20,"./ui/editor":21,"./ui/filter":22,"./ui/highlighter":23,"./ui/main":24,"./ui/markdown":25,"./ui/tags":26,"./ui/textselector":27,"./ui/viewer":28,"./ui/widget":29}],20:[function(require,module,exports){"use strict";var Widget=require("./widget").Widget,util=require("../util");var $=util.$;var _t=util.gettext;var NS="annotator-adder";var Adder=Widget.extend({constructor:function(options){Widget.call(this,options);this.ignoreMouseup=false;this.annotation=null;this.onCreate=this.options.onCreate;var self=this;this.element.on("click."+NS,"button",function(e){self._onClick(e)}).on("mousedown."+NS,"button",function(e){self._onMousedown(e)});this.document=this.element[0].ownerDocument;$(this.document.body).on("mouseup."+NS,function(e){self._onMouseup(e)})},destroy:function(){this.element.off("."+NS);$(this.document.body).off("."+NS);Widget.prototype.destroy.call(this)},load:function(annotation,position){this.annotation=annotation;this.show(position)},show:function(position){if(typeof position!=="undefined"&&position!==null){this.element.css({top:position.top,left:position.left})}Widget.prototype.show.call(this)},_onMousedown:function(event){if(event.which>1){return}event.preventDefault();this.ignoreMouseup=true},_onMouseup:function(event){if(event.which>1){return}if(this.ignoreMouseup){event.stopImmediatePropagation()}},_onClick:function(event){if(event.which>1){return}event.preventDefault();this.hide();this.ignoreMouseup=false;if(this.annotation!==null&&typeof this.onCreate==="function"){this.onCreate(this.annotation,event)}}});Adder.template=['<div class="annotator-adder annotator-hide">',' <button type="button">'+_t("Annotate")+"</button>","</div>"].join("\n");Adder.options={onCreate:null};exports.Adder=Adder},{"../util":30,"./widget":29}],21:[function(require,module,exports){"use strict";var Widget=require("./widget").Widget,util=require("../util");var $=util.$;var _t=util.gettext;var Promise=util.Promise;var NS="annotator-editor";var id=function(){var counter;counter=-1;return function(){return counter+=1}}();function preventEventDefault(event){if(typeof event!=="undefined"&&event!==null&&typeof event.preventDefault==="function"){event.preventDefault()}}var dragTracker=exports.dragTracker=function dragTracker(handle,callback){var lastPos=null,throttled=false;function mouseMove(e){if(throttled||lastPos===null){return}var delta={y:e.pageY-lastPos.top,x:e.pageX-lastPos.left};var trackLastMove=true;if(typeof callback==="function"){trackLastMove=callback(delta)}if(trackLastMove!==false){lastPos={top:e.pageY,left:e.pageX}}throttled=true;setTimeout(function(){throttled=false},1e3/60)}function mouseUp(){lastPos=null;$(handle.ownerDocument).off("mouseup",mouseUp).off("mousemove",mouseMove)}function mouseDown(e){if(e.target!==handle){return}lastPos={top:e.pageY,left:e.pageX};$(handle.ownerDocument).on("mouseup",mouseUp).on("mousemove",mouseMove);e.preventDefault()}function destroy(){$(handle).off("mousedown",mouseDown)}$(handle).on("mousedown",mouseDown);return{destroy:destroy}};var resizer=exports.resizer=function resizer(element,handle,options){var $el=$(element);if(typeof options==="undefined"||options===null){options={}}function translate(delta){var directionX=1,directionY=-1;if(typeof options.invertedX==="function"&&options.invertedX()){directionX=-1}if(typeof options.invertedY==="function"&&options.invertedY()){directionY=1}return{x:delta.x*directionX,y:delta.y*directionY}}function resize(delta){var height=$el.height(),width=$el.width(),translated=translate(delta);if(Math.abs(translated.x)>0){$el.width(width+translated.x)}if(Math.abs(translated.y)>0){$el.height(height+translated.y)}var didChange=$el.height()!==height||$el.width()!==width;return didChange}return dragTracker(handle,resize)};var mover=exports.mover=function mover(element,handle){function move(delta){$(element).css({top:parseInt($(element).css("top"),10)+delta.y,left:parseInt($(element).css("left"),10)+delta.x})}return dragTracker(handle,move)};var Editor=exports.Editor=Widget.extend({constructor:function(options){Widget.call(this,options);this.fields=[];this.annotation={};if(this.options.defaultFields){this.addField({type:"textarea",label:_t("Comments")+"…",load:function(field,annotation){$(field).find("textarea").val(annotation.text||"")},submit:function(field,annotation){annotation.text=$(field).find("textarea").val()}})}var self=this;this.element.on("submit."+NS,"form",function(e){self._onFormSubmit(e)}).on("click."+NS,".annotator-save",function(e){self._onSaveClick(e)}).on("click."+NS,".annotator-cancel",function(e){self._onCancelClick(e)}).on("mouseover."+NS,".annotator-cancel",function(e){self._onCancelMouseover(e)}).on("keydown."+NS,"textarea",function(e){self._onTextareaKeydown(e)})},destroy:function(){this.element.off("."+NS);Widget.prototype.destroy.call(this)},show:function(position){if(typeof position!=="undefined"&&position!==null){this.element.css({top:position.top,left:position.left})}this.element.find(".annotator-save").addClass(this.classes.focus);Widget.prototype.show.call(this);this.element.find(":input:first").focus();this._setupDraggables()},load:function(annotation,position){this.annotation=annotation;for(var i=0,len=this.fields.length;i<len;i++){var field=this.fields[i];field.load(field.element,this.annotation)}var self=this;return new Promise(function(resolve,reject){self.dfd={resolve:resolve,reject:reject};self.show(position)})},submit:function(){for(var i=0,len=this.fields.length;i<len;i++){var field=this.fields[i];field.submit(field.element,this.annotation)}if(typeof this.dfd!=="undefined"&&this.dfd!==null){this.dfd.resolve()}this.hide()},cancel:function(){if(typeof this.dfd!=="undefined"&&this.dfd!==null){this.dfd.reject("editing cancelled")}this.hide()},addField:function(options){var field=$.extend({id:"annotator-field-"+id(),type:"input",label:"",load:function(){},submit:function(){}},options);var input=null,element=$('<li class="annotator-item" />');field.element=element[0];if(field.type==="textarea"){input=$("<textarea />")}else if(field.type==="checkbox"){input=$('<input type="checkbox" />')}else if(field.type==="input"){input=$("<input />")}else if(field.type==="select"){input=$("<select />")}element.append(input);input.attr({id:field.id,placeholder:field.label});if(field.type==="checkbox"){element.addClass("annotator-checkbox");element.append($("<label />",{"for":field.id,html:field.label}))}this.element.find("ul:first").append(element);this.fields.push(field);return field.element},checkOrientation:function(){Widget.prototype.checkOrientation.call(this);var list=this.element.find("ul").first(),controls=this.element.find(".annotator-controls");if(this.element.hasClass(this.classes.invert.y)){controls.insertBefore(list)}else if(controls.is(":first-child")){controls.insertAfter(list)}return this},_onFormSubmit:function(event){preventEventDefault(event);this.submit()},_onSaveClick:function(event){preventEventDefault(event);this.submit()},_onCancelClick:function(event){preventEventDefault(event);this.cancel()},_onCancelMouseover:function(){this.element.find("."+this.classes.focus).removeClass(this.classes.focus)},_onTextareaKeydown:function(event){if(event.which===27){this.cancel()}else if(event.which===13&&!event.shiftKey){this.submit()}},_setupDraggables:function(){if(typeof this._resizer!=="undefined"&&this._resizer!==null){this._resizer.destroy()}if(typeof this._mover!=="undefined"&&this._mover!==null){this._mover.destroy()}this.element.find(".annotator-resize").remove();var cornerItem;if(this.element.hasClass(this.classes.invert.y)){cornerItem=this.element.find(".annotator-item:last")}else{cornerItem=this.element.find(".annotator-item:first")}if(cornerItem){$('<span class="annotator-resize"></span>').appendTo(cornerItem)}var controls=this.element.find(".annotator-controls")[0],textarea=this.element.find("textarea:first")[0],resizeHandle=this.element.find(".annotator-resize")[0],self=this;this._resizer=resizer(textarea,resizeHandle,{invertedX:function(){return self.element.hasClass(self.classes.invert.x)},invertedY:function(){return self.element.hasClass(self.classes.invert.y)}});this._mover=mover(this.element[0],controls)}});Editor.classes={hide:"annotator-hide",focus:"annotator-focus"};Editor.template=['<div class="annotator-outer annotator-editor annotator-hide">',' <form class="annotator-widget">',' <ul class="annotator-listing"></ul>',' <div class="annotator-controls">',' <a href="#cancel" class="annotator-cancel">'+_t("Cancel")+"</a>",' <a href="#save"',' class="annotator-save annotator-focus">'+_t("Save")+"</a>"," </div>"," </form>","</div>"].join("\n");Editor.options={defaultFields:true};exports.standalone=function standalone(options){var widget=new exports.Editor(options);return{destroy:function(){widget.destroy()},beforeAnnotationCreated:function(annotation){return widget.load(annotation)},beforeAnnotationUpdated:function(annotation){return widget.load(annotation)}}}},{"../util":30,"./widget":29}],22:[function(require,module,exports){"use strict";var util=require("../util");var $=util.$;var _t=util.gettext;var NS="annotator-filter";var Filter=exports.Filter=function Filter(options){this.options=$.extend(true,{},Filter.options,options);this.classes=$.extend(true,{},Filter.classes);this.element=$(Filter.html.element).appendTo(this.options.appendTo);this.filter=$(Filter.html.filter);this.filters=[];this.current=0;for(var i=0,len=this.options.filters.length;i<len;i++){var filter=this.options.filters[i];this.addFilter(filter)}this.updateHighlights();var filterInput=".annotator-filter-property input",self=this;
23this.element.on("focus."+NS,filterInput,function(e){self._onFilterFocus(e)}).on("blur."+NS,filterInput,function(e){self._onFilterBlur(e)}).on("keyup."+NS,filterInput,function(e){self._onFilterKeyup(e)}).on("click."+NS,".annotator-filter-previous",function(e){self._onPreviousClick(e)}).on("click."+NS,".annotator-filter-next",function(e){self._onNextClick(e)}).on("click."+NS,".annotator-filter-clear",function(e){self._onClearClick(e)});this._insertSpacer();if(this.options.addAnnotationFilter){this.addFilter({label:_t("Annotation"),property:"text"})}};Filter.prototype.destroy=function(){var html=$("html"),currentMargin=parseInt(html.css("padding-top"),10)||0;html.css("padding-top",currentMargin-this.element.outerHeight());this.element.off("."+NS);this.element.remove()};Filter.prototype._insertSpacer=function(){var html=$("html"),currentMargin=parseInt(html.css("padding-top"),10)||0;html.css("padding-top",currentMargin+this.element.outerHeight());return this};Filter.prototype.addFilter=function(options){var filter=$.extend({label:"",property:"",isFiltered:this.options.isFiltered},options);var hasFilterForProp=false;for(var i=0,len=this.filters.length;i<len;i++){var f=this.filters[i];if(f.property===filter.property){hasFilterForProp=true;break}}if(!hasFilterForProp){filter.id="annotator-filter-"+filter.property;filter.annotations=[];filter.element=this.filter.clone().appendTo(this.element);filter.element.find("label").html(filter.label).attr("for",filter.id);filter.element.find("input").attr({id:filter.id,placeholder:_t("Filter by ")+filter.label+"…"});filter.element.find("button").hide();filter.element.data("filter",filter);this.filters.push(filter)}return this};Filter.prototype.updateFilter=function(filter){filter.annotations=[];this.updateHighlights();this.resetHighlights();var input=$.trim(filter.element.find("input").val());if(!input){return}var annotations=this.highlights.map(function(){return $(this).data("annotation")});annotations=$.makeArray(annotations);for(var i=0,len=annotations.length;i<len;i++){var annotation=annotations[i],property=annotation[filter.property];if(filter.isFiltered(input,property)){filter.annotations.push(annotation)}}this.filterHighlights()};Filter.prototype.updateHighlights=function(){this.highlights=$(this.options.filterElement).find(".annotator-hl:visible");this.filtered=this.highlights.not(this.classes.hl.hide)};Filter.prototype.filterHighlights=function(){var activeFilters=$.grep(this.filters,function(filter){return Boolean(filter.annotations.length)});var filtered=[];if(activeFilters.length>0){filtered=activeFilters[0].annotations}if(activeFilters.length>1){var annotations=[];$.each(activeFilters,function(){$.merge(annotations,this.annotations)});var uniques=[];filtered=[];$.each(annotations,function(){if($.inArray(this,uniques)===-1){uniques.push(this)}else{filtered.push(this)}})}var highlights=this.highlights;for(var i=0,len=filtered.length;i<len;i++){highlights=highlights.not(filtered[i]._local.highlights)}highlights.addClass(this.classes.hl.hide);this.filtered=this.highlights.not(this.classes.hl.hide);return this};Filter.prototype.resetHighlights=function(){this.highlights.removeClass(this.classes.hl.hide);this.filtered=this.highlights;return this};Filter.prototype._onFilterFocus=function(event){var input=$(event.target);input.parent().addClass(this.classes.active);input.next("button").show()};Filter.prototype._onFilterBlur=function(event){if(!event.target.value){var input=$(event.target);input.parent().removeClass(this.classes.active);input.next("button").hide()}};Filter.prototype._onFilterKeyup=function(event){var filter=$(event.target).parent().data("filter");if(filter){this.updateFilter(filter)}};Filter.prototype._findNextHighlight=function(previous){if(this.highlights.length===0){return this}var offset=-1,resetOffset=0,operator="gt";if(previous){offset=0;resetOffset=-1;operator="lt"}var active=this.highlights.not("."+this.classes.hl.hide),current=active.filter("."+this.classes.hl.active);if(current.length===0){current=active.eq(offset)}var annotation=current.data("annotation");var index=active.index(current[0]),next=active.filter(":"+operator+"("+index+")").not(annotation._local.highlights).eq(resetOffset);if(next.length===0){next=active.eq(resetOffset)}this._scrollToHighlight(next.data("annotation")._local.highlights)};Filter.prototype._onNextClick=function(){this._findNextHighlight()};Filter.prototype._onPreviousClick=function(){this._findNextHighlight(true)};Filter.prototype._scrollToHighlight=function(highlight){highlight=$(highlight);this.highlights.removeClass(this.classes.hl.active);highlight.addClass(this.classes.hl.active);$("html, body").animate({scrollTop:highlight.offset().top-(this.element.height()+20)},150)};Filter.prototype._onClearClick=function(event){$(event.target).prev("input").val("").keyup().blur()};Filter.classes={active:"annotator-filter-active",hl:{hide:"annotator-hl-filtered",active:"annotator-hl-active"}};Filter.html={element:['<div class="annotator-filter">'," <strong>"+_t("Navigate:")+"</strong>",' <span class="annotator-filter-navigation">',' <button type="button"',' class="annotator-filter-previous">'+_t("Previous")+"</button>",' <button type="button"',' class="annotator-filter-next">'+_t("Next")+"</button>"," </span>"," <strong>"+_t("Filter by:")+"</strong>","</div>"].join("\n"),filter:['<span class="annotator-filter-property">'," <label></label>"," <input/>",' <button type="button"',' class="annotator-filter-clear">'+_t("Clear")+"</button>","</span>"].join("\n")};Filter.options={appendTo:"body",filterElement:"body",filters:[],addAnnotationFilter:true,isFiltered:function(input,property){if(!(input&&property)){return false}var keywords=input.split(/\s+/);for(var i=0,len=keywords.length;i<len;i++){if(property.indexOf(keywords[i])===-1){return false}}return true}};exports.standalone=function(options){var widget=new exports.Filter(options);return{destroy:function(){widget.destroy()},annotationsLoaded:function(){widget.updateHighlights()},annotationCreated:function(){widget.updateHighlights()},annotationUpdated:function(){widget.updateHighlights()},annotationDeleted:function(){widget.updateHighlights()}}}},{"../util":30}],23:[function(require,module,exports){(function(global){"use strict";var xpathRange=require("xpath-range");var util=require("../util");var $=util.$;var Promise=util.Promise;function highlightRange(normedRange,cssClass){if(typeof cssClass==="undefined"||cssClass===null){cssClass="annotator-hl"}var white=/^\s*$/;var nodes=normedRange.textNodes(),results=[];for(var i=0,len=nodes.length;i<len;i++){var node=nodes[i];if(!white.test(node.nodeValue)){var hl=global.document.createElement("span");hl.className=cssClass;node.parentNode.replaceChild(hl,node);hl.appendChild(node);results.push(hl)}}return results}function reanchorRange(range,rootElement){try{return xpathRange.Range.sniff(range).normalize(rootElement)}catch(e){if(!(e instanceof xpathRange.Range.RangeError)){throw e}}return null}var Highlighter=exports.Highlighter=function Highlighter(element,options){this.element=element;this.options=$.extend(true,{},Highlighter.options,options)};Highlighter.prototype.destroy=function(){$(this.element).find("."+this.options.highlightClass).each(function(_,el){$(el).contents().insertBefore(el);$(el).remove()})};Highlighter.prototype.drawAll=function(annotations){var self=this;var p=new Promise(function(resolve){var highlights=[];function loader(annList){if(typeof annList==="undefined"||annList===null){annList=[]}var now=annList.splice(0,self.options.chunkSize);for(var i=0,len=now.length;i<len;i++){highlights=highlights.concat(self.draw(now[i]))}if(annList.length>0){setTimeout(function(){loader(annList)},self.options.chunkDelay)}else{resolve(highlights)}}var clone=annotations.slice();loader(clone)});return p};Highlighter.prototype.draw=function(annotation){var normedRanges=[];for(var i=0,ilen=annotation.ranges.length;i<ilen;i++){var r=reanchorRange(annotation.ranges[i],this.element);if(r!==null){normedRanges.push(r)}}var hasLocal=typeof annotation._local!=="undefined"&&annotation._local!==null;if(!hasLocal){annotation._local={}}var hasHighlights=typeof annotation._local.highlights!=="undefined"&&annotation._local.highlights===null;if(!hasHighlights){annotation._local.highlights=[]}for(var j=0,jlen=normedRanges.length;j<jlen;j++){var normed=normedRanges[j];$.merge(annotation._local.highlights,highlightRange(normed,this.options.highlightClass))}$(annotation._local.highlights).data("annotation",annotation);if(typeof annotation.id!=="undefined"&&annotation.id!==null){$(annotation._local.highlights).attr("data-annotation-id",annotation.id)}return annotation._local.highlights};Highlighter.prototype.undraw=function(annotation){var hasHighlights=typeof annotation._local!=="undefined"&&annotation._local!==null&&typeof annotation._local.highlights!=="undefined"&&annotation._local.highlights!==null;if(!hasHighlights){return}for(var i=0,len=annotation._local.highlights.length;i<len;i++){var h=annotation._local.highlights[i];if(h.parentNode!==null){$(h).replaceWith(h.childNodes)}}delete annotation._local.highlights};Highlighter.prototype.redraw=function(annotation){this.undraw(annotation);return this.draw(annotation)};Highlighter.options={highlightClass:"annotator-hl",chunkSize:10,chunkDelay:10};exports.standalone=function standalone(element,options){var widget=exports.Highlighter(element,options);return{destroy:function(){widget.destroy()},annotationsLoaded:function(anns){widget.drawAll(anns)},annotationCreated:function(ann){widget.draw(ann)},annotationDeleted:function(ann){widget.undraw(ann)},annotationUpdated:function(ann){widget.redraw(ann)}}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"../util":30,"xpath-range":8}],24:[function(require,module,exports){(function(global){"use strict";var util=require("../util");var adder=require("./adder");var editor=require("./editor");var highlighter=require("./highlighter");var textselector=require("./textselector");var viewer=require("./viewer");var _t=util.gettext;function trim(s){if(typeof String.prototype.trim==="function"){return String.prototype.trim.call(s)}else{return s.replace(/^[\s\xA0]+|[\s\xA0]+$/g,"")}}function annotationFactory(contextEl,ignoreSelector){return function(ranges){var text=[],serializedRanges=[];for(var i=0,len=ranges.length;i<len;i++){var r=ranges[i];text.push(trim(r.text()));serializedRanges.push(r.serialize(contextEl,ignoreSelector))}return{quote:text.join(" / "),ranges:serializedRanges}}}function maxZIndex(elements){var max=-1;for(var i=0,len=elements.length;i<len;i++){var $el=util.$(elements[i]);if($el.css("position")!=="static"){var zIndex=parseFloat($el.css("z-index"));if(zIndex>max){max=zIndex}}}return max}function injectDynamicStyle(){util.$("#annotator-dynamic-style").remove();var sel="*"+":not(annotator-adder)"+":not(annotator-outer)"+":not(annotator-notice)"+":not(annotator-filter)";var max=maxZIndex(util.$(global.document.body).find(sel).get());max=Math.max(max,1e3);var rules=[".annotator-adder, .annotator-outer, .annotator-notice {"," z-index: "+(max+20)+";","}",".annotator-filter {"," z-index: "+(max+10)+";","}"].join("\n");util.$("<style>"+rules+"</style>").attr("id","annotator-dynamic-style").attr("type","text/css").appendTo("head")}function removeDynamicStyle(){util.$("#annotator-dynamic-style").remove()}function addPermissionsCheckboxes(editor,ident,authz){function createLoadCallback(action){return function loadCallback(field,annotation){field=util.$(field).show();var u=ident.who();var input=field.find("input");if(typeof u==="undefined"||u===null){field.hide()}if(!authz.permits("admin",annotation,u)){field.hide()}if(authz.permits(action,annotation,null)){input.attr("checked","checked")}else{input.removeAttr("checked")}}}function createSubmitCallback(action){return function submitCallback(field,annotation){var u=ident.who();if(typeof u==="undefined"||u===null){return}if(!annotation.permissions){annotation.permissions={}}if(util.$(field).find("input").is(":checked")){delete annotation.permissions[action]}else{annotation.permissions[action]=[authz.authorizedUserId(u)]}}}editor.addField({type:"checkbox",label:_t("Allow anyone to <strong>view</strong> this annotation"),load:createLoadCallback("read"),submit:createSubmitCallback("read")});editor.addField({type:"checkbox",label:_t("Allow anyone to <strong>edit</strong> this annotation"),load:createLoadCallback("update"),submit:createSubmitCallback("update")})}function main(options){if(typeof options==="undefined"||options===null){options={}}options.element=options.element||global.document.body;options.editorExtensions=options.editorExtensions||[];options.viewerExtensions=options.viewerExtensions||[];var makeAnnotation=annotationFactory(options.element,".annotator-hl");var s={interactionPoint:null};function start(app){var ident=app.registry.getUtility("identityPolicy");var authz=app.registry.getUtility("authorizationPolicy");s.adder=new adder.Adder({onCreate:function(ann){app.annotations.create(ann)}});s.adder.attach();s.editor=new editor.Editor({extensions:options.editorExtensions});s.editor.attach();addPermissionsCheckboxes(s.editor,ident,authz);s.highlighter=new highlighter.Highlighter(options.element);s.textselector=new textselector.TextSelector(options.element,{onSelection:function(ranges,event){if(ranges.length>0){var annotation=makeAnnotation(ranges);s.interactionPoint=util.mousePosition(event);s.adder.load(annotation,s.interactionPoint)}else{s.adder.hide()}}});s.viewer=new viewer.Viewer({onEdit:function(ann){s.interactionPoint=util.$(s.viewer.element).css(["top","left"]);app.annotations.update(ann)},onDelete:function(ann){app.annotations["delete"](ann)},permitEdit:function(ann){return authz.permits("update",ann,ident.who())},permitDelete:function(ann){return authz.permits("delete",ann,ident.who())},autoViewHighlights:options.element,extensions:options.viewerExtensions});s.viewer.attach();injectDynamicStyle()}return{start:start,destroy:function(){s.adder.destroy();s.editor.destroy();s.highlighter.destroy();s.textselector.destroy();s.viewer.destroy();removeDynamicStyle()},annotationsLoaded:function(anns){s.highlighter.drawAll(anns)},annotationCreated:function(ann){s.highlighter.draw(ann)},annotationDeleted:function(ann){s.highlighter.undraw(ann)},annotationUpdated:function(ann){s.highlighter.redraw(ann)},beforeAnnotationCreated:function(annotation){return s.editor.load(annotation,s.interactionPoint)},beforeAnnotationUpdated:function(annotation){return s.editor.load(annotation,s.interactionPoint)}}}exports.main=main}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"../util":30,"./adder":20,"./editor":21,"./highlighter":23,"./textselector":27,"./viewer":28}],25:[function(require,module,exports){(function(global){"use strict";var util=require("../util");var _t=util.gettext;var render=exports.render=function render(annotation){var convert=util.escapeHtml;if(global.showdown&&typeof global.showdown.Converter==="function"){convert=(new global.showdown.Converter).makeHtml}if(annotation.text){return convert(annotation.text)}else{return"<i>"+_t("No comment")+"</i>"}};exports.viewerExtension=function viewerExtension(viewer){if(!global.showdown||typeof global.showdown.Converter!=="function"){console.warn(_t("To use the Markdown plugin, you must "+"include Showdown into the page first."))}viewer.setRenderer(render)}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"../util":30}],26:[function(require,module,exports){"use strict";var util=require("../util");var $=util.$;var _t=util.gettext;function stringifyTags(array){return array.join(" ")}function parseTags(string){string=$.trim(string);var tags=[];if(string){tags=string.split(/\s+/)}return tags}exports.viewerExtension=function viewerExtension(v){function updateViewer(field,annotation){field=$(field);if(annotation.tags&&$.isArray(annotation.tags)&&annotation.tags.length){field.addClass("annotator-tags").html(function(){return $.map(annotation.tags,function(tag){return'<span class="annotator-tag">'+util.escapeHtml(tag)+"</span>"}).join(" ")})}else{field.remove()}}v.addField({load:updateViewer})};exports.editorExtension=function editorExtension(e){var field=null;var input=null;function updateField(field,annotation){var value="";if(annotation.tags){value=stringifyTags(annotation.tags)}input.val(value)}function setAnnotationTags(field,annotation){annotation.tags=parseTags(input.val())}field=e.addField({label:_t("Add some tags here")+"…",load:updateField,submit:setAnnotationTags});input=$(field).find(":input")}},{"../util":30}],27:[function(require,module,exports){(function(global){"use strict";var xpathRange=require("xpath-range");var util=require("../util");var $=util.$;var TEXTSELECTOR_NS="annotator-textselector";function isAnnotator(element){var elAndParents=$(element).parents().addBack();return elAndParents.filter("[class^=annotator-]").length!==0}function TextSelector(element,options){this.element=element;this.options=$.extend(true,{},TextSelector.options,options);this.onSelection=this.options.onSelection;if(typeof this.element.ownerDocument!=="undefined"&&this.element.ownerDocument!==null){var self=this;this.document=this.element.ownerDocument;$(this.document.body).on("mouseup."+TEXTSELECTOR_NS,function(e){self._checkForEndSelection(e)})}else{console.warn("You created an instance of the TextSelector on an "+"element that doesn't have an ownerDocument. This won't "+"work! Please ensure the element is added to the DOM "+"before the plugin is configured:",this.element)}}TextSelector.prototype.destroy=function(){if(this.document){$(this.document.body).off("."+TEXTSELECTOR_NS)}};TextSelector.prototype.captureDocumentSelection=function(){var i,len,ranges=[],rangesToIgnore=[],selection=global.getSelection();if(selection.isCollapsed){return[]}for(i=0;i<selection.rangeCount;i++){var r=selection.getRangeAt(i),browserRange=new xpathRange.Range.BrowserRange(r),normedRange=browserRange.normalize().limit(this.element);if(normedRange===null){rangesToIgnore.push(r)}else{ranges.push(normedRange)}}selection.removeAllRanges();for(i=0,len=rangesToIgnore.length;i<len;i++){selection.addRange(rangesToIgnore[i])}for(i=0,len=ranges.length;i<len;i++){var range=ranges[i],drange=this.document.createRange();drange.setStartBefore(range.start);drange.setEndAfter(range.end);selection.addRange(drange)}return ranges};TextSelector.prototype._checkForEndSelection=function(event){var self=this;var _nullSelection=function(){if(typeof self.onSelection==="function"){self.onSelection([],event)}};var selectedRanges=this.captureDocumentSelection();if(selectedRanges.length===0){_nullSelection();return}for(var i=0,len=selectedRanges.length;i<len;i++){var container=selectedRanges[i].commonAncestor;if($(container).hasClass("annotator-hl")){container=$(container).parents("[class!=annotator-hl]")[0]}if(isAnnotator(container)){_nullSelection();return}}if(typeof this.onSelection==="function"){this.onSelection(selectedRanges,event)}};TextSelector.options={onSelection:null};exports.TextSelector=TextSelector}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"../util":30,"xpath-range":8}],28:[function(require,module,exports){"use strict";var Widget=require("./widget").Widget,util=require("../util");var $=util.$,_t=util.gettext;var NS="annotator-viewer";function parseLinks(data,rel,cond){cond=$.extend({},cond,{rel:rel});var results=[];for(var i=0,len=data.length;i<len;i++){var d=data[i],match=true;for(var k in cond){if(cond.hasOwnProperty(k)&&d[k]!==cond[k]){match=false;break}}if(match){results.push(d)}}return results}var Viewer=exports.Viewer=Widget.extend({constructor:function(options){Widget.call(this,options);this.itemTemplate=Viewer.itemTemplate;this.fields=[];this.annotations=[];this.hideTimer=null;this.hideTimerDfd=null;this.hideTimerActivity=null;this.mouseDown=false;this.render=function(annotation){if(annotation.text){return util.escapeHtml(annotation.text)}else{return"<i>"+_t("No comment")+"</i>"}};var self=this;if(this.options.defaultFields){this.addField({load:function(field,annotation){$(field).html(self.render(annotation))}})}if(typeof this.options.onEdit!=="function"){throw new TypeError("onEdit callback must be a function")}if(typeof this.options.onDelete!=="function"){throw new TypeError("onDelete callback must be a function")}if(typeof this.options.permitEdit!=="function"){throw new TypeError("permitEdit callback must be a function")}if(typeof this.options.permitDelete!=="function"){throw new TypeError("permitDelete callback must be a function")}if(this.options.autoViewHighlights){this.document=this.options.autoViewHighlights.ownerDocument;$(this.options.autoViewHighlights).on("mouseover."+NS,".annotator-hl",function(event){if(event.target===this){self._onHighlightMouseover(event)}}).on("mouseleave."+NS,".annotator-hl",function(){self._startHideTimer()});$(this.document.body).on("mousedown."+NS,function(e){if(e.which===1){self.mouseDown=true}}).on("mouseup."+NS,function(e){if(e.which===1){self.mouseDown=false}})}this.element.on("click."+NS,".annotator-edit",function(e){self._onEditClick(e)}).on("click."+NS,".annotator-delete",function(e){self._onDeleteClick(e)}).on("mouseenter."+NS,function(){self._clearHideTimer()}).on("mouseleave."+NS,function(){self._startHideTimer()})},destroy:function(){if(this.options.autoViewHighlights){$(this.options.autoViewHighlights).off("."+NS);$(this.document.body).off("."+NS)}this.element.off("."+NS);Widget.prototype.destroy.call(this)},show:function(position){if(typeof position!=="undefined"&&position!==null){this.element.css({top:position.top,left:position.left})}var controls=this.element.find(".annotator-controls").addClass(this.classes.showControls);var self=this;setTimeout(function(){controls.removeClass(self.classes.showControls)},500);Widget.prototype.show.call(this)},load:function(annotations,position){this.annotations=annotations||[];var list=this.element.find("ul:first").empty();for(var i=0,len=this.annotations.length;i<len;i++){var annotation=this.annotations[i];this._annotationItem(annotation).appendTo(list).data("annotation",annotation)}this.show(position)},setRenderer:function(renderer){this.render=renderer},_annotationItem:function(annotation){var item=$(this.itemTemplate).clone();var controls=item.find(".annotator-controls"),link=controls.find(".annotator-link"),edit=controls.find(".annotator-edit"),del=controls.find(".annotator-delete");var links=parseLinks(annotation.links||[],"alternate",{type:"text/html"});var hasValidLink=links.length>0&&typeof links[0].href!=="undefined"&&links[0].href!==null;if(hasValidLink){link.attr("href",links[0].href)}else{link.remove()}var controller={};if(this.options.permitEdit(annotation)){controller.showEdit=function(){edit.removeAttr("disabled")};controller.hideEdit=function(){edit.attr("disabled","disabled")}}else{edit.remove()}if(this.options.permitDelete(annotation)){controller.showDelete=function(){del.removeAttr("disabled")};controller.hideDelete=function(){del.attr("disabled","disabled")}}else{del.remove()}for(var i=0,len=this.fields.length;i<len;i++){var field=this.fields[i];var element=$(field.element).clone().appendTo(item)[0];field.load(element,annotation,controller)}return item},addField:function(options){var field=$.extend({load:function(){}},options);field.element=$("<div />")[0];this.fields.push(field);return this},_onEditClick:function(event){var item=$(event.target).parents(".annotator-annotation").data("annotation");this.hide();this.options.onEdit(item)},_onDeleteClick:function(event){if(window.confirm(_t("Delete this annotation?"))){var item=$(event.target).parents(".annotator-annotation").data("annotation");this.hide();this.options.onDelete(item)}},_onHighlightMouseover:function(event){if(this.mouseDown){return}var self=this;this._startHideTimer(true).done(function(){var annotations=$(event.target).parents(".annotator-hl").addBack().map(function(_,elem){return $(elem).data("annotation")}).toArray();self.load(annotations,util.mousePosition(event))})},_startHideTimer:function(activity){if(typeof activity==="undefined"||activity===null){activity=false}if(this.hideTimer){if(activity===false||this.hideTimerActivity===activity){return this.hideTimerDfd}else{this._clearHideTimer()}}var timeout;if(activity){timeout=this.options.activityDelay}else{timeout=this.options.inactivityDelay}this.hideTimerDfd=$.Deferred();if(!this.isShown()){this.hideTimer=null;this.hideTimerDfd.resolve();this.hideTimerActivity=null}else{var self=this;this.hideTimer=setTimeout(function(){self.hide();self.hideTimerDfd.resolve();self.hideTimer=null},timeout);this.hideTimerActivity=Boolean(activity)}return this.hideTimerDfd.promise()},_clearHideTimer:function(){clearTimeout(this.hideTimer);this.hideTimer=null;this.hideTimerDfd.reject();this.hideTimerActivity=null}});Viewer.classes={showControls:"annotator-visible"};Viewer.template=['<div class="annotator-outer annotator-viewer annotator-hide">',' <ul class="annotator-widget annotator-listing"></ul>',"</div>"].join("\n");Viewer.itemTemplate=['<li class="annotator-annotation annotator-item">',' <span class="annotator-controls">',' <a href="#"',' title="'+_t("View as webpage")+'"',' class="annotator-link">'+_t("View as webpage")+"</a>",' <button type="button"',' title="'+_t("Edit")+'"',' class="annotator-edit">'+_t("Edit")+"</button>",' <button type="button"',' title="'+_t("Delete")+'"',' class="annotator-delete">'+_t("Delete")+"</button>"," </span>","</li>"].join("\n");Viewer.options={defaultFields:true,inactivityDelay:500,activityDelay:100,permitEdit:function(){return false},permitDelete:function(){return false},autoViewHighlights:null,onEdit:function(){},onDelete:function(){}};exports.standalone=function standalone(options){var widget;if(typeof options==="undefined"||options===null){options={}}return{start:function(app){var ident=app.registry.getUtility("identityPolicy");var authz=app.registry.getUtility("authorizationPolicy");if(typeof options.onEdit==="undefined"){options.onEdit=function(annotation){app.annotations.update(annotation)}}if(typeof options.onDelete==="undefined"){options.onDelete=function(annotation){app.annotations["delete"](annotation)}}if(typeof options.permitEdit==="undefined"){options.permitEdit=function(annotation){return authz.permits("update",annotation,ident.who())}}if(typeof options.permitDelete==="undefined"){options.permitDelete=function(annotation){return authz.permits("delete",annotation,ident.who())}}widget=new exports.Viewer(options)},destroy:function(){widget.destroy()}}}},{"../util":30,"./widget":29}],29:[function(require,module,exports){(function(global){"use strict";var extend=require("backbone-extend-standalone");var util=require("../util");var $=util.$;function Widget(options){this.element=$(this.constructor.template);this.classes=$.extend({},Widget.classes,this.constructor.classes);this.options=$.extend({},Widget.options,this.constructor.options,options);this.extensionsInstalled=false}Widget.prototype.destroy=function(){this.element.remove()};Widget.prototype.installExtensions=function(){if(this.options.extensions){for(var i=0,len=this.options.extensions.length;i<len;i++){var extension=this.options.extensions[i];extension(this)}}};Widget.prototype._maybeInstallExtensions=function(){if(!this.extensionsInstalled){this.extensionsInstalled=true;this.installExtensions()}};Widget.prototype.attach=function(){this.element.appendTo(this.options.appendTo);this._maybeInstallExtensions()};Widget.prototype.show=function(){this.element.removeClass(this.classes.hide);this.checkOrientation()};Widget.prototype.hide=function(){$(this.element).addClass(this.classes.hide)};Widget.prototype.isShown=function(){return!$(this.element).hasClass(this.classes.hide)};Widget.prototype.checkOrientation=function(){this.resetOrientation();var $win=$(global),$widget=this.element.children(":first"),offset=$widget.offset(),viewport={top:$win.scrollTop(),right:$win.width()+$win.scrollLeft()},current={top:offset.top,right:offset.left+$widget.width()};if(current.top-viewport.top<0){this.invertY()}if(current.right-viewport.right>0){this.invertX()}return this};Widget.prototype.resetOrientation=function(){this.element.removeClass(this.classes.invert.x).removeClass(this.classes.invert.y);return this};Widget.prototype.invertX=function(){this.element.addClass(this.classes.invert.x);return this};Widget.prototype.invertY=function(){this.element.addClass(this.classes.invert.y);return this};Widget.prototype.isInvertedY=function(){return this.element.hasClass(this.classes.invert.y)};Widget.prototype.isInvertedX=function(){return this.element.hasClass(this.classes.invert.x)};Widget.classes={hide:"annotator-hide",invert:{x:"annotator-invert-x",y:"annotator-invert-y"}};Widget.template="<div></div>";Widget.options={appendTo:"body"};Widget.extend=extend;exports.Widget=Widget}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"../util":30,"backbone-extend-standalone":3}],30:[function(require,module,exports){(function(global){"use strict";var $=require("jquery");var Promise=require("es6-promise").Promise;var ESCAPE_MAP={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};function escapeHtml(string){return String(string).replace(/[&<>"'\/]/g,function(c){return ESCAPE_MAP[c]})}var gettext=function(){if(typeof global.Gettext==="function"){var _gettext=new global.Gettext({domain:"annotator"});return function(msgid){return _gettext.gettext(msgid)}}return function(msgid){return msgid}}();function mousePosition(event){var body=global.document.body;var offset={top:0,left:0};if($(body).css("position")!=="static"){offset=$(body).offset()}return{top:event.pageY-offset.top,left:event.pageX-offset.left}}exports.$=$;exports.Promise=Promise;exports.gettext=gettext;exports.escapeHtml=escapeHtml;exports.mousePosition=mousePosition}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"es6-promise":5,jquery:7}]},{},[1])(1)});
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/jquery-2.0.3.min.js b/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/jquery-2.0.3.min.js
deleted file mode 100644
index a4dd0a2f..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/jquery-2.0.3.min.js
+++ /dev/null
@@ -1 +0,0 @@
1(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return f.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,p,f,h,d,g,m,y,v="sizzle"+-new Date,b=e.document,w=0,T=0,C=st(),k=st(),N=st(),E=!1,S=function(e,t){return e===t?(E=!0,0):0},j=typeof undefined,D=1<<31,A={}.hasOwnProperty,L=[],q=L.pop,H=L.push,O=L.push,F=L.slice,P=L.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",W="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$=W.replace("w","w#"),B="\\["+M+"*("+W+")"+M+"*(?:([*^$|!~]?=)"+M+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+$+")|)|)"+M+"*\\]",I=":("+W+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+B.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=RegExp("^"+M+"*,"+M+"*"),X=RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=RegExp(M+"*[+~]"),Y=RegExp("="+M+"*([^\\]'\"]*)"+M+"*\\]","g"),V=RegExp(I),G=RegExp("^"+$+"$"),J={ID:RegExp("^#("+W+")"),CLASS:RegExp("^\\.("+W+")"),TAG:RegExp("^("+W.replace("w","w*")+")"),ATTR:RegExp("^"+B),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:RegExp("^(?:"+R+")$","i"),needsContext:RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Q=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/^(?:input|select|textarea|button)$/i,et=/^h\d$/i,tt=/'|\\/g,nt=RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),rt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{O.apply(L=F.call(b.childNodes),b.childNodes),L[b.childNodes.length].nodeType}catch(it){O={apply:L.length?function(e,t){H.apply(e,F.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function ot(e,t,r,i){var o,s,a,u,l,f,g,m,x,w;if((t?t.ownerDocument||t:b)!==p&&c(t),t=t||p,r=r||[],!e||"string"!=typeof e)return r;if(1!==(u=t.nodeType)&&9!==u)return[];if(h&&!i){if(o=K.exec(e))if(a=o[1]){if(9===u){if(s=t.getElementById(a),!s||!s.parentNode)return r;if(s.id===a)return r.push(s),r}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(a))&&y(t,s)&&s.id===a)return r.push(s),r}else{if(o[2])return O.apply(r,t.getElementsByTagName(e)),r;if((a=o[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&(!d||!d.test(e))){if(m=g=v,x=t,w=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(g=t.getAttribute("id"))?m=g.replace(tt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",l=f.length;while(l--)f[l]=m+mt(f[l]);x=U.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return O.apply(r,x.querySelectorAll(w)),r}catch(T){}finally{g||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,r,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>i.cacheLength&&delete t[e.shift()],t[n]=r}return t}function at(e){return e[v]=!0,e}function ut(e){var t=p.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--)i.attrHandle[n[r]]=t}function ct(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return at(function(t){return t=+t,at(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}s=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},n=ot.support={},c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:b,r=t.defaultView;return t!==p&&9===t.nodeType&&t.documentElement?(p=t,f=t.documentElement,h=!s(t),r&&r.attachEvent&&r!==r.top&&r.attachEvent("onbeforeunload",function(){c()}),n.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ut(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),n.getById=ut(function(e){return f.appendChild(e).id=v,!t.getElementsByName||!t.getElementsByName(v).length}),n.getById?(i.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&h?t.getElementsByClassName(e):undefined},g=[],d=[],(n.qsa=Q.test(t.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ut(function(e){var n=t.createElement("input");n.setAttribute("type","hidden"),e.appendChild(n).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")})),(n.matchesSelector=Q.test(m=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ut(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",I)}),d=d.length&&RegExp(d.join("|")),g=g.length&&RegExp(g.join("|")),y=Q.test(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,r){if(e===r)return E=!0,0;var i=r.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(r);return i?1&i||!n.sortDetached&&r.compareDocumentPosition(e)===i?e===t||y(b,e)?-1:r===t||y(b,r)?1:l?P.call(l,e)-P.call(l,r):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],u=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:l?P.call(l,e)-P.call(l,n):0;if(o===s)return ct(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)u.unshift(r);while(a[i]===u[i])i++;return i?ct(a[i],u[i]):a[i]===b?-1:u[i]===b?1:0},t):p},ot.matches=function(e,t){return ot(e,null,null,t)},ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Y,"='$1']"),!(!n.matchesSelector||!h||g&&g.test(t)||d&&d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return ot(t,p,null,[e]).length>0},ot.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},ot.attr=function(e,t){(e.ownerDocument||e)!==p&&c(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!h):undefined;return o===undefined?n.attributes||!h?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null:o},ot.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ot.uniqueSort=function(e){var t,r=[],i=0,o=0;if(E=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),E){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return e},o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(nt,rt),e[3]=(e[4]||e[5]||"").replace(nt,rt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ot.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ot.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return J.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&V.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(nt,rt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){p=t;while(p=p[g])if(a?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[v]||(m[v]={}),l=c[e]||[],h=l[0]===w&&l[1],f=l[0]===w&&l[2],p=h&&m.childNodes[h];while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[w,h,f];break}}else if(x&&(l=(t[v]||(t[v]={}))[e])&&l[0]===w)f=l[1];else while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if((a?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(x&&((p[v]||(p[v]={}))[e]=[w,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);return r[v]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,o=r(e,t),s=o.length;while(s--)i=P.call(e,o[s]),e[i]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(z,"$1"));return r[v]?at(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){return G.test(e||"")||ot.error("unsupported lang: "+e),e=e.replace(nt,rt).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return et.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},i.pseudos.nth=i.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ft(t);function dt(){}dt.prototype=i.filters=i.pseudos,i.setFilters=new dt;function gt(e,t){var n,r,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=i.preFilter;while(a){(!n||(r=_.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=X.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(z," ")}),a=a.slice(n.length));for(s in i.filter)!(r=J[s].exec(a))||l[s]&&!(r=l[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ot.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var u,l,c,p=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[v]||(t[v]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,a)||r,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[v]&&(r=bt(r)),i&&!i[v]&&(i=bt(i,o)),at(function(o,s,a,u){var l,c,p,f=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,f,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(p=l[c])&&(y[h[c]]=!(m[h[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?P.call(o,p):f[c])>-1&&(o[l]=!(s[l]=p))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):O.apply(s,y)})}function wt(e){var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=yt(function(e){return e===t},a,!0),p=yt(function(e){return P.call(t,e)>-1},a,!0),f=[function(e,n,r){return!s&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>l;l++)if(n=i.relative[e[l].type])f=[yt(vt(f),n)];else{if(n=i.filter[e[l].type].apply(null,e[l].matches),n[v]){for(r=++l;o>r;r++)if(i.relative[e[r].type])break;return bt(l>1&&vt(f),l>1&&mt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&wt(e.slice(l,r)),o>r&&wt(e=e.slice(r)),o>r&&mt(e))}f.push(n)}return vt(f)}function Tt(e,t){var n=0,o=t.length>0,s=e.length>0,a=function(a,l,c,f,h){var d,g,m,y=[],v=0,x="0",b=a&&[],T=null!=h,C=u,k=a||s&&i.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(u=l!==p&&l,r=n);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,c)){f.push(d);break}T&&(w=N,r=++n)}o&&((d=!m&&d)&&v--,a&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,c);if(a){if(v>0)while(x--)b[x]||y[x]||(y[x]=q.call(f));y=xt(y)}O.apply(f,y),T&&!a&&y.length>0&&v+t.length>1&&ot.uniqueSort(f)}return T&&(w=N,u=C),b};return o?at(a):a}a=ot.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[v]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ot(e,t[r],n);return n}function kt(e,t,r,o){var s,u,l,c,p,f=gt(e);if(!o&&1===f.length){if(u=f[0]=f[0].slice(0),u.length>2&&"ID"===(l=u[0]).type&&n.getById&&9===t.nodeType&&h&&i.relative[u[1].type]){if(t=(i.find.ID(l.matches[0].replace(nt,rt),t)||[])[0],!t)return r;e=e.slice(u.shift().value.length)}s=J.needsContext.test(e)?0:u.length;while(s--){if(l=u[s],i.relative[c=l.type])break;if((p=i.find[c])&&(o=p(l.matches[0].replace(nt,rt),U.test(u[0].type)&&t.parentNode||t))){if(u.splice(s,1),e=o.length&&mt(u),!e)return O.apply(r,o),r;break}}}return a(e,f)(o,t,!h,r,U.test(e)),r}n.sortStable=v.split("").sort(S).join("")===v,n.detectDuplicates=E,c(),n.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(p.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||lt("type|href|height|width",function(e,t,n){return n?undefined:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||lt("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?undefined:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||lt(R,function(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}),x.find=ot,x.expr=ot.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ot.uniqueSort,x.text=ot.getText,x.isXMLDoc=ot.isXML,x.contains=ot.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(p){for(t=e.memory&&p,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(p[0],p[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!a||n&&!u||(t=t||[],t=[e,t.slice?t.slice():t],r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))x.extend(this.cache[i],t);else for(r in t)o[r]=t[r];return o},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){var r;return t===undefined||t&&"string"==typeof t&&n===undefined?(r=this.get(e,t),r!==undefined?r:this.get(e,x.camelCase(t))):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i,o=this.key(e),s=this.cache[o];if(t===undefined)this.cache[o]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):(i=x.camelCase(t),t in s?r=[t,i]:(r=i,r=r in s?[r]:r.match(w)||[])),n=r.length;while(n--)delete s[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.slice(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,p,f,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(f=x.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=x.event.special[d]||{},p=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,f.setup&&f.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),f.add&&(f.add.call(e,p),p.handler.guid||(p.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,p):h.push(p),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,p,f,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){p=x.event.special[h]||{},h=(r?p.delegateType:p.bindType)||h,f=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;while(o--)c=f[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));s&&!f.length&&(p.teardown&&p.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,p,f,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),f=x.event.special[d]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!x.isWindow(r)){for(l=f.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:f.bindType||d,p=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),p&&p.apply(a,n),p=c&&a[c],p&&x.acceptData(a)&&p.apply&&p.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,s=e,a=this.fixHooks[i];a||(this.fixHooks[i]=a=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new x.Event(s),t=r.length;while(t--)n=r[t],e[n]=s[n];return e.target||(e.target=o),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=/^(?:parents|prev(?:Until|All))/,Q=x.expr.match.needsContext,K={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(et(this,e||[],!0))},filter:function(e){return this.pushStack(et(this,e||[],!1))},is:function(e){return!!et(this,"string"==typeof e&&Q.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],s=Q.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function Z(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return Z(e,"nextSibling")},prev:function(e){return Z(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return e.contentDocument||x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(K[e]||x.unique(i),J.test(e)&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function et(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,nt=/<([\w:]+)/,rt=/<|&#?\w+;/,it=/<(?:script|style|link)/i,ot=/^(?:checkbox|radio)$/i,st=/checked\s*(?:[^=]|=\s*.checked.)/i,at=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ct={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ct.optgroup=ct.option,ct.tbody=ct.tfoot=ct.colgroup=ct.caption=ct.thead,ct.th=ct.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(mt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&dt(mt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(mt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!it.test(e)&&!ct[(nt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(tt,"<$1></$2>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(mt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=f.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,p=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&st.test(d))return this.each(function(r){var i=p.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(mt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,mt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,ht),l=0;s>l;l++)a=o[l],at.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(lt,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=mt(a),o=mt(e),r=0,i=o.length;i>r;r++)yt(o[r],s[r]);if(t)if(n)for(o=o||mt(e),s=s||mt(a),r=0,i=o.length;i>r;r++)gt(o[r],s[r]);else gt(e,a);return s=mt(a,"script"),s.length>0&&dt(s,!u&&mt(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,p=e.length,f=t.createDocumentFragment(),h=[];for(;p>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(rt.test(i)){o=o||f.appendChild(t.createElement("div")),s=(nt.exec(i)||["",""])[1].toLowerCase(),a=ct[s]||ct._default,o.innerHTML=a[1]+i.replace(tt,"<$1></$2>")+a[2],l=a[0];while(l--)o=o.lastChild;x.merge(h,o.childNodes),o=f.firstChild,o.textContent=""}else h.push(t.createTextNode(i));f.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=mt(f.appendChild(i),"script"),u&&dt(o),n)){l=0;while(i=o[l++])at.test(i.type||"")&&n.push(i)}return f},cleanData:function(e){var t,n,r,i,o,s,a=x.event.special,u=0;for(;(n=e[u])!==undefined;u++){if(F.accepts(n)&&(o=n[q.expando],o&&(t=q.cache[o]))){if(r=Object.keys(t.events||{}),r.length)for(s=0;(i=r[s])!==undefined;s++)a[i]?x.event.remove(n,i):x.removeEvent(n,i,t.handle);q.cache[o]&&delete q.cache[o]}delete L.cache[n[L.expando]]}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}});function pt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ht(e){var t=ut.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function dt(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function gt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=q.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function mt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function yt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ot.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var vt,xt,bt=/^(none|table(?!-c[ea]).+)/,wt=/^margin/,Tt=RegExp("^("+b+")(.*)$","i"),Ct=RegExp("^("+b+")(?!px)[a-z%]+$","i"),kt=RegExp("^([+-])=("+b+")","i"),Nt={BODY:"block"},Et={position:"absolute",visibility:"hidden",display:"block"},St={letterSpacing:0,fontWeight:400},jt=["Top","Right","Bottom","Left"],Dt=["Webkit","O","Moz","ms"];function At(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Dt.length;while(i--)if(t=Dt[i]+n,t in e)return t;return r}function Lt(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function qt(t){return e.getComputedStyle(t,null)}function Ht(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&Lt(r)&&(o[s]=q.access(r,"olddisplay",Rt(r.nodeName)))):o[s]||(i=Lt(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=qt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return Ht(this,!0)},hide:function(){return Ht(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Lt(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=vt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=At(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=kt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=At(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=vt(e,t,r)),"normal"===i&&t in St&&(i=St[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),vt=function(e,t,n){var r,i,o,s=n||qt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Ct.test(a)&&wt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ot(e,t,n){var r=Tt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ft(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+jt[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+jt[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+jt[o]+"Width",!0,i))):(s+=x.css(e,"padding"+jt[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+jt[o]+"Width",!0,i)));return s}function Pt(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=qt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=vt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Ct.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ft(e,t,n||(s?"border":"content"),r,o)+"px"}function Rt(e){var t=o,n=Nt[e];return n||(n=Mt(e,t),"none"!==n&&n||(xt=(xt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(xt[0].contentWindow||xt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=Mt(e,t),xt.detach()),Nt[e]=n),n}function Mt(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,t){x.cssHooks[t]={get:function(e,n,r){return n?0===e.offsetWidth&&bt.test(x.css(e,"display"))?x.swap(e,Et,function(){return Pt(e,t,r)}):Pt(e,t,r):undefined},set:function(e,n,r){var i=r&&qt(e);return Ot(e,n,r?Ft(e,t,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,t){return t?x.swap(e,{display:"inline-block"},vt,[e,"marginRight"]):undefined}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,t){x.cssHooks[t]={get:function(e,n){return n?(n=vt(e,t),Ct.test(n)?x(e).position()[t]+"px":n):undefined}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+jt[r]+t]=o[r]||o[r-2]||o[0];return i}},wt.test(e)||(x.cssHooks[e+t].set=Ot)});var Wt=/%20/g,$t=/\[\]$/,Bt=/\r?\n/g,It=/^(?:submit|button|image|reset|file)$/i,zt=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&zt.test(this.nodeName)&&!It.test(e)&&(this.checked||!ot.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(Bt,"\r\n")}}):{name:t.name,value:n.replace(Bt,"\r\n")}}).get()}}),x.param=function(e,t){var n,r=[],i=function(e,t){t=x.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(t===undefined&&(t=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){i(this.name,this.value)});else for(n in e)_t(n,e[n],t,i);return r.join("&").replace(Wt,"+")};function _t(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||$t.test(e)?r(e,i):_t(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)_t(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var Xt,Ut,Yt=x.now(),Vt=/\?/,Gt=/#.*$/,Jt=/([?&])_=[^&]*/,Qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Kt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Zt=/^(?:GET|HEAD)$/,en=/^\/\//,tn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,nn=x.fn.load,rn={},on={},sn="*/".concat("*");try{Ut=i.href}catch(an){Ut=o.createElement("a"),Ut.href="",Ut=Ut.href}Xt=tn.exec(Ut.toLowerCase())||[];function un(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function ln(e,t,n,r){var i={},o=e===on;function s(a){var u;return i[a]=!0,x.each(e[a]||[],function(e,a){var l=a(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):undefined:(t.dataTypes.unshift(l),s(l),!1)}),u}return s(t.dataTypes[0])||!i["*"]&&s("*")}function cn(e,t){var n,r,i=x.ajaxSettings.flatOptions||{};for(n in t)t[n]!==undefined&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,t,n){if("string"!=typeof e&&nn)return nn.apply(this,arguments);var r,i,o,s=this,a=e.indexOf(" ");return a>=0&&(r=e.slice(a),e=e.slice(0,a)),x.isFunction(t)?(n=t,t=undefined):t&&"object"==typeof t&&(i="POST"),s.length>0&&x.ajax({url:e,type:i,dataType:"html",data:t}).done(function(e){o=arguments,s.html(r?x("<div>").append(x.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){s.each(n,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ut,type:"GET",isLocal:Kt.test(Xt[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":sn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?cn(cn(e,x.ajaxSettings),t):cn(x.ajaxSettings,e)},ajaxPrefilter:un(rn),ajaxTransport:un(on),ajax:function(e,t){"object"==typeof e&&(t=e,e=undefined),t=t||{};var n,r,i,o,s,a,u,l,c=x.ajaxSetup({},t),p=c.context||c,f=c.context&&(p.nodeType||p.jquery)?x(p):x.event,h=x.Deferred(),d=x.Callbacks("once memory"),g=c.statusCode||{},m={},y={},v=0,b="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(2===v){if(!o){o={};while(t=Qt.exec(i))o[t[1].toLowerCase()]=t[2]}t=o[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===v?i:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return v||(e=y[n]=y[n]||e,m[e]=t),this},overrideMimeType:function(e){return v||(c.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>v)for(t in e)g[t]=[g[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||b;return n&&n.abort(t),k(0,t),this}};if(h.promise(T).complete=d.add,T.success=T.done,T.error=T.fail,c.url=((e||c.url||Ut)+"").replace(Gt,"").replace(en,Xt[1]+"//"),c.type=t.method||t.type||c.method||c.type,c.dataTypes=x.trim(c.dataType||"*").toLowerCase().match(w)||[""],null==c.crossDomain&&(a=tn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===Xt[1]&&a[2]===Xt[2]&&(a[3]||("http:"===a[1]?"80":"443"))===(Xt[3]||("http:"===Xt[1]?"80":"443")))),c.data&&c.processData&&"string"!=typeof c.data&&(c.data=x.param(c.data,c.traditional)),ln(rn,c,t,T),2===v)return T;u=c.global,u&&0===x.active++&&x.event.trigger("ajaxStart"),c.type=c.type.toUpperCase(),c.hasContent=!Zt.test(c.type),r=c.url,c.hasContent||(c.data&&(r=c.url+=(Vt.test(r)?"&":"?")+c.data,delete c.data),c.cache===!1&&(c.url=Jt.test(r)?r.replace(Jt,"$1_="+Yt++):r+(Vt.test(r)?"&":"?")+"_="+Yt++)),c.ifModified&&(x.lastModified[r]&&T.setRequestHeader("If-Modified-Since",x.lastModified[r]),x.etag[r]&&T.setRequestHeader("If-None-Match",x.etag[r])),(c.data&&c.hasContent&&c.contentType!==!1||t.contentType)&&T.setRequestHeader("Content-Type",c.contentType),T.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+("*"!==c.dataTypes[0]?", "+sn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)T.setRequestHeader(l,c.headers[l]);if(c.beforeSend&&(c.beforeSend.call(p,T,c)===!1||2===v))return T.abort();b="abort";for(l in{success:1,error:1,complete:1})T[l](c[l]);if(n=ln(on,c,t,T)){T.readyState=1,u&&f.trigger("ajaxSend",[T,c]),c.async&&c.timeout>0&&(s=setTimeout(function(){T.abort("timeout")},c.timeout));try{v=1,n.send(m,k)}catch(C){if(!(2>v))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,t,o,a){var l,m,y,b,w,C=t;2!==v&&(v=2,s&&clearTimeout(s),n=undefined,i=a||"",T.readyState=e>0?4:0,l=e>=200&&300>e||304===e,o&&(b=pn(c,T,o)),b=fn(c,b,T,l),l?(c.ifModified&&(w=T.getResponseHeader("Last-Modified"),w&&(x.lastModified[r]=w),w=T.getResponseHeader("etag"),w&&(x.etag[r]=w)),204===e||"HEAD"===c.type?C="nocontent":304===e?C="notmodified":(C=b.state,m=b.data,y=b.error,l=!y)):(y=C,(e||!C)&&(C="error",0>e&&(e=0))),T.status=e,T.statusText=(t||C)+"",l?h.resolveWith(p,[m,C,T]):h.rejectWith(p,[T,C,y]),T.statusCode(g),g=undefined,u&&f.trigger(l?"ajaxSuccess":"ajaxError",[T,c,l?m:y]),d.fireWith(p,[T,C]),u&&(f.trigger("ajaxComplete",[T,c]),--x.active||x.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,t){return x.get(e,undefined,t,"script")}}),x.each(["get","post"],function(e,t){x[t]=function(e,n,r,i){return x.isFunction(n)&&(i=i||r,r=n,n=undefined),x.ajax({url:e,type:t,dataType:i,data:n,success:r})}});function pn(e,t,n){var r,i,o,s,a=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),r===undefined&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}s||(s=i)}o=o||s}return o?(o!==u[0]&&u.unshift(o),n[o]):undefined}function fn(e,t,n,r){var i,o,s,a,u,l={},c=e.dataTypes.slice();if(c[1])for(s in e.converters)l[s.toLowerCase()]=e.converters[s];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(s=l[u+" "+o]||l["* "+o],!s)for(i in l)if(a=i.split(" "),a[1]===o&&(s=l[u+" "+a[0]]||l["* "+a[0]])){s===!0?s=l[i]:l[i]!==!0&&(o=a[0],c.unshift(a[1]));break}if(s!==!0)if(s&&e["throws"])t=s(t);else try{t=s(t)}catch(p){return{state:"parsererror",error:s?p:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===undefined&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),x.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=x("<script>").prop({async:!0,charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&i("error"===e.type?404:200,e.type)}),o.head.appendChild(t[0])},abort:function(){n&&n()}}}});var hn=[],dn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=hn.pop()||x.expando+"_"+Yt++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,s,a=t.jsonp!==!1&&(dn.test(t.url)?"url":"string"==typeof t.data&&!(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&dn.test(t.data)&&"data");return a||"jsonp"===t.dataTypes[0]?(i=t.jsonpCallback=x.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,a?t[a]=t[a].replace(dn,"$1"+i):t.jsonp!==!1&&(t.url+=(Vt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return s||x.error(i+" was not called"),s[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){s=arguments},r.always(function(){e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,hn.push(i)),s&&x.isFunction(o)&&o(s[0]),s=o=undefined}),"script"):undefined}),x.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(e){}};var gn=x.ajaxSettings.xhr(),mn={0:200,1223:204},yn=0,vn={};e.ActiveXObject&&x(e).on("unload",function(){for(var e in vn)vn[e]();vn=undefined}),x.support.cors=!!gn&&"withCredentials"in gn,x.support.ajax=gn=!!gn,x.ajaxTransport(function(e){var t;return x.support.cors||gn&&!e.crossDomain?{send:function(n,r){var i,o,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(i in e.xhrFields)s[i]=e.xhrFields[i];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(i in n)s.setRequestHeader(i,n[i]);t=function(e){return function(){t&&(delete vn[o],t=s.onload=s.onerror=null,"abort"===e?s.abort():"error"===e?r(s.status||404,s.statusText):r(mn[s.status]||s.status,s.statusText,"string"==typeof s.responseText?{text:s.responseText}:undefined,s.getAllResponseHeaders()))}},s.onload=t(),s.onerror=t("error"),t=vn[o=yn++]=t("abort"),s.send(e.hasContent&&e.data||null)},abort:function(){t&&t()}}:undefined});var xn,bn,wn=/^(?:toggle|show|hide)$/,Tn=RegExp("^(?:([+-])=|)("+b+")([a-z%]*)$","i"),Cn=/queueHooks$/,kn=[An],Nn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Tn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),s=(x.cssNumber[e]||"px"!==o&&+r)&&Tn.exec(x.css(n.elem,e)),a=1,u=20;if(s&&s[3]!==o){o=o||s[3],i=i||[],s=+r||1;do a=a||".5",s/=a,x.style(n.elem,e,s+o);while(a!==(a=n.cur()/r)&&1!==a&&--u)}return i&&(s=n.start=+s||+r||0,n.unit=o,n.end=i[1]?s+(i[1]+1)*i[2]:+i[2]),n}]};function En(){return setTimeout(function(){xn=undefined}),xn=x.now()}function Sn(e,t,n){var r,i=(Nn[t]||[]).concat(Nn["*"]),o=0,s=i.length;for(;s>o;o++)if(r=i[o].call(n,t,e))return r}function jn(e,t,n){var r,i,o=0,s=kn.length,a=x.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=xn||En(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,s=0,u=l.tweens.length;for(;u>s;s++)l.tweens[s].run(o);return a.notifyWith(e,[l,o,n]),1>o&&u?n:(a.resolveWith(e,[l]),!1)},l=a.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:xn||En(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?a.resolveWith(e,[l,t]):a.rejectWith(e,[l,t]),this}}),c=l.props;for(Dn(c,l.opts.specialEasing);s>o;o++)if(r=kn[o].call(l,e,c,l.opts))return r;return x.map(c,Sn,l),x.isFunction(l.opts.start)&&l.opts.start.call(e,l),x.fx.timer(x.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function Dn(e,t){var n,r,i,o,s;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),s=x.cssHooks[r],s&&"expand"in s){o=s.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(jn,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Nn[n]=Nn[n]||[],Nn[n].unshift(t)},prefilter:function(e,t){t?kn.unshift(e):kn.push(e)}});function An(e,t,n){var r,i,o,s,a,u,l=this,c={},p=e.style,f=e.nodeType&&Lt(e),h=q.get(e,"fxshow");n.queue||(a=x._queueHooks(e,"fx"),null==a.unqueued&&(a.unqueued=0,u=a.empty.fire,a.empty.fire=function(){a.unqueued||u()}),a.unqueued++,l.always(function(){l.always(function(){a.unqueued--,x.queue(e,"fx").length||a.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(p.display="inline-block")),n.overflow&&(p.overflow="hidden",l.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],wn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show")){if("show"!==i||!h||h[r]===undefined)continue;f=!0}c[r]=h&&h[r]||x.style(e,r)}if(!x.isEmptyObject(c)){h?"hidden"in h&&(f=h.hidden):h=q.access(e,"fxshow",{}),o&&(h.hidden=!f),f?x(e).show():l.done(function(){x(e).hide()}),l.done(function(){var t;q.remove(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)s=Sn(f?h[r]:0,r,l),r in h||(h[r]=s.start,f&&(s.end=s.start,s.start="width"===r||"height"===r?1:0))}}function Ln(e,t,n,r,i){return new Ln.prototype.init(e,t,n,r,i)}x.Tween=Ln,Ln.prototype={constructor:Ln,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=Ln.propHooks[this.prop];return e&&e.get?e.get(this):Ln.propHooks._default.get(this)},run:function(e){var t,n=Ln.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ln.propHooks._default.set(this),this}},Ln.prototype.init.prototype=Ln.prototype,Ln.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Ln.propHooks.scrollTop=Ln.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(qn(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Lt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),s=function(){var t=jn(this,x.extend({},e),o);(i||q.get(this,"finish"))&&t.stop(!0)};return s.finish=s,i||o.queue===!1?this.each(s):this.queue(o.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=undefined),t&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=x.timers,s=q.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&Cn.test(i)&&r(s[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));(t||!n)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=q.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,s=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;s>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function qn(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=jt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:qn("show"),slideUp:qn("hide"),slideToggle:qn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=Ln.prototype.init,x.fx.tick=function(){var e,t=x.timers,n=0;for(xn=x.now();t.length>n;n++)e=t[n],e()||t[n]!==e||t.splice(n--,1);t.length||x.fx.stop(),xn=undefined},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){bn||(bn=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(bn),bn=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===undefined?this:this.each(function(t){x.offset.setOffset(this,e,t)});var t,n,i=this[0],o={top:0,left:0},s=i&&i.ownerDocument;if(s)return t=s.documentElement,x.contains(t,i)?(typeof i.getBoundingClientRect!==r&&(o=i.getBoundingClientRect()),n=Hn(s),{top:o.top+n.pageYOffset-t.clientTop,left:o.left+n.pageXOffset-t.clientLeft}):o},x.offset={setOffset:function(e,t,n){var r,i,o,s,a,u,l,c=x.css(e,"position"),p=x(e),f={};"static"===c&&(e.style.position="relative"),a=p.offset(),o=x.css(e,"top"),u=x.css(e,"left"),l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1,l?(r=p.position(),s=r.top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),x.isFunction(t)&&(t=t.call(e,n,a)),null!=t.top&&(f.top=t.top-a.top+s),null!=t.left&&(f.left=t.left-a.left+i),"using"in t?t.using.call(e,f):p.css(f)}},x.fn.extend({position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return"fixed"===x.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(r=e.offset()),r.top+=x.css(e[0],"borderTopWidth",!0),r.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-r.top-x.css(n,"marginTop",!0),left:t.left-r.left-x.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,n){var r="pageYOffset"===n;x.fn[t]=function(i){return x.access(this,function(t,i,o){var s=Hn(t);return o===undefined?s?s[n]:t[i]:(s?s.scrollTo(r?e.pageXOffset:o,r?o:e.pageYOffset):t[i]=o,undefined)},t,i,arguments.length,null)}});function Hn(e){return x.isWindow(e)?e:9===e.nodeType&&e.defaultView}x.each({Height:"height",Width:"width"},function(e,t){x.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){x.fn[r]=function(r,i){var o=arguments.length&&(n||"boolean"!=typeof r),s=n||(r===!0||i===!0?"margin":"border");return x.access(this,function(t,n,r){var i;return x.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):r===undefined?x.css(t,n,s):x.style(t,n,r,s)},t,o?r:undefined,o,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}),"object"==typeof e&&"object"==typeof e.document&&(e.jQuery=e.$=x)})(window); \ No newline at end of file
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/jquery.cookie.js b/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/jquery.cookie.js
deleted file mode 100755
index 92719000..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/jquery.cookie.js
+++ /dev/null
@@ -1,117 +0,0 @@
1/*!
2 * jQuery Cookie Plugin v1.4.0
3 * https://github.com/carhartl/jquery-cookie
4 *
5 * Copyright 2013 Klaus Hartl
6 * Released under the MIT license
7 */
8(function (factory) {
9 if (typeof define === 'function' && define.amd) {
10 // AMD. Register as anonymous module.
11 define(['jquery'], factory);
12 } else {
13 // Browser globals.
14 factory(jQuery);
15 }
16}(function ($) {
17
18 var pluses = /\+/g;
19
20 function encode(s) {
21 return config.raw ? s : encodeURIComponent(s);
22 }
23
24 function decode(s) {
25 return config.raw ? s : decodeURIComponent(s);
26 }
27
28 function stringifyCookieValue(value) {
29 return encode(config.json ? JSON.stringify(value) : String(value));
30 }
31
32 function parseCookieValue(s) {
33 if (s.indexOf('"') === 0) {
34 // This is a quoted cookie as according to RFC2068, unescape...
35 s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
36 }
37
38 try {
39 // Replace server-side written pluses with spaces.
40 // If we can't decode the cookie, ignore it, it's unusable.
41 s = decodeURIComponent(s.replace(pluses, ' '));
42 } catch(e) {
43 return;
44 }
45
46 try {
47 // If we can't parse the cookie, ignore it, it's unusable.
48 return config.json ? JSON.parse(s) : s;
49 } catch(e) {}
50 }
51
52 function read(s, converter) {
53 var value = config.raw ? s : parseCookieValue(s);
54 return $.isFunction(converter) ? converter(value) : value;
55 }
56
57 var config = $.cookie = function (key, value, options) {
58
59 // Write
60 if (value !== undefined && !$.isFunction(value)) {
61 options = $.extend({}, config.defaults, options);
62
63 if (typeof options.expires === 'number') {
64 var days = options.expires, t = options.expires = new Date();
65 t.setDate(t.getDate() + days);
66 }
67
68 return (document.cookie = [
69 encode(key), '=', stringifyCookieValue(value),
70 options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
71 options.path ? '; path=' + options.path : '',
72 options.domain ? '; domain=' + options.domain : '',
73 options.secure ? '; secure' : ''
74 ].join(''));
75 }
76
77 // Read
78
79 var result = key ? undefined : {};
80
81 // To prevent the for loop in the first place assign an empty array
82 // in case there are no cookies at all. Also prevents odd result when
83 // calling $.cookie().
84 var cookies = document.cookie ? document.cookie.split('; ') : [];
85
86 for (var i = 0, l = cookies.length; i < l; i++) {
87 var parts = cookies[i].split('=');
88 var name = decode(parts.shift());
89 var cookie = parts.join('=');
90
91 if (key && key === name) {
92 // If second argument (value) is a function it's a converter...
93 result = read(cookie, value);
94 break;
95 }
96
97 // Prevent storing a cookie that we couldn't decode.
98 if (!key && (cookie = read(cookie)) !== undefined) {
99 result[name] = cookie;
100 }
101 }
102
103 return result;
104 };
105
106 config.defaults = {};
107
108 $.removeCookie = function (key, options) {
109 if ($.cookie(key) !== undefined) {
110 // Must not alter options, thus extending a fresh object...
111 $.cookie(key, '', $.extend({}, options, { expires: -1 }));
112 return true;
113 }
114 return false;
115 };
116
117}));
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/restoreScroll.js b/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/restoreScroll.js
deleted file mode 100644
index 331c9e19..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/_global/js/restoreScroll.js
+++ /dev/null
@@ -1,25 +0,0 @@
1function supportsLocalStorage() {
2 try {
3 return 'localStorage' in window && window['localStorage'] !== null;
4 } catch (e) {
5 return false;
6 }
7}
8
9function savePercent(id, percent) {
10 if (!supportsLocalStorage()) { return false; }
11 localStorage["poche.article." + id + ".percent"] = percent;
12 return true;
13}
14
15function retrievePercent(id) {
16 if (!supportsLocalStorage()) { return false; }
17
18 var bheight = $(document).height();
19 var percent = localStorage["poche.article." + id + ".percent"];
20 var scroll = bheight * percent;
21
22 $('html,body').animate({scrollTop: scroll}, 'fast');
23
24 return true;
25} \ No newline at end of file
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/font.css b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/font.css
deleted file mode 100755
index 7c02a16f..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/font.css
+++ /dev/null
@@ -1,6 +0,0 @@
1@font-face {
2 font-family: 'PT Sans';
3 font-style: normal;
4 font-weight: 700;
5 src: local('PT Sans Bold'), local('PTSans-Bold'), url(../fonts/ptsans.woff) format('woff');
6}
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/messages.css b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/messages.css
deleted file mode 100755
index 42da70b3..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/messages.css
+++ /dev/null
@@ -1,19 +0,0 @@
1.messages.error.install {
2 border: 1px solid #c42608;
3 color: #c00 !important;
4 background: #fff0ef;
5 text-align: left;
6}
7
8.messages.notice.install {
9 border: 1px solid #ebcd41;
10 color: #000;
11 background: #fffcd3;
12 text-align: left;
13}
14
15.messages.success.install {
16 border: 1px solid #6dc70c;
17 background: #e0fbcc !important;
18 text-align: left;
19} \ No newline at end of file
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/print.css b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/print.css
deleted file mode 100755
index 9dd6d295..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/print.css
+++ /dev/null
@@ -1,62 +0,0 @@
1/* ### Layout ### */
2
3body {
4 font-family: Serif;
5 background-color: #fff;
6}
7
8@page {
9 margin: 1cm;
10}
11
12img {
13 max-width: 100% !important;
14}
15
16/* ### Content ### */
17
18/* Hide useless blocks */
19body > header,
20#article_toolbar,
21#links,
22#sort,
23body > footer,
24.top_link,
25div.tools,
26header div,
27.messages,
28.entrie + .results {
29 display: none !important;
30}
31
32article {
33 border: none !important;
34}
35
36/* Add URL after links */
37.vieworiginal a:after {
38 content: " (" attr(href) ")";
39}
40
41/* Add explanation after abbr */
42abbr[title]:after {
43 content: " (" attr(title) ")";
44}
45
46/* Change border on current pager item */
47.pagination span.current {
48 border-style: dashed;
49}
50
51#main {
52 width: 100%;
53 padding: 0;
54 margin: 0;
55 margin-left: 0;
56 padding-right: 0;
57 padding-bottom: 0;
58}
59
60#article {
61 width: 100%;
62}
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.eot b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.eot
deleted file mode 100644
index 057c7bc4..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.eot
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.svg b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.svg
deleted file mode 100644
index f4086b53..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.svg
+++ /dev/null
@@ -1,43 +0,0 @@
1<?xml version="1.0" standalone="no"?>
2<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3<svg xmlns="http://www.w3.org/2000/svg">
4<metadata>Generated by IcoMoon</metadata>
5<defs>
6<font id="icomoon" horiz-adv-x="1024">
7<font-face units-per-em="1024" ascent="960" descent="-64" />
8<missing-glyph horiz-adv-x="1024" />
9<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
10<glyph unicode="&#xe600;" d="M512 778.666c-188.544 0-341.334-152.832-341.334-341.332s152.788-341.334 341.334-341.334 341.334 152.832 341.334 341.334-152.788 341.332-341.334 341.332zM670.164 339.498c16.682-16.682 16.682-43.648 0-60.332-8.32-8.32-19.244-12.5-30.164-12.5s-21.846 4.182-30.164 12.5l-97.836 97.836-97.834-97.836c-8.32-8.32-19.242-12.5-30.166-12.5s-21.846 4.182-30.166 12.5c-16.682 16.682-16.682 43.648 0 60.332l97.834 97.836-97.834 97.834c-16.682 16.682-16.682 43.648 0 60.332s43.648 16.682 60.332 0l97.834-97.834 97.836 97.834c16.682 16.682 43.648 16.682 60.332 0s16.682-43.648 0-60.332l-97.836-97.834 97.836-97.836z" />
11<glyph unicode="&#xe601;" d="M490.666 146.218c-74.070 0-143.7 28.842-196.096 81.196-52.352 52.394-81.236 122.028-81.236 196.14s28.884 143.744 81.236 196.14c16.682 16.682 43.648 16.682 60.332 0s16.682-43.648 0-60.332c-36.266-36.308-56.236-84.522-56.236-135.808s19.968-99.542 56.236-135.808c36.266-36.268 84.438-56.192 135.764-56.192s99.498 19.968 135.766 56.192c36.308 36.268 56.236 84.48 56.236 135.808s-19.968 99.542-56.236 135.808c-16.682 16.682-16.682 43.648 0 60.332s43.648 16.682 60.332 0c52.352-52.438 81.236-122.070 81.236-196.14s-28.884-143.744-81.236-196.14c-52.394-52.352-122.028-81.194-196.096-81.194zM490.666 469.334c-23.594 0-42.666 19.116-42.666 42.666v213.334c0 23.552 19.072 42.666 42.668 42.666s42.668-19.116 42.668-42.666v-213.334c0-23.552-19.072-42.666-42.668-42.666z" />
12<glyph unicode="&#xe602;" d="M512 803.328l-273.664-273.664c-33.324-33.322-33.324-87.34 0-120.662s87.338-33.322 120.662 0l67.668 67.67v-308.992c0-47.104 38.188-85.332 85.334-85.332 47.104 0 85.332 38.23 85.332 85.332v308.992l67.668-67.67c16.682-16.682 38.486-25.004 60.332-25.004s43.648 8.32 60.332 25.004c33.322 33.322 33.322 87.34 0 120.662l-273.664 273.664z" />
13<glyph unicode="&#xe603;" d="M887.757 752.282c0 58.88-88.678 65.382-88.678 65.382l-208.333 13.107c0 0-4.454 56.678-46.541 76.39-42.086 19.61-88.371 13.619-121.651 13.312-33.28-0.358-41.114-42.752-41.114-82.79 0-39.987 0.717-86.221 0.717-115.2 0-52.122-22.886-74.189-80.179-74.189h-118.118c-33.024 2.099-58.726-3.277-58.726-30.003 0-26.778 38.861-254.618 92.211-307.2 30.976-30.515 220.416-51.917 260.301-51.917s26.573 117.811 37.683 117.811c11.11 0 23.245-66.509 86.118-82.074 62.771-15.718 146.637-12.8 151.091-57.498 5.786-58.982 11.11-135.27-27.699-140.698l-87.859-3.482c-60.211 4.301-44.032 70.093-17.459 70.093s39.885 0.973 39.885 0.973l3.328 71.987c0 0-137.882 16.282-143.718-76.698-5.376-84.992 9.216-125.082 19.917-133.786 10.701-8.806 29.235-25.805 198.093-25.805 237.926 0 150.733 693.402 150.733 752.282zM790.528 444.416c-9.318-10.035-43.11 16.384-75.366 16.384-32.307 0-67.123-17.101-75.315-5.786-8.192 11.213 7.475 101.888 68.301 101.888s91.802-102.605 82.381-112.486zM297.165 759.501c0 11.725 2.97 152.781 2.97 152.781l-179.456-176.128c0 0 124.006 0 148.378 0 24.371 0.051 28.109 11.725 28.109 23.347z" />
14<glyph unicode="&#xe604;" d="M1024 369.556l-512 397.426-512-397.428v162.038l512 397.426 512-397.428zM896 384v-384h-256v256h-256v-256h-256v384l384 288z" />
15<glyph unicode="&#xe605;" d="M621.254 82.746l320 320c24.994 24.992 24.994 65.516 0 90.51l-320 320c-24.994 24.992-65.516 24.992-90.51 0-24.994-24.994-24.994-65.516 0-90.51l210.746-210.746h-613.49c-35.346 0-64-28.654-64-64s28.654-64 64-64h613.49l-210.746-210.746c-12.496-12.496-18.744-28.876-18.744-45.254s6.248-32.758 18.744-45.254c24.994-24.994 65.516-24.994 90.51 0z" />
16<glyph unicode="&#xe606;" d="M402.746 82.746l-320 320c-24.994 24.992-24.994 65.516 0 90.51l320 320c24.994 24.992 65.516 24.992 90.51 0 24.994-24.994 24.994-65.516 0-90.51l-210.746-210.746h613.49c35.346 0 64-28.654 64-64s-28.654-64-64-64h-613.49l210.746-210.746c12.496-12.496 18.744-28.876 18.744-45.254s-6.248-32.758-18.744-45.254c-24.994-24.994-65.516-24.994-90.51 0z" />
17<glyph unicode="&#xe607;" d="M262.14 960c-113.728-206.032-132.89-520.304 313.86-509.824v253.824l384-384-384-384v248.372c-534.96-13.942-594.572 472.214-313.86 775.628z" />
18<glyph unicode="&#xe800;" d="M0 51.712v526.336q0 183.296 87.040 284.672t265.216 101.376h561.152q-5.12-5.12-53.248-54.272t-102.4-103.424-111.616-111.616-97.28-95.232-43.008-37.888q-15.36 0-15.36 16.384v159.744h-49.152q-60.416 0-96.256-6.144t-64.512-26.624-39.936-58.368-12.288-98.304v-268.288zM68.608-68.096q5.12 5.12 54.272 54.272t102.4 103.424 111.616 112.64 97.28 95.232 41.984 36.864q15.36 0 15.36-16.384v-159.744h49.152q118.784 0 165.888 36.864t46.080 152.576v268.288l229.376 228.352v-526.336q0-183.296-86.016-284.672t-266.24-101.376h-561.152z" horiz-adv-x="982" />
19<glyph unicode="&#xe801;" d="M301.056 208.384q14.336 14.336 34.816 14.336t36.864-14.336q32.768-34.816 0-71.68l-43.008-40.96q-57.344-57.344-135.168-57.344-79.872 0-137.216 57.344t-57.344 135.168q0 79.872 57.344 137.216l151.552 151.552q71.68 69.632 147.456 78.848t131.072-44.032q16.384-16.384 16.384-36.864t-16.384-36.864q-36.864-32.768-71.68 0-51.2 49.152-135.168-34.816l-151.552-149.504q-26.624-26.624-26.624-65.536t26.624-63.488q26.624-26.624 64.512-26.624t64.512 26.624zM761.856 796.16q57.344-57.344 57.344-135.168 0-79.872-57.344-137.216l-161.792-161.792q-75.776-73.728-153.6-73.728-63.488 0-114.688 51.2-14.336 14.336-14.336 34.816t14.336 36.864q14.336 14.336 35.84 14.336t35.84-14.336q51.2-49.152 124.928 24.576l161.792 159.744q28.672 28.672 28.672 65.536 0 38.912-28.672 63.488-24.576 26.624-57.344 31.744t-61.44-21.504l-51.2-51.2q-16.384-14.336-36.864-14.336t-34.816 14.336q-34.816 34.816 0 71.68l51.2 51.2q55.296 55.296 130.048 52.224t132.096-62.464z" horiz-adv-x="820" />
20<glyph unicode="&#xe802;" d="M877.568 192v-72.704q0-15.36-10.24-25.6t-26.624-11.264h-803.84q-15.36 0-25.6 11.264t-11.264 25.6v72.704q0 15.36 11.264 25.6t25.6 11.264h803.84q15.36 0 26.624-11.264t10.24-25.6zM877.568 484.864v-73.728q0-14.336-10.24-25.6t-26.624-10.24h-803.84q-15.36 0-25.6 10.24t-11.264 25.6v73.728q0 14.336 11.264 25.6t25.6 10.24h803.84q15.36 0 26.624-10.24t10.24-25.6zM877.568 776.704v-72.704q0-15.36-10.24-25.6t-26.624-11.264h-803.84q-15.36 0-25.6 11.264t-11.264 25.6v72.704q0 15.36 11.264 26.624t25.6 10.24h803.84q15.36 0 26.624-10.24t10.24-26.624z" horiz-adv-x="878" />
21<glyph unicode="&#xe803;" d="M471.040 919.040q194.56 0 332.8-138.24t138.24-332.8-138.24-332.8-332.8-138.24-332.8 138.24-138.24 332.8 138.24 332.8 332.8 138.24zM471.040 79.36q153.6 0 261.12 108.544t107.52 260.096q0 153.6-107.52 261.12t-261.12 107.52q-151.552 0-260.096-107.52t-108.544-261.12q0-151.552 108.544-260.096t260.096-108.544zM507.904 714.24v-249.856l153.6-153.6-51.2-51.2-174.080 174.080v280.576h71.68z" horiz-adv-x="942" />
22<glyph unicode="&#xe804;" d="M254.976 89.6q-34.816 0-57.344 28.672l-184.32 241.664q-16.384 24.576-12.288 53.248t26.624 47.104 52.224 14.336 48.128-28.672l120.832-157.696 303.104 485.376q16.384 24.576 44.032 30.72t54.272-8.192q24.576-16.384 30.72-44.032t-8.192-54.272l-358.4-573.44q-20.48-32.768-57.344-32.768z" horiz-adv-x="684" />
23<glyph unicode="&#xe805;" d="M450.56 898.56l122.88-344.064h327.68l-268.288-200.704 96.256-356.352-278.528 212.992-278.528-212.992 96.256 356.352-268.288 200.704h327.68z" horiz-adv-x="902" />
24<glyph unicode="&#xe806;" d="M921.6 99.84q-88.064 155.648-212.992 201.728t-337.92 46.080v-223.232l-370.688 342.016 370.688 329.728v-196.608q92.16 0 172.032-27.648t134.144-71.68 98.304-97.28 70.656-106.496 45.056-97.28 24.576-70.656z" horiz-adv-x="922" />
25<glyph unicode="&#xe807;" d="M942.080 740.864q-36.864-55.296-96.256-100.352v-24.576q0-133.12-61.44-256t-190.464-207.872-296.96-84.992q-163.84 0-296.96 86.016 14.336-2.048 47.104-2.048 135.168 0 239.616 81.92-63.488 2.048-112.64 38.912t-67.584 96.256q10.24-4.096 34.816-4.096 26.624 0 51.2 6.144-67.584 14.336-110.592 67.584t-43.008 122.88v2.048q36.864-20.48 86.016-24.576-86.016 59.392-86.016 161.792 0 49.152 26.624 96.256 157.696-192.512 399.36-200.704-6.144 18.432-6.144 43.008 0 79.872 56.32 136.192t138.24 56.32q83.968 0 139.264-59.392 61.44 12.288 122.88 45.056-20.48-67.584-83.968-106.496 57.344 8.192 110.592 30.72z" horiz-adv-x="942" />
26<glyph unicode="&#xe808;" d="M219.136 192q0-46.080-31.744-77.824t-77.824-31.744-77.824 31.744-31.744 77.824 31.744 77.824 77.824 31.744 77.824-31.744 31.744-77.824zM512 121.344q1.024-15.36-9.216-26.624-11.264-12.288-27.648-12.288h-76.8q-14.336 0-24.576 9.216t-11.264 23.552q-12.288 131.072-105.472 224.256t-224.256 105.472q-14.336 1.024-23.552 11.264t-9.216 24.576v76.8q0 16.384 12.288 26.624 9.216 10.24 24.576 10.24h3.072q91.136-7.168 174.080-46.080t148.48-103.424q64.512-64.512 103.424-148.48t46.080-175.104zM804.864 120.32q1.024-15.36-10.24-26.624-10.24-11.264-26.624-11.264h-81.92q-14.336 0-25.6 10.24t-11.264 23.552q-6.144 122.88-57.344 233.472t-132.096 192.512-192.512 132.096-232.448 58.368q-14.336 0-24.576 11.264t-10.24 24.576v81.92q0 15.36 11.264 26.624 10.24 10.24 25.6 10.24h1.024q150.528-8.192 286.72-68.608t243.712-167.936q106.496-106.496 167.936-243.712t68.608-286.72z" horiz-adv-x="804" />
27<glyph unicode="&#xe809;" d="M0 628.224l151.552 151.552 360.448-359.424 360.448 359.424 151.552-151.552-512-512-151.552 151.552z" />
28<glyph unicode="&#xe80a;" d="M951.296 100.864v438.272q-18.432-20.48-39.936-37.888-152.576-116.736-243.712-192.512-28.672-24.576-47.104-38.912t-49.152-27.648-58.368-13.312h-2.048q-26.624 0-58.368 13.312t-49.152 27.648-47.104 38.912q-90.112 75.776-243.712 192.512-21.504 17.408-39.936 37.888v-438.272q0-8.192 6.144-13.312t12.288-5.12h841.728q7.168 0 12.288 5.12t6.144 13.312zM951.296 700.928v14.336t-1.024 7.168-1.024 7.168-3.072 5.12-5.12 4.096-8.192 2.048h-841.728q-7.168 0-12.288-6.144t-6.144-12.288q0-96.256 83.968-162.816 110.592-87.040 229.376-181.248 4.096-2.048 20.48-16.384t25.6-21.504 25.6-18.432 28.672-15.36 24.576-5.12h2.048q11.264 0 24.576 5.12t28.672 15.36 25.6 18.432 25.6 21.504 20.48 16.384q118.784 94.208 229.376 181.248 30.72 24.576 57.344 66.56t26.624 74.752zM1024 722.432v-621.568q0-37.888-26.624-64.512t-64.512-27.648h-841.728q-36.864 0-64.512 27.648t-26.624 64.512v621.568q0 37.888 26.624 64.512t64.512 26.624h841.728q37.888 0 64.512-26.624t26.624-64.512z" />
29<glyph unicode="&#xe80b;" d="M0 267.776l512 512 512-512-151.552-151.552-360.448 359.424-360.448-359.424z" />
30<glyph unicode="&#xe80c;" d="M51.2 558.592q124.928-71.68 337.92-71.68t337.92 71.68l-55.296-497.664q-2.048-14.336-35.84-36.864t-102.4-44.032-144.384-21.504-143.36 21.504-102.4 44.032-36.864 36.864zM550.912 865.792q96.256-18.432 161.792-56.32t65.536-72.704v-10.24q0-59.392-114.688-101.376t-274.432-41.984-274.432 41.984-114.688 101.376v10.24q0 34.816 65.536 72.704t161.792 56.32l43.008 49.152q22.528 26.624 71.68 26.624h94.208q53.248 0 71.68-26.624zM495.616 751.104h86.016q-94.208 112.64-106.496 129.024-14.336 16.384-32.768 16.384h-104.448q-22.528 0-32.768-16.384l-108.544-129.024h86.016l65.536 67.584h83.968z" horiz-adv-x="778" />
31<glyph unicode="&#xe80d;" d="M256 896h512v-128h-512zM960 704h-896c-35.2 0-64-28.8-64-64v-320c0-35.2 28.796-64 64-64h192v-256h512v256h192c35.2 0 64 28.8 64 64v320c0 35.2-28.8 64-64 64zM704 64h-384v320h384v-320zM974.4 608c0-25.626-20.774-46.4-46.398-46.4-25.626 0-46.402 20.774-46.402 46.4s20.776 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
32<glyph unicode="&#xe904;" d="M896 704v128h-896v-704c0-35.346 28.654-64 64-64h864c53.022 0 96 42.978 96 96v544h-128zM832 128h-768v640h768v-640zM128 640h640v-64h-640zM512 512h256v-64h-256zM512 384h256v-64h-256zM512 256h192v-64h-192zM128 512h320v-320h-320z" />
33<glyph unicode="&#xe90d;" d="M959.884 832c0.040-0.034 0.082-0.076 0.116-0.116v-767.77c-0.034-0.040-0.076-0.082-0.116-0.116h-895.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.772c0.034 0.040 0.076 0.082 0.114 0.114h895.77zM960 896h-896c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v768c0 35.2-28.8 64-64 64v0zM832 672c0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM896 128h-768v128l224 384 256-320h64l224 192z" />
34<glyph unicode="&#xe911;" d="M960 960h64v-736c0-88.366-100.29-160-224-160s-224 71.634-224 160c0 88.368 100.29 160 224 160 62.684 0 119.342-18.4 160-48.040v368.040l-512-113.778v-494.222c0-88.366-100.288-160-224-160s-224 71.634-224 160c0 88.368 100.288 160 224 160 62.684 0 119.342-18.4 160-48.040v624.040l576 128z" />
35<glyph unicode="&#xe913;" d="M0 832v-768h1024v768h-1024zM192 128h-128v128h128v-128zM192 384h-128v128h128v-128zM192 640h-128v128h128v-128zM768 128h-512v640h512v-640zM960 128h-128v128h128v-128zM960 384h-128v128h128v-128zM960 640h-128v128h128v-128zM384 640v-384l256 192z" />
36<glyph unicode="&#xe915;" d="M864 768h-512c-88 0-160-72-160-160v-512c0-88 72-160 160-160h512c88 0 160 72 160 160v512c0 88-72 160-160 160zM416 64c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM416 448c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM608 256c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM800 64c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM800 448c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM828.76 832c-14.93 72.804-79.71 128-156.76 128h-512c-88 0-160-72-160-160v-512c0-77.046 55.196-141.83 128-156.76v636.76c0 35.2 28.8 64 64 64h636.76z" />
37<glyph unicode="&#xe936;" d="M1232 960h-384c-26.4 0-63.274-15.274-81.942-33.942l-476.116-476.116c-18.668-18.668-18.668-49.214 0-67.882l412.118-412.118c18.668-18.668 49.214-18.668 67.882 0l476.118 476.118c18.666 18.666 33.94 55.54 33.94 81.94v384c0 26.4-21.6 48-48 48zM992 576c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM128 416l544 544h-80c-26.4 0-63.274-15.274-81.942-33.942l-476.116-476.116c-18.668-18.668-18.668-49.214 0-67.882l412.118-412.118c18.668-18.668 49.214-18.668 67.882 0l30.058 30.058-416 416z" horiz-adv-x="1280" />
38<glyph unicode="&#xe941;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM320 448c0 106.040 85.96 192 192 192s192-85.96 192-192-85.96-192-192-192-192 85.96-192 192zM925.98 276.524v0l-177.42 73.49c12.518 30.184 19.44 63.276 19.44 97.986s-6.922 67.802-19.44 97.986l177.42 73.49c21.908-52.822 34.020-110.73 34.020-171.476s-12.114-118.654-34.020-171.476v0zM683.478 861.98v0 0l-73.49-177.42c-30.184 12.518-63.276 19.44-97.988 19.44s-67.802-6.922-97.986-19.44l-73.49 177.422c52.822 21.904 110.732 34.018 171.476 34.018 60.746 0 118.654-12.114 171.478-34.020zM98.020 619.476l177.422-73.49c-12.518-30.184-19.442-63.276-19.442-97.986s6.922-67.802 19.44-97.986l-177.42-73.49c-21.906 52.822-34.020 110.73-34.020 171.476s12.114 118.654 34.020 171.476zM340.524 34.020l73.49 177.42c30.184-12.518 63.276-19.44 97.986-19.44s67.802 6.922 97.986 19.44l73.49-177.42c-52.822-21.904-110.73-34.020-171.476-34.020-60.744 0-118.654 12.114-171.476 34.020z" />
39<glyph unicode="&#xe96d;" d="M480 960v0c265.096 0 480-173.914 480-388.448s-214.904-388.448-480-388.448c-25.458 0-50.446 1.62-74.834 4.71-103.106-102.694-222.172-121.108-341.166-123.814v25.134c64.252 31.354 116 88.466 116 153.734 0 9.106-0.712 18.048-2.030 26.794-108.558 71.214-177.97 179.988-177.97 301.89 0 214.534 214.904 388.448 480 388.448zM996 89.314c0-55.942 36.314-104.898 92-131.772v-21.542c-103.126 2.318-197.786 18.102-287.142 106.126-21.14-2.65-42.794-4.040-64.858-4.040-95.47 0-183.408 25.758-253.614 69.040 144.674 0.506 281.26 46.854 384.834 130.672 52.208 42.252 93.394 91.826 122.414 147.348 30.766 58.866 46.366 121.582 46.366 186.406 0 10.448-0.45 20.836-1.258 31.168 72.57-59.934 117.258-141.622 117.258-231.676 0-104.488-60.158-197.722-154.24-258.764-1.142-7.496-1.76-15.16-1.76-22.966z" horiz-adv-x="1152" />
40<glyph unicode="&#xe994;" d="M933.79 349.75c-53.726 93.054-21.416 212.304 72.152 266.488l-100.626 174.292c-28.75-16.854-62.176-26.518-97.846-26.518-107.536 0-194.708 87.746-194.708 195.99h-201.258c0.266-33.41-8.074-67.282-25.958-98.252-53.724-93.056-173.156-124.702-266.862-70.758l-100.624-174.292c28.97-16.472 54.050-40.588 71.886-71.478 53.638-92.908 21.512-211.92-71.708-266.224l100.626-174.292c28.65 16.696 61.916 26.254 97.4 26.254 107.196 0 194.144-87.192 194.7-194.958h201.254c-0.086 33.074 8.272 66.57 25.966 97.218 53.636 92.906 172.776 124.594 266.414 71.012l100.626 174.29c-28.78 16.466-53.692 40.498-71.434 71.228zM512 240.668c-114.508 0-207.336 92.824-207.336 207.334 0 114.508 92.826 207.334 207.336 207.334 114.508 0 207.332-92.826 207.332-207.334-0.002-114.51-92.824-207.334-207.332-207.334z" />
41<glyph unicode="&#xe9ca;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512-0.002c-62.958 0-122.872 13.012-177.23 36.452l233.148 262.29c5.206 5.858 8.082 13.422 8.082 21.26v96c0 17.674-14.326 32-32 32-112.99 0-232.204 117.462-233.374 118.626-6 6.002-14.14 9.374-22.626 9.374h-128c-17.672 0-32-14.328-32-32v-192c0-12.122 6.848-23.202 17.69-28.622l110.31-55.156v-187.886c-116.052 80.956-192 215.432-192 367.664 0 68.714 15.49 133.806 43.138 192h116.862c8.488 0 16.626 3.372 22.628 9.372l128 128c6 6.002 9.372 14.14 9.372 22.628v77.412c40.562 12.074 83.518 18.588 128 18.588 70.406 0 137.004-16.26 196.282-45.2-4.144-3.502-8.176-7.164-12.046-11.036-36.266-36.264-56.236-84.478-56.236-135.764s19.97-99.5 56.236-135.764c36.434-36.432 85.218-56.264 135.634-56.26 3.166 0 6.342 0.080 9.518 0.236 13.814-51.802 38.752-186.656-8.404-372.334-0.444-1.744-0.696-3.488-0.842-5.224-81.324-83.080-194.7-134.656-320.142-134.656z" />
42<glyph unicode="&#xea2e;" d="M889.68 793.68c-93.608 102.216-228.154 166.32-377.68 166.32-282.77 0-512-229.23-512-512h96c0 229.75 186.25 416 416 416 123.020 0 233.542-53.418 309.696-138.306l-149.696-149.694h352v352l-134.32-134.32zM928 448c0-229.75-186.25-416-416-416-123.020 0-233.542 53.418-309.694 138.306l149.694 149.694h-352v-352l134.32 134.32c93.608-102.216 228.154-166.32 377.68-166.32 282.77 0 512 229.23 512 512h-96z" />
43</font></defs></svg> \ No newline at end of file
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.ttf b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.ttf
deleted file mode 100644
index f53c9590..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.ttf
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.woff b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.woff
deleted file mode 100644
index 2a12440c..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/icomoon.woff
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/ptsans.woff b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/ptsans.woff
deleted file mode 100644
index cf7c62e1..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/fonts/ptsans.woff
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo-other_themes.png b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo-other_themes.png
deleted file mode 100755
index 32543a44..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo-other_themes.png
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo.png b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo.png
deleted file mode 100755
index 5305c77d..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo.png
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo.svg b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo.svg
deleted file mode 100644
index 865da440..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/img/logo.svg
+++ /dev/null
@@ -1,8 +0,0 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
3 <circle cx="32" cy="32" r="29.5" style="fill:#000" />
4 <path d="m 16,18 33,0 0,26 -16.5,6 -16.5,-6 z" fill="#fff" />
5 <rect width="9" height="2.5" x="17.5" y="24.5" fill="#000" />
6 <rect width="9" height="2.5" x="28" y="24.5" fill="#000" />
7 <rect width="9" height="2.5" x="38.5" y="24.5" fill="#000" />
8</svg>
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/autoClose.js b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/autoClose.js
deleted file mode 100644
index e9145b7e..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/autoClose.js
+++ /dev/null
@@ -1,6 +0,0 @@
1$(document).ready(function() {
2 current_url = window.location.href
3 if (current_url.match("&closewin=true")) {
4 window.close();
5 }
6});
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/autoCompleteTags.js b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/autoCompleteTags.js
deleted file mode 100755
index 90bc982c..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/autoCompleteTags.js
+++ /dev/null
@@ -1,47 +0,0 @@
1jQuery(function($) {
2
3 function split( val ) {
4 return val.split( /,\s*/ );
5 }
6 function extractLast( term ) {
7 return split( term ).pop();
8 }
9
10
11 $("#value").bind("keydown", function(event) {
12 if (event.keyCode === $.ui.keyCode.TAB && $(this).data("ui-autocomplete").menu.active) {
13 event.preventDefault();
14 }
15 }).autocomplete({
16 source : function(request, response) {
17 $.getJSON("./?view=tags", {
18 term : extractLast(request.term),
19 //id: $(':hidden#entry_id').val()
20 }, response);
21 },
22 search : function() {
23 // custom minLength
24 var term = extractLast(this.value);
25 if (term.length < 1) {
26 return false;
27 }
28 },
29 focus : function() {
30 // prevent value inserted on focus
31 return false;
32 },
33 select : function(event, ui) {
34 var terms = split(this.value);
35 // remove the current input
36 terms.pop();
37 // add the selected item
38 terms.push(ui.item.value);
39 // add placeholder to get the comma-and-space at the end
40 terms.push("");
41 this.value = terms.join(", ");
42 return false;
43 }
44 });
45
46
47});
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/closeMessage.js b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/closeMessage.js
deleted file mode 100644
index 527719d5..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/closeMessage.js
+++ /dev/null
@@ -1,17 +0,0 @@
1$(function(){
2 //---------------------------------------------------------------------------
3 // Show the close icon when the user hover over a message
4 //---------------------------------------------------------------------------
5 // $('.messages').on('mouseenter', function(){
6 // $(this).find('a.closeMessage').stop(true, true).show();
7 // }).on('mouseleave', function(){
8 // $(this).find('a.closeMessage').stop(true, true).hide();
9 // });
10 //---------------------------------------------------------------------------
11 // Close the message box when the user clicks the close icon
12 //---------------------------------------------------------------------------
13 $('a.closeMessage').on('click', function(){
14 $(this).parents('div.messages').slideUp(300, function(){ $(this).remove(); });
15 return false;
16 });
17}); \ No newline at end of file
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/init.js b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/init.js
deleted file mode 100755
index 9bdc6f21..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/init.js
+++ /dev/null
@@ -1,63 +0,0 @@
1$.fn.ready(function() {
2
3 var $listmode = $('#listmode'),
4 $listentries = $("#list-entries");
5
6 /* ==========================================================================
7 Menu
8 ========================================================================== */
9
10 $("#menu").click(function(){
11 $("#links").toggleClass('menu--open');
12 if ($('#content').hasClass('opacity03')) {
13 $('#content').removeClass('opacity03');
14 }
15 });
16
17 /* ==========================================================================
18 List mode or Table Mode
19 ========================================================================== */
20
21 $listmode.click(function(){
22 if ( $.cookie("listmode") == 1 ) {
23 // Cookie
24 $.removeCookie("listmode");
25
26 $listentries.removeClass("listmode");
27 $listmode.removeClass("tablemode");
28 $listmode.addClass("listmode");
29 }
30 else {
31 // Cookie
32 $.cookie("listmode", 1, {expires: 365});
33
34 $listentries.addClass("listmode");
35 $listmode.removeClass("listmode");
36 $listmode.addClass("tablemode");
37 }
38
39 });
40
41 /* ==========================================================================
42 Cookie listmode
43 ========================================================================== */
44
45 if ( $.cookie("listmode") == 1 ) {
46 $listentries.addClass("listmode");
47 $listmode.removeClass("listmode");
48 $listmode.addClass("tablemode");
49 }
50
51 /* ==========================================================================
52 Add tag panel
53 ========================================================================== */
54
55
56 $('#nav-btn-add-tag').on('click', function(){
57 $(".nav-panel-add-tag").toggle(100);
58 $(".nav-panel-menu").addClass('hidden');
59 $("#tag_label").focus();
60 return false;
61 });
62
63});
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/popupForm.js b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/popupForm.js
deleted file mode 100644
index b933acd1..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/popupForm.js
+++ /dev/null
@@ -1,83 +0,0 @@
1$(document).ready(function() {
2
3 $("#search-form").hide();
4 $("#bagit-form").hide();
5 $("#filter-form").hide();
6
7 //---------------------------------------------------------------------------
8 // Toggle the "Search" popup in the sidebar
9 //---------------------------------------------------------------------------
10 function toggleSearch() {
11 $("#search-form").toggle();
12 $("#search").toggleClass("current");
13 $("#search").toggleClass("active-current");
14 $("#search-arrow").toggleClass("arrow-down");
15 if ($("#search").hasClass("current")) {
16 $("#content").addClass("opacity03");
17 } else {
18 $("#content").removeClass("opacity03");
19 }
20 }
21
22 //---------------------------------------------------------------------------
23 // Toggle the "Filter" popup on entries list
24 //---------------------------------------------------------------------------
25 function toggleFilter() {
26 $("#filter-form").toggle();
27 }
28
29 //---------------------------------------------------------------------------
30 // Toggle the "Save a Link" popup in the sidebar
31 //---------------------------------------------------------------------------
32 function toggleBagit() {
33 $("#bagit-form").toggle();
34 $("#bagit").toggleClass("current");
35 $("#bagit").toggleClass("active-current");
36 $("#bagit-arrow").toggleClass("arrow-down");
37 if ($("#bagit").hasClass("current")) {
38 $("#content").addClass("opacity03");
39 } else {
40 $("#content").removeClass("opacity03");
41 }
42 }
43
44 //---------------------------------------------------------------------------
45 // Close all #links popups in the sidebar
46 //---------------------------------------------------------------------------
47 function closePopups() {
48 $("#links .messages").hide();
49 $("#links > li > a").removeClass("active-current");
50 $("#links > li > a").removeClass("current");
51 $("[id$=-arrow]").removeClass("arrow-down");
52 $("#content").removeClass("opacity03");
53 }
54
55 $("#search").click(function(){
56 closePopups();
57 toggleSearch();
58 $("#searchfield").focus();
59 });
60
61 $("#filter").click(function(){
62 closePopups();
63 toggleFilter();
64 });
65
66 $("#bagit").click(function(){
67 closePopups();
68 toggleBagit();
69 $("#plainurl").focus();
70 });
71
72 $("#search-form-close").click(function(){
73 toggleSearch();
74 });
75
76 $("#filter-form-close").click(function(){
77 toggleFilter();
78 });
79
80 $("#bagit-form-close").click(function(){
81 toggleBagit();
82 });
83});
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/restoreScroll.js b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/restoreScroll.js
deleted file mode 100644
index 331c9e19..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/restoreScroll.js
+++ /dev/null
@@ -1,25 +0,0 @@
1function supportsLocalStorage() {
2 try {
3 return 'localStorage' in window && window['localStorage'] !== null;
4 } catch (e) {
5 return false;
6 }
7}
8
9function savePercent(id, percent) {
10 if (!supportsLocalStorage()) { return false; }
11 localStorage["poche.article." + id + ".percent"] = percent;
12 return true;
13}
14
15function retrievePercent(id) {
16 if (!supportsLocalStorage()) { return false; }
17
18 var bheight = $(document).height();
19 var percent = localStorage["poche.article." + id + ".percent"];
20 var scroll = bheight * percent;
21
22 $('html,body').animate({scrollTop: scroll}, 'fast');
23
24 return true;
25} \ No newline at end of file
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js
deleted file mode 100755
index 34e934cc..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js
+++ /dev/null
@@ -1,96 +0,0 @@
1$.fn.ready(function() {
2
3 var $bagit = $('#bagit'),
4 $bagitForm = $('#bagit-form'),
5 $bagitFormForm = $('#bagit-form-form');
6
7 /* ==========================================================================
8 bag it link and close button
9 ========================================================================== */
10
11 function toggleSaveLinkForm(url, event) {
12 $("#add-link-result").empty();
13
14 $bagit.toggleClass("active-current");
15
16 //only if bag-it link is not presented on page
17 if ( $bagit.length === 0 ) {
18 if ( event !== 'undefined' && event ) {
19 $bagitForm.css( {position:"absolute", top:event.pageY, left:event.pageX-200});
20 }
21 else {
22 $bagitForm.css( {position:"relative", top:"auto", left:"auto"});
23 }
24 }
25
26 if ($("#search-form").length != 0) {
27 $("#search").removeClass("current");
28 $("#search-arrow").removeClass("arrow-down");
29 $("#search-form").hide();
30 }
31 $bagitForm.toggle();
32 $('#content').toggleClass("opacity03");
33 if (url !== 'undefined' && url) {
34 $('#plainurl').val(url);
35 }
36 $('#plainurl').focus();
37 }
38
39 //---------------------------------------------------------------------------
40 // These two functions are now taken care of in popupForm.js
41 //---------------------------------------------------------------------------
42
43 // $bagit.click(function(){
44 // $bagit.toggleClass("current");
45 // $("#bagit-arrow").toggleClass("arrow-down");
46 // toggleSaveLinkForm();
47 // });
48
49 // $("#bagit-form-close").click(function(){
50 // $bagit.removeClass("current");
51 // $("#bagit-arrow").removeClass("arrow-down");
52 // toggleSaveLinkForm();
53 // });
54
55
56 //send "bag it link" form request via ajax
57 $bagitFormForm.submit( function(event) {
58 $("body").css("cursor", "wait");
59 $("#add-link-result").empty();
60
61 $.ajax({
62 type: $bagitFormForm.attr('method'),
63 url: $bagitFormForm.attr('action'),
64 data: $bagitFormForm.serialize(),
65 success: function(data) {
66 $('#add-link-result').html("Done!");
67 $('#plainurl').val('');
68 $('#plainurl').blur('');
69 $("body").css("cursor", "auto");
70 //setTimeout( function() { toggleSaveLinkForm(); }, 1000); //close form after 1000 delay
71 },
72 error: function(data) {
73 $('#add-link-result').html("Failed!");
74 $("body").css("cursor", "auto");
75 }
76 });
77
78 event.preventDefault();
79 });
80
81 /* ==========================================================================
82 Process all links inside an article
83 ========================================================================== */
84
85 $("article a[href^='http']").after(function() {
86 return " <a href=\"" + $(this).attr('href') + "\" class=\"add-to-wallabag-link-after\" alt=\"add to wallabag\" title=\"add to wallabag\"></a> ";
87 });
88
89 $(".add-to-wallabag-link-after").click(function(event){
90 toggleSaveLinkForm($(this).attr('href'), event);
91 event.preventDefault();
92 });
93
94});
95
96
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css
deleted file mode 100755
index 9d9ebe12..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css
+++ /dev/null
@@ -1,550 +0,0 @@
1/* ==========================================================================
2 Sommaire
3
4 0 = Common
5 1 = Nav
6 2 = Side-nav
7 3 = Filters slider
8 4 = Cards
9 5 = Article
10 6 = Media queries
11 7 = Font
12 8 = Others
13
14 ========================================================================== */
15
16
17/* ==========================================================================
18 0 = Common
19 ========================================================================== */
20
21@font-face {
22 font-family: 'icomoon';
23 src:url('../font/icomoon/icomoon.eot?yw303w');
24 src:url('../font/icomoon/icomoon.eot?yw303w#iefix') format('embedded-opentype'),
25 url('../font/icomoon/icomoon.ttf?yw303w') format('truetype'),
26 url('../font/icomoon/icomoon.woff?yw303w') format('woff'),
27 url('../font/icomoon/icomoon.svg?yw303w#icomoon') format('svg');
28 font-weight: normal;
29 font-style: normal;
30}
31
32[class^="icon-"], [class*=" icon-"] {
33 font-family: 'icomoon';
34 speak: none;
35 font-style: normal;
36 font-weight: normal;
37 font-variant: normal;
38 text-transform: none;
39 line-height: 1;
40
41 /* Better Font Rendering =========== */
42 -webkit-font-smoothing: antialiased;
43 -moz-osx-font-smoothing: grayscale;
44}
45
46body {
47 display: flex;
48 min-height: 100vh;
49 flex-direction: column;
50 background: #f0f0f0;
51}
52
53body.login main {
54 padding: 0;
55 min-height: 100vh;
56}
57
58.border-bottom {
59 border-bottom: 1px solid #DDD;
60}
61
62nav, main, footer {
63 padding-left: 240px;
64}
65
66main, #content, .valign-wrapper {
67 height: 100%;
68}
69
70#main {
71 flex: 1 0 auto;
72}
73
74.results {
75 height: 1em;
76 line-height: 30px;
77}
78
79.results .nb-results, .results .pagination {
80 margin: 15px;
81 margin-bottom: 0;
82}
83
84.pagination {
85 float: right;
86}
87
88.pagination ul {
89 margin: 0 !important;
90}
91
92.pagination li {
93 padding: 0;
94}
95
96.pagination a {
97 padding: 0px 10px;
98 height: 30px;
99 display: block;
100}
101
102.pagination li.active span {
103 padding: 0px 10px;
104 height: 30px;
105 display: block;
106 color: #fff;
107}
108
109.pagination .disabled {
110 margin-right: 10px;
111 margin-left: 10px;
112}
113
114.page-footer .footer-copyright p {
115 display: inline;
116}
117
118.hidden {
119 display: none;
120}
121
122.picker__date-display {
123 display: none;
124}
125
126footer.page-footer {
127 margin-top: 10px;
128 padding-top: 10px;
129}
130
131footer .row {
132 margin-bottom: 10px;
133}
134
135/* ==========================================================================
136 1 = Nav
137 ========================================================================== */
138
139nav input {
140 color: #aaa;
141}
142
143.nav-wrapper .button-collapse {
144 padding: 0px 15px;
145}
146
147.nav-input {
148 display: none;
149}
150
151.nav-panels {
152 overflow: hidden;
153}
154
155.nav-panel-buttom li {
156 max-height: 64px;
157}
158
159.nav-panels {
160 transition: background 0.2s ease;
161}
162
163.nav-panel-add .mdi-content-add,
164.nav-panel-search .mdi-action-search,
165.nav-panels .mdi-navigation-close {
166 color: #444 !important;
167}
168
169.nav-panels .action {
170 padding-left: 0.75rem;
171 font-size: 2.1rem;
172 white-space: nowrap;
173}
174
175.nav-panels .input-field input {
176 display: block;
177 line-height: inherit;
178 padding-left: 4rem !important;
179 width: calc(100% - 8rem);
180}
181
182.nav-panels .input-field input:focus {
183 background-color: #fff;
184 border: 0;
185 box-shadow: none;
186 color: #444;
187}
188
189.input-field.nav-panel-add label {
190 left: 1rem;
191}
192
193.input-field.nav-panel-add .mdi-navigation-close {
194 position: absolute;
195 top: 0;
196 right: 1rem;
197 color: transparent;
198 cursor: pointer;
199 font-size: 2rem;
200 transition: .3s color;
201}
202
203#button_filters {
204 display: none;
205}
206#button_export {
207 display: none;
208}
209
210.input-field.nav-panel-add, .input-field.nav-panel-add form {
211 height: 100%;
212}
213
214/* ==========================================================================
215 2 = Side-nav
216 ========================================================================== */
217
218.side-nav.fixed a {
219 font-size: 13px;
220 line-height: 44px;
221 height: 44px;
222}
223
224.bold > a {
225 font-weight: bold;
226}
227
228.side-nav > li.logo {
229 line-height: 0;
230 text-align: center;
231}
232
233#main .logo a {
234 height: 100pt;
235}
236
237#main .logo img {
238 height: 100pt;
239 width: 100pt;
240}
241
242#main .logo:hover {
243 background: transparent;
244}
245
246.side-nav li {
247 padding: 0px;
248}
249
250.side-nav a {
251 margin: 0px 1rem;
252}
253
254/* ==========================================================================
255 * 3 = Filters slider
256 * ========================================================================== */
257
258#filters button {
259 padding: 0px;
260 width: 100%;
261}
262
263.side-nav.fixed.right-aligned {
264 right: -250px;
265 left: auto !important;
266 overflow-y: visible;
267}
268
269#filters div.with-checkbox {
270 height: 3rem;
271 margin-top: 0px;
272}
273
274/* ==========================================================================
275 4 = Cards
276 ========================================================================== */
277
278main #content {
279 padding: 0px 0.5rem;
280}
281
282main ul.row {
283 padding: 0px 0.75rem;
284}
285
286.data .card .card-body {
287 height: 22em;
288 overflow: hidden;
289}
290
291.card .card-content .card-title {
292 line-height: 32px;
293 max-height: 64px;
294 display: block;
295}
296
297.card .card-content i.right, .card .card-reveal i.right {
298 margin-left: 0;
299}
300
301.card .card-content .estimatedTime {
302 margin-bottom: 10px;
303}
304
305.card .card-action .original {
306 line-height: 24px;
307}
308
309.card .card-action ul.links {
310 margin: 0;
311 font-size: 24px;
312 line-height: 24px;
313}
314
315.card .card-action a {
316 color: #ffffff;
317 margin: 0;
318}
319
320.card .card-action a:hover {
321 color: #ffffff;
322}
323
324.settings .div_tabs {
325 padding-bottom: 15px;
326}
327
328.card.sw {
329 max-width: 370px;
330 margin-left: auto;
331 margin-right: auto;
332}
333
334.mdi-card-close:before {
335 content: "\e8aa";
336}
337
338.card .card-image {
339 height: 14em;
340}
341
342.card .card-image .preview {
343 height: 14em;
344 background-size: cover;
345 background-repeat: no-repeat;
346 background-position: 50%;
347}
348
349/* ==========================================================================
350 5 = Article
351 ========================================================================== */
352
353#article {
354 font-size: 20px;
355 margin: 0px auto;
356 max-width: 40em;
357}
358
359#article img,
360#article figure {
361 max-width: 100%;
362 height: auto;
363}
364
365.reader-mode {
366 width: 95px !important;
367 transition: width 0.2s ease;
368}
369
370.reader-mode:hover {
371 width: 240px !important;
372}
373
374.reader-mode .collapsible-body {
375 height: 0;
376 overflow: hidden;
377}
378
379.reader-mode:hover .collapsible-body {
380 height: auto;
381}
382
383.reader-mode span {
384 opacity: 0;
385 transition: opacity 0.2s ease;
386}
387
388.reader-mode:hover span {
389 opacity: 1;
390}
391
392.progress {
393 position:fixed;
394 top:0px;
395 width: 100%;
396 height: 3px;
397 margin: 0;
398 z-index: 9999;
399}
400
401#article aside .link {
402 color: #000;
403 font-size: 0.6em;
404 text-decoration: none;
405}
406
407#article aside #list {
408 float: right;
409 margin-right: 15px;
410}
411
412#article aside .chip {
413 background-color: #039be5;
414 color: #ffffff;
415}
416
417#article aside .chip i {
418 color: #ffffff;
419}
420
421/* ==========================================================================
422 6 = Media queries
423 ========================================================================== */
424
425 @media only screen and (max-width : 992px) {
426 header, main, footer {
427 padding-left: 0;
428 }
429 nav, main, footer {
430 padding-left: 0;
431 }
432 .pagination {
433 width: auto;
434 }
435 .reader-mode {
436 width: 240px !important;
437 }
438 .reader-mode span {
439 opacity: 1;
440 }
441
442 .tabs {
443 display: inline-block;
444 height: auto;
445 }
446 .tab {
447 min-width: 100%;
448 }
449 .indicator {
450 display: none;
451 }
452 .pagination li.prev, .pagination li.next {
453 width: auto;
454 }
455 }
456
457@media only screen and (min-width : 400px) {
458 .nav-panel-buttom {
459 float: right;
460 }
461}
462
463@media only screen and (min-width : 993px) and (max-width : 1180px) {
464 .row .col.l1 {
465 width: 25%;
466 margin-left: 0; }
467 .row .col.l2 {
468 width: 33.33333%;
469 margin-left: 0; }
470 .row .col.l3 {
471 width: 41.66667%;
472 margin-left: 0; }
473 .row .col.l4 {
474 width: 50%;
475 margin-left: 0; }
476 .row .col.l5 {
477 width: 58.33333%;
478 margin-left: 0; }
479 .row .col.l6 {
480 width: 66.66667%;
481 margin-left: 0; }
482 .row .col.l7 {
483 width: 75%;
484 margin-left: 0; }
485 .row .col.l8 {
486 width: 83.33333%;
487 margin-left: 0; }
488 .row .col.l9 {
489 width: 91.66667%;
490 margin-left: 0; }
491 .row .col.l10 {
492 width: 100%;
493 margin-left: 0; }
494}
495
496@media only screen and (max-width : 350px) {
497 .nb-results {
498 display: none;
499 }
500}
501
502/* ==========================================================================
503 7 = Font
504 ========================================================================== */
505
506.icon-google-plus2:before {
507 content: "\e800";
508}
509.icon-facebook2:before {
510 content: "\e801";
511}
512.icon-twitter:before {
513 content: "\e802";
514}
515.icon-apple:before {
516 content: "\e803";
517}
518.icon-android:before {
519 content: "\e804";
520}
521.icon-chrome:before {
522 content: "\e805";
523}
524.icon-firefox:before {
525 content: "\e806";
526}
527
528footer [class^="icon-"], footer [class*=" icon-"] {
529 font-size: 2em;
530 transition: text-shadow 0.2s ease;
531 padding-right: 10px;
532}
533
534footer [class^="icon-"]:hover, footer [class*=" icon-"]:hover {
535 text-shadow: 0 0 10px rgba(0,0,0,0.3);
536}
537
538
539/* ==========================================================================
540 8 = Others
541 ========================================================================== */
542
543/* force height on non-input field in the settings page */
544div.settings div.input-field div, div.settings div.input-field ul {
545 margin-top: 40px;
546}
547/* but avoid to kill all file input */
548div.settings div.file-field div {
549 margin-top: inherit;
550}
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/materialize.css b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/materialize.css
deleted file mode 100644
index 544014c2..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/materialize.css
+++ /dev/null
@@ -1,8198 +0,0 @@
1/*!
2 * Materialize v0.97.1 (http://materializecss.com)
3 * Copyright 2014-2015 Materialize
4 * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
5 */
6.materialize-red.lighten-5 {
7 background-color: #fdeaeb !important; }
8
9.materialize-red-text.text-lighten-5 {
10 color: #fdeaeb !important; }
11
12.materialize-red.lighten-4 {
13 background-color: #f8c1c3 !important; }
14
15.materialize-red-text.text-lighten-4 {
16 color: #f8c1c3 !important; }
17
18.materialize-red.lighten-3 {
19 background-color: #f3989b !important; }
20
21.materialize-red-text.text-lighten-3 {
22 color: #f3989b !important; }
23
24.materialize-red.lighten-2 {
25 background-color: #ee6e73 !important; }
26
27.materialize-red-text.text-lighten-2 {
28 color: #ee6e73 !important; }
29
30.materialize-red.lighten-1 {
31 background-color: #ea454b !important; }
32
33.materialize-red-text.text-lighten-1 {
34 color: #ea454b !important; }
35
36.materialize-red {
37 background-color: #e51c23 !important; }
38
39.materialize-red-text {
40 color: #e51c23 !important; }
41
42.materialize-red.darken-1 {
43 background-color: #d0181e !important; }
44
45.materialize-red-text.text-darken-1 {
46 color: #d0181e !important; }
47
48.materialize-red.darken-2 {
49 background-color: #b9151b !important; }
50
51.materialize-red-text.text-darken-2 {
52 color: #b9151b !important; }
53
54.materialize-red.darken-3 {
55 background-color: #a21318 !important; }
56
57.materialize-red-text.text-darken-3 {
58 color: #a21318 !important; }
59
60.materialize-red.darken-4 {
61 background-color: #8b1014 !important; }
62
63.materialize-red-text.text-darken-4 {
64 color: #8b1014 !important; }
65
66.red.lighten-5 {
67 background-color: #FFEBEE !important; }
68
69.red-text.text-lighten-5 {
70 color: #FFEBEE !important; }
71
72.red.lighten-4 {
73 background-color: #FFCDD2 !important; }
74
75.red-text.text-lighten-4 {
76 color: #FFCDD2 !important; }
77
78.red.lighten-3 {
79 background-color: #EF9A9A !important; }
80
81.red-text.text-lighten-3 {
82 color: #EF9A9A !important; }
83
84.red.lighten-2 {
85 background-color: #E57373 !important; }
86
87.red-text.text-lighten-2 {
88 color: #E57373 !important; }
89
90.red.lighten-1 {
91 background-color: #EF5350 !important; }
92
93.red-text.text-lighten-1 {
94 color: #EF5350 !important; }
95
96.red {
97 background-color: #F44336 !important; }
98
99.red-text {
100 color: #F44336 !important; }
101
102.red.darken-1 {
103 background-color: #E53935 !important; }
104
105.red-text.text-darken-1 {
106 color: #E53935 !important; }
107
108.red.darken-2 {
109 background-color: #D32F2F !important; }
110
111.red-text.text-darken-2 {
112 color: #D32F2F !important; }
113
114.red.darken-3 {
115 background-color: #C62828 !important; }
116
117.red-text.text-darken-3 {
118 color: #C62828 !important; }
119
120.red.darken-4 {
121 background-color: #B71C1C !important; }
122
123.red-text.text-darken-4 {
124 color: #B71C1C !important; }
125
126.red.accent-1 {
127 background-color: #FF8A80 !important; }
128
129.red-text.text-accent-1 {
130 color: #FF8A80 !important; }
131
132.red.accent-2 {
133 background-color: #FF5252 !important; }
134
135.red-text.text-accent-2 {
136 color: #FF5252 !important; }
137
138.red.accent-3 {
139 background-color: #FF1744 !important; }
140
141.red-text.text-accent-3 {
142 color: #FF1744 !important; }
143
144.red.accent-4 {
145 background-color: #D50000 !important; }
146
147.red-text.text-accent-4 {
148 color: #D50000 !important; }
149
150.pink.lighten-5 {
151 background-color: #fce4ec !important; }
152
153.pink-text.text-lighten-5 {
154 color: #fce4ec !important; }
155
156.pink.lighten-4 {
157 background-color: #f8bbd0 !important; }
158
159.pink-text.text-lighten-4 {
160 color: #f8bbd0 !important; }
161
162.pink.lighten-3 {
163 background-color: #f48fb1 !important; }
164
165.pink-text.text-lighten-3 {
166 color: #f48fb1 !important; }
167
168.pink.lighten-2 {
169 background-color: #f06292 !important; }
170
171.pink-text.text-lighten-2 {
172 color: #f06292 !important; }
173
174.pink.lighten-1 {
175 background-color: #ec407a !important; }
176
177.pink-text.text-lighten-1 {
178 color: #ec407a !important; }
179
180.pink {
181 background-color: #e91e63 !important; }
182
183.pink-text {
184 color: #e91e63 !important; }
185
186.pink.darken-1 {
187 background-color: #d81b60 !important; }
188
189.pink-text.text-darken-1 {
190 color: #d81b60 !important; }
191
192.pink.darken-2 {
193 background-color: #c2185b !important; }
194
195.pink-text.text-darken-2 {
196 color: #c2185b !important; }
197
198.pink.darken-3 {
199 background-color: #ad1457 !important; }
200
201.pink-text.text-darken-3 {
202 color: #ad1457 !important; }
203
204.pink.darken-4 {
205 background-color: #880e4f !important; }
206
207.pink-text.text-darken-4 {
208 color: #880e4f !important; }
209
210.pink.accent-1 {
211 background-color: #ff80ab !important; }
212
213.pink-text.text-accent-1 {
214 color: #ff80ab !important; }
215
216.pink.accent-2 {
217 background-color: #ff4081 !important; }
218
219.pink-text.text-accent-2 {
220 color: #ff4081 !important; }
221
222.pink.accent-3 {
223 background-color: #f50057 !important; }
224
225.pink-text.text-accent-3 {
226 color: #f50057 !important; }
227
228.pink.accent-4 {
229 background-color: #c51162 !important; }
230
231.pink-text.text-accent-4 {
232 color: #c51162 !important; }
233
234.purple.lighten-5 {
235 background-color: #f3e5f5 !important; }
236
237.purple-text.text-lighten-5 {
238 color: #f3e5f5 !important; }
239
240.purple.lighten-4 {
241 background-color: #e1bee7 !important; }
242
243.purple-text.text-lighten-4 {
244 color: #e1bee7 !important; }
245
246.purple.lighten-3 {
247 background-color: #ce93d8 !important; }
248
249.purple-text.text-lighten-3 {
250 color: #ce93d8 !important; }
251
252.purple.lighten-2 {
253 background-color: #ba68c8 !important; }
254
255.purple-text.text-lighten-2 {
256 color: #ba68c8 !important; }
257
258.purple.lighten-1 {
259 background-color: #ab47bc !important; }
260
261.purple-text.text-lighten-1 {
262 color: #ab47bc !important; }
263
264.purple {
265 background-color: #9c27b0 !important; }
266
267.purple-text {
268 color: #9c27b0 !important; }
269
270.purple.darken-1 {
271 background-color: #8e24aa !important; }
272
273.purple-text.text-darken-1 {
274 color: #8e24aa !important; }
275
276.purple.darken-2 {
277 background-color: #7b1fa2 !important; }
278
279.purple-text.text-darken-2 {
280 color: #7b1fa2 !important; }
281
282.purple.darken-3 {
283 background-color: #6a1b9a !important; }
284
285.purple-text.text-darken-3 {
286 color: #6a1b9a !important; }
287
288.purple.darken-4 {
289 background-color: #4a148c !important; }
290
291.purple-text.text-darken-4 {
292 color: #4a148c !important; }
293
294.purple.accent-1 {
295 background-color: #ea80fc !important; }
296
297.purple-text.text-accent-1 {
298 color: #ea80fc !important; }
299
300.purple.accent-2 {
301 background-color: #e040fb !important; }
302
303.purple-text.text-accent-2 {
304 color: #e040fb !important; }
305
306.purple.accent-3 {
307 background-color: #d500f9 !important; }
308
309.purple-text.text-accent-3 {
310 color: #d500f9 !important; }
311
312.purple.accent-4 {
313 background-color: #aa00ff !important; }
314
315.purple-text.text-accent-4 {
316 color: #aa00ff !important; }
317
318.deep-purple.lighten-5 {
319 background-color: #ede7f6 !important; }
320
321.deep-purple-text.text-lighten-5 {
322 color: #ede7f6 !important; }
323
324.deep-purple.lighten-4 {
325 background-color: #d1c4e9 !important; }
326
327.deep-purple-text.text-lighten-4 {
328 color: #d1c4e9 !important; }
329
330.deep-purple.lighten-3 {
331 background-color: #b39ddb !important; }
332
333.deep-purple-text.text-lighten-3 {
334 color: #b39ddb !important; }
335
336.deep-purple.lighten-2 {
337 background-color: #9575cd !important; }
338
339.deep-purple-text.text-lighten-2 {
340 color: #9575cd !important; }
341
342.deep-purple.lighten-1 {
343 background-color: #7e57c2 !important; }
344
345.deep-purple-text.text-lighten-1 {
346 color: #7e57c2 !important; }
347
348.deep-purple {
349 background-color: #673ab7 !important; }
350
351.deep-purple-text {
352 color: #673ab7 !important; }
353
354.deep-purple.darken-1 {
355 background-color: #5e35b1 !important; }
356
357.deep-purple-text.text-darken-1 {
358 color: #5e35b1 !important; }
359
360.deep-purple.darken-2 {
361 background-color: #512da8 !important; }
362
363.deep-purple-text.text-darken-2 {
364 color: #512da8 !important; }
365
366.deep-purple.darken-3 {
367 background-color: #4527a0 !important; }
368
369.deep-purple-text.text-darken-3 {
370 color: #4527a0 !important; }
371
372.deep-purple.darken-4 {
373 background-color: #311b92 !important; }
374
375.deep-purple-text.text-darken-4 {
376 color: #311b92 !important; }
377
378.deep-purple.accent-1 {
379 background-color: #b388ff !important; }
380
381.deep-purple-text.text-accent-1 {
382 color: #b388ff !important; }
383
384.deep-purple.accent-2 {
385 background-color: #7c4dff !important; }
386
387.deep-purple-text.text-accent-2 {
388 color: #7c4dff !important; }
389
390.deep-purple.accent-3 {
391 background-color: #651fff !important; }
392
393.deep-purple-text.text-accent-3 {
394 color: #651fff !important; }
395
396.deep-purple.accent-4 {
397 background-color: #6200ea !important; }
398
399.deep-purple-text.text-accent-4 {
400 color: #6200ea !important; }
401
402.indigo.lighten-5 {
403 background-color: #e8eaf6 !important; }
404
405.indigo-text.text-lighten-5 {
406 color: #e8eaf6 !important; }
407
408.indigo.lighten-4 {
409 background-color: #c5cae9 !important; }
410
411.indigo-text.text-lighten-4 {
412 color: #c5cae9 !important; }
413
414.indigo.lighten-3 {
415 background-color: #9fa8da !important; }
416
417.indigo-text.text-lighten-3 {
418 color: #9fa8da !important; }
419
420.indigo.lighten-2 {
421 background-color: #7986cb !important; }
422
423.indigo-text.text-lighten-2 {
424 color: #7986cb !important; }
425
426.indigo.lighten-1 {
427 background-color: #5c6bc0 !important; }
428
429.indigo-text.text-lighten-1 {
430 color: #5c6bc0 !important; }
431
432.indigo {
433 background-color: #3f51b5 !important; }
434
435.indigo-text {
436 color: #3f51b5 !important; }
437
438.indigo.darken-1 {
439 background-color: #3949ab !important; }
440
441.indigo-text.text-darken-1 {
442 color: #3949ab !important; }
443
444.indigo.darken-2 {
445 background-color: #303f9f !important; }
446
447.indigo-text.text-darken-2 {
448 color: #303f9f !important; }
449
450.indigo.darken-3 {
451 background-color: #283593 !important; }
452
453.indigo-text.text-darken-3 {
454 color: #283593 !important; }
455
456.indigo.darken-4 {
457 background-color: #1a237e !important; }
458
459.indigo-text.text-darken-4 {
460 color: #1a237e !important; }
461
462.indigo.accent-1 {
463 background-color: #8c9eff !important; }
464
465.indigo-text.text-accent-1 {
466 color: #8c9eff !important; }
467
468.indigo.accent-2 {
469 background-color: #536dfe !important; }
470
471.indigo-text.text-accent-2 {
472 color: #536dfe !important; }
473
474.indigo.accent-3 {
475 background-color: #3d5afe !important; }
476
477.indigo-text.text-accent-3 {
478 color: #3d5afe !important; }
479
480.indigo.accent-4 {
481 background-color: #304ffe !important; }
482
483.indigo-text.text-accent-4 {
484 color: #304ffe !important; }
485
486.blue.lighten-5 {
487 background-color: #E3F2FD !important; }
488
489.blue-text.text-lighten-5 {
490 color: #E3F2FD !important; }
491
492.blue.lighten-4 {
493 background-color: #BBDEFB !important; }
494
495.blue-text.text-lighten-4 {
496 color: #BBDEFB !important; }
497
498.blue.lighten-3 {
499 background-color: #90CAF9 !important; }
500
501.blue-text.text-lighten-3 {
502 color: #90CAF9 !important; }
503
504.blue.lighten-2 {
505 background-color: #64B5F6 !important; }
506
507.blue-text.text-lighten-2 {
508 color: #64B5F6 !important; }
509
510.blue.lighten-1 {
511 background-color: #42A5F5 !important; }
512
513.blue-text.text-lighten-1 {
514 color: #42A5F5 !important; }
515
516.blue {
517 background-color: #2196F3 !important; }
518
519.blue-text {
520 color: #2196F3 !important; }
521
522.blue.darken-1 {
523 background-color: #1E88E5 !important; }
524
525.blue-text.text-darken-1 {
526 color: #1E88E5 !important; }
527
528.blue.darken-2 {
529 background-color: #1976D2 !important; }
530
531.blue-text.text-darken-2 {
532 color: #1976D2 !important; }
533
534.blue.darken-3 {
535 background-color: #1565C0 !important; }
536
537.blue-text.text-darken-3 {
538 color: #1565C0 !important; }
539
540.blue.darken-4 {
541 background-color: #0D47A1 !important; }
542
543.blue-text.text-darken-4 {
544 color: #0D47A1 !important; }
545
546.blue.accent-1 {
547 background-color: #82B1FF !important; }
548
549.blue-text.text-accent-1 {
550 color: #82B1FF !important; }
551
552.blue.accent-2 {
553 background-color: #448AFF !important; }
554
555.blue-text.text-accent-2 {
556 color: #448AFF !important; }
557
558.blue.accent-3 {
559 background-color: #2979FF !important; }
560
561.blue-text.text-accent-3 {
562 color: #2979FF !important; }
563
564.blue.accent-4 {
565 background-color: #2962FF !important; }
566
567.blue-text.text-accent-4 {
568 color: #2962FF !important; }
569
570.light-blue.lighten-5 {
571 background-color: #e1f5fe !important; }
572
573.light-blue-text.text-lighten-5 {
574 color: #e1f5fe !important; }
575
576.light-blue.lighten-4 {
577 background-color: #b3e5fc !important; }
578
579.light-blue-text.text-lighten-4 {
580 color: #b3e5fc !important; }
581
582.light-blue.lighten-3 {
583 background-color: #81d4fa !important; }
584
585.light-blue-text.text-lighten-3 {
586 color: #81d4fa !important; }
587
588.light-blue.lighten-2 {
589 background-color: #4fc3f7 !important; }
590
591.light-blue-text.text-lighten-2 {
592 color: #4fc3f7 !important; }
593
594.light-blue.lighten-1 {
595 background-color: #29b6f6 !important; }
596
597.light-blue-text.text-lighten-1 {
598 color: #29b6f6 !important; }
599
600.light-blue {
601 background-color: #03a9f4 !important; }
602
603.light-blue-text {
604 color: #03a9f4 !important; }
605
606.light-blue.darken-1 {
607 background-color: #039be5 !important; }
608
609.light-blue-text.text-darken-1 {
610 color: #039be5 !important; }
611
612.light-blue.darken-2 {
613 background-color: #0288d1 !important; }
614
615.light-blue-text.text-darken-2 {
616 color: #0288d1 !important; }
617
618.light-blue.darken-3 {
619 background-color: #0277bd !important; }
620
621.light-blue-text.text-darken-3 {
622 color: #0277bd !important; }
623
624.light-blue.darken-4 {
625 background-color: #01579b !important; }
626
627.light-blue-text.text-darken-4 {
628 color: #01579b !important; }
629
630.light-blue.accent-1 {
631 background-color: #80d8ff !important; }
632
633.light-blue-text.text-accent-1 {
634 color: #80d8ff !important; }
635
636.light-blue.accent-2 {
637 background-color: #40c4ff !important; }
638
639.light-blue-text.text-accent-2 {
640 color: #40c4ff !important; }
641
642.light-blue.accent-3 {
643 background-color: #00b0ff !important; }
644
645.light-blue-text.text-accent-3 {
646 color: #00b0ff !important; }
647
648.light-blue.accent-4 {
649 background-color: #0091ea !important; }
650
651.light-blue-text.text-accent-4 {
652 color: #0091ea !important; }
653
654.cyan.lighten-5 {
655 background-color: #e0f7fa !important; }
656
657.cyan-text.text-lighten-5 {
658 color: #e0f7fa !important; }
659
660.cyan.lighten-4 {
661 background-color: #b2ebf2 !important; }
662
663.cyan-text.text-lighten-4 {
664 color: #b2ebf2 !important; }
665
666.cyan.lighten-3 {
667 background-color: #80deea !important; }
668
669.cyan-text.text-lighten-3 {
670 color: #80deea !important; }
671
672.cyan.lighten-2 {
673 background-color: #4dd0e1 !important; }
674
675.cyan-text.text-lighten-2 {
676 color: #4dd0e1 !important; }
677
678.cyan.lighten-1 {
679 background-color: #26c6da !important; }
680
681.cyan-text.text-lighten-1 {
682 color: #26c6da !important; }
683
684.cyan {
685 background-color: #00bcd4 !important; }
686
687.cyan-text {
688 color: #00bcd4 !important; }
689
690.cyan.darken-1 {
691 background-color: #00acc1 !important; }
692
693.cyan-text.text-darken-1 {
694 color: #00acc1 !important; }
695
696.cyan.darken-2 {
697 background-color: #0097a7 !important; }
698
699.cyan-text.text-darken-2 {
700 color: #0097a7 !important; }
701
702.cyan.darken-3 {
703 background-color: #00838f !important; }
704
705.cyan-text.text-darken-3 {
706 color: #00838f !important; }
707
708.cyan.darken-4 {
709 background-color: #006064 !important; }
710
711.cyan-text.text-darken-4 {
712 color: #006064 !important; }
713
714.cyan.accent-1 {
715 background-color: #84ffff !important; }
716
717.cyan-text.text-accent-1 {
718 color: #84ffff !important; }
719
720.cyan.accent-2 {
721 background-color: #18ffff !important; }
722
723.cyan-text.text-accent-2 {
724 color: #18ffff !important; }
725
726.cyan.accent-3 {
727 background-color: #00e5ff !important; }
728
729.cyan-text.text-accent-3 {
730 color: #00e5ff !important; }
731
732.cyan.accent-4 {
733 background-color: #00b8d4 !important; }
734
735.cyan-text.text-accent-4 {
736 color: #00b8d4 !important; }
737
738.teal.lighten-5 {
739 background-color: #e0f2f1 !important; }
740
741.teal-text.text-lighten-5 {
742 color: #e0f2f1 !important; }
743
744.teal.lighten-4 {
745 background-color: #b2dfdb !important; }
746
747.teal-text.text-lighten-4 {
748 color: #b2dfdb !important; }
749
750.teal.lighten-3 {
751 background-color: #80cbc4 !important; }
752
753.teal-text.text-lighten-3 {
754 color: #80cbc4 !important; }
755
756.teal.lighten-2 {
757 background-color: #4db6ac !important; }
758
759.teal-text.text-lighten-2 {
760 color: #4db6ac !important; }
761
762.teal.lighten-1 {
763 background-color: #26a69a !important; }
764
765.teal-text.text-lighten-1 {
766 color: #26a69a !important; }
767
768.teal {
769 background-color: #009688 !important; }
770
771.teal-text {
772 color: #009688 !important; }
773
774.teal.darken-1 {
775 background-color: #00897b !important; }
776
777.teal-text.text-darken-1 {
778 color: #00897b !important; }
779
780.teal.darken-2 {
781 background-color: #00796b !important; }
782
783.teal-text.text-darken-2 {
784 color: #00796b !important; }
785
786.teal.darken-3 {
787 background-color: #00695c !important; }
788
789.teal-text.text-darken-3 {
790 color: #00695c !important; }
791
792.teal.darken-4 {
793 background-color: #004d40 !important; }
794
795.teal-text.text-darken-4 {
796 color: #004d40 !important; }
797
798.teal.accent-1 {
799 background-color: #a7ffeb !important; }
800
801.teal-text.text-accent-1 {
802 color: #a7ffeb !important; }
803
804.teal.accent-2 {
805 background-color: #64ffda !important; }
806
807.teal-text.text-accent-2 {
808 color: #64ffda !important; }
809
810.teal.accent-3 {
811 background-color: #1de9b6 !important; }
812
813.teal-text.text-accent-3 {
814 color: #1de9b6 !important; }
815
816.teal.accent-4 {
817 background-color: #00bfa5 !important; }
818
819.teal-text.text-accent-4 {
820 color: #00bfa5 !important; }
821
822.green.lighten-5 {
823 background-color: #E8F5E9 !important; }
824
825.green-text.text-lighten-5 {
826 color: #E8F5E9 !important; }
827
828.green.lighten-4 {
829 background-color: #C8E6C9 !important; }
830
831.green-text.text-lighten-4 {
832 color: #C8E6C9 !important; }
833
834.green.lighten-3 {
835 background-color: #A5D6A7 !important; }
836
837.green-text.text-lighten-3 {
838 color: #A5D6A7 !important; }
839
840.green.lighten-2 {
841 background-color: #81C784 !important; }
842
843.green-text.text-lighten-2 {
844 color: #81C784 !important; }
845
846.green.lighten-1 {
847 background-color: #66BB6A !important; }
848
849.green-text.text-lighten-1 {
850 color: #66BB6A !important; }
851
852.green {
853 background-color: #4CAF50 !important; }
854
855.green-text {
856 color: #4CAF50 !important; }
857
858.green.darken-1 {
859 background-color: #43A047 !important; }
860
861.green-text.text-darken-1 {
862 color: #43A047 !important; }
863
864.green.darken-2 {
865 background-color: #388E3C !important; }
866
867.green-text.text-darken-2 {
868 color: #388E3C !important; }
869
870.green.darken-3 {
871 background-color: #2E7D32 !important; }
872
873.green-text.text-darken-3 {
874 color: #2E7D32 !important; }
875
876.green.darken-4 {
877 background-color: #1B5E20 !important; }
878
879.green-text.text-darken-4 {
880 color: #1B5E20 !important; }
881
882.green.accent-1 {
883 background-color: #B9F6CA !important; }
884
885.green-text.text-accent-1 {
886 color: #B9F6CA !important; }
887
888.green.accent-2 {
889 background-color: #69F0AE !important; }
890
891.green-text.text-accent-2 {
892 color: #69F0AE !important; }
893
894.green.accent-3 {
895 background-color: #00E676 !important; }
896
897.green-text.text-accent-3 {
898 color: #00E676 !important; }
899
900.green.accent-4 {
901 background-color: #00C853 !important; }
902
903.green-text.text-accent-4 {
904 color: #00C853 !important; }
905
906.light-green.lighten-5 {
907 background-color: #f1f8e9 !important; }
908
909.light-green-text.text-lighten-5 {
910 color: #f1f8e9 !important; }
911
912.light-green.lighten-4 {
913 background-color: #dcedc8 !important; }
914
915.light-green-text.text-lighten-4 {
916 color: #dcedc8 !important; }
917
918.light-green.lighten-3 {
919 background-color: #c5e1a5 !important; }
920
921.light-green-text.text-lighten-3 {
922 color: #c5e1a5 !important; }
923
924.light-green.lighten-2 {
925 background-color: #aed581 !important; }
926
927.light-green-text.text-lighten-2 {
928 color: #aed581 !important; }
929
930.light-green.lighten-1 {
931 background-color: #9ccc65 !important; }
932
933.light-green-text.text-lighten-1 {
934 color: #9ccc65 !important; }
935
936.light-green {
937 background-color: #8bc34a !important; }
938
939.light-green-text {
940 color: #8bc34a !important; }
941
942.light-green.darken-1 {
943 background-color: #7cb342 !important; }
944
945.light-green-text.text-darken-1 {
946 color: #7cb342 !important; }
947
948.light-green.darken-2 {
949 background-color: #689f38 !important; }
950
951.light-green-text.text-darken-2 {
952 color: #689f38 !important; }
953
954.light-green.darken-3 {
955 background-color: #558b2f !important; }
956
957.light-green-text.text-darken-3 {
958 color: #558b2f !important; }
959
960.light-green.darken-4 {
961 background-color: #33691e !important; }
962
963.light-green-text.text-darken-4 {
964 color: #33691e !important; }
965
966.light-green.accent-1 {
967 background-color: #ccff90 !important; }
968
969.light-green-text.text-accent-1 {
970 color: #ccff90 !important; }
971
972.light-green.accent-2 {
973 background-color: #b2ff59 !important; }
974
975.light-green-text.text-accent-2 {
976 color: #b2ff59 !important; }
977
978.light-green.accent-3 {
979 background-color: #76ff03 !important; }
980
981.light-green-text.text-accent-3 {
982 color: #76ff03 !important; }
983
984.light-green.accent-4 {
985 background-color: #64dd17 !important; }
986
987.light-green-text.text-accent-4 {
988 color: #64dd17 !important; }
989
990.lime.lighten-5 {
991 background-color: #f9fbe7 !important; }
992
993.lime-text.text-lighten-5 {
994 color: #f9fbe7 !important; }
995
996.lime.lighten-4 {
997 background-color: #f0f4c3 !important; }
998
999.lime-text.text-lighten-4 {
1000 color: #f0f4c3 !important; }
1001
1002.lime.lighten-3 {
1003 background-color: #e6ee9c !important; }
1004
1005.lime-text.text-lighten-3 {
1006 color: #e6ee9c !important; }
1007
1008.lime.lighten-2 {
1009 background-color: #dce775 !important; }
1010
1011.lime-text.text-lighten-2 {
1012 color: #dce775 !important; }
1013
1014.lime.lighten-1 {
1015 background-color: #d4e157 !important; }
1016
1017.lime-text.text-lighten-1 {
1018 color: #d4e157 !important; }
1019
1020.lime {
1021 background-color: #cddc39 !important; }
1022
1023.lime-text {
1024 color: #cddc39 !important; }
1025
1026.lime.darken-1 {
1027 background-color: #c0ca33 !important; }
1028
1029.lime-text.text-darken-1 {
1030 color: #c0ca33 !important; }
1031
1032.lime.darken-2 {
1033 background-color: #afb42b !important; }
1034
1035.lime-text.text-darken-2 {
1036 color: #afb42b !important; }
1037
1038.lime.darken-3 {
1039 background-color: #9e9d24 !important; }
1040
1041.lime-text.text-darken-3 {
1042 color: #9e9d24 !important; }
1043
1044.lime.darken-4 {
1045 background-color: #827717 !important; }
1046
1047.lime-text.text-darken-4 {
1048 color: #827717 !important; }
1049
1050.lime.accent-1 {
1051 background-color: #f4ff81 !important; }
1052
1053.lime-text.text-accent-1 {
1054 color: #f4ff81 !important; }
1055
1056.lime.accent-2 {
1057 background-color: #eeff41 !important; }
1058
1059.lime-text.text-accent-2 {
1060 color: #eeff41 !important; }
1061
1062.lime.accent-3 {
1063 background-color: #c6ff00 !important; }
1064
1065.lime-text.text-accent-3 {
1066 color: #c6ff00 !important; }
1067
1068.lime.accent-4 {
1069 background-color: #aeea00 !important; }
1070
1071.lime-text.text-accent-4 {
1072 color: #aeea00 !important; }
1073
1074.yellow.lighten-5 {
1075 background-color: #fffde7 !important; }
1076
1077.yellow-text.text-lighten-5 {
1078 color: #fffde7 !important; }
1079
1080.yellow.lighten-4 {
1081 background-color: #fff9c4 !important; }
1082
1083.yellow-text.text-lighten-4 {
1084 color: #fff9c4 !important; }
1085
1086.yellow.lighten-3 {
1087 background-color: #fff59d !important; }
1088
1089.yellow-text.text-lighten-3 {
1090 color: #fff59d !important; }
1091
1092.yellow.lighten-2 {
1093 background-color: #fff176 !important; }
1094
1095.yellow-text.text-lighten-2 {
1096 color: #fff176 !important; }
1097
1098.yellow.lighten-1 {
1099 background-color: #ffee58 !important; }
1100
1101.yellow-text.text-lighten-1 {
1102 color: #ffee58 !important; }
1103
1104.yellow {
1105 background-color: #ffeb3b !important; }
1106
1107.yellow-text {
1108 color: #ffeb3b !important; }
1109
1110.yellow.darken-1 {
1111 background-color: #fdd835 !important; }
1112
1113.yellow-text.text-darken-1 {
1114 color: #fdd835 !important; }
1115
1116.yellow.darken-2 {
1117 background-color: #fbc02d !important; }
1118
1119.yellow-text.text-darken-2 {
1120 color: #fbc02d !important; }
1121
1122.yellow.darken-3 {
1123 background-color: #f9a825 !important; }
1124
1125.yellow-text.text-darken-3 {
1126 color: #f9a825 !important; }
1127
1128.yellow.darken-4 {
1129 background-color: #f57f17 !important; }
1130
1131.yellow-text.text-darken-4 {
1132 color: #f57f17 !important; }
1133
1134.yellow.accent-1 {
1135 background-color: #ffff8d !important; }
1136
1137.yellow-text.text-accent-1 {
1138 color: #ffff8d !important; }
1139
1140.yellow.accent-2 {
1141 background-color: #ffff00 !important; }
1142
1143.yellow-text.text-accent-2 {
1144 color: #ffff00 !important; }
1145
1146.yellow.accent-3 {
1147 background-color: #ffea00 !important; }
1148
1149.yellow-text.text-accent-3 {
1150 color: #ffea00 !important; }
1151
1152.yellow.accent-4 {
1153 background-color: #ffd600 !important; }
1154
1155.yellow-text.text-accent-4 {
1156 color: #ffd600 !important; }
1157
1158.amber.lighten-5 {
1159 background-color: #fff8e1 !important; }
1160
1161.amber-text.text-lighten-5 {
1162 color: #fff8e1 !important; }
1163
1164.amber.lighten-4 {
1165 background-color: #ffecb3 !important; }
1166
1167.amber-text.text-lighten-4 {
1168 color: #ffecb3 !important; }
1169
1170.amber.lighten-3 {
1171 background-color: #ffe082 !important; }
1172
1173.amber-text.text-lighten-3 {
1174 color: #ffe082 !important; }
1175
1176.amber.lighten-2 {
1177 background-color: #ffd54f !important; }
1178
1179.amber-text.text-lighten-2 {
1180 color: #ffd54f !important; }
1181
1182.amber.lighten-1 {
1183 background-color: #ffca28 !important; }
1184
1185.amber-text.text-lighten-1 {
1186 color: #ffca28 !important; }
1187
1188.amber {
1189 background-color: #ffc107 !important; }
1190
1191.amber-text {
1192 color: #ffc107 !important; }
1193
1194.amber.darken-1 {
1195 background-color: #ffb300 !important; }
1196
1197.amber-text.text-darken-1 {
1198 color: #ffb300 !important; }
1199
1200.amber.darken-2 {
1201 background-color: #ffa000 !important; }
1202
1203.amber-text.text-darken-2 {
1204 color: #ffa000 !important; }
1205
1206.amber.darken-3 {
1207 background-color: #ff8f00 !important; }
1208
1209.amber-text.text-darken-3 {
1210 color: #ff8f00 !important; }
1211
1212.amber.darken-4 {
1213 background-color: #ff6f00 !important; }
1214
1215.amber-text.text-darken-4 {
1216 color: #ff6f00 !important; }
1217
1218.amber.accent-1 {
1219 background-color: #ffe57f !important; }
1220
1221.amber-text.text-accent-1 {
1222 color: #ffe57f !important; }
1223
1224.amber.accent-2 {
1225 background-color: #ffd740 !important; }
1226
1227.amber-text.text-accent-2 {
1228 color: #ffd740 !important; }
1229
1230.amber.accent-3 {
1231 background-color: #ffc400 !important; }
1232
1233.amber-text.text-accent-3 {
1234 color: #ffc400 !important; }
1235
1236.amber.accent-4 {
1237 background-color: #ffab00 !important; }
1238
1239.amber-text.text-accent-4 {
1240 color: #ffab00 !important; }
1241
1242.orange.lighten-5 {
1243 background-color: #fff3e0 !important; }
1244
1245.orange-text.text-lighten-5 {
1246 color: #fff3e0 !important; }
1247
1248.orange.lighten-4 {
1249 background-color: #ffe0b2 !important; }
1250
1251.orange-text.text-lighten-4 {
1252 color: #ffe0b2 !important; }
1253
1254.orange.lighten-3 {
1255 background-color: #ffcc80 !important; }
1256
1257.orange-text.text-lighten-3 {
1258 color: #ffcc80 !important; }
1259
1260.orange.lighten-2 {
1261 background-color: #ffb74d !important; }
1262
1263.orange-text.text-lighten-2 {
1264 color: #ffb74d !important; }
1265
1266.orange.lighten-1 {
1267 background-color: #ffa726 !important; }
1268
1269.orange-text.text-lighten-1 {
1270 color: #ffa726 !important; }
1271
1272.orange {
1273 background-color: #ff9800 !important; }
1274
1275.orange-text {
1276 color: #ff9800 !important; }
1277
1278.orange.darken-1 {
1279 background-color: #fb8c00 !important; }
1280
1281.orange-text.text-darken-1 {
1282 color: #fb8c00 !important; }
1283
1284.orange.darken-2 {
1285 background-color: #f57c00 !important; }
1286
1287.orange-text.text-darken-2 {
1288 color: #f57c00 !important; }
1289
1290.orange.darken-3 {
1291 background-color: #ef6c00 !important; }
1292
1293.orange-text.text-darken-3 {
1294 color: #ef6c00 !important; }
1295
1296.orange.darken-4 {
1297 background-color: #e65100 !important; }
1298
1299.orange-text.text-darken-4 {
1300 color: #e65100 !important; }
1301
1302.orange.accent-1 {
1303 background-color: #ffd180 !important; }
1304
1305.orange-text.text-accent-1 {
1306 color: #ffd180 !important; }
1307
1308.orange.accent-2 {
1309 background-color: #ffab40 !important; }
1310
1311.orange-text.text-accent-2 {
1312 color: #ffab40 !important; }
1313
1314.orange.accent-3 {
1315 background-color: #ff9100 !important; }
1316
1317.orange-text.text-accent-3 {
1318 color: #ff9100 !important; }
1319
1320.orange.accent-4 {
1321 background-color: #ff6d00 !important; }
1322
1323.orange-text.text-accent-4 {
1324 color: #ff6d00 !important; }
1325
1326.deep-orange.lighten-5 {
1327 background-color: #fbe9e7 !important; }
1328
1329.deep-orange-text.text-lighten-5 {
1330 color: #fbe9e7 !important; }
1331
1332.deep-orange.lighten-4 {
1333 background-color: #ffccbc !important; }
1334
1335.deep-orange-text.text-lighten-4 {
1336 color: #ffccbc !important; }
1337
1338.deep-orange.lighten-3 {
1339 background-color: #ffab91 !important; }
1340
1341.deep-orange-text.text-lighten-3 {
1342 color: #ffab91 !important; }
1343
1344.deep-orange.lighten-2 {
1345 background-color: #ff8a65 !important; }
1346
1347.deep-orange-text.text-lighten-2 {
1348 color: #ff8a65 !important; }
1349
1350.deep-orange.lighten-1 {
1351 background-color: #ff7043 !important; }
1352
1353.deep-orange-text.text-lighten-1 {
1354 color: #ff7043 !important; }
1355
1356.deep-orange {
1357 background-color: #ff5722 !important; }
1358
1359.deep-orange-text {
1360 color: #ff5722 !important; }
1361
1362.deep-orange.darken-1 {
1363 background-color: #f4511e !important; }
1364
1365.deep-orange-text.text-darken-1 {
1366 color: #f4511e !important; }
1367
1368.deep-orange.darken-2 {
1369 background-color: #e64a19 !important; }
1370
1371.deep-orange-text.text-darken-2 {
1372 color: #e64a19 !important; }
1373
1374.deep-orange.darken-3 {
1375 background-color: #d84315 !important; }
1376
1377.deep-orange-text.text-darken-3 {
1378 color: #d84315 !important; }
1379
1380.deep-orange.darken-4 {
1381 background-color: #bf360c !important; }
1382
1383.deep-orange-text.text-darken-4 {
1384 color: #bf360c !important; }
1385
1386.deep-orange.accent-1 {
1387 background-color: #ff9e80 !important; }
1388
1389.deep-orange-text.text-accent-1 {
1390 color: #ff9e80 !important; }
1391
1392.deep-orange.accent-2 {
1393 background-color: #ff6e40 !important; }
1394
1395.deep-orange-text.text-accent-2 {
1396 color: #ff6e40 !important; }
1397
1398.deep-orange.accent-3 {
1399 background-color: #ff3d00 !important; }
1400
1401.deep-orange-text.text-accent-3 {
1402 color: #ff3d00 !important; }
1403
1404.deep-orange.accent-4 {
1405 background-color: #dd2c00 !important; }
1406
1407.deep-orange-text.text-accent-4 {
1408 color: #dd2c00 !important; }
1409
1410.brown.lighten-5 {
1411 background-color: #efebe9 !important; }
1412
1413.brown-text.text-lighten-5 {
1414 color: #efebe9 !important; }
1415
1416.brown.lighten-4 {
1417 background-color: #d7ccc8 !important; }
1418
1419.brown-text.text-lighten-4 {
1420 color: #d7ccc8 !important; }
1421
1422.brown.lighten-3 {
1423 background-color: #bcaaa4 !important; }
1424
1425.brown-text.text-lighten-3 {
1426 color: #bcaaa4 !important; }
1427
1428.brown.lighten-2 {
1429 background-color: #a1887f !important; }
1430
1431.brown-text.text-lighten-2 {
1432 color: #a1887f !important; }
1433
1434.brown.lighten-1 {
1435 background-color: #8d6e63 !important; }
1436
1437.brown-text.text-lighten-1 {
1438 color: #8d6e63 !important; }
1439
1440.brown {
1441 background-color: #795548 !important; }
1442
1443.brown-text {
1444 color: #795548 !important; }
1445
1446.brown.darken-1 {
1447 background-color: #6d4c41 !important; }
1448
1449.brown-text.text-darken-1 {
1450 color: #6d4c41 !important; }
1451
1452.brown.darken-2 {
1453 background-color: #5d4037 !important; }
1454
1455.brown-text.text-darken-2 {
1456 color: #5d4037 !important; }
1457
1458.brown.darken-3 {
1459 background-color: #4e342e !important; }
1460
1461.brown-text.text-darken-3 {
1462 color: #4e342e !important; }
1463
1464.brown.darken-4 {
1465 background-color: #3e2723 !important; }
1466
1467.brown-text.text-darken-4 {
1468 color: #3e2723 !important; }
1469
1470.blue-grey.lighten-5 {
1471 background-color: #eceff1 !important; }
1472
1473.blue-grey-text.text-lighten-5 {
1474 color: #eceff1 !important; }
1475
1476.blue-grey.lighten-4 {
1477 background-color: #cfd8dc !important; }
1478
1479.blue-grey-text.text-lighten-4 {
1480 color: #cfd8dc !important; }
1481
1482.blue-grey.lighten-3 {
1483 background-color: #b0bec5 !important; }
1484
1485.blue-grey-text.text-lighten-3 {
1486 color: #b0bec5 !important; }
1487
1488.blue-grey.lighten-2 {
1489 background-color: #90a4ae !important; }
1490
1491.blue-grey-text.text-lighten-2 {
1492 color: #90a4ae !important; }
1493
1494.blue-grey.lighten-1 {
1495 background-color: #78909c !important; }
1496
1497.blue-grey-text.text-lighten-1 {
1498 color: #78909c !important; }
1499
1500.blue-grey {
1501 background-color: #607d8b !important; }
1502
1503.blue-grey-text {
1504 color: #607d8b !important; }
1505
1506.blue-grey.darken-1 {
1507 background-color: #546e7a !important; }
1508
1509.blue-grey-text.text-darken-1 {
1510 color: #546e7a !important; }
1511
1512.blue-grey.darken-2 {
1513 background-color: #455a64 !important; }
1514
1515.blue-grey-text.text-darken-2 {
1516 color: #455a64 !important; }
1517
1518.blue-grey.darken-3 {
1519 background-color: #37474f !important; }
1520
1521.blue-grey-text.text-darken-3 {
1522 color: #37474f !important; }
1523
1524.blue-grey.darken-4 {
1525 background-color: #263238 !important; }
1526
1527.blue-grey-text.text-darken-4 {
1528 color: #263238 !important; }
1529
1530.grey.lighten-5 {
1531 background-color: #fafafa !important; }
1532
1533.grey-text.text-lighten-5 {
1534 color: #fafafa !important; }
1535
1536.grey.lighten-4 {
1537 background-color: #f5f5f5 !important; }
1538
1539.grey-text.text-lighten-4 {
1540 color: #f5f5f5 !important; }
1541
1542.grey.lighten-3 {
1543 background-color: #eeeeee !important; }
1544
1545.grey-text.text-lighten-3 {
1546 color: #eeeeee !important; }
1547
1548.grey.lighten-2 {
1549 background-color: #e0e0e0 !important; }
1550
1551.grey-text.text-lighten-2 {
1552 color: #e0e0e0 !important; }
1553
1554.grey.lighten-1 {
1555 background-color: #bdbdbd !important; }
1556
1557.grey-text.text-lighten-1 {
1558 color: #bdbdbd !important; }
1559
1560.grey {
1561 background-color: #9e9e9e !important; }
1562
1563.grey-text {
1564 color: #9e9e9e !important; }
1565
1566.grey.darken-1 {
1567 background-color: #757575 !important; }
1568
1569.grey-text.text-darken-1 {
1570 color: #757575 !important; }
1571
1572.grey.darken-2 {
1573 background-color: #616161 !important; }
1574
1575.grey-text.text-darken-2 {
1576 color: #616161 !important; }
1577
1578.grey.darken-3 {
1579 background-color: #424242 !important; }
1580
1581.grey-text.text-darken-3 {
1582 color: #424242 !important; }
1583
1584.grey.darken-4 {
1585 background-color: #212121 !important; }
1586
1587.grey-text.text-darken-4 {
1588 color: #212121 !important; }
1589
1590.shades.black {
1591 background-color: #000000 !important; }
1592
1593.shades-text.text-black {
1594 color: #000000 !important; }
1595
1596.shades.white {
1597 background-color: #FFFFFF !important; }
1598
1599.shades-text.text-white {
1600 color: #FFFFFF !important; }
1601
1602.shades.transparent {
1603 background-color: transparent !important; }
1604
1605.shades-text.text-transparent {
1606 color: transparent !important; }
1607
1608.black {
1609 background-color: #000000 !important; }
1610
1611.black-text {
1612 color: #000000 !important; }
1613
1614.white {
1615 background-color: #FFFFFF !important; }
1616
1617.white-text {
1618 color: #FFFFFF !important; }
1619
1620.transparent {
1621 background-color: transparent !important; }
1622
1623.transparent-text {
1624 color: transparent !important; }
1625
1626/*** Colors ***/
1627/*** Badges ***/
1628/*** Buttons ***/
1629/*** Cards ***/
1630/*** Collapsible ***/
1631/*** Dropdown ***/
1632/*** Fonts ***/
1633/*** Forms ***/
1634/*** Global ***/
1635/*** Navbar ***/
1636/*** SideNav ***/
1637/*** Photo Slider ***/
1638/*** Spinners | Loaders ***/
1639/*** Tabs ***/
1640/*** Tables ***/
1641/*** Toasts ***/
1642/*** Typography ***/
1643/*** Collections ***/
1644/* Progress Bar */
1645/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
1646/**
1647 * 1. Set default font family to sans-serif.
1648 * 2. Prevent iOS text size adjust after orientation change, without disabling
1649 * user zoom.
1650 */
1651html {
1652 font-family: sans-serif;
1653 /* 1 */
1654 -ms-text-size-adjust: 100%;
1655 /* 2 */
1656 -webkit-text-size-adjust: 100%;
1657 /* 2 */ }
1658
1659/**
1660 * Remove default margin.
1661 */
1662body {
1663 margin: 0; }
1664
1665/* HTML5 display definitions
1666 ========================================================================== */
1667/**
1668 * Correct `block` display not defined for any HTML5 element in IE 8/9.
1669 * Correct `block` display not defined for `details` or `summary` in IE 10/11
1670 * and Firefox.
1671 * Correct `block` display not defined for `main` in IE 11.
1672 */
1673article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {
1674 display: block; }
1675
1676/**
1677 * 1. Correct `inline-block` display not defined in IE 8/9.
1678 * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
1679 */
1680audio, canvas, progress, video {
1681 display: inline-block;
1682 /* 1 */
1683 vertical-align: baseline;
1684 /* 2 */ }
1685
1686/**
1687 * Prevent modern browsers from displaying `audio` without controls.
1688 * Remove excess height in iOS 5 devices.
1689 */
1690audio:not([controls]) {
1691 display: none;
1692 height: 0; }
1693
1694/**
1695 * Address `[hidden]` styling not present in IE 8/9/10.
1696 * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
1697 */
1698[hidden], template {
1699 display: none; }
1700
1701/* Links
1702 ========================================================================== */
1703/**
1704 * Remove the gray background color from active links in IE 10.
1705 */
1706a {
1707 background-color: transparent; }
1708
1709/**
1710 * Improve readability when focused and also mouse hovered in all browsers.
1711 */
1712a:active, a:hover {
1713 outline: 0; }
1714
1715/* Text-level semantics
1716 ========================================================================== */
1717/**
1718 * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
1719 */
1720abbr[title] {
1721 border-bottom: 1px dotted; }
1722
1723/**
1724 * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
1725 */
1726b, strong {
1727 font-weight: bold; }
1728
1729/**
1730 * Address styling not present in Safari and Chrome.
1731 */
1732dfn {
1733 font-style: italic; }
1734
1735/**
1736 * Address variable `h1` font-size and margin within `section` and `article`
1737 * contexts in Firefox 4+, Safari, and Chrome.
1738 */
1739h1 {
1740 font-size: 2em;
1741 margin: 0.67em 0; }
1742
1743/**
1744 * Address styling not present in IE 8/9.
1745 */
1746mark {
1747 background: #ff0;
1748 color: #000; }
1749
1750/**
1751 * Address inconsistent and variable font size in all browsers.
1752 */
1753small {
1754 font-size: 80%; }
1755
1756/**
1757 * Prevent `sub` and `sup` affecting `line-height` in all browsers.
1758 */
1759sub, sup {
1760 font-size: 75%;
1761 line-height: 0;
1762 position: relative;
1763 vertical-align: baseline; }
1764
1765sup {
1766 top: -0.5em; }
1767
1768sub {
1769 bottom: -0.25em; }
1770
1771/* Embedded content
1772 ========================================================================== */
1773/**
1774 * Remove border when inside `a` element in IE 8/9/10.
1775 */
1776img {
1777 border: 0; }
1778
1779/**
1780 * Correct overflow not hidden in IE 9/10/11.
1781 */
1782svg:not(:root) {
1783 overflow: hidden; }
1784
1785/* Grouping content
1786 ========================================================================== */
1787/**
1788 * Address margin not present in IE 8/9 and Safari.
1789 */
1790figure {
1791 margin: 1em 40px; }
1792
1793/**
1794 * Address differences between Firefox and other browsers.
1795 */
1796hr {
1797 -moz-box-sizing: content-box;
1798 box-sizing: content-box;
1799 height: 0; }
1800
1801/**
1802 * Contain overflow in all browsers.
1803 */
1804pre {
1805 overflow: auto; }
1806
1807/**
1808 * Address odd `em`-unit font size rendering in all browsers.
1809 */
1810code, kbd, pre, samp {
1811 font-family: monospace, monospace;
1812 font-size: 1em; }
1813
1814/* Forms
1815 ========================================================================== */
1816/**
1817 * Known limitation: by default, Chrome and Safari on OS X allow very limited
1818 * styling of `select`, unless a `border` property is set.
1819 */
1820/**
1821 * 1. Correct color not being inherited.
1822 * Known issue: affects color of disabled elements.
1823 * 2. Correct font properties not being inherited.
1824 * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
1825 */
1826button, input, optgroup, select, textarea {
1827 color: inherit;
1828 /* 1 */
1829 font: inherit;
1830 /* 2 */
1831 margin: 0;
1832 /* 3 */ }
1833
1834/**
1835 * Address `overflow` set to `hidden` in IE 8/9/10/11.
1836 */
1837button {
1838 overflow: visible; }
1839
1840/**
1841 * Address inconsistent `text-transform` inheritance for `button` and `select`.
1842 * All other form control elements do not inherit `text-transform` values.
1843 * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
1844 * Correct `select` style inheritance in Firefox.
1845 */
1846button, select {
1847 text-transform: none; }
1848
1849/**
1850 * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
1851 * and `video` controls.
1852 * 2. Correct inability to style clickable `input` types in iOS.
1853 * 3. Improve usability and consistency of cursor style between image-type
1854 * `input` and others.
1855 */
1856/* 1 */
1857html input[type="button"], button, input[type="reset"], input[type="submit"] {
1858 -webkit-appearance: button;
1859 /* 2 */
1860 cursor: pointer;
1861 /* 3 */ }
1862
1863/**
1864 * Re-set default cursor for disabled elements.
1865 */
1866button[disabled], html input[disabled] {
1867 cursor: default; }
1868
1869/**
1870 * Remove inner padding and border in Firefox 4+.
1871 */
1872button::-moz-focus-inner, input::-moz-focus-inner {
1873 border: 0;
1874 padding: 0; }
1875
1876/**
1877 * Address Firefox 4+ setting `line-height` on `input` using `!important` in
1878 * the UA stylesheet.
1879 */
1880input {
1881 line-height: normal; }
1882
1883/**
1884 * It's recommended that you don't attempt to style these elements.
1885 * Firefox's implementation doesn't respect box-sizing, padding, or width.
1886 *
1887 * 1. Address box sizing set to `content-box` in IE 8/9/10.
1888 * 2. Remove excess padding in IE 8/9/10.
1889 */
1890input[type="checkbox"], input[type="radio"] {
1891 box-sizing: border-box;
1892 /* 1 */
1893 padding: 0;
1894 /* 2 */ }
1895
1896/**
1897 * Fix the cursor style for Chrome's increment/decrement buttons. For certain
1898 * `font-size` values of the `input`, it causes the cursor style of the
1899 * decrement button to change from `default` to `text`.
1900 */
1901input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button {
1902 height: auto; }
1903
1904/**
1905 * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
1906 * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
1907 * (include `-moz` to future-proof).
1908 */
1909input[type="search"] {
1910 -webkit-appearance: textfield;
1911 /* 1 */
1912 -moz-box-sizing: content-box;
1913 -webkit-box-sizing: content-box;
1914 /* 2 */
1915 box-sizing: content-box; }
1916
1917/**
1918 * Remove inner padding and search cancel button in Safari and Chrome on OS X.
1919 * Safari (but not Chrome) clips the cancel button when the search input has
1920 * padding (and `textfield` appearance).
1921 */
1922input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
1923 -webkit-appearance: none; }
1924
1925/**
1926 * Define consistent border, margin, and padding.
1927 */
1928fieldset {
1929 border: 1px solid #c0c0c0;
1930 margin: 0 2px;
1931 padding: 0.35em 0.625em 0.75em; }
1932
1933/**
1934 * 1. Correct `color` not being inherited in IE 8/9/10/11.
1935 * 2. Remove padding so people aren't caught out if they zero out fieldsets.
1936 */
1937legend {
1938 border: 0;
1939 /* 1 */
1940 padding: 0;
1941 /* 2 */ }
1942
1943/**
1944 * Remove default vertical scrollbar in IE 8/9/10/11.
1945 */
1946textarea {
1947 overflow: auto; }
1948
1949/**
1950 * Don't inherit the `font-weight` (applied by a rule above).
1951 * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
1952 */
1953optgroup {
1954 font-weight: bold; }
1955
1956/* Tables
1957 ========================================================================== */
1958/**
1959 * Remove most spacing between table cells.
1960 */
1961table {
1962 border-collapse: collapse;
1963 border-spacing: 0; }
1964
1965td, th {
1966 padding: 0; }
1967
1968html {
1969 box-sizing: border-box; }
1970
1971*, *:before, *:after {
1972 box-sizing: inherit; }
1973
1974ul {
1975 list-style-type: none; }
1976
1977a {
1978 color: #039be5;
1979 text-decoration: none;
1980 -webkit-tap-highlight-color: transparent; }
1981
1982.valign-wrapper {
1983 display: -webkit-box;
1984 display: -moz-box;
1985 display: -ms-flexbox;
1986 display: -webkit-flex;
1987 display: flex;
1988 -webkit-flex-align: center;
1989 -ms-flex-align: center;
1990 -webkit-align-items: center;
1991 align-items: center; }
1992 .valign-wrapper .valign {
1993 display: block; }
1994
1995ul {
1996 padding: 0; }
1997 ul li {
1998 list-style-type: none; }
1999
2000.clearfix {
2001 clear: both; }
2002
2003.z-depth-0 {
2004 box-shadow: none !important; }
2005
2006.z-depth-1, nav, .card-panel, .card, .toast, .btn, .btn-large, .btn-floating, .dropdown-content, .collapsible, .side-nav {
2007 box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); }
2008
2009.z-depth-1-half, .btn:hover, .btn-large:hover, .btn-floating:hover {
2010 box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); }
2011
2012.z-depth-2 {
2013 box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); }
2014
2015.z-depth-3 {
2016 box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19); }
2017
2018.z-depth-4, .modal {
2019 box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21); }
2020
2021.z-depth-5 {
2022 box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22); }
2023
2024.hoverable:hover {
2025 transition: box-shadow .25s;
2026 box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); }
2027
2028.divider {
2029 height: 1px;
2030 overflow: hidden;
2031 background-color: #e0e0e0; }
2032
2033blockquote {
2034 margin: 20px 0;
2035 padding-left: 1.5rem;
2036 border-left: 5px solid #ee6e73; }
2037
2038i {
2039 line-height: inherit; }
2040 i.left {
2041 float: left;
2042 margin-right: 15px; }
2043 i.right {
2044 float: right;
2045 margin-left: 15px; }
2046 i.tiny {
2047 font-size: 1rem; }
2048 i.small {
2049 font-size: 2rem; }
2050 i.medium {
2051 font-size: 4rem; }
2052 i.large {
2053 font-size: 6rem; }
2054
2055img.responsive-img, video.responsive-video {
2056 max-width: 100%;
2057 height: auto; }
2058
2059.pagination li {
2060 display: inline-block;
2061 font-size: 1.2rem;
2062 padding: 0 10px;
2063 line-height: 30px;
2064 border-radius: 2px;
2065 text-align: center; }
2066 .pagination li a {
2067 color: #444; }
2068 .pagination li.active a {
2069 color: #fff; }
2070 .pagination li.active {
2071 background-color: #ee6e73; }
2072 .pagination li.disabled a {
2073 cursor: default;
2074 color: #999; }
2075 .pagination li i {
2076 font-size: 2rem; }
2077.pagination li.pages ul li {
2078 display: inline-block;
2079 float: none; }
2080
2081@media only screen and (max-width : 992px) {
2082 .pagination {
2083 width: 100%; }
2084 .pagination li.prev, .pagination li.next {
2085 width: 10%; }
2086 .pagination li.pages {
2087 width: 80%;
2088 overflow: hidden;
2089 white-space: nowrap; } }
2090
2091.parallax-container {
2092 position: relative;
2093 overflow: hidden;
2094 height: 500px; }
2095
2096.parallax {
2097 position: absolute;
2098 top: 0;
2099 left: 0;
2100 right: 0;
2101 bottom: 0;
2102 z-index: -1; }
2103 .parallax img {
2104 display: none;
2105 position: absolute;
2106 left: 50%;
2107 bottom: 0;
2108 min-width: 100%;
2109 min-height: 100%;
2110 -webkit-transform: translate3d(0, 0, 0);
2111 transform: translate3d(0, 0, 0);
2112 transform: translateX(-50%); }
2113
2114.pin-top, .pin-bottom {
2115 position: relative; }
2116
2117.pinned {
2118 position: fixed !important; }
2119
2120/*********************
2121 Transition Classes
2122**********************/
2123ul.staggered-list li {
2124 opacity: 0; }
2125
2126.fade-in {
2127 opacity: 0;
2128 transform-origin: 0 50%; }
2129
2130/*********************
2131 Media Query Classes
2132**********************/
2133@media only screen and (max-width : 600px) {
2134 .hide-on-small-only, .hide-on-small-and-down {
2135 display: none !important; } }
2136
2137@media only screen and (max-width : 992px) {
2138 .hide-on-med-and-down {
2139 display: none !important; } }
2140
2141@media only screen and (min-width : 601px) {
2142 .hide-on-med-and-up {
2143 display: none !important; } }
2144
2145@media only screen and (min-width: 600px) and (max-width: 992px) {
2146 .hide-on-med-only {
2147 display: none !important; } }
2148
2149@media only screen and (min-width : 993px) {
2150 .hide-on-large-only {
2151 display: none !important; } }
2152
2153@media only screen and (min-width : 993px) {
2154 .show-on-large {
2155 display: initial !important; } }
2156
2157@media only screen and (min-width: 600px) and (max-width: 992px) {
2158 .show-on-medium {
2159 display: initial !important; } }
2160
2161@media only screen and (max-width : 600px) {
2162 .show-on-small {
2163 display: initial !important; } }
2164
2165@media only screen and (min-width : 601px) {
2166 .show-on-medium-and-up {
2167 display: initial !important; } }
2168
2169@media only screen and (max-width : 992px) {
2170 .show-on-medium-and-down {
2171 display: initial !important; } }
2172
2173@media only screen and (max-width : 600px) {
2174 .center-on-small-only {
2175 text-align: center; } }
2176
2177footer.page-footer {
2178 margin-top: 20px;
2179 padding-top: 20px;
2180 background-color: #ee6e73; }
2181 footer.page-footer .footer-copyright {
2182 overflow: hidden;
2183 height: 50px;
2184 line-height: 50px;
2185 color: rgba(255, 255, 255, 0.8);
2186 background-color: rgba(51, 51, 51, 0.08); }
2187
2188table, th, td {
2189 border: none; }
2190
2191table {
2192 width: 100%;
2193 display: table; }
2194 table.bordered > thead > tr, table.bordered > tbody > tr {
2195 border-bottom: 1px solid #d0d0d0; }
2196 table.striped > tbody > tr:nth-child(odd) {
2197 background-color: #f2f2f2; }
2198 table.striped > tbody > tr > td {
2199 border-radius: 0px; }
2200 table.highlight > tbody > tr {
2201 -webkit-transition: background-color .25s ease;
2202 -moz-transition: background-color .25s ease;
2203 -o-transition: background-color .25s ease;
2204 -ms-transition: background-color .25s ease;
2205 transition: background-color .25s ease; }
2206 table.highlight > tbody > tr:hover {
2207 background-color: #f2f2f2; }
2208 table.centered thead tr th, table.centered tbody tr td {
2209 text-align: center; }
2210
2211thead {
2212 border-bottom: 1px solid #d0d0d0; }
2213
2214td, th {
2215 padding: 15px 5px;
2216 display: table-cell;
2217 text-align: left;
2218 vertical-align: middle;
2219 border-radius: 2px; }
2220
2221@media only screen and (max-width : 992px) {
2222 table.responsive-table {
2223 width: 100%;
2224 border-collapse: collapse;
2225 border-spacing: 0;
2226 display: block;
2227 position: relative;
2228 /* sort out borders */ }
2229 table.responsive-table th, table.responsive-table td {
2230 margin: 0;
2231 vertical-align: top; }
2232 table.responsive-table th {
2233 text-align: left; }
2234 table.responsive-table thead {
2235 display: block;
2236 float: left; }
2237 table.responsive-table thead tr {
2238 display: block;
2239 padding: 0 10px 0 0; }
2240 table.responsive-table thead tr th::before {
2241 content: "\00a0"; }
2242 table.responsive-table tbody {
2243 display: block;
2244 width: auto;
2245 position: relative;
2246 overflow-x: auto;
2247 white-space: nowrap; }
2248 table.responsive-table tbody tr {
2249 display: inline-block;
2250 vertical-align: top; }
2251 table.responsive-table th {
2252 display: block;
2253 text-align: right; }
2254 table.responsive-table td {
2255 display: block;
2256 min-height: 1.25em;
2257 text-align: left; }
2258 table.responsive-table tr {
2259 padding: 0 10px; }
2260 table.responsive-table thead {
2261 border: 0;
2262 border-right: 1px solid #d0d0d0; }
2263 table.responsive-table.bordered th {
2264 border-bottom: 0;
2265 border-left: 0; }
2266 table.responsive-table.bordered td {
2267 border-left: 0;
2268 border-right: 0;
2269 border-bottom: 0; }
2270 table.responsive-table.bordered tr {
2271 border: 0; }
2272 table.responsive-table.bordered tbody tr {
2273 border-right: 1px solid #d0d0d0; } }
2274
2275.collection {
2276 margin: 0.5rem 0 1rem 0;
2277 border: 1px solid #e0e0e0;
2278 border-radius: 2px;
2279 overflow: hidden;
2280 position: relative; }
2281 .collection .collection-item {
2282 background-color: #fff;
2283 line-height: 1.5rem;
2284 padding: 10px 20px;
2285 margin: 0;
2286 border-bottom: 1px solid #e0e0e0; }
2287 .collection .collection-item.avatar {
2288 min-height: 84px;
2289 padding-left: 72px;
2290 position: relative; }
2291 .collection .collection-item.avatar .circle {
2292 position: absolute;
2293 width: 42px;
2294 height: 42px;
2295 overflow: hidden;
2296 left: 15px;
2297 display: inline-block;
2298 vertical-align: middle; }
2299 .collection .collection-item.avatar i.circle {
2300 font-size: 18px;
2301 line-height: 42px;
2302 color: #fff;
2303 background-color: #999;
2304 text-align: center; }
2305 .collection .collection-item.avatar .title {
2306 font-size: 16px; }
2307 .collection .collection-item.avatar p {
2308 margin: 0; }
2309 .collection .collection-item.avatar .secondary-content {
2310 position: absolute;
2311 top: 16px;
2312 right: 16px; }
2313 .collection .collection-item:last-child {
2314 border-bottom: none; }
2315 .collection .collection-item.active {
2316 background-color: #26a69a;
2317 color: #eafaf9; }
2318 .collection .collection-item.active .secondary-content {
2319 color: #fff; }
2320 .collection a.collection-item {
2321 display: block;
2322 -webkit-transition: 0.25s;
2323 -moz-transition: 0.25s;
2324 -o-transition: 0.25s;
2325 -ms-transition: 0.25s;
2326 transition: 0.25s;
2327 color: #26a69a; }
2328 .collection a.collection-item:not(.active):hover {
2329 background-color: #ddd; }
2330 .collection.with-header .collection-header {
2331 background-color: #fff;
2332 border-bottom: 1px solid #e0e0e0;
2333 padding: 10px 20px; }
2334 .collection.with-header .collection-item {
2335 padding-left: 30px; }
2336 .collection.with-header .collection-item.avatar {
2337 padding-left: 72px; }
2338
2339.secondary-content {
2340 float: right;
2341 color: #26a69a; }
2342
2343.collapsible .collection {
2344 margin: 0;
2345 border: none; }
2346
2347span.badge {
2348 min-width: 3rem;
2349 padding: 0 6px;
2350 text-align: center;
2351 font-size: 1rem;
2352 line-height: inherit;
2353 color: #757575;
2354 position: absolute;
2355 right: 15px;
2356 -webkit-box-sizing: border-box;
2357 -moz-box-sizing: border-box;
2358 box-sizing: border-box; }
2359 span.badge.new {
2360 font-weight: 300;
2361 font-size: 0.8rem;
2362 color: #fff;
2363 background-color: #26a69a;
2364 border-radius: 2px; }
2365 span.badge.new:after {
2366 content: " new"; }
2367
2368nav ul a span.badge {
2369 position: static;
2370 margin-left: 4px;
2371 line-height: 0; }
2372
2373.video-container {
2374 position: relative;
2375 padding-bottom: 56.25%;
2376 padding-top: 30px;
2377 height: 0;
2378 overflow: hidden; }
2379 .video-container.no-controls {
2380 padding-top: 0; }
2381 .video-container iframe, .video-container object, .video-container embed {
2382 position: absolute;
2383 top: 0;
2384 left: 0;
2385 width: 100%;
2386 height: 100%; }
2387
2388.progress {
2389 position: relative;
2390 height: 4px;
2391 display: block;
2392 width: 100%;
2393 background-color: #acece6;
2394 border-radius: 2px;
2395 margin: 0.5rem 0 1rem 0;
2396 overflow: hidden; }
2397 .progress .determinate {
2398 position: absolute;
2399 background-color: inherit;
2400 top: 0;
2401 left: 0;
2402 bottom: 0;
2403 background-color: #26a69a;
2404 -webkit-transition: width .3s linear;
2405 -moz-transition: width .3s linear;
2406 -o-transition: width .3s linear;
2407 -ms-transition: width .3s linear;
2408 transition: width .3s linear; }
2409 .progress .indeterminate {
2410 background-color: #26a69a; }
2411 .progress .indeterminate:before {
2412 content: '';
2413 position: absolute;
2414 background-color: inherit;
2415 top: 0;
2416 left: 0;
2417 bottom: 0;
2418 will-change: left, right;
2419 -webkit-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
2420 -moz-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
2421 -ms-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
2422 -o-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
2423 animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; }
2424 .progress .indeterminate:after {
2425 content: '';
2426 position: absolute;
2427 background-color: inherit;
2428 top: 0;
2429 left: 0;
2430 bottom: 0;
2431 will-change: left, right;
2432 -webkit-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
2433 -moz-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
2434 -ms-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
2435 -o-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
2436 animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
2437 -webkit-animation-delay: 1.15s;
2438 -moz-animation-delay: 1.15s;
2439 -ms-animation-delay: 1.15s;
2440 -o-animation-delay: 1.15s;
2441 animation-delay: 1.15s; }
2442
2443@-webkit-keyframes indeterminate {
2444 0% {
2445 left: -35%;
2446 right: 100%; }
2447
2448 60% {
2449 left: 100%;
2450 right: -90%; }
2451
2452 100% {
2453 left: 100%;
2454 right: -90%; } }
2455
2456@-moz-keyframes indeterminate {
2457 0% {
2458 left: -35%;
2459 right: 100%; }
2460
2461 60% {
2462 left: 100%;
2463 right: -90%; }
2464
2465 100% {
2466 left: 100%;
2467 right: -90%; } }
2468
2469@keyframes indeterminate {
2470 0% {
2471 left: -35%;
2472 right: 100%; }
2473
2474 60% {
2475 left: 100%;
2476 right: -90%; }
2477
2478 100% {
2479 left: 100%;
2480 right: -90%; } }
2481
2482@-webkit-keyframes indeterminate-short {
2483 0% {
2484 left: -200%;
2485 right: 100%; }
2486
2487 60% {
2488 left: 107%;
2489 right: -8%; }
2490
2491 100% {
2492 left: 107%;
2493 right: -8%; } }
2494
2495@-moz-keyframes indeterminate-short {
2496 0% {
2497 left: -200%;
2498 right: 100%; }
2499
2500 60% {
2501 left: 107%;
2502 right: -8%; }
2503
2504 100% {
2505 left: 107%;
2506 right: -8%; } }
2507
2508@keyframes indeterminate-short {
2509 0% {
2510 left: -200%;
2511 right: 100%; }
2512
2513 60% {
2514 left: 107%;
2515 right: -8%; }
2516
2517 100% {
2518 left: 107%;
2519 right: -8%; } }
2520
2521/*******************
2522 Utility Classes
2523*******************/
2524.hide {
2525 display: none !important; }
2526
2527.left-align {
2528 text-align: left; }
2529
2530.right-align {
2531 text-align: right; }
2532
2533.center, .center-align {
2534 text-align: center; }
2535
2536.left {
2537 float: left !important; }
2538
2539.right {
2540 float: right !important; }
2541
2542.no-select, input[type=range], input[type=range] + .thumb {
2543 -webkit-touch-callout: none;
2544 -webkit-user-select: none;
2545 -khtml-user-select: none;
2546 -moz-user-select: none;
2547 -ms-user-select: none;
2548 user-select: none; }
2549
2550.circle {
2551 border-radius: 50%; }
2552
2553.center-block {
2554 display: block;
2555 margin-left: auto;
2556 margin-right: auto; }
2557
2558.truncate {
2559 display: block;
2560 white-space: nowrap;
2561 overflow: hidden;
2562 text-overflow: ellipsis; }
2563
2564.no-padding {
2565 padding: 0 !important; }
2566
2567@font-face {
2568 font-family: "Material-Design-Icons";
2569 src: url("../font/material-design-icons/Material-Design-Icons.eot?#iefix") format("embedded-opentype"), url("../font/material-design-icons/Material-Design-Icons.woff2") format("woff2"), url("../font/material-design-icons/Material-Design-Icons.woff") format("woff"), url("../font/material-design-icons/Material-Design-Icons.ttf") format("truetype"), url("../font/material-design-icons/Material-Design-Icons.svg#Material-Design-Icons") format("svg");
2570 font-weight: normal;
2571 font-style: normal; }
2572
2573[class^="mdi-"], [class*="mdi-"] {
2574 speak: none;
2575 display: inline-block;
2576 font-family: "Material-Design-Icons";
2577 font-style: normal;
2578 font-weight: normal;
2579 font-variant: normal;
2580 text-rendering: auto;
2581 /* Better Font Rendering =========== */
2582 -webkit-font-smoothing: antialiased;
2583 -moz-osx-font-smoothing: grayscale;
2584 transform: translate(0, 0); }
2585 [class^="mdi-"]:before, [class*="mdi-"]:before {
2586 display: inline-block;
2587 speak: none;
2588 text-decoration: inherit; }
2589 [class^="mdi-"].pull-left, [class*="mdi-"].pull-left {
2590 margin-right: .3em; }
2591 [class^="mdi-"].pull-right, [class*="mdi-"].pull-right {
2592 margin-left: .3em; }
2593 [class^="mdi-"].mdi-lg:before, [class^="mdi-"].mdi-lg:after, [class*="mdi-"].mdi-lg:before, [class*="mdi-"].mdi-lg:after {
2594 font-size: 1.33333333em;
2595 line-height: 0.75em;
2596 vertical-align: -15%; }
2597 [class^="mdi-"].mdi-2x:before, [class^="mdi-"].mdi-2x:after, [class*="mdi-"].mdi-2x:before, [class*="mdi-"].mdi-2x:after {
2598 font-size: 2em; }
2599 [class^="mdi-"].mdi-3x:before, [class^="mdi-"].mdi-3x:after, [class*="mdi-"].mdi-3x:before, [class*="mdi-"].mdi-3x:after {
2600 font-size: 3em; }
2601 [class^="mdi-"].mdi-4x:before, [class^="mdi-"].mdi-4x:after, [class*="mdi-"].mdi-4x:before, [class*="mdi-"].mdi-4x:after {
2602 font-size: 4em; }
2603 [class^="mdi-"].mdi-5x:before, [class^="mdi-"].mdi-5x:after, [class*="mdi-"].mdi-5x:before, [class*="mdi-"].mdi-5x:after {
2604 font-size: 5em; }
2605
2606[class^="mdi-device-signal-cellular-"]:after, [class^="mdi-device-battery-"]:after, [class^="mdi-device-battery-charging-"]:after, [class^="mdi-device-signal-cellular-connected-no-internet-"]:after, [class^="mdi-device-signal-wifi-"]:after, [class^="mdi-device-signal-wifi-statusbar-not-connected"]:after, .mdi-device-network-wifi:after {
2607 opacity: .3;
2608 position: absolute;
2609 left: 0;
2610 top: 0;
2611 z-index: 1;
2612 display: inline-block;
2613 speak: none;
2614 text-decoration: inherit; }
2615
2616[class^="mdi-device-signal-cellular-"]:after {
2617 content: "\e758"; }
2618
2619[class^="mdi-device-battery-"]:after {
2620 content: "\e735"; }
2621
2622[class^="mdi-device-battery-charging-"]:after {
2623 content: "\e733"; }
2624
2625[class^="mdi-device-signal-cellular-connected-no-internet-"]:after {
2626 content: "\e75d"; }
2627
2628[class^="mdi-device-signal-wifi-"]:after, .mdi-device-network-wifi:after {
2629 content: "\e765"; }
2630
2631[class^="mdi-device-signal-wifi-statusbasr-not-connected"]:after {
2632 content: "\e8f7"; }
2633
2634.mdi-device-signal-cellular-off:after, .mdi-device-signal-cellular-null:after, .mdi-device-signal-cellular-no-sim:after, .mdi-device-signal-wifi-off:after, .mdi-device-signal-wifi-4-bar:after, .mdi-device-signal-cellular-4-bar:after, .mdi-device-battery-alert:after, .mdi-device-signal-cellular-connected-no-internet-4-bar:after, .mdi-device-battery-std:after, .mdi-device-battery-full .mdi-device-battery-unknown:after {
2635 content: ""; }
2636
2637.mdi-fw {
2638 width: 1.28571429em;
2639 text-align: center; }
2640
2641.mdi-ul {
2642 padding-left: 0;
2643 margin-left: 2.14285714em;
2644 list-style-type: none; }
2645
2646.mdi-ul > li {
2647 position: relative; }
2648
2649.mdi-li {
2650 position: absolute;
2651 left: -2.14285714em;
2652 width: 2.14285714em;
2653 top: 0.14285714em;
2654 text-align: center; }
2655
2656.mdi-li.mdi-lg {
2657 left: -1.85714286em; }
2658
2659.mdi-border {
2660 padding: .2em .25em .15em;
2661 border: solid 0.08em #eeeeee;
2662 border-radius: .1em; }
2663
2664.mdi-spin {
2665 -webkit-animation: mdi-spin 2s infinite linear;
2666 animation: mdi-spin 2s infinite linear;
2667 -webkit-transform-origin: 50% 50%;
2668 -moz-transform-origin: 50% 50%;
2669 -o-transform-origin: 50% 50%;
2670 transform-origin: 50% 50%; }
2671
2672.mdi-pulse {
2673 -webkit-animation: mdi-spin 1s steps(8) infinite;
2674 animation: mdi-spin 1s steps(8) infinite;
2675 -webkit-transform-origin: 50% 50%;
2676 -moz-transform-origin: 50% 50%;
2677 -o-transform-origin: 50% 50%;
2678 transform-origin: 50% 50%; }
2679
2680@-webkit-keyframes mdi-spin {
2681 0% {
2682 -webkit-transform: rotate(0deg);
2683 transform: rotate(0deg); }
2684
2685 100% {
2686 -webkit-transform: rotate(359deg);
2687 transform: rotate(359deg); } }
2688
2689@keyframes mdi-spin {
2690 0% {
2691 -webkit-transform: rotate(0deg);
2692 transform: rotate(0deg); }
2693
2694 100% {
2695 -webkit-transform: rotate(359deg);
2696 transform: rotate(359deg); } }
2697
2698.mdi-rotate-90 {
2699 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
2700 -webkit-transform: rotate(90deg);
2701 -ms-transform: rotate(90deg);
2702 transform: rotate(90deg); }
2703
2704.mdi-rotate-180 {
2705 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
2706 -webkit-transform: rotate(180deg);
2707 -ms-transform: rotate(180deg);
2708 transform: rotate(180deg); }
2709
2710.mdi-rotate-270 {
2711 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
2712 -webkit-transform: rotate(270deg);
2713 -ms-transform: rotate(270deg);
2714 transform: rotate(270deg); }
2715
2716.mdi-flip-horizontal {
2717 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
2718 -webkit-transform: scale(-1, 1);
2719 -ms-transform: scale(-1, 1);
2720 transform: scale(-1, 1); }
2721
2722.mdi-flip-vertical {
2723 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
2724 -webkit-transform: scale(1, -1);
2725 -ms-transform: scale(1, -1);
2726 transform: scale(1, -1); }
2727
2728:root .mdi-rotate-90, :root .mdi-rotate-180, :root .mdi-rotate-270, :root .mdi-flip-horizontal, :root .mdi-flip-vertical {
2729 filter: none; }
2730
2731.mdi-stack {
2732 position: relative;
2733 display: inline-block;
2734 width: 2em;
2735 height: 2em;
2736 line-height: 2em;
2737 vertical-align: middle; }
2738
2739.mdi-stack-1x, .mdi-stack-2x {
2740 position: absolute;
2741 left: 0;
2742 width: 100%;
2743 text-align: center; }
2744
2745.mdi-stack-1x {
2746 line-height: inherit; }
2747
2748.mdi-stack-2x {
2749 font-size: 2em; }
2750
2751.mdi-inverse {
2752 color: #ffffff; }
2753
2754/* Start Icons */
2755.mdi-action-3d-rotation:before {
2756 content: "\e600"; }
2757
2758.mdi-action-accessibility:before {
2759 content: "\e601"; }
2760
2761.mdi-action-account-balance-wallet:before {
2762 content: "\e602"; }
2763
2764.mdi-action-account-balance:before {
2765 content: "\e603"; }
2766
2767.mdi-action-account-box:before {
2768 content: "\e604"; }
2769
2770.mdi-action-account-child:before {
2771 content: "\e605"; }
2772
2773.mdi-action-account-circle:before {
2774 content: "\e606"; }
2775
2776.mdi-action-add-shopping-cart:before {
2777 content: "\e607"; }
2778
2779.mdi-action-alarm-add:before {
2780 content: "\e608"; }
2781
2782.mdi-action-alarm-off:before {
2783 content: "\e609"; }
2784
2785.mdi-action-alarm-on:before {
2786 content: "\e60a"; }
2787
2788.mdi-action-alarm:before {
2789 content: "\e60b"; }
2790
2791.mdi-action-android:before {
2792 content: "\e60c"; }
2793
2794.mdi-action-announcement:before {
2795 content: "\e60d"; }
2796
2797.mdi-action-aspect-ratio:before {
2798 content: "\e60e"; }
2799
2800.mdi-action-assessment:before {
2801 content: "\e60f"; }
2802
2803.mdi-action-assignment-ind:before {
2804 content: "\e610"; }
2805
2806.mdi-action-assignment-late:before {
2807 content: "\e611"; }
2808
2809.mdi-action-assignment-return:before {
2810 content: "\e612"; }
2811
2812.mdi-action-assignment-returned:before {
2813 content: "\e613"; }
2814
2815.mdi-action-assignment-turned-in:before {
2816 content: "\e614"; }
2817
2818.mdi-action-assignment:before {
2819 content: "\e615"; }
2820
2821.mdi-action-autorenew:before {
2822 content: "\e616"; }
2823
2824.mdi-action-backup:before {
2825 content: "\e617"; }
2826
2827.mdi-action-book:before {
2828 content: "\e618"; }
2829
2830.mdi-action-bookmark-outline:before {
2831 content: "\e619"; }
2832
2833.mdi-action-bookmark:before {
2834 content: "\e61a"; }
2835
2836.mdi-action-bug-report:before {
2837 content: "\e61b"; }
2838
2839.mdi-action-cached:before {
2840 content: "\e61c"; }
2841
2842.mdi-action-check-circle:before {
2843 content: "\e61d"; }
2844
2845.mdi-action-class:before {
2846 content: "\e61e"; }
2847
2848.mdi-action-credit-card:before {
2849 content: "\e61f"; }
2850
2851.mdi-action-dashboard:before {
2852 content: "\e620"; }
2853
2854.mdi-action-delete:before {
2855 content: "\e621"; }
2856
2857.mdi-action-description:before {
2858 content: "\e622"; }
2859
2860.mdi-action-dns:before {
2861 content: "\e623"; }
2862
2863.mdi-action-done-all:before {
2864 content: "\e624"; }
2865
2866.mdi-action-done:before {
2867 content: "\e625"; }
2868
2869.mdi-action-event:before {
2870 content: "\e626"; }
2871
2872.mdi-action-exit-to-app:before {
2873 content: "\e627"; }
2874
2875.mdi-action-explore:before {
2876 content: "\e628"; }
2877
2878.mdi-action-extension:before {
2879 content: "\e629"; }
2880
2881.mdi-action-face-unlock:before {
2882 content: "\e62a"; }
2883
2884.mdi-action-favorite-outline:before {
2885 content: "\e62b"; }
2886
2887.mdi-action-favorite:before {
2888 content: "\e62c"; }
2889
2890.mdi-action-find-in-page:before {
2891 content: "\e62d"; }
2892
2893.mdi-action-find-replace:before {
2894 content: "\e62e"; }
2895
2896.mdi-action-flip-to-back:before {
2897 content: "\e62f"; }
2898
2899.mdi-action-flip-to-front:before {
2900 content: "\e630"; }
2901
2902.mdi-action-get-app:before {
2903 content: "\e631"; }
2904
2905.mdi-action-grade:before {
2906 content: "\e632"; }
2907
2908.mdi-action-group-work:before {
2909 content: "\e633"; }
2910
2911.mdi-action-help:before {
2912 content: "\e634"; }
2913
2914.mdi-action-highlight-remove:before {
2915 content: "\e635"; }
2916
2917.mdi-action-history:before {
2918 content: "\e636"; }
2919
2920.mdi-action-home:before {
2921 content: "\e637"; }
2922
2923.mdi-action-https:before {
2924 content: "\e638"; }
2925
2926.mdi-action-info-outline:before {
2927 content: "\e639"; }
2928
2929.mdi-action-info:before {
2930 content: "\e63a"; }
2931
2932.mdi-action-input:before {
2933 content: "\e63b"; }
2934
2935.mdi-action-invert-colors:before {
2936 content: "\e63c"; }
2937
2938.mdi-action-label-outline:before {
2939 content: "\e63d"; }
2940
2941.mdi-action-label:before {
2942 content: "\e63e"; }
2943
2944.mdi-action-language:before {
2945 content: "\e63f"; }
2946
2947.mdi-action-launch:before {
2948 content: "\e640"; }
2949
2950.mdi-action-list:before {
2951 content: "\e641"; }
2952
2953.mdi-action-lock-open:before {
2954 content: "\e642"; }
2955
2956.mdi-action-lock-outline:before {
2957 content: "\e643"; }
2958
2959.mdi-action-lock:before {
2960 content: "\e644"; }
2961
2962.mdi-action-loyalty:before {
2963 content: "\e645"; }
2964
2965.mdi-action-markunread-mailbox:before {
2966 content: "\e646"; }
2967
2968.mdi-action-note-add:before {
2969 content: "\e647"; }
2970
2971.mdi-action-open-in-browser:before {
2972 content: "\e648"; }
2973
2974.mdi-action-open-in-new:before {
2975 content: "\e649"; }
2976
2977.mdi-action-open-with:before {
2978 content: "\e64a"; }
2979
2980.mdi-action-pageview:before {
2981 content: "\e64b"; }
2982
2983.mdi-action-payment:before {
2984 content: "\e64c"; }
2985
2986.mdi-action-perm-camera-mic:before {
2987 content: "\e64d"; }
2988
2989.mdi-action-perm-contact-cal:before {
2990 content: "\e64e"; }
2991
2992.mdi-action-perm-data-setting:before {
2993 content: "\e64f"; }
2994
2995.mdi-action-perm-device-info:before {
2996 content: "\e650"; }
2997
2998.mdi-action-perm-identity:before {
2999 content: "\e651"; }
3000
3001.mdi-action-perm-media:before {
3002 content: "\e652"; }
3003
3004.mdi-action-perm-phone-msg:before {
3005 content: "\e653"; }
3006
3007.mdi-action-perm-scan-wifi:before {
3008 content: "\e654"; }
3009
3010.mdi-action-picture-in-picture:before {
3011 content: "\e655"; }
3012
3013.mdi-action-polymer:before {
3014 content: "\e656"; }
3015
3016.mdi-action-print:before {
3017 content: "\e657"; }
3018
3019.mdi-action-query-builder:before {
3020 content: "\e658"; }
3021
3022.mdi-action-question-answer:before {
3023 content: "\e659"; }
3024
3025.mdi-action-receipt:before {
3026 content: "\e65a"; }
3027
3028.mdi-action-redeem:before {
3029 content: "\e65b"; }
3030
3031.mdi-action-reorder:before {
3032 content: "\e65c"; }
3033
3034.mdi-action-report-problem:before {
3035 content: "\e65d"; }
3036
3037.mdi-action-restore:before {
3038 content: "\e65e"; }
3039
3040.mdi-action-room:before {
3041 content: "\e65f"; }
3042
3043.mdi-action-schedule:before {
3044 content: "\e660"; }
3045
3046.mdi-action-search:before {
3047 content: "\e661"; }
3048
3049.mdi-action-settings-applications:before {
3050 content: "\e662"; }
3051
3052.mdi-action-settings-backup-restore:before {
3053 content: "\e663"; }
3054
3055.mdi-action-settings-bluetooth:before {
3056 content: "\e664"; }
3057
3058.mdi-action-settings-cell:before {
3059 content: "\e665"; }
3060
3061.mdi-action-settings-display:before {
3062 content: "\e666"; }
3063
3064.mdi-action-settings-ethernet:before {
3065 content: "\e667"; }
3066
3067.mdi-action-settings-input-antenna:before {
3068 content: "\e668"; }
3069
3070.mdi-action-settings-input-component:before {
3071 content: "\e669"; }
3072
3073.mdi-action-settings-input-composite:before {
3074 content: "\e66a"; }
3075
3076.mdi-action-settings-input-hdmi:before {
3077 content: "\e66b"; }
3078
3079.mdi-action-settings-input-svideo:before {
3080 content: "\e66c"; }
3081
3082.mdi-action-settings-overscan:before {
3083 content: "\e66d"; }
3084
3085.mdi-action-settings-phone:before {
3086 content: "\e66e"; }
3087
3088.mdi-action-settings-power:before {
3089 content: "\e66f"; }
3090
3091.mdi-action-settings-remote:before {
3092 content: "\e670"; }
3093
3094.mdi-action-settings-voice:before {
3095 content: "\e671"; }
3096
3097.mdi-action-settings:before {
3098 content: "\e672"; }
3099
3100.mdi-action-shop-two:before {
3101 content: "\e673"; }
3102
3103.mdi-action-shop:before {
3104 content: "\e674"; }
3105
3106.mdi-action-shopping-basket:before {
3107 content: "\e675"; }
3108
3109.mdi-action-shopping-cart:before {
3110 content: "\e676"; }
3111
3112.mdi-action-speaker-notes:before {
3113 content: "\e677"; }
3114
3115.mdi-action-spellcheck:before {
3116 content: "\e678"; }
3117
3118.mdi-action-star-rate:before {
3119 content: "\e679"; }
3120
3121.mdi-action-stars:before {
3122 content: "\e67a"; }
3123
3124.mdi-action-store:before {
3125 content: "\e67b"; }
3126
3127.mdi-action-subject:before {
3128 content: "\e67c"; }
3129
3130.mdi-action-supervisor-account:before {
3131 content: "\e67d"; }
3132
3133.mdi-action-swap-horiz:before {
3134 content: "\e67e"; }
3135
3136.mdi-action-swap-vert-circle:before {
3137 content: "\e67f"; }
3138
3139.mdi-action-swap-vert:before {
3140 content: "\e680"; }
3141
3142.mdi-action-system-update-tv:before {
3143 content: "\e681"; }
3144
3145.mdi-action-tab-unselected:before {
3146 content: "\e682"; }
3147
3148.mdi-action-tab:before {
3149 content: "\e683"; }
3150
3151.mdi-action-theaters:before {
3152 content: "\e684"; }
3153
3154.mdi-action-thumb-down:before {
3155 content: "\e685"; }
3156
3157.mdi-action-thumb-up:before {
3158 content: "\e686"; }
3159
3160.mdi-action-thumbs-up-down:before {
3161 content: "\e687"; }
3162
3163.mdi-action-toc:before {
3164 content: "\e688"; }
3165
3166.mdi-action-today:before {
3167 content: "\e689"; }
3168
3169.mdi-action-track-changes:before {
3170 content: "\e68a"; }
3171
3172.mdi-action-translate:before {
3173 content: "\e68b"; }
3174
3175.mdi-action-trending-down:before {
3176 content: "\e68c"; }
3177
3178.mdi-action-trending-neutral:before {
3179 content: "\e68d"; }
3180
3181.mdi-action-trending-up:before {
3182 content: "\e68e"; }
3183
3184.mdi-action-turned-in-not:before {
3185 content: "\e68f"; }
3186
3187.mdi-action-turned-in:before {
3188 content: "\e690"; }
3189
3190.mdi-action-verified-user:before {
3191 content: "\e691"; }
3192
3193.mdi-action-view-agenda:before {
3194 content: "\e692"; }
3195
3196.mdi-action-view-array:before {
3197 content: "\e693"; }
3198
3199.mdi-action-view-carousel:before {
3200 content: "\e694"; }
3201
3202.mdi-action-view-column:before {
3203 content: "\e695"; }
3204
3205.mdi-action-view-day:before {
3206 content: "\e696"; }
3207
3208.mdi-action-view-headline:before {
3209 content: "\e697"; }
3210
3211.mdi-action-view-list:before {
3212 content: "\e698"; }
3213
3214.mdi-action-view-module:before {
3215 content: "\e699"; }
3216
3217.mdi-action-view-quilt:before {
3218 content: "\e69a"; }
3219
3220.mdi-action-view-stream:before {
3221 content: "\e69b"; }
3222
3223.mdi-action-view-week:before {
3224 content: "\e69c"; }
3225
3226.mdi-action-visibility-off:before {
3227 content: "\e69d"; }
3228
3229.mdi-action-visibility:before {
3230 content: "\e69e"; }
3231
3232.mdi-action-wallet-giftcard:before {
3233 content: "\e69f"; }
3234
3235.mdi-action-wallet-membership:before {
3236 content: "\e6a0"; }
3237
3238.mdi-action-wallet-travel:before {
3239 content: "\e6a1"; }
3240
3241.mdi-action-work:before {
3242 content: "\e6a2"; }
3243
3244.mdi-alert-error:before {
3245 content: "\e6a3"; }
3246
3247.mdi-alert-warning:before {
3248 content: "\e6a4"; }
3249
3250.mdi-av-album:before {
3251 content: "\e6a5"; }
3252
3253.mdi-av-closed-caption:before {
3254 content: "\e6a6"; }
3255
3256.mdi-av-equalizer:before {
3257 content: "\e6a7"; }
3258
3259.mdi-av-explicit:before {
3260 content: "\e6a8"; }
3261
3262.mdi-av-fast-forward:before {
3263 content: "\e6a9"; }
3264
3265.mdi-av-fast-rewind:before {
3266 content: "\e6aa"; }
3267
3268.mdi-av-games:before {
3269 content: "\e6ab"; }
3270
3271.mdi-av-hearing:before {
3272 content: "\e6ac"; }
3273
3274.mdi-av-high-quality:before {
3275 content: "\e6ad"; }
3276
3277.mdi-av-loop:before {
3278 content: "\e6ae"; }
3279
3280.mdi-av-mic-none:before {
3281 content: "\e6af"; }
3282
3283.mdi-av-mic-off:before {
3284 content: "\e6b0"; }
3285
3286.mdi-av-mic:before {
3287 content: "\e6b1"; }
3288
3289.mdi-av-movie:before {
3290 content: "\e6b2"; }
3291
3292.mdi-av-my-library-add:before {
3293 content: "\e6b3"; }
3294
3295.mdi-av-my-library-books:before {
3296 content: "\e6b4"; }
3297
3298.mdi-av-my-library-music:before {
3299 content: "\e6b5"; }
3300
3301.mdi-av-new-releases:before {
3302 content: "\e6b6"; }
3303
3304.mdi-av-not-interested:before {
3305 content: "\e6b7"; }
3306
3307.mdi-av-pause-circle-fill:before {
3308 content: "\e6b8"; }
3309
3310.mdi-av-pause-circle-outline:before {
3311 content: "\e6b9"; }
3312
3313.mdi-av-pause:before {
3314 content: "\e6ba"; }
3315
3316.mdi-av-play-arrow:before {
3317 content: "\e6bb"; }
3318
3319.mdi-av-play-circle-fill:before {
3320 content: "\e6bc"; }
3321
3322.mdi-av-play-circle-outline:before {
3323 content: "\e6bd"; }
3324
3325.mdi-av-play-shopping-bag:before {
3326 content: "\e6be"; }
3327
3328.mdi-av-playlist-add:before {
3329 content: "\e6bf"; }
3330
3331.mdi-av-queue-music:before {
3332 content: "\e6c0"; }
3333
3334.mdi-av-queue:before {
3335 content: "\e6c1"; }
3336
3337.mdi-av-radio:before {
3338 content: "\e6c2"; }
3339
3340.mdi-av-recent-actors:before {
3341 content: "\e6c3"; }
3342
3343.mdi-av-repeat-one:before {
3344 content: "\e6c4"; }
3345
3346.mdi-av-repeat:before {
3347 content: "\e6c5"; }
3348
3349.mdi-av-replay:before {
3350 content: "\e6c6"; }
3351
3352.mdi-av-shuffle:before {
3353 content: "\e6c7"; }
3354
3355.mdi-av-skip-next:before {
3356 content: "\e6c8"; }
3357
3358.mdi-av-skip-previous:before {
3359 content: "\e6c9"; }
3360
3361.mdi-av-snooze:before {
3362 content: "\e6ca"; }
3363
3364.mdi-av-stop:before {
3365 content: "\e6cb"; }
3366
3367.mdi-av-subtitles:before {
3368 content: "\e6cc"; }
3369
3370.mdi-av-surround-sound:before {
3371 content: "\e6cd"; }
3372
3373.mdi-av-timer:before {
3374 content: "\e6ce"; }
3375
3376.mdi-av-video-collection:before {
3377 content: "\e6cf"; }
3378
3379.mdi-av-videocam-off:before {
3380 content: "\e6d0"; }
3381
3382.mdi-av-videocam:before {
3383 content: "\e6d1"; }
3384
3385.mdi-av-volume-down:before {
3386 content: "\e6d2"; }
3387
3388.mdi-av-volume-mute:before {
3389 content: "\e6d3"; }
3390
3391.mdi-av-volume-off:before {
3392 content: "\e6d4"; }
3393
3394.mdi-av-volume-up:before {
3395 content: "\e6d5"; }
3396
3397.mdi-av-web:before {
3398 content: "\e6d6"; }
3399
3400.mdi-communication-business:before {
3401 content: "\e6d7"; }
3402
3403.mdi-communication-call-end:before {
3404 content: "\e6d8"; }
3405
3406.mdi-communication-call-made:before {
3407 content: "\e6d9"; }
3408
3409.mdi-communication-call-merge:before {
3410 content: "\e6da"; }
3411
3412.mdi-communication-call-missed:before {
3413 content: "\e6db"; }
3414
3415.mdi-communication-call-received:before {
3416 content: "\e6dc"; }
3417
3418.mdi-communication-call-split:before {
3419 content: "\e6dd"; }
3420
3421.mdi-communication-call:before {
3422 content: "\e6de"; }
3423
3424.mdi-communication-chat:before {
3425 content: "\e6df"; }
3426
3427.mdi-communication-clear-all:before {
3428 content: "\e6e0"; }
3429
3430.mdi-communication-comment:before {
3431 content: "\e6e1"; }
3432
3433.mdi-communication-contacts:before {
3434 content: "\e6e2"; }
3435
3436.mdi-communication-dialer-sip:before {
3437 content: "\e6e3"; }
3438
3439.mdi-communication-dialpad:before {
3440 content: "\e6e4"; }
3441
3442.mdi-communication-dnd-on:before {
3443 content: "\e6e5"; }
3444
3445.mdi-communication-email:before {
3446 content: "\e6e6"; }
3447
3448.mdi-communication-forum:before {
3449 content: "\e6e7"; }
3450
3451.mdi-communication-import-export:before {
3452 content: "\e6e8"; }
3453
3454.mdi-communication-invert-colors-off:before {
3455 content: "\e6e9"; }
3456
3457.mdi-communication-invert-colors-on:before {
3458 content: "\e6ea"; }
3459
3460.mdi-communication-live-help:before {
3461 content: "\e6eb"; }
3462
3463.mdi-communication-location-off:before {
3464 content: "\e6ec"; }
3465
3466.mdi-communication-location-on:before {
3467 content: "\e6ed"; }
3468
3469.mdi-communication-message:before {
3470 content: "\e6ee"; }
3471
3472.mdi-communication-messenger:before {
3473 content: "\e6ef"; }
3474
3475.mdi-communication-no-sim:before {
3476 content: "\e6f0"; }
3477
3478.mdi-communication-phone:before {
3479 content: "\e6f1"; }
3480
3481.mdi-communication-portable-wifi-off:before {
3482 content: "\e6f2"; }
3483
3484.mdi-communication-quick-contacts-dialer:before {
3485 content: "\e6f3"; }
3486
3487.mdi-communication-quick-contacts-mail:before {
3488 content: "\e6f4"; }
3489
3490.mdi-communication-ring-volume:before {
3491 content: "\e6f5"; }
3492
3493.mdi-communication-stay-current-landscape:before {
3494 content: "\e6f6"; }
3495
3496.mdi-communication-stay-current-portrait:before {
3497 content: "\e6f7"; }
3498
3499.mdi-communication-stay-primary-landscape:before {
3500 content: "\e6f8"; }
3501
3502.mdi-communication-stay-primary-portrait:before {
3503 content: "\e6f9"; }
3504
3505.mdi-communication-swap-calls:before {
3506 content: "\e6fa"; }
3507
3508.mdi-communication-textsms:before {
3509 content: "\e6fb"; }
3510
3511.mdi-communication-voicemail:before {
3512 content: "\e6fc"; }
3513
3514.mdi-communication-vpn-key:before {
3515 content: "\e6fd"; }
3516
3517.mdi-content-add-box:before {
3518 content: "\e6fe"; }
3519
3520.mdi-content-add-circle-outline:before {
3521 content: "\e6ff"; }
3522
3523.mdi-content-add-circle:before {
3524 content: "\e700"; }
3525
3526.mdi-content-add:before {
3527 content: "\e701"; }
3528
3529.mdi-content-archive:before {
3530 content: "\e702"; }
3531
3532.mdi-content-backspace:before {
3533 content: "\e703"; }
3534
3535.mdi-content-block:before {
3536 content: "\e704"; }
3537
3538.mdi-content-clear:before {
3539 content: "\e705"; }
3540
3541.mdi-content-content-copy:before {
3542 content: "\e706"; }
3543
3544.mdi-content-content-cut:before {
3545 content: "\e707"; }
3546
3547.mdi-content-content-paste:before {
3548 content: "\e708"; }
3549
3550.mdi-content-create:before {
3551 content: "\e709"; }
3552
3553.mdi-content-drafts:before {
3554 content: "\e70a"; }
3555
3556.mdi-content-filter-list:before {
3557 content: "\e70b"; }
3558
3559.mdi-content-flag:before {
3560 content: "\e70c"; }
3561
3562.mdi-content-forward:before {
3563 content: "\e70d"; }
3564
3565.mdi-content-gesture:before {
3566 content: "\e70e"; }
3567
3568.mdi-content-inbox:before {
3569 content: "\e70f"; }
3570
3571.mdi-content-link:before {
3572 content: "\e710"; }
3573
3574.mdi-content-mail:before {
3575 content: "\e711"; }
3576
3577.mdi-content-markunread:before {
3578 content: "\e712"; }
3579
3580.mdi-content-redo:before {
3581 content: "\e713"; }
3582
3583.mdi-content-remove-circle-outline:before {
3584 content: "\e714"; }
3585
3586.mdi-content-remove-circle:before {
3587 content: "\e715"; }
3588
3589.mdi-content-remove:before {
3590 content: "\e716"; }
3591
3592.mdi-content-reply-all:before {
3593 content: "\e717"; }
3594
3595.mdi-content-reply:before {
3596 content: "\e718"; }
3597
3598.mdi-content-report:before {
3599 content: "\e719"; }
3600
3601.mdi-content-save:before {
3602 content: "\e71a"; }
3603
3604.mdi-content-select-all:before {
3605 content: "\e71b"; }
3606
3607.mdi-content-send:before {
3608 content: "\e71c"; }
3609
3610.mdi-content-sort:before {
3611 content: "\e71d"; }
3612
3613.mdi-content-text-format:before {
3614 content: "\e71e"; }
3615
3616.mdi-content-undo:before {
3617 content: "\e71f"; }
3618
3619.mdi-editor-attach-file:before {
3620 content: "\e776"; }
3621
3622.mdi-editor-attach-money:before {
3623 content: "\e777"; }
3624
3625.mdi-editor-border-all:before {
3626 content: "\e778"; }
3627
3628.mdi-editor-border-bottom:before {
3629 content: "\e779"; }
3630
3631.mdi-editor-border-clear:before {
3632 content: "\e77a"; }
3633
3634.mdi-editor-border-color:before {
3635 content: "\e77b"; }
3636
3637.mdi-editor-border-horizontal:before {
3638 content: "\e77c"; }
3639
3640.mdi-editor-border-inner:before {
3641 content: "\e77d"; }
3642
3643.mdi-editor-border-left:before {
3644 content: "\e77e"; }
3645
3646.mdi-editor-border-outer:before {
3647 content: "\e77f"; }
3648
3649.mdi-editor-border-right:before {
3650 content: "\e780"; }
3651
3652.mdi-editor-border-style:before {
3653 content: "\e781"; }
3654
3655.mdi-editor-border-top:before {
3656 content: "\e782"; }
3657
3658.mdi-editor-border-vertical:before {
3659 content: "\e783"; }
3660
3661.mdi-editor-format-align-center:before {
3662 content: "\e784"; }
3663
3664.mdi-editor-format-align-justify:before {
3665 content: "\e785"; }
3666
3667.mdi-editor-format-align-left:before {
3668 content: "\e786"; }
3669
3670.mdi-editor-format-align-right:before {
3671 content: "\e787"; }
3672
3673.mdi-editor-format-bold:before {
3674 content: "\e788"; }
3675
3676.mdi-editor-format-clear:before {
3677 content: "\e789"; }
3678
3679.mdi-editor-format-color-fill:before {
3680 content: "\e78a"; }
3681
3682.mdi-editor-format-color-reset:before {
3683 content: "\e78b"; }
3684
3685.mdi-editor-format-color-text:before {
3686 content: "\e78c"; }
3687
3688.mdi-editor-format-indent-decrease:before {
3689 content: "\e78d"; }
3690
3691.mdi-editor-format-indent-increase:before {
3692 content: "\e78e"; }
3693
3694.mdi-editor-format-italic:before {
3695 content: "\e78f"; }
3696
3697.mdi-editor-format-line-spacing:before {
3698 content: "\e790"; }
3699
3700.mdi-editor-format-list-bulleted:before {
3701 content: "\e791"; }
3702
3703.mdi-editor-format-list-numbered:before {
3704 content: "\e792"; }
3705
3706.mdi-editor-format-paint:before {
3707 content: "\e793"; }
3708
3709.mdi-editor-format-quote:before {
3710 content: "\e794"; }
3711
3712.mdi-editor-format-size:before {
3713 content: "\e795"; }
3714
3715.mdi-editor-format-strikethrough:before {
3716 content: "\e796"; }
3717
3718.mdi-editor-format-textdirection-l-to-r:before {
3719 content: "\e797"; }
3720
3721.mdi-editor-format-textdirection-r-to-l:before {
3722 content: "\e798"; }
3723
3724.mdi-editor-format-underline:before {
3725 content: "\e799"; }
3726
3727.mdi-editor-functions:before {
3728 content: "\e79a"; }
3729
3730.mdi-editor-insert-chart:before {
3731 content: "\e79b"; }
3732
3733.mdi-editor-insert-comment:before {
3734 content: "\e79c"; }
3735
3736.mdi-editor-insert-drive-file:before {
3737 content: "\e79d"; }
3738
3739.mdi-editor-insert-emoticon:before {
3740 content: "\e79e"; }
3741
3742.mdi-editor-insert-invitation:before {
3743 content: "\e79f"; }
3744
3745.mdi-editor-insert-link:before {
3746 content: "\e7a0"; }
3747
3748.mdi-editor-insert-photo:before {
3749 content: "\e7a1"; }
3750
3751.mdi-editor-merge-type:before {
3752 content: "\e7a2"; }
3753
3754.mdi-editor-mode-comment:before {
3755 content: "\e7a3"; }
3756
3757.mdi-editor-mode-edit:before {
3758 content: "\e7a4"; }
3759
3760.mdi-editor-publish:before {
3761 content: "\e7a5"; }
3762
3763.mdi-editor-vertical-align-bottom:before {
3764 content: "\e7a6"; }
3765
3766.mdi-editor-vertical-align-center:before {
3767 content: "\e7a7"; }
3768
3769.mdi-editor-vertical-align-top:before {
3770 content: "\e7a8"; }
3771
3772.mdi-editor-wrap-text:before {
3773 content: "\e7a9"; }
3774
3775.mdi-file-attachment:before {
3776 content: "\e7aa"; }
3777
3778.mdi-file-cloud-circle:before {
3779 content: "\e7ab"; }
3780
3781.mdi-file-cloud-done:before {
3782 content: "\e7ac"; }
3783
3784.mdi-file-cloud-download:before {
3785 content: "\e7ad"; }
3786
3787.mdi-file-cloud-off:before {
3788 content: "\e7ae"; }
3789
3790.mdi-file-cloud-queue:before {
3791 content: "\e7af"; }
3792
3793.mdi-file-cloud-upload:before {
3794 content: "\e7b0"; }
3795
3796.mdi-file-cloud:before {
3797 content: "\e7b1"; }
3798
3799.mdi-file-file-download:before {
3800 content: "\e7b2"; }
3801
3802.mdi-file-file-upload:before {
3803 content: "\e7b3"; }
3804
3805.mdi-file-folder-open:before {
3806 content: "\e7b4"; }
3807
3808.mdi-file-folder-shared:before {
3809 content: "\e7b5"; }
3810
3811.mdi-file-folder:before {
3812 content: "\e7b6"; }
3813
3814.mdi-device-access-alarm:before {
3815 content: "\e720"; }
3816
3817.mdi-device-access-alarms:before {
3818 content: "\e721"; }
3819
3820.mdi-device-access-time:before {
3821 content: "\e722"; }
3822
3823.mdi-device-add-alarm:before {
3824 content: "\e723"; }
3825
3826.mdi-device-airplanemode-off:before {
3827 content: "\e724"; }
3828
3829.mdi-device-airplanemode-on:before {
3830 content: "\e725"; }
3831
3832.mdi-device-battery-20:before {
3833 content: "\e726"; }
3834
3835.mdi-device-battery-30:before {
3836 content: "\e727"; }
3837
3838.mdi-device-battery-50:before {
3839 content: "\e728"; }
3840
3841.mdi-device-battery-60:before {
3842 content: "\e729"; }
3843
3844.mdi-device-battery-80:before {
3845 content: "\e72a"; }
3846
3847.mdi-device-battery-90:before {
3848 content: "\e72b"; }
3849
3850.mdi-device-battery-alert:before {
3851 content: "\e72c"; }
3852
3853.mdi-device-battery-charging-20:before {
3854 content: "\e72d"; }
3855
3856.mdi-device-battery-charging-30:before {
3857 content: "\e72e"; }
3858
3859.mdi-device-battery-charging-50:before {
3860 content: "\e72f"; }
3861
3862.mdi-device-battery-charging-60:before {
3863 content: "\e730"; }
3864
3865.mdi-device-battery-charging-80:before {
3866 content: "\e731"; }
3867
3868.mdi-device-battery-charging-90:before {
3869 content: "\e732"; }
3870
3871.mdi-device-battery-charging-full:before {
3872 content: "\e733"; }
3873
3874.mdi-device-battery-full:before {
3875 content: "\e734"; }
3876
3877.mdi-device-battery-std:before {
3878 content: "\e735"; }
3879
3880.mdi-device-battery-unknown:before {
3881 content: "\e736"; }
3882
3883.mdi-device-bluetooth-connected:before {
3884 content: "\e737"; }
3885
3886.mdi-device-bluetooth-disabled:before {
3887 content: "\e738"; }
3888
3889.mdi-device-bluetooth-searching:before {
3890 content: "\e739"; }
3891
3892.mdi-device-bluetooth:before {
3893 content: "\e73a"; }
3894
3895.mdi-device-brightness-auto:before {
3896 content: "\e73b"; }
3897
3898.mdi-device-brightness-high:before {
3899 content: "\e73c"; }
3900
3901.mdi-device-brightness-low:before {
3902 content: "\e73d"; }
3903
3904.mdi-device-brightness-medium:before {
3905 content: "\e73e"; }
3906
3907.mdi-device-data-usage:before {
3908 content: "\e73f"; }
3909
3910.mdi-device-developer-mode:before {
3911 content: "\e740"; }
3912
3913.mdi-device-devices:before {
3914 content: "\e741"; }
3915
3916.mdi-device-dvr:before {
3917 content: "\e742"; }
3918
3919.mdi-device-gps-fixed:before {
3920 content: "\e743"; }
3921
3922.mdi-device-gps-not-fixed:before {
3923 content: "\e744"; }
3924
3925.mdi-device-gps-off:before {
3926 content: "\e745"; }
3927
3928.mdi-device-location-disabled:before {
3929 content: "\e746"; }
3930
3931.mdi-device-location-searching:before {
3932 content: "\e747"; }
3933
3934.mdi-device-multitrack-audio:before {
3935 content: "\e748"; }
3936
3937.mdi-device-network-cell:before {
3938 content: "\e749"; }
3939
3940.mdi-device-network-wifi:before {
3941 content: "\e74a"; }
3942
3943.mdi-device-nfc:before {
3944 content: "\e74b"; }
3945
3946.mdi-device-now-wallpaper:before {
3947 content: "\e74c"; }
3948
3949.mdi-device-now-widgets:before {
3950 content: "\e74d"; }
3951
3952.mdi-device-screen-lock-landscape:before {
3953 content: "\e74e"; }
3954
3955.mdi-device-screen-lock-portrait:before {
3956 content: "\e74f"; }
3957
3958.mdi-device-screen-lock-rotation:before {
3959 content: "\e750"; }
3960
3961.mdi-device-screen-rotation:before {
3962 content: "\e751"; }
3963
3964.mdi-device-sd-storage:before {
3965 content: "\e752"; }
3966
3967.mdi-device-settings-system-daydream:before {
3968 content: "\e753"; }
3969
3970.mdi-device-signal-cellular-0-bar:before {
3971 content: "\e754"; }
3972
3973.mdi-device-signal-cellular-1-bar:before {
3974 content: "\e755"; }
3975
3976.mdi-device-signal-cellular-2-bar:before {
3977 content: "\e756"; }
3978
3979.mdi-device-signal-cellular-3-bar:before {
3980 content: "\e757"; }
3981
3982.mdi-device-signal-cellular-4-bar:before {
3983 content: "\e758"; }
3984
3985.mdi-signal-wifi-statusbar-connected-no-internet-after:before {
3986 content: "\e8f6"; }
3987
3988.mdi-device-signal-cellular-connected-no-internet-0-bar:before {
3989 content: "\e759"; }
3990
3991.mdi-device-signal-cellular-connected-no-internet-1-bar:before {
3992 content: "\e75a"; }
3993
3994.mdi-device-signal-cellular-connected-no-internet-2-bar:before {
3995 content: "\e75b"; }
3996
3997.mdi-device-signal-cellular-connected-no-internet-3-bar:before {
3998 content: "\e75c"; }
3999
4000.mdi-device-signal-cellular-connected-no-internet-4-bar:before {
4001 content: "\e75d"; }
4002
4003.mdi-device-signal-cellular-no-sim:before {
4004 content: "\e75e"; }
4005
4006.mdi-device-signal-cellular-null:before {
4007 content: "\e75f"; }
4008
4009.mdi-device-signal-cellular-off:before {
4010 content: "\e760"; }
4011
4012.mdi-device-signal-wifi-0-bar:before {
4013 content: "\e761"; }
4014
4015.mdi-device-signal-wifi-1-bar:before {
4016 content: "\e762"; }
4017
4018.mdi-device-signal-wifi-2-bar:before {
4019 content: "\e763"; }
4020
4021.mdi-device-signal-wifi-3-bar:before {
4022 content: "\e764"; }
4023
4024.mdi-device-signal-wifi-4-bar:before {
4025 content: "\e765"; }
4026
4027.mdi-device-signal-wifi-off:before {
4028 content: "\e766"; }
4029
4030.mdi-device-signal-wifi-statusbar-1-bar:before {
4031 content: "\e767"; }
4032
4033.mdi-device-signal-wifi-statusbar-2-bar:before {
4034 content: "\e768"; }
4035
4036.mdi-device-signal-wifi-statusbar-3-bar:before {
4037 content: "\e769"; }
4038
4039.mdi-device-signal-wifi-statusbar-4-bar:before {
4040 content: "\e76a"; }
4041
4042.mdi-device-signal-wifi-statusbar-connected-no-internet-:before {
4043 content: "\e76b"; }
4044
4045.mdi-device-signal-wifi-statusbar-connected-no-internet:before {
4046 content: "\e76f"; }
4047
4048.mdi-device-signal-wifi-statusbar-connected-no-internet-2:before {
4049 content: "\e76c"; }
4050
4051.mdi-device-signal-wifi-statusbar-connected-no-internet-3:before {
4052 content: "\e76d"; }
4053
4054.mdi-device-signal-wifi-statusbar-connected-no-internet-4:before {
4055 content: "\e76e"; }
4056
4057.mdi-signal-wifi-statusbar-not-connected-after:before {
4058 content: "\e8f7"; }
4059
4060.mdi-device-signal-wifi-statusbar-not-connected:before {
4061 content: "\e770"; }
4062
4063.mdi-device-signal-wifi-statusbar-null:before {
4064 content: "\e771"; }
4065
4066.mdi-device-storage:before {
4067 content: "\e772"; }
4068
4069.mdi-device-usb:before {
4070 content: "\e773"; }
4071
4072.mdi-device-wifi-lock:before {
4073 content: "\e774"; }
4074
4075.mdi-device-wifi-tethering:before {
4076 content: "\e775"; }
4077
4078.mdi-hardware-cast-connected:before {
4079 content: "\e7b7"; }
4080
4081.mdi-hardware-cast:before {
4082 content: "\e7b8"; }
4083
4084.mdi-hardware-computer:before {
4085 content: "\e7b9"; }
4086
4087.mdi-hardware-desktop-mac:before {
4088 content: "\e7ba"; }
4089
4090.mdi-hardware-desktop-windows:before {
4091 content: "\e7bb"; }
4092
4093.mdi-hardware-dock:before {
4094 content: "\e7bc"; }
4095
4096.mdi-hardware-gamepad:before {
4097 content: "\e7bd"; }
4098
4099.mdi-hardware-headset-mic:before {
4100 content: "\e7be"; }
4101
4102.mdi-hardware-headset:before {
4103 content: "\e7bf"; }
4104
4105.mdi-hardware-keyboard-alt:before {
4106 content: "\e7c0"; }
4107
4108.mdi-hardware-keyboard-arrow-down:before {
4109 content: "\e7c1"; }
4110
4111.mdi-hardware-keyboard-arrow-left:before {
4112 content: "\e7c2"; }
4113
4114.mdi-hardware-keyboard-arrow-right:before {
4115 content: "\e7c3"; }
4116
4117.mdi-hardware-keyboard-arrow-up:before {
4118 content: "\e7c4"; }
4119
4120.mdi-hardware-keyboard-backspace:before {
4121 content: "\e7c5"; }
4122
4123.mdi-hardware-keyboard-capslock:before {
4124 content: "\e7c6"; }
4125
4126.mdi-hardware-keyboard-control:before {
4127 content: "\e7c7"; }
4128
4129.mdi-hardware-keyboard-hide:before {
4130 content: "\e7c8"; }
4131
4132.mdi-hardware-keyboard-return:before {
4133 content: "\e7c9"; }
4134
4135.mdi-hardware-keyboard-tab:before {
4136 content: "\e7ca"; }
4137
4138.mdi-hardware-keyboard-voice:before {
4139 content: "\e7cb"; }
4140
4141.mdi-hardware-keyboard:before {
4142 content: "\e7cc"; }
4143
4144.mdi-hardware-laptop-chromebook:before {
4145 content: "\e7cd"; }
4146
4147.mdi-hardware-laptop-mac:before {
4148 content: "\e7ce"; }
4149
4150.mdi-hardware-laptop-windows:before {
4151 content: "\e7cf"; }
4152
4153.mdi-hardware-laptop:before {
4154 content: "\e7d0"; }
4155
4156.mdi-hardware-memory:before {
4157 content: "\e7d1"; }
4158
4159.mdi-hardware-mouse:before {
4160 content: "\e7d2"; }
4161
4162.mdi-hardware-phone-android:before {
4163 content: "\e7d3"; }
4164
4165.mdi-hardware-phone-iphone:before {
4166 content: "\e7d4"; }
4167
4168.mdi-hardware-phonelink-off:before {
4169 content: "\e7d5"; }
4170
4171.mdi-hardware-phonelink:before {
4172 content: "\e7d6"; }
4173
4174.mdi-hardware-security:before {
4175 content: "\e7d7"; }
4176
4177.mdi-hardware-sim-card:before {
4178 content: "\e7d8"; }
4179
4180.mdi-hardware-smartphone:before {
4181 content: "\e7d9"; }
4182
4183.mdi-hardware-speaker:before {
4184 content: "\e7da"; }
4185
4186.mdi-hardware-tablet-android:before {
4187 content: "\e7db"; }
4188
4189.mdi-hardware-tablet-mac:before {
4190 content: "\e7dc"; }
4191
4192.mdi-hardware-tablet:before {
4193 content: "\e7dd"; }
4194
4195.mdi-hardware-tv:before {
4196 content: "\e7de"; }
4197
4198.mdi-hardware-watch:before {
4199 content: "\e7df"; }
4200
4201.mdi-image-add-to-photos:before {
4202 content: "\e7e0"; }
4203
4204.mdi-image-adjust:before {
4205 content: "\e7e1"; }
4206
4207.mdi-image-assistant-photo:before {
4208 content: "\e7e2"; }
4209
4210.mdi-image-audiotrack:before {
4211 content: "\e7e3"; }
4212
4213.mdi-image-blur-circular:before {
4214 content: "\e7e4"; }
4215
4216.mdi-image-blur-linear:before {
4217 content: "\e7e5"; }
4218
4219.mdi-image-blur-off:before {
4220 content: "\e7e6"; }
4221
4222.mdi-image-blur-on:before {
4223 content: "\e7e7"; }
4224
4225.mdi-image-brightness-1:before {
4226 content: "\e7e8"; }
4227
4228.mdi-image-brightness-2:before {
4229 content: "\e7e9"; }
4230
4231.mdi-image-brightness-3:before {
4232 content: "\e7ea"; }
4233
4234.mdi-image-brightness-4:before {
4235 content: "\e7eb"; }
4236
4237.mdi-image-brightness-5:before {
4238 content: "\e7ec"; }
4239
4240.mdi-image-brightness-6:before {
4241 content: "\e7ed"; }
4242
4243.mdi-image-brightness-7:before {
4244 content: "\e7ee"; }
4245
4246.mdi-image-brush:before {
4247 content: "\e7ef"; }
4248
4249.mdi-image-camera-alt:before {
4250 content: "\e7f0"; }
4251
4252.mdi-image-camera-front:before {
4253 content: "\e7f1"; }
4254
4255.mdi-image-camera-rear:before {
4256 content: "\e7f2"; }
4257
4258.mdi-image-camera-roll:before {
4259 content: "\e7f3"; }
4260
4261.mdi-image-camera:before {
4262 content: "\e7f4"; }
4263
4264.mdi-image-center-focus-strong:before {
4265 content: "\e7f5"; }
4266
4267.mdi-image-center-focus-weak:before {
4268 content: "\e7f6"; }
4269
4270.mdi-image-collections:before {
4271 content: "\e7f7"; }
4272
4273.mdi-image-color-lens:before {
4274 content: "\e7f8"; }
4275
4276.mdi-image-colorize:before {
4277 content: "\e7f9"; }
4278
4279.mdi-image-compare:before {
4280 content: "\e7fa"; }
4281
4282.mdi-image-control-point-duplicate:before {
4283 content: "\e7fb"; }
4284
4285.mdi-image-control-point:before {
4286 content: "\e7fc"; }
4287
4288.mdi-image-crop-3-2:before {
4289 content: "\e7fd"; }
4290
4291.mdi-image-crop-5-4:before {
4292 content: "\e7fe"; }
4293
4294.mdi-image-crop-7-5:before {
4295 content: "\e7ff"; }
4296
4297.mdi-image-crop-16-9:before {
4298 content: "\e800"; }
4299
4300.mdi-image-crop-din:before {
4301 content: "\e801"; }
4302
4303.mdi-image-crop-free:before {
4304 content: "\e802"; }
4305
4306.mdi-image-crop-landscape:before {
4307 content: "\e803"; }
4308
4309.mdi-image-crop-original:before {
4310 content: "\e804"; }
4311
4312.mdi-image-crop-portrait:before {
4313 content: "\e805"; }
4314
4315.mdi-image-crop-square:before {
4316 content: "\e806"; }
4317
4318.mdi-image-crop:before {
4319 content: "\e807"; }
4320
4321.mdi-image-dehaze:before {
4322 content: "\e808"; }
4323
4324.mdi-image-details:before {
4325 content: "\e809"; }
4326
4327.mdi-image-edit:before {
4328 content: "\e80a"; }
4329
4330.mdi-image-exposure-minus-1:before {
4331 content: "\e80b"; }
4332
4333.mdi-image-exposure-minus-2:before {
4334 content: "\e80c"; }
4335
4336.mdi-image-exposure-plus-1:before {
4337 content: "\e80d"; }
4338
4339.mdi-image-exposure-plus-2:before {
4340 content: "\e80e"; }
4341
4342.mdi-image-exposure-zero:before {
4343 content: "\e80f"; }
4344
4345.mdi-image-exposure:before {
4346 content: "\e810"; }
4347
4348.mdi-image-filter-1:before {
4349 content: "\e811"; }
4350
4351.mdi-image-filter-2:before {
4352 content: "\e812"; }
4353
4354.mdi-image-filter-3:before {
4355 content: "\e813"; }
4356
4357.mdi-image-filter-4:before {
4358 content: "\e814"; }
4359
4360.mdi-image-filter-5:before {
4361 content: "\e815"; }
4362
4363.mdi-image-filter-6:before {
4364 content: "\e816"; }
4365
4366.mdi-image-filter-7:before {
4367 content: "\e817"; }
4368
4369.mdi-image-filter-8:before {
4370 content: "\e818"; }
4371
4372.mdi-image-filter-9-plus:before {
4373 content: "\e819"; }
4374
4375.mdi-image-filter-9:before {
4376 content: "\e81a"; }
4377
4378.mdi-image-filter-b-and-w:before {
4379 content: "\e81b"; }
4380
4381.mdi-image-filter-center-focus:before {
4382 content: "\e81c"; }
4383
4384.mdi-image-filter-drama:before {
4385 content: "\e81d"; }
4386
4387.mdi-image-filter-frames:before {
4388 content: "\e81e"; }
4389
4390.mdi-image-filter-hdr:before {
4391 content: "\e81f"; }
4392
4393.mdi-image-filter-none:before {
4394 content: "\e820"; }
4395
4396.mdi-image-filter-tilt-shift:before {
4397 content: "\e821"; }
4398
4399.mdi-image-filter-vintage:before {
4400 content: "\e822"; }
4401
4402.mdi-image-filter:before {
4403 content: "\e823"; }
4404
4405.mdi-image-flare:before {
4406 content: "\e824"; }
4407
4408.mdi-image-flash-auto:before {
4409 content: "\e825"; }
4410
4411.mdi-image-flash-off:before {
4412 content: "\e826"; }
4413
4414.mdi-image-flash-on:before {
4415 content: "\e827"; }
4416
4417.mdi-image-flip:before {
4418 content: "\e828"; }
4419
4420.mdi-image-gradient:before {
4421 content: "\e829"; }
4422
4423.mdi-image-grain:before {
4424 content: "\e82a"; }
4425
4426.mdi-image-grid-off:before {
4427 content: "\e82b"; }
4428
4429.mdi-image-grid-on:before {
4430 content: "\e82c"; }
4431
4432.mdi-image-hdr-off:before {
4433 content: "\e82d"; }
4434
4435.mdi-image-hdr-on:before {
4436 content: "\e82e"; }
4437
4438.mdi-image-hdr-strong:before {
4439 content: "\e82f"; }
4440
4441.mdi-image-hdr-weak:before {
4442 content: "\e830"; }
4443
4444.mdi-image-healing:before {
4445 content: "\e831"; }
4446
4447.mdi-image-image-aspect-ratio:before {
4448 content: "\e832"; }
4449
4450.mdi-image-image:before {
4451 content: "\e833"; }
4452
4453.mdi-image-iso:before {
4454 content: "\e834"; }
4455
4456.mdi-image-landscape:before {
4457 content: "\e835"; }
4458
4459.mdi-image-leak-add:before {
4460 content: "\e836"; }
4461
4462.mdi-image-leak-remove:before {
4463 content: "\e837"; }
4464
4465.mdi-image-lens:before {
4466 content: "\e838"; }
4467
4468.mdi-image-looks-3:before {
4469 content: "\e839"; }
4470
4471.mdi-image-looks-4:before {
4472 content: "\e83a"; }
4473
4474.mdi-image-looks-5:before {
4475 content: "\e83b"; }
4476
4477.mdi-image-looks-6:before {
4478 content: "\e83c"; }
4479
4480.mdi-image-looks-one:before {
4481 content: "\e83d"; }
4482
4483.mdi-image-looks-two:before {
4484 content: "\e83e"; }
4485
4486.mdi-image-looks:before {
4487 content: "\e83f"; }
4488
4489.mdi-image-loupe:before {
4490 content: "\e840"; }
4491
4492.mdi-image-movie-creation:before {
4493 content: "\e841"; }
4494
4495.mdi-image-nature-people:before {
4496 content: "\e842"; }
4497
4498.mdi-image-nature:before {
4499 content: "\e843"; }
4500
4501.mdi-image-navigate-before:before {
4502 content: "\e844"; }
4503
4504.mdi-image-navigate-next:before {
4505 content: "\e845"; }
4506
4507.mdi-image-palette:before {
4508 content: "\e846"; }
4509
4510.mdi-image-panorama-fisheye:before {
4511 content: "\e847"; }
4512
4513.mdi-image-panorama-horizontal:before {
4514 content: "\e848"; }
4515
4516.mdi-image-panorama-vertical:before {
4517 content: "\e849"; }
4518
4519.mdi-image-panorama-wide-angle:before {
4520 content: "\e84a"; }
4521
4522.mdi-image-panorama:before {
4523 content: "\e84b"; }
4524
4525.mdi-image-photo-album:before {
4526 content: "\e84c"; }
4527
4528.mdi-image-photo-camera:before {
4529 content: "\e84d"; }
4530
4531.mdi-image-photo-library:before {
4532 content: "\e84e"; }
4533
4534.mdi-image-photo:before {
4535 content: "\e84f"; }
4536
4537.mdi-image-portrait:before {
4538 content: "\e850"; }
4539
4540.mdi-image-remove-red-eye:before {
4541 content: "\e851"; }
4542
4543.mdi-image-rotate-left:before {
4544 content: "\e852"; }
4545
4546.mdi-image-rotate-right:before {
4547 content: "\e853"; }
4548
4549.mdi-image-slideshow:before {
4550 content: "\e854"; }
4551
4552.mdi-image-straighten:before {
4553 content: "\e855"; }
4554
4555.mdi-image-style:before {
4556 content: "\e856"; }
4557
4558.mdi-image-switch-camera:before {
4559 content: "\e857"; }
4560
4561.mdi-image-switch-video:before {
4562 content: "\e858"; }
4563
4564.mdi-image-tag-faces:before {
4565 content: "\e859"; }
4566
4567.mdi-image-texture:before {
4568 content: "\e85a"; }
4569
4570.mdi-image-timelapse:before {
4571 content: "\e85b"; }
4572
4573.mdi-image-timer-3:before {
4574 content: "\e85c"; }
4575
4576.mdi-image-timer-10:before {
4577 content: "\e85d"; }
4578
4579.mdi-image-timer-auto:before {
4580 content: "\e85e"; }
4581
4582.mdi-image-timer-off:before {
4583 content: "\e85f"; }
4584
4585.mdi-image-timer:before {
4586 content: "\e860"; }
4587
4588.mdi-image-tonality:before {
4589 content: "\e861"; }
4590
4591.mdi-image-transform:before {
4592 content: "\e862"; }
4593
4594.mdi-image-tune:before {
4595 content: "\e863"; }
4596
4597.mdi-image-wb-auto:before {
4598 content: "\e864"; }
4599
4600.mdi-image-wb-cloudy:before {
4601 content: "\e865"; }
4602
4603.mdi-image-wb-incandescent:before {
4604 content: "\e866"; }
4605
4606.mdi-image-wb-irradescent:before {
4607 content: "\e867"; }
4608
4609.mdi-image-wb-sunny:before {
4610 content: "\e868"; }
4611
4612.mdi-maps-beenhere:before {
4613 content: "\e869"; }
4614
4615.mdi-maps-directions-bike:before {
4616 content: "\e86a"; }
4617
4618.mdi-maps-directions-bus:before {
4619 content: "\e86b"; }
4620
4621.mdi-maps-directions-car:before {
4622 content: "\e86c"; }
4623
4624.mdi-maps-directions-ferry:before {
4625 content: "\e86d"; }
4626
4627.mdi-maps-directions-subway:before {
4628 content: "\e86e"; }
4629
4630.mdi-maps-directions-train:before {
4631 content: "\e86f"; }
4632
4633.mdi-maps-directions-transit:before {
4634 content: "\e870"; }
4635
4636.mdi-maps-directions-walk:before {
4637 content: "\e871"; }
4638
4639.mdi-maps-directions:before {
4640 content: "\e872"; }
4641
4642.mdi-maps-flight:before {
4643 content: "\e873"; }
4644
4645.mdi-maps-hotel:before {
4646 content: "\e874"; }
4647
4648.mdi-maps-layers-clear:before {
4649 content: "\e875"; }
4650
4651.mdi-maps-layers:before {
4652 content: "\e876"; }
4653
4654.mdi-maps-local-airport:before {
4655 content: "\e877"; }
4656
4657.mdi-maps-local-atm:before {
4658 content: "\e878"; }
4659
4660.mdi-maps-local-attraction:before {
4661 content: "\e879"; }
4662
4663.mdi-maps-local-bar:before {
4664 content: "\e87a"; }
4665
4666.mdi-maps-local-cafe:before {
4667 content: "\e87b"; }
4668
4669.mdi-maps-local-car-wash:before {
4670 content: "\e87c"; }
4671
4672.mdi-maps-local-convenience-store:before {
4673 content: "\e87d"; }
4674
4675.mdi-maps-local-drink:before {
4676 content: "\e87e"; }
4677
4678.mdi-maps-local-florist:before {
4679 content: "\e87f"; }
4680
4681.mdi-maps-local-gas-station:before {
4682 content: "\e880"; }
4683
4684.mdi-maps-local-grocery-store:before {
4685 content: "\e881"; }
4686
4687.mdi-maps-local-hospital:before {
4688 content: "\e882"; }
4689
4690.mdi-maps-local-hotel:before {
4691 content: "\e883"; }
4692
4693.mdi-maps-local-laundry-service:before {
4694 content: "\e884"; }
4695
4696.mdi-maps-local-library:before {
4697 content: "\e885"; }
4698
4699.mdi-maps-local-mall:before {
4700 content: "\e886"; }
4701
4702.mdi-maps-local-movies:before {
4703 content: "\e887"; }
4704
4705.mdi-maps-local-offer:before {
4706 content: "\e888"; }
4707
4708.mdi-maps-local-parking:before {
4709 content: "\e889"; }
4710
4711.mdi-maps-local-pharmacy:before {
4712 content: "\e88a"; }
4713
4714.mdi-maps-local-phone:before {
4715 content: "\e88b"; }
4716
4717.mdi-maps-local-pizza:before {
4718 content: "\e88c"; }
4719
4720.mdi-maps-local-play:before {
4721 content: "\e88d"; }
4722
4723.mdi-maps-local-post-office:before {
4724 content: "\e88e"; }
4725
4726.mdi-maps-local-print-shop:before {
4727 content: "\e88f"; }
4728
4729.mdi-maps-local-restaurant:before {
4730 content: "\e890"; }
4731
4732.mdi-maps-local-see:before {
4733 content: "\e891"; }
4734
4735.mdi-maps-local-shipping:before {
4736 content: "\e892"; }
4737
4738.mdi-maps-local-taxi:before {
4739 content: "\e893"; }
4740
4741.mdi-maps-location-history:before {
4742 content: "\e894"; }
4743
4744.mdi-maps-map:before {
4745 content: "\e895"; }
4746
4747.mdi-maps-my-location:before {
4748 content: "\e896"; }
4749
4750.mdi-maps-navigation:before {
4751 content: "\e897"; }
4752
4753.mdi-maps-pin-drop:before {
4754 content: "\e898"; }
4755
4756.mdi-maps-place:before {
4757 content: "\e899"; }
4758
4759.mdi-maps-rate-review:before {
4760 content: "\e89a"; }
4761
4762.mdi-maps-restaurant-menu:before {
4763 content: "\e89b"; }
4764
4765.mdi-maps-satellite:before {
4766 content: "\e89c"; }
4767
4768.mdi-maps-store-mall-directory:before {
4769 content: "\e89d"; }
4770
4771.mdi-maps-terrain:before {
4772 content: "\e89e"; }
4773
4774.mdi-maps-traffic:before {
4775 content: "\e89f"; }
4776
4777.mdi-navigation-apps:before {
4778 content: "\e8a0"; }
4779
4780.mdi-navigation-arrow-back:before {
4781 content: "\e8a1"; }
4782
4783.mdi-navigation-arrow-drop-down-circle:before {
4784 content: "\e8a2"; }
4785
4786.mdi-navigation-arrow-drop-down:before {
4787 content: "\e8a3"; }
4788
4789.mdi-navigation-arrow-drop-up:before {
4790 content: "\e8a4"; }
4791
4792.mdi-navigation-arrow-forward:before {
4793 content: "\e8a5"; }
4794
4795.mdi-navigation-cancel:before {
4796 content: "\e8a6"; }
4797
4798.mdi-navigation-check:before {
4799 content: "\e8a7"; }
4800
4801.mdi-navigation-chevron-left:before {
4802 content: "\e8a8"; }
4803
4804.mdi-navigation-chevron-right:before {
4805 content: "\e8a9"; }
4806
4807.mdi-navigation-close:before {
4808 content: "\e8aa"; }
4809
4810.mdi-navigation-expand-less:before {
4811 content: "\e8ab"; }
4812
4813.mdi-navigation-expand-more:before {
4814 content: "\e8ac"; }
4815
4816.mdi-navigation-fullscreen-exit:before {
4817 content: "\e8ad"; }
4818
4819.mdi-navigation-fullscreen:before {
4820 content: "\e8ae"; }
4821
4822.mdi-navigation-menu:before {
4823 content: "\e8af"; }
4824
4825.mdi-navigation-more-horiz:before {
4826 content: "\e8b0"; }
4827
4828.mdi-navigation-more-vert:before {
4829 content: "\e8b1"; }
4830
4831.mdi-navigation-refresh:before {
4832 content: "\e8b2"; }
4833
4834.mdi-navigation-unfold-less:before {
4835 content: "\e8b3"; }
4836
4837.mdi-navigation-unfold-more:before {
4838 content: "\e8b4"; }
4839
4840.mdi-notification-adb:before {
4841 content: "\e8b5"; }
4842
4843.mdi-notification-bluetooth-audio:before {
4844 content: "\e8b6"; }
4845
4846.mdi-notification-disc-full:before {
4847 content: "\e8b7"; }
4848
4849.mdi-notification-dnd-forwardslash:before {
4850 content: "\e8b8"; }
4851
4852.mdi-notification-do-not-disturb:before {
4853 content: "\e8b9"; }
4854
4855.mdi-notification-drive-eta:before {
4856 content: "\e8ba"; }
4857
4858.mdi-notification-event-available:before {
4859 content: "\e8bb"; }
4860
4861.mdi-notification-event-busy:before {
4862 content: "\e8bc"; }
4863
4864.mdi-notification-event-note:before {
4865 content: "\e8bd"; }
4866
4867.mdi-notification-folder-special:before {
4868 content: "\e8be"; }
4869
4870.mdi-notification-mms:before {
4871 content: "\e8bf"; }
4872
4873.mdi-notification-more:before {
4874 content: "\e8c0"; }
4875
4876.mdi-notification-network-locked:before {
4877 content: "\e8c1"; }
4878
4879.mdi-notification-phone-bluetooth-speaker:before {
4880 content: "\e8c2"; }
4881
4882.mdi-notification-phone-forwarded:before {
4883 content: "\e8c3"; }
4884
4885.mdi-notification-phone-in-talk:before {
4886 content: "\e8c4"; }
4887
4888.mdi-notification-phone-locked:before {
4889 content: "\e8c5"; }
4890
4891.mdi-notification-phone-missed:before {
4892 content: "\e8c6"; }
4893
4894.mdi-notification-phone-paused:before {
4895 content: "\e8c7"; }
4896
4897.mdi-notification-play-download:before {
4898 content: "\e8c8"; }
4899
4900.mdi-notification-play-install:before {
4901 content: "\e8c9"; }
4902
4903.mdi-notification-sd-card:before {
4904 content: "\e8ca"; }
4905
4906.mdi-notification-sim-card-alert:before {
4907 content: "\e8cb"; }
4908
4909.mdi-notification-sms-failed:before {
4910 content: "\e8cc"; }
4911
4912.mdi-notification-sms:before {
4913 content: "\e8cd"; }
4914
4915.mdi-notification-sync-disabled:before {
4916 content: "\e8ce"; }
4917
4918.mdi-notification-sync-problem:before {
4919 content: "\e8cf"; }
4920
4921.mdi-notification-sync:before {
4922 content: "\e8d0"; }
4923
4924.mdi-notification-system-update:before {
4925 content: "\e8d1"; }
4926
4927.mdi-notification-tap-and-play:before {
4928 content: "\e8d2"; }
4929
4930.mdi-notification-time-to-leave:before {
4931 content: "\e8d3"; }
4932
4933.mdi-notification-vibration:before {
4934 content: "\e8d4"; }
4935
4936.mdi-notification-voice-chat:before {
4937 content: "\e8d5"; }
4938
4939.mdi-notification-vpn-lock:before {
4940 content: "\e8d6"; }
4941
4942.mdi-social-cake:before {
4943 content: "\e8d7"; }
4944
4945.mdi-social-domain:before {
4946 content: "\e8d8"; }
4947
4948.mdi-social-group-add:before {
4949 content: "\e8d9"; }
4950
4951.mdi-social-group:before {
4952 content: "\e8da"; }
4953
4954.mdi-social-location-city:before {
4955 content: "\e8db"; }
4956
4957.mdi-social-mood:before {
4958 content: "\e8dc"; }
4959
4960.mdi-social-notifications-none:before {
4961 content: "\e8dd"; }
4962
4963.mdi-social-notifications-off:before {
4964 content: "\e8de"; }
4965
4966.mdi-social-notifications-on:before {
4967 content: "\e8df"; }
4968
4969.mdi-social-notifications-paused:before {
4970 content: "\e8e0"; }
4971
4972.mdi-social-notifications:before {
4973 content: "\e8e1"; }
4974
4975.mdi-social-pages:before {
4976 content: "\e8e2"; }
4977
4978.mdi-social-party-mode:before {
4979 content: "\e8e3"; }
4980
4981.mdi-social-people-outline:before {
4982 content: "\e8e4"; }
4983
4984.mdi-social-people:before {
4985 content: "\e8e5"; }
4986
4987.mdi-social-person-add:before {
4988 content: "\e8e6"; }
4989
4990.mdi-social-person-outline:before {
4991 content: "\e8e7"; }
4992
4993.mdi-social-person:before {
4994 content: "\e8e8"; }
4995
4996.mdi-social-plus-one:before {
4997 content: "\e8e9"; }
4998
4999.mdi-social-poll:before {
5000 content: "\e8ea"; }
5001
5002.mdi-social-public:before {
5003 content: "\e8eb"; }
5004
5005.mdi-social-school:before {
5006 content: "\e8ec"; }
5007
5008.mdi-social-share:before {
5009 content: "\e8ed"; }
5010
5011.mdi-social-whatshot:before {
5012 content: "\e8ee"; }
5013
5014.mdi-toggle-check-box-outline-blank:before {
5015 content: "\e8ef"; }
5016
5017.mdi-toggle-check-box:before {
5018 content: "\e8f0"; }
5019
5020.mdi-toggle-radio-button-off:before {
5021 content: "\e8f1"; }
5022
5023.mdi-toggle-radio-button-on:before {
5024 content: "\e8f2"; }
5025
5026.mdi-toggle-star-half:before {
5027 content: "\e8f3"; }
5028
5029.mdi-toggle-star-outline:before {
5030 content: "\e8f4"; }
5031
5032.mdi-toggle-star:before {
5033 content: "\e8f5"; }
5034
5035.container {
5036 margin: 0 auto;
5037 max-width: 1280px;
5038 width: 90%; }
5039
5040@media only screen and (min-width : 601px) {
5041 .container {
5042 width: 85%; } }
5043
5044@media only screen and (min-width : 993px) {
5045 .container {
5046 width: 70%; } }
5047
5048.container .row {
5049 margin-left: -0.75rem;
5050 margin-right: -0.75rem; }
5051
5052.section {
5053 padding-top: 1rem;
5054 padding-bottom: 1rem; }
5055 .section.no-pad {
5056 padding: 0; }
5057 .section.no-pad-bot {
5058 padding-bottom: 0; }
5059 .section.no-pad-top {
5060 padding-top: 0; }
5061
5062.row {
5063 margin-left: auto;
5064 margin-right: auto;
5065 margin-bottom: 20px; }
5066 .row:after {
5067 content: "";
5068 display: table;
5069 clear: both; }
5070 .row .col {
5071 float: left;
5072 -webkit-box-sizing: border-box;
5073 -moz-box-sizing: border-box;
5074 box-sizing: border-box;
5075 padding: 0 0.75rem; }
5076 .row .col.s1 {
5077 width: 8.33333%;
5078 margin-left: 0; }
5079 .row .col.s2 {
5080 width: 16.66667%;
5081 margin-left: 0; }
5082 .row .col.s3 {
5083 width: 25%;
5084 margin-left: 0; }
5085 .row .col.s4 {
5086 width: 33.33333%;
5087 margin-left: 0; }
5088 .row .col.s5 {
5089 width: 41.66667%;
5090 margin-left: 0; }
5091 .row .col.s6 {
5092 width: 50%;
5093 margin-left: 0; }
5094 .row .col.s7 {
5095 width: 58.33333%;
5096 margin-left: 0; }
5097 .row .col.s8 {
5098 width: 66.66667%;
5099 margin-left: 0; }
5100 .row .col.s9 {
5101 width: 75%;
5102 margin-left: 0; }
5103 .row .col.s10 {
5104 width: 83.33333%;
5105 margin-left: 0; }
5106 .row .col.s11 {
5107 width: 91.66667%;
5108 margin-left: 0; }
5109 .row .col.s12 {
5110 width: 100%;
5111 margin-left: 0; }
5112 .row .col.offset-s1 {
5113 margin-left: 8.33333%; }
5114 .row .col.offset-s2 {
5115 margin-left: 16.66667%; }
5116 .row .col.offset-s3 {
5117 margin-left: 25%; }
5118 .row .col.offset-s4 {
5119 margin-left: 33.33333%; }
5120 .row .col.offset-s5 {
5121 margin-left: 41.66667%; }
5122 .row .col.offset-s6 {
5123 margin-left: 50%; }
5124 .row .col.offset-s7 {
5125 margin-left: 58.33333%; }
5126 .row .col.offset-s8 {
5127 margin-left: 66.66667%; }
5128 .row .col.offset-s9 {
5129 margin-left: 75%; }
5130 .row .col.offset-s10 {
5131 margin-left: 83.33333%; }
5132 .row .col.offset-s11 {
5133 margin-left: 91.66667%; }
5134 .row .col.offset-s12 {
5135 margin-left: 100%; }
5136 @media only screen and (min-width : 601px) {
5137 .row .col.m1 {
5138 width: 8.33333%;
5139 margin-left: 0; }
5140 .row .col.m2 {
5141 width: 16.66667%;
5142 margin-left: 0; }
5143 .row .col.m3 {
5144 width: 25%;
5145 margin-left: 0; }
5146 .row .col.m4 {
5147 width: 33.33333%;
5148 margin-left: 0; }
5149 .row .col.m5 {
5150 width: 41.66667%;
5151 margin-left: 0; }
5152 .row .col.m6 {
5153 width: 50%;
5154 margin-left: 0; }
5155 .row .col.m7 {
5156 width: 58.33333%;
5157 margin-left: 0; }
5158 .row .col.m8 {
5159 width: 66.66667%;
5160 margin-left: 0; }
5161 .row .col.m9 {
5162 width: 75%;
5163 margin-left: 0; }
5164 .row .col.m10 {
5165 width: 83.33333%;
5166 margin-left: 0; }
5167 .row .col.m11 {
5168 width: 91.66667%;
5169 margin-left: 0; }
5170 .row .col.m12 {
5171 width: 100%;
5172 margin-left: 0; }
5173 .row .col.offset-m1 {
5174 margin-left: 8.33333%; }
5175 .row .col.offset-m2 {
5176 margin-left: 16.66667%; }
5177 .row .col.offset-m3 {
5178 margin-left: 25%; }
5179 .row .col.offset-m4 {
5180 margin-left: 33.33333%; }
5181 .row .col.offset-m5 {
5182 margin-left: 41.66667%; }
5183 .row .col.offset-m6 {
5184 margin-left: 50%; }
5185 .row .col.offset-m7 {
5186 margin-left: 58.33333%; }
5187 .row .col.offset-m8 {
5188 margin-left: 66.66667%; }
5189 .row .col.offset-m9 {
5190 margin-left: 75%; }
5191 .row .col.offset-m10 {
5192 margin-left: 83.33333%; }
5193 .row .col.offset-m11 {
5194 margin-left: 91.66667%; }
5195 .row .col.offset-m12 {
5196 margin-left: 100%; } }
5197 @media only screen and (min-width : 993px) {
5198 .row .col.l1 {
5199 width: 8.33333%;
5200 margin-left: 0; }
5201 .row .col.l2 {
5202 width: 16.66667%;
5203 margin-left: 0; }
5204 .row .col.l3 {
5205 width: 25%;
5206 margin-left: 0; }
5207 .row .col.l4 {
5208 width: 33.33333%;
5209 margin-left: 0; }
5210 .row .col.l5 {
5211 width: 41.66667%;
5212 margin-left: 0; }
5213 .row .col.l6 {
5214 width: 50%;
5215 margin-left: 0; }
5216 .row .col.l7 {
5217 width: 58.33333%;
5218 margin-left: 0; }
5219 .row .col.l8 {
5220 width: 66.66667%;
5221 margin-left: 0; }
5222 .row .col.l9 {
5223 width: 75%;
5224 margin-left: 0; }
5225 .row .col.l10 {
5226 width: 83.33333%;
5227 margin-left: 0; }
5228 .row .col.l11 {
5229 width: 91.66667%;
5230 margin-left: 0; }
5231 .row .col.l12 {
5232 width: 100%;
5233 margin-left: 0; }
5234 .row .col.offset-l1 {
5235 margin-left: 8.33333%; }
5236 .row .col.offset-l2 {
5237 margin-left: 16.66667%; }
5238 .row .col.offset-l3 {
5239 margin-left: 25%; }
5240 .row .col.offset-l4 {
5241 margin-left: 33.33333%; }
5242 .row .col.offset-l5 {
5243 margin-left: 41.66667%; }
5244 .row .col.offset-l6 {
5245 margin-left: 50%; }
5246 .row .col.offset-l7 {
5247 margin-left: 58.33333%; }
5248 .row .col.offset-l8 {
5249 margin-left: 66.66667%; }
5250 .row .col.offset-l9 {
5251 margin-left: 75%; }
5252 .row .col.offset-l10 {
5253 margin-left: 83.33333%; }
5254 .row .col.offset-l11 {
5255 margin-left: 91.66667%; }
5256 .row .col.offset-l12 {
5257 margin-left: 100%; } }
5258
5259nav {
5260 color: #fff;
5261 background-color: #ee6e73;
5262 width: 100%;
5263 height: 56px;
5264 line-height: 56px; }
5265 nav a {
5266 color: #fff; }
5267 nav .nav-wrapper {
5268 position: relative;
5269 height: 100%; }
5270 nav .nav-wrapper i {
5271 display: block;
5272 font-size: 2rem; }
5273 @media only screen and (min-width : 993px) {
5274 nav a.button-collapse {
5275 display: none; } }
5276 nav .button-collapse {
5277 float: left;
5278 position: relative;
5279 z-index: 1;
5280 height: 56px; }
5281 nav .button-collapse i {
5282 font-size: 2.7rem;
5283 height: 56px;
5284 line-height: 56px; }
5285 nav .brand-logo {
5286 position: absolute;
5287 color: #fff;
5288 display: inline-block;
5289 font-size: 2.1rem;
5290 padding: 0;
5291 white-space: nowrap; }
5292 nav .brand-logo.center {
5293 left: 50%;
5294 -webkit-transform: translateX(-50%);
5295 -moz-transform: translateX(-50%);
5296 -ms-transform: translateX(-50%);
5297 -o-transform: translateX(-50%);
5298 transform: translateX(-50%); }
5299 @media only screen and (max-width : 992px) {
5300 nav .brand-logo {
5301 left: 50%;
5302 -webkit-transform: translateX(-50%);
5303 -moz-transform: translateX(-50%);
5304 -ms-transform: translateX(-50%);
5305 -o-transform: translateX(-50%);
5306 transform: translateX(-50%); }
5307 nav .brand-logo.left, nav .brand-logo.right {
5308 padding: 0;
5309 -webkit-transform: none;
5310 -moz-transform: none;
5311 -ms-transform: none;
5312 -o-transform: none;
5313 transform: none; }
5314 nav .brand-logo.left {
5315 left: 0.5rem; }
5316 nav .brand-logo.right {
5317 right: 0.5rem;
5318 left: auto; } }
5319 nav .brand-logo.right {
5320 right: 0.5rem;
5321 padding: 0; }
5322 nav ul {
5323 margin: 0; }
5324 nav ul li {
5325 -webkit-transition: background-color .3s;
5326 -moz-transition: background-color .3s;
5327 -o-transition: background-color .3s;
5328 -ms-transition: background-color .3s;
5329 transition: background-color .3s;
5330 float: left;
5331 padding: 0; }
5332 nav ul li:hover, nav ul li.active {
5333 background-color: rgba(0, 0, 0, 0.1); }
5334 nav ul a {
5335 font-size: 1rem;
5336 color: #fff;
5337 display: block;
5338 padding: 0 15px; }
5339 nav ul.left {
5340 float: left; }
5341 nav .input-field {
5342 margin: 0; }
5343 nav .input-field input {
5344 height: 100%;
5345 font-size: 1.2rem;
5346 border: none;
5347 padding-left: 2rem; }
5348 nav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid {
5349 border: none;
5350 box-shadow: none; }
5351 nav .input-field label {
5352 top: 0;
5353 left: 0; }
5354 nav .input-field label i {
5355 color: rgba(255, 255, 255, 0.7);
5356 -webkit-transition: color .3s;
5357 -moz-transition: color .3s;
5358 -o-transition: color .3s;
5359 -ms-transition: color .3s;
5360 transition: color .3s; }
5361 nav .input-field label.active i {
5362 color: #fff; }
5363 nav .input-field label.active {
5364 -webkit-transform: translateY(0);
5365 -moz-transform: translateY(0);
5366 -ms-transform: translateY(0);
5367 -o-transform: translateY(0);
5368 transform: translateY(0); }
5369
5370.navbar-fixed {
5371 position: relative;
5372 height: 56px;
5373 z-index: 998; }
5374 .navbar-fixed nav {
5375 position: fixed; }
5376
5377@media only screen and (min-width : 601px) {
5378 nav, nav .nav-wrapper i, nav a.button-collapse, nav a.button-collapse i {
5379 height: 64px;
5380 line-height: 64px; }
5381 .navbar-fixed {
5382 height: 64px; } }
5383
5384@font-face {
5385 font-family: "Roboto";
5386 src: local(Roboto Thin), url("../font/roboto/Roboto-Thin.woff2") format("woff2"), url("../font/roboto/Roboto-Thin.woff") format("woff"), url("../font/roboto/Roboto-Thin.ttf") format("truetype");
5387 font-weight: 200; }
5388
5389@font-face {
5390 font-family: "Roboto";
5391 src: local(Roboto Light), url("../font/roboto/Roboto-Light.woff2") format("woff2"), url("../font/roboto/Roboto-Light.woff") format("woff"), url("../font/roboto/Roboto-Light.ttf") format("truetype");
5392 font-weight: 300; }
5393
5394@font-face {
5395 font-family: "Roboto";
5396 src: local(Roboto Regular), url("../font/roboto/Roboto-Regular.woff2") format("woff2"), url("../font/roboto/Roboto-Regular.woff") format("woff"), url("../font/roboto/Roboto-Regular.ttf") format("truetype");
5397 font-weight: 400; }
5398
5399@font-face {
5400 font-family: "Roboto";
5401 src: url("../font/roboto/Roboto-Medium.woff2") format("woff2"), url("../font/roboto/Roboto-Medium.woff") format("woff"), url("../font/roboto/Roboto-Medium.ttf") format("truetype");
5402 font-weight: 500; }
5403
5404@font-face {
5405 font-family: "Roboto";
5406 src: url("../font/roboto/Roboto-Bold.woff2") format("woff2"), url("../font/roboto/Roboto-Bold.woff") format("woff"), url("../font/roboto/Roboto-Bold.ttf") format("truetype");
5407 font-weight: 700; }
5408
5409a {
5410 text-decoration: none; }
5411
5412html {
5413 line-height: 1.5;
5414 font-family: "Roboto", sans-serif;
5415 font-weight: normal;
5416 color: rgba(0, 0, 0, 0.87); }
5417 @media only screen and (min-width: 0) {
5418 html {
5419 font-size: 14px; } }
5420 @media only screen and (min-width: 992px) {
5421 html {
5422 font-size: 14.5px; } }
5423 @media only screen and (min-width: 1200px) {
5424 html {
5425 font-size: 15px; } }
5426
5427h1, h2, h3, h4, h5, h6 {
5428 font-weight: 400;
5429 line-height: 1.1; }
5430
5431h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
5432 font-weight: inherit; }
5433
5434h1 {
5435 font-size: 4.2rem;
5436 line-height: 110%;
5437 margin: 2.1rem 0 1.68rem 0; }
5438
5439h2 {
5440 font-size: 3.56rem;
5441 line-height: 110%;
5442 margin: 1.78rem 0 1.424rem 0; }
5443
5444h3 {
5445 font-size: 2.92rem;
5446 line-height: 110%;
5447 margin: 1.46rem 0 1.168rem 0; }
5448
5449h4 {
5450 font-size: 2.28rem;
5451 line-height: 110%;
5452 margin: 1.14rem 0 0.912rem 0; }
5453
5454h5 {
5455 font-size: 1.64rem;
5456 line-height: 110%;
5457 margin: 0.82rem 0 0.656rem 0; }
5458
5459h6 {
5460 font-size: 1rem;
5461 line-height: 110%;
5462 margin: 0.5rem 0 0.4rem 0; }
5463
5464em {
5465 font-style: italic; }
5466
5467strong {
5468 font-weight: 500; }
5469
5470small {
5471 font-size: 75%; }
5472
5473.light, footer.page-footer .footer-copyright {
5474 font-weight: 300; }
5475
5476.thin {
5477 font-weight: 200; }
5478
5479.flow-text {
5480 font-weight: 300; }
5481 @media only screen and (min-width: 360px) {
5482 .flow-text {
5483 font-size: 1.2rem; } }
5484 @media only screen and (min-width: 390px) {
5485 .flow-text {
5486 font-size: 1.224rem; } }
5487 @media only screen and (min-width: 420px) {
5488 .flow-text {
5489 font-size: 1.248rem; } }
5490 @media only screen and (min-width: 450px) {
5491 .flow-text {
5492 font-size: 1.272rem; } }
5493 @media only screen and (min-width: 480px) {
5494 .flow-text {
5495 font-size: 1.296rem; } }
5496 @media only screen and (min-width: 510px) {
5497 .flow-text {
5498 font-size: 1.32rem; } }
5499 @media only screen and (min-width: 540px) {
5500 .flow-text {
5501 font-size: 1.344rem; } }
5502 @media only screen and (min-width: 570px) {
5503 .flow-text {
5504 font-size: 1.368rem; } }
5505 @media only screen and (min-width: 600px) {
5506 .flow-text {
5507 font-size: 1.392rem; } }
5508 @media only screen and (min-width: 630px) {
5509 .flow-text {
5510 font-size: 1.416rem; } }
5511 @media only screen and (min-width: 660px) {
5512 .flow-text {
5513 font-size: 1.44rem; } }
5514 @media only screen and (min-width: 690px) {
5515 .flow-text {
5516 font-size: 1.464rem; } }
5517 @media only screen and (min-width: 720px) {
5518 .flow-text {
5519 font-size: 1.488rem; } }
5520 @media only screen and (min-width: 750px) {
5521 .flow-text {
5522 font-size: 1.512rem; } }
5523 @media only screen and (min-width: 780px) {
5524 .flow-text {
5525 font-size: 1.536rem; } }
5526 @media only screen and (min-width: 810px) {
5527 .flow-text {
5528 font-size: 1.56rem; } }
5529 @media only screen and (min-width: 840px) {
5530 .flow-text {
5531 font-size: 1.584rem; } }
5532 @media only screen and (min-width: 870px) {
5533 .flow-text {
5534 font-size: 1.608rem; } }
5535 @media only screen and (min-width: 900px) {
5536 .flow-text {
5537 font-size: 1.632rem; } }
5538 @media only screen and (min-width: 930px) {
5539 .flow-text {
5540 font-size: 1.656rem; } }
5541 @media only screen and (min-width: 960px) {
5542 .flow-text {
5543 font-size: 1.68rem; } }
5544 @media only screen and (max-width: 360px) {
5545 .flow-text {
5546 font-size: 1.2rem; } }
5547
5548.card-panel {
5549 transition: box-shadow .25s;
5550 padding: 20px;
5551 margin: 0.5rem 0 1rem 0;
5552 border-radius: 2px;
5553 background-color: #fff; }
5554
5555.card {
5556 position: relative;
5557 overflow: hidden;
5558 margin: 0.5rem 0 1rem 0;
5559 background-color: #fff;
5560 transition: box-shadow .25s;
5561 border-radius: 2px; }
5562 .card .card-title {
5563 color: #fff;
5564 font-size: 24px;
5565 font-weight: 300; }
5566 .card .card-title.activator {
5567 cursor: pointer; }
5568 .card.small, .card.medium, .card.large {
5569 position: relative; }
5570 .card.small .card-image, .card.medium .card-image, .card.large .card-image {
5571 overflow: hidden; }
5572 .card.small .card-content, .card.medium .card-content, .card.large .card-content {
5573 overflow: hidden; }
5574 .card.small .card-action, .card.medium .card-action, .card.large .card-action {
5575 position: absolute;
5576 bottom: 0;
5577 left: 0;
5578 right: 0; }
5579 .card.small {
5580 height: 300px; }
5581 .card.small .card-image {
5582 height: 150px; }
5583 .card.small .card-content {
5584 height: 150px; }
5585 .card.medium {
5586 height: 400px; }
5587 .card.medium .card-image {
5588 height: 250px; }
5589 .card.medium .card-content {
5590 height: 150px; }
5591 .card.large {
5592 height: 500px; }
5593 .card.large .card-image {
5594 height: 330px; }
5595 .card.large .card-content {
5596 height: 170px; }
5597 .card .card-image {
5598 position: relative; }
5599 .card .card-image img {
5600 display: block;
5601 border-radius: 2px 2px 0 0;
5602 position: relative;
5603 left: 0;
5604 right: 0;
5605 top: 0;
5606 bottom: 0;
5607 width: 100%; }
5608 .card .card-image .card-title {
5609 position: absolute;
5610 bottom: 0;
5611 left: 0;
5612 padding: 20px; }
5613 .card .card-content {
5614 padding: 20px;
5615 border-radius: 0 0 2px 2px; }
5616 .card .card-content p {
5617 margin: 0;
5618 color: inherit; }
5619 .card .card-content .card-title {
5620 line-height: 48px; }
5621 .card .card-action {
5622 border-top: 1px solid rgba(160, 160, 160, 0.2);
5623 padding: 20px; }
5624 .card .card-action a {
5625 color: #ffab40;
5626 margin-right: 20px;
5627 -webkit-transition: color .3s ease;
5628 -moz-transition: color .3s ease;
5629 -o-transition: color .3s ease;
5630 -ms-transition: color .3s ease;
5631 transition: color .3s ease;
5632 text-transform: uppercase; }
5633 .card .card-action a:hover {
5634 color: #ffd8a6; }
5635 .card .card-reveal {
5636 padding: 20px;
5637 position: absolute;
5638 background-color: #fff;
5639 width: 100%;
5640 overflow-y: auto;
5641 top: 100%;
5642 height: 100%;
5643 z-index: 1;
5644 display: none; }
5645 .card .card-reveal .card-title {
5646 cursor: pointer;
5647 display: block; }
5648
5649#toast-container {
5650 display: block;
5651 position: fixed;
5652 z-index: 10000; }
5653 @media only screen and (max-width : 600px) {
5654 #toast-container {
5655 min-width: 100%;
5656 bottom: 0%; } }
5657 @media only screen and (min-width : 601px) and (max-width : 992px) {
5658 #toast-container {
5659 min-width: 30%;
5660 left: 5%;
5661 bottom: 7%; } }
5662 @media only screen and (min-width : 993px) {
5663 #toast-container {
5664 min-width: 8%;
5665 top: 10%;
5666 right: 7%; } }
5667
5668.toast {
5669 border-radius: 2px;
5670 top: 0;
5671 width: auto;
5672 clear: both;
5673 margin-top: 10px;
5674 position: relative;
5675 max-width: 100%;
5676 height: 48px;
5677 line-height: 48px;
5678 background-color: #323232;
5679 padding: 0 25px;
5680 font-size: 1.1rem;
5681 font-weight: 300;
5682 color: #fff;
5683 display: -webkit-box;
5684 display: -moz-box;
5685 display: -ms-flexbox;
5686 display: -webkit-flex;
5687 display: flex;
5688 -webkit-flex-align: center;
5689 -ms-flex-align: center;
5690 -webkit-align-items: center;
5691 align-items: center;
5692 -webkit-justify-content: space-between;
5693 justify-content: space-between; }
5694 .toast .btn, .toast .btn-large, .toast .btn-flat {
5695 margin: 0;
5696 margin-left: 3rem; }
5697 .toast.rounded {
5698 border-radius: 24px; }
5699 @media only screen and (max-width : 600px) {
5700 .toast {
5701 width: 100%;
5702 border-radius: 0; } }
5703 @media only screen and (min-width : 601px) and (max-width : 992px) {
5704 .toast {
5705 float: left; } }
5706 @media only screen and (min-width : 993px) {
5707 .toast {
5708 float: right; } }
5709
5710.tabs {
5711 display: -webkit-box;
5712 display: -moz-box;
5713 display: -ms-flexbox;
5714 display: -webkit-flex;
5715 display: flex;
5716 position: relative;
5717 height: 48px;
5718 background-color: #fff;
5719 margin: 0 auto;
5720 width: 100%;
5721 white-space: nowrap; }
5722 .tabs .tab {
5723 -webkit-box-flex: 1;
5724 -webkit-flex-grow: 1;
5725 -ms-flex-positive: 1;
5726 flex-grow: 1;
5727 display: block;
5728 float: left;
5729 text-align: center;
5730 line-height: 48px;
5731 height: 48px;
5732 padding: 0 20px;
5733 margin: 0;
5734 text-transform: uppercase;
5735 letter-spacing: .8px;
5736 width: 15%; }
5737 .tabs .tab a {
5738 color: #ee6e73;
5739 display: block;
5740 width: 100%;
5741 height: 100%;
5742 -webkit-transition: color .28s ease;
5743 -moz-transition: color .28s ease;
5744 -o-transition: color .28s ease;
5745 -ms-transition: color .28s ease;
5746 transition: color .28s ease; }
5747 .tabs .tab a:hover {
5748 color: #f9c9cb; }
5749 .tabs .tab.disabled a {
5750 color: #f9c9cb;
5751 cursor: default; }
5752 .tabs .indicator {
5753 position: absolute;
5754 bottom: 0;
5755 height: 2px;
5756 background-color: #f6b2b5;
5757 will-change: left, right; }
5758
5759.tabs .tab {
5760 padding: 0; }
5761
5762.material-tooltip {
5763 padding: 10px 8px;
5764 font-size: 1rem;
5765 z-index: 2000;
5766 background-color: transparent;
5767 border-radius: 2px;
5768 color: #fff;
5769 min-height: 36px;
5770 line-height: 1rem;
5771 opacity: 0;
5772 display: none;
5773 position: absolute;
5774 text-align: center;
5775 overflow: hidden;
5776 left: 0;
5777 top: 0;
5778 will-change: top, left; }
5779
5780.backdrop {
5781 position: absolute;
5782 opacity: 0;
5783 display: none;
5784 height: 7px;
5785 width: 14px;
5786 border-radius: 0 0 14px 14px;
5787 background-color: #323232;
5788 z-index: -1;
5789 -webkit-transform-origin: 50% 10%;
5790 -moz-transform-origin: 50% 10%;
5791 -ms-transform-origin: 50% 10%;
5792 -o-transform-origin: 50% 10%;
5793 transform-origin: 50% 10%;
5794 will-change: transform, opacity; }
5795
5796.btn, .btn-large, .btn-flat {
5797 border: none;
5798 border-radius: 2px;
5799 display: inline-block;
5800 height: 36px;
5801 line-height: 36px;
5802 outline: 0;
5803 padding: 0 2rem;
5804 text-transform: uppercase;
5805 vertical-align: middle;
5806 -webkit-tap-highlight-color: transparent; }
5807
5808.btn.disabled, .disabled.btn-large, .btn-floating.disabled, .btn-large.disabled, .btn:disabled, .btn-large:disabled, .btn-large:disabled, .btn-floating:disabled {
5809 background-color: #DFDFDF !important;
5810 box-shadow: none;
5811 color: #9F9F9F !important;
5812 cursor: default; }
5813 .btn.disabled *, .disabled.btn-large *, .btn-floating.disabled *, .btn-large.disabled *, .btn:disabled *, .btn-large:disabled *, .btn-large:disabled *, .btn-floating:disabled * {
5814 pointer-events: none; }
5815 .btn.disabled:hover, .disabled.btn-large:hover, .btn-floating.disabled:hover, .btn-large.disabled:hover, .btn:disabled:hover, .btn-large:disabled:hover, .btn-large:disabled:hover, .btn-floating:disabled:hover {
5816 background-color: #DFDFDF;
5817 color: #9F9F9F; }
5818
5819.btn i, .btn-large i, .btn-floating i, .btn-large i, .btn-flat i {
5820 font-size: 1.3rem;
5821 line-height: inherit; }
5822
5823.btn, .btn-large {
5824 text-decoration: none;
5825 color: #fff;
5826 background-color: #26a69a;
5827 text-align: center;
5828 letter-spacing: .5px;
5829 -webkit-transition: .2s ease-out;
5830 -moz-transition: .2s ease-out;
5831 -o-transition: .2s ease-out;
5832 -ms-transition: .2s ease-out;
5833 transition: .2s ease-out;
5834 cursor: pointer; }
5835 .btn:hover, .btn-large:hover {
5836 background-color: #2bbbad; }
5837
5838.btn-floating {
5839 display: inline-block;
5840 color: #fff;
5841 position: relative;
5842 overflow: hidden;
5843 z-index: 1;
5844 width: 37px;
5845 height: 37px;
5846 line-height: 37px;
5847 padding: 0;
5848 background-color: #26a69a;
5849 border-radius: 50%;
5850 transition: .3s;
5851 cursor: pointer;
5852 vertical-align: middle; }
5853 .btn-floating i {
5854 width: inherit;
5855 display: inline-block;
5856 text-align: center;
5857 color: #fff;
5858 font-size: 1.6rem;
5859 line-height: 37px; }
5860 .btn-floating:before {
5861 border-radius: 0; }
5862 .btn-floating.btn-large {
5863 width: 55.5px;
5864 height: 55.5px; }
5865 .btn-floating.btn-large i {
5866 line-height: 55.5px; }
5867
5868button.btn-floating {
5869 border: none; }
5870
5871.fixed-action-btn {
5872 position: fixed;
5873 right: 23px;
5874 bottom: 23px;
5875 padding-top: 15px;
5876 margin-bottom: 0;
5877 z-index: 998; }
5878 .fixed-action-btn ul {
5879 left: 0;
5880 right: 0;
5881 text-align: center;
5882 position: absolute;
5883 bottom: 64px;
5884 margin: 0; }
5885 .fixed-action-btn ul li {
5886 margin-bottom: 15px; }
5887 .fixed-action-btn ul a.btn-floating {
5888 opacity: 0; }
5889
5890.btn-flat {
5891 box-shadow: none;
5892 background-color: transparent;
5893 color: #343434;
5894 cursor: pointer; }
5895 .btn-flat.disabled {
5896 color: #b3b3b3;
5897 cursor: default; }
5898
5899.btn-large {
5900 height: 54px;
5901 line-height: 56px; }
5902 .btn-large i {
5903 font-size: 1.6rem; }
5904
5905.btn-block {
5906 display: block; }
5907
5908.dropdown-content {
5909 background-color: #fff;
5910 margin: 0;
5911 display: none;
5912 min-width: 100px;
5913 max-height: 650px;
5914 overflow-y: auto;
5915 opacity: 0;
5916 position: absolute;
5917 z-index: 999;
5918 will-change: width, height; }
5919 .dropdown-content li {
5920 clear: both;
5921 color: rgba(0, 0, 0, 0.87);
5922 cursor: pointer;
5923 line-height: 1.5rem;
5924 width: 100%;
5925 text-align: left;
5926 text-transform: none; }
5927 .dropdown-content li:hover, .dropdown-content li.active {
5928 background-color: #eee; }
5929 .dropdown-content li > a, .dropdown-content li > span {
5930 font-size: 1.2rem;
5931 color: #26a69a;
5932 display: block;
5933 padding: 1rem 1rem; }
5934 .dropdown-content li > a > i {
5935 height: inherit;
5936 line-height: inherit; }
5937
5938/*!
5939 * Waves v0.6.0
5940 * http://fian.my.id/Waves
5941 *
5942 * Copyright 2014 Alfiana E. Sibuea and other contributors
5943 * Released under the MIT license
5944 * https://github.com/fians/Waves/blob/master/LICENSE
5945 */
5946.waves-effect {
5947 position: relative;
5948 cursor: pointer;
5949 display: inline-block;
5950 overflow: hidden;
5951 -webkit-user-select: none;
5952 -moz-user-select: none;
5953 -ms-user-select: none;
5954 user-select: none;
5955 -webkit-tap-highlight-color: transparent;
5956 vertical-align: middle;
5957 z-index: 1;
5958 will-change: opacity, transform;
5959 -webkit-transition: all .3s ease-out;
5960 -moz-transition: all .3s ease-out;
5961 -o-transition: all .3s ease-out;
5962 -ms-transition: all .3s ease-out;
5963 transition: all .3s ease-out; }
5964 .waves-effect .waves-ripple {
5965 position: absolute;
5966 border-radius: 50%;
5967 width: 20px;
5968 height: 20px;
5969 margin-top: -10px;
5970 margin-left: -10px;
5971 opacity: 0;
5972 background: rgba(0, 0, 0, 0.2);
5973 -webkit-transition: all 0.7s ease-out;
5974 -moz-transition: all 0.7s ease-out;
5975 -o-transition: all 0.7s ease-out;
5976 -ms-transition: all 0.7s ease-out;
5977 transition: all 0.7s ease-out;
5978 -webkit-transition-property: -webkit-transform, opacity;
5979 -moz-transition-property: -moz-transform, opacity;
5980 -o-transition-property: -o-transform, opacity;
5981 transition-property: transform, opacity;
5982 -webkit-transform: scale(0);
5983 -moz-transform: scale(0);
5984 -ms-transform: scale(0);
5985 -o-transform: scale(0);
5986 transform: scale(0);
5987 pointer-events: none; }
5988 .waves-effect.waves-light .waves-ripple {
5989 background-color: rgba(255, 255, 255, 0.45); }
5990 .waves-effect.waves-red .waves-ripple {
5991 background-color: rgba(244, 67, 54, 0.7); }
5992 .waves-effect.waves-yellow .waves-ripple {
5993 background-color: rgba(255, 235, 59, 0.7); }
5994 .waves-effect.waves-orange .waves-ripple {
5995 background-color: rgba(255, 152, 0, 0.7); }
5996 .waves-effect.waves-purple .waves-ripple {
5997 background-color: rgba(156, 39, 176, 0.7); }
5998 .waves-effect.waves-green .waves-ripple {
5999 background-color: rgba(76, 175, 80, 0.7); }
6000 .waves-effect.waves-teal .waves-ripple {
6001 background-color: rgba(0, 150, 136, 0.7); }
6002
6003.waves-notransition {
6004 -webkit-transition: none !important;
6005 -moz-transition: none !important;
6006 -o-transition: none !important;
6007 -ms-transition: none !important;
6008 transition: none !important; }
6009
6010.waves-circle {
6011 -webkit-transform: translateZ(0);
6012 -moz-transform: translateZ(0);
6013 -ms-transform: translateZ(0);
6014 -o-transform: translateZ(0);
6015 transform: translateZ(0);
6016 -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); }
6017
6018.waves-input-wrapper {
6019 border-radius: 0.2em;
6020 vertical-align: bottom; }
6021 .waves-input-wrapper .waves-button-input {
6022 position: relative;
6023 top: 0;
6024 left: 0;
6025 z-index: 1; }
6026
6027.waves-circle {
6028 text-align: center;
6029 width: 2.5em;
6030 height: 2.5em;
6031 line-height: 2.5em;
6032 border-radius: 50%;
6033 -webkit-mask-image: none; }
6034
6035.waves-block {
6036 display: block; }
6037
6038/* Firefox Bug: link not triggered */
6039a.waves-effect .waves-ripple {
6040 z-index: -1; }
6041
6042.modal {
6043 display: none;
6044 position: fixed;
6045 left: 0;
6046 right: 0;
6047 background-color: #fafafa;
6048 padding: 0;
6049 max-height: 70%;
6050 width: 55%;
6051 margin: auto;
6052 overflow-y: auto;
6053 border-radius: 2px;
6054 will-change: top, opacity; }
6055 @media only screen and (max-width : 992px) {
6056 .modal {
6057 width: 80%; } }
6058 .modal h1, .modal h2, .modal h3, .modal h4 {
6059 margin-top: 0; }
6060 .modal .modal-content {
6061 padding: 24px; }
6062 .modal .modal-close {
6063 cursor: pointer; }
6064 .modal .modal-footer {
6065 border-radius: 0 0 2px 2px;
6066 background-color: #fafafa;
6067 padding: 4px 6px;
6068 height: 56px;
6069 width: 100%; }
6070 .modal .modal-footer .btn, .modal .modal-footer .btn-large, .modal .modal-footer .btn-flat {
6071 float: right;
6072 margin: 6px 0; }
6073
6074.lean-overlay {
6075 position: fixed;
6076 z-index: 999;
6077 top: -100px;
6078 left: 0;
6079 bottom: 0;
6080 right: 0;
6081 height: 125%;
6082 width: 100%;
6083 background: #000;
6084 display: none;
6085 will-change: opacity; }
6086
6087.modal.modal-fixed-footer {
6088 padding: 0;
6089 height: 70%; }
6090 .modal.modal-fixed-footer .modal-content {
6091 position: absolute;
6092 height: calc(100% - 56px);
6093 max-height: 100%;
6094 width: 100%;
6095 overflow-y: auto; }
6096 .modal.modal-fixed-footer .modal-footer {
6097 border-top: 1px solid rgba(0, 0, 0, 0.1);
6098 position: absolute;
6099 bottom: 0; }
6100
6101.modal.bottom-sheet {
6102 top: auto;
6103 bottom: -100%;
6104 margin: 0;
6105 width: 100%;
6106 max-height: 45%;
6107 border-radius: 0;
6108 will-change: bottom, opacity; }
6109
6110.collapsible {
6111 border-top: 1px solid #ddd;
6112 border-right: 1px solid #ddd;
6113 border-left: 1px solid #ddd;
6114 margin: 0.5rem 0 1rem 0; }
6115
6116.collapsible-header {
6117 display: block;
6118 cursor: pointer;
6119 min-height: 3rem;
6120 line-height: 3rem;
6121 padding: 0 1rem;
6122 background-color: #fff;
6123 border-bottom: 1px solid #ddd; }
6124 .collapsible-header i {
6125 width: 2rem;
6126 font-size: 1.6rem;
6127 line-height: 3rem;
6128 display: block;
6129 float: left;
6130 text-align: center;
6131 margin-right: 1rem; }
6132
6133.collapsible-body {
6134 display: none;
6135 border-bottom: 1px solid #ddd;
6136 -webkit-box-sizing: border-box;
6137 -moz-box-sizing: border-box;
6138 box-sizing: border-box; }
6139 .collapsible-body p {
6140 margin: 0;
6141 padding: 2rem; }
6142
6143.side-nav .collapsible {
6144 border: none;
6145 box-shadow: none; }
6146 .side-nav .collapsible li {
6147 padding: 0; }
6148.side-nav .collapsible-header {
6149 background-color: transparent;
6150 border: none;
6151 line-height: inherit;
6152 height: inherit;
6153 margin: 0 1rem; }
6154 .side-nav .collapsible-header i {
6155 line-height: inherit; }
6156.side-nav .collapsible-body {
6157 border: 0;
6158 background-color: #fff; }
6159 .side-nav .collapsible-body li a {
6160 margin: 0 1rem 0 2rem; }
6161
6162.collapsible.popout {
6163 border: none;
6164 box-shadow: none; }
6165 .collapsible.popout > li {
6166 box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
6167 margin: 0 24px;
6168 transition: margin .35s cubic-bezier(0.25, 0.46, 0.45, 0.94); }
6169 .collapsible.popout > li.active {
6170 box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
6171 margin: 16px 0; }
6172
6173.chip {
6174 display: inline-block;
6175 height: 32px;
6176 font-size: 13px;
6177 font-weight: 500;
6178 color: rgba(0, 0, 0, 0.6);
6179 line-height: 32px;
6180 padding: 0 12px;
6181 border-radius: 16px;
6182 background-color: #E4E4E4; }
6183 .chip img {
6184 float: left;
6185 margin: 0 8px 0 -12px;
6186 height: 32px;
6187 width: 32px;
6188 border-radius: 50%; }
6189 .chip i.material-icons {
6190 cursor: pointer;
6191 float: right;
6192 font-size: 16px;
6193 line-height: 32px;
6194 padding-left: 8px; }
6195
6196.materialboxed {
6197 display: block;
6198 cursor: zoom-in;
6199 position: relative;
6200 -webkit-transition: opacity .4s;
6201 -moz-transition: opacity .4s;
6202 -o-transition: opacity .4s;
6203 -ms-transition: opacity .4s;
6204 transition: opacity .4s; }
6205 .materialboxed:hover {
6206 will-change: left, top, width, height; }
6207 .materialboxed:hover:not(.active) {
6208 opacity: .8; }
6209
6210.materialboxed.active {
6211 cursor: zoom-out; }
6212
6213#materialbox-overlay {
6214 position: fixed;
6215 top: 0;
6216 left: 0;
6217 right: 0;
6218 bottom: 0;
6219 background-color: #292929;
6220 z-index: 999;
6221 will-change: opacity; }
6222
6223.materialbox-caption {
6224 position: fixed;
6225 display: none;
6226 color: #fff;
6227 line-height: 50px;
6228 bottom: 0;
6229 width: 100%;
6230 text-align: center;
6231 padding: 0% 15%;
6232 height: 50px;
6233 z-index: 1000;
6234 -webkit-font-smoothing: antialiased; }
6235
6236/* Remove Focus Boxes */
6237select:focus {
6238 outline: 1px solid #c9f3ef; }
6239
6240button:focus {
6241 outline: none;
6242 background-color: #2ab7a9; }
6243
6244label {
6245 font-size: 0.8rem;
6246 color: #9e9e9e; }
6247
6248/***************************
6249 Text Inputs + Textarea
6250****************************/
6251::-webkit-input-placeholder {
6252 color: #d1d1d1; }
6253
6254:-moz-placeholder {
6255 /* Firefox 18- */
6256 color: #d1d1d1; }
6257
6258::-moz-placeholder {
6259 /* Firefox 19+ */
6260 color: #d1d1d1; }
6261
6262:-ms-input-placeholder {
6263 color: #d1d1d1; }
6264
6265input[type=text], input[type=password], input[type=email], input[type=url], input[type=time], input[type=date], input[type=datetime-local], input[type=tel], input[type=number], input[type=search], textarea.materialize-textarea {
6266 background-color: transparent;
6267 border: none;
6268 border-bottom: 1px solid #9e9e9e;
6269 border-radius: 0;
6270 outline: none;
6271 height: 3rem;
6272 width: 100%;
6273 font-size: 1rem;
6274 margin: 0 0 15px 0;
6275 padding: 0;
6276 box-shadow: none;
6277 -webkit-box-sizing: content-box;
6278 -moz-box-sizing: content-box;
6279 box-sizing: content-box;
6280 transition: all .3s; }
6281 input[type=text]:disabled, input[type=text][readonly="readonly"], input[type=password]:disabled, input[type=password][readonly="readonly"], input[type=email]:disabled, input[type=email][readonly="readonly"], input[type=url]:disabled, input[type=url][readonly="readonly"], input[type=time]:disabled, input[type=time][readonly="readonly"], input[type=date]:disabled, input[type=date][readonly="readonly"], input[type=datetime-local]:disabled, input[type=datetime-local][readonly="readonly"], input[type=tel]:disabled, input[type=tel][readonly="readonly"], input[type=number]:disabled, input[type=number][readonly="readonly"], input[type=search]:disabled, input[type=search][readonly="readonly"], textarea.materialize-textarea:disabled, textarea.materialize-textarea[readonly="readonly"] {
6282 color: rgba(0, 0, 0, 0.26);
6283 border-bottom: 1px dotted rgba(0, 0, 0, 0.26); }
6284 input[type=text]:disabled + label, input[type=text][readonly="readonly"] + label, input[type=password]:disabled + label, input[type=password][readonly="readonly"] + label, input[type=email]:disabled + label, input[type=email][readonly="readonly"] + label, input[type=url]:disabled + label, input[type=url][readonly="readonly"] + label, input[type=time]:disabled + label, input[type=time][readonly="readonly"] + label, input[type=date]:disabled + label, input[type=date][readonly="readonly"] + label, input[type=datetime-local]:disabled + label, input[type=datetime-local][readonly="readonly"] + label, input[type=tel]:disabled + label, input[type=tel][readonly="readonly"] + label, input[type=number]:disabled + label, input[type=number][readonly="readonly"] + label, input[type=search]:disabled + label, input[type=search][readonly="readonly"] + label, textarea.materialize-textarea:disabled + label, textarea.materialize-textarea[readonly="readonly"] + label {
6285 color: rgba(0, 0, 0, 0.26); }
6286 input[type=text]:focus:not([readonly]), input[type=password]:focus:not([readonly]), input[type=email]:focus:not([readonly]), input[type=url]:focus:not([readonly]), input[type=time]:focus:not([readonly]), input[type=date]:focus:not([readonly]), input[type=datetime-local]:focus:not([readonly]), input[type=tel]:focus:not([readonly]), input[type=number]:focus:not([readonly]), input[type=search]:focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) {
6287 border-bottom: 1px solid #26a69a;
6288 box-shadow: 0 1px 0 0 #26a69a; }
6289 input[type=text]:focus:not([readonly]) + label, input[type=password]:focus:not([readonly]) + label, input[type=email]:focus:not([readonly]) + label, input[type=url]:focus:not([readonly]) + label, input[type=time]:focus:not([readonly]) + label, input[type=date]:focus:not([readonly]) + label, input[type=datetime-local]:focus:not([readonly]) + label, input[type=tel]:focus:not([readonly]) + label, input[type=number]:focus:not([readonly]) + label, input[type=search]:focus:not([readonly]) + label, textarea.materialize-textarea:focus:not([readonly]) + label {
6290 color: #26a69a; }
6291 input[type=text].valid, input[type=text]:focus.valid, input[type=password].valid, input[type=password]:focus.valid, input[type=email].valid, input[type=email]:focus.valid, input[type=url].valid, input[type=url]:focus.valid, input[type=time].valid, input[type=time]:focus.valid, input[type=date].valid, input[type=date]:focus.valid, input[type=datetime-local].valid, input[type=datetime-local]:focus.valid, input[type=tel].valid, input[type=tel]:focus.valid, input[type=number].valid, input[type=number]:focus.valid, input[type=search].valid, input[type=search]:focus.valid, textarea.materialize-textarea.valid, textarea.materialize-textarea:focus.valid {
6292 border-bottom: 1px solid #4CAF50;
6293 box-shadow: 0 1px 0 0 #4CAF50; }
6294 input[type=text].valid + label:after, input[type=text]:focus.valid + label:after, input[type=password].valid + label:after, input[type=password]:focus.valid + label:after, input[type=email].valid + label:after, input[type=email]:focus.valid + label:after, input[type=url].valid + label:after, input[type=url]:focus.valid + label:after, input[type=time].valid + label:after, input[type=time]:focus.valid + label:after, input[type=date].valid + label:after, input[type=date]:focus.valid + label:after, input[type=datetime-local].valid + label:after, input[type=datetime-local]:focus.valid + label:after, input[type=tel].valid + label:after, input[type=tel]:focus.valid + label:after, input[type=number].valid + label:after, input[type=number]:focus.valid + label:after, input[type=search].valid + label:after, input[type=search]:focus.valid + label:after, textarea.materialize-textarea.valid + label:after, textarea.materialize-textarea:focus.valid + label:after {
6295 content: attr(data-success);
6296 color: #4CAF50;
6297 opacity: 1; }
6298 input[type=text].invalid, input[type=text]:focus.invalid, input[type=password].invalid, input[type=password]:focus.invalid, input[type=email].invalid, input[type=email]:focus.invalid, input[type=url].invalid, input[type=url]:focus.invalid, input[type=time].invalid, input[type=time]:focus.invalid, input[type=date].invalid, input[type=date]:focus.invalid, input[type=datetime-local].invalid, input[type=datetime-local]:focus.invalid, input[type=tel].invalid, input[type=tel]:focus.invalid, input[type=number].invalid, input[type=number]:focus.invalid, input[type=search].invalid, input[type=search]:focus.invalid, textarea.materialize-textarea.invalid, textarea.materialize-textarea:focus.invalid {
6299 border-bottom: 1px solid #F44336;
6300 box-shadow: 0 1px 0 0 #F44336; }
6301 input[type=text].invalid + label:after, input[type=text]:focus.invalid + label:after, input[type=password].invalid + label:after, input[type=password]:focus.invalid + label:after, input[type=email].invalid + label:after, input[type=email]:focus.invalid + label:after, input[type=url].invalid + label:after, input[type=url]:focus.invalid + label:after, input[type=time].invalid + label:after, input[type=time]:focus.invalid + label:after, input[type=date].invalid + label:after, input[type=date]:focus.invalid + label:after, input[type=datetime-local].invalid + label:after, input[type=datetime-local]:focus.invalid + label:after, input[type=tel].invalid + label:after, input[type=tel]:focus.invalid + label:after, input[type=number].invalid + label:after, input[type=number]:focus.invalid + label:after, input[type=search].invalid + label:after, input[type=search]:focus.invalid + label:after, textarea.materialize-textarea.invalid + label:after, textarea.materialize-textarea:focus.invalid + label:after {
6302 content: attr(data-error);
6303 color: #F44336;
6304 opacity: 1; }
6305 input[type=text] + label:after, input[type=password] + label:after, input[type=email] + label:after, input[type=url] + label:after, input[type=time] + label:after, input[type=date] + label:after, input[type=datetime-local] + label:after, input[type=tel] + label:after, input[type=number] + label:after, input[type=search] + label:after, textarea.materialize-textarea + label:after {
6306 display: block;
6307 content: "";
6308 position: absolute;
6309 top: 65px;
6310 opacity: 0;
6311 transition: .2s opacity ease-out, .2s color ease-out; }
6312
6313.input-field {
6314 position: relative;
6315 margin-top: 1rem; }
6316 .input-field label {
6317 color: #9e9e9e;
6318 position: absolute;
6319 top: 0.8rem;
6320 left: 0.75rem;
6321 font-size: 1rem;
6322 cursor: text;
6323 -webkit-transition: .2s ease-out;
6324 -moz-transition: .2s ease-out;
6325 -o-transition: .2s ease-out;
6326 -ms-transition: .2s ease-out;
6327 transition: .2s ease-out; }
6328 .input-field label.active {
6329 font-size: 0.8rem;
6330 -webkit-transform: translateY(-140%);
6331 -moz-transform: translateY(-140%);
6332 -ms-transform: translateY(-140%);
6333 -o-transform: translateY(-140%);
6334 transform: translateY(-140%); }
6335 .input-field .prefix {
6336 position: absolute;
6337 width: 3rem;
6338 font-size: 2rem;
6339 -webkit-transition: color .2s;
6340 -moz-transition: color .2s;
6341 -o-transition: color .2s;
6342 -ms-transition: color .2s;
6343 transition: color .2s; }
6344 .input-field .prefix.active {
6345 color: #26a69a; }
6346 .input-field .prefix ~ input, .input-field .prefix ~ textarea {
6347 margin-left: 3rem;
6348 width: 92%;
6349 width: calc(100% - 3rem); }
6350 .input-field .prefix ~ textarea {
6351 padding-top: .8rem; }
6352 .input-field .prefix ~ label {
6353 margin-left: 3rem; }
6354 @media only screen and (max-width : 992px) {
6355 .input-field .prefix ~ input {
6356 width: 86%;
6357 width: calc(100% - 3rem); } }
6358 @media only screen and (max-width : 600px) {
6359 .input-field .prefix ~ input {
6360 width: 80%;
6361 width: calc(100% - 3rem); } }
6362
6363.input-field input[type=search] {
6364 display: block;
6365 line-height: inherit;
6366 padding-left: 4rem;
6367 width: calc(100% - 4rem); }
6368 .input-field input[type=search]:focus {
6369 background-color: #fff;
6370 border: 0;
6371 box-shadow: none;
6372 color: #444; }
6373 .input-field input[type=search]:focus + label i, .input-field input[type=search]:focus ~ .mdi-navigation-close, .input-field input[type=search]:focus ~ .material-icons {
6374 color: #444; }
6375 .input-field input[type=search] + label {
6376 left: 1rem; }
6377 .input-field input[type=search] ~ .mdi-navigation-close, .input-field input[type=search] ~ .material-icons {
6378 position: absolute;
6379 top: 0;
6380 right: 1rem;
6381 color: transparent;
6382 cursor: pointer;
6383 font-size: 2rem;
6384 transition: .3s color; }
6385
6386textarea {
6387 width: 100%;
6388 height: 3rem;
6389 background-color: transparent; }
6390 textarea.materialize-textarea {
6391 overflow-y: hidden;
6392 /* prevents scroll bar flash */
6393 padding: 1.6rem 0;
6394 /* prevents text jump on Enter keypress */
6395 resize: none;
6396 min-height: 3rem; }
6397
6398.hiddendiv {
6399 display: none;
6400 white-space: pre-wrap;
6401 word-wrap: break-word;
6402 overflow-wrap: break-word;
6403 /* future version of deprecated 'word-wrap' */
6404 padding-top: 1.2rem;
6405 /* prevents text jump on Enter keypress */ }
6406
6407/***************
6408 Radio Buttons
6409***************/
6410/* Remove default Radio Buttons */
6411[type="radio"]:not(:checked), [type="radio"]:checked {
6412 position: absolute;
6413 left: -9999px;
6414 visibility: hidden; }
6415
6416[type="radio"]:not(:checked) + label, [type="radio"]:checked + label {
6417 position: relative;
6418 padding-left: 35px;
6419 cursor: pointer;
6420 display: inline-block;
6421 height: 25px;
6422 line-height: 25px;
6423 font-size: 1rem;
6424 -webkit-transition: .28s ease;
6425 -moz-transition: .28s ease;
6426 -o-transition: .28s ease;
6427 -ms-transition: .28s ease;
6428 transition: .28s ease;
6429 -webkit-user-select: none;
6430 /* webkit (safari, chrome) browsers */
6431 -moz-user-select: none;
6432 /* mozilla browsers */
6433 -khtml-user-select: none;
6434 /* webkit (konqueror) browsers */
6435 -ms-user-select: none;
6436 /* IE10+ */ }
6437
6438[type="radio"] + label:before, [type="radio"] + label:after {
6439 content: '';
6440 position: absolute;
6441 left: 0;
6442 top: 0;
6443 margin: 4px;
6444 width: 16px;
6445 height: 16px;
6446 z-index: 0;
6447 -webkit-transition: .28s ease;
6448 -moz-transition: .28s ease;
6449 -o-transition: .28s ease;
6450 -ms-transition: .28s ease;
6451 transition: .28s ease; }
6452
6453/* Unchecked styles */
6454[type="radio"]:not(:checked) + label:before {
6455 border-radius: 50%;
6456 border: 2px solid #5a5a5a; }
6457
6458[type="radio"]:not(:checked) + label:after {
6459 border-radius: 50%;
6460 border: 2px solid #5a5a5a;
6461 z-index: -1;
6462 -webkit-transform: scale(0);
6463 -moz-transform: scale(0);
6464 -ms-transform: scale(0);
6465 -o-transform: scale(0);
6466 transform: scale(0); }
6467
6468/* Checked styles */
6469[type="radio"]:checked + label:before {
6470 border-radius: 50%;
6471 border: 2px solid transparent; }
6472
6473[type="radio"]:checked + label:after {
6474 border-radius: 50%;
6475 border: 2px solid #26a69a;
6476 background-color: #26a69a;
6477 z-index: 0;
6478 -webkit-transform: scale(1.02);
6479 -moz-transform: scale(1.02);
6480 -ms-transform: scale(1.02);
6481 -o-transform: scale(1.02);
6482 transform: scale(1.02); }
6483
6484/* Radio With gap */
6485[type="radio"].with-gap:checked + label:before {
6486 border-radius: 50%;
6487 border: 2px solid #26a69a; }
6488
6489[type="radio"].with-gap:checked + label:after {
6490 border-radius: 50%;
6491 border: 2px solid #26a69a;
6492 background-color: #26a69a;
6493 z-index: 0;
6494 -webkit-transform: scale(.5);
6495 -moz-transform: scale(.5);
6496 -ms-transform: scale(.5);
6497 -o-transform: scale(.5);
6498 transform: scale(.5); }
6499
6500/* Disabled Radio With gap */
6501[type="radio"].with-gap:disabled:checked + label:before {
6502 border: 2px solid rgba(0, 0, 0, 0.26); }
6503
6504[type="radio"].with-gap:disabled:checked + label:after {
6505 border: none;
6506 background-color: rgba(0, 0, 0, 0.26); }
6507
6508/* Disabled style */
6509[type="radio"]:disabled:not(:checked) + label:before, [type="radio"]:disabled:checked + label:before {
6510 background-color: transparent;
6511 border-color: rgba(0, 0, 0, 0.26); }
6512
6513[type="radio"]:disabled + label {
6514 color: rgba(0, 0, 0, 0.26); }
6515
6516[type="radio"]:disabled:not(:checked) + label:before {
6517 border-color: rgba(0, 0, 0, 0.26); }
6518
6519[type="radio"]:disabled:checked + label:after {
6520 background-color: rgba(0, 0, 0, 0.26);
6521 border-color: #BDBDBD; }
6522
6523/***************
6524 Checkboxes
6525***************/
6526/* CUSTOM CSS CHECKBOXES */
6527form p {
6528 margin-bottom: 10px;
6529 text-align: left; }
6530
6531form p:last-child {
6532 margin-bottom: 0; }
6533
6534/* Remove default checkbox */
6535[type="checkbox"]:not(:checked), [type="checkbox"]:checked {
6536 position: absolute;
6537 left: -9999px;
6538 visibility: hidden; }
6539
6540[type="checkbox"] {
6541 /* checkbox aspect */ }
6542 [type="checkbox"] + label {
6543 position: relative;
6544 padding-left: 35px;
6545 cursor: pointer;
6546 display: inline-block;
6547 height: 25px;
6548 line-height: 25px;
6549 font-size: 1rem;
6550 -webkit-user-select: none;
6551 /* webkit (safari, chrome) browsers */
6552 -moz-user-select: none;
6553 /* mozilla browsers */
6554 -khtml-user-select: none;
6555 /* webkit (konqueror) browsers */
6556 -ms-user-select: none;
6557 /* IE10+ */ }
6558 [type="checkbox"] + label:before {
6559 content: '';
6560 position: absolute;
6561 top: 0;
6562 left: 0;
6563 width: 18px;
6564 height: 18px;
6565 z-index: 0;
6566 border: 2px solid #5a5a5a;
6567 border-radius: 1px;
6568 margin-top: 2px;
6569 -webkit-transition: 0.2s;
6570 -moz-transition: 0.2s;
6571 -o-transition: 0.2s;
6572 -ms-transition: 0.2s;
6573 transition: 0.2s; }
6574 [type="checkbox"]:not(:checked):disabled + label:before {
6575 border: none;
6576 background-color: rgba(0, 0, 0, 0.26); }
6577
6578[type="checkbox"]:checked + label:before {
6579 top: -4px;
6580 left: -3px;
6581 width: 12px;
6582 height: 22px;
6583 border-top: 2px solid transparent;
6584 border-left: 2px solid transparent;
6585 border-right: 2px solid #26a69a;
6586 border-bottom: 2px solid #26a69a;
6587 -webkit-transform: rotate(40deg);
6588 -moz-transform: rotate(40deg);
6589 -ms-transform: rotate(40deg);
6590 -o-transform: rotate(40deg);
6591 transform: rotate(40deg);
6592 -webkit-backface-visibility: hidden;
6593 -webkit-transform-origin: 100% 100%;
6594 -moz-transform-origin: 100% 100%;
6595 -ms-transform-origin: 100% 100%;
6596 -o-transform-origin: 100% 100%;
6597 transform-origin: 100% 100%; }
6598[type="checkbox"]:checked:disabled + label:before {
6599 border-right: 2px solid rgba(0, 0, 0, 0.26);
6600 border-bottom: 2px solid rgba(0, 0, 0, 0.26); }
6601
6602/* Indeterminate checkbox */
6603[type="checkbox"]:indeterminate + label:before {
6604 left: -10px;
6605 top: -11px;
6606 width: 10px;
6607 height: 22px;
6608 border-top: none;
6609 border-left: none;
6610 border-right: 2px solid #26a69a;
6611 border-bottom: none;
6612 -webkit-transform: rotate(90deg);
6613 -moz-transform: rotate(90deg);
6614 -ms-transform: rotate(90deg);
6615 -o-transform: rotate(90deg);
6616 transform: rotate(90deg);
6617 -webkit-backface-visibility: hidden;
6618 -webkit-transform-origin: 100% 100%;
6619 -moz-transform-origin: 100% 100%;
6620 -ms-transform-origin: 100% 100%;
6621 -o-transform-origin: 100% 100%;
6622 transform-origin: 100% 100%; }
6623[type="checkbox"]:indeterminate:disabled + label:before {
6624 border-right: 2px solid rgba(0, 0, 0, 0.26);
6625 background-color: transparent; }
6626
6627[type="checkbox"].filled-in + label:after {
6628 border-radius: 2px; }
6629[type="checkbox"].filled-in + label:before, [type="checkbox"].filled-in + label:after {
6630 content: '';
6631 left: 0;
6632 position: absolute;
6633 /* .1s delay is for check animation */
6634 transition: border .25s, background-color .25s, width .2s .1s, height .2s .1s, top .2s .1s, left .2s .1s;
6635 z-index: 1; }
6636[type="checkbox"].filled-in:not(:checked) + label:before {
6637 width: 0;
6638 height: 0;
6639 border: 3px solid transparent;
6640 left: 6px;
6641 top: 10px;
6642 -webkit-transform: rotateZ(37deg);
6643 transform: rotateZ(37deg);
6644 -webkit-transform-origin: 20% 40%;
6645 transform-origin: 100% 100%; }
6646[type="checkbox"].filled-in:not(:checked) + label:after {
6647 height: 20px;
6648 width: 20px;
6649 background-color: transparent;
6650 border: 2px solid #5a5a5a;
6651 top: 0px;
6652 z-index: 0; }
6653[type="checkbox"].filled-in:checked + label:before {
6654 top: 0;
6655 left: 1px;
6656 width: 8px;
6657 height: 13px;
6658 border-top: 2px solid transparent;
6659 border-left: 2px solid transparent;
6660 border-right: 2px solid #fff;
6661 border-bottom: 2px solid #fff;
6662 -webkit-transform: rotateZ(37deg);
6663 transform: rotateZ(37deg);
6664 -webkit-transform-origin: 100% 100%;
6665 transform-origin: 100% 100%; }
6666[type="checkbox"].filled-in:checked + label:after {
6667 top: 0px;
6668 width: 20px;
6669 height: 20px;
6670 border: 2px solid #26a69a;
6671 background-color: #26a69a;
6672 z-index: 0; }
6673[type="checkbox"].filled-in:disabled:not(:checked) + label:before {
6674 background-color: transparent;
6675 border: 2px solid transparent; }
6676[type="checkbox"].filled-in:disabled:not(:checked) + label:after {
6677 border-color: transparent;
6678 background-color: #BDBDBD; }
6679[type="checkbox"].filled-in:disabled:checked + label:before {
6680 background-color: transparent; }
6681[type="checkbox"].filled-in:disabled:checked + label:after {
6682 background-color: #BDBDBD;
6683 border-color: #BDBDBD; }
6684
6685/***************
6686 Switch
6687***************/
6688.switch, .switch * {
6689 -webkit-user-select: none;
6690 -moz-user-select: none;
6691 -khtml-user-select: none;
6692 -ms-user-select: none; }
6693
6694.switch label {
6695 cursor: pointer; }
6696
6697.switch label input[type=checkbox] {
6698 opacity: 0;
6699 width: 0;
6700 height: 0; }
6701
6702.switch label input[type=checkbox]:checked + .lever {
6703 background-color: #84c7c1; }
6704
6705.switch label input[type=checkbox]:checked + .lever:after {
6706 background-color: #26a69a; }
6707
6708.switch label .lever {
6709 content: "";
6710 display: inline-block;
6711 position: relative;
6712 width: 40px;
6713 height: 15px;
6714 background-color: #818181;
6715 border-radius: 15px;
6716 margin-right: 10px;
6717 transition: background 0.3s ease;
6718 vertical-align: middle;
6719 margin: 0 16px; }
6720
6721.switch label .lever:after {
6722 content: "";
6723 position: absolute;
6724 display: inline-block;
6725 width: 21px;
6726 height: 21px;
6727 background-color: #F1F1F1;
6728 border-radius: 21px;
6729 box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4);
6730 left: -5px;
6731 top: -3px;
6732 transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease; }
6733
6734input[type=checkbox]:checked:not(:disabled) ~ .lever:active:after {
6735 box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(38, 166, 154, 0.1); }
6736
6737input[type=checkbox]:not(:disabled) ~ .lever:active:after {
6738 box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.08); }
6739
6740.switch label input[type=checkbox]:checked + .lever:after {
6741 left: 24px; }
6742
6743.switch input[type=checkbox][disabled] + .lever {
6744 cursor: default; }
6745
6746.switch label input[type=checkbox][disabled] + .lever:after, .switch label input[type=checkbox][disabled]:checked + .lever:after {
6747 background-color: #BDBDBD; }
6748
6749/***************
6750 Select Field
6751***************/
6752.select-label {
6753 position: absolute; }
6754
6755.select-wrapper {
6756 position: relative; }
6757 .select-wrapper input.select-dropdown {
6758 position: relative;
6759 cursor: pointer;
6760 background-color: transparent;
6761 border: none;
6762 border-bottom: 1px solid #9e9e9e;
6763 outline: none;
6764 height: 3rem;
6765 line-height: 3rem;
6766 width: 100%;
6767 font-size: 1rem;
6768 margin: 0 0 15px 0;
6769 padding: 0;
6770 display: block; }
6771 .select-wrapper span.caret {
6772 color: initial;
6773 position: absolute;
6774 right: 0;
6775 top: 16px;
6776 font-size: 10px; }
6777 .select-wrapper span.caret.disabled {
6778 color: rgba(0, 0, 0, 0.26); }
6779 .select-wrapper + label {
6780 position: absolute;
6781 top: -14px;
6782 font-size: 0.8rem; }
6783
6784select {
6785 display: none; }
6786
6787select.browser-default {
6788 display: block; }
6789
6790select:disabled {
6791 color: rgba(0, 0, 0, 0.3); }
6792
6793.select-wrapper input.select-dropdown:disabled {
6794 color: rgba(0, 0, 0, 0.3);
6795 cursor: default;
6796 -webkit-user-select: none;
6797 /* webkit (safari, chrome) browsers */
6798 -moz-user-select: none;
6799 /* mozilla browsers */
6800 -ms-user-select: none;
6801 /* IE10+ */
6802 border-bottom: 1px solid rgba(0, 0, 0, 0.3); }
6803
6804.select-wrapper i {
6805 color: rgba(0, 0, 0, 0.3); }
6806
6807.select-dropdown li.disabled {
6808 color: rgba(0, 0, 0, 0.3);
6809 background-color: transparent; }
6810
6811/*********************
6812 File Input
6813**********************/
6814.file-field {
6815 position: relative; }
6816 .file-field .file-path-wrapper {
6817 overflow: hidden;
6818 padding-left: 10px; }
6819 .file-field input.file-path {
6820 width: 100%; }
6821 .file-field .btn, .file-field .btn-large {
6822 float: left;
6823 height: 3rem;
6824 line-height: 3rem; }
6825 .file-field span {
6826 cursor: pointer; }
6827 .file-field input[type=file] {
6828 position: absolute;
6829 top: 0;
6830 right: 0;
6831 left: 0;
6832 bottom: 0;
6833 width: 100%;
6834 margin: 0;
6835 padding: 0;
6836 font-size: 20px;
6837 cursor: pointer;
6838 opacity: 0;
6839 filter: alpha(opacity=0); }
6840
6841/***************
6842 Range
6843***************/
6844.range-field {
6845 position: relative; }
6846
6847input[type=range], input[type=range] + .thumb {
6848 cursor: pointer; }
6849
6850input[type=range] {
6851 position: relative;
6852 background-color: transparent;
6853 border: none;
6854 outline: none;
6855 width: 100%;
6856 margin: 15px 0px;
6857 padding: 0; }
6858
6859input[type=range] + .thumb {
6860 position: absolute;
6861 border: none;
6862 height: 0;
6863 width: 0;
6864 border-radius: 50%;
6865 background-color: #26a69a;
6866 top: 10px;
6867 margin-left: -6px;
6868 -webkit-transform-origin: 50% 50%;
6869 -moz-transform-origin: 50% 50%;
6870 -ms-transform-origin: 50% 50%;
6871 -o-transform-origin: 50% 50%;
6872 transform-origin: 50% 50%;
6873 -webkit-transform: rotate(-45deg);
6874 -moz-transform: rotate(-45deg);
6875 -ms-transform: rotate(-45deg);
6876 -o-transform: rotate(-45deg);
6877 transform: rotate(-45deg); }
6878 input[type=range] + .thumb .value {
6879 display: block;
6880 width: 30px;
6881 text-align: center;
6882 color: #26a69a;
6883 font-size: 0;
6884 -webkit-transform: rotate(45deg);
6885 -moz-transform: rotate(45deg);
6886 -ms-transform: rotate(45deg);
6887 -o-transform: rotate(45deg);
6888 transform: rotate(45deg); }
6889 input[type=range] + .thumb.active {
6890 border-radius: 50% 50% 50% 0; }
6891 input[type=range] + .thumb.active .value {
6892 color: #fff;
6893 margin-left: -1px;
6894 margin-top: 8px;
6895 font-size: 10px; }
6896
6897input[type=range]:focus {
6898 outline: none; }
6899
6900input[type=range] {
6901 -webkit-appearance: none; }
6902
6903input[type=range]::-webkit-slider-runnable-track {
6904 height: 3px;
6905 background: #c2c0c2;
6906 border: none; }
6907
6908input[type=range]::-webkit-slider-thumb {
6909 -webkit-appearance: none;
6910 border: none;
6911 height: 14px;
6912 width: 14px;
6913 border-radius: 50%;
6914 background-color: #26a69a;
6915 transform-origin: 50% 50%;
6916 margin: -5px 0 0 0;
6917 -webkit-transition: 0.3s;
6918 -moz-transition: 0.3s;
6919 -o-transition: 0.3s;
6920 -ms-transition: 0.3s;
6921 transition: 0.3s; }
6922
6923input[type=range]:focus::-webkit-slider-runnable-track {
6924 background: #ccc; }
6925
6926input[type=range] {
6927 /* fix for FF unable to apply focus style bug */
6928 border: 1px solid white;
6929 /*required for proper track sizing in FF*/ }
6930
6931input[type=range]::-moz-range-track {
6932 height: 3px;
6933 background: #ddd;
6934 border: none; }
6935
6936input[type=range]::-moz-range-thumb {
6937 border: none;
6938 height: 14px;
6939 width: 14px;
6940 border-radius: 50%;
6941 background: #26a69a;
6942 margin-top: -5px; }
6943
6944/*hide the outline behind the border*/
6945input[type=range]:-moz-focusring {
6946 outline: 1px solid white;
6947 outline-offset: -1px; }
6948
6949input[type=range]:focus::-moz-range-track {
6950 background: #ccc; }
6951
6952input[type=range]::-ms-track {
6953 height: 3px;
6954 /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */
6955 background: transparent;
6956 /*leave room for the larger thumb to overflow with a transparent border */
6957 border-color: transparent;
6958 border-width: 6px 0;
6959 /*remove default tick marks*/
6960 color: transparent; }
6961
6962input[type=range]::-ms-fill-lower {
6963 background: #777; }
6964
6965input[type=range]::-ms-fill-upper {
6966 background: #ddd; }
6967
6968input[type=range]::-ms-thumb {
6969 border: none;
6970 height: 14px;
6971 width: 14px;
6972 border-radius: 50%;
6973 background: #26a69a; }
6974
6975input[type=range]:focus::-ms-fill-lower {
6976 background: #888; }
6977
6978input[type=range]:focus::-ms-fill-upper {
6979 background: #ccc; }
6980
6981/***************************
6982 Text Inputs + Textarea
6983****************************/
6984select {
6985 background-color: rgba(255, 255, 255, 0.9);
6986 width: 100%;
6987 padding: 5px;
6988 border: 1px solid #f2f2f2;
6989 border-radius: 2px;
6990 height: 3rem; }
6991
6992/***************
6993 Nav List
6994***************/
6995.table-of-contents.fixed {
6996 position: fixed; }
6997.table-of-contents li {
6998 padding: 2px 0; }
6999.table-of-contents a {
7000 display: inline-block;
7001 font-weight: 300;
7002 color: #757575;
7003 padding-left: 20px;
7004 height: 1.5rem;
7005 line-height: 1.5rem;
7006 letter-spacing: .4;
7007 display: inline-block; }
7008 .table-of-contents a:hover {
7009 color: #a8a8a8;
7010 padding-left: 19px;
7011 border-left: 1px solid #ea4a4f; }
7012 .table-of-contents a.active {
7013 font-weight: 500;
7014 padding-left: 18px;
7015 border-left: 2px solid #ea4a4f; }
7016
7017.side-nav {
7018 position: fixed;
7019 width: 240px;
7020 left: -105%;
7021 top: 0;
7022 margin: 0;
7023 height: 100%;
7024 height: calc(100% + 60px);
7025 height: -moz-calc(100%);
7026 padding-bottom: 60px;
7027 background-color: #fff;
7028 z-index: 999;
7029 overflow-y: auto;
7030 will-change: left; }
7031 .side-nav.right-aligned {
7032 will-change: right;
7033 right: -105%;
7034 left: auto; }
7035 .side-nav .collapsible {
7036 margin: 0; }
7037 .side-nav li {
7038 float: none;
7039 padding: 0 15px; }
7040 .side-nav li:hover, .side-nav li.active {
7041 background-color: #ddd; }
7042 .side-nav a {
7043 color: #444;
7044 display: block;
7045 font-size: 1rem;
7046 height: 64px;
7047 line-height: 64px;
7048 padding: 0 15px; }
7049
7050.drag-target {
7051 height: 100%;
7052 width: 10px;
7053 position: fixed;
7054 top: 0;
7055 z-index: 998; }
7056
7057.side-nav.fixed a {
7058 display: block;
7059 padding: 0 15px;
7060 color: #444; }
7061
7062.side-nav.fixed {
7063 left: 0;
7064 position: fixed; }
7065 .side-nav.fixed.right-aligned {
7066 right: 0;
7067 left: auto; }
7068
7069@media only screen and (max-width : 992px) {
7070 .side-nav.fixed {
7071 left: -105%; }
7072 .side-nav.fixed.right-aligned {
7073 right: -105%;
7074 left: auto; } }
7075
7076.side-nav .collapsible-body li.active, .side-nav.fixed .collapsible-body li.active {
7077 background-color: #ee6e73; }
7078 .side-nav .collapsible-body li.active a, .side-nav.fixed .collapsible-body li.active a {
7079 color: #fff; }
7080
7081#sidenav-overlay {
7082 position: fixed;
7083 top: 0;
7084 left: 0;
7085 right: 0;
7086 height: 120vh;
7087 background-color: rgba(0, 0, 0, 0.5);
7088 z-index: 997;
7089 will-change: opacity; }
7090
7091/*
7092 @license
7093 Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
7094 This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
7095 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
7096 The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
7097 Code distributed by Google as part of the polymer project is also
7098 subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
7099 */
7100/**************************/
7101/* STYLES FOR THE SPINNER */
7102/**************************/
7103/*
7104 * Constants:
7105 * STROKEWIDTH = 3px
7106 * ARCSIZE = 270 degrees (amount of circle the arc takes up)
7107 * ARCTIME = 1333ms (time it takes to expand and contract arc)
7108 * ARCSTARTROT = 216 degrees (how much the start location of the arc
7109 * should rotate each time, 216 gives us a
7110 * 5 pointed star shape (it's 360/5 * 3).
7111 * For a 7 pointed star, we might do
7112 * 360/7 * 3 = 154.286)
7113 * CONTAINERWIDTH = 28px
7114 * SHRINK_TIME = 400ms
7115 */
7116.preloader-wrapper {
7117 display: inline-block;
7118 position: relative;
7119 width: 48px;
7120 height: 48px; }
7121 .preloader-wrapper.small {
7122 width: 36px;
7123 height: 36px; }
7124 .preloader-wrapper.big {
7125 width: 64px;
7126 height: 64px; }
7127 .preloader-wrapper.active {
7128 /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */
7129 -webkit-animation: container-rotate 1568ms linear infinite;
7130 animation: container-rotate 1568ms linear infinite; }
7131
7132@-webkit-keyframes container-rotate {
7133 to {
7134 -webkit-transform: rotate(360deg); } }
7135
7136@keyframes container-rotate {
7137 to {
7138 transform: rotate(360deg); } }
7139
7140.spinner-layer {
7141 position: absolute;
7142 width: 100%;
7143 height: 100%;
7144 opacity: 0;
7145 border-color: #26a69a; }
7146
7147.spinner-blue, .spinner-blue-only {
7148 border-color: #4285f4; }
7149
7150.spinner-red, .spinner-red-only {
7151 border-color: #db4437; }
7152
7153.spinner-yellow, .spinner-yellow-only {
7154 border-color: #f4b400; }
7155
7156.spinner-green, .spinner-green-only {
7157 border-color: #0f9d58; }
7158
7159/**
7160 * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee):
7161 *
7162 * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't
7163 * guarantee that the animation will start _exactly_ after that value. So we avoid using
7164 * animation-delay and instead set custom keyframes for each color (as redundant as it
7165 * seems).
7166 *
7167 * We write out each animation in full (instead of separating animation-name,
7168 * animation-duration, etc.) because under the polyfill, Safari does not recognize those
7169 * specific properties properly, treats them as -webkit-animation, and overrides the
7170 * other animation rules. See https://github.com/Polymer/platform/issues/53.
7171 */
7172.active .spinner-layer.spinner-blue {
7173 /* durations: 4 * ARCTIME */
7174 -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
7175 animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
7176
7177.active .spinner-layer.spinner-red {
7178 /* durations: 4 * ARCTIME */
7179 -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
7180 animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
7181
7182.active .spinner-layer.spinner-yellow {
7183 /* durations: 4 * ARCTIME */
7184 -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
7185 animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
7186
7187.active .spinner-layer.spinner-green {
7188 /* durations: 4 * ARCTIME */
7189 -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
7190 animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
7191
7192.active .spinner-layer, .active .spinner-layer.spinner-blue-only, .active .spinner-layer.spinner-red-only, .active .spinner-layer.spinner-yellow-only, .active .spinner-layer.spinner-green-only {
7193 /* durations: 4 * ARCTIME */
7194 opacity: 1;
7195 -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
7196 animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
7197
7198@-webkit-keyframes fill-unfill-rotate {
7199 /* 0.5 * ARCSIZE */
7200 /* 1 * ARCSIZE */
7201 /* 1.5 * ARCSIZE */
7202 /* 2 * ARCSIZE */
7203 /* 2.5 * ARCSIZE */
7204 /* 3 * ARCSIZE */
7205 /* 3.5 * ARCSIZE */
7206 /* 4 * ARCSIZE */
7207 12.5% {
7208 -webkit-transform: rotate(135deg); }
7209
7210 25% {
7211 -webkit-transform: rotate(270deg); }
7212
7213 37.5% {
7214 -webkit-transform: rotate(405deg); }
7215
7216 50% {
7217 -webkit-transform: rotate(540deg); }
7218
7219 62.5% {
7220 -webkit-transform: rotate(675deg); }
7221
7222 75% {
7223 -webkit-transform: rotate(810deg); }
7224
7225 87.5% {
7226 -webkit-transform: rotate(945deg); }
7227
7228 to {
7229 -webkit-transform: rotate(1080deg); } }
7230
7231@keyframes fill-unfill-rotate {
7232 /* 0.5 * ARCSIZE */
7233 /* 1 * ARCSIZE */
7234 /* 1.5 * ARCSIZE */
7235 /* 2 * ARCSIZE */
7236 /* 2.5 * ARCSIZE */
7237 /* 3 * ARCSIZE */
7238 /* 3.5 * ARCSIZE */
7239 /* 4 * ARCSIZE */
7240 12.5% {
7241 transform: rotate(135deg); }
7242
7243 25% {
7244 transform: rotate(270deg); }
7245
7246 37.5% {
7247 transform: rotate(405deg); }
7248
7249 50% {
7250 transform: rotate(540deg); }
7251
7252 62.5% {
7253 transform: rotate(675deg); }
7254
7255 75% {
7256 transform: rotate(810deg); }
7257
7258 87.5% {
7259 transform: rotate(945deg); }
7260
7261 to {
7262 transform: rotate(1080deg); } }
7263
7264@-webkit-keyframes blue-fade-in-out {
7265 from {
7266 opacity: 1; }
7267
7268 25% {
7269 opacity: 1; }
7270
7271 26% {
7272 opacity: 0; }
7273
7274 89% {
7275 opacity: 0; }
7276
7277 90% {
7278 opacity: 1; }
7279
7280 100% {
7281 opacity: 1; } }
7282
7283@keyframes blue-fade-in-out {
7284 from {
7285 opacity: 1; }
7286
7287 25% {
7288 opacity: 1; }
7289
7290 26% {
7291 opacity: 0; }
7292
7293 89% {
7294 opacity: 0; }
7295
7296 90% {
7297 opacity: 1; }
7298
7299 100% {
7300 opacity: 1; } }
7301
7302@-webkit-keyframes red-fade-in-out {
7303 from {
7304 opacity: 0; }
7305
7306 15% {
7307 opacity: 0; }
7308
7309 25% {
7310 opacity: 1; }
7311
7312 50% {
7313 opacity: 1; }
7314
7315 51% {
7316 opacity: 0; } }
7317
7318@keyframes red-fade-in-out {
7319 from {
7320 opacity: 0; }
7321
7322 15% {
7323 opacity: 0; }
7324
7325 25% {
7326 opacity: 1; }
7327
7328 50% {
7329 opacity: 1; }
7330
7331 51% {
7332 opacity: 0; } }
7333
7334@-webkit-keyframes yellow-fade-in-out {
7335 from {
7336 opacity: 0; }
7337
7338 40% {
7339 opacity: 0; }
7340
7341 50% {
7342 opacity: 1; }
7343
7344 75% {
7345 opacity: 1; }
7346
7347 76% {
7348 opacity: 0; } }
7349
7350@keyframes yellow-fade-in-out {
7351 from {
7352 opacity: 0; }
7353
7354 40% {
7355 opacity: 0; }
7356
7357 50% {
7358 opacity: 1; }
7359
7360 75% {
7361 opacity: 1; }
7362
7363 76% {
7364 opacity: 0; } }
7365
7366@-webkit-keyframes green-fade-in-out {
7367 from {
7368 opacity: 0; }
7369
7370 65% {
7371 opacity: 0; }
7372
7373 75% {
7374 opacity: 1; }
7375
7376 90% {
7377 opacity: 1; }
7378
7379 100% {
7380 opacity: 0; } }
7381
7382@keyframes green-fade-in-out {
7383 from {
7384 opacity: 0; }
7385
7386 65% {
7387 opacity: 0; }
7388
7389 75% {
7390 opacity: 1; }
7391
7392 90% {
7393 opacity: 1; }
7394
7395 100% {
7396 opacity: 0; } }
7397
7398/**
7399 * Patch the gap that appear between the two adjacent div.circle-clipper while the
7400 * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).
7401 */
7402.gap-patch {
7403 position: absolute;
7404 top: 0;
7405 left: 45%;
7406 width: 10%;
7407 height: 100%;
7408 overflow: hidden;
7409 border-color: inherit; }
7410
7411.gap-patch .circle {
7412 width: 1000%;
7413 left: -450%; }
7414
7415.circle-clipper {
7416 display: inline-block;
7417 position: relative;
7418 width: 50%;
7419 height: 100%;
7420 overflow: hidden;
7421 border-color: inherit; }
7422 .circle-clipper .circle {
7423 width: 200%;
7424 height: 100%;
7425 border-width: 3px;
7426 /* STROKEWIDTH */
7427 border-style: solid;
7428 border-color: inherit;
7429 border-bottom-color: transparent !important;
7430 border-radius: 50%;
7431 -webkit-animation: none;
7432 animation: none;
7433 position: absolute;
7434 top: 0;
7435 right: 0;
7436 bottom: 0; }
7437 .circle-clipper.left .circle {
7438 left: 0;
7439 border-right-color: transparent !important;
7440 -webkit-transform: rotate(129deg);
7441 transform: rotate(129deg); }
7442 .circle-clipper.right .circle {
7443 left: -100%;
7444 border-left-color: transparent !important;
7445 -webkit-transform: rotate(-129deg);
7446 transform: rotate(-129deg); }
7447
7448.active .circle-clipper.left .circle {
7449 /* duration: ARCTIME */
7450 -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
7451 animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
7452
7453.active .circle-clipper.right .circle {
7454 /* duration: ARCTIME */
7455 -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
7456 animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
7457
7458@-webkit-keyframes left-spin {
7459 from {
7460 -webkit-transform: rotate(130deg); }
7461
7462 50% {
7463 -webkit-transform: rotate(-5deg); }
7464
7465 to {
7466 -webkit-transform: rotate(130deg); } }
7467
7468@keyframes left-spin {
7469 from {
7470 transform: rotate(130deg); }
7471
7472 50% {
7473 transform: rotate(-5deg); }
7474
7475 to {
7476 transform: rotate(130deg); } }
7477
7478@-webkit-keyframes right-spin {
7479 from {
7480 -webkit-transform: rotate(-130deg); }
7481
7482 50% {
7483 -webkit-transform: rotate(5deg); }
7484
7485 to {
7486 -webkit-transform: rotate(-130deg); } }
7487
7488@keyframes right-spin {
7489 from {
7490 transform: rotate(-130deg); }
7491
7492 50% {
7493 transform: rotate(5deg); }
7494
7495 to {
7496 transform: rotate(-130deg); } }
7497
7498#spinnerContainer.cooldown {
7499 /* duration: SHRINK_TIME */
7500 -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);
7501 animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); }
7502
7503@-webkit-keyframes fade-out {
7504 from {
7505 opacity: 1; }
7506
7507 to {
7508 opacity: 0; } }
7509
7510@keyframes fade-out {
7511 from {
7512 opacity: 1; }
7513
7514 to {
7515 opacity: 0; } }
7516
7517.slider {
7518 position: relative;
7519 height: 400px;
7520 width: 100%; }
7521 .slider.fullscreen {
7522 height: 100%;
7523 width: 100%;
7524 position: absolute;
7525 top: 0;
7526 left: 0;
7527 right: 0;
7528 bottom: 0; }
7529 .slider.fullscreen ul.slides {
7530 height: 100%; }
7531 .slider.fullscreen ul.indicators {
7532 z-index: 2;
7533 bottom: 30px; }
7534 .slider .slides {
7535 background-color: #9e9e9e;
7536 margin: 0;
7537 height: 400px; }
7538 .slider .slides li {
7539 opacity: 0;
7540 position: absolute;
7541 top: 0;
7542 left: 0;
7543 z-index: 1;
7544 width: 100%;
7545 height: inherit;
7546 overflow: hidden; }
7547 .slider .slides li img {
7548 height: 100%;
7549 width: 100%;
7550 background-size: cover;
7551 background-position: center; }
7552 .slider .slides li .caption {
7553 color: #fff;
7554 position: absolute;
7555 top: 15%;
7556 left: 15%;
7557 width: 70%;
7558 opacity: 0; }
7559 .slider .slides li .caption p {
7560 color: #e0e0e0; }
7561 .slider .slides li.active {
7562 z-index: 2; }
7563 .slider .indicators {
7564 position: absolute;
7565 text-align: center;
7566 left: 0;
7567 right: 0;
7568 bottom: 0;
7569 margin: 0; }
7570 .slider .indicators .indicator-item {
7571 display: inline-block;
7572 position: relative;
7573 cursor: pointer;
7574 height: 16px;
7575 width: 16px;
7576 margin: 0 12px;
7577 background-color: #e0e0e0;
7578 -webkit-transition: background-color .3s;
7579 -moz-transition: background-color .3s;
7580 -o-transition: background-color .3s;
7581 -ms-transition: background-color .3s;
7582 transition: background-color .3s;
7583 border-radius: 50%; }
7584 .slider .indicators .indicator-item.active {
7585 background-color: #4CAF50; }
7586
7587/* ==========================================================================
7588 $BASE-PICKER
7589 ========================================================================== */
7590/**
7591 * Note: the root picker element should *NOT* be styled more than what's here.
7592 */
7593.picker {
7594 font-size: 16px;
7595 text-align: left;
7596 line-height: 1.2;
7597 color: #000000;
7598 position: absolute;
7599 z-index: 10000;
7600 -webkit-user-select: none;
7601 -moz-user-select: none;
7602 -ms-user-select: none;
7603 user-select: none; }
7604
7605/**
7606 * The picker input element.
7607 */
7608.picker__input {
7609 cursor: default; }
7610
7611/**
7612 * When the picker is opened, the input element is "activated".
7613 */
7614.picker__input.picker__input--active {
7615 border-color: #0089ec; }
7616
7617/**
7618 * The holder is the only "scrollable" top-level container element.
7619 */
7620.picker__holder {
7621 width: 100%;
7622 overflow-y: auto;
7623 -webkit-overflow-scrolling: touch; }
7624
7625/*!
7626 * Default mobile-first, responsive styling for pickadate.js
7627 * Demo: http://amsul.github.io/pickadate.js
7628 */
7629/**
7630 * Note: the root picker element should *NOT* be styled more than what's here.
7631 */
7632/**
7633 * Make the holder and frame fullscreen.
7634 */
7635.picker__holder, .picker__frame {
7636 bottom: 0;
7637 left: 0;
7638 right: 0;
7639 top: 100%; }
7640
7641/**
7642 * The holder should overlay the entire screen.
7643 */
7644.picker__holder {
7645 position: fixed;
7646 -webkit-transition: background 0.15s ease-out, top 0s 0.15s;
7647 -moz-transition: background 0.15s ease-out, top 0s 0.15s;
7648 transition: background 0.15s ease-out, top 0s 0.15s;
7649 -webkit-backface-visibility: hidden; }
7650
7651/**
7652 * The frame that bounds the box contents of the picker.
7653 */
7654.picker__frame {
7655 position: absolute;
7656 margin: 0 auto;
7657 min-width: 256px;
7658 width: 300px;
7659 max-height: 350px;
7660 -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
7661 filter: alpha(opacity=0);
7662 -moz-opacity: 0;
7663 opacity: 0;
7664 -webkit-transition: all 0.15s ease-out;
7665 -moz-transition: all 0.15s ease-out;
7666 transition: all 0.15s ease-out; }
7667
7668@media (min-height: 28.875em) {
7669 .picker__frame {
7670 overflow: visible;
7671 top: auto;
7672 bottom: -100%;
7673 max-height: 80%; } }
7674
7675@media (min-height: 40.125em) {
7676 .picker__frame {
7677 margin-bottom: 7.5%; } }
7678
7679/**
7680 * The wrapper sets the stage to vertically align the box contents.
7681 */
7682.picker__wrap {
7683 display: table;
7684 width: 100%;
7685 height: 100%; }
7686
7687@media (min-height: 28.875em) {
7688 .picker__wrap {
7689 display: block; } }
7690
7691/**
7692 * The box contains all the picker contents.
7693 */
7694.picker__box {
7695 background: #ffffff;
7696 display: table-cell;
7697 vertical-align: middle; }
7698
7699@media (min-height: 28.875em) {
7700 .picker__box {
7701 display: block;
7702 border: 1px solid #777777;
7703 border-top-color: #898989;
7704 border-bottom-width: 0;
7705 -webkit-border-radius: 5px 5px 0 0;
7706 -moz-border-radius: 5px 5px 0 0;
7707 border-radius: 5px 5px 0 0;
7708 -webkit-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24);
7709 -moz-box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24);
7710 box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24); } }
7711
7712/**
7713 * When the picker opens...
7714 */
7715.picker--opened .picker__holder {
7716 top: 0;
7717 background: transparent;
7718 -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)";
7719 zoom: 1;
7720 background: rgba(0, 0, 0, 0.32);
7721 -webkit-transition: background 0.15s ease-out;
7722 -moz-transition: background 0.15s ease-out;
7723 transition: background 0.15s ease-out; }
7724
7725.picker--opened .picker__frame {
7726 top: 0;
7727 -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
7728 filter: alpha(opacity=100);
7729 -moz-opacity: 1;
7730 opacity: 1; }
7731
7732@media (min-height: 35.875em) {
7733 .picker--opened .picker__frame {
7734 top: 10%;
7735 bottom: 20% auto; } }
7736
7737/**
7738 * For `large` screens, transform into an inline picker.
7739 */
7740/* ==========================================================================
7741 CUSTOM MATERIALIZE STYLES
7742 ========================================================================== */
7743.picker__input.picker__input--active {
7744 border-color: #E3F2FD; }
7745
7746.picker__frame {
7747 margin: 0 auto;
7748 max-width: 325px; }
7749
7750@media (min-height: 38.875em) {
7751 .picker--opened .picker__frame {
7752 top: 10%;
7753 bottom: auto; } }
7754
7755/* ==========================================================================
7756 $BASE-DATE-PICKER
7757 ========================================================================== */
7758/**
7759 * The picker box.
7760 */
7761.picker__box {
7762 padding: 0 1em; }
7763
7764/**
7765 * The header containing the month and year stuff.
7766 */
7767.picker__header {
7768 text-align: center;
7769 position: relative;
7770 margin-top: .75em; }
7771
7772/**
7773 * The month and year labels.
7774 */
7775.picker__month, .picker__year {
7776 display: inline-block;
7777 margin-left: .25em;
7778 margin-right: .25em; }
7779
7780/**
7781 * The month and year selectors.
7782 */
7783.picker__select--month, .picker__select--year {
7784 height: 2em;
7785 padding: 0;
7786 margin-left: .25em;
7787 margin-right: .25em; }
7788
7789.picker__select--month.browser-default {
7790 display: inline;
7791 background-color: #FFFFFF;
7792 width: 40%; }
7793
7794.picker__select--year.browser-default {
7795 display: inline;
7796 background-color: #FFFFFF;
7797 width: 25%; }
7798
7799.picker__select--month:focus, .picker__select--year:focus {
7800 border-color: rgba(0, 0, 0, 0.05); }
7801
7802/**
7803 * The month navigation buttons.
7804 */
7805.picker__nav--prev, .picker__nav--next {
7806 position: absolute;
7807 padding: .5em 1.25em;
7808 width: 1em;
7809 height: 1em;
7810 box-sizing: content-box;
7811 top: -0.25em; }
7812
7813.picker__nav--prev {
7814 left: -1em;
7815 padding-right: 1.25em; }
7816
7817.picker__nav--next {
7818 right: -1em;
7819 padding-left: 1.25em; }
7820
7821.picker__nav--disabled, .picker__nav--disabled:hover, .picker__nav--disabled:before, .picker__nav--disabled:before:hover {
7822 cursor: default;
7823 background: none;
7824 border-right-color: #f5f5f5;
7825 border-left-color: #f5f5f5; }
7826
7827/**
7828 * The calendar table of dates
7829 */
7830.picker__table {
7831 text-align: center;
7832 border-collapse: collapse;
7833 border-spacing: 0;
7834 table-layout: fixed;
7835 font-size: 1rem;
7836 width: 100%;
7837 margin-top: .75em;
7838 margin-bottom: .5em; }
7839
7840.picker__table th, .picker__table td {
7841 text-align: center; }
7842
7843.picker__table td {
7844 margin: 0;
7845 padding: 0; }
7846
7847/**
7848 * The weekday labels
7849 */
7850.picker__weekday {
7851 width: 14.285714286%;
7852 font-size: .75em;
7853 padding-bottom: .25em;
7854 color: #999999;
7855 font-weight: 500;
7856 /* Increase the spacing a tad */ }
7857
7858@media (min-height: 33.875em) {
7859 .picker__weekday {
7860 padding-bottom: .5em; } }
7861
7862/**
7863 * The days on the calendar
7864 */
7865.picker__day--today {
7866 position: relative;
7867 color: #595959;
7868 letter-spacing: -.3;
7869 padding: .75rem 0;
7870 font-weight: 400;
7871 border: 1px solid transparent; }
7872
7873.picker__day--disabled:before {
7874 border-top-color: #aaaaaa; }
7875
7876.picker__day--infocus:hover {
7877 cursor: pointer;
7878 color: #000;
7879 font-weight: 500; }
7880
7881.picker__day--outfocus {
7882 display: none;
7883 padding: .75rem 0;
7884 color: #fff; }
7885
7886.picker__day--outfocus:hover {
7887 cursor: pointer;
7888 color: #dddddd;
7889 font-weight: 500; }
7890
7891.picker__day--highlighted:hover, .picker--focused .picker__day--highlighted {
7892 cursor: pointer; }
7893
7894.picker__day--selected, .picker__day--selected:hover, .picker--focused .picker__day--selected {
7895 border-radius: 50%;
7896 -webkit-transform: scale(.75);
7897 -moz-transform: scale(.75);
7898 -ms-transform: scale(.75);
7899 -o-transform: scale(.75);
7900 transform: scale(.75);
7901 background: #0089ec;
7902 color: #ffffff; }
7903
7904.picker__day--disabled, .picker__day--disabled:hover, .picker--focused .picker__day--disabled {
7905 background: #f5f5f5;
7906 border-color: #f5f5f5;
7907 color: #dddddd;
7908 cursor: default; }
7909
7910.picker__day--highlighted.picker__day--disabled, .picker__day--highlighted.picker__day--disabled:hover {
7911 background: #bbbbbb; }
7912
7913/**
7914 * The footer containing the "today", "clear", and "close" buttons.
7915 */
7916.picker__footer {
7917 text-align: center;
7918 display: flex;
7919 align-items: center;
7920 justify-content: space-between; }
7921
7922.picker__button--today, .picker__button--clear, .picker__button--close {
7923 border: 1px solid #ffffff;
7924 background: #ffffff;
7925 font-size: .8em;
7926 padding: .66em 0;
7927 font-weight: bold;
7928 width: 33%;
7929 display: inline-block;
7930 vertical-align: bottom; }
7931
7932.picker__button--today:hover, .picker__button--clear:hover, .picker__button--close:hover {
7933 cursor: pointer;
7934 color: #000000;
7935 background: #b1dcfb;
7936 border-bottom-color: #b1dcfb; }
7937
7938.picker__button--today:focus, .picker__button--clear:focus, .picker__button--close:focus {
7939 background: #b1dcfb;
7940 border-color: rgba(0, 0, 0, 0.05);
7941 outline: none; }
7942
7943.picker__button--today:before, .picker__button--clear:before, .picker__button--close:before {
7944 position: relative;
7945 display: inline-block;
7946 height: 0; }
7947
7948.picker__button--today:before, .picker__button--clear:before {
7949 content: " ";
7950 margin-right: .45em; }
7951
7952.picker__button--today:before {
7953 top: -0.05em;
7954 width: 0;
7955 border-top: 0.66em solid #0059bc;
7956 border-left: .66em solid transparent; }
7957
7958.picker__button--clear:before {
7959 top: -0.25em;
7960 width: .66em;
7961 border-top: 3px solid #ee2200; }
7962
7963.picker__button--close:before {
7964 content: "\D7";
7965 top: -0.1em;
7966 vertical-align: top;
7967 font-size: 1.1em;
7968 margin-right: .35em;
7969 color: #777777; }
7970
7971.picker__button--today[disabled], .picker__button--today[disabled]:hover {
7972 background: #f5f5f5;
7973 border-color: #f5f5f5;
7974 color: #dddddd;
7975 cursor: default; }
7976
7977.picker__button--today[disabled]:before {
7978 border-top-color: #aaaaaa; }
7979
7980/* ==========================================================================
7981 CUSTOM MATERIALIZE STYLES
7982 ========================================================================== */
7983.picker__box {
7984 border-radius: 2px;
7985 overflow: hidden; }
7986
7987.picker__date-display {
7988 text-align: center;
7989 background-color: #26a69a;
7990 color: #fff;
7991 padding-bottom: 15px;
7992 font-weight: 300; }
7993
7994.picker__nav--prev:hover, .picker__nav--next:hover {
7995 cursor: pointer;
7996 color: #000000;
7997 background: #a1ded8; }
7998
7999.picker__weekday-display {
8000 background-color: #1f897f;
8001 padding: 10px;
8002 font-weight: 200;
8003 letter-spacing: .5;
8004 font-size: 1rem;
8005 margin-bottom: 15px; }
8006
8007.picker__month-display {
8008 text-transform: uppercase;
8009 font-size: 2rem; }
8010
8011.picker__day-display {
8012 font-size: 4.5rem;
8013 font-weight: 400; }
8014
8015.picker__year-display {
8016 font-size: 1.8rem;
8017 color: rgba(255, 255, 255, 0.4); }
8018
8019.picker__box {
8020 padding: 0; }
8021
8022.picker__calendar-container {
8023 padding: 0 1rem; }
8024 .picker__calendar-container thead {
8025 border: none; }
8026
8027.picker__table {
8028 margin-top: 0;
8029 margin-bottom: .5em; }
8030
8031.picker__day--infocus {
8032 color: #595959;
8033 letter-spacing: -.3;
8034 padding: .75rem 0;
8035 font-weight: 400;
8036 border: 1px solid transparent; }
8037
8038.picker__day.picker__day--today {
8039 color: #26a69a; }
8040
8041.picker__day.picker__day--today.picker__day--selected {
8042 color: #fff; }
8043
8044.picker__weekday {
8045 font-size: .9rem; }
8046
8047.picker__day--selected, .picker__day--selected:hover, .picker--focused .picker__day--selected {
8048 border-radius: 50%;
8049 -webkit-transform: scale(.9);
8050 -moz-transform: scale(.9);
8051 -ms-transform: scale(.9);
8052 -o-transform: scale(.9);
8053 transform: scale(.9);
8054 background-color: #26a69a;
8055 color: #ffffff; }
8056 .picker__day--selected.picker__day--outfocus, .picker__day--selected:hover.picker__day--outfocus, .picker--focused .picker__day--selected.picker__day--outfocus {
8057 background-color: #a1ded8; }
8058
8059.picker__footer {
8060 text-align: right;
8061 padding: 5px 10px; }
8062
8063.picker__close, .picker__today {
8064 font-size: 1.1rem;
8065 padding: 0 1rem;
8066 color: #26a69a; }
8067
8068.picker__nav--prev:before, .picker__nav--next:before {
8069 content: " ";
8070 border-top: .5em solid transparent;
8071 border-bottom: .5em solid transparent;
8072 border-right: 0.75em solid #676767;
8073 width: 0;
8074 height: 0;
8075 display: block;
8076 margin: 0 auto; }
8077
8078.picker__nav--next:before {
8079 border-right: 0;
8080 border-left: 0.75em solid #676767; }
8081
8082button.picker__today:focus, button.picker__clear:focus, button.picker__close:focus {
8083 background-color: #a1ded8; }
8084
8085/* ==========================================================================
8086 $BASE-TIME-PICKER
8087 ========================================================================== */
8088/**
8089 * The list of times.
8090 */
8091.picker__list {
8092 list-style: none;
8093 padding: 0.75em 0 4.2em;
8094 margin: 0; }
8095
8096/**
8097 * The times on the clock.
8098 */
8099.picker__list-item {
8100 border-bottom: 1px solid #dddddd;
8101 border-top: 1px solid #dddddd;
8102 margin-bottom: -1px;
8103 position: relative;
8104 background: #ffffff;
8105 padding: .75em 1.25em; }
8106
8107@media (min-height: 46.75em) {
8108 .picker__list-item {
8109 padding: .5em 1em; } }
8110
8111/* Hovered time */
8112.picker__list-item:hover {
8113 cursor: pointer;
8114 color: #000000;
8115 background: #b1dcfb;
8116 border-color: #0089ec;
8117 z-index: 10; }
8118
8119/* Highlighted and hovered/focused time */
8120.picker__list-item--highlighted {
8121 border-color: #0089ec;
8122 z-index: 10; }
8123
8124.picker__list-item--highlighted:hover, .picker--focused .picker__list-item--highlighted {
8125 cursor: pointer;
8126 color: #000000;
8127 background: #b1dcfb; }
8128
8129/* Selected and hovered/focused time */
8130.picker__list-item--selected, .picker__list-item--selected:hover, .picker--focused .picker__list-item--selected {
8131 background: #0089ec;
8132 color: #ffffff;
8133 z-index: 10; }
8134
8135/* Disabled time */
8136.picker__list-item--disabled, .picker__list-item--disabled:hover, .picker--focused .picker__list-item--disabled {
8137 background: #f5f5f5;
8138 border-color: #f5f5f5;
8139 color: #dddddd;
8140 cursor: default;
8141 border-color: #dddddd;
8142 z-index: auto; }
8143
8144/**
8145 * The clear button
8146 */
8147.picker--time .picker__button--clear {
8148 display: block;
8149 width: 80%;
8150 margin: 1em auto 0;
8151 padding: 1em 1.25em;
8152 background: none;
8153 border: 0;
8154 font-weight: 500;
8155 font-size: .67em;
8156 text-align: center;
8157 text-transform: uppercase;
8158 color: #666; }
8159
8160.picker--time .picker__button--clear:hover, .picker--time .picker__button--clear:focus {
8161 color: #000000;
8162 background: #b1dcfb;
8163 background: #ee2200;
8164 border-color: #ee2200;
8165 cursor: pointer;
8166 color: #ffffff;
8167 outline: none; }
8168
8169.picker--time .picker__button--clear:before {
8170 top: -0.25em;
8171 color: #666;
8172 font-size: 1.25em;
8173 font-weight: bold; }
8174
8175.picker--time .picker__button--clear:hover:before, .picker--time .picker__button--clear:focus:before {
8176 color: #ffffff; }
8177
8178/* ==========================================================================
8179 $DEFAULT-TIME-PICKER
8180 ========================================================================== */
8181/**
8182 * The frame the bounds the time picker.
8183 */
8184.picker--time .picker__frame {
8185 min-width: 256px;
8186 max-width: 320px; }
8187
8188/**
8189 * The picker box.
8190 */
8191.picker--time .picker__box {
8192 font-size: 1em;
8193 background: #f2f2f2;
8194 padding: 0; }
8195
8196@media (min-height: 40.125em) {
8197 .picker--time .picker__box {
8198 margin-bottom: 5em; } }
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/materialize.min.css b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/materialize.min.css
deleted file mode 100644
index f49bb0e1..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/materialize.min.css
+++ /dev/null
@@ -1,16 +0,0 @@
1/*!
2 * Materialize v0.97.1 (http://materializecss.com)
3 * Copyright 2014-2015 Materialize
4 * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
5 */
6.materialize-red.lighten-5{background-color:#fdeaeb !important}.materialize-red-text.text-lighten-5{color:#fdeaeb !important}.materialize-red.lighten-4{background-color:#f8c1c3 !important}.materialize-red-text.text-lighten-4{color:#f8c1c3 !important}.materialize-red.lighten-3{background-color:#f3989b !important}.materialize-red-text.text-lighten-3{color:#f3989b !important}.materialize-red.lighten-2{background-color:#ee6e73 !important}.materialize-red-text.text-lighten-2{color:#ee6e73 !important}.materialize-red.lighten-1{background-color:#ea454b !important}.materialize-red-text.text-lighten-1{color:#ea454b !important}.materialize-red{background-color:#e51c23 !important}.materialize-red-text{color:#e51c23 !important}.materialize-red.darken-1{background-color:#d0181e !important}.materialize-red-text.text-darken-1{color:#d0181e !important}.materialize-red.darken-2{background-color:#b9151b !important}.materialize-red-text.text-darken-2{color:#b9151b !important}.materialize-red.darken-3{background-color:#a21318 !important}.materialize-red-text.text-darken-3{color:#a21318 !important}.materialize-red.darken-4{background-color:#8b1014 !important}.materialize-red-text.text-darken-4{color:#8b1014 !important}.red.lighten-5{background-color:#FFEBEE !important}.red-text.text-lighten-5{color:#FFEBEE !important}.red.lighten-4{background-color:#FFCDD2 !important}.red-text.text-lighten-4{color:#FFCDD2 !important}.red.lighten-3{background-color:#EF9A9A !important}.red-text.text-lighten-3{color:#EF9A9A !important}.red.lighten-2{background-color:#E57373 !important}.red-text.text-lighten-2{color:#E57373 !important}.red.lighten-1{background-color:#EF5350 !important}.red-text.text-lighten-1{color:#EF5350 !important}.red{background-color:#F44336 !important}.red-text{color:#F44336 !important}.red.darken-1{background-color:#E53935 !important}.red-text.text-darken-1{color:#E53935 !important}.red.darken-2{background-color:#D32F2F !important}.red-text.text-darken-2{color:#D32F2F !important}.red.darken-3{background-color:#C62828 !important}.red-text.text-darken-3{color:#C62828 !important}.red.darken-4{background-color:#B71C1C !important}.red-text.text-darken-4{color:#B71C1C !important}.red.accent-1{background-color:#FF8A80 !important}.red-text.text-accent-1{color:#FF8A80 !important}.red.accent-2{background-color:#FF5252 !important}.red-text.text-accent-2{color:#FF5252 !important}.red.accent-3{background-color:#FF1744 !important}.red-text.text-accent-3{color:#FF1744 !important}.red.accent-4{background-color:#D50000 !important}.red-text.text-accent-4{color:#D50000 !important}.pink.lighten-5{background-color:#fce4ec !important}.pink-text.text-lighten-5{color:#fce4ec !important}.pink.lighten-4{background-color:#f8bbd0 !important}.pink-text.text-lighten-4{color:#f8bbd0 !important}.pink.lighten-3{background-color:#f48fb1 !important}.pink-text.text-lighten-3{color:#f48fb1 !important}.pink.lighten-2{background-color:#f06292 !important}.pink-text.text-lighten-2{color:#f06292 !important}.pink.lighten-1{background-color:#ec407a !important}.pink-text.text-lighten-1{color:#ec407a !important}.pink{background-color:#e91e63 !important}.pink-text{color:#e91e63 !important}.pink.darken-1{background-color:#d81b60 !important}.pink-text.text-darken-1{color:#d81b60 !important}.pink.darken-2{background-color:#c2185b !important}.pink-text.text-darken-2{color:#c2185b !important}.pink.darken-3{background-color:#ad1457 !important}.pink-text.text-darken-3{color:#ad1457 !important}.pink.darken-4{background-color:#880e4f !important}.pink-text.text-darken-4{color:#880e4f !important}.pink.accent-1{background-color:#ff80ab !important}.pink-text.text-accent-1{color:#ff80ab !important}.pink.accent-2{background-color:#ff4081 !important}.pink-text.text-accent-2{color:#ff4081 !important}.pink.accent-3{background-color:#f50057 !important}.pink-text.text-accent-3{color:#f50057 !important}.pink.accent-4{background-color:#c51162 !important}.pink-text.text-accent-4{color:#c51162 !important}.purple.lighten-5{background-color:#f3e5f5 !important}.purple-text.text-lighten-5{color:#f3e5f5 !important}.purple.lighten-4{background-color:#e1bee7 !important}.purple-text.text-lighten-4{color:#e1bee7 !important}.purple.lighten-3{background-color:#ce93d8 !important}.purple-text.text-lighten-3{color:#ce93d8 !important}.purple.lighten-2{background-color:#ba68c8 !important}.purple-text.text-lighten-2{color:#ba68c8 !important}.purple.lighten-1{background-color:#ab47bc !important}.purple-text.text-lighten-1{color:#ab47bc !important}.purple{background-color:#9c27b0 !important}.purple-text{color:#9c27b0 !important}.purple.darken-1{background-color:#8e24aa !important}.purple-text.text-darken-1{color:#8e24aa !important}.purple.darken-2{background-color:#7b1fa2 !important}.purple-text.text-darken-2{color:#7b1fa2 !important}.purple.darken-3{background-color:#6a1b9a !important}.purple-text.text-darken-3{color:#6a1b9a !important}.purple.darken-4{background-color:#4a148c !important}.purple-text.text-darken-4{color:#4a148c !important}.purple.accent-1{background-color:#ea80fc !important}.purple-text.text-accent-1{color:#ea80fc !important}.purple.accent-2{background-color:#e040fb !important}.purple-text.text-accent-2{color:#e040fb !important}.purple.accent-3{background-color:#d500f9 !important}.purple-text.text-accent-3{color:#d500f9 !important}.purple.accent-4{background-color:#aa00ff !important}.purple-text.text-accent-4{color:#aa00ff !important}.deep-purple.lighten-5{background-color:#ede7f6 !important}.deep-purple-text.text-lighten-5{color:#ede7f6 !important}.deep-purple.lighten-4{background-color:#d1c4e9 !important}.deep-purple-text.text-lighten-4{color:#d1c4e9 !important}.deep-purple.lighten-3{background-color:#b39ddb !important}.deep-purple-text.text-lighten-3{color:#b39ddb !important}.deep-purple.lighten-2{background-color:#9575cd !important}.deep-purple-text.text-lighten-2{color:#9575cd !important}.deep-purple.lighten-1{background-color:#7e57c2 !important}.deep-purple-text.text-lighten-1{color:#7e57c2 !important}.deep-purple{background-color:#673ab7 !important}.deep-purple-text{color:#673ab7 !important}.deep-purple.darken-1{background-color:#5e35b1 !important}.deep-purple-text.text-darken-1{color:#5e35b1 !important}.deep-purple.darken-2{background-color:#512da8 !important}.deep-purple-text.text-darken-2{color:#512da8 !important}.deep-purple.darken-3{background-color:#4527a0 !important}.deep-purple-text.text-darken-3{color:#4527a0 !important}.deep-purple.darken-4{background-color:#311b92 !important}.deep-purple-text.text-darken-4{color:#311b92 !important}.deep-purple.accent-1{background-color:#b388ff !important}.deep-purple-text.text-accent-1{color:#b388ff !important}.deep-purple.accent-2{background-color:#7c4dff !important}.deep-purple-text.text-accent-2{color:#7c4dff !important}.deep-purple.accent-3{background-color:#651fff !important}.deep-purple-text.text-accent-3{color:#651fff !important}.deep-purple.accent-4{background-color:#6200ea !important}.deep-purple-text.text-accent-4{color:#6200ea !important}.indigo.lighten-5{background-color:#e8eaf6 !important}.indigo-text.text-lighten-5{color:#e8eaf6 !important}.indigo.lighten-4{background-color:#c5cae9 !important}.indigo-text.text-lighten-4{color:#c5cae9 !important}.indigo.lighten-3{background-color:#9fa8da !important}.indigo-text.text-lighten-3{color:#9fa8da !important}.indigo.lighten-2{background-color:#7986cb !important}.indigo-text.text-lighten-2{color:#7986cb !important}.indigo.lighten-1{background-color:#5c6bc0 !important}.indigo-text.text-lighten-1{color:#5c6bc0 !important}.indigo{background-color:#3f51b5 !important}.indigo-text{color:#3f51b5 !important}.indigo.darken-1{background-color:#3949ab !important}.indigo-text.text-darken-1{color:#3949ab !important}.indigo.darken-2{background-color:#303f9f !important}.indigo-text.text-darken-2{color:#303f9f !important}.indigo.darken-3{background-color:#283593 !important}.indigo-text.text-darken-3{color:#283593 !important}.indigo.darken-4{background-color:#1a237e !important}.indigo-text.text-darken-4{color:#1a237e !important}.indigo.accent-1{background-color:#8c9eff !important}.indigo-text.text-accent-1{color:#8c9eff !important}.indigo.accent-2{background-color:#536dfe !important}.indigo-text.text-accent-2{color:#536dfe !important}.indigo.accent-3{background-color:#3d5afe !important}.indigo-text.text-accent-3{color:#3d5afe !important}.indigo.accent-4{background-color:#304ffe !important}.indigo-text.text-accent-4{color:#304ffe !important}.blue.lighten-5{background-color:#E3F2FD !important}.blue-text.text-lighten-5{color:#E3F2FD !important}.blue.lighten-4{background-color:#BBDEFB !important}.blue-text.text-lighten-4{color:#BBDEFB !important}.blue.lighten-3{background-color:#90CAF9 !important}.blue-text.text-lighten-3{color:#90CAF9 !important}.blue.lighten-2{background-color:#64B5F6 !important}.blue-text.text-lighten-2{color:#64B5F6 !important}.blue.lighten-1{background-color:#42A5F5 !important}.blue-text.text-lighten-1{color:#42A5F5 !important}.blue{background-color:#2196F3 !important}.blue-text{color:#2196F3 !important}.blue.darken-1{background-color:#1E88E5 !important}.blue-text.text-darken-1{color:#1E88E5 !important}.blue.darken-2{background-color:#1976D2 !important}.blue-text.text-darken-2{color:#1976D2 !important}.blue.darken-3{background-color:#1565C0 !important}.blue-text.text-darken-3{color:#1565C0 !important}.blue.darken-4{background-color:#0D47A1 !important}.blue-text.text-darken-4{color:#0D47A1 !important}.blue.accent-1{background-color:#82B1FF !important}.blue-text.text-accent-1{color:#82B1FF !important}.blue.accent-2{background-color:#448AFF !important}.blue-text.text-accent-2{color:#448AFF !important}.blue.accent-3{background-color:#2979FF !important}.blue-text.text-accent-3{color:#2979FF !important}.blue.accent-4{background-color:#2962FF !important}.blue-text.text-accent-4{color:#2962FF !important}.light-blue.lighten-5{background-color:#e1f5fe !important}.light-blue-text.text-lighten-5{color:#e1f5fe !important}.light-blue.lighten-4{background-color:#b3e5fc !important}.light-blue-text.text-lighten-4{color:#b3e5fc !important}.light-blue.lighten-3{background-color:#81d4fa !important}.light-blue-text.text-lighten-3{color:#81d4fa !important}.light-blue.lighten-2{background-color:#4fc3f7 !important}.light-blue-text.text-lighten-2{color:#4fc3f7 !important}.light-blue.lighten-1{background-color:#29b6f6 !important}.light-blue-text.text-lighten-1{color:#29b6f6 !important}.light-blue{background-color:#03a9f4 !important}.light-blue-text{color:#03a9f4 !important}.light-blue.darken-1{background-color:#039be5 !important}.light-blue-text.text-darken-1{color:#039be5 !important}.light-blue.darken-2{background-color:#0288d1 !important}.light-blue-text.text-darken-2{color:#0288d1 !important}.light-blue.darken-3{background-color:#0277bd !important}.light-blue-text.text-darken-3{color:#0277bd !important}.light-blue.darken-4{background-color:#01579b !important}.light-blue-text.text-darken-4{color:#01579b !important}.light-blue.accent-1{background-color:#80d8ff !important}.light-blue-text.text-accent-1{color:#80d8ff !important}.light-blue.accent-2{background-color:#40c4ff !important}.light-blue-text.text-accent-2{color:#40c4ff !important}.light-blue.accent-3{background-color:#00b0ff !important}.light-blue-text.text-accent-3{color:#00b0ff !important}.light-blue.accent-4{background-color:#0091ea !important}.light-blue-text.text-accent-4{color:#0091ea !important}.cyan.lighten-5{background-color:#e0f7fa !important}.cyan-text.text-lighten-5{color:#e0f7fa !important}.cyan.lighten-4{background-color:#b2ebf2 !important}.cyan-text.text-lighten-4{color:#b2ebf2 !important}.cyan.lighten-3{background-color:#80deea !important}.cyan-text.text-lighten-3{color:#80deea !important}.cyan.lighten-2{background-color:#4dd0e1 !important}.cyan-text.text-lighten-2{color:#4dd0e1 !important}.cyan.lighten-1{background-color:#26c6da !important}.cyan-text.text-lighten-1{color:#26c6da !important}.cyan{background-color:#00bcd4 !important}.cyan-text{color:#00bcd4 !important}.cyan.darken-1{background-color:#00acc1 !important}.cyan-text.text-darken-1{color:#00acc1 !important}.cyan.darken-2{background-color:#0097a7 !important}.cyan-text.text-darken-2{color:#0097a7 !important}.cyan.darken-3{background-color:#00838f !important}.cyan-text.text-darken-3{color:#00838f !important}.cyan.darken-4{background-color:#006064 !important}.cyan-text.text-darken-4{color:#006064 !important}.cyan.accent-1{background-color:#84ffff !important}.cyan-text.text-accent-1{color:#84ffff !important}.cyan.accent-2{background-color:#18ffff !important}.cyan-text.text-accent-2{color:#18ffff !important}.cyan.accent-3{background-color:#00e5ff !important}.cyan-text.text-accent-3{color:#00e5ff !important}.cyan.accent-4{background-color:#00b8d4 !important}.cyan-text.text-accent-4{color:#00b8d4 !important}.teal.lighten-5{background-color:#e0f2f1 !important}.teal-text.text-lighten-5{color:#e0f2f1 !important}.teal.lighten-4{background-color:#b2dfdb !important}.teal-text.text-lighten-4{color:#b2dfdb !important}.teal.lighten-3{background-color:#80cbc4 !important}.teal-text.text-lighten-3{color:#80cbc4 !important}.teal.lighten-2{background-color:#4db6ac !important}.teal-text.text-lighten-2{color:#4db6ac !important}.teal.lighten-1{background-color:#26a69a !important}.teal-text.text-lighten-1{color:#26a69a !important}.teal{background-color:#009688 !important}.teal-text{color:#009688 !important}.teal.darken-1{background-color:#00897b !important}.teal-text.text-darken-1{color:#00897b !important}.teal.darken-2{background-color:#00796b !important}.teal-text.text-darken-2{color:#00796b !important}.teal.darken-3{background-color:#00695c !important}.teal-text.text-darken-3{color:#00695c !important}.teal.darken-4{background-color:#004d40 !important}.teal-text.text-darken-4{color:#004d40 !important}.teal.accent-1{background-color:#a7ffeb !important}.teal-text.text-accent-1{color:#a7ffeb !important}.teal.accent-2{background-color:#64ffda !important}.teal-text.text-accent-2{color:#64ffda !important}.teal.accent-3{background-color:#1de9b6 !important}.teal-text.text-accent-3{color:#1de9b6 !important}.teal.accent-4{background-color:#00bfa5 !important}.teal-text.text-accent-4{color:#00bfa5 !important}.green.lighten-5{background-color:#E8F5E9 !important}.green-text.text-lighten-5{color:#E8F5E9 !important}.green.lighten-4{background-color:#C8E6C9 !important}.green-text.text-lighten-4{color:#C8E6C9 !important}.green.lighten-3{background-color:#A5D6A7 !important}.green-text.text-lighten-3{color:#A5D6A7 !important}.green.lighten-2{background-color:#81C784 !important}.green-text.text-lighten-2{color:#81C784 !important}.green.lighten-1{background-color:#66BB6A !important}.green-text.text-lighten-1{color:#66BB6A !important}.green{background-color:#4CAF50 !important}.green-text{color:#4CAF50 !important}.green.darken-1{background-color:#43A047 !important}.green-text.text-darken-1{color:#43A047 !important}.green.darken-2{background-color:#388E3C !important}.green-text.text-darken-2{color:#388E3C !important}.green.darken-3{background-color:#2E7D32 !important}.green-text.text-darken-3{color:#2E7D32 !important}.green.darken-4{background-color:#1B5E20 !important}.green-text.text-darken-4{color:#1B5E20 !important}.green.accent-1{background-color:#B9F6CA !important}.green-text.text-accent-1{color:#B9F6CA !important}.green.accent-2{background-color:#69F0AE !important}.green-text.text-accent-2{color:#69F0AE !important}.green.accent-3{background-color:#00E676 !important}.green-text.text-accent-3{color:#00E676 !important}.green.accent-4{background-color:#00C853 !important}.green-text.text-accent-4{color:#00C853 !important}.light-green.lighten-5{background-color:#f1f8e9 !important}.light-green-text.text-lighten-5{color:#f1f8e9 !important}.light-green.lighten-4{background-color:#dcedc8 !important}.light-green-text.text-lighten-4{color:#dcedc8 !important}.light-green.lighten-3{background-color:#c5e1a5 !important}.light-green-text.text-lighten-3{color:#c5e1a5 !important}.light-green.lighten-2{background-color:#aed581 !important}.light-green-text.text-lighten-2{color:#aed581 !important}.light-green.lighten-1{background-color:#9ccc65 !important}.light-green-text.text-lighten-1{color:#9ccc65 !important}.light-green{background-color:#8bc34a !important}.light-green-text{color:#8bc34a !important}.light-green.darken-1{background-color:#7cb342 !important}.light-green-text.text-darken-1{color:#7cb342 !important}.light-green.darken-2{background-color:#689f38 !important}.light-green-text.text-darken-2{color:#689f38 !important}.light-green.darken-3{background-color:#558b2f !important}.light-green-text.text-darken-3{color:#558b2f !important}.light-green.darken-4{background-color:#33691e !important}.light-green-text.text-darken-4{color:#33691e !important}.light-green.accent-1{background-color:#ccff90 !important}.light-green-text.text-accent-1{color:#ccff90 !important}.light-green.accent-2{background-color:#b2ff59 !important}.light-green-text.text-accent-2{color:#b2ff59 !important}.light-green.accent-3{background-color:#76ff03 !important}.light-green-text.text-accent-3{color:#76ff03 !important}.light-green.accent-4{background-color:#64dd17 !important}.light-green-text.text-accent-4{color:#64dd17 !important}.lime.lighten-5{background-color:#f9fbe7 !important}.lime-text.text-lighten-5{color:#f9fbe7 !important}.lime.lighten-4{background-color:#f0f4c3 !important}.lime-text.text-lighten-4{color:#f0f4c3 !important}.lime.lighten-3{background-color:#e6ee9c !important}.lime-text.text-lighten-3{color:#e6ee9c !important}.lime.lighten-2{background-color:#dce775 !important}.lime-text.text-lighten-2{color:#dce775 !important}.lime.lighten-1{background-color:#d4e157 !important}.lime-text.text-lighten-1{color:#d4e157 !important}.lime{background-color:#cddc39 !important}.lime-text{color:#cddc39 !important}.lime.darken-1{background-color:#c0ca33 !important}.lime-text.text-darken-1{color:#c0ca33 !important}.lime.darken-2{background-color:#afb42b !important}.lime-text.text-darken-2{color:#afb42b !important}.lime.darken-3{background-color:#9e9d24 !important}.lime-text.text-darken-3{color:#9e9d24 !important}.lime.darken-4{background-color:#827717 !important}.lime-text.text-darken-4{color:#827717 !important}.lime.accent-1{background-color:#f4ff81 !important}.lime-text.text-accent-1{color:#f4ff81 !important}.lime.accent-2{background-color:#eeff41 !important}.lime-text.text-accent-2{color:#eeff41 !important}.lime.accent-3{background-color:#c6ff00 !important}.lime-text.text-accent-3{color:#c6ff00 !important}.lime.accent-4{background-color:#aeea00 !important}.lime-text.text-accent-4{color:#aeea00 !important}.yellow.lighten-5{background-color:#fffde7 !important}.yellow-text.text-lighten-5{color:#fffde7 !important}.yellow.lighten-4{background-color:#fff9c4 !important}.yellow-text.text-lighten-4{color:#fff9c4 !important}.yellow.lighten-3{background-color:#fff59d !important}.yellow-text.text-lighten-3{color:#fff59d !important}.yellow.lighten-2{background-color:#fff176 !important}.yellow-text.text-lighten-2{color:#fff176 !important}.yellow.lighten-1{background-color:#ffee58 !important}.yellow-text.text-lighten-1{color:#ffee58 !important}.yellow{background-color:#ffeb3b !important}.yellow-text{color:#ffeb3b !important}.yellow.darken-1{background-color:#fdd835 !important}.yellow-text.text-darken-1{color:#fdd835 !important}.yellow.darken-2{background-color:#fbc02d !important}.yellow-text.text-darken-2{color:#fbc02d !important}.yellow.darken-3{background-color:#f9a825 !important}.yellow-text.text-darken-3{color:#f9a825 !important}.yellow.darken-4{background-color:#f57f17 !important}.yellow-text.text-darken-4{color:#f57f17 !important}.yellow.accent-1{background-color:#ffff8d !important}.yellow-text.text-accent-1{color:#ffff8d !important}.yellow.accent-2{background-color:#ffff00 !important}.yellow-text.text-accent-2{color:#ffff00 !important}.yellow.accent-3{background-color:#ffea00 !important}.yellow-text.text-accent-3{color:#ffea00 !important}.yellow.accent-4{background-color:#ffd600 !important}.yellow-text.text-accent-4{color:#ffd600 !important}.amber.lighten-5{background-color:#fff8e1 !important}.amber-text.text-lighten-5{color:#fff8e1 !important}.amber.lighten-4{background-color:#ffecb3 !important}.amber-text.text-lighten-4{color:#ffecb3 !important}.amber.lighten-3{background-color:#ffe082 !important}.amber-text.text-lighten-3{color:#ffe082 !important}.amber.lighten-2{background-color:#ffd54f !important}.amber-text.text-lighten-2{color:#ffd54f !important}.amber.lighten-1{background-color:#ffca28 !important}.amber-text.text-lighten-1{color:#ffca28 !important}.amber{background-color:#ffc107 !important}.amber-text{color:#ffc107 !important}.amber.darken-1{background-color:#ffb300 !important}.amber-text.text-darken-1{color:#ffb300 !important}.amber.darken-2{background-color:#ffa000 !important}.amber-text.text-darken-2{color:#ffa000 !important}.amber.darken-3{background-color:#ff8f00 !important}.amber-text.text-darken-3{color:#ff8f00 !important}.amber.darken-4{background-color:#ff6f00 !important}.amber-text.text-darken-4{color:#ff6f00 !important}.amber.accent-1{background-color:#ffe57f !important}.amber-text.text-accent-1{color:#ffe57f !important}.amber.accent-2{background-color:#ffd740 !important}.amber-text.text-accent-2{color:#ffd740 !important}.amber.accent-3{background-color:#ffc400 !important}.amber-text.text-accent-3{color:#ffc400 !important}.amber.accent-4{background-color:#ffab00 !important}.amber-text.text-accent-4{color:#ffab00 !important}.orange.lighten-5{background-color:#fff3e0 !important}.orange-text.text-lighten-5{color:#fff3e0 !important}.orange.lighten-4{background-color:#ffe0b2 !important}.orange-text.text-lighten-4{color:#ffe0b2 !important}.orange.lighten-3{background-color:#ffcc80 !important}.orange-text.text-lighten-3{color:#ffcc80 !important}.orange.lighten-2{background-color:#ffb74d !important}.orange-text.text-lighten-2{color:#ffb74d !important}.orange.lighten-1{background-color:#ffa726 !important}.orange-text.text-lighten-1{color:#ffa726 !important}.orange{background-color:#ff9800 !important}.orange-text{color:#ff9800 !important}.orange.darken-1{background-color:#fb8c00 !important}.orange-text.text-darken-1{color:#fb8c00 !important}.orange.darken-2{background-color:#f57c00 !important}.orange-text.text-darken-2{color:#f57c00 !important}.orange.darken-3{background-color:#ef6c00 !important}.orange-text.text-darken-3{color:#ef6c00 !important}.orange.darken-4{background-color:#e65100 !important}.orange-text.text-darken-4{color:#e65100 !important}.orange.accent-1{background-color:#ffd180 !important}.orange-text.text-accent-1{color:#ffd180 !important}.orange.accent-2{background-color:#ffab40 !important}.orange-text.text-accent-2{color:#ffab40 !important}.orange.accent-3{background-color:#ff9100 !important}.orange-text.text-accent-3{color:#ff9100 !important}.orange.accent-4{background-color:#ff6d00 !important}.orange-text.text-accent-4{color:#ff6d00 !important}.deep-orange.lighten-5{background-color:#fbe9e7 !important}.deep-orange-text.text-lighten-5{color:#fbe9e7 !important}.deep-orange.lighten-4{background-color:#ffccbc !important}.deep-orange-text.text-lighten-4{color:#ffccbc !important}.deep-orange.lighten-3{background-color:#ffab91 !important}.deep-orange-text.text-lighten-3{color:#ffab91 !important}.deep-orange.lighten-2{background-color:#ff8a65 !important}.deep-orange-text.text-lighten-2{color:#ff8a65 !important}.deep-orange.lighten-1{background-color:#ff7043 !important}.deep-orange-text.text-lighten-1{color:#ff7043 !important}.deep-orange{background-color:#ff5722 !important}.deep-orange-text{color:#ff5722 !important}.deep-orange.darken-1{background-color:#f4511e !important}.deep-orange-text.text-darken-1{color:#f4511e !important}.deep-orange.darken-2{background-color:#e64a19 !important}.deep-orange-text.text-darken-2{color:#e64a19 !important}.deep-orange.darken-3{background-color:#d84315 !important}.deep-orange-text.text-darken-3{color:#d84315 !important}.deep-orange.darken-4{background-color:#bf360c !important}.deep-orange-text.text-darken-4{color:#bf360c !important}.deep-orange.accent-1{background-color:#ff9e80 !important}.deep-orange-text.text-accent-1{color:#ff9e80 !important}.deep-orange.accent-2{background-color:#ff6e40 !important}.deep-orange-text.text-accent-2{color:#ff6e40 !important}.deep-orange.accent-3{background-color:#ff3d00 !important}.deep-orange-text.text-accent-3{color:#ff3d00 !important}.deep-orange.accent-4{background-color:#dd2c00 !important}.deep-orange-text.text-accent-4{color:#dd2c00 !important}.brown.lighten-5{background-color:#efebe9 !important}.brown-text.text-lighten-5{color:#efebe9 !important}.brown.lighten-4{background-color:#d7ccc8 !important}.brown-text.text-lighten-4{color:#d7ccc8 !important}.brown.lighten-3{background-color:#bcaaa4 !important}.brown-text.text-lighten-3{color:#bcaaa4 !important}.brown.lighten-2{background-color:#a1887f !important}.brown-text.text-lighten-2{color:#a1887f !important}.brown.lighten-1{background-color:#8d6e63 !important}.brown-text.text-lighten-1{color:#8d6e63 !important}.brown{background-color:#795548 !important}.brown-text{color:#795548 !important}.brown.darken-1{background-color:#6d4c41 !important}.brown-text.text-darken-1{color:#6d4c41 !important}.brown.darken-2{background-color:#5d4037 !important}.brown-text.text-darken-2{color:#5d4037 !important}.brown.darken-3{background-color:#4e342e !important}.brown-text.text-darken-3{color:#4e342e !important}.brown.darken-4{background-color:#3e2723 !important}.brown-text.text-darken-4{color:#3e2723 !important}.blue-grey.lighten-5{background-color:#eceff1 !important}.blue-grey-text.text-lighten-5{color:#eceff1 !important}.blue-grey.lighten-4{background-color:#cfd8dc !important}.blue-grey-text.text-lighten-4{color:#cfd8dc !important}.blue-grey.lighten-3{background-color:#b0bec5 !important}.blue-grey-text.text-lighten-3{color:#b0bec5 !important}.blue-grey.lighten-2{background-color:#90a4ae !important}.blue-grey-text.text-lighten-2{color:#90a4ae !important}.blue-grey.lighten-1{background-color:#78909c !important}.blue-grey-text.text-lighten-1{color:#78909c !important}.blue-grey{background-color:#607d8b !important}.blue-grey-text{color:#607d8b !important}.blue-grey.darken-1{background-color:#546e7a !important}.blue-grey-text.text-darken-1{color:#546e7a !important}.blue-grey.darken-2{background-color:#455a64 !important}.blue-grey-text.text-darken-2{color:#455a64 !important}.blue-grey.darken-3{background-color:#37474f !important}.blue-grey-text.text-darken-3{color:#37474f !important}.blue-grey.darken-4{background-color:#263238 !important}.blue-grey-text.text-darken-4{color:#263238 !important}.grey.lighten-5{background-color:#fafafa !important}.grey-text.text-lighten-5{color:#fafafa !important}.grey.lighten-4{background-color:#f5f5f5 !important}.grey-text.text-lighten-4{color:#f5f5f5 !important}.grey.lighten-3{background-color:#eeeeee !important}.grey-text.text-lighten-3{color:#eeeeee !important}.grey.lighten-2{background-color:#e0e0e0 !important}.grey-text.text-lighten-2{color:#e0e0e0 !important}.grey.lighten-1{background-color:#bdbdbd !important}.grey-text.text-lighten-1{color:#bdbdbd !important}.grey{background-color:#9e9e9e !important}.grey-text{color:#9e9e9e !important}.grey.darken-1{background-color:#757575 !important}.grey-text.text-darken-1{color:#757575 !important}.grey.darken-2{background-color:#616161 !important}.grey-text.text-darken-2{color:#616161 !important}.grey.darken-3{background-color:#424242 !important}.grey-text.text-darken-3{color:#424242 !important}.grey.darken-4{background-color:#212121 !important}.grey-text.text-darken-4{color:#212121 !important}.shades.black{background-color:#000000 !important}.shades-text.text-black{color:#000000 !important}.shades.white{background-color:#FFFFFF !important}.shades-text.text-white{color:#FFFFFF !important}.shades.transparent{background-color:transparent !important}.shades-text.text-transparent{color:transparent !important}.black{background-color:#000000 !important}.black-text{color:#000000 !important}.white{background-color:#FFFFFF !important}.white-text{color:#FFFFFF !important}.transparent{background-color:transparent !important}.transparent-text{color:transparent !important}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}html input[type="button"],button,input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}ul{list-style-type:none}a{color:#039be5;text-decoration:none;-webkit-tap-highlight-color:transparent}.valign-wrapper{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.valign-wrapper .valign{display:block}ul{padding:0}ul li{list-style-type:none}.clearfix{clear:both}.z-depth-0{box-shadow:none !important}.z-depth-1,nav,.card-panel,.card,.toast,.btn,.btn-large,.btn-floating,.dropdown-content,.collapsible,.side-nav{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}.z-depth-1-half,.btn:hover,.btn-large:hover,.btn-floating:hover{box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15)}.z-depth-2{box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}.z-depth-3{box-shadow:0 12px 15px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19)}.z-depth-4,.modal{box-shadow:0 16px 28px 0 rgba(0,0,0,0.22),0 25px 55px 0 rgba(0,0,0,0.21)}.z-depth-5{box-shadow:0 27px 24px 0 rgba(0,0,0,0.2),0 40px 77px 0 rgba(0,0,0,0.22)}.hoverable:hover{transition:box-shadow .25s;box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}.divider{height:1px;overflow:hidden;background-color:#e0e0e0}blockquote{margin:20px 0;padding-left:1.5rem;border-left:5px solid #ee6e73}i{line-height:inherit}i.left{float:left;margin-right:15px}i.right{float:right;margin-left:15px}i.tiny{font-size:1rem}i.small{font-size:2rem}i.medium{font-size:4rem}i.large{font-size:6rem}img.responsive-img,video.responsive-video{max-width:100%;height:auto}.pagination li{display:inline-block;font-size:1.2rem;padding:0 10px;line-height:30px;border-radius:2px;text-align:center}.pagination li a{color:#444}.pagination li.active a{color:#fff}.pagination li.active{background-color:#ee6e73}.pagination li.disabled a{cursor:default;color:#999}.pagination li i{font-size:2rem}.pagination li.pages ul li{display:inline-block;float:none}@media only screen and (max-width : 992px){.pagination{width:100%}.pagination li.prev,.pagination li.next{width:10%}.pagination li.pages{width:80%;overflow:hidden;white-space:nowrap}}.parallax-container{position:relative;overflow:hidden;height:500px}.parallax{position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1}.parallax img{display:none;position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);transform:translateX(-50%)}.pin-top,.pin-bottom{position:relative}.pinned{position:fixed !important}ul.staggered-list li{opacity:0}.fade-in{opacity:0;transform-origin:0 50%}@media only screen and (max-width : 600px){.hide-on-small-only,.hide-on-small-and-down{display:none !important;}}@media only screen and (max-width : 992px){.hide-on-med-and-down{display:none !important;}}@media only screen and (min-width : 601px){.hide-on-med-and-up{display:none !important;}}@media only screen and (min-width: 600px) and (max-width: 992px){.hide-on-med-only{display:none !important;}}@media only screen and (min-width : 993px){.hide-on-large-only{display:none !important;}}@media only screen and (min-width : 993px){.show-on-large{display:initial !important;}}@media only screen and (min-width: 600px) and (max-width: 992px){.show-on-medium{display:initial !important;}}@media only screen and (max-width : 600px){.show-on-small{display:initial !important;}}@media only screen and (min-width : 601px){.show-on-medium-and-up{display:initial !important;}}@media only screen and (max-width : 992px){.show-on-medium-and-down{display:initial !important;}}@media only screen and (max-width : 600px){.center-on-small-only{text-align:center;}}footer.page-footer{margin-top:20px;padding-top:20px;background-color:#ee6e73}footer.page-footer .footer-copyright{overflow:hidden;height:50px;line-height:50px;color:rgba(255,255,255,0.8);background-color:rgba(51,51,51,0.08)}table,th,td{border:none}table{width:100%;display:table}table.bordered>thead>tr,table.bordered>tbody>tr{border-bottom:1px solid #d0d0d0}table.striped>tbody>tr:nth-child(odd){background-color:#f2f2f2}table.striped>tbody>tr>td{border-radius:0px}table.highlight>tbody>tr{-webkit-transition:background-color .25s ease;-moz-transition:background-color .25s ease;-o-transition:background-color .25s ease;-ms-transition:background-color .25s ease;transition:background-color .25s ease}table.highlight>tbody>tr:hover{background-color:#f2f2f2}table.centered thead tr th,table.centered tbody tr td{text-align:center}thead{border-bottom:1px solid #d0d0d0}td,th{padding:15px 5px;display:table-cell;text-align:left;vertical-align:middle;border-radius:2px}@media only screen and (max-width : 992px){table.responsive-table{width:100%;border-collapse:collapse;border-spacing:0;display:block;position:relative}table.responsive-table th,table.responsive-table td{margin:0;vertical-align:top}table.responsive-table th{text-align:left}table.responsive-table thead{display:block;float:left}table.responsive-table thead tr{display:block;padding:0 10px 0 0}table.responsive-table thead tr th::before{content:"\00a0"}table.responsive-table tbody{display:block;width:auto;position:relative;overflow-x:auto;white-space:nowrap}table.responsive-table tbody tr{display:inline-block;vertical-align:top}table.responsive-table th{display:block;text-align:right}table.responsive-table td{display:block;min-height:1.25em;text-align:left}table.responsive-table tr{padding:0 10px}table.responsive-table thead{border:0;border-right:1px solid #d0d0d0}table.responsive-table.bordered th{border-bottom:0;border-left:0}table.responsive-table.bordered td{border-left:0;border-right:0;border-bottom:0}table.responsive-table.bordered tr{border:0}table.responsive-table.bordered tbody tr{border-right:1px solid #d0d0d0}}.collection{margin:0.5rem 0 1rem 0;border:1px solid #e0e0e0;border-radius:2px;overflow:hidden;position:relative}.collection .collection-item{background-color:#fff;line-height:1.5rem;padding:10px 20px;margin:0;border-bottom:1px solid #e0e0e0}.collection .collection-item.avatar{min-height:84px;padding-left:72px;position:relative}.collection .collection-item.avatar .circle{position:absolute;width:42px;height:42px;overflow:hidden;left:15px;display:inline-block;vertical-align:middle}.collection .collection-item.avatar i.circle{font-size:18px;line-height:42px;color:#fff;background-color:#999;text-align:center}.collection .collection-item.avatar .title{font-size:16px}.collection .collection-item.avatar p{margin:0}.collection .collection-item.avatar .secondary-content{position:absolute;top:16px;right:16px}.collection .collection-item:last-child{border-bottom:none}.collection .collection-item.active{background-color:#26a69a;color:#eafaf9}.collection .collection-item.active .secondary-content{color:#fff}.collection a.collection-item{display:block;-webkit-transition:0.25s;-moz-transition:0.25s;-o-transition:0.25s;-ms-transition:0.25s;transition:0.25s;color:#26a69a}.collection a.collection-item:not(.active):hover{background-color:#ddd}.collection.with-header .collection-header{background-color:#fff;border-bottom:1px solid #e0e0e0;padding:10px 20px}.collection.with-header .collection-item{padding-left:30px}.collection.with-header .collection-item.avatar{padding-left:72px}.secondary-content{float:right;color:#26a69a}.collapsible .collection{margin:0;border:none}span.badge{min-width:3rem;padding:0 6px;text-align:center;font-size:1rem;line-height:inherit;color:#757575;position:absolute;right:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}span.badge.new{font-weight:300;font-size:0.8rem;color:#fff;background-color:#26a69a;border-radius:2px}span.badge.new:after{content:" new"}nav ul a span.badge{position:static;margin-left:4px;line-height:0}.video-container{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.video-container.no-controls{padding-top:0}.video-container iframe,.video-container object,.video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.progress{position:relative;height:4px;display:block;width:100%;background-color:#acece6;border-radius:2px;margin:0.5rem 0 1rem 0;overflow:hidden}.progress .determinate{position:absolute;background-color:inherit;top:0;left:0;bottom:0;background-color:#26a69a;-webkit-transition:width .3s linear;-moz-transition:width .3s linear;-o-transition:width .3s linear;-ms-transition:width .3s linear;transition:width .3s linear}.progress .indeterminate{background-color:#26a69a}.progress .indeterminate:before{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;-moz-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;-ms-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;-o-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.progress .indeterminate:after{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-moz-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-ms-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-o-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-webkit-animation-delay:1.15s;-moz-animation-delay:1.15s;-ms-animation-delay:1.15s;-o-animation-delay:1.15s;animation-delay:1.15s}@-webkit-keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-moz-keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-webkit-keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@-moz-keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}.hide{display:none !important}.left-align{text-align:left}.right-align{text-align:right}.center,.center-align{text-align:center}.left{float:left !important}.right{float:right !important}.no-select,input[type=range],input[type=range]+.thumb{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.circle{border-radius:50%}.center-block{display:block;margin-left:auto;margin-right:auto}.truncate{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-padding{padding:0 !important}@font-face{font-family:"Material-Design-Icons";src:url("../font/material-design-icons/Material-Design-Icons.eot?#iefix") format("embedded-opentype"),url("../font/material-design-icons/Material-Design-Icons.woff2") format("woff2"),url("../font/material-design-icons/Material-Design-Icons.woff") format("woff"),url("../font/material-design-icons/Material-Design-Icons.ttf") format("truetype"),url("../font/material-design-icons/Material-Design-Icons.svg#Material-Design-Icons") format("svg");font-weight:normal;font-style:normal;}[class^="mdi-"],[class*="mdi-"]{speak:none;display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;font-variant:normal;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}[class^="mdi-"]:before,[class*="mdi-"]:before{display:inline-block;speak:none;text-decoration:inherit}[class^="mdi-"].pull-left,[class*="mdi-"].pull-left{margin-right:.3em}[class^="mdi-"].pull-right,[class*="mdi-"].pull-right{margin-left:.3em}[class^="mdi-"].mdi-lg:before,[class^="mdi-"].mdi-lg:after,[class*="mdi-"].mdi-lg:before,[class*="mdi-"].mdi-lg:after{font-size:1.33333333em;line-height:0.75em;vertical-align:-15%}[class^="mdi-"].mdi-2x:before,[class^="mdi-"].mdi-2x:after,[class*="mdi-"].mdi-2x:before,[class*="mdi-"].mdi-2x:after{font-size:2em}[class^="mdi-"].mdi-3x:before,[class^="mdi-"].mdi-3x:after,[class*="mdi-"].mdi-3x:before,[class*="mdi-"].mdi-3x:after{font-size:3em}[class^="mdi-"].mdi-4x:before,[class^="mdi-"].mdi-4x:after,[class*="mdi-"].mdi-4x:before,[class*="mdi-"].mdi-4x:after{font-size:4em}[class^="mdi-"].mdi-5x:before,[class^="mdi-"].mdi-5x:after,[class*="mdi-"].mdi-5x:before,[class*="mdi-"].mdi-5x:after{font-size:5em}[class^="mdi-device-signal-cellular-"]:after,[class^="mdi-device-battery-"]:after,[class^="mdi-device-battery-charging-"]:after,[class^="mdi-device-signal-cellular-connected-no-internet-"]:after,[class^="mdi-device-signal-wifi-"]:after,[class^="mdi-device-signal-wifi-statusbar-not-connected"]:after,.mdi-device-network-wifi:after{opacity:.3;position:absolute;left:0;top:0;z-index:1;display:inline-block;speak:none;text-decoration:inherit}[class^="mdi-device-signal-cellular-"]:after{content:"\e758"}[class^="mdi-device-battery-"]:after{content:"\e735"}[class^="mdi-device-battery-charging-"]:after{content:"\e733"}[class^="mdi-device-signal-cellular-connected-no-internet-"]:after{content:"\e75d"}[class^="mdi-device-signal-wifi-"]:after,.mdi-device-network-wifi:after{content:"\e765"}[class^="mdi-device-signal-wifi-statusbasr-not-connected"]:after{content:"\e8f7"}.mdi-device-signal-cellular-off:after,.mdi-device-signal-cellular-null:after,.mdi-device-signal-cellular-no-sim:after,.mdi-device-signal-wifi-off:after,.mdi-device-signal-wifi-4-bar:after,.mdi-device-signal-cellular-4-bar:after,.mdi-device-battery-alert:after,.mdi-device-signal-cellular-connected-no-internet-4-bar:after,.mdi-device-battery-std:after,.mdi-device-battery-full .mdi-device-battery-unknown:after{content:""}.mdi-fw{width:1.28571429em;text-align:center}.mdi-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.mdi-ul>li{position:relative}.mdi-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:0.14285714em;text-align:center}.mdi-li.mdi-lg{left:-1.85714286em}.mdi-border{padding:.2em .25em .15em;border:solid 0.08em #eeeeee;border-radius:.1em}.mdi-spin{-webkit-animation:mdi-spin 2s infinite linear;animation:mdi-spin 2s infinite linear;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;transform-origin:50% 50%}.mdi-pulse{-webkit-animation:mdi-spin 1s steps(8) infinite;animation:mdi-spin 1s steps(8) infinite;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;transform-origin:50% 50%}@-webkit-keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.mdi-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.mdi-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.mdi-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.mdi-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.mdi-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .mdi-rotate-90,:root .mdi-rotate-180,:root .mdi-rotate-270,:root .mdi-flip-horizontal,:root .mdi-flip-vertical{filter:none}.mdi-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.mdi-stack-1x,.mdi-stack-2x{position:absolute;left:0;width:100%;text-align:center}.mdi-stack-1x{line-height:inherit}.mdi-stack-2x{font-size:2em}.mdi-inverse{color:#ffffff}.mdi-action-3d-rotation:before{content:"\e600"}.mdi-action-accessibility:before{content:"\e601"}.mdi-action-account-balance-wallet:before{content:"\e602"}.mdi-action-account-balance:before{content:"\e603"}.mdi-action-account-box:before{content:"\e604"}.mdi-action-account-child:before{content:"\e605"}.mdi-action-account-circle:before{content:"\e606"}.mdi-action-add-shopping-cart:before{content:"\e607"}.mdi-action-alarm-add:before{content:"\e608"}.mdi-action-alarm-off:before{content:"\e609"}.mdi-action-alarm-on:before{content:"\e60a"}.mdi-action-alarm:before{content:"\e60b"}.mdi-action-android:before{content:"\e60c"}.mdi-action-announcement:before{content:"\e60d"}.mdi-action-aspect-ratio:before{content:"\e60e"}.mdi-action-assessment:before{content:"\e60f"}.mdi-action-assignment-ind:before{content:"\e610"}.mdi-action-assignment-late:before{content:"\e611"}.mdi-action-assignment-return:before{content:"\e612"}.mdi-action-assignment-returned:before{content:"\e613"}.mdi-action-assignment-turned-in:before{content:"\e614"}.mdi-action-assignment:before{content:"\e615"}.mdi-action-autorenew:before{content:"\e616"}.mdi-action-backup:before{content:"\e617"}.mdi-action-book:before{content:"\e618"}.mdi-action-bookmark-outline:before{content:"\e619"}.mdi-action-bookmark:before{content:"\e61a"}.mdi-action-bug-report:before{content:"\e61b"}.mdi-action-cached:before{content:"\e61c"}.mdi-action-check-circle:before{content:"\e61d"}.mdi-action-class:before{content:"\e61e"}.mdi-action-credit-card:before{content:"\e61f"}.mdi-action-dashboard:before{content:"\e620"}.mdi-action-delete:before{content:"\e621"}.mdi-action-description:before{content:"\e622"}.mdi-action-dns:before{content:"\e623"}.mdi-action-done-all:before{content:"\e624"}.mdi-action-done:before{content:"\e625"}.mdi-action-event:before{content:"\e626"}.mdi-action-exit-to-app:before{content:"\e627"}.mdi-action-explore:before{content:"\e628"}.mdi-action-extension:before{content:"\e629"}.mdi-action-face-unlock:before{content:"\e62a"}.mdi-action-favorite-outline:before{content:"\e62b"}.mdi-action-favorite:before{content:"\e62c"}.mdi-action-find-in-page:before{content:"\e62d"}.mdi-action-find-replace:before{content:"\e62e"}.mdi-action-flip-to-back:before{content:"\e62f"}.mdi-action-flip-to-front:before{content:"\e630"}.mdi-action-get-app:before{content:"\e631"}.mdi-action-grade:before{content:"\e632"}.mdi-action-group-work:before{content:"\e633"}.mdi-action-help:before{content:"\e634"}.mdi-action-highlight-remove:before{content:"\e635"}.mdi-action-history:before{content:"\e636"}.mdi-action-home:before{content:"\e637"}.mdi-action-https:before{content:"\e638"}.mdi-action-info-outline:before{content:"\e639"}.mdi-action-info:before{content:"\e63a"}.mdi-action-input:before{content:"\e63b"}.mdi-action-invert-colors:before{content:"\e63c"}.mdi-action-label-outline:before{content:"\e63d"}.mdi-action-label:before{content:"\e63e"}.mdi-action-language:before{content:"\e63f"}.mdi-action-launch:before{content:"\e640"}.mdi-action-list:before{content:"\e641"}.mdi-action-lock-open:before{content:"\e642"}.mdi-action-lock-outline:before{content:"\e643"}.mdi-action-lock:before{content:"\e644"}.mdi-action-loyalty:before{content:"\e645"}.mdi-action-markunread-mailbox:before{content:"\e646"}.mdi-action-note-add:before{content:"\e647"}.mdi-action-open-in-browser:before{content:"\e648"}.mdi-action-open-in-new:before{content:"\e649"}.mdi-action-open-with:before{content:"\e64a"}.mdi-action-pageview:before{content:"\e64b"}.mdi-action-payment:before{content:"\e64c"}.mdi-action-perm-camera-mic:before{content:"\e64d"}.mdi-action-perm-contact-cal:before{content:"\e64e"}.mdi-action-perm-data-setting:before{content:"\e64f"}.mdi-action-perm-device-info:before{content:"\e650"}.mdi-action-perm-identity:before{content:"\e651"}.mdi-action-perm-media:before{content:"\e652"}.mdi-action-perm-phone-msg:before{content:"\e653"}.mdi-action-perm-scan-wifi:before{content:"\e654"}.mdi-action-picture-in-picture:before{content:"\e655"}.mdi-action-polymer:before{content:"\e656"}.mdi-action-print:before{content:"\e657"}.mdi-action-query-builder:before{content:"\e658"}.mdi-action-question-answer:before{content:"\e659"}.mdi-action-receipt:before{content:"\e65a"}.mdi-action-redeem:before{content:"\e65b"}.mdi-action-reorder:before{content:"\e65c"}.mdi-action-report-problem:before{content:"\e65d"}.mdi-action-restore:before{content:"\e65e"}.mdi-action-room:before{content:"\e65f"}.mdi-action-schedule:before{content:"\e660"}.mdi-action-search:before{content:"\e661"}.mdi-action-settings-applications:before{content:"\e662"}.mdi-action-settings-backup-restore:before{content:"\e663"}.mdi-action-settings-bluetooth:before{content:"\e664"}.mdi-action-settings-cell:before{content:"\e665"}.mdi-action-settings-display:before{content:"\e666"}.mdi-action-settings-ethernet:before{content:"\e667"}.mdi-action-settings-input-antenna:before{content:"\e668"}.mdi-action-settings-input-component:before{content:"\e669"}.mdi-action-settings-input-composite:before{content:"\e66a"}.mdi-action-settings-input-hdmi:before{content:"\e66b"}.mdi-action-settings-input-svideo:before{content:"\e66c"}.mdi-action-settings-overscan:before{content:"\e66d"}.mdi-action-settings-phone:before{content:"\e66e"}.mdi-action-settings-power:before{content:"\e66f"}.mdi-action-settings-remote:before{content:"\e670"}.mdi-action-settings-voice:before{content:"\e671"}.mdi-action-settings:before{content:"\e672"}.mdi-action-shop-two:before{content:"\e673"}.mdi-action-shop:before{content:"\e674"}.mdi-action-shopping-basket:before{content:"\e675"}.mdi-action-shopping-cart:before{content:"\e676"}.mdi-action-speaker-notes:before{content:"\e677"}.mdi-action-spellcheck:before{content:"\e678"}.mdi-action-star-rate:before{content:"\e679"}.mdi-action-stars:before{content:"\e67a"}.mdi-action-store:before{content:"\e67b"}.mdi-action-subject:before{content:"\e67c"}.mdi-action-supervisor-account:before{content:"\e67d"}.mdi-action-swap-horiz:before{content:"\e67e"}.mdi-action-swap-vert-circle:before{content:"\e67f"}.mdi-action-swap-vert:before{content:"\e680"}.mdi-action-system-update-tv:before{content:"\e681"}.mdi-action-tab-unselected:before{content:"\e682"}.mdi-action-tab:before{content:"\e683"}.mdi-action-theaters:before{content:"\e684"}.mdi-action-thumb-down:before{content:"\e685"}.mdi-action-thumb-up:before{content:"\e686"}.mdi-action-thumbs-up-down:before{content:"\e687"}.mdi-action-toc:before{content:"\e688"}.mdi-action-today:before{content:"\e689"}.mdi-action-track-changes:before{content:"\e68a"}.mdi-action-translate:before{content:"\e68b"}.mdi-action-trending-down:before{content:"\e68c"}.mdi-action-trending-neutral:before{content:"\e68d"}.mdi-action-trending-up:before{content:"\e68e"}.mdi-action-turned-in-not:before{content:"\e68f"}.mdi-action-turned-in:before{content:"\e690"}.mdi-action-verified-user:before{content:"\e691"}.mdi-action-view-agenda:before{content:"\e692"}.mdi-action-view-array:before{content:"\e693"}.mdi-action-view-carousel:before{content:"\e694"}.mdi-action-view-column:before{content:"\e695"}.mdi-action-view-day:before{content:"\e696"}.mdi-action-view-headline:before{content:"\e697"}.mdi-action-view-list:before{content:"\e698"}.mdi-action-view-module:before{content:"\e699"}.mdi-action-view-quilt:before{content:"\e69a"}.mdi-action-view-stream:before{content:"\e69b"}.mdi-action-view-week:before{content:"\e69c"}.mdi-action-visibility-off:before{content:"\e69d"}.mdi-action-visibility:before{content:"\e69e"}.mdi-action-wallet-giftcard:before{content:"\e69f"}.mdi-action-wallet-membership:before{content:"\e6a0"}.mdi-action-wallet-travel:before{content:"\e6a1"}.mdi-action-work:before{content:"\e6a2"}.mdi-alert-error:before{content:"\e6a3"}.mdi-alert-warning:before{content:"\e6a4"}.mdi-av-album:before{content:"\e6a5"}.mdi-av-closed-caption:before{content:"\e6a6"}.mdi-av-equalizer:before{content:"\e6a7"}.mdi-av-explicit:before{content:"\e6a8"}.mdi-av-fast-forward:before{content:"\e6a9"}.mdi-av-fast-rewind:before{content:"\e6aa"}.mdi-av-games:before{content:"\e6ab"}.mdi-av-hearing:before{content:"\e6ac"}.mdi-av-high-quality:before{content:"\e6ad"}.mdi-av-loop:before{content:"\e6ae"}.mdi-av-mic-none:before{content:"\e6af"}.mdi-av-mic-off:before{content:"\e6b0"}.mdi-av-mic:before{content:"\e6b1"}.mdi-av-movie:before{content:"\e6b2"}.mdi-av-my-library-add:before{content:"\e6b3"}.mdi-av-my-library-books:before{content:"\e6b4"}.mdi-av-my-library-music:before{content:"\e6b5"}.mdi-av-new-releases:before{content:"\e6b6"}.mdi-av-not-interested:before{content:"\e6b7"}.mdi-av-pause-circle-fill:before{content:"\e6b8"}.mdi-av-pause-circle-outline:before{content:"\e6b9"}.mdi-av-pause:before{content:"\e6ba"}.mdi-av-play-arrow:before{content:"\e6bb"}.mdi-av-play-circle-fill:before{content:"\e6bc"}.mdi-av-play-circle-outline:before{content:"\e6bd"}.mdi-av-play-shopping-bag:before{content:"\e6be"}.mdi-av-playlist-add:before{content:"\e6bf"}.mdi-av-queue-music:before{content:"\e6c0"}.mdi-av-queue:before{content:"\e6c1"}.mdi-av-radio:before{content:"\e6c2"}.mdi-av-recent-actors:before{content:"\e6c3"}.mdi-av-repeat-one:before{content:"\e6c4"}.mdi-av-repeat:before{content:"\e6c5"}.mdi-av-replay:before{content:"\e6c6"}.mdi-av-shuffle:before{content:"\e6c7"}.mdi-av-skip-next:before{content:"\e6c8"}.mdi-av-skip-previous:before{content:"\e6c9"}.mdi-av-snooze:before{content:"\e6ca"}.mdi-av-stop:before{content:"\e6cb"}.mdi-av-subtitles:before{content:"\e6cc"}.mdi-av-surround-sound:before{content:"\e6cd"}.mdi-av-timer:before{content:"\e6ce"}.mdi-av-video-collection:before{content:"\e6cf"}.mdi-av-videocam-off:before{content:"\e6d0"}.mdi-av-videocam:before{content:"\e6d1"}.mdi-av-volume-down:before{content:"\e6d2"}.mdi-av-volume-mute:before{content:"\e6d3"}.mdi-av-volume-off:before{content:"\e6d4"}.mdi-av-volume-up:before{content:"\e6d5"}.mdi-av-web:before{content:"\e6d6"}.mdi-communication-business:before{content:"\e6d7"}.mdi-communication-call-end:before{content:"\e6d8"}.mdi-communication-call-made:before{content:"\e6d9"}.mdi-communication-call-merge:before{content:"\e6da"}.mdi-communication-call-missed:before{content:"\e6db"}.mdi-communication-call-received:before{content:"\e6dc"}.mdi-communication-call-split:before{content:"\e6dd"}.mdi-communication-call:before{content:"\e6de"}.mdi-communication-chat:before{content:"\e6df"}.mdi-communication-clear-all:before{content:"\e6e0"}.mdi-communication-comment:before{content:"\e6e1"}.mdi-communication-contacts:before{content:"\e6e2"}.mdi-communication-dialer-sip:before{content:"\e6e3"}.mdi-communication-dialpad:before{content:"\e6e4"}.mdi-communication-dnd-on:before{content:"\e6e5"}.mdi-communication-email:before{content:"\e6e6"}.mdi-communication-forum:before{content:"\e6e7"}.mdi-communication-import-export:before{content:"\e6e8"}.mdi-communication-invert-colors-off:before{content:"\e6e9"}.mdi-communication-invert-colors-on:before{content:"\e6ea"}.mdi-communication-live-help:before{content:"\e6eb"}.mdi-communication-location-off:before{content:"\e6ec"}.mdi-communication-location-on:before{content:"\e6ed"}.mdi-communication-message:before{content:"\e6ee"}.mdi-communication-messenger:before{content:"\e6ef"}.mdi-communication-no-sim:before{content:"\e6f0"}.mdi-communication-phone:before{content:"\e6f1"}.mdi-communication-portable-wifi-off:before{content:"\e6f2"}.mdi-communication-quick-contacts-dialer:before{content:"\e6f3"}.mdi-communication-quick-contacts-mail:before{content:"\e6f4"}.mdi-communication-ring-volume:before{content:"\e6f5"}.mdi-communication-stay-current-landscape:before{content:"\e6f6"}.mdi-communication-stay-current-portrait:before{content:"\e6f7"}.mdi-communication-stay-primary-landscape:before{content:"\e6f8"}.mdi-communication-stay-primary-portrait:before{content:"\e6f9"}.mdi-communication-swap-calls:before{content:"\e6fa"}.mdi-communication-textsms:before{content:"\e6fb"}.mdi-communication-voicemail:before{content:"\e6fc"}.mdi-communication-vpn-key:before{content:"\e6fd"}.mdi-content-add-box:before{content:"\e6fe"}.mdi-content-add-circle-outline:before{content:"\e6ff"}.mdi-content-add-circle:before{content:"\e700"}.mdi-content-add:before{content:"\e701"}.mdi-content-archive:before{content:"\e702"}.mdi-content-backspace:before{content:"\e703"}.mdi-content-block:before{content:"\e704"}.mdi-content-clear:before{content:"\e705"}.mdi-content-content-copy:before{content:"\e706"}.mdi-content-content-cut:before{content:"\e707"}.mdi-content-content-paste:before{content:"\e708"}.mdi-content-create:before{content:"\e709"}.mdi-content-drafts:before{content:"\e70a"}.mdi-content-filter-list:before{content:"\e70b"}.mdi-content-flag:before{content:"\e70c"}.mdi-content-forward:before{content:"\e70d"}.mdi-content-gesture:before{content:"\e70e"}.mdi-content-inbox:before{content:"\e70f"}.mdi-content-link:before{content:"\e710"}.mdi-content-mail:before{content:"\e711"}.mdi-content-markunread:before{content:"\e712"}.mdi-content-redo:before{content:"\e713"}.mdi-content-remove-circle-outline:before{content:"\e714"}.mdi-content-remove-circle:before{content:"\e715"}.mdi-content-remove:before{content:"\e716"}.mdi-content-reply-all:before{content:"\e717"}.mdi-content-reply:before{content:"\e718"}.mdi-content-report:before{content:"\e719"}.mdi-content-save:before{content:"\e71a"}.mdi-content-select-all:before{content:"\e71b"}.mdi-content-send:before{content:"\e71c"}.mdi-content-sort:before{content:"\e71d"}.mdi-content-text-format:before{content:"\e71e"}.mdi-content-undo:before{content:"\e71f"}.mdi-editor-attach-file:before{content:"\e776"}.mdi-editor-attach-money:before{content:"\e777"}.mdi-editor-border-all:before{content:"\e778"}.mdi-editor-border-bottom:before{content:"\e779"}.mdi-editor-border-clear:before{content:"\e77a"}.mdi-editor-border-color:before{content:"\e77b"}.mdi-editor-border-horizontal:before{content:"\e77c"}.mdi-editor-border-inner:before{content:"\e77d"}.mdi-editor-border-left:before{content:"\e77e"}.mdi-editor-border-outer:before{content:"\e77f"}.mdi-editor-border-right:before{content:"\e780"}.mdi-editor-border-style:before{content:"\e781"}.mdi-editor-border-top:before{content:"\e782"}.mdi-editor-border-vertical:before{content:"\e783"}.mdi-editor-format-align-center:before{content:"\e784"}.mdi-editor-format-align-justify:before{content:"\e785"}.mdi-editor-format-align-left:before{content:"\e786"}.mdi-editor-format-align-right:before{content:"\e787"}.mdi-editor-format-bold:before{content:"\e788"}.mdi-editor-format-clear:before{content:"\e789"}.mdi-editor-format-color-fill:before{content:"\e78a"}.mdi-editor-format-color-reset:before{content:"\e78b"}.mdi-editor-format-color-text:before{content:"\e78c"}.mdi-editor-format-indent-decrease:before{content:"\e78d"}.mdi-editor-format-indent-increase:before{content:"\e78e"}.mdi-editor-format-italic:before{content:"\e78f"}.mdi-editor-format-line-spacing:before{content:"\e790"}.mdi-editor-format-list-bulleted:before{content:"\e791"}.mdi-editor-format-list-numbered:before{content:"\e792"}.mdi-editor-format-paint:before{content:"\e793"}.mdi-editor-format-quote:before{content:"\e794"}.mdi-editor-format-size:before{content:"\e795"}.mdi-editor-format-strikethrough:before{content:"\e796"}.mdi-editor-format-textdirection-l-to-r:before{content:"\e797"}.mdi-editor-format-textdirection-r-to-l:before{content:"\e798"}.mdi-editor-format-underline:before{content:"\e799"}.mdi-editor-functions:before{content:"\e79a"}.mdi-editor-insert-chart:before{content:"\e79b"}.mdi-editor-insert-comment:before{content:"\e79c"}.mdi-editor-insert-drive-file:before{content:"\e79d"}.mdi-editor-insert-emoticon:before{content:"\e79e"}.mdi-editor-insert-invitation:before{content:"\e79f"}.mdi-editor-insert-link:before{content:"\e7a0"}.mdi-editor-insert-photo:before{content:"\e7a1"}.mdi-editor-merge-type:before{content:"\e7a2"}.mdi-editor-mode-comment:before{content:"\e7a3"}.mdi-editor-mode-edit:before{content:"\e7a4"}.mdi-editor-publish:before{content:"\e7a5"}.mdi-editor-vertical-align-bottom:before{content:"\e7a6"}.mdi-editor-vertical-align-center:before{content:"\e7a7"}.mdi-editor-vertical-align-top:before{content:"\e7a8"}.mdi-editor-wrap-text:before{content:"\e7a9"}.mdi-file-attachment:before{content:"\e7aa"}.mdi-file-cloud-circle:before{content:"\e7ab"}.mdi-file-cloud-done:before{content:"\e7ac"}.mdi-file-cloud-download:before{content:"\e7ad"}.mdi-file-cloud-off:before{content:"\e7ae"}.mdi-file-cloud-queue:before{content:"\e7af"}.mdi-file-cloud-upload:before{content:"\e7b0"}.mdi-file-cloud:before{content:"\e7b1"}.mdi-file-file-download:before{content:"\e7b2"}.mdi-file-file-upload:before{content:"\e7b3"}.mdi-file-folder-open:before{content:"\e7b4"}.mdi-file-folder-shared:before{content:"\e7b5"}.mdi-file-folder:before{content:"\e7b6"}.mdi-device-access-alarm:before{content:"\e720"}.mdi-device-access-alarms:before{content:"\e721"}.mdi-device-access-time:before{content:"\e722"}.mdi-device-add-alarm:before{content:"\e723"}.mdi-device-airplanemode-off:before{content:"\e724"}.mdi-device-airplanemode-on:before{content:"\e725"}.mdi-device-battery-20:before{content:"\e726"}.mdi-device-battery-30:before{content:"\e727"}.mdi-device-battery-50:before{content:"\e728"}.mdi-device-battery-60:before{content:"\e729"}.mdi-device-battery-80:before{content:"\e72a"}.mdi-device-battery-90:before{content:"\e72b"}.mdi-device-battery-alert:before{content:"\e72c"}.mdi-device-battery-charging-20:before{content:"\e72d"}.mdi-device-battery-charging-30:before{content:"\e72e"}.mdi-device-battery-charging-50:before{content:"\e72f"}.mdi-device-battery-charging-60:before{content:"\e730"}.mdi-device-battery-charging-80:before{content:"\e731"}.mdi-device-battery-charging-90:before{content:"\e732"}.mdi-device-battery-charging-full:before{content:"\e733"}.mdi-device-battery-full:before{content:"\e734"}.mdi-device-battery-std:before{content:"\e735"}.mdi-device-battery-unknown:before{content:"\e736"}.mdi-device-bluetooth-connected:before{content:"\e737"}.mdi-device-bluetooth-disabled:before{content:"\e738"}.mdi-device-bluetooth-searching:before{content:"\e739"}.mdi-device-bluetooth:before{content:"\e73a"}.mdi-device-brightness-auto:before{content:"\e73b"}.mdi-device-brightness-high:before{content:"\e73c"}.mdi-device-brightness-low:before{content:"\e73d"}.mdi-device-brightness-medium:before{content:"\e73e"}.mdi-device-data-usage:before{content:"\e73f"}.mdi-device-developer-mode:before{content:"\e740"}.mdi-device-devices:before{content:"\e741"}.mdi-device-dvr:before{content:"\e742"}.mdi-device-gps-fixed:before{content:"\e743"}.mdi-device-gps-not-fixed:before{content:"\e744"}.mdi-device-gps-off:before{content:"\e745"}.mdi-device-location-disabled:before{content:"\e746"}.mdi-device-location-searching:before{content:"\e747"}.mdi-device-multitrack-audio:before{content:"\e748"}.mdi-device-network-cell:before{content:"\e749"}.mdi-device-network-wifi:before{content:"\e74a"}.mdi-device-nfc:before{content:"\e74b"}.mdi-device-now-wallpaper:before{content:"\e74c"}.mdi-device-now-widgets:before{content:"\e74d"}.mdi-device-screen-lock-landscape:before{content:"\e74e"}.mdi-device-screen-lock-portrait:before{content:"\e74f"}.mdi-device-screen-lock-rotation:before{content:"\e750"}.mdi-device-screen-rotation:before{content:"\e751"}.mdi-device-sd-storage:before{content:"\e752"}.mdi-device-settings-system-daydream:before{content:"\e753"}.mdi-device-signal-cellular-0-bar:before{content:"\e754"}.mdi-device-signal-cellular-1-bar:before{content:"\e755"}.mdi-device-signal-cellular-2-bar:before{content:"\e756"}.mdi-device-signal-cellular-3-bar:before{content:"\e757"}.mdi-device-signal-cellular-4-bar:before{content:"\e758"}.mdi-signal-wifi-statusbar-connected-no-internet-after:before{content:"\e8f6"}.mdi-device-signal-cellular-connected-no-internet-0-bar:before{content:"\e759"}.mdi-device-signal-cellular-connected-no-internet-1-bar:before{content:"\e75a"}.mdi-device-signal-cellular-connected-no-internet-2-bar:before{content:"\e75b"}.mdi-device-signal-cellular-connected-no-internet-3-bar:before{content:"\e75c"}.mdi-device-signal-cellular-connected-no-internet-4-bar:before{content:"\e75d"}.mdi-device-signal-cellular-no-sim:before{content:"\e75e"}.mdi-device-signal-cellular-null:before{content:"\e75f"}.mdi-device-signal-cellular-off:before{content:"\e760"}.mdi-device-signal-wifi-0-bar:before{content:"\e761"}.mdi-device-signal-wifi-1-bar:before{content:"\e762"}.mdi-device-signal-wifi-2-bar:before{content:"\e763"}.mdi-device-signal-wifi-3-bar:before{content:"\e764"}.mdi-device-signal-wifi-4-bar:before{content:"\e765"}.mdi-device-signal-wifi-off:before{content:"\e766"}.mdi-device-signal-wifi-statusbar-1-bar:before{content:"\e767"}.mdi-device-signal-wifi-statusbar-2-bar:before{content:"\e768"}.mdi-device-signal-wifi-statusbar-3-bar:before{content:"\e769"}.mdi-device-signal-wifi-statusbar-4-bar:before{content:"\e76a"}.mdi-device-signal-wifi-statusbar-connected-no-internet-:before{content:"\e76b"}.mdi-device-signal-wifi-statusbar-connected-no-internet:before{content:"\e76f"}.mdi-device-signal-wifi-statusbar-connected-no-internet-2:before{content:"\e76c"}.mdi-device-signal-wifi-statusbar-connected-no-internet-3:before{content:"\e76d"}.mdi-device-signal-wifi-statusbar-connected-no-internet-4:before{content:"\e76e"}.mdi-signal-wifi-statusbar-not-connected-after:before{content:"\e8f7"}.mdi-device-signal-wifi-statusbar-not-connected:before{content:"\e770"}.mdi-device-signal-wifi-statusbar-null:before{content:"\e771"}.mdi-device-storage:before{content:"\e772"}.mdi-device-usb:before{content:"\e773"}.mdi-device-wifi-lock:before{content:"\e774"}.mdi-device-wifi-tethering:before{content:"\e775"}.mdi-hardware-cast-connected:before{content:"\e7b7"}.mdi-hardware-cast:before{content:"\e7b8"}.mdi-hardware-computer:before{content:"\e7b9"}.mdi-hardware-desktop-mac:before{content:"\e7ba"}.mdi-hardware-desktop-windows:before{content:"\e7bb"}.mdi-hardware-dock:before{content:"\e7bc"}.mdi-hardware-gamepad:before{content:"\e7bd"}.mdi-hardware-headset-mic:before{content:"\e7be"}.mdi-hardware-headset:before{content:"\e7bf"}.mdi-hardware-keyboard-alt:before{content:"\e7c0"}.mdi-hardware-keyboard-arrow-down:before{content:"\e7c1"}.mdi-hardware-keyboard-arrow-left:before{content:"\e7c2"}.mdi-hardware-keyboard-arrow-right:before{content:"\e7c3"}.mdi-hardware-keyboard-arrow-up:before{content:"\e7c4"}.mdi-hardware-keyboard-backspace:before{content:"\e7c5"}.mdi-hardware-keyboard-capslock:before{content:"\e7c6"}.mdi-hardware-keyboard-control:before{content:"\e7c7"}.mdi-hardware-keyboard-hide:before{content:"\e7c8"}.mdi-hardware-keyboard-return:before{content:"\e7c9"}.mdi-hardware-keyboard-tab:before{content:"\e7ca"}.mdi-hardware-keyboard-voice:before{content:"\e7cb"}.mdi-hardware-keyboard:before{content:"\e7cc"}.mdi-hardware-laptop-chromebook:before{content:"\e7cd"}.mdi-hardware-laptop-mac:before{content:"\e7ce"}.mdi-hardware-laptop-windows:before{content:"\e7cf"}.mdi-hardware-laptop:before{content:"\e7d0"}.mdi-hardware-memory:before{content:"\e7d1"}.mdi-hardware-mouse:before{content:"\e7d2"}.mdi-hardware-phone-android:before{content:"\e7d3"}.mdi-hardware-phone-iphone:before{content:"\e7d4"}.mdi-hardware-phonelink-off:before{content:"\e7d5"}.mdi-hardware-phonelink:before{content:"\e7d6"}.mdi-hardware-security:before{content:"\e7d7"}.mdi-hardware-sim-card:before{content:"\e7d8"}.mdi-hardware-smartphone:before{content:"\e7d9"}.mdi-hardware-speaker:before{content:"\e7da"}.mdi-hardware-tablet-android:before{content:"\e7db"}.mdi-hardware-tablet-mac:before{content:"\e7dc"}.mdi-hardware-tablet:before{content:"\e7dd"}.mdi-hardware-tv:before{content:"\e7de"}.mdi-hardware-watch:before{content:"\e7df"}.mdi-image-add-to-photos:before{content:"\e7e0"}.mdi-image-adjust:before{content:"\e7e1"}.mdi-image-assistant-photo:before{content:"\e7e2"}.mdi-image-audiotrack:before{content:"\e7e3"}.mdi-image-blur-circular:before{content:"\e7e4"}.mdi-image-blur-linear:before{content:"\e7e5"}.mdi-image-blur-off:before{content:"\e7e6"}.mdi-image-blur-on:before{content:"\e7e7"}.mdi-image-brightness-1:before{content:"\e7e8"}.mdi-image-brightness-2:before{content:"\e7e9"}.mdi-image-brightness-3:before{content:"\e7ea"}.mdi-image-brightness-4:before{content:"\e7eb"}.mdi-image-brightness-5:before{content:"\e7ec"}.mdi-image-brightness-6:before{content:"\e7ed"}.mdi-image-brightness-7:before{content:"\e7ee"}.mdi-image-brush:before{content:"\e7ef"}.mdi-image-camera-alt:before{content:"\e7f0"}.mdi-image-camera-front:before{content:"\e7f1"}.mdi-image-camera-rear:before{content:"\e7f2"}.mdi-image-camera-roll:before{content:"\e7f3"}.mdi-image-camera:before{content:"\e7f4"}.mdi-image-center-focus-strong:before{content:"\e7f5"}.mdi-image-center-focus-weak:before{content:"\e7f6"}.mdi-image-collections:before{content:"\e7f7"}.mdi-image-color-lens:before{content:"\e7f8"}.mdi-image-colorize:before{content:"\e7f9"}.mdi-image-compare:before{content:"\e7fa"}.mdi-image-control-point-duplicate:before{content:"\e7fb"}.mdi-image-control-point:before{content:"\e7fc"}.mdi-image-crop-3-2:before{content:"\e7fd"}.mdi-image-crop-5-4:before{content:"\e7fe"}.mdi-image-crop-7-5:before{content:"\e7ff"}.mdi-image-crop-16-9:before{content:"\e800"}.mdi-image-crop-din:before{content:"\e801"}.mdi-image-crop-free:before{content:"\e802"}.mdi-image-crop-landscape:before{content:"\e803"}.mdi-image-crop-original:before{content:"\e804"}.mdi-image-crop-portrait:before{content:"\e805"}.mdi-image-crop-square:before{content:"\e806"}.mdi-image-crop:before{content:"\e807"}.mdi-image-dehaze:before{content:"\e808"}.mdi-image-details:before{content:"\e809"}.mdi-image-edit:before{content:"\e80a"}.mdi-image-exposure-minus-1:before{content:"\e80b"}.mdi-image-exposure-minus-2:before{content:"\e80c"}.mdi-image-exposure-plus-1:before{content:"\e80d"}.mdi-image-exposure-plus-2:before{content:"\e80e"}.mdi-image-exposure-zero:before{content:"\e80f"}.mdi-image-exposure:before{content:"\e810"}.mdi-image-filter-1:before{content:"\e811"}.mdi-image-filter-2:before{content:"\e812"}.mdi-image-filter-3:before{content:"\e813"}.mdi-image-filter-4:before{content:"\e814"}.mdi-image-filter-5:before{content:"\e815"}.mdi-image-filter-6:before{content:"\e816"}.mdi-image-filter-7:before{content:"\e817"}.mdi-image-filter-8:before{content:"\e818"}.mdi-image-filter-9-plus:before{content:"\e819"}.mdi-image-filter-9:before{content:"\e81a"}.mdi-image-filter-b-and-w:before{content:"\e81b"}.mdi-image-filter-center-focus:before{content:"\e81c"}.mdi-image-filter-drama:before{content:"\e81d"}.mdi-image-filter-frames:before{content:"\e81e"}.mdi-image-filter-hdr:before{content:"\e81f"}.mdi-image-filter-none:before{content:"\e820"}.mdi-image-filter-tilt-shift:before{content:"\e821"}.mdi-image-filter-vintage:before{content:"\e822"}.mdi-image-filter:before{content:"\e823"}.mdi-image-flare:before{content:"\e824"}.mdi-image-flash-auto:before{content:"\e825"}.mdi-image-flash-off:before{content:"\e826"}.mdi-image-flash-on:before{content:"\e827"}.mdi-image-flip:before{content:"\e828"}.mdi-image-gradient:before{content:"\e829"}.mdi-image-grain:before{content:"\e82a"}.mdi-image-grid-off:before{content:"\e82b"}.mdi-image-grid-on:before{content:"\e82c"}.mdi-image-hdr-off:before{content:"\e82d"}.mdi-image-hdr-on:before{content:"\e82e"}.mdi-image-hdr-strong:before{content:"\e82f"}.mdi-image-hdr-weak:before{content:"\e830"}.mdi-image-healing:before{content:"\e831"}.mdi-image-image-aspect-ratio:before{content:"\e832"}.mdi-image-image:before{content:"\e833"}.mdi-image-iso:before{content:"\e834"}.mdi-image-landscape:before{content:"\e835"}.mdi-image-leak-add:before{content:"\e836"}.mdi-image-leak-remove:before{content:"\e837"}.mdi-image-lens:before{content:"\e838"}.mdi-image-looks-3:before{content:"\e839"}.mdi-image-looks-4:before{content:"\e83a"}.mdi-image-looks-5:before{content:"\e83b"}.mdi-image-looks-6:before{content:"\e83c"}.mdi-image-looks-one:before{content:"\e83d"}.mdi-image-looks-two:before{content:"\e83e"}.mdi-image-looks:before{content:"\e83f"}.mdi-image-loupe:before{content:"\e840"}.mdi-image-movie-creation:before{content:"\e841"}.mdi-image-nature-people:before{content:"\e842"}.mdi-image-nature:before{content:"\e843"}.mdi-image-navigate-before:before{content:"\e844"}.mdi-image-navigate-next:before{content:"\e845"}.mdi-image-palette:before{content:"\e846"}.mdi-image-panorama-fisheye:before{content:"\e847"}.mdi-image-panorama-horizontal:before{content:"\e848"}.mdi-image-panorama-vertical:before{content:"\e849"}.mdi-image-panorama-wide-angle:before{content:"\e84a"}.mdi-image-panorama:before{content:"\e84b"}.mdi-image-photo-album:before{content:"\e84c"}.mdi-image-photo-camera:before{content:"\e84d"}.mdi-image-photo-library:before{content:"\e84e"}.mdi-image-photo:before{content:"\e84f"}.mdi-image-portrait:before{content:"\e850"}.mdi-image-remove-red-eye:before{content:"\e851"}.mdi-image-rotate-left:before{content:"\e852"}.mdi-image-rotate-right:before{content:"\e853"}.mdi-image-slideshow:before{content:"\e854"}.mdi-image-straighten:before{content:"\e855"}.mdi-image-style:before{content:"\e856"}.mdi-image-switch-camera:before{content:"\e857"}.mdi-image-switch-video:before{content:"\e858"}.mdi-image-tag-faces:before{content:"\e859"}.mdi-image-texture:before{content:"\e85a"}.mdi-image-timelapse:before{content:"\e85b"}.mdi-image-timer-3:before{content:"\e85c"}.mdi-image-timer-10:before{content:"\e85d"}.mdi-image-timer-auto:before{content:"\e85e"}.mdi-image-timer-off:before{content:"\e85f"}.mdi-image-timer:before{content:"\e860"}.mdi-image-tonality:before{content:"\e861"}.mdi-image-transform:before{content:"\e862"}.mdi-image-tune:before{content:"\e863"}.mdi-image-wb-auto:before{content:"\e864"}.mdi-image-wb-cloudy:before{content:"\e865"}.mdi-image-wb-incandescent:before{content:"\e866"}.mdi-image-wb-irradescent:before{content:"\e867"}.mdi-image-wb-sunny:before{content:"\e868"}.mdi-maps-beenhere:before{content:"\e869"}.mdi-maps-directions-bike:before{content:"\e86a"}.mdi-maps-directions-bus:before{content:"\e86b"}.mdi-maps-directions-car:before{content:"\e86c"}.mdi-maps-directions-ferry:before{content:"\e86d"}.mdi-maps-directions-subway:before{content:"\e86e"}.mdi-maps-directions-train:before{content:"\e86f"}.mdi-maps-directions-transit:before{content:"\e870"}.mdi-maps-directions-walk:before{content:"\e871"}.mdi-maps-directions:before{content:"\e872"}.mdi-maps-flight:before{content:"\e873"}.mdi-maps-hotel:before{content:"\e874"}.mdi-maps-layers-clear:before{content:"\e875"}.mdi-maps-layers:before{content:"\e876"}.mdi-maps-local-airport:before{content:"\e877"}.mdi-maps-local-atm:before{content:"\e878"}.mdi-maps-local-attraction:before{content:"\e879"}.mdi-maps-local-bar:before{content:"\e87a"}.mdi-maps-local-cafe:before{content:"\e87b"}.mdi-maps-local-car-wash:before{content:"\e87c"}.mdi-maps-local-convenience-store:before{content:"\e87d"}.mdi-maps-local-drink:before{content:"\e87e"}.mdi-maps-local-florist:before{content:"\e87f"}.mdi-maps-local-gas-station:before{content:"\e880"}.mdi-maps-local-grocery-store:before{content:"\e881"}.mdi-maps-local-hospital:before{content:"\e882"}.mdi-maps-local-hotel:before{content:"\e883"}.mdi-maps-local-laundry-service:before{content:"\e884"}.mdi-maps-local-library:before{content:"\e885"}.mdi-maps-local-mall:before{content:"\e886"}.mdi-maps-local-movies:before{content:"\e887"}.mdi-maps-local-offer:before{content:"\e888"}.mdi-maps-local-parking:before{content:"\e889"}.mdi-maps-local-pharmacy:before{content:"\e88a"}.mdi-maps-local-phone:before{content:"\e88b"}.mdi-maps-local-pizza:before{content:"\e88c"}.mdi-maps-local-play:before{content:"\e88d"}.mdi-maps-local-post-office:before{content:"\e88e"}.mdi-maps-local-print-shop:before{content:"\e88f"}.mdi-maps-local-restaurant:before{content:"\e890"}.mdi-maps-local-see:before{content:"\e891"}.mdi-maps-local-shipping:before{content:"\e892"}.mdi-maps-local-taxi:before{content:"\e893"}.mdi-maps-location-history:before{content:"\e894"}.mdi-maps-map:before{content:"\e895"}.mdi-maps-my-location:before{content:"\e896"}.mdi-maps-navigation:before{content:"\e897"}.mdi-maps-pin-drop:before{content:"\e898"}.mdi-maps-place:before{content:"\e899"}.mdi-maps-rate-review:before{content:"\e89a"}.mdi-maps-restaurant-menu:before{content:"\e89b"}.mdi-maps-satellite:before{content:"\e89c"}.mdi-maps-store-mall-directory:before{content:"\e89d"}.mdi-maps-terrain:before{content:"\e89e"}.mdi-maps-traffic:before{content:"\e89f"}.mdi-navigation-apps:before{content:"\e8a0"}.mdi-navigation-arrow-back:before{content:"\e8a1"}.mdi-navigation-arrow-drop-down-circle:before{content:"\e8a2"}.mdi-navigation-arrow-drop-down:before{content:"\e8a3"}.mdi-navigation-arrow-drop-up:before{content:"\e8a4"}.mdi-navigation-arrow-forward:before{content:"\e8a5"}.mdi-navigation-cancel:before{content:"\e8a6"}.mdi-navigation-check:before{content:"\e8a7"}.mdi-navigation-chevron-left:before{content:"\e8a8"}.mdi-navigation-chevron-right:before{content:"\e8a9"}.mdi-navigation-close:before{content:"\e8aa"}.mdi-navigation-expand-less:before{content:"\e8ab"}.mdi-navigation-expand-more:before{content:"\e8ac"}.mdi-navigation-fullscreen-exit:before{content:"\e8ad"}.mdi-navigation-fullscreen:before{content:"\e8ae"}.mdi-navigation-menu:before{content:"\e8af"}.mdi-navigation-more-horiz:before{content:"\e8b0"}.mdi-navigation-more-vert:before{content:"\e8b1"}.mdi-navigation-refresh:before{content:"\e8b2"}.mdi-navigation-unfold-less:before{content:"\e8b3"}.mdi-navigation-unfold-more:before{content:"\e8b4"}.mdi-notification-adb:before{content:"\e8b5"}.mdi-notification-bluetooth-audio:before{content:"\e8b6"}.mdi-notification-disc-full:before{content:"\e8b7"}.mdi-notification-dnd-forwardslash:before{content:"\e8b8"}.mdi-notification-do-not-disturb:before{content:"\e8b9"}.mdi-notification-drive-eta:before{content:"\e8ba"}.mdi-notification-event-available:before{content:"\e8bb"}.mdi-notification-event-busy:before{content:"\e8bc"}.mdi-notification-event-note:before{content:"\e8bd"}.mdi-notification-folder-special:before{content:"\e8be"}.mdi-notification-mms:before{content:"\e8bf"}.mdi-notification-more:before{content:"\e8c0"}.mdi-notification-network-locked:before{content:"\e8c1"}.mdi-notification-phone-bluetooth-speaker:before{content:"\e8c2"}.mdi-notification-phone-forwarded:before{content:"\e8c3"}.mdi-notification-phone-in-talk:before{content:"\e8c4"}.mdi-notification-phone-locked:before{content:"\e8c5"}.mdi-notification-phone-missed:before{content:"\e8c6"}.mdi-notification-phone-paused:before{content:"\e8c7"}.mdi-notification-play-download:before{content:"\e8c8"}.mdi-notification-play-install:before{content:"\e8c9"}.mdi-notification-sd-card:before{content:"\e8ca"}.mdi-notification-sim-card-alert:before{content:"\e8cb"}.mdi-notification-sms-failed:before{content:"\e8cc"}.mdi-notification-sms:before{content:"\e8cd"}.mdi-notification-sync-disabled:before{content:"\e8ce"}.mdi-notification-sync-problem:before{content:"\e8cf"}.mdi-notification-sync:before{content:"\e8d0"}.mdi-notification-system-update:before{content:"\e8d1"}.mdi-notification-tap-and-play:before{content:"\e8d2"}.mdi-notification-time-to-leave:before{content:"\e8d3"}.mdi-notification-vibration:before{content:"\e8d4"}.mdi-notification-voice-chat:before{content:"\e8d5"}.mdi-notification-vpn-lock:before{content:"\e8d6"}.mdi-social-cake:before{content:"\e8d7"}.mdi-social-domain:before{content:"\e8d8"}.mdi-social-group-add:before{content:"\e8d9"}.mdi-social-group:before{content:"\e8da"}.mdi-social-location-city:before{content:"\e8db"}.mdi-social-mood:before{content:"\e8dc"}.mdi-social-notifications-none:before{content:"\e8dd"}.mdi-social-notifications-off:before{content:"\e8de"}.mdi-social-notifications-on:before{content:"\e8df"}.mdi-social-notifications-paused:before{content:"\e8e0"}.mdi-social-notifications:before{content:"\e8e1"}.mdi-social-pages:before{content:"\e8e2"}.mdi-social-party-mode:before{content:"\e8e3"}.mdi-social-people-outline:before{content:"\e8e4"}.mdi-social-people:before{content:"\e8e5"}.mdi-social-person-add:before{content:"\e8e6"}.mdi-social-person-outline:before{content:"\e8e7"}.mdi-social-person:before{content:"\e8e8"}.mdi-social-plus-one:before{content:"\e8e9"}.mdi-social-poll:before{content:"\e8ea"}.mdi-social-public:before{content:"\e8eb"}.mdi-social-school:before{content:"\e8ec"}.mdi-social-share:before{content:"\e8ed"}.mdi-social-whatshot:before{content:"\e8ee"}.mdi-toggle-check-box-outline-blank:before{content:"\e8ef"}.mdi-toggle-check-box:before{content:"\e8f0"}.mdi-toggle-radio-button-off:before{content:"\e8f1"}.mdi-toggle-radio-button-on:before{content:"\e8f2"}.mdi-toggle-star-half:before{content:"\e8f3"}.mdi-toggle-star-outline:before{content:"\e8f4"}.mdi-toggle-star:before{content:"\e8f5"}.container{margin:0 auto;max-width:1280px;width:90%}@media only screen and (min-width : 601px){.container{width:85%}}@media only screen and (min-width : 993px){.container{width:70%}}.container .row{margin-left:-0.75rem;margin-right:-0.75rem}.section{padding-top:1rem;padding-bottom:1rem}.section.no-pad{padding:0}.section.no-pad-bot{padding-bottom:0}.section.no-pad-top{padding-top:0}.row{margin-left:auto;margin-right:auto;margin-bottom:20px}.row:after{content:"";display:table;clear:both}.row .col{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 0.75rem}.row .col.s1{width:8.33333%;margin-left:0}.row .col.s2{width:16.66667%;margin-left:0}.row .col.s3{width:25%;margin-left:0}.row .col.s4{width:33.33333%;margin-left:0}.row .col.s5{width:41.66667%;margin-left:0}.row .col.s6{width:50%;margin-left:0}.row .col.s7{width:58.33333%;margin-left:0}.row .col.s8{width:66.66667%;margin-left:0}.row .col.s9{width:75%;margin-left:0}.row .col.s10{width:83.33333%;margin-left:0}.row .col.s11{width:91.66667%;margin-left:0}.row .col.s12{width:100%;margin-left:0}.row .col.offset-s1{margin-left:8.33333%}.row .col.offset-s2{margin-left:16.66667%}.row .col.offset-s3{margin-left:25%}.row .col.offset-s4{margin-left:33.33333%}.row .col.offset-s5{margin-left:41.66667%}.row .col.offset-s6{margin-left:50%}.row .col.offset-s7{margin-left:58.33333%}.row .col.offset-s8{margin-left:66.66667%}.row .col.offset-s9{margin-left:75%}.row .col.offset-s10{margin-left:83.33333%}.row .col.offset-s11{margin-left:91.66667%}.row .col.offset-s12{margin-left:100%}@media only screen and (min-width : 601px){.row .col.m1{width:8.33333%;margin-left:0}.row .col.m2{width:16.66667%;margin-left:0}.row .col.m3{width:25%;margin-left:0}.row .col.m4{width:33.33333%;margin-left:0}.row .col.m5{width:41.66667%;margin-left:0}.row .col.m6{width:50%;margin-left:0}.row .col.m7{width:58.33333%;margin-left:0}.row .col.m8{width:66.66667%;margin-left:0}.row .col.m9{width:75%;margin-left:0}.row .col.m10{width:83.33333%;margin-left:0}.row .col.m11{width:91.66667%;margin-left:0}.row .col.m12{width:100%;margin-left:0}.row .col.offset-m1{margin-left:8.33333%}.row .col.offset-m2{margin-left:16.66667%}.row .col.offset-m3{margin-left:25%}.row .col.offset-m4{margin-left:33.33333%}.row .col.offset-m5{margin-left:41.66667%}.row .col.offset-m6{margin-left:50%}.row .col.offset-m7{margin-left:58.33333%}.row .col.offset-m8{margin-left:66.66667%}.row .col.offset-m9{margin-left:75%}.row .col.offset-m10{margin-left:83.33333%}.row .col.offset-m11{margin-left:91.66667%}.row .col.offset-m12{margin-left:100%}}@media only screen and (min-width : 993px){.row .col.l1{width:8.33333%;margin-left:0}.row .col.l2{width:16.66667%;margin-left:0}.row .col.l3{width:25%;margin-left:0}.row .col.l4{width:33.33333%;margin-left:0}.row .col.l5{width:41.66667%;margin-left:0}.row .col.l6{width:50%;margin-left:0}.row .col.l7{width:58.33333%;margin-left:0}.row .col.l8{width:66.66667%;margin-left:0}.row .col.l9{width:75%;margin-left:0}.row .col.l10{width:83.33333%;margin-left:0}.row .col.l11{width:91.66667%;margin-left:0}.row .col.l12{width:100%;margin-left:0}.row .col.offset-l1{margin-left:8.33333%}.row .col.offset-l2{margin-left:16.66667%}.row .col.offset-l3{margin-left:25%}.row .col.offset-l4{margin-left:33.33333%}.row .col.offset-l5{margin-left:41.66667%}.row .col.offset-l6{margin-left:50%}.row .col.offset-l7{margin-left:58.33333%}.row .col.offset-l8{margin-left:66.66667%}.row .col.offset-l9{margin-left:75%}.row .col.offset-l10{margin-left:83.33333%}.row .col.offset-l11{margin-left:91.66667%}.row .col.offset-l12{margin-left:100%}}nav{color:#fff;background-color:#ee6e73;width:100%;height:56px;line-height:56px}nav a{color:#fff}nav .nav-wrapper{position:relative;height:100%}nav .nav-wrapper i{display:block;font-size:2rem}@media only screen and (min-width : 993px){nav a.button-collapse{display:none}}nav .button-collapse{float:left;position:relative;z-index:1;height:56px}nav .button-collapse i{font-size:2.7rem;height:56px;line-height:56px}nav .brand-logo{position:absolute;color:#fff;display:inline-block;font-size:2.1rem;padding:0;white-space:nowrap}nav .brand-logo.center{left:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%)}@media only screen and (max-width : 992px){nav .brand-logo{left:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%);}nav .brand-logo.left,nav .brand-logo.right{padding:0;-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}nav .brand-logo.left{left:0.5rem}nav .brand-logo.right{right:0.5rem;left:auto}}nav .brand-logo.right{right:0.5rem;padding:0}nav ul{margin:0}nav ul li{-webkit-transition:background-color .3s;-moz-transition:background-color .3s;-o-transition:background-color .3s;-ms-transition:background-color .3s;transition:background-color .3s;float:left;padding:0}nav ul li:hover,nav ul li.active{background-color:rgba(0,0,0,0.1)}nav ul a{font-size:1rem;color:#fff;display:block;padding:0 15px}nav ul.left{float:left}nav .input-field{margin:0}nav .input-field input{height:100%;font-size:1.2rem;border:none;padding-left:2rem}nav .input-field input:focus,nav .input-field input[type=text]:valid,nav .input-field input[type=password]:valid,nav .input-field input[type=email]:valid,nav .input-field input[type=url]:valid,nav .input-field input[type=date]:valid{border:none;box-shadow:none}nav .input-field label{top:0;left:0}nav .input-field label i{color:rgba(255,255,255,0.7);-webkit-transition:color .3s;-moz-transition:color .3s;-o-transition:color .3s;-ms-transition:color .3s;transition:color .3s}nav .input-field label.active i{color:#fff}nav .input-field label.active{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}.navbar-fixed{position:relative;height:56px;z-index:998}.navbar-fixed nav{position:fixed}@media only screen and (min-width : 601px){nav,nav .nav-wrapper i,nav a.button-collapse,nav a.button-collapse i{height:64px;line-height:64px}.navbar-fixed{height:64px}}@font-face{font-family:"Roboto";src:local(Roboto Thin),url("../font/roboto/Roboto-Thin.woff2") format("woff2"),url("../font/roboto/Roboto-Thin.woff") format("woff"),url("../font/roboto/Roboto-Thin.ttf") format("truetype");font-weight:200;}@font-face{font-family:"Roboto";src:local(Roboto Light),url("../font/roboto/Roboto-Light.woff2") format("woff2"),url("../font/roboto/Roboto-Light.woff") format("woff"),url("../font/roboto/Roboto-Light.ttf") format("truetype");font-weight:300;}@font-face{font-family:"Roboto";src:local(Roboto Regular),url("../font/roboto/Roboto-Regular.woff2") format("woff2"),url("../font/roboto/Roboto-Regular.woff") format("woff"),url("../font/roboto/Roboto-Regular.ttf") format("truetype");font-weight:400;}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Medium.woff2") format("woff2"),url("../font/roboto/Roboto-Medium.woff") format("woff"),url("../font/roboto/Roboto-Medium.ttf") format("truetype");font-weight:500;}@font-face{font-family:"Roboto";src:url("../font/roboto/Roboto-Bold.woff2") format("woff2"),url("../font/roboto/Roboto-Bold.woff") format("woff"),url("../font/roboto/Roboto-Bold.ttf") format("truetype");font-weight:700;}a{text-decoration:none}html{line-height:1.5;font-family:"Roboto", sans-serif;font-weight:normal;color:rgba(0,0,0,0.87)}@media only screen and (min-width: 0){html{font-size:14px;}}@media only screen and (min-width: 992px){html{font-size:14.5px;}}@media only screen and (min-width: 1200px){html{font-size:15px;}}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.1}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:4.2rem;line-height:110%;margin:2.1rem 0 1.68rem 0}h2{font-size:3.56rem;line-height:110%;margin:1.78rem 0 1.424rem 0}h3{font-size:2.92rem;line-height:110%;margin:1.46rem 0 1.168rem 0}h4{font-size:2.28rem;line-height:110%;margin:1.14rem 0 0.912rem 0}h5{font-size:1.64rem;line-height:110%;margin:0.82rem 0 0.656rem 0}h6{font-size:1rem;line-height:110%;margin:0.5rem 0 0.4rem 0}em{font-style:italic}strong{font-weight:500}small{font-size:75%}.light,footer.page-footer .footer-copyright{font-weight:300}.thin{font-weight:200}.flow-text{font-weight:300}@media only screen and (min-width: 360px){.flow-text{font-size:1.2rem;}}@media only screen and (min-width: 390px){.flow-text{font-size:1.224rem;}}@media only screen and (min-width: 420px){.flow-text{font-size:1.248rem;}}@media only screen and (min-width: 450px){.flow-text{font-size:1.272rem;}}@media only screen and (min-width: 480px){.flow-text{font-size:1.296rem;}}@media only screen and (min-width: 510px){.flow-text{font-size:1.32rem;}}@media only screen and (min-width: 540px){.flow-text{font-size:1.344rem;}}@media only screen and (min-width: 570px){.flow-text{font-size:1.368rem;}}@media only screen and (min-width: 600px){.flow-text{font-size:1.392rem;}}@media only screen and (min-width: 630px){.flow-text{font-size:1.416rem;}}@media only screen and (min-width: 660px){.flow-text{font-size:1.44rem;}}@media only screen and (min-width: 690px){.flow-text{font-size:1.464rem;}}@media only screen and (min-width: 720px){.flow-text{font-size:1.488rem;}}@media only screen and (min-width: 750px){.flow-text{font-size:1.512rem;}}@media only screen and (min-width: 780px){.flow-text{font-size:1.536rem;}}@media only screen and (min-width: 810px){.flow-text{font-size:1.56rem;}}@media only screen and (min-width: 840px){.flow-text{font-size:1.584rem;}}@media only screen and (min-width: 870px){.flow-text{font-size:1.608rem;}}@media only screen and (min-width: 900px){.flow-text{font-size:1.632rem;}}@media only screen and (min-width: 930px){.flow-text{font-size:1.656rem;}}@media only screen and (min-width: 960px){.flow-text{font-size:1.68rem;}}@media only screen and (max-width: 360px){.flow-text{font-size:1.2rem;}}.card-panel{transition:box-shadow .25s;padding:20px;margin:0.5rem 0 1rem 0;border-radius:2px;background-color:#fff}.card{position:relative;overflow:hidden;margin:0.5rem 0 1rem 0;background-color:#fff;transition:box-shadow .25s;border-radius:2px}.card .card-title{color:#fff;font-size:24px;font-weight:300}.card .card-title.activator{cursor:pointer}.card.small,.card.medium,.card.large{position:relative}.card.small .card-image,.card.medium .card-image,.card.large .card-image{overflow:hidden}.card.small .card-content,.card.medium .card-content,.card.large .card-content{overflow:hidden}.card.small .card-action,.card.medium .card-action,.card.large .card-action{position:absolute;bottom:0;left:0;right:0}.card.small{height:300px}.card.small .card-image{height:150px}.card.small .card-content{height:150px}.card.medium{height:400px}.card.medium .card-image{height:250px}.card.medium .card-content{height:150px}.card.large{height:500px}.card.large .card-image{height:330px}.card.large .card-content{height:170px}.card .card-image{position:relative}.card .card-image img{display:block;border-radius:2px 2px 0 0;position:relative;left:0;right:0;top:0;bottom:0;width:100%}.card .card-image .card-title{position:absolute;bottom:0;left:0;padding:20px}.card .card-content{padding:20px;border-radius:0 0 2px 2px}.card .card-content p{margin:0;color:inherit}.card .card-content .card-title{line-height:48px}.card .card-action{border-top:1px solid rgba(160,160,160,0.2);padding:20px}.card .card-action a{color:#ffab40;margin-right:20px;-webkit-transition:color .3s ease;-moz-transition:color .3s ease;-o-transition:color .3s ease;-ms-transition:color .3s ease;transition:color .3s ease;text-transform:uppercase}.card .card-action a:hover{color:#ffd8a6}.card .card-reveal{padding:20px;position:absolute;background-color:#fff;width:100%;overflow-y:auto;top:100%;height:100%;z-index:1;display:none}.card .card-reveal .card-title{cursor:pointer;display:block}#toast-container{display:block;position:fixed;z-index:10000}@media only screen and (max-width : 600px){#toast-container{min-width:100%;bottom:0%;}}@media only screen and (min-width : 601px) and (max-width : 992px){#toast-container{min-width:30%;left:5%;bottom:7%;}}@media only screen and (min-width : 993px){#toast-container{min-width:8%;top:10%;right:7%;}}.toast{border-radius:2px;top:0;width:auto;clear:both;margin-top:10px;position:relative;max-width:100%;height:48px;line-height:48px;background-color:#323232;padding:0 25px;font-size:1.1rem;font-weight:300;color:#fff;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}.toast .btn,.toast .btn-large,.toast .btn-flat{margin:0;margin-left:3rem}.toast.rounded{border-radius:24px}@media only screen and (max-width : 600px){.toast{width:100%;border-radius:0;}}@media only screen and (min-width : 601px) and (max-width : 992px){.toast{float:left;}}@media only screen and (min-width : 993px){.toast{float:right;}}.tabs{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;position:relative;height:48px;background-color:#fff;margin:0 auto;width:100%;white-space:nowrap}.tabs .tab{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;display:block;float:left;text-align:center;line-height:48px;height:48px;padding:0 20px;margin:0;text-transform:uppercase;letter-spacing:.8px;width:15%}.tabs .tab a{color:#ee6e73;display:block;width:100%;height:100%;-webkit-transition:color .28s ease;-moz-transition:color .28s ease;-o-transition:color .28s ease;-ms-transition:color .28s ease;transition:color .28s ease}.tabs .tab a:hover{color:#f9c9cb}.tabs .tab.disabled a{color:#f9c9cb;cursor:default}.tabs .indicator{position:absolute;bottom:0;height:2px;background-color:#f6b2b5;will-change:left, right}.tabs .tab{padding:0}.material-tooltip{padding:10px 8px;font-size:1rem;z-index:2000;background-color:transparent;border-radius:2px;color:#fff;min-height:36px;line-height:1rem;opacity:0;display:none;position:absolute;text-align:center;overflow:hidden;left:0;top:0;will-change:top, left}.backdrop{position:absolute;opacity:0;display:none;height:7px;width:14px;border-radius:0 0 14px 14px;background-color:#323232;z-index:-1;-webkit-transform-origin:50% 10%;-moz-transform-origin:50% 10%;-ms-transform-origin:50% 10%;-o-transform-origin:50% 10%;transform-origin:50% 10%;will-change:transform, opacity}.btn,.btn-large,.btn-flat{border:none;border-radius:2px;display:inline-block;height:36px;line-height:36px;outline:0;padding:0 2rem;text-transform:uppercase;vertical-align:middle;-webkit-tap-highlight-color:transparent}.btn.disabled,.disabled.btn-large,.btn-floating.disabled,.btn-large.disabled,.btn:disabled,.btn-large:disabled,.btn-large:disabled,.btn-floating:disabled{background-color:#DFDFDF !important;box-shadow:none;color:#9F9F9F !important;cursor:default}.btn.disabled *,.disabled.btn-large *,.btn-floating.disabled *,.btn-large.disabled *,.btn:disabled *,.btn-large:disabled *,.btn-large:disabled *,.btn-floating:disabled *{pointer-events:none}.btn.disabled:hover,.disabled.btn-large:hover,.btn-floating.disabled:hover,.btn-large.disabled:hover,.btn:disabled:hover,.btn-large:disabled:hover,.btn-large:disabled:hover,.btn-floating:disabled:hover{background-color:#DFDFDF;color:#9F9F9F}.btn i,.btn-large i,.btn-floating i,.btn-large i,.btn-flat i{font-size:1.3rem;line-height:inherit}.btn,.btn-large{text-decoration:none;color:#fff;background-color:#26a69a;text-align:center;letter-spacing:.5px;-webkit-transition:.2s ease-out;-moz-transition:.2s ease-out;-o-transition:.2s ease-out;-ms-transition:.2s ease-out;transition:.2s ease-out;cursor:pointer}.btn:hover,.btn-large:hover{background-color:#2bbbad}.btn-floating{display:inline-block;color:#fff;position:relative;overflow:hidden;z-index:1;width:37px;height:37px;line-height:37px;padding:0;background-color:#26a69a;border-radius:50%;transition:.3s;cursor:pointer;vertical-align:middle}.btn-floating i{width:inherit;display:inline-block;text-align:center;color:#fff;font-size:1.6rem;line-height:37px}.btn-floating:before{border-radius:0}.btn-floating.btn-large{width:55.5px;height:55.5px}.btn-floating.btn-large i{line-height:55.5px}button.btn-floating{border:none}.fixed-action-btn{position:fixed;right:23px;bottom:23px;padding-top:15px;margin-bottom:0;z-index:998}.fixed-action-btn ul{left:0;right:0;text-align:center;position:absolute;bottom:64px;margin:0}.fixed-action-btn ul li{margin-bottom:15px}.fixed-action-btn ul a.btn-floating{opacity:0}.btn-flat{box-shadow:none;background-color:transparent;color:#343434;cursor:pointer}.btn-flat.disabled{color:#b3b3b3;cursor:default}.btn-large{height:54px;line-height:56px}.btn-large i{font-size:1.6rem}.btn-block{display:block}.dropdown-content{background-color:#fff;margin:0;display:none;min-width:100px;max-height:650px;overflow-y:auto;opacity:0;position:absolute;z-index:999;will-change:width, height}.dropdown-content li{clear:both;color:rgba(0,0,0,0.87);cursor:pointer;line-height:1.5rem;width:100%;text-align:left;text-transform:none}.dropdown-content li:hover,.dropdown-content li.active{background-color:#eee}.dropdown-content li>a,.dropdown-content li>span{font-size:1.2rem;color:#26a69a;display:block;padding:1rem 1rem}.dropdown-content li>a>i{height:inherit;line-height:inherit}/*!
7 * Waves v0.6.0
8 * http://fian.my.id/Waves
9 *
10 * Copyright 2014 Alfiana E. Sibuea and other contributors
11 * Released under the MIT license
12 * https://github.com/fians/Waves/blob/master/LICENSE
13 */.waves-effect{position:relative;cursor:pointer;display:inline-block;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle;z-index:1;will-change:opacity, transform;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out}.waves-effect .waves-ripple{position:absolute;border-radius:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;opacity:0;background:rgba(0,0,0,0.2);-webkit-transition:all 0.7s ease-out;-moz-transition:all 0.7s ease-out;-o-transition:all 0.7s ease-out;-ms-transition:all 0.7s ease-out;transition:all 0.7s ease-out;-webkit-transition-property:-webkit-transform, opacity;-moz-transition-property:-moz-transform, opacity;-o-transition-property:-o-transform, opacity;transition-property:transform, opacity;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);pointer-events:none}.waves-effect.waves-light .waves-ripple{background-color:rgba(255,255,255,0.45)}.waves-effect.waves-red .waves-ripple{background-color:rgba(244,67,54,0.7)}.waves-effect.waves-yellow .waves-ripple{background-color:rgba(255,235,59,0.7)}.waves-effect.waves-orange .waves-ripple{background-color:rgba(255,152,0,0.7)}.waves-effect.waves-purple .waves-ripple{background-color:rgba(156,39,176,0.7)}.waves-effect.waves-green .waves-ripple{background-color:rgba(76,175,80,0.7)}.waves-effect.waves-teal .waves-ripple{background-color:rgba(0,150,136,0.7)}.waves-notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;-ms-transition:none !important;transition:none !important}.waves-circle{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle, white 100%, black 100%)}.waves-input-wrapper{border-radius:0.2em;vertical-align:bottom}.waves-input-wrapper .waves-button-input{position:relative;top:0;left:0;z-index:1}.waves-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%;-webkit-mask-image:none}.waves-block{display:block}a.waves-effect .waves-ripple{z-index:-1}.modal{display:none;position:fixed;left:0;right:0;background-color:#fafafa;padding:0;max-height:70%;width:55%;margin:auto;overflow-y:auto;border-radius:2px;will-change:top, opacity}@media only screen and (max-width : 992px){.modal{width:80%;}}.modal h1,.modal h2,.modal h3,.modal h4{margin-top:0}.modal .modal-content{padding:24px}.modal .modal-close{cursor:pointer}.modal .modal-footer{border-radius:0 0 2px 2px;background-color:#fafafa;padding:4px 6px;height:56px;width:100%}.modal .modal-footer .btn,.modal .modal-footer .btn-large,.modal .modal-footer .btn-flat{float:right;margin:6px 0}.lean-overlay{position:fixed;z-index:999;top:-100px;left:0;bottom:0;right:0;height:125%;width:100%;background:#000;display:none;will-change:opacity}.modal.modal-fixed-footer{padding:0;height:70%}.modal.modal-fixed-footer .modal-content{position:absolute;height:calc(100% - 56px);max-height:100%;width:100%;overflow-y:auto}.modal.modal-fixed-footer .modal-footer{border-top:1px solid rgba(0,0,0,0.1);position:absolute;bottom:0}.modal.bottom-sheet{top:auto;bottom:-100%;margin:0;width:100%;max-height:45%;border-radius:0;will-change:bottom, opacity}.collapsible{border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;margin:0.5rem 0 1rem 0}.collapsible-header{display:block;cursor:pointer;min-height:3rem;line-height:3rem;padding:0 1rem;background-color:#fff;border-bottom:1px solid #ddd}.collapsible-header i{width:2rem;font-size:1.6rem;line-height:3rem;display:block;float:left;text-align:center;margin-right:1rem}.collapsible-body{display:none;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.collapsible-body p{margin:0;padding:2rem}.side-nav .collapsible{border:none;box-shadow:none}.side-nav .collapsible li{padding:0}.side-nav .collapsible-header{background-color:transparent;border:none;line-height:inherit;height:inherit;margin:0 1rem}.side-nav .collapsible-header i{line-height:inherit}.side-nav .collapsible-body{border:0;background-color:#fff}.side-nav .collapsible-body li a{margin:0 1rem 0 2rem}.collapsible.popout{border:none;box-shadow:none}.collapsible.popout>li{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);margin:0 24px;transition:margin .35s cubic-bezier(0.25, 0.46, 0.45, 0.94)}.collapsible.popout>li.active{box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);margin:16px 0}.chip{display:inline-block;height:32px;font-size:13px;font-weight:500;color:rgba(0,0,0,0.6);line-height:32px;padding:0 12px;border-radius:16px;background-color:#E4E4E4}.chip img{float:left;margin:0 8px 0 -12px;height:32px;width:32px;border-radius:50%}.chip i.material-icons{cursor:pointer;float:right;font-size:16px;line-height:32px;padding-left:8px}.materialboxed{display:block;cursor:zoom-in;position:relative;-webkit-transition:opacity .4s;-moz-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s;transition:opacity .4s}.materialboxed:hover{will-change:left, top, width, height}.materialboxed:hover:not(.active){opacity:.8}.materialboxed.active{cursor:zoom-out}#materialbox-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#292929;z-index:999;will-change:opacity}.materialbox-caption{position:fixed;display:none;color:#fff;line-height:50px;bottom:0;width:100%;text-align:center;padding:0% 15%;height:50px;z-index:1000;-webkit-font-smoothing:antialiased}select:focus{outline:1px solid #c9f3ef}button:focus{outline:none;background-color:#2ab7a9}label{font-size:0.8rem;color:#9e9e9e}::-webkit-input-placeholder{color:#d1d1d1}:-moz-placeholder{color:#d1d1d1}::-moz-placeholder{color:#d1d1d1}:-ms-input-placeholder{color:#d1d1d1}input[type=text],input[type=password],input[type=email],input[type=url],input[type=time],input[type=date],input[type=datetime-local],input[type=tel],input[type=number],input[type=search],textarea.materialize-textarea{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:3rem;width:100%;font-size:1rem;margin:0 0 15px 0;padding:0;box-shadow:none;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;transition:all .3s}input[type=text]:disabled,input[type=text][readonly="readonly"],input[type=password]:disabled,input[type=password][readonly="readonly"],input[type=email]:disabled,input[type=email][readonly="readonly"],input[type=url]:disabled,input[type=url][readonly="readonly"],input[type=time]:disabled,input[type=time][readonly="readonly"],input[type=date]:disabled,input[type=date][readonly="readonly"],input[type=datetime-local]:disabled,input[type=datetime-local][readonly="readonly"],input[type=tel]:disabled,input[type=tel][readonly="readonly"],input[type=number]:disabled,input[type=number][readonly="readonly"],input[type=search]:disabled,input[type=search][readonly="readonly"],textarea.materialize-textarea:disabled,textarea.materialize-textarea[readonly="readonly"]{color:rgba(0,0,0,0.26);border-bottom:1px dotted rgba(0,0,0,0.26)}input[type=text]:disabled+label,input[type=text][readonly="readonly"]+label,input[type=password]:disabled+label,input[type=password][readonly="readonly"]+label,input[type=email]:disabled+label,input[type=email][readonly="readonly"]+label,input[type=url]:disabled+label,input[type=url][readonly="readonly"]+label,input[type=time]:disabled+label,input[type=time][readonly="readonly"]+label,input[type=date]:disabled+label,input[type=date][readonly="readonly"]+label,input[type=datetime-local]:disabled+label,input[type=datetime-local][readonly="readonly"]+label,input[type=tel]:disabled+label,input[type=tel][readonly="readonly"]+label,input[type=number]:disabled+label,input[type=number][readonly="readonly"]+label,input[type=search]:disabled+label,input[type=search][readonly="readonly"]+label,textarea.materialize-textarea:disabled+label,textarea.materialize-textarea[readonly="readonly"]+label{color:rgba(0,0,0,0.26)}input[type=text]:focus:not([readonly]),input[type=password]:focus:not([readonly]),input[type=email]:focus:not([readonly]),input[type=url]:focus:not([readonly]),input[type=time]:focus:not([readonly]),input[type=date]:focus:not([readonly]),input[type=datetime-local]:focus:not([readonly]),input[type=tel]:focus:not([readonly]),input[type=number]:focus:not([readonly]),input[type=search]:focus:not([readonly]),textarea.materialize-textarea:focus:not([readonly]){border-bottom:1px solid #26a69a;box-shadow:0 1px 0 0 #26a69a}input[type=text]:focus:not([readonly])+label,input[type=password]:focus:not([readonly])+label,input[type=email]:focus:not([readonly])+label,input[type=url]:focus:not([readonly])+label,input[type=time]:focus:not([readonly])+label,input[type=date]:focus:not([readonly])+label,input[type=datetime-local]:focus:not([readonly])+label,input[type=tel]:focus:not([readonly])+label,input[type=number]:focus:not([readonly])+label,input[type=search]:focus:not([readonly])+label,textarea.materialize-textarea:focus:not([readonly])+label{color:#26a69a}input[type=text].valid,input[type=text]:focus.valid,input[type=password].valid,input[type=password]:focus.valid,input[type=email].valid,input[type=email]:focus.valid,input[type=url].valid,input[type=url]:focus.valid,input[type=time].valid,input[type=time]:focus.valid,input[type=date].valid,input[type=date]:focus.valid,input[type=datetime-local].valid,input[type=datetime-local]:focus.valid,input[type=tel].valid,input[type=tel]:focus.valid,input[type=number].valid,input[type=number]:focus.valid,input[type=search].valid,input[type=search]:focus.valid,textarea.materialize-textarea.valid,textarea.materialize-textarea:focus.valid{border-bottom:1px solid #4CAF50;box-shadow:0 1px 0 0 #4CAF50}input[type=text].valid+label:after,input[type=text]:focus.valid+label:after,input[type=password].valid+label:after,input[type=password]:focus.valid+label:after,input[type=email].valid+label:after,input[type=email]:focus.valid+label:after,input[type=url].valid+label:after,input[type=url]:focus.valid+label:after,input[type=time].valid+label:after,input[type=time]:focus.valid+label:after,input[type=date].valid+label:after,input[type=date]:focus.valid+label:after,input[type=datetime-local].valid+label:after,input[type=datetime-local]:focus.valid+label:after,input[type=tel].valid+label:after,input[type=tel]:focus.valid+label:after,input[type=number].valid+label:after,input[type=number]:focus.valid+label:after,input[type=search].valid+label:after,input[type=search]:focus.valid+label:after,textarea.materialize-textarea.valid+label:after,textarea.materialize-textarea:focus.valid+label:after{content:attr(data-success);color:#4CAF50;opacity:1}input[type=text].invalid,input[type=text]:focus.invalid,input[type=password].invalid,input[type=password]:focus.invalid,input[type=email].invalid,input[type=email]:focus.invalid,input[type=url].invalid,input[type=url]:focus.invalid,input[type=time].invalid,input[type=time]:focus.invalid,input[type=date].invalid,input[type=date]:focus.invalid,input[type=datetime-local].invalid,input[type=datetime-local]:focus.invalid,input[type=tel].invalid,input[type=tel]:focus.invalid,input[type=number].invalid,input[type=number]:focus.invalid,input[type=search].invalid,input[type=search]:focus.invalid,textarea.materialize-textarea.invalid,textarea.materialize-textarea:focus.invalid{border-bottom:1px solid #F44336;box-shadow:0 1px 0 0 #F44336}input[type=text].invalid+label:after,input[type=text]:focus.invalid+label:after,input[type=password].invalid+label:after,input[type=password]:focus.invalid+label:after,input[type=email].invalid+label:after,input[type=email]:focus.invalid+label:after,input[type=url].invalid+label:after,input[type=url]:focus.invalid+label:after,input[type=time].invalid+label:after,input[type=time]:focus.invalid+label:after,input[type=date].invalid+label:after,input[type=date]:focus.invalid+label:after,input[type=datetime-local].invalid+label:after,input[type=datetime-local]:focus.invalid+label:after,input[type=tel].invalid+label:after,input[type=tel]:focus.invalid+label:after,input[type=number].invalid+label:after,input[type=number]:focus.invalid+label:after,input[type=search].invalid+label:after,input[type=search]:focus.invalid+label:after,textarea.materialize-textarea.invalid+label:after,textarea.materialize-textarea:focus.invalid+label:after{content:attr(data-error);color:#F44336;opacity:1}input[type=text]+label:after,input[type=password]+label:after,input[type=email]+label:after,input[type=url]+label:after,input[type=time]+label:after,input[type=date]+label:after,input[type=datetime-local]+label:after,input[type=tel]+label:after,input[type=number]+label:after,input[type=search]+label:after,textarea.materialize-textarea+label:after{display:block;content:"";position:absolute;top:65px;opacity:0;transition:.2s opacity ease-out,.2s color ease-out}.input-field{position:relative;margin-top:1rem}.input-field label{color:#9e9e9e;position:absolute;top:0.8rem;left:0.75rem;font-size:1rem;cursor:text;-webkit-transition:.2s ease-out;-moz-transition:.2s ease-out;-o-transition:.2s ease-out;-ms-transition:.2s ease-out;transition:.2s ease-out}.input-field label.active{font-size:0.8rem;-webkit-transform:translateY(-140%);-moz-transform:translateY(-140%);-ms-transform:translateY(-140%);-o-transform:translateY(-140%);transform:translateY(-140%)}.input-field .prefix{position:absolute;width:3rem;font-size:2rem;-webkit-transition:color .2s;-moz-transition:color .2s;-o-transition:color .2s;-ms-transition:color .2s;transition:color .2s}.input-field .prefix.active{color:#26a69a}.input-field .prefix ~ input,.input-field .prefix ~ textarea{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.input-field .prefix ~ textarea{padding-top:.8rem}.input-field .prefix ~ label{margin-left:3rem}@media only screen and (max-width : 992px){.input-field .prefix ~ input{width:86%;width:calc(100% - 3rem)}}@media only screen and (max-width : 600px){.input-field .prefix ~ input{width:80%;width:calc(100% - 3rem)}}.input-field input[type=search]{display:block;line-height:inherit;padding-left:4rem;width:calc(100% - 4rem)}.input-field input[type=search]:focus{background-color:#fff;border:0;box-shadow:none;color:#444}.input-field input[type=search]:focus+label i,.input-field input[type=search]:focus ~ .mdi-navigation-close,.input-field input[type=search]:focus ~ .material-icons{color:#444}.input-field input[type=search]+label{left:1rem}.input-field input[type=search] ~ .mdi-navigation-close,.input-field input[type=search] ~ .material-icons{position:absolute;top:0;right:1rem;color:transparent;cursor:pointer;font-size:2rem;transition:.3s color}textarea{width:100%;height:3rem;background-color:transparent}textarea.materialize-textarea{overflow-y:hidden;padding:1.6rem 0;resize:none;min-height:3rem}.hiddendiv{display:none;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;padding-top:1.2rem}[type="radio"]:not(:checked),[type="radio"]:checked{position:absolute;left:-9999px;visibility:hidden}[type="radio"]:not(:checked)+label,[type="radio"]:checked+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-transition:.28s ease;-moz-transition:.28s ease;-o-transition:.28s ease;-ms-transition:.28s ease;transition:.28s ease;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}[type="radio"]+label:before,[type="radio"]+label:after{content:'';position:absolute;left:0;top:0;margin:4px;width:16px;height:16px;z-index:0;-webkit-transition:.28s ease;-moz-transition:.28s ease;-o-transition:.28s ease;-ms-transition:.28s ease;transition:.28s ease}[type="radio"]:not(:checked)+label:before{border-radius:50%;border:2px solid #5a5a5a}[type="radio"]:not(:checked)+label:after{border-radius:50%;border:2px solid #5a5a5a;z-index:-1;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0)}[type="radio"]:checked+label:before{border-radius:50%;border:2px solid transparent}[type="radio"]:checked+label:after{border-radius:50%;border:2px solid #26a69a;background-color:#26a69a;z-index:0;-webkit-transform:scale(1.02);-moz-transform:scale(1.02);-ms-transform:scale(1.02);-o-transform:scale(1.02);transform:scale(1.02)}[type="radio"].with-gap:checked+label:before{border-radius:50%;border:2px solid #26a69a}[type="radio"].with-gap:checked+label:after{border-radius:50%;border:2px solid #26a69a;background-color:#26a69a;z-index:0;-webkit-transform:scale(.5);-moz-transform:scale(.5);-ms-transform:scale(.5);-o-transform:scale(.5);transform:scale(.5)}[type="radio"].with-gap:disabled:checked+label:before{border:2px solid rgba(0,0,0,0.26)}[type="radio"].with-gap:disabled:checked+label:after{border:none;background-color:rgba(0,0,0,0.26)}[type="radio"]:disabled:not(:checked)+label:before,[type="radio"]:disabled:checked+label:before{background-color:transparent;border-color:rgba(0,0,0,0.26)}[type="radio"]:disabled+label{color:rgba(0,0,0,0.26)}[type="radio"]:disabled:not(:checked)+label:before{border-color:rgba(0,0,0,0.26)}[type="radio"]:disabled:checked+label:after{background-color:rgba(0,0,0,0.26);border-color:#BDBDBD}form p{margin-bottom:10px;text-align:left}form p:last-child{margin-bottom:0}[type="checkbox"]:not(:checked),[type="checkbox"]:checked{position:absolute;left:-9999px;visibility:hidden}[type="checkbox"]{}[type="checkbox"]+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}[type="checkbox"]+label:before{content:'';position:absolute;top:0;left:0;width:18px;height:18px;z-index:0;border:2px solid #5a5a5a;border-radius:1px;margin-top:2px;-webkit-transition:0.2s;-moz-transition:0.2s;-o-transition:0.2s;-ms-transition:0.2s;transition:0.2s}[type="checkbox"]:not(:checked):disabled+label:before{border:none;background-color:rgba(0,0,0,0.26)}[type="checkbox"]:checked+label:before{top:-4px;left:-3px;width:12px;height:22px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #26a69a;border-bottom:2px solid #26a69a;-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:checked:disabled+label:before{border-right:2px solid rgba(0,0,0,0.26);border-bottom:2px solid rgba(0,0,0,0.26)}[type="checkbox"]:indeterminate+label:before{left:-10px;top:-11px;width:10px;height:22px;border-top:none;border-left:none;border-right:2px solid #26a69a;border-bottom:none;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:indeterminate:disabled+label:before{border-right:2px solid rgba(0,0,0,0.26);background-color:transparent}[type="checkbox"].filled-in+label:after{border-radius:2px}[type="checkbox"].filled-in+label:before,[type="checkbox"].filled-in+label:after{content:'';left:0;position:absolute;transition:border .25s,background-color .25s,width .2s .1s,height .2s .1s,top .2s .1s,left .2s .1s;z-index:1}[type="checkbox"].filled-in:not(:checked)+label:before{width:0;height:0;border:3px solid transparent;left:6px;top:10px;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:20% 40%;transform-origin:100% 100%}[type="checkbox"].filled-in:not(:checked)+label:after{height:20px;width:20px;background-color:transparent;border:2px solid #5a5a5a;top:0px;z-index:0}[type="checkbox"].filled-in:checked+label:before{top:0;left:1px;width:8px;height:13px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #fff;border-bottom:2px solid #fff;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"].filled-in:checked+label:after{top:0px;width:20px;height:20px;border:2px solid #26a69a;background-color:#26a69a;z-index:0}[type="checkbox"].filled-in:disabled:not(:checked)+label:before{background-color:transparent;border:2px solid transparent}[type="checkbox"].filled-in:disabled:not(:checked)+label:after{border-color:transparent;background-color:#BDBDBD}[type="checkbox"].filled-in:disabled:checked+label:before{background-color:transparent}[type="checkbox"].filled-in:disabled:checked+label:after{background-color:#BDBDBD;border-color:#BDBDBD}.switch,.switch *{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.switch label{cursor:pointer}.switch label input[type=checkbox]{opacity:0;width:0;height:0}.switch label input[type=checkbox]:checked+.lever{background-color:#84c7c1}.switch label input[type=checkbox]:checked+.lever:after{background-color:#26a69a}.switch label .lever{content:"";display:inline-block;position:relative;width:40px;height:15px;background-color:#818181;border-radius:15px;margin-right:10px;transition:background 0.3s ease;vertical-align:middle;margin:0 16px}.switch label .lever:after{content:"";position:absolute;display:inline-block;width:21px;height:21px;background-color:#F1F1F1;border-radius:21px;box-shadow:0 1px 3px 1px rgba(0,0,0,0.4);left:-5px;top:-3px;transition:left 0.3s ease,background .3s ease,box-shadow 0.1s ease}input[type=checkbox]:checked:not(:disabled) ~ .lever:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,0.4),0 0 0 15px rgba(38,166,154,0.1)}input[type=checkbox]:not(:disabled) ~ .lever:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,0.4),0 0 0 15px rgba(0,0,0,0.08)}.switch label input[type=checkbox]:checked+.lever:after{left:24px}.switch input[type=checkbox][disabled]+.lever{cursor:default}.switch label input[type=checkbox][disabled]+.lever:after,.switch label input[type=checkbox][disabled]:checked+.lever:after{background-color:#BDBDBD}.select-label{position:absolute}.select-wrapper{position:relative}.select-wrapper input.select-dropdown{position:relative;cursor:pointer;background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;outline:none;height:3rem;line-height:3rem;width:100%;font-size:1rem;margin:0 0 15px 0;padding:0;display:block}.select-wrapper span.caret{color:initial;position:absolute;right:0;top:16px;font-size:10px}.select-wrapper span.caret.disabled{color:rgba(0,0,0,0.26)}.select-wrapper+label{position:absolute;top:-14px;font-size:0.8rem}select{display:none}select.browser-default{display:block}select:disabled{color:rgba(0,0,0,0.3)}.select-wrapper input.select-dropdown:disabled{color:rgba(0,0,0,0.3);cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;border-bottom:1px solid rgba(0,0,0,0.3)}.select-wrapper i{color:rgba(0,0,0,0.3)}.select-dropdown li.disabled{color:rgba(0,0,0,0.3);background-color:transparent}.file-field{position:relative}.file-field .file-path-wrapper{overflow:hidden;padding-left:10px}.file-field input.file-path{width:100%}.file-field .btn,.file-field .btn-large{float:left;height:3rem;line-height:3rem}.file-field span{cursor:pointer}.file-field input[type=file]{position:absolute;top:0;right:0;left:0;bottom:0;width:100%;margin:0;padding:0;font-size:20px;cursor:pointer;opacity:0;filter:alpha(opacity=0)}.range-field{position:relative}input[type=range],input[type=range]+.thumb{cursor:pointer}input[type=range]{position:relative;background-color:transparent;border:none;outline:none;width:100%;margin:15px 0px;padding:0}input[type=range]+.thumb{position:absolute;border:none;height:0;width:0;border-radius:50%;background-color:#26a69a;top:10px;margin-left:-6px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-ms-transform-origin:50% 50%;-o-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}input[type=range]+.thumb .value{display:block;width:30px;text-align:center;color:#26a69a;font-size:0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}input[type=range]+.thumb.active{border-radius:50% 50% 50% 0}input[type=range]+.thumb.active .value{color:#fff;margin-left:-1px;margin-top:8px;font-size:10px}input[type=range]:focus{outline:none}input[type=range]{-webkit-appearance:none}input[type=range]::-webkit-slider-runnable-track{height:3px;background:#c2c0c2;border:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:14px;width:14px;border-radius:50%;background-color:#26a69a;transform-origin:50% 50%;margin:-5px 0 0 0;-webkit-transition:0.3s;-moz-transition:0.3s;-o-transition:0.3s;-ms-transition:0.3s;transition:0.3s}input[type=range]:focus::-webkit-slider-runnable-track{background:#ccc}input[type=range]{border:1px solid white}input[type=range]::-moz-range-track{height:3px;background:#ddd;border:none}input[type=range]::-moz-range-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;margin-top:-5px}input[type=range]:-moz-focusring{outline:1px solid white;outline-offset:-1px}input[type=range]:focus::-moz-range-track{background:#ccc}input[type=range]::-ms-track{height:3px;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}input[type=range]::-ms-fill-lower{background:#777}input[type=range]::-ms-fill-upper{background:#ddd}input[type=range]::-ms-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a}input[type=range]:focus::-ms-fill-lower{background:#888}input[type=range]:focus::-ms-fill-upper{background:#ccc}select{background-color:rgba(255,255,255,0.9);width:100%;padding:5px;border:1px solid #f2f2f2;border-radius:2px;height:3rem}.table-of-contents.fixed{position:fixed}.table-of-contents li{padding:2px 0}.table-of-contents a{display:inline-block;font-weight:300;color:#757575;padding-left:20px;height:1.5rem;line-height:1.5rem;letter-spacing:.4;display:inline-block}.table-of-contents a:hover{color:#a8a8a8;padding-left:19px;border-left:1px solid #ea4a4f}.table-of-contents a.active{font-weight:500;padding-left:18px;border-left:2px solid #ea4a4f}.side-nav{position:fixed;width:240px;left:-105%;top:0;margin:0;height:100%;height:calc(100% + 60px);height:-moz-calc(100%);padding-bottom:60px;background-color:#fff;z-index:999;overflow-y:auto;will-change:left}.side-nav.right-aligned{will-change:right;right:-105%;left:auto}.side-nav .collapsible{margin:0}.side-nav li{float:none;padding:0 15px}.side-nav li:hover,.side-nav li.active{background-color:#ddd}.side-nav a{color:#444;display:block;font-size:1rem;height:64px;line-height:64px;padding:0 15px}.drag-target{height:100%;width:10px;position:fixed;top:0;z-index:998}.side-nav.fixed a{display:block;padding:0 15px;color:#444}.side-nav.fixed{left:0;position:fixed}.side-nav.fixed.right-aligned{right:0;left:auto}@media only screen and (max-width : 992px){.side-nav.fixed{left:-105%}.side-nav.fixed.right-aligned{right:-105%;left:auto}}.side-nav .collapsible-body li.active,.side-nav.fixed .collapsible-body li.active{background-color:#ee6e73}.side-nav .collapsible-body li.active a,.side-nav.fixed .collapsible-body li.active a{color:#fff}#sidenav-overlay{position:fixed;top:0;left:0;right:0;height:120vh;background-color:rgba(0,0,0,0.5);z-index:997;will-change:opacity}.preloader-wrapper{display:inline-block;position:relative;width:48px;height:48px}.preloader-wrapper.small{width:36px;height:36px}.preloader-wrapper.big{width:64px;height:64px}.preloader-wrapper.active{-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg)}}@keyframes container-rotate{to{transform:rotate(360deg)}}.spinner-layer{position:absolute;width:100%;height:100%;opacity:0;border-color:#26a69a}.spinner-blue,.spinner-blue-only{border-color:#4285f4}.spinner-red,.spinner-red-only{border-color:#db4437}.spinner-yellow,.spinner-yellow-only{border-color:#f4b400}.spinner-green,.spinner-green-only{border-color:#0f9d58}.active .spinner-layer.spinner-blue{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-red{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-yellow{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-green{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer,.active .spinner-layer.spinner-blue-only,.active .spinner-layer.spinner-red-only,.active .spinner-layer.spinner-yellow-only,.active .spinner-layer.spinner-green-only{opacity:1;-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@-webkit-keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@-webkit-keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@-webkit-keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@-webkit-keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}@keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}.gap-patch{position:absolute;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.gap-patch .circle{width:1000%;left:-450%}.circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.circle-clipper .circle{width:200%;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent !important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0}.circle-clipper.left .circle{left:0;border-right-color:transparent !important;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.circle-clipper.right .circle{left:-100%;border-left-color:transparent !important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.active .circle-clipper.left .circle{-webkit-animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .circle-clipper.right .circle{-webkit-animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes left-spin{from{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg)}}@keyframes left-spin{from{transform:rotate(130deg)}50%{transform:rotate(-5deg)}to{transform:rotate(130deg)}}@-webkit-keyframes right-spin{from{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg)}}@keyframes right-spin{from{transform:rotate(-130deg)}50%{transform:rotate(5deg)}to{transform:rotate(-130deg)}}#spinnerContainer.cooldown{-webkit-animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.slider{position:relative;height:400px;width:100%}.slider.fullscreen{height:100%;width:100%;position:absolute;top:0;left:0;right:0;bottom:0}.slider.fullscreen ul.slides{height:100%}.slider.fullscreen ul.indicators{z-index:2;bottom:30px}.slider .slides{background-color:#9e9e9e;margin:0;height:400px}.slider .slides li{opacity:0;position:absolute;top:0;left:0;z-index:1;width:100%;height:inherit;overflow:hidden}.slider .slides li img{height:100%;width:100%;background-size:cover;background-position:center}.slider .slides li .caption{color:#fff;position:absolute;top:15%;left:15%;width:70%;opacity:0}.slider .slides li .caption p{color:#e0e0e0}.slider .slides li.active{z-index:2}.slider .indicators{position:absolute;text-align:center;left:0;right:0;bottom:0;margin:0}.slider .indicators .indicator-item{display:inline-block;position:relative;cursor:pointer;height:16px;width:16px;margin:0 12px;background-color:#e0e0e0;-webkit-transition:background-color .3s;-moz-transition:background-color .3s;-o-transition:background-color .3s;-ms-transition:background-color .3s;transition:background-color .3s;border-radius:50%}.slider .indicators .indicator-item.active{background-color:#4CAF50}.picker{font-size:16px;text-align:left;line-height:1.2;color:#000000;position:absolute;z-index:10000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker__input{cursor:default}.picker__input.picker__input--active{border-color:#0089ec}.picker__holder{width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}/*!
14 * Default mobile-first, responsive styling for pickadate.js
15 * Demo: http://amsul.github.io/pickadate.js
16 */.picker__holder,.picker__frame{bottom:0;left:0;right:0;top:100%}.picker__holder{position:fixed;-webkit-transition:background 0.15s ease-out,top 0s 0.15s;-moz-transition:background 0.15s ease-out,top 0s 0.15s;transition:background 0.15s ease-out,top 0s 0.15s;-webkit-backface-visibility:hidden}.picker__frame{position:absolute;margin:0 auto;min-width:256px;width:300px;max-height:350px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-moz-opacity:0;opacity:0;-webkit-transition:all 0.15s ease-out;-moz-transition:all 0.15s ease-out;transition:all 0.15s ease-out}@media (min-height: 28.875em){.picker__frame{overflow:visible;top:auto;bottom:-100%;max-height:80%}}@media (min-height: 40.125em){.picker__frame{margin-bottom:7.5%}}.picker__wrap{display:table;width:100%;height:100%}@media (min-height: 28.875em){.picker__wrap{display:block}}.picker__box{background:#ffffff;display:table-cell;vertical-align:middle}@media (min-height: 28.875em){.picker__box{display:block;border:1px solid #777777;border-top-color:#898989;border-bottom-width:0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;-webkit-box-shadow:0 12px 36px 16px rgba(0,0,0,0.24);-moz-box-shadow:0 12px 36px 16px rgba(0,0,0,0.24);box-shadow:0 12px 36px 16px rgba(0,0,0,0.24)}}.picker--opened .picker__holder{top:0;background:transparent;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)";zoom:1;background:rgba(0,0,0,0.32);-webkit-transition:background 0.15s ease-out;-moz-transition:background 0.15s ease-out;transition:background 0.15s ease-out}.picker--opened .picker__frame{top:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-moz-opacity:1;opacity:1}@media (min-height: 35.875em){.picker--opened .picker__frame{top:10%;bottom:20% auto}}.picker__input.picker__input--active{border-color:#E3F2FD}.picker__frame{margin:0 auto;max-width:325px}@media (min-height: 38.875em){.picker--opened .picker__frame{top:10%;bottom:auto}}.picker__box{padding:0 1em}.picker__header{text-align:center;position:relative;margin-top:.75em}.picker__month,.picker__year{display:inline-block;margin-left:.25em;margin-right:.25em}.picker__select--month,.picker__select--year{height:2em;padding:0;margin-left:.25em;margin-right:.25em}.picker__select--month.browser-default{display:inline;background-color:#FFFFFF;width:40%}.picker__select--year.browser-default{display:inline;background-color:#FFFFFF;width:25%}.picker__select--month:focus,.picker__select--year:focus{border-color:rgba(0,0,0,0.05)}.picker__nav--prev,.picker__nav--next{position:absolute;padding:.5em 1.25em;width:1em;height:1em;box-sizing:content-box;top:-0.25em}.picker__nav--prev{left:-1em;padding-right:1.25em}.picker__nav--next{right:-1em;padding-left:1.25em}.picker__nav--disabled,.picker__nav--disabled:hover,.picker__nav--disabled:before,.picker__nav--disabled:before:hover{cursor:default;background:none;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{text-align:center;border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:1rem;width:100%;margin-top:.75em;margin-bottom:.5em}.picker__table th,.picker__table td{text-align:center}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999999;font-weight:500}@media (min-height: 33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day--today{position:relative;color:#595959;letter-spacing:-.3;padding:.75rem 0;font-weight:400;border:1px solid transparent}.picker__day--disabled:before{border-top-color:#aaaaaa}.picker__day--infocus:hover{cursor:pointer;color:#000;font-weight:500}.picker__day--outfocus{display:none;padding:.75rem 0;color:#fff}.picker__day--outfocus:hover{cursor:pointer;color:#dddddd;font-weight:500}.picker__day--highlighted:hover,.picker--focused .picker__day--highlighted{cursor:pointer}.picker__day--selected,.picker__day--selected:hover,.picker--focused .picker__day--selected{border-radius:50%;-webkit-transform:scale(.75);-moz-transform:scale(.75);-ms-transform:scale(.75);-o-transform:scale(.75);transform:scale(.75);background:#0089ec;color:#ffffff}.picker__day--disabled,.picker__day--disabled:hover,.picker--focused .picker__day--disabled{background:#f5f5f5;border-color:#f5f5f5;color:#dddddd;cursor:default}.picker__day--highlighted.picker__day--disabled,.picker__day--highlighted.picker__day--disabled:hover{background:#bbbbbb}.picker__footer{text-align:center;display:flex;align-items:center;justify-content:space-between}.picker__button--today,.picker__button--clear,.picker__button--close{border:1px solid #ffffff;background:#ffffff;font-size:.8em;padding:.66em 0;font-weight:bold;width:33%;display:inline-block;vertical-align:bottom}.picker__button--today:hover,.picker__button--clear:hover,.picker__button--close:hover{cursor:pointer;color:#000000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--today:focus,.picker__button--clear:focus,.picker__button--close:focus{background:#b1dcfb;border-color:rgba(0,0,0,0.05);outline:none}.picker__button--today:before,.picker__button--clear:before,.picker__button--close:before{position:relative;display:inline-block;height:0}.picker__button--today:before,.picker__button--clear:before{content:" ";margin-right:.45em}.picker__button--today:before{top:-0.05em;width:0;border-top:0.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{top:-0.25em;width:.66em;border-top:3px solid #ee2200}.picker__button--close:before{content:"\D7";top:-0.1em;vertical-align:top;font-size:1.1em;margin-right:.35em;color:#777777}.picker__button--today[disabled],.picker__button--today[disabled]:hover{background:#f5f5f5;border-color:#f5f5f5;color:#dddddd;cursor:default}.picker__button--today[disabled]:before{border-top-color:#aaaaaa}.picker__box{border-radius:2px;overflow:hidden}.picker__date-display{text-align:center;background-color:#26a69a;color:#fff;padding-bottom:15px;font-weight:300}.picker__nav--prev:hover,.picker__nav--next:hover{cursor:pointer;color:#000000;background:#a1ded8}.picker__weekday-display{background-color:#1f897f;padding:10px;font-weight:200;letter-spacing:.5;font-size:1rem;margin-bottom:15px}.picker__month-display{text-transform:uppercase;font-size:2rem}.picker__day-display{font-size:4.5rem;font-weight:400}.picker__year-display{font-size:1.8rem;color:rgba(255,255,255,0.4)}.picker__box{padding:0}.picker__calendar-container{padding:0 1rem}.picker__calendar-container thead{border:none}.picker__table{margin-top:0;margin-bottom:.5em}.picker__day--infocus{color:#595959;letter-spacing:-.3;padding:.75rem 0;font-weight:400;border:1px solid transparent}.picker__day.picker__day--today{color:#26a69a}.picker__day.picker__day--today.picker__day--selected{color:#fff}.picker__weekday{font-size:.9rem}.picker__day--selected,.picker__day--selected:hover,.picker--focused .picker__day--selected{border-radius:50%;-webkit-transform:scale(.9);-moz-transform:scale(.9);-ms-transform:scale(.9);-o-transform:scale(.9);transform:scale(.9);background-color:#26a69a;color:#ffffff}.picker__day--selected.picker__day--outfocus,.picker__day--selected:hover.picker__day--outfocus,.picker--focused .picker__day--selected.picker__day--outfocus{background-color:#a1ded8}.picker__footer{text-align:right;padding:5px 10px}.picker__close,.picker__today{font-size:1.1rem;padding:0 1rem;color:#26a69a}.picker__nav--prev:before,.picker__nav--next:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:0.75em solid #676767;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:0.75em solid #676767}button.picker__today:focus,button.picker__clear:focus,button.picker__close:focus{background-color:#a1ded8}.picker__list{list-style:none;padding:0.75em 0 4.2em;margin:0}.picker__list-item{border-bottom:1px solid #dddddd;border-top:1px solid #dddddd;margin-bottom:-1px;position:relative;background:#ffffff;padding:.75em 1.25em}@media (min-height: 46.75em){.picker__list-item{padding:.5em 1em}}.picker__list-item:hover{cursor:pointer;color:#000000;background:#b1dcfb;border-color:#0089ec;z-index:10}.picker__list-item--highlighted{border-color:#0089ec;z-index:10}.picker__list-item--highlighted:hover,.picker--focused .picker__list-item--highlighted{cursor:pointer;color:#000000;background:#b1dcfb}.picker__list-item--selected,.picker__list-item--selected:hover,.picker--focused .picker__list-item--selected{background:#0089ec;color:#ffffff;z-index:10}.picker__list-item--disabled,.picker__list-item--disabled:hover,.picker--focused .picker__list-item--disabled{background:#f5f5f5;border-color:#f5f5f5;color:#dddddd;cursor:default;border-color:#dddddd;z-index:auto}.picker--time .picker__button--clear{display:block;width:80%;margin:1em auto 0;padding:1em 1.25em;background:none;border:0;font-weight:500;font-size:.67em;text-align:center;text-transform:uppercase;color:#666}.picker--time .picker__button--clear:hover,.picker--time .picker__button--clear:focus{color:#000000;background:#b1dcfb;background:#ee2200;border-color:#ee2200;cursor:pointer;color:#ffffff;outline:none}.picker--time .picker__button--clear:before{top:-0.25em;color:#666;font-size:1.25em;font-weight:bold}.picker--time .picker__button--clear:hover:before,.picker--time .picker__button--clear:focus:before{color:#ffffff}.picker--time .picker__frame{min-width:256px;max-width:320px}.picker--time .picker__box{font-size:1em;background:#f2f2f2;padding:0}@media (min-height: 40.125em){.picker--time .picker__box{margin-bottom:5em}} \ No newline at end of file
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/print.css b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/print.css
deleted file mode 100755
index 2a799c44..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/print.css
+++ /dev/null
@@ -1,62 +0,0 @@
1/* ### Layout ### */
2
3body {
4 font-family: Serif;
5 background-color: #fff;
6}
7
8@page {
9 margin: 1cm;
10}
11
12img {
13 max-width: 100% !important;
14}
15
16/* ### Content ### */
17
18/* Hide useless blocks */
19body > header,
20#article_toolbar,
21#links,
22#sort,
23body > footer,
24.top_link,
25div.tools,
26header div,
27.messages,
28.entry + .results {
29 display: none !important;
30}
31
32article {
33 border: none !important;
34}
35
36/* Add URL after links */
37.vieworiginal a:after {
38 content: " (" attr(href) ")";
39}
40
41/* Add explanation after abbr */
42abbr[title]:after {
43 content: " (" attr(title) ")";
44}
45
46/* Change border on current pager item */
47.pagination span.current {
48 border-style: dashed;
49}
50
51#main {
52 width: 100%;
53 padding: 0;
54 margin: 0;
55 margin-left: 0;
56 padding-right: 0;
57 padding-bottom: 0;
58}
59
60#article {
61 width: 100%;
62}
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.eot b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.eot
deleted file mode 100644
index 7318414e..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.eot
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.svg b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.svg
deleted file mode 100644
index 365c0c42..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.svg
+++ /dev/null
@@ -1,17 +0,0 @@
1<?xml version="1.0" standalone="no"?>
2<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3<svg xmlns="http://www.w3.org/2000/svg">
4<metadata>Generated by IcoMoon</metadata>
5<defs>
6<font id="icomoon" horiz-adv-x="1024">
7<font-face units-per-em="1024" ascent="960" descent="-64" />
8<missing-glyph horiz-adv-x="1024" />
9<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10<glyph unicode="&#xe800;" glyph-name="google-plus2" d="M0.806 90.336c-0.244 2.532-0.452 5.070-0.584 7.63 0.13-2.56 0.34-5.098 0.584-7.63zM235.908 394.852c92.010-2.738 153.734 92.698 137.862 213.198-15.894 120.48-103.396 217.168-195.408 219.922-92.026 2.73-153.74-89.482-137.852-210 15.882-120.468 103.352-220.374 195.398-223.12zM1024 704v85.31c0 93.88-76.782 170.69-170.658 170.69h-682.656c-92.276 0-168.012-74.232-170.564-165.926 58.362 51.386 139.324 94.316 222.874 94.316 89.304 0 357.244 0 357.244 0l-79.948-67.618h-113.268c75.13-28.804 115.156-116.124 115.156-205.722 0-75.248-41.81-139.954-100.888-185.968-57.644-44.902-68.572-63.708-68.572-101.878 0-32.578 61.746-88 94.032-110.788 94.382-66.538 124.916-128.312 124.916-231.456 0-16.428-2.042-32.83-6.066-48.96h307.742c93.874 0 170.656 76.75 170.656 170.69v533.308h-192v-191.998h-64v192h-191.998v64h191.998v192h64v-192h192zM185.886 194.064c21.614 0 41.422 0.59 61.936 0.59-27.146 26.334-48.626 58.6-48.626 98.38 0 23.608 7.564 46.336 18.134 66.52-10.782-0.77-21.79-0.994-33.126-0.994-74.356 0-137.506 24.076-184.204 63.854v-67.242l0.006-201.73c53.44 25.374 116.888 40.622 185.88 40.622zM3.42 72.742c-1.112 5.458-1.966 11.006-2.542 16.634 0.574-5.628 1.43-11.176 2.542-16.634zM455.45 7.154c-15.058 58.806-68.454 87.964-142.888 139.568-27.072 8.732-56.894 13.874-88.894 14.208-89.618 0.964-173.108-34.942-220.216-88.372 15.92-77.706 85.034-136.558 167.234-136.558h286.444c1.816 11.128 2.696 22.632 2.696 34.432 0 12.534-1.534 24.792-4.376 36.722z" />
11<glyph unicode="&#xe801;" glyph-name="facebook2" d="M853.35 960h-682.702c-94.25 0-170.648-76.42-170.648-170.686v-682.63c0-94.266 76.398-170.684 170.648-170.684h341.352v448h-128v128h128v96c0 88.366 71.634 160 160 160h160v-128h-160c-17.674 0-32-14.328-32-32v-96h176l-32-128h-144v-448h213.35c94.25 0 170.65 76.418 170.65 170.684v682.63c0 94.266-76.4 170.686-170.65 170.686z" />
12<glyph unicode="&#xe802;" glyph-name="twitter" d="M1024 765.582c-37.676-16.708-78.164-28.002-120.66-33.080 43.372 26 76.686 67.17 92.372 116.23-40.596-24.078-85.556-41.56-133.41-50.98-38.32 40.83-92.922 66.34-153.346 66.34-116.022 0-210.088-94.058-210.088-210.078 0-16.466 1.858-32.5 5.44-47.878-174.6 8.764-329.402 92.4-433.018 219.506-18.084-31.028-28.446-67.116-28.446-105.618 0-72.888 37.088-137.192 93.46-174.866-34.438 1.092-66.832 10.542-95.154 26.278-0.020-0.876-0.020-1.756-0.020-2.642 0-101.788 72.418-186.696 168.522-206-17.626-4.8-36.188-7.372-55.348-7.372-13.538 0-26.698 1.32-39.528 3.772 26.736-83.46 104.32-144.206 196.252-145.896-71.9-56.35-162.486-89.934-260.916-89.934-16.958 0-33.68 0.994-50.116 2.94 92.972-59.61 203.402-94.394 322.042-94.394 386.422 0 597.736 320.124 597.736 597.744 0 9.108-0.206 18.168-0.61 27.18 41.056 29.62 76.672 66.62 104.836 108.748z" />
13<glyph unicode="&#xe803;" glyph-name="apple" d="M791.498 415.908c-1.294 129.682 105.758 191.876 110.542 194.966-60.152 88.020-153.85 100.078-187.242 101.472-79.742 8.074-155.596-46.948-196.066-46.948-40.368 0-102.818 45.754-168.952 44.552-86.916-1.292-167.058-50.538-211.812-128.38-90.304-156.698-23.126-388.84 64.89-515.926 43.008-62.204 94.292-132.076 161.626-129.58 64.842 2.588 89.362 41.958 167.756 41.958s100.428-41.958 169.050-40.67c69.774 1.296 113.982 63.398 156.692 125.796 49.39 72.168 69.726 142.038 70.924 145.626-1.548 0.706-136.060 52.236-137.408 207.134zM662.562 796.478c35.738 43.358 59.86 103.512 53.28 163.522-51.478-2.096-113.878-34.29-150.81-77.55-33.142-38.376-62.148-99.626-54.374-158.436 57.466-4.484 116.128 29.204 151.904 72.464z" />
14<glyph unicode="&#xe804;" glyph-name="android" d="M896 576c-35.2 0-64-28.8-64-64v-256c0-35.2 28.8-64 64-64s64 28.8 64 64v256c0 35.2-28.8 64-64 64zM128 576c-35.2 0-64-28.8-64-64v-256c0-35.2 28.8-64 64-64s64 28.8 64 64v256c0 35.2-28.802 64-64 64zM224 224c0-53.020 42.98-96 96-96v0-128c0-35.2 28.8-64 64-64s64 28.8 64 64v128h128v-128c0-35.2 28.8-64 64-64s64 28.8 64 64v128c53.020 0 96 42.98 96 96v352h-576v-352zM798.216 639.998c-9.716 87.884-59.004 163.792-129.62 209.646l32.024 64.046c7.904 15.806 1.496 35.028-14.31 42.932s-35.030 1.496-42.932-14.312l-32.142-64.286-8.35 3.316c-28.568 9.502-59.122 14.66-90.886 14.66-31.762 0-62.316-5.158-90.888-14.656l-8.348-3.316-32.142 64.282c-7.904 15.808-27.128 22.212-42.932 14.312-15.808-7.904-22.214-27.126-14.312-42.932l32.022-64.046c-70.616-45.852-119.904-121.762-129.622-209.644v-32h574.222v31.998h-1.784zM416 704c-17.674 0-32 14.328-32 32 0 17.648 14.288 31.958 31.93 31.996 0.032 0 0.062-0.002 0.094-0.002 0.018 0 0.036 0.002 0.052 0.002 17.638-0.042 31.924-14.35 31.924-31.996 0-17.672-14.326-32-32-32zM608 704c-17.674 0-32 14.328-32 32 0 17.646 14.286 31.954 31.924 31.996 0.016 0 0.034-0.002 0.050-0.002 0.032 0 0.064 0.002 0.096 0.002 17.64-0.038 31.93-14.348 31.93-31.996 0-17.672-14.326-32-32-32z" />
15<glyph unicode="&#xe805;" glyph-name="chrome" d="M258.278 513.458l-146.532 253.802c93.818 117.464 238.234 192.74 400.254 192.74 187.432 0 351.31-100.736 440.532-251h-417.77c-7.504 0.65-15.092 1-22.762 1-121.874 0-224.578-83.644-253.722-196.542zM695.306 635h293.46c22.74-57.93 35.234-121.004 35.234-187 0-280.826-226.1-508.804-506.186-511.926l209.394 362.678c29.48 42.378 46.792 93.826 46.792 149.248 0 73.17-30.164 139.42-78.694 187zM326 448c0 102.56 83.44 186 186 186s186-83.44 186-186c0-102.56-83.44-186-186-186s-186 83.44-186 186zM582.182 195.558l-146.578-253.878c-246.532 36.884-435.604 249.516-435.604 506.32 0 91.218 23.884 176.846 65.696 251.024l209.030-362.054c41.868-89.112 132.476-150.97 237.274-150.97 24.3 0 47.836 3.34 70.182 9.558z" />
16<glyph unicode="&#xe806;" glyph-name="firefox" d="M1022.526 625.86l-11.86-76.080c0 0-16.954 140.856-37.732 193.514-31.846 80.688-46.014 80.040-46.108 79.922 21.33-54.204 17.462-83.324 17.462-83.324s-37.792 102.998-137.712 135.768c-110.686 36.282-170.57 26.364-177.488 24.486-1.050 0.008-2.064 0.010-3.030 0.010 0.818-0.062 1.612-0.146 2.426-0.212-0.034-0.020-0.090-0.042-0.082-0.052 0.45-0.548 122.306-21.302 143.916-50.996 0 0-51.76 0-103.272-14.842-2.328-0.666 189.524-23.964 228.746-215.674 0 0-21.030 43.876-47.040 51.328 17.106-52.036 12.714-150.776-3.576-199.85-2.096-6.312-4.24 27.282-36.328 41.75 10.28-73.646-0.616-190.456-51.708-222.632-3.982-2.504 32.030 115.31 7.242 69.762-142.708-218.802-311.404-100.972-387.248-49.11 38.866-8.462 112.654 1.318 145.314 25.612 0.042 0.030 0.078 0.056 0.118 0.086 35.468 24.252 56.472 41.964 75.334 37.772 18.874-4.214 31.438 14.726 16.78 31.53-14.676 16.838-50.314 39.978-98.524 27.366-34-8.904-76.134-46.522-140.448-8.432-49.364 29.25-54.012 53.546-54.45 70.376 1.218 5.966 2.754 11.536 4.576 16.624 5.682 15.87 22.912 20.658 32.494 24.438 16.256-2.792 30.262-7.862 44.968-15.406 0.19 4.894 0.252 11.39-0.018 18.76 1.41 2.802 0.538 11.252-1.722 21.58-1.302 10.308-3.42 20.974-6.752 30.692 0.012 0.002 0.020 0.010 0.030 0.014 0.056 0.018 0.108 0.040 0.156 0.070 0.078 0.044 0.146 0.112 0.208 0.19 0.012 0.020 0.030 0.034 0.044 0.052 0.082 0.124 0.154 0.272 0.198 0.466 1.020 4.618 12.022 13.524 25.718 23.1 12.272 8.58 26.702 17.696 38.068 24.752 10.060 6.248 17.72 10.882 19.346 12.098 0.618 0.466 1.358 1.012 2.164 1.636 0.15 0.116 0.3 0.232 0.454 0.354 0.094 0.074 0.19 0.148 0.286 0.226 5.41 4.308 13.484 12.448 15.178 29.578 0.004 0.042 0.010 0.080 0.012 0.122 0.050 0.504 0.092 1.014 0.13 1.534 0.028 0.362 0.050 0.726 0.072 1.096 0.014 0.284 0.032 0.566 0.044 0.856 0.030 0.674 0.050 1.364 0.060 2.064 0 0.040 0.002 0.076 0.004 0.116 0.022 1.658-0.006 3.386-0.104 5.202-0.054 1.014-0.126 1.93-0.298 2.762-0.008 0.044-0.018 0.092-0.028 0.136-0.018 0.082-0.036 0.164-0.058 0.244-0.036 0.146-0.076 0.292-0.122 0.43-0.006 0.018-0.010 0.032-0.016 0.046-0.052 0.16-0.112 0.314-0.174 0.464-0.004 0.006-0.004 0.010-0.006 0.016-1.754 4.108-8.32 5.658-35.442 6.118-0.026 0.002-0.050 0.002-0.076 0.002v0c-11.066 0.188-25.538 0.194-44.502 0.118-33.25-0.134-51.628 32.504-57.494 45.132 8.040 44.46 31.276 76.142 69.45 97.626 0.722 0.406 0.58 0.742-0.274 0.978 7.464 4.514-90.246 0.124-135.186-57.036-39.888 9.914-74.654 9.246-104.616 2.214-5.754 0.162-12.924 0.88-21.434 2.652-19.924 18.056-48.448 51.402-49.976 91.208 0 0-0.092-0.072-0.252-0.204-0.020 0.382-0.056 0.76-0.072 1.142 0 0-60.716-46.664-51.628-173.882-0.022-2.036-0.064-3.986-0.12-5.874-16.432-22.288-24.586-41.020-25.192-45.156-14.56-29.644-29.334-74.254-41.356-141.98 0 0 8.408 26.666 25.284 56.866-12.412-38.022-22.164-97.156-16.436-185.856 0 0 1.514 19.666 6.874 47.994 4.186-55.010 22.518-122.924 68.858-202.788 88.948-153.32 225.67-230.74 376.792-242.616 26.836-2.212 54.050-2.264 81.424-0.186 2.516 0.178 5.032 0.364 7.55 0.574 30.964 2.174 62.134 6.852 93.238 14.366 425.172 102.798 378.942 616.198 378.942 616.198z" />
17</font></defs></svg> \ No newline at end of file
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.ttf b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.ttf
deleted file mode 100644
index fff65bca..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.ttf
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.woff b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.woff
deleted file mode 100644
index f3fe2a46..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/icomoon/icomoon.woff
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/LICENSE.txt b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/LICENSE.txt
deleted file mode 100644
index 542f6537..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/LICENSE.txt
+++ /dev/null
@@ -1,428 +0,0 @@
1https://github.com/google/material-design-icons/blob/master/LICENSE
2https://github.com/FezVrasta/bootstrap-material-design/blob/master/fonts/LICENSE.txt
3
4Attribution-ShareAlike 4.0 International
5
6=======================================================================
7
8Creative Commons Corporation ("Creative Commons") is not a law firm and
9does not provide legal services or legal advice. Distribution of
10Creative Commons public licenses does not create a lawyer-client or
11other relationship. Creative Commons makes its licenses and related
12information available on an "as-is" basis. Creative Commons gives no
13warranties regarding its licenses, any material licensed under their
14terms and conditions, or any related information. Creative Commons
15disclaims all liability for damages resulting from their use to the
16fullest extent possible.
17
18Using Creative Commons Public Licenses
19
20Creative Commons public licenses provide a standard set of terms and
21conditions that creators and other rights holders may use to share
22original works of authorship and other material subject to copyright
23and certain other rights specified in the public license below. The
24following considerations are for informational purposes only, are not
25exhaustive, and do not form part of our licenses.
26
27 Considerations for licensors: Our public licenses are
28 intended for use by those authorized to give the public
29 permission to use material in ways otherwise restricted by
30 copyright and certain other rights. Our licenses are
31 irrevocable. Licensors should read and understand the terms
32 and conditions of the license they choose before applying it.
33 Licensors should also secure all rights necessary before
34 applying our licenses so that the public can reuse the
35 material as expected. Licensors should clearly mark any
36 material not subject to the license. This includes other CC-
37 licensed material, or material used under an exception or
38 limitation to copyright. More considerations for licensors:
39 wiki.creativecommons.org/Considerations_for_licensors
40
41 Considerations for the public: By using one of our public
42 licenses, a licensor grants the public permission to use the
43 licensed material under specified terms and conditions. If
44 the licensor's permission is not necessary for any reason--for
45 example, because of any applicable exception or limitation to
46 copyright--then that use is not regulated by the license. Our
47 licenses grant only permissions under copyright and certain
48 other rights that a licensor has authority to grant. Use of
49 the licensed material may still be restricted for other
50 reasons, including because others have copyright or other
51 rights in the material. A licensor may make special requests,
52 such as asking that all changes be marked or described.
53 Although not required by our licenses, you are encouraged to
54 respect those requests where reasonable. More_considerations
55 for the public:
56 wiki.creativecommons.org/Considerations_for_licensees
57
58=======================================================================
59
60Creative Commons Attribution-ShareAlike 4.0 International Public
61License
62
63By exercising the Licensed Rights (defined below), You accept and agree
64to be bound by the terms and conditions of this Creative Commons
65Attribution-ShareAlike 4.0 International Public License ("Public
66License"). To the extent this Public License may be interpreted as a
67contract, You are granted the Licensed Rights in consideration of Your
68acceptance of these terms and conditions, and the Licensor grants You
69such rights in consideration of benefits the Licensor receives from
70making the Licensed Material available under these terms and
71conditions.
72
73
74Section 1 -- Definitions.
75
76 a. Adapted Material means material subject to Copyright and Similar
77 Rights that is derived from or based upon the Licensed Material
78 and in which the Licensed Material is translated, altered,
79 arranged, transformed, or otherwise modified in a manner requiring
80 permission under the Copyright and Similar Rights held by the
81 Licensor. For purposes of this Public License, where the Licensed
82 Material is a musical work, performance, or sound recording,
83 Adapted Material is always produced where the Licensed Material is
84 synched in timed relation with a moving image.
85
86 b. Adapter's License means the license You apply to Your Copyright
87 and Similar Rights in Your contributions to Adapted Material in
88 accordance with the terms and conditions of this Public License.
89
90 c. BY-SA Compatible License means a license listed at
91 creativecommons.org/compatiblelicenses, approved by Creative
92 Commons as essentially the equivalent of this Public License.
93
94 d. Copyright and Similar Rights means copyright and/or similar rights
95 closely related to copyright including, without limitation,
96 performance, broadcast, sound recording, and Sui Generis Database
97 Rights, without regard to how the rights are labeled or
98 categorized. For purposes of this Public License, the rights
99 specified in Section 2(b)(1)-(2) are not Copyright and Similar
100 Rights.
101
102 e. Effective Technological Measures means those measures that, in the
103 absence of proper authority, may not be circumvented under laws
104 fulfilling obligations under Article 11 of the WIPO Copyright
105 Treaty adopted on December 20, 1996, and/or similar international
106 agreements.
107
108 f. Exceptions and Limitations means fair use, fair dealing, and/or
109 any other exception or limitation to Copyright and Similar Rights
110 that applies to Your use of the Licensed Material.
111
112 g. License Elements means the license attributes listed in the name
113 of a Creative Commons Public License. The License Elements of this
114 Public License are Attribution and ShareAlike.
115
116 h. Licensed Material means the artistic or literary work, database,
117 or other material to which the Licensor applied this Public
118 License.
119
120 i. Licensed Rights means the rights granted to You subject to the
121 terms and conditions of this Public License, which are limited to
122 all Copyright and Similar Rights that apply to Your use of the
123 Licensed Material and that the Licensor has authority to license.
124
125 j. Licensor means the individual(s) or entity(ies) granting rights
126 under this Public License.
127
128 k. Share means to provide material to the public by any means or
129 process that requires permission under the Licensed Rights, such
130 as reproduction, public display, public performance, distribution,
131 dissemination, communication, or importation, and to make material
132 available to the public including in ways that members of the
133 public may access the material from a place and at a time
134 individually chosen by them.
135
136 l. Sui Generis Database Rights means rights other than copyright
137 resulting from Directive 96/9/EC of the European Parliament and of
138 the Council of 11 March 1996 on the legal protection of databases,
139 as amended and/or succeeded, as well as other essentially
140 equivalent rights anywhere in the world.
141
142 m. You means the individual or entity exercising the Licensed Rights
143 under this Public License. Your has a corresponding meaning.
144
145
146Section 2 -- Scope.
147
148 a. License grant.
149
150 1. Subject to the terms and conditions of this Public License,
151 the Licensor hereby grants You a worldwide, royalty-free,
152 non-sublicensable, non-exclusive, irrevocable license to
153 exercise the Licensed Rights in the Licensed Material to:
154
155 a. reproduce and Share the Licensed Material, in whole or
156 in part; and
157
158 b. produce, reproduce, and Share Adapted Material.
159
160 2. Exceptions and Limitations. For the avoidance of doubt, where
161 Exceptions and Limitations apply to Your use, this Public
162 License does not apply, and You do not need to comply with
163 its terms and conditions.
164
165 3. Term. The term of this Public License is specified in Section
166 6(a).
167
168 4. Media and formats; technical modifications allowed. The
169 Licensor authorizes You to exercise the Licensed Rights in
170 all media and formats whether now known or hereafter created,
171 and to make technical modifications necessary to do so. The
172 Licensor waives and/or agrees not to assert any right or
173 authority to forbid You from making technical modifications
174 necessary to exercise the Licensed Rights, including
175 technical modifications necessary to circumvent Effective
176 Technological Measures. For purposes of this Public License,
177 simply making modifications authorized by this Section 2(a)
178 (4) never produces Adapted Material.
179
180 5. Downstream recipients.
181
182 a. Offer from the Licensor -- Licensed Material. Every
183 recipient of the Licensed Material automatically
184 receives an offer from the Licensor to exercise the
185 Licensed Rights under the terms and conditions of this
186 Public License.
187
188 b. Additional offer from the Licensor -- Adapted Material.
189 Every recipient of Adapted Material from You
190 automatically receives an offer from the Licensor to
191 exercise the Licensed Rights in the Adapted Material
192 under the conditions of the Adapter's License You apply.
193
194 c. No downstream restrictions. You may not offer or impose
195 any additional or different terms or conditions on, or
196 apply any Effective Technological Measures to, the
197 Licensed Material if doing so restricts exercise of the
198 Licensed Rights by any recipient of the Licensed
199 Material.
200
201 6. No endorsement. Nothing in this Public License constitutes or
202 may be construed as permission to assert or imply that You
203 are, or that Your use of the Licensed Material is, connected
204 with, or sponsored, endorsed, or granted official status by,
205 the Licensor or others designated to receive attribution as
206 provided in Section 3(a)(1)(A)(i).
207
208 b. Other rights.
209
210 1. Moral rights, such as the right of integrity, are not
211 licensed under this Public License, nor are publicity,
212 privacy, and/or other similar personality rights; however, to
213 the extent possible, the Licensor waives and/or agrees not to
214 assert any such rights held by the Licensor to the limited
215 extent necessary to allow You to exercise the Licensed
216 Rights, but not otherwise.
217
218 2. Patent and trademark rights are not licensed under this
219 Public License.
220
221 3. To the extent possible, the Licensor waives any right to
222 collect royalties from You for the exercise of the Licensed
223 Rights, whether directly or through a collecting society
224 under any voluntary or waivable statutory or compulsory
225 licensing scheme. In all other cases the Licensor expressly
226 reserves any right to collect such royalties.
227
228
229Section 3 -- License Conditions.
230
231Your exercise of the Licensed Rights is expressly made subject to the
232following conditions.
233
234 a. Attribution.
235
236 1. If You Share the Licensed Material (including in modified
237 form), You must:
238
239 a. retain the following if it is supplied by the Licensor
240 with the Licensed Material:
241
242 i. identification of the creator(s) of the Licensed
243 Material and any others designated to receive
244 attribution, in any reasonable manner requested by
245 the Licensor (including by pseudonym if
246 designated);
247
248 ii. a copyright notice;
249
250 iii. a notice that refers to this Public License;
251
252 iv. a notice that refers to the disclaimer of
253 warranties;
254
255 v. a URI or hyperlink to the Licensed Material to the
256 extent reasonably practicable;
257
258 b. indicate if You modified the Licensed Material and
259 retain an indication of any previous modifications; and
260
261 c. indicate the Licensed Material is licensed under this
262 Public License, and include the text of, or the URI or
263 hyperlink to, this Public License.
264
265 2. You may satisfy the conditions in Section 3(a)(1) in any
266 reasonable manner based on the medium, means, and context in
267 which You Share the Licensed Material. For example, it may be
268 reasonable to satisfy the conditions by providing a URI or
269 hyperlink to a resource that includes the required
270 information.
271
272 3. If requested by the Licensor, You must remove any of the
273 information required by Section 3(a)(1)(A) to the extent
274 reasonably practicable.
275
276 b. ShareAlike.
277
278 In addition to the conditions in Section 3(a), if You Share
279 Adapted Material You produce, the following conditions also apply.
280
281 1. The Adapter's License You apply must be a Creative Commons
282 license with the same License Elements, this version or
283 later, or a BY-SA Compatible License.
284
285 2. You must include the text of, or the URI or hyperlink to, the
286 Adapter's License You apply. You may satisfy this condition
287 in any reasonable manner based on the medium, means, and
288 context in which You Share Adapted Material.
289
290 3. You may not offer or impose any additional or different terms
291 or conditions on, or apply any Effective Technological
292 Measures to, Adapted Material that restrict exercise of the
293 rights granted under the Adapter's License You apply.
294
295
296Section 4 -- Sui Generis Database Rights.
297
298Where the Licensed Rights include Sui Generis Database Rights that
299apply to Your use of the Licensed Material:
300
301 a. for the avoidance of doubt, Section 2(a)(1) grants You the right
302 to extract, reuse, reproduce, and Share all or a substantial
303 portion of the contents of the database;
304
305 b. if You include all or a substantial portion of the database
306 contents in a database in which You have Sui Generis Database
307 Rights, then the database in which You have Sui Generis Database
308 Rights (but not its individual contents) is Adapted Material,
309
310 including for purposes of Section 3(b); and
311 c. You must comply with the conditions in Section 3(a) if You Share
312 all or a substantial portion of the contents of the database.
313
314For the avoidance of doubt, this Section 4 supplements and does not
315replace Your obligations under this Public License where the Licensed
316Rights include other Copyright and Similar Rights.
317
318
319Section 5 -- Disclaimer of Warranties and Limitation of Liability.
320
321 a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
322 EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
323 AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
324 ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
325 IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
326 WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
327 PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
328 ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
329 KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
330 ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
331
332 b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
333 TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
334 NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
335 INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
336 COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
337 USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
338 ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
339 DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
340 IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
341
342 c. The disclaimer of warranties and limitation of liability provided
343 above shall be interpreted in a manner that, to the extent
344 possible, most closely approximates an absolute disclaimer and
345 waiver of all liability.
346
347
348Section 6 -- Term and Termination.
349
350 a. This Public License applies for the term of the Copyright and
351 Similar Rights licensed here. However, if You fail to comply with
352 this Public License, then Your rights under this Public License
353 terminate automatically.
354
355 b. Where Your right to use the Licensed Material has terminated under
356 Section 6(a), it reinstates:
357
358 1. automatically as of the date the violation is cured, provided
359 it is cured within 30 days of Your discovery of the
360 violation; or
361
362 2. upon express reinstatement by the Licensor.
363
364 For the avoidance of doubt, this Section 6(b) does not affect any
365 right the Licensor may have to seek remedies for Your violations
366 of this Public License.
367
368 c. For the avoidance of doubt, the Licensor may also offer the
369 Licensed Material under separate terms or conditions or stop
370 distributing the Licensed Material at any time; however, doing so
371 will not terminate this Public License.
372
373 d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
374 License.
375
376
377Section 7 -- Other Terms and Conditions.
378
379 a. The Licensor shall not be bound by any additional or different
380 terms or conditions communicated by You unless expressly agreed.
381
382 b. Any arrangements, understandings, or agreements regarding the
383 Licensed Material not stated herein are separate from and
384 independent of the terms and conditions of this Public License.
385
386
387Section 8 -- Interpretation.
388
389 a. For the avoidance of doubt, this Public License does not, and
390 shall not be interpreted to, reduce, limit, restrict, or impose
391 conditions on any use of the Licensed Material that could lawfully
392 be made without permission under this Public License.
393
394 b. To the extent possible, if any provision of this Public License is
395 deemed unenforceable, it shall be automatically reformed to the
396 minimum extent necessary to make it enforceable. If the provision
397 cannot be reformed, it shall be severed from this Public License
398 without affecting the enforceability of the remaining terms and
399 conditions.
400
401 c. No term or condition of this Public License will be waived and no
402 failure to comply consented to unless expressly agreed to by the
403 Licensor.
404
405 d. Nothing in this Public License constitutes or may be interpreted
406 as a limitation upon, or waiver of, any privileges and immunities
407 that apply to the Licensor or You, including from the legal
408 processes of any jurisdiction or authority.
409
410
411=======================================================================
412
413Creative Commons is not a party to its public licenses.
414Notwithstanding, Creative Commons may elect to apply one of its public
415licenses to material it publishes and in those instances will be
416considered the "Licensor." Except for the limited purpose of indicating
417that material is shared under a Creative Commons public license or as
418otherwise permitted by the Creative Commons policies published at
419creativecommons.org/policies, Creative Commons does not authorize the
420use of the trademark "Creative Commons" or any other trademark or logo
421of Creative Commons without its prior written consent including,
422without limitation, in connection with any unauthorized modifications
423to any of its public licenses or any other arrangements,
424understandings, or agreements concerning use of licensed material. For
425the avoidance of doubt, this paragraph does not form part of the public
426licenses.
427
428Creative Commons may be contacted at creativecommons.org.
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.eot b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.eot
deleted file mode 100644
index d9c296e4..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.eot
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.svg b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.svg
deleted file mode 100644
index def1e9b5..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.svg
+++ /dev/null
@@ -1,769 +0,0 @@
1<?xml version="1.0" standalone="no"?>
2<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3<svg xmlns="http://www.w3.org/2000/svg">
4<metadata>Generated by IcoMoon</metadata>
5<defs>
6<font id="Material-Design-Icons" horiz-adv-x="1024">
7<font-face units-per-em="1024" ascent="960" descent="-64" />
8<missing-glyph horiz-adv-x="1024" />
9<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
10<glyph unicode="&#xe600;" d="M320.853 22.187c-139.52 65.707-239.36 201.387-254.72 361.813h-64c21.76-262.827 241.493-469.333 509.867-469.333l28.16 1.28-162.56 162.56-56.747-56.32zM358.827 300.374c-8.107 0-15.787 1.28-22.187 3.413-6.827 2.56-12.373 5.547-17.067 10.24-4.693 4.267-8.533 9.387-11.093 15.787-2.56 5.973-3.84 12.8-3.84 20.053h-55.467c0-15.36 2.987-29.013 8.96-40.533s14.080-21.333 23.893-29.44c10.24-7.68 21.76-13.653 34.987-17.493 12.8-4.267 26.453-6.4 40.96-6.4 15.787 0 30.72 2.133 43.947 6.4 13.653 4.267 25.6 10.667 35.413 18.773s17.92 18.347 23.467 30.72c5.547 12.373 8.533 26.027 8.533 41.387 0 8.107-0.853 16.213-2.987 23.893s-5.12 14.933-9.813 21.76c-4.267 6.827-10.24 12.8-17.067 18.347-7.253 5.547-15.787 9.813-26.027 13.227 8.533 3.84 15.787 8.533 22.187 14.080s11.52 11.52 15.787 17.92c4.267 6.4 7.253 12.8 9.387 19.627s2.987 13.653 2.987 20.48c0 15.36-2.56 29.013-7.68 40.96s-12.373 21.76-21.76 29.44c-8.533 8.107-20.053 14.080-32.853 18.347-13.227 3.84-27.733 5.973-43.52 5.973-15.36 0-29.44-2.133-42.667-6.827-12.8-4.693-24.32-11.093-33.707-19.2-8.96-8.107-16.213-17.493-21.76-28.587-5.12-11.093-7.68-23.040-7.68-36.267h55.467c0 7.253 1.28 13.653 3.84 19.2s5.973 10.667 10.667 14.507c4.693 3.84 9.813 7.253 16.213 9.387s12.8 3.413 20.48 3.413c17.067 0 29.867-4.267 37.973-13.227 8.107-8.533 12.373-20.907 12.373-36.693 0-7.68-1.28-14.507-3.413-20.907s-5.973-11.52-10.667-15.787c-4.693-4.267-10.667-7.68-17.493-10.24s-15.36-3.84-24.747-3.84h-32.853v-43.947h32.853c9.387 0 17.92-0.853 25.6-2.987s14.080-5.547 19.2-9.813c5.12-4.693 9.387-10.24 12.373-17.067s4.267-14.933 4.267-24.32c0-17.493-5.12-30.72-14.933-39.68-9.813-9.813-23.467-14.080-40.533-14.080zM723.627 552.96c-13.653 14.080-29.867 25.173-48.64 32.853-18.347 7.68-39.253 11.52-62.293 11.52h-100.693v-341.333h98.133c23.467 0 45.227 3.84 64.427 11.52s35.84 18.347 49.493 32.427c13.653 14.080 24.32 31.147 31.573 50.773 7.253 20.053 11.093 42.24 11.093 66.987v17.067c0 24.747-3.84 46.933-11.093 66.987-7.68 20.053-18.347 37.12-32 51.2zM706.987 418.134c0-17.92-2.133-33.707-5.973-48.213-4.267-14.080-10.24-26.453-18.347-36.267s-18.347-17.493-30.293-22.613c-12.373-5.12-26.453-7.68-42.24-7.68h-38.827v246.187h41.387c30.72 0 54.187-9.813 69.973-29.44 16.213-19.627 24.32-47.787 24.32-84.907v-17.067zM512 938.667l-28.16-1.28 162.56-162.56 56.747 56.747c139.52-66.133 239.36-201.387 254.293-361.813h64c-21.333 262.4-241.067 468.907-509.44 468.907z" />
11<glyph unicode="&#xe601;" d="M512 853.334c46.933 0 85.333-38.4 85.333-85.333s-38.4-85.333-85.333-85.333-85.333 38.4-85.333 85.333 38.4 85.333 85.333 85.333zM896 554.667h-256v-554.667h-85.333v256h-85.333v-256h-85.333v554.667h-256v85.333h768v-85.333z" />
12<glyph unicode="&#xe602;" d="M896 170.667v-42.667c0-46.933-38.4-85.333-85.333-85.333h-597.333c-47.36 0-85.333 38.4-85.333 85.333v597.333c0 46.933 37.973 85.333 85.333 85.333h597.333c46.933 0 85.333-38.4 85.333-85.333v-42.667h-384c-47.36 0-85.333-38.4-85.333-85.333v-341.333c0-46.933 37.973-85.333 85.333-85.333h384zM512 256h426.667v341.333h-426.667v-341.333zM682.667 362.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
13<glyph unicode="&#xe603;" d="M170.667 512v-298.667h128v298.667h-128zM426.667 512v-298.667h128v298.667h-128zM85.333-0h810.667v128h-810.667v-128zM682.667 512v-298.667h128v298.667h-128zM490.667 896l-405.333-213.333v-85.333h810.667v85.333l-405.333 213.333z" />
14<glyph unicode="&#xe604;" d="M128 725.334v-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333h-597.333c-47.36 0-85.333-38.4-85.333-85.333zM640 554.667c0-70.827-57.173-128-128-128s-128 57.173-128 128 57.173 128 128 128 128-57.173 128-128zM256 213.334c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-42.667h-512v42.667z" />
15<glyph unicode="&#xe605;" d="M576 363.094c0-35.346-28.654-64-64-64s-64 28.654-64 64c0 35.346 28.654 64 64 64s64-28.654 64-64zM512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 746.667c52.907 0 96-43.093 96-96s-43.093-96-96-96-96 43.093-96 96 43.093 96 96 96zM725.333 296.107v-106.667c-19.2-17.493-40.96-32.853-64-44.8v29.013c0 14.507-7.253 27.733-19.627 39.253-27.733 26.453-80.64 43.52-129.707 43.52-40.96 0-83.627-11.947-113.067-31.147l-7.253-5.12-8.96-7.253c33.28-20.053 69.547-30.72 108.373-34.987l56.747-6.4c15.787-1.707 28.16-15.36 28.16-32 0-12.373-6.827-22.613-17.067-28.16-11.947-6.4-27.307-3.84-40.533-3.84-14.933 0-29.44 0.427-43.947 2.133-21.333 2.56-42.24 7.253-62.293 14.080-20.907 6.827-41.387 16.213-60.587 27.307-9.387 5.547-18.773 11.52-27.733 18.347l-13.227 10.24c-1.707 0.853-11.947 7.68-11.947 9.813v182.613c0 67.413 112.213 118.613 213.333 118.613s213.333-51.2 213.333-118.613v-75.947z" />
16<glyph unicode="&#xe606;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 725.334c70.827 0 128-57.173 128-128s-57.173-128-128-128-128 57.173-128 128 57.173 128 128 128zM512 119.467c-106.667 0-200.96 54.613-256 137.387 1.28 84.907 170.667 131.413 256 131.413 84.907 0 254.72-46.507 256-131.413-55.040-82.773-149.333-137.387-256-137.387z" />
17<glyph unicode="&#xe607;" d="M469.333 554.667h85.333v128h128v85.333h-128v128h-85.333v-128h-128v-85.333h128v-128zM298.667 170.667c-46.933 0-84.907-38.4-84.907-85.333s37.973-85.333 84.907-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM725.333 170.667c-46.933 0-84.907-38.4-84.907-85.333s37.973-85.333 84.907-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM305.92 309.334l1.28 5.12 38.4 69.547h317.867c32 0 60.16 17.493 74.667 43.947l164.693 299.093-74.24 40.96h-0.427l-46.933-85.333-117.76-213.333h-299.52l-5.547 11.52-95.573 201.813-40.533 85.333-40.107 85.333h-139.52v-85.333h85.333l153.6-323.84-57.6-104.533c-6.827-11.947-10.667-26.027-10.667-40.96 0-46.933 38.4-85.333 85.333-85.333h512v85.333h-494.080c-5.547 0-10.667 4.693-10.667 10.667z" />
18<glyph unicode="&#xe608;" d="M336.213 794.027l-54.613 65.28-196.267-164.267 55.040-65.28 195.84 164.267zM938.667 694.614l-196.267 164.693-55.040-65.28 196.267-164.693 55.040 65.28zM512 768c-212.053 0-384-171.947-384-384s171.52-384 384-384c212.053 0 384 171.947 384 384s-171.947 384-384 384zM512 85.334c-165.12 0-298.667 133.547-298.667 298.667s133.547 298.667 298.667 298.667 298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667zM554.667 554.667h-85.333v-128h-128v-85.333h128v-128h85.333v128h128v85.333h-128v128z" />
19<glyph unicode="&#xe609;" d="M512 682.667c165.12 0 298.667-133.547 298.667-298.667 0-35.84-6.827-70.4-18.347-102.4l64.853-64.853c24.747 50.773 38.827 107.093 38.827 167.253 0 212.053-171.947 384-384 384-60.16 0-116.48-14.080-167.253-38.827l64.853-64.853c32 11.52 66.56 18.347 102.4 18.347zM938.667 694.614l-196.267 164.693-55.040-65.28 196.267-164.693 55.040 65.28zM124.587 840.96l-54.187-54.613 56.747-56.747-47.36-39.68 60.587-60.587 47.36 40.107 34.133-34.133c-58.453-67.413-93.867-155.307-93.867-251.307 0-212.053 171.52-384 384-384 96 0 183.893 35.413 251.307 93.867l93.867-93.867 54.187 54.187-786.773 786.773zM702.72 154.027c-51.627-42.667-118.187-68.693-190.72-68.693-165.12 0-298.667 133.547-298.667 298.667 0 72.533 26.027 139.093 68.693 190.72l420.693-420.693zM342.187 798.72l-60.587 60.587-36.693-30.293 60.587-60.587 36.693 30.293z" />
20<glyph unicode="&#xe60a;" d="M938.667 694.614l-196.267 164.693-55.040-65.28 196.267-164.693 55.040 65.28zM336.213 794.027l-54.613 65.28-196.267-164.267 55.040-65.28 195.84 164.267zM512 768c-212.053 0-384-171.947-384-384s171.52-384 384-384c212.053 0 384 171.947 384 384s-171.947 384-384 384zM512 85.334c-165.12 0-298.667 133.547-298.667 298.667s133.547 298.667 298.667 298.667 298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667zM449.707 318.72l-90.88 90.88-45.227-45.227 135.68-135.68 256 256-45.227 45.227-210.347-211.2z" />
21<glyph unicode="&#xe60b;" d="M938.667 694.614l-196.267 164.693-55.040-65.28 196.267-164.693 55.040 65.28zM336.213 794.027l-54.613 65.28-196.267-164.267 55.040-65.28 195.84 164.267zM533.333 597.334h-64v-256l202.667-121.6 32 52.48-170.667 101.12v224zM512 768c-212.053 0-384-171.947-384-384s171.52-384 384-384c212.053 0 384 171.947 384 384s-171.947 384-384 384zM512 85.334c-165.12 0-298.667 133.547-298.667 298.667s133.547 298.667 298.667 298.667 298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667z" />
22<glyph unicode="&#xe60c;" d="M256 170.667c0-23.467 19.2-42.667 42.667-42.667h42.667v-149.333c0-35.413 28.587-64 64-64s64 28.587 64 64v149.333h85.333v-149.333c0-35.413 28.587-64 64-64s64 28.587 64 64v149.333h42.667c23.467 0 42.667 19.2 42.667 42.667v426.667h-512v-426.667zM149.333 597.334c-35.413 0-64-28.587-64-64v-298.667c0-35.413 28.587-64 64-64s64 28.587 64 64v298.667c0 35.413-28.587 64-64 64zM874.667 597.334c-35.413 0-64-28.587-64-64v-298.667c0-35.413 28.587-64 64-64s64 28.587 64 64v298.667c0 35.413-28.587 64-64 64zM662.613 846.507l55.467 55.467c8.533 8.533 8.533 21.76 0 30.293s-21.76 8.533-30.293 0l-63.147-63.147c-33.707 17.067-72.107 26.88-112.64 26.88-40.96 0-79.36-9.813-113.493-26.88l-63.573 63.147c-8.533 8.533-21.76 8.533-30.293 0s-8.533-21.76 0-30.293l55.893-55.893c-63.147-46.507-104.533-121.173-104.533-206.080h512c0 84.907-41.387 160-105.387 206.507zM426.667 725.334h-42.667v42.667h42.667v-42.667zM640 725.334h-42.667v42.667h42.667v-42.667z" />
23<glyph unicode="&#xe60d;" d="M853.333 853.334h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-768 170.667 170.667h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM554.667 469.334h-85.333v256h85.333v-256zM554.667 298.667h-85.333v85.333h85.333v-85.333z" />
24<glyph unicode="&#xe60e;" d="M810.667 426.667h-85.333v-128h-128v-85.333h213.333v213.333zM298.667 554.667h128v85.333h-213.333v-213.333h85.333v128zM896 810.667h-768c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 127.574h-768v598.187h768v-598.187z" />
25<glyph unicode="&#xe60f;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM384 213.334h-85.333v298.667h85.333v-298.667zM554.667 213.334h-85.333v426.667h85.333v-426.667zM725.333 213.334h-85.333v170.667h85.333v-170.667z" />
26<glyph unicode="&#xe610;" d="M810.667 810.667h-178.347c-17.92 49.493-64.853 85.333-120.32 85.333s-102.4-35.84-120.32-85.333h-178.347c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM512 810.667c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM512 640c70.827 0 128-57.173 128-128s-57.173-128-128-128-128 57.173-128 128 57.173 128 128 128zM768 128h-512v59.733c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-59.733z" />
27<glyph unicode="&#xe611;" d="M810.667 810.667h-178.347c-17.92 49.493-64.853 85.333-120.32 85.333s-102.4-35.84-120.32-85.333h-178.347c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM554.667 170.667h-85.333v85.333h85.333v-85.333zM554.667 341.334h-85.333v256h85.333v-256zM512 725.334c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667z" />
28<glyph unicode="&#xe612;" d="M810.667 810.667h-178.347c-17.92 49.493-64.853 85.333-120.32 85.333s-102.4-35.84-120.32-85.333h-178.347c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM512 810.667c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM682.667 298.667h-170.667v-128l-213.333 213.333 213.333 213.333v-128h170.667v-170.667z" />
29<glyph unicode="&#xe613;" d="M810.667 810.667h-178.347c-17.92 49.493-64.853 85.333-120.32 85.333s-102.4-35.84-120.32-85.333h-178.347c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM512 810.667c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM512 170.667l-213.333 213.333h128v170.667h170.667v-170.667h128l-213.333-213.333z" />
30<glyph unicode="&#xe614;" d="M810.667 810.667h-178.347c-17.92 49.493-64.853 85.333-120.32 85.333s-102.4-35.84-120.32-85.333h-178.347c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM512 810.667c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM426.667 213.334l-170.667 170.667 60.16 60.16 110.507-110.080 281.173 281.173 60.16-60.587-341.333-341.333z" />
31<glyph unicode="&#xe615;" d="M810.667 810.667h-178.347c-17.92 49.493-64.853 85.333-120.32 85.333s-102.4-35.84-120.32-85.333h-178.347c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM512 810.667c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM597.333 213.334h-298.667v85.333h298.667v-85.333zM725.333 384h-426.667v85.333h426.667v-85.333zM725.333 554.667h-426.667v85.333h426.667v-85.333z" />
32<glyph unicode="&#xe616;" d="M512 682.667v-128l170.667 170.667-170.667 170.667v-128c-188.587 0-341.333-152.747-341.333-341.333 0-66.987 19.627-129.28 52.907-181.76l62.293 62.293c-19.2 35.413-29.867 76.373-29.867 119.467 0 141.227 114.773 256 256 256zM800.427 608.427l-62.293-62.293c18.773-35.84 29.867-76.373 29.867-119.467 0-141.227-114.773-256-256-256v128l-170.667-170.667 170.667-170.667v128c188.587 0 341.333 152.747 341.333 341.333 0 66.987-19.627 129.28-52.907 181.76z" />
33<glyph unicode="&#xe617;" d="M825.6 510.294c-29.013 147.2-158.293 257.707-313.6 257.707-123.307 0-230.4-69.973-283.733-172.373-128.427-13.653-228.267-122.453-228.267-254.293 0-141.227 114.773-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.467 203.947-198.4 211.627zM597.333 384v-170.667h-170.667v170.667h-128l213.333 213.333 213.333-213.333h-128z" />
34<glyph unicode="&#xe618;" d="M768 853.334h-512c-46.933 0-85.333-38.4-85.333-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM256 768h213.333v-341.333l-106.667 64-106.667-64v341.333z" />
35<glyph unicode="&#xe619;" d="M725.333 810.667h-426.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-682.667 298.667 128 298.667-128v682.667c0 46.933-38.4 85.333-85.333 85.333zM725.333 170.667l-213.333 93.013-213.333-93.013v554.667h426.667v-554.667z" />
36<glyph unicode="&#xe61a;" d="M725.333 810.667h-426.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-682.667 298.667 128 298.667-128v682.667c0 46.933-38.4 85.333-85.333 85.333z" />
37<glyph unicode="&#xe61b;" d="M853.333 597.334h-119.893c-19.2 33.28-45.653 61.867-77.653 83.627l69.547 69.547-60.16 60.16-92.587-92.587c-19.627 4.693-39.68 7.253-60.587 7.253s-40.96-2.56-60.16-7.253l-93.013 92.587-60.16-60.16 69.12-69.547c-31.573-21.76-58.027-50.347-77.227-83.627h-119.893v-85.333h89.173c-2.133-14.080-3.84-28.16-3.84-42.667v-42.667h-85.333v-85.333h85.333v-42.667c0-14.507 1.707-28.587 3.84-42.667h-89.173v-85.333h119.893c44.373-76.373 126.72-128 221.44-128s177.067 51.627 221.44 128h119.893v85.333h-89.173c2.133 14.080 3.84 28.16 3.84 42.667v42.667h85.333v85.333h-85.333v42.667c0 14.507-1.707 28.587-3.84 42.667h89.173v85.333zM597.333 256h-170.667v85.333h170.667v-85.333zM597.333 426.667h-170.667v85.333h170.667v-85.333z" />
38<glyph unicode="&#xe61c;" d="M810.667 597.334l-170.667-170.667h128c0-141.227-114.773-256-256-256-43.093 0-84.053 10.667-119.467 29.867l-62.293-62.293c52.48-33.28 114.773-52.907 181.76-52.907 188.587 0 341.333 152.747 341.333 341.333h128l-170.667 170.667zM256 426.667c0 141.227 114.773 256 256 256 43.093 0 84.053-10.667 119.467-29.867l62.293 62.293c-52.48 33.28-114.773 52.907-181.76 52.907-188.587 0-341.333-152.747-341.333-341.333h-128l170.667-170.667 170.667 170.667h-128z" />
39<glyph unicode="&#xe61d;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM426.667 213.334l-213.333 213.333 60.16 60.16 153.173-152.747 323.84 323.84 60.16-60.587-384-384z" />
40<glyph unicode="&#xe61e;" d="M768 853.334h-512c-46.933 0-85.333-38.4-85.333-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM256 768h213.333v-341.333l-106.667 64-106.667-64v341.333z" />
41<glyph unicode="&#xe61f;" d="M853.333 768h-682.667c-47.36 0-84.907-37.973-84.907-85.333l-0.427-512c0-47.36 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 37.973 85.333 85.333v512c0 47.36-37.973 85.333-85.333 85.333zM853.333 170.667h-682.667v256h682.667v-256zM853.333 597.334h-682.667v85.333h682.667v-85.333z" />
42<glyph unicode="&#xe620;" d="M128 384h341.333v426.667h-341.333v-426.667zM128 42.667h341.333v256h-341.333v-256zM554.667 42.667h341.333v426.667h-341.333v-426.667zM554.667 810.667v-256h341.333v256h-341.333z" />
43<glyph unicode="&#xe621;" d="M256 128c0-46.933 38.4-85.333 85.333-85.333h341.333c46.933 0 85.333 38.4 85.333 85.333v512h-512v-512zM810.667 768h-149.333l-42.667 42.667h-213.333l-42.667-42.667h-149.333v-85.333h597.333v85.333z" />
44<glyph unicode="&#xe622;" d="M597.333 853.334h-341.333c-46.933 0-84.907-38.4-84.907-85.333l-0.427-682.667c0-46.933 37.973-85.333 84.907-85.333h512.427c46.933 0 85.333 38.4 85.333 85.333v512l-256 256zM682.667 170.667h-341.333v85.333h341.333v-85.333zM682.667 341.334h-341.333v85.333h341.333v-85.333zM554.667 554.667v234.667l234.667-234.667h-234.667z" />
45<glyph unicode="&#xe623;" d="M853.333 384h-682.667c-23.467 0-42.667-19.2-42.667-42.667v-256c0-23.467 19.2-42.667 42.667-42.667h682.667c23.467 0 42.667 19.2 42.667 42.667v256c0 23.467-19.2 42.667-42.667 42.667zM298.667 128c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333zM853.333 810.667h-682.667c-23.467 0-42.667-19.2-42.667-42.667v-256c0-23.467 19.2-42.667 42.667-42.667h682.667c23.467 0 42.667 19.2 42.667 42.667v256c0 23.467-19.2 42.667-42.667 42.667zM298.667 554.667c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333z" />
46<glyph unicode="&#xe624;" d="M768 640l-60.16 60.16-270.507-270.507 60.16-60.16 270.507 270.507zM948.907 700.16l-451.413-451.413-178.347 177.92-60.16-60.16 238.507-238.507 512 512-60.587 60.16zM17.493 366.507l238.507-238.507 60.16 60.16-238.080 238.507-60.587-60.16z" />
47<glyph unicode="&#xe625;" d="M384 248.747l-177.92 177.92-60.587-60.16 238.507-238.507 512 512-60.16 60.16z" />
48<glyph unicode="&#xe626;" d="M725.333 426.667h-213.333v-213.333h213.333v213.333zM682.667 896v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.36 0-84.907-38.4-84.907-85.333l-0.427-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333h-42.667v85.333h-85.333zM810.667 128h-597.333v469.333h597.333v-469.333z" />
49<glyph unicode="&#xe627;" d="M430.507 273.494l60.16-60.16 213.333 213.333-213.333 213.333-60.16-60.16 110.080-110.507h-412.587v-85.333h412.587l-110.080-110.507zM810.667 810.667h-597.333c-47.36 0-85.333-38.4-85.333-85.333v-170.667h85.333v170.667h597.333v-597.333h-597.333v170.667h-85.333v-170.667c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333z" />
50<glyph unicode="&#xe628;" d="M512 473.6c-26.027 0-46.933-20.907-46.933-46.933s20.907-46.933 46.933-46.933c26.027 0 46.933 20.907 46.933 46.933s-20.907 46.933-46.933 46.933zM512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM605.44 333.227l-349.44-162.56 162.56 349.44 349.44 162.56-162.56-349.44z" />
51<glyph unicode="&#xe629;" d="M874.667 469.334h-64v170.667c0 46.933-38.4 85.333-85.333 85.333h-170.667v64c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-64h-170.667c-46.933 0-84.907-38.4-84.907-85.333v-162.133h63.573c63.573 0 115.2-51.627 115.2-115.2s-51.627-115.2-115.2-115.2h-64v-162.133c0-46.933 38.4-85.333 85.333-85.333h162.133v64c0 63.573 51.627 115.2 115.2 115.2s115.2-51.627 115.2-115.2v-64h162.133c46.933 0 85.333 38.4 85.333 85.333v170.667h64c58.88 0 106.667 47.787 106.667 106.667s-47.787 106.667-106.667 106.667z" />
52<glyph unicode="&#xe62a;" d="M626.773 209.067c-31.573-24.747-72.533-38.4-114.773-38.4s-83.2 13.653-114.773 38.4c-9.387 7.253-22.613 5.547-29.867-3.84s-5.547-22.613 3.84-29.867c38.827-30.72 89.173-47.36 140.8-47.36s101.973 16.64 141.227 46.933c9.387 7.253 11.093 20.48 3.84 29.867-7.253 9.813-20.907 11.093-30.293 4.267zM405.333 405.334c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667zM512 938.667c-282.88 0-512-229.12-512-512s229.12-512 512-512 512 229.12 512 512-229.12 512-512 512zM851.627 306.347c-46.507-159.573-182.187-275.627-343.040-275.627-161.28 0-296.96 116.053-343.040 276.053-50.773 4.693-90.88 50.347-90.88 107.52 0 54.187 36.267 98.56 84.053 106.667 89.173 62.293 162.133 148.907 174.507 215.467v0.427c57.6-112.213 268.8-221.44 504.747-215.893l12.8 1.28c54.613 0 98.56-48.64 98.56-108.373 0-58.88-43.52-107.093-97.707-107.52zM704 405.334c0-23.564-19.103-42.667-42.667-42.667s-42.667 19.103-42.667 42.667c0 23.564 19.103 42.667 42.667 42.667s42.667-19.103 42.667-42.667z" />
53<glyph unicode="&#xe62b;" d="M704 810.667c-74.24 0-145.493-34.56-192-89.173-46.507 54.613-117.76 89.173-192 89.173-131.413 0-234.667-103.253-234.667-234.667 0-161.28 145.067-292.693 364.8-492.373l61.867-55.893 61.867 56.32c219.733 199.253 364.8 330.667 364.8 491.947 0 131.413-103.253 234.667-234.667 234.667zM516.267 147.2l-4.267-4.267-4.267 4.267c-203.093 183.893-337.067 305.493-337.067 428.8 0 85.333 64 149.333 149.333 149.333 65.707 0 129.707-42.24 152.32-100.693h79.787c22.187 58.453 86.187 100.693 151.893 100.693 85.333 0 149.333-64 149.333-149.333 0-123.307-133.973-244.907-337.067-428.8z" />
54<glyph unicode="&#xe62c;" d="M512 27.734l-61.867 56.32c-219.733 199.253-364.8 330.667-364.8 491.947 0 131.413 103.253 234.667 234.667 234.667 74.24 0 145.493-34.56 192-89.173 46.507 54.613 117.76 89.173 192 89.173 131.413 0 234.667-103.253 234.667-234.667 0-161.28-145.067-292.693-364.8-492.373l-61.867-55.893z" />
55<glyph unicode="&#xe62d;" d="M853.333 102.827v494.507l-256 256h-341.333c-46.933 0-84.907-38.4-84.907-85.333l-0.427-682.667c0-46.933 37.973-85.333 84.907-85.333h512.427c19.2 0 36.267 6.4 50.773 17.067l-189.013 189.013c-34.133-22.187-74.24-35.413-117.76-35.413-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333c0-43.52-13.227-83.627-35.413-117.333l163.413-163.84zM384 384c0-70.827 57.173-128 128-128s128 57.173 128 128-57.173 128-128 128-128-57.173-128-128z" />
56<glyph unicode="&#xe62e;" d="M469.333 682.667c58.88 0 112.213-23.893 151.040-62.293l-108.373-108.373h256v256l-87.467-87.467c-54.187 54.187-128.853 87.467-211.2 87.467-150.613 0-274.347-111.36-295.253-256h86.187c19.627 97.28 105.813 170.667 209.067 170.667zM709.973 292.694c28.16 38.4 47.787 84.053 54.613 133.973h-86.187c-19.627-97.28-105.813-170.667-209.067-170.667-58.88 0-112.213 23.893-151.040 62.293l108.373 108.373h-256v-256l87.467 87.467c54.187-54.187 128.853-87.467 211.2-87.467 66.133 0 127.147 21.76 176.64 58.027l207.36-206.933 63.573 63.573-206.933 207.36z" />
57<glyph unicode="&#xe62f;" d="M384 640h-85.333v-85.333h85.333v85.333zM384 469.334h-85.333v-85.333h85.333v85.333zM384 810.667c-47.36 0-85.333-38.4-85.333-85.333h85.333v85.333zM554.667 298.667h-85.333v-85.333h85.333v85.333zM810.667 810.667v-85.333h85.333c0 46.933-38.4 85.333-85.333 85.333zM554.667 810.667h-85.333v-85.333h85.333v85.333zM384 213.334v85.333h-85.333c0-46.933 37.973-85.333 85.333-85.333zM810.667 384h85.333v85.333h-85.333v-85.333zM810.667 554.667h85.333v85.333h-85.333v-85.333zM810.667 213.334c46.933 0 85.333 38.4 85.333 85.333h-85.333v-85.333zM213.333 640h-85.333v-512c0-46.933 37.973-85.333 85.333-85.333h512v85.333h-512v512zM640 725.334h85.333v85.333h-85.333v-85.333zM640 213.334h85.333v85.333h-85.333v-85.333z" />
58<glyph unicode="&#xe630;" d="M128 384h85.333v85.333h-85.333v-85.333zM128 213.334h85.333v85.333h-85.333v-85.333zM213.333 42.667v85.333h-85.333c0-46.933 37.973-85.333 85.333-85.333zM128 554.667h85.333v85.333h-85.333v-85.333zM640 42.667h85.333v85.333h-85.333v-85.333zM810.667 810.667h-426.667c-47.36 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 37.973-85.333 85.333-85.333h426.667c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM810.667 298.667h-426.667v426.667h426.667v-426.667zM469.333 42.667h85.333v85.333h-85.333v-85.333zM298.667 42.667h85.333v85.333h-85.333v-85.333z" />
59<glyph unicode="&#xe631;" d="M810.667 554.667h-170.667v256h-256v-256h-170.667l298.667-298.667 298.667 298.667zM213.333 170.667v-85.333h597.333v85.333h-597.333z" />
60<glyph unicode="&#xe632;" d="M512 201.814l263.68-159.147-69.973 299.947 232.96 201.813-306.773 26.027-119.893 282.88-119.893-282.88-306.773-26.027 232.96-201.813-69.973-299.947z" />
61<glyph unicode="&#xe633;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM341.333 192c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667 106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667zM405.333 597.334c0 58.88 47.787 106.667 106.667 106.667s106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667-106.667 47.787-106.667 106.667zM682.667 192c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667 106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667z" />
62<glyph unicode="&#xe634;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM554.667 128h-85.333v85.333h85.333v-85.333zM642.987 458.667l-38.4-39.253c-30.72-31.147-49.92-56.747-49.92-120.747h-85.333v21.333c0 46.933 19.2 89.6 49.92 120.747l52.907 53.76c15.787 15.36 25.173 36.693 25.173 60.16 0 46.933-38.4 85.333-85.333 85.333s-85.333-38.4-85.333-85.333h-85.333c0 94.293 76.373 170.667 170.667 170.667s170.667-76.373 170.667-170.667c0-37.547-15.36-71.68-39.68-96z" />
63<glyph unicode="&#xe635;" d="M622.507 597.334l-110.507-110.507-110.507 110.507-60.16-60.16 110.507-110.507-110.507-110.507 60.16-60.16 110.507 110.507 110.507-110.507 60.16 60.16-110.507 110.507 110.507 110.507-60.16 60.16zM512 853.334c-235.947 0-426.667-190.72-426.667-426.667s190.72-426.667 426.667-426.667 426.667 190.72 426.667 426.667-190.72 426.667-426.667 426.667zM512 85.334c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
64<glyph unicode="&#xe636;" d="M554.667 810.667c-212.053 0-384-171.947-384-384h-128l165.973-165.973 2.987-5.973 172.373 171.947h-128c0 165.12 133.547 298.667 298.667 298.667s298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667c-82.347 0-157.013 33.707-210.773 87.893l-60.587-60.587c69.547-69.547 165.12-112.64 271.36-112.64 212.053 0 384 171.947 384 384s-171.947 384-384 384zM512 597.334v-213.333l182.613-108.373 30.72 51.627-149.333 88.747v181.333h-64z" />
65<glyph unicode="&#xe637;" d="M426.667 85.334v256h170.667v-256h213.333v341.333h128l-426.667 384-426.667-384h128v-341.333z" />
66<glyph unicode="&#xe638;" d="M768 597.334h-42.667v85.333c0 117.76-95.573 213.333-213.333 213.333s-213.333-95.573-213.333-213.333v-85.333h-42.667c-46.933 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM512 213.334c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333zM644.267 597.334h-264.533v85.333c0 72.96 59.307 132.267 132.267 132.267s132.267-59.307 132.267-132.267v-85.333z" />
67<glyph unicode="&#xe639;" d="M469.333 213.334h85.333v256h-85.333v-256zM512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333zM469.333 554.667h85.333v85.333h-85.333v-85.333z" />
68<glyph unicode="&#xe63a;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM554.667 213.334h-85.333v256h85.333v-256zM554.667 554.667h-85.333v85.333h85.333v-85.333z" />
69<glyph unicode="&#xe63b;" d="M896 810.24h-768c-46.933 0-85.333-38.4-85.333-85.333v-170.24h85.333v171.093h768v-598.613h-768v171.52h-85.333v-171.093c0-46.933 38.4-84.48 85.333-84.48h768c46.933 0 85.333 37.547 85.333 84.48v597.333c0 47.36-38.4 85.333-85.333 85.333zM469.333 256l170.667 170.667-170.667 170.667v-128h-426.667v-85.333h426.667v-128z" />
70<glyph unicode="&#xe63c;" d="M753.493 600.32l-241.493 241.493-241.493-241.493c-133.12-133.12-133.12-349.44 0-482.56 66.56-66.56 154.027-99.84 241.493-99.84s174.933 33.28 241.493 99.84c133.12 133.12 133.12 349.44 0 482.56zM512 102.827c-68.267 0-132.693 26.453-180.907 75.093-48.64 48.64-75.093 112.64-75.093 180.907s26.453 132.693 75.093 180.907l180.907 181.333v-618.24z" />
71<glyph unicode="&#xe63d;" d="M752.213 689.494c-15.36 21.76-40.96 35.84-69.547 35.84l-469.333-0.427c-46.933 0-85.333-37.973-85.333-84.907v-426.667c0-46.933 38.4-84.907 85.333-84.907l469.333-0.427c28.587 0 54.187 14.080 69.547 35.84l186.453 262.827-186.453 262.827zM682.667 213.334h-469.333v426.667h469.333l151.467-213.333-151.467-213.333z" />
72<glyph unicode="&#xe63e;" d="M752.213 689.494c-15.36 21.76-40.96 35.84-69.547 35.84l-469.333-0.427c-46.933 0-85.333-37.973-85.333-84.907v-426.667c0-46.933 38.4-84.907 85.333-84.907l469.333-0.427c28.587 0 54.187 14.080 69.547 35.84l186.453 262.827-186.453 262.827z" />
73<glyph unicode="&#xe63f;" d="M511.573 853.334c-235.52 0-426.24-191.147-426.24-426.667s190.72-426.667 426.24-426.667c235.947 0 427.093 191.147 427.093 426.667s-191.147 426.667-427.093 426.667zM807.253 597.334h-125.867c-13.653 53.333-33.28 104.533-58.88 151.893 78.507-26.88 143.787-81.493 184.747-151.893zM512 766.294c35.413-51.2 63.147-107.947 81.493-168.96h-162.987c18.347 61.013 46.080 117.76 81.493 168.96zM181.76 341.334c-6.827 27.307-11.093 55.893-11.093 85.333s4.267 58.027 11.093 85.333h144.213c-3.413-28.16-5.973-56.32-5.973-85.333s2.56-57.173 5.973-85.333h-144.213zM216.747 256h125.867c13.653-53.333 33.28-104.533 58.88-151.893-78.507 26.88-143.787 81.067-184.747 151.893zM342.613 597.334h-125.867c40.96 70.827 106.24 125.013 184.747 151.893-25.6-47.36-45.227-98.56-58.88-151.893zM512 87.040c-35.413 51.2-63.147 107.947-81.493 168.96h162.987c-18.347-61.013-46.080-117.76-81.493-168.96zM611.84 341.334h-199.68c-3.84 28.16-6.827 56.32-6.827 85.333s2.987 57.6 6.827 85.333h199.68c3.84-27.733 6.827-56.32 6.827-85.333s-2.987-57.173-6.827-85.333zM622.507 104.107c25.6 47.36 45.227 98.56 58.88 151.893h125.867c-40.96-70.4-106.24-125.013-184.747-151.893zM698.027 341.334c3.413 28.16 5.973 56.32 5.973 85.333s-2.56 57.173-5.973 85.333h144.213c6.827-27.307 11.093-55.893 11.093-85.333s-4.267-58.027-11.093-85.333h-144.213z" />
74<glyph unicode="&#xe640;" d="M810.667 128h-597.333v597.333h298.667v85.333h-298.667c-47.36 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v298.667h-85.333v-298.667zM597.333 810.667v-85.333h153.173l-419.413-419.413 60.16-60.16 419.413 419.413v-153.173h85.333v298.667h-298.667z" />
75<glyph unicode="&#xe641;" d="M128 384h85.333v85.333h-85.333v-85.333zM128 213.334h85.333v85.333h-85.333v-85.333zM128 554.667h85.333v85.333h-85.333v-85.333zM298.667 384h597.333v85.333h-597.333v-85.333zM298.667 213.334h597.333v85.333h-597.333v-85.333zM298.667 640v-85.333h597.333v85.333h-597.333z" />
76<glyph unicode="&#xe642;" d="M512 213.334c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333-85.333-38.4-85.333-85.333 38.4-85.333 85.333-85.333zM768 597.334h-42.667v85.333c0 117.76-95.573 213.333-213.333 213.333s-213.333-95.573-213.333-213.333h81.067c0 72.96 59.307 132.267 132.267 132.267s132.267-59.307 132.267-132.267v-85.333h-388.267c-46.933 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM768 85.334h-512v426.667h512v-426.667z" />
77<glyph unicode="&#xe643;" d="M768 597.334h-42.667v85.333c0 117.76-95.573 213.333-213.333 213.333s-213.333-95.573-213.333-213.333v-85.333h-42.667c-46.933 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM512 814.934c72.96 0 132.267-59.307 132.267-132.267v-85.333h-260.267v85.333h-4.267c0 72.96 59.307 132.267 132.267 132.267zM768 85.334h-512v426.667h512v-426.667zM512 213.334c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333-85.333-38.4-85.333-85.333 38.4-85.333 85.333-85.333z" />
78<glyph unicode="&#xe644;" d="M768 597.334h-42.667v85.333c0 117.76-95.573 213.333-213.333 213.333s-213.333-95.573-213.333-213.333v-85.333h-42.667c-46.933 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM512 213.334c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333zM644.267 597.334h-264.533v85.333c0 72.96 59.307 132.267 132.267 132.267s132.267-59.307 132.267-132.267v-85.333z" />
79<glyph unicode="&#xe645;" d="M913.493 444.587l-384 384c-15.36 15.36-36.693 24.747-60.16 24.747h-298.667c-46.933 0-85.333-38.4-85.333-85.333v-298.667c0-23.467 9.387-44.8 25.173-60.587l384-384c15.36-15.36 36.693-24.747 60.16-24.747s44.8 9.387 60.16 25.173l298.667 298.667c15.787 15.36 25.173 36.693 25.173 60.16s-9.813 45.227-25.173 60.587zM234.667 640c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM736.853 287.147l-182.187-182.187-182.187 182.187c-19.2 19.627-31.147 46.080-31.147 75.52 0 58.88 47.787 106.667 106.667 106.667 29.44 0 56.32-11.947 75.52-31.573l31.147-30.72 31.147 31.147c19.2 19.2 46.080 31.147 75.52 31.147 58.88 0 106.667-47.787 106.667-106.667 0-29.44-11.947-56.32-31.147-75.52z" />
80<glyph unicode="&#xe646;" d="M853.333 682.667h-426.667v-256h-85.333v341.333h256v170.667h-341.333v-256h-85.333c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333z" />
81<glyph unicode="&#xe647;" d="M597.333 853.334h-341.333c-46.933 0-84.907-38.4-84.907-85.333l-0.427-682.667c0-46.933 37.973-85.333 84.907-85.333h512.427c46.933 0 85.333 38.4 85.333 85.333v512l-256 256zM682.667 256h-128v-128h-85.333v128h-128v85.333h128v128h85.333v-128h128v-85.333zM554.667 554.667v234.667l234.667-234.667h-234.667z" />
82<glyph unicode="&#xe648;" d="M810.667 768h-597.333c-47.36 0-85.333-38.4-85.333-85.333v-512c0-46.933 37.973-85.333 85.333-85.333h170.667v85.333h-170.667v426.667h597.333v-426.667h-170.667v-85.333h170.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-37.973 85.333-85.333 85.333zM512 512l-170.667-170.667h128v-256h85.333v256h128l-170.667 170.667z" />
83<glyph unicode="&#xe649;" d="M810.667 128h-597.333v597.333h298.667v85.333h-298.667c-47.36 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v298.667h-85.333v-298.667zM597.333 810.667v-85.333h153.173l-419.413-419.413 60.16-60.16 419.413 419.413v-153.173h85.333v298.667h-298.667z" />
84<glyph unicode="&#xe64a;" d="M426.667 554.667h170.667v128h128l-213.333 213.333-213.333-213.333h128v-128zM384 512h-128v128l-213.333-213.333 213.333-213.333v128h128v170.667zM981.333 426.667l-213.333 213.333v-128h-128v-170.667h128v-128l213.333 213.333zM597.333 298.667h-170.667v-128h-128l213.333-213.333 213.333 213.333h-128v128z" />
85<glyph unicode="&#xe64b;" d="M469.333 597.334c-70.827 0-128-57.173-128-128s57.173-128 128-128 128 57.173 128 128-57.173 128-128 128zM810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM750.507 128l-163.413 163.413c-34.133-22.187-74.24-35.413-117.76-35.413-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333c0-43.52-13.227-83.627-35.413-117.333l163.413-163.84-60.16-60.16z" />
86<glyph unicode="&#xe64c;" d="M853.333 768h-682.667c-47.36 0-84.907-37.973-84.907-85.333l-0.427-512c0-47.36 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 37.973 85.333 85.333v512c0 47.36-37.973 85.333-85.333 85.333zM853.333 170.667h-682.667v256h682.667v-256zM853.333 597.334h-682.667v85.333h682.667v-85.333z" />
87<glyph unicode="&#xe64d;" d="M853.333 725.334h-135.253l-78.080 85.333h-256l-78.080-85.333h-135.253c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h298.667v89.173c-120.747 20.48-213.333 125.44-213.333 252.16h85.333c0-94.293 76.373-170.667 170.667-170.667s170.667 76.373 170.667 170.667h85.333c0-126.72-92.587-231.68-213.333-252.16v-89.173h298.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM597.333 384c0-46.933-38.4-85.333-85.333-85.333s-85.333 38.4-85.333 85.333v170.667c0 46.933 38.4 85.333 85.333 85.333s85.333-38.4 85.333-85.333v-170.667z" />
88<glyph unicode="&#xe64e;" d="M810.667 810.667h-42.667v85.333h-85.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.36 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM512 682.667c70.827 0 128-57.173 128-128s-57.173-128-128-128-128 57.173-128 128 57.173 128 128 128zM768 170.667h-512v42.667c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-42.667z" />
89<glyph unicode="&#xe64f;" d="M810.24 448c14.507 0 28.587-1.28 42.667-2.987l0.427 493.653-853.333-853.333h493.227c-1.707 14.080-2.987 28.16-2.987 42.667 0 176.64 143.36 320 320 320zM968.533 107.094c0.853 6.827 1.707 13.653 1.707 20.907s-0.427 14.080-1.707 20.907l45.227 35.413c3.84 3.413 5.12 8.96 2.56 13.653l-42.667 73.813c-2.56 4.693-8.107 6.4-13.227 4.693l-52.907-21.333c-11.093 8.533-23.040 15.787-36.267 20.907l-8.107 56.32c-0.427 5.12-5.12 8.96-10.24 8.96h-85.333c-5.12 0-9.813-3.84-10.667-8.96l-8.107-56.32c-12.8-5.547-25.173-12.373-36.267-20.907l-52.907 21.333c-4.693 1.707-10.24 0-13.227-4.693l-42.667-73.813c-2.56-4.693-1.707-10.24 2.56-13.653l45.227-35.413c-0.853-6.827-1.28-13.653-1.28-20.907s0.427-14.080 1.28-20.907l-45.227-35.413c-3.84-3.413-5.12-8.96-2.56-13.653l42.667-73.813c2.56-4.693 8.107-6.4 13.227-4.693l52.907 21.333c11.093-8.533 23.040-15.787 36.267-20.907l8.107-56.32c0.853-5.12 5.12-8.96 10.667-8.96h85.333c5.12 0 9.813 3.84 10.667 8.96l8.107 56.32c12.8 5.547 25.173 12.373 35.84 20.907l53.333-21.333c4.693-1.707 10.24 0 13.227 4.693l42.667 73.813c2.56 4.693 1.28 10.24-2.56 13.653l-45.653 35.413zM810.24 64c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
90<glyph unicode="&#xe650;" d="M554.667 640h-85.333v-85.333h85.333v85.333zM554.667 469.334h-85.333v-256h85.333v256zM725.333 895.574l-426.667 0.427c-46.933 0-85.333-38.4-85.333-85.333v-768c0-46.933 38.4-85.333 85.333-85.333h426.667c46.933 0 85.333 38.4 85.333 85.333v768c0 46.933-38.4 84.907-85.333 84.907zM725.333 128h-426.667v597.333h426.667v-597.333z" />
91<glyph unicode="&#xe651;" d="M512 686.934c49.493 0 89.6-40.107 89.6-89.6s-40.107-89.6-89.6-89.6-89.6 40.107-89.6 89.6 40.107 89.6 89.6 89.6zM512 302.934c126.72 0 260.267-62.293 260.267-89.6v-46.933h-520.533v46.933c0 27.307 133.547 89.6 260.267 89.6zM512 768c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM512 384c-113.92 0-341.333-57.173-341.333-170.667v-128h682.667v128c0 113.493-227.413 170.667-341.333 170.667z" />
92<glyph unicode="&#xe652;" d="M85.333 682.667h-85.333v-213.333h0.427l-0.427-384c0-46.933 38.4-85.333 85.333-85.333h768v85.333h-768v597.333zM938.667 768h-341.333l-85.333 85.333h-256c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM298.667 298.667l192 256 149.333-192.427 106.667 128.427 149.333-192h-597.333z" />
93<glyph unicode="&#xe653;" d="M853.333 277.334c-53.333 0-104.533 8.533-152.32 24.32-14.933 4.693-31.573 1.28-43.52-10.24l-93.867-93.867c-120.747 61.44-219.733 160-281.173 280.747l93.867 94.293c11.947 11.52 15.36 28.16 10.667 43.093-15.787 47.787-24.32 98.987-24.32 152.32 0 23.467-19.2 42.667-42.667 42.667h-149.333c-23.467 0-42.667-19.2-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.467 0 42.667 19.2 42.667 42.667v149.333c0 23.467-19.2 42.667-42.667 42.667zM512 810.667v-426.667l128 128h256v298.667h-384z" />
94<glyph unicode="&#xe654;" d="M512 810.667c-215.467 0-377.6-78.933-512-180.48l512-630.187 512 629.333c-134.4 101.547-296.533 181.333-512 181.333zM554.667 256h-85.333v256h85.333v-256zM469.333 597.334v85.333h85.333v-85.333h-85.333z" />
95<glyph unicode="&#xe655;" d="M810.667 640h-341.333v-256h341.333v256zM896 810.667h-768c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-84.48 85.333-84.48h768c46.933 0 85.333 37.547 85.333 84.48v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 127.574h-768v598.613h768v-598.613z" />
96<glyph unicode="&#xe656;" d="M810.667 768h-170.667l-336.64-538.88-111.36 197.547 192 341.333h-170.667l-192-341.333 192-341.333h170.667l336.64 538.88 111.36-197.547-192-341.333h170.667l192 341.333z" />
97<glyph unicode="&#xe657;" d="M810.667 597.334h-597.333c-70.827 0-128-57.173-128-128v-256h170.667v-170.667h512v170.667h170.667v256c0 70.827-57.173 128-128 128zM682.667 128h-341.333v213.333h341.333v-213.333zM810.667 426.667c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667zM768 810.667h-512v-170.667h512v170.667z" />
98<glyph unicode="&#xe658;" d="M511.573 853.334c-235.52 0-426.24-191.147-426.24-426.667s190.72-426.667 426.24-426.667c235.947 0 427.093 191.147 427.093 426.667s-191.147 426.667-427.093 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM533.333 640h-64v-256l224-134.4 32 52.48-192 113.92z" />
99<glyph unicode="&#xe659;" d="M896 682.667h-85.333v-384h-554.667v-85.333c0-23.467 19.2-42.667 42.667-42.667h469.333l170.667-170.667v640c0 23.467-19.2 42.667-42.667 42.667zM725.333 426.667v384c0 23.467-19.2 42.667-42.667 42.667h-554.667c-23.467 0-42.667-19.2-42.667-42.667v-597.333l170.667 170.667h426.667c23.467 0 42.667 19.2 42.667 42.667z" />
100<glyph unicode="&#xe65a;" d="M768 213.334h-512v85.333h512v-85.333zM768 384h-512v85.333h512v-85.333zM768 554.667h-512v85.333h512v-85.333zM128-0l64 64 64-64 64 64 64-64 64 64 64-64 64 64 64-64 64 64 64-64 64 64 64-64v853.333l-64-64-64 64-64-64-64 64-64-64-64 64-64-64-64 64-64-64-64 64-64-64-64 64v-853.333z" />
101<glyph unicode="&#xe65b;" d="M853.333 682.667h-93.013c4.693 13.227 7.68 27.733 7.68 42.667 0 70.827-57.173 128-128 128-44.8 0-83.627-23.040-106.667-57.6l-21.333-28.587-21.333 29.013c-23.040 34.133-61.867 57.173-106.667 57.173-70.827 0-128-57.173-128-128 0-14.933 2.987-29.44 7.68-42.667h-93.013c-47.36 0-84.907-37.973-84.907-85.333l-0.427-469.333c0-47.36 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 37.973 85.333 85.333v469.333c0 47.36-37.973 85.333-85.333 85.333zM640 768c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM384 768c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM853.333 128h-682.667v85.333h682.667v-85.333zM853.333 341.334h-682.667v256h216.747l-88.747-120.747 69.12-49.92 144.213 196.267 144.213-196.267 69.12 49.92-88.747 120.747h216.747v-256z" />
102<glyph unicode="&#xe65c;" d="M128 298.667h768v85.333h-768v-85.333zM128 128h768v85.333h-768v-85.333zM128 469.334h768v85.333h-768v-85.333zM128 725.334v-85.333h768v85.333h-768z" />
103<glyph unicode="&#xe65d;" d="M42.667 42.667h938.667l-469.333 810.667-469.333-810.667zM554.667 170.667h-85.333v85.333h85.333v-85.333zM554.667 341.334h-85.333v170.667h85.333v-170.667z" />
104<glyph unicode="&#xe65e;" d="M554.667 810.667c-212.053 0-384-171.947-384-384h-128l165.973-165.973 2.987-5.973 172.373 171.947h-128c0 165.12 133.547 298.667 298.667 298.667s298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667c-82.347 0-157.013 33.707-210.773 87.893l-60.587-60.587c69.547-69.547 165.12-112.64 271.36-112.64 212.053 0 384 171.947 384 384s-171.947 384-384 384zM512 597.334v-213.333l182.613-108.373 30.72 51.627-149.333 88.747v181.333h-64z" />
105<glyph unicode="&#xe65f;" d="M512 853.334c-165.12 0-298.667-133.547-298.667-298.667 0-224 298.667-554.667 298.667-554.667s298.667 330.667 298.667 554.667c0 165.12-133.547 298.667-298.667 298.667zM512 448c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667 106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667z" />
106<glyph unicode="&#xe660;" d="M511.573 853.334c-235.52 0-426.24-191.147-426.24-426.667s190.72-426.667 426.24-426.667c235.947 0 427.093 191.147 427.093 426.667s-191.147 426.667-427.093 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM533.333 640h-64v-256l224-134.4 32 52.48-192 113.92z" />
107<glyph unicode="&#xe661;" d="M661.333 341.334h-33.707l-11.947 11.52c41.813 48.64 66.987 111.787 66.987 180.48 0 153.173-124.16 277.333-277.333 277.333s-277.333-124.16-277.333-277.333 124.16-277.333 277.333-277.333c68.693 0 131.84 25.173 180.48 66.987l11.52-11.947v-33.707l213.333-212.907 63.573 63.573-212.907 213.333zM405.333 341.334c-106.24 0-192 85.76-192 192s85.76 192 192 192 192-85.76 192-192-85.76-192-192-192z" />
108<glyph unicode="&#xe662;" d="M512 512c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM810.667 810.667h-597.333c-47.36 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c47.36 0 85.333 38.4 85.333 85.333v597.333c0 46.933-37.973 85.333-85.333 85.333zM736 426.667c0-9.813-0.853-19.627-2.133-29.013l63.147-49.493c5.547-4.693 7.253-12.8 3.413-19.2l-59.733-103.253c-3.84-6.4-11.52-8.96-18.347-6.4l-74.24 29.867c-15.36-11.947-32.427-21.76-50.347-29.44l-11.093-78.933c-1.28-7.253-7.68-12.8-14.933-12.8h-119.467c-7.253 0-13.653 5.547-14.933 12.373l-11.093 78.933c-18.347 7.68-34.987 17.493-50.347 29.44l-74.24-29.867c-6.827-2.56-14.507 0-18.347 6.4l-59.733 103.253c-3.84 6.4-2.133 14.507 3.413 19.2l63.147 49.493c-1.28 9.813-2.133 19.627-2.133 29.44s0.853 19.627 2.133 29.013l-63.147 49.493c-5.547 4.693-7.253 12.8-3.413 19.2l59.733 103.253c3.84 6.4 11.52 8.96 18.347 6.4l74.24-29.867c15.36 11.947 32.427 21.76 50.347 29.44l11.093 78.933c1.28 7.253 7.68 12.8 14.933 12.8h119.467c7.253 0 13.653-5.547 14.933-12.373l11.093-78.933c18.347-7.68 34.987-17.493 50.347-29.44l74.24 29.867c6.827 2.56 14.507 0 18.347-6.4l59.733-103.253c3.84-6.4 2.133-14.507-3.413-19.2l-63.147-49.493c1.28-9.813 2.133-19.627 2.133-29.44z" />
109<glyph unicode="&#xe663;" d="M597.333 426.667c0 46.933-38.4 85.333-85.333 85.333s-85.333-38.4-85.333-85.333 38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333zM512 810.667c-212.053 0-384-171.947-384-384h-128l170.667-170.667 170.667 170.667h-128c0 165.12 133.547 298.667 298.667 298.667s298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667c-64.427 0-124.16 20.907-173.227 55.467l-60.587-61.44c64.853-49.493 145.92-79.36 233.813-79.36 212.053 0 384 171.947 384 384s-171.947 384-384 384z" />
110<glyph unicode="&#xe664;" d="M469.333-85.333h85.333v85.333h-85.333v-85.333zM298.667-85.333h85.333v85.333h-85.333v-85.333zM640-85.333h85.333v85.333h-85.333v-85.333zM755.627 695.040l-243.627 243.627h-42.667v-323.84l-195.84 195.84-60.16-60.16 238.507-238.507-238.507-238.507 60.16-60.16 195.84 195.84v-323.84h42.667l243.627 243.627-183.467 183.040 183.467 183.040zM554.667 775.254l80.213-80.213-80.213-80.213v160.427zM634.88 328.96l-80.213-80.213v160.427l80.213-80.213z" />
111<glyph unicode="&#xe665;" d="M298.667-85.333h85.333v85.333h-85.333v-85.333zM469.333-85.333h85.333v85.333h-85.333v-85.333zM640-85.333h85.333v85.333h-85.333v-85.333zM682.667 938.24l-341.333 0.427c-46.933 0-85.333-38.4-85.333-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h341.333c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 84.907-85.333 84.907zM682.667 256h-341.333v512h341.333v-512z" />
112<glyph unicode="&#xe666;" d="M896 810.667h-768c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 127.574h-768v598.187h768v-598.187zM341.333 256h106.667l64-64 64 64h106.667v106.667l64 64-64 64v106.667h-106.667l-64 64-64-64h-106.667v-106.667l-64-64 64-64v-106.667zM512 554.667c70.827 0 128-57.173 128-128s-57.173-128-128-128v256z" />
113<glyph unicode="&#xe667;" d="M331.52 650.24l-65.707 54.613-230.827-278.187 230.827-278.187 65.707 54.613-185.6 223.573 185.6 223.573zM298.667 384h85.333v85.333h-85.333v-85.333zM725.333 469.334h-85.333v-85.333h85.333v85.333zM469.333 384h85.333v85.333h-85.333v-85.333zM758.187 704.854l-65.707-54.613 185.6-223.573-185.6-223.573 65.707-54.613 230.827 278.187-230.827 278.187z" />
114<glyph unicode="&#xe668;" d="M512 725.334c-165.12 0-298.667-133.547-298.667-298.667h85.333c0 117.76 95.573 213.333 213.333 213.333s213.333-95.573 213.333-213.333h85.333c0 165.12-133.547 298.667-298.667 298.667zM554.667 328.96c37.547 16.64 64 53.76 64 97.707 0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667c0-43.52 26.453-81.067 64-97.707v-140.8l-145.493-145.493 60.16-60.16 128 128 128-128 60.16 60.16-145.493 145.493v140.8zM512 896c-258.987 0-469.333-210.347-469.333-469.333h85.333c0 212.053 171.947 384 384 384s384-171.947 384-384h85.333c0 258.987-210.347 469.333-469.333 469.333z" />
115<glyph unicode="&#xe669;" d="M213.333 853.334c0 23.467-19.2 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333v170.667zM384 256c0-55.467 35.84-102.4 85.333-120.32v-178.347h85.333v178.347c49.493 17.493 85.333 64.427 85.333 120.32v85.333h-256v-85.333zM42.667 256c0-55.467 35.84-102.4 85.333-120.32v-178.347h85.333v178.347c49.493 17.92 85.333 64.853 85.333 120.32v85.333h-256v-85.333zM896 682.667v170.667c0 23.467-19.2 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333zM554.667 853.334c0 23.467-19.2 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333v170.667zM725.333 256c0-55.467 35.84-102.4 85.333-120.32v-178.347h85.333v178.347c49.493 17.493 85.333 64.427 85.333 120.32v85.333h-256v-85.333z" />
116<glyph unicode="&#xe66a;" d="M213.333 853.334c0 23.467-19.2 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333v170.667zM384 256c0-55.467 35.84-102.4 85.333-120.32v-178.347h85.333v178.347c49.493 17.493 85.333 64.427 85.333 120.32v85.333h-256v-85.333zM42.667 256c0-55.467 35.84-102.4 85.333-120.32v-178.347h85.333v178.347c49.493 17.92 85.333 64.853 85.333 120.32v85.333h-256v-85.333zM896 682.667v170.667c0 23.467-19.2 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333zM554.667 853.334c0 23.467-19.2 42.667-42.667 42.667s-42.667-19.2-42.667-42.667v-170.667h-85.333v-256h256v256h-85.333v170.667zM725.333 256c0-55.467 35.84-102.4 85.333-120.32v-178.347h85.333v178.347c49.493 17.493 85.333 64.427 85.333 120.32v85.333h-256v-85.333z" />
117<glyph unicode="&#xe66b;" d="M768 640v128c0 46.933-38.4 85.333-85.333 85.333h-341.333c-46.933 0-85.333-38.4-85.333-85.333v-128h-42.667v-256l128-256v-128h341.333v128l128 256v256h-42.667zM341.333 768h341.333v-128h-85.333v85.333h-42.667v-85.333h-85.333v85.333h-42.667v-85.333h-85.333v128z" />
118<glyph unicode="&#xe66c;" d="M341.333 448c0 35.413-28.587 64-64 64s-64-28.587-64-64 28.587-64 64-64 64 28.587 64 64zM640 661.334c0 35.413-28.587 64-64 64h-128c-35.413 0-64-28.587-64-64s28.587-64 64-64h128c35.413 0 64 28.587 64 64zM362.667 298.667c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM512 896c-258.987 0-469.333-210.347-469.333-469.333s210.347-469.333 469.333-469.333 469.333 210.347 469.333 469.333-210.347 469.333-469.333 469.333zM512 42.667c-211.627 0-384 172.373-384 384s172.373 384 384 384 384-172.373 384-384-172.373-384-384-384zM746.667 512c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM661.333 298.667c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64z" />
119<glyph unicode="&#xe66d;" d="M512.427 704l-85.76-106.667h170.667l-84.907 106.667zM768 512v-170.667l106.667 84.907-106.667 85.76zM256 512l-106.667-85.76 106.667-84.907v170.667zM597.333 256h-170.667l85.76-106.667 84.907 106.667zM896 810.667h-768c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 127.574h-768v598.187h768v-598.187z" />
120<glyph unicode="&#xe66e;" d="M554.667 554.667h-85.333v-85.333h85.333v85.333zM725.333 554.667h-85.333v-85.333h85.333v85.333zM853.333 277.334c-53.333 0-104.533 8.533-152.32 24.32-14.933 4.693-31.573 1.28-43.52-10.24l-93.867-93.867c-120.747 61.44-219.733 160-281.173 280.747l93.867 94.293c11.947 11.52 15.36 28.16 10.667 43.093-15.787 47.787-24.32 98.987-24.32 152.32 0 23.467-19.2 42.667-42.667 42.667h-149.333c-23.467 0-42.667-19.2-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.467 0 42.667 19.2 42.667 42.667v149.333c0 23.467-19.2 42.667-42.667 42.667zM810.667 554.667v-85.333h85.333v85.333h-85.333z" />
121<glyph unicode="&#xe66f;" d="M298.667-85.333h85.333v85.333h-85.333v-85.333zM469.333-85.333h85.333v85.333h-85.333v-85.333zM554.667 853.334h-85.333v-426.667h85.333v426.667zM706.56 749.227l-61.867-61.867c73.813-44.8 123.307-125.44 123.307-218.027 0-141.227-114.773-256-256-256s-256 114.773-256 256c0 92.587 49.493 173.227 122.88 218.453l-61.44 61.44c-88.747-61.44-146.773-163.84-146.773-279.893 0-188.587 152.747-341.333 341.333-341.333s341.333 152.747 341.333 341.333c0 116.053-58.027 218.453-146.773 279.893zM640-85.333h85.333v85.333h-85.333v-85.333z" />
122<glyph unicode="&#xe670;" d="M640 554.667h-256c-23.467 0-42.667-19.2-42.667-42.667v-512c0-23.467 19.2-42.667 42.667-42.667h256c23.467 0 42.667 19.2 42.667 42.667v512c0 23.467-19.2 42.667-42.667 42.667zM512 298.667c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333zM300.8 680.534l60.16-60.16c38.827 38.4 92.16 62.293 151.040 62.293s112.213-23.893 151.040-62.293l60.16 60.16c-54.187 54.187-128.853 87.467-211.2 87.467s-157.013-33.28-211.2-87.467zM512 938.667c-129.707 0-247.040-52.48-331.947-137.387l60.16-60.16c69.547 69.12 165.547 112.213 271.787 112.213s202.24-43.093 271.36-112.64l60.16 60.16c-84.48 85.333-201.813 137.813-331.52 137.813z" />
123<glyph unicode="&#xe671;" d="M298.667-85.333h85.333v85.333h-85.333v-85.333zM512 384c70.827 0 127.573 57.173 127.573 128l0.427 256c0 70.827-57.173 128-128 128s-128-57.173-128-128v-256c0-70.827 57.173-128 128-128zM469.333-85.333h85.333v85.333h-85.333v-85.333zM640-85.333h85.333v85.333h-85.333v-85.333zM810.667 512h-72.533c0-128-108.373-217.6-226.133-217.6s-226.133 89.6-226.133 217.6h-72.533c0-145.493 116.053-265.813 256-286.72v-139.947h85.333v139.947c139.947 20.907 256 141.227 256 286.72z" />
124<glyph unicode="&#xe672;" d="M829.013 384.854c1.707 13.653 2.987 27.307 2.987 41.813s-1.28 28.16-2.987 41.813l90.027 70.4c8.107 6.4 10.24 17.92 5.12 27.307l-85.333 147.627c-5.12 9.387-16.64 12.8-26.027 9.387l-106.24-42.667c-22.187 17.067-46.080 31.147-72.107 41.813l-16.213 113.067c-1.28 10.24-10.24 17.92-20.907 17.92h-170.667c-10.667 0-19.627-7.68-20.907-17.92l-16.213-113.067c-26.027-10.667-49.92-25.173-72.107-41.813l-106.24 42.667c-9.813 3.84-20.907 0-26.027-9.387l-85.333-147.627c-5.547-9.387-2.987-20.907 5.12-27.307l90.027-70.4c-1.707-13.653-2.987-27.733-2.987-41.813s1.28-28.16 2.987-41.813l-90.027-70.4c-8.107-6.4-10.24-17.92-5.12-27.307l85.333-147.627c5.12-9.387 16.64-12.8 26.027-9.387l106.24 42.667c22.187-17.067 46.080-31.147 72.107-41.813l16.213-113.067c1.28-10.24 10.24-17.92 20.907-17.92h170.667c10.667 0 19.627 7.68 20.907 17.92l16.213 113.067c26.027 10.667 49.92 25.173 72.107 41.813l106.24-42.667c9.813-3.84 20.907 0 26.027 9.387l85.333 147.627c5.12 9.387 2.987 20.907-5.12 27.307l-90.027 70.4zM512 277.334c-82.347 0-149.333 66.987-149.333 149.333s66.987 149.333 149.333 149.333 149.333-66.987 149.333-149.333-66.987-149.333-149.333-149.333z" />
125<glyph unicode="&#xe673;" d="M128 554.667h-85.333v-469.333c0-47.36 37.973-85.333 85.333-85.333h597.333c47.36 0 85.333 37.973 85.333 85.333h-682.667v469.333zM768 725.334v85.333c0 47.36-37.973 85.333-85.333 85.333h-170.667c-47.36 0-85.333-37.973-85.333-85.333v-85.333h-213.333v-469.333c0-47.36 37.973-85.333 85.333-85.333h597.333c47.36 0 85.333 37.973 85.333 85.333v469.333h-213.333zM512 810.667h170.667v-85.333h-170.667v85.333zM512 298.667v298.667l234.667-128-234.667-170.667z" />
126<glyph unicode="&#xe674;" d="M682.667 682.667v85.333c0 47.36-37.973 85.333-85.333 85.333h-170.667c-47.36 0-85.333-37.973-85.333-85.333v-85.333h-256v-554.667c0-47.36 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 37.973 85.333 85.333v554.667h-256zM426.667 768h170.667v-85.333h-170.667v85.333zM384 170.667v384l320-170.667-320-213.333z" />
127<glyph unicode="&#xe675;" d="M734.293 554.667l-186.88 279.893c-8.107 11.947-21.76 17.92-35.413 17.92s-27.307-5.973-35.413-18.347l-186.88-279.467h-204.373c-23.467 0-42.667-19.2-42.667-42.667 0-3.84 0.427-7.68 1.707-11.52l108.373-395.52c9.813-35.84 42.667-62.293 81.92-62.293h554.667c39.253 0 72.107 26.453 82.347 62.293l108.373 395.52 1.28 11.52c0 23.467-19.2 42.667-42.667 42.667h-204.373zM384 554.667l128 187.733 128-187.733h-256zM512 213.334c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333z" />
128<glyph unicode="&#xe676;" d="M298.667 170.667c-46.933 0-84.907-38.4-84.907-85.333s37.973-85.333 84.907-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM42.667 853.334v-85.333h85.333l153.6-323.84-57.6-104.533c-6.827-11.947-10.667-26.027-10.667-40.96 0-46.933 38.4-85.333 85.333-85.333h512v85.333h-494.080c-5.973 0-10.667 4.693-10.667 10.667l1.28 5.12 38.4 69.547h317.867c32 0 60.16 17.493 74.667 43.947l152.747 276.907c3.413 5.973 5.12 13.227 5.12 20.48 0 23.467-19.2 42.667-42.667 42.667h-631.040l-40.107 85.333h-139.52zM725.333 170.667c-46.933 0-84.907-38.4-84.907-85.333s37.973-85.333 84.907-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z" />
129<glyph unicode="&#xe677;" d="M853.333 853.334h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-768 170.667 170.667h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM341.333 341.334h-85.333v85.333h85.333v-85.333zM341.333 469.334h-85.333v85.333h85.333v-85.333zM341.333 597.334h-85.333v85.333h85.333v-85.333zM640 341.334h-213.333v85.333h213.333v-85.333zM768 469.334h-341.333v85.333h341.333v-85.333zM768 597.334h-341.333v85.333h341.333v-85.333z" />
130<glyph unicode="&#xe678;" d="M531.2 256h89.173l-218.027 554.667h-79.36l-218.027-554.667h89.173l47.787 128h240.64l48.64-128zM274.347 469.334l88.32 235.52 88.32-235.52h-176.64zM921.173 444.16l-345.173-345.173-156.587 157.013-60.16-60.16 217.173-217.173 404.907 405.333-60.16 60.16z" />
131<glyph unicode="&#xe679;" d="M512 328.534l158.293-115.2-60.587 186.027 158.293 112.64h-194.133l-61.867 192-61.867-192h-194.133l158.293-112.64-60.587-186.027z" />
132<glyph unicode="&#xe67a;" d="M511.573 853.334c-235.52 0-426.24-191.147-426.24-426.667s190.72-426.667 426.24-426.667c235.947 0 427.093 191.147 427.093 426.667s-191.147 426.667-427.093 426.667zM692.48 170.667l-180.48 108.8-180.48-108.8 47.787 205.227-159.147 137.813 209.92 17.92 81.92 193.707 81.92-193.28 209.92-17.92-159.147-137.813 47.787-205.653z" />
133<glyph unicode="&#xe67b;" d="M853.333 768h-682.667v-85.333h682.667v85.333zM896 341.334v85.333l-42.667 213.333h-682.667l-42.667-213.333v-85.333h42.667v-256h426.667v256h170.667v-256h85.333v256h42.667zM512 170.667h-256v170.667h256v-170.667z" />
134<glyph unicode="&#xe67c;" d="M597.333 213.334h-426.667v-85.333h426.667v85.333zM853.333 554.667h-682.667v-85.333h682.667v85.333zM170.667 298.667h682.667v85.333h-682.667v-85.333zM170.667 725.334v-85.333h682.667v85.333h-682.667z" />
135<glyph unicode="&#xe67d;" d="M704 426.667c58.88 0 106.24 47.787 106.24 106.667s-47.36 106.667-106.24 106.667c-58.88 0-106.667-47.787-106.667-106.667s47.787-106.667 106.667-106.667zM384 469.334c70.827 0 127.573 57.173 127.573 128s-56.747 128-127.573 128c-70.827 0-128-57.173-128-128s57.173-128 128-128zM704 341.334c-78.080 0-234.667-39.253-234.667-117.333v-96h469.333v96c0 78.080-156.587 117.333-234.667 117.333zM384 384c-99.413 0-298.667-49.92-298.667-149.333v-106.667h298.667v96c0 36.267 14.080 99.84 101.12 148.053-37.12 7.68-72.96 11.947-101.12 11.947z" />
136<glyph unicode="&#xe67e;" d="M298.24 469.334l-170.24-170.667 170.24-170.667v128h299.093v85.333h-299.093v128zM896 554.667l-170.24 170.667v-128h-299.093v-85.333h299.093v-128l170.24 170.667z" />
137<glyph unicode="&#xe67f;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM277.333 554.667l149.333 149.333 149.333-149.333h-106.667v-170.667h-85.333v170.667h-106.667zM746.667 298.667l-149.333-149.333-149.333 149.333h106.667v170.667h85.333v-170.667h106.667z" />
138<glyph unicode="&#xe680;" d="M682.667 212.907v299.093h-85.333v-299.093h-128l170.667-170.24 170.667 170.24h-128zM384 810.667l-170.667-170.24h128v-299.093h85.333v299.093h128l-170.667 170.24z" />
139<glyph unicode="&#xe681;" d="M512 234.667l170.667 170.667h-128v384h-85.333v-384h-128l170.667-170.667zM896 789.334h-256v-84.907h256v-598.613h-768v598.613h256v84.907h-256c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333z" />
140<glyph unicode="&#xe682;" d="M42.667 554.667h85.333v85.333h-85.333v-85.333zM42.667 384h85.333v85.333h-85.333v-85.333zM42.667 725.334h85.333v85.333c-46.933 0-85.333-38.4-85.333-85.333zM384 42.667h85.333v85.333h-85.333v-85.333zM42.667 213.334h85.333v85.333h-85.333v-85.333zM128 42.667v85.333h-85.333c0-46.933 38.4-85.333 85.333-85.333zM896 810.667h-341.333v-256h426.667v170.667c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h85.333v85.333h-85.333v-85.333zM384 725.334h85.333v85.333h-85.333v-85.333zM213.333 42.667h85.333v85.333h-85.333v-85.333zM213.333 725.334h85.333v85.333h-85.333v-85.333zM896 42.667c46.933 0 85.333 38.4 85.333 85.333h-85.333v-85.333zM896 384h85.333v85.333h-85.333v-85.333zM554.667 42.667h85.333v85.333h-85.333v-85.333zM725.333 42.667h85.333v85.333h-85.333v-85.333z" />
141<glyph unicode="&#xe683;" d="M896 810.667h-768c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 128h-768v597.333h426.667v-170.667h341.333v-426.667z" />
142<glyph unicode="&#xe684;" d="M768 810.667v-85.333h-85.333v85.333h-341.333v-85.333h-85.333v85.333h-85.333v-768h85.333v85.333h85.333v-85.333h341.333v85.333h85.333v-85.333h85.333v768h-85.333zM341.333 213.334h-85.333v85.333h85.333v-85.333zM341.333 384h-85.333v85.333h85.333v-85.333zM341.333 554.667h-85.333v85.333h85.333v-85.333zM768 213.334h-85.333v85.333h85.333v-85.333zM768 384h-85.333v85.333h85.333v-85.333zM768 554.667h-85.333v85.333h85.333v-85.333z" />
143<glyph unicode="&#xe685;" d="M640 810.667h-384c-35.413 0-65.707-21.333-78.507-52.053l-128.853-300.8c-3.84-9.813-5.973-20.053-5.973-31.147v-81.493l0.427-0.427-0.427-3.413c0-46.933 38.4-85.333 85.333-85.333h269.227l-40.533-194.987-1.28-13.653c0-17.493 7.253-33.707 18.773-45.227l45.227-44.8 281.173 281.173c15.36 15.36 24.747 36.693 24.747 60.16v426.667c0 46.933-38.4 85.333-85.333 85.333zM810.667 810.667v-512h170.667v512h-170.667z" />
144<glyph unicode="&#xe686;" d="M42.667 42.667h170.667v512h-170.667v-512zM981.333 512c0 46.933-38.4 85.333-85.333 85.333h-269.227l40.533 194.987 1.28 13.653c0 17.493-7.253 33.707-18.773 45.227l-45.227 44.8-280.747-281.173c-15.787-15.36-25.173-36.693-25.173-60.16v-426.667c0-46.933 38.4-85.333 85.333-85.333h384c35.413 0 65.707 21.333 78.507 52.053l128.853 300.8c3.84 9.813 5.973 20.053 5.973 31.147v81.493l-0.427 0.427 0.427 3.413z" />
145<glyph unicode="&#xe687;" d="M512 682.667c0 23.467-19.2 42.667-42.667 42.667h-221.013l28.16 135.68 0.853 9.813c0 13.227-5.547 25.173-14.080 34.133l-33.707 33.707-210.773-210.773c-11.52-11.52-18.773-27.733-18.773-45.227v-277.333c0-35.413 28.587-64 64-64h288c26.453 0 49.067 16.213 58.88 38.827l96.427 225.707c2.987 7.253 4.693 15.36 4.693 23.467v53.333zM960 512h-288c-26.453 0-49.067-16.213-58.88-38.827l-96.427-225.707c-2.987-7.253-4.693-15.36-4.693-23.467v-53.333c0-23.467 19.2-42.667 42.667-42.667h221.013l-28.16-135.68-0.853-10.24c0-13.227 5.547-25.173 14.080-34.133l33.707-33.28 210.773 210.773c11.52 11.52 18.773 27.733 18.773 45.227v277.333c0 35.413-28.587 64-64 64z" />
146<glyph unicode="&#xe688;" d="M128 554.667h597.333v85.333h-597.333v-85.333zM128 384h597.333v85.333h-597.333v-85.333zM128 213.334h597.333v85.333h-597.333v-85.333zM810.667 213.334h85.333v85.333h-85.333v-85.333zM810.667 640v-85.333h85.333v85.333h-85.333zM810.667 384h85.333v85.333h-85.333v-85.333z" />
147<glyph unicode="&#xe689;" d="M810.667 810.667h-42.667v85.333h-85.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.36 0-84.907-38.4-84.907-85.333l-0.427-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 128h-597.333v469.333h597.333v-469.333zM298.667 512h213.333v-213.333h-213.333z" />
148<glyph unicode="&#xe68a;" d="M813.653 728.32l-60.16-60.16c61.44-61.867 99.84-147.2 99.84-241.493 0-188.587-152.747-341.333-341.333-341.333s-341.333 152.747-341.333 341.333c0 174.080 130.133 317.44 298.667 338.347v-86.187c-121.173-20.48-213.333-125.44-213.333-252.16 0-141.227 114.773-256 256-256s256 114.773 256 256c0 70.827-28.587 134.827-75.093 180.907l-60.16-60.16c30.72-31.147 49.92-73.813 49.92-120.747 0-94.293-76.373-170.667-170.667-170.667s-170.667 76.373-170.667 170.667c0 79.36 54.613 145.493 128 164.693v-91.307c-25.6-14.933-42.667-41.813-42.667-73.387 0-46.933 38.4-85.333 85.333-85.333s85.333 38.4 85.333 85.333c0 31.573-17.067 58.88-42.667 73.387v353.28h-42.667c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667c0 117.76-47.787 224.427-125.013 301.653z" />
149<glyph unicode="&#xe68b;" d="M549.12 295.68l-108.373 107.093 1.28 1.28c74.24 82.773 127.147 177.92 158.293 278.613h125.013v85.333h-298.667v85.333h-85.333v-85.333h-298.667v-84.907h476.587c-28.587-82.347-73.813-160.427-135.253-228.693-39.68 43.947-72.533 92.16-98.56 142.933h-85.333c31.147-69.547 73.813-135.253 127.147-194.56l-217.173-214.187 60.587-60.587 213.333 213.333 132.693-132.693 32.427 87.040zM789.333 512h-85.333l-192-512h85.333l47.787 128h202.667l48.213-128h85.333l-192 512zM677.547 213.334l69.12 184.747 69.12-184.747h-138.24z" />
150<glyph unicode="&#xe68c;" d="M682.667 170.667l97.707 97.707-208.213 208.213-170.667-170.667-316.16 316.587 60.16 60.16 256-256 170.667 170.667 268.8-268.373 97.707 97.707v-256z" />
151<glyph unicode="&#xe68d;" d="M938.667 426.667l-170.667 170.667v-128h-640v-85.333h640v-128z" />
152<glyph unicode="&#xe68e;" d="M682.667 682.667l97.707-97.707-208.213-208.213-170.667 170.667-316.16-316.587 60.16-60.16 256 256 170.667-170.667 268.8 268.373 97.707-97.707v256z" />
153<glyph unicode="&#xe68f;" d="M725.333 810.667h-426.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-682.667 298.667 128 298.667-128v682.667c0 46.933-38.4 85.333-85.333 85.333zM725.333 170.667l-213.333 93.013-213.333-93.013v554.667h426.667v-554.667z" />
154<glyph unicode="&#xe690;" d="M725.333 810.667h-426.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-682.667 298.667 128 298.667-128v682.667c0 46.933-38.4 85.333-85.333 85.333z" />
155<glyph unicode="&#xe691;" d="M512 896l-384-170.667v-256c0-236.8 163.84-458.24 384-512 220.16 53.76 384 275.2 384 512v256l-384 170.667zM426.667 213.334l-170.667 170.667 60.16 60.16 110.507-110.080 281.173 281.173 60.16-60.587-341.333-341.333z" />
156<glyph unicode="&#xe692;" d="M853.333 384h-725.333c-23.467 0-42.667-19.2-42.667-42.667v-256c0-23.467 19.2-42.667 42.667-42.667h725.333c23.467 0 42.667 19.2 42.667 42.667v256c0 23.467-19.2 42.667-42.667 42.667zM853.333 810.667h-725.333c-23.467 0-42.667-19.2-42.667-42.667v-256c0-23.467 19.2-42.667 42.667-42.667h725.333c23.467 0 42.667 19.2 42.667 42.667v256c0 23.467-19.2 42.667-42.667 42.667z" />
157<glyph unicode="&#xe693;" d="M170.667 170.667h128v554.667h-128v-554.667zM768 725.334v-554.667h128v554.667h-128zM341.333 170.667h384v554.667h-384v-554.667z" />
158<glyph unicode="&#xe694;" d="M298.667 128h426.667v640h-426.667v-640zM85.333 213.334h170.667v469.333h-170.667v-469.333zM768 682.667v-469.333h170.667v469.333h-170.667z" />
159<glyph unicode="&#xe695;" d="M426.667 170.667h213.333v554.667h-213.333v-554.667zM170.667 170.667h213.333v554.667h-213.333v-554.667zM682.667 725.334v-554.667h213.333v554.667h-213.333z" />
160<glyph unicode="&#xe696;" d="M85.333 42.667h810.667v128h-810.667v-128zM853.333 597.334h-725.333c-23.467 0-42.667-19.2-42.667-42.667v-256c0-23.467 19.2-42.667 42.667-42.667h725.333c23.467 0 42.667 19.2 42.667 42.667v256c0 23.467-19.2 42.667-42.667 42.667zM85.333 810.667v-128h810.667v128h-810.667z" />
161<glyph unicode="&#xe697;" d="M170.667 298.667h725.333v85.333h-725.333v-85.333zM170.667 128h725.333v85.333h-725.333v-85.333zM170.667 469.334h725.333v85.333h-725.333v-85.333zM170.667 725.334v-85.333h725.333v85.333h-725.333z" />
162<glyph unicode="&#xe698;" d="M170.667 341.334h170.667v170.667h-170.667v-170.667zM170.667 128h170.667v170.667h-170.667v-170.667zM170.667 554.667h170.667v170.667h-170.667v-170.667zM384 341.334h512v170.667h-512v-170.667zM384 128h512v170.667h-512v-170.667zM384 725.334v-170.667h512v170.667h-512z" />
163<glyph unicode="&#xe699;" d="M170.667 469.334h213.333v256h-213.333v-256zM170.667 170.667h213.333v256h-213.333v-256zM426.667 170.667h213.333v256h-213.333v-256zM682.667 170.667h213.333v256h-213.333v-256zM426.667 469.334h213.333v256h-213.333v-256zM682.667 725.334v-256h213.333v256h-213.333z" />
164<glyph unicode="&#xe69a;" d="M426.667 170.667h213.333v256h-213.333v-256zM170.667 170.667h213.333v554.667h-213.333v-554.667zM682.667 170.667h213.333v256h-213.333v-256zM426.667 725.334v-256h469.333v256h-469.333z" />
165<glyph unicode="&#xe69b;" d="M170.667 170.667h725.333v256h-725.333v-256zM170.667 725.334v-256h725.333v256h-725.333z" />
166<glyph unicode="&#xe69c;" d="M256 725.334h-128c-23.467 0-42.667-19.2-42.667-42.667v-512c0-23.467 19.2-42.667 42.667-42.667h128c23.467 0 42.667 19.2 42.667 42.667v512c0 23.467-19.2 42.667-42.667 42.667zM853.333 725.334h-128c-23.467 0-42.667-19.2-42.667-42.667v-512c0-23.467 19.2-42.667 42.667-42.667h128c23.467 0 42.667 19.2 42.667 42.667v512c0 23.467-19.2 42.667-42.667 42.667zM554.667 725.334h-128c-23.467 0-42.667-19.2-42.667-42.667v-512c0-23.467 19.2-42.667 42.667-42.667h128c23.467 0 42.667 19.2 42.667 42.667v512c0 23.467-19.2 42.667-42.667 42.667z" />
167<glyph unicode="&#xe69d;" d="M512 640c117.76 0 213.333-95.573 213.333-213.333 0-27.733-5.547-53.76-15.36-78.080l124.587-124.587c64.427 53.76 115.2 123.307 146.347 202.667-73.813 187.307-256 320-469.333 320-59.733 0-116.907-10.667-169.813-29.867l92.16-92.16c24.32 9.813 50.347 15.36 78.080 15.36zM85.333 756.48l116.907-116.907c-70.827-55.040-126.293-128.427-159.573-212.907 73.813-187.307 256-320 469.333-320 66.133 0 129.28 12.8 186.88 35.84l17.92-17.92 125.013-124.587 54.187 54.187-756.48 756.48-54.187-54.187zM321.28 520.534l66.133-66.133c-2.133-8.96-3.413-18.347-3.413-27.733 0-70.827 57.173-128 128-128 9.387 0 18.773 1.28 27.733 3.413l66.133-66.133c-28.587-14.080-60.16-22.613-93.867-22.613-117.76 0-213.333 95.573-213.333 213.333 0 33.707 8.533 65.28 22.613 93.867zM505.173 553.814l134.4-134.4 0.853 6.827c0 70.827-57.173 128-128 128l-7.253-0.427z" />
168<glyph unicode="&#xe69e;" d="M512 746.667c-213.333 0-395.52-132.693-469.333-320 73.813-187.307 256-320 469.333-320s395.52 132.693 469.333 320c-73.813 187.307-256 320-469.333 320zM512 213.334c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333zM512 554.667c-70.827 0-128-57.173-128-128s57.173-128 128-128 128 57.173 128 128-57.173 128-128 128z" />
169<glyph unicode="&#xe69f;" d="M853.333 682.667h-93.013c4.693 13.227 7.68 27.733 7.68 42.667 0 70.827-57.173 128-128 128-44.8 0-83.627-23.040-106.667-57.6l-21.333-28.587-21.333 29.013c-23.040 34.133-61.867 57.173-106.667 57.173-70.827 0-128-57.173-128-128 0-14.933 2.987-29.44 7.68-42.667h-93.013c-47.36 0-84.907-37.973-84.907-85.333l-0.427-469.333c0-47.36 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 37.973 85.333 85.333v469.333c0 47.36-37.973 85.333-85.333 85.333zM640 768c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM384 768c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM853.333 128h-682.667v85.333h682.667v-85.333zM853.333 341.334h-682.667v256h216.747l-88.747-120.747 69.12-49.92 144.213 196.267 144.213-196.267 69.12 49.92-88.747 120.747h216.747v-256z" />
170<glyph unicode="&#xe6a0;" d="M853.333 853.334h-682.667c-47.36 0-85.333-37.973-85.333-85.333v-469.333c0-47.36 37.973-85.333 85.333-85.333h170.667v-213.333l170.667 85.333 170.667-85.333v213.333h170.667c47.36 0 85.333 37.973 85.333 85.333v469.333c0 47.36-37.973 85.333-85.333 85.333zM853.333 298.667h-682.667v85.333h682.667v-85.333zM853.333 512h-682.667v256h682.667v-256z" />
171<glyph unicode="&#xe6a1;" d="M853.333 682.667h-128v85.333c0 47.36-37.973 85.333-85.333 85.333h-256c-47.36 0-85.333-37.973-85.333-85.333v-85.333h-128c-47.36 0-85.333-37.973-85.333-85.333v-469.333c0-47.36 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 37.973 85.333 85.333v469.333c0 47.36-37.973 85.333-85.333 85.333zM384 768h256v-85.333h-256v85.333zM853.333 128h-682.667v85.333h682.667v-85.333zM853.333 341.334h-682.667v256h128v-85.333h85.333v85.333h256v-85.333h85.333v85.333h128v-256z" />
172<glyph unicode="&#xe6a2;" d="M853.333 682.667h-170.667v85.333c0 47.36-37.973 85.333-85.333 85.333h-170.667c-47.36 0-85.333-37.973-85.333-85.333v-85.333h-170.667c-47.36 0-84.907-37.973-84.907-85.333l-0.427-469.333c0-47.36 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 37.973 85.333 85.333v469.333c0 47.36-37.973 85.333-85.333 85.333zM597.333 682.667h-170.667v85.333h170.667v-85.333z" />
173<glyph unicode="&#xe6a3;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM554.667 213.334h-85.333v85.333h85.333v-85.333zM554.667 384h-85.333v256h85.333v-256z" />
174<glyph unicode="&#xe6a4;" d="M42.667 42.667h938.667l-469.333 810.667-469.333-810.667zM554.667 170.667h-85.333v85.333h85.333v-85.333zM554.667 341.334h-85.333v170.667h85.333v-170.667z" />
175<glyph unicode="&#xe6a5;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 234.667c-106.24 0-192 85.76-192 192s85.76 192 192 192 192-85.76 192-192-85.76-192-192-192zM512 469.334c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667z" />
176<glyph unicode="&#xe6a6;" d="M810.667 768h-597.333c-47.36 0-85.333-38.4-85.333-85.333v-512c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM469.333 469.334h-64v21.333h-85.333v-128h85.333v21.333h64v-42.667c0-23.467-19.2-42.667-42.667-42.667h-128c-23.467 0-42.667 19.2-42.667 42.667v170.667c0 23.467 19.2 42.667 42.667 42.667h128c23.467 0 42.667-19.2 42.667-42.667v-42.667zM768 469.334h-64v21.333h-85.333v-128h85.333v21.333h64v-42.667c0-23.467-19.2-42.667-42.667-42.667h-128c-23.467 0-42.667 19.2-42.667 42.667v170.667c0 23.467 19.2 42.667 42.667 42.667h128c23.467 0 42.667-19.2 42.667-42.667v-42.667z" />
177<glyph unicode="&#xe6a7;" d="M426.667 85.334h170.667v682.667h-170.667v-682.667zM170.667 85.334h170.667v341.333h-170.667v-341.333zM682.667 554.667v-469.333h170.667v469.333h-170.667z" />
178<glyph unicode="&#xe6a8;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM640 554.667h-170.667v-85.333h170.667v-85.333h-170.667v-85.333h170.667v-85.333h-256v426.667h256v-85.333z" />
179<glyph unicode="&#xe6a9;" d="M170.667 170.667l362.667 256-362.667 256v-512zM554.667 682.667v-512l362.667 256-362.667 256z" />
180<glyph unicode="&#xe6aa;" d="M469.333 170.667v512l-362.667-256 362.667-256zM490.667 426.667l362.667-256v512l-362.667-256z" />
181<glyph unicode="&#xe6ab;" d="M640 618.667v234.667h-256v-234.667l128-128 128 128zM320 554.667h-234.667v-256h234.667l128 128-128 128zM384 234.667v-234.667h256v234.667l-128 128-128-128zM704 554.667l-128-128 128-128h234.667v256h-234.667z" />
182<glyph unicode="&#xe6ac;" d="M725.333 85.334c-12.373 0-23.893 2.56-32.427 6.4-30.293 15.787-51.627 37.547-72.96 101.547-21.76 66.56-62.72 97.707-101.973 128-33.707 26.027-68.693 52.907-98.987 107.947-22.613 40.96-34.987 85.76-34.987 125.44 0 119.467 93.867 213.333 213.333 213.333s213.333-93.867 213.333-213.333h85.333c0 167.68-130.987 298.667-298.667 298.667s-298.667-130.987-298.667-298.667c0-53.76 16.213-113.067 45.653-166.4 38.827-70.4 84.48-105.813 121.6-134.4 34.56-26.453 59.307-45.653 72.96-87.467 25.6-77.653 58.453-121.173 116.48-151.467 21.76-9.813 45.653-14.933 69.973-14.933 94.293 0 170.667 76.373 170.667 170.667h-85.333c0-46.933-38.4-85.333-85.333-85.333zM325.973 826.027l-60.587 60.587c-84.907-84.907-137.387-202.24-137.387-331.947s52.48-247.040 137.387-331.947l60.16 60.16c-69.12 69.547-112.213 165.547-112.213 271.787s43.093 202.24 112.64 271.36zM490.667 554.667c0-58.88 47.787-106.667 106.667-106.667s106.667 47.787 106.667 106.667-47.787 106.667-106.667 106.667-106.667-47.787-106.667-106.667z" />
183<glyph unicode="&#xe6ad;" d="M810.667 768h-597.333c-47.36 0-85.333-38.4-85.333-85.333v-512c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM469.333 298.667h-64v85.333h-85.333v-85.333h-64v256h64v-106.667h85.333v106.667h64v-256zM768 341.334c0-23.467-19.2-42.667-42.667-42.667h-32v-64h-64v64h-32c-23.467 0-42.667 19.2-42.667 42.667v170.667c0 23.467 19.2 42.667 42.667 42.667h128c23.467 0 42.667-19.2 42.667-42.667v-170.667zM618.667 362.667h85.333v128h-85.333v-128z" />
184<glyph unicode="&#xe6ae;" d="M512 768v128l-170.667-170.667 170.667-170.667v128c141.227 0 256-114.773 256-256 0-43.093-10.667-84.053-29.867-119.467l62.293-62.293c33.28 52.48 52.907 114.773 52.907 181.76 0 188.587-152.747 341.333-341.333 341.333zM512 170.667c-141.227 0-256 114.773-256 256 0 43.093 10.667 84.053 29.867 119.467l-62.293 62.293c-33.28-52.48-52.907-114.773-52.907-181.76 0-188.587 152.747-341.333 341.333-341.333v-128l170.667 170.667-170.667 170.667v-128z" />
185<glyph unicode="&#xe6af;" d="M512 341.334c70.827 0 127.573 57.173 127.573 128l0.427 256c0 70.827-57.173 128-128 128s-128-57.173-128-128v-256c0-70.827 57.173-128 128-128zM460.8 729.6c0 28.16 23.040 51.2 51.2 51.2s51.2-23.040 51.2-51.2l-0.427-264.533c0-28.16-22.613-51.2-50.773-51.2s-51.2 23.040-51.2 51.2v264.533zM738.133 469.334c0-128-108.373-217.6-226.133-217.6s-226.133 89.6-226.133 217.6h-72.533c0-145.493 116.053-265.813 256-286.72v-139.947h85.333v139.947c139.947 20.48 256 140.8 256 286.72h-72.533z" />
186<glyph unicode="&#xe6b0;" d="M810.667 469.334h-72.533c0-31.573-6.827-61.013-18.347-87.467l52.48-52.48c23.893 41.813 38.4 89.173 38.4 139.947zM639.147 462.080c0 2.56 0.853 4.693 0.853 7.253v256c0 70.827-57.173 128-128 128s-128-57.173-128-128v-7.68l255.147-255.573zM182.187 810.667l-54.187-54.187 256.427-256.427v-30.72c0-70.827 56.747-128 127.573-128 9.387 0 18.773 1.28 27.733 3.413l70.827-70.827c-30.293-14.080-64-22.187-98.56-22.187-117.76 0-226.133 89.6-226.133 217.6h-72.533c0-145.493 116.053-265.813 256-286.72v-139.947h85.333v139.947c38.827 5.547 75.52 19.2 108.373 38.4l178.773-178.347 54.187 54.187-713.813 713.813z" />
187<glyph unicode="&#xe6b1;" d="M512 341.334c70.827 0 127.573 57.173 127.573 128l0.427 256c0 70.827-57.173 128-128 128s-128-57.173-128-128v-256c0-70.827 57.173-128 128-128zM738.133 469.334c0-128-108.373-217.6-226.133-217.6s-226.133 89.6-226.133 217.6h-72.533c0-145.493 116.053-265.813 256-286.72v-139.947h85.333v139.947c139.947 20.48 256 140.8 256 286.72h-72.533z" />
188<glyph unicode="&#xe6b2;" d="M768 768l85.333-170.667h-128l-85.333 170.667h-85.333l85.333-170.667h-128l-85.333 170.667h-85.333l85.333-170.667h-128l-85.333 170.667h-42.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v597.333h-170.667z" />
189<glyph unicode="&#xe6b3;" d="M170.667 682.667h-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333v85.333h-597.333v597.333zM853.333 853.334h-512c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM810.667 469.334h-170.667v-170.667h-85.333v170.667h-170.667v85.333h170.667v170.667h85.333v-170.667h170.667v-85.333z" />
190<glyph unicode="&#xe6b4;" d="M170.667 682.667h-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333v85.333h-597.333v597.333zM853.333 853.334h-512c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM810.667 469.334h-426.667v85.333h426.667v-85.333zM640 298.667h-256v85.333h256v-85.333zM810.667 640h-426.667v85.333h426.667v-85.333z" />
191<glyph unicode="&#xe6b5;" d="M853.333 853.334h-512c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM768 640h-128v-234.667c0-58.88-47.787-106.667-106.667-106.667s-106.667 47.787-106.667 106.667 47.787 106.667 106.667 106.667c24.32 0 46.080-8.107 64-21.76v235.093h170.667v-85.333zM170.667 682.667h-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333v85.333h-597.333v597.333z" />
192<glyph unicode="&#xe6b6;" d="M981.333 426.667l-104.107 118.613 14.507 157.013-154.027 34.987-80.64 135.68-145.067-62.293-145.067 62.293-80.64-135.68-154.027-34.56 14.507-157.013-104.107-119.040 104.107-118.613-14.507-157.44 154.027-34.987 80.64-135.68 145.067 62.72 145.067-62.293 80.64 135.68 154.027 34.987-14.507 157.013 104.107 118.613zM554.667 213.334h-85.333v85.333h85.333v-85.333zM554.667 384h-85.333v256h85.333v-256z" />
193<glyph unicode="&#xe6b7;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333 0 78.933 26.88 151.467 72.107 209.067l478.293-478.293c-57.6-45.227-130.133-72.107-209.067-72.107zM781.227 217.6l-478.293 478.293c57.6 45.227 130.133 72.107 209.067 72.107 188.587 0 341.333-152.747 341.333-341.333 0-78.933-26.88-151.467-72.107-209.067z" />
194<glyph unicode="&#xe6b8;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM469.333 256h-85.333v341.333h85.333v-341.333zM640 256h-85.333v341.333h85.333v-341.333z" />
195<glyph unicode="&#xe6b9;" d="M384 256h85.333v341.333h-85.333v-341.333zM512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333zM554.667 256h85.333v341.333h-85.333v-341.333z" />
196<glyph unicode="&#xe6ba;" d="M256 128h170.667v597.333h-170.667v-597.333zM597.333 725.334v-597.333h170.667v597.333h-170.667z" />
197<glyph unicode="&#xe6bb;" d="M341.333 725.334v-597.333l469.333 298.667z" />
198<glyph unicode="&#xe6bc;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM426.667 234.667v384l256-192-256-192z" />
199<glyph unicode="&#xe6bd;" d="M426.667 234.667l256 192-256 192v-384zM512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
200<glyph unicode="&#xe6be;" d="M682.667 682.667v85.333c0 47.36-37.973 85.333-85.333 85.333h-170.667c-47.36 0-85.333-37.973-85.333-85.333v-85.333h-256v-554.667c0-47.36 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 37.973 85.333 85.333v554.667h-256zM426.667 768h170.667v-85.333h-170.667v85.333zM384 170.667v384l320-170.667-320-213.333z" />
201<glyph unicode="&#xe6bf;" d="M597.333 512h-512v-85.333h512v85.333zM597.333 682.667h-512v-85.333h512v85.333zM768 341.334v170.667h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667zM85.333 256h341.333v85.333h-341.333v-85.333z" />
202<glyph unicode="&#xe6c0;" d="M640 682.667h-512v-85.333h512v85.333zM640 512h-512v-85.333h512v85.333zM128 256h341.333v85.333h-341.333v-85.333zM725.333 682.667v-349.013c-13.227 4.693-27.733 7.68-42.667 7.68-70.827 0-128-57.173-128-128s57.173-128 128-128 128 57.173 128 128v384h128v85.333h-213.333z" />
203<glyph unicode="&#xe6c1;" d="M170.667 682.667h-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333v85.333h-597.333v597.333zM853.333 853.334h-512c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM810.667 469.334h-170.667v-170.667h-85.333v170.667h-170.667v85.333h170.667v170.667h85.333v-170.667h170.667v-85.333z" />
204<glyph unicode="&#xe6c2;" d="M138.24 676.267c-31.147-11.947-52.907-43.52-52.907-78.933v-512c0-46.933 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 38.4 85.333 85.333v512c0 47.36-37.973 85.333-85.333 85.333h-499.2l352.427 142.507-29.013 70.827-539.307-219.733zM298.667 85.334c-70.827 0-128 57.173-128 128s57.173 128 128 128 128-57.173 128-128-57.173-128-128-128zM853.333 426.667h-85.333v85.333h-85.333v-85.333h-512v170.667h682.667v-170.667z" />
205<glyph unicode="&#xe6c3;" d="M896 725.334v-597.333h85.333v597.333h-85.333zM725.333 128h85.333v597.333h-85.333v-597.333zM597.333 725.334h-512c-23.467 0-42.667-19.2-42.667-42.667v-512c0-23.467 19.2-42.667 42.667-42.667h512c23.467 0 42.667 19.2 42.667 42.667v512c0 23.467-19.2 42.667-42.667 42.667zM341.333 608c52.907 0 96-43.093 96-96s-43.093-96-96-96-96 43.093-96 96 43.093 96 96 96zM533.333 213.334h-384v32c0 64 128 96 192 96s192-32 192-96v-32z" />
206<glyph unicode="&#xe6c4;" d="M298.667 640h426.667v-128l170.667 170.667-170.667 170.667v-128h-512v-256h85.333v170.667zM725.333 213.334h-426.667v128l-170.667-170.667 170.667-170.667v128h512v256h-85.333v-170.667zM554.667 298.667v256h-42.667l-85.333-42.667v-42.667h64v-170.667h64z" />
207<glyph unicode="&#xe6c5;" d="M298.667 640h426.667v-128l170.667 170.667-170.667 170.667v-128h-512v-256h85.333v170.667zM725.333 213.334h-426.667v128l-170.667-170.667 170.667-170.667v128h512v256h-85.333v-170.667z" />
208<glyph unicode="&#xe6c6;" d="M512 725.334v170.667l-213.333-213.333 213.333-213.333v170.667c141.227 0 256-114.773 256-256s-114.773-256-256-256-256 114.773-256 256h-85.333c0-188.587 152.747-341.333 341.333-341.333s341.333 152.747 341.333 341.333-152.747 341.333-341.333 341.333z" />
209<glyph unicode="&#xe6c7;" d="M451.84 547.414l-221.013 220.587-60.16-60.16 220.587-220.587 60.587 60.16zM618.667 768l87.040-87.040-535.040-535.467 60.16-60.16 535.467 535.040 87.040-87.040v234.667h-234.667zM632.747 366.507l-60.16-60.16 133.547-133.547-87.467-87.467h234.667v234.667l-87.040-87.040-133.547 133.547z" />
210<glyph unicode="&#xe6c8;" d="M256 170.667l362.667 256-362.667 256v-512zM682.667 682.667v-512h85.333v512h-85.333z" />
211<glyph unicode="&#xe6c9;" d="M256 682.667h85.333v-512h-85.333zM405.333 426.667l362.667-256v512z" />
212<glyph unicode="&#xe6ca;" d="M336.213 794.027l-54.613 65.28-196.267-164.267 55.040-65.28 195.84 164.267zM938.667 694.614l-196.267 164.693-55.040-65.28 196.267-164.693 55.040 65.28zM512 768c-212.053 0-384-171.947-384-384s171.52-384 384-384c212.053 0 384 171.947 384 384s-171.947 384-384 384zM512 85.334c-165.12 0-298.667 133.547-298.667 298.667s133.547 298.667 298.667 298.667 298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667zM384 469.334h154.88l-154.88-179.2v-76.8h256v85.333h-154.88l154.88 179.2v76.8h-256v-85.333z" />
213<glyph unicode="&#xe6cb;" d="M256 682.667h512v-512h-512z" />
214<glyph unicode="&#xe6cc;" d="M853.333 768h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM170.667 426.667h170.667v-85.333h-170.667v85.333zM597.333 170.667h-426.667v85.333h426.667v-85.333zM853.333 170.667h-170.667v85.333h170.667v-85.333zM853.333 341.334h-426.667v85.333h426.667v-85.333z" />
215<glyph unicode="&#xe6cd;" d="M853.333 768h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM331.093 245.76l-60.16-60.16c-66.987 66.133-100.267 153.6-100.267 241.067s33.28 174.933 99.84 241.493l60.16-60.16c-49.493-50.347-74.667-115.627-74.667-181.333s25.173-130.987 75.093-180.907zM512 256c-94.293 0-170.667 76.373-170.667 170.667s76.373 170.667 170.667 170.667 170.667-76.373 170.667-170.667-76.373-170.667-170.667-170.667zM753.493 185.174l-60.16 60.16c49.493 50.347 74.667 115.627 74.667 181.333s-25.173 130.987-75.093 180.907l60.16 60.16c66.987-66.133 100.267-153.6 100.267-241.067s-33.28-174.933-99.84-241.493zM512 512c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z" />
216<glyph unicode="&#xe6ce;" d="M469.333 213.334c0-23.467 19.2-42.667 42.667-42.667s42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667zM469.333 810.667v-170.667h85.333v81.92c144.64-20.907 256-144.64 256-295.253 0-165.12-133.547-298.667-298.667-298.667s-298.667 133.547-298.667 298.667c0 71.68 25.173 137.387 67.413 188.587l231.253-231.253 60.16 60.16-290.133 290.133v-0.853c-93.44-69.973-154.027-180.907-154.027-306.773 0-212.053 171.52-384 384-384 212.053 0 384 171.947 384 384s-171.947 384-384 384h-42.667zM768 426.667c0 23.467-19.2 42.667-42.667 42.667s-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667zM256 426.667c0-23.467 19.2-42.667 42.667-42.667s42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667z" />
217<glyph unicode="&#xe6cf;" d="M170.667 682.667h-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333v85.333h-597.333v597.333zM853.333 853.334h-512c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM512 320v384l256-192-256-192z" />
218<glyph unicode="&#xe6d0;" d="M896 661.334l-170.667-170.667v149.333c0 23.467-19.2 42.667-42.667 42.667h-263.68l477.013-477.013v455.68zM139.52 853.334l-54.187-54.187 116.48-116.48h-31.147c-23.467 0-42.667-19.2-42.667-42.667v-426.667c0-23.467 19.2-42.667 42.667-42.667h512c8.96 0 16.64 3.413 23.040 7.68l136.107-135.68 54.187 54.187-756.48 756.48z" />
219<glyph unicode="&#xe6d1;" d="M725.333 490.667v149.333c0 23.467-19.2 42.667-42.667 42.667h-512c-23.467 0-42.667-19.2-42.667-42.667v-426.667c0-23.467 19.2-42.667 42.667-42.667h512c23.467 0 42.667 19.2 42.667 42.667v149.333l170.667-170.667v469.333l-170.667-170.667z" />
220<glyph unicode="&#xe6d2;" d="M789.333 426.667c0 75.52-43.52 140.373-106.667 171.947v-343.467c63.147 31.147 106.667 96 106.667 171.52zM213.333 554.667v-256h170.667l213.333-213.333v682.667l-213.333-213.333h-170.667z" />
221<glyph unicode="&#xe6d3;" d="M298.667 554.667v-256h170.667l213.333-213.333v682.667l-213.333-213.333h-170.667z" />
222<glyph unicode="&#xe6d4;" d="M704 426.667c0 75.52-43.52 140.373-106.667 171.947v-94.293l104.533-104.533c1.28 8.533 2.133 17.493 2.133 26.88zM810.667 426.667c0-40.107-8.533-77.653-23.040-112.64l64.427-64.427c28.16 52.907 43.947 113.067 43.947 177.067 0 182.613-127.573 335.36-298.667 374.187v-87.893c123.307-36.693 213.333-151.040 213.333-286.293zM182.187 810.667l-54.187-54.187 201.813-201.813h-201.813v-256h170.667l213.333-213.333v287.147l181.333-181.333c-28.587-22.187-60.587-39.68-96-50.347v-87.893c58.88 13.227 112.213 40.533 157.44 77.227l87.040-87.467 54.187 54.187-713.813 713.813zM512 768l-89.173-89.173 89.173-89.173v178.347z" />
223<glyph unicode="&#xe6d5;" d="M128 554.667v-256h170.667l213.333-213.333v682.667l-213.333-213.333h-170.667zM704 426.667c0 75.52-43.52 140.373-106.667 171.947v-343.467c63.147 31.147 106.667 96 106.667 171.52zM597.333 800.854v-87.893c123.307-36.693 213.333-151.040 213.333-286.293s-90.027-249.6-213.333-286.293v-87.893c171.093 38.827 298.667 191.573 298.667 374.187s-127.573 335.36-298.667 374.187z" />
224<glyph unicode="&#xe6d6;" d="M853.333 768h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM640 170.667h-469.333v170.667h469.333v-170.667zM640 384h-469.333v170.667h469.333v-170.667zM853.333 170.667h-170.667v384h170.667v-384z" />
225<glyph unicode="&#xe6d7;" d="M512 640v170.667h-426.667v-768h853.333v597.333h-426.667zM256 128h-85.333v85.333h85.333v-85.333zM256 298.667h-85.333v85.333h85.333v-85.333zM256 469.334h-85.333v85.333h85.333v-85.333zM256 640h-85.333v85.333h85.333v-85.333zM426.667 128h-85.333v85.333h85.333v-85.333zM426.667 298.667h-85.333v85.333h85.333v-85.333zM426.667 469.334h-85.333v85.333h85.333v-85.333zM426.667 640h-85.333v85.333h85.333v-85.333zM853.333 128h-341.333v85.333h85.333v85.333h-85.333v85.333h85.333v85.333h-85.333v85.333h341.333v-426.667zM768 469.334h-85.333v-85.333h85.333v85.333zM768 298.667h-85.333v-85.333h85.333v85.333z" />
226<glyph unicode="&#xe6d8;" d="M512 554.667c-68.267 0-134.4-10.667-196.267-30.72v-132.267c0-16.64-9.813-31.573-23.893-38.4-41.813-20.907-79.787-47.787-113.493-78.933-7.68-7.68-18.347-11.947-29.867-11.947-11.947 0-22.613 4.693-30.293 12.373l-105.813 105.813c-7.68 7.253-12.373 17.92-12.373 29.867s4.693 22.613 12.373 30.293c130.133 123.307 305.92 199.253 499.627 199.253s369.493-75.947 499.627-199.253c7.68-7.68 12.373-18.347 12.373-30.293s-4.693-22.613-12.373-30.293l-105.813-105.813c-7.68-7.68-18.347-12.373-30.293-12.373-11.52 0-22.187 4.693-29.867 11.947-33.707 31.573-72.107 58.027-113.92 78.933-14.080 6.827-23.893 21.333-23.893 38.4v132.267c-61.44 20.48-127.573 31.147-195.84 31.147z" />
227<glyph unicode="&#xe6d9;" d="M384 725.334v-85.333h281.173l-494.507-494.507 60.16-60.16 494.507 494.507v-281.173h85.333v426.667z" />
228<glyph unicode="&#xe6da;" d="M725.333 67.84l60.16 60.16-145.493 145.493-60.16-60.16 145.493-145.493zM320 597.334h149.333v-238.507l-230.827-230.827 60.16-60.16 256 256v273.493h149.333l-192 192-192-192z" />
229<glyph unicode="&#xe6db;" d="M835.84 640l-323.84-323.84-238.507 238.507h195.84v85.333h-341.333v-341.333h85.333v195.84l298.667-298.667 384 384z" />
230<glyph unicode="&#xe6dc;" d="M853.333 707.84l-60.16 60.16-494.507-494.507v281.173h-85.333v-426.667h426.667v85.333h-281.173z" />
231<glyph unicode="&#xe6dd;" d="M597.333 768l97.707-97.707-122.88-122.88 60.587-60.587 122.88 122.88 97.707-97.707v256zM426.667 768h-256v-256l97.707 97.707 200.96-200.533v-323.84h85.333v358.827l-225.707 226.133z" />
232<glyph unicode="&#xe6de;" d="M282.453 478.294c61.44-120.747 160.427-219.307 281.173-281.173l93.867 93.867c11.52 11.52 28.587 15.36 43.52 10.24 47.787-15.787 99.413-24.32 152.32-24.32 23.467 0 42.667-19.2 42.667-42.667v-148.907c0-23.467-19.2-42.667-42.667-42.667-400.64 0-725.333 324.693-725.333 725.333 0 23.467 19.2 42.667 42.667 42.667h149.333c23.467 0 42.667-19.2 42.667-42.667 0-53.333 8.533-104.533 24.32-152.32 4.693-14.933 1.28-31.573-10.667-43.52l-93.867-93.867z" />
233<glyph unicode="&#xe6df;" d="M853.333 853.334h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-768 170.667 170.667h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM256 554.667h512v-85.333h-512v85.333zM597.333 341.334h-341.333v85.333h341.333v-85.333zM768 597.334h-512v85.333h512v-85.333z" />
234<glyph unicode="&#xe6e0;" d="M213.333 384h597.333v85.333h-597.333v-85.333zM128 213.334h597.333v85.333h-597.333v-85.333zM298.667 640v-85.333h597.333v85.333h-597.333z" />
235<glyph unicode="&#xe6e1;" d="M938.24 768c0 46.933-37.973 85.333-84.907 85.333h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h597.333l170.667-170.667-0.427 768zM768 341.334h-512v85.333h512v-85.333zM768 469.334h-512v85.333h512v-85.333zM768 597.334h-512v85.333h512v-85.333z" />
236<glyph unicode="&#xe6e2;" d="M853.333 938.667h-682.667v-85.333h682.667v85.333zM170.667-85.333h682.667v85.333h-682.667v-85.333zM853.333 768h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM512 650.667c52.907 0 96-43.093 96-96s-43.093-96-96-96-96 43.093-96 96 43.093 96 96 96zM725.333 213.334h-426.667v64c0 71.253 142.080 106.667 213.333 106.667s213.333-35.413 213.333-106.667v-64z" />
237<glyph unicode="&#xe6e3;" d="M725.333 810.667h-42.667v-213.333h42.667v213.333zM640 725.334h-85.333v42.667h85.333v42.667h-128v-128h85.333v-42.667h-85.333v-42.667h128v128zM768 810.667v-213.333h42.667v85.333h85.333v128h-128zM853.333 725.334h-42.667v42.667h42.667v-42.667zM853.333 277.334c-53.333 0-104.533 8.533-152.32 24.32-14.933 4.693-31.573 1.28-43.093-10.24l-93.867-93.867c-120.747 61.44-219.733 160-281.173 281.173l93.867 94.293c11.52 11.093 14.933 27.733 10.24 42.667-15.787 47.787-24.32 98.987-24.32 152.32 0 23.467-19.2 42.667-42.667 42.667h-149.333c-23.467 0-42.667-19.2-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.467 0 42.667 19.2 42.667 42.667v149.333c0 23.467-19.2 42.667-42.667 42.667z" />
238<glyph unicode="&#xe6e4;" d="M512 128c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM256 896c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM256 640c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM256 384c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM768 725.334c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333-85.333-38.4-85.333-85.333 38.4-85.333 85.333-85.333zM512 384c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM768 384c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM768 640c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM512 640c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM512 896c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z" />
239<glyph unicode="&#xe6e5;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333 0 78.933 26.88 151.467 72.107 209.067l478.293-478.293c-57.6-45.227-130.133-72.107-209.067-72.107zM781.227 217.6l-478.293 478.293c57.6 45.227 130.133 72.107 209.067 72.107 188.587 0 341.333-152.747 341.333-341.333 0-78.933-26.88-151.467-72.107-209.067z" />
240<glyph unicode="&#xe6e6;" d="M853.333 768h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM853.333 597.334l-341.333-213.333-341.333 213.333v85.333l341.333-213.333 341.333 213.333v-85.333z" />
241<glyph unicode="&#xe6e7;" d="M896 682.667h-85.333v-384h-554.667v-85.333c0-23.467 19.2-42.667 42.667-42.667h469.333l170.667-170.667v640c0 23.467-19.2 42.667-42.667 42.667zM725.333 426.667v384c0 23.467-19.2 42.667-42.667 42.667h-554.667c-23.467 0-42.667-19.2-42.667-42.667v-597.333l170.667 170.667h426.667c23.467 0 42.667 19.2 42.667 42.667z" />
242<glyph unicode="&#xe6e8;" d="M384 810.667l-170.667-170.24h128v-299.093h85.333v299.093h128l-170.667 170.24zM682.667 212.907v299.093h-85.333v-299.093h-128l170.667-170.24 170.667 170.24h-128z" />
243<glyph unicode="&#xe6e9;" d="M881.067 48.214l-100.267 100.267-268.8 268.373-151.893 152.32-60.587 60.16-117.333 117.333-54.187-54.187 118.613-118.613c-108.8-133.973-100.693-331.093 23.893-456.107 66.56-66.56 154.027-99.84 241.493-99.84 76.373 0 152.32 25.173 214.613 75.947l115.2-115.2 54.187 54.187-14.933 15.36zM512 102.827c-68.267 0-132.693 26.453-180.907 75.093-48.64 48.64-75.093 112.64-75.093 180.907 0 56.32 18.347 109.653 51.627 153.6l204.373-203.947v-205.653zM512 721.067v-195.413l309.333-309.76c58.453 126.293 35.84 280.32-68.267 384.427l-241.067 241.493-157.867-157.867 60.16-60.16 97.707 97.28z" />
244<glyph unicode="&#xe6ea;" d="M753.493 600.32l-241.493 241.493-241.493-241.493c-133.12-133.12-133.12-349.44 0-482.56 66.56-66.56 154.027-99.84 241.493-99.84s174.933 33.28 241.493 99.84c133.12 133.12 133.12 349.44 0 482.56zM512 102.827c-68.267 0-132.693 26.453-180.907 75.093-48.64 48.64-75.093 112.64-75.093 180.907s26.453 132.693 75.093 180.907l180.907 181.333v-618.24z" />
245<glyph unicode="&#xe6eb;" d="M810.667 853.334h-597.333c-47.36 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 37.973-85.333 85.333-85.333h170.667l128-128 128 128h170.667c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM554.667 170.667h-85.333v85.333h85.333v-85.333zM642.987 501.334l-38.4-39.253c-30.72-31.147-49.92-56.747-49.92-120.747h-85.333v21.333c0 46.933 19.2 89.6 49.92 120.747l52.907 53.76c15.787 15.36 25.173 36.693 25.173 60.16 0 46.933-38.4 85.333-85.333 85.333s-85.333-38.4-85.333-85.333h-85.333c0 94.293 76.373 170.667 170.667 170.667s170.667-76.373 170.667-170.667c0-37.547-15.36-71.68-39.68-96z" />
246<glyph unicode="&#xe6ec;" d="M512 661.334c58.88 0 106.667-47.787 106.667-106.667 0-31.573-14.080-59.307-35.413-78.933l154.88-154.88c41.813 79.36 72.533 162.133 72.533 233.813 0 165.12-133.547 298.667-298.667 298.667-84.48 0-160.427-35.413-215.040-91.733l136.107-136.107c19.627 22.187 47.36 35.84 78.933 35.84zM698.453 251.734l-558.933 558.933-54.187-54.187 135.68-135.68c-4.693-21.333-7.68-43.52-7.68-66.133 0-224 298.667-554.667 298.667-554.667s71.253 78.933 144.213 185.6l142.933-142.933 54.187 54.187-154.88 154.88z" />
247<glyph unicode="&#xe6ed;" d="M512 853.334c-165.12 0-298.667-133.547-298.667-298.667 0-224 298.667-554.667 298.667-554.667s298.667 330.667 298.667 554.667c0 165.12-133.547 298.667-298.667 298.667zM512 448c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667 106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667z" />
248<glyph unicode="&#xe6ee;" d="M853.333 853.334h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-768 170.667 170.667h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM768 341.334h-512v85.333h512v-85.333zM768 469.334h-512v85.333h512v-85.333zM768 597.334h-512v85.333h512v-85.333z" />
249<glyph unicode="&#xe6ef;" d="M853.333 853.334h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-768l170.667 170.667h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333z" />
250<glyph unicode="&#xe6f0;" d="M810.24 725.334c0 46.933-37.973 85.333-84.907 85.333h-298.667l-99.84-99.84 483.84-483.84-0.427 498.347zM155.733 773.12l-54.187-54.187 111.787-111.787v-479.147c0-46.933 38.4-85.333 85.333-85.333h427.093c14.933 0 28.587 4.267 40.96 11.093l80.213-80.213 54.187 54.187-745.387 745.387z" />
251<glyph unicode="&#xe6f1;" d="M282.453 478.294c61.44-120.747 160.427-219.307 281.173-281.173l93.867 93.867c11.52 11.52 28.587 15.36 43.52 10.24 47.787-15.787 99.413-24.32 152.32-24.32 23.467 0 42.667-19.2 42.667-42.667v-148.907c0-23.467-19.2-42.667-42.667-42.667-400.64 0-725.333 324.693-725.333 725.333 0 23.467 19.2 42.667 42.667 42.667h149.333c23.467 0 42.667-19.2 42.667-42.667 0-53.333 8.533-104.533 24.32-152.32 4.693-14.933 1.28-31.573-10.667-43.52l-93.867-93.867z" />
252<glyph unicode="&#xe6f2;" d="M749.227 331.094c11.947 29.44 18.773 61.867 18.773 95.573 0 141.227-114.773 256-256 256-33.707 0-66.133-6.827-95.573-18.773l69.12-69.12c8.533 1.28 17.493 2.56 26.453 2.56 94.293 0 170.667-76.373 170.667-170.667 0-8.96-0.853-17.92-2.133-26.88l68.693-68.693zM512 768c188.587 0 341.333-152.747 341.333-341.333 0-57.6-14.933-111.787-40.533-159.573l62.72-62.72c40.107 64.853 63.147 140.8 63.147 222.293 0 235.52-191.147 426.667-426.667 426.667-81.493 0-157.44-23.467-222.293-62.72l62.293-62.293c47.787 25.173 102.4 39.68 160 39.68zM139.52 832l-54.187-54.187 89.6-89.6c-55.893-72.533-89.6-162.987-89.6-261.547 0-157.867 85.76-295.253 212.907-369.067l42.667 73.813c-101.547 59.307-170.24 168.96-170.24 295.253 0 75.093 24.32 144.213 65.28 200.107l61.013-61.44c-25.6-39.68-40.96-87.467-40.96-138.667 0-94.72 51.627-177.067 128-221.44l42.667 74.24c-50.773 29.867-85.333 84.053-85.333 147.2 0 27.733 7.253 53.333 18.773 76.373l67.413-67.413-0.853-8.96c0-46.933 38.4-85.333 85.333-85.333l8.96 0.853 320.853-320.853 54.187 54.187-756.48 756.48z" />
253<glyph unicode="&#xe6f3;" d="M938.667 810.667h-853.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h853.333c46.933 0 84.907 38.4 84.907 85.333l0.427 597.333c0 46.933-38.4 85.333-85.333 85.333zM341.333 682.667c70.827 0 128-57.173 128-128s-57.173-128-128-128-128 57.173-128 128 57.173 128 128 128zM597.333 170.667h-512v42.667c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-42.667zM761.6 341.334h69.973l64.427-85.333-84.907-84.907c-55.893 41.813-97.28 101.547-116.48 170.24-7.68 27.307-11.947 55.893-11.947 85.333s4.267 58.027 11.947 85.333c19.2 69.12 60.587 128.427 116.48 170.24l84.907-84.907-64.427-85.333h-69.973c-9.387-26.88-14.933-55.467-14.933-85.333s5.547-58.453 14.933-85.333z" />
254<glyph unicode="&#xe6f4;" d="M896 597.334v42.667l-128-85.333-128 85.333v-42.667l128-85.333 128 85.333zM938.667 810.667h-853.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h853.333c46.933 0 84.907 38.4 84.907 85.333l0.427 597.333c0 46.933-38.4 85.333-85.333 85.333zM341.333 682.667c70.827 0 128-57.173 128-128s-57.173-128-128-128-128 57.173-128 128 57.173 128 128 128zM597.333 170.667h-512v42.667c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-42.667zM938.667 426.667h-341.333v256h341.333v-256z" />
255<glyph unicode="&#xe6f5;" d="M1011.627 227.414c-130.133 123.307-305.92 199.253-499.627 199.253s-369.493-75.947-499.627-199.253c-7.68-7.68-12.373-18.347-12.373-30.293s4.693-22.613 12.373-30.293l105.813-105.813c7.68-7.68 18.347-12.373 30.293-12.373 11.52 0 22.187 4.693 29.867 11.947 33.707 31.573 72.107 58.027 113.493 78.933 14.080 6.827 23.893 21.333 23.893 38.4v132.267c61.867 20.48 128 31.147 196.267 31.147s134.4-10.667 196.267-30.72v-132.267c0-16.64 9.813-31.573 23.893-38.4 41.813-20.907 79.787-47.787 113.493-78.933 7.68-7.68 18.347-11.947 29.867-11.947 11.947 0 22.613 4.693 30.293 12.373l105.813 105.813c7.68 7.68 12.373 18.347 12.373 30.293 0 11.52-4.693 22.187-12.373 29.867zM902.827 671.574l-60.16 60.16-151.893-151.467 60.16-60.16s147.2 150.187 151.893 151.467zM554.667 853.334h-85.333v-213.333h85.333v213.333zM273.067 520.107l60.16 60.16-151.467 151.893-60.587-60.587c4.693-1.28 151.893-151.467 151.893-151.467z" />
256<glyph unicode="&#xe6f6;" d="M43.093 640l-0.427-426.667c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333h-768c-46.933 0-84.907-38.4-84.907-85.333zM810.667 640v-426.667h-597.333v426.667h597.333z" />
257<glyph unicode="&#xe6f7;" d="M725.333 895.574l-426.667 0.427c-46.933 0-84.907-38.4-84.907-85.333v-768c0-46.933 37.973-85.333 84.907-85.333h426.667c46.933 0 85.333 38.4 85.333 85.333v768c0 46.933-38.4 84.907-85.333 84.907zM725.333 128h-426.667v597.333h426.667v-597.333z" />
258<glyph unicode="&#xe6f8;" d="M43.093 640l-0.427-426.667c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333h-768c-46.933 0-84.907-38.4-84.907-85.333zM810.667 640v-426.667h-597.333v426.667h597.333z" />
259<glyph unicode="&#xe6f9;" d="M725.333 895.574l-426.667 0.427c-46.933 0-84.907-38.4-84.907-85.333v-768c0-46.933 37.973-85.333 84.907-85.333h426.667c46.933 0 85.333 38.4 85.333 85.333v768c0 46.933-38.4 84.907-85.333 84.907zM725.333 128h-426.667v597.333h426.667v-597.333z" />
260<glyph unicode="&#xe6fa;" d="M768 768l-170.667-170.667h128v-298.667c0-46.933-38.4-85.333-85.333-85.333s-85.333 38.4-85.333 85.333v298.667c0 94.293-76.373 170.667-170.667 170.667s-170.667-76.373-170.667-170.667v-298.667h-128l170.667-170.667 170.667 170.667h-128v298.667c0 46.933 38.4 85.333 85.333 85.333s85.333-38.4 85.333-85.333v-298.667c0-94.293 76.373-170.667 170.667-170.667s170.667 76.373 170.667 170.667v298.667h128l-170.667 170.667z" />
261<glyph unicode="&#xe6fb;" d="M853.333 853.334h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-768 170.667 170.667h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM384 469.334h-85.333v85.333h85.333v-85.333zM554.667 469.334h-85.333v85.333h85.333v-85.333zM725.333 469.334h-85.333v85.333h85.333v-85.333z" />
262<glyph unicode="&#xe6fc;" d="M789.333 682.667c-129.707 0-234.667-104.96-234.667-234.667 0-56.747 20.053-108.8 53.76-149.333h-192.853c33.707 40.533 53.76 92.587 53.76 149.333 0 129.707-104.96 234.667-234.667 234.667s-234.667-104.96-234.667-234.667 104.96-234.667 234.667-234.667h554.667c129.707 0 234.667 104.96 234.667 234.667s-104.96 234.667-234.667 234.667zM234.667 298.667c-82.347 0-149.333 66.987-149.333 149.333s66.987 149.333 149.333 149.333 149.333-66.987 149.333-149.333-66.987-149.333-149.333-149.333zM789.333 298.667c-82.347 0-149.333 66.987-149.333 149.333s66.987 149.333 149.333 149.333 149.333-66.987 149.333-149.333-66.987-149.333-149.333-149.333z" />
263<glyph unicode="&#xe6fd;" d="M539.733 512c-34.987 99.413-129.707 170.667-241.067 170.667-141.227 0-256-114.773-256-256s114.773-256 256-256c111.36 0 206.080 71.253 241.067 170.667h185.6v-170.667h170.667v170.667h85.333v170.667h-441.6zM298.667 341.334c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333z" />
264<glyph unicode="&#xe6fe;" d="M810.667 810.667h-597.333c-47.36 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM725.333 384h-170.667v-170.667h-85.333v170.667h-170.667v85.333h170.667v170.667h85.333v-170.667h170.667v-85.333z" />
265<glyph unicode="&#xe6ff;" d="M554.667 640h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667v170.667zM512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
266<glyph unicode="&#xe700;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM725.333 384h-170.667v-170.667h-85.333v170.667h-170.667v85.333h170.667v170.667h85.333v-170.667h170.667v-85.333z" />
267<glyph unicode="&#xe701;" d="M810.667 384h-256v-256h-85.333v256h-256v85.333h256v256h85.333v-256h256v-85.333z" />
268<glyph unicode="&#xe702;" d="M876.373 715.52l-59.307 71.68c-11.52 14.507-29.013 23.467-49.067 23.467h-512c-20.053 0-37.547-8.96-49.493-23.467l-58.88-71.68c-12.373-14.507-19.627-33.707-19.627-54.187v-533.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v533.333c0 20.48-7.253 39.68-19.627 54.187zM512 192l-234.667 234.667h149.333v85.333h170.667v-85.333h149.333l-234.667-234.667zM218.453 725.334l34.56 42.667h512l40.107-42.667h-586.667z" />
269<glyph unicode="&#xe703;" d="M938.667 810.667h-640c-29.44 0-52.48-14.933-67.84-37.547l-230.827-346.453 230.827-346.027c15.36-22.613 38.4-37.973 67.84-37.973h640c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 273.494l-60.16-60.16-153.173 153.173-153.173-153.173-60.16 60.16 153.173 153.173-153.173 153.173 60.16 60.16 153.173-153.173 153.173 153.173 60.16-60.16-153.173-153.173 153.173-153.173z" />
270<glyph unicode="&#xe704;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM170.667 426.667c0 188.587 152.747 341.333 341.333 341.333 78.933 0 151.467-26.88 209.067-72.107l-478.293-478.293c-45.227 57.6-72.107 130.133-72.107 209.067zM512 85.334c-78.933 0-151.467 26.88-209.067 72.107l478.293 478.293c45.227-57.6 72.107-130.133 72.107-209.067 0-188.587-152.747-341.333-341.333-341.333z" />
271<glyph unicode="&#xe705;" d="M810.667 665.174l-60.16 60.16-238.507-238.507-238.507 238.507-60.16-60.16 238.507-238.507-238.507-238.507 60.16-60.16 238.507 238.507 238.507-238.507 60.16 60.16-238.507 238.507z" />
272<glyph unicode="&#xe706;" d="M682.667 896h-512c-46.933 0-85.333-38.4-85.333-85.333v-597.333h85.333v597.333h512v85.333zM810.667 725.334h-469.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h469.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 42.667h-469.333v597.333h469.333v-597.333z" />
273<glyph unicode="&#xe707;" d="M411.307 612.694c9.813 21.333 15.36 44.8 15.36 69.973 0 94.293-76.373 170.667-170.667 170.667s-170.667-76.373-170.667-170.667 76.373-170.667 170.667-170.667c25.173 0 48.64 5.547 69.973 15.36l100.693-100.693-100.693-100.693c-21.333 9.813-44.8 15.36-69.973 15.36-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667c0 25.173-5.547 48.64-15.36 69.973l100.693 100.693 298.667-298.667h128v42.667l-527.36 527.36zM256 597.334c-46.933 0-85.333 37.973-85.333 85.333s38.4 85.333 85.333 85.333 85.333-37.973 85.333-85.333-38.4-85.333-85.333-85.333zM256 85.334c-46.933 0-85.333 37.973-85.333 85.333s38.4 85.333 85.333 85.333 85.333-37.973 85.333-85.333-38.4-85.333-85.333-85.333zM512 405.334c-11.947 0-21.333 9.387-21.333 21.333s9.387 21.333 21.333 21.333 21.333-9.387 21.333-21.333-9.387-21.333-21.333-21.333zM810.667 810.667l-256-256 85.333-85.333 298.667 298.667v42.667z" />
274<glyph unicode="&#xe708;" d="M810.667 853.334h-178.347c-17.92 49.493-64.853 85.333-120.32 85.333s-102.4-35.84-120.32-85.333h-178.347c-46.933 0-85.333-38.4-85.333-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM512 853.334c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM810.667 85.334h-597.333v682.667h85.333v-128h426.667v128h85.333v-682.667z" />
275<glyph unicode="&#xe709;" d="M128 202.667v-160h160l471.893 471.893-160 160-471.893-471.893zM883.627 638.294c16.64 16.64 16.64 43.52 0 60.16l-99.84 99.84c-16.64 16.64-43.52 16.64-60.16 0l-78.080-78.080 160-160 78.080 78.080z" />
276<glyph unicode="&#xe70a;" d="M938.24 597.334c0 30.72-15.787 57.6-40.107 72.533l-386.133 226.133-386.133-226.133c-24.32-14.933-40.533-41.813-40.533-72.533v-426.667c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333l-0.427 426.667zM512 384l-352.427 220.16 352.427 206.507 352.427-206.507-352.427-220.16z" />
277<glyph unicode="&#xe70b;" d="M426.667 170.667h170.667v85.333h-170.667v-85.333zM128 682.667v-85.333h768v85.333h-768zM256 384h512v85.333h-512v-85.333z" />
278<glyph unicode="&#xe70c;" d="M614.4 682.667l-17.067 85.333h-384v-725.333h85.333v298.667h238.933l17.067-85.333h298.667v426.667z" />
279<glyph unicode="&#xe70d;" d="M512 597.334v170.667l341.333-341.333-341.333-341.333v170.667h-341.333v341.333z" />
280<glyph unicode="&#xe70e;" d="M195.84 644.694c29.867 30.293 59.733 57.6 72.96 52.053 21.333-8.533 0-43.947-12.8-64.853-10.667-17.92-122.027-165.973-122.027-269.227 0-54.613 20.48-99.84 57.173-127.147 32-23.893 74.24-31.147 112.64-19.627 45.653 13.227 83.2 59.733 130.56 118.187 51.627 63.573 120.747 146.773 174.080 146.773 69.547 0 70.4-43.093 75.093-76.373-161.28-27.307-229.547-156.587-229.547-229.12s61.44-131.84 136.96-131.84c69.547 0 183.040 56.747 200.107 260.267h104.96v106.667h-105.387c-6.4 70.4-46.507 179.2-171.947 179.2-96 0-178.347-81.493-210.773-121.173-24.747-31.147-87.893-105.813-97.707-116.053-10.667-12.8-29.013-35.84-47.36-35.84-19.2 0-30.72 35.413-15.36 81.92 14.933 46.507 59.733 122.027 78.933 150.187 33.28 48.64 55.467 81.92 55.467 139.947 0 92.587-69.973 122.027-107.093 122.027-56.32 0-105.387-42.667-116.053-53.333-15.36-15.36-28.16-28.16-37.547-39.68l74.667-72.96zM592.213 147.2c-13.227 0-31.573 11.093-31.573 30.72 0 25.6 31.147 93.867 122.453 117.76-12.8-114.773-61.013-148.48-90.88-148.48z" />
281<glyph unicode="&#xe70f;" d="M810.667 810.667h-597.76c-46.933 0-84.48-38.4-84.48-85.333l-0.427-597.333c0-46.933 37.973-85.333 84.907-85.333h597.76c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 298.667h-170.667c0-70.827-57.173-128-128-128s-128 57.173-128 128h-171.093v426.667h597.76v-426.667zM682.667 512h-85.333v128h-170.667v-128h-85.333l170.667-170.667 170.667 170.667z" />
282<glyph unicode="&#xe710;" d="M166.4 426.667c0 72.96 59.307 132.267 132.267 132.267h170.667v81.067h-170.667c-117.76 0-213.333-95.573-213.333-213.333s95.573-213.333 213.333-213.333h170.667v81.067h-170.667c-72.96 0-132.267 59.307-132.267 132.267zM341.333 384h341.333v85.333h-341.333v-85.333zM725.333 640h-170.667v-81.067h170.667c72.96 0 132.267-59.307 132.267-132.267s-59.307-132.267-132.267-132.267h-170.667v-81.067h170.667c117.76 0 213.333 95.573 213.333 213.333s-95.573 213.333-213.333 213.333z" />
283<glyph unicode="&#xe711;" d="M853.333 768h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM853.333 597.334l-341.333-213.333-341.333 213.333v85.333l341.333-213.333 341.333 213.333v-85.333z" />
284<glyph unicode="&#xe712;" d="M853.333 768h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM853.333 597.334l-341.333-213.333-341.333 213.333v85.333l341.333-213.333 341.333 213.333v-85.333z" />
285<glyph unicode="&#xe713;" d="M785.067 486.4c-78.933 68.693-181.333 110.933-294.4 110.933-198.4 0-366.080-129.28-424.96-308.053l100.693-33.28c44.8 136.107 172.8 234.667 324.267 234.667 83.2 0 159.147-30.72 218.453-80.213l-154.453-154.453h384v384l-153.6-153.6z" />
286<glyph unicode="&#xe714;" d="M298.667 469.334v-85.333h426.667v85.333h-426.667zM512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
287<glyph unicode="&#xe715;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM725.333 384h-426.667v85.333h426.667v-85.333z" />
288<glyph unicode="&#xe716;" d="M810.667 384h-597.333v85.333h597.333v-85.333z" />
289<glyph unicode="&#xe717;" d="M298.667 597.334v128l-298.667-298.667 298.667-298.667v128l-170.667 170.667 170.667 170.667zM554.667 554.667v170.667l-298.667-298.667 298.667-298.667v174.933c213.333 0 362.667-68.267 469.333-217.6-42.667 213.333-170.667 426.667-469.333 469.333z" />
290<glyph unicode="&#xe718;" d="M426.667 554.667v170.667l-298.667-298.667 298.667-298.667v174.933c213.333 0 362.667-68.267 469.333-217.6-42.667 213.333-170.667 426.667-469.333 469.333z" />
291<glyph unicode="&#xe719;" d="M671.147 810.667h-318.293l-224.853-224.853v-318.293l224.853-224.853h318.293l224.853 224.853v318.293l-224.853 224.853zM512 200.534c-30.72 0-55.467 24.747-55.467 55.467s24.747 55.467 55.467 55.467c30.72 0 55.467-24.747 55.467-55.467s-24.747-55.467-55.467-55.467zM554.667 384h-85.333v256h85.333v-256z" />
292<glyph unicode="&#xe71a;" d="M725.333 810.667h-512c-47.36 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v512l-170.667 170.667zM512 128c-70.827 0-128 57.173-128 128s57.173 128 128 128 128-57.173 128-128-57.173-128-128-128zM640 554.667h-426.667v170.667h426.667v-170.667z" />
293<glyph unicode="&#xe71b;" d="M128 725.334h85.333v85.333c-46.933 0-85.333-38.4-85.333-85.333zM128 384h85.333v85.333h-85.333v-85.333zM298.667 42.667h85.333v85.333h-85.333v-85.333zM128 554.667h85.333v85.333h-85.333v-85.333zM554.667 810.667h-85.333v-85.333h85.333v85.333zM810.667 810.667v-85.333h85.333c0 46.933-38.4 85.333-85.333 85.333zM213.333 42.667v85.333h-85.333c0-46.933 38.4-85.333 85.333-85.333zM128 213.334h85.333v85.333h-85.333v-85.333zM384 810.667h-85.333v-85.333h85.333v85.333zM469.333 42.667h85.333v85.333h-85.333v-85.333zM810.667 384h85.333v85.333h-85.333v-85.333zM810.667 42.667c46.933 0 85.333 38.4 85.333 85.333h-85.333v-85.333zM810.667 554.667h85.333v85.333h-85.333v-85.333zM810.667 213.334h85.333v85.333h-85.333v-85.333zM640 42.667h85.333v85.333h-85.333v-85.333zM640 725.334h85.333v85.333h-85.333v-85.333zM298.667 213.334h426.667v426.667h-426.667v-426.667zM384 554.667h256v-256h-256v256z" />
294<glyph unicode="&#xe71c;" d="M85.76 42.667l895.573 384-895.573 384-0.427-298.667 640-85.333-640-85.333z" />
295<glyph unicode="&#xe71d;" d="M128 170.667h256v85.333h-256v-85.333zM128 682.667v-85.333h768v85.333h-768zM128 384h512v85.333h-512v-85.333z" />
296<glyph unicode="&#xe71e;" d="M213.333 213.334v-85.333h597.333v85.333h-597.333zM405.333 392.534h213.333l38.4-93.867h89.6l-202.667 469.333h-64l-202.667-469.333h89.6l38.4 93.867zM512 683.52l79.787-214.187h-159.573l79.787 214.187z" />
297<glyph unicode="&#xe71f;" d="M533.333 597.334c-113.067 0-215.467-42.24-294.4-110.933l-153.6 153.6v-384h384l-154.453 154.453c59.307 49.493 134.827 80.213 218.453 80.213 151.040 0 279.467-98.56 324.267-234.667l101.12 33.28c-59.307 178.773-226.987 308.053-425.387 308.053z" />
298<glyph unicode="&#xe720;" d="M938.667 694.614l-196.267 164.693-55.040-65.28 196.267-164.693 55.040 65.28zM336.213 794.027l-54.613 65.28-196.267-164.267 55.040-65.28 195.84 164.267zM533.333 597.334h-64v-256l202.667-121.6 32 52.48-170.667 101.12v224zM512 768c-212.053 0-384-171.947-384-384s171.52-384 384-384c212.053 0 384 171.947 384 384s-171.947 384-384 384zM512 85.334c-165.12 0-298.667 133.547-298.667 298.667s133.547 298.667 298.667 298.667 298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667z" />
299<glyph unicode="&#xe721;" d="M938.667 695.467l-196.267 166.4-55.467-64 196.267-166.4 55.467 64zM337.067 793.6l-55.467 64-196.267-162.133 55.467-64 196.267 162.133zM533.333 597.334h-64v-256l200.533-123.733 34.133 51.2-170.667 102.4v226.133zM512 768c-213.333 0-384-170.667-384-384s170.667-384 384-384 384 170.667 384 384-170.667 384-384 384zM512 85.334c-166.4 0-298.667 132.267-298.667 298.667s132.267 298.667 298.667 298.667 298.667-132.267 298.667-298.667-132.267-298.667-298.667-298.667z" />
300<glyph unicode="&#xe722;" d="M511.573 853.334c-235.52 0-426.24-191.147-426.24-426.667s190.72-426.667 426.24-426.667c235.947 0 427.093 191.147 427.093 426.667s-191.147 426.667-427.093 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM533.333 640h-64v-256l224-134.4 32 52.48-192 113.92z" />
301<glyph unicode="&#xe723;" d="M336.213 794.027l-54.613 65.28-196.267-164.267 55.040-65.28 195.84 164.267zM938.667 694.614l-196.267 164.693-55.040-65.28 196.267-164.693 55.040 65.28zM512 768c-212.053 0-384-171.947-384-384s171.52-384 384-384c212.053 0 384 171.947 384 384s-171.947 384-384 384zM512 85.334c-165.12 0-298.667 133.547-298.667 298.667s133.547 298.667 298.667 298.667 298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667zM554.667 554.667h-85.333v-128h-128v-85.333h128v-128h85.333v128h128v85.333h-128v128z" />
302<glyph unicode="&#xe724;" d="M554.667 554.667v234.667c0 35.413-28.587 64-64 64s-64-28.587-64-64v-157.013l334.080-334.080 135.253-42.24v85.333l-341.333 213.333zM128 713.814l212.907-212.907-255.573-159.573v-85.333l341.333 106.667v-234.667l-85.333-64v-64l149.333 42.667 149.333-42.667v64l-85.333 64v159.147l244.48-244.48 54.187 54.187-671.147 671.147-54.187-54.187z" />
303<glyph unicode="&#xe725;" d="M896 256v85.333l-341.333 213.333v234.667c0 35.413-28.587 64-64 64s-64-28.587-64-64v-234.667l-341.333-213.333v-85.333l341.333 106.667v-234.667l-85.333-64v-64l149.333 42.667 149.333-42.667v64l-85.333 64v234.667l341.333-106.667z" />
304<glyph unicode="&#xe726;" d="M298.667 213.334v-157.867c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v157.867h-426.667z" />
305<glyph unicode="&#xe727;" d="M298.667 298.667v-243.2c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v243.2h-426.667z" />
306<glyph unicode="&#xe728;" d="M298.667 384v-328.533c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v328.533h-426.667z" />
307<glyph unicode="&#xe729;" d="M298.667 469.334v-413.867c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v413.867h-426.667z" />
308<glyph unicode="&#xe72a;" d="M298.667 554.667v-499.2c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v499.2h-426.667z" />
309<glyph unicode="&#xe72b;" d="M298.667 597.334v-541.867c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v541.867h-426.667z" />
310<glyph unicode="&#xe72c;" d="M668.587 768h-71.253v85.333h-170.667v-85.333h-71.253c-31.147 0-56.747-25.6-56.747-56.747v-654.080c0-31.573 25.6-57.173 56.747-57.173h312.747c31.573 0 57.173 25.6 57.173 56.747v654.507c0 31.147-25.6 56.747-56.747 56.747zM554.667 170.667h-85.333v85.333h85.333v-85.333zM554.667 341.334h-85.333v213.333h85.333v-213.333z" />
311<glyph unicode="&#xe72d;" d="M469.333 85.334v128h-170.667v-157.867c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v157.867h-192l-64-128z" />
312<glyph unicode="&#xe72e;" d="M469.333 85.334v234.667h-170.667v-264.533c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v264.533h-136.533l-119.467-234.667z" />
313<glyph unicode="&#xe72f;" d="M618.667 362.667l-149.333-277.333v234.667h-85.333l21.333 42.667h-106.667v-307.2c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v307.2h-106.667z" />
314<glyph unicode="&#xe730;" d="M554.667 405.334h85.333l-170.667-320v234.667h-85.333l81.067 149.333h-166.4v-413.867c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v413.867h-170.667v-64z" />
315<glyph unicode="&#xe731;" d="M558.933 405.334h81.067l-170.667-320v234.667h-85.333l123.733 234.667h-209.067v-499.2c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v499.2h-170.667v-149.333h4.267z" />
316<glyph unicode="&#xe732;" d="M640 405.334l-170.667-320v234.667h-85.333l149.333 277.333h-234.667v-541.867c0-29.867 25.6-55.467 55.467-55.467h315.733c29.867 0 55.467 25.6 55.467 55.467v541.867h-170.667v-192h85.333z" />
317<glyph unicode="&#xe733;" d="M668.587 768h-71.253v85.333h-170.667v-85.333h-71.253c-31.147 0-56.747-25.6-56.747-56.747v-654.080c0-31.573 25.6-57.173 56.747-57.173h312.747c31.573 0 57.173 25.6 57.173 56.747v654.507c0 31.147-25.6 56.747-56.747 56.747zM469.333 85.334v234.667h-85.333l170.667 320v-234.667h85.333l-170.667-320z" />
318<glyph unicode="&#xe734;" d="M668.587 768h-71.253v85.333h-170.667v-85.333h-71.253c-31.147 0-56.747-25.6-56.747-56.747v-654.080c0-31.573 25.6-57.173 56.747-57.173h312.747c31.573 0 57.173 25.6 57.173 56.747v654.507c0 31.147-25.6 56.747-56.747 56.747z" />
319<glyph unicode="&#xe735;" d="M668.587 768h-71.253v85.333h-170.667v-85.333h-71.253c-31.147 0-56.747-25.6-56.747-56.747v-654.080c0-31.573 25.6-57.173 56.747-57.173h312.747c31.573 0 57.173 25.6 57.173 56.747v654.507c0 31.147-25.6 56.747-56.747 56.747z" />
320<glyph unicode="&#xe736;" d="M668.587 768h-71.253v85.333h-170.667v-85.333h-71.253c-31.147 0-56.747-25.6-56.747-56.747v-654.080c0-31.573 25.6-57.173 56.747-57.173h312.747c31.573 0 57.173 25.6 57.173 56.747v654.507c0 31.147-25.6 56.747-56.747 56.747zM552.533 172.8h-81.067v81.067h81.067v-81.067zM610.133 397.227s-16.213-17.92-28.587-30.293c-20.48-20.48-35.413-49.067-35.413-68.267h-68.267c0 35.413 19.627 64.853 39.68 85.333l39.68 40.107c11.52 11.52 18.773 27.733 18.773 45.227 0 35.413-28.587 64-64 64s-64-28.587-64-64h-64c0 70.827 57.173 128 128 128s128-57.173 128-128c0-28.16-11.52-53.76-29.867-72.107z" />
321<glyph unicode="&#xe737;" d="M298.667 426.667l-85.333 85.333-85.333-85.333 85.333-85.333 85.333 85.333zM755.627 609.707l-243.627 243.627h-42.667v-323.84l-195.84 195.84-60.16-60.16 238.507-238.507-238.507-238.507 60.16-60.16 195.84 195.84v-323.84h42.667l243.627 243.627-183.467 183.040 183.467 183.040zM554.667 689.92l80.213-80.213-80.213-80.213v160.427zM634.88 243.627l-80.213-80.213v160.427l80.213-80.213zM810.667 512l-85.333-85.333 85.333-85.333 85.333 85.333-85.333 85.333z" />
322<glyph unicode="&#xe738;" d="M554.667 689.92l80.213-80.213-68.267-68.267 60.16-60.16 128.853 128.853-243.627 243.2h-42.667v-214.613l85.333-85.333v136.533zM230.827 768l-60.16-60.16 281.173-281.173-238.507-238.507 60.16-60.16 195.84 195.84v-323.84h42.667l183.040 183.040 98.133-97.707 60.16 60.16-622.507 622.507zM554.667 163.414v160.427l80.213-80.213-80.213-80.213z" />
323<glyph unicode="&#xe739;" d="M607.573 426.24l98.987-98.987c11.947 30.72 18.773 64.427 18.773 99.413s-6.827 67.84-18.347 98.56l-99.413-98.987zM833.28 652.374l-53.76-53.76c26.88-51.627 41.813-109.653 41.813-171.52s-15.36-120.32-41.813-171.52l51.2-51.2c41.387 65.707 65.707 143.36 65.707 226.56-0.427 80.64-23.467 156.587-63.147 221.44zM670.293 609.707l-243.627 243.627h-42.667v-323.84l-195.84 195.84-60.16-60.16 238.507-238.507-238.507-238.507 60.16-60.16 195.84 195.84v-323.84h42.667l243.627 243.627-183.467 183.040 183.467 183.040zM469.333 689.92l80.213-80.213-80.213-80.213v160.427zM549.547 243.627l-80.213-80.213v160.427l80.213-80.213z" />
324<glyph unicode="&#xe73a;" d="M755.627 609.707l-243.627 243.627h-42.667v-323.84l-195.84 195.84-60.16-60.16 238.507-238.507-238.507-238.507 60.16-60.16 195.84 195.84v-323.84h42.667l243.627 243.627-183.467 183.040 183.467 183.040zM554.667 689.92l80.213-80.213-80.213-80.213v160.427zM634.88 243.627l-80.213-80.213v160.427l80.213-80.213z" />
325<glyph unicode="&#xe73b;" d="M462.933 398.934h98.133l-49.067 155.733-49.067-155.733zM853.333 567.894v200.107h-200.107l-141.227 141.227-141.227-141.227h-200.107v-200.107l-141.227-141.227 141.227-141.227v-200.107h200.107l141.227-141.227 141.227 141.227h200.107v200.107l141.227 141.227-141.227 141.227zM610.133 256l-29.867 85.333h-136.533l-29.867-85.333h-81.067l136.533 384h85.333l136.533-384h-81.067z" />
326<glyph unicode="&#xe73c;" d="M853.333 567.894v200.107h-200.107l-141.227 141.227-141.227-141.227h-200.107v-200.107l-141.227-141.227 141.227-141.227v-200.107h200.107l141.227-141.227 141.227 141.227h200.107v200.107l141.227 141.227-141.227 141.227zM512 170.667c-141.227 0-256 114.773-256 256s114.773 256 256 256 256-114.773 256-256-114.773-256-256-256zM512 597.334c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667z" />
327<glyph unicode="&#xe73d;" d="M853.333 285.44l141.227 141.227-141.227 141.227v200.107h-200.107l-141.227 141.227-141.227-141.227h-200.107v-200.107l-141.227-141.227 141.227-141.227v-200.107h200.107l141.227-141.227 141.227 141.227h200.107v200.107zM512 170.667c-141.227 0-256 114.773-256 256s114.773 256 256 256 256-114.773 256-256-114.773-256-256-256z" />
328<glyph unicode="&#xe73e;" d="M853.333 285.44l141.227 141.227-141.227 141.227v200.107h-200.107l-141.227 141.227-141.227-141.227h-200.107v-200.107l-141.227-141.227 141.227-141.227v-200.107h200.107l141.227-141.227 141.227 141.227h200.107v200.107zM512 170.667v512c141.227 0 256-114.773 256-256s-114.773-256-256-256z" />
329<glyph unicode="&#xe73f;" d="M554.667 851.2v-129.28c144.64-20.907 256-144.64 256-295.253 0-38.4-7.68-74.667-20.48-108.373l110.933-65.28c23.893 52.907 37.547 111.787 37.547 173.653 0 221.013-168.533 403.2-384 424.533zM512 128c-165.12 0-298.667 133.547-298.667 298.667 0 150.613 111.36 274.347 256 295.253v129.28c-215.893-21.333-384-203.093-384-424.533 0-235.52 190.72-426.667 426.24-426.667 141.227 0 266.24 68.693 343.893 174.507l-110.933 65.28c-54.613-68.267-138.24-111.787-232.533-111.787z" />
330<glyph unicode="&#xe740;" d="M298.667 725.334h426.667v-85.333h85.333v170.667c0 46.933-38.4 84.907-85.333 84.907l-426.667 0.427c-46.933 0-85.333-38.4-85.333-85.333v-170.667h85.333v85.333zM657.493 230.827l195.84 195.84-195.84 195.84-60.16-60.587 135.253-135.253-135.253-135.253 60.16-60.587zM426.667 291.414l-135.253 135.253 135.253 135.253-60.16 60.587-195.84-195.84 195.84-195.84 60.16 60.587zM725.333 128h-426.667v85.333h-85.333v-170.667c0-46.933 38.4-85.333 85.333-85.333h426.667c46.933 0 85.333 38.4 85.333 85.333v170.667h-85.333v-85.333z" />
331<glyph unicode="&#xe741;" d="M170.667 682.667h768v85.333h-768c-46.933 0-85.333-38.4-85.333-85.333v-469.333h-85.333v-128h597.333v128h-426.667v469.333zM981.333 597.334h-256c-23.467 0-42.667-19.2-42.667-42.667v-426.667c0-23.467 19.2-42.667 42.667-42.667h256c23.467 0 42.667 19.2 42.667 42.667v426.667c0 23.467-19.2 42.667-42.667 42.667zM938.667 213.334h-170.667v298.667h170.667v-298.667z" />
332<glyph unicode="&#xe742;" d="M896 810.667h-768c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h213.333v-85.333h341.333v85.333h213.333c46.933 0 84.907 38.4 84.907 85.333l0.427 512c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-768v512h768v-512zM810.667 597.334h-469.333v-85.333h469.333v85.333zM810.667 426.667h-469.333v-85.333h469.333v85.333zM298.667 597.334h-85.333v-85.333h85.333v85.333zM298.667 426.667h-85.333v-85.333h85.333v85.333z" />
333<glyph unicode="&#xe743;" d="M512 597.334c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM893.44 469.334c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-177.92-19.627-319.147-160.853-338.773-338.773h-87.893v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c177.92 19.627 319.147 160.853 338.773 338.773h87.893v85.333h-87.893zM512 128c-165.12 0-298.667 133.547-298.667 298.667s133.547 298.667 298.667 298.667 298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667z" />
334<glyph unicode="&#xe744;" d="M893.44 469.334c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-177.92-19.627-319.147-160.853-338.773-338.773h-87.893v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c177.92 19.627 319.147 160.853 338.773 338.773h87.893v85.333h-87.893zM512 128c-165.12 0-298.667 133.547-298.667 298.667s133.547 298.667 298.667 298.667 298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667z" />
335<glyph unicode="&#xe745;" d="M893.44 469.334c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-48.213-5.12-93.44-19.627-134.827-41.387l64-64c34.987 14.507 73.387 22.613 113.493 22.613 165.12 0 298.667-133.547 298.667-298.667 0-40.107-8.107-78.507-22.187-113.067l64-64c21.333 40.96 35.84 86.187 41.387 134.4h87.467v85.333h-87.893zM128 756.48l87.040-87.040c-45.653-55.893-76.373-124.587-84.48-200.107h-87.893v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c75.52 8.533 144.213 38.827 200.107 84.48l87.040-87.040 54.187 54.187-713.813 713.813-54.187-54.187zM694.187 190.294c-50.347-38.827-113.493-62.293-182.187-62.293-165.12 0-298.667 133.547-298.667 298.667 0 68.693 23.467 131.84 62.293 182.187l418.56-418.56z" />
336<glyph unicode="&#xe746;" d="M893.44 469.334c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-48.213-5.12-93.44-19.627-134.827-41.387l64-64c34.987 14.507 73.387 22.613 113.493 22.613 165.12 0 298.667-133.547 298.667-298.667 0-40.107-8.107-78.507-22.187-113.067l64-64c21.333 40.96 35.84 86.187 41.387 134.4h87.467v85.333h-87.893zM128 756.48l87.040-87.040c-45.653-55.893-76.373-124.587-84.48-200.107h-87.893v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c75.52 8.533 144.213 38.827 200.107 84.48l87.040-87.040 54.187 54.187-713.813 713.813-54.187-54.187zM694.187 190.294c-50.347-38.827-113.493-62.293-182.187-62.293-165.12 0-298.667 133.547-298.667 298.667 0 68.693 23.467 131.84 62.293 182.187l418.56-418.56z" />
337<glyph unicode="&#xe747;" d="M893.44 469.334c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-177.92-19.627-319.147-160.853-338.773-338.773h-87.893v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c177.92 19.627 319.147 160.853 338.773 338.773h87.893v85.333h-87.893zM512 128c-165.12 0-298.667 133.547-298.667 298.667s133.547 298.667 298.667 298.667 298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667z" />
338<glyph unicode="&#xe748;" d="M298.667 170.667h85.333v512h-85.333v-512zM469.333-0h85.333v853.333h-85.333v-853.333zM128 341.334h85.333v170.667h-85.333v-170.667zM640 170.667h85.333v512h-85.333v-512zM810.667 512v-170.667h85.333v170.667h-85.333z" />
339<glyph unicode="&#xe749;" d="M85.333-0h853.333v853.333zM725.333 640l-640-640h640z" />
340<glyph unicode="&#xe74a;" d="M149.333 473.6l362.667-452.267 362.667 448c-21.333 17.067-157.867 128-362.667 128s-341.333-110.933-362.667-123.733z" />
341<glyph unicode="&#xe74b;" d="M853.333 853.334h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM853.333 85.334h-682.667v682.667h682.667v-682.667zM768 682.667h-213.333c-46.933 0-85.333-38.4-85.333-85.333v-97.28c-25.6-14.933-42.667-41.813-42.667-73.387 0-46.933 38.4-85.333 85.333-85.333s85.333 38.4 85.333 85.333c0 31.573-17.067 58.88-42.667 73.387v97.28h128v-341.333h-341.333v341.333h85.333v85.333h-170.667v-512h512v512z" />
342<glyph unicode="&#xe74c;" d="M170.667 768h298.667v85.333h-298.667c-46.933 0-85.333-38.4-85.333-85.333v-298.667h85.333v298.667zM426.667 384l-170.667-213.333h512l-128 170.667-86.613-115.627-126.72 158.293zM725.333 576c0 35.413-28.587 64-64 64s-64-28.587-64-64 28.587-64 64-64 64 28.587 64 64zM853.333 853.334h-298.667v-85.333h298.667v-298.667h85.333v298.667c0 46.933-38.4 85.333-85.333 85.333zM853.333 85.334h-298.667v-85.333h298.667c46.933 0 85.333 38.4 85.333 85.333v298.667h-85.333v-298.667zM170.667 384h-85.333v-298.667c0-46.933 38.4-85.333 85.333-85.333h298.667v85.333h-298.667v298.667z" />
343<glyph unicode="&#xe74d;" d="M554.667 384v-341.333h341.333v341.333h-341.333zM128 42.667h341.333v341.333h-341.333v-341.333zM128 810.667v-341.333h341.333v341.333h-341.333zM710.827 866.56l-241.493-241.067 241.493-241.493 241.493 241.493-241.493 241.067z" />
344<glyph unicode="&#xe74e;" d="M896 725.334h-768c-46.933 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM810.667 213.334h-597.333v426.667h597.333v-426.667zM426.667 256h170.667c23.467 0 42.667 19.2 42.667 42.667v128c0 23.467-19.2 42.667-42.667 42.667v42.667c0 47.36-38.4 85.333-85.333 85.333-47.36 0-85.333-38.4-85.333-85.333v-42.667c-23.467 0-42.667-19.2-42.667-42.667v-128c0-23.467 19.2-42.667 42.667-42.667zM460.8 512c0 28.16 23.040 51.2 51.2 51.2s51.2-23.040 51.2-51.2v-42.667h-102.4v42.667z" />
345<glyph unicode="&#xe74f;" d="M426.667 256h170.667c23.467 0 42.667 19.2 42.667 42.667v128c0 23.467-19.2 42.667-42.667 42.667v42.667c0 47.36-38.4 85.333-85.333 85.333-47.36 0-85.333-38.4-85.333-85.333v-42.667c-23.467 0-42.667-19.2-42.667-42.667v-128c0-23.467 19.2-42.667 42.667-42.667zM460.8 512c0 28.16 23.040 51.2 51.2 51.2s51.2-23.040 51.2-51.2v-42.667h-102.4v42.667zM725.333 896h-426.667c-46.933 0-85.333-38.4-85.333-85.333v-768c0-46.933 38.4-85.333 85.333-85.333h426.667c46.933 0 85.333 38.4 85.333 85.333v768c0 46.933-38.4 85.333-85.333 85.333zM725.333 128h-426.667v597.333h426.667v-597.333z" />
346<glyph unicode="&#xe750;" d="M992 393.814l-109.653 109.653-60.16-60.16 94.72-94.72-241.493-241.493-482.987 482.987 241.493 241.493 89.6-89.6 60.16 60.16-104.533 104.533c-25.173 25.173-65.707 25.173-90.453 0l-271.36-271.36c-25.173-25.173-25.173-65.707 0-90.453l512.853-512.853c25.173-25.173 65.707-25.173 90.453 0l271.36 271.36c25.173 25.173 25.173 65.707 0 90.453zM361.387 64.854c-139.52 65.707-239.36 201.387-254.72 361.813h-64c21.76-262.827 241.493-469.333 509.867-469.333l28.16 1.28-162.56 162.987-56.747-56.747zM682.667 554.667h213.333c23.467 0 42.667 19.2 42.667 42.667v170.667c0 23.467-19.2 42.667-42.667 42.667v21.333c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-21.333c-23.467 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 19.2-42.667 42.667-42.667zM716.8 832c0 40.107 32.427 72.533 72.533 72.533s72.533-32.427 72.533-72.533v-21.333h-145.067v21.333z" />
347<glyph unicode="&#xe751;" d="M703.147 831.147c139.52-66.133 239.36-201.387 254.72-361.813h64c-21.76 262.827-241.493 469.333-509.867 469.333l-28.16-1.28 162.56-162.56 56.747 56.32zM436.48 864c-25.173 25.173-65.707 25.173-90.453 0l-271.36-271.36c-25.173-25.173-25.173-65.707 0-90.453l512.853-512.853c25.173-25.173 65.707-25.173 90.453 0l271.36 271.36c25.173 25.173 25.173 65.707 0 90.453l-512.853 512.853zM632.747 34.56l-512.853 512.853 271.36 271.36 512.853-512.853-271.36-271.36zM320.853 22.187c-139.52 65.707-239.36 201.387-254.72 361.813h-64c21.76-262.827 241.493-469.333 509.867-469.333l28.16 1.28-162.56 162.56-56.747-56.32z" />
348<glyph unicode="&#xe752;" d="M768 853.334h-341.333l-255.147-256-0.853-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM512 597.334h-85.333v170.667h85.333v-170.667zM640 597.334h-85.333v170.667h85.333v-170.667zM768 597.334h-85.333v170.667h85.333v-170.667z" />
349<glyph unicode="&#xe753;" d="M384 256h277.333c58.88 0 106.667 47.787 106.667 106.667s-47.787 106.667-106.667 106.667h-2.133c-10.24 72.107-72.107 128-147.2 128-59.733 0-110.933-35.413-134.827-86.187h-6.827c-64.427-6.827-114.347-61.013-114.347-127.147 0-70.827 57.173-128 128-128zM896 810.667h-768c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 127.574h-768v598.187h768v-598.187z" />
350<glyph unicode="&#xe755;" d="M512 426.667l-426.667-426.667h426.667v426.667z" />
351<glyph unicode="&#xe756;" d="M597.333 512l-512-512h512v512z" />
352<glyph unicode="&#xe757;" d="M725.333 640l-640-640h640v640z" />
353<glyph unicode="&#xe758;" d="M85.333-0h853.333v853.333z" />
354<glyph unicode="&#xe759;" d="M853.333-0h85.333v85.333h-85.333v-85.333zM853.333 512v-341.333h85.333v341.333h-85.333z" />
355<glyph unicode="&#xe75a;" d="M853.333 512v-341.333h85.333v341.333h-85.333zM512-0v426.667l-426.667-426.667h426.667zM853.333-0h85.333v85.333h-85.333v-85.333z" />
356<glyph unicode="&#xe75b;" d="M597.333-0v512l-512-512h512zM853.333 512v-341.333h85.333v341.333h-85.333zM853.333-0h85.333v85.333h-85.333v-85.333z" />
357<glyph unicode="&#xe75c;" d="M725.333-0v640l-640-640h640zM853.333 512v-341.333h85.333v341.333h-85.333zM853.333-0h85.333v85.333h-85.333v-85.333z" />
358<glyph unicode="&#xe75d;" d="M853.333 170.667h85.333v341.333h-85.333v-341.333zM853.333-0h85.333v85.333h-85.333v-85.333zM85.333-0h682.667v597.333h170.667v256l-853.333-853.333z" />
359<glyph unicode="&#xe75e;" d="M810.24 725.334c0 46.933-37.973 85.333-84.907 85.333h-298.667l-99.84-99.84 483.84-483.84-0.427 498.347zM155.733 773.12l-54.187-54.187 111.787-111.787v-479.147c0-46.933 38.4-85.333 85.333-85.333h427.093c14.933 0 28.587 4.267 40.96 11.093l80.213-80.213 54.187 54.187-745.387 745.387z" />
360<glyph unicode="&#xe75f;" d="M853.333 647.254v-561.92h-561.92l561.92 561.92zM938.667 853.334l-853.333-853.333h853.333v853.333z" />
361<glyph unicode="&#xe760;" d="M896 896l-366.507-366.507 366.507-366.507v733.013zM203.52 746.667l-54.187-54.187 271.36-271.36-378.027-378.453h756.48l85.333-85.333 54.187 54.187-735.147 735.147z" />
362<glyph unicode="&#xe762;" d="M285.867 302.934l226.133-281.6 226.133 281.6c-8.533 12.8-98.133 81.067-226.133 81.067s-217.6-68.267-226.133-81.067z" />
363<glyph unicode="&#xe763;" d="M204.8 405.334l307.2-384 307.2 384c-17.067 12.8-132.267 106.667-307.2 106.667s-294.4-93.867-307.2-106.667z" />
364<glyph unicode="&#xe764;" d="M149.333 473.6l362.667-452.267 362.667 448c-21.333 17.067-157.867 128-362.667 128s-341.333-110.933-362.667-123.733z" />
365<glyph unicode="&#xe765;" d="M512 21.334l494.933 618.667c-17.067 12.8-209.067 170.667-494.933 170.667s-477.867-157.867-494.933-170.667l494.933-618.667c0 0 0 0 0 0z" />
366<glyph unicode="&#xe766;" d="M1008.64 640c-19.2 14.507-210.347 170.667-496.64 170.667-64 0-123.307-8.107-177.067-20.48l440.747-440.32 232.96 290.133zM727.040 289.28l-587.52 587.947-54.187-54.613 87.467-87.893c-91.307-41.813-147.627-87.040-157.44-94.72l496.64-618.667 0.427 0.427 166.4 207.36 141.653-141.653 54.187 54.187-147.627 147.627z" />
367<glyph unicode="&#xe767;" d="M554.667-0l243.2 302.933c-12.8 4.267-102.4 81.067-243.2 81.067s-230.4-76.8-243.2-81.067l243.2-302.933z" horiz-adv-x="1109" />
368<glyph unicode="&#xe768;" d="M554.667-0l320 401.067c-8.533 8.533-132.267 110.933-320 110.933s-311.467-102.4-324.267-110.933l324.267-401.067c0 0 0 0 0 0z" horiz-adv-x="1109" />
369<glyph unicode="&#xe769;" d="M554.667-0l401.067 503.467c-12.8 8.533-170.667 136.533-401.067 136.533s-388.267-128-401.067-136.533l401.067-503.467c0 0 0 0 0 0z" horiz-adv-x="1109" />
370<glyph unicode="&#xe76a;" d="M554.667-0l537.6 669.867c-21.333 12.8-226.133 183.467-537.6 183.467s-516.267-170.667-537.6-183.467l537.6-669.867z" horiz-adv-x="1109" />
371<glyph unicode="&#xe76b;" d="M938.667-0h85.333v85.333h-85.333v-85.333zM938.667 512v-341.333h85.333v341.333h-85.333z" horiz-adv-x="1109" />
372<glyph unicode="&#xe76c;" d="M230.4 401.067l324.267-401.067 298.667 371.2v46.933c-46.933 29.867-153.6 93.867-298.667 93.867-187.733 0-311.467-102.4-324.267-110.933zM938.667 512v-341.333h85.333v341.333h-85.333zM938.667-0h85.333v85.333h-85.333v-85.333z" horiz-adv-x="1109" />
373<glyph unicode="&#xe76d;" d="M853.333 371.2v196.267c-68.267 34.133-174.933 72.533-298.667 72.533-230.4 0-388.267-128-401.067-136.533l401.067-503.467c0 0 298.667 371.2 298.667 371.2zM938.667-0h85.333v85.333h-85.333v-85.333zM938.667 512v-341.333h85.333v341.333h-85.333z" horiz-adv-x="1109" />
374<glyph unicode="&#xe76e;" d="M938.667-0h85.333v85.333h-85.333v-85.333zM554.667 853.334c-311.467 0-516.267-170.667-537.6-183.467l537.6-669.867 298.667 371.2v226.133h179.2l59.733 72.533c-21.333 12.8-226.133 183.467-537.6 183.467zM938.667 170.667h85.333v341.333h-85.333v-341.333z" horiz-adv-x="1109" />
375<glyph unicode="&#xe76f;" d="M311.467 302.934l243.2-298.667 243.2 302.933c-12.8 0-102.4 76.8-243.2 76.8s-230.4-76.8-243.2-81.067zM938.667-0h85.333v85.333h-85.333v-85.333zM938.667 512v-341.333h85.333v341.333h-85.333z" horiz-adv-x="1109" />
376<glyph unicode="&#xe770;" d="M891.733 499.2c-81.067 0-149.333-68.267-149.333-149.333h76.8c0 42.667 34.133 76.8 76.8 76.8s76.8-34.133 76.8-76.8c0-21.333-8.533-38.4-21.333-51.2l-46.933-46.933c-25.6-25.6-42.667-64-42.667-106.667v-17.067h76.8c0 55.467 17.067 76.8 42.667 106.667l34.133 34.133c21.333 21.333 34.133 51.2 34.133 85.333-8.533 76.8-76.8 145.067-157.867 145.067zM853.333-0h85.333v85.333h-85.333v-85.333z" horiz-adv-x="1109" />
377<glyph unicode="&#xe771;" d="M554.667 768c181.333 0 325.12-64.427 413.013-117.333l-413.013-514.133-412.587 514.133c87.467 52.907 231.253 117.333 412.587 117.333zM554.667 853.334c-309.76 0-516.267-168.96-536.747-184.32l536.747-669.013 0.427 0.427 536.32 668.587c-20.48 15.36-226.987 184.32-536.747 184.32z" horiz-adv-x="1109" />
378<glyph unicode="&#xe772;" d="M85.333 85.334h853.333v170.667h-853.333v-170.667zM170.667 213.334h85.333v-85.333h-85.333v85.333zM85.333 768v-170.667h853.333v170.667h-853.333zM256 640h-85.333v85.333h85.333v-85.333zM85.333 341.334h853.333v170.667h-853.333v-170.667zM170.667 469.334h85.333v-85.333h-85.333v85.333z" />
379<glyph unicode="&#xe773;" d="M640 640v-170.667h42.667v-85.333h-128v341.333h85.333l-128 170.667-128-170.667h85.333v-341.333h-128v88.32c29.867 15.787 51.2 46.080 51.2 82.347 0 51.627-42.24 93.867-93.867 93.867s-93.867-42.24-93.867-93.867c0-36.267 21.333-66.56 51.2-82.347v-88.32c0-47.36 37.973-85.333 85.333-85.333h128v-130.133c-30.293-15.787-51.2-46.933-51.2-83.2 0-52.053 42.24-93.867 93.867-93.867s93.867 41.813 93.867 93.867c0 36.267-20.907 67.413-51.2 83.2v130.133h128c47.36 0 85.333 37.973 85.333 85.333v85.333h42.667v170.667h-170.667z" />
380<glyph unicode="&#xe774;" d="M874.667 533.334c11.947 0 23.467-1.707 34.56-3.413l114.773 152.747c-142.507 107.093-320 170.667-512 170.667s-369.493-63.573-512-170.667l512-682.667 149.333 199.253v120.747c0 117.76 95.573 213.333 213.333 213.333zM981.333 256v64c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-64c-23.467 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 19.2-42.667 42.667-42.667h213.333c23.467 0 42.667 19.2 42.667 42.667v170.667c0 23.467-19.2 42.667-42.667 42.667zM938.667 256h-128v64c0 35.413 28.587 64 64 64s64-28.587 64-64v-64z" />
381<glyph unicode="&#xe775;" d="M512 469.334c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM768 384c0 141.227-114.773 256-256 256s-256-114.773-256-256c0-94.72 51.627-177.067 128-221.44l42.667 74.24c-50.773 29.867-85.333 84.053-85.333 147.2 0 94.293 76.373 170.667 170.667 170.667s170.667-76.373 170.667-170.667c0-63.147-34.56-117.333-85.333-147.2l42.667-74.24c76.373 44.373 128 126.72 128 221.44zM512 810.667c-235.52 0-426.667-191.147-426.667-426.667 0-157.867 85.76-295.253 212.907-369.067l42.667 73.813c-101.547 59.307-170.24 168.96-170.24 295.253 0 188.587 152.747 341.333 341.333 341.333s341.333-152.747 341.333-341.333c0-126.293-68.693-235.947-170.667-295.253l42.667-73.813c127.573 73.813 213.333 211.2 213.333 369.067 0 235.52-191.147 426.667-426.667 426.667z" />
382<glyph unicode="&#xe776;" d="M704 682.667v-490.667c0-94.293-76.373-170.667-170.667-170.667s-170.667 76.373-170.667 170.667v533.333c0 58.88 47.787 106.667 106.667 106.667s106.667-47.787 106.667-106.667v-448c0-23.467-19.2-42.667-42.667-42.667s-42.667 19.2-42.667 42.667v405.333h-64v-405.333c0-58.88 47.787-106.667 106.667-106.667s106.667 47.787 106.667 106.667v448c0 94.293-76.373 170.667-170.667 170.667s-170.667-76.373-170.667-170.667v-533.333c0-129.707 104.96-234.667 234.667-234.667s234.667 104.96 234.667 234.667v490.667h-64z" />
383<glyph unicode="&#xe777;" d="M503.467 473.6c-96.853 25.173-128 51.2-128 91.733 0 46.507 43.093 78.933 115.2 78.933 75.947 0 104.107-36.267 106.667-89.6h94.293c-2.987 73.387-47.787 140.8-136.96 162.56v93.44h-128v-92.16c-82.773-17.92-149.333-71.68-149.333-154.027 0-98.56 81.493-147.627 200.533-176.213 106.667-25.6 128-63.147 128-102.827 0-29.44-20.907-76.373-115.2-76.373-87.893 0-122.453 39.253-127.147 89.6h-93.867c5.12-93.44 75.093-145.92 157.013-163.413v-92.587h128v91.733c83.2 15.787 149.333 64 149.333 151.467 0 121.173-103.68 162.56-200.533 187.733z" />
384<glyph unicode="&#xe778;" d="M128 810.667v-768h768v768h-768zM469.333 128h-256v256h256v-256zM469.333 469.334h-256v256h256v-256zM810.667 128h-256v256h256v-256zM810.667 469.334h-256v256h256v-256z" />
385<glyph unicode="&#xe779;" d="M384 469.334h-85.333v-85.333h85.333v85.333zM554.667 298.667h-85.333v-85.333h85.333v85.333zM384 810.667h-85.333v-85.333h85.333v85.333zM554.667 469.334h-85.333v-85.333h85.333v85.333zM213.333 810.667h-85.333v-85.333h85.333v85.333zM554.667 640h-85.333v-85.333h85.333v85.333zM725.333 469.334h-85.333v-85.333h85.333v85.333zM554.667 810.667h-85.333v-85.333h85.333v85.333zM725.333 810.667h-85.333v-85.333h85.333v85.333zM810.667 384h85.333v85.333h-85.333v-85.333zM810.667 213.334h85.333v85.333h-85.333v-85.333zM213.333 640h-85.333v-85.333h85.333v85.333zM810.667 810.667v-85.333h85.333v85.333h-85.333zM810.667 554.667h85.333v85.333h-85.333v-85.333zM213.333 469.334h-85.333v-85.333h85.333v85.333zM128 42.667h768v85.333h-768v-85.333zM213.333 298.667h-85.333v-85.333h85.333v85.333z" />
386<glyph unicode="&#xe77a;" d="M298.667 725.334h85.333v85.333h-85.333v-85.333zM298.667 384h85.333v85.333h-85.333v-85.333zM298.667 42.667h85.333v85.333h-85.333v-85.333zM469.333 213.334h85.333v85.333h-85.333v-85.333zM469.333 42.667h85.333v85.333h-85.333v-85.333zM128 42.667h85.333v85.333h-85.333v-85.333zM128 213.334h85.333v85.333h-85.333v-85.333zM128 384h85.333v85.333h-85.333v-85.333zM128 554.667h85.333v85.333h-85.333v-85.333zM128 725.334h85.333v85.333h-85.333v-85.333zM469.333 384h85.333v85.333h-85.333v-85.333zM810.667 213.334h85.333v85.333h-85.333v-85.333zM810.667 384h85.333v85.333h-85.333v-85.333zM810.667 42.667h85.333v85.333h-85.333v-85.333zM810.667 554.667h85.333v85.333h-85.333v-85.333zM469.333 554.667h85.333v85.333h-85.333v-85.333zM810.667 810.667v-85.333h85.333v85.333h-85.333zM469.333 725.334h85.333v85.333h-85.333v-85.333zM640 42.667h85.333v85.333h-85.333v-85.333zM640 384h85.333v85.333h-85.333v-85.333zM640 725.334h85.333v85.333h-85.333v-85.333z" />
387<glyph unicode="&#xe77b;" d="M757.333 640l-160 160-426.667-426.667v-160h160l426.667 426.667zM883.627 766.294c16.64 16.64 16.64 43.52 0 60.16l-99.84 99.84c-16.64 16.64-43.52 16.64-60.16 0l-83.627-83.627 160-160 83.627 83.627zM0 85.334h1024v-170.667h-1024z" />
388<glyph unicode="&#xe77c;" d="M128 42.667h85.333v85.333h-85.333v-85.333zM213.333 640h-85.333v-85.333h85.333v85.333zM128 213.334h85.333v85.333h-85.333v-85.333zM298.667 42.667h85.333v85.333h-85.333v-85.333zM213.333 810.667h-85.333v-85.333h85.333v85.333zM384 810.667h-85.333v-85.333h85.333v85.333zM725.333 810.667h-85.333v-85.333h85.333v85.333zM554.667 640h-85.333v-85.333h85.333v85.333zM554.667 810.667h-85.333v-85.333h85.333v85.333zM810.667 213.334h85.333v85.333h-85.333v-85.333zM469.333 42.667h85.333v85.333h-85.333v-85.333zM128 384h768v85.333h-768v-85.333zM810.667 810.667v-85.333h85.333v85.333h-85.333zM810.667 554.667h85.333v85.333h-85.333v-85.333zM469.333 213.334h85.333v85.333h-85.333v-85.333zM640 42.667h85.333v85.333h-85.333v-85.333zM810.667 42.667h85.333v85.333h-85.333v-85.333z" />
389<glyph unicode="&#xe77d;" d="M128 42.667h85.333v85.333h-85.333v-85.333zM298.667 42.667h85.333v85.333h-85.333v-85.333zM213.333 640h-85.333v-85.333h85.333v85.333zM128 213.334h85.333v85.333h-85.333v-85.333zM384 810.667h-85.333v-85.333h85.333v85.333zM213.333 810.667h-85.333v-85.333h85.333v85.333zM725.333 810.667h-85.333v-85.333h85.333v85.333zM810.667 554.667h85.333v85.333h-85.333v-85.333zM810.667 810.667v-85.333h85.333v85.333h-85.333zM640 42.667h85.333v85.333h-85.333v-85.333zM554.667 810.667h-85.333v-341.333h-341.333v-85.333h341.333v-341.333h85.333v341.333h341.333v85.333h-341.333v341.333zM810.667 42.667h85.333v85.333h-85.333v-85.333zM810.667 213.334h85.333v85.333h-85.333v-85.333z" />
390<glyph unicode="&#xe77e;" d="M469.333 42.667h85.333v85.333h-85.333v-85.333zM469.333 213.334h85.333v85.333h-85.333v-85.333zM469.333 725.334h85.333v85.333h-85.333v-85.333zM469.333 554.667h85.333v85.333h-85.333v-85.333zM469.333 384h85.333v85.333h-85.333v-85.333zM298.667 42.667h85.333v85.333h-85.333v-85.333zM298.667 725.334h85.333v85.333h-85.333v-85.333zM298.667 384h85.333v85.333h-85.333v-85.333zM128 42.667h85.333v768h-85.333v-768zM810.667 554.667h85.333v85.333h-85.333v-85.333zM640 42.667h85.333v85.333h-85.333v-85.333zM810.667 213.334h85.333v85.333h-85.333v-85.333zM810.667 810.667v-85.333h85.333v85.333h-85.333zM810.667 384h85.333v85.333h-85.333v-85.333zM810.667 42.667h85.333v85.333h-85.333v-85.333zM640 384h85.333v85.333h-85.333v-85.333zM640 725.334h85.333v85.333h-85.333v-85.333z" />
391<glyph unicode="&#xe77f;" d="M554.667 640h-85.333v-85.333h85.333v85.333zM554.667 469.334h-85.333v-85.333h85.333v85.333zM725.333 469.334h-85.333v-85.333h85.333v85.333zM128 810.667v-768h768v768h-768zM810.667 128h-597.333v597.333h597.333v-597.333zM554.667 298.667h-85.333v-85.333h85.333v85.333zM384 469.334h-85.333v-85.333h85.333v85.333z" />
392<glyph unicode="&#xe780;" d="M298.667 42.667h85.333v85.333h-85.333v-85.333zM128 725.334h85.333v85.333h-85.333v-85.333zM298.667 725.334h85.333v85.333h-85.333v-85.333zM298.667 384h85.333v85.333h-85.333v-85.333zM128 42.667h85.333v85.333h-85.333v-85.333zM469.333 42.667h85.333v85.333h-85.333v-85.333zM128 384h85.333v85.333h-85.333v-85.333zM128 213.334h85.333v85.333h-85.333v-85.333zM128 554.667h85.333v85.333h-85.333v-85.333zM469.333 213.334h85.333v85.333h-85.333v-85.333zM640 384h85.333v85.333h-85.333v-85.333zM810.667 810.667v-768h85.333v768h-85.333zM640 42.667h85.333v85.333h-85.333v-85.333zM640 725.334h85.333v85.333h-85.333v-85.333zM469.333 384h85.333v85.333h-85.333v-85.333zM469.333 725.334h85.333v85.333h-85.333v-85.333zM469.333 554.667h85.333v85.333h-85.333v-85.333z" />
393<glyph unicode="&#xe781;" d="M640 42.667h85.333v85.333h-85.333v-85.333zM810.667 42.667h85.333v85.333h-85.333v-85.333zM298.667 42.667h85.333v85.333h-85.333v-85.333zM469.333 42.667h85.333v85.333h-85.333v-85.333zM810.667 213.334h85.333v85.333h-85.333v-85.333zM810.667 384h85.333v85.333h-85.333v-85.333zM128 810.667v-768h85.333v682.667h682.667v85.333h-768zM810.667 554.667h85.333v85.333h-85.333v-85.333z" />
394<glyph unicode="&#xe782;" d="M298.667 42.667h85.333v85.333h-85.333v-85.333zM298.667 384h85.333v85.333h-85.333v-85.333zM469.333 384h85.333v85.333h-85.333v-85.333zM469.333 42.667h85.333v85.333h-85.333v-85.333zM128 213.334h85.333v85.333h-85.333v-85.333zM128 42.667h85.333v85.333h-85.333v-85.333zM128 384h85.333v85.333h-85.333v-85.333zM128 554.667h85.333v85.333h-85.333v-85.333zM469.333 213.334h85.333v85.333h-85.333v-85.333zM810.667 554.667h85.333v85.333h-85.333v-85.333zM810.667 384h85.333v85.333h-85.333v-85.333zM128 810.667v-85.333h768v85.333h-768zM810.667 213.334h85.333v85.333h-85.333v-85.333zM640 42.667h85.333v85.333h-85.333v-85.333zM469.333 554.667h85.333v85.333h-85.333v-85.333zM810.667 42.667h85.333v85.333h-85.333v-85.333zM640 384h85.333v85.333h-85.333v-85.333z" />
395<glyph unicode="&#xe783;" d="M128 554.667h85.333v85.333h-85.333v-85.333zM128 725.334h85.333v85.333h-85.333v-85.333zM298.667 42.667h85.333v85.333h-85.333v-85.333zM298.667 384h85.333v85.333h-85.333v-85.333zM128 384h85.333v85.333h-85.333v-85.333zM128 42.667h85.333v85.333h-85.333v-85.333zM128 213.334h85.333v85.333h-85.333v-85.333zM298.667 725.334h85.333v85.333h-85.333v-85.333zM810.667 213.334h85.333v85.333h-85.333v-85.333zM469.333 42.667h85.333v768h-85.333v-768zM810.667 42.667h85.333v85.333h-85.333v-85.333zM810.667 384h85.333v85.333h-85.333v-85.333zM810.667 810.667v-85.333h85.333v85.333h-85.333zM810.667 554.667h85.333v85.333h-85.333v-85.333zM640 725.334h85.333v85.333h-85.333v-85.333zM640 42.667h85.333v85.333h-85.333v-85.333zM640 384h85.333v85.333h-85.333v-85.333z" />
396<glyph unicode="&#xe784;" d="M298.667 298.667v-85.333h426.667v85.333h-426.667zM128 42.667h768v85.333h-768v-85.333zM128 384h768v85.333h-768v-85.333zM298.667 640v-85.333h426.667v85.333h-426.667zM128 810.667v-85.333h768v85.333h-768z" />
397<glyph unicode="&#xe785;" d="M128 42.667h768v85.333h-768v-85.333zM128 213.334h768v85.333h-768v-85.333zM128 384h768v85.333h-768v-85.333zM128 554.667h768v85.333h-768v-85.333zM128 810.667v-85.333h768v85.333h-768z" />
398<glyph unicode="&#xe786;" d="M640 298.667h-512v-85.333h512v85.333zM640 640h-512v-85.333h512v85.333zM128 384h768v85.333h-768v-85.333zM128 42.667h768v85.333h-768v-85.333zM128 810.667v-85.333h768v85.333h-768z" />
399<glyph unicode="&#xe787;" d="M128 42.667h768v85.333h-768v-85.333zM384 213.334h512v85.333h-512v-85.333zM128 384h768v85.333h-768v-85.333zM384 554.667h512v85.333h-512v-85.333zM128 810.667v-85.333h768v85.333h-768z" />
400<glyph unicode="&#xe788;" d="M665.6 478.294c41.387 28.587 70.4 75.52 70.4 119.040 0 96.427-74.667 170.667-170.667 170.667h-266.667v-597.333h300.373c89.173 0 158.293 72.533 158.293 161.707 0 64.853-36.693 120.32-91.733 145.92zM426.667 661.334h128c35.413 0 64-28.587 64-64s-28.587-64-64-64h-128v128zM576 277.334h-149.333v128h149.333c35.413 0 64-28.587 64-64s-28.587-64-64-64z" />
401<glyph unicode="&#xe789;" d="M139.52 725.334l-54.187-54.187 297.387-297.387-105.387-245.76h128l66.987 156.16 241.493-241.493 54.187 54.187-628.48 628.48zM256 725.334v-7.68l120.32-120.32h102.4l-30.72-71.68 89.6-89.6 68.693 161.28h247.040v128h-597.333z" />
402<glyph unicode="&#xe78a;" d="M706.56 557.227l-381.44 381.44-60.16-60.16 101.547-101.547-219.733-219.733c-25.173-25.173-25.173-65.707 0-90.453l234.667-234.667c12.373-12.373 29.013-18.773 45.227-18.773s32.853 6.4 45.227 18.773l234.667 234.667c25.173 24.747 25.173 65.28 0 90.453zM222.293 512l204.373 204.373 204.373-204.373h-408.747zM810.667 448s-85.333-92.587-85.333-149.333c0-46.933 38.4-85.333 85.333-85.333s85.333 38.4 85.333 85.333c0 56.747-85.333 149.333-85.333 149.333zM0 85.334h1024v-170.667h-1024z" />
403<glyph unicode="&#xe78b;" d="M768 341.334c0 170.667-256 460.8-256 460.8s-56.747-64.427-116.48-150.187l366.507-366.507c3.84 17.92 5.973 36.693 5.973 55.893zM730.453 208.214l-505.6 505.6-54.187-54.613 141.653-141.653c-32.853-61.867-56.32-124.587-56.32-176.213 0-141.227 114.773-256 256-256 64.853 0 123.733 24.32 168.96 64l112.213-112.213 54.187 54.187-116.907 116.907z" />
404<glyph unicode="&#xe78c;" d="M0 85.334h1024v-170.667h-1024zM469.333 810.667l-234.667-597.333h96l47.787 128h266.667l47.787-128h96l-234.24 597.333h-85.333zM410.453 426.667l101.547 270.080 101.547-270.080h-203.093z" />
405<glyph unicode="&#xe78d;" d="M469.333 213.334h426.667v85.333h-426.667v-85.333zM128 426.667l170.667-170.667v341.333l-170.667-170.667zM128 42.667h768v85.333h-768v-85.333zM128 810.667v-85.333h768v85.333h-768zM469.333 554.667h426.667v85.333h-426.667v-85.333zM469.333 384h426.667v85.333h-426.667v-85.333z" />
406<glyph unicode="&#xe78e;" d="M128 42.667h768v85.333h-768v-85.333zM128 597.334v-341.333l170.667 170.667-170.667 170.667zM469.333 213.334h426.667v85.333h-426.667v-85.333zM128 810.667v-85.333h768v85.333h-768zM469.333 554.667h426.667v85.333h-426.667v-85.333zM469.333 384h426.667v85.333h-426.667v-85.333z" />
407<glyph unicode="&#xe78f;" d="M426.667 768v-128h94.293l-145.92-341.333h-119.040v-128h341.333v128h-94.293l145.92 341.333h119.040v128z" />
408<glyph unicode="&#xe790;" d="M256 640h106.667l-149.333 149.333-149.333-149.333h106.667v-426.667h-106.667l149.333-149.333 149.333 149.333h-106.667v426.667zM426.667 725.334v-85.333h512v85.333h-512zM426.667 128h512v85.333h-512v-85.333zM426.667 384h512v85.333h-512v-85.333z" />
409<glyph unicode="&#xe791;" d="M170.667 490.667c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM170.667 746.667c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM170.667 227.414c-31.573 0-56.747-25.6-56.747-56.747s25.6-56.747 56.747-56.747 56.747 25.6 56.747 56.747-25.173 56.747-56.747 56.747zM298.667 128h597.333v85.333h-597.333v-85.333zM298.667 384h597.333v85.333h-597.333v-85.333zM298.667 725.334v-85.333h597.333v85.333h-597.333z" />
410<glyph unicode="&#xe792;" d="M85.333 213.334h85.333v-21.333h-42.667v-42.667h42.667v-21.333h-85.333v-42.667h128v170.667h-128v-42.667zM128 597.334h42.667v170.667h-85.333v-42.667h42.667v-128zM85.333 469.334h76.8l-76.8-89.6v-38.4h128v42.667h-76.8l76.8 89.6v38.4h-128v-42.667zM298.667 725.334v-85.333h597.333v85.333h-597.333zM298.667 128h597.333v85.333h-597.333v-85.333zM298.667 384h597.333v85.333h-597.333v-85.333z" />
411<glyph unicode="&#xe793;" d="M768 768v42.667c0 23.467-19.2 42.667-42.667 42.667h-512c-23.467 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 19.2-42.667 42.667-42.667h512c23.467 0 42.667 19.2 42.667 42.667v42.667h42.667v-170.667h-426.667v-469.333c0-23.467 19.2-42.667 42.667-42.667h85.333c23.467 0 42.667 19.2 42.667 42.667v384h341.333v341.333h-128z" />
412<glyph unicode="&#xe794;" d="M256 213.334h128l85.333 170.667v256h-256v-256h128zM597.333 213.334h128l85.333 170.667v256h-256v-256h128z" />
413<glyph unicode="&#xe795;" d="M384 768v-128h213.333v-512h128v512h213.333v128h-554.667zM128 426.667h128v-298.667h128v298.667h128v128h-384v-128z" />
414<glyph unicode="&#xe796;" d="M426.667 128h170.667v128h-170.667v-128zM213.333 768v-128h213.333v-128h170.667v128h213.333v128h-597.333zM128 341.334h768v85.333h-768v-85.333z" />
415<glyph unicode="&#xe797;" d="M384 512v-213.333h85.333v469.333h85.333v-469.333h85.333v469.333h85.333v85.333h-341.333c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667zM896 170.667l-170.667 170.667v-128h-512v-85.333h512v-128l170.667 170.667z" />
416<glyph unicode="&#xe798;" d="M426.667 512v-213.333h85.333v469.333h85.333v-469.333h85.333v469.333h85.333v85.333h-341.333c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667zM341.333 213.334v128l-170.667-170.667 170.667-170.667v128h512v85.333h-512z" />
417<glyph unicode="&#xe799;" d="M512 213.334c141.227 0 256 114.773 256 256v341.333h-106.667v-341.333c0-82.347-66.987-149.333-149.333-149.333s-149.333 66.987-149.333 149.333v341.333h-106.667v-341.333c0-141.227 114.773-256 256-256zM213.333 128v-85.333h597.333v85.333h-597.333z" />
418<glyph unicode="&#xe79a;" d="M768 768h-512v-85.333l277.333-256-277.333-256v-85.333h512v128h-298.667l213.333 213.333-213.333 213.333h298.667z" />
419<glyph unicode="&#xe79b;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM384 213.334h-85.333v298.667h85.333v-298.667zM554.667 213.334h-85.333v426.667h85.333v-426.667zM725.333 213.334h-85.333v170.667h85.333v-170.667z" />
420<glyph unicode="&#xe79c;" d="M853.333 853.334h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h597.333l170.667-170.667v768c0 46.933-38.4 85.333-85.333 85.333zM768 341.334h-512v85.333h512v-85.333zM768 469.334h-512v85.333h512v-85.333zM768 597.334h-512v85.333h512v-85.333z" />
421<glyph unicode="&#xe79d;" d="M256 853.334c-46.933 0-84.907-38.4-84.907-85.333l-0.427-682.667c0-46.933 37.973-85.333 84.907-85.333h512.427c46.933 0 85.333 38.4 85.333 85.333v512l-256 256h-341.333zM554.667 554.667v234.667l234.667-234.667h-234.667z" />
422<glyph unicode="&#xe79e;" d="M511.573 853.334c-235.52 0-426.24-191.147-426.24-426.667s190.72-426.667 426.24-426.667c235.947 0 427.093 191.147 427.093 426.667s-191.147 426.667-427.093 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM661.333 469.334c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM362.667 469.334c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM512 192c99.413 0 183.893 62.293 218.027 149.333h-436.053c34.133-87.040 118.613-149.333 218.027-149.333z" />
423<glyph unicode="&#xe79f;" d="M725.333 426.667h-213.333v-213.333h213.333v213.333zM682.667 896v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.36 0-84.907-38.4-84.907-85.333l-0.427-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333h-42.667v85.333h-85.333zM810.667 128h-597.333v469.333h597.333v-469.333z" />
424<glyph unicode="&#xe7a0;" d="M166.4 426.667c0 72.96 59.307 132.267 132.267 132.267h170.667v81.067h-170.667c-117.76 0-213.333-95.573-213.333-213.333s95.573-213.333 213.333-213.333h170.667v81.067h-170.667c-72.96 0-132.267 59.307-132.267 132.267zM341.333 384h341.333v85.333h-341.333v-85.333zM725.333 640h-170.667v-81.067h170.667c72.96 0 132.267-59.307 132.267-132.267s-59.307-132.267-132.267-132.267h-170.667v-81.067h170.667c117.76 0 213.333 95.573 213.333 213.333s-95.573 213.333-213.333 213.333z" />
425<glyph unicode="&#xe7a1;" d="M896 128v597.333c0 46.933-38.4 85.333-85.333 85.333h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333zM362.667 362.667l106.667-128.427 149.333 192.427 192-256h-597.333l149.333 192z" />
426<glyph unicode="&#xe7a2;" d="M725.333 67.84l60.16 60.16-145.493 145.493-60.16-60.16 145.493-145.493zM320 597.334h149.333v-238.507l-230.827-230.827 60.16-60.16 256 256v273.493h149.333l-192 192-192-192z" />
427<glyph unicode="&#xe7a3;" d="M938.24 768c0 46.933-37.973 85.333-84.907 85.333h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h597.333l170.667-170.667-0.427 768z" />
428<glyph unicode="&#xe7a4;" d="M128 202.667v-160h160l471.893 471.893-160 160-471.893-471.893zM883.627 638.294c16.64 16.64 16.64 43.52 0 60.16l-99.84 99.84c-16.64 16.64-43.52 16.64-60.16 0l-78.080-78.080 160-160 78.080 78.080z" />
429<glyph unicode="&#xe7a5;" d="M213.333 768v-85.333h597.333v85.333h-597.333zM213.333 341.334h170.667v-256h256v256h170.667l-298.667 298.667-298.667-298.667z" />
430<glyph unicode="&#xe7a6;" d="M682.667 384h-128v426.667h-85.333v-426.667h-128l170.667-170.667 170.667 170.667zM170.667 128v-85.333h682.667v85.333h-682.667z" />
431<glyph unicode="&#xe7a7;" d="M341.333 128h128v-170.667h85.333v170.667h128l-170.667 170.667-170.667-170.667zM682.667 725.334h-128v170.667h-85.333v-170.667h-128l170.667-170.667 170.667 170.667zM170.667 469.334v-85.333h682.667v85.333h-682.667z" />
432<glyph unicode="&#xe7a8;" d="M341.333 469.334h128v-426.667h85.333v426.667h128l-170.667 170.667-170.667-170.667zM170.667 810.667v-85.333h682.667v85.333h-682.667z" />
433<glyph unicode="&#xe7a9;" d="M170.667 128h256v85.333h-256v-85.333zM853.333 725.334h-682.667v-85.333h682.667v85.333zM725.333 469.334h-554.667v-85.333h565.333c46.933 0 85.333-38.4 85.333-85.333s-38.4-85.333-85.333-85.333h-96v85.333l-128-128 128-128v85.333h85.333c94.293 0 170.667 76.373 170.667 170.667s-76.373 170.667-170.667 170.667z" />
434<glyph unicode="&#xe7aa;" d="M320 170.667c-129.707 0-234.667 104.96-234.667 234.667s104.96 234.667 234.667 234.667h448c94.293 0 170.667-76.373 170.667-170.667s-76.373-170.667-170.667-170.667h-362.667c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667h320v-64h-320c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667h362.667c58.88 0 106.667 47.787 106.667 106.667s-47.787 106.667-106.667 106.667h-448c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667h405.333v-64h-405.333z" />
435<glyph unicode="&#xe7ab;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM704 256h-362.667c-70.827 0-128 57.173-128 128s57.173 128 128 128l5.973-0.427c18.773 73.813 84.907 128.427 164.693 128.427 94.293 0 170.667-76.373 170.667-170.667h21.333c58.88 0 106.667-47.787 106.667-106.667s-47.787-106.667-106.667-106.667z" />
436<glyph unicode="&#xe7ac;" d="M825.6 510.294c-29.013 147.2-158.293 257.707-313.6 257.707-123.307 0-230.4-69.973-283.733-172.373-128.427-13.653-228.267-122.453-228.267-254.293 0-141.227 114.773-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.467 203.947-198.4 211.627zM426.667 213.334l-149.333 149.333 60.16 60.16 89.173-88.747 221.013 220.587 60.16-60.16-281.173-281.173z" />
437<glyph unicode="&#xe7ad;" d="M825.6 510.294c-29.013 147.2-158.293 257.707-313.6 257.707-123.307 0-230.4-69.973-283.733-172.373-128.427-13.653-228.267-122.453-228.267-254.293 0-141.227 114.773-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.467 203.947-198.4 211.627zM725.333 384l-213.333-213.333-213.333 213.333h128v170.667h170.667v-170.667h128z" />
438<glyph unicode="&#xe7ae;" d="M825.6 510.294c-29.013 147.2-158.293 257.707-313.6 257.707-63.147 0-121.6-18.347-171.093-49.92l62.293-62.293c32.427 17.067 69.547 26.88 108.8 26.88 129.707 0 234.667-104.96 234.667-234.667v-21.333h64c70.827 0 128-57.173 128-128 0-48.213-27.307-90.027-66.56-111.787l61.867-61.867c54.187 38.827 90.027 101.973 90.027 173.653 0 112.64-87.467 203.947-198.4 211.627zM128 713.814l117.333-116.907c-136.107-5.973-245.333-117.76-245.333-255.573 0-141.227 114.773-256 256-256h500.48l85.333-85.333 54.187 54.187-713.813 713.813-54.187-54.187zM329.813 512l341.333-341.333h-415.147c-94.293 0-170.667 76.373-170.667 170.667s76.373 170.667 170.667 170.667h73.813z" />
439<glyph unicode="&#xe7af;" d="M825.6 510.294c-29.013 147.2-158.293 257.707-313.6 257.707-123.307 0-230.4-69.973-283.733-172.373-128.427-13.653-228.267-122.453-228.267-254.293 0-141.227 114.773-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.467 203.947-198.4 211.627zM810.667 170.667h-554.667c-94.293 0-170.667 76.373-170.667 170.667s76.373 170.667 170.667 170.667h30.293c28.16 98.56 118.187 170.667 225.707 170.667 129.707 0 234.667-104.96 234.667-234.667v-21.333h64c70.827 0 128-57.173 128-128s-57.173-128-128-128z" />
440<glyph unicode="&#xe7b0;" d="M825.6 510.294c-29.013 147.2-158.293 257.707-313.6 257.707-123.307 0-230.4-69.973-283.733-172.373-128.427-13.653-228.267-122.453-228.267-254.293 0-141.227 114.773-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.467 203.947-198.4 211.627zM597.333 384v-170.667h-170.667v170.667h-128l213.333 213.333 213.333-213.333h-128z" />
441<glyph unicode="&#xe7b1;" d="M825.6 510.294c-29.013 147.2-158.293 257.707-313.6 257.707-123.307 0-230.4-69.973-283.733-172.373-128.427-13.653-228.267-122.453-228.267-254.293 0-141.227 114.773-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.467 203.947-198.4 211.627z" />
442<glyph unicode="&#xe7b2;" d="M810.667 554.667h-170.667v256h-256v-256h-170.667l298.667-298.667 298.667 298.667zM213.333 170.667v-85.333h597.333v85.333h-597.333z" />
443<glyph unicode="&#xe7b3;" d="M384 256h256v256h170.667l-298.667 298.667-298.667-298.667h170.667zM213.333 170.667h597.333v-85.333h-597.333z" />
444<glyph unicode="&#xe7b4;" d="M853.333 682.667h-341.333l-85.333 85.333h-256c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM853.333 170.667h-682.667v426.667h682.667v-426.667z" />
445<glyph unicode="&#xe7b5;" d="M853.333 682.667h-341.333l-85.333 85.333h-256c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM640 554.667c46.933 0 85.333-38.4 85.333-85.333s-38.4-85.333-85.333-85.333-85.333 38.4-85.333 85.333 38.4 85.333 85.333 85.333zM810.667 213.334h-341.333v42.667c0 56.747 113.92 85.333 170.667 85.333s170.667-28.587 170.667-85.333v-42.667z" />
446<glyph unicode="&#xe7b6;" d="M426.667 768h-256c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333h-341.333l-85.333 85.333z" />
447<glyph unicode="&#xe7b7;" d="M42.667 170.667v-128h128c0 70.827-57.173 128-128 128zM42.667 341.334v-85.333c117.76 0 213.333-95.573 213.333-213.333h85.333c0 165.12-133.547 298.667-298.667 298.667zM810.667 640h-597.333v-69.547c168.96-54.613 302.507-188.16 357.12-357.12h240.213v426.667zM42.667 512v-85.333c212.053 0 384-171.947 384-384h85.333c0 259.413-210.347 469.333-469.333 469.333zM896 810.667h-768c-46.933 0-85.333-38.4-85.333-85.333v-128h85.333v128h768v-597.333h-298.667v-85.333h298.667c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333z" />
448<glyph unicode="&#xe7b8;" d="M896 810.667h-768c-46.933 0-85.333-38.4-85.333-85.333v-128h85.333v128h768v-597.333h-298.667v-85.333h298.667c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM42.667 170.667v-128h128c0 70.827-57.173 128-128 128zM42.667 341.334v-85.333c117.76 0 213.333-95.573 213.333-213.333h85.333c0 165.12-133.547 298.667-298.667 298.667zM42.667 512v-85.333c212.053 0 384-171.947 384-384h85.333c0 259.413-210.347 469.333-469.333 469.333z" />
449<glyph unicode="&#xe7b9;" d="M853.333 170.667c46.933 0 84.907 38.4 84.907 85.333l0.427 426.667c0 46.933-38.4 85.333-85.333 85.333h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 38.4-85.333 85.333-85.333h-170.667v-85.333h1024v85.333h-170.667zM170.667 682.667h682.667v-426.667h-682.667v426.667z" />
450<glyph unicode="&#xe7ba;" d="M896 853.334h-768c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h298.667l-85.333-128v-42.667h341.333v42.667l-85.333 128h298.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM896 341.334h-768v426.667h768v-426.667z" />
451<glyph unicode="&#xe7bb;" d="M896 853.334h-768c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h298.667v-85.333h-85.333v-85.333h341.333v85.333h-85.333v85.333h298.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM896 256h-768v512h768v-512z" />
452<glyph unicode="&#xe7bc;" d="M341.333-42.666h341.333v85.333h-341.333v-85.333zM682.667 895.574l-341.333 0.427c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h341.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 84.907-85.333 84.907zM682.667 298.667h-341.333v426.667h341.333v-426.667z" />
453<glyph unicode="&#xe7bd;" d="M640 618.667v234.667h-256v-234.667l128-128 128 128zM320 554.667h-234.667v-256h234.667l128 128-128 128zM384 234.667v-234.667h256v234.667l-128 128-128-128zM704 554.667l-128-128 128-128h234.667v256h-234.667z" />
454<glyph unicode="&#xe7be;" d="M512 896c-212.053 0-384-171.947-384-384v-298.667c0-70.827 57.173-128 128-128h128v341.333h-170.667v85.333c0 165.12 133.547 298.667 298.667 298.667s298.667-133.547 298.667-298.667v-85.333h-170.667v-341.333h170.667v-42.667h-298.667v-85.333h256c70.827 0 128 57.173 128 128v426.667c0 212.053-171.947 384-384 384z" />
455<glyph unicode="&#xe7bf;" d="M512 896c-212.053 0-384-171.947-384-384v-298.667c0-70.827 57.173-128 128-128h128v341.333h-170.667v85.333c0 165.12 133.547 298.667 298.667 298.667s298.667-133.547 298.667-298.667v-85.333h-170.667v-341.333h128c70.827 0 128 57.173 128 128v298.667c0 212.053-171.947 384-384 384z" />
456<glyph unicode="&#xe7c0;" d="M661.333 512c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM362.667 512c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM512 213.334c111.36 0 206.080 71.253 241.067 170.667h-482.133c34.987-99.413 129.707-170.667 241.067-170.667zM511.573 896c-235.52 0-426.24-191.147-426.24-426.667s190.72-426.667 426.24-426.667c235.947 0 427.093 191.147 427.093 426.667s-191.147 426.667-427.093 426.667zM512 128c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333z" />
457<glyph unicode="&#xe7c1;" d="M316.16 604.16l195.84-195.413 195.84 195.413 60.16-60.16-256-256-256 256z" />
458<glyph unicode="&#xe7c2;" d="M657.493 252.16l-195.413 195.84 195.413 195.84-60.16 60.16-256-256 256-256z" />
459<glyph unicode="&#xe7c3;" d="M366.507 241.494l195.413 195.84-195.413 195.84 60.16 60.16 256-256-256-256z" />
460<glyph unicode="&#xe7c4;" d="M316.16 281.174l195.84 195.413 195.84-195.413 60.16 60.16-256 256-256-256z" />
461<glyph unicode="&#xe7c5;" d="M896 469.334h-604.587l152.747 153.173-60.16 60.16-256-256 256-256 60.16 60.16-152.747 153.173h604.587z" />
462<glyph unicode="&#xe7c6;" d="M512 579.84l195.84-195.84 60.16 60.16-256 256-256-256 60.16-60.16 195.84 195.84zM256 170.667h512v85.333h-512v-85.333z" />
463<glyph unicode="&#xe7c7;" d="M256 512c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM768 512c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM512 512c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z" />
464<glyph unicode="&#xe7c8;" d="M853.333 810.667h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-426.667c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM469.333 682.667h85.333v-85.333h-85.333v85.333zM469.333 554.667h85.333v-85.333h-85.333v85.333zM341.333 682.667h85.333v-85.333h-85.333v85.333zM341.333 554.667h85.333v-85.333h-85.333v85.333zM298.667 469.334h-85.333v85.333h85.333v-85.333zM298.667 597.334h-85.333v85.333h85.333v-85.333zM682.667 298.667h-341.333v85.333h341.333v-85.333zM682.667 469.334h-85.333v85.333h85.333v-85.333zM682.667 597.334h-85.333v85.333h85.333v-85.333zM810.667 469.334h-85.333v85.333h85.333v-85.333zM810.667 597.334h-85.333v85.333h85.333v-85.333zM512-42.666l170.667 170.667h-341.333l170.667-170.667z" />
465<glyph unicode="&#xe7c9;" d="M810.667 640v-170.667h-561.92l152.747 153.173-60.16 60.16-256-256 256-256 60.16 60.16-152.747 153.173h647.253v256z" />
466<glyph unicode="&#xe7ca;" d="M494.507 622.507l152.747-153.173h-604.587v-85.333h604.587l-153.173-153.173 60.587-60.16 256 256-256 256-60.16-60.16zM853.333 682.667v-512h85.333v512h-85.333z" />
467<glyph unicode="&#xe7cb;" d="M512 298.667c70.827 0 127.573 57.173 127.573 128l0.427 256c0 70.827-57.173 128-128 128s-128-57.173-128-128v-256c0-70.827 57.173-128 128-128zM738.133 426.667c0-128-108.373-217.6-226.133-217.6s-226.133 89.6-226.133 217.6h-72.533c0-145.92 116.053-265.813 256-286.72v-139.947h85.333v139.947c139.947 20.48 256 140.8 256 286.72h-72.533z" />
468<glyph unicode="&#xe7cc;" d="M853.333 725.334h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-426.667c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM469.333 597.334h85.333v-85.333h-85.333v85.333zM469.333 469.334h85.333v-85.333h-85.333v85.333zM341.333 597.334h85.333v-85.333h-85.333v85.333zM341.333 469.334h85.333v-85.333h-85.333v85.333zM298.667 384h-85.333v85.333h85.333v-85.333zM298.667 512h-85.333v85.333h85.333v-85.333zM682.667 213.334h-341.333v85.333h341.333v-85.333zM682.667 384h-85.333v85.333h85.333v-85.333zM682.667 512h-85.333v85.333h85.333v-85.333zM810.667 384h-85.333v85.333h85.333v-85.333zM810.667 512h-85.333v85.333h85.333v-85.333z" />
469<glyph unicode="&#xe7cd;" d="M938.667 170.667v640h-853.333v-640h-85.333v-85.333h1024v85.333h-85.333zM597.333 170.667h-170.667v42.667h170.667v-42.667zM853.333 298.667h-682.667v426.667h682.667v-426.667z" />
470<glyph unicode="&#xe7ce;" d="M853.333 170.667c46.933 0 84.907 38.4 84.907 85.333l0.427 469.333c0 46.933-38.4 85.333-85.333 85.333h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-469.333c0-46.933 38.4-85.333 85.333-85.333h-170.667c0-46.933 38.4-85.333 85.333-85.333h853.333c46.933 0 85.333 38.4 85.333 85.333h-170.667zM170.667 725.334h682.667v-469.333h-682.667v469.333zM512 128c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667z" />
471<glyph unicode="&#xe7cf;" d="M853.333 170.667v42.667c46.933 0 84.907 38.4 84.907 85.333l0.427 426.667c0 46.933-38.4 85.333-85.333 85.333h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 38.4-85.333 85.333-85.333v-42.667h-170.667v-85.333h1024v85.333h-170.667zM170.667 725.334h682.667v-426.667h-682.667v426.667z" />
472<glyph unicode="&#xe7d0;" d="M853.333 170.667c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 38.4-85.333 85.333-85.333h-170.667v-85.333h1024v85.333h-170.667zM170.667 682.667h682.667v-426.667h-682.667v426.667z" />
473<glyph unicode="&#xe7d1;" d="M640 554.667h-256v-256h256v256zM554.667 384h-85.333v85.333h85.333v-85.333zM896 469.334v85.333h-85.333v85.333c0 46.933-38.4 85.333-85.333 85.333h-85.333v85.333h-85.333v-85.333h-85.333v85.333h-85.333v-85.333h-85.333c-46.933 0-85.333-38.4-85.333-85.333v-85.333h-85.333v-85.333h85.333v-85.333h-85.333v-85.333h85.333v-85.333c0-46.933 38.4-85.333 85.333-85.333h85.333v-85.333h85.333v85.333h85.333v-85.333h85.333v85.333h85.333c46.933 0 85.333 38.4 85.333 85.333v85.333h85.333v85.333h-85.333v85.333h85.333zM725.333 213.334h-426.667v426.667h426.667v-426.667z" />
474<glyph unicode="&#xe7d2;" d="M554.667 893.014v-338.347h298.667c0 174.080-130.133 317.44-298.667 338.347zM170.667 298.667c0-188.587 152.747-341.333 341.333-341.333s341.333 152.747 341.333 341.333v170.667h-682.667v-170.667zM469.333 893.014c-168.533-20.907-298.667-164.267-298.667-338.347h298.667v338.347z" />
475<glyph unicode="&#xe7d3;" d="M682.667 896h-341.333c-70.827 0-128-57.173-128-128v-682.667c0-70.827 57.173-128 128-128h341.333c70.827 0 128 57.173 128 128v682.667c0 70.827-57.173 128-128 128zM597.333 42.667h-170.667v42.667h170.667v-42.667zM736 170.667h-448v597.333h448v-597.333z" />
476<glyph unicode="&#xe7d4;" d="M661.333 896h-341.333c-58.88 0-106.667-47.787-106.667-106.667v-725.333c0-58.88 47.787-106.667 106.667-106.667h341.333c58.88 0 106.667 47.787 106.667 106.667v725.333c0 58.88-47.787 106.667-106.667 106.667zM490.667-0c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM682.667 170.667h-384v597.333h384v-597.333z" />
477<glyph unicode="&#xe7d5;" d="M938.667 682.667v85.333h-647.68l85.333-85.333h562.347zM81.92 868.267l-54.187-54.187 77.653-77.653c-12.373-14.507-20.053-33.28-20.053-53.76v-469.333h-85.333v-128h756.48l100.267-100.267 54.187 54.187-829.013 829.013zM170.667 671.147l457.813-457.813h-457.813v457.813zM981.333 597.334h-256c-23.467 0-42.667-19.2-42.667-42.667v-178.347l85.333-85.333v221.013h170.667v-298.667h-93.013l128-128h7.68c23.467 0 42.667 19.2 42.667 42.667v426.667c0 23.467-19.2 42.667-42.667 42.667z" />
478<glyph unicode="&#xe7d6;" d="M170.667 682.667h768v85.333h-768c-46.933 0-85.333-38.4-85.333-85.333v-469.333h-85.333v-128h597.333v128h-426.667v469.333zM981.333 597.334h-256c-23.467 0-42.667-19.2-42.667-42.667v-426.667c0-23.467 19.2-42.667 42.667-42.667h256c23.467 0 42.667 19.2 42.667 42.667v426.667c0 23.467-19.2 42.667-42.667 42.667zM938.667 213.334h-170.667v298.667h170.667v-298.667z" />
479<glyph unicode="&#xe7d7;" d="M512 896l-384-170.667v-256c0-236.8 163.84-458.24 384-512 220.16 53.76 384 275.2 384 512v256l-384 170.667zM512 427.094h298.667c-22.613-175.787-139.947-332.373-298.667-381.44v381.013h-298.667v243.2l298.667 132.693v-375.467z" />
480<glyph unicode="&#xe7d8;" d="M852.907 768c0 46.933-37.973 85.333-84.907 85.333h-341.333l-256-256v-512c0-46.933 38.4-85.333 85.333-85.333h512.427c46.933 0 84.907 38.4 84.907 85.333l-0.427 682.667zM384 128h-85.333v85.333h85.333v-85.333zM725.333 128h-85.333v85.333h85.333v-85.333zM384 298.667h-85.333v170.667h85.333v-170.667zM554.667 128h-85.333v170.667h85.333v-170.667zM554.667 384h-85.333v85.333h85.333v-85.333zM725.333 298.667h-85.333v170.667h85.333v-170.667z" />
481<glyph unicode="&#xe7d9;" d="M725.333 895.574l-426.667 0.427c-46.933 0-85.333-38.4-85.333-85.333v-768c0-46.933 38.4-85.333 85.333-85.333h426.667c46.933 0 85.333 38.4 85.333 85.333v768c0 46.933-38.4 84.907-85.333 84.907zM725.333 128h-426.667v597.333h426.667v-597.333z" />
482<glyph unicode="&#xe7da;" d="M725.333 853.334h-426.667c-46.933 0-85.333-38.4-85.333-85.333v-682.667c0-46.933 38.4-84.907 85.333-84.907l426.667-0.427c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM512 768c46.933 0 85.333-38.4 85.333-85.333s-38.4-85.333-85.333-85.333c-47.36 0-85.333 38.4-85.333 85.333s37.973 85.333 85.333 85.333zM512 85.334c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333zM512 426.667c-70.827 0-128-57.173-128-128s57.173-128 128-128 128 57.173 128 128-57.173 128-128 128z" />
483<glyph unicode="&#xe7db;" d="M768 938.667h-512c-70.827 0-128-57.173-128-128v-768c0-70.827 57.173-128 128-128h512c70.827 0 128 57.173 128 128v768c0 70.827-57.173 128-128 128zM597.333-0h-170.667v42.667h170.667v-42.667zM821.333 128h-618.667v682.667h618.667v-682.667z" />
484<glyph unicode="&#xe7dc;" d="M789.333 938.667h-597.333c-58.88 0-106.667-47.787-106.667-106.667v-810.667c0-58.88 47.787-106.667 106.667-106.667h597.333c58.88 0 106.667 47.787 106.667 106.667v810.667c0 58.88-47.787 106.667-106.667 106.667zM490.667-42.666c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM810.667 128h-640v682.667h640v-682.667z" />
485<glyph unicode="&#xe7dd;" d="M896 768h-768c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 84.907 38.4 84.907 85.333l0.427 512c0 46.933-38.4 85.333-85.333 85.333zM810.667 170.667h-597.333v512h597.333v-512z" />
486<glyph unicode="&#xe7de;" d="M896 810.667h-768c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h213.333v-85.333h341.333v85.333h213.333c46.933 0 84.907 38.4 84.907 85.333l0.427 512c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-768v512h768v-512z" />
487<glyph unicode="&#xe7df;" d="M853.333 426.667c0 108.373-50.773 205.227-129.707 267.52l-40.96 244.48h-341.333l-40.533-244.48c-79.36-62.293-130.133-158.72-130.133-267.52s50.773-205.227 130.133-267.52l40.533-244.48h341.333l40.96 244.48c78.933 62.293 129.707 159.147 129.707 267.52zM256 426.667c0 141.227 114.773 256 256 256s256-114.773 256-256-114.773-256-256-256-256 114.773-256 256z" />
488<glyph unicode="&#xe7e0;" d="M170.667 682.667h-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333v85.333h-597.333v597.333zM853.333 853.334h-512c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM810.667 469.334h-170.667v-170.667h-85.333v170.667h-170.667v85.333h170.667v170.667h85.333v-170.667h170.667v-85.333z" />
489<glyph unicode="&#xe7e1;" d="M512 853.334c-235.093 0-426.667-191.573-426.667-426.667s191.573-426.667 426.667-426.667 426.667 191.573 426.667 426.667-191.573 426.667-426.667 426.667zM512 85.334c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333zM640 426.667c0-70.827-57.173-128-128-128s-128 57.173-128 128 57.173 128 128 128 128-57.173 128-128z" />
490<glyph unicode="&#xe7e2;" d="M614.4 682.667l-17.067 85.333h-384v-725.333h85.333v298.667h238.933l17.067-85.333h298.667v426.667z" />
491<glyph unicode="&#xe7e3;" d="M512 810.667v-395.947c-20.053 7.253-41.387 11.947-64 11.947-106.24 0-192-85.76-192-192s85.76-192 192-192c98.56 0 179.2 74.667 189.867 170.667h2.133v469.333h170.667v128h-298.667z" />
492<glyph unicode="&#xe7e4;" d="M426.667 554.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM426.667 384c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM298.667 533.334c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM426.667 234.667c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM298.667 362.667c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM426.667 618.667c11.947 0 21.333 9.387 21.333 21.333s-9.387 21.333-21.333 21.333-21.333-9.387-21.333-21.333 9.387-21.333 21.333-21.333zM597.333 554.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM597.333 618.667c11.947 0 21.333 9.387 21.333 21.333s-9.387 21.333-21.333 21.333-21.333-9.387-21.333-21.333 9.387-21.333 21.333-21.333zM725.333 362.667c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM725.333 533.334c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM597.333 234.667c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM597.333 384c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667z" />
493<glyph unicode="&#xe7e5;" d="M213.333 192c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM384 384c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM384 554.667c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM128 42.667h768v85.333h-768v-85.333zM213.333 533.334c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM213.333 362.667c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM384 213.334c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM725.333 234.667c11.947 0 21.333 9.387 21.333 21.333s-9.387 21.333-21.333 21.333-21.333-9.387-21.333-21.333 9.387-21.333 21.333-21.333zM128 810.667v-85.333h768v85.333h-768zM725.333 576c11.947 0 21.333 9.387 21.333 21.333s-9.387 21.333-21.333 21.333-21.333-9.387-21.333-21.333 9.387-21.333 21.333-21.333zM725.333 405.334c11.947 0 21.333 9.387 21.333 21.333s-9.387 21.333-21.333 21.333-21.333-9.387-21.333-21.333 9.387-21.333 21.333-21.333zM554.667 554.667c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM554.667 384c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM554.667 213.334c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667z" />
494<glyph unicode="&#xe7e6;" d="M597.333 640c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM588.8 448.854l8.533-0.853c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64l0.853-8.533c3.84-28.587 26.027-50.773 54.613-54.613zM597.333 789.334c11.947 0 21.333 9.387 21.333 21.333s-9.387 21.333-21.333 21.333-21.333-9.387-21.333-21.333 9.387-21.333 21.333-21.333zM426.667 789.334c11.947 0 21.333 9.387 21.333 21.333s-9.387 21.333-21.333 21.333-21.333-9.387-21.333-21.333 9.387-21.333 21.333-21.333zM896 490.667c11.947 0 21.333 9.387 21.333 21.333s-9.387 21.333-21.333 21.333-21.333-9.387-21.333-21.333 9.387-21.333 21.333-21.333zM426.667 640c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM768 298.667c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM768 469.334c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM768 640c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM597.333 64c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM106.667 713.814l161.28-161.28-11.947 2.133c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667c0 4.267-1.28 8.107-2.56 11.947l119.893-119.893c-30.293-4.693-53.333-31.147-53.333-62.72 0-35.413 28.587-64 64-64 31.573 0 58.027 23.040 62.72 53.333l119.893-119.893c-3.84 1.28-7.68 2.56-11.947 2.56-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667c0 4.267-1.28 8.107-2.56 11.947l161.28-161.28 54.613 54.187-692.48 692.48-54.187-54.187zM426.667 213.334c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM896 362.667c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM256 384c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM128 533.334c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM426.667 64c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM256 213.334c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM128 362.667c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333z" />
495<glyph unicode="&#xe7e7;" d="M256 384c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM256 213.334c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM256 554.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM128 533.334c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM256 725.334c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM896 490.667c11.947 0 21.333 9.387 21.333 21.333s-9.387 21.333-21.333 21.333-21.333-9.387-21.333-21.333 9.387-21.333 21.333-21.333zM597.333 640c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM597.333 789.334c11.947 0 21.333 9.387 21.333 21.333s-9.387 21.333-21.333 21.333-21.333-9.387-21.333-21.333 9.387-21.333 21.333-21.333zM128 362.667c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM426.667 64c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM426.667 789.334c11.947 0 21.333 9.387 21.333 21.333s-9.387 21.333-21.333 21.333-21.333-9.387-21.333-21.333 9.387-21.333 21.333-21.333zM426.667 640c23.467 0 42.667 19.2 42.667 42.667s-19.2 42.667-42.667 42.667-42.667-19.2-42.667-42.667 19.2-42.667 42.667-42.667zM426.667 405.334c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM768 384c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM768 213.334c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM768 554.667c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM768 725.334c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM896 362.667c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM597.333 213.334c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM597.333 64c-11.947 0-21.333-9.387-21.333-21.333s9.387-21.333 21.333-21.333 21.333 9.387 21.333 21.333-9.387 21.333-21.333 21.333zM426.667 576c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM426.667 213.334c-23.467 0-42.667-19.2-42.667-42.667s19.2-42.667 42.667-42.667 42.667 19.2 42.667 42.667-19.2 42.667-42.667 42.667zM597.333 405.334c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64zM597.333 576c-35.413 0-64-28.587-64-64s28.587-64 64-64 64 28.587 64 64-28.587 64-64 64z" />
496<glyph unicode="&#xe7e8;" d="M938.667 426.667c0-235.641-191.025-426.667-426.667-426.667s-426.667 191.025-426.667 426.667c0 235.641 191.025 426.667 426.667 426.667s426.667-191.025 426.667-426.667z" />
497<glyph unicode="&#xe7e9;" d="M426.667 853.334c-77.653 0-150.613-21.333-213.333-57.6 127.573-73.813 213.333-211.2 213.333-369.067s-85.76-295.253-213.333-369.067c62.72-36.267 135.68-57.6 213.333-57.6 235.52 0 426.667 191.147 426.667 426.667s-191.147 426.667-426.667 426.667z" />
498<glyph unicode="&#xe7ea;" d="M384 853.334c-44.8 0-87.467-6.827-128-19.627 173.227-54.187 298.667-215.893 298.667-407.040s-125.44-352.853-298.667-407.040c40.533-12.8 83.2-19.627 128-19.627 235.52 0 426.667 191.147 426.667 426.667s-191.147 426.667-426.667 426.667z" />
499<glyph unicode="&#xe7eb;" d="M853.333 567.894v200.107h-200.107l-141.227 141.227-141.227-141.227h-200.107v-200.107l-141.227-141.227 141.227-141.227v-200.107h200.107l141.227-141.227 141.227 141.227h200.107v200.107l141.227 141.227-141.227 141.227zM512 170.667c-37.973 0-74.24 8.533-106.667 23.467 87.893 40.533 149.333 129.28 149.333 232.533s-61.44 192-149.333 232.533c32.427 14.933 68.693 23.467 106.667 23.467 141.227 0 256-114.773 256-256s-114.773-256-256-256z" />
500<glyph unicode="&#xe7ec;" d="M853.333 285.44l141.227 141.227-141.227 141.227v200.107h-200.107l-141.227 141.227-141.227-141.227h-200.107v-200.107l-141.227-141.227 141.227-141.227v-200.107h200.107l141.227-141.227 141.227 141.227h200.107v200.107zM512 170.667c-141.227 0-256 114.773-256 256s114.773 256 256 256 256-114.773 256-256-114.773-256-256-256z" />
501<glyph unicode="&#xe7ed;" d="M853.333 285.44l141.227 141.227-141.227 141.227v200.107h-200.107l-141.227 141.227-141.227-141.227h-200.107v-200.107l-141.227-141.227 141.227-141.227v-200.107h200.107l141.227-141.227 141.227 141.227h200.107v200.107zM512 170.667v512c141.227 0 256-114.773 256-256s-114.773-256-256-256z" />
502<glyph unicode="&#xe7ee;" d="M853.333 567.894v200.107h-200.107l-141.227 141.227-141.227-141.227h-200.107v-200.107l-141.227-141.227 141.227-141.227v-200.107h200.107l141.227-141.227 141.227 141.227h200.107v200.107l141.227 141.227-141.227 141.227zM512 170.667c-141.227 0-256 114.773-256 256s114.773 256 256 256 256-114.773 256-256-114.773-256-256-256zM512 597.334c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667z" />
503<glyph unicode="&#xe7ef;" d="M298.667 341.334c-70.827 0-128-57.173-128-128 0-55.893-49.493-85.333-85.333-85.333 39.253-52.053 106.24-85.333 170.667-85.333 94.293 0 170.667 76.373 170.667 170.667 0 70.827-57.173 128-128 128zM883.627 741.12l-57.173 57.173c-16.64 16.64-43.52 16.64-60.16 0l-382.293-382.293 117.333-117.333 382.293 382.293c16.64 16.64 16.64 43.52 0 60.16z" />
504<glyph unicode="&#xe7f0;" d="M648.533 426.667c0-75.405-61.128-136.533-136.533-136.533s-136.533 61.128-136.533 136.533c0 75.405 61.128 136.533 136.533 136.533s136.533-61.128 136.533-136.533zM384 853.334l-78.080-85.333h-135.253c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333h-135.253l-78.080 85.333h-256zM512 213.334c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333z" />
505<glyph unicode="&#xe7f1;" d="M426.667 85.334h-213.333v-85.333h213.333v-85.333l128 128-128 128v-85.333zM597.333 85.334v-85.333h213.333v85.333h-213.333zM512 597.334c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333-84.907-38.4-84.907-85.333 37.973-85.333 84.907-85.333zM725.333 938.667h-426.667c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h426.667c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM298.667 853.334h426.667v-448c0 71.253-142.080 106.667-213.333 106.667s-213.333-35.413-213.333-106.667v448z" />
506<glyph unicode="&#xe7f2;" d="M426.667 85.334h-213.333v-85.333h213.333v-85.333l128 128-128 128v-85.333zM597.333 85.334v-85.333h213.333v85.333h-213.333zM725.333 938.667h-426.667c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h426.667c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM512 682.667c-47.36 0-85.333 38.4-85.333 85.333s37.973 85.333 84.907 85.333 85.333-38.4 85.333-85.333c0.427-46.933-37.973-85.333-84.907-85.333z" />
507<glyph unicode="&#xe7f3;" d="M597.333 725.334c0 46.933-38.4 85.333-85.333 85.333h-42.667v42.667c0 23.467-19.2 42.667-42.667 42.667h-170.667c-23.467 0-42.667-19.2-42.667-42.667v-42.667h-42.667c-46.933 0-85.333-38.4-85.333-85.333v-640c0-46.933 38.4-85.333 85.333-85.333h341.333c46.933 0 85.333 38.4 85.333 85.333h341.333v640h-341.333zM512 170.667h-85.333v85.333h85.333v-85.333zM512 554.667h-85.333v85.333h85.333v-85.333zM682.667 170.667h-85.333v85.333h85.333v-85.333zM682.667 554.667h-85.333v85.333h85.333v-85.333zM853.333 170.667h-85.333v85.333h85.333v-85.333zM853.333 554.667h-85.333v85.333h85.333v-85.333z" />
508<glyph unicode="&#xe7f4;" d="M401.067 490.667l203.52 352.427c-29.867 6.4-60.587 10.24-92.587 10.24-102.4 0-196.267-36.267-269.653-96l156.16-270.933 2.56 4.267zM919.040 554.667c-39.253 124.587-134.4 224.427-256 270.507l-156.16-270.507h412.16zM930.133 512h-319.573l12.373-21.333 203.093-352c69.973 75.947 112.64 176.64 112.64 288 0 29.44-2.987 57.6-8.533 85.333zM364.373 426.667l-166.4 288c-69.547-75.947-112.64-176.64-112.64-288 0-29.44 2.987-57.6 8.533-85.333h319.573l-49.067 85.333zM104.96 298.667c39.253-124.587 134.4-224.427 256-270.507l156.16 270.507h-412.16zM585.813 298.667l-166.4-288.427c29.867-6.4 60.587-10.24 92.587-10.24 102.4 0 196.267 36.267 269.653 96l-156.16 270.933-39.68-68.267z" />
509<glyph unicode="&#xe7f5;" d="M512 597.334c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM213.333 298.667h-85.333v-170.667c0-46.933 38.4-85.333 85.333-85.333h170.667v85.333h-170.667v170.667zM213.333 725.334h170.667v85.333h-170.667c-46.933 0-85.333-38.4-85.333-85.333v-170.667h85.333v170.667zM810.667 810.667h-170.667v-85.333h170.667v-170.667h85.333v170.667c0 46.933-38.4 85.333-85.333 85.333zM810.667 128h-170.667v-85.333h170.667c46.933 0 85.333 38.4 85.333 85.333v170.667h-85.333v-170.667z" />
510<glyph unicode="&#xe7f6;" d="M213.333 298.667h-85.333v-170.667c0-46.933 38.4-85.333 85.333-85.333h170.667v85.333h-170.667v170.667zM213.333 725.334h170.667v85.333h-170.667c-46.933 0-85.333-38.4-85.333-85.333v-170.667h85.333v170.667zM810.667 810.667h-170.667v-85.333h170.667v-170.667h85.333v170.667c0 46.933-38.4 85.333-85.333 85.333zM810.667 128h-170.667v-85.333h170.667c46.933 0 85.333 38.4 85.333 85.333v170.667h-85.333v-170.667zM512 597.334c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM512 341.334c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333z" />
511<glyph unicode="&#xe7f7;" d="M938.667 256v512c0 46.933-38.4 85.333-85.333 85.333h-512c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333zM469.333 426.667l86.613-115.627 126.72 158.293 170.667-213.333h-512l128 170.667zM85.333 682.667v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333v85.333h-597.333v597.333h-85.333z" />
512<glyph unicode="&#xe7f8;" d="M512 810.667c-212.053 0-384-171.947-384-384s171.947-384 384-384c35.413 0 64 28.587 64 64 0 16.64-6.4 31.573-16.64 43.093-9.813 11.093-16.213 26.027-16.213 42.24 0 35.413 28.587 64 64 64h75.52c117.76 0 213.333 95.573 213.333 213.333 0 188.587-171.947 341.333-384 341.333zM277.333 426.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM405.333 597.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM618.667 597.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 426.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
513<glyph unicode="&#xe7f9;" d="M883.627 698.454l-99.84 99.84c-16.64 16.64-43.52 16.64-60.16 0l-133.12-133.12-82.347 81.493-60.16-60.16 60.587-60.587-380.587-380.587v-202.667h202.667l380.587 380.587 60.587-60.587 60.16 60.16-81.92 81.92 133.12 133.12c17.067 17.067 17.067 43.947 0.427 60.587zM295.253 128l-81.92 81.92 343.893 343.893 81.92-81.92-343.893-343.893z" />
514<glyph unicode="&#xe7fa;" d="M426.667 810.667h-213.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h213.333v-85.333h85.333v938.667h-85.333v-85.333zM426.667 170.667h-213.333l213.333 256v-256zM810.667 810.667h-213.333v-85.333h213.333v-554.667l-213.333 256v-384h213.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333z" />
515<glyph unicode="&#xe7fb;" d="M682.667 597.334h-85.333v-128h-128v-85.333h128v-128h85.333v128h128v85.333h-128zM85.333 426.667c0 119.040 69.973 221.867 171.093 269.653v92.16c-148.907-52.907-256.427-194.987-256.427-361.813s107.52-308.907 256.427-361.813v92.16c-101.12 47.787-171.093 150.613-171.093 269.653zM640 810.667c-211.627 0-384-172.373-384-384s172.373-384 384-384 384 172.373 384 384-172.373 384-384 384zM640 128c-164.693 0-298.667 133.973-298.667 298.667s133.973 298.667 298.667 298.667 298.667-133.973 298.667-298.667-133.973-298.667-298.667-298.667z" />
516<glyph unicode="&#xe7fc;" d="M554.667 640h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667v170.667zM512 853.334c-235.093 0-426.667-191.573-426.667-426.667s191.573-426.667 426.667-426.667 426.667 191.573 426.667 426.667-191.573 426.667-426.667 426.667zM512 85.334c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
517<glyph unicode="&#xe7fd;" d="M810.667 768h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM810.667 170.667h-597.333v512h597.333v-512z" />
518<glyph unicode="&#xe7fe;" d="M810.667 725.334h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM810.667 213.334h-597.333v426.667h597.333v-426.667z" />
519<glyph unicode="&#xe7ff;" d="M810.667 640h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-256c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v256c0 46.933-38.4 85.333-85.333 85.333zM810.667 298.667h-597.333v256h597.333v-256z" />
520<glyph unicode="&#xe800;" d="M810.667 682.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-341.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v341.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 256h-597.333v341.333h597.333v-341.333z" />
521<glyph unicode="&#xe801;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 128h-597.333v597.333h597.333v-597.333z" />
522<glyph unicode="&#xe802;" d="M128 725.334v-170.667h85.333v170.667h170.667v85.333h-170.667c-46.933 0-85.333-38.4-85.333-85.333zM213.333 298.667h-85.333v-170.667c0-46.933 38.4-85.333 85.333-85.333h170.667v85.333h-170.667v170.667zM810.667 128h-170.667v-85.333h170.667c46.933 0 85.333 38.4 85.333 85.333v170.667h-85.333v-170.667zM810.667 810.667h-170.667v-85.333h170.667v-170.667h85.333v170.667c0 46.933-38.4 85.333-85.333 85.333z" />
523<glyph unicode="&#xe803;" d="M810.667 725.334h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-426.667c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM810.667 213.334h-597.333v426.667h597.333v-426.667z" />
524<glyph unicode="&#xe804;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 128h-597.333v597.333h597.333v-597.333zM595.627 414.294l-117.333-151.040-83.627 100.693-117.333-150.613h469.333l-151.040 200.96z" />
525<glyph unicode="&#xe805;" d="M725.333 810.667h-426.667c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h426.667c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM725.333 128h-426.667v597.333h426.667v-597.333z" />
526<glyph unicode="&#xe806;" d="M768 768h-512c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM768 170.667h-512v512h512v-512z" />
527<glyph unicode="&#xe807;" d="M725.333 298.667h85.333v341.333c0 46.933-38.4 85.333-85.333 85.333h-341.333v-85.333h341.333v-341.333zM298.667 213.334v682.667h-85.333v-170.667h-170.667v-85.333h170.667v-426.667c0-46.933 38.4-85.333 85.333-85.333h426.667v-170.667h85.333v170.667h170.667v85.333h-682.667z" />
528<glyph unicode="&#xe808;" d="M85.333 277.334v-85.333h853.333v85.333h-853.333zM85.333 490.667v-85.333h853.333v85.333h-853.333zM85.333 704v-85.333h853.333v85.333h-853.333z" />
529<glyph unicode="&#xe809;" d="M128 768l384-682.667 384 682.667h-768zM272.213 682.667h480l-240.213-426.667-239.787 426.667z" />
530<glyph unicode="&#xe80a;" d="M128 202.667v-160h160l471.893 471.893-160 160-471.893-471.893zM883.627 638.294c16.64 16.64 16.64 43.52 0 60.16l-99.84 99.84c-16.64 16.64-43.52 16.64-60.16 0l-78.080-78.080 160-160 78.080 78.080z" />
531<glyph unicode="&#xe80b;" d="M170.667 469.334v-85.333h341.333v85.333h-341.333zM810.667 170.667h-85.333v453.12l-128-43.52v72.533l200.533 72.533h12.8v-554.667z" />
532<glyph unicode="&#xe80c;" d="M642.133 243.627l122.027 130.987c16.213 16.64 30.72 33.707 44.373 50.347s25.173 33.28 34.987 49.92c9.813 16.64 17.493 33.28 23.040 49.92s8.107 33.707 8.107 50.347c0 22.613-3.84 43.52-11.52 62.293s-18.773 34.56-33.28 47.36c-14.507 13.227-32.853 23.040-53.76 30.293-21.76 6.827-46.080 10.24-73.387 10.24-29.44 0-55.893-4.693-78.933-13.653s-42.667-21.76-58.027-37.547c-15.787-15.787-27.733-34.133-35.84-55.467-7.68-20.053-11.52-41.387-11.947-64h91.307c0.427 13.227 2.133 25.6 5.547 37.12 3.84 12.373 9.813 23.040 17.067 32 7.68 8.96 17.493 15.787 29.013 20.907s25.6 7.68 40.96 7.68c13.227 0 24.747-2.133 34.56-6.4s18.347-10.667 25.173-18.347c6.827-7.68 11.947-17.067 15.787-27.733 3.413-10.667 5.547-22.187 5.547-34.56 0-9.387-1.28-18.347-3.413-27.733-2.56-9.387-6.4-19.2-12.373-29.867s-13.653-22.613-23.893-35.413c-9.813-12.8-22.187-27.733-37.547-43.947l-177.92-194.133v-63.573h368.213v72.96h-253.867zM85.333 469.334v-85.333h341.333v85.333h-341.333z" />
533<glyph unicode="&#xe80d;" d="M426.667 640h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667v170.667zM853.333 170.667h-85.333v453.12l-128-43.52v72.533l200.533 72.533h12.8v-554.667z" />
534<glyph unicode="&#xe80e;" d="M684.8 243.627l122.027 130.987c16.213 16.64 30.72 33.707 44.373 50.347s25.173 33.28 34.987 49.92c9.813 16.64 17.493 33.28 23.040 49.92s8.107 33.707 8.107 50.347c0 22.613-3.84 43.52-11.52 62.293s-18.773 34.56-33.28 47.36c-14.507 13.227-32.853 23.040-53.76 30.293-21.76 6.827-46.080 10.24-73.387 10.24-29.44 0-55.893-4.693-78.933-13.653s-42.667-21.76-58.027-37.547c-15.787-15.787-27.733-34.133-35.84-55.467-7.68-20.053-11.52-41.387-11.947-64h91.307c0.427 13.227 2.133 25.6 5.547 37.12 3.84 12.373 9.813 23.040 17.067 32 7.68 8.96 17.493 15.787 29.013 20.907s25.6 7.68 40.96 7.68c13.227 0 24.747-2.133 34.56-6.4s18.347-10.667 25.173-18.347c6.827-7.68 11.947-17.067 15.787-27.733 3.413-10.667 5.547-22.187 5.547-34.56 0-9.387-1.28-18.347-3.413-27.733-2.56-9.387-6.4-19.2-12.373-29.867s-13.653-22.613-23.893-35.413c-9.813-12.8-22.187-27.733-37.547-43.947l-177.92-194.133v-63.573h368.213v72.96h-253.867zM341.333 640h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667v170.667z" />
535<glyph unicode="&#xe80f;" d="M688.64 405.334c0-42.667-4.267-78.933-12.8-108.8s-20.48-54.187-35.413-72.533c-15.36-18.773-33.707-32-55.467-40.533s-45.653-12.8-72.533-12.8c-26.453 0-50.347 4.267-72.107 12.8s-40.533 21.76-55.893 40.533c-15.36 18.773-27.733 43.093-36.267 72.533-8.533 29.867-12.8 66.133-12.8 108.8v87.040c0 42.667 4.267 78.933 12.8 108.8s20.48 53.76 35.84 72.107c15.36 18.347 34.133 31.573 55.893 39.68 21.333 8.107 45.653 12.373 72.107 12.373 26.88 0 50.773-4.267 72.533-12.373s40.533-21.333 55.893-39.68c15.36-18.347 27.307-42.24 35.84-72.107s12.8-65.707 12.8-108.8v-87.040zM598.613 506.027c0 27.307-2.133 50.347-5.547 69.12-3.84 18.773-9.387 33.707-17.067 45.227-7.253 11.52-16.64 19.627-27.307 24.747-10.667 5.547-23.040 8.107-36.693 8.107s-26.027-2.56-36.693-7.68-20.053-13.227-27.307-24.747c-7.253-11.52-13.227-26.453-17.067-45.227s-5.547-41.813-5.547-69.12v-113.92c0-27.307 2.133-50.347 5.973-69.12 3.84-19.2 9.813-34.56 17.067-46.507s16.64-20.48 27.307-26.027 23.040-8.107 37.12-8.107c14.080 0 26.453 2.56 37.12 8.107s19.627 14.080 26.88 26.027c7.253 11.947 12.8 27.307 16.64 46.507s5.547 42.24 5.547 69.12v113.493z" />
536<glyph unicode="&#xe810;" d="M640 213.334v-85.333h85.333v85.333h85.333v85.333h-85.333v85.333h-85.333v-85.333h-85.333v-85.333h85.333zM853.333 853.334h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM213.333 725.334h256v-85.333h-256v85.333zM853.333 85.334h-682.667l682.667 682.667v-682.667z" />
537<glyph unicode="&#xe811;" d="M128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM597.333 298.667h85.333v426.667h-170.667v-85.333h85.333v-341.333zM896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-597.333v597.333h597.333v-597.333z" />
538<glyph unicode="&#xe812;" d="M128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-597.333v597.333h597.333v-597.333zM725.333 384h-170.667v85.333h85.333c46.933 0 85.333 37.973 85.333 85.333v85.333c0 47.36-38.4 85.333-85.333 85.333h-170.667v-85.333h170.667v-85.333h-85.333c-46.933 0-85.333-37.973-85.333-85.333v-170.667h256v85.333z" />
539<glyph unicode="&#xe813;" d="M896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-597.333v597.333h597.333v-597.333zM128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM725.333 384v64c0 35.413-28.587 64-64 64 35.413 0 64 28.587 64 64v64c0 47.36-38.4 85.333-85.333 85.333h-170.667v-85.333h170.667v-85.333h-85.333v-85.333h85.333v-85.333h-170.667v-85.333h170.667c46.933 0 85.333 37.973 85.333 85.333z" />
540<glyph unicode="&#xe814;" d="M128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM640 298.667h85.333v426.667h-85.333v-170.667h-85.333v170.667h-85.333v-256h170.667v-170.667zM896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-597.333v597.333h597.333v-597.333z" />
541<glyph unicode="&#xe815;" d="M896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-597.333v597.333h597.333v-597.333zM128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM725.333 384v85.333c0 47.36-38.4 85.333-85.333 85.333h-85.333v85.333h170.667v85.333h-256v-256h170.667v-85.333h-170.667v-85.333h170.667c46.933 0 85.333 37.973 85.333 85.333z" />
542<glyph unicode="&#xe816;" d="M128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-597.333v597.333h597.333v-597.333zM554.667 298.667h85.333c46.933 0 85.333 37.973 85.333 85.333v85.333c0 47.36-38.4 85.333-85.333 85.333h-85.333v85.333h170.667v85.333h-170.667c-46.933 0-85.333-37.973-85.333-85.333v-256c0-47.36 38.4-85.333 85.333-85.333zM554.667 469.334h85.333v-85.333h-85.333v85.333z" />
543<glyph unicode="&#xe817;" d="M128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-597.333v597.333h597.333v-597.333zM554.667 298.667l170.667 341.333v85.333h-256v-85.333h170.667l-170.667-341.333h85.333z" />
544<glyph unicode="&#xe818;" d="M128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-597.333v597.333h597.333v-597.333zM554.667 298.667h85.333c46.933 0 85.333 37.973 85.333 85.333v64c0 35.413-28.587 64-64 64 35.413 0 64 28.587 64 64v64c0 47.36-38.4 85.333-85.333 85.333h-85.333c-46.933 0-85.333-37.973-85.333-85.333v-64c0-35.413 28.587-64 64-64-35.413 0-64-28.587-64-64v-64c0-47.36 38.4-85.333 85.333-85.333zM554.667 640h85.333v-85.333h-85.333v85.333zM554.667 469.334h85.333v-85.333h-85.333v85.333z" />
545<glyph unicode="&#xe819;" d="M128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM597.333 426.667v170.667c0 47.36-38.4 85.333-85.333 85.333h-42.667c-46.933 0-85.333-37.973-85.333-85.333v-42.667c0-47.36 38.4-85.333 85.333-85.333h42.667v-42.667h-128v-85.333h128c46.933 0 85.333 37.973 85.333 85.333zM469.333 554.667v42.667h42.667v-42.667h-42.667zM896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 554.667h-85.333v85.333h-85.333v-85.333h-85.333v-85.333h85.333v-85.333h85.333v85.333h85.333v-256h-597.333v597.333h597.333v-256z" />
546<glyph unicode="&#xe81a;" d="M128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-597.333v597.333h597.333v-597.333zM640 725.334h-85.333c-46.933 0-85.333-37.973-85.333-85.333v-85.333c0-47.36 38.4-85.333 85.333-85.333h85.333v-85.333h-170.667v-85.333h170.667c46.933 0 85.333 37.973 85.333 85.333v256c0 47.36-38.4 85.333-85.333 85.333zM640 554.667h-85.333v85.333h85.333v-85.333z" />
547<glyph unicode="&#xe81b;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 128l-298.667 341.333v-341.333h-298.667l298.667 341.333v256h298.667v-597.333z" />
548<glyph unicode="&#xe81c;" d="M213.333 298.667h-85.333v-170.667c0-46.933 38.4-85.333 85.333-85.333h170.667v85.333h-170.667v170.667zM213.333 725.334h170.667v85.333h-170.667c-46.933 0-85.333-38.4-85.333-85.333v-170.667h85.333v170.667zM810.667 810.667h-170.667v-85.333h170.667v-170.667h85.333v170.667c0 46.933-38.4 85.333-85.333 85.333zM810.667 128h-170.667v-85.333h170.667c46.933 0 85.333 38.4 85.333 85.333v170.667h-85.333v-170.667zM512 554.667c-70.827 0-128-57.173-128-128s57.173-128 128-128 128 57.173 128 128-57.173 128-128 128z" />
549<glyph unicode="&#xe81d;" d="M825.6 510.294c-29.013 147.2-158.293 257.707-313.6 257.707-123.307 0-229.973-69.973-283.307-172.373-128.427-13.653-228.693-122.027-228.693-254.293 0-141.227 114.773-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.467 203.947-198.4 211.627zM810.667 170.667h-554.667c-94.293 0-170.667 76.373-170.667 170.667s76.373 170.667 170.667 170.667 170.667-76.373 170.667-170.667h85.333c0 117.76-79.36 216.747-187.733 246.613 43.093 57.173 110.933 94.72 187.733 94.72 129.28 0 234.667-105.387 234.667-234.667v-21.333h64c70.4 0 128-57.6 128-128s-57.6-128-128-128z" />
550<glyph unicode="&#xe81e;" d="M853.333 768h-170.667l-170.667 170.667-170.667-170.667h-170.667c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM853.333 85.334h-682.667v597.333h192.853l150.187 149.333 148.48-149.333h191.147v-597.333zM768 597.334h-512v-426.667h512z" />
551<glyph unicode="&#xe81f;" d="M597.333 682.667l-160-213.333 121.6-162.133-68.267-51.2c-72.107 96-192 256-192 256l-256-341.333h938.667l-384 512z" />
552<glyph unicode="&#xe820;" d="M128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-597.333v597.333h597.333v-597.333z" />
553<glyph unicode="&#xe821;" d="M469.333 765.014v86.187c-85.76-8.533-163.84-42.667-226.987-94.293l60.587-61.013c47.36 36.693 104.107 61.44 166.4 69.12zM781.653 756.907c-63.147 51.627-141.227 85.76-226.987 94.293v-86.187c62.293-7.68 119.040-32.427 166.4-69.12l60.587 61.013zM850.347 469.334h86.187c-8.533 85.76-42.667 163.84-94.293 226.987l-61.013-60.587c36.693-47.36 61.44-104.107 69.12-166.4zM242.773 635.734l-61.013 60.587c-51.627-63.147-85.76-141.227-94.293-226.987h86.187c7.68 62.293 32.427 119.040 69.12 166.4zM173.653 384h-86.187c8.533-85.76 42.667-163.84 94.293-226.987l61.013 61.013c-36.693 46.933-61.44 103.68-69.12 165.973zM640 426.667c0 70.827-57.173 128-128 128s-128-57.173-128-128 57.173-128 128-128 128 57.173 128 128zM781.227 217.6l61.013-61.013c51.627 63.147 85.76 141.653 94.293 226.987h-86.187c-7.68-61.867-32.427-118.613-69.12-165.973zM554.667 88.32v-86.187c85.76 8.533 163.84 42.667 226.987 94.293l-61.013 61.013c-46.933-36.693-103.68-61.44-165.973-69.12zM242.347 96.427c63.147-51.627 141.653-85.76 226.987-94.293v86.187c-62.293 7.68-119.040 32.427-166.4 69.12l-60.587-61.013z" />
554<glyph unicode="&#xe822;" d="M797.867 409.6c-11.947 6.827-24.32 12.373-36.693 17.067 12.373 4.693 24.747 10.24 36.693 17.067 81.92 47.36 127.573 133.12 128 221.44-76.373 43.947-173.653 47.36-256 0-11.947-6.827-23.040-14.933-33.28-23.040 2.133 13.227 3.413 26.88 3.413 40.533 0 94.72-51.627 177.067-128 221.44-76.373-44.373-128-126.72-128-221.44 0-13.653 1.28-27.307 3.413-40.533-10.24 8.533-21.333 16.64-33.28 23.467-81.92 47.36-179.2 43.947-256 0 0-88.32 45.653-174.080 128-221.44 11.947-6.827 24.32-12.373 36.693-17.067-12.373-4.693-24.747-10.24-36.693-17.067-81.92-47.36-127.573-133.12-128-221.44 76.373-43.947 173.653-47.36 256 0 11.947 6.827 23.040 14.933 33.28 23.040-2.133-13.653-3.413-27.307-3.413-40.96 0-94.72 51.627-177.067 128-221.44 76.373 44.373 128 126.72 128 221.44 0 13.653-1.28 27.307-3.413 40.533 10.24-8.533 21.333-16.213 33.28-23.040 81.92-47.36 179.2-43.947 256 0-0.427 88.32-46.080 174.080-128 221.44zM512 256c-94.293 0-170.667 76.373-170.667 170.667s76.373 170.667 170.667 170.667 170.667-76.373 170.667-170.667-76.373-170.667-170.667-170.667z" />
555<glyph unicode="&#xe823;" d="M680.96 499.627l-117.333-151.040-83.627 100.693-117.333-150.613h469.333l-151.040 200.96zM128 725.334h-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667v85.333h-682.667v682.667zM896 896h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.334h-597.333v597.333h597.333v-597.333z" />
556<glyph unicode="&#xe824;" d="M298.667 469.334h-256v-85.333h256v85.333zM391.253 607.574l-90.453 90.453-60.16-60.16 90.453-90.453 60.16 60.16zM554.667 896h-85.333v-256h85.333v256zM783.36 637.867l-60.16 60.16-90.453-90.453 60.16-60.16 90.453 90.453zM725.333 469.334v-85.333h256v85.333h-256zM512 554.667c-70.827 0-128-57.173-128-128s57.173-128 128-128 128 57.173 128 128-57.173 128-128 128zM632.747 245.76l90.453-90.453 60.16 60.16-90.453 90.453-60.16-60.16zM240.64 215.467l60.16-60.16 90.453 90.453-60.16 60.16-90.453-90.453zM469.333-42.666h85.333v256h-85.333v-256z" />
557<glyph unicode="&#xe825;" d="M128 853.334v-512h128v-384l298.667 512h-170.667l170.667 384h-426.667zM810.667 853.334h-85.333l-136.533-384h81.067l29.867 85.333h136.533l29.867-85.333h81.067l-136.533 384zM718.933 612.267l49.067 155.733 49.067-155.733h-98.133z" />
558<glyph unicode="&#xe826;" d="M139.52 810.667l-54.187-54.187 213.333-213.333v-159.147h128v-384l152.747 261.973 177.067-176.64 54.187 54.187-671.147 671.147zM725.333 512h-170.667l170.667 341.333h-426.667v-93.013l360.96-360.96 65.707 112.64z" />
559<glyph unicode="&#xe827;" d="M298.667 853.334v-469.333h128v-384l298.667 512h-170.667l170.667 341.333z" />
560<glyph unicode="&#xe828;" d="M640 42.667h85.333v85.333h-85.333v-85.333zM810.667 554.667h85.333v85.333h-85.333v-85.333zM128 725.334v-597.333c0-46.933 38.4-85.333 85.333-85.333h170.667v85.333h-170.667v597.333h170.667v85.333h-170.667c-46.933 0-85.333-38.4-85.333-85.333zM810.667 810.667v-85.333h85.333c0 46.933-38.4 85.333-85.333 85.333zM469.333-42.666h85.333v938.667h-85.333v-938.667zM810.667 213.334h85.333v85.333h-85.333v-85.333zM640 725.334h85.333v85.333h-85.333v-85.333zM810.667 384h85.333v85.333h-85.333v-85.333zM810.667 42.667c46.933 0 85.333 38.4 85.333 85.333h-85.333v-85.333z" />
561<glyph unicode="&#xe829;" d="M469.333 554.667h85.333v-85.333h-85.333zM384 469.334h85.333v-85.333h-85.333zM554.667 469.334h85.333v-85.333h-85.333zM640 554.667h85.333v-85.333h-85.333zM298.667 554.667h85.333v-85.333h-85.333zM810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM384 170.667h-85.333v85.333h85.333v-85.333zM554.667 170.667h-85.333v85.333h85.333v-85.333zM725.333 170.667h-85.333v85.333h85.333v-85.333zM810.667 469.334h-85.333v-85.333h85.333v-85.333h-85.333v85.333h-85.333v-85.333h-85.333v85.333h-85.333v-85.333h-85.333v85.333h-85.333v-85.333h-85.333v85.333h85.333v85.333h-85.333v256h597.333v-256z" />
562<glyph unicode="&#xe82a;" d="M426.667 426.667c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM256 597.334c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM256 256c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM768 597.334c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333-85.333-38.4-85.333-85.333 38.4-85.333 85.333-85.333zM597.333 256c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM768 426.667c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM597.333 597.334c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM426.667 768c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z" />
563<glyph unicode="&#xe82b;" d="M341.333 768v-61.867l85.333-85.333v147.2h170.667v-170.667h-147.2l85.333-85.333h61.867v-61.867l85.333-85.333v147.2h170.667v-170.667h-147.2l85.333-85.333h61.867v-61.867l85.333-85.333v659.2c0 46.933-38.4 85.333-85.333 85.333h-659.2l85.333-85.333h61.867zM682.667 768h170.667v-170.667h-170.667v170.667zM54.187 884.48l-54.187-54.613 85.333-85.333v-659.2c0-46.933 38.4-85.333 85.333-85.333h659.627l85.333-85.333 54.187 54.187-915.627 915.627zM426.667 403.2l61.867-61.867h-61.867v61.867zM170.667 659.2l61.867-61.867h-61.867v61.867zM341.333 85.334h-170.667v170.667h170.667v-170.667zM341.333 341.334h-170.667v170.667h147.2l23.467-23.467v-147.2zM597.333 85.334h-170.667v170.667h147.2l23.467-23.040v-147.627zM682.667 85.334v62.293l62.293-62.293h-62.293z" />
564<glyph unicode="&#xe82c;" d="M853.333 853.334h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM341.333 85.334h-170.667v170.667h170.667v-170.667zM341.333 341.334h-170.667v170.667h170.667v-170.667zM341.333 597.334h-170.667v170.667h170.667v-170.667zM597.333 85.334h-170.667v170.667h170.667v-170.667zM597.333 341.334h-170.667v170.667h170.667v-170.667zM597.333 597.334h-170.667v170.667h170.667v-170.667zM853.333 85.334h-170.667v170.667h170.667v-170.667zM853.333 341.334h-170.667v170.667h170.667v-170.667zM853.333 597.334h-170.667v170.667h170.667v-170.667z" />
565<glyph unicode="&#xe82d;" d="M768 213.334l-628.48 628.48-54.187-54.613 170.667-170.667v-147.2h-85.333v170.667h-85.333v-426.667h85.333v170.667h85.333v-170.667h85.333v317.867l42.667-42.667v-275.2h170.667c28.587 0 53.76 14.080 69.12 35.84l270.507-270.507 54.187 54.187-180.48 180.48zM554.667 298.667h-85.333v104.533l85.333-85.333v-19.2zM768 384h42.667l34.987-139.52 31.147-31.147h61.867l-50.773 177.92c29.867 13.227 50.773 43.093 50.773 78.080v85.333c0 46.933-38.4 85.333-85.333 85.333h-170.667v-232.533l85.333-85.333v61.867zM768 554.667h85.333v-85.333h-85.333v85.333zM640 450.134v104.533c0 46.933-38.4 85.333-85.333 85.333h-104.533l189.867-189.867z" />
566<glyph unicode="&#xe82e;" d="M256 469.334h-85.333v170.667h-85.333v-426.667h85.333v170.667h85.333v-170.667h85.333v426.667h-85.333v-170.667zM554.667 640h-170.667v-426.667h170.667c46.933 0 85.333 38.4 85.333 85.333v256c0 46.933-38.4 85.333-85.333 85.333zM554.667 298.667h-85.333v256h85.333v-256zM938.667 469.334v85.333c0 46.933-38.4 85.333-85.333 85.333h-170.667v-426.667h85.333v170.667h42.667l42.667-170.667h85.333l-50.773 177.92c29.867 13.227 50.773 43.093 50.773 78.080zM853.333 469.334h-85.333v85.333h85.333v-85.333z" />
567<glyph unicode="&#xe82f;" d="M725.333 682.667c-141.227 0-256-114.773-256-256s114.773-256 256-256 256 114.773 256 256-114.773 256-256 256zM213.333 597.334c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM213.333 341.334c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333z" />
568<glyph unicode="&#xe830;" d="M213.333 597.334c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM725.333 682.667c-141.227 0-256-114.773-256-256s114.773-256 256-256 256 114.773 256 256-114.773 256-256 256zM725.333 256c-94.293 0-170.667 76.373-170.667 170.667s76.373 170.667 170.667 170.667 170.667-76.373 170.667-170.667-76.373-170.667-170.667-170.667z" />
569<glyph unicode="&#xe831;" d="M756.48 425.814l169.813 169.813c16.64 16.64 16.64 43.52 0 60.16l-185.173 185.173c-16.64 16.64-43.52 16.64-60.16 0l-169.813-169.813-169.813 169.813c-8.533 8.107-19.2 12.373-30.293 12.373-10.667 0-21.76-4.267-29.867-12.373l-185.173-185.173c-16.64-16.64-16.64-43.52 0-60.16l169.813-169.813-169.813-169.813c-16.64-16.64-16.64-43.52 0-60.16l185.173-185.173c16.64-16.64 43.52-16.64 60.16 0l169.813 169.813 169.813-169.813c8.533-8.533 19.2-12.373 30.293-12.373s21.76 4.267 30.293 12.373l185.173 185.173c16.64 16.64 16.64 43.52 0 60.16l-170.24 169.813zM512 554.667c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM311.040 471.040l-154.88 154.453 154.88 154.88 154.453-154.453-154.453-154.88zM426.667 384c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667zM512 298.667c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667zM597.333 469.334c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM710.827 70.827l-154.88 154.453 154.88 154.88 154.453-154.453-154.453-154.88z" />
570<glyph unicode="&#xe832;" d="M682.667 512h-85.333v-85.333h85.333v85.333zM682.667 341.334h-85.333v-85.333h85.333v85.333zM341.333 512h-85.333v-85.333h85.333v85.333zM512 512h-85.333v-85.333h85.333v85.333zM853.333 768h-682.667c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM853.333 170.667h-682.667v512h682.667v-512z" />
571<glyph unicode="&#xe833;" d="M896 128v597.333c0 46.933-38.4 85.333-85.333 85.333h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333zM362.667 362.667l106.667-128.427 149.333 192.427 192-256h-597.333l149.333 192z" />
572<glyph unicode="&#xe834;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM234.667 618.667h85.333v85.333h64v-85.333h85.333v-64h-85.333v-85.333h-64v85.333h-85.333v64zM810.667 128h-597.333l597.333 597.333v-597.333zM725.333 213.334v64h-213.333v-64h213.333z" />
573<glyph unicode="&#xe835;" d="M597.333 682.667l-160-213.333 121.6-162.133-68.267-51.2c-72.107 96-192 256-192 256l-256-341.333h938.667l-384 512z" />
574<glyph unicode="&#xe836;" d="M256 810.667h-128v-128c70.827 0 128 57.173 128 128zM597.333 810.667h-85.333c0-212.053-171.947-384-384-384v-85.333c259.413 0 469.333 210.347 469.333 469.333zM426.667 810.667h-85.333c0-117.76-95.573-213.333-213.333-213.333v-85.333c165.12 0 298.667 133.547 298.667 298.667zM426.667 42.667h85.333c0 212.053 171.947 384 384 384v85.333c-258.987 0-469.333-210.347-469.333-469.333zM768 42.667h128v128c-70.827 0-128-57.173-128-128zM597.333 42.667h85.333c0 117.76 95.573 213.333 213.333 213.333v85.333c-165.12 0-298.667-133.547-298.667-298.667z" />
575<glyph unicode="&#xe837;" d="M426.667 810.667h-85.333c0-15.787-1.707-30.72-5.12-45.227l67.84-67.84c14.507 34.56 22.613 72.96 22.613 113.067zM128 756.48l121.173-121.173c-34.56-23.893-75.947-37.973-121.173-37.973v-85.333c68.693 0 131.84 23.467 182.187 62.293l61.013-61.013c-66.56-54.187-151.040-86.613-243.2-86.613v-85.333c115.627 0 221.44 42.24 303.36 111.787l106.667-106.667c-69.12-82.347-111.36-188.16-111.36-303.787h85.333c0 92.16 32.427 176.64 86.613 242.773l61.013-61.013c-38.827-49.92-62.293-113.067-62.293-181.76h85.333c0 45.227 14.080 86.613 37.973 121.173l121.173-121.173 54.187 54.187-713.813 713.813-54.187-54.187zM597.333 810.667h-85.333c0-64-15.787-124.16-43.52-177.493l62.293-62.293c41.813 69.973 66.56 151.893 66.56 239.787zM850.773 250.88c14.507 3.413 29.44 5.12 45.227 5.12v85.333c-40.107 0-78.507-8.107-113.493-22.187l68.267-68.267zM656.213 445.44l62.293-62.293c53.333 27.733 113.493 43.52 177.493 43.52v85.333c-87.893 0-169.813-24.747-239.787-66.56z" />
576<glyph unicode="&#xe838;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667z" />
577<glyph unicode="&#xe839;" d="M811.093 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM640.427 490.667c0-35.413-28.587-64-64-64 35.413 0 64-28.587 64-64v-64c0-47.36-38.4-85.333-85.333-85.333h-170.667v85.333h170.667v85.333h-85.333v85.333h85.333v85.333h-170.667v85.333h170.667c46.933 0 85.333-37.973 85.333-85.333v-64z" />
578<glyph unicode="&#xe83a;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM640 213.334h-85.333v170.667h-170.667v256h85.333v-170.667h85.333v170.667h85.333v-426.667z" />
579<glyph unicode="&#xe83b;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM640 554.667h-170.667v-85.333h85.333c46.933 0 85.333-37.973 85.333-85.333v-85.333c0-47.36-38.4-85.333-85.333-85.333h-170.667v85.333h170.667v85.333h-170.667v256h256v-85.333z" />
580<glyph unicode="&#xe83c;" d="M469.333 298.667h85.333v85.333h-85.333v-85.333zM810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM640 554.667h-170.667v-85.333h85.333c46.933 0 85.333-37.973 85.333-85.333v-85.333c0-47.36-38.4-85.333-85.333-85.333h-85.333c-46.933 0-85.333 37.973-85.333 85.333v256c0 47.36 38.4 85.333 85.333 85.333h170.667v-85.333z" />
581<glyph unicode="&#xe83d;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM597.333 213.334h-85.333v341.333h-85.333v85.333h170.667v-426.667z" />
582<glyph unicode="&#xe83e;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM640 469.334c0-47.36-38.4-85.333-85.333-85.333h-85.333v-85.333h170.667v-85.333h-256v170.667c0 47.36 38.4 85.333 85.333 85.333h85.333v85.333h-170.667v85.333h170.667c46.933 0 85.333-37.973 85.333-85.333v-85.333z" />
583<glyph unicode="&#xe83f;" d="M512 512c-164.693 0-298.667-133.973-298.667-298.667h85.333c0 117.76 95.573 213.333 213.333 213.333s213.333-95.573 213.333-213.333h85.333c0 164.693-133.973 298.667-298.667 298.667zM512 682.667c-258.987 0-469.333-210.347-469.333-469.333h85.333c0 211.627 172.373 384 384 384s384-172.373 384-384h85.333c0 258.987-210.347 469.333-469.333 469.333z" />
584<glyph unicode="&#xe840;" d="M554.667 640h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667v170.667zM512 853.334c-235.093 0-426.667-191.573-426.667-426.667s191.573-426.667 426.667-426.667h341.333c46.933 0 85.333 38.4 85.333 85.333v341.333c0 235.093-191.573 426.667-426.667 426.667zM512 85.334c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
585<glyph unicode="&#xe841;" d="M768 768l85.333-170.667h-128l-85.333 170.667h-85.333l85.333-170.667h-128l-85.333 170.667h-85.333l85.333-170.667h-128l-85.333 170.667h-42.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v597.333h-170.667z" />
586<glyph unicode="&#xe842;" d="M945.92 547.414c0 165.12-133.547 298.667-298.667 298.667s-298.667-133.547-298.667-298.667c0-148.053 107.52-270.507 248.747-293.973v-168.107h-341.333v128h42.667v170.667c0 23.467-19.2 42.667-42.667 42.667h-128c-23.467 0-42.667-19.2-42.667-42.667v-170.667h42.667v-213.333h682.667v85.333h-128v165.547c148.053 17.493 263.253 143.36 263.253 296.533zM192 469.334c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64z" />
587<glyph unicode="&#xe843;" d="M554.667 250.88c148.053 17.493 263.253 143.36 263.253 296.533 0 165.12-133.547 298.667-298.667 298.667s-298.667-133.547-298.667-298.667c0-148.053 107.52-270.507 248.747-293.973v-168.107h-256v-85.333h597.333v85.333h-256v165.547z" />
588<glyph unicode="&#xe844;" d="M657.493 622.507l-60.16 60.16-256-256 256-256 60.16 60.16-195.413 195.84z" />
589<glyph unicode="&#xe845;" d="M426.667 682.667l-60.16-60.16 195.413-195.84-195.413-195.84 60.16-60.16 256 256z" />
590<glyph unicode="&#xe846;" d="M512 810.667c-212.053 0-384-171.947-384-384s171.947-384 384-384c35.413 0 64 28.587 64 64 0 16.64-6.4 31.573-16.64 43.093-9.813 11.093-16.213 26.027-16.213 42.24 0 35.413 28.587 64 64 64h75.52c117.76 0 213.333 95.573 213.333 213.333 0 188.587-171.947 341.333-384 341.333zM277.333 426.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM405.333 597.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM618.667 597.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 426.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
591<glyph unicode="&#xe847;" d="M512 853.334c-235.947 0-426.667-190.72-426.667-426.667s190.72-426.667 426.667-426.667 426.667 190.72 426.667 426.667-190.72 426.667-426.667 426.667zM512 85.334c-188.16 0-341.333 153.173-341.333 341.333s153.173 341.333 341.333 341.333 341.333-153.173 341.333-341.333-153.173-341.333-341.333-341.333z" />
592<glyph unicode="&#xe848;" d="M853.333 659.627v-465.493c-110.933 32.853-225.28 49.493-341.333 49.493s-230.4-16.64-341.333-49.493v465.493c110.933-32.853 225.28-49.493 341.333-49.493 116.053-0.427 230.4 16.213 341.333 49.493zM914.347 768c-4.267 0-8.533-0.853-13.227-2.56-125.44-46.933-257.28-69.973-389.12-69.973s-263.68 23.467-389.12 69.973c-4.693 1.707-9.387 2.56-13.227 2.56-14.507 0-24.32-9.813-24.32-26.88v-629.333c0-16.64 9.813-26.453 24.32-26.453 4.267 0 8.533 0.853 13.227 2.56 125.44 46.933 257.28 69.973 389.12 69.973s263.68-23.467 389.12-69.973c4.693-1.707 8.96-2.56 13.227-2.56 14.080 0 24.32 9.813 24.32 26.88v628.907c0 17.067-10.24 26.88-24.32 26.88z" />
593<glyph unicode="&#xe849;" d="M850.773 37.547c-46.933 125.44-69.973 257.28-69.973 389.12s23.467 263.68 69.973 389.12c1.707 4.693 2.56 9.387 2.56 13.227 0 14.507-9.813 24.32-26.88 24.32h-628.907c-17.067 0-26.88-9.813-26.88-24.32 0-4.267 0.853-8.533 2.56-13.227 46.933-125.44 70.4-257.28 70.4-389.12s-23.467-263.68-69.973-389.12c-2.133-4.693-2.987-9.387-2.987-13.227 0-14.080 9.813-24.32 26.88-24.32h629.333c16.64 0 26.88 10.24 26.88 24.32-0.427 4.267-1.28 8.533-2.987 13.227zM279.040 85.334c32.853 110.933 49.493 225.28 49.493 341.333s-16.64 230.4-49.493 341.333h465.493c-32.853-110.933-49.493-225.28-49.493-341.333s16.64-230.4 49.493-341.333h-465.493z" />
594<glyph unicode="&#xe84a;" d="M512 682.667c104.533 0 200.96-8.533 311.040-27.307 20.053-75.947 30.293-152.747 30.293-228.693s-10.24-152.747-30.293-228.693c-110.080-18.773-206.507-27.307-311.040-27.307s-200.96 8.533-311.040 27.307c-20.053 75.947-30.293 152.747-30.293 228.693s10.24 152.747 30.293 228.693c110.080 18.773 206.507 27.307 311.040 27.307zM512 768c-116.48 0-222.72-10.24-339.2-30.72l-39.68-6.827-10.667-38.4c-24.747-88.32-37.12-177.067-37.12-265.387s12.373-177.067 37.12-265.387l10.667-37.973 39.68-6.827c116.48-20.907 222.72-31.147 339.2-31.147s222.72 10.24 339.2 30.72l39.68 6.827 10.667 37.973c24.747 88.747 37.12 177.493 37.12 265.813s-12.373 177.067-37.12 265.387l-10.667 37.973-39.68 6.827c-116.48 20.907-222.72 31.147-339.2 31.147z" />
595<glyph unicode="&#xe84b;" d="M981.333 170.667v512c0 46.933-38.4 85.333-85.333 85.333h-768c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333zM362.667 405.334l106.667-128.427 149.333 192.427 192-256h-597.333l149.333 192z" />
596<glyph unicode="&#xe84c;" d="M768 853.334h-512c-46.933 0-85.333-38.4-85.333-85.333v-682.667c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM256 768h213.333v-341.333l-106.667 64-106.667-64v341.333zM256 128l128 164.693 91.307-110.080 128 164.693 164.693-219.307h-512z" />
597<glyph unicode="&#xe84d;" d="M648.533 426.667c0-75.405-61.128-136.533-136.533-136.533s-136.533 61.128-136.533 136.533c0 75.405 61.128 136.533 136.533 136.533s136.533-61.128 136.533-136.533zM384 853.334l-78.080-85.333h-135.253c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333h-135.253l-78.080 85.333h-256zM512 213.334c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333z" />
598<glyph unicode="&#xe84e;" d="M938.667 256v512c0 46.933-38.4 85.333-85.333 85.333h-512c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333zM469.333 426.667l86.613-115.627 126.72 158.293 170.667-213.333h-512l128 170.667zM85.333 682.667v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333v85.333h-597.333v597.333h-85.333z" />
599<glyph unicode="&#xe84f;" d="M896 128v597.333c0 46.933-38.4 85.333-85.333 85.333h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333zM362.667 362.667l106.667-128.427 149.333 192.427 192-256h-597.333l149.333 192z" />
600<glyph unicode="&#xe850;" d="M512 416c52.907 0 96 43.093 96 96s-43.093 96-96 96-96-43.093-96-96 43.093-96 96-96zM704 245.334c0 64-128 96-192 96s-192-32-192-96v-32h384v32zM810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 128h-597.333v597.333h597.333v-597.333z" />
601<glyph unicode="&#xe851;" d="M512 746.667c-213.333 0-395.52-132.693-469.333-320 73.813-187.307 256-320 469.333-320s395.52 132.693 469.333 320c-73.813 187.307-256 320-469.333 320zM512 213.334c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333zM512 554.667c-70.827 0-128-57.173-128-128s57.173-128 128-128 128 57.173 128 128-57.173 128-128 128z" />
602<glyph unicode="&#xe852;" d="M303.36 574.72l-60.16 60.587c-38.4-49.493-62.293-106.667-69.547-165.973h86.187c5.973 37.12 20.907 73.387 43.52 105.387zM259.84 384h-86.187c7.253-59.307 30.72-116.48 69.12-165.973l60.16 60.587c-22.187 32-37.12 67.84-43.093 105.387zM302.933 157.014c49.493-38.4 107.093-61.44 166.4-68.693v86.613c-37.12 6.4-72.96 20.907-104.96 43.947l-61.44-61.867zM554.667 765.014v130.987l-194.133-194.133 194.133-189.867v166.827c121.173-20.48 213.333-125.44 213.333-252.16s-92.16-231.68-213.333-252.16v-86.187c168.533 20.907 298.667 164.267 298.667 338.347s-130.133 317.44-298.667 338.347z" />
603<glyph unicode="&#xe853;" d="M663.467 701.867l-194.133 194.133v-130.987c-168.107-20.907-298.667-164.267-298.667-338.347s130.133-317.44 298.667-338.347v86.187c-121.173 20.48-213.333 125.44-213.333 252.16s92.16 231.68 213.333 252.16v-166.827l194.133 189.867zM850.347 469.334c-7.253 59.307-30.72 116.48-69.12 165.973l-60.587-60.587c23.040-32 37.547-68.267 43.52-105.387h86.187zM554.667 174.934v-86.187c59.307 7.253 116.907 30.293 166.4 68.693l-61.44 61.44c-32-23.040-67.84-37.973-104.96-43.947zM720.64 278.187l60.587-60.16c38.4 49.493 61.867 106.667 69.12 165.973h-86.187c-5.973-37.12-20.48-73.387-43.52-105.813z" />
604<glyph unicode="&#xe854;" d="M426.667 597.334v-341.333l213.333 170.667-213.333 170.667zM810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 128h-597.333v597.333h597.333v-597.333z" />
605<glyph unicode="&#xe855;" d="M896 682.667h-768c-46.933 0-85.333-38.4-85.333-85.333v-341.333c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333v341.333c0 46.933-38.4 85.333-85.333 85.333zM896 256h-768v341.333h85.333v-170.667h85.333v170.667h85.333v-170.667h85.333v170.667h85.333v-170.667h85.333v170.667h85.333v-170.667h85.333v170.667h85.333v-341.333z" />
606<glyph unicode="&#xe856;" d="M107.947 100.267l57.173-23.893v385.28l-103.68-250.027c-17.493-43.52 3.413-93.44 46.507-111.36zM939.947 258.134l-211.627 510.72c-13.227 32-44.373 51.627-77.227 52.48-11.093 0-22.613-1.707-33.707-6.4l-314.453-130.133c-32-13.227-51.627-43.947-52.48-76.8-0.427-11.52 1.707-23.040 6.4-34.133l211.627-510.72c13.227-32.427 44.8-52.053 78.080-52.48 11.093 0 22.187 2.133 32.853 6.4l314.027 130.133c43.52 17.92 64.427 67.84 46.507 110.933zM336.213 565.334c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667zM250.88 96c0-46.933 38.4-85.333 85.333-85.333h61.867l-147.2 355.84v-270.507z" />
607<glyph unicode="&#xe857;" d="M853.333 768h-135.253l-78.080 85.333h-256l-78.080-85.333h-135.253c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM640 277.334v106.667h-256v-106.667l-149.333 149.333 149.333 149.333v-106.667h256v106.667l149.333-149.333-149.333-149.333z" />
608<glyph unicode="&#xe858;" d="M768 533.334v149.333c0 23.467-19.2 42.667-42.667 42.667h-597.333c-23.467 0-42.667-19.2-42.667-42.667v-512c0-23.467 19.2-42.667 42.667-42.667h597.333c23.467 0 42.667 19.2 42.667 42.667v149.333l170.667-170.667v554.667l-170.667-170.667zM554.667 277.334v106.667h-256v-106.667l-149.333 149.333 149.333 149.333v-106.667h256v106.667l149.333-149.333-149.333-149.333z" />
609<glyph unicode="&#xe859;" d="M511.573 853.334c-235.52 0-426.24-191.147-426.24-426.667s190.72-426.667 426.24-426.667c235.947 0 427.093 191.147 427.093 426.667s-191.147 426.667-427.093 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM661.333 469.334c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM362.667 469.334c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM512 192c99.413 0 183.893 62.293 218.027 149.333h-436.053c34.133-87.040 118.613-149.333 218.027-149.333z" />
610<glyph unicode="&#xe85a;" d="M832.427 807.254l-701.013-701.013c3.84-14.507 11.52-27.733 21.76-38.4 10.667-10.24 23.893-17.92 38.4-21.76l701.44 701.013c-8.107 29.44-31.147 52.48-60.587 60.16zM506.88 810.667l-378.88-378.88v-120.747l499.627 499.627h-120.747zM213.333 810.667c-46.933 0-85.333-38.4-85.333-85.333v-85.333l170.667 170.667h-85.333zM810.667 42.667c23.467 0 44.8 9.387 60.16 25.173 15.787 15.36 25.173 36.693 25.173 60.16v85.333l-170.667-170.667h85.333zM396.373 42.667h120.747l378.88 378.88v120.747l-499.627-499.627z" />
611<glyph unicode="&#xe85b;" d="M692.907 607.574c-49.92 49.92-115.2 75.093-180.907 75.093v-256l-180.907-180.907c99.84-99.84 261.973-99.84 362.24 0 99.84 99.84 99.84 261.973-0.427 361.813zM512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333z" />
612<glyph unicode="&#xe85c;" d="M495.36 385.28c-6.827 10.24-15.36 19.627-26.453 27.733-10.667 8.107-23.893 14.933-39.68 20.48 12.8 5.973 24.32 12.8 34.133 21.333s17.92 17.493 24.32 27.307c6.4 9.813 11.52 19.627 14.507 30.293 3.413 10.24 4.693 20.907 4.693 31.147 0 23.467-3.84 44.373-11.947 62.293-7.68 17.92-18.773 32.853-33.28 45.227-14.080 11.947-31.147 21.333-51.2 27.307-19.2 5.547-41.387 8.533-65.28 8.533-23.467 0-45.227-3.413-64.853-10.24-20.053-7.253-37.12-17.067-51.2-29.44s-25.6-26.88-33.28-43.947c-8.533-16.64-12.373-35.413-12.373-55.040h84.48c0 11.093 2.133 20.907 5.973 29.44s9.387 16.213 16.213 22.187c7.253 5.973 15.36 10.667 24.747 14.080s19.627 5.12 31.147 5.12c26.027 0 45.227-6.827 58.027-20.053s18.773-32 18.773-56.32c0-11.52-1.707-22.187-5.12-31.573s-8.96-17.493-16.213-24.32c-7.253-6.827-16.213-11.947-26.88-15.787s-23.467-5.547-37.973-5.547h-49.92v-66.987h50.347c14.507 0 27.307-1.707 38.827-4.693 11.52-3.413 21.333-8.107 29.44-14.933s14.507-15.36 18.773-26.027c4.267-10.24 6.827-23.040 6.827-37.12 0-26.453-7.68-46.507-22.613-60.587s-35.84-20.907-61.867-20.907c-12.373 0-23.893 1.707-34.133 5.547-10.24 3.413-18.773 8.533-26.027 15.36s-12.8 14.507-16.64 23.893c-3.84 9.387-5.973 19.627-5.973 30.72h-84.907c0-23.467 4.693-43.947 13.653-61.867s21.333-32.853 36.693-44.8 32.853-20.907 52.907-26.88 40.96-8.96 63.147-8.96c24.32 0 46.507 3.413 67.413 9.813s38.827 16.213 53.76 29.013c15.36 12.8 27.307 28.16 35.84 46.933 8.533 18.347 12.8 39.68 12.8 63.147 0 12.373-1.707 24.747-4.693 36.693-3.413 10.667-8.107 21.76-14.933 32.427zM890.453 325.547c-5.973 11.947-14.933 22.613-26.88 31.573s-26.027 16.64-43.093 22.613-36.267 11.52-57.6 16.213c-14.933 2.987-27.307 6.4-37.12 9.813s-17.493 6.827-23.467 10.667c-5.973 3.84-9.813 8.107-11.947 12.8s-3.413 10.24-3.413 16.64 1.28 11.947 3.84 17.493c2.56 5.547 6.4 10.667 11.52 14.507 5.12 4.267 11.52 7.68 19.2 10.24s17.067 3.84 27.307 3.84c10.667 0 20.053-1.707 28.16-4.693s14.933-7.253 20.48-12.373c5.547-5.12 9.387-11.093 12.373-17.92 2.56-6.827 4.267-13.653 4.267-20.907h83.2c0 16.64-3.413 32-10.24 46.507s-16.64 26.88-29.44 37.547c-12.8 10.667-28.16 18.773-46.507 25.173s-39.253 9.387-62.293 9.387c-21.76 0-41.813-2.987-59.307-8.96s-32.853-14.080-45.227-24.32c-12.373-10.24-21.76-22.187-28.587-35.84s-9.813-27.733-9.813-43.093 3.413-29.013 9.813-40.96c6.4-11.947 15.787-22.187 27.307-31.147s25.6-16.213 41.813-22.613c16.213-5.973 34.56-11.093 54.187-15.36 16.64-3.413 30.293-7.253 40.533-11.093s18.347-8.107 24.32-12.373c5.547-4.267 9.387-9.387 11.52-14.507s2.987-10.667 2.987-16.64c0-13.653-5.547-24.32-17.067-32.853s-28.16-12.373-49.92-12.373c-9.387 0-18.347 0.853-27.307 3.413-8.96 2.133-17.067 5.547-23.893 10.24-7.253 4.693-12.8 11.093-17.493 18.773s-7.253 17.493-7.68 28.587h-80.64c0-15.36 3.413-30.293 10.24-44.8s16.64-27.733 29.867-39.68c13.227-11.52 29.44-20.907 49.067-28.16s41.813-10.667 67.413-10.667c22.613 0 43.093 2.56 61.44 8.107s34.133 13.227 47.36 23.040c13.227 9.813 23.040 21.76 30.293 35.413s10.667 28.587 10.667 45.227c-0.853 17.067-3.84 31.573-10.24 43.52z" />
613<glyph unicode="&#xe85d;" d="M0 609.28v-71.68l128 42.667v-409.6h85.333v512h-10.667l-202.667-73.387zM1014.613 325.547c-5.973 11.947-14.933 22.613-26.88 31.573s-26.027 16.64-43.093 22.613-36.267 11.52-57.6 16.213c-14.933 2.987-27.307 6.4-37.12 9.813s-17.493 6.827-23.467 10.667c-5.973 3.84-9.813 8.107-11.947 12.8s-3.413 10.24-3.413 16.64c0 5.973 1.28 11.947 3.84 17.493s6.4 10.667 11.52 14.507c5.12 4.267 11.52 7.68 19.2 10.24s17.067 3.84 27.307 3.84c10.667 0 20.053-1.707 28.16-4.693s14.933-7.253 20.48-12.373c5.547-5.12 9.387-11.093 12.373-17.92 2.56-6.827 4.267-13.653 4.267-20.907h83.2c0 16.64-3.413 32-10.24 46.507s-16.64 26.88-29.44 37.547c-12.8 10.667-28.16 18.773-46.507 25.173s-39.253 9.387-62.293 9.387c-21.76 0-41.813-2.987-59.307-8.96s-32.853-14.080-45.227-24.32c-12.373-10.24-21.76-22.187-28.587-35.84s-9.813-27.733-9.813-43.093 3.413-29.44 9.813-40.96c6.4-11.947 15.36-22.187 27.307-31.147 11.52-8.96 25.6-16.213 41.813-22.613 16.213-5.973 34.56-11.093 54.187-15.36 16.64-3.413 30.293-7.253 40.533-11.093s18.347-8.107 24.32-12.373c5.547-4.267 9.387-9.387 11.52-14.507s2.987-10.667 2.987-16.64c0-13.653-5.547-24.32-17.067-32.853s-28.16-12.373-49.92-12.373c-9.387 0-18.347 0.853-27.307 3.413-8.96 2.133-17.067 5.547-23.893 10.24-7.253 4.693-12.8 11.093-17.493 18.773s-7.253 17.493-7.68 28.587h-80.64c0-15.36 3.413-30.293 10.24-44.8s16.64-27.733 29.867-39.68c13.227-11.52 29.44-20.907 49.067-28.16s41.813-10.667 67.413-10.667c22.613 0 43.093 2.56 61.44 8.107s34.133 13.227 47.36 23.040c13.227 9.813 23.040 21.76 30.293 35.413s10.667 28.587 10.667 45.227c-0.853 17.067-3.84 31.573-10.24 43.52zM589.653 637.867c-14.507 17.067-32 29.867-52.48 37.547-20.053 7.68-43.093 11.52-67.84 11.52s-47.36-3.84-67.84-11.52c-20.48-7.68-37.973-20.053-52.48-37.547s-25.6-39.68-33.707-67.84c-7.68-27.733-11.947-61.867-11.947-101.973v-81.92c0-40.107 3.84-74.24 11.947-101.973 8.107-28.16 19.2-50.773 34.133-68.267 14.507-17.493 32-30.293 52.48-37.973s43.093-11.947 67.84-11.947c25.173 0 47.787 3.84 67.84 11.947 20.48 7.68 37.547 20.48 52.053 37.973s25.6 40.107 33.28 68.267c7.68 27.733 11.947 61.867 11.947 101.973v81.92c0 40.107-3.84 74.24-11.947 101.973-7.68 28.16-18.773 50.773-33.28 67.84zM550.4 374.614c0-25.6-1.707-47.36-5.12-65.28s-8.533-32.427-15.36-43.52c-6.827-11.093-15.36-19.2-25.173-24.32s-21.76-7.68-34.987-7.68c-12.8 0-24.747 2.56-34.987 7.68s-18.773 13.227-25.6 24.32c-6.827 11.093-12.373 25.6-16.213 43.52s-5.547 39.68-5.547 65.28v106.667c0 25.6 1.707 47.36 5.547 64.853s8.96 31.573 16.213 42.667c6.827 10.667 15.36 18.347 25.6 23.467 10.24 4.693 21.76 7.253 34.56 7.253 13.227 0 24.747-2.56 34.56-7.253 10.24-4.693 18.773-12.373 25.6-23.467 6.827-10.667 12.373-24.747 15.787-42.24s5.547-39.253 5.547-64.853v-107.093z" />
614<glyph unicode="&#xe85e;" d="M512 768c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM512 341.334c-113.92 0-341.333-57.173-341.333-170.667v-85.333h682.667v85.333c0 113.92-227.413 170.667-341.333 170.667z" />
615<glyph unicode="&#xe85f;" d="M812.373 744.534l-60.587-60.587c-66.133 52.48-149.333 84.053-239.787 84.053-78.080 0-150.613-23.467-211.2-63.147l62.293-62.293c43.52 25.173 94.72 40.107 148.907 40.107 165.12 0 298.667-133.547 298.667-298.667 0-54.187-14.933-105.387-40.107-148.907l61.867-61.867c40.107 60.16 63.573 132.693 63.573 210.773 0 90.453-31.573 173.653-84.053 239.36l60.587 60.587-60.16 60.587zM640 896h-256v-85.333h256v85.333zM469.333 535.894l85.333-85.333v146.773h-85.333v-61.44zM128.853 768l-54.187-54.187 117.333-117.76c-40.533-60.587-64-133.547-64-212.053 0-212.053 171.52-384 384-384 78.507 0 151.467 23.467 212.48 64l106.667-106.667 54.187 54.187-756.48 756.48zM512 85.334c-165.12 0-298.667 133.547-298.667 298.667 0 54.613 14.933 105.813 40.533 150.187l407.893-407.893c-43.947-26.027-95.147-40.96-149.76-40.96z" />
616<glyph unicode="&#xe860;" d="M640 896h-256v-85.333h256v85.333zM469.333 341.334h85.333v256h-85.333v-256zM811.947 623.36l60.587 60.587c-18.347 21.76-38.4 42.24-60.16 60.16l-60.587-60.587c-66.133 52.907-149.333 84.48-239.787 84.48-212.053 0-384-171.947-384-384s171.52-384 384-384 384 171.947 384 384c0 90.453-31.573 173.653-84.053 239.36zM512 85.334c-165.12 0-298.667 133.547-298.667 298.667s133.547 298.667 298.667 298.667 298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667z" />
617<glyph unicode="&#xe861;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM469.333 88.32c-168.107 20.907-298.667 164.267-298.667 338.347s130.133 317.44 298.667 338.347v-676.693zM554.667 765.014c43.947-5.547 85.333-19.2 122.453-39.68h-122.453v39.68zM554.667 640h223.573c10.667-13.227 20.48-27.733 29.013-42.667h-252.587v42.667zM554.667 512h287.573c3.413-14.080 6.4-28.16 8.107-42.667h-295.68v42.667zM554.667 88.32v39.68h122.453c-37.12-20.48-78.507-34.133-122.453-39.68zM778.24 213.334h-223.573v42.667h252.587c-8.533-14.933-18.347-29.44-29.013-42.667zM842.24 341.334h-287.573v42.667h295.68c-1.707-14.507-4.693-28.587-8.107-42.667z" />
618<glyph unicode="&#xe862;" d="M938.667 170.667v85.333h-597.333v512h85.333l-128 128-128-128h85.333v-85.333h-170.667v-85.333h170.667v-341.333c0-46.933 38.4-85.333 85.333-85.333h341.333v-85.333h-85.333l128-128 128 128h-85.333v85.333h170.667zM426.667 597.334h256v-256h85.333v256c0 46.933-38.4 85.333-85.333 85.333h-256v-85.333z" />
619<glyph unicode="&#xe863;" d="M128 213.334v-85.333h256v85.333h-256zM128 725.334v-85.333h426.667v85.333h-426.667zM554.667 42.667v85.333h341.333v85.333h-341.333v85.333h-85.333v-256h85.333zM298.667 554.667v-85.333h-170.667v-85.333h170.667v-85.333h85.333v256h-85.333zM896 384v85.333h-426.667v-85.333h426.667zM640 554.667h85.333v85.333h170.667v85.333h-170.667v85.333h-85.333v-256z" />
620<glyph unicode="&#xe864;" d="M292.267 398.934h98.133l-49.067 155.733-49.067-155.733zM938.667 640l-51.2-268.373-64 268.373h-68.267l-63.573-268.373-51.627 268.373h-32.427c-62.72 78.080-158.293 128-266.24 128-188.587 0-341.333-152.747-341.333-341.333s152.747-341.333 341.333-341.333c133.547 0 249.173 77.227 305.067 189.013l4.267-18.347h74.667l64 260.267 64-260.267h74.667l87.467 384h-76.8zM439.467 256l-29.867 85.333h-136.533l-29.867-85.333h-81.067l136.533 384h85.333l136.533-384h-81.067z" />
621<glyph unicode="&#xe865;" d="M826.027 510.294c-29.44 147.2-158.72 257.707-314.027 257.707-123.307 0-230.4-69.973-283.733-172.373-128.427-13.653-228.267-122.453-228.267-254.293 0-141.227 114.773-256 256-256h554.667c117.76 0 213.333 95.573 213.333 213.333 0 112.64-87.467 203.947-197.973 211.627z" />
622<glyph unicode="&#xe866;" d="M151.467 147.627l60.16-60.16 76.373 76.8-60.16 60.16-76.373-76.8zM469.333-19.2h85.333v125.867h-85.333v-125.867zM170.667 490.667h-128v-85.333h128v85.333zM640 669.44v205.227h-256v-205.227c-76.373-44.373-128-126.72-128-221.44 0-141.227 114.773-256 256-256s256 114.773 256 256c0 94.72-51.627 177.067-128 221.44zM853.333 490.667v-85.333h128v85.333h-128zM735.573 163.84l76.373-76.8 60.16 60.16-76.8 76.373-59.733-59.733z" />
623<glyph unicode="&#xe867;" d="M213.333 320h597.333v256h-597.333v-256zM469.333 915.2v-125.867h85.333v125.867h-85.333zM812.373 808.534l-76.373-76.373 60.16-60.16 76.8 76.373-60.587 60.16zM554.667-19.2v125.867h-85.333v-125.867h85.333zM872.533 147.627l-76.8 76.373-60.16-60.16 76.373-76.8 60.587 60.587zM151.467 748.374l76.373-76.373 60.16 60.16-76.373 76.373-60.16-60.16zM211.627 87.467l76.373 76.8-60.16 60.16-76.373-76.373 60.16-60.587z" />
624<glyph unicode="&#xe868;" d="M288.427 732.16l-76.8 76.373-60.16-60.16 76.373-76.373 60.587 60.16zM170.667 490.667h-128v-85.333h128v85.333zM554.667 915.2h-85.333v-125.867h85.333v125.867zM872.533 748.374l-60.16 60.16-76.373-76.373 60.16-60.16 76.373 76.373zM735.573 163.84l76.373-76.8 60.16 60.16-76.8 76.373-59.733-59.733zM853.333 490.667v-85.333h128v85.333h-128zM512 704c-141.227 0-256-114.773-256-256s114.773-256 256-256 256 114.773 256 256-114.773 256-256 256zM469.333-19.2h85.333v125.867h-85.333v-125.867zM151.467 147.627l60.16-60.16 76.373 76.8-60.16 60.16-76.373-76.8z" />
625<glyph unicode="&#xe869;" d="M810.667 896h-597.333c-46.933 0-84.907-38.4-84.907-85.333l-0.427-551.68c0-29.44 14.933-55.467 37.547-70.827l346.453-230.827 346.027 230.827c22.613 15.36 37.547 41.387 37.547 70.827l0.427 551.68c0 46.933-38.4 85.333-85.333 85.333zM426.667 256l-213.333 213.333 60.16 60.16 153.173-152.747 323.84 323.84 60.16-60.587-384-384z" />
626<glyph unicode="&#xe86a;" d="M682.667 733.867c42.24 0 76.8 34.56 76.8 76.8s-34.56 76.8-76.8 76.8c-42.667 0-76.8-34.56-76.8-76.8s34.133-76.8 76.8-76.8zM810.667 426.667c-117.76 0-213.333-95.573-213.333-213.333s95.573-213.333 213.333-213.333 213.333 95.573 213.333 213.333-95.573 213.333-213.333 213.333zM810.667 64c-82.347 0-149.333 66.987-149.333 149.333s66.987 149.333 149.333 149.333 149.333-66.987 149.333-149.333-66.987-149.333-149.333-149.333zM631.467 512h179.2v76.8h-136.533l-82.347 139.52c-12.8 21.333-35.84 35.413-62.293 35.413-20.053 0-37.973-8.107-51.2-21.333l-157.867-157.867c-13.653-12.8-21.76-31.147-21.76-51.2 0-26.88 14.080-49.493 36.267-62.72l142.933-86.613v-213.333h76.8v276.48l-96 71.253 98.987 99.413 73.813-105.813zM213.333 426.667c-117.76 0-213.333-95.573-213.333-213.333s95.573-213.333 213.333-213.333 213.333 95.573 213.333 213.333-95.573 213.333-213.333 213.333zM213.333 64c-82.347 0-149.333 66.987-149.333 149.333s66.987 149.333 149.333 149.333 149.333-66.987 149.333-149.333-66.987-149.333-149.333-149.333z" />
627<glyph unicode="&#xe86b;" d="M170.667 256c0-37.547 16.64-71.253 42.667-94.72v-75.947c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v42.667h341.333v-42.667c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v75.947c26.027 23.467 42.667 57.173 42.667 94.72v426.667c0 149.333-152.747 170.667-341.333 170.667s-341.333-21.333-341.333-170.667v-426.667zM320 213.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM704 213.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM768 469.334h-512v213.333h512v-213.333z" />
628<glyph unicode="&#xe86c;" d="M807.253 682.24c-8.533 25.173-32.427 43.093-60.587 43.093h-469.333c-28.16 0-51.627-17.92-60.587-43.093l-88.747-255.573v-341.333c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v42.667h512v-42.667c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v341.333l-88.747 255.573zM277.333 256c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 256c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM213.333 469.334l64 192h469.333l64-192h-597.333z" />
629<glyph unicode="&#xe86d;" d="M853.333 42.667c-59.307 0-118.613 20.053-170.667 56.32-104.107-72.96-237.227-72.96-341.333 0-52.053-36.267-111.36-56.32-170.667-56.32h-85.333v-85.333h85.333c58.88 0 116.907 14.933 170.667 42.24 107.52-55.040 233.813-55.040 341.333 0 53.76-27.733 111.787-42.24 170.667-42.24h85.333v85.333h-85.333zM168.533 128h2.133c68.267 0 128.853 37.547 170.667 85.333 41.813-47.787 102.4-85.333 170.667-85.333s128.853 37.547 170.667 85.333c41.813-47.787 102.4-85.333 170.667-85.333h2.133l80.64 285.013c3.413 11.093 2.56 23.040-2.56 33.28s-14.507 17.92-25.6 21.333l-54.613 17.92v197.12c0 46.933-38.4 85.333-85.333 85.333h-128v128h-256v-128h-128c-46.933 0-85.333-38.4-85.333-85.333v-197.12l-55.040-17.92c-11.093-3.413-20.48-11.093-25.6-21.333s-6.4-22.187-2.56-33.28l81.067-285.013zM256 682.667h512v-169.387l-256 84.053-256-84.053v169.387z" />
630<glyph unicode="&#xe86e;" d="M512 853.334c-188.587 0-341.333-21.333-341.333-170.667v-405.333c0-82.347 66.987-149.333 149.333-149.333l-64-64v-21.333h512v21.333l-64 64c82.347 0 149.333 66.987 149.333 149.333v405.333c0 149.333-152.747 170.667-341.333 170.667zM320 213.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM469.333 469.334h-213.333v213.333h213.333v-213.333zM704 213.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM768 469.334h-213.333v213.333h213.333v-213.333z" />
631<glyph unicode="&#xe86f;" d="M170.667 277.334c0-82.347 66.987-149.333 149.333-149.333l-64-64v-21.333h512v21.333l-64 64c82.347 0 149.333 66.987 149.333 149.333v448c0 149.333-152.747 170.667-341.333 170.667s-341.333-21.333-341.333-170.667v-448zM512 213.334c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333zM768 512h-512v213.333h512v-213.333z" />
632<glyph unicode="&#xe870;" d="M512 853.334c-188.587 0-341.333-21.333-341.333-170.667v-405.333c0-82.347 66.987-149.333 149.333-149.333l-64-64v-21.333h512v21.333l-64 64c82.347 0 149.333 66.987 149.333 149.333v405.333c0 149.333-152.747 170.667-341.333 170.667zM320 213.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM469.333 469.334h-213.333v213.333h213.333v-213.333zM704 213.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM768 469.334h-213.333v213.333h213.333v-213.333z" />
633<glyph unicode="&#xe871;" d="M597.333 776.534c42.24 0 76.8 34.56 76.8 76.8 0 42.667-34.56 76.8-76.8 76.8-42.667 0-76.8-34.56-76.8-76.8s34.133-76.8 76.8-76.8zM602.453 512h208.213v76.8h-154.453l-85.333 142.080c-12.8 21.333-35.84 35.413-62.293 35.413-7.253 0-14.507-1.28-20.907-2.987l-231.68-72.107v-221.867h76.8v156.587l90.027 28.16-166.827-654.080h76.8l122.453 346.027 99.413-132.693v-213.333h76.8v273.493l-106.24 193.707 31.147 122.453 46.080-77.653z" />
634<glyph unicode="&#xe872;" d="M926.293 456.96l-384 384c-16.64 16.64-43.52 16.64-60.16 0l-384-384c-16.64-16.64-16.64-43.52 0-60.16l384-384c16.64-16.64 43.52-16.64 60.16 0l384 384c16.64 16.213 16.64 43.093 0 60.16zM597.333 320v106.667h-170.667v-128h-85.333v170.667c0 23.467 19.2 42.667 42.667 42.667h213.333v106.667l149.333-149.333-149.333-149.333z" />
635<glyph unicode="&#xe873;" d="M896 256v85.333l-341.333 213.333v234.667c0 35.413-28.587 64-64 64s-64-28.587-64-64v-234.667l-341.333-213.333v-85.333l341.333 106.667v-234.667l-85.333-64v-64l149.333 42.667 149.333-42.667v64l-85.333 64v234.667l341.333-106.667z" />
636<glyph unicode="&#xe874;" d="M298.667 384c70.827 0 128 57.173 128 128s-57.173 128-128 128-128-57.173-128-128 57.173-128 128-128zM810.667 640h-341.333v-298.667h-341.333v384h-85.333v-640h85.333v128h768v-128h85.333v384c0 94.293-76.373 170.667-170.667 170.667z" />
637<glyph unicode="&#xe875;" d="M845.227 299.094l50.773 39.253-61.013 61.013-50.773-39.253 61.013-61.013zM826.027 500.48l69.973 54.187-384 298.667-124.16-96.853 335.787-336.213 102.4 80.213zM139.52 896l-54.187-54.187 180.053-180.053-137.387-107.093 69.547-54.187 314.453-244.48 89.6 69.547 61.013-61.013-150.613-116.907-314.453 244.48-69.547-53.76 384-298.667 211.2 164.267 161.28-161.28 54.187 54.187-799.147 799.147z" />
638<glyph unicode="&#xe876;" d="M511.573 147.627l-314.453 244.48-69.12-53.76 384-298.667 384 298.667-69.547 54.187-314.88-244.907zM512 256l384 298.667-384 298.667-384-298.667 69.547-54.187 314.453-244.48z" />
639<glyph unicode="&#xe877;" d="M896 256v85.333l-341.333 213.333v234.667c0 35.413-28.587 64-64 64s-64-28.587-64-64v-234.667l-341.333-213.333v-85.333l341.333 106.667v-234.667l-85.333-64v-64l149.333 42.667 149.333-42.667v64l-85.333 64v234.667l341.333-106.667z" />
640<glyph unicode="&#xe878;" d="M469.333 213.334h85.333v42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v128c0 23.467-19.2 42.667-42.667 42.667h-128v42.667h170.667v85.333h-85.333v42.667h-85.333v-42.667h-42.667c-23.467 0-42.667-19.2-42.667-42.667v-128c0-23.467 19.2-42.667 42.667-42.667h128v-42.667h-170.667v-85.333h85.333v-42.667zM853.333 768h-682.667c-47.36 0-84.907-37.973-84.907-85.333l-0.427-512c0-47.36 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 37.973 85.333 85.333v512c0 47.36-37.973 85.333-85.333 85.333zM853.333 170.667h-682.667v512h682.667v-512z" />
641<glyph unicode="&#xe879;" d="M853.333 426.667c0 46.933 38.4 85.333 85.333 85.333v170.667c0 46.933-38.4 85.333-85.333 85.333h-682.667c-46.933 0-84.907-38.4-84.907-85.333v-170.667c46.933 0 84.907-38.4 84.907-85.333s-37.973-85.333-85.333-85.333v-170.667c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v170.667c-46.933 0-85.333 38.4-85.333 85.333zM664.747 221.867l-152.747 98.133-152.747-98.133 46.080 175.787-140.373 114.773 180.907 10.667 66.133 168.107 65.707-168.533 180.907-10.667-140.373-114.773 46.507-175.36z" />
642<glyph unicode="&#xe87a;" d="M469.333 384v-256h-213.333v-85.333h512v85.333h-213.333v256l341.333 341.333v85.333h-768v-85.333l341.333-341.333zM320 640l-85.333 85.333h554.667l-85.333-85.333h-384z" />
643<glyph unicode="&#xe87b;" d="M853.333 810.667h-682.667v-426.667c0-94.293 76.373-170.667 170.667-170.667h256c94.293 0 170.667 76.373 170.667 170.667v128h85.333c47.36 0 85.333 37.973 85.333 85.333v128c0 47.36-37.973 85.333-85.333 85.333zM853.333 597.334h-85.333v128h85.333v-128zM85.333 42.667h768v85.333h-768v-85.333z" />
644<glyph unicode="&#xe87c;" d="M725.333 725.334c35.413 0 64 28.587 64 64 0 42.667-64 115.2-64 115.2s-64-72.533-64-115.2c0-35.413 28.587-64 64-64zM512 725.334c35.413 0 64 28.587 64 64 0 42.667-64 115.2-64 115.2s-64-72.533-64-115.2c0-35.413 28.587-64 64-64zM298.667 725.334c35.413 0 64 28.587 64 64 0 42.667-64 115.2-64 115.2s-64-72.533-64-115.2c0-35.413 28.587-64 64-64zM807.253 596.907c-8.533 25.173-32.427 43.093-60.587 43.093h-469.333c-28.16 0-51.627-17.92-60.587-43.093l-88.747-255.573v-341.333c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v42.667h512v-42.667c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v341.333l-88.747 255.573zM277.333 170.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 170.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM213.333 384l64 192h469.333l64-192h-597.333z" />
645<glyph unicode="&#xe87d;" d="M810.667 640v128h-597.333v-128h-128v-554.667h341.333v170.667h170.667v-170.667h341.333v554.667h-128zM469.333 512h-85.333v-42.667h85.333v-42.667h-128v128h85.333v42.667h-85.333v42.667h128v-128zM682.667 426.667h-42.667v85.333h-85.333v128h42.667v-85.333h42.667v85.333h42.667v-213.333z" />
646<glyph unicode="&#xe87e;" d="M128 853.334l85.76-777.813c5.12-42.667 40.96-75.52 84.907-75.52h426.667c43.947 0 79.787 32.853 84.907 75.52l85.76 777.813h-768zM512 128c-70.827 0-128 57.173-128 128 0 85.333 128 230.4 128 230.4s128-145.067 128-230.4c0-70.827-57.173-128-128-128zM782.080 597.334h-540.16l-18.773 170.667h577.28l-18.347-170.667z" />
647<glyph unicode="&#xe87f;" d="M512-0c212.053 0 384 171.947 384 384-212.053 0-384-171.947-384-384zM238.933 501.334c0-58.88 47.787-106.667 106.667-106.667 22.613 0 43.093 6.827 60.587 18.773l-0.853-8.107c0-58.88 47.787-106.667 106.667-106.667s106.667 47.787 106.667 106.667l-0.853 8.107c17.067-11.947 37.973-18.773 60.587-18.773 58.88 0 106.667 47.787 106.667 106.667 0 42.667-25.173 78.933-61.013 96 35.84 17.067 61.013 53.333 61.013 96 0 58.88-47.787 106.667-106.667 106.667-22.613 0-43.093-6.827-60.587-18.773l0.853 8.107c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667l0.853-8.107c-17.067 11.947-37.973 18.773-60.587 18.773-58.88 0-106.667-47.787-106.667-106.667 0-42.667 25.173-78.933 61.013-96-35.84-17.067-61.013-53.333-61.013-96zM512 704c58.88 0 106.667-47.787 106.667-106.667s-47.787-106.667-106.667-106.667-106.667 47.787-106.667 106.667 47.787 106.667 106.667 106.667zM128 384c0-212.053 171.947-384 384-384 0 212.053-171.947 384-384 384z" />
648<glyph unicode="&#xe880;" d="M843.52 630.187l0.427 0.427-158.72 158.72-45.227-45.227 90.027-90.027c-40.107-15.36-68.693-53.76-68.693-99.413 0-58.88 47.787-106.667 106.667-106.667 15.36 0 29.44 3.413 42.667 8.96v-307.627c0-23.467-19.2-42.667-42.667-42.667s-42.667 19.2-42.667 42.667v192c0 46.933-38.4 85.333-85.333 85.333h-42.667v298.667c0 46.933-38.4 85.333-85.333 85.333h-256c-46.933 0-85.333-38.4-85.333-85.333v-682.667h426.667v320h64v-213.333c0-58.88 47.787-106.667 106.667-106.667s106.667 47.787 106.667 106.667v405.333c0 29.44-11.947 56.32-31.147 75.52zM512 512h-256v213.333h256v-213.333zM768 512c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667z" />
649<glyph unicode="&#xe881;" d="M298.667 170.667c-46.933 0-84.907-38.4-84.907-85.333s37.973-85.333 84.907-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM42.667 853.334v-85.333h85.333l153.6-323.84-57.6-104.533c-6.827-11.947-10.667-26.027-10.667-40.96 0-46.933 38.4-85.333 85.333-85.333h512v85.333h-494.080c-5.973 0-10.667 4.693-10.667 10.667l1.28 5.12 38.4 69.547h317.867c32 0 60.16 17.493 74.667 43.947l152.747 276.907c3.413 5.973 5.12 13.227 5.12 20.48 0 23.467-19.2 42.667-42.667 42.667h-631.040l-40.107 85.333h-139.52zM725.333 170.667c-46.933 0-84.907-38.4-84.907-85.333s37.973-85.333 84.907-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z" />
650<glyph unicode="&#xe882;" d="M810.667 810.667h-597.333c-46.933 0-84.907-38.4-84.907-85.333l-0.427-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM768 341.334h-170.667v-170.667h-170.667v170.667h-170.667v170.667h170.667v170.667h170.667v-170.667h170.667v-170.667z" />
651<glyph unicode="&#xe883;" d="M298.667 384c70.827 0 128 57.173 128 128s-57.173 128-128 128-128-57.173-128-128 57.173-128 128-128zM810.667 640h-341.333v-298.667h-341.333v384h-85.333v-640h85.333v128h768v-128h85.333v384c0 94.293-76.373 170.667-170.667 170.667z" />
652<glyph unicode="&#xe884;" d="M391.253 220.587c66.56-66.56 174.933-66.56 241.493 0s66.56 174.933 0 241.493l-241.493-241.493zM768 852.907l-512 0.427c-47.36 0-85.333-37.973-85.333-85.333v-682.667c0-47.36 37.973-85.333 85.333-85.333h512c47.36 0 85.333 37.973 85.333 85.333v682.667c0 47.36-37.973 84.907-85.333 84.907zM426.667 768c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM298.667 768c23.467 0 42.667-19.2 42.667-42.667s-19.2-42.667-42.667-42.667-42.667 19.2-42.667 42.667 19.2 42.667 42.667 42.667zM512 85.334c-141.227 0-256 114.773-256 256s114.773 256 256 256 256-114.773 256-256-114.773-256-256-256z" />
653<glyph unicode="&#xe885;" d="M512 445.867c-100.693 93.867-235.52 151.467-384 151.467v-469.333c148.48 0 283.307-57.6 384-151.467 100.693 93.44 235.52 151.467 384 151.467v469.333c-148.48 0-283.307-57.6-384-151.467zM512 597.334c70.827 0 128 57.173 128 128s-57.173 128-128 128-128-57.173-128-128 57.173-128 128-128z" />
654<glyph unicode="&#xe886;" d="M810.667 682.667h-85.333c0 117.76-95.573 213.333-213.333 213.333s-213.333-95.573-213.333-213.333h-85.333c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM512 810.667c70.827 0 128-57.173 128-128h-256c0 70.827 57.173 128 128 128zM512 384c-117.76 0-213.333 95.573-213.333 213.333h85.333c0-70.827 57.173-128 128-128s128 57.173 128 128h85.333c0-117.76-95.573-213.333-213.333-213.333z" />
655<glyph unicode="&#xe887;" d="M768 810.667v-85.333h-85.333v85.333h-341.333v-85.333h-85.333v85.333h-85.333v-768h85.333v85.333h85.333v-85.333h341.333v85.333h85.333v-85.333h85.333v768h-85.333zM341.333 213.334h-85.333v85.333h85.333v-85.333zM341.333 384h-85.333v85.333h85.333v-85.333zM341.333 554.667h-85.333v85.333h85.333v-85.333zM768 213.334h-85.333v85.333h85.333v-85.333zM768 384h-85.333v85.333h85.333v-85.333zM768 554.667h-85.333v85.333h85.333v-85.333z" />
656<glyph unicode="&#xe888;" d="M913.493 444.587l-384 384c-15.36 15.36-36.693 24.747-60.16 24.747h-298.667c-46.933 0-85.333-38.4-85.333-85.333v-298.667c0-23.467 9.387-44.8 25.173-60.587l384-384c15.36-15.36 36.693-24.747 60.16-24.747s44.8 9.387 60.16 25.173l298.667 298.667c15.787 15.36 25.173 36.693 25.173 60.16s-9.813 45.227-25.173 60.587zM234.667 640c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
657<glyph unicode="&#xe889;" d="M554.667 810.667h-298.667v-768h170.667v256h128c141.227 0 256 114.773 256 256s-114.773 256-256 256zM563.2 469.334h-136.533v170.667h136.533c46.933 0 85.333-38.4 85.333-85.333s-38.4-85.333-85.333-85.333z" />
658<glyph unicode="&#xe88a;" d="M896 725.334h-112.64l48.64 133.973-100.267 36.693-62.293-170.667h-541.44v-85.333l85.333-256-85.333-256v-85.333h768v85.333l-85.333 256 85.333 256v85.333zM682.667 341.334h-128v-128h-85.333v128h-128v85.333h128v128h85.333v-128h128v-85.333z" />
659<glyph unicode="&#xe88b;" d="M282.453 478.294c61.44-120.747 160.427-219.307 281.173-281.173l93.867 93.867c11.52 11.52 28.587 15.36 43.52 10.24 47.787-15.787 99.413-24.32 152.32-24.32 23.467 0 42.667-19.2 42.667-42.667v-148.907c0-23.467-19.2-42.667-42.667-42.667-400.64 0-725.333 324.693-725.333 725.333 0 23.467 19.2 42.667 42.667 42.667h149.333c23.467 0 42.667-19.2 42.667-42.667 0-53.333 8.533-104.533 24.32-152.32 4.693-14.933 1.28-31.573-10.667-43.52l-93.867-93.867z" />
660<glyph unicode="&#xe88c;" d="M512 853.334c-152.32 0-288.853-65.707-383.573-170.667l383.573-682.667 383.573 682.667c-94.293 104.533-231.253 170.667-383.573 170.667zM298.667 640c0 46.933 38.4 85.333 85.333 85.333s85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333-85.333 38.4-85.333 85.333zM512 298.667c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333z" />
661<glyph unicode="&#xe88d;" d="M853.333 426.667c0 46.933 38.4 85.333 85.333 85.333v170.667c0 46.933-38.4 85.333-85.333 85.333h-682.667c-46.933 0-84.907-38.4-84.907-85.333v-170.667c46.933 0 84.907-38.4 84.907-85.333s-37.973-85.333-85.333-85.333v-170.667c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v170.667c-46.933 0-85.333 38.4-85.333 85.333zM664.747 221.867l-152.747 98.133-152.747-98.133 46.080 175.787-140.373 114.773 180.907 10.667 66.133 168.107 65.707-168.533 180.907-10.667-140.373-114.773 46.507-175.36z" />
662<glyph unicode="&#xe88e;" d="M853.333 768h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM853.333 597.334l-341.333-213.333-341.333 213.333v85.333l341.333-213.333 341.333 213.333v-85.333z" />
663<glyph unicode="&#xe88f;" d="M810.667 597.334h-597.333c-70.827 0-128-57.173-128-128v-256h170.667v-170.667h512v170.667h170.667v256c0 70.827-57.173 128-128 128zM682.667 128h-341.333v213.333h341.333v-213.333zM810.667 426.667c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667zM768 810.667h-512v-170.667h512v170.667z" />
664<glyph unicode="&#xe890;" d="M345.6 369.494l120.747 120.747-299.52 299.093c-66.56-66.56-66.56-174.507 0-241.493l178.773-178.347zM634.88 446.72c65.28-30.293 157.013-8.96 224.853 58.88 81.493 81.493 97.28 198.4 34.56 261.12-62.293 62.293-179.2 46.933-261.12-34.56-67.84-67.84-89.173-159.573-58.88-224.853l-416.427-416.427 60.16-60.16 293.973 293.12 293.547-293.547 60.16 60.16-293.547 293.547 62.72 62.72z" />
665<glyph unicode="&#xe891;" d="M648.533 426.667c0-75.405-61.128-136.533-136.533-136.533s-136.533 61.128-136.533 136.533c0 75.405 61.128 136.533 136.533 136.533s136.533-61.128 136.533-136.533zM384 853.334l-78.080-85.333h-135.253c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333h-135.253l-78.080 85.333h-256zM512 213.334c-117.76 0-213.333 95.573-213.333 213.333s95.573 213.333 213.333 213.333 213.333-95.573 213.333-213.333-95.573-213.333-213.333-213.333z" />
666<glyph unicode="&#xe892;" d="M853.333 597.334h-128v170.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-469.333h85.333c0-70.827 57.173-128 128-128s128 57.173 128 128h256c0-70.827 57.173-128 128-128s128 57.173 128 128h85.333v213.333l-128 170.667zM256 149.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM832 533.334l83.627-106.667h-190.293v106.667h106.667zM768 149.334c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
667<glyph unicode="&#xe893;" d="M807.253 682.24c-8.533 25.173-32.427 43.093-60.587 43.093h-106.667v85.333h-256v-85.333h-106.667c-28.16 0-51.627-17.92-60.587-43.093l-88.747-255.573v-341.333c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v42.667h512v-42.667c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v341.333l-88.747 255.573zM277.333 256c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 256c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM213.333 469.334l64 192h469.333l64-192h-597.333z" />
668<glyph unicode="&#xe894;" d="M810.667 853.334h-597.333c-47.36 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 37.973-85.333 85.333-85.333h170.667l128-128 128 128h170.667c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM512 712.534c63.573 0 115.2-51.627 115.2-115.2s-51.627-115.2-115.2-115.2c-63.573 0-115.2 51.627-115.2 115.2s51.627 115.2 115.2 115.2zM768 256h-512v38.4c0 85.333 170.667 132.267 256 132.267s256-46.933 256-132.267v-38.4z" />
669<glyph unicode="&#xe895;" d="M874.667 810.667l-6.827-1.28-227.84-88.32-256 89.6-240.64-81.067c-8.96-2.987-15.36-10.667-15.36-20.48v-645.12c0-11.947 9.387-21.333 21.333-21.333l6.827 1.28 227.84 88.32 256-89.6 240.64 81.067c8.96 2.987 15.36 10.667 15.36 20.48v645.12c0 11.947-9.387 21.333-21.333 21.333zM640 128l-256 90.027v507.307l256-90.027v-507.307z" />
670<glyph unicode="&#xe896;" d="M512 597.334c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM893.44 469.334c-19.627 177.92-160.853 319.147-338.773 338.773v87.893h-85.333v-87.893c-177.92-19.627-319.147-160.853-338.773-338.773h-87.893v-85.333h87.893c19.627-177.92 160.853-319.147 338.773-338.773v-87.893h85.333v87.893c177.92 19.627 319.147 160.853 338.773 338.773h87.893v85.333h-87.893zM512 128c-165.12 0-298.667 133.547-298.667 298.667s133.547 298.667 298.667 298.667 298.667-133.547 298.667-298.667-133.547-298.667-298.667-298.667z" />
671<glyph unicode="&#xe897;" d="M512 853.334l-320-780.373 30.293-30.293 289.707 128 289.707-128 30.293 30.293z" />
672<glyph unicode="&#xe898;" d="M768 597.334c0 141.227-114.773 256-256 256s-256-114.773-256-256c0-192 256-469.333 256-469.333s256 277.333 256 469.333zM426.667 597.334c0 46.933 38.4 85.333 85.333 85.333s85.333-38.4 85.333-85.333-37.973-85.333-85.333-85.333c-46.933 0-85.333 38.4-85.333 85.333zM213.333 85.334v-85.333h597.333v85.333h-597.333z" />
673<glyph unicode="&#xe899;" d="M512 853.334c-165.12 0-298.667-133.547-298.667-298.667 0-224 298.667-554.667 298.667-554.667s298.667 330.667 298.667 554.667c0 165.12-133.547 298.667-298.667 298.667zM512 448c-58.88 0-106.667 47.787-106.667 106.667s47.787 106.667 106.667 106.667 106.667-47.787 106.667-106.667-47.787-106.667-106.667-106.667z" />
674<glyph unicode="&#xe89a;" d="M853.333 853.334h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-768 170.667 170.667h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM256 341.334v105.387l293.547 293.547c8.533 8.533 21.76 8.533 30.293 0l75.52-75.52c8.533-8.533 8.533-21.76 0-30.293l-293.973-293.12h-105.387zM768 341.334h-320l85.333 85.333h234.667v-85.333z" />
675<glyph unicode="&#xe89b;" d="M345.6 369.494l120.747 120.747-299.52 299.093c-66.56-66.56-66.56-174.507 0-241.493l178.773-178.347zM634.88 446.72c65.28-30.293 157.013-8.96 224.853 58.88 81.493 81.493 97.28 198.4 34.56 261.12-62.293 62.293-179.2 46.933-261.12-34.56-67.84-67.84-89.173-159.573-58.88-224.853l-416.427-416.427 60.16-60.16 293.973 293.12 293.547-293.547 60.16 60.16-293.547 293.547 62.72 62.72z" />
676<glyph unicode="&#xe89c;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM213.333 725.76h128c0-70.827-57.173-128.427-128-128.427v128.427zM213.333 426.667v85.333c117.76 0 213.333 96 213.333 213.76h85.333c0-165.12-133.547-299.093-298.667-299.093zM213.333 170.667l149.333 192 106.667-128.427 149.333 192.427 192-256h-597.333z" />
677<glyph unicode="&#xe89d;" d="M853.333 768h-682.667v-85.333h682.667v85.333zM896 341.334v85.333l-42.667 213.333h-682.667l-42.667-213.333v-85.333h42.667v-256h426.667v256h170.667v-256h85.333v256h42.667zM512 170.667h-256v170.667h256v-170.667z" />
678<glyph unicode="&#xe89e;" d="M597.333 682.667l-160-213.333 121.6-162.133-68.267-51.2c-72.107 96-192 256-192 256l-256-341.333h938.667l-384 512z" />
679<glyph unicode="&#xe89f;" d="M853.333 512h-128v48.64c73.387 19.2 128 85.333 128 164.693h-128v42.667c0 23.467-19.2 42.667-42.667 42.667h-341.333c-23.467 0-42.667-19.2-42.667-42.667v-42.667h-128c0-79.36 54.613-145.493 128-164.693v-48.64h-128c0-79.36 54.613-145.493 128-164.693v-48.64h-128c0-79.36 54.613-145.493 128-164.693v-48.64c0-23.467 19.2-42.667 42.667-42.667h341.333c23.467 0 42.667 19.2 42.667 42.667v48.64c73.387 19.2 128 85.333 128 164.693h-128v48.64c73.387 19.2 128 85.333 128 164.693zM512 128c-47.36 0-85.333 38.4-85.333 85.333s37.973 85.333 85.333 85.333c46.933 0 85.333-38.4 85.333-85.333s-37.973-85.333-85.333-85.333zM512 341.334c-47.36 0-85.333 38.4-85.333 85.333s37.973 85.333 85.333 85.333c46.933 0 85.333-38.4 85.333-85.333s-37.973-85.333-85.333-85.333zM512 554.667c-47.36 0-85.333 38.4-85.333 85.333 0 47.36 37.973 85.333 85.333 85.333 46.933 0 85.333-37.973 85.333-85.333 0-46.933-37.973-85.333-85.333-85.333z" />
680<glyph unicode="&#xe8a0;" d="M170.667 597.334h170.667v170.667h-170.667v-170.667zM426.667 85.334h170.667v170.667h-170.667v-170.667zM170.667 85.334h170.667v170.667h-170.667v-170.667zM170.667 341.334h170.667v170.667h-170.667v-170.667zM426.667 341.334h170.667v170.667h-170.667v-170.667zM682.667 768v-170.667h170.667v170.667h-170.667zM426.667 597.334h170.667v170.667h-170.667v-170.667zM682.667 341.334h170.667v170.667h-170.667v-170.667zM682.667 85.334h170.667v170.667h-170.667v-170.667z" />
681<glyph unicode="&#xe8a1;" d="M853.333 469.334h-519.253l238.507 238.507-60.587 60.16-341.333-341.333 341.333-341.333 60.16 60.16-238.080 238.507h519.253v85.333z" />
682<glyph unicode="&#xe8a2;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 341.334l-170.667 170.667h341.333l-170.667-170.667z" />
683<glyph unicode="&#xe8a3;" d="M298.667 512l213.333-213.333 213.333 213.333z" />
684<glyph unicode="&#xe8a4;" d="M298.667 341.334l213.333 213.333 213.333-213.333z" />
685<glyph unicode="&#xe8a5;" d="M512 768l-60.16-60.16 238.080-238.507h-519.253v-85.333h519.253l-238.080-238.507 60.16-60.16 341.333 341.333z" />
686<glyph unicode="&#xe8a6;" d="M512 853.334c-235.947 0-426.667-190.72-426.667-426.667s190.72-426.667 426.667-426.667 426.667 190.72 426.667 426.667-190.72 426.667-426.667 426.667zM725.333 273.494l-60.16-60.16-153.173 153.173-153.173-153.173-60.16 60.16 153.173 153.173-153.173 153.173 60.16 60.16 153.173-153.173 153.173 153.173 60.16-60.16-153.173-153.173 153.173-153.173z" />
687<glyph unicode="&#xe8a7;" d="M384 248.747l-177.92 177.92-60.587-60.16 238.507-238.507 512 512-60.16 60.16z" />
688<glyph unicode="&#xe8a8;" d="M657.493 622.507l-60.16 60.16-256-256 256-256 60.16 60.16-195.413 195.84z" />
689<glyph unicode="&#xe8a9;" d="M426.667 682.667l-60.16-60.16 195.413-195.84-195.413-195.84 60.16-60.16 256 256z" />
690<glyph unicode="&#xe8aa;" d="M810.667 665.174l-60.16 60.16-238.507-238.507-238.507 238.507-60.16-60.16 238.507-238.507-238.507-238.507 60.16-60.16 238.507 238.507 238.507-238.507 60.16 60.16-238.507 238.507z" />
691<glyph unicode="&#xe8ab;" d="M512 597.334l-256-256 60.16-60.16 195.84 195.413 195.84-195.413 60.16 60.16z" />
692<glyph unicode="&#xe8ac;" d="M707.84 572.16l-195.84-195.413-195.84 195.413-60.16-60.16 256-256 256 256z" />
693<glyph unicode="&#xe8ad;" d="M213.333 256h128v-128h85.333v213.333h-213.333v-85.333zM341.333 597.334h-128v-85.333h213.333v213.333h-85.333v-128zM597.333 128h85.333v128h128v85.333h-213.333v-213.333zM682.667 597.334v128h-85.333v-213.333h213.333v85.333h-128z" />
694<glyph unicode="&#xe8ae;" d="M298.667 341.334h-85.333v-213.333h213.333v85.333h-128v128zM213.333 512h85.333v128h128v85.333h-213.333v-213.333zM725.333 213.334h-128v-85.333h213.333v213.333h-85.333v-128zM597.333 725.334v-85.333h128v-128h85.333v213.333h-213.333z" />
695<glyph unicode="&#xe8af;" d="M128 170.667h768v85.333h-768v-85.333zM128 384h768v85.333h-768v-85.333zM128 682.667v-85.333h768v85.333h-768z" />
696<glyph unicode="&#xe8b0;" d="M256 512c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM768 512c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM512 512c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z" />
697<glyph unicode="&#xe8b1;" d="M512 597.334c46.933 0 85.333 38.4 85.333 85.333s-38.4 85.333-85.333 85.333-85.333-38.4-85.333-85.333 38.4-85.333 85.333-85.333zM512 512c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333zM512 256c-46.933 0-85.333-38.4-85.333-85.333s38.4-85.333 85.333-85.333 85.333 38.4 85.333 85.333-38.4 85.333-85.333 85.333z" />
698<glyph unicode="&#xe8b2;" d="M753.067 667.734c-61.867 61.867-146.773 100.267-241.067 100.267-188.587 0-340.907-152.747-340.907-341.333s152.32-341.333 340.907-341.333c159.147 0 291.84 108.8 329.813 256h-88.747c-34.987-99.413-129.707-170.667-241.067-170.667-141.227 0-256 114.773-256 256s114.773 256 256 256c70.827 0 133.973-29.44 180.053-75.947l-137.387-137.387h298.667v298.667l-100.267-100.267z" />
699<glyph unicode="&#xe8b3;" d="M316.16 145.494l60.587-60.16 135.253 135.253 135.253-135.253 60.16 60.16-195.413 195.84-195.84-195.84zM707.84 707.84l-60.587 60.16-135.253-135.253-135.253 135.253-60.587-60.16 195.84-195.84 195.84 195.84z" />
700<glyph unicode="&#xe8b4;" d="M512 689.92l135.253-135.253 60.16 60.16-195.413 195.84-195.84-195.84 60.587-60.16 135.253 135.253zM512 163.414l-135.253 135.253-60.16-60.16 195.413-195.84 195.84 195.84-60.587 60.16-135.253-135.253z" />
701<glyph unicode="&#xe8b5;" d="M213.333 256c0-165.12 133.547-298.667 298.667-298.667s298.667 133.547 298.667 298.667v170.667h-597.333v-170.667zM687.787 752.214l89.6 89.6-34.987 35.413-98.133-98.56c-40.107 20.053-84.48 32-132.267 32s-92.16-11.947-131.84-32l-98.56 98.56-34.987-35.413 89.6-89.6c-74.24-54.187-122.88-141.227-122.88-240.213v-42.667h597.333v42.667c0 98.987-48.64 186.027-122.88 240.213zM384 554.667c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667zM640 554.667c-23.467 0-42.667 19.2-42.667 42.667s19.2 42.667 42.667 42.667 42.667-19.2 42.667-42.667-19.2-42.667-42.667-42.667z" />
702<glyph unicode="&#xe8b6;" d="M607.573 426.24l98.987-98.987c11.947 30.72 18.773 64.427 18.773 99.413s-6.827 67.84-18.347 98.56l-99.413-98.987zM833.28 652.374l-53.76-53.76c26.88-51.627 41.813-109.653 41.813-171.52s-15.36-120.32-41.813-171.52l51.2-51.2c41.387 65.707 65.707 143.36 65.707 226.56-0.427 80.64-23.467 156.587-63.147 221.44zM670.293 609.707l-243.627 243.627h-42.667v-323.84l-195.84 195.84-60.16-60.16 238.507-238.507-238.507-238.507 60.16-60.16 195.84 195.84v-323.84h42.667l243.627 243.627-183.467 183.040 183.467 183.040zM469.333 689.92l80.213-80.213-80.213-80.213v160.427zM549.547 243.627l-80.213-80.213v160.427l80.213-80.213z" />
703<glyph unicode="&#xe8b7;" d="M853.333 256h85.333v85.333h-85.333v-85.333zM853.333 640v-213.333h85.333v213.333h-85.333zM426.667 768c-188.587 0-341.333-152.747-341.333-341.333s152.747-341.333 341.333-341.333 341.333 152.747 341.333 341.333-152.747 341.333-341.333 341.333zM426.667 341.334c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333 85.333 85.333-38.4 85.333-85.333-38.4-85.333-85.333-85.333z" />
704<glyph unicode="&#xe8b8;" d="M512 853.334c-234.667 0-426.667-192-426.667-426.667s192-426.667 426.667-426.667 426.667 192 426.667 426.667-192 426.667-426.667 426.667zM170.667 426.667c0 187.733 153.6 341.333 341.333 341.333 76.8 0 149.333-25.6 209.067-72.533l-477.867-477.867c-46.933 59.733-72.533 132.267-72.533 209.067zM512 85.334c-76.8 0-149.333 25.6-209.067 72.533l477.867 477.867c46.933-59.733 72.533-132.267 72.533-209.067 0-187.733-153.6-341.333-341.333-341.333z" />
705<glyph unicode="&#xe8b9;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333 0 78.933 26.88 151.467 72.107 209.067l478.293-478.293c-57.6-45.227-130.133-72.107-209.067-72.107zM781.227 217.6l-478.293 478.293c57.6 45.227 130.133 72.107 209.067 72.107 188.587 0 341.333-152.747 341.333-341.333 0-78.933-26.88-151.467-72.107-209.067z" />
706<glyph unicode="&#xe8ba;" d="M807.253 724.907c-8.533 25.173-32.427 43.093-60.587 43.093h-469.333c-28.16 0-51.627-17.92-60.587-43.093l-88.747-255.573v-341.333c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v42.667h512v-42.667c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v341.333l-88.747 255.573zM277.333 298.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 298.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM213.333 512l64 192h469.333l64-192h-597.333z" />
707<glyph unicode="&#xe8bb;" d="M705.28 466.774l-45.227 45.227-208.213-208.213-90.453 90.453-45.227-45.227 135.68-135.68 253.44 253.44zM810.667 810.667h-42.667v85.333h-85.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.36 0-84.907-38.4-84.907-85.333l-0.427-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 128h-597.333v469.333h597.333v-469.333z" />
708<glyph unicode="&#xe8bc;" d="M397.227 213.334l104.107 104.107 104.107-104.107 45.227 45.227-104.107 104.107 104.107 104.107-45.227 45.227-104.107-104.107-104.107 104.107-45.227-45.227 104.107-104.107-104.107-104.107 45.227-45.227zM810.667 810.667h-42.667v85.333h-85.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.36 0-84.907-38.4-84.907-85.333l-0.427-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 128h-597.333v469.333h597.333v-469.333z" />
709<glyph unicode="&#xe8bd;" d="M725.333 512h-426.667v-85.333h426.667v85.333zM810.667 810.667h-42.667v85.333h-85.333v-85.333h-341.333v85.333h-85.333v-85.333h-42.667c-47.36 0-84.907-38.4-84.907-85.333l-0.427-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM810.667 128h-597.333v469.333h597.333v-469.333zM597.333 341.334h-298.667v-85.333h298.667v85.333z" />
710<glyph unicode="&#xe8be;" d="M853.333 682.667h-341.333l-85.333 85.333h-256c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v426.667c0 46.933-38.4 85.333-85.333 85.333zM579.413 170.667l-152.747 89.6-152.747-89.6 40.533 173.653-134.827 116.907 177.493 15.36 69.547 163.413 69.547-163.84 177.493-15.36-134.827-116.907 40.533-173.227z" />
711<glyph unicode="&#xe8bf;" d="M853.333 853.334h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-768 170.667 170.667h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM213.333 341.334l149.333 192 106.667-128.427 149.333 192.427 192-256h-597.333z" />
712<glyph unicode="&#xe8c0;" d="M938.667 810.667h-640c-29.44 0-52.48-14.933-67.84-37.547l-230.827-346.453 230.827-346.027c15.36-22.613 41.387-37.973 70.827-37.973h637.013c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM384 362.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM597.333 362.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM810.667 362.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64z" />
713<glyph unicode="&#xe8c1;" d="M832 512c7.253 0 14.080-1.28 21.333-2.133v386.133l-810.667-810.667h554.667v128c0 37.973 16.64 71.68 42.667 95.147v11.52c0 105.813 86.187 192 192 192zM938.667 256v64c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-64c-23.467 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 19.2-42.667 42.667-42.667h213.333c23.467 0 42.667 19.2 42.667 42.667v170.667c0 23.467-19.2 42.667-42.667 42.667zM896 256h-128v64c0 35.413 28.587 64 64 64s64-28.587 64-64v-64z" />
714<glyph unicode="&#xe8c2;" d="M627.627 533.334l97.707 97.707v-161.707h21.333l121.6 121.6-91.307 91.733 91.733 91.733-122.027 121.6h-21.333v-161.707l-97.707 97.707-30.293-30.293 119.040-119.040-119.040-119.040 30.293-30.293zM768 814.507l40.107-40.107-40.107-40.107v80.213zM768 631.040l40.107-40.107-40.107-40.107v80.213zM853.333 277.334c-53.333 0-104.533 8.533-152.32 24.32-14.933 4.693-31.573 1.28-43.52-10.24l-93.867-93.867c-120.747 61.44-219.733 160-281.173 281.173l93.867 94.293c11.947 11.093 15.36 27.733 10.667 42.667-15.787 47.787-24.32 98.987-24.32 152.32 0 23.467-19.2 42.667-42.667 42.667h-149.333c-23.467 0-42.667-19.2-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.467 0 42.667 19.2 42.667 42.667v149.333c0 23.467-19.2 42.667-42.667 42.667z" />
715<glyph unicode="&#xe8c3;" d="M768 469.334l213.333 213.333-213.333 213.333v-128h-170.667v-170.667h170.667v-128zM853.333 277.334c-53.333 0-104.533 8.533-152.32 24.32-14.933 4.693-31.573 1.28-43.52-10.24l-93.867-93.867c-120.747 61.44-219.733 160-281.173 281.173l93.867 94.293c11.947 11.093 15.36 27.733 10.667 42.667-15.787 47.787-24.32 98.987-24.32 152.32 0 23.467-19.2 42.667-42.667 42.667h-149.333c-23.467 0-42.667-19.2-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.467 0 42.667 19.2 42.667 42.667v149.333c0 23.467-19.2 42.667-42.667 42.667z" />
716<glyph unicode="&#xe8c4;" d="M853.333 277.334c-53.333 0-104.533 8.533-152.32 24.32-14.933 4.693-31.573 1.28-43.52-10.24l-93.867-93.867c-120.747 61.44-219.733 160-281.173 281.173l93.867 94.293c11.947 11.093 15.36 27.733 10.667 42.667-15.787 47.787-24.32 98.987-24.32 152.32 0 23.467-19.2 42.667-42.667 42.667h-149.333c-23.467 0-42.667-19.2-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.467 0 42.667 19.2 42.667 42.667v149.333c0 23.467-19.2 42.667-42.667 42.667zM810.667 426.667h85.333c0 212.053-171.947 384-384 384v-85.333c165.12 0 298.667-133.547 298.667-298.667zM640 426.667h85.333c0 117.76-95.573 213.333-213.333 213.333v-85.333c70.827 0 128-57.173 128-128z" />
717<glyph unicode="&#xe8c5;" d="M853.333 277.334c-53.333 0-104.533 8.533-152.32 24.32-14.933 4.693-31.573 1.28-43.52-10.24l-93.867-93.867c-120.747 61.44-219.733 160-281.173 281.173l93.867 94.293c11.947 11.093 15.36 27.733 10.667 42.667-15.787 47.787-24.32 98.987-24.32 152.32 0 23.467-19.2 42.667-42.667 42.667h-149.333c-23.467 0-42.667-19.2-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.467 0 42.667 19.2 42.667 42.667v149.333c0 23.467-19.2 42.667-42.667 42.667zM853.333 768v21.333c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-21.333c-23.467 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 19.2-42.667 42.667-42.667h213.333c23.467 0 42.667 19.2 42.667 42.667v170.667c0 23.467-19.2 42.667-42.667 42.667zM819.2 768h-145.067v21.333c0 40.107 32.427 72.533 72.533 72.533s72.533-32.427 72.533-72.533v-21.333z" />
718<glyph unicode="&#xe8c6;" d="M277.333 704l234.667-234.667 298.667 298.667-42.667 42.667-256-256-192 192h149.333v64h-256v-256h64v149.333zM1011.627 227.414c-130.133 123.307-305.92 199.253-499.627 199.253s-369.493-75.947-499.627-199.253c-7.68-7.68-12.373-18.347-12.373-30.293s4.693-22.613 12.373-30.293l105.813-105.813c7.68-7.68 18.347-12.373 30.293-12.373 11.52 0 22.187 4.693 29.867 11.947 33.707 31.573 72.107 58.027 113.493 78.933 14.080 6.827 23.893 21.333 23.893 38.4v132.267c61.867 20.48 128 31.147 196.267 31.147s134.4-10.667 196.267-30.72v-132.267c0-16.64 9.813-31.573 23.893-38.4 41.813-20.907 79.787-47.787 113.92-78.933 7.68-7.68 18.347-11.947 29.867-11.947 11.947 0 22.613 4.693 30.293 12.373l105.813 105.813c7.68 7.68 12.373 18.347 12.373 30.293s-5.12 22.187-12.8 29.867z" />
719<glyph unicode="&#xe8c7;" d="M725.333 810.667h-85.333v-298.667h85.333v298.667zM853.333 277.334c-53.333 0-104.533 8.533-152.32 24.32-14.933 4.693-31.573 1.28-43.52-10.24l-93.867-93.867c-120.747 61.44-219.733 160-281.173 281.173l93.867 94.293c11.947 11.093 15.36 27.733 10.667 42.667-15.787 47.787-24.32 98.987-24.32 152.32 0 23.467-19.2 42.667-42.667 42.667h-149.333c-23.467 0-42.667-19.2-42.667-42.667 0-400.64 324.693-725.333 725.333-725.333 23.467 0 42.667 19.2 42.667 42.667v149.333c0 23.467-19.2 42.667-42.667 42.667zM810.667 810.667v-298.667h85.333v298.667h-85.333z" />
720<glyph unicode="&#xe8c8;" d="M853.333 682.667h-170.667v85.333l-85.333 85.333h-170.667l-85.333-85.333v-85.333h-170.667c-47.36 0-84.907-37.973-84.907-85.333l-0.427-469.333c0-47.36 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 37.973 85.333 85.333v469.333c0 47.36-37.973 85.333-85.333 85.333zM426.667 768h170.667v-85.333h-170.667v85.333zM512 128l-213.333 213.333h128v170.667h170.667v-170.667h128l-213.333-213.333z" />
721<glyph unicode="&#xe8c9;" d="M853.333 682.667h-170.667v85.333l-85.333 85.333h-170.667l-85.333-85.333v-85.333h-170.667c-47.36 0-84.907-37.973-84.907-85.333l-0.427-469.333c0-47.36 37.973-85.333 85.333-85.333h682.667c47.36 0 85.333 37.973 85.333 85.333v469.333c0 47.36-37.973 85.333-85.333 85.333zM426.667 768h170.667v-85.333h-170.667v85.333zM448 192l-149.333 149.333 60.16 60.16 89.173-89.173 221.013 221.013 60.16-60.16-281.173-281.173z" />
722<glyph unicode="&#xe8ca;" d="M768 853.334h-341.333l-255.147-256-0.853-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM512 597.334h-85.333v170.667h85.333v-170.667zM640 597.334h-85.333v170.667h85.333v-170.667zM768 597.334h-85.333v170.667h85.333v-170.667z" />
723<glyph unicode="&#xe8cb;" d="M768 853.334h-341.333l-255.147-256-0.853-512c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v682.667c0 46.933-38.4 85.333-85.333 85.333zM554.667 213.334h-85.333v85.333h85.333v-85.333zM554.667 384h-85.333v213.333h85.333v-213.333z" />
724<glyph unicode="&#xe8cc;" d="M853.333 853.334h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-768 170.667 170.667h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM554.667 341.334h-85.333v85.333h85.333v-85.333zM554.667 512h-85.333v170.667h85.333v-170.667z" />
725<glyph unicode="&#xe8cd;" d="M853.333 853.334h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-768 170.667 170.667h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM384 469.334h-85.333v85.333h85.333v-85.333zM554.667 469.334h-85.333v85.333h85.333v-85.333zM725.333 469.334h-85.333v85.333h85.333v-85.333z" />
726<glyph unicode="&#xe8ce;" d="M426.667 667.734v89.173c-34.133-8.96-66.133-23.040-95.147-40.96l62.293-62.293c10.667 5.12 21.333 10.24 32.853 14.080zM122.027 707.84l100.693-100.693c-32.853-52.053-52.053-113.92-52.053-180.48 0-94.293 38.827-179.2 100.693-240.64l-100.693-100.693h256v256l-95.573-95.573c-46.080 46.507-75.093 110.080-75.093 180.907 0 42.667 10.667 82.773 29.013 118.187l344.747-344.747c-10.667-5.547-21.333-10.667-32.853-14.507v-89.173c34.133 8.96 66.133 23.040 95.147 40.96l100.693-100.693 54.187 54.187-670.293 671.147-54.613-54.187zM853.333 768h-256v-256l95.573 95.573c46.080-46.507 75.093-110.080 75.093-180.907 0-42.667-10.667-82.773-29.013-118.187l62.293-62.293c32.853 52.053 52.053 113.92 52.053 180.48 0 94.293-38.827 179.2-100.693 240.64l100.693 100.693z" />
727<glyph unicode="&#xe8cf;" d="M128 426.667c0-94.293 38.827-179.2 100.693-240.64l-100.693-100.693h256v256l-95.573-95.573c-46.080 46.507-75.093 110.080-75.093 180.907 0 111.36 71.253 206.080 170.667 241.067v89.173c-147.2-37.973-256-171.093-256-330.24zM469.333 213.334h85.333v85.333h-85.333v-85.333zM896 768h-256v-256l95.573 95.573c46.080-46.507 75.093-110.080 75.093-180.907 0-111.36-71.253-206.080-170.667-241.067v-89.173c147.2 37.973 256 171.093 256 330.24 0 94.293-38.827 179.2-100.693 240.64l100.693 100.693zM469.333 384h85.333v256h-85.333v-256z" />
728<glyph unicode="&#xe8d0;" d="M512 768v128l-170.667-170.667 170.667-170.667v128c141.227 0 256-114.773 256-256 0-43.093-10.667-84.053-29.867-119.467l62.293-62.293c33.28 52.48 52.907 114.773 52.907 181.76 0 188.587-152.747 341.333-341.333 341.333zM512 170.667c-141.227 0-256 114.773-256 256 0 43.093 10.667 84.053 29.867 119.467l-62.293 62.293c-33.28-52.48-52.907-114.773-52.907-181.76 0-188.587 152.747-341.333 341.333-341.333v-128l170.667 170.667-170.667 170.667v-128z" />
729<glyph unicode="&#xe8d1;" d="M725.333 895.574l-426.667 0.427c-46.933 0-85.333-38.4-85.333-85.333v-768c0-46.933 38.4-85.333 85.333-85.333h426.667c46.933 0 85.333 38.4 85.333 85.333v768c0 46.933-38.4 84.907-85.333 84.907zM725.333 128h-426.667v597.333h426.667v-597.333zM682.667 384h-128v213.333h-85.333v-213.333h-128l170.667-170.667 170.667 170.667z" />
730<glyph unicode="&#xe8d2;" d="M85.333 256v-85.333c117.76 0 213.333-95.573 213.333-213.333h85.333c0 165.12-133.547 298.667-298.667 298.667zM85.333 85.334v-128h128c0 70.827-57.173 128-128 128zM85.333 426.667v-85.333c212.053 0 384-171.947 384-384h85.333c0 259.413-209.92 469.333-469.333 469.333zM725.333 895.574l-426.667 0.427c-46.933 0-85.333-38.4-85.333-85.333v-314.453c29.44-6.827 58.027-15.787 85.333-27.307v256.427h426.667v-554.667h-129.28c22.187-53.333 35.84-110.507 40.533-170.667h88.747c46.933 0 85.333 38.4 85.333 85.333v725.333c0 46.933-38.4 84.907-85.333 84.907z" />
731<glyph unicode="&#xe8d3;" d="M807.253 724.907c-8.533 25.173-32.427 43.093-60.587 43.093h-469.333c-28.16 0-51.627-17.92-60.587-43.093l-88.747-255.573v-341.333c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v42.667h512v-42.667c0-23.467 19.2-42.667 42.667-42.667h42.667c23.467 0 42.667 19.2 42.667 42.667v341.333l-88.747 255.573zM277.333 298.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM746.667 298.667c-35.413 0-64 28.587-64 64s28.587 64 64 64 64-28.587 64-64-28.587-64-64-64zM213.333 512l64 192h469.333l64-192h-597.333z" />
732<glyph unicode="&#xe8d4;" d="M0 298.667h85.333v256h-85.333v-256zM128 213.334h85.333v426.667h-85.333v-426.667zM938.667 554.667v-256h85.333v256h-85.333zM810.667 213.334h85.333v426.667h-85.333v-426.667zM704 810.667h-384c-35.413 0-64-28.587-64-64v-640c0-35.413 28.587-64 64-64h384c35.413 0 64 28.587 64 64v640c0 35.413-28.587 64-64 64zM682.667 128h-341.333v597.333h341.333v-597.333z" />
733<glyph unicode="&#xe8d5;" d="M853.333 853.334h-682.667c-46.933 0-84.907-38.4-84.907-85.333l-0.427-768 170.667 170.667h597.333c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM768 341.334l-170.667 136.533v-136.533h-341.333v341.333h341.333v-136.533l170.667 136.533v-341.333z" />
734<glyph unicode="&#xe8d6;" d="M938.667 768v21.333c0 58.88-47.787 106.667-106.667 106.667s-106.667-47.787-106.667-106.667v-21.333c-23.467 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 19.2-42.667 42.667-42.667h213.333c23.467 0 42.667 19.2 42.667 42.667v170.667c0 23.467-19.2 42.667-42.667 42.667zM904.533 768h-145.067v21.333c0 40.107 32.427 72.533 72.533 72.533s72.533-32.427 72.533-72.533v-21.333zM807.253 426.667c1.707-14.080 3.413-28.16 3.413-42.667 0-88.747-34.133-169.387-89.6-229.973-11.093 34.56-42.667 59.307-81.067 59.307h-42.667v128c0 23.467-19.2 42.667-42.667 42.667h-256v85.333h85.333c23.467 0 42.667 19.2 42.667 42.667v85.333h85.333c46.933 0 85.333 38.4 85.333 85.333v108.373c-40.533 12.8-83.2 19.627-128 19.627-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667c0 14.507-0.853 28.587-2.133 42.667h-86.613zM426.667 45.654c-168.533 20.907-298.667 164.267-298.667 338.347 0 26.453 3.413 51.627 8.96 76.373l204.373-204.373v-42.667c0-46.933 38.4-85.333 85.333-85.333v-82.347z" />
735<glyph unicode="&#xe8d7;" d="M512 682.667c47.36 0 85.333 38.4 85.333 85.333 0 16.213-4.267 31.147-12.373 43.947l-72.96 126.72-72.96-126.72c-8.107-12.8-12.373-27.733-12.373-43.947 0-46.933 38.4-85.333 85.333-85.333zM708.267 256.427l-45.653 45.653-46.080-45.653c-55.467-55.467-152.747-55.893-208.64 0l-45.653 45.653-46.507-45.653c-27.733-27.733-64.853-43.093-104.107-43.093-31.147 0-59.733 9.813-83.627 26.027v-196.693c0-23.467 19.2-42.667 42.667-42.667h682.667c23.467 0 42.667 19.2 42.667 42.667v196.693c-23.893-16.213-52.48-26.027-83.627-26.027-39.253 0-76.373 15.36-104.107 43.093zM768 554.667h-213.333v85.333h-85.333v-85.333h-213.333c-70.827 0-128-57.173-128-128v-65.707c0-46.080 37.547-83.627 83.627-83.627 22.187 0 43.52 8.533 58.88 24.32l91.307 90.88 90.88-90.88c31.573-31.573 86.613-31.573 118.187 0l91.307 90.88 90.88-90.88c15.787-15.787 36.693-24.32 58.88-24.32 46.080 0 83.627 37.547 83.627 83.627v65.707c0.427 70.827-56.747 128-127.573 128z" />
736<glyph unicode="&#xe8d8;" d="M512 640v170.667h-426.667v-768h853.333v597.333h-426.667zM256 128h-85.333v85.333h85.333v-85.333zM256 298.667h-85.333v85.333h85.333v-85.333zM256 469.334h-85.333v85.333h85.333v-85.333zM256 640h-85.333v85.333h85.333v-85.333zM426.667 128h-85.333v85.333h85.333v-85.333zM426.667 298.667h-85.333v85.333h85.333v-85.333zM426.667 469.334h-85.333v85.333h85.333v-85.333zM426.667 640h-85.333v85.333h85.333v-85.333zM853.333 128h-341.333v85.333h85.333v85.333h-85.333v85.333h85.333v85.333h-85.333v85.333h341.333v-426.667zM768 469.334h-85.333v-85.333h85.333v85.333zM768 298.667h-85.333v-85.333h85.333v85.333z" />
737<glyph unicode="&#xe8d9;" d="M341.333 512h-128v128h-85.333v-128h-128v-85.333h128v-128h85.333v128h128v85.333zM768 469.334c70.827 0 127.573 57.173 127.573 128s-56.747 128-127.573 128c-13.653 0-26.88-2.133-38.827-5.973 24.32-34.56 38.4-76.373 38.4-122.027s-14.507-87.040-38.4-122.027c11.947-3.84 25.173-5.973 38.827-5.973zM554.667 469.334c70.827 0 127.573 57.173 127.573 128s-56.747 128-127.573 128c-70.827 0-128-57.173-128-128s57.173-128 128-128zM837.12 377.174c35.413-31.147 58.88-70.827 58.88-121.173v-85.333h128v85.333c0 65.707-101.12 106.24-186.88 121.173zM554.667 384c-85.333 0-256-42.667-256-128v-85.333h512v85.333c0 85.333-170.667 128-256 128z" />
738<glyph unicode="&#xe8da;" d="M682.667 469.334c70.827 0 127.573 57.173 127.573 128s-56.747 128-127.573 128c-70.827 0-128-57.173-128-128s57.173-128 128-128zM341.333 469.334c70.827 0 127.573 57.173 127.573 128s-56.747 128-127.573 128c-70.827 0-128-57.173-128-128s57.173-128 128-128zM341.333 384c-99.413 0-298.667-49.92-298.667-149.333v-106.667h597.333v106.667c0 99.413-199.253 149.333-298.667 149.333zM682.667 384c-12.373 0-26.453-0.853-41.387-2.133 49.493-35.84 84.053-84.053 84.053-147.2v-106.667h256v106.667c0 99.413-199.253 149.333-298.667 149.333z" />
739<glyph unicode="&#xe8db;" d="M640 469.334v256l-128 128-128-128v-85.333h-256v-597.333h768v426.667h-256zM298.667 128h-85.333v85.333h85.333v-85.333zM298.667 298.667h-85.333v85.333h85.333v-85.333zM298.667 469.334h-85.333v85.333h85.333v-85.333zM554.667 128h-85.333v85.333h85.333v-85.333zM554.667 298.667h-85.333v85.333h85.333v-85.333zM554.667 469.334h-85.333v85.333h85.333v-85.333zM554.667 640h-85.333v85.333h85.333v-85.333zM810.667 128h-85.333v85.333h85.333v-85.333zM810.667 298.667h-85.333v85.333h85.333v-85.333z" />
740<glyph unicode="&#xe8dc;" d="M511.573 853.334c-235.52 0-426.24-191.147-426.24-426.667s190.72-426.667 426.24-426.667c235.947 0 427.093 191.147 427.093 426.667s-191.147 426.667-427.093 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333zM661.333 469.334c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM362.667 469.334c35.413 0 64 28.587 64 64s-28.587 64-64 64-64-28.587-64-64 28.587-64 64-64zM512 192c99.413 0 183.893 62.293 218.027 149.333h-436.053c34.133-87.040 118.613-149.333 218.027-149.333z" />
741<glyph unicode="&#xe8dd;" d="M490.667-0c46.933 0 85.333 38.4 85.333 85.333h-170.667c0-46.933 38.4-85.333 85.333-85.333zM768 256v234.667c0 130.987-90.88 240.64-213.333 269.653v29.013c0 35.413-28.587 64-64 64s-64-28.587-64-64v-29.013c-122.453-29.013-213.333-138.667-213.333-269.653v-234.667l-85.333-85.333v-42.667h725.333v42.667l-85.333 85.333zM682.667 213.334h-384v277.333c0 106.24 85.76 192 192 192s192-85.76 192-192v-277.333z" />
742<glyph unicode="&#xe8de;" d="M490.667-0c46.933 0 85.333 38.4 85.333 85.333h-170.667c0-46.933 38.4-85.333 85.333-85.333zM768 490.667c0 130.987-90.88 240.64-213.333 269.653v29.013c0 35.413-28.587 64-64 64s-64-28.587-64-64v-29.013c-21.76-5.12-42.24-13.653-61.867-23.893l403.2-402.773v157.013zM756.48 128l85.333-85.333 54.187 54.187-713.813 713.813-54.187-54.187 124.587-124.587c-24.747-41.387-39.253-89.6-39.253-141.227v-234.667l-85.333-85.333v-42.667h628.48z" />
743<glyph unicode="&#xe8df;" d="M280.747 785.92l-61.013 61.013c-101.973-77.653-169.387-198.4-175.787-334.933h85.333c6.4 113.067 64.427 212.053 151.467 273.92zM852.053 512h85.333c-6.4 136.533-73.813 257.28-176.213 334.933l-61.013-61.013c87.467-61.867 145.493-160.853 151.893-273.92zM768 490.667c0 130.987-90.88 240.64-213.333 269.653v29.013c0 35.413-28.587 64-64 64s-64-28.587-64-64v-29.013c-122.453-29.013-213.333-138.667-213.333-269.653v-234.667l-85.333-85.333v-42.667h725.333v42.667l-85.333 85.333v234.667zM490.667-0c5.973 0 11.52 0.427 17.067 1.707 27.733 5.547 50.773 24.747 61.44 50.347 4.267 10.24 6.827 21.333 6.827 33.28h-170.667c0-46.933 38.4-85.333 85.333-85.333z" />
744<glyph unicode="&#xe8e0;" d="M490.667-0c46.933 0 85.333 38.4 85.333 85.333h-170.667c0-46.933 38.4-85.333 85.333-85.333zM768 256v234.667c0 130.987-90.88 240.64-213.333 269.653v29.013c0 35.413-28.587 64-64 64s-64-28.587-64-64v-29.013c-122.453-29.013-213.333-138.667-213.333-269.653v-234.667l-85.333-85.333v-42.667h725.333v42.667l-85.333 85.333zM597.333 520.534l-119.467-145.067h119.467v-76.8h-213.333v76.8l119.467 145.067h-119.467v76.8h213.333v-76.8z" />
745<glyph unicode="&#xe8e1;" d="M490.667-0c46.933 0 85.333 38.4 85.333 85.333h-170.667c0-46.933 38.4-85.333 85.333-85.333zM768 256v234.667c0 130.987-90.88 240.64-213.333 269.653v29.013c0 35.413-28.587 64-64 64s-64-28.587-64-64v-29.013c-122.453-29.013-213.333-138.667-213.333-269.653v-234.667l-85.333-85.333v-42.667h725.333v42.667l-85.333 85.333z" />
746<glyph unicode="&#xe8e2;" d="M128 725.334v-256h213.333l-42.667 170.667 170.667-42.667v213.333h-256c-46.933 0-85.333-38.4-85.333-85.333zM341.333 384h-213.333v-256c0-46.933 38.4-85.333 85.333-85.333h256v213.333l-170.667-42.667 42.667 170.667zM725.333 213.334l-170.667 42.667v-213.333h256c46.933 0 85.333 38.4 85.333 85.333v256h-213.333l42.667-170.667zM810.667 810.667h-256v-213.333l170.667 42.667-42.667-170.667h213.333v256c0 46.933-38.4 85.333-85.333 85.333z" />
747<glyph unicode="&#xe8e3;" d="M853.333 768h-135.253l-78.080 85.333h-256l-78.080-85.333h-135.253c-46.933 0-85.333-38.4-85.333-85.333v-512c0-46.933 38.4-85.333 85.333-85.333h682.667c46.933 0 85.333 38.4 85.333 85.333v512c0 46.933-38.4 85.333-85.333 85.333zM512 640c69.547 0 130.56-33.707 169.813-85.333h-169.813c-70.827 0-128-57.173-128-128 0-14.933 2.987-29.44 7.68-42.667h-88.747c-2.56 13.653-4.267 28.16-4.267 42.667 0 117.76 95.573 213.333 213.333 213.333zM512 213.334c-69.547 0-130.56 33.707-169.813 85.333h169.813c70.827 0 128 57.173 128 128 0 14.933-2.987 29.44-7.68 42.667h88.747c2.987-13.653 4.267-28.16 4.267-42.667 0-117.76-95.573-213.333-213.333-213.333z" />
748<glyph unicode="&#xe8e4;" d="M704 384c-51.2 0-130.987-14.507-192-42.667-61.013 28.587-140.8 42.667-192 42.667-92.587 0-277.333-46.080-277.333-138.667v-117.333h938.667v117.333c0 92.587-184.747 138.667-277.333 138.667zM533.333 192h-426.667v53.333c0 23.040 109.227 74.667 213.333 74.667s213.333-51.627 213.333-74.667v-53.333zM917.333 192h-320v53.333c0 19.627-8.533 36.693-22.187 52.053 37.547 12.8 83.627 22.613 128.853 22.613 104.107 0 213.333-51.627 213.333-74.667v-53.333zM320 426.667c82.347 0 149.333 66.987 149.333 149.333s-66.987 149.333-149.333 149.333-149.333-66.987-149.333-149.333 66.987-149.333 149.333-149.333zM320 661.334c46.933 0 85.333-38.4 85.333-85.333s-38.4-85.333-85.333-85.333-85.333 38.4-85.333 85.333 38.4 85.333 85.333 85.333zM704 426.667c82.347 0 149.333 66.987 149.333 149.333s-66.987 149.333-149.333 149.333-149.333-66.987-149.333-149.333 66.987-149.333 149.333-149.333zM704 661.334c46.933 0 85.333-38.4 85.333-85.333s-38.4-85.333-85.333-85.333-85.333 38.4-85.333 85.333 38.4 85.333 85.333 85.333z" />
749<glyph unicode="&#xe8e5;" d="M682.667 469.334c70.827 0 127.573 57.173 127.573 128s-56.747 128-127.573 128c-70.827 0-128-57.173-128-128s57.173-128 128-128zM341.333 469.334c70.827 0 127.573 57.173 127.573 128s-56.747 128-127.573 128c-70.827 0-128-57.173-128-128s57.173-128 128-128zM341.333 384c-99.413 0-298.667-49.92-298.667-149.333v-106.667h597.333v106.667c0 99.413-199.253 149.333-298.667 149.333zM682.667 384c-12.373 0-26.453-0.853-41.387-2.133 49.493-35.84 84.053-84.053 84.053-147.2v-106.667h256v106.667c0 99.413-199.253 149.333-298.667 149.333z" />
750<glyph unicode="&#xe8e6;" d="M640 426.667c94.293 0 170.667 76.373 170.667 170.667s-76.373 170.667-170.667 170.667-170.667-76.373-170.667-170.667 76.373-170.667 170.667-170.667zM256 512v128h-85.333v-128h-128v-85.333h128v-128h85.333v128h128v85.333h-128zM640 341.334c-113.92 0-341.333-57.173-341.333-170.667v-85.333h682.667v85.333c0 113.493-227.413 170.667-341.333 170.667z" />
751<glyph unicode="&#xe8e7;" d="M512 686.934c49.493 0 89.6-40.107 89.6-89.6s-40.107-89.6-89.6-89.6-89.6 40.107-89.6 89.6 40.107 89.6 89.6 89.6zM512 302.934c126.72 0 260.267-62.293 260.267-89.6v-46.933h-520.533v46.933c0 27.307 133.547 89.6 260.267 89.6zM512 768c-94.293 0-170.667-76.373-170.667-170.667s76.373-170.667 170.667-170.667 170.667 76.373 170.667 170.667-76.373 170.667-170.667 170.667zM512 384c-113.92 0-341.333-57.173-341.333-170.667v-128h682.667v128c0 113.493-227.413 170.667-341.333 170.667z" />
752<glyph unicode="&#xe8e8;" d="M512 426.667c94.293 0 170.667 76.373 170.667 170.667s-76.373 170.667-170.667 170.667-170.667-76.373-170.667-170.667 76.373-170.667 170.667-170.667zM512 341.334c-113.92 0-341.333-57.173-341.333-170.667v-85.333h682.667v85.333c0 113.493-227.413 170.667-341.333 170.667z" />
753<glyph unicode="&#xe8e9;" d="M426.667 597.334h-85.333v-170.667h-170.667v-85.333h170.667v-170.667h85.333v170.667h170.667v85.333h-170.667zM618.667 679.254v-77.653l106.667 21.333v-452.267h85.333v554.667z" />
754<glyph unicode="&#xe8ea;" d="M810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM384 213.334h-85.333v298.667h85.333v-298.667zM554.667 213.334h-85.333v426.667h85.333v-426.667zM725.333 213.334h-85.333v170.667h85.333v-170.667z" />
755<glyph unicode="&#xe8eb;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM469.333 88.32c-168.533 20.907-298.667 164.267-298.667 338.347 0 26.453 3.413 51.627 8.96 76.373l204.373-204.373v-42.667c0-46.933 38.4-85.333 85.333-85.333v-82.347zM763.733 196.694c-11.093 34.56-42.667 59.307-81.067 59.307h-42.667v128c0 23.467-19.2 42.667-42.667 42.667h-256v85.333h85.333c23.467 0 42.667 19.2 42.667 42.667v85.333h85.333c46.933 0 85.333 38.4 85.333 85.333v17.493c125.013-50.773 213.333-173.227 213.333-316.16 0-88.747-34.133-169.387-89.6-229.973z" />
756<glyph unicode="&#xe8ec;" d="M213.333 376.32v-170.667l298.667-162.987 298.667 162.987v170.667l-298.667-162.987-298.667 162.987zM512 810.667l-469.333-256 469.333-256 384 209.493v-294.827h85.333v341.333l-469.333 256z" />
757<glyph unicode="&#xe8ed;" d="M768 252.587c-32.427 0-61.44-12.8-83.627-32.853l-304.213 177.067c2.133 9.813 3.84 19.627 3.84 29.867s-1.707 20.053-3.84 29.867l300.8 175.36c23.040-21.333 53.333-34.56 87.040-34.56 70.827 0 128 57.173 128 128s-57.173 128-128 128-128-57.173-128-128c0-10.24 1.707-20.053 3.84-29.867l-300.8-175.36c-23.040 21.333-53.333 34.56-87.040 34.56-70.827 0-128-57.173-128-128s57.173-128 128-128c33.707 0 64 13.227 87.040 34.56l303.787-177.493c-2.133-8.96-3.413-18.347-3.413-27.733 0-68.693 55.893-124.587 124.587-124.587s124.587 55.893 124.587 124.587-55.893 124.587-124.587 124.587z" />
758<glyph unicode="&#xe8ee;" d="M576 910.080s31.573-113.067 31.573-204.8c0-87.893-57.6-159.147-145.493-159.147-88.32 0-154.88 71.253-154.88 159.147l1.28 15.36c-86.187-102.4-137.813-235.093-137.813-379.307 0-188.587 152.747-341.333 341.333-341.333s341.333 152.747 341.333 341.333c0 229.973-110.507 435.2-277.333 568.747zM499.627 128c-75.947 0-137.387 59.733-137.387 133.973 0 69.12 44.8 117.76 119.893 133.12 75.52 15.36 153.6 51.627 197.12 110.080 16.64-55.040 25.173-113.067 25.173-172.373 0-113.067-91.733-204.8-204.8-204.8z" />
759<glyph unicode="&#xe8ef;" d="M810.667 725.334v-597.333h-597.333v597.333h597.333zM810.667 810.667h-597.333c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h597.333c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333z" />
760<glyph unicode="&#xe8f0;" d="M810.667 810.667h-597.333c-47.36 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 37.973-85.333 85.333-85.333h597.333c47.36 0 85.333 38.4 85.333 85.333v597.333c0 46.933-37.973 85.333-85.333 85.333zM426.667 213.334l-213.333 213.333 60.16 60.16 153.173-152.747 323.84 323.84 60.16-60.587-384-384z" />
761<glyph unicode="&#xe8f1;" d="M512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333z" />
762<glyph unicode="&#xe8f2;" d="M512 640c-117.76 0-213.333-95.573-213.333-213.333s95.573-213.333 213.333-213.333 213.333 95.573 213.333 213.333-95.573 213.333-213.333 213.333zM512 853.334c-235.52 0-426.667-191.147-426.667-426.667s191.147-426.667 426.667-426.667 426.667 191.147 426.667 426.667-191.147 426.667-426.667 426.667zM512 85.334c-188.587 0-341.333 152.747-341.333 341.333s152.747 341.333 341.333 341.333 341.333-152.747 341.333-341.333-152.747-341.333-341.333-341.333z" />
763<glyph unicode="&#xe8f3;" d="M938.667 523.094l-306.773 26.453-119.893 282.453-119.893-282.88-306.773-26.027 232.96-201.813-69.973-299.947 263.68 159.147 263.68-159.147-69.547 299.947 232.533 201.813zM512 260.267v396.8l72.96-172.373 186.88-16.213-141.653-122.88 42.667-182.613-160.853 97.28z" />
764<glyph unicode="&#xe8f4;" d="M938.667 544.427l-306.773 26.453-119.893 282.453-119.893-282.88-306.773-26.027 232.96-201.813-69.973-299.947 263.68 159.147 263.68-159.147-69.547 299.947 232.533 201.813zM512 281.6l-160.427-96.853 42.667 182.613-141.653 122.88 186.88 16.213 72.533 171.947 72.96-172.373 186.88-16.213-141.653-122.88 42.667-182.613-160.853 97.28z" />
765<glyph unicode="&#xe8f5;" d="M512 201.814l263.68-159.147-69.973 299.947 232.96 201.813-306.773 26.027-119.893 282.88-119.893-282.88-306.773-26.027 232.96-201.813-69.973-299.947z" />
766<glyph unicode="&#xe8f6;" d="M1032.533 597.334l59.733 72.533c-21.333 12.8-226.133 183.467-537.6 183.467s-516.267-170.667-537.6-183.467l537.6-669.867 298.667 371.2v226.133c0 0 179.2 0 179.2 0z" horiz-adv-x="1109" />
767<glyph unicode="&#xe8f7;" d="M900.267 576c34.133 0 68.267-8.533 98.133-25.6l93.867 119.467c-17.067 12.8-221.867 183.467-533.333 183.467s-516.267-170.667-537.6-183.467l537.6-669.867 179.2 221.867c-34.133 38.4-51.2 85.333-51.2 136.533 0 123.733 98.133 217.6 213.333 217.6z" horiz-adv-x="1109" />
768<glyph unicode="&#xe8f8;" d="M938.667 597.334v256l-853.333-853.333h682.667v597.333h170.667z" />
769</font></defs></svg> \ No newline at end of file
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.ttf b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.ttf
deleted file mode 100644
index e12f0cc4..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.ttf
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.woff b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.woff
deleted file mode 100644
index 201581f2..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.woff
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.woff2 b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.woff2
deleted file mode 100644
index 5efd1b93..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/material-design-icons/Material-Design-Icons.woff2
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.ttf b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.ttf
deleted file mode 100644
index 68822caf..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.woff b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.woff
deleted file mode 100644
index 1f75afdc..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.woff2 b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.woff2
deleted file mode 100644
index 350d1c3a..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.ttf b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.ttf
deleted file mode 100644
index aa453407..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.ttf
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.woff b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.woff
deleted file mode 100644
index 3480c6c8..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.woff
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.woff2 b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.woff2
deleted file mode 100644
index 9a4d98c4..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Light.woff2
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.ttf b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.ttf
deleted file mode 100644
index a3c1a1f1..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.ttf
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.woff b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.woff
deleted file mode 100644
index 1186773f..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.woff
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.woff2 b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.woff2
deleted file mode 100644
index d10a5926..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Medium.woff2
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.ttf b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.ttf
deleted file mode 100644
index 0e58508a..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.woff b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.woff
deleted file mode 100644
index f823258a..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.woff2 b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.woff2
deleted file mode 100644
index b7082ef3..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.ttf b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.ttf
deleted file mode 100644
index 8779333b..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.ttf
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.woff b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.woff
deleted file mode 100644
index 2a98c1e4..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.woff
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.woff2 b/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.woff2
deleted file mode 100644
index a38025a1..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/font/roboto/Roboto-Thin.woff2
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/img/bg-select.png b/src/Wallabag/CoreBundle/Resources/public/themes/material/img/bg-select.png
deleted file mode 100644
index 95120441..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/img/bg-select.png
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-w.png b/src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-w.png
deleted file mode 100755
index 65dc607b..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-w.png
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-wallabag.svg b/src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-wallabag.svg
deleted file mode 100644
index 40193e1c..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/img/logo-wallabag.svg
+++ /dev/null
@@ -1,300 +0,0 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In -->
3<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
4 <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
5]>
6<svg version="1.1"
7 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
8 x="0px" y="0px" width="800px" height="800px" viewBox="0 0 800 800" overflow="visible" enable-background="new 0 0 800 800"
9 xml:space="preserve">
10<defs>
11</defs>
12<image overflow="visible" width="800" height="800" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMgCAYAAADbcAZoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
13bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp
14bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6
15eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEz
16NDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo
17dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw
18dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv
19IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS
20ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD
21cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNl
22SUQ9InhtcC5paWQ6MkMyNzEzMDQ4QTgzMTFFM0JGNkJCRDhDMjI5OTRBNkIiIHhtcE1NOkRvY3Vt
23ZW50SUQ9InhtcC5kaWQ6MkMyNzEzMDU4QTgzMTFFM0JGNkJCRDhDMjI5OTRBNkIiPiA8eG1wTU06
24RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyQzI3MTMwMjhBODMxMUUzQkY2
25QkJEOEMyMjk5NEE2QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyQzI3MTMwMzhBODMxMUUz
26QkY2QkJEOEMyMjk5NEE2QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w
27bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtTNJDcAADxbSURBVHja7N37ddPK2gfgybf2/9ungm0q
28IFSAqYBQAaYCQgWECgIVJFRAqABTAaYCvCvY2RXk85yMDibkYsu6zEjPs5ZWuCSxNZKl96eZkQ6u
29rq4CAABAF/5PEwAAAAIIAAAggAAAAAggAACAAAIAACCAAAAAAggAACCAAAAACCAAAIAAAgAAIIAA
30AAACCAAAIIAAAAAIIAAAgAACAAAggAAAAAIIAAAggAAAAAggAACAAAIAACCAAAAAAggAACCAAAAA
31CCAAAIAAAgAAIIAAAAACCAAAIIAAAAAIIAAAgAACAAAggAAAAAIIAACAAAIAAAggAACAAAIAACCA
32AAAAAggAAIAAAgAACCAAAIAAAgAAIIAAAAACCAAAgAACAAAIIAAAgAACAAAggAAAAAIIAACAAAIA
33AAggAACAAAIAACCAAAAAAggAAIAAAgAACCAAAIAAAgAAIIAAAAACCAAAgAACAAAIIAAAAAIIAAAg
34gAAAAAIIAACAAAIAAAggAAAAAggAACCAAAAAAggAAIAAAgAACCAAAAACCAAAIIAAAAACCAAAgAAC
35AAAIIAAAAAIIAAAggAAAAAIIAACAAAIAAAggAAAAAggAACCAAAAAAggAAIAAAgAACCAAAAACCAAA
36IIAAAAACiCYAAAAEEAAAYHD+0ATAWB0cHMQvk/VynP5pkRbY13S9zNfLn+vl63q5uO2brq6utBQw
37vvOvgx8w8gDyab0cbfxzDCCv1stKC1FTDLRvU7itvLgthDgHAwIIwPgCyJf1Mrvlv5cpjNx59Ro2
38HK6Xl+G612Nyy//HQPtIAAEQQAAB5K4AsukyhZDPwggbpuG69+x1+vNDHoUbPWvOwcAYmYQOjN3l
39Ft8Tr2jPw/VwrX/Wy1m4vuLN+FRzhr6tlx/r5XTL8BF2+D4AAQRgwL7XKEDnqQD9lv7M8G0G0FMB
40FEAAAahrscfPxiI09obEK+En4fax/5RrmsJG1et1pEkA9mcOCDDeA+D1HJCoqQNhHM71Yb28D9sN
417SJP83A9oXzW8O99djPwOgcDY6QHBKC5ieWxByTefjX2iBxr1qJUQ+vitjtrIXwAIIAA/M/XForZ
4201TMKmTzDx4nG8Fj2uJr6RUDCIZgAWM+AP4cgjVNBWhbYg/Lm+DhhrmZp6DY1dydg5v/4BwMjJEe
43EIDrYNBmOIiTl+MdswzLysMs/OzxmHS4jwEggAD8T9sPGKyGZcUHH041dy8mKXT0sQ0EEAABBOAX
44nzt6nVm47g1xS9duxXaPvR7znl7/q00AIIAAbFqE7iYJxyvx8aF2p5q9Eyfhutejz+e0LG0GAAEE
454LYQ0qU4J+Rb8ADDNoNeHHL1doT7FoAAAlCAzz28Znya+o/0lWbDR+z1mGfwXmLvh1vwAgggAL9Z
469Fgsf8ukWB5S+Dgc+X4FIIAAZG4V+r1b0ZkQsrfDFOZy6lEyAR1AAAG406Ln1z9LC7urJvdP7VMA
47AghAKb5n8B7mQkit8JHjM1bM/wAQQAAeLBhzIITsHj5ynMi/sHkABBCAUgpGIWQ7ZyHfu4iZ/wEg
48gAA8aCWEFCM+zDHnp8ovbCIAAQSgpABShRBPTb+9XY4zfn/mfwAIIABbF465OQ5u0bvpsIBQtrCZ
49AAQQgG38m+n7ikOxjmye/046P0tfc2b+B4AAArCVnIfN5DzhuiunhbTBwkcJQAAB2MYy4/dWPWxv
50MtJtE3uA5oXsQ+Z/AAggAIMwTSFkjOtdyh3BlnZTAAEEYEhmYXx3xiph3kfF/A8AAQRgcOKdscYy
51KX2eQlcp9IAA3OHg6upKKwDjPAAeHNz1X7HQ/VLIasR5Bk9Cfs8uaVLs9fgRypr3crDNNzkHA2Ok
52BwSg/OJ86E9KPy0sfOj9ABBAAHZS2m1uZ+vlZKDbIq7bvLD3vPIRAhBAAHZR4i1u34ZhPh+kxIn2
53332EAAQQgDEY2lCs40JDled/AAggADv5s9D3HYv1k4Fsg9gL9bbQ924OCIAAArBzIV+qWLRPB7AN
54jsN4n/YOIIAAUJTSh2JNQ7m9H9HCLggggACMySyU/YDCtzYhgAACQFlKe3ZGZRrKu+3uppVdD0AA
55ARijWMgfF/i+S+/9EEAABBCA0XodypqQHt/r3GYDEEAAKFNpt7IdwtwPt+AFEEAARm0eyugFmYZh
569H78a5cDEEAAdvV1YOtTwm153fkKQAABYCBmaclVHCo2H0hbr+xuAAIIwK4uB7hOOfcwHA+onQUQ
57AAEEYGdDnEg8C/n2gry2ywEIIABjdjnQ9cqx0J+HMh+YOKbwCtCog6urK60AjPMAeHBw338P9eD4
58KOQ1TOjbejkc0m61yzc7BwNjpAcE4Harga5XTnNBZgMLHwsfGwABBKCuoQ6lmYd8ngvycmBte+lj
59AyCAANT1fcDrNs/gPQzp1rtj2GcABBCAli0GvG45TEaf22cAxskkdGC8B8CDB+cLD/kA+Wq9nPf4
60+j9CPkPBmvKfsOMwLOdgYIz0gADc7WLA69bn/IvDAYaPVTAHBEAAAdjT1wGv26zHEDDEBw8ufFwA
61BBCAfV0MfP36CgJHA2zLzz4uANsxBwQY7wHwYKtnxg3tQXmb4pCh//QQPj4NsC13nv8ROQcDY6QH
62BOB+Hwa8bpPQfW/EywG240Uw/wNAAAFQXG7l+cADTxcMvwIQQAAacxmGPRdknoJBF47sHwAIIAAP
63ezfw9Tvu6HWeD7DtDL8C2JFJ6MB4D4DbTUKvnIVhPr07pAL6UcuFdOxl+WeAbRfbbVX3h52DgTHS
64AwKwnSH3gkxSwGrT8QDbbbFP+AAQQAC4Tyw0zwe8fnF+xryl3x1vY/xWKAVAAAHYzZsw7PH+bQwz
65i+FjiM/9iGF04SMBIIAAtCmGj6Ff9Y4h5DQ0c2esGGa+rJep/QCAiknowHgPgLtNQt8Ui+rZCJoo
663uHp+3r565YQUT0dfnnj35cpvMwGGDwqsSfsfRO/yDkYEEAABJBtxAL7R+ju+RnkY7FenjX1y5yD
67gTEyBAtgd3EIzivNMMrt/kIzAAggAH2Iw5PMAxiXZ8FDBwEEEIAenYRh35qXn2KP11IzAOzPHBBg
68vAfA+nNAboq3mT3SooMOH60ETedgQAABEEDqiJPR452xDrWq8CGAANzPECyA/cV5Ac+C4Vi2KQAP
690gMCjPcA2FwPyKY2niZOt+Jcj3i3q1XbL+QcDIyRHhCAZsUhO280Q7Hinc2edBE+AMZKDwgw3gNg
70Oz0glVm4npzuYYVlWKTg2OmdrpyDgTHSAwLQXkH7KH0l7+30LC1uswsggAAUrZrI/CZ4gF1uzjeC
71h5AI0CFDsIDxHgDbHYJ1UxyKdRpMUO9T7OH4mMJHFoHQORgQQAAEkLbN1svb9JV2xZBxsV6+pq/Z
729UI5BwNjZAgWQLcW4XrYTye3eeW/4eM8GAIHIIAAjFy8Ih8nqb8SRFoTh72dpQWATBiCBYz3ANjP
73EKy7xPkhx7ZKa+L8j9jzlFVPiHMwMEZ6QAD6Nwsmp7ftcL38SF8BEEAARisGjy/BAwu7MEltLewB
74CCAAo2R+Qj8hJLb5iaYA6Ic5IMB4D4D9zgGJRfDcVujVebi+CUBvnIOBMfpDEwB0qhoGZC5C/6oA
756En1AB3SAwKM9wDYfQ+I8JGn3u6Q5RwMjJE5IADCx9gdBjcCABBAAIQPhBAAAQQA4UMIAUAAARA+
76EEIABBAA4QMhBAABBED4QAgB6J7b8ALjPQC2cxte4WNY4i16n7T1y52DgTHSAwLQrE/Cx6DEbXmm
77GQAEEIAcxUJ1phkGZy6EAAggALk5TYUqww0hx5oBYH/mgADjPQA2NwckFqeukI/Dq/Vy3tQvcw4G
78BBAAAWRXR+F63gfjESelLwUQAAEEoOsA4lat43SZQshKAAHYnTkgAPXE0PFJ+LDtARBAALoQC9Cp
79Zhgtt+cFEEAAOhPveDXTDKMX5/+caAaA3ZgDAoz3AFhvDsg8uPLNr16sl4s6P+gcDAggAALIfUw6
805za1J6U7BwNjZAgWwHZi6DgTPrhj33ArZgABBKBRMXwcagbuYFI6gAAC0JjjcD3hGO4zTwsA9zAH
81BBjvAXC7OSDxyvY3rcWWdpoP4hwMjJEeEIC7VfM+YJd9xnwQAAEEoJb4vA/zPthV3GdONAPA7QzB
82AsZ7ALx/CFac8+FKNvt4tl4W932DczAggAAIIFEcRvMjuOUu+1mF6/kglwIIwE+GYAH87pPwQQOm
83wRwigN/oAQHGewC8vQck3nL3tIWXW4Wfd0Zarpd/d/jZv1IxWxW1U1uvKC/Wy8Vt/+EcDAggAOMO
84ILGwj7fcrdv7UYWMrxt/jmHjsoW3H9/j4cbXKqTMbNnsxO3/6Lb9wDkYEEAAxh1AvuxYwMdwsUiB
85Y9FS0KhjmkJJXJ4KJVmIPSAvBBAAAQQQQCrbDL1apaDxObPAsY3DFESqQGKOS/d+G4rlHAwIIADj
86DCDTcPfQq1UqGj+G6x6PoagCyfOgh6Qrvw3Fcg4GBBCAcQaQeNeroxv/XYWOixE0xSSt/9P0Ve9I
87e87XyysBBBBAAMYbQDYfOBivTH9IReJqxE0T2+S5MNKa/z2g0DkYEEAAxhVAqgcOhhQ83oey5nV0
88Yb4RRmhGDLePBBBAAAEYXwCJk87/FTy2Mklh5HXwHJImvFsvJ87BgAACMK4AMhE8apmtl5cpkFDf
89o/U5eKUZgLH5P00AjJjwUc8iXE+k/s96eRPGPV+m7n73zv4HjJUeEGC8B8DfH0RIffG2vnF4lonr
909ztP4eO/oc05GBBAAAQQ9hdDyMtg4nol9nRcbAaPinMwIIAACCA0p3q+SPWww7H1jMSwUd3W+dbh
91Vs7BgAACIIDQns2HHU4Huo5Vb0d8iOXioW92DgYEEAABhG5MNwLJLJTdO7JKYeNzCh9bcw4GBBAA
92AYR+HKbl6cafc3WZAsfX9HVZ9xc5BwMCCIAAQj5mKYj8tRFKuu4puUwBIy7fN/7cCOdgQAABEEAo
93I5hsfn28EUymYbf5JYuNP39NX5cbwaPVZ3U4BwMCCIAAAp1xDgbGyJPQAQAAAQQAABBAAAAABBAA
94AEAAAQAAEEAAAAABBAAAEEAAAAAEEAAAQAABAAAQQAAAAAEEAAAQQAAAAAQQAABAAAEAABBAAAAA
95AQQAABBAAAAABBAAAEAAAQAAEEAAAAABBAAAEEAAAAAEEAAAQAABAADYyR+aAKC2yXo5XC+z9Pen
96G/+3XC//rpdF+vPlANb3MC3TW9b17411LX2bztJ6/pm+Vr6mr0PapgCdO7i6utIKwDgPgAcHdX90
97vl6er5ejHX7mYr18SMVrSaZpfV+mPz9kldbzvLACPYaO1zW26cf0tRbnYEAAARBAHipST8OvV8V3
98FQPIiwKK8xg23qbwUcdlCiInma9n7PE42zF43BR7Q16FGr0/zsGAAAIggNzlOIWPJsTi/FnId7jS
99cQofkwZ+V+3ivAMxSH5paD1DWs9zAQRAAAHYN4DEK+Tzhl8+xxDSRG9AKevadPioFUKcgwEBBEAA
100uanJno/bCvMn4XreRA6+hf2Gl5USQmLo+NFC+Ng5hDgHAwIIgACy6TAV5W1apMK8b6cpbLVpmQJX
10132LPx6zF3791sHQOBsbIc0AA7i/K2zZruRje9j0cd/A6MdDNM1jXtts79qy89fEBEEAAdi2WuwoG
102r3te1y5f//lI1nUe2hviBVA0Q7CA8R4A7x+CdRK6vYp90GNTdH0iGMu6PjgXxDkYGCM9IAC3e9rx
1036816Ws/pSF4zOhzJegIIIABka0wBpOshUY/tXgACCAAMNfAACCAAAAACCAAAIIAAAAACCAAAgAAC
104AAAIIAAAAAIIAAAggAAAAAIIAACAAAIAAAggAAAAAggAACCAAAAAAggAAIAAAgAACCAAAAACCAAA
105IIAAAAACCAAAgAACAAAIIAAAAAIIAAAggAAAAAggAACAAAIAAAggAAAAAggAACCAAAAACCAAAIAA
106AgAACCAAAAACCAAAIIAAAAAIIAAAgAACAAAIIAAAAAIIAAAggAAAAAggAACAAAIAAAggAAAAAggA
107ACCAAAAACCAAAIAAAgAACCAAAAACCAAAIIAAAAAIIAAAgAACAAAIIAAAAAIIAAAggAAAAAggAJCT
108pSYAEEAAoCv/agIAAQQgVzNN0LqpJgAQQAAQBAQQAAEEYPRWHb/enz2t50wQAEAAAejf3x2/3uGI
1092ravsPV04CEWQAABYGvTkRTlfYatrttYAAEQQACyLR5jcTwZSfDpI4BMgqFfAAIIgADyi1kP4aOP
110oryPMDDrYT09BwRAAAHY2mUPr9n1cKhZj+17NPC27WsfAhBAAArVx9Xrrovy5z2279OBt+3KRwhA
111AAHIvYichu56JSY9FOU3A8F0gK8lgAAIIABFFZFvO3qd4wzad97R67zuYd2++vgACCAAu+pjGNYs
112tN8LMumpKL8tGExbfo2j0M9cl5WPD4AAArCr7z297llo95a8bf/+XYLQWcG/XwABEEAAGtXXbVSn
1136+VLSyEhFuRHGbXxrKWQMGmxDbex8PEBEEAASgkg0WEqoKcNFuSx0J9n2M7z0GyvTNV2hyPcbwAE
114EIDCLXoOId/Wy8mexfk8/Z55xu3cxHucpiDzrcfw0fc+A5C9g6urK60AjPMAeHCwzbfF4v9tJm/5
115IlzfXWn5QJF7mIrx+JyPo5DHfI9dXN5Y1/t6FGZpfZ+GfIaWvUjv/0HOwYAAAiCA3FbMf8u8WF+m
116kHE48E22Ssth5qHqP2HLp6A7BwMCCIAAcpt/Qnm9CPRjsV6ebfvNzsHAGJkDAvCwC03Alj5rAoD7
1176QEBxnsA3L4HZBau76oED9l6+FXkHAyMkR4QgIctggfL8bCLXcIHgAACwH0+aALsIwD7MwQLGO8B
118cPshWFGchP4jmIzO7Vbr5dGuP+QcDIyRHhCA7cShNa5wc5d3mgBgO3pAgPEeAHfrAYn0gnCbVajR
119+xE5BwNjpAcEYHuxF8SVbm56pQkAtqcHBBjvAXD3HpBKfDL6oRYkXN/56kXdH3YOBgQQAAFkG4cp
120hDBusUfsUdjj1rvOwcAYGYIFsLtlMBTrMnjmxSttALA7PSDAeA+A9XtAKvHp6LORNt+T9TJdL59G
121uv7v18ubfX+JczAwRnpAAOqLY/+XI1zvV2m9L5oowgu0GOl6AzRCDwgw3gPg/j0gUZwPEntCxnJr
1223hg+zm/829l6mY9k/WPwehYaGnrlHAwIIIy9kAKEkF3Dx5hCSKPhA/qi9qNvhmABNFOYPgnDHo51
123X/jY5v+FDwAEEIAGrVKBejGw9YoF94stw0UMIUOcG3GeAqbwASCAAGRZrA+lCF/WCFXvw3B6Ci5T
124qPKkcwABBCBrsQiPV8wXA1iHOsPK4no/CmX3Bi3S+p/bnQEEEKBshyNZz6r3IF49XxVYeO/bi1P1
125Br0IZfWGrNJ7flbYdvOZBAQQgDschfHcsjY6D9e9AbkHkVV6j89Cs5PpL9L6v8s8iFTrX3rPza6m
1266TMJ0Bm34R3KhnQbXsoKIE/DeB/kNl8vL0M+T1BfrJePoZuhRpO0/q9T4ZuDi7T+FyPdH+OT7D+E
127socLsiO1HwIIAghjE4vQf8L1lfYxFz3TjTDW9RXo5UbRvepp/Q9TEDvqIYzE9f6cvo75zlYxDMbn
128tziBCCAggCCAMHjfUtHZ9HCfks1SUf44fW1qXP5lauOv6esiw6J7mta/WvdZw2ErLt831p+fD8+s
1295iohgIAAggDCoJ2ul+NwffXd8xXuNtkIIodhu7kzlxuhbjHidV/arx4MH7FN41DI95pEAAEBBAGE
130oZulAqgqGvWEQPfhI4T6t1pGAAEBRAARQCjOPxtFUHXL1oVmgdbE+TZnG5+7Vbi+6xcCCHTKbXiB
131vmyGjVgQxauyJ5oFWhGHPX4Kvw5lE/gBAQQYlc+3/NvbFESmmgcaEYdcxZs+HG/5GQRonSFYQ9mQ
132hmBRnup2vHeJD6470UxQ+/N1nEL9beKwx/9opnFS+9E3PSBAX2IBdN/D32Lh9CNcP6sA2F78zHy7
133J3yEMN4HLwICCDByDw0BmYbrSbNxWNZMc8GDweNH+sxM9/zsAbTGEKyhbEhDsCjTQ8Owblqslw/B
1341Vu4GTzehu3nThl+NXJqP/qmBwToUyyEznf4/lm4vpNPNTRrogkZcXg/Dtv3eGwS4IFe6QEZyobU
135A0K5Yqj4smeAib0iK03JCMS7Wr0O18/0qBvAPXxw5NR+CCAIIHB9FXe65+9Yhp/Dsy41KQMSg8Z8
136vbxMAWTfz8kTTSqAQJ8MwQJy8LGB3xELszgUJc4p+RTcPYthhI5PaZ8+bSB8hBTSAXqlB2QoG1IP
137COUXW/+09Ltjj8jnoGeEMj4HcWjV8/S1aXH/f+RzgNoPAQQBBK7F3ot5y6+x2AgjK01OBmKvxiw0
138M7zqIefr5ZUmR+2HAIIAAtfiHX1OO3y91UYgiV9dFaYLVS/H0xQ8ph2+9iPBGwEEAQQBBH6KxdiX
139Hl9/mYLIV4GEBsWAcbgROA57eh/nQe8HAggCCAII/KLNeSB1rDYCyTK4bSnbqYZUPQ7d93Dc51na
140n0EAQQBBAIHN82Lm72+Rgsh3oYQUNg5T2KiCR6777TObCwEEAQQBBH73JeMi7r7ibnUjlBi+NSyT
141G2FjWth+qvcDAYSs/KEJAPZyWyF6uRFG/g0/55ToMcnbYQobcZv+FX7O35gUvE4L4QPIjR6QoWxI
142PSAMw8l6eTvwdVylpQony41wouekXZONQBG//pm+TkM+czWapveD36j96JseEIBuVcXu7I7/r4JI
143DCl/p39b3Agv/G6zp6Jq28fp34YcMO5zIXwAOdIDMpQNqQeEYYiF4xfNsJXNMLIZVjZDzF1/LyGg
144VareinAjVIQRB4ttee4Ht1L70Tc9IABl2rf43mZOytc93+PTB/6/9PkVOXsvfAC50gMylA2pB4Rh
145iAXpN80Ae4nh8lEwp4g7qP3o2/9pAiAj7hIF+3sjfAA50wMylA2pB4ThcFCC+hbBQwd56CCr9kMA
146QQABAQQa8iToSUQAIXOGYAG5UTxBPe98fgABBGB3xq5DveB+ohkAAQQA6MIrTQAIIABAFwy9AgQQ
147AKATi2DoFSCAAAAdiPOlDL0CBBAAoBMxfKw0AyCAAABte79eLjQDIIAAAG1brJc3mgEQQACAtsW7
148Xb3QDIAAAgC0rZp07mGdgAACALQu9nx43gcggAAArYs9HwvNAAggAM2bagL4RZxwfq4ZgKE4uLq6
1490gpD2JAHBxqBoXBQgp9i8PCwQZo9yKr96JkeEAAQPgAEEAAQPgAEEIA2zTQBCB+AAAIACB8AAggw
150OFNNgPABIIAACCDQrvfCBzAWf2gCICN/aQJGKAaPc80AjIUeECAnU03AiFwKH8AYeRDhUDakBxEy
151DP+sl4lmYCTh49l6WWoKuqb2QwBBAIGN86ImYASWKXxcagoEEMbIECwgFzNNwAicr5cnwgcggAD0
15271ATMGDVfA93ugJGz12wgFy4AxZDtUzBw3wPgKAHBMiHHhCG6DyYbA7wC5PQh7IhTUKnfA5GDEk1
1535OpCU5DdwVbtR88MwQJyMNMEDMhivbwIJpoD3MoQLCAHhl8xBFWvh1vsAtxDDwiQg6eagMJdpPAh
154eAA8wByQoWxIc0AomyegU6pVCh4LTUEp1H70zRAsoG+HwgcFij0d79bLI+EDYDeGYAF9Oyq4AI23
155Vp2mhfE4Xy9vguFWALXoAQH69rzA9xyDR7zy/Wzj68KmHLy43Z8Ecz0ABBCgWNNQ5h2wPtwoQBcp
156hLj16nCdBw8UBBBAgOLNCn3fqzv+Pd4J6YkidZDhQ68HgAACDMDzQt/35QPh5EkqWhlO+ACgIW7D
157O5QN6Ta8lGe6Xn6U+pHb8vvO1svcphY+ICdqP/qmBwToy9EI1vFV0BNSqlW4vtMVAAIIMBAvC33f
158ixohZGFzFxkezfkAEECAgTgMZd79KtQsSg3jKcu50AgggADD8rrg9/69xs+sgqFYJXmnCQAEEGA4
159JqHsidl1b7H72aYvwnm4+zbLAAggQIGOC3//dYtT8wnKICgCtMxteIeyId2Gl3LEW+9OS/641fy5
160aSj3tsNjEUPifzQDQ6f2o296QIAuzQsPH4s9fnZl89cOBV31Hl1oboD2/aEJgA69Lfz9Lwt6r6tU
161UP+7Xv4M13cdm2YcAFdpiW38d/q63AgfJx3sP199RAEEEGA45qHs3o+SCtT4AL339/x/DCOTja9V
162QAkthZQqXFQh7t8ULJYbXx/SRQBZ+ZgCtM8ckKFsSHNAyF/pcz+i/4T9hgN1ccB9KHzsahJ2f2bL
163MrQzbKrt9nMgZRTUfvRNDwjQhZMBhI+2iuomrRoOHyGt8yKDdZv6GAEMg0noQNviFfTXA1iPRQHv
1648cOA96NDHyUAAQRgG2cphJTuYwHvcTng/ei5jxKAAALwkPl6ORrAeqwaKO67uIK/GPC+NOvgNfSy
165AAggQMFiMXc6kHVp4vkQXfQCTQe6Lx11tG5HPrYAAghQplhsD2XoVdTE8KuZAFJbV3OIXg5onwUQ
166QIBR+RKGM5xlFZqZW/G4g/c6xHkSs47CWxXgjn18AdrlOSBD2ZCeA0I+Ys/HfEDr09RzNbo42Maw
1679GhAbR97I76F7nt2noVhz6dh5NR+9E0PCCB83C0+A+O8gd/TVZvEQn1IV/Dfhn6GlX0KJqQDtEYP
168yFA2pB4QhI82xPDxqoHfE4ekzToMTU/CdW9IyWLw+NFz+HwU8n/4JOxM7Uff9IAA+4rDZD4NMHxE
1697xr4HbMOw8fm9ih9MvVZBvt1HP6lJwSgYXpAhrIh9YDQX5E2pAnnm85DM70ffRWxceJ8nMtQ4hX8
170aei392PTZWrHpY87Q6H2o296QIC6DsOwrxA30ftx3GP7HKZwWGJPSE7P46hC9txHHkAAAfotEGNR
171Nh3o+sW7Xq0aKFzfZhASS+yhmmT4fuKQsBMffQABBOhefLr5EOYY3CUOuWmq9yOHNqpCyNyuu7e3
172odxeJQABBCjONFwPuRr6g9rehf3nTcQC9XVG61RdwS8lOC4yfm+zcD0/ZeaQACCAAO05DuO4I1As
173fJt46OBRpoX+USqej0ayHdoMdLEn5MShAUAAAZo1TYXWaRj+sJPY6/GqwXbLuXj+FPLvDXkT8n8a
174+dvgVr0AAgjQmKrXYzaS9Y1Dr1Yj2r5Vb0jOQ+pehGaeRN+mao7NcQBgK54DMpQN6TkgNFtQnYVx
175XdW9SMVuU2apKC3FIlz3OOT6rIu4P84LacdXIwuyFEjtR9/0gACVaqLy2IaULENzQ682C9H3BbXB
176LG33XIfaxe1zXlA76g0BuIcekKFsSD0g7OckXN+1aWy3F237KdenBRajsU3eZFrwH6c2LcEi6A0h
177U2o/BBAEEPo0D9cTaacjXf8nof1hR/NQ5iT+RchzWFZsz7OCwlycW/Q+gAACAogAguAx6uARdTms
178J7ZzvOtUiUPb3odmno3SpGridymhLtcwhwACvTAHBMYXPOKdj86Ej06HGK3CdW/LuwLb6jjtM/OM
1793tMydNN71ZRZuJ4bcuIQBKAHZDgbUg8Id4tXieMtV8fe49FX+LitGC01AC5SiFpktG9/CmXdKnqV
1809sGFjyJ9UfshgCCA0JZY4M7DOCeX5xo+Ngvns5D/E8nvEtswDinKZVhWiZP9cxzahgACAggCCLXM
1811svLUMZzE7rS9t2u6pqHcp8yn9sE63koZ3L6ZhvGUHzhI4oAggCCAEJpJuFnb8dUc/yies5HrvMF
182pqlwnhXcvrE3ZJHBeyltcnplEdyyFwEEAQQBhELEITzPg96Ou1ykwq6EYS4n4XqeTslt/SaDIrrE
183eSEh7aMfgonqCCAIIAggZChe5X2ZwsdUc9xZzOX6ML2Htu1ZKPdJ9DkV0SXOC4ly6lFCAAEBBAFE
1846BA6thALt9KHs5RaPFdWIY87Pc1DuXNsTFJHAEEAQQChc7NwPbxK6NhOqb0e923/0p/XksOwrJJ7
185lUxSRwBBAEEAoVXV8zqepq9unbu96m5MlwPcJ+K8kJJ7Q3IYlhXbMfaEzAttw0UwSR0BBAGEDANI
186PMEebpysKEMVOGah3HH/fTpP4WPohVncP0rvDVmF/odlzUPZtz02SR0BBAGErALIl/Dzri/ViWqI
187V4RLNtkIGk9DubddFTz6239K7w2J+h6WVfpE/xyCHAIICCD8N4DctSGXafk7nbCWQkmnhU4VNg6D
188Ho59Xabg8SGMeyjKLJTfG9L3QwyHEObOQ15Po0cAAQFkhAFkswdkm5P/ZjBZCiaNFIUxYPyVvs40
189SWNWKXSc20cHVUCH0P8tZ49SmCt1vtXQbryAAIIAQmEBJBa98eFb0z1/1SKd1L6nwm8lnPxS9B2m
190No7L040/07w4VOdjcAegh4LvaSi/d63PW86W+uDCm8dtk9QRQBBA6DyAVCfSNu/0UgWReJL7O/zs
191SalOgEMJGGGjGHl64++0a5lCx7nQu5OTUPZT1EPof27DcWrDkntD+hzWhgACAshIA0hlmk6kfdzK
192dTOUVD0pNwPMpraKjc0wEW4JEX+Fnz0Xh8Etb/suPGMvx9jnduzrMF2AKD0sX6QgctlTG5Y8Qb06
193puoNQQBBAKHzALJZhMcQUj3MrtTidHVHoSA0lCuG0c+p2FxqjkaVfiU/hP4fwHcSyu5R0huCAIIA
194Qm8B5LYw4iF39CUWk1/T15XmaNU0XPeGHBW+Huehvzs96Q1BAAEBhD0DyG0n11n4+TwKgYSmLVMB
195VIUOuneUgsi04HVYhX7nhpyE8ntD3CkLAQQBhCwCiEBCm4FjEUwiz8VQbtn7LvT3FPAh9Ib0ObcG
196AQQEEAFkK9MURB4Hz7Xgd9XNBqqw4VbN+RvCJPW4n70I/Q0pigHodSj3As0qtZ95VwKIRkAAIcsA
197clcBcyiUjFIVMr6Hnw+upEzzFERKvt1snxPUp+G6N6Tk418ckmWCugACAghFBJC7Qsl0I5hUf6ZM
198MVisbgSNlWYZnCEMy3qfCum+lP4UdUOyBBAQQCg2gGwTTP7a+LO5JXlYhJ/PaalChl6N8ZmlInpa
199cGB+1mMRPUntd1Rw+73y2RdAQABhKAHkoaKn+vpn+P3p4zRTWGw+tb76u7kaDK2IvkwhpM8iOvYk
200nRbcfn0OaUMAQQBBAMlC1VMyDT+vzD7dKJbGPMRrFX4OiYoF17/h16fPCxjUdRLKvd1sDreajcel
201L6HcXl7zQgQQEEAYdQDZ1s0wcnOI1+NbioEchoHdFhKqMHHb92yGDmjTPFz3hpSqz1v1RtP18imU
202e5EkBrhXPgYCCAggCCDdFg/Thn7XQnNSqFkqoku9kt93EV36kDYhRAABAQQBBOhc6cOJYhEdhxT1
203ORwxhpB5oe3nDlkCCAggCCCAELKjvu+QFZ2EcufVLFL7IYBA4/5PEwCQaQFfeoCKAaTU4UyzUPZ8
204IEAAAUAIGWUIOS84hMyFEEAAAaCPEFLypOQYQj71/B5KDyFzHwNAAAGgSxeFh5BZ6P9KfskhJD5k
205cepjAAggAHRdQL8r+P3PQ7/PCCk5hEyCoVhAg9wFaygb0l2wgG6UfHvZ6EW47tHp0yyU+ayVOB9o
2064SNQPrUffdMDAsAu4hX888IDVN+F/yKUObn/pd0fEEAA6CuELAt97zF8fMrgfZR4h7GpXR8QQADo
207y7OCQ8hsvRwJIb/x5HNAAAEgW5eFh5DTTN5HbL9HmbRjfA9xjsz5LWEk/v2D3R5ogknoQ9mQJqED
208/YhDmuLD/g4LfO85zWfJpR03J+lPNt7Pwq4+HGo/BBAEEEAI6cdFKrhz0vddxlbhukcGAQQEEAQQ
209QAhp4/CZ4Xs6WS9ve3x9t9sVQKBV5oAA0ITS54TkFkBehWYnha92+N7nNgEggAAghOzmTej/gYP7
210OE9tuWrwd77YMtQc2pUBAQQAIWQ3L1PBfd9woveZt2VswycNBalpCjNPguFVgAACgBDSuMO0LNJ7
211iYX3u/T3WNDHIU5vCmnLFw2916MUQp6l33dXb8hnuzDQJpPQh7IhTUIH8tP3xPQYOE4G1J6xHc/2
212aM8qjG1un3m4nvMxS+Hk48DajFuo/RBAEECAoevr1rI3C+6hhLrjUO8uWUNsDwQQCmQIFgBta/qB
213f5dhu8nUswG2ZVzvk2AuByCAAMCDIeRVQ78r9gK82TKETAbannF+zbPUpiu7FyCAAMDvzlPR3MTz
214LR5v+bsmI2jTRymIPDTp/6NdEMiBOSBD2ZDmgADlmK6XT2G/yemLFEAemuh+MMK2jXe7enojfH0M
215zQ6Do2BqPwQQBBBgrE7D9YTq2oe+jT+frJfXN4ru+JyPN5oZBBAEEAQQgEq8Wn8W6g2Vunngi79j
216Fq57Q+KzPpaaFwQQBBAEEIBwS3CIvSHzPQMIIIBQAJPQAehbnEgeJ1HHOR2LLX9mpdkABBAA2Mci
217hZC4XDzwveZ2ABTKEKyhbEhDsIDhmYbrOR1P05+jr+H6bk4rzQP1qP0QQBBAAAABhNEwBAsAABBA
218AAAAAQQAAEAAAQAABBAAAAABBAAAEEAAAAABBAAAQAABAAAEEAAAAAEEAAAQQAAAAAEEAABAAAEA
219AAQQAAAAAQQAABBAAAAAAQQAAEAAAQAABBAAAAABBAAAEEAAAAABBAAAQAABAAAEEAAAAAEEAAAQ
220QAAAAAEEAABAAAEAAAQQAAAAAQQAABBAAAAABBAAAEAAAQAABBAAAAABBAAAEEAAAAAEEAAAQAAB
221AAAEEAAAAAEEAAAQQAAAAAQQAABAAAEAAAQQAAAAAQQAABBAAAAABBAAAEAAAQAABBAAAAABBAAA
222EEAAAAAEEAAAQAABAAAEEAAAAAEEAAAQQAAAAAQQAABAAAEAABBAAAAAAQQAABBAAAAABBAAAEAA
223AQAAEEAAAAABBAAAEEAAAAAEEAAAQAABAAAQQAAAAAEEAAAQQAAAAAQQAABAAAEAABBAAAAAAQQA
224ABBAAAAABBAAAEAAAQAAEEAAAAABBAAAEEAAAAAEEAAAQAABAAAQQAAAAAEEAABAAAEAAAQQAABA
225AAEAABBAAAAAAQQAAEAAAQAABBAAAGDA/tAEAP81WS+HG39fZPb+Zht/Xq6XS5ssO9O0hLR9lpoE
2264Hd6QICxi4X9t/Xyz3r5srFcrZezjYKyDzEQfUrvZfO9Ve/10ObLwsl6+ZGWahtV+9RJCrcAJAdX
227V1daYQgb8uBAI8Du5ilk3CdeyX4Wur+avc17i16tl3ObsheTFBBnD3zfMu1Deq3IgtoPAQQBBPpx
228lIrHbazWy5MOC8hpuL6Cvs2V88v03lY2aedO18vxlt97nsIiCCCMniFYwFi93TEQHHX83rYdthO/
22977XN2bnpDuEjmod+h/MBCCAAPdt1/kSXxeO05XWh+23U9T4EIIAAAAAIIAAAgAACAAAIIAAAAAII
230AAAggAAAAAggAACAAAIAAAggAAAAAggAAFCQPzQBmZmsl/l6ebxepunfvq6Xi/WybPi1Zml52uLr
231dLk+bZuldYjLn+vl8Mb/f01fV2ndlnZnbpim/abad57e+P+4z/y7Xi439qHLEbTLYfp8TW60SVz3
2327+nPi/TZWg10v5imNgjpeDnZ+P+4zn9vtMNQ94vpxnH2ZhvcdqxdjOgzwtBcXV1ZBrAMxPF6+Sfu
233lncsX+45IO9aSP944HWmDbzOvKP1aTsMfrpnHR5aPqXfkeN67rouJx2+ty87vrcvGe9HR+vl7IHP
234wn3Lt/Vy2tBnsulAvuu6zG4Um6c12uVH+rnDAYSu0weOxdph+8/I8S6fEXWTpfe6VSMIIJk43eFA
235u08xO9/ydf7Z88Q272h92roKt0/BeFd7nmVWRAog7ZrvWVTdtZ6zwgPIZIfjXUntsUsg/dbwfvEt
2367W8lmdX4nG+zbHWcVTdZBBCLALL7ifyko9epW9RNdizezzLaFicNB4/bgshJJusqgLT3ef7R4j5U
2379axNCjtuXaWr1N9CO0Vnzr2p1ZX+Ly3vF18K6BGZ7Nmr3MjxSt1k6XsxCZ0cPN/x+1/uUTC0+f2b
238V/gmO35/DsVBLIzetlzITNJr5D78jHpOQ3NDGB/6zPwo8Op/W0OG5unzm2vxfZLeX9vbq+pVyLU3
239pNpvuzjmvw159rDDfwkg5HJlbBfTzNdn1/fX9wniKHR/5XAmhAzKJPwch97la+ZcbPZx3MmtByBu
240o7NUDHf9mrntF/H9dN1zV11Ymvp4IIAAYz8pbp4chZBhhI8+C9+zUF5PyFC3RU4BMacQchr6G2o7
241DXkMWQQBBPivWeh//slhyGsODGUWvAqsX7dJDnNCzjLYL3J4DzEEHff8HhxnEUCALExT0ZaDo5DH
242PBjKLPA2i25+Fpxve3z904w+02c9b4dc9kvHWQQQoHe5XTE+tUmKc5xZQRPfy8xm+WX79NEes9D/
243Ff+bIWDeUyj+lNk+4TiLAAL0WpjkdrecaTCZuCRxe73N8H29tml+0fU2yrUnqo99dacHA3b4udUL
244ggACdG6SaeEYPbd5iipsc5xzcRTc8WfTLHR7seE40/afhm57g3IN6I6zZOMPTQCjctxA4bhYL5/X
245y/KWYuf5HgVP9fyUS5spa7G4mu/5O1br5WK9fL2xveO+8zjs/iydm/vheUHtuUyfp0XDn6dK7BV6
2461cF6TML+PVCXadvd3C/iPvd0z/3i+S1t3JYmeuLO035xmd73YVr3w422qHucfRWgb57G6EnoGajz
247dNw6Tgb2OnXs85Tzbe92FAunuk977nJ4gCeh13O2xz70z5bhZbLH63Q17n4W9ntS9bYP5tv3CeL/
248dHhxY5/3eLJFuJjUPL5W7d2FyZ7H2U9hu16kwz2Os4fqJosnoQNdme9x9TBejXsWfu/1uM0ife+q
249xusc2kxZm+wREuO+8yhs1ztxma7Sng90H4rr9SRsd0V+mT5P53tssy7apO5V/8u0fifh4d7Py/R9
250bzLeL/bppYnr9WLLY+dyj+PsLEDPBBAYj7pjf8/D7l32lzWLhKc2U9bqFlerVCztOrzuTY2fmWbe
251hotQbwhM3UAWQvs9i4c1270KH8sdf+59jZ/pqvCue5x9n5YujrOemYMAAnRaPO5qGeqPF74I5nMM
252Td2A+KLmvnCZ9qMcC8263u3xs29CvSvej1tep9ke67Os+bMfMy2867TFsmaQCDU/Hy70IIAAndin
253QNjHsqP3Sb770fkeRWb0dUDtF8PDYo+fj4HsQ42fa3v4UZ2CdhH2u1nAMsN2OKwZcvY9zi4CCCBA
254huqceJcNnNiWmn4wYmE1rfFzH/Z83dWA2vCigd9Rp2iftrxedYLpxz1fM8djS1/HWRBAgGyLx119
255buB1/9X0ow6xKyG08c/DZc02bXP4UZ3ffd5AO+SmTtD76GOBAAIMVd0hErAP+1A77ZHT8KOZ/eJ/
256HmsLEEAAaE6dAvZvzdYK7ZqnOj1BeggRQACgweIKAAQQAABAAAEAAAQQAAAAAQQAABBAAAAABBAA
257AEAAgU79qQk695cmAFow1QQggEAJ6jxIbabZOm9zsA81H+wvBRBhDAQQ+OlrjZ/J+aFoelp+biPF
25843D0VcA+1fSNhLKhPXH7+YCOkwIIAggM+AQ87ehnhlJ073tSO7abDkqdAvZxA/vg0YDacNbQ53LX
259Y0xuvR9NFMw57herHvaJWQABBLININOaJ706V193PSEsOmivOr1ML/d4vXhV77XddPSOwn5XeN9m
260vG51ivrHDbzuvKPw2Obxa7pn4XwS8rzq/3eNn9m3J+dlAAEEOjuB7XrQrXu1bNeT5DzTNr6sue51
261i4SzkPcwOborYk/3KLTnA2uPeBzap4d0WjOUfW25LeocX+qGy9h+rwe0T8z3CFOHmX9GQAAha6ua
262B95ti+N9rsbHE8MuQ4nqvM7XDtq4bvH4qUbBdBaGNWyGn0Vmnc9qnSBxtEdwyb3grBvOJ+nzWMci
263w3aYpbbY9bj/JeR7cWOf4+ykRlt8CiCAwF4BpM4VtG2K40kqZKZ7vL+3W4ads1Dv6uaqgzauW4BM
2640gl/m/WvioO5XXqw6u5H8bNxsuX+dlqzICulPeLn5NuOIX2aPlt1ji+XHQSQuhdR5jsEsuPMw0d1
265LF/V3Ce+7HCemu/4/SCAwB3qXDmapBP5WSqQJzcO6Mfp//ctiKsivLqyf9vr/NjjdRYdtfHFnutf
266hYvpjfWfp4LxWzAhcuj26a17mz4nxzcK6Wn6XJ1t/P/Q22OaPjO3tcfNwvQ0fbYOO/7cd/Ua89QO
267pzeOH5P099ON/x9qKK229Y+0X8xv2d6zjXONIa4U7+Dq6korDGFDHhyUvgrHoYwhF01brZdHHb3W
268POw+5KGX3bmj19n14PcubHcVvwnb9jptFj3POnhfk1QA5V78POsw2P8IzV2Jjr0Vy9DsLayfhG5u
269wdtkO7Sli8/wLH1+sw5J69rvWYAe6QEhFxfWu3XnYXgPI6NblyP+rN7lY8MBb9Zg+FiE7p7/8cGu
2708L82X2kGEEAowyp0d8UyJx8G/noMzztN8Iv3GQf7Nx2+1nlwgcNnBAQQHLSzdx66v1L2Prg6x/4X
271C95rhv+JRferTI+ny47bQeHd37EdBBCoaRHG1QvSx8k6Fglv7Go0sO8qsH66SEVnLmLwOOnhdd93
272HHpy9koTgABCWQftrrvx+xg20GcBdxFcwWb/z8wLzfCLN5kU3/G40ucE4xfBUKxoEfQIgQBCMVah
2732ytHl+lkfd7ha8bXOsmgWDq3u7GHZXCV97ZjSZ8hZJVBAKgCkBByfZx3nAUBhEJcdFTYbBYMrzo6
274UZxnVLS1vc653zFJgVTG/rwoMIT0UXTG41hXt9zd5r20HUJKKey7OLc4liGAQIMnlzZPYMvw+9XK
275eKJoc2jS+5DfFeP4ftoYJlAVYp8zLjYvMn5vu7bbx54/q7HwXbV4HNjVqsf2qCald9kT8S5tg5wK
2760TYDURV8VzXeU1/H2Tct/m7zbihPfBChpfxlwOJ98eMDCq8aXE7C/Q9Si09l/tHg65XwhPD43IEv
277Da7v5nMMdmnLo473rX+2fF99PMDx2w7tnctn9aShfShul/nG797lGHCW2fHrZIf9bNflS2jumSFt
278arINTjZ+73zH49KQjrM/Ns4ru/7OL+omS+91q0YQQAoxTUXIjz0KmtOw25N65zsUgbctnzouqJsw
279S++77glxfsdJd5vi47SnguChbdxXQTvZorD4FvJ7Kvk+n9Xqczq5pS22+Szm2B6bx5NPoZlwdlbA
280RY27wljdY/jZHcfvsy3b7DCz4+xZzVD245aLaAKIpbjlYCTF6+AdHByMaXUP0/L4gZPKar18D/s/
281DXiaThjx69MHXu/vjdcreVzu5hOZnzbQxtN7iqb4O+LwhD7ni8Ti8PmNk3p8Xx9D/3MQjtJ72yy+
2824r4Vh2mdF/BZnaXP6l3h/3JjH3qorWPh9fqWkBF/R3zI5vsCPneTG+1S/f2u4FQdS76G4dyqfJv9
283IqR1XqZ1vm+7Hqf94rbfdZ6OL7nuF7O0/LXFZ+TijuPstx0D1mJd+z0L0GfdKoAIINBD8bVZ5K80
284CzWKtl8KKk3CLUFuLPvFroXcxbr2cxttevWHJhjI0UeQpAyXisXmjPjCg32I24xxMva0xs98t6vQ
285N3fBAgAo06zGz7htLwIIAAC1vKzxM27bS+/MAQEo9QBu7heMWbxBxSe1HyXSAwIAUJZZqHeL8AtN
286Rw5MQgcA6D5ATNNS3Wp5scXPxTt9xVsOz2u+7mdNTw50wwGUegA3BAtKcxJuf5ZNZRXuvjX5bM/X
287jr/3UfyD2o++6QEBAGjfabh+aOJ9pqHerXW38dEmIBd6QABKPYDrAYFSxKFT33p8/VVIvR+R2o++
288mYQOANCuo55f/5VNgAACADAej3t87XdhuwnuIIAAAAxEX08fPw/XE99BAAEAGJHvPYUPQ6/Ikkno
289AKUewE1Ch1LE2+7+CHfffrdpb9bL+7v+U+1H3/SAAAC06zKFgrYt1suT+8IH5MBzQAAA2neevp61
290FDw+brwGZM0QLIBSD+CGYEGJZuH6aejx6z5Dslbr5SIFj+UuP6j2QwABQACBcZqmZZb+/le4+0no
291MWT8G657O+Kfa99ZS+2HAAIAAIyGSegAAIAAAgAACCAAAAACCAAAIIAAAAAIIAAAgAACAAAIIAAA
292AAIIAAAggAAAAAggAACAAAIAAAggAAAAAggAACCAAAAACCAAAIAAAgAACCAAAAACCAAAIIAAAAAI
293IAAAgAACAAAIIAAAAAIIAAAggAAAAAggAACAAAIAAAggAAAAAggAACCAAAAACCAAAIAAAgAAIIAA
294AAACCAAAIIAAAAAIIAAAgAACAAAggAAAAAIIAAAggAAAAAggAACAAAIAACCAAAAAAggAACCAAAAA
295CCAAAIAAAgAAIIAAAAACCAAAIIAAAAAIIAAAgAACAAAggAAAAAIIAAAggAAAAAggAACAAAIAACCA
296AAAAAggAAIAAAgAACCAAAIAAAgAAIIAAAAACCAAAgAACAAAIIAAAgAACAAAggAAAAAIIAACAAAIA
297AAggAACAAAIAACCAAAAAAggAAIAAAgAACCAAAIAAAgAAIIAAAAACCAAAgAACAAAIIAAAgAACAAAg
298gAAAAAIIAACAAAIAAAggAAAAAggAACCAAAAAAggAAEBt/y/AAEmyIDWRykGwAAAAAElFTkSuQmCC">
299</image>
300</svg>
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js
deleted file mode 100755
index 491a7916..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js
+++ /dev/null
@@ -1,79 +0,0 @@
1function init_filters() {
2 // no display if filters not aviable
3 if ($("div").is("#filters")) {
4 $('#button_filters').show();
5 $('.button-collapse-right').sideNav({ edge: 'right' });
6 $('#clear_form_filters').on('click', function(){
7 $('#filters input').val('');
8 $('#filters :checked').removeAttr('checked');
9 return false;
10 });
11 }
12}
13
14function init_export() {
15 // no display if export not aviable
16 if ($("div").is("#export")) {
17 $('#button_export').show();
18 $('.button-collapse-right').sideNav({ edge: 'right' });
19 }
20}
21
22$(document).ready(function(){
23 // sideNav
24 $('.button-collapse').sideNav();
25 $('select').material_select();
26 $('.collapsible').collapsible({
27 accordion : false
28 });
29 $('.datepicker').pickadate({
30 selectMonths: true,
31 selectYears: 15,
32 formatSubmit: 'dd/mm/yyyy',
33 hiddenName: true,
34 format: 'dd/mm/yyyy',
35 });
36 init_filters();
37 init_export();
38
39 $('#nav-btn-add-tag').on('click', function(){
40 $(".nav-panel-add-tag").toggle(100);
41 $(".nav-panel-menu").addClass('hidden');
42 $("#tag_label").focus();
43 return false;
44 });
45 $('#nav-btn-add').on('click', function(){
46 $(".nav-panel-buttom").hide(100);
47 $(".nav-panel-add").show(100);
48 $(".nav-panels .action").hide(100);
49 $(".nav-panel-menu").addClass('hidden');
50 $(".nav-panels").css('background', 'white');
51 $("#entry_url").focus();
52 return false;
53 });
54 $('#nav-btn-search').on('click', function(){
55 $(".nav-panel-buttom").hide(100);
56 $(".nav-panel-search").show(100);
57 $(".nav-panels .action").hide(100);
58 $(".nav-panel-menu").addClass('hidden');
59 $(".nav-panels").css('background', 'white');
60 $("#searchfield").focus();
61 return false;
62 });
63 $('.mdi-navigation-close').on('click', function(){
64 $(".nav-panel-add").hide(100);
65 $(".nav-panel-search").hide(100);
66 $(".nav-panel-buttom").show(100);
67 $(".nav-panels .action").show(100);
68 $(".nav-panel-menu").removeClass('hidden');
69 $(".nav-panels").css('background', 'transparent');
70 return false;
71 });
72 $(window).scroll(function () {
73 var s = $(window).scrollTop(),
74 d = $(document).height(),
75 c = $(window).height();
76 var scrollPercent = (s / (d-c)) * 100;
77 $(".progress .determinate").css('width', scrollPercent+'%');
78 });
79});
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery-2.1.4.min.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery-2.1.4.min.js
deleted file mode 100644
index 49990d6e..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery-2.1.4.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
1/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
2!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){
3return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|&#?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ia={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qa[0].contentDocument,b.write(),b.close(),c=sa(a,b),qa.detach()),ra[a]=c),c}var ua=/^margin/,va=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wa=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xa(a,b,c){var d,e,f,g,h=a.style;return c=c||wa(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),va.test(g)&&ua.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function ya(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var za=/^(none|table(?!-c[ea]).+)/,Aa=new RegExp("^("+Q+")(.*)$","i"),Ba=new RegExp("^([+-])=("+Q+")","i"),Ca={position:"absolute",visibility:"hidden",display:"block"},Da={letterSpacing:"0",fontWeight:"400"},Ea=["Webkit","O","Moz","ms"];function Fa(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Ea.length;while(e--)if(b=Ea[e]+c,b in a)return b;return d}function Ga(a,b,c){var d=Aa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Ha(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ia(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wa(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xa(a,b,f),(0>e||null==e)&&(e=a.style[b]),va.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Ha(a,b,c||(g?"border":"content"),d,f)+"px"}function Ja(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",ta(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xa(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fa(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ba.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fa(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xa(a,b,d)),"normal"===e&&b in Da&&(e=Da[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?za.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Ca,function(){return Ia(a,b,d)}):Ia(a,b,d):void 0},set:function(a,c,d){var e=d&&wa(a);return Ga(a,c,d?Ha(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=ya(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xa,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ua.test(a)||(n.cssHooks[a+b].set=Ga)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wa(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Ja(this,!0)},hide:function(){return Ja(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Ka(a,b,c,d,e){return new Ka.prototype.init(a,b,c,d,e)}n.Tween=Ka,Ka.prototype={constructor:Ka,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Ka.propHooks[this.prop];return a&&a.get?a.get(this):Ka.propHooks._default.get(this)},run:function(a){var b,c=Ka.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ka.propHooks._default.set(this),this}},Ka.prototype.init.prototype=Ka.prototype,Ka.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Ka.propHooks.scrollTop=Ka.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Ka.prototype.init,n.fx.step={};var La,Ma,Na=/^(?:toggle|show|hide)$/,Oa=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pa=/queueHooks$/,Qa=[Va],Ra={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Oa.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Oa.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sa(){return setTimeout(function(){La=void 0}),La=n.now()}function Ta(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ua(a,b,c){for(var d,e=(Ra[b]||[]).concat(Ra["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Va(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||ta(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Na.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?ta(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ua(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wa(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xa(a,b,c){var d,e,f=0,g=Qa.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=La||Sa(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:La||Sa(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wa(k,j.opts.specialEasing);g>f;f++)if(d=Qa[f].call(j,a,k,j.opts))return d;return n.map(k,Ua,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xa,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Ra[c]=Ra[c]||[],Ra[c].unshift(b)},prefilter:function(a,b){b?Qa.unshift(a):Qa.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xa(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pa.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Ta(b,!0),a,d,e)}}),n.each({slideDown:Ta("show"),slideUp:Ta("hide"),slideToggle:Ta("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(La=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),La=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Ma||(Ma=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Ma),Ma=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Ya,Za,$a=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Za:Ya)),
4void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Za={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$a[b]||n.find.attr;$a[b]=function(a,b,d){var e,f;return d||(f=$a[b],$a[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$a[b]=f),e}});var _a=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_a.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ab=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ab," ").indexOf(b)>=0)return!0;return!1}});var bb=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cb=n.now(),db=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var eb=/#.*$/,fb=/([?&])_=[^&]*/,gb=/^(.*?):[ \t]*([^\r\n]*)$/gm,hb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ib=/^(?:GET|HEAD)$/,jb=/^\/\//,kb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lb={},mb={},nb="*/".concat("*"),ob=a.location.href,pb=kb.exec(ob.toLowerCase())||[];function qb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rb(a,b,c,d){var e={},f=a===mb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function ub(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ob,type:"GET",isLocal:hb.test(pb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sb(sb(a,n.ajaxSettings),b):sb(n.ajaxSettings,a)},ajaxPrefilter:qb(lb),ajaxTransport:qb(mb),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gb.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||ob)+"").replace(eb,"").replace(jb,pb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kb.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pb[1]&&h[2]===pb[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pb[3]||("http:"===pb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rb(lb,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ib.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(db.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fb.test(d)?d.replace(fb,"$1_="+cb++):d+(db.test(d)?"&":"?")+"_="+cb++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nb+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rb(mb,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tb(k,v,f)),u=ub(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vb=/%20/g,wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&").replace(vb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bb=0,Cb={},Db={0:200,1223:204},Eb=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cb)Cb[a]()}),k.cors=!!Eb&&"withCredentials"in Eb,k.ajax=Eb=!!Eb,n.ajaxTransport(function(a){var b;return k.cors||Eb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cb[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Db[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cb[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fb=[],Gb=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fb.pop()||n.expando+"_"+cb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gb.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gb,"$1"+e):b.jsonp!==!1&&(b.url+=(db.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fb.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hb=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hb)return Hb.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ib=a.document.documentElement;function Jb(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jb(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ib;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ib})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jb(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=ya(k.pixelPosition,function(a,c){return c?(c=xa(a,b),va.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kb=a.jQuery,Lb=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lb),b&&a.jQuery===n&&(a.jQuery=Kb),n},typeof b===U&&(a.jQuery=a.$=n),n});
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js
deleted file mode 100644
index bf9eadef..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js
+++ /dev/null
@@ -1,103 +0,0 @@
1/*
2 * jQuery tinydot 0.2.0
3 *
4 * Copyright (c) Alexander Danilov
5 * modos189.ru
6 *
7 * Plugin website:
8 * tinydot.modos189.ru
9 *
10 * Licensed under the MIT license.
11 * http://en.wikipedia.org/wiki/MIT_License
12 */
13
14(function( $, undef )
15{
16 if ( $.fn.tinydot )
17 {
18 return;
19 }
20
21 $.fn.tinydot = function( o ) {
22
23 var $dot = this;
24 $dot.child = getChildOrDie($dot);
25 $dot.orgContent = $($dot.child).html();
26 ellipsis( $dot );
27
28 $dot.watch = function()
29 {
30 $(window).on('resize', function(){
31 if ( watchInt )
32 {
33 clearInterval( watchInt );
34 }
35 watchInt = setTimeout(
36 function()
37 {
38 reinitialize($dot);
39 }, 100
40 );
41 });
42
43 return $dot;
44 };
45
46 var opts = $.extend( true, {}, $.fn.tinydot.defaults, o ),
47 watchInt = null;
48
49 if ( opts.watch )
50 {
51 $dot.watch();
52 }
53 }
54
55 // public
56 $.fn.tinydot.defaults = {
57 'watch' : false
58 };
59
60 function getChildOrDie( $elem )
61 {
62 var childrens = $elem.children();
63 if (childrens.length == 0) {
64 // create children
65 var data = $($elem).html();
66 $elem.html('');
67 $elem.append('<span />');
68 return $elem.children('span').html(data);
69 } else {
70 return childrens[0];
71 }
72 }
73
74 function reinitialize( $elem )
75 {
76 $($elem.child).html($elem.orgContent);
77 ellipsis( $elem );
78 }
79
80 function ellipsis( $elem ) {
81 var divh=$($elem).height();
82 while ($($elem.child).outerHeight()>divh) {
83 $($elem.child).html(function (index, html) {
84 return html.replace(/\W*\s(\S)*$/, '...');
85 });
86 }
87 }
88
89})( jQuery );
90
91jQuery(document).ready(function($) {
92 //We only invoke jQuery.tinydot on elements that have dot-ellipsis class
93 $(".dot-ellipsis").each(function(){
94 //Checking if update on window resize required
95 var watch_window=$(this).hasClass("dot-resize-update");
96
97 //Invoking jQuery.tinydot
98 var x = new Object();
99 if (watch_window)
100 x.watch='window';
101 $(this).tinydot(x);
102 });
103});
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js
deleted file mode 100644
index 74754629..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js
+++ /dev/null
@@ -1 +0,0 @@
1!function(a,b){function c(b){var c=b.children();if(0==c.length){var d=a(b).html();return b.html(""),b.append("<span />"),b.children("span").html(d)}return c[0]}function d(b){a(b.child).html(b.orgContent),e(b)}function e(b){for(var c=a(b).height();a(b.child).outerHeight()>c;)a(b.child).html(function(a,b){return b.replace(/\W*\s(\S)*$/,"...")})}a.fn.tinydot||(a.fn.tinydot=function(b){var f=this;f.child=c(f),f.orgContent=a(f.child).html(),e(f),f.watch=function(){return a(window).on("resize",function(){h&&clearInterval(h),h=setTimeout(function(){d(f)},100)}),f};var g=a.extend(!0,{},a.fn.tinydot.defaults,b),h=null;g.watch&&f.watch()},a.fn.tinydot.defaults={watch:!1})}(jQuery),jQuery(document).ready(function(a){a(".dot-ellipsis").each(function(){var b=a(this).hasClass("dot-resize-update"),c=new Object;b&&(c.watch="window"),a(this).tinydot(c)})});
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/materialize.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/materialize.js
deleted file mode 100644
index b7242f6b..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/materialize.js
+++ /dev/null
@@ -1,6219 +0,0 @@
1/*!
2 * Materialize v0.97.1 (http://materializecss.com)
3 * Copyright 2014-2015 Materialize
4 * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
5 */
6/*
7 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
8 *
9 * Uses the built in easing capabilities added In jQuery 1.1
10 * to offer multiple easing options
11 *
12 * TERMS OF USE - jQuery Easing
13 *
14 * Open source under the BSD License.
15 *
16 * Copyright © 2008 George McGinley Smith
17 * All rights reserved.
18 *
19 * Redistribution and use in source and binary forms, with or without modification,
20 * are permitted provided that the following conditions are met:
21 *
22 * Redistributions of source code must retain the above copyright notice, this list of
23 * conditions and the following disclaimer.
24 * Redistributions in binary form must reproduce the above copyright notice, this list
25 * of conditions and the following disclaimer in the documentation and/or other materials
26 * provided with the distribution.
27 *
28 * Neither the name of the author nor the names of contributors may be used to endorse
29 * or promote products derived from this software without specific prior written permission.
30 *
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
32 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
33 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
34 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
35 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
36 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
37 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
38 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39 * OF THE POSSIBILITY OF SUCH DAMAGE.
40 *
41*/
42
43// t: current time, b: begInnIng value, c: change In value, d: duration
44jQuery.easing['jswing'] = jQuery.easing['swing'];
45
46jQuery.extend( jQuery.easing,
47{
48 def: 'easeOutQuad',
49 swing: function (x, t, b, c, d) {
50 //alert(jQuery.easing.default);
51 return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
52 },
53 easeInQuad: function (x, t, b, c, d) {
54 return c*(t/=d)*t + b;
55 },
56 easeOutQuad: function (x, t, b, c, d) {
57 return -c *(t/=d)*(t-2) + b;
58 },
59 easeInOutQuad: function (x, t, b, c, d) {
60 if ((t/=d/2) < 1) return c/2*t*t + b;
61 return -c/2 * ((--t)*(t-2) - 1) + b;
62 },
63 easeInCubic: function (x, t, b, c, d) {
64 return c*(t/=d)*t*t + b;
65 },
66 easeOutCubic: function (x, t, b, c, d) {
67 return c*((t=t/d-1)*t*t + 1) + b;
68 },
69 easeInOutCubic: function (x, t, b, c, d) {
70 if ((t/=d/2) < 1) return c/2*t*t*t + b;
71 return c/2*((t-=2)*t*t + 2) + b;
72 },
73 easeInQuart: function (x, t, b, c, d) {
74 return c*(t/=d)*t*t*t + b;
75 },
76 easeOutQuart: function (x, t, b, c, d) {
77 return -c * ((t=t/d-1)*t*t*t - 1) + b;
78 },
79 easeInOutQuart: function (x, t, b, c, d) {
80 if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
81 return -c/2 * ((t-=2)*t*t*t - 2) + b;
82 },
83 easeInQuint: function (x, t, b, c, d) {
84 return c*(t/=d)*t*t*t*t + b;
85 },
86 easeOutQuint: function (x, t, b, c, d) {
87 return c*((t=t/d-1)*t*t*t*t + 1) + b;
88 },
89 easeInOutQuint: function (x, t, b, c, d) {
90 if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
91 return c/2*((t-=2)*t*t*t*t + 2) + b;
92 },
93 easeInSine: function (x, t, b, c, d) {
94 return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
95 },
96 easeOutSine: function (x, t, b, c, d) {
97 return c * Math.sin(t/d * (Math.PI/2)) + b;
98 },
99 easeInOutSine: function (x, t, b, c, d) {
100 return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
101 },
102 easeInExpo: function (x, t, b, c, d) {
103 return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
104 },
105 easeOutExpo: function (x, t, b, c, d) {
106 return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
107 },
108 easeInOutExpo: function (x, t, b, c, d) {
109 if (t==0) return b;
110 if (t==d) return b+c;
111 if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
112 return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
113 },
114 easeInCirc: function (x, t, b, c, d) {
115 return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
116 },
117 easeOutCirc: function (x, t, b, c, d) {
118 return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
119 },
120 easeInOutCirc: function (x, t, b, c, d) {
121 if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
122 return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
123 },
124 easeInElastic: function (x, t, b, c, d) {
125 var s=1.70158;var p=0;var a=c;
126 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
127 if (a < Math.abs(c)) { a=c; var s=p/4; }
128 else var s = p/(2*Math.PI) * Math.asin (c/a);
129 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
130 },
131 easeOutElastic: function (x, t, b, c, d) {
132 var s=1.70158;var p=0;var a=c;
133 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
134 if (a < Math.abs(c)) { a=c; var s=p/4; }
135 else var s = p/(2*Math.PI) * Math.asin (c/a);
136 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
137 },
138 easeInOutElastic: function (x, t, b, c, d) {
139 var s=1.70158;var p=0;var a=c;
140 if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
141 if (a < Math.abs(c)) { a=c; var s=p/4; }
142 else var s = p/(2*Math.PI) * Math.asin (c/a);
143 if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
144 return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
145 },
146 easeInBack: function (x, t, b, c, d, s) {
147 if (s == undefined) s = 1.70158;
148 return c*(t/=d)*t*((s+1)*t - s) + b;
149 },
150 easeOutBack: function (x, t, b, c, d, s) {
151 if (s == undefined) s = 1.70158;
152 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
153 },
154 easeInOutBack: function (x, t, b, c, d, s) {
155 if (s == undefined) s = 1.70158;
156 if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
157 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
158 },
159 easeInBounce: function (x, t, b, c, d) {
160 return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
161 },
162 easeOutBounce: function (x, t, b, c, d) {
163 if ((t/=d) < (1/2.75)) {
164 return c*(7.5625*t*t) + b;
165 } else if (t < (2/2.75)) {
166 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
167 } else if (t < (2.5/2.75)) {
168 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
169 } else {
170 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
171 }
172 },
173 easeInOutBounce: function (x, t, b, c, d) {
174 if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
175 return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
176 }
177});
178
179/*
180 *
181 * TERMS OF USE - EASING EQUATIONS
182 *
183 * Open source under the BSD License.
184 *
185 * Copyright © 2001 Robert Penner
186 * All rights reserved.
187 *
188 * Redistribution and use in source and binary forms, with or without modification,
189 * are permitted provided that the following conditions are met:
190 *
191 * Redistributions of source code must retain the above copyright notice, this list of
192 * conditions and the following disclaimer.
193 * Redistributions in binary form must reproduce the above copyright notice, this list
194 * of conditions and the following disclaimer in the documentation and/or other materials
195 * provided with the distribution.
196 *
197 * Neither the name of the author nor the names of contributors may be used to endorse
198 * or promote products derived from this software without specific prior written permission.
199 *
200 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
201 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
202 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
203 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
204 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
205 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
206 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
207 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
208 * OF THE POSSIBILITY OF SUCH DAMAGE.
209 *
210 */; // Custom Easing
211 jQuery.extend( jQuery.easing,
212 {
213 easeInOutMaterial: function (x, t, b, c, d) {
214 if ((t/=d/2) < 1) return c/2*t*t + b;
215 return c/4*((t-=2)*t*t + 2) + b;
216 }
217 });
218
219;/*! VelocityJS.org (1.2.2). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */
220/*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */
221!function(e){function t(e){var t=e.length,r=$.type(e);return"function"===r||$.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===r||0===t||"number"==typeof t&&t>0&&t-1 in e}if(!e.jQuery){var $=function(e,t){return new $.fn.init(e,t)};$.isWindow=function(e){return null!=e&&e==e.window},$.type=function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?a[o.call(e)]||"object":typeof e},$.isArray=Array.isArray||function(e){return"array"===$.type(e)},$.isPlainObject=function(e){var t;if(!e||"object"!==$.type(e)||e.nodeType||$.isWindow(e))return!1;try{if(e.constructor&&!n.call(e,"constructor")&&!n.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}for(t in e);return void 0===t||n.call(e,t)},$.each=function(e,r,a){var n,o=0,i=e.length,s=t(e);if(a){if(s)for(;i>o&&(n=r.apply(e[o],a),n!==!1);o++);else for(o in e)if(n=r.apply(e[o],a),n===!1)break}else if(s)for(;i>o&&(n=r.call(e[o],o,e[o]),n!==!1);o++);else for(o in e)if(n=r.call(e[o],o,e[o]),n===!1)break;return e},$.data=function(e,t,a){if(void 0===a){var n=e[$.expando],o=n&&r[n];if(void 0===t)return o;if(o&&t in o)return o[t]}else if(void 0!==t){var n=e[$.expando]||(e[$.expando]=++$.uuid);return r[n]=r[n]||{},r[n][t]=a,a}},$.removeData=function(e,t){var a=e[$.expando],n=a&&r[a];n&&$.each(t,function(e,t){delete n[t]})},$.extend=function(){var e,t,r,a,n,o,i=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof i&&(u=i,i=arguments[s]||{},s++),"object"!=typeof i&&"function"!==$.type(i)&&(i={}),s===l&&(i=this,s--);l>s;s++)if(null!=(n=arguments[s]))for(a in n)e=i[a],r=n[a],i!==r&&(u&&r&&($.isPlainObject(r)||(t=$.isArray(r)))?(t?(t=!1,o=e&&$.isArray(e)?e:[]):o=e&&$.isPlainObject(e)?e:{},i[a]=$.extend(u,o,r)):void 0!==r&&(i[a]=r));return i},$.queue=function(e,r,a){function n(e,r){var a=r||[];return null!=e&&(t(Object(e))?!function(e,t){for(var r=+t.length,a=0,n=e.length;r>a;)e[n++]=t[a++];if(r!==r)for(;void 0!==t[a];)e[n++]=t[a++];return e.length=n,e}(a,"string"==typeof e?[e]:e):[].push.call(a,e)),a}if(e){r=(r||"fx")+"queue";var o=$.data(e,r);return a?(!o||$.isArray(a)?o=$.data(e,r,n(a)):o.push(a),o):o||[]}},$.dequeue=function(e,t){$.each(e.nodeType?[e]:e,function(e,r){t=t||"fx";var a=$.queue(r,t),n=a.shift();"inprogress"===n&&(n=a.shift()),n&&("fx"===t&&a.unshift("inprogress"),n.call(r,function(){$.dequeue(r,t)}))})},$.fn=$.prototype={init:function(e){if(e.nodeType)return this[0]=e,this;throw new Error("Not a DOM node.")},offset:function(){var t=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:t.top+(e.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:t.left+(e.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function e(){for(var e=this.offsetParent||document;e&&"html"===!e.nodeType.toLowerCase&&"static"===e.style.position;)e=e.offsetParent;return e||document}var t=this[0],e=e.apply(t),r=this.offset(),a=/^(?:body|html)$/i.test(e.nodeName)?{top:0,left:0}:$(e).offset();return r.top-=parseFloat(t.style.marginTop)||0,r.left-=parseFloat(t.style.marginLeft)||0,e.style&&(a.top+=parseFloat(e.style.borderTopWidth)||0,a.left+=parseFloat(e.style.borderLeftWidth)||0),{top:r.top-a.top,left:r.left-a.left}}};var r={};$.expando="velocity"+(new Date).getTime(),$.uuid=0;for(var a={},n=a.hasOwnProperty,o=a.toString,i="Boolean Number String Function Array Date RegExp Object Error".split(" "),s=0;s<i.length;s++)a["[object "+i[s]+"]"]=i[s].toLowerCase();$.fn.init.prototype=$.fn,e.Velocity={Utilities:$}}}(window),function(e){"object"==typeof module&&"object"==typeof module.exports?module.exports=e():"function"==typeof define&&define.amd?define(e):e()}(function(){return function(e,t,r,a){function n(e){for(var t=-1,r=e?e.length:0,a=[];++t<r;){var n=e[t];n&&a.push(n)}return a}function o(e){return g.isWrapped(e)?e=[].slice.call(e):g.isNode(e)&&(e=[e]),e}function i(e){var t=$.data(e,"velocity");return null===t?a:t}function s(e){return function(t){return Math.round(t*e)*(1/e)}}function l(e,r,a,n){function o(e,t){return 1-3*t+3*e}function i(e,t){return 3*t-6*e}function s(e){return 3*e}function l(e,t,r){return((o(t,r)*e+i(t,r))*e+s(t))*e}function u(e,t,r){return 3*o(t,r)*e*e+2*i(t,r)*e+s(t)}function c(t,r){for(var n=0;m>n;++n){var o=u(r,e,a);if(0===o)return r;var i=l(r,e,a)-t;r-=i/o}return r}function p(){for(var t=0;b>t;++t)w[t]=l(t*x,e,a)}function f(t,r,n){var o,i,s=0;do i=r+(n-r)/2,o=l(i,e,a)-t,o>0?n=i:r=i;while(Math.abs(o)>h&&++s<v);return i}function d(t){for(var r=0,n=1,o=b-1;n!=o&&w[n]<=t;++n)r+=x;--n;var i=(t-w[n])/(w[n+1]-w[n]),s=r+i*x,l=u(s,e,a);return l>=y?c(t,s):0==l?s:f(t,r,r+x)}function g(){V=!0,(e!=r||a!=n)&&p()}var m=4,y=.001,h=1e-7,v=10,b=11,x=1/(b-1),S="Float32Array"in t;if(4!==arguments.length)return!1;for(var P=0;4>P;++P)if("number"!=typeof arguments[P]||isNaN(arguments[P])||!isFinite(arguments[P]))return!1;e=Math.min(e,1),a=Math.min(a,1),e=Math.max(e,0),a=Math.max(a,0);var w=S?new Float32Array(b):new Array(b),V=!1,C=function(t){return V||g(),e===r&&a===n?t:0===t?0:1===t?1:l(d(t),r,n)};C.getControlPoints=function(){return[{x:e,y:r},{x:a,y:n}]};var T="generateBezier("+[e,r,a,n]+")";return C.toString=function(){return T},C}function u(e,t){var r=e;return g.isString(e)?v.Easings[e]||(r=!1):r=g.isArray(e)&&1===e.length?s.apply(null,e):g.isArray(e)&&2===e.length?b.apply(null,e.concat([t])):g.isArray(e)&&4===e.length?l.apply(null,e):!1,r===!1&&(r=v.Easings[v.defaults.easing]?v.defaults.easing:h),r}function c(e){if(e){var t=(new Date).getTime(),r=v.State.calls.length;r>1e4&&(v.State.calls=n(v.State.calls));for(var o=0;r>o;o++)if(v.State.calls[o]){var s=v.State.calls[o],l=s[0],u=s[2],f=s[3],d=!!f,m=null;f||(f=v.State.calls[o][3]=t-16);for(var y=Math.min((t-f)/u.duration,1),h=0,b=l.length;b>h;h++){var S=l[h],w=S.element;if(i(w)){var V=!1;if(u.display!==a&&null!==u.display&&"none"!==u.display){if("flex"===u.display){var C=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];$.each(C,function(e,t){x.setPropertyValue(w,"display",t)})}x.setPropertyValue(w,"display",u.display)}u.visibility!==a&&"hidden"!==u.visibility&&x.setPropertyValue(w,"visibility",u.visibility);for(var T in S)if("element"!==T){var k=S[T],A,F=g.isString(k.easing)?v.Easings[k.easing]:k.easing;if(1===y)A=k.endValue;else{var E=k.endValue-k.startValue;if(A=k.startValue+E*F(y,u,E),!d&&A===k.currentValue)continue}if(k.currentValue=A,"tween"===T)m=A;else{if(x.Hooks.registered[T]){var j=x.Hooks.getRoot(T),H=i(w).rootPropertyValueCache[j];H&&(k.rootPropertyValue=H)}var N=x.setPropertyValue(w,T,k.currentValue+(0===parseFloat(A)?"":k.unitType),k.rootPropertyValue,k.scrollData);x.Hooks.registered[T]&&(i(w).rootPropertyValueCache[j]=x.Normalizations.registered[j]?x.Normalizations.registered[j]("extract",null,N[1]):N[1]),"transform"===N[0]&&(V=!0)}}u.mobileHA&&i(w).transformCache.translate3d===a&&(i(w).transformCache.translate3d="(0px, 0px, 0px)",V=!0),V&&x.flushTransformCache(w)}}u.display!==a&&"none"!==u.display&&(v.State.calls[o][2].display=!1),u.visibility!==a&&"hidden"!==u.visibility&&(v.State.calls[o][2].visibility=!1),u.progress&&u.progress.call(s[1],s[1],y,Math.max(0,f+u.duration-t),f,m),1===y&&p(o)}}v.State.isTicking&&P(c)}function p(e,t){if(!v.State.calls[e])return!1;for(var r=v.State.calls[e][0],n=v.State.calls[e][1],o=v.State.calls[e][2],s=v.State.calls[e][4],l=!1,u=0,c=r.length;c>u;u++){var p=r[u].element;if(t||o.loop||("none"===o.display&&x.setPropertyValue(p,"display",o.display),"hidden"===o.visibility&&x.setPropertyValue(p,"visibility",o.visibility)),o.loop!==!0&&($.queue(p)[1]===a||!/\.velocityQueueEntryFlag/i.test($.queue(p)[1]))&&i(p)){i(p).isAnimating=!1,i(p).rootPropertyValueCache={};var f=!1;$.each(x.Lists.transforms3D,function(e,t){var r=/^scale/.test(t)?1:0,n=i(p).transformCache[t];i(p).transformCache[t]!==a&&new RegExp("^\\("+r+"[^.]").test(n)&&(f=!0,delete i(p).transformCache[t])}),o.mobileHA&&(f=!0,delete i(p).transformCache.translate3d),f&&x.flushTransformCache(p),x.Values.removeClass(p,"velocity-animating")}if(!t&&o.complete&&!o.loop&&u===c-1)try{o.complete.call(n,n)}catch(d){setTimeout(function(){throw d},1)}s&&o.loop!==!0&&s(n),i(p)&&o.loop===!0&&!t&&($.each(i(p).tweensContainer,function(e,t){/^rotate/.test(e)&&360===parseFloat(t.endValue)&&(t.endValue=0,t.startValue=360),/^backgroundPosition/.test(e)&&100===parseFloat(t.endValue)&&"%"===t.unitType&&(t.endValue=0,t.startValue=100)}),v(p,"reverse",{loop:!0,delay:o.delay})),o.queue!==!1&&$.dequeue(p,o.queue)}v.State.calls[e]=!1;for(var g=0,m=v.State.calls.length;m>g;g++)if(v.State.calls[g]!==!1){l=!0;break}l===!1&&(v.State.isTicking=!1,delete v.State.calls,v.State.calls=[])}var f=function(){if(r.documentMode)return r.documentMode;for(var e=7;e>4;e--){var t=r.createElement("div");if(t.innerHTML="<!--[if IE "+e+"]><span></span><![endif]-->",t.getElementsByTagName("span").length)return t=null,e}return a}(),d=function(){var e=0;return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(t){var r=(new Date).getTime(),a;return a=Math.max(0,16-(r-e)),e=r+a,setTimeout(function(){t(r+a)},a)}}(),g={isString:function(e){return"string"==typeof e},isArray:Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},isNode:function(e){return e&&e.nodeType},isNodeList:function(e){return"object"==typeof e&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(e))&&e.length!==a&&(0===e.length||"object"==typeof e[0]&&e[0].nodeType>0)},isWrapped:function(e){return e&&(e.jquery||t.Zepto&&t.Zepto.zepto.isZ(e))},isSVG:function(e){return t.SVGElement&&e instanceof t.SVGElement},isEmptyObject:function(e){for(var t in e)return!1;return!0}},$,m=!1;if(e.fn&&e.fn.jquery?($=e,m=!0):$=t.Velocity.Utilities,8>=f&&!m)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=f)return void(jQuery.fn.velocity=jQuery.fn.animate);var y=400,h="swing",v={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:t.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:r.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:$,Redirects:{},Easings:{},Promise:t.Promise,defaults:{queue:"",duration:y,easing:h,begin:a,complete:a,progress:a,display:a,visibility:a,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(e){$.data(e,"velocity",{isSVG:g.isSVG(e),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};t.pageYOffset!==a?(v.State.scrollAnchor=t,v.State.scrollPropertyLeft="pageXOffset",v.State.scrollPropertyTop="pageYOffset"):(v.State.scrollAnchor=r.documentElement||r.body.parentNode||r.body,v.State.scrollPropertyLeft="scrollLeft",v.State.scrollPropertyTop="scrollTop");var b=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,a){var n={x:t.x+a.dx*r,v:t.v+a.dv*r,tension:t.tension,friction:t.friction};return{dx:n.v,dv:e(n)}}function r(r,a){var n={dx:r.v,dv:e(r)},o=t(r,.5*a,n),i=t(r,.5*a,o),s=t(r,a,i),l=1/6*(n.dx+2*(o.dx+i.dx)+s.dx),u=1/6*(n.dv+2*(o.dv+i.dv)+s.dv);return r.x=r.x+l*a,r.v=r.v+u*a,r}return function a(e,t,n){var o={x:-1,v:0,tension:null,friction:null},i=[0],s=0,l=1e-4,u=.016,c,p,f;for(e=parseFloat(e)||500,t=parseFloat(t)||20,n=n||null,o.tension=e,o.friction=t,c=null!==n,c?(s=a(e,t),p=s/n*u):p=u;;)if(f=r(f||o,p),i.push(1+f.x),s+=16,!(Math.abs(f.x)>l&&Math.abs(f.v)>l))break;return c?function(e){return i[e*(i.length-1)|0]}:s}}();v.Easings={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},spring:function(e){return 1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e)}},$.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(e,t){v.Easings[t[0]]=l.apply(null,t[1])});var x=v.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var e=0;e<x.Lists.colors.length;e++){var t="color"===x.Lists.colors[e]?"0 0 0 1":"255 255 255 1";x.Hooks.templates[x.Lists.colors[e]]=["Red Green Blue Alpha",t]}var r,a,n;if(f)for(r in x.Hooks.templates){a=x.Hooks.templates[r],n=a[0].split(" ");var o=a[1].match(x.RegEx.valueSplit);"Color"===n[0]&&(n.push(n.shift()),o.push(o.shift()),x.Hooks.templates[r]=[n.join(" "),o.join(" ")])}for(r in x.Hooks.templates){a=x.Hooks.templates[r],n=a[0].split(" ");for(var e in n){var i=r+n[e],s=e;x.Hooks.registered[i]=[r,s]}}},getRoot:function(e){var t=x.Hooks.registered[e];return t?t[0]:e},cleanRootPropertyValue:function(e,t){return x.RegEx.valueUnwrap.test(t)&&(t=t.match(x.RegEx.valueUnwrap)[1]),x.Values.isCSSNullValue(t)&&(t=x.Hooks.templates[e][1]),t},extractValue:function(e,t){var r=x.Hooks.registered[e];if(r){var a=r[0],n=r[1];return t=x.Hooks.cleanRootPropertyValue(a,t),t.toString().match(x.RegEx.valueSplit)[n]}return t},injectValue:function(e,t,r){var a=x.Hooks.registered[e];if(a){var n=a[0],o=a[1],i,s;return r=x.Hooks.cleanRootPropertyValue(n,r),i=r.toString().match(x.RegEx.valueSplit),i[o]=t,s=i.join(" ")}return r}},Normalizations:{registered:{clip:function(e,t,r){switch(e){case"name":return"clip";case"extract":var a;return x.RegEx.wrappedValueAlreadyExtracted.test(r)?a=r:(a=r.toString().match(x.RegEx.valueUnwrap),a=a?a[1].replace(/,(\s+)?/g," "):r),a;case"inject":return"rect("+r+")"}},blur:function(e,t,r){switch(e){case"name":return v.State.isFirefox?"filter":"-webkit-filter";case"extract":var a=parseFloat(r);if(!a&&0!==a){var n=r.toString().match(/blur\(([0-9]+[A-z]+)\)/i);a=n?n[1]:0}return a;case"inject":return parseFloat(r)?"blur("+r+")":"none"}},opacity:function(e,t,r){if(8>=f)switch(e){case"name":return"filter";case"extract":var a=r.toString().match(/alpha\(opacity=(.*)\)/i);return r=a?a[1]/100:1;case"inject":return t.style.zoom=1,parseFloat(r)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(r),10)+")"}else switch(e){case"name":return"opacity";case"extract":return r;case"inject":return r}}},register:function(){9>=f||v.State.isGingerbread||(x.Lists.transformsBase=x.Lists.transformsBase.concat(x.Lists.transforms3D));for(var e=0;e<x.Lists.transformsBase.length;e++)!function(){var t=x.Lists.transformsBase[e];x.Normalizations.registered[t]=function(e,r,n){switch(e){case"name":return"transform";case"extract":return i(r)===a||i(r).transformCache[t]===a?/^scale/i.test(t)?1:0:i(r).transformCache[t].replace(/[()]/g,"");case"inject":var o=!1;switch(t.substr(0,t.length-1)){case"translate":o=!/(%|px|em|rem|vw|vh|\d)$/i.test(n);break;case"scal":case"scale":v.State.isAndroid&&i(r).transformCache[t]===a&&1>n&&(n=1),o=!/(\d)$/i.test(n);break;case"skew":o=!/(deg|\d)$/i.test(n);break;case"rotate":o=!/(deg|\d)$/i.test(n)}return o||(i(r).transformCache[t]="("+n+")"),i(r).transformCache[t]}}}();for(var e=0;e<x.Lists.colors.length;e++)!function(){var t=x.Lists.colors[e];x.Normalizations.registered[t]=function(e,r,n){switch(e){case"name":return t;case"extract":var o;if(x.RegEx.wrappedValueAlreadyExtracted.test(n))o=n;else{var i,s={black:"rgb(0, 0, 0)",blue:"rgb(0, 0, 255)",gray:"rgb(128, 128, 128)",green:"rgb(0, 128, 0)",red:"rgb(255, 0, 0)",white:"rgb(255, 255, 255)"};/^[A-z]+$/i.test(n)?i=s[n]!==a?s[n]:s.black:x.RegEx.isHex.test(n)?i="rgb("+x.Values.hexToRgb(n).join(" ")+")":/^rgba?\(/i.test(n)||(i=s.black),o=(i||n).toString().match(x.RegEx.valueUnwrap)[1].replace(/,(\s+)?/g," ")}return 8>=f||3!==o.split(" ").length||(o+=" 1"),o;case"inject":return 8>=f?4===n.split(" ").length&&(n=n.split(/\s+/).slice(0,3).join(" ")):3===n.split(" ").length&&(n+=" 1"),(8>=f?"rgb":"rgba")+"("+n.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(e){return e.replace(/-(\w)/g,function(e,t){return t.toUpperCase()})},SVGAttribute:function(e){var t="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(f||v.State.isAndroid&&!v.State.isChrome)&&(t+="|transform"),new RegExp("^("+t+")$","i").test(e)},prefixCheck:function(e){if(v.State.prefixMatches[e])return[v.State.prefixMatches[e],!0];for(var t=["","Webkit","Moz","ms","O"],r=0,a=t.length;a>r;r++){var n;if(n=0===r?e:t[r]+e.replace(/^\w/,function(e){return e.toUpperCase()}),g.isString(v.State.prefixElement.style[n]))return v.State.prefixMatches[e]=n,[n,!0]}return[e,!1]}},Values:{hexToRgb:function(e){var t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,a;return e=e.replace(t,function(e,t,r,a){return t+t+r+r+a+a}),a=r.exec(e),a?[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]:[0,0,0]},isCSSNullValue:function(e){return 0==e||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(e)},getUnitType:function(e){return/^(rotate|skew)/i.test(e)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e)?"":"px"},getDisplayType:function(e){var t=e&&e.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t)?"inline":/^(li)$/i.test(t)?"list-item":/^(tr)$/i.test(t)?"table-row":/^(table)$/i.test(t)?"table":/^(tbody)$/i.test(t)?"table-row-group":"block"},addClass:function(e,t){e.classList?e.classList.add(t):e.className+=(e.className.length?" ":"")+t},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.toString().replace(new RegExp("(^|\\s)"+t.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(e,r,n,o){function s(e,r){function n(){u&&x.setPropertyValue(e,"display","none")}var l=0;if(8>=f)l=$.css(e,r);else{var u=!1;if(/^(width|height)$/.test(r)&&0===x.getPropertyValue(e,"display")&&(u=!0,x.setPropertyValue(e,"display",x.Values.getDisplayType(e))),!o){if("height"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var c=e.offsetHeight-(parseFloat(x.getPropertyValue(e,"borderTopWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderBottomWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingTop"))||0)-(parseFloat(x.getPropertyValue(e,"paddingBottom"))||0);return n(),c}if("width"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var p=e.offsetWidth-(parseFloat(x.getPropertyValue(e,"borderLeftWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderRightWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingLeft"))||0)-(parseFloat(x.getPropertyValue(e,"paddingRight"))||0);return n(),p}}var d;d=i(e)===a?t.getComputedStyle(e,null):i(e).computedStyle?i(e).computedStyle:i(e).computedStyle=t.getComputedStyle(e,null),"borderColor"===r&&(r="borderTopColor"),l=9===f&&"filter"===r?d.getPropertyValue(r):d[r],(""===l||null===l)&&(l=e.style[r]),n()}if("auto"===l&&/^(top|right|bottom|left)$/i.test(r)){var g=s(e,"position");("fixed"===g||"absolute"===g&&/top|left/i.test(r))&&(l=$(e).position()[r]+"px")}return l}var l;if(x.Hooks.registered[r]){var u=r,c=x.Hooks.getRoot(u);n===a&&(n=x.getPropertyValue(e,x.Names.prefixCheck(c)[0])),x.Normalizations.registered[c]&&(n=x.Normalizations.registered[c]("extract",e,n)),l=x.Hooks.extractValue(u,n)}else if(x.Normalizations.registered[r]){var p,d;p=x.Normalizations.registered[r]("name",e),"transform"!==p&&(d=s(e,x.Names.prefixCheck(p)[0]),x.Values.isCSSNullValue(d)&&x.Hooks.templates[r]&&(d=x.Hooks.templates[r][1])),l=x.Normalizations.registered[r]("extract",e,d)}if(!/^[\d-]/.test(l))if(i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r))if(/^(height|width)$/i.test(r))try{l=e.getBBox()[r]}catch(g){l=0}else l=e.getAttribute(r);else l=s(e,x.Names.prefixCheck(r)[0]);return x.Values.isCSSNullValue(l)&&(l=0),v.debug>=2&&console.log("Get "+r+": "+l),l},setPropertyValue:function(e,r,a,n,o){var s=r;if("scroll"===r)o.container?o.container["scroll"+o.direction]=a:"Left"===o.direction?t.scrollTo(a,o.alternateValue):t.scrollTo(o.alternateValue,a);else if(x.Normalizations.registered[r]&&"transform"===x.Normalizations.registered[r]("name",e))x.Normalizations.registered[r]("inject",e,a),s="transform",a=i(e).transformCache[r];else{if(x.Hooks.registered[r]){var l=r,u=x.Hooks.getRoot(r);n=n||x.getPropertyValue(e,u),a=x.Hooks.injectValue(l,a,n),r=u}if(x.Normalizations.registered[r]&&(a=x.Normalizations.registered[r]("inject",e,a),r=x.Normalizations.registered[r]("name",e)),s=x.Names.prefixCheck(r)[0],8>=f)try{e.style[s]=a}catch(c){v.debug&&console.log("Browser does not support ["+a+"] for ["+s+"]")}else i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r)?e.setAttribute(r,a):e.style[s]=a;v.debug>=2&&console.log("Set "+r+" ("+s+"): "+a)}return[s,a]},flushTransformCache:function(e){function t(t){return parseFloat(x.getPropertyValue(e,t))}var r="";if((f||v.State.isAndroid&&!v.State.isChrome)&&i(e).isSVG){var a={translate:[t("translateX"),t("translateY")],skewX:[t("skewX")],skewY:[t("skewY")],scale:1!==t("scale")?[t("scale"),t("scale")]:[t("scaleX"),t("scaleY")],rotate:[t("rotateZ"),0,0]};$.each(i(e).transformCache,function(e){/^translate/i.test(e)?e="translate":/^scale/i.test(e)?e="scale":/^rotate/i.test(e)&&(e="rotate"),a[e]&&(r+=e+"("+a[e].join(" ")+") ",delete a[e])})}else{var n,o;$.each(i(e).transformCache,function(t){return n=i(e).transformCache[t],"transformPerspective"===t?(o=n,!0):(9===f&&"rotateZ"===t&&(t="rotate"),void(r+=t+n+" "))}),o&&(r="perspective"+o+" "+r)}x.setPropertyValue(e,"transform",r)}};x.Hooks.register(),x.Normalizations.register(),v.hook=function(e,t,r){var n=a;return e=o(e),$.each(e,function(e,o){if(i(o)===a&&v.init(o),r===a)n===a&&(n=v.CSS.getPropertyValue(o,t));else{var s=v.CSS.setPropertyValue(o,t,r);"transform"===s[0]&&v.CSS.flushTransformCache(o),n=s}}),n};var S=function(){function e(){return l?T.promise||null:f}function n(){function e(e){function p(e,t){var r=a,i=a,s=a;return g.isArray(e)?(r=e[0],!g.isArray(e[1])&&/^[\d-]/.test(e[1])||g.isFunction(e[1])||x.RegEx.isHex.test(e[1])?s=e[1]:(g.isString(e[1])&&!x.RegEx.isHex.test(e[1])||g.isArray(e[1]))&&(i=t?e[1]:u(e[1],o.duration),e[2]!==a&&(s=e[2]))):r=e,t||(i=i||o.easing),g.isFunction(r)&&(r=r.call(n,w,P)),g.isFunction(s)&&(s=s.call(n,w,P)),[r||0,i,s]}function f(e,t){var r,a;return a=(t||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(e){return r=e,""}),r||(r=x.Values.getUnitType(e)),[a,r]}function d(){var e={myParent:n.parentNode||r.body,position:x.getPropertyValue(n,"position"),fontSize:x.getPropertyValue(n,"fontSize")},a=e.position===N.lastPosition&&e.myParent===N.lastParent,o=e.fontSize===N.lastFontSize;N.lastParent=e.myParent,N.lastPosition=e.position,N.lastFontSize=e.fontSize;var s=100,l={};if(o&&a)l.emToPx=N.lastEmToPx,l.percentToPxWidth=N.lastPercentToPxWidth,l.percentToPxHeight=N.lastPercentToPxHeight;else{var u=i(n).isSVG?r.createElementNS("http://www.w3.org/2000/svg","rect"):r.createElement("div");v.init(u),e.myParent.appendChild(u),$.each(["overflow","overflowX","overflowY"],function(e,t){v.CSS.setPropertyValue(u,t,"hidden")}),v.CSS.setPropertyValue(u,"position",e.position),v.CSS.setPropertyValue(u,"fontSize",e.fontSize),v.CSS.setPropertyValue(u,"boxSizing","content-box"),$.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(e,t){v.CSS.setPropertyValue(u,t,s+"%")}),v.CSS.setPropertyValue(u,"paddingLeft",s+"em"),l.percentToPxWidth=N.lastPercentToPxWidth=(parseFloat(x.getPropertyValue(u,"width",null,!0))||1)/s,l.percentToPxHeight=N.lastPercentToPxHeight=(parseFloat(x.getPropertyValue(u,"height",null,!0))||1)/s,l.emToPx=N.lastEmToPx=(parseFloat(x.getPropertyValue(u,"paddingLeft"))||1)/s,e.myParent.removeChild(u)}return null===N.remToPx&&(N.remToPx=parseFloat(x.getPropertyValue(r.body,"fontSize"))||16),null===N.vwToPx&&(N.vwToPx=parseFloat(t.innerWidth)/100,N.vhToPx=parseFloat(t.innerHeight)/100),l.remToPx=N.remToPx,l.vwToPx=N.vwToPx,l.vhToPx=N.vhToPx,v.debug>=1&&console.log("Unit ratios: "+JSON.stringify(l),n),l}if(o.begin&&0===w)try{o.begin.call(m,m)}catch(y){setTimeout(function(){throw y},1)}if("scroll"===k){var S=/^x$/i.test(o.axis)?"Left":"Top",V=parseFloat(o.offset)||0,C,A,F;o.container?g.isWrapped(o.container)||g.isNode(o.container)?(o.container=o.container[0]||o.container,C=o.container["scroll"+S],F=C+$(n).position()[S.toLowerCase()]+V):o.container=null:(C=v.State.scrollAnchor[v.State["scrollProperty"+S]],A=v.State.scrollAnchor[v.State["scrollProperty"+("Left"===S?"Top":"Left")]],F=$(n).offset()[S.toLowerCase()]+V),s={scroll:{rootPropertyValue:!1,startValue:C,currentValue:C,endValue:F,unitType:"",easing:o.easing,scrollData:{container:o.container,direction:S,alternateValue:A}},element:n},v.debug&&console.log("tweensContainer (scroll): ",s.scroll,n)}else if("reverse"===k){if(!i(n).tweensContainer)return void $.dequeue(n,o.queue);"none"===i(n).opts.display&&(i(n).opts.display="auto"),"hidden"===i(n).opts.visibility&&(i(n).opts.visibility="visible"),i(n).opts.loop=!1,i(n).opts.begin=null,i(n).opts.complete=null,b.easing||delete o.easing,b.duration||delete o.duration,o=$.extend({},i(n).opts,o);var E=$.extend(!0,{},i(n).tweensContainer);for(var j in E)if("element"!==j){var H=E[j].startValue;E[j].startValue=E[j].currentValue=E[j].endValue,E[j].endValue=H,g.isEmptyObject(b)||(E[j].easing=o.easing),v.debug&&console.log("reverse tweensContainer ("+j+"): "+JSON.stringify(E[j]),n)}s=E}else if("start"===k){var E;i(n).tweensContainer&&i(n).isAnimating===!0&&(E=i(n).tweensContainer),$.each(h,function(e,t){if(RegExp("^"+x.Lists.colors.join("$|^")+"$").test(e)){var r=p(t,!0),n=r[0],o=r[1],i=r[2];if(x.RegEx.isHex.test(n)){for(var s=["Red","Green","Blue"],l=x.Values.hexToRgb(n),u=i?x.Values.hexToRgb(i):a,c=0;c<s.length;c++){var f=[l[c]];o&&f.push(o),u!==a&&f.push(u[c]),h[e+s[c]]=f}delete h[e]}}});for(var R in h){var O=p(h[R]),z=O[0],q=O[1],M=O[2];R=x.Names.camelCase(R);var I=x.Hooks.getRoot(R),B=!1;if(i(n).isSVG||"tween"===I||x.Names.prefixCheck(I)[1]!==!1||x.Normalizations.registered[I]!==a){(o.display!==a&&null!==o.display&&"none"!==o.display||o.visibility!==a&&"hidden"!==o.visibility)&&/opacity|filter/.test(R)&&!M&&0!==z&&(M=0),o._cacheValues&&E&&E[R]?(M===a&&(M=E[R].endValue+E[R].unitType),B=i(n).rootPropertyValueCache[I]):x.Hooks.registered[R]?M===a?(B=x.getPropertyValue(n,I),M=x.getPropertyValue(n,R,B)):B=x.Hooks.templates[I][1]:M===a&&(M=x.getPropertyValue(n,R));var W,G,D,X=!1;if(W=f(R,M),M=W[0],D=W[1],W=f(R,z),z=W[0].replace(/^([+-\/*])=/,function(e,t){return X=t,""}),G=W[1],M=parseFloat(M)||0,z=parseFloat(z)||0,"%"===G&&(/^(fontSize|lineHeight)$/.test(R)?(z/=100,G="em"):/^scale/.test(R)?(z/=100,G=""):/(Red|Green|Blue)$/i.test(R)&&(z=z/100*255,G="")),/[\/*]/.test(X))G=D;else if(D!==G&&0!==M)if(0===z)G=D;else{l=l||d();var Y=/margin|padding|left|right|width|text|word|letter/i.test(R)||/X$/.test(R)||"x"===R?"x":"y";switch(D){case"%":M*="x"===Y?l.percentToPxWidth:l.percentToPxHeight;break;case"px":break;default:M*=l[D+"ToPx"]}switch(G){case"%":M*=1/("x"===Y?l.percentToPxWidth:l.percentToPxHeight);break;case"px":break;default:M*=1/l[G+"ToPx"]}}switch(X){case"+":z=M+z;break;case"-":z=M-z;break;case"*":z=M*z;break;case"/":z=M/z}s[R]={rootPropertyValue:B,startValue:M,currentValue:M,endValue:z,unitType:G,easing:q},v.debug&&console.log("tweensContainer ("+R+"): "+JSON.stringify(s[R]),n)}else v.debug&&console.log("Skipping ["+I+"] due to a lack of browser support.")}s.element=n}s.element&&(x.Values.addClass(n,"velocity-animating"),L.push(s),""===o.queue&&(i(n).tweensContainer=s,i(n).opts=o),i(n).isAnimating=!0,w===P-1?(v.State.calls.push([L,m,o,null,T.resolver]),v.State.isTicking===!1&&(v.State.isTicking=!0,c())):w++)}var n=this,o=$.extend({},v.defaults,b),s={},l;switch(i(n)===a&&v.init(n),parseFloat(o.delay)&&o.queue!==!1&&$.queue(n,o.queue,function(e){v.velocityQueueEntryFlag=!0,i(n).delayTimer={setTimeout:setTimeout(e,parseFloat(o.delay)),next:e}}),o.duration.toString().toLowerCase()){case"fast":o.duration=200;break;case"normal":o.duration=y;break;case"slow":o.duration=600;break;default:o.duration=parseFloat(o.duration)||1}v.mock!==!1&&(v.mock===!0?o.duration=o.delay=1:(o.duration*=parseFloat(v.mock)||1,o.delay*=parseFloat(v.mock)||1)),o.easing=u(o.easing,o.duration),o.begin&&!g.isFunction(o.begin)&&(o.begin=null),o.progress&&!g.isFunction(o.progress)&&(o.progress=null),o.complete&&!g.isFunction(o.complete)&&(o.complete=null),o.display!==a&&null!==o.display&&(o.display=o.display.toString().toLowerCase(),"auto"===o.display&&(o.display=v.CSS.Values.getDisplayType(n))),o.visibility!==a&&null!==o.visibility&&(o.visibility=o.visibility.toString().toLowerCase()),o.mobileHA=o.mobileHA&&v.State.isMobile&&!v.State.isGingerbread,o.queue===!1?o.delay?setTimeout(e,o.delay):e():$.queue(n,o.queue,function(t,r){return r===!0?(T.promise&&T.resolver(m),!0):(v.velocityQueueEntryFlag=!0,void e(t))}),""!==o.queue&&"fx"!==o.queue||"inprogress"===$.queue(n)[0]||$.dequeue(n)}var s=arguments[0]&&(arguments[0].p||$.isPlainObject(arguments[0].properties)&&!arguments[0].properties.names||g.isString(arguments[0].properties)),l,f,d,m,h,b;if(g.isWrapped(this)?(l=!1,d=0,m=this,f=this):(l=!0,d=1,m=s?arguments[0].elements||arguments[0].e:arguments[0]),m=o(m)){s?(h=arguments[0].properties||arguments[0].p,b=arguments[0].options||arguments[0].o):(h=arguments[d],b=arguments[d+1]);var P=m.length,w=0;if(!/^(stop|finish)$/i.test(h)&&!$.isPlainObject(b)){var V=d+1;b={};for(var C=V;C<arguments.length;C++)g.isArray(arguments[C])||!/^(fast|normal|slow)$/i.test(arguments[C])&&!/^\d/.test(arguments[C])?g.isString(arguments[C])||g.isArray(arguments[C])?b.easing=arguments[C]:g.isFunction(arguments[C])&&(b.complete=arguments[C]):b.duration=arguments[C]}var T={promise:null,resolver:null,rejecter:null};l&&v.Promise&&(T.promise=new v.Promise(function(e,t){T.resolver=e,T.rejecter=t}));var k;switch(h){case"scroll":k="scroll";break;case"reverse":k="reverse";break;case"finish":case"stop":$.each(m,function(e,t){i(t)&&i(t).delayTimer&&(clearTimeout(i(t).delayTimer.setTimeout),i(t).delayTimer.next&&i(t).delayTimer.next(),delete i(t).delayTimer)});var A=[];return $.each(v.State.calls,function(e,t){t&&$.each(t[1],function(r,n){var o=b===a?"":b;return o===!0||t[2].queue===o||b===a&&t[2].queue===!1?void $.each(m,function(r,a){a===n&&((b===!0||g.isString(b))&&($.each($.queue(a,g.isString(b)?b:""),function(e,t){g.isFunction(t)&&t(null,!0)}),$.queue(a,g.isString(b)?b:"",[])),"stop"===h?(i(a)&&i(a).tweensContainer&&o!==!1&&$.each(i(a).tweensContainer,function(e,t){t.endValue=t.currentValue
222}),A.push(e)):"finish"===h&&(t[2].duration=1))}):!0})}),"stop"===h&&($.each(A,function(e,t){p(t,!0)}),T.promise&&T.resolver(m)),e();default:if(!$.isPlainObject(h)||g.isEmptyObject(h)){if(g.isString(h)&&v.Redirects[h]){var F=$.extend({},b),E=F.duration,j=F.delay||0;return F.backwards===!0&&(m=$.extend(!0,[],m).reverse()),$.each(m,function(e,t){parseFloat(F.stagger)?F.delay=j+parseFloat(F.stagger)*e:g.isFunction(F.stagger)&&(F.delay=j+F.stagger.call(t,e,P)),F.drag&&(F.duration=parseFloat(E)||(/^(callout|transition)/.test(h)?1e3:y),F.duration=Math.max(F.duration*(F.backwards?1-e/P:(e+1)/P),.75*F.duration,200)),v.Redirects[h].call(t,t,F||{},e,P,m,T.promise?T:a)}),e()}var H="Velocity: First argument ("+h+") was not a property map, a known action, or a registered redirect. Aborting.";return T.promise?T.rejecter(new Error(H)):console.log(H),e()}k="start"}var N={lastParent:null,lastPosition:null,lastFontSize:null,lastPercentToPxWidth:null,lastPercentToPxHeight:null,lastEmToPx:null,remToPx:null,vwToPx:null,vhToPx:null},L=[];$.each(m,function(e,t){g.isNode(t)&&n.call(t)});var F=$.extend({},v.defaults,b),R;if(F.loop=parseInt(F.loop),R=2*F.loop-1,F.loop)for(var O=0;R>O;O++){var z={delay:F.delay,progress:F.progress};O===R-1&&(z.display=F.display,z.visibility=F.visibility,z.complete=F.complete),S(m,"reverse",z)}return e()}};v=$.extend(S,v),v.animate=S;var P=t.requestAnimationFrame||d;return v.State.isMobile||r.hidden===a||r.addEventListener("visibilitychange",function(){r.hidden?(P=function(e){return setTimeout(function(){e(!0)},16)},c()):P=t.requestAnimationFrame||d}),e.Velocity=v,e!==t&&(e.fn.velocity=S,e.fn.velocity.defaults=v.defaults),$.each(["Down","Up"],function(e,t){v.Redirects["slide"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u=l.begin,c=l.complete,p={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},f={};l.display===a&&(l.display="Down"===t?"inline"===v.CSS.Values.getDisplayType(e)?"inline-block":"block":"none"),l.begin=function(){u&&u.call(i,i);for(var r in p){f[r]=e.style[r];var a=v.CSS.getPropertyValue(e,r);p[r]="Down"===t?[a,0]:[0,a]}f.overflow=e.style.overflow,e.style.overflow="hidden"},l.complete=function(){for(var t in f)e.style[t]=f[t];c&&c.call(i,i),s&&s.resolver(i)},v(e,p,l)}}),$.each(["In","Out"],function(e,t){v.Redirects["fade"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u={opacity:"In"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display="In"===t?"auto":"none"),v(this,u,l)}}),v}(window.jQuery||window.Zepto||window,window,document)});;!function(a,b,c,d){"use strict";function k(a,b,c){return setTimeout(q(a,c),b)}function l(a,b,c){return Array.isArray(a)?(m(a,c[b],c),!0):!1}function m(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e in a)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function n(a,b,c){for(var e=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;return a}function o(a,b){return n(a,b,!0)}function p(a,b,c){var e,d=b.prototype;e=a.prototype=Object.create(d),e.constructor=a,e._super=d,c&&n(e,c)}function q(a,b){return function(){return a.apply(b,arguments)}}function r(a,b){return typeof a==g?a.apply(b?b[0]||d:d,b):a}function s(a,b){return a===d?b:a}function t(a,b,c){m(x(b),function(b){a.addEventListener(b,c,!1)})}function u(a,b,c){m(x(b),function(b){a.removeEventListener(b,c,!1)})}function v(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function w(a,b){return a.indexOf(b)>-1}function x(a){return a.trim().split(/\s+/g)}function y(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)return d;d++}return-1}function z(a){return Array.prototype.slice.call(a,0)}function A(a,b,c){for(var d=[],e=[],f=0;f<a.length;){var g=b?a[f][b]:a[f];y(e,g)<0&&d.push(a[f]),e[f]=g,f++}return c&&(d=b?d.sort(function(a,c){return a[b]>c[b]}):d.sort()),d}function B(a,b){for(var c,f,g=b[0].toUpperCase()+b.slice(1),h=0;h<e.length;){if(c=e[h],f=c?c+g:b,f in a)return f;h++}return d}function D(){return C++}function E(a){var b=a.ownerDocument;return b.defaultView||b.parentWindow}function ab(a,b){var c=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){r(a.options.enable,[a])&&c.handler(b)},this.init()}function bb(a){var b,c=a.options.inputClass;return b=c?c:H?wb:I?Eb:G?Gb:rb,new b(a,cb)}function cb(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&O&&0===d-e,g=b&(Q|R)&&0===d-e;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,db(a,c),a.emit("hammer.input",c),a.recognize(c),a.session.prevInput=c}function db(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=gb(b)),e>1&&!c.firstMultiple?c.firstMultiple=gb(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=hb(d);b.timeStamp=j(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=lb(h,i),b.distance=kb(h,i),eb(c,b),b.offsetDirection=jb(b.deltaX,b.deltaY),b.scale=g?nb(g.pointers,d):1,b.rotation=g?mb(g.pointers,d):0,fb(c,b);var k=a.element;v(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function eb(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===O||f.eventType===Q)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function fb(a,b){var f,g,h,j,c=a.lastInterval||b,e=b.timeStamp-c.timeStamp;if(b.eventType!=R&&(e>N||c.velocity===d)){var k=c.deltaX-b.deltaX,l=c.deltaY-b.deltaY,m=ib(e,k,l);g=m.x,h=m.y,f=i(m.x)>i(m.y)?m.x:m.y,j=jb(k,l),a.lastInterval=b}else f=c.velocity,g=c.velocityX,h=c.velocityY,j=c.direction;b.velocity=f,b.velocityX=g,b.velocityY=h,b.direction=j}function gb(a){for(var b=[],c=0;c<a.pointers.length;)b[c]={clientX:h(a.pointers[c].clientX),clientY:h(a.pointers[c].clientY)},c++;return{timeStamp:j(),pointers:b,center:hb(b),deltaX:a.deltaX,deltaY:a.deltaY}}function hb(a){var b=a.length;if(1===b)return{x:h(a[0].clientX),y:h(a[0].clientY)};for(var c=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:h(c/b),y:h(d/b)}}function ib(a,b,c){return{x:b/a||0,y:c/a||0}}function jb(a,b){return a===b?S:i(a)>=i(b)?a>0?T:U:b>0?V:W}function kb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function lb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function mb(a,b){return lb(b[1],b[0],_)-lb(a[1],a[0],_)}function nb(a,b){return kb(b[0],b[1],_)/kb(a[0],a[1],_)}function rb(){this.evEl=pb,this.evWin=qb,this.allow=!0,this.pressed=!1,ab.apply(this,arguments)}function wb(){this.evEl=ub,this.evWin=vb,ab.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Ab(){this.evTarget=yb,this.evWin=zb,this.started=!1,ab.apply(this,arguments)}function Bb(a,b){var c=z(a.touches),d=z(a.changedTouches);return b&(Q|R)&&(c=A(c.concat(d),"identifier",!0)),[c,d]}function Eb(){this.evTarget=Db,this.targetIds={},ab.apply(this,arguments)}function Fb(a,b){var c=z(a.touches),d=this.targetIds;if(b&(O|P)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=z(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return v(a.target,i)}),b===O)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Q|R)&&delete d[g[e].identifier],e++;return h.length?[A(f.concat(h),"identifier",!0),h]:void 0}function Gb(){ab.apply(this,arguments);var a=q(this.handler,this);this.touch=new Eb(this.manager,a),this.mouse=new rb(this.manager,a)}function Pb(a,b){this.manager=a,this.set(b)}function Qb(a){if(w(a,Mb))return Mb;var b=w(a,Nb),c=w(a,Ob);return b&&c?Nb+" "+Ob:b||c?b?Nb:Ob:w(a,Lb)?Lb:Kb}function Yb(a){this.id=D(),this.manager=null,this.options=o(a||{},this.defaults),this.options.enable=s(this.options.enable,!0),this.state=Rb,this.simultaneous={},this.requireFail=[]}function Zb(a){return a&Wb?"cancel":a&Ub?"end":a&Tb?"move":a&Sb?"start":""}function $b(a){return a==W?"down":a==V?"up":a==T?"left":a==U?"right":""}function _b(a,b){var c=b.manager;return c?c.get(a):a}function ac(){Yb.apply(this,arguments)}function bc(){ac.apply(this,arguments),this.pX=null,this.pY=null}function cc(){ac.apply(this,arguments)}function dc(){Yb.apply(this,arguments),this._timer=null,this._input=null}function ec(){ac.apply(this,arguments)}function fc(){ac.apply(this,arguments)}function gc(){Yb.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function hc(a,b){return b=b||{},b.recognizers=s(b.recognizers,hc.defaults.preset),new kc(a,b)}function kc(a,b){b=b||{},this.options=o(b,hc.defaults),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.element=a,this.input=bb(this),this.touchAction=new Pb(this,this.options.touchAction),lc(this,!0),m(b.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function lc(a,b){var c=a.element;m(a.options.cssProps,function(a,d){c.style[B(c.style,d)]=b?a:""})}function mc(a,c){var d=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var e=["","webkit","moz","MS","ms","o"],f=b.createElement("div"),g="function",h=Math.round,i=Math.abs,j=Date.now,C=1,F=/mobile|tablet|ip(ad|hone|od)|android/i,G="ontouchstart"in a,H=B(a,"PointerEvent")!==d,I=G&&F.test(navigator.userAgent),J="touch",K="pen",L="mouse",M="kinect",N=25,O=1,P=2,Q=4,R=8,S=1,T=2,U=4,V=8,W=16,X=T|U,Y=V|W,Z=X|Y,$=["x","y"],_=["clientX","clientY"];ab.prototype={handler:function(){},init:function(){this.evEl&&t(this.element,this.evEl,this.domHandler),this.evTarget&&t(this.target,this.evTarget,this.domHandler),this.evWin&&t(E(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&u(this.element,this.evEl,this.domHandler),this.evTarget&&u(this.target,this.evTarget,this.domHandler),this.evWin&&u(E(this.element),this.evWin,this.domHandler)}};var ob={mousedown:O,mousemove:P,mouseup:Q},pb="mousedown",qb="mousemove mouseup";p(rb,ab,{handler:function(a){var b=ob[a.type];b&O&&0===a.button&&(this.pressed=!0),b&P&&1!==a.which&&(b=Q),this.pressed&&this.allow&&(b&Q&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:L,srcEvent:a}))}});var sb={pointerdown:O,pointermove:P,pointerup:Q,pointercancel:R,pointerout:R},tb={2:J,3:K,4:L,5:M},ub="pointerdown",vb="pointermove pointerup pointercancel";a.MSPointerEvent&&(ub="MSPointerDown",vb="MSPointerMove MSPointerUp MSPointerCancel"),p(wb,ab,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace("ms",""),e=sb[d],f=tb[a.pointerType]||a.pointerType,g=f==J,h=y(b,a.pointerId,"pointerId");e&O&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Q|R)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var xb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},yb="touchstart",zb="touchstart touchmove touchend touchcancel";p(Ab,ab,{handler:function(a){var b=xb[a.type];if(b===O&&(this.started=!0),this.started){var c=Bb.call(this,a,b);b&(Q|R)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}});var Cb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},Db="touchstart touchmove touchend touchcancel";p(Eb,ab,{handler:function(a){var b=Cb[a.type],c=Fb.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}),p(Gb,ab,{handler:function(a,b,c){var d=c.pointerType==J,e=c.pointerType==L;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Q|R)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Hb=B(f.style,"touchAction"),Ib=Hb!==d,Jb="compute",Kb="auto",Lb="manipulation",Mb="none",Nb="pan-x",Ob="pan-y";Pb.prototype={set:function(a){a==Jb&&(a=this.compute()),Ib&&(this.manager.element.style[Hb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return m(this.manager.recognizers,function(b){r(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),Qb(a.join(" "))},preventDefaults:function(a){if(!Ib){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return b.preventDefault(),void 0;var d=this.actions,e=w(d,Mb),f=w(d,Ob),g=w(d,Nb);return e||f&&c&X||g&&c&Y?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var Rb=1,Sb=2,Tb=4,Ub=8,Vb=Ub,Wb=16,Xb=32;Yb.prototype={defaults:{},set:function(a){return n(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(l(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=_b(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return l(a,"dropRecognizeWith",this)?this:(a=_b(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(l(a,"requireFailure",this))return this;var b=this.requireFail;return a=_b(a,this),-1===y(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(l(a,"dropRequireFailure",this))return this;a=_b(a,this);var b=y(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function d(d){b.manager.emit(b.options.event+(d?Zb(c):""),a)}var b=this,c=this.state;Ub>c&&d(!0),d(),c>=Ub&&d(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):(this.state=Xb,void 0)},canEmit:function(){for(var a=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(Xb|Rb)))return!1;a++}return!0},recognize:function(a){var b=n({},a);return r(this.options.enable,[this,b])?(this.state&(Vb|Wb|Xb)&&(this.state=Rb),this.state=this.process(b),this.state&(Sb|Tb|Ub|Wb)&&this.tryEmit(b),void 0):(this.reset(),this.state=Xb,void 0)},process:function(){},getTouchAction:function(){},reset:function(){}},p(ac,Yb,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(Sb|Tb),e=this.attrTest(a);return d&&(c&R||!e)?b|Wb:d||e?c&Q?b|Ub:b&Sb?b|Tb:Sb:Xb}}),p(bc,ac,{defaults:{event:"pan",threshold:10,pointers:1,direction:Z},getTouchAction:function(){var a=this.options.direction,b=[];return a&X&&b.push(Ob),a&Y&&b.push(Nb),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&X?(e=0===f?S:0>f?T:U,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?S:0>g?V:W,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return ac.prototype.attrTest.call(this,a)&&(this.state&Sb||!(this.state&Sb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),p(cc,ac,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&Sb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),p(dc,Yb,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[Kb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,e=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Q|R)&&!e)this.reset();else if(a.eventType&O)this.reset(),this._timer=k(function(){this.state=Vb,this.tryEmit()},b.time,this);else if(a.eventType&Q)return Vb;return Xb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===Vb&&(a&&a.eventType&Q?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=j(),this.manager.emit(this.options.event,this._input)))}}),p(ec,ac,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&Sb)}}),p(fc,ac,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:X|Y,pointers:1},getTouchAction:function(){return bc.prototype.getTouchAction.call(this)},attrTest:function(a){var c,b=this.options.direction;return b&(X|Y)?c=a.velocity:b&X?c=a.velocityX:b&Y&&(c=a.velocityY),this._super.attrTest.call(this,a)&&b&a.direction&&a.distance>this.options.threshold&&i(c)>this.options.velocity&&a.eventType&Q},emit:function(a){var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),p(gc,Yb,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[Lb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,e=a.deltaTime<b.time;if(this.reset(),a.eventType&O&&0===this.count)return this.failTimeout();if(d&&e&&c){if(a.eventType!=Q)return this.failTimeout();var f=this.pTime?a.timeStamp-this.pTime<b.interval:!0,g=!this.pCenter||kb(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,g&&f?this.count+=1:this.count=1,this._input=a;var h=this.count%b.taps;if(0===h)return this.hasRequireFailures()?(this._timer=k(function(){this.state=Vb,this.tryEmit()},b.interval,this),Sb):Vb}return Xb},failTimeout:function(){return this._timer=k(function(){this.state=Xb},this.options.interval,this),Xb},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==Vb&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),hc.VERSION="2.0.4",hc.defaults={domEvents:!1,touchAction:Jb,enable:!0,inputTarget:null,inputClass:null,preset:[[ec,{enable:!1}],[cc,{enable:!1},["rotate"]],[fc,{direction:X}],[bc,{direction:X},["swipe"]],[gc],[gc,{event:"doubletap",taps:2},["tap"]],[dc]],cssProps:{userSelect:"default",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};var ic=1,jc=2;kc.prototype={set:function(a){return n(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?jc:ic},recognize:function(a){var b=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);var c,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&Vb)&&(e=b.curRecognizer=null);for(var f=0;f<d.length;)c=d[f],b.stopped===jc||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(Sb|Tb|Ub)&&(e=b.curRecognizer=c),f++}},get:function(a){if(a instanceof Yb)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(l(a,"add",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(l(a,"remove",this))return this;var b=this.recognizers;return a=this.get(a),b.splice(y(b,a),1),this.touchAction.update(),this},on:function(a,b){var c=this.handlers;return m(x(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this},off:function(a,b){var c=this.handlers;return m(x(a),function(a){b?c[a].splice(y(c[a],b),1):delete c[a]}),this},emit:function(a,b){this.options.domEvents&&mc(a,b);var c=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&lc(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},n(hc,{INPUT_START:O,INPUT_MOVE:P,INPUT_END:Q,INPUT_CANCEL:R,STATE_POSSIBLE:Rb,STATE_BEGAN:Sb,STATE_CHANGED:Tb,STATE_ENDED:Ub,STATE_RECOGNIZED:Vb,STATE_CANCELLED:Wb,STATE_FAILED:Xb,DIRECTION_NONE:S,DIRECTION_LEFT:T,DIRECTION_RIGHT:U,DIRECTION_UP:V,DIRECTION_DOWN:W,DIRECTION_HORIZONTAL:X,DIRECTION_VERTICAL:Y,DIRECTION_ALL:Z,Manager:kc,Input:ab,TouchAction:Pb,TouchInput:Eb,MouseInput:rb,PointerEventInput:wb,TouchMouseInput:Gb,SingleTouchInput:Ab,Recognizer:Yb,AttrRecognizer:ac,Tap:gc,Pan:bc,Swipe:fc,Pinch:cc,Rotate:ec,Press:dc,on:t,off:u,each:m,merge:o,extend:n,inherit:p,bindFn:q,prefixed:B}),typeof define==g&&define.amd?define(function(){return hc}):"undefined"!=typeof module&&module.exports?module.exports=hc:a[c]=hc}(window,document,"Hammer");;(function(factory) {
223 if (typeof define === 'function' && define.amd) {
224 define(['jquery', 'hammerjs'], factory);
225 } else if (typeof exports === 'object') {
226 factory(require('jquery'), require('hammerjs'));
227 } else {
228 factory(jQuery, Hammer);
229 }
230}(function($, Hammer) {
231 function hammerify(el, options) {
232 var $el = $(el);
233 if(!$el.data("hammer")) {
234 $el.data("hammer", new Hammer($el[0], options));
235 }
236 }
237
238 $.fn.hammer = function(options) {
239 return this.each(function() {
240 hammerify(this, options);
241 });
242 };
243
244 // extend the emit method to also trigger jQuery events
245 Hammer.Manager.prototype.emit = (function(originalEmit) {
246 return function(type, data) {
247 originalEmit.call(this, type, data);
248 $(this.element).trigger({
249 type: type,
250 gesture: data
251 });
252 };
253 })(Hammer.Manager.prototype.emit);
254}));
255;window.Materialize = {};
256
257// Unique ID
258Materialize.guid = (function() {
259 function s4() {
260 return Math.floor((1 + Math.random()) * 0x10000)
261 .toString(16)
262 .substring(1);
263 }
264 return function() {
265 return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
266 s4() + '-' + s4() + s4() + s4();
267 };
268})();
269
270Materialize.elementOrParentIsFixed = function(element) {
271 var $element = $(element);
272 var $checkElements = $element.add($element.parents());
273 var isFixed = false;
274 $checkElements.each(function(){
275 if ($(this).css("position") === "fixed") {
276 isFixed = true;
277 return false;
278 }
279 });
280 return isFixed;
281};
282
283// Velocity has conflicts when loaded with jQuery, this will check for it
284var Vel;
285if ($) {
286 Vel = $.Velocity;
287}
288else {
289 Vel = Velocity;
290}
291;(function ($) {
292 $.fn.collapsible = function(options) {
293 var defaults = {
294 accordion: undefined
295 };
296
297 options = $.extend(defaults, options);
298
299
300 return this.each(function() {
301
302 var $this = $(this);
303
304 var $panel_headers = $(this).find('> li > .collapsible-header');
305
306 var collapsible_type = $this.data("collapsible");
307
308 // Turn off any existing event handlers
309 $this.off('click.collapse', '.collapsible-header');
310 $panel_headers.off('click.collapse');
311
312
313 /****************
314 Helper Functions
315 ****************/
316
317 // Accordion Open
318 function accordionOpen(object) {
319 $panel_headers = $this.find('> li > .collapsible-header');
320 if (object.hasClass('active')) {
321 object.parent().addClass('active');
322 }
323 else {
324 object.parent().removeClass('active');
325 }
326 if (object.parent().hasClass('active')){
327 object.siblings('.collapsible-body').stop(true,false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
328 }
329 else{
330 object.siblings('.collapsible-body').stop(true,false).slideUp({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
331 }
332
333 $panel_headers.not(object).removeClass('active').parent().removeClass('active');
334 $panel_headers.not(object).parent().children('.collapsible-body').stop(true,false).slideUp(
335 {
336 duration: 350,
337 easing: "easeOutQuart",
338 queue: false,
339 complete:
340 function() {
341 $(this).css('height', '');
342 }
343 });
344 }
345
346 // Expandable Open
347 function expandableOpen(object) {
348 if (object.hasClass('active')) {
349 object.parent().addClass('active');
350 }
351 else {
352 object.parent().removeClass('active');
353 }
354 if (object.parent().hasClass('active')){
355 object.siblings('.collapsible-body').stop(true,false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
356 }
357 else{
358 object.siblings('.collapsible-body').stop(true,false).slideUp({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
359 }
360 }
361
362 /**
363 * Check if object is children of panel header
364 * @param {Object} object Jquery object
365 * @return {Boolean} true if it is children
366 */
367 function isChildrenOfPanelHeader(object) {
368
369 var panelHeader = getPanelHeader(object);
370
371 return panelHeader.length > 0;
372 }
373
374 /**
375 * Get panel header from a children element
376 * @param {Object} object Jquery object
377 * @return {Object} panel header object
378 */
379 function getPanelHeader(object) {
380
381 return object.closest('li > .collapsible-header');
382 }
383
384 /***** End Helper Functions *****/
385
386
387
388 if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { // Handle Accordion
389 // Add click handler to only direct collapsible header children
390 $panel_headers = $this.find('> li > .collapsible-header');
391 $panel_headers.on('click.collapse', function (e) {
392 var element = $(e.target);
393
394 if (isChildrenOfPanelHeader(element)) {
395 element = getPanelHeader(element);
396 }
397
398 element.toggleClass('active');
399 accordionOpen(element);
400 });
401 // Open first active
402 accordionOpen($panel_headers.filter('.active').first());
403 }
404 else { // Handle Expandables
405 $panel_headers.each(function () {
406 // Add click handler to only direct collapsible header children
407 $(this).on('click.collapse', function (e) {
408 var element = $(e.target);
409 if (isChildrenOfPanelHeader(element)) {
410 element = getPanelHeader(element);
411 }
412 element.toggleClass('active');
413 expandableOpen(element);
414 });
415 // Open any bodies that have the active class
416 if ($(this).hasClass('active')) {
417 expandableOpen($(this));
418 }
419
420 });
421 }
422
423 });
424 };
425
426 $(document).ready(function(){
427 $('.collapsible').collapsible();
428 });
429}( jQuery ));;(function ($) {
430
431 // Add posibility to scroll to selected option
432 // usefull for select for example
433 $.fn.scrollTo = function(elem) {
434 $(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem).offset().top);
435 return this;
436 };
437
438 $.fn.dropdown = function (option) {
439 var defaults = {
440 inDuration: 300,
441 outDuration: 225,
442 constrain_width: true, // Constrains width of dropdown to the activator
443 hover: false,
444 gutter: 0, // Spacing from edge
445 belowOrigin: false,
446 alignment: 'left'
447 };
448
449 this.each(function(){
450 var origin = $(this);
451 var options = $.extend({}, defaults, option);
452
453 // Dropdown menu
454 var activates = $("#"+ origin.attr('data-activates'));
455
456 function updateOptions() {
457 if (origin.data('induration') !== undefined)
458 options.inDuration = origin.data('inDuration');
459 if (origin.data('outduration') !== undefined)
460 options.outDuration = origin.data('outDuration');
461 if (origin.data('constrainwidth') !== undefined)
462 options.constrain_width = origin.data('constrainwidth');
463 if (origin.data('hover') !== undefined)
464 options.hover = origin.data('hover');
465 if (origin.data('gutter') !== undefined)
466 options.gutter = origin.data('gutter');
467 if (origin.data('beloworigin') !== undefined)
468 options.belowOrigin = origin.data('beloworigin');
469 if (origin.data('alignment') !== undefined)
470 options.alignment = origin.data('alignment');
471 }
472
473 updateOptions();
474
475 // Attach dropdown to its activator
476 origin.after(activates);
477
478 /*
479 Helper function to position and resize dropdown.
480 Used in hover and click handler.
481 */
482 function placeDropdown() {
483 // Check html data attributes
484 updateOptions();
485
486 // Set Dropdown state
487 activates.addClass('active');
488
489 // Constrain width
490 if (options.constrain_width === true) {
491 activates.css('width', origin.outerWidth());
492 }
493 else {
494 activates.css('white-space', 'nowrap');
495 }
496 var offset = 0;
497 if (options.belowOrigin === true) {
498 offset = origin.height();
499 }
500
501 // Offscreen detection
502 var offsetLeft = origin.offset().left;
503 var activatesLeft, width_difference, gutter_spacing;
504 if (offsetLeft + activates.innerWidth() > $(window).width()) {
505 options.alignment = 'right';
506 }
507 else if (offsetLeft - activates.innerWidth() + origin.innerWidth() < 0) {
508 options.alignment = 'left';
509 }
510
511 // Handle edge alignment
512 if (options.alignment === 'left') {
513 width_difference = 0;
514 gutter_spacing = options.gutter;
515 activatesLeft = origin.position().left + width_difference + gutter_spacing;
516
517 // Position dropdown
518 activates.css({ left: activatesLeft });
519 }
520 else if (options.alignment === 'right') {
521 var offsetRight = $(window).width() - offsetLeft - origin.innerWidth();
522 width_difference = 0;
523 gutter_spacing = options.gutter;
524 activatesLeft = ( $(window).width() - origin.position().left - origin.innerWidth() ) + gutter_spacing;
525
526 // Position dropdown
527 activates.css({ right: activatesLeft });
528 }
529 // Position dropdown
530 activates.css({
531 position: 'absolute',
532 top: origin.position().top + offset,
533 });
534
535
536
537 // Show dropdown
538 activates.stop(true, true).css('opacity', 0)
539 .slideDown({
540 queue: false,
541 duration: options.inDuration,
542 easing: 'easeOutCubic',
543 complete: function() {
544 $(this).css('height', '');
545 }
546 })
547 .animate( {opacity: 1}, {queue: false, duration: options.inDuration, easing: 'easeOutSine'});
548 }
549
550 function hideDropdown() {
551 activates.fadeOut(options.outDuration);
552 activates.removeClass('active');
553 }
554
555 // Hover
556 if (options.hover) {
557 var open = false;
558 origin.unbind('click.' + origin.attr('id'));
559 // Hover handler to show dropdown
560 origin.on('mouseenter', function(e){ // Mouse over
561 if (open === false) {
562 placeDropdown();
563 open = true;
564 }
565 });
566 origin.on('mouseleave', function(e){
567 // If hover on origin then to something other than dropdown content, then close
568 var toEl = e.toElement || e.relatedTarget; // added browser compatibility for target element
569 if(!$(toEl).closest('.dropdown-content').is(activates)) {
570 activates.stop(true, true);
571 hideDropdown();
572 open = false;
573 }
574 });
575
576 activates.on('mouseleave', function(e){ // Mouse out
577 var toEl = e.toElement || e.relatedTarget;
578 if(!$(toEl).closest('.dropdown-button').is(origin)) {
579 activates.stop(true, true);
580 hideDropdown();
581 open = false;
582 }
583 });
584
585 // Click
586 } else {
587
588 // Click handler to show dropdown
589 origin.unbind('click.' + origin.attr('id'));
590 origin.bind('click.'+origin.attr('id'), function(e){
591
592 if ( origin[0] == e.currentTarget && ($(e.target).closest('.dropdown-content').length === 0) ) {
593 e.preventDefault(); // Prevents button click from moving window
594 placeDropdown();
595
596 }
597 // If origin is clicked and menu is open, close menu
598 else {
599 if (origin.hasClass('active')) {
600 hideDropdown();
601 $(document).unbind('click.' + activates.attr('id'));
602 }
603 }
604 // If menu open, add click close handler to document
605 if (activates.hasClass('active')) {
606 $(document).bind('click.'+ activates.attr('id'), function (e) {
607 if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length > 0) ) {
608 hideDropdown();
609 $(document).unbind('click.' + activates.attr('id'));
610 }
611 });
612 }
613 });
614
615 } // End else
616
617 // Listen to open and close event - useful for select component
618 origin.on('open', placeDropdown);
619 origin.on('close', hideDropdown);
620
621
622 });
623 }; // End dropdown plugin
624
625 $(document).ready(function(){
626 $('.dropdown-button').dropdown();
627 });
628}( jQuery ));
629;(function($) {
630 var _stack = 0,
631 _lastID = 0,
632 _generateID = function() {
633 _lastID++;
634 return 'materialize-lean-overlay-' + _lastID;
635 };
636
637 $.fn.extend({
638 openModal: function(options) {
639
640 $('body').css('overflow', 'hidden');
641
642 var defaults = {
643 opacity: 0.5,
644 in_duration: 350,
645 out_duration: 250,
646 ready: undefined,
647 complete: undefined,
648 dismissible: true,
649 starting_top: '4%'
650 },
651 overlayID = _generateID(),
652 $modal = $(this),
653 $overlay = $('<div class="lean-overlay"></div>'),
654 lStack = (++_stack);
655
656 // Store a reference of the overlay
657 $overlay.attr('id', overlayID).css('z-index', 1000 + lStack * 2);
658 $modal.data('overlay-id', overlayID).css('z-index', 1000 + lStack * 2 + 1);
659
660 $("body").append($overlay);
661
662 // Override defaults
663 options = $.extend(defaults, options);
664
665 if (options.dismissible) {
666 $overlay.click(function() {
667 $modal.closeModal(options);
668 });
669 // Return on ESC
670 $(document).on('keyup.leanModal' + overlayID, function(e) {
671 if (e.keyCode === 27) { // ESC key
672 $modal.closeModal(options);
673 }
674 });
675 }
676
677 $modal.find(".modal-close").on('click.close', function(e) {
678 $modal.closeModal(options);
679 });
680
681 $overlay.css({ display : "block", opacity : 0 });
682
683 $modal.css({
684 display : "block",
685 opacity: 0
686 });
687
688 $overlay.velocity({opacity: options.opacity}, {duration: options.in_duration, queue: false, ease: "easeOutCubic"});
689 $modal.data('associated-overlay', $overlay[0]);
690
691 // Define Bottom Sheet animation
692 if ($modal.hasClass('bottom-sheet')) {
693 $modal.velocity({bottom: "0", opacity: 1}, {
694 duration: options.in_duration,
695 queue: false,
696 ease: "easeOutCubic",
697 // Handle modal ready callback
698 complete: function() {
699 if (typeof(options.ready) === "function") {
700 options.ready();
701 }
702 }
703 });
704 }
705 else {
706 $.Velocity.hook($modal, "scaleX", 0.7);
707 $modal.css({ top: options.starting_top });
708 $modal.velocity({top: "10%", opacity: 1, scaleX: '1'}, {
709 duration: options.in_duration,
710 queue: false,
711 ease: "easeOutCubic",
712 // Handle modal ready callback
713 complete: function() {
714 if (typeof(options.ready) === "function") {
715 options.ready();
716 }
717 }
718 });
719 }
720
721
722 }
723 });
724
725 $.fn.extend({
726 closeModal: function(options) {
727 var defaults = {
728 out_duration: 250,
729 complete: undefined
730 },
731 $modal = $(this),
732 overlayID = $modal.data('overlay-id'),
733 $overlay = $('#' + overlayID);
734
735 options = $.extend(defaults, options);
736
737 // Disable scrolling
738 $('body').css('overflow', '');
739
740 $modal.find('.modal-close').off('click.close');
741 $(document).off('keyup.leanModal' + overlayID);
742
743 $overlay.velocity( { opacity: 0}, {duration: options.out_duration, queue: false, ease: "easeOutQuart"});
744
745
746 // Define Bottom Sheet animation
747 if ($modal.hasClass('bottom-sheet')) {
748 $modal.velocity({bottom: "-100%", opacity: 0}, {
749 duration: options.out_duration,
750 queue: false,
751 ease: "easeOutCubic",
752 // Handle modal ready callback
753 complete: function() {
754 $overlay.css({display:"none"});
755
756 // Call complete callback
757 if (typeof(options.complete) === "function") {
758 options.complete();
759 }
760 $overlay.remove();
761 _stack--;
762 }
763 });
764 }
765 else {
766 $modal.velocity(
767 { top: options.starting_top, opacity: 0, scaleX: 0.7}, {
768 duration: options.out_duration,
769 complete:
770 function() {
771
772 $(this).css('display', 'none');
773 // Call complete callback
774 if (typeof(options.complete) === "function") {
775 options.complete();
776 }
777 $overlay.remove();
778 _stack--;
779 }
780 }
781 );
782 }
783 }
784 });
785
786 $.fn.extend({
787 leanModal: function(option) {
788 return this.each(function() {
789
790 var defaults = {
791 starting_top: '4%'
792 },
793 // Override defaults
794 options = $.extend(defaults, option);
795
796 // Close Handlers
797 $(this).click(function(e) {
798 options.starting_top = ($(this).offset().top - $(window).scrollTop()) /1.15;
799 var modal_id = $(this).attr("href") || '#' + $(this).data('target');
800 $(modal_id).openModal(options);
801 e.preventDefault();
802 }); // done set on click
803 }); // done return
804 }
805 });
806})(jQuery);
807;(function ($) {
808
809 $.fn.materialbox = function () {
810
811 return this.each(function() {
812
813 if ($(this).hasClass('initialized')) {
814 return;
815 }
816
817 $(this).addClass('initialized');
818
819 var overlayActive = false;
820 var doneAnimating = true;
821 var inDuration = 275;
822 var outDuration = 200;
823 var origin = $(this);
824 var placeholder = $('<div></div>').addClass('material-placeholder');
825 var originalWidth = 0;
826 var originalHeight = 0;
827 origin.wrap(placeholder);
828
829
830 origin.on('click', function(){
831 var placeholder = origin.parent('.material-placeholder');
832 var windowWidth = window.innerWidth;
833 var windowHeight = window.innerHeight;
834 var originalWidth = origin.width();
835 var originalHeight = origin.height();
836
837
838 // If already modal, return to original
839 if (doneAnimating === false) {
840 returnToOriginal();
841 return false;
842 }
843 else if (overlayActive && doneAnimating===true) {
844 returnToOriginal();
845 return false;
846 }
847
848
849 // Set states
850 doneAnimating = false;
851 origin.addClass('active');
852 overlayActive = true;
853
854 // Set positioning for placeholder
855
856 placeholder.css({
857 width: placeholder[0].getBoundingClientRect().width,
858 height: placeholder[0].getBoundingClientRect().height,
859 position: 'relative',
860 top: 0,
861 left: 0
862 });
863
864
865
866 // Set css on origin
867 origin.css({position: 'absolute', 'z-index': 1000})
868 .data('width', originalWidth)
869 .data('height', originalHeight);
870
871 // Add overlay
872 var overlay = $('<div id="materialbox-overlay"></div>')
873 .css({
874 opacity: 0
875 })
876 .click(function(){
877 if (doneAnimating === true)
878 returnToOriginal();
879 });
880 // Animate Overlay
881 $('body').append(overlay);
882 overlay.velocity({opacity: 1}, {duration: inDuration, queue: false, easing: 'easeOutQuad'}
883 );
884
885
886 // Add and animate caption if it exists
887 if (origin.data('caption') !== "") {
888 var $photo_caption = $('<div class="materialbox-caption"></div>');
889 $photo_caption.text(origin.data('caption'));
890 $('body').append($photo_caption);
891 $photo_caption.css({ "display": "inline" });
892 $photo_caption.velocity({opacity: 1}, {duration: inDuration, queue: false, easing: 'easeOutQuad'});
893 }
894
895
896
897 // Resize Image
898 var ratio = 0;
899 var widthPercent = originalWidth / windowWidth;
900 var heightPercent = originalHeight / windowHeight;
901 var newWidth = 0;
902 var newHeight = 0;
903
904 if (widthPercent > heightPercent) {
905 ratio = originalHeight / originalWidth;
906 newWidth = windowWidth * 0.9;
907 newHeight = windowWidth * 0.9 * ratio;
908 }
909 else {
910 ratio = originalWidth / originalHeight;
911 newWidth = (windowHeight * 0.9) * ratio;
912 newHeight = windowHeight * 0.9;
913 }
914
915 // Animate image + set z-index
916 if(origin.hasClass('responsive-img')) {
917 origin.velocity({'max-width': newWidth, 'width': originalWidth}, {duration: 0, queue: false,
918 complete: function(){
919 origin.css({left: 0, top: 0})
920 .velocity(
921 {
922 height: newHeight,
923 width: newWidth,
924 left: $(document).scrollLeft() + windowWidth/2 - origin.parent('.material-placeholder').offset().left - newWidth/2,
925 top: $(document).scrollTop() + windowHeight/2 - origin.parent('.material-placeholder').offset().top - newHeight/ 2
926 },
927 {
928 duration: inDuration,
929 queue: false,
930 easing: 'easeOutQuad',
931 complete: function(){doneAnimating = true;}
932 }
933 );
934 } // End Complete
935 }); // End Velocity
936 }
937 else {
938 origin.css('left', 0)
939 .css('top', 0)
940 .velocity(
941 {
942 height: newHeight,
943 width: newWidth,
944 left: $(document).scrollLeft() + windowWidth/2 - origin.parent('.material-placeholder').offset().left - newWidth/2,
945 top: $(document).scrollTop() + windowHeight/2 - origin.parent('.material-placeholder').offset().top - newHeight/ 2
946 },
947 {
948 duration: inDuration,
949 queue: false,
950 easing: 'easeOutQuad',
951 complete: function(){doneAnimating = true;}
952 }
953 ); // End Velocity
954 }
955
956 }); // End origin on click
957
958
959 // Return on scroll
960 $(window).scroll(function() {
961 if (overlayActive ) {
962 returnToOriginal();
963 }
964 });
965
966 // Return on ESC
967 $(document).keyup(function(e) {
968
969 if (e.keyCode === 27 && doneAnimating === true) { // ESC key
970 if (overlayActive) {
971 returnToOriginal();
972 }
973 }
974 });
975
976
977 // This function returns the modaled image to the original spot
978 function returnToOriginal() {
979
980 doneAnimating = false;
981
982 var placeholder = origin.parent('.material-placeholder');
983 var windowWidth = window.innerWidth;
984 var windowHeight = window.innerHeight;
985 var originalWidth = origin.data('width');
986 var originalHeight = origin.data('height');
987
988 origin.velocity("stop", true);
989 $('#materialbox-overlay').velocity("stop", true);
990 $('.materialbox-caption').velocity("stop", true);
991
992
993 $('#materialbox-overlay').velocity({opacity: 0}, {
994 duration: outDuration, // Delay prevents animation overlapping
995 queue: false, easing: 'easeOutQuad',
996 complete: function(){
997 // Remove Overlay
998 overlayActive = false;
999 $(this).remove();
1000 }
1001 });
1002
1003 // Resize Image
1004 origin.velocity(
1005 {
1006 width: originalWidth,
1007 height: originalHeight,
1008 left: 0,
1009 top: 0
1010 },
1011 {
1012 duration: outDuration,
1013 queue: false, easing: 'easeOutQuad'
1014 }
1015 );
1016
1017 // Remove Caption + reset css settings on image
1018 $('.materialbox-caption').velocity({opacity: 0}, {
1019 duration: outDuration, // Delay prevents animation overlapping
1020 queue: false, easing: 'easeOutQuad',
1021 complete: function(){
1022 placeholder.css({
1023 height: '',
1024 width: '',
1025 position: '',
1026 top: '',
1027 left: ''
1028 });
1029
1030 origin.css({
1031 height: '',
1032 top: '',
1033 left: '',
1034 width: '',
1035 'max-width': '',
1036 position: '',
1037 'z-index': ''
1038 });
1039
1040 // Remove class
1041 origin.removeClass('active');
1042 doneAnimating = true;
1043 $(this).remove();
1044 }
1045 });
1046
1047 }
1048 });
1049};
1050
1051$(document).ready(function(){
1052 $('.materialboxed').materialbox();
1053});
1054
1055}( jQuery ));
1056;(function ($) {
1057
1058 $.fn.parallax = function () {
1059 var window_width = $(window).width();
1060 // Parallax Scripts
1061 return this.each(function(i) {
1062 var $this = $(this);
1063 $this.addClass('parallax');
1064
1065 function updateParallax(initial) {
1066 var container_height;
1067 if (window_width < 601) {
1068 container_height = ($this.height() > 0) ? $this.height() : $this.children("img").height();
1069 }
1070 else {
1071 container_height = ($this.height() > 0) ? $this.height() : 500;
1072 }
1073 var $img = $this.children("img").first();
1074 var img_height = $img.height();
1075 var parallax_dist = img_height - container_height;
1076 var bottom = $this.offset().top + container_height;
1077 var top = $this.offset().top;
1078 var scrollTop = $(window).scrollTop();
1079 var windowHeight = window.innerHeight;
1080 var windowBottom = scrollTop + windowHeight;
1081 var percentScrolled = (windowBottom - top) / (container_height + windowHeight);
1082 var parallax = Math.round((parallax_dist * percentScrolled));
1083
1084 if (initial) {
1085 $img.css('display', 'block');
1086 }
1087 if ((bottom > scrollTop) && (top < (scrollTop + windowHeight))) {
1088 $img.css('transform', "translate3D(-50%," + parallax + "px, 0)");
1089 }
1090
1091 }
1092
1093 // Wait for image load
1094 $this.children("img").one("load", function() {
1095 updateParallax(true);
1096 }).each(function() {
1097 if(this.complete) $(this).load();
1098 });
1099
1100 $(window).scroll(function() {
1101 window_width = $(window).width();
1102 updateParallax(false);
1103 });
1104
1105 $(window).resize(function() {
1106 window_width = $(window).width();
1107 updateParallax(false);
1108 });
1109
1110 });
1111
1112 };
1113}( jQuery ));;(function ($) {
1114
1115 var methods = {
1116 init : function() {
1117 return this.each(function() {
1118
1119 // For each set of tabs, we want to keep track of
1120 // which tab is active and its associated content
1121 var $this = $(this),
1122 window_width = $(window).width();
1123
1124 $this.width('100%');
1125 var $active, $content, $links = $this.find('li.tab a'),
1126 $tabs_width = $this.width(),
1127 $tab_width = $this.find('li').first().outerWidth(),
1128 $index = 0;
1129
1130 // If the location.hash matches one of the links, use that as the active tab.
1131 $active = $($links.filter('[href="'+location.hash+'"]'));
1132
1133 // If no match is found, use the first link or any with class 'active' as the initial active tab.
1134 if ($active.length === 0) {
1135 $active = $(this).find('li.tab a.active').first();
1136 }
1137 if ($active.length === 0) {
1138 $active = $(this).find('li.tab a').first();
1139 }
1140
1141 $active.addClass('active');
1142 $index = $links.index($active);
1143 if ($index < 0) {
1144 $index = 0;
1145 }
1146
1147 $content = $($active[0].hash);
1148
1149 // append indicator then set indicator width to tab width
1150 $this.append('<div class="indicator"></div>');
1151 var $indicator = $this.find('.indicator');
1152 if ($this.is(":visible")) {
1153 $indicator.css({"right": $tabs_width - (($index + 1) * $tab_width)});
1154 $indicator.css({"left": $index * $tab_width});
1155 }
1156 $(window).resize(function () {
1157 $tabs_width = $this.width();
1158 $tab_width = $this.find('li').first().outerWidth();
1159 if ($index < 0) {
1160 $index = 0;
1161 }
1162 if ($tab_width !== 0 && $tabs_width !== 0) {
1163 $indicator.css({"right": $tabs_width - (($index + 1) * $tab_width)});
1164 $indicator.css({"left": $index * $tab_width});
1165 }
1166 });
1167
1168 // Hide the remaining content
1169 $links.not($active).each(function () {
1170 $(this.hash).hide();
1171 });
1172
1173
1174 // Bind the click event handler
1175 $this.on('click', 'a', function(e){
1176 if ($(this).parent().hasClass('disabled')) {
1177 e.preventDefault();
1178 return;
1179 }
1180
1181 $tabs_width = $this.width();
1182 $tab_width = $this.find('li').first().outerWidth();
1183
1184 // Make the old tab inactive.
1185 $active.removeClass('active');
1186 $content.hide();
1187
1188 // Update the variables with the new link and content
1189 $active = $(this);
1190 $content = $(this.hash);
1191 $links = $this.find('li.tab a');
1192
1193 // Make the tab active.
1194 $active.addClass('active');
1195 var $prev_index = $index;
1196 $index = $links.index($(this));
1197 if ($index < 0) {
1198 $index = 0;
1199 }
1200 // Change url to current tab
1201 // window.location.hash = $active.attr('href');
1202
1203 $content.show();
1204
1205 // Update indicator
1206 if (($index - $prev_index) >= 0) {
1207 $indicator.velocity({"right": $tabs_width - (($index + 1) * $tab_width)}, { duration: 300, queue: false, easing: 'easeOutQuad'});
1208 $indicator.velocity({"left": $index * $tab_width}, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90});
1209
1210 }
1211 else {
1212 $indicator.velocity({"left": $index * $tab_width}, { duration: 300, queue: false, easing: 'easeOutQuad'});
1213 $indicator.velocity({"right": $tabs_width - (($index + 1) * $tab_width)}, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90});
1214 }
1215
1216 // Prevent the anchor's default click action
1217 e.preventDefault();
1218 });
1219 });
1220
1221 },
1222 select_tab : function( id ) {
1223 this.find('a[href="#' + id + '"]').trigger('click');
1224 }
1225 };
1226
1227 $.fn.tabs = function(methodOrOptions) {
1228 if ( methods[methodOrOptions] ) {
1229 return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
1230 } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
1231 // Default to "init"
1232 return methods.init.apply( this, arguments );
1233 } else {
1234 $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tooltip' );
1235 }
1236 };
1237
1238 $(document).ready(function(){
1239 $('ul.tabs').tabs();
1240 });
1241}( jQuery ));
1242;(function ($) {
1243 $.fn.tooltip = function (options) {
1244 var timeout = null,
1245 counter = null,
1246 started = false,
1247 counterInterval = null,
1248 margin = 5;
1249
1250 // Defaults
1251 var defaults = {
1252 delay: 350
1253 };
1254
1255 // Remove tooltip from the activator
1256 if (options === "remove") {
1257 this.each(function(){
1258 $('#' + $(this).attr('data-tooltip-id')).remove();
1259 });
1260 return false;
1261 }
1262
1263 options = $.extend(defaults, options);
1264
1265
1266 return this.each(function(){
1267 var tooltipId = Materialize.guid();
1268 var origin = $(this);
1269 origin.attr('data-tooltip-id', tooltipId);
1270
1271 // Create Text span
1272 var tooltip_text = $('<span></span>').text(origin.attr('data-tooltip'));
1273
1274 // Create tooltip
1275 var newTooltip = $('<div></div>');
1276 newTooltip.addClass('material-tooltip').append(tooltip_text)
1277 .appendTo($('body'))
1278 .attr('id', tooltipId);
1279
1280 var backdrop = $('<div></div>').addClass('backdrop');
1281 backdrop.appendTo(newTooltip);
1282 backdrop.css({ top: 0, left:0 });
1283
1284
1285 //Destroy previously binded events
1286 origin.off('mouseenter.tooltip mouseleave.tooltip');
1287 // Mouse In
1288 origin.on({
1289 'mouseenter.tooltip': function(e) {
1290 var tooltip_delay = origin.data("delay");
1291 tooltip_delay = (tooltip_delay === undefined || tooltip_delay === '') ? options.delay : tooltip_delay;
1292 counter = 0;
1293 counterInterval = setInterval(function(){
1294 counter += 10;
1295 if (counter >= tooltip_delay && started === false) {
1296 started = true;
1297 newTooltip.css({ display: 'block', left: '0px', top: '0px' });
1298
1299 // Set Tooltip text
1300 newTooltip.children('span').text(origin.attr('data-tooltip'));
1301
1302 // Tooltip positioning
1303 var originWidth = origin.outerWidth();
1304 var originHeight = origin.outerHeight();
1305 var tooltipPosition = origin.attr('data-position');
1306 var tooltipHeight = newTooltip.outerHeight();
1307 var tooltipWidth = newTooltip.outerWidth();
1308 var tooltipVerticalMovement = '0px';
1309 var tooltipHorizontalMovement = '0px';
1310 var scale_factor = 8;
1311
1312 if (tooltipPosition === "top") {
1313 // Top Position
1314 newTooltip.css({
1315 top: origin.offset().top - tooltipHeight - margin,
1316 left: origin.offset().left + originWidth/2 - tooltipWidth/2
1317 });
1318 tooltipVerticalMovement = '-10px';
1319 backdrop.css({
1320 borderRadius: '14px 14px 0 0',
1321 transformOrigin: '50% 90%',
1322 marginTop: tooltipHeight,
1323 marginLeft: (tooltipWidth/2) - (backdrop.width()/2)
1324
1325 });
1326 }
1327 // Left Position
1328 else if (tooltipPosition === "left") {
1329 newTooltip.css({
1330 top: origin.offset().top + originHeight/2 - tooltipHeight/2,
1331 left: origin.offset().left - tooltipWidth - margin
1332 });
1333 tooltipHorizontalMovement = '-10px';
1334 backdrop.css({
1335 width: '14px',
1336 height: '14px',
1337 borderRadius: '14px 0 0 14px',
1338 transformOrigin: '95% 50%',
1339 marginTop: tooltipHeight/2,
1340 marginLeft: tooltipWidth
1341 });
1342 }
1343 // Right Position
1344 else if (tooltipPosition === "right") {
1345 newTooltip.css({
1346 top: origin.offset().top + originHeight/2 - tooltipHeight/2,
1347 left: origin.offset().left + originWidth + margin
1348 });
1349 tooltipHorizontalMovement = '+10px';
1350 backdrop.css({
1351 width: '14px',
1352 height: '14px',
1353 borderRadius: '0 14px 14px 0',
1354 transformOrigin: '5% 50%',
1355 marginTop: tooltipHeight/2,
1356 marginLeft: '0px'
1357 });
1358 }
1359 else {
1360 // Bottom Position
1361 newTooltip.css({
1362 top: origin.offset().top + origin.outerHeight() + margin,
1363 left: origin.offset().left + originWidth/2 - tooltipWidth/2
1364 });
1365 tooltipVerticalMovement = '+10px';
1366 backdrop.css({
1367 marginLeft: (tooltipWidth/2) - (backdrop.width()/2)
1368 });
1369 }
1370
1371 // Calculate Scale to fill
1372 scale_factor = tooltipWidth / 8;
1373 if (scale_factor < 8) {
1374 scale_factor = 8;
1375 }
1376 if (tooltipPosition === "right" || tooltipPosition === "left") {
1377 scale_factor = tooltipWidth / 10;
1378 if (scale_factor < 6)
1379 scale_factor = 6;
1380 }
1381
1382 newTooltip.velocity({ marginTop: tooltipVerticalMovement, marginLeft: tooltipHorizontalMovement}, { duration: 350, queue: false })
1383 .velocity({opacity: 1}, {duration: 300, delay: 50, queue: false});
1384 backdrop.css({ display: 'block' })
1385 .velocity({opacity:1},{duration: 55, delay: 0, queue: false})
1386 .velocity({scale: scale_factor}, {duration: 300, delay: 0, queue: false, easing: 'easeInOutQuad'});
1387
1388 }
1389 }, 10); // End Interval
1390
1391 // Mouse Out
1392 },
1393 'mouseleave.tooltip': function(){
1394 // Reset State
1395 clearInterval(counterInterval);
1396 counter = 0;
1397
1398 // Animate back
1399 newTooltip.velocity({
1400 opacity: 0, marginTop: 0, marginLeft: 0}, { duration: 225, queue: false, delay: 225 }
1401 );
1402 backdrop.velocity({opacity: 0, scale: 1}, {
1403 duration:225,
1404 delay: 275, queue: false,
1405 complete: function(){
1406 backdrop.css('display', 'none');
1407 newTooltip.css('display', 'none');
1408 started = false;}
1409 });
1410 }
1411 });
1412 });
1413 };
1414
1415 $(document).ready(function(){
1416 $('.tooltipped').tooltip();
1417 });
1418}( jQuery ));
1419;/*!
1420 * Waves v0.6.4
1421 * http://fian.my.id/Waves
1422 *
1423 * Copyright 2014 Alfiana E. Sibuea and other contributors
1424 * Released under the MIT license
1425 * https://github.com/fians/Waves/blob/master/LICENSE
1426 */
1427
1428;(function(window) {
1429 'use strict';
1430
1431 var Waves = Waves || {};
1432 var $$ = document.querySelectorAll.bind(document);
1433
1434 // Find exact position of element
1435 function isWindow(obj) {
1436 return obj !== null && obj === obj.window;
1437 }
1438
1439 function getWindow(elem) {
1440 return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;
1441 }
1442
1443 function offset(elem) {
1444 var docElem, win,
1445 box = {top: 0, left: 0},
1446 doc = elem && elem.ownerDocument;
1447
1448 docElem = doc.documentElement;
1449
1450 if (typeof elem.getBoundingClientRect !== typeof undefined) {
1451 box = elem.getBoundingClientRect();
1452 }
1453 win = getWindow(doc);
1454 return {
1455 top: box.top + win.pageYOffset - docElem.clientTop,
1456 left: box.left + win.pageXOffset - docElem.clientLeft
1457 };
1458 }
1459
1460 function convertStyle(obj) {
1461 var style = '';
1462
1463 for (var a in obj) {
1464 if (obj.hasOwnProperty(a)) {
1465 style += (a + ':' + obj[a] + ';');
1466 }
1467 }
1468
1469 return style;
1470 }
1471
1472 var Effect = {
1473
1474 // Effect delay
1475 duration: 750,
1476
1477 show: function(e, element) {
1478
1479 // Disable right click
1480 if (e.button === 2) {
1481 return false;
1482 }
1483
1484 var el = element || this;
1485
1486 // Create ripple
1487 var ripple = document.createElement('div');
1488 ripple.className = 'waves-ripple';
1489 el.appendChild(ripple);
1490
1491 // Get click coordinate and element witdh
1492 var pos = offset(el);
1493 var relativeY = (e.pageY - pos.top);
1494 var relativeX = (e.pageX - pos.left);
1495 var scale = 'scale('+((el.clientWidth / 100) * 10)+')';
1496
1497 // Support for touch devices
1498 if ('touches' in e) {
1499 relativeY = (e.touches[0].pageY - pos.top);
1500 relativeX = (e.touches[0].pageX - pos.left);
1501 }
1502
1503 // Attach data to element
1504 ripple.setAttribute('data-hold', Date.now());
1505 ripple.setAttribute('data-scale', scale);
1506 ripple.setAttribute('data-x', relativeX);
1507 ripple.setAttribute('data-y', relativeY);
1508
1509 // Set ripple position
1510 var rippleStyle = {
1511 'top': relativeY+'px',
1512 'left': relativeX+'px'
1513 };
1514
1515 ripple.className = ripple.className + ' waves-notransition';
1516 ripple.setAttribute('style', convertStyle(rippleStyle));
1517 ripple.className = ripple.className.replace('waves-notransition', '');
1518
1519 // Scale the ripple
1520 rippleStyle['-webkit-transform'] = scale;
1521 rippleStyle['-moz-transform'] = scale;
1522 rippleStyle['-ms-transform'] = scale;
1523 rippleStyle['-o-transform'] = scale;
1524 rippleStyle.transform = scale;
1525 rippleStyle.opacity = '1';
1526
1527 rippleStyle['-webkit-transition-duration'] = Effect.duration + 'ms';
1528 rippleStyle['-moz-transition-duration'] = Effect.duration + 'ms';
1529 rippleStyle['-o-transition-duration'] = Effect.duration + 'ms';
1530 rippleStyle['transition-duration'] = Effect.duration + 'ms';
1531
1532 rippleStyle['-webkit-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
1533 rippleStyle['-moz-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
1534 rippleStyle['-o-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
1535 rippleStyle['transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
1536
1537 ripple.setAttribute('style', convertStyle(rippleStyle));
1538 },
1539
1540 hide: function(e) {
1541 TouchHandler.touchup(e);
1542
1543 var el = this;
1544 var width = el.clientWidth * 1.4;
1545
1546 // Get first ripple
1547 var ripple = null;
1548 var ripples = el.getElementsByClassName('waves-ripple');
1549 if (ripples.length > 0) {
1550 ripple = ripples[ripples.length - 1];
1551 } else {
1552 return false;
1553 }
1554
1555 var relativeX = ripple.getAttribute('data-x');
1556 var relativeY = ripple.getAttribute('data-y');
1557 var scale = ripple.getAttribute('data-scale');
1558
1559 // Get delay beetween mousedown and mouse leave
1560 var diff = Date.now() - Number(ripple.getAttribute('data-hold'));
1561 var delay = 350 - diff;
1562
1563 if (delay < 0) {
1564 delay = 0;
1565 }
1566
1567 // Fade out ripple after delay
1568 setTimeout(function() {
1569 var style = {
1570 'top': relativeY+'px',
1571 'left': relativeX+'px',
1572 'opacity': '0',
1573
1574 // Duration
1575 '-webkit-transition-duration': Effect.duration + 'ms',
1576 '-moz-transition-duration': Effect.duration + 'ms',
1577 '-o-transition-duration': Effect.duration + 'ms',
1578 'transition-duration': Effect.duration + 'ms',
1579 '-webkit-transform': scale,
1580 '-moz-transform': scale,
1581 '-ms-transform': scale,
1582 '-o-transform': scale,
1583 'transform': scale,
1584 };
1585
1586 ripple.setAttribute('style', convertStyle(style));
1587
1588 setTimeout(function() {
1589 try {
1590 el.removeChild(ripple);
1591 } catch(e) {
1592 return false;
1593 }
1594 }, Effect.duration);
1595 }, delay);
1596 },
1597
1598 // Little hack to make <input> can perform waves effect
1599 wrapInput: function(elements) {
1600 for (var a = 0; a < elements.length; a++) {
1601 var el = elements[a];
1602
1603 if (el.tagName.toLowerCase() === 'input') {
1604 var parent = el.parentNode;
1605
1606 // If input already have parent just pass through
1607 if (parent.tagName.toLowerCase() === 'i' && parent.className.indexOf('waves-effect') !== -1) {
1608 continue;
1609 }
1610
1611 // Put element class and style to the specified parent
1612 var wrapper = document.createElement('i');
1613 wrapper.className = el.className + ' waves-input-wrapper';
1614
1615 var elementStyle = el.getAttribute('style');
1616
1617 if (!elementStyle) {
1618 elementStyle = '';
1619 }
1620
1621 wrapper.setAttribute('style', elementStyle);
1622
1623 el.className = 'waves-button-input';
1624 el.removeAttribute('style');
1625
1626 // Put element as child
1627 parent.replaceChild(wrapper, el);
1628 wrapper.appendChild(el);
1629 }
1630 }
1631 }
1632 };
1633
1634
1635 /**
1636 * Disable mousedown event for 500ms during and after touch
1637 */
1638 var TouchHandler = {
1639 /* uses an integer rather than bool so there's no issues with
1640 * needing to clear timeouts if another touch event occurred
1641 * within the 500ms. Cannot mouseup between touchstart and
1642 * touchend, nor in the 500ms after touchend. */
1643 touches: 0,
1644 allowEvent: function(e) {
1645 var allow = true;
1646
1647 if (e.type === 'touchstart') {
1648 TouchHandler.touches += 1; //push
1649 } else if (e.type === 'touchend' || e.type === 'touchcancel') {
1650 setTimeout(function() {
1651 if (TouchHandler.touches > 0) {
1652 TouchHandler.touches -= 1; //pop after 500ms
1653 }
1654 }, 500);
1655 } else if (e.type === 'mousedown' && TouchHandler.touches > 0) {
1656 allow = false;
1657 }
1658
1659 return allow;
1660 },
1661 touchup: function(e) {
1662 TouchHandler.allowEvent(e);
1663 }
1664 };
1665
1666
1667 /**
1668 * Delegated click handler for .waves-effect element.
1669 * returns null when .waves-effect element not in "click tree"
1670 */
1671 function getWavesEffectElement(e) {
1672 if (TouchHandler.allowEvent(e) === false) {
1673 return null;
1674 }
1675
1676 var element = null;
1677 var target = e.target || e.srcElement;
1678
1679 while (target.parentElement !== null) {
1680 if (!(target instanceof SVGElement) && target.className.indexOf('waves-effect') !== -1) {
1681 element = target;
1682 break;
1683 } else if (target.classList.contains('waves-effect')) {
1684 element = target;
1685 break;
1686 }
1687 target = target.parentElement;
1688 }
1689
1690 return element;
1691 }
1692
1693 /**
1694 * Bubble the click and show effect if .waves-effect elem was found
1695 */
1696 function showEffect(e) {
1697 var element = getWavesEffectElement(e);
1698
1699 if (element !== null) {
1700 Effect.show(e, element);
1701
1702 if ('ontouchstart' in window) {
1703 element.addEventListener('touchend', Effect.hide, false);
1704 element.addEventListener('touchcancel', Effect.hide, false);
1705 }
1706
1707 element.addEventListener('mouseup', Effect.hide, false);
1708 element.addEventListener('mouseleave', Effect.hide, false);
1709 }
1710 }
1711
1712 Waves.displayEffect = function(options) {
1713 options = options || {};
1714
1715 if ('duration' in options) {
1716 Effect.duration = options.duration;
1717 }
1718
1719 //Wrap input inside <i> tag
1720 Effect.wrapInput($$('.waves-effect'));
1721
1722 if ('ontouchstart' in window) {
1723 document.body.addEventListener('touchstart', showEffect, false);
1724 }
1725
1726 document.body.addEventListener('mousedown', showEffect, false);
1727 };
1728
1729 /**
1730 * Attach Waves to an input element (or any element which doesn't
1731 * bubble mouseup/mousedown events).
1732 * Intended to be used with dynamically loaded forms/inputs, or
1733 * where the user doesn't want a delegated click handler.
1734 */
1735 Waves.attach = function(element) {
1736 //FUTURE: automatically add waves classes and allow users
1737 // to specify them with an options param? Eg. light/classic/button
1738 if (element.tagName.toLowerCase() === 'input') {
1739 Effect.wrapInput([element]);
1740 element = element.parentElement;
1741 }
1742
1743 if ('ontouchstart' in window) {
1744 element.addEventListener('touchstart', showEffect, false);
1745 }
1746
1747 element.addEventListener('mousedown', showEffect, false);
1748 };
1749
1750 window.Waves = Waves;
1751
1752 document.addEventListener('DOMContentLoaded', function() {
1753 Waves.displayEffect();
1754 }, false);
1755
1756})(window);
1757;Materialize.toast = function (message, displayLength, className, completeCallback) {
1758 className = className || "";
1759
1760 var container = document.getElementById('toast-container');
1761
1762 // Create toast container if it does not exist
1763 if (container === null) {
1764 // create notification container
1765 container = document.createElement('div');
1766 container.id = 'toast-container';
1767 document.body.appendChild(container);
1768 }
1769
1770 // Select and append toast
1771 var newToast = createToast(message);
1772
1773 // only append toast if message is not undefined
1774 if(message){
1775 container.appendChild(newToast);
1776 }
1777
1778 newToast.style.top = '35px';
1779 newToast.style.opacity = 0;
1780
1781 // Animate toast in
1782 Vel(newToast, { "top" : "0px", opacity: 1 }, {duration: 300,
1783 easing: 'easeOutCubic',
1784 queue: false});
1785
1786 // Allows timer to be pause while being panned
1787 var timeLeft = displayLength;
1788 var counterInterval = setInterval (function(){
1789
1790
1791 if (newToast.parentNode === null)
1792 window.clearInterval(counterInterval);
1793
1794 // If toast is not being dragged, decrease its time remaining
1795 if (!newToast.classList.contains('panning')) {
1796 timeLeft -= 20;
1797 }
1798
1799 if (timeLeft <= 0) {
1800 // Animate toast out
1801 Vel(newToast, {"opacity": 0, marginTop: '-40px'}, { duration: 375,
1802 easing: 'easeOutExpo',
1803 queue: false,
1804 complete: function(){
1805 // Call the optional callback
1806 if(typeof(completeCallback) === "function")
1807 completeCallback();
1808 // Remove toast after it times out
1809 this[0].parentNode.removeChild(this[0]);
1810 }
1811 });
1812 window.clearInterval(counterInterval);
1813 }
1814 }, 20);
1815
1816
1817
1818 function createToast(html) {
1819
1820 // Create toast
1821 var toast = document.createElement('div');
1822 toast.classList.add('toast');
1823 if (className) {
1824 var classes = className.split(' ');
1825
1826 for (var i = 0, count = classes.length; i < count; i++) {
1827 toast.classList.add(classes[i]);
1828 }
1829 }
1830 // If type of parameter is HTML Element
1831 if ( typeof HTMLElement === "object" ? html instanceof HTMLElement : html && typeof html === "object" && html !== null && html.nodeType === 1 && typeof html.nodeName==="string"
1832) {
1833 toast.appendChild(html);
1834 }
1835 else if (html instanceof jQuery) {
1836 // Check if it is jQuery object
1837 toast.appendChild(html[0]);
1838 }
1839 else {
1840 // Insert as text;
1841 toast.innerHTML = html;
1842 }
1843 // Bind hammer
1844 var hammerHandler = new Hammer(toast, {prevent_default: false});
1845 hammerHandler.on('pan', function(e) {
1846 var deltaX = e.deltaX;
1847 var activationDistance = 80;
1848
1849 // Change toast state
1850 if (!toast.classList.contains('panning')){
1851 toast.classList.add('panning');
1852 }
1853
1854 var opacityPercent = 1-Math.abs(deltaX / activationDistance);
1855 if (opacityPercent < 0)
1856 opacityPercent = 0;
1857
1858 Vel(toast, {left: deltaX, opacity: opacityPercent }, {duration: 50, queue: false, easing: 'easeOutQuad'});
1859
1860 });
1861
1862 hammerHandler.on('panend', function(e) {
1863 var deltaX = e.deltaX;
1864 var activationDistance = 80;
1865
1866 // If toast dragged past activation point
1867 if (Math.abs(deltaX) > activationDistance) {
1868 Vel(toast, {marginTop: '-40px'}, { duration: 375,
1869 easing: 'easeOutExpo',
1870 queue: false,
1871 complete: function(){
1872 if(typeof(completeCallback) === "function") {
1873 completeCallback();
1874 }
1875 toast.parentNode.removeChild(toast);
1876 }
1877 });
1878
1879 } else {
1880 toast.classList.remove('panning');
1881 // Put toast back into original position
1882 Vel(toast, { left: 0, opacity: 1 }, { duration: 300,
1883 easing: 'easeOutExpo',
1884 queue: false
1885 });
1886
1887 }
1888 });
1889
1890 return toast;
1891 }
1892};
1893;(function ($) {
1894
1895 var methods = {
1896 init : function(options) {
1897 var defaults = {
1898 menuWidth: 240,
1899 edge: 'left',
1900 closeOnClick: false
1901 };
1902 options = $.extend(defaults, options);
1903
1904 $(this).each(function(){
1905 var $this = $(this);
1906 var menu_id = $("#"+ $this.attr('data-activates'));
1907
1908 // Set to width
1909 if (options.menuWidth != 240) {
1910 menu_id.css('width', options.menuWidth);
1911 }
1912
1913 // Add Touch Area
1914 var dragTarget = $('<div class="drag-target"></div>');
1915 $('body').append(dragTarget);
1916
1917 if (options.edge == 'left') {
1918 menu_id.css('left', -1 * (options.menuWidth + 10));
1919 dragTarget.css({'left': 0}); // Add Touch Area
1920 }
1921 else {
1922 menu_id.addClass('right-aligned') // Change text-alignment to right
1923 .css('right', -1 * (options.menuWidth + 10))
1924 .css('left', '');
1925 dragTarget.css({'right': 0}); // Add Touch Area
1926 }
1927
1928 // If fixed sidenav, bring menu out
1929 if (menu_id.hasClass('fixed')) {
1930 if (window.innerWidth > 992) {
1931 menu_id.css('left', 0);
1932 }
1933 }
1934
1935 // Window resize to reset on large screens fixed
1936 if (menu_id.hasClass('fixed')) {
1937 $(window).resize( function() {
1938 if (window.innerWidth > 992) {
1939 // Close menu if window is resized bigger than 992 and user has fixed sidenav
1940 if ($('#sidenav-overlay').css('opacity') !== 0 && menuOut) {
1941 removeMenu(true);
1942 }
1943 else {
1944 menu_id.removeAttr('style');
1945 menu_id.css('width', options.menuWidth);
1946 }
1947 }
1948 else if (menuOut === false){
1949 if (options.edge === 'left')
1950 menu_id.css('left', -1 * (options.menuWidth + 10));
1951 else
1952 menu_id.css('right', -1 * (options.menuWidth + 10));
1953 }
1954
1955 });
1956 }
1957
1958 // if closeOnClick, then add close event for all a tags in side sideNav
1959 if (options.closeOnClick === true) {
1960 menu_id.on("click.itemclick", "a:not(.collapsible-header)", function(){
1961 removeMenu();
1962 });
1963 }
1964
1965 function removeMenu(restoreNav) {
1966 panning = false;
1967 menuOut = false;
1968
1969 // Reenable scrolling
1970 $('body').css('overflow', '');
1971
1972 $('#sidenav-overlay').velocity({opacity: 0}, {duration: 200, queue: false, easing: 'easeOutQuad',
1973 complete: function() {
1974 $(this).remove();
1975 } });
1976 if (options.edge === 'left') {
1977 // Reset phantom div
1978 dragTarget.css({width: '', right: '', left: '0'});
1979 menu_id.velocity(
1980 {left: -1 * (options.menuWidth + 10)},
1981 { duration: 200,
1982 queue: false,
1983 easing: 'easeOutCubic',
1984 complete: function() {
1985 if (restoreNav === true) {
1986 // Restore Fixed sidenav
1987 menu_id.removeAttr('style');
1988 menu_id.css('width', options.menuWidth);
1989 }
1990 }
1991
1992 });
1993 }
1994 else {
1995 // Reset phantom div
1996 dragTarget.css({width: '', right: '0', left: ''});
1997 menu_id.velocity(
1998 {right: -1 * (options.menuWidth + 10)},
1999 { duration: 200,
2000 queue: false,
2001 easing: 'easeOutCubic',
2002 complete: function() {
2003 if (restoreNav === true) {
2004 // Restore Fixed sidenav
2005 menu_id.removeAttr('style');
2006 menu_id.css('width', options.menuWidth);
2007 }
2008 }
2009 });
2010 }
2011 }
2012
2013
2014
2015 // Touch Event
2016 var panning = false;
2017 var menuOut = false;
2018
2019 dragTarget.on('click', function(){
2020 removeMenu();
2021 });
2022
2023 dragTarget.hammer({
2024 prevent_default: false
2025 }).bind('pan', function(e) {
2026
2027 if (e.gesture.pointerType == "touch") {
2028
2029 var direction = e.gesture.direction;
2030 var x = e.gesture.center.x;
2031 var y = e.gesture.center.y;
2032 var velocityX = e.gesture.velocityX;
2033
2034 // Disable Scrolling
2035 $('body').css('overflow', 'hidden');
2036
2037 // If overlay does not exist, create one and if it is clicked, close menu
2038 if ($('#sidenav-overlay').length === 0) {
2039 var overlay = $('<div id="sidenav-overlay"></div>');
2040 overlay.css('opacity', 0).click( function(){
2041 removeMenu();
2042 });
2043 $('body').append(overlay);
2044 }
2045
2046 // Keep within boundaries
2047 if (options.edge === 'left') {
2048 if (x > options.menuWidth) { x = options.menuWidth; }
2049 else if (x < 0) { x = 0; }
2050 }
2051
2052 if (options.edge === 'left') {
2053 // Left Direction
2054 if (x < (options.menuWidth / 2)) { menuOut = false; }
2055 // Right Direction
2056 else if (x >= (options.menuWidth / 2)) { menuOut = true; }
2057
2058 menu_id.css('left', (x - options.menuWidth));
2059 }
2060 else {
2061 // Left Direction
2062 if (x < (window.innerWidth - options.menuWidth / 2)) {
2063 menuOut = true;
2064 }
2065 // Right Direction
2066 else if (x >= (window.innerWidth - options.menuWidth / 2)) {
2067 menuOut = false;
2068 }
2069 var rightPos = -1 *(x - options.menuWidth / 2);
2070 if (rightPos > 0) {
2071 rightPos = 0;
2072 }
2073
2074 menu_id.css('right', rightPos);
2075 }
2076
2077
2078
2079
2080 // Percentage overlay
2081 var overlayPerc;
2082 if (options.edge === 'left') {
2083 overlayPerc = x / options.menuWidth;
2084 $('#sidenav-overlay').velocity({opacity: overlayPerc }, {duration: 50, queue: false, easing: 'easeOutQuad'});
2085 }
2086 else {
2087 overlayPerc = Math.abs((x - window.innerWidth) / options.menuWidth);
2088 $('#sidenav-overlay').velocity({opacity: overlayPerc }, {duration: 50, queue: false, easing: 'easeOutQuad'});
2089 }
2090 }
2091
2092 }).bind('panend', function(e) {
2093
2094 if (e.gesture.pointerType == "touch") {
2095 var velocityX = e.gesture.velocityX;
2096 panning = false;
2097 if (options.edge === 'left') {
2098 // If velocityX <= 0.3 then the user is flinging the menu closed so ignore menuOut
2099 if ((menuOut && velocityX <= 0.3) || velocityX < -0.5) {
2100 menu_id.velocity({left: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'});
2101 $('#sidenav-overlay').velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'});
2102 dragTarget.css({width: '50%', right: 0, left: ''});
2103 }
2104 else if (!menuOut || velocityX > 0.3) {
2105 // Enable Scrolling
2106 $('body').css('overflow', '');
2107 // Slide menu closed
2108 menu_id.velocity({left: -1 * (options.menuWidth + 10)}, {duration: 200, queue: false, easing: 'easeOutQuad'});
2109 $('#sidenav-overlay').velocity({opacity: 0 }, {duration: 200, queue: false, easing: 'easeOutQuad',
2110 complete: function () {
2111 $(this).remove();
2112 }});
2113 dragTarget.css({width: '10px', right: '', left: 0});
2114 }
2115 }
2116 else {
2117 if ((menuOut && velocityX >= -0.3) || velocityX > 0.5) {
2118 menu_id.velocity({right: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'});
2119 $('#sidenav-overlay').velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'});
2120 dragTarget.css({width: '50%', right: '', left: 0});
2121 }
2122 else if (!menuOut || velocityX < -0.3) {
2123 // Enable Scrolling
2124 $('body').css('overflow', '');
2125 // Slide menu closed
2126 menu_id.velocity({right: -1 * (options.menuWidth + 10)}, {duration: 200, queue: false, easing: 'easeOutQuad'});
2127 $('#sidenav-overlay').velocity({opacity: 0 }, {duration: 200, queue: false, easing: 'easeOutQuad',
2128 complete: function () {
2129 $(this).remove();
2130 }});
2131 dragTarget.css({width: '10px', right: 0, left: ''});
2132 }
2133 }
2134
2135 }
2136 });
2137
2138 $this.click(function() {
2139 if (menuOut === true) {
2140 menuOut = false;
2141 panning = false;
2142 removeMenu();
2143 }
2144 else {
2145
2146 // Disable Scrolling
2147 $('body').css('overflow', 'hidden');
2148 // Push current drag target on top of DOM tree
2149 $('body').append(dragTarget);
2150
2151 if (options.edge === 'left') {
2152 dragTarget.css({width: '50%', right: 0, left: ''});
2153 menu_id.velocity({left: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'});
2154 }
2155 else {
2156 dragTarget.css({width: '50%', right: '', left: 0});
2157 menu_id.velocity({right: 0}, {duration: 300, queue: false, easing: 'easeOutQuad'});
2158 menu_id.css('left','');
2159 }
2160
2161 var overlay = $('<div id="sidenav-overlay"></div>');
2162 overlay.css('opacity', 0)
2163 .click(function(){
2164 menuOut = false;
2165 panning = false;
2166 removeMenu();
2167 overlay.velocity({opacity: 0}, {duration: 300, queue: false, easing: 'easeOutQuad',
2168 complete: function() {
2169 $(this).remove();
2170 } });
2171
2172 });
2173 $('body').append(overlay);
2174 overlay.velocity({opacity: 1}, {duration: 300, queue: false, easing: 'easeOutQuad',
2175 complete: function () {
2176 menuOut = true;
2177 panning = false;
2178 }
2179 });
2180 }
2181
2182 return false;
2183 });
2184 });
2185
2186
2187 },
2188 show : function() {
2189 this.trigger('click');
2190 },
2191 hide : function() {
2192 $('#sidenav-overlay').trigger('click');
2193 }
2194 };
2195
2196
2197 $.fn.sideNav = function(methodOrOptions) {
2198 if ( methods[methodOrOptions] ) {
2199 return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
2200 } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
2201 // Default to "init"
2202 return methods.init.apply( this, arguments );
2203 } else {
2204 $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.sideNav' );
2205 }
2206 }; // Plugin end
2207}( jQuery ));
2208;/**
2209 * Extend jquery with a scrollspy plugin.
2210 * This watches the window scroll and fires events when elements are scrolled into viewport.
2211 *
2212 * throttle() and getTime() taken from Underscore.js
2213 * https://github.com/jashkenas/underscore
2214 *
2215 * @author Copyright 2013 John Smart
2216 * @license https://raw.github.com/thesmart/jquery-scrollspy/master/LICENSE
2217 * @see https://github.com/thesmart
2218 * @version 0.1.2
2219 */
2220(function($) {
2221
2222 var jWindow = $(window);
2223 var elements = [];
2224 var elementsInView = [];
2225 var isSpying = false;
2226 var ticks = 0;
2227 var unique_id = 1;
2228 var offset = {
2229 top : 0,
2230 right : 0,
2231 bottom : 0,
2232 left : 0,
2233 }
2234
2235 /**
2236 * Find elements that are within the boundary
2237 * @param {number} top
2238 * @param {number} right
2239 * @param {number} bottom
2240 * @param {number} left
2241 * @return {jQuery} A collection of elements
2242 */
2243 function findElements(top, right, bottom, left) {
2244 var hits = $();
2245 $.each(elements, function(i, element) {
2246 if (element.height() > 0) {
2247 var elTop = element.offset().top,
2248 elLeft = element.offset().left,
2249 elRight = elLeft + element.width(),
2250 elBottom = elTop + element.height();
2251
2252 var isIntersect = !(elLeft > right ||
2253 elRight < left ||
2254 elTop > bottom ||
2255 elBottom < top);
2256
2257 if (isIntersect) {
2258 hits.push(element);
2259 }
2260 }
2261 });
2262
2263 return hits;
2264 }
2265
2266
2267 /**
2268 * Called when the user scrolls the window
2269 */
2270 function onScroll() {
2271 // unique tick id
2272 ++ticks;
2273
2274 // viewport rectangle
2275 var top = jWindow.scrollTop(),
2276 left = jWindow.scrollLeft(),
2277 right = left + jWindow.width(),
2278 bottom = top + jWindow.height();
2279
2280 // determine which elements are in view
2281// + 60 accounts for fixed nav
2282 var intersections = findElements(top+offset.top + 200, right+offset.right, bottom+offset.bottom, left+offset.left);
2283 $.each(intersections, function(i, element) {
2284
2285 var lastTick = element.data('scrollSpy:ticks');
2286 if (typeof lastTick != 'number') {
2287 // entered into view
2288 element.triggerHandler('scrollSpy:enter');
2289 }
2290
2291 // update tick id
2292 element.data('scrollSpy:ticks', ticks);
2293 });
2294
2295 // determine which elements are no longer in view
2296 $.each(elementsInView, function(i, element) {
2297 var lastTick = element.data('scrollSpy:ticks');
2298 if (typeof lastTick == 'number' && lastTick !== ticks) {
2299 // exited from view
2300 element.triggerHandler('scrollSpy:exit');
2301 element.data('scrollSpy:ticks', null);
2302 }
2303 });
2304
2305 // remember elements in view for next tick
2306 elementsInView = intersections;
2307 }
2308
2309 /**
2310 * Called when window is resized
2311 */
2312 function onWinSize() {
2313 jWindow.trigger('scrollSpy:winSize');
2314 }
2315
2316 /**
2317 * Get time in ms
2318 * @license https://raw.github.com/jashkenas/underscore/master/LICENSE
2319 * @type {function}
2320 * @return {number}
2321 */
2322 var getTime = (Date.now || function () {
2323 return new Date().getTime();
2324 });
2325
2326 /**
2327 * Returns a function, that, when invoked, will only be triggered at most once
2328 * during a given window of time. Normally, the throttled function will run
2329 * as much as it can, without ever going more than once per `wait` duration;
2330 * but if you'd like to disable the execution on the leading edge, pass
2331 * `{leading: false}`. To disable execution on the trailing edge, ditto.
2332 * @license https://raw.github.com/jashkenas/underscore/master/LICENSE
2333 * @param {function} func
2334 * @param {number} wait
2335 * @param {Object=} options
2336 * @returns {Function}
2337 */
2338 function throttle(func, wait, options) {
2339 var context, args, result;
2340 var timeout = null;
2341 var previous = 0;
2342 options || (options = {});
2343 var later = function () {
2344 previous = options.leading === false ? 0 : getTime();
2345 timeout = null;
2346 result = func.apply(context, args);
2347 context = args = null;
2348 };
2349 return function () {
2350 var now = getTime();
2351 if (!previous && options.leading === false) previous = now;
2352 var remaining = wait - (now - previous);
2353 context = this;
2354 args = arguments;
2355 if (remaining <= 0) {
2356 clearTimeout(timeout);
2357 timeout = null;
2358 previous = now;
2359 result = func.apply(context, args);
2360 context = args = null;
2361 } else if (!timeout && options.trailing !== false) {
2362 timeout = setTimeout(later, remaining);
2363 }
2364 return result;
2365 };
2366 };
2367
2368 /**
2369 * Enables ScrollSpy using a selector
2370 * @param {jQuery|string} selector The elements collection, or a selector
2371 * @param {Object=} options Optional.
2372 throttle : number -> scrollspy throttling. Default: 100 ms
2373 offsetTop : number -> offset from top. Default: 0
2374 offsetRight : number -> offset from right. Default: 0
2375 offsetBottom : number -> offset from bottom. Default: 0
2376 offsetLeft : number -> offset from left. Default: 0
2377 * @returns {jQuery}
2378 */
2379 $.scrollSpy = function(selector, options) {
2380 var visible = [];
2381 selector = $(selector);
2382 selector.each(function(i, element) {
2383 elements.push($(element));
2384 $(element).data("scrollSpy:id", i);
2385 // Smooth scroll to section
2386 $('a[href=#' + $(element).attr('id') + ']').click(function(e) {
2387 e.preventDefault();
2388 var offset = $(this.hash).offset().top + 1;
2389
2390// offset - 200 allows elements near bottom of page to scroll
2391
2392 $('html, body').animate({ scrollTop: offset - 200 }, {duration: 400, queue: false, easing: 'easeOutCubic'});
2393
2394 });
2395 });
2396 options = options || {
2397 throttle: 100
2398 };
2399
2400 offset.top = options.offsetTop || 0;
2401 offset.right = options.offsetRight || 0;
2402 offset.bottom = options.offsetBottom || 0;
2403 offset.left = options.offsetLeft || 0;
2404
2405 var throttledScroll = throttle(onScroll, options.throttle || 100);
2406 var readyScroll = function(){
2407 $(document).ready(throttledScroll);
2408 };
2409
2410 if (!isSpying) {
2411 jWindow.on('scroll', readyScroll);
2412 jWindow.on('resize', readyScroll);
2413 isSpying = true;
2414 }
2415
2416 // perform a scan once, after current execution context, and after dom is ready
2417 setTimeout(readyScroll, 0);
2418
2419
2420 selector.on('scrollSpy:enter', function() {
2421 visible = $.grep(visible, function(value) {
2422 return value.height() != 0;
2423 });
2424
2425 var $this = $(this);
2426
2427 if (visible[0]) {
2428 $('a[href=#' + visible[0].attr('id') + ']').removeClass('active');
2429 if ($this.data('scrollSpy:id') < visible[0].data('scrollSpy:id')) {
2430 visible.unshift($(this));
2431 }
2432 else {
2433 visible.push($(this));
2434 }
2435 }
2436 else {
2437 visible.push($(this));
2438 }
2439
2440
2441 $('a[href=#' + visible[0].attr('id') + ']').addClass('active');
2442 });
2443 selector.on('scrollSpy:exit', function() {
2444 visible = $.grep(visible, function(value) {
2445 return value.height() != 0;
2446 });
2447
2448 if (visible[0]) {
2449 $('a[href=#' + visible[0].attr('id') + ']').removeClass('active');
2450 var $this = $(this);
2451 visible = $.grep(visible, function(value) {
2452 return value.attr('id') != $this.attr('id');
2453 });
2454 if (visible[0]) { // Check if empty
2455 $('a[href=#' + visible[0].attr('id') + ']').addClass('active');
2456 }
2457 }
2458 });
2459
2460 return selector;
2461 };
2462
2463 /**
2464 * Listen for window resize events
2465 * @param {Object=} options Optional. Set { throttle: number } to change throttling. Default: 100 ms
2466 * @returns {jQuery} $(window)
2467 */
2468 $.winSizeSpy = function(options) {
2469 $.winSizeSpy = function() { return jWindow; }; // lock from multiple calls
2470 options = options || {
2471 throttle: 100
2472 };
2473 return jWindow.on('resize', throttle(onWinSize, options.throttle || 100));
2474 };
2475
2476 /**
2477 * Enables ScrollSpy on a collection of elements
2478 * e.g. $('.scrollSpy').scrollSpy()
2479 * @param {Object=} options Optional.
2480 throttle : number -> scrollspy throttling. Default: 100 ms
2481 offsetTop : number -> offset from top. Default: 0
2482 offsetRight : number -> offset from right. Default: 0
2483 offsetBottom : number -> offset from bottom. Default: 0
2484 offsetLeft : number -> offset from left. Default: 0
2485 * @returns {jQuery}
2486 */
2487 $.fn.scrollSpy = function(options) {
2488 return $.scrollSpy($(this), options);
2489 };
2490
2491})(jQuery);;(function ($) {
2492 $(document).ready(function() {
2493
2494 // Function to update labels of text fields
2495 Materialize.updateTextFields = function() {
2496 var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea';
2497 $(input_selector).each(function(index, element) {
2498 if ($(element).val().length > 0 || $(this).attr('placeholder') !== undefined || $(element)[0].validity.badInput === true) {
2499 $(this).siblings('label').addClass('active');
2500 }
2501 else {
2502 $(this).siblings('label, i').removeClass('active');
2503 }
2504 });
2505 };
2506
2507 // Text based inputs
2508 var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea';
2509
2510 // Handle HTML5 autofocus
2511 $('input[autofocus]').siblings('label, i').addClass('active');
2512
2513 // Add active if form auto complete
2514 $(document).on('change', input_selector, function () {
2515 if($(this).val().length !== 0 || $(this).attr('placeholder') !== undefined) {
2516 $(this).siblings('label').addClass('active');
2517 }
2518 validate_field($(this));
2519 });
2520
2521 // Add active if input element has been pre-populated on document ready
2522 $(document).ready(function() {
2523 Materialize.updateTextFields();
2524 });
2525
2526 // HTML DOM FORM RESET handling
2527 $(document).on('reset', function(e) {
2528 var formReset = $(e.target);
2529 if (formReset.is('form')) {
2530 formReset.find(input_selector).removeClass('valid').removeClass('invalid');
2531 formReset.find(input_selector).each(function () {
2532 if ($(this).attr('value') === '') {
2533 $(this).siblings('label, i').removeClass('active');
2534 }
2535 });
2536
2537 // Reset select
2538 formReset.find('select.initialized').each(function () {
2539 var reset_text = formReset.find('option[selected]').text();
2540 formReset.siblings('input.select-dropdown').val(reset_text);
2541 });
2542 }
2543 });
2544
2545 // Add active when element has focus
2546 $(document).on('focus', input_selector, function () {
2547 $(this).siblings('label, i').addClass('active');
2548 });
2549
2550 $(document).on('blur', input_selector, function () {
2551 var $inputElement = $(this);
2552 if ($inputElement.val().length === 0 && $inputElement[0].validity.badInput !== true && $inputElement.attr('placeholder') === undefined) {
2553 $inputElement.siblings('label, i').removeClass('active');
2554 }
2555
2556 if ($inputElement.val().length === 0 && $inputElement[0].validity.badInput !== true && $inputElement.attr('placeholder') !== undefined) {
2557 $inputElement.siblings('i').removeClass('active');
2558 }
2559 validate_field($inputElement);
2560 });
2561
2562 window.validate_field = function(object) {
2563 var hasLength = object.attr('length') !== undefined;
2564 var lenAttr = parseInt(object.attr('length'));
2565 var len = object.val().length;
2566
2567 if (object.val().length === 0 && object[0].validity.badInput === false) {
2568 if (object.hasClass('validate')) {
2569 object.removeClass('valid');
2570 object.removeClass('invalid');
2571 }
2572 }
2573 else {
2574 if (object.hasClass('validate')) {
2575 // Check for character counter attributes
2576 if ((object.is(':valid') && hasLength && (len <= lenAttr)) || (object.is(':valid') && !hasLength)) {
2577 object.removeClass('invalid');
2578 object.addClass('valid');
2579 }
2580 else {
2581 object.removeClass('valid');
2582 object.addClass('invalid');
2583 }
2584 }
2585 }
2586 };
2587
2588
2589 // Textarea Auto Resize
2590 var hiddenDiv = $('.hiddendiv').first();
2591 if (!hiddenDiv.length) {
2592 hiddenDiv = $('<div class="hiddendiv common"></div>');
2593 $('body').append(hiddenDiv);
2594 }
2595 var text_area_selector = '.materialize-textarea';
2596
2597 function textareaAutoResize($textarea) {
2598 // Set font properties of hiddenDiv
2599
2600 var fontFamily = $textarea.css('font-family');
2601 var fontSize = $textarea.css('font-size');
2602
2603 if (fontSize) { hiddenDiv.css('font-size', fontSize); }
2604 if (fontFamily) { hiddenDiv.css('font-family', fontFamily); }
2605
2606 if ($textarea.attr('wrap') === "off") {
2607 hiddenDiv.css('overflow-wrap', "normal")
2608 .css('white-space', "pre");
2609 }
2610
2611
2612
2613
2614 hiddenDiv.text($textarea.val() + '\n');
2615 var content = hiddenDiv.html().replace(/\n/g, '<br>');
2616 hiddenDiv.html(content);
2617
2618
2619 // When textarea is hidden, width goes crazy.
2620 // Approximate with half of window size
2621
2622 if ($textarea.is(':visible')) {
2623 hiddenDiv.css('width', $textarea.width());
2624 }
2625 else {
2626 hiddenDiv.css('width', $(window).width()/2);
2627 }
2628
2629 $textarea.css('height', hiddenDiv.height());
2630 }
2631
2632 $(text_area_selector).each(function () {
2633 var $textarea = $(this);
2634 if ($textarea.val().length) {
2635 textareaAutoResize($textarea);
2636 }
2637 });
2638
2639 $('body').on('keyup keydown autoresize', text_area_selector, function () {
2640 textareaAutoResize($(this));
2641 });
2642
2643
2644 // File Input Path
2645
2646 $(document).on('change', '.file-field input[type="file"]', function () {
2647 var file_field = $(this).closest('.file-field');
2648 var path_input = file_field.find('input.file-path');
2649 var files = $(this)[0].files;
2650 var file_names = [];
2651 for (var i = 0; i < files.length; i++) {
2652 file_names.push(files[i].name);
2653 }
2654 path_input.val(file_names.join(", "));
2655 path_input.trigger('change');
2656 });
2657
2658
2659 /****************
2660 * Range Input *
2661 ****************/
2662
2663 var range_type = 'input[type=range]';
2664 var range_mousedown = false;
2665 var left;
2666
2667 $(range_type).each(function () {
2668 var thumb = $('<span class="thumb"><span class="value"></span></span>');
2669 $(this).after(thumb);
2670 });
2671
2672 var range_wrapper = '.range-field';
2673 $(document).on('change', range_type, function(e) {
2674 var thumb = $(this).siblings('.thumb');
2675 thumb.find('.value').html($(this).val());
2676 });
2677
2678 $(document).on('input mousedown touchstart', range_type, function(e) {
2679 var thumb = $(this).siblings('.thumb');
2680
2681 // If thumb indicator does not exist yet, create it
2682 if (thumb.length <= 0) {
2683 thumb = $('<span class="thumb"><span class="value"></span></span>');
2684 $(this).append(thumb);
2685 }
2686
2687 // Set indicator value
2688 thumb.find('.value').html($(this).val());
2689
2690 range_mousedown = true;
2691 $(this).addClass('active');
2692
2693 if (!thumb.hasClass('active')) {
2694 thumb.velocity({ height: "30px", width: "30px", top: "-20px", marginLeft: "-15px"}, { duration: 300, easing: 'easeOutExpo' });
2695 }
2696
2697 if(e.pageX === undefined || e.pageX === null){//mobile
2698 left = e.originalEvent.touches[0].pageX - $(this).offset().left;
2699 }
2700 else{ // desktop
2701 left = e.pageX - $(this).offset().left;
2702 }
2703 var width = $(this).outerWidth();
2704
2705 if (left < 0) {
2706 left = 0;
2707 }
2708 else if (left > width) {
2709 left = width;
2710 }
2711 thumb.addClass('active').css('left', left);
2712 thumb.find('.value').html($(this).val());
2713
2714
2715 });
2716
2717 $(document).on('mouseup touchend', range_wrapper, function() {
2718 range_mousedown = false;
2719 $(this).removeClass('active');
2720 });
2721
2722 $(document).on('mousemove touchmove', range_wrapper, function(e) {
2723 var thumb = $(this).children('.thumb');
2724 var left;
2725 if (range_mousedown) {
2726 if (!thumb.hasClass('active')) {
2727 thumb.velocity({ height: '30px', width: '30px', top: '-20px', marginLeft: '-15px'}, { duration: 300, easing: 'easeOutExpo' });
2728 }
2729 if (e.pageX === undefined || e.pageX === null) { //mobile
2730 left = e.originalEvent.touches[0].pageX - $(this).offset().left;
2731 }
2732 else{ // desktop
2733 left = e.pageX - $(this).offset().left;
2734 }
2735 var width = $(this).outerWidth();
2736
2737 if (left < 0) {
2738 left = 0;
2739 }
2740 else if (left > width) {
2741 left = width;
2742 }
2743 thumb.addClass('active').css('left', left);
2744 thumb.find('.value').html(thumb.siblings(range_type).val());
2745 }
2746 });
2747
2748 $(document).on('mouseout touchleave', range_wrapper, function() {
2749 if (!range_mousedown) {
2750
2751 var thumb = $(this).children('.thumb');
2752
2753 if (thumb.hasClass('active')) {
2754 thumb.velocity({ height: '0', width: '0', top: '10px', marginLeft: '-6px'}, { duration: 100 });
2755 }
2756 thumb.removeClass('active');
2757 }
2758 });
2759
2760 }); // End of $(document).ready
2761
2762
2763
2764
2765 // Select Plugin
2766 $.fn.material_select = function (callback) {
2767 $(this).each(function(){
2768 $select = $(this);
2769
2770 if ( $select.hasClass('browser-default')) {
2771 return; // Continue to next (return false breaks out of entire loop)
2772 }
2773
2774 // Tear down structure if Select needs to be rebuilt
2775 var lastID = $select.data('select-id');
2776 if (lastID) {
2777 $select.parent().find('span.caret').remove();
2778 $select.parent().find('input').remove();
2779
2780 $select.unwrap();
2781 $('ul#select-options-'+lastID).remove();
2782 }
2783
2784 // If destroying the select, remove the selelct-id and reset it to it's uninitialized state.
2785 if(callback === 'destroy') {
2786 $select.data('select-id', null).removeClass('initialized');
2787 return;
2788 }
2789
2790 var uniqueID = Materialize.guid();
2791 $select.data('select-id', uniqueID);
2792 var wrapper = $('<div class="select-wrapper"></div>');
2793 wrapper.addClass($select.attr('class'));
2794 var options = $('<ul id="select-options-' + uniqueID+'" class="dropdown-content select-dropdown"></ul>');
2795 var selectOptions = $select.children('option');
2796
2797 var label;
2798 if ($select.find('option:selected') !== undefined) {
2799 label = $select.find('option:selected');
2800 }
2801 else {
2802 label = options.first();
2803 }
2804
2805
2806 // Create Dropdown structure
2807 selectOptions.each(function () {
2808 // Add disabled attr if disabled
2809 options.append($('<li class="' + (($(this).is(':disabled')) ? 'disabled' : '') + '"><span>' + $(this).html() + '</span></li>'));
2810 });
2811
2812
2813 options.find('li').each(function (i) {
2814 var $curr_select = $select;
2815 $(this).click(function () {
2816 // Check if option element is disabled
2817 if (!$(this).hasClass('disabled')) {
2818 $curr_select.find('option').eq(i).prop('selected', true);
2819 // Trigger onchange() event
2820 $curr_select.trigger('change');
2821 $curr_select.siblings('input.select-dropdown').val($(this).text());
2822 if (typeof callback !== 'undefined') callback();
2823 }
2824 });
2825
2826 });
2827
2828 // Wrap Elements
2829 $select.wrap(wrapper);
2830 // Add Select Display Element
2831 var dropdownIcon = $('<span class="caret">&#9660;</span>');
2832 if ( $select.is(':disabled') )
2833 dropdownIcon.addClass('disabled');
2834
2835 // escape double quotes
2836 var sanitizedLabelHtml = label.html().replace(/"/g, '&quot;');
2837
2838 var $newSelect = $('<input type="text" class="select-dropdown" readonly="true" ' + (($select.is(':disabled')) ? 'disabled' : '') + ' data-activates="select-options-' + uniqueID +'" value="'+ sanitizedLabelHtml +'"/>');
2839 $select.before($newSelect);
2840 $newSelect.before(dropdownIcon);
2841
2842 $('body').append(options);
2843 // Check if section element is disabled
2844 if (!$select.is(':disabled')) {
2845 $newSelect.dropdown({"hover": false});
2846 }
2847
2848 // Copy tabindex
2849 if ($select.attr('tabindex')) {
2850 $($newSelect[0]).attr('tabindex', $select.attr('tabindex'));
2851 }
2852
2853 $select.addClass('initialized');
2854
2855 $newSelect.on('focus', function(){
2856 $(this).trigger('open');
2857 label = $(this).val();
2858 selectedOption = options.find('li').filter(function() {
2859 return $(this).text().toLowerCase() === label.toLowerCase();
2860 })[0];
2861 activateOption(options, selectedOption);
2862 });
2863
2864 $newSelect.on('blur', function(){
2865 $(this).trigger('close');
2866 });
2867
2868 // Make option as selected and scroll to selected position
2869 activateOption = function(collection, newOption) {
2870 collection.find('li.active').removeClass('active');
2871 $(newOption).addClass('active');
2872 collection.scrollTo(newOption);
2873 };
2874
2875 // Allow user to search by typing
2876 // this array is cleared after 1 second
2877 filterQuery = [];
2878
2879 onKeyDown = function(event){
2880 // TAB - switch to another input
2881 if(event.which == 9){
2882 $newSelect.trigger('close');
2883 return;
2884 }
2885
2886 // ARROW DOWN WHEN SELECT IS CLOSED - open select options
2887 if(event.which == 40 && !options.is(":visible")){
2888 $newSelect.trigger('open');
2889 return;
2890 }
2891
2892 // ENTER WHEN SELECT IS CLOSED - submit form
2893 if(event.which == 13 && !options.is(":visible")){
2894 return;
2895 }
2896
2897 event.preventDefault();
2898
2899 // CASE WHEN USER TYPE LETTERS
2900 letter = String.fromCharCode(event.which).toLowerCase();
2901 var nonLetters = [9,13,27,38,40];
2902 if (letter && (nonLetters.indexOf(event.which) === -1)){
2903 filterQuery.push(letter);
2904
2905 string = filterQuery.join("");
2906
2907 newOption = options.find('li').filter(function() {
2908 return $(this).text().toLowerCase().indexOf(string) === 0;
2909 })[0];
2910
2911 if(newOption){
2912 activateOption(options, newOption);
2913 }
2914 }
2915
2916 // ENTER - select option and close when select options are opened
2917 if(event.which == 13){
2918 activeOption = options.find('li.active:not(.disabled)')[0];
2919 if(activeOption){
2920 $(activeOption).trigger('click');
2921 $newSelect.trigger('close');
2922 }
2923 }
2924
2925 // ARROW DOWN - move to next not disabled option
2926 if(event.which == 40){
2927 newOption = options.find('li.active').next('li:not(.disabled)')[0];
2928 if(newOption){
2929 activateOption(options, newOption);
2930 }
2931 }
2932
2933 // ESC - close options
2934 if(event.which == 27){
2935 $newSelect.trigger('close');
2936 }
2937
2938 // ARROW UP - move to previous not disabled option
2939 if(event.which == 38){
2940 newOption = options.find('li.active').prev('li:not(.disabled)')[0];
2941 if(newOption){
2942 activateOption(options, newOption);
2943 }
2944 }
2945
2946 // Automaticaly clean filter query so user can search again by starting letters
2947 setTimeout(function(){ filterQuery = []; }, 1000);
2948 };
2949
2950 $newSelect.on('keydown', onKeyDown);
2951 });
2952 };
2953
2954}( jQuery ));
2955;(function ($) {
2956
2957 var methods = {
2958
2959 init : function(options) {
2960 var defaults = {
2961 indicators: true,
2962 height: 400,
2963 transition: 500,
2964 interval: 6000
2965 };
2966 options = $.extend(defaults, options);
2967
2968 return this.each(function() {
2969
2970 // For each slider, we want to keep track of
2971 // which slide is active and its associated content
2972 var $this = $(this);
2973 var $slider = $this.find('ul.slides').first();
2974 var $slides = $slider.find('li');
2975 var $active_index = $slider.find('.active').index();
2976 var $active;
2977 if ($active_index != -1) { $active = $slides.eq($active_index); }
2978
2979 // Transitions the caption depending on alignment
2980 function captionTransition(caption, duration) {
2981 if (caption.hasClass("center-align")) {
2982 caption.velocity({opacity: 0, translateY: -100}, {duration: duration, queue: false});
2983 }
2984 else if (caption.hasClass("right-align")) {
2985 caption.velocity({opacity: 0, translateX: 100}, {duration: duration, queue: false});
2986 }
2987 else if (caption.hasClass("left-align")) {
2988 caption.velocity({opacity: 0, translateX: -100}, {duration: duration, queue: false});
2989 }
2990 }
2991
2992 // This function will transition the slide to any index of the next slide
2993 function moveToSlide(index) {
2994 if (index >= $slides.length) index = 0;
2995 else if (index < 0) index = $slides.length -1;
2996
2997 $active_index = $slider.find('.active').index();
2998
2999 // Only do if index changes
3000 if ($active_index != index) {
3001 $active = $slides.eq($active_index);
3002 $caption = $active.find('.caption');
3003
3004 $active.removeClass('active');
3005 $active.velocity({opacity: 0}, {duration: options.transition, queue: false, easing: 'easeOutQuad',
3006 complete: function() {
3007 $slides.not('.active').velocity({opacity: 0, translateX: 0, translateY: 0}, {duration: 0, queue: false});
3008 } });
3009 captionTransition($caption, options.transition);
3010
3011
3012 // Update indicators
3013 if (options.indicators) {
3014 $indicators.eq($active_index).removeClass('active');
3015 }
3016
3017 $slides.eq(index).velocity({opacity: 1}, {duration: options.transition, queue: false, easing: 'easeOutQuad'});
3018 $slides.eq(index).find('.caption').velocity({opacity: 1, translateX: 0, translateY: 0}, {duration: options.transition, delay: options.transition, queue: false, easing: 'easeOutQuad'});
3019 $slides.eq(index).addClass('active');
3020
3021
3022 // Update indicators
3023 if (options.indicators) {
3024 $indicators.eq(index).addClass('active');
3025 }
3026 }
3027 }
3028
3029 // Set height of slider
3030 // If fullscreen, do nothing
3031 if (!$this.hasClass('fullscreen')) {
3032 if (options.indicators) {
3033 // Add height if indicators are present
3034 $this.height(options.height + 40);
3035 }
3036 else {
3037 $this.height(options.height);
3038 }
3039 $slider.height(options.height);
3040 }
3041
3042
3043 // Set initial positions of captions
3044 $slides.find('.caption').each(function () {
3045 captionTransition($(this), 0);
3046 });
3047
3048 // Move img src into background-image
3049 $slides.find('img').each(function () {
3050 $(this).css('background-image', 'url(' + $(this).attr('src') + ')' );
3051 $(this).attr('src', 'data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==');
3052 });
3053
3054 // dynamically add indicators
3055 if (options.indicators) {
3056 var $indicators = $('<ul class="indicators"></ul>');
3057 $slides.each(function( index ) {
3058 var $indicator = $('<li class="indicator-item"></li>');
3059
3060 // Handle clicks on indicators
3061 $indicator.click(function () {
3062 var $parent = $slider.parent();
3063 var curr_index = $parent.find($(this)).index();
3064 moveToSlide(curr_index);
3065
3066 // reset interval
3067 clearInterval($interval);
3068 $interval = setInterval(
3069 function(){
3070 $active_index = $slider.find('.active').index();
3071 if ($slides.length == $active_index + 1) $active_index = 0; // loop to start
3072 else $active_index += 1;
3073
3074 moveToSlide($active_index);
3075
3076 }, options.transition + options.interval
3077 );
3078 });
3079 $indicators.append($indicator);
3080 });
3081 $this.append($indicators);
3082 $indicators = $this.find('ul.indicators').find('li.indicator-item');
3083 }
3084
3085 if ($active) {
3086 $active.show();
3087 }
3088 else {
3089 $slides.first().addClass('active').velocity({opacity: 1}, {duration: options.transition, queue: false, easing: 'easeOutQuad'});
3090
3091 $active_index = 0;
3092 $active = $slides.eq($active_index);
3093
3094 // Update indicators
3095 if (options.indicators) {
3096 $indicators.eq($active_index).addClass('active');
3097 }
3098 }
3099
3100 // Adjust height to current slide
3101 $active.find('img').each(function() {
3102 $active.find('.caption').velocity({opacity: 1, translateX: 0, translateY: 0}, {duration: options.transition, queue: false, easing: 'easeOutQuad'});
3103 });
3104
3105 // auto scroll
3106 $interval = setInterval(
3107 function(){
3108 $active_index = $slider.find('.active').index();
3109 moveToSlide($active_index + 1);
3110
3111 }, options.transition + options.interval
3112 );
3113
3114
3115 // HammerJS, Swipe navigation
3116
3117 // Touch Event
3118 var panning = false;
3119 var swipeLeft = false;
3120 var swipeRight = false;
3121
3122 $this.hammer({
3123 prevent_default: false
3124 }).bind('pan', function(e) {
3125 if (e.gesture.pointerType === "touch") {
3126
3127 // reset interval
3128 clearInterval($interval);
3129
3130 var direction = e.gesture.direction;
3131 var x = e.gesture.deltaX;
3132 var velocityX = e.gesture.velocityX;
3133
3134 $curr_slide = $slider.find('.active');
3135 $curr_slide.velocity({ translateX: x
3136 }, {duration: 50, queue: false, easing: 'easeOutQuad'});
3137
3138 // Swipe Left
3139 if (direction === 4 && (x > ($this.innerWidth() / 2) || velocityX < -0.65)) {
3140 swipeRight = true;
3141 }
3142 // Swipe Right
3143 else if (direction === 2 && (x < (-1 * $this.innerWidth() / 2) || velocityX > 0.65)) {
3144 swipeLeft = true;
3145 }
3146
3147 // Make Slide Behind active slide visible
3148 var next_slide;
3149 if (swipeLeft) {
3150 next_slide = $curr_slide.next();
3151 if (next_slide.length === 0) {
3152 next_slide = $slides.first();
3153 }
3154 next_slide.velocity({ opacity: 1
3155 }, {duration: 300, queue: false, easing: 'easeOutQuad'});
3156 }
3157 if (swipeRight) {
3158 next_slide = $curr_slide.prev();
3159 if (next_slide.length === 0) {
3160 next_slide = $slides.last();
3161 }
3162 next_slide.velocity({ opacity: 1
3163 }, {duration: 300, queue: false, easing: 'easeOutQuad'});
3164 }
3165
3166
3167 }
3168
3169 }).bind('panend', function(e) {
3170 if (e.gesture.pointerType === "touch") {
3171
3172 $curr_slide = $slider.find('.active');
3173 panning = false;
3174 curr_index = $slider.find('.active').index();
3175
3176 if (!swipeRight && !swipeLeft) {
3177 // Return to original spot
3178 $curr_slide.velocity({ translateX: 0
3179 }, {duration: 300, queue: false, easing: 'easeOutQuad'});
3180 }
3181 else if (swipeLeft) {
3182 moveToSlide(curr_index + 1);
3183 $curr_slide.velocity({translateX: -1 * $this.innerWidth() }, {duration: 300, queue: false, easing: 'easeOutQuad',
3184 complete: function() {
3185 $curr_slide.velocity({opacity: 0, translateX: 0}, {duration: 0, queue: false});
3186 } });
3187 }
3188 else if (swipeRight) {
3189 moveToSlide(curr_index - 1);
3190 $curr_slide.velocity({translateX: $this.innerWidth() }, {duration: 300, queue: false, easing: 'easeOutQuad',
3191 complete: function() {
3192 $curr_slide.velocity({opacity: 0, translateX: 0}, {duration: 0, queue: false});
3193 } });
3194 }
3195 swipeLeft = false;
3196 swipeRight = false;
3197
3198 // Restart interval
3199 clearInterval($interval);
3200 $interval = setInterval(
3201 function(){
3202 $active_index = $slider.find('.active').index();
3203 if ($slides.length == $active_index + 1) $active_index = 0; // loop to start
3204 else $active_index += 1;
3205
3206 moveToSlide($active_index);
3207
3208 }, options.transition + options.interval
3209 );
3210 }
3211 });
3212
3213 $this.on('sliderPause', function() {
3214 clearInterval($interval);
3215 });
3216
3217 $this.on('sliderStart', function() {
3218 clearInterval($interval);
3219 $interval = setInterval(
3220 function(){
3221 $active_index = $slider.find('.active').index();
3222 if ($slides.length == $active_index + 1) $active_index = 0; // loop to start
3223 else $active_index += 1;
3224
3225 moveToSlide($active_index);
3226
3227 }, options.transition + options.interval
3228 );
3229 });
3230
3231 });
3232
3233
3234
3235 },
3236 pause : function() {
3237 $(this).trigger('sliderPause');
3238 },
3239 start : function() {
3240 $(this).trigger('sliderStart');
3241 }
3242 };
3243
3244
3245 $.fn.slider = function(methodOrOptions) {
3246 if ( methods[methodOrOptions] ) {
3247 return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
3248 } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
3249 // Default to "init"
3250 return methods.init.apply( this, arguments );
3251 } else {
3252 $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tooltip' );
3253 }
3254 }; // Plugin end
3255}( jQuery ));;(function ($) {
3256 $(document).ready(function() {
3257
3258 $(document).on('click.card', '.card', function (e) {
3259 if ($(this).find('> .card-reveal').length) {
3260 if ($(e.target).is($('.card-reveal .card-title')) || $(e.target).is($('.card-reveal .card-title i'))) {
3261 // Make Reveal animate down and display none
3262 $(this).find('.card-reveal').velocity(
3263 {translateY: 0}, {
3264 duration: 225,
3265 queue: false,
3266 easing: 'easeInOutQuad',
3267 complete: function() { $(this).css({ display: 'none'}); }
3268 }
3269 );
3270 }
3271 else if ($(e.target).is($('.card .activator')) ||
3272 $(e.target).is($('.card .activator i')) ) {
3273 $(this).find('.card-reveal').css({ display: 'block'}).velocity("stop", false).velocity({translateY: '-100%'}, {duration: 300, queue: false, easing: 'easeInOutQuad'});
3274 }
3275 }
3276
3277
3278 });
3279
3280 });
3281}( jQuery ));;(function ($) {
3282 $(document).ready(function() {
3283
3284 $(document).on('click.chip', '.chip .material-icons', function (e) {
3285 $(this).parent().remove();
3286 });
3287
3288 });
3289}( jQuery ));;(function ($) {
3290 $(document).ready(function() {
3291
3292 $.fn.pushpin = function (options) {
3293
3294 var defaults = {
3295 top: 0,
3296 bottom: Infinity,
3297 offset: 0
3298 }
3299 options = $.extend(defaults, options);
3300
3301 $index = 0;
3302 return this.each(function() {
3303 var $uniqueId = Materialize.guid(),
3304 $this = $(this),
3305 $original_offset = $(this).offset().top;
3306
3307 function removePinClasses(object) {
3308 object.removeClass('pin-top');
3309 object.removeClass('pinned');
3310 object.removeClass('pin-bottom');
3311 }
3312
3313 function updateElements(objects, scrolled) {
3314 objects.each(function () {
3315 // Add position fixed (because its between top and bottom)
3316 if (options.top <= scrolled && options.bottom >= scrolled && !$(this).hasClass('pinned')) {
3317 removePinClasses($(this));
3318 $(this).css('top', options.offset);
3319 $(this).addClass('pinned');
3320 }
3321
3322 // Add pin-top (when scrolled position is above top)
3323 if (scrolled < options.top && !$(this).hasClass('pin-top')) {
3324 removePinClasses($(this));
3325 $(this).css('top', 0);
3326 $(this).addClass('pin-top');
3327 }
3328
3329 // Add pin-bottom (when scrolled position is below bottom)
3330 if (scrolled > options.bottom && !$(this).hasClass('pin-bottom')) {
3331 removePinClasses($(this));
3332 $(this).addClass('pin-bottom');
3333 $(this).css('top', options.bottom - $original_offset);
3334 }
3335 });
3336 }
3337
3338 updateElements($this, $(window).scrollTop());
3339 $(window).on('scroll.' + $uniqueId, function () {
3340 var $scrolled = $(window).scrollTop() + options.offset;
3341 updateElements($this, $scrolled);
3342 });
3343
3344 });
3345
3346 };
3347
3348
3349 });
3350}( jQuery ));;(function ($) {
3351 $(document).ready(function() {
3352
3353 // jQuery reverse
3354 $.fn.reverse = [].reverse;
3355
3356 $(document).on('mouseenter.fixedActionBtn', '.fixed-action-btn', function(e) {
3357 var $this = $(this);
3358 openFABMenu($this);
3359
3360 });
3361
3362 $(document).on('mouseleave.fixedActionBtn', '.fixed-action-btn', function(e) {
3363 var $this = $(this);
3364 closeFABMenu($this);
3365 });
3366
3367 });
3368
3369 $.fn.extend({
3370 openFAB: function() {
3371 var $this = $(this);
3372 openFABMenu($this);
3373 },
3374 closeFAB: function() {
3375 closeFABMenu($this);
3376 }
3377 });
3378
3379
3380 var openFABMenu = function (btn) {
3381 $this = btn;
3382 if ($this.hasClass('active') === false) {
3383 $this.addClass('active');
3384 $this.find('ul .btn-floating').velocity(
3385 { scaleY: ".4", scaleX: ".4", translateY: "40px"},
3386 { duration: 0 });
3387
3388 var time = 0;
3389 $this.find('ul .btn-floating').reverse().each(function () {
3390 $(this).velocity(
3391 { opacity: "1", scaleX: "1", scaleY: "1", translateY: "0"},
3392 { duration: 80, delay: time });
3393 time += 40;
3394 });
3395 }
3396 };
3397
3398 var closeFABMenu = function (btn) {
3399 $this = btn;
3400 $this.removeClass('active');
3401 var time = 0;
3402 $this.find('ul .btn-floating').velocity("stop", true);
3403 $this.find('ul .btn-floating').velocity(
3404 { opacity: "0", scaleX: ".4", scaleY: ".4", translateY: "40px"},
3405 { duration: 80 }
3406 );
3407 };
3408
3409
3410}( jQuery ));
3411;(function ($) {
3412 // Image transition function
3413 Materialize.fadeInImage = function(selector){
3414 var element = $(selector);
3415 element.css({opacity: 0});
3416 $(element).velocity({opacity: 1}, {
3417 duration: 650,
3418 queue: false,
3419 easing: 'easeOutSine'
3420 });
3421 $(element).velocity({opacity: 1}, {
3422 duration: 1300,
3423 queue: false,
3424 easing: 'swing',
3425 step: function(now, fx) {
3426 fx.start = 100;
3427 var grayscale_setting = now/100;
3428 var brightness_setting = 150 - (100 - now)/1.75;
3429
3430 if (brightness_setting < 100) {
3431 brightness_setting = 100;
3432 }
3433 if (now >= 0) {
3434 $(this).css({
3435 "-webkit-filter": "grayscale("+grayscale_setting+")" + "brightness("+brightness_setting+"%)",
3436 "filter": "grayscale("+grayscale_setting+")" + "brightness("+brightness_setting+"%)"
3437 });
3438 }
3439 }
3440 });
3441 };
3442
3443 // Horizontal staggered list
3444 Materialize.showStaggeredList = function(selector) {
3445 var time = 0;
3446 $(selector).find('li').velocity(
3447 { translateX: "-100px"},
3448 { duration: 0 });
3449
3450 $(selector).find('li').each(function() {
3451 $(this).velocity(
3452 { opacity: "1", translateX: "0"},
3453 { duration: 800, delay: time, easing: [60, 10] });
3454 time += 120;
3455 });
3456 };
3457
3458
3459 $(document).ready(function() {
3460 // Hardcoded .staggered-list scrollFire
3461 // var staggeredListOptions = [];
3462 // $('ul.staggered-list').each(function (i) {
3463
3464 // var label = 'scrollFire-' + i;
3465 // $(this).addClass(label);
3466 // staggeredListOptions.push(
3467 // {selector: 'ul.staggered-list.' + label,
3468 // offset: 200,
3469 // callback: 'showStaggeredList("ul.staggered-list.' + label + '")'});
3470 // });
3471 // scrollFire(staggeredListOptions);
3472
3473 // HammerJS, Swipe navigation
3474
3475 // Touch Event
3476 var swipeLeft = false;
3477 var swipeRight = false;
3478
3479
3480 // Dismissible Collections
3481 $('.dismissable').each(function() {
3482 $(this).hammer({
3483 prevent_default: false
3484 }).bind('pan', function(e) {
3485 if (e.gesture.pointerType === "touch") {
3486 var $this = $(this);
3487 var direction = e.gesture.direction;
3488 var x = e.gesture.deltaX;
3489 var velocityX = e.gesture.velocityX;
3490
3491 $this.velocity({ translateX: x
3492 }, {duration: 50, queue: false, easing: 'easeOutQuad'});
3493
3494 // Swipe Left
3495 if (direction === 4 && (x > ($this.innerWidth() / 2) || velocityX < -0.75)) {
3496 swipeLeft = true;
3497 }
3498
3499 // Swipe Right
3500 if (direction === 2 && (x < (-1 * $this.innerWidth() / 2) || velocityX > 0.75)) {
3501 swipeRight = true;
3502 }
3503 }
3504 }).bind('panend', function(e) {
3505 // Reset if collection is moved back into original position
3506 if (Math.abs(e.gesture.deltaX) < ($(this).innerWidth() / 2)) {
3507 swipeRight = false;
3508 swipeLeft = false;
3509 }
3510
3511 if (e.gesture.pointerType === "touch") {
3512 var $this = $(this);
3513 if (swipeLeft || swipeRight) {
3514 var fullWidth;
3515 if (swipeLeft) { fullWidth = $this.innerWidth(); }
3516 else { fullWidth = -1 * $this.innerWidth(); }
3517
3518 $this.velocity({ translateX: fullWidth,
3519 }, {duration: 100, queue: false, easing: 'easeOutQuad', complete:
3520 function() {
3521 $this.css('border', 'none');
3522 $this.velocity({ height: 0, padding: 0,
3523 }, {duration: 200, queue: false, easing: 'easeOutQuad', complete:
3524 function() { $this.remove(); }
3525 });
3526 }
3527 });
3528 }
3529 else {
3530 $this.velocity({ translateX: 0,
3531 }, {duration: 100, queue: false, easing: 'easeOutQuad'});
3532 }
3533 swipeLeft = false;
3534 swipeRight = false;
3535 }
3536 });
3537
3538 });
3539
3540
3541 // time = 0
3542 // // Vertical Staggered list
3543 // $('ul.staggered-list.vertical li').velocity(
3544 // { translateY: "100px"},
3545 // { duration: 0 });
3546
3547 // $('ul.staggered-list.vertical li').each(function() {
3548 // $(this).velocity(
3549 // { opacity: "1", translateY: "0"},
3550 // { duration: 800, delay: time, easing: [60, 25] });
3551 // time += 120;
3552 // });
3553
3554 // // Fade in and Scale
3555 // $('.fade-in.scale').velocity(
3556 // { scaleX: .4, scaleY: .4, translateX: -600},
3557 // { duration: 0});
3558 // $('.fade-in').each(function() {
3559 // $(this).velocity(
3560 // { opacity: "1", scaleX: 1, scaleY: 1, translateX: 0},
3561 // { duration: 800, easing: [60, 10] });
3562 // });
3563 });
3564}( jQuery ));
3565;(function($) {
3566
3567 // Input: Array of JSON objects {selector, offset, callback}
3568
3569 Materialize.scrollFire = function(options) {
3570
3571 var didScroll = false;
3572
3573 window.addEventListener("scroll", function() {
3574 didScroll = true;
3575 });
3576
3577 // Rate limit to 100ms
3578 setInterval(function() {
3579 if(didScroll) {
3580 didScroll = false;
3581
3582 var windowScroll = window.pageYOffset + window.innerHeight;
3583
3584 for (var i = 0 ; i < options.length; i++) {
3585 // Get options from each line
3586 var value = options[i];
3587 var selector = value.selector,
3588 offset = value.offset,
3589 callback = value.callback;
3590
3591 var currentElement = document.querySelector(selector);
3592 if ( currentElement !== null) {
3593 var elementOffset = currentElement.getBoundingClientRect().top + window.pageYOffset;
3594
3595 if (windowScroll > (elementOffset + offset)) {
3596 if (value.done !== true) {
3597 var callbackFunc = new Function(callback);
3598 callbackFunc();
3599 value.done = true;
3600 }
3601 }
3602 }
3603 }
3604 }
3605 }, 100);
3606 };
3607
3608})(jQuery);;/*!
3609 * pickadate.js v3.5.0, 2014/04/13
3610 * By Amsul, http://amsul.ca
3611 * Hosted on http://amsul.github.io/pickadate.js
3612 * Licensed under MIT
3613 */
3614
3615(function ( factory ) {
3616
3617 // AMD.
3618 if ( typeof define == 'function' && define.amd )
3619 define( 'picker', ['jquery'], factory )
3620
3621 // Node.js/browserify.
3622 else if ( typeof exports == 'object' )
3623 module.exports = factory( require('jquery') )
3624
3625 // Browser globals.
3626 else this.Picker = factory( jQuery )
3627
3628}(function( $ ) {
3629
3630var $window = $( window )
3631var $document = $( document )
3632var $html = $( document.documentElement )
3633
3634
3635/**
3636 * The picker constructor that creates a blank picker.
3637 */
3638function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
3639
3640 // If there’s no element, return the picker constructor.
3641 if ( !ELEMENT ) return PickerConstructor
3642
3643
3644 var
3645 IS_DEFAULT_THEME = false,
3646
3647
3648 // The state of the picker.
3649 STATE = {
3650 id: ELEMENT.id || 'P' + Math.abs( ~~(Math.random() * new Date()) )
3651 },
3652
3653
3654 // Merge the defaults and options passed.
3655 SETTINGS = COMPONENT ? $.extend( true, {}, COMPONENT.defaults, OPTIONS ) : OPTIONS || {},
3656
3657
3658 // Merge the default classes with the settings classes.
3659 CLASSES = $.extend( {}, PickerConstructor.klasses(), SETTINGS.klass ),
3660
3661
3662 // The element node wrapper into a jQuery object.
3663 $ELEMENT = $( ELEMENT ),
3664
3665
3666 // Pseudo picker constructor.
3667 PickerInstance = function() {
3668 return this.start()
3669 },
3670
3671
3672 // The picker prototype.
3673 P = PickerInstance.prototype = {
3674
3675 constructor: PickerInstance,
3676
3677 $node: $ELEMENT,
3678
3679
3680 /**
3681 * Initialize everything
3682 */
3683 start: function() {
3684
3685 // If it’s already started, do nothing.
3686 if ( STATE && STATE.start ) return P
3687
3688
3689 // Update the picker states.
3690 STATE.methods = {}
3691 STATE.start = true
3692 STATE.open = false
3693 STATE.type = ELEMENT.type
3694
3695
3696 // Confirm focus state, convert into text input to remove UA stylings,
3697 // and set as readonly to prevent keyboard popup.
3698 ELEMENT.autofocus = ELEMENT == getActiveElement()
3699 ELEMENT.readOnly = !SETTINGS.editable
3700 ELEMENT.id = ELEMENT.id || STATE.id
3701 if ( ELEMENT.type != 'text' ) {
3702 ELEMENT.type = 'text'
3703 }
3704
3705
3706 // Create a new picker component with the settings.
3707 P.component = new COMPONENT(P, SETTINGS)
3708
3709
3710 // Create the picker root with a holder and then prepare it.
3711 P.$root = $( PickerConstructor._.node('div', createWrappedComponent(), CLASSES.picker, 'id="' + ELEMENT.id + '_root" tabindex="0"') )
3712 prepareElementRoot()
3713
3714
3715 // If there’s a format for the hidden input element, create the element.
3716 if ( SETTINGS.formatSubmit ) {
3717 prepareElementHidden()
3718 }
3719
3720
3721 // Prepare the input element.
3722 prepareElement()
3723
3724
3725 // Insert the root as specified in the settings.
3726 if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root )
3727 else $ELEMENT.after( P.$root )
3728
3729
3730 // Bind the default component and settings events.
3731 P.on({
3732 start: P.component.onStart,
3733 render: P.component.onRender,
3734 stop: P.component.onStop,
3735 open: P.component.onOpen,
3736 close: P.component.onClose,
3737 set: P.component.onSet
3738 }).on({
3739 start: SETTINGS.onStart,
3740 render: SETTINGS.onRender,
3741 stop: SETTINGS.onStop,
3742 open: SETTINGS.onOpen,
3743 close: SETTINGS.onClose,
3744 set: SETTINGS.onSet
3745 })
3746
3747
3748 // Once we’re all set, check the theme in use.
3749 IS_DEFAULT_THEME = isUsingDefaultTheme( P.$root.children()[ 0 ] )
3750
3751
3752 // If the element has autofocus, open the picker.
3753 if ( ELEMENT.autofocus ) {
3754 P.open()
3755 }
3756
3757
3758 // Trigger queued the “start” and “render” events.
3759 return P.trigger( 'start' ).trigger( 'render' )
3760 }, //start
3761
3762
3763 /**
3764 * Render a new picker
3765 */
3766 render: function( entireComponent ) {
3767
3768 // Insert a new component holder in the root or box.
3769 if ( entireComponent ) P.$root.html( createWrappedComponent() )
3770 else P.$root.find( '.' + CLASSES.box ).html( P.component.nodes( STATE.open ) )
3771
3772 // Trigger the queued “render” events.
3773 return P.trigger( 'render' )
3774 }, //render
3775
3776
3777 /**
3778 * Destroy everything
3779 */
3780 stop: function() {
3781
3782 // If it’s already stopped, do nothing.
3783 if ( !STATE.start ) return P
3784
3785 // Then close the picker.
3786 P.close()
3787
3788 // Remove the hidden field.
3789 if ( P._hidden ) {
3790 P._hidden.parentNode.removeChild( P._hidden )
3791 }
3792
3793 // Remove the root.
3794 P.$root.remove()
3795
3796 // Remove the input class, remove the stored data, and unbind
3797 // the events (after a tick for IE - see `P.close`).
3798 $ELEMENT.removeClass( CLASSES.input ).removeData( NAME )
3799 setTimeout( function() {
3800 $ELEMENT.off( '.' + STATE.id )
3801 }, 0)
3802
3803 // Restore the element state
3804 ELEMENT.type = STATE.type
3805 ELEMENT.readOnly = false
3806
3807 // Trigger the queued “stop” events.
3808 P.trigger( 'stop' )
3809
3810 // Reset the picker states.
3811 STATE.methods = {}
3812 STATE.start = false
3813
3814 return P
3815 }, //stop
3816
3817
3818 /**
3819 * Open up the picker
3820 */
3821 open: function( dontGiveFocus ) {
3822
3823 // If it’s already open, do nothing.
3824 if ( STATE.open ) return P
3825
3826 // Add the “active” class.
3827 $ELEMENT.addClass( CLASSES.active )
3828 aria( ELEMENT, 'expanded', true )
3829
3830 // * A Firefox bug, when `html` has `overflow:hidden`, results in
3831 // killing transitions :(. So add the “opened” state on the next tick.
3832 // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289
3833 setTimeout( function() {
3834
3835 // Add the “opened” class to the picker root.
3836 P.$root.addClass( CLASSES.opened )
3837 aria( P.$root[0], 'hidden', false )
3838
3839 }, 0 )
3840
3841 // If we have to give focus, bind the element and doc events.
3842 if ( dontGiveFocus !== false ) {
3843
3844 // Set it as open.
3845 STATE.open = true
3846
3847 // Prevent the page from scrolling.
3848 if ( IS_DEFAULT_THEME ) {
3849 $html.
3850 css( 'overflow', 'hidden' ).
3851 css( 'padding-right', '+=' + getScrollbarWidth() )
3852 }
3853
3854 // Pass focus to the root element’s jQuery object.
3855 // * Workaround for iOS8 to bring the picker’s root into view.
3856 P.$root[0].focus()
3857
3858 // Bind the document events.
3859 $document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) {
3860
3861 var target = event.target
3862
3863 // If the target of the event is not the element, close the picker picker.
3864 // * Don’t worry about clicks or focusins on the root because those don’t bubble up.
3865 // Also, for Firefox, a click on an `option` element bubbles up directly
3866 // to the doc. So make sure the target wasn't the doc.
3867 // * In Firefox stopPropagation() doesn’t prevent right-click events from bubbling,
3868 // which causes the picker to unexpectedly close when right-clicking it. So make
3869 // sure the event wasn’t a right-click.
3870 if ( target != ELEMENT && target != document && event.which != 3 ) {
3871
3872 // If the target was the holder that covers the screen,
3873 // keep the element focused to maintain tabindex.
3874 P.close( target === P.$root.children()[0] )
3875 }
3876
3877 }).on( 'keydown.' + STATE.id, function( event ) {
3878
3879 var
3880 // Get the keycode.
3881 keycode = event.keyCode,
3882
3883 // Translate that to a selection change.
3884 keycodeToMove = P.component.key[ keycode ],
3885
3886 // Grab the target.
3887 target = event.target
3888
3889
3890 // On escape, close the picker and give focus.
3891 if ( keycode == 27 ) {
3892 P.close( true )
3893 }
3894
3895
3896 // Check if there is a key movement or “enter” keypress on the element.
3897 else if ( target == P.$root[0] && ( keycodeToMove || keycode == 13 ) ) {
3898
3899 // Prevent the default action to stop page movement.
3900 event.preventDefault()
3901
3902 // Trigger the key movement action.
3903 if ( keycodeToMove ) {
3904 PickerConstructor._.trigger( P.component.key.go, P, [ PickerConstructor._.trigger( keycodeToMove ) ] )
3905 }
3906
3907 // On “enter”, if the highlighted item isn’t disabled, set the value and close.
3908 else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) {
3909 P.set( 'select', P.component.item.highlight ).close()
3910 }
3911 }
3912
3913
3914 // If the target is within the root and “enter” is pressed,
3915 // prevent the default action and trigger a click on the target instead.
3916 else if ( $.contains( P.$root[0], target ) && keycode == 13 ) {
3917 event.preventDefault()
3918 target.click()
3919 }
3920 })
3921 }
3922
3923 // Trigger the queued “open” events.
3924 return P.trigger( 'open' )
3925 }, //open
3926
3927
3928 /**
3929 * Close the picker
3930 */
3931 close: function( giveFocus ) {
3932
3933 // If we need to give focus, do it before changing states.
3934 if ( giveFocus ) {
3935 // ....ah yes! It would’ve been incomplete without a crazy workaround for IE :|
3936 // The focus is triggered *after* the close has completed - causing it
3937 // to open again. So unbind and rebind the event at the next tick.
3938 P.$root.off( 'focus.toOpen' )[0].focus()
3939 setTimeout( function() {
3940 P.$root.on( 'focus.toOpen', handleFocusToOpenEvent )
3941 }, 0 )
3942 }
3943
3944 // Remove the “active” class.
3945 $ELEMENT.removeClass( CLASSES.active )
3946 aria( ELEMENT, 'expanded', false )
3947
3948 // * A Firefox bug, when `html` has `overflow:hidden`, results in
3949 // killing transitions :(. So remove the “opened” state on the next tick.
3950 // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289
3951 setTimeout( function() {
3952
3953 // Remove the “opened” and “focused” class from the picker root.
3954 P.$root.removeClass( CLASSES.opened + ' ' + CLASSES.focused )
3955 aria( P.$root[0], 'hidden', true )
3956
3957 }, 0 )
3958
3959 // If it’s already closed, do nothing more.
3960 if ( !STATE.open ) return P
3961
3962 // Set it as closed.
3963 STATE.open = false
3964
3965 // Allow the page to scroll.
3966 if ( IS_DEFAULT_THEME ) {
3967 $html.
3968 css( 'overflow', '' ).
3969 css( 'padding-right', '-=' + getScrollbarWidth() )
3970 }
3971
3972 // Unbind the document events.
3973 $document.off( '.' + STATE.id )
3974
3975 // Trigger the queued “close” events.
3976 return P.trigger( 'close' )
3977 }, //close
3978
3979
3980 /**
3981 * Clear the values
3982 */
3983 clear: function( options ) {
3984 return P.set( 'clear', null, options )
3985 }, //clear
3986
3987
3988 /**
3989 * Set something
3990 */
3991 set: function( thing, value, options ) {
3992
3993 var thingItem, thingValue,
3994 thingIsObject = $.isPlainObject( thing ),
3995 thingObject = thingIsObject ? thing : {}
3996
3997 // Make sure we have usable options.
3998 options = thingIsObject && $.isPlainObject( value ) ? value : options || {}
3999
4000 if ( thing ) {
4001
4002 // If the thing isn’t an object, make it one.
4003 if ( !thingIsObject ) {
4004 thingObject[ thing ] = value
4005 }
4006
4007 // Go through the things of items to set.
4008 for ( thingItem in thingObject ) {
4009
4010 // Grab the value of the thing.
4011 thingValue = thingObject[ thingItem ]
4012
4013 // First, if the item exists and there’s a value, set it.
4014 if ( thingItem in P.component.item ) {
4015 if ( thingValue === undefined ) thingValue = null
4016 P.component.set( thingItem, thingValue, options )
4017 }
4018
4019 // Then, check to update the element value and broadcast a change.
4020 if ( thingItem == 'select' || thingItem == 'clear' ) {
4021 $ELEMENT.
4022 val( thingItem == 'clear' ? '' : P.get( thingItem, SETTINGS.format ) ).
4023 trigger( 'change' )
4024 }
4025 }
4026
4027 // Render a new picker.
4028 P.render()
4029 }
4030
4031 // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`.
4032 return options.muted ? P : P.trigger( 'set', thingObject )
4033 }, //set
4034
4035
4036 /**
4037 * Get something
4038 */
4039 get: function( thing, format ) {
4040
4041 // Make sure there’s something to get.
4042 thing = thing || 'value'
4043
4044 // If a picker state exists, return that.
4045 if ( STATE[ thing ] != null ) {
4046 return STATE[ thing ]
4047 }
4048
4049 // Return the submission value, if that.
4050 if ( thing == 'valueSubmit' ) {
4051 if ( P._hidden ) {
4052 return P._hidden.value
4053 }
4054 thing = 'value'
4055 }
4056
4057 // Return the value, if that.
4058 if ( thing == 'value' ) {
4059 return ELEMENT.value
4060 }
4061
4062 // Check if a component item exists, return that.
4063 if ( thing in P.component.item ) {
4064 if ( typeof format == 'string' ) {
4065 var thingValue = P.component.get( thing )
4066 return thingValue ?
4067 PickerConstructor._.trigger(
4068 P.component.formats.toString,
4069 P.component,
4070 [ format, thingValue ]
4071 ) : ''
4072 }
4073 return P.component.get( thing )
4074 }
4075 }, //get
4076
4077
4078
4079 /**
4080 * Bind events on the things.
4081 */
4082 on: function( thing, method, internal ) {
4083
4084 var thingName, thingMethod,
4085 thingIsObject = $.isPlainObject( thing ),
4086 thingObject = thingIsObject ? thing : {}
4087
4088 if ( thing ) {
4089
4090 // If the thing isn’t an object, make it one.
4091 if ( !thingIsObject ) {
4092 thingObject[ thing ] = method
4093 }
4094
4095 // Go through the things to bind to.
4096 for ( thingName in thingObject ) {
4097
4098 // Grab the method of the thing.
4099 thingMethod = thingObject[ thingName ]
4100
4101 // If it was an internal binding, prefix it.
4102 if ( internal ) {
4103 thingName = '_' + thingName
4104 }
4105
4106 // Make sure the thing methods collection exists.
4107 STATE.methods[ thingName ] = STATE.methods[ thingName ] || []
4108
4109 // Add the method to the relative method collection.
4110 STATE.methods[ thingName ].push( thingMethod )
4111 }
4112 }
4113
4114 return P
4115 }, //on
4116
4117
4118
4119 /**
4120 * Unbind events on the things.
4121 */
4122 off: function() {
4123 var i, thingName,
4124 names = arguments;
4125 for ( i = 0, namesCount = names.length; i < namesCount; i += 1 ) {
4126 thingName = names[i]
4127 if ( thingName in STATE.methods ) {
4128 delete STATE.methods[thingName]
4129 }
4130 }
4131 return P
4132 },
4133
4134
4135 /**
4136 * Fire off method events.
4137 */
4138 trigger: function( name, data ) {
4139 var _trigger = function( name ) {
4140 var methodList = STATE.methods[ name ]
4141 if ( methodList ) {
4142 methodList.map( function( method ) {
4143 PickerConstructor._.trigger( method, P, [ data ] )
4144 })
4145 }
4146 }
4147 _trigger( '_' + name )
4148 _trigger( name )
4149 return P
4150 } //trigger
4151 } //PickerInstance.prototype
4152
4153
4154 /**
4155 * Wrap the picker holder components together.
4156 */
4157 function createWrappedComponent() {
4158
4159 // Create a picker wrapper holder
4160 return PickerConstructor._.node( 'div',
4161
4162 // Create a picker wrapper node
4163 PickerConstructor._.node( 'div',
4164
4165 // Create a picker frame
4166 PickerConstructor._.node( 'div',
4167
4168 // Create a picker box node
4169 PickerConstructor._.node( 'div',
4170
4171 // Create the components nodes.
4172 P.component.nodes( STATE.open ),
4173
4174 // The picker box class
4175 CLASSES.box
4176 ),
4177
4178 // Picker wrap class
4179 CLASSES.wrap
4180 ),
4181
4182 // Picker frame class
4183 CLASSES.frame
4184 ),
4185
4186 // Picker holder class
4187 CLASSES.holder
4188 ) //endreturn
4189 } //createWrappedComponent
4190
4191
4192
4193 /**
4194 * Prepare the input element with all bindings.
4195 */
4196 function prepareElement() {
4197
4198 $ELEMENT.
4199
4200 // Store the picker data by component name.
4201 data(NAME, P).
4202
4203 // Add the “input” class name.
4204 addClass(CLASSES.input).
4205
4206 // Remove the tabindex.
4207 attr('tabindex', -1).
4208
4209 // If there’s a `data-value`, update the value of the element.
4210 val( $ELEMENT.data('value') ?
4211 P.get('select', SETTINGS.format) :
4212 ELEMENT.value
4213 )
4214
4215
4216 // Only bind keydown events if the element isn’t editable.
4217 if ( !SETTINGS.editable ) {
4218
4219 $ELEMENT.
4220
4221 // On focus/click, focus onto the root to open it up.
4222 on( 'focus.' + STATE.id + ' click.' + STATE.id, function( event ) {
4223 event.preventDefault()
4224 P.$root[0].focus()
4225 }).
4226
4227 // Handle keyboard event based on the picker being opened or not.
4228 on( 'keydown.' + STATE.id, handleKeydownEvent )
4229 }
4230
4231
4232 // Update the aria attributes.
4233 aria(ELEMENT, {
4234 haspopup: true,
4235 expanded: false,
4236 readonly: false,
4237 owns: ELEMENT.id + '_root'
4238 })
4239 }
4240
4241
4242 /**
4243 * Prepare the root picker element with all bindings.
4244 */
4245 function prepareElementRoot() {
4246
4247 P.$root.
4248
4249 on({
4250
4251 // For iOS8.
4252 keydown: handleKeydownEvent,
4253
4254 // When something within the root is focused, stop from bubbling
4255 // to the doc and remove the “focused” state from the root.
4256 focusin: function( event ) {
4257 P.$root.removeClass( CLASSES.focused )
4258 event.stopPropagation()
4259 },
4260
4261 // When something within the root holder is clicked, stop it
4262 // from bubbling to the doc.
4263 'mousedown click': function( event ) {
4264
4265 var target = event.target
4266
4267 // Make sure the target isn’t the root holder so it can bubble up.
4268 if ( target != P.$root.children()[ 0 ] ) {
4269
4270 event.stopPropagation()
4271
4272 // * For mousedown events, cancel the default action in order to
4273 // prevent cases where focus is shifted onto external elements
4274 // when using things like jQuery mobile or MagnificPopup (ref: #249 & #120).
4275 // Also, for Firefox, don’t prevent action on the `option` element.
4276 if ( event.type == 'mousedown' && !$( target ).is( 'input, select, textarea, button, option' )) {
4277
4278 event.preventDefault()
4279
4280 // Re-focus onto the root so that users can click away
4281 // from elements focused within the picker.
4282 P.$root[0].focus()
4283 }
4284 }
4285 }
4286 }).
4287
4288 // Add/remove the “target” class on focus and blur.
4289 on({
4290 focus: function() {
4291 $ELEMENT.addClass( CLASSES.target )
4292 },
4293 blur: function() {
4294 $ELEMENT.removeClass( CLASSES.target )
4295 }
4296 }).
4297
4298 // Open the picker and adjust the root “focused” state
4299 on( 'focus.toOpen', handleFocusToOpenEvent ).
4300
4301 // If there’s a click on an actionable element, carry out the actions.
4302 on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() {
4303
4304 var $target = $( this ),
4305 targetData = $target.data(),
4306 targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ),
4307
4308 // * For IE, non-focusable elements can be active elements as well
4309 // (http://stackoverflow.com/a/2684561).
4310 activeElement = getActiveElement()
4311 activeElement = activeElement && ( activeElement.type || activeElement.href )
4312
4313 // If it’s disabled or nothing inside is actively focused, re-focus the element.
4314 if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) {
4315 P.$root[0].focus()
4316 }
4317
4318 // If something is superficially changed, update the `highlight` based on the `nav`.
4319 if ( !targetDisabled && targetData.nav ) {
4320 P.set( 'highlight', P.component.item.highlight, { nav: targetData.nav } )
4321 }
4322
4323 // If something is picked, set `select` then close with focus.
4324 else if ( !targetDisabled && 'pick' in targetData ) {
4325 P.set( 'select', targetData.pick )
4326 }
4327
4328 // If a “clear” button is pressed, empty the values and close with focus.
4329 else if ( targetData.clear ) {
4330 P.clear().close( true )
4331 }
4332
4333 else if ( targetData.close ) {
4334 P.close( true )
4335 }
4336
4337 }) //P.$root
4338
4339 aria( P.$root[0], 'hidden', true )
4340 }
4341
4342
4343 /**
4344 * Prepare the hidden input element along with all bindings.
4345 */
4346 function prepareElementHidden() {
4347
4348 var name
4349
4350 if ( SETTINGS.hiddenName === true ) {
4351 name = ELEMENT.name
4352 ELEMENT.name = ''
4353 }
4354 else {
4355 name = [
4356 typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '',
4357 typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit'
4358 ]
4359 name = name[0] + ELEMENT.name + name[1]
4360 }
4361
4362 P._hidden = $(
4363 '<input ' +
4364 'type=hidden ' +
4365
4366 // Create the name using the original input’s with a prefix and suffix.
4367 'name="' + name + '"' +
4368
4369 // If the element has a value, set the hidden value as well.
4370 (
4371 $ELEMENT.data('value') || ELEMENT.value ?
4372 ' value="' + P.get('select', SETTINGS.formatSubmit) + '"' :
4373 ''
4374 ) +
4375 '>'
4376 )[0]
4377
4378 $ELEMENT.
4379
4380 // If the value changes, update the hidden input with the correct format.
4381 on('change.' + STATE.id, function() {
4382 P._hidden.value = ELEMENT.value ?
4383 P.get('select', SETTINGS.formatSubmit) :
4384 ''
4385 })
4386
4387
4388 // Insert the hidden input as specified in the settings.
4389 if ( SETTINGS.container ) $( SETTINGS.container ).append( P._hidden )
4390 else $ELEMENT.after( P._hidden )
4391 }
4392
4393
4394 // For iOS8.
4395 function handleKeydownEvent( event ) {
4396
4397 var keycode = event.keyCode,
4398
4399 // Check if one of the delete keys was pressed.
4400 isKeycodeDelete = /^(8|46)$/.test(keycode)
4401
4402 // For some reason IE clears the input value on “escape”.
4403 if ( keycode == 27 ) {
4404 P.close()
4405 return false
4406 }
4407
4408 // Check if `space` or `delete` was pressed or the picker is closed with a key movement.
4409 if ( keycode == 32 || isKeycodeDelete || !STATE.open && P.component.key[keycode] ) {
4410
4411 // Prevent it from moving the page and bubbling to doc.
4412 event.preventDefault()
4413 event.stopPropagation()
4414
4415 // If `delete` was pressed, clear the values and close the picker.
4416 // Otherwise open the picker.
4417 if ( isKeycodeDelete ) { P.clear().close() }
4418 else { P.open() }
4419 }
4420 }
4421
4422
4423 // Separated for IE
4424 function handleFocusToOpenEvent( event ) {
4425
4426 // Stop the event from propagating to the doc.
4427 event.stopPropagation()
4428
4429 // If it’s a focus event, add the “focused” class to the root.
4430 if ( event.type == 'focus' ) {
4431 P.$root.addClass( CLASSES.focused )
4432 }
4433
4434 // And then finally open the picker.
4435 P.open()
4436 }
4437
4438
4439 // Return a new picker instance.
4440 return new PickerInstance()
4441} //PickerConstructor
4442
4443
4444
4445/**
4446 * The default classes and prefix to use for the HTML classes.
4447 */
4448PickerConstructor.klasses = function( prefix ) {
4449 prefix = prefix || 'picker'
4450 return {
4451
4452 picker: prefix,
4453 opened: prefix + '--opened',
4454 focused: prefix + '--focused',
4455
4456 input: prefix + '__input',
4457 active: prefix + '__input--active',
4458 target: prefix + '__input--target',
4459
4460 holder: prefix + '__holder',
4461
4462 frame: prefix + '__frame',
4463 wrap: prefix + '__wrap',
4464
4465 box: prefix + '__box'
4466 }
4467} //PickerConstructor.klasses
4468
4469
4470
4471/**
4472 * Check if the default theme is being used.
4473 */
4474function isUsingDefaultTheme( element ) {
4475
4476 var theme,
4477 prop = 'position'
4478
4479 // For IE.
4480 if ( element.currentStyle ) {
4481 theme = element.currentStyle[prop]
4482 }
4483
4484 // For normal browsers.
4485 else if ( window.getComputedStyle ) {
4486 theme = getComputedStyle( element )[prop]
4487 }
4488
4489 return theme == 'fixed'
4490}
4491
4492
4493
4494/**
4495 * Get the width of the browser’s scrollbar.
4496 * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js
4497 */
4498function getScrollbarWidth() {
4499
4500 if ( $html.height() <= $window.height() ) {
4501 return 0
4502 }
4503
4504 var $outer = $( '<div style="visibility:hidden;width:100px" />' ).
4505 appendTo( 'body' )
4506
4507 // Get the width without scrollbars.
4508 var widthWithoutScroll = $outer[0].offsetWidth
4509
4510 // Force adding scrollbars.
4511 $outer.css( 'overflow', 'scroll' )
4512
4513 // Add the inner div.
4514 var $inner = $( '<div style="width:100%" />' ).appendTo( $outer )
4515
4516 // Get the width with scrollbars.
4517 var widthWithScroll = $inner[0].offsetWidth
4518
4519 // Remove the divs.
4520 $outer.remove()
4521
4522 // Return the difference between the widths.
4523 return widthWithoutScroll - widthWithScroll
4524}
4525
4526
4527
4528/**
4529 * PickerConstructor helper methods.
4530 */
4531PickerConstructor._ = {
4532
4533 /**
4534 * Create a group of nodes. Expects:
4535 * `
4536 {
4537 min: {Integer},
4538 max: {Integer},
4539 i: {Integer},
4540 node: {String},
4541 item: {Function}
4542 }
4543 * `
4544 */
4545 group: function( groupObject ) {
4546
4547 var
4548 // Scope for the looped object
4549 loopObjectScope,
4550
4551 // Create the nodes list
4552 nodesList = '',
4553
4554 // The counter starts from the `min`
4555 counter = PickerConstructor._.trigger( groupObject.min, groupObject )
4556
4557
4558 // Loop from the `min` to `max`, incrementing by `i`
4559 for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) {
4560
4561 // Trigger the `item` function within scope of the object
4562 loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] )
4563
4564 // Splice the subgroup and create nodes out of the sub nodes
4565 nodesList += PickerConstructor._.node(
4566 groupObject.node,
4567 loopObjectScope[ 0 ], // the node
4568 loopObjectScope[ 1 ], // the classes
4569 loopObjectScope[ 2 ] // the attributes
4570 )
4571 }
4572
4573 // Return the list of nodes
4574 return nodesList
4575 }, //group
4576
4577
4578 /**
4579 * Create a dom node string
4580 */
4581 node: function( wrapper, item, klass, attribute ) {
4582
4583 // If the item is false-y, just return an empty string
4584 if ( !item ) return ''
4585
4586 // If the item is an array, do a join
4587 item = $.isArray( item ) ? item.join( '' ) : item
4588
4589 // Check for the class
4590 klass = klass ? ' class="' + klass + '"' : ''
4591
4592 // Check for any attributes
4593 attribute = attribute ? ' ' + attribute : ''
4594
4595 // Return the wrapped item
4596 return '<' + wrapper + klass + attribute + '>' + item + '</' + wrapper + '>'
4597 }, //node
4598
4599
4600 /**
4601 * Lead numbers below 10 with a zero.
4602 */
4603 lead: function( number ) {
4604 return ( number < 10 ? '0': '' ) + number
4605 },
4606
4607
4608 /**
4609 * Trigger a function otherwise return the value.
4610 */
4611 trigger: function( callback, scope, args ) {
4612 return typeof callback == 'function' ? callback.apply( scope, args || [] ) : callback
4613 },
4614
4615
4616 /**
4617 * If the second character is a digit, length is 2 otherwise 1.
4618 */
4619 digits: function( string ) {
4620 return ( /\d/ ).test( string[ 1 ] ) ? 2 : 1
4621 },
4622
4623
4624 /**
4625 * Tell if something is a date object.
4626 */
4627 isDate: function( value ) {
4628 return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() )
4629 },
4630
4631
4632 /**
4633 * Tell if something is an integer.
4634 */
4635 isInteger: function( value ) {
4636 return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0
4637 },
4638
4639
4640 /**
4641 * Create ARIA attribute strings.
4642 */
4643 ariaAttr: ariaAttr
4644} //PickerConstructor._
4645
4646
4647
4648/**
4649 * Extend the picker with a component and defaults.
4650 */
4651PickerConstructor.extend = function( name, Component ) {
4652
4653 // Extend jQuery.
4654 $.fn[ name ] = function( options, action ) {
4655
4656 // Grab the component data.
4657 var componentData = this.data( name )
4658
4659 // If the picker is requested, return the data object.
4660 if ( options == 'picker' ) {
4661 return componentData
4662 }
4663
4664 // If the component data exists and `options` is a string, carry out the action.
4665 if ( componentData && typeof options == 'string' ) {
4666 return PickerConstructor._.trigger( componentData[ options ], componentData, [ action ] )
4667 }
4668
4669 // Otherwise go through each matched element and if the component
4670 // doesn’t exist, create a new picker using `this` element
4671 // and merging the defaults and options with a deep copy.
4672 return this.each( function() {
4673 var $this = $( this )
4674 if ( !$this.data( name ) ) {
4675 new PickerConstructor( this, name, Component, options )
4676 }
4677 })
4678 }
4679
4680 // Set the defaults.
4681 $.fn[ name ].defaults = Component.defaults
4682} //PickerConstructor.extend
4683
4684
4685
4686function aria(element, attribute, value) {
4687 if ( $.isPlainObject(attribute) ) {
4688 for ( var key in attribute ) {
4689 ariaSet(element, key, attribute[key])
4690 }
4691 }
4692 else {
4693 ariaSet(element, attribute, value)
4694 }
4695}
4696function ariaSet(element, attribute, value) {
4697 element.setAttribute(
4698 (attribute == 'role' ? '' : 'aria-') + attribute,
4699 value
4700 )
4701}
4702function ariaAttr(attribute, data) {
4703 if ( !$.isPlainObject(attribute) ) {
4704 attribute = { attribute: data }
4705 }
4706 data = ''
4707 for ( var key in attribute ) {
4708 var attr = (key == 'role' ? '' : 'aria-') + key,
4709 attrVal = attribute[key]
4710 data += attrVal == null ? '' : attr + '="' + attribute[key] + '"'
4711 }
4712 return data
4713}
4714
4715// IE8 bug throws an error for activeElements within iframes.
4716function getActiveElement() {
4717 try {
4718 return document.activeElement
4719 } catch ( err ) { }
4720}
4721
4722
4723
4724// Expose the picker constructor.
4725return PickerConstructor
4726
4727
4728}));
4729
4730
4731;/*!
4732 * Date picker for pickadate.js v3.5.0
4733 * http://amsul.github.io/pickadate.js/date.htm
4734 */
4735
4736(function ( factory ) {
4737
4738 // AMD.
4739 if ( typeof define == 'function' && define.amd )
4740 define( ['picker', 'jquery'], factory )
4741
4742 // Node.js/browserify.
4743 else if ( typeof exports == 'object' )
4744 module.exports = factory( require('./picker.js'), require('jquery') )
4745
4746 // Browser globals.
4747 else factory( Picker, jQuery )
4748
4749}(function( Picker, $ ) {
4750
4751
4752/**
4753 * Globals and constants
4754 */
4755var DAYS_IN_WEEK = 7,
4756 WEEKS_IN_CALENDAR = 6,
4757 _ = Picker._
4758
4759
4760
4761/**
4762 * The date picker constructor
4763 */
4764function DatePicker( picker, settings ) {
4765
4766 var calendar = this,
4767 element = picker.$node[ 0 ],
4768 elementValue = element.value,
4769 elementDataValue = picker.$node.data( 'value' ),
4770 valueString = elementDataValue || elementValue,
4771 formatString = elementDataValue ? settings.formatSubmit : settings.format,
4772 isRTL = function() {
4773
4774 return element.currentStyle ?
4775
4776 // For IE.
4777 element.currentStyle.direction == 'rtl' :
4778
4779 // For normal browsers.
4780 getComputedStyle( picker.$root[0] ).direction == 'rtl'
4781 }
4782
4783 calendar.settings = settings
4784 calendar.$node = picker.$node
4785
4786 // The queue of methods that will be used to build item objects.
4787 calendar.queue = {
4788 min: 'measure create',
4789 max: 'measure create',
4790 now: 'now create',
4791 select: 'parse create validate',
4792 highlight: 'parse navigate create validate',
4793 view: 'parse create validate viewset',
4794 disable: 'deactivate',
4795 enable: 'activate'
4796 }
4797
4798 // The component's item object.
4799 calendar.item = {}
4800
4801 calendar.item.clear = null
4802 calendar.item.disable = ( settings.disable || [] ).slice( 0 )
4803 calendar.item.enable = -(function( collectionDisabled ) {
4804 return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1
4805 })( calendar.item.disable )
4806
4807 calendar.
4808 set( 'min', settings.min ).
4809 set( 'max', settings.max ).
4810 set( 'now' )
4811
4812 // When there’s a value, set the `select`, which in turn
4813 // also sets the `highlight` and `view`.
4814 if ( valueString ) {
4815 calendar.set( 'select', valueString, { format: formatString })
4816 }
4817
4818 // If there’s no value, default to highlighting “today”.
4819 else {
4820 calendar.
4821 set( 'select', null ).
4822 set( 'highlight', calendar.item.now )
4823 }
4824
4825
4826 // The keycode to movement mapping.
4827 calendar.key = {
4828 40: 7, // Down
4829 38: -7, // Up
4830 39: function() { return isRTL() ? -1 : 1 }, // Right
4831 37: function() { return isRTL() ? 1 : -1 }, // Left
4832 go: function( timeChange ) {
4833 var highlightedObject = calendar.item.highlight,
4834 targetDate = new Date( highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange )
4835 calendar.set(
4836 'highlight',
4837 targetDate,
4838 { interval: timeChange }
4839 )
4840 this.render()
4841 }
4842 }
4843
4844
4845 // Bind some picker events.
4846 picker.
4847 on( 'render', function() {
4848 picker.$root.find( '.' + settings.klass.selectMonth ).on( 'change', function() {
4849 var value = this.value
4850 if ( value ) {
4851 picker.set( 'highlight', [ picker.get( 'view' ).year, value, picker.get( 'highlight' ).date ] )
4852 picker.$root.find( '.' + settings.klass.selectMonth ).trigger( 'focus' )
4853 }
4854 })
4855 picker.$root.find( '.' + settings.klass.selectYear ).on( 'change', function() {
4856 var value = this.value
4857 if ( value ) {
4858 picker.set( 'highlight', [ value, picker.get( 'view' ).month, picker.get( 'highlight' ).date ] )
4859 picker.$root.find( '.' + settings.klass.selectYear ).trigger( 'focus' )
4860 }
4861 })
4862 }, 1 ).
4863 on( 'open', function() {
4864 var includeToday = ''
4865 if ( calendar.disabled( calendar.get('now') ) ) {
4866 includeToday = ':not(.' + settings.klass.buttonToday + ')'
4867 }
4868 picker.$root.find( 'button' + includeToday + ', select' ).attr( 'disabled', false )
4869 }, 1 ).
4870 on( 'close', function() {
4871 picker.$root.find( 'button, select' ).attr( 'disabled', true )
4872 }, 1 )
4873
4874} //DatePicker
4875
4876
4877/**
4878 * Set a datepicker item object.
4879 */
4880DatePicker.prototype.set = function( type, value, options ) {
4881
4882 var calendar = this,
4883 calendarItem = calendar.item
4884
4885 // If the value is `null` just set it immediately.
4886 if ( value === null ) {
4887 if ( type == 'clear' ) type = 'select'
4888 calendarItem[ type ] = value
4889 return calendar
4890 }
4891
4892 // Otherwise go through the queue of methods, and invoke the functions.
4893 // Update this as the time unit, and set the final value as this item.
4894 // * In the case of `enable`, keep the queue but set `disable` instead.
4895 // And in the case of `flip`, keep the queue but set `enable` instead.
4896 calendarItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = calendar.queue[ type ].split( ' ' ).map( function( method ) {
4897 value = calendar[ method ]( type, value, options )
4898 return value
4899 }).pop()
4900
4901 // Check if we need to cascade through more updates.
4902 if ( type == 'select' ) {
4903 calendar.set( 'highlight', calendarItem.select, options )
4904 }
4905 else if ( type == 'highlight' ) {
4906 calendar.set( 'view', calendarItem.highlight, options )
4907 }
4908 else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) {
4909 if ( calendarItem.select && calendar.disabled( calendarItem.select ) ) {
4910 calendar.set( 'select', calendarItem.select, options )
4911 }
4912 if ( calendarItem.highlight && calendar.disabled( calendarItem.highlight ) ) {
4913 calendar.set( 'highlight', calendarItem.highlight, options )
4914 }
4915 }
4916
4917 return calendar
4918} //DatePicker.prototype.set
4919
4920
4921/**
4922 * Get a datepicker item object.
4923 */
4924DatePicker.prototype.get = function( type ) {
4925 return this.item[ type ]
4926} //DatePicker.prototype.get
4927
4928
4929/**
4930 * Create a picker date object.
4931 */
4932DatePicker.prototype.create = function( type, value, options ) {
4933
4934 var isInfiniteValue,
4935 calendar = this
4936
4937 // If there’s no value, use the type as the value.
4938 value = value === undefined ? type : value
4939
4940
4941 // If it’s infinity, update the value.
4942 if ( value == -Infinity || value == Infinity ) {
4943 isInfiniteValue = value
4944 }
4945
4946 // If it’s an object, use the native date object.
4947 else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {
4948 value = value.obj
4949 }
4950
4951 // If it’s an array, convert it into a date and make sure
4952 // that it’s a valid date – otherwise default to today.
4953 else if ( $.isArray( value ) ) {
4954 value = new Date( value[ 0 ], value[ 1 ], value[ 2 ] )
4955 value = _.isDate( value ) ? value : calendar.create().obj
4956 }
4957
4958 // If it’s a number or date object, make a normalized date.
4959 else if ( _.isInteger( value ) || _.isDate( value ) ) {
4960 value = calendar.normalize( new Date( value ), options )
4961 }
4962
4963 // If it’s a literal true or any other case, set it to now.
4964 else /*if ( value === true )*/ {
4965 value = calendar.now( type, value, options )
4966 }
4967
4968 // Return the compiled object.
4969 return {
4970 year: isInfiniteValue || value.getFullYear(),
4971 month: isInfiniteValue || value.getMonth(),
4972 date: isInfiniteValue || value.getDate(),
4973 day: isInfiniteValue || value.getDay(),
4974 obj: isInfiniteValue || value,
4975 pick: isInfiniteValue || value.getTime()
4976 }
4977} //DatePicker.prototype.create
4978
4979
4980/**
4981 * Create a range limit object using an array, date object,
4982 * literal “true”, or integer relative to another time.
4983 */
4984DatePicker.prototype.createRange = function( from, to ) {
4985
4986 var calendar = this,
4987 createDate = function( date ) {
4988 if ( date === true || $.isArray( date ) || _.isDate( date ) ) {
4989 return calendar.create( date )
4990 }
4991 return date
4992 }
4993
4994 // Create objects if possible.
4995 if ( !_.isInteger( from ) ) {
4996 from = createDate( from )
4997 }
4998 if ( !_.isInteger( to ) ) {
4999 to = createDate( to )
5000 }
5001
5002 // Create relative dates.
5003 if ( _.isInteger( from ) && $.isPlainObject( to ) ) {
5004 from = [ to.year, to.month, to.date + from ];
5005 }
5006 else if ( _.isInteger( to ) && $.isPlainObject( from ) ) {
5007 to = [ from.year, from.month, from.date + to ];
5008 }
5009
5010 return {
5011 from: createDate( from ),
5012 to: createDate( to )
5013 }
5014} //DatePicker.prototype.createRange
5015
5016
5017/**
5018 * Check if a date unit falls within a date range object.
5019 */
5020DatePicker.prototype.withinRange = function( range, dateUnit ) {
5021 range = this.createRange(range.from, range.to)
5022 return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick
5023}
5024
5025
5026/**
5027 * Check if two date range objects overlap.
5028 */
5029DatePicker.prototype.overlapRanges = function( one, two ) {
5030
5031 var calendar = this
5032
5033 // Convert the ranges into comparable dates.
5034 one = calendar.createRange( one.from, one.to )
5035 two = calendar.createRange( two.from, two.to )
5036
5037 return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) ||
5038 calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to )
5039}
5040
5041
5042/**
5043 * Get the date today.
5044 */
5045DatePicker.prototype.now = function( type, value, options ) {
5046 value = new Date()
5047 if ( options && options.rel ) {
5048 value.setDate( value.getDate() + options.rel )
5049 }
5050 return this.normalize( value, options )
5051}
5052
5053
5054/**
5055 * Navigate to next/prev month.
5056 */
5057DatePicker.prototype.navigate = function( type, value, options ) {
5058
5059 var targetDateObject,
5060 targetYear,
5061 targetMonth,
5062 targetDate,
5063 isTargetArray = $.isArray( value ),
5064 isTargetObject = $.isPlainObject( value ),
5065 viewsetObject = this.item.view/*,
5066 safety = 100*/
5067
5068
5069 if ( isTargetArray || isTargetObject ) {
5070
5071 if ( isTargetObject ) {
5072 targetYear = value.year
5073 targetMonth = value.month
5074 targetDate = value.date
5075 }
5076 else {
5077 targetYear = +value[0]
5078 targetMonth = +value[1]
5079 targetDate = +value[2]
5080 }
5081
5082 // If we’re navigating months but the view is in a different
5083 // month, navigate to the view’s year and month.
5084 if ( options && options.nav && viewsetObject && viewsetObject.month !== targetMonth ) {
5085 targetYear = viewsetObject.year
5086 targetMonth = viewsetObject.month
5087 }
5088
5089 // Figure out the expected target year and month.
5090 targetDateObject = new Date( targetYear, targetMonth + ( options && options.nav ? options.nav : 0 ), 1 )
5091 targetYear = targetDateObject.getFullYear()
5092 targetMonth = targetDateObject.getMonth()
5093
5094 // If the month we’re going to doesn’t have enough days,
5095 // keep decreasing the date until we reach the month’s last date.
5096 while ( /*safety &&*/ new Date( targetYear, targetMonth, targetDate ).getMonth() !== targetMonth ) {
5097 targetDate -= 1
5098 /*safety -= 1
5099 if ( !safety ) {
5100 throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.'
5101 }*/
5102 }
5103
5104 value = [ targetYear, targetMonth, targetDate ]
5105 }
5106
5107 return value
5108} //DatePicker.prototype.navigate
5109
5110
5111/**
5112 * Normalize a date by setting the hours to midnight.
5113 */
5114DatePicker.prototype.normalize = function( value/*, options*/ ) {
5115 value.setHours( 0, 0, 0, 0 )
5116 return value
5117}
5118
5119
5120/**
5121 * Measure the range of dates.
5122 */
5123DatePicker.prototype.measure = function( type, value/*, options*/ ) {
5124
5125 var calendar = this
5126
5127 // If it’s anything false-y, remove the limits.
5128 if ( !value ) {
5129 value = type == 'min' ? -Infinity : Infinity
5130 }
5131
5132 // If it’s a string, parse it.
5133 else if ( typeof value == 'string' ) {
5134 value = calendar.parse( type, value )
5135 }
5136
5137 // If it's an integer, get a date relative to today.
5138 else if ( _.isInteger( value ) ) {
5139 value = calendar.now( type, value, { rel: value } )
5140 }
5141
5142 return value
5143} ///DatePicker.prototype.measure
5144
5145
5146/**
5147 * Create a viewset object based on navigation.
5148 */
5149DatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) {
5150 return this.create([ dateObject.year, dateObject.month, 1 ])
5151}
5152
5153
5154/**
5155 * Validate a date as enabled and shift if needed.
5156 */
5157DatePicker.prototype.validate = function( type, dateObject, options ) {
5158
5159 var calendar = this,
5160
5161 // Keep a reference to the original date.
5162 originalDateObject = dateObject,
5163
5164 // Make sure we have an interval.
5165 interval = options && options.interval ? options.interval : 1,
5166
5167 // Check if the calendar enabled dates are inverted.
5168 isFlippedBase = calendar.item.enable === -1,
5169
5170 // Check if we have any enabled dates after/before now.
5171 hasEnabledBeforeTarget, hasEnabledAfterTarget,
5172
5173 // The min & max limits.
5174 minLimitObject = calendar.item.min,
5175 maxLimitObject = calendar.item.max,
5176
5177 // Check if we’ve reached the limit during shifting.
5178 reachedMin, reachedMax,
5179
5180 // Check if the calendar is inverted and at least one weekday is enabled.
5181 hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter( function( value ) {
5182
5183 // If there’s a date, check where it is relative to the target.
5184 if ( $.isArray( value ) ) {
5185 var dateTime = calendar.create( value ).pick
5186 if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true
5187 else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true
5188 }
5189
5190 // Return only integers for enabled weekdays.
5191 return _.isInteger( value )
5192 }).length/*,
5193
5194 safety = 100*/
5195
5196
5197
5198 // Cases to validate for:
5199 // [1] Not inverted and date disabled.
5200 // [2] Inverted and some dates enabled.
5201 // [3] Not inverted and out of range.
5202 //
5203 // Cases to **not** validate for:
5204 // • Navigating months.
5205 // • Not inverted and date enabled.
5206 // • Inverted and all dates disabled.
5207 // • ..and anything else.
5208 if ( !options || !options.nav ) if (
5209 /* 1 */ ( !isFlippedBase && calendar.disabled( dateObject ) ) ||
5210 /* 2 */ ( isFlippedBase && calendar.disabled( dateObject ) && ( hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget ) ) ||
5211 /* 3 */ ( !isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick) )
5212 ) {
5213
5214
5215 // When inverted, flip the direction if there aren’t any enabled weekdays
5216 // and there are no enabled dates in the direction of the interval.
5217 if ( isFlippedBase && !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) {
5218 interval *= -1
5219 }
5220
5221
5222 // Keep looping until we reach an enabled date.
5223 while ( /*safety &&*/ calendar.disabled( dateObject ) ) {
5224
5225 /*safety -= 1
5226 if ( !safety ) {
5227 throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.'
5228 }*/
5229
5230
5231 // If we’ve looped into the next/prev month with a large interval, return to the original date and flatten the interval.
5232 if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) {
5233 dateObject = originalDateObject
5234 interval = interval > 0 ? 1 : -1
5235 }
5236
5237
5238 // If we’ve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit.
5239 if ( dateObject.pick <= minLimitObject.pick ) {
5240 reachedMin = true
5241 interval = 1
5242 dateObject = calendar.create([
5243 minLimitObject.year,
5244 minLimitObject.month,
5245 minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1)
5246 ])
5247 }
5248 else if ( dateObject.pick >= maxLimitObject.pick ) {
5249 reachedMax = true
5250 interval = -1
5251 dateObject = calendar.create([
5252 maxLimitObject.year,
5253 maxLimitObject.month,
5254 maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1)
5255 ])
5256 }
5257
5258
5259 // If we’ve reached both limits, just break out of the loop.
5260 if ( reachedMin && reachedMax ) {
5261 break
5262 }
5263
5264
5265 // Finally, create the shifted date using the interval and keep looping.
5266 dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ])
5267 }
5268
5269 } //endif
5270
5271
5272 // Return the date object settled on.
5273 return dateObject
5274} //DatePicker.prototype.validate
5275
5276
5277/**
5278 * Check if a date is disabled.
5279 */
5280DatePicker.prototype.disabled = function( dateToVerify ) {
5281
5282 var
5283 calendar = this,
5284
5285 // Filter through the disabled dates to check if this is one.
5286 isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) {
5287
5288 // If the date is a number, match the weekday with 0index and `firstDay` check.
5289 if ( _.isInteger( dateToDisable ) ) {
5290 return dateToVerify.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7
5291 }
5292
5293 // If it’s an array or a native JS date, create and match the exact date.
5294 if ( $.isArray( dateToDisable ) || _.isDate( dateToDisable ) ) {
5295 return dateToVerify.pick === calendar.create( dateToDisable ).pick
5296 }
5297
5298 // If it’s an object, match a date within the “from” and “to” range.
5299 if ( $.isPlainObject( dateToDisable ) ) {
5300 return calendar.withinRange( dateToDisable, dateToVerify )
5301 }
5302 })
5303
5304 // If this date matches a disabled date, confirm it’s not inverted.
5305 isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( dateToDisable ) {
5306 return $.isArray( dateToDisable ) && dateToDisable[3] == 'inverted' ||
5307 $.isPlainObject( dateToDisable ) && dateToDisable.inverted
5308 }).length
5309
5310 // Check the calendar “enabled” flag and respectively flip the
5311 // disabled state. Then also check if it’s beyond the min/max limits.
5312 return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||
5313 dateToVerify.pick < calendar.item.min.pick ||
5314 dateToVerify.pick > calendar.item.max.pick
5315
5316} //DatePicker.prototype.disabled
5317
5318
5319/**
5320 * Parse a string into a usable type.
5321 */
5322DatePicker.prototype.parse = function( type, value, options ) {
5323
5324 var calendar = this,
5325 parsingObject = {}
5326
5327 // If it’s already parsed, we’re good.
5328 if ( !value || typeof value != 'string' ) {
5329 return value
5330 }
5331
5332 // We need a `.format` to parse the value with.
5333 if ( !( options && options.format ) ) {
5334 options = options || {}
5335 options.format = calendar.settings.format
5336 }
5337
5338 // Convert the format into an array and then map through it.
5339 calendar.formats.toArray( options.format ).map( function( label ) {
5340
5341 var
5342 // Grab the formatting label.
5343 formattingLabel = calendar.formats[ label ],
5344
5345 // The format length is from the formatting label function or the
5346 // label length without the escaping exclamation (!) mark.
5347 formatLength = formattingLabel ? _.trigger( formattingLabel, calendar, [ value, parsingObject ] ) : label.replace( /^!/, '' ).length
5348
5349 // If there's a format label, split the value up to the format length.
5350 // Then add it to the parsing object with appropriate label.
5351 if ( formattingLabel ) {
5352 parsingObject[ label ] = value.substr( 0, formatLength )
5353 }
5354
5355 // Update the value as the substring from format length to end.
5356 value = value.substr( formatLength )
5357 })
5358
5359 // Compensate for month 0index.
5360 return [
5361 parsingObject.yyyy || parsingObject.yy,
5362 +( parsingObject.mm || parsingObject.m ) - 1,
5363 parsingObject.dd || parsingObject.d
5364 ]
5365} //DatePicker.prototype.parse
5366
5367
5368/**
5369 * Various formats to display the object in.
5370 */
5371DatePicker.prototype.formats = (function() {
5372
5373 // Return the length of the first word in a collection.
5374 function getWordLengthFromCollection( string, collection, dateObject ) {
5375
5376 // Grab the first word from the string.
5377 var word = string.match( /\w+/ )[ 0 ]
5378
5379 // If there's no month index, add it to the date object
5380 if ( !dateObject.mm && !dateObject.m ) {
5381 dateObject.m = collection.indexOf( word ) + 1
5382 }
5383
5384 // Return the length of the word.
5385 return word.length
5386 }
5387
5388 // Get the length of the first word in a string.
5389 function getFirstWordLength( string ) {
5390 return string.match( /\w+/ )[ 0 ].length
5391 }
5392
5393 return {
5394
5395 d: function( string, dateObject ) {
5396
5397 // If there's string, then get the digits length.
5398 // Otherwise return the selected date.
5399 return string ? _.digits( string ) : dateObject.date
5400 },
5401 dd: function( string, dateObject ) {
5402
5403 // If there's a string, then the length is always 2.
5404 // Otherwise return the selected date with a leading zero.
5405 return string ? 2 : _.lead( dateObject.date )
5406 },
5407 ddd: function( string, dateObject ) {
5408
5409 // If there's a string, then get the length of the first word.
5410 // Otherwise return the short selected weekday.
5411 return string ? getFirstWordLength( string ) : this.settings.weekdaysShort[ dateObject.day ]
5412 },
5413 dddd: function( string, dateObject ) {
5414
5415 // If there's a string, then get the length of the first word.
5416 // Otherwise return the full selected weekday.
5417 return string ? getFirstWordLength( string ) : this.settings.weekdaysFull[ dateObject.day ]
5418 },
5419 m: function( string, dateObject ) {
5420
5421 // If there's a string, then get the length of the digits
5422 // Otherwise return the selected month with 0index compensation.
5423 return string ? _.digits( string ) : dateObject.month + 1
5424 },
5425 mm: function( string, dateObject ) {
5426
5427 // If there's a string, then the length is always 2.
5428 // Otherwise return the selected month with 0index and leading zero.
5429 return string ? 2 : _.lead( dateObject.month + 1 )
5430 },
5431 mmm: function( string, dateObject ) {
5432
5433 var collection = this.settings.monthsShort
5434
5435 // If there's a string, get length of the relevant month from the short
5436 // months collection. Otherwise return the selected month from that collection.
5437 return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]
5438 },
5439 mmmm: function( string, dateObject ) {
5440
5441 var collection = this.settings.monthsFull
5442
5443 // If there's a string, get length of the relevant month from the full
5444 // months collection. Otherwise return the selected month from that collection.
5445 return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]
5446 },
5447 yy: function( string, dateObject ) {
5448
5449 // If there's a string, then the length is always 2.
5450 // Otherwise return the selected year by slicing out the first 2 digits.
5451 return string ? 2 : ( '' + dateObject.year ).slice( 2 )
5452 },
5453 yyyy: function( string, dateObject ) {
5454
5455 // If there's a string, then the length is always 4.
5456 // Otherwise return the selected year.
5457 return string ? 4 : dateObject.year
5458 },
5459
5460 // Create an array by splitting the formatting string passed.
5461 toArray: function( formatString ) { return formatString.split( /(d{1,4}|m{1,4}|y{4}|yy|!.)/g ) },
5462
5463 // Format an object into a string using the formatting options.
5464 toString: function ( formatString, itemObject ) {
5465 var calendar = this
5466 return calendar.formats.toArray( formatString ).map( function( label ) {
5467 return _.trigger( calendar.formats[ label ], calendar, [ 0, itemObject ] ) || label.replace( /^!/, '' )
5468 }).join( '' )
5469 }
5470 }
5471})() //DatePicker.prototype.formats
5472
5473
5474
5475
5476/**
5477 * Check if two date units are the exact.
5478 */
5479DatePicker.prototype.isDateExact = function( one, two ) {
5480
5481 var calendar = this
5482
5483 // When we’re working with weekdays, do a direct comparison.
5484 if (
5485 ( _.isInteger( one ) && _.isInteger( two ) ) ||
5486 ( typeof one == 'boolean' && typeof two == 'boolean' )
5487 ) {
5488 return one === two
5489 }
5490
5491 // When we’re working with date representations, compare the “pick” value.
5492 if (
5493 ( _.isDate( one ) || $.isArray( one ) ) &&
5494 ( _.isDate( two ) || $.isArray( two ) )
5495 ) {
5496 return calendar.create( one ).pick === calendar.create( two ).pick
5497 }
5498
5499 // When we’re working with range objects, compare the “from” and “to”.
5500 if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {
5501 return calendar.isDateExact( one.from, two.from ) && calendar.isDateExact( one.to, two.to )
5502 }
5503
5504 return false
5505}
5506
5507
5508/**
5509 * Check if two date units overlap.
5510 */
5511DatePicker.prototype.isDateOverlap = function( one, two ) {
5512
5513 var calendar = this,
5514 firstDay = calendar.settings.firstDay ? 1 : 0
5515
5516 // When we’re working with a weekday index, compare the days.
5517 if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) {
5518 one = one % 7 + firstDay
5519 return one === calendar.create( two ).day + 1
5520 }
5521 if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) {
5522 two = two % 7 + firstDay
5523 return two === calendar.create( one ).day + 1
5524 }
5525
5526 // When we’re working with range objects, check if the ranges overlap.
5527 if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {
5528 return calendar.overlapRanges( one, two )
5529 }
5530
5531 return false
5532}
5533
5534
5535/**
5536 * Flip the “enabled” state.
5537 */
5538DatePicker.prototype.flipEnable = function(val) {
5539 var itemObject = this.item
5540 itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1)
5541}
5542
5543
5544/**
5545 * Mark a collection of dates as “disabled”.
5546 */
5547DatePicker.prototype.deactivate = function( type, datesToDisable ) {
5548
5549 var calendar = this,
5550 disabledItems = calendar.item.disable.slice(0)
5551
5552
5553 // If we’re flipping, that’s all we need to do.
5554 if ( datesToDisable == 'flip' ) {
5555 calendar.flipEnable()
5556 }
5557
5558 else if ( datesToDisable === false ) {
5559 calendar.flipEnable(1)
5560 disabledItems = []
5561 }
5562
5563 else if ( datesToDisable === true ) {
5564 calendar.flipEnable(-1)
5565 disabledItems = []
5566 }
5567
5568 // Otherwise go through the dates to disable.
5569 else {
5570
5571 datesToDisable.map(function( unitToDisable ) {
5572
5573 var matchFound
5574
5575 // When we have disabled items, check for matches.
5576 // If something is matched, immediately break out.
5577 for ( var index = 0; index < disabledItems.length; index += 1 ) {
5578 if ( calendar.isDateExact( unitToDisable, disabledItems[index] ) ) {
5579 matchFound = true
5580 break
5581 }
5582 }
5583
5584 // If nothing was found, add the validated unit to the collection.
5585 if ( !matchFound ) {
5586 if (
5587 _.isInteger( unitToDisable ) ||
5588 _.isDate( unitToDisable ) ||
5589 $.isArray( unitToDisable ) ||
5590 ( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to )
5591 ) {
5592 disabledItems.push( unitToDisable )
5593 }
5594 }
5595 })
5596 }
5597
5598 // Return the updated collection.
5599 return disabledItems
5600} //DatePicker.prototype.deactivate
5601
5602
5603/**
5604 * Mark a collection of dates as “enabled”.
5605 */
5606DatePicker.prototype.activate = function( type, datesToEnable ) {
5607
5608 var calendar = this,
5609 disabledItems = calendar.item.disable,
5610 disabledItemsCount = disabledItems.length
5611
5612 // If we’re flipping, that’s all we need to do.
5613 if ( datesToEnable == 'flip' ) {
5614 calendar.flipEnable()
5615 }
5616
5617 else if ( datesToEnable === true ) {
5618 calendar.flipEnable(1)
5619 disabledItems = []
5620 }
5621
5622 else if ( datesToEnable === false ) {
5623 calendar.flipEnable(-1)
5624 disabledItems = []
5625 }
5626
5627 // Otherwise go through the disabled dates.
5628 else {
5629
5630 datesToEnable.map(function( unitToEnable ) {
5631
5632 var matchFound,
5633 disabledUnit,
5634 index,
5635 isExactRange
5636
5637 // Go through the disabled items and try to find a match.
5638 for ( index = 0; index < disabledItemsCount; index += 1 ) {
5639
5640 disabledUnit = disabledItems[index]
5641
5642 // When an exact match is found, remove it from the collection.
5643 if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) {
5644 matchFound = disabledItems[index] = null
5645 isExactRange = true
5646 break
5647 }
5648
5649 // When an overlapped match is found, add the “inverted” state to it.
5650 else if ( calendar.isDateOverlap( disabledUnit, unitToEnable ) ) {
5651 if ( $.isPlainObject( unitToEnable ) ) {
5652 unitToEnable.inverted = true
5653 matchFound = unitToEnable
5654 }
5655 else if ( $.isArray( unitToEnable ) ) {
5656 matchFound = unitToEnable
5657 if ( !matchFound[3] ) matchFound.push( 'inverted' )
5658 }
5659 else if ( _.isDate( unitToEnable ) ) {
5660 matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ]
5661 }
5662 break
5663 }
5664 }
5665
5666 // If a match was found, remove a previous duplicate entry.
5667 if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) {
5668 if ( calendar.isDateExact( disabledItems[index], unitToEnable ) ) {
5669 disabledItems[index] = null
5670 break
5671 }
5672 }
5673
5674 // In the event that we’re dealing with an exact range of dates,
5675 // make sure there are no “inverted” dates because of it.
5676 if ( isExactRange ) for ( index = 0; index < disabledItemsCount; index += 1 ) {
5677 if ( calendar.isDateOverlap( disabledItems[index], unitToEnable ) ) {
5678 disabledItems[index] = null
5679 break
5680 }
5681 }
5682
5683 // If something is still matched, add it into the collection.
5684 if ( matchFound ) {
5685 disabledItems.push( matchFound )
5686 }
5687 })
5688 }
5689
5690 // Return the updated collection.
5691 return disabledItems.filter(function( val ) { return val != null })
5692} //DatePicker.prototype.activate
5693
5694
5695/**
5696 * Create a string for the nodes in the picker.
5697 */
5698DatePicker.prototype.nodes = function( isOpen ) {
5699
5700 var
5701 calendar = this,
5702 settings = calendar.settings,
5703 calendarItem = calendar.item,
5704 nowObject = calendarItem.now,
5705 selectedObject = calendarItem.select,
5706 highlightedObject = calendarItem.highlight,
5707 viewsetObject = calendarItem.view,
5708 disabledCollection = calendarItem.disable,
5709 minLimitObject = calendarItem.min,
5710 maxLimitObject = calendarItem.max,
5711
5712
5713 // Create the calendar table head using a copy of weekday labels collection.
5714 // * We do a copy so we don't mutate the original array.
5715 tableHead = (function( collection, fullCollection ) {
5716
5717 // If the first day should be Monday, move Sunday to the end.
5718 if ( settings.firstDay ) {
5719 collection.push( collection.shift() )
5720 fullCollection.push( fullCollection.shift() )
5721 }
5722
5723 // Create and return the table head group.
5724 return _.node(
5725 'thead',
5726 _.node(
5727 'tr',
5728 _.group({
5729 min: 0,
5730 max: DAYS_IN_WEEK - 1,
5731 i: 1,
5732 node: 'th',
5733 item: function( counter ) {
5734 return [
5735 collection[ counter ],
5736 settings.klass.weekdays,
5737 'scope=col title="' + fullCollection[ counter ] + '"'
5738 ]
5739 }
5740 })
5741 )
5742 ) //endreturn
5743
5744 // Materialize modified
5745 })( ( settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysLetter ).slice( 0 ), settings.weekdaysFull.slice( 0 ) ), //tableHead
5746
5747
5748 // Create the nav for next/prev month.
5749 createMonthNav = function( next ) {
5750
5751 // Otherwise, return the created month tag.
5752 return _.node(
5753 'div',
5754 ' ',
5755 settings.klass[ 'nav' + ( next ? 'Next' : 'Prev' ) ] + (
5756
5757 // If the focused month is outside the range, disabled the button.
5758 ( next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month ) ||
5759 ( !next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month ) ?
5760 ' ' + settings.klass.navDisabled : ''
5761 ),
5762 'data-nav=' + ( next || -1 ) + ' ' +
5763 _.ariaAttr({
5764 role: 'button',
5765 controls: calendar.$node[0].id + '_table'
5766 }) + ' ' +
5767 'title="' + (next ? settings.labelMonthNext : settings.labelMonthPrev ) + '"'
5768 ) //endreturn
5769 }, //createMonthNav
5770
5771
5772 // Create the month label.
5773 //Materialize modified
5774 createMonthLabel = function(override) {
5775
5776 var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull
5777
5778 // Materialize modified
5779 if (override == "short_months") {
5780 monthsCollection = settings.monthsShort;
5781 }
5782
5783 // If there are months to select, add a dropdown menu.
5784 if ( settings.selectMonths && override == undefined) {
5785
5786 return _.node( 'select',
5787 _.group({
5788 min: 0,
5789 max: 11,
5790 i: 1,
5791 node: 'option',
5792 item: function( loopedMonth ) {
5793
5794 return [
5795
5796 // The looped month and no classes.
5797 monthsCollection[ loopedMonth ], 0,
5798
5799 // Set the value and selected index.
5800 'value=' + loopedMonth +
5801 ( viewsetObject.month == loopedMonth ? ' selected' : '' ) +
5802 (
5803 (
5804 ( viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month ) ||
5805 ( viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month )
5806 ) ?
5807 ' disabled' : ''
5808 )
5809 ]
5810 }
5811 }),
5812 settings.klass.selectMonth + ' browser-default',
5813 ( isOpen ? '' : 'disabled' ) + ' ' +
5814 _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +
5815 'title="' + settings.labelMonthSelect + '"'
5816 )
5817 }
5818
5819 // Materialize modified
5820 if (override == "short_months")
5821 if (selectedObject != null)
5822 return _.node( 'div', monthsCollection[ selectedObject.month ] );
5823 else return _.node( 'div', monthsCollection[ viewsetObject.month ] );
5824
5825 // If there's a need for a month selector
5826 return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month )
5827 }, //createMonthLabel
5828
5829
5830 // Create the year label.
5831 // Materialize modified
5832 createYearLabel = function(override) {
5833
5834 var focusedYear = viewsetObject.year,
5835
5836 // If years selector is set to a literal "true", set it to 5. Otherwise
5837 // divide in half to get half before and half after focused year.
5838 numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 )
5839
5840 // If there are years to select, add a dropdown menu.
5841 if ( numberYears ) {
5842
5843 var
5844 minYear = minLimitObject.year,
5845 maxYear = maxLimitObject.year,
5846 lowestYear = focusedYear - numberYears,
5847 highestYear = focusedYear + numberYears
5848
5849 // If the min year is greater than the lowest year, increase the highest year
5850 // by the difference and set the lowest year to the min year.
5851 if ( minYear > lowestYear ) {
5852 highestYear += minYear - lowestYear
5853 lowestYear = minYear
5854 }
5855
5856 // If the max year is less than the highest year, decrease the lowest year
5857 // by the lower of the two: available and needed years. Then set the
5858 // highest year to the max year.
5859 if ( maxYear < highestYear ) {
5860
5861 var availableYears = lowestYear - minYear,
5862 neededYears = highestYear - maxYear
5863
5864 lowestYear -= availableYears > neededYears ? neededYears : availableYears
5865 highestYear = maxYear
5866 }
5867
5868 if ( settings.selectYears && override == undefined ) {
5869 return _.node( 'select',
5870 _.group({
5871 min: lowestYear,
5872 max: highestYear,
5873 i: 1,
5874 node: 'option',
5875 item: function( loopedYear ) {
5876 return [
5877
5878 // The looped year and no classes.
5879 loopedYear, 0,
5880
5881 // Set the value and selected index.
5882 'value=' + loopedYear + ( focusedYear == loopedYear ? ' selected' : '' )
5883 ]
5884 }
5885 }),
5886 settings.klass.selectYear + ' browser-default',
5887 ( isOpen ? '' : 'disabled' ) + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +
5888 'title="' + settings.labelYearSelect + '"'
5889 )
5890 }
5891 }
5892
5893 // Materialize modified
5894 if (override == "raw")
5895 return _.node( 'div', focusedYear )
5896
5897 // Otherwise just return the year focused
5898 return _.node( 'div', focusedYear, settings.klass.year )
5899 } //createYearLabel
5900
5901
5902 // Materialize modified
5903 createDayLabel = function() {
5904 if (selectedObject != null)
5905 return _.node( 'div', selectedObject.date)
5906 else return _.node( 'div', nowObject.date)
5907 }
5908 createWeekdayLabel = function() {
5909 var display_day;
5910
5911 if (selectedObject != null)
5912 display_day = selectedObject.day;
5913 else
5914 display_day = nowObject.day;
5915 var weekday = settings.weekdaysFull[ display_day ]
5916 return weekday
5917 }
5918
5919
5920 // Create and return the entire calendar.
5921return _.node(
5922 // Date presentation View
5923 'div',
5924 _.node(
5925 'div',
5926 createWeekdayLabel(),
5927 "picker__weekday-display"
5928 )+
5929 _.node(
5930 // Div for short Month
5931 'div',
5932 createMonthLabel("short_months"),
5933 settings.klass.month_display
5934 )+
5935 _.node(
5936 // Div for Day
5937 'div',
5938 createDayLabel() ,
5939 settings.klass.day_display
5940 )+
5941 _.node(
5942 // Div for Year
5943 'div',
5944 createYearLabel("raw") ,
5945 settings.klass.year_display
5946 ),
5947 settings.klass.date_display
5948 )+
5949 // Calendar container
5950 _.node('div',
5951 _.node('div',
5952 ( settings.selectYears ? createMonthLabel() + createYearLabel() : createMonthLabel() + createYearLabel() ) +
5953 createMonthNav() + createMonthNav( 1 ),
5954 settings.klass.header
5955 ) + _.node(
5956 'table',
5957 tableHead +
5958 _.node(
5959 'tbody',
5960 _.group({
5961 min: 0,
5962 max: WEEKS_IN_CALENDAR - 1,
5963 i: 1,
5964 node: 'tr',
5965 item: function( rowCounter ) {
5966
5967 // If Monday is the first day and the month starts on Sunday, shift the date back a week.
5968 var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0
5969
5970 return [
5971 _.group({
5972 min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index
5973 max: function() {
5974 return this.min + DAYS_IN_WEEK - 1
5975 },
5976 i: 1,
5977 node: 'td',
5978 item: function( targetDate ) {
5979
5980 // Convert the time date from a relative date to a target date.
5981 targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ])
5982
5983 var isSelected = selectedObject && selectedObject.pick == targetDate.pick,
5984 isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick,
5985 isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick,
5986 formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] )
5987
5988 return [
5989 _.node(
5990 'div',
5991 targetDate.date,
5992 (function( klasses ) {
5993
5994 // Add the `infocus` or `outfocus` classes based on month in view.
5995 klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus )
5996
5997 // Add the `today` class if needed.
5998 if ( nowObject.pick == targetDate.pick ) {
5999 klasses.push( settings.klass.now )
6000 }
6001
6002 // Add the `selected` class if something's selected and the time matches.
6003 if ( isSelected ) {
6004 klasses.push( settings.klass.selected )
6005 }
6006
6007 // Add the `highlighted` class if something's highlighted and the time matches.
6008 if ( isHighlighted ) {
6009 klasses.push( settings.klass.highlighted )
6010 }
6011
6012 // Add the `disabled` class if something's disabled and the object matches.
6013 if ( isDisabled ) {
6014 klasses.push( settings.klass.disabled )
6015 }
6016
6017 return klasses.join( ' ' )
6018 })([ settings.klass.day ]),
6019 'data-pick=' + targetDate.pick + ' ' + _.ariaAttr({
6020 role: 'gridcell',
6021 label: formattedDate,
6022 selected: isSelected && calendar.$node.val() === formattedDate ? true : null,
6023 activedescendant: isHighlighted ? true : null,
6024 disabled: isDisabled ? true : null
6025 })
6026 ),
6027 '',
6028 _.ariaAttr({ role: 'presentation' })
6029 ] //endreturn
6030 }
6031 })
6032 ] //endreturn
6033 }
6034 })
6035 ),
6036 settings.klass.table,
6037 'id="' + calendar.$node[0].id + '_table' + '" ' + _.ariaAttr({
6038 role: 'grid',
6039 controls: calendar.$node[0].id,
6040 readonly: true
6041 })
6042 )
6043 , settings.klass.calendar_container) // end calendar
6044
6045 +
6046
6047 // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”.
6048 _.node(
6049 'div',
6050 _.node( 'button', settings.today, "btn-flat picker__today",
6051 'type=button data-pick=' + nowObject.pick +
6052 ( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' +
6053 _.ariaAttr({ controls: calendar.$node[0].id }) ) +
6054 _.node( 'button', settings.clear, "btn-flat picker__clear",
6055 'type=button data-clear=1' +
6056 ( isOpen ? '' : ' disabled' ) + ' ' +
6057 _.ariaAttr({ controls: calendar.$node[0].id }) ) +
6058 _.node('button', settings.close, "btn-flat picker__close",
6059 'type=button data-close=true ' +
6060 ( isOpen ? '' : ' disabled' ) + ' ' +
6061 _.ariaAttr({ controls: calendar.$node[0].id }) ),
6062 settings.klass.footer
6063 ) //endreturn
6064} //DatePicker.prototype.nodes
6065
6066
6067
6068
6069/**
6070 * The date picker defaults.
6071 */
6072DatePicker.defaults = (function( prefix ) {
6073
6074 return {
6075
6076 // The title label to use for the month nav buttons
6077 labelMonthNext: 'Next month',
6078 labelMonthPrev: 'Previous month',
6079
6080 // The title label to use for the dropdown selectors
6081 labelMonthSelect: 'Select a month',
6082 labelYearSelect: 'Select a year',
6083
6084 // Months and weekdays
6085 monthsFull: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],
6086 monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],
6087 weekdaysFull: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
6088 weekdaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],
6089
6090 // Materialize modified
6091 weekdaysLetter: [ 'S', 'M', 'T', 'W', 'T', 'F', 'S' ],
6092
6093 // Today and clear
6094 today: 'Today',
6095 clear: 'Clear',
6096 close: 'Close',
6097
6098 // The format to show on the `input` element
6099 format: 'd mmmm, yyyy',
6100
6101 // Classes
6102 klass: {
6103
6104 table: prefix + 'table',
6105
6106 header: prefix + 'header',
6107
6108
6109 // Materialize Added klasses
6110 date_display: prefix + 'date-display',
6111 day_display: prefix + 'day-display',
6112 month_display: prefix + 'month-display',
6113 year_display: prefix + 'year-display',
6114 calendar_container: prefix + 'calendar-container',
6115 // end
6116
6117
6118
6119 navPrev: prefix + 'nav--prev',
6120 navNext: prefix + 'nav--next',
6121 navDisabled: prefix + 'nav--disabled',
6122
6123 month: prefix + 'month',
6124 year: prefix + 'year',
6125
6126 selectMonth: prefix + 'select--month',
6127 selectYear: prefix + 'select--year',
6128
6129 weekdays: prefix + 'weekday',
6130
6131 day: prefix + 'day',
6132 disabled: prefix + 'day--disabled',
6133 selected: prefix + 'day--selected',
6134 highlighted: prefix + 'day--highlighted',
6135 now: prefix + 'day--today',
6136 infocus: prefix + 'day--infocus',
6137 outfocus: prefix + 'day--outfocus',
6138
6139 footer: prefix + 'footer',
6140
6141 buttonClear: prefix + 'button--clear',
6142 buttonToday: prefix + 'button--today',
6143 buttonClose: prefix + 'button--close'
6144 }
6145 }
6146})( Picker.klasses().picker + '__' )
6147
6148
6149
6150
6151
6152/**
6153 * Extend the picker to add the date picker.
6154 */
6155Picker.extend( 'pickadate', DatePicker )
6156
6157
6158}));
6159
6160
6161;(function ($) {
6162
6163 $.fn.characterCounter = function(){
6164 return this.each(function(){
6165
6166 var itHasLengthAttribute = $(this).attr('length') !== undefined;
6167
6168 if(itHasLengthAttribute){
6169 $(this).on('input', updateCounter);
6170 $(this).on('focus', updateCounter);
6171 $(this).on('blur', removeCounterElement);
6172
6173 addCounterElement($(this));
6174 }
6175
6176 });
6177 };
6178
6179 function updateCounter(){
6180 var maxLength = +$(this).attr('length'),
6181 actualLength = +$(this).val().length,
6182 isValidLength = actualLength <= maxLength;
6183
6184 $(this).parent().find('span[class="character-counter"]')
6185 .html( actualLength + '/' + maxLength);
6186
6187 addInputStyle(isValidLength, $(this));
6188 }
6189
6190 function addCounterElement($input){
6191 var $counterElement = $('<span/>')
6192 .addClass('character-counter')
6193 .css('float','right')
6194 .css('font-size','12px')
6195 .css('height', 1);
6196
6197 $input.parent().append($counterElement);
6198 }
6199
6200 function removeCounterElement(){
6201 $(this).parent().find('span[class="character-counter"]').html('');
6202 }
6203
6204 function addInputStyle(isValidLength, $input){
6205 var inputHasInvalidClass = $input.hasClass('invalid');
6206 if (isValidLength && inputHasInvalidClass) {
6207 $input.removeClass('invalid');
6208 }
6209 else if(!isValidLength && !inputHasInvalidClass){
6210 $input.removeClass('valid');
6211 $input.addClass('invalid');
6212 }
6213 }
6214
6215 $(document).ready(function(){
6216 $('input, textarea').characterCounter();
6217 });
6218
6219}( jQuery ));
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/materialize.min.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/materialize.min.js
deleted file mode 100644
index 7f778aad..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/materialize.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
1/*!
2 * Materialize v0.97.1 (http://materializecss.com)
3 * Copyright 2014-2015 Materialize
4 * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
5 */
6jQuery.easing.jswing=jQuery.easing.swing,jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(a,b,c,d,e){return jQuery.easing[jQuery.easing.def](a,b,c,d,e)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b+c:d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b+c:-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b*b+c:d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return 0==b?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){return 0==b?c:b==e?c+d:(b/=e/2)<1?d/2*Math.pow(2,10*(b-1))+c:d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){return(b/=e/2)<1?-d/2*(Math.sqrt(1-b*b)-1)+c:d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(0==b)return c;if(1==(b/=e))return c+d;if(g||(g=.3*e),h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(b-=1))*Math.sin(2*(b*e-f)*Math.PI/g))+c},easeOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(0==b)return c;if(1==(b/=e))return c+d;if(g||(g=.3*e),h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*b)*Math.sin(2*(b*e-f)*Math.PI/g)+d+c},easeInOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(0==b)return c;if(2==(b/=e/2))return c+d;if(g||(g=.3*e*1.5),h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return 1>b?-.5*h*Math.pow(2,10*(b-=1))*Math.sin(2*(b*e-f)*Math.PI/g)+c:h*Math.pow(2,-10*(b-=1))*Math.sin(2*(b*e-f)*Math.PI/g)*.5+d+c},easeInBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),d*(b/=e)*b*((f+1)*b-f)+c},easeOutBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),d*((b=b/e-1)*b*((f+1)*b+f)+1)+c},easeInOutBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),(b/=e/2)<1?d/2*b*b*(((f*=1.525)+1)*b-f)+c:d/2*((b-=2)*b*(((f*=1.525)+1)*b+f)+2)+c},easeInBounce:function(a,b,c,d,e){return d-jQuery.easing.easeOutBounce(a,e-b,0,d,e)+c},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?7.5625*d*b*b+c:2/2.75>b?d*(7.5625*(b-=1.5/2.75)*b+.75)+c:2.5/2.75>b?d*(7.5625*(b-=2.25/2.75)*b+.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+.984375)+c},easeInOutBounce:function(a,b,c,d,e){return e/2>b?.5*jQuery.easing.easeInBounce(a,2*b,0,d,e)+c:.5*jQuery.easing.easeOutBounce(a,2*b-e,0,d,e)+.5*d+c}}),jQuery.extend(jQuery.easing,{easeInOutMaterial:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:d/4*((b-=2)*b*b+2)+c}}),!function(a){function b(a){var b=a.length,d=c.type(a);return"function"===d||c.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===d||0===b||"number"==typeof b&&b>0&&b-1 in a}if(!a.jQuery){var c=function(a,b){return new c.fn.init(a,b)};c.isWindow=function(a){return null!=a&&a==a.window},c.type=function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?e[g.call(a)]||"object":typeof a},c.isArray=Array.isArray||function(a){return"array"===c.type(a)},c.isPlainObject=function(a){var b;if(!a||"object"!==c.type(a)||a.nodeType||c.isWindow(a))return!1;try{if(a.constructor&&!f.call(a,"constructor")&&!f.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}for(b in a);return void 0===b||f.call(a,b)},c.each=function(a,c,d){var e,f=0,g=a.length,h=b(a);if(d){if(h)for(;g>f&&(e=c.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=c.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=c.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=c.call(a[f],f,a[f]),e===!1)break;return a},c.data=function(a,b,e){if(void 0===e){var f=a[c.expando],g=f&&d[f];if(void 0===b)return g;if(g&&b in g)return g[b]}else if(void 0!==b){var f=a[c.expando]||(a[c.expando]=++c.uuid);return d[f]=d[f]||{},d[f][b]=e,e}},c.removeData=function(a,b){var e=a[c.expando],f=e&&d[e];f&&c.each(b,function(a,b){delete f[b]})},c.extend=function(){var a,b,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[i]||{},i++),"object"!=typeof h&&"function"!==c.type(h)&&(h={}),i===j&&(h=this,i--);j>i;i++)if(null!=(f=arguments[i]))for(e in f)a=h[e],d=f[e],h!==d&&(k&&d&&(c.isPlainObject(d)||(b=c.isArray(d)))?(b?(b=!1,g=a&&c.isArray(a)?a:[]):g=a&&c.isPlainObject(a)?a:{},h[e]=c.extend(k,g,d)):void 0!==d&&(h[e]=d));return h},c.queue=function(a,d,e){function f(a,c){var d=c||[];return null!=a&&(b(Object(a))?!function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;)a[e++]=b[d++];if(c!==c)for(;void 0!==b[d];)a[e++]=b[d++];return a.length=e,a}(d,"string"==typeof a?[a]:a):[].push.call(d,a)),d}if(a){d=(d||"fx")+"queue";var g=c.data(a,d);return e?(!g||c.isArray(e)?g=c.data(a,d,f(e)):g.push(e),g):g||[]}},c.dequeue=function(a,b){c.each(a.nodeType?[a]:a,function(a,d){b=b||"fx";var e=c.queue(d,b),f=e.shift();"inprogress"===f&&(f=e.shift()),f&&("fx"===b&&e.unshift("inprogress"),f.call(d,function(){c.dequeue(d,b)}))})},c.fn=c.prototype={init:function(a){if(a.nodeType)return this[0]=a,this;throw new Error("Not a DOM node.")},offset:function(){var b=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:b.top+(a.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:b.left+(a.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function a(){for(var a=this.offsetParent||document;a&&"html"===!a.nodeType.toLowerCase&&"static"===a.style.position;)a=a.offsetParent;return a||document}var b=this[0],a=a.apply(b),d=this.offset(),e=/^(?:body|html)$/i.test(a.nodeName)?{top:0,left:0}:c(a).offset();return d.top-=parseFloat(b.style.marginTop)||0,d.left-=parseFloat(b.style.marginLeft)||0,a.style&&(e.top+=parseFloat(a.style.borderTopWidth)||0,e.left+=parseFloat(a.style.borderLeftWidth)||0),{top:d.top-e.top,left:d.left-e.left}}};var d={};c.expando="velocity"+(new Date).getTime(),c.uuid=0;for(var e={},f=e.hasOwnProperty,g=e.toString,h="Boolean Number String Function Array Date RegExp Object Error".split(" "),i=0;i<h.length;i++)e["[object "+h[i]+"]"]=h[i].toLowerCase();c.fn.init.prototype=c.fn,a.Velocity={Utilities:c}}}(window),function(a){"object"==typeof module&&"object"==typeof module.exports?module.exports=a():"function"==typeof define&&define.amd?define(a):a()}(function(){return function(a,b,c,d){function e(a){for(var b=-1,c=a?a.length:0,d=[];++b<c;){var e=a[b];e&&d.push(e)}return d}function f(a){return p.isWrapped(a)?a=[].slice.call(a):p.isNode(a)&&(a=[a]),a}function g(a){var b=m.data(a,"velocity");return null===b?d:b}function h(a){return function(b){return Math.round(b*a)*(1/a)}}function i(a,c,d,e){function f(a,b){return 1-3*b+3*a}function g(a,b){return 3*b-6*a}function h(a){return 3*a}function i(a,b,c){return((f(b,c)*a+g(b,c))*a+h(b))*a}function j(a,b,c){return 3*f(b,c)*a*a+2*g(b,c)*a+h(b)}function k(b,c){for(var e=0;p>e;++e){var f=j(c,a,d);if(0===f)return c;var g=i(c,a,d)-b;c-=g/f}return c}function l(){for(var b=0;t>b;++b)x[b]=i(b*u,a,d)}function m(b,c,e){var f,g,h=0;do g=c+(e-c)/2,f=i(g,a,d)-b,f>0?e=g:c=g;while(Math.abs(f)>r&&++h<s);return g}function n(b){for(var c=0,e=1,f=t-1;e!=f&&x[e]<=b;++e)c+=u;--e;var g=(b-x[e])/(x[e+1]-x[e]),h=c+g*u,i=j(h,a,d);return i>=q?k(b,h):0==i?h:m(b,c,c+u)}function o(){y=!0,(a!=c||d!=e)&&l()}var p=4,q=.001,r=1e-7,s=10,t=11,u=1/(t-1),v="Float32Array"in b;if(4!==arguments.length)return!1;for(var w=0;4>w;++w)if("number"!=typeof arguments[w]||isNaN(arguments[w])||!isFinite(arguments[w]))return!1;a=Math.min(a,1),d=Math.min(d,1),a=Math.max(a,0),d=Math.max(d,0);var x=v?new Float32Array(t):new Array(t),y=!1,z=function(b){return y||o(),a===c&&d===e?b:0===b?0:1===b?1:i(n(b),c,e)};z.getControlPoints=function(){return[{x:a,y:c},{x:d,y:e}]};var A="generateBezier("+[a,c,d,e]+")";return z.toString=function(){return A},z}function j(a,b){var c=a;return p.isString(a)?t.Easings[a]||(c=!1):c=p.isArray(a)&&1===a.length?h.apply(null,a):p.isArray(a)&&2===a.length?u.apply(null,a.concat([b])):p.isArray(a)&&4===a.length?i.apply(null,a):!1,c===!1&&(c=t.Easings[t.defaults.easing]?t.defaults.easing:s),c}function k(a){if(a){var b=(new Date).getTime(),c=t.State.calls.length;c>1e4&&(t.State.calls=e(t.State.calls));for(var f=0;c>f;f++)if(t.State.calls[f]){var h=t.State.calls[f],i=h[0],j=h[2],n=h[3],o=!!n,q=null;n||(n=t.State.calls[f][3]=b-16);for(var r=Math.min((b-n)/j.duration,1),s=0,u=i.length;u>s;s++){var w=i[s],y=w.element;if(g(y)){var z=!1;if(j.display!==d&&null!==j.display&&"none"!==j.display){if("flex"===j.display){var A=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];m.each(A,function(a,b){v.setPropertyValue(y,"display",b)})}v.setPropertyValue(y,"display",j.display)}j.visibility!==d&&"hidden"!==j.visibility&&v.setPropertyValue(y,"visibility",j.visibility);for(var B in w)if("element"!==B){var C,D=w[B],E=p.isString(D.easing)?t.Easings[D.easing]:D.easing;if(1===r)C=D.endValue;else{var F=D.endValue-D.startValue;if(C=D.startValue+F*E(r,j,F),!o&&C===D.currentValue)continue}if(D.currentValue=C,"tween"===B)q=C;else{if(v.Hooks.registered[B]){var G=v.Hooks.getRoot(B),H=g(y).rootPropertyValueCache[G];H&&(D.rootPropertyValue=H)}var I=v.setPropertyValue(y,B,D.currentValue+(0===parseFloat(C)?"":D.unitType),D.rootPropertyValue,D.scrollData);v.Hooks.registered[B]&&(g(y).rootPropertyValueCache[G]=v.Normalizations.registered[G]?v.Normalizations.registered[G]("extract",null,I[1]):I[1]),"transform"===I[0]&&(z=!0)}}j.mobileHA&&g(y).transformCache.translate3d===d&&(g(y).transformCache.translate3d="(0px, 0px, 0px)",z=!0),z&&v.flushTransformCache(y)}}j.display!==d&&"none"!==j.display&&(t.State.calls[f][2].display=!1),j.visibility!==d&&"hidden"!==j.visibility&&(t.State.calls[f][2].visibility=!1),j.progress&&j.progress.call(h[1],h[1],r,Math.max(0,n+j.duration-b),n,q),1===r&&l(f)}}t.State.isTicking&&x(k)}function l(a,b){if(!t.State.calls[a])return!1;for(var c=t.State.calls[a][0],e=t.State.calls[a][1],f=t.State.calls[a][2],h=t.State.calls[a][4],i=!1,j=0,k=c.length;k>j;j++){var l=c[j].element;if(b||f.loop||("none"===f.display&&v.setPropertyValue(l,"display",f.display),"hidden"===f.visibility&&v.setPropertyValue(l,"visibility",f.visibility)),f.loop!==!0&&(m.queue(l)[1]===d||!/\.velocityQueueEntryFlag/i.test(m.queue(l)[1]))&&g(l)){g(l).isAnimating=!1,g(l).rootPropertyValueCache={};var n=!1;m.each(v.Lists.transforms3D,function(a,b){var c=/^scale/.test(b)?1:0,e=g(l).transformCache[b];g(l).transformCache[b]!==d&&new RegExp("^\\("+c+"[^.]").test(e)&&(n=!0,delete g(l).transformCache[b])}),f.mobileHA&&(n=!0,delete g(l).transformCache.translate3d),n&&v.flushTransformCache(l),v.Values.removeClass(l,"velocity-animating")}if(!b&&f.complete&&!f.loop&&j===k-1)try{f.complete.call(e,e)}catch(o){setTimeout(function(){throw o},1)}h&&f.loop!==!0&&h(e),g(l)&&f.loop===!0&&!b&&(m.each(g(l).tweensContainer,function(a,b){/^rotate/.test(a)&&360===parseFloat(b.endValue)&&(b.endValue=0,b.startValue=360),/^backgroundPosition/.test(a)&&100===parseFloat(b.endValue)&&"%"===b.unitType&&(b.endValue=0,b.startValue=100)}),t(l,"reverse",{loop:!0,delay:f.delay})),f.queue!==!1&&m.dequeue(l,f.queue)}t.State.calls[a]=!1;for(var p=0,q=t.State.calls.length;q>p;p++)if(t.State.calls[p]!==!1){i=!0;break}i===!1&&(t.State.isTicking=!1,delete t.State.calls,t.State.calls=[])}var m,n=function(){if(c.documentMode)return c.documentMode;for(var a=7;a>4;a--){var b=c.createElement("div");if(b.innerHTML="<!--[if IE "+a+"]><span></span><![endif]-->",b.getElementsByTagName("span").length)return b=null,a}return d}(),o=function(){var a=0;return b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame||function(b){var c,d=(new Date).getTime();return c=Math.max(0,16-(d-a)),a=d+c,setTimeout(function(){b(d+c)},c)}}(),p={isString:function(a){return"string"==typeof a},isArray:Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},isFunction:function(a){return"[object Function]"===Object.prototype.toString.call(a)},isNode:function(a){return a&&a.nodeType},isNodeList:function(a){return"object"==typeof a&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(a))&&a.length!==d&&(0===a.length||"object"==typeof a[0]&&a[0].nodeType>0)},isWrapped:function(a){return a&&(a.jquery||b.Zepto&&b.Zepto.zepto.isZ(a))},isSVG:function(a){return b.SVGElement&&a instanceof b.SVGElement},isEmptyObject:function(a){for(var b in a)return!1;return!0}},q=!1;if(a.fn&&a.fn.jquery?(m=a,q=!0):m=b.Velocity.Utilities,8>=n&&!q)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=n)return void(jQuery.fn.velocity=jQuery.fn.animate);var r=400,s="swing",t={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:b.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:c.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:m,Redirects:{},Easings:{},Promise:b.Promise,defaults:{queue:"",duration:r,easing:s,begin:d,complete:d,progress:d,display:d,visibility:d,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(a){m.data(a,"velocity",{isSVG:p.isSVG(a),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};b.pageYOffset!==d?(t.State.scrollAnchor=b,t.State.scrollPropertyLeft="pageXOffset",t.State.scrollPropertyTop="pageYOffset"):(t.State.scrollAnchor=c.documentElement||c.body.parentNode||c.body,t.State.scrollPropertyLeft="scrollLeft",t.State.scrollPropertyTop="scrollTop");var u=function(){function a(a){return-a.tension*a.x-a.friction*a.v}function b(b,c,d){var e={x:b.x+d.dx*c,v:b.v+d.dv*c,tension:b.tension,friction:b.friction};return{dx:e.v,dv:a(e)}}function c(c,d){var e={dx:c.v,dv:a(c)},f=b(c,.5*d,e),g=b(c,.5*d,f),h=b(c,d,g),i=1/6*(e.dx+2*(f.dx+g.dx)+h.dx),j=1/6*(e.dv+2*(f.dv+g.dv)+h.dv);return c.x=c.x+i*d,c.v=c.v+j*d,c}return function d(a,b,e){var f,g,h,i={x:-1,v:0,tension:null,friction:null},j=[0],k=0,l=1e-4,m=.016;for(a=parseFloat(a)||500,b=parseFloat(b)||20,e=e||null,i.tension=a,i.friction=b,f=null!==e,f?(k=d(a,b),g=k/e*m):g=m;h=c(h||i,g),j.push(1+h.x),k+=16,Math.abs(h.x)>l&&Math.abs(h.v)>l;);return f?function(a){return j[a*(j.length-1)|0]}:k}}();t.Easings={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},spring:function(a){return 1-Math.cos(4.5*a*Math.PI)*Math.exp(6*-a)}},m.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(a,b){t.Easings[b[0]]=i.apply(null,b[1])});var v=t.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var a=0;a<v.Lists.colors.length;a++){var b="color"===v.Lists.colors[a]?"0 0 0 1":"255 255 255 1";v.Hooks.templates[v.Lists.colors[a]]=["Red Green Blue Alpha",b]}var c,d,e;if(n)for(c in v.Hooks.templates){d=v.Hooks.templates[c],e=d[0].split(" ");var f=d[1].match(v.RegEx.valueSplit);"Color"===e[0]&&(e.push(e.shift()),f.push(f.shift()),v.Hooks.templates[c]=[e.join(" "),f.join(" ")])}for(c in v.Hooks.templates){d=v.Hooks.templates[c],e=d[0].split(" ");for(var a in e){var g=c+e[a],h=a;v.Hooks.registered[g]=[c,h]}}},getRoot:function(a){var b=v.Hooks.registered[a];return b?b[0]:a},cleanRootPropertyValue:function(a,b){return v.RegEx.valueUnwrap.test(b)&&(b=b.match(v.RegEx.valueUnwrap)[1]),v.Values.isCSSNullValue(b)&&(b=v.Hooks.templates[a][1]),b},extractValue:function(a,b){var c=v.Hooks.registered[a];if(c){var d=c[0],e=c[1];return b=v.Hooks.cleanRootPropertyValue(d,b),b.toString().match(v.RegEx.valueSplit)[e]}return b},injectValue:function(a,b,c){var d=v.Hooks.registered[a];if(d){var e,f,g=d[0],h=d[1];return c=v.Hooks.cleanRootPropertyValue(g,c),e=c.toString().match(v.RegEx.valueSplit),e[h]=b,f=e.join(" ")}return c}},Normalizations:{registered:{clip:function(a,b,c){switch(a){case"name":return"clip";case"extract":var d;return v.RegEx.wrappedValueAlreadyExtracted.test(c)?d=c:(d=c.toString().match(v.RegEx.valueUnwrap),d=d?d[1].replace(/,(\s+)?/g," "):c),d;case"inject":return"rect("+c+")"}},blur:function(a,b,c){switch(a){case"name":return t.State.isFirefox?"filter":"-webkit-filter";case"extract":var d=parseFloat(c);if(!d&&0!==d){var e=c.toString().match(/blur\(([0-9]+[A-z]+)\)/i);d=e?e[1]:0}return d;case"inject":return parseFloat(c)?"blur("+c+")":"none"}},opacity:function(a,b,c){if(8>=n)switch(a){case"name":return"filter";case"extract":var d=c.toString().match(/alpha\(opacity=(.*)\)/i);return c=d?d[1]/100:1;case"inject":return b.style.zoom=1,parseFloat(c)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(c),10)+")"}else switch(a){case"name":return"opacity";case"extract":return c;case"inject":return c}}},register:function(){9>=n||t.State.isGingerbread||(v.Lists.transformsBase=v.Lists.transformsBase.concat(v.Lists.transforms3D));for(var a=0;a<v.Lists.transformsBase.length;a++)!function(){var b=v.Lists.transformsBase[a];v.Normalizations.registered[b]=function(a,c,e){switch(a){case"name":return"transform";case"extract":return g(c)===d||g(c).transformCache[b]===d?/^scale/i.test(b)?1:0:g(c).transformCache[b].replace(/[()]/g,"");case"inject":var f=!1;switch(b.substr(0,b.length-1)){case"translate":f=!/(%|px|em|rem|vw|vh|\d)$/i.test(e);break;case"scal":case"scale":t.State.isAndroid&&g(c).transformCache[b]===d&&1>e&&(e=1),f=!/(\d)$/i.test(e);break;case"skew":f=!/(deg|\d)$/i.test(e);break;case"rotate":f=!/(deg|\d)$/i.test(e)}return f||(g(c).transformCache[b]="("+e+")"),g(c).transformCache[b]}}}();for(var a=0;a<v.Lists.colors.length;a++)!function(){var b=v.Lists.colors[a];v.Normalizations.registered[b]=function(a,c,e){switch(a){case"name":return b;case"extract":var f;if(v.RegEx.wrappedValueAlreadyExtracted.test(e))f=e;else{var g,h={black:"rgb(0, 0, 0)",blue:"rgb(0, 0, 255)",gray:"rgb(128, 128, 128)",green:"rgb(0, 128, 0)",red:"rgb(255, 0, 0)",white:"rgb(255, 255, 255)"};/^[A-z]+$/i.test(e)?g=h[e]!==d?h[e]:h.black:v.RegEx.isHex.test(e)?g="rgb("+v.Values.hexToRgb(e).join(" ")+")":/^rgba?\(/i.test(e)||(g=h.black),f=(g||e).toString().match(v.RegEx.valueUnwrap)[1].replace(/,(\s+)?/g," ")}return 8>=n||3!==f.split(" ").length||(f+=" 1"),f;case"inject":return 8>=n?4===e.split(" ").length&&(e=e.split(/\s+/).slice(0,3).join(" ")):3===e.split(" ").length&&(e+=" 1"),(8>=n?"rgb":"rgba")+"("+e.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(a){return a.replace(/-(\w)/g,function(a,b){return b.toUpperCase()})},SVGAttribute:function(a){var b="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(n||t.State.isAndroid&&!t.State.isChrome)&&(b+="|transform"),new RegExp("^("+b+")$","i").test(a)},prefixCheck:function(a){if(t.State.prefixMatches[a])return[t.State.prefixMatches[a],!0];for(var b=["","Webkit","Moz","ms","O"],c=0,d=b.length;d>c;c++){var e;if(e=0===c?a:b[c]+a.replace(/^\w/,function(a){return a.toUpperCase()}),p.isString(t.State.prefixElement.style[e]))return t.State.prefixMatches[a]=e,[e,!0]}return[a,!1]}},Values:{hexToRgb:function(a){var b,c=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,d=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;return a=a.replace(c,function(a,b,c,d){return b+b+c+c+d+d}),b=d.exec(a),b?[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]:[0,0,0]},isCSSNullValue:function(a){return 0==a||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(a)},getUnitType:function(a){return/^(rotate|skew)/i.test(a)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(a)?"":"px"},getDisplayType:function(a){var b=a&&a.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(b)?"inline":/^(li)$/i.test(b)?"list-item":/^(tr)$/i.test(b)?"table-row":/^(table)$/i.test(b)?"table":/^(tbody)$/i.test(b)?"table-row-group":"block"},addClass:function(a,b){a.classList?a.classList.add(b):a.className+=(a.className.length?" ":"")+b},removeClass:function(a,b){a.classList?a.classList.remove(b):a.className=a.className.toString().replace(new RegExp("(^|\\s)"+b.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(a,c,e,f){function h(a,c){function e(){j&&v.setPropertyValue(a,"display","none")}var i=0;if(8>=n)i=m.css(a,c);else{var j=!1;if(/^(width|height)$/.test(c)&&0===v.getPropertyValue(a,"display")&&(j=!0,v.setPropertyValue(a,"display",v.Values.getDisplayType(a))),!f){if("height"===c&&"border-box"!==v.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var k=a.offsetHeight-(parseFloat(v.getPropertyValue(a,"borderTopWidth"))||0)-(parseFloat(v.getPropertyValue(a,"borderBottomWidth"))||0)-(parseFloat(v.getPropertyValue(a,"paddingTop"))||0)-(parseFloat(v.getPropertyValue(a,"paddingBottom"))||0);return e(),k}if("width"===c&&"border-box"!==v.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var l=a.offsetWidth-(parseFloat(v.getPropertyValue(a,"borderLeftWidth"))||0)-(parseFloat(v.getPropertyValue(a,"borderRightWidth"))||0)-(parseFloat(v.getPropertyValue(a,"paddingLeft"))||0)-(parseFloat(v.getPropertyValue(a,"paddingRight"))||0);return e(),l}}var o;o=g(a)===d?b.getComputedStyle(a,null):g(a).computedStyle?g(a).computedStyle:g(a).computedStyle=b.getComputedStyle(a,null),"borderColor"===c&&(c="borderTopColor"),i=9===n&&"filter"===c?o.getPropertyValue(c):o[c],(""===i||null===i)&&(i=a.style[c]),e()}if("auto"===i&&/^(top|right|bottom|left)$/i.test(c)){var p=h(a,"position");("fixed"===p||"absolute"===p&&/top|left/i.test(c))&&(i=m(a).position()[c]+"px")}return i}var i;if(v.Hooks.registered[c]){var j=c,k=v.Hooks.getRoot(j);e===d&&(e=v.getPropertyValue(a,v.Names.prefixCheck(k)[0])),v.Normalizations.registered[k]&&(e=v.Normalizations.registered[k]("extract",a,e)),i=v.Hooks.extractValue(j,e)}else if(v.Normalizations.registered[c]){var l,o;l=v.Normalizations.registered[c]("name",a),"transform"!==l&&(o=h(a,v.Names.prefixCheck(l)[0]),v.Values.isCSSNullValue(o)&&v.Hooks.templates[c]&&(o=v.Hooks.templates[c][1])),i=v.Normalizations.registered[c]("extract",a,o)}if(!/^[\d-]/.test(i))if(g(a)&&g(a).isSVG&&v.Names.SVGAttribute(c))if(/^(height|width)$/i.test(c))try{i=a.getBBox()[c]}catch(p){i=0}else i=a.getAttribute(c);else i=h(a,v.Names.prefixCheck(c)[0]);return v.Values.isCSSNullValue(i)&&(i=0),t.debug>=2&&console.log("Get "+c+": "+i),i},setPropertyValue:function(a,c,d,e,f){var h=c;if("scroll"===c)f.container?f.container["scroll"+f.direction]=d:"Left"===f.direction?b.scrollTo(d,f.alternateValue):b.scrollTo(f.alternateValue,d);else if(v.Normalizations.registered[c]&&"transform"===v.Normalizations.registered[c]("name",a))v.Normalizations.registered[c]("inject",a,d),h="transform",d=g(a).transformCache[c];else{if(v.Hooks.registered[c]){var i=c,j=v.Hooks.getRoot(c);e=e||v.getPropertyValue(a,j),d=v.Hooks.injectValue(i,d,e),c=j}if(v.Normalizations.registered[c]&&(d=v.Normalizations.registered[c]("inject",a,d),c=v.Normalizations.registered[c]("name",a)),h=v.Names.prefixCheck(c)[0],8>=n)try{a.style[h]=d}catch(k){t.debug&&console.log("Browser does not support ["+d+"] for ["+h+"]")}else g(a)&&g(a).isSVG&&v.Names.SVGAttribute(c)?a.setAttribute(c,d):a.style[h]=d;t.debug>=2&&console.log("Set "+c+" ("+h+"): "+d)}return[h,d]},flushTransformCache:function(a){function b(b){return parseFloat(v.getPropertyValue(a,b))}var c="";if((n||t.State.isAndroid&&!t.State.isChrome)&&g(a).isSVG){var d={translate:[b("translateX"),b("translateY")],skewX:[b("skewX")],skewY:[b("skewY")],scale:1!==b("scale")?[b("scale"),b("scale")]:[b("scaleX"),b("scaleY")],rotate:[b("rotateZ"),0,0]};m.each(g(a).transformCache,function(a){/^translate/i.test(a)?a="translate":/^scale/i.test(a)?a="scale":/^rotate/i.test(a)&&(a="rotate"),d[a]&&(c+=a+"("+d[a].join(" ")+") ",delete d[a])})}else{var e,f;m.each(g(a).transformCache,function(b){return e=g(a).transformCache[b],"transformPerspective"===b?(f=e,!0):(9===n&&"rotateZ"===b&&(b="rotate"),void(c+=b+e+" "))}),f&&(c="perspective"+f+" "+c)}v.setPropertyValue(a,"transform",c)}};v.Hooks.register(),v.Normalizations.register(),t.hook=function(a,b,c){var e=d;return a=f(a),m.each(a,function(a,f){if(g(f)===d&&t.init(f),c===d)e===d&&(e=t.CSS.getPropertyValue(f,b));else{var h=t.CSS.setPropertyValue(f,b,c);"transform"===h[0]&&t.CSS.flushTransformCache(f),e=h}}),e};var w=function(){function a(){return h?B.promise||null:i}function e(){function a(a){function l(a,b){var c=d,e=d,g=d;return p.isArray(a)?(c=a[0],!p.isArray(a[1])&&/^[\d-]/.test(a[1])||p.isFunction(a[1])||v.RegEx.isHex.test(a[1])?g=a[1]:(p.isString(a[1])&&!v.RegEx.isHex.test(a[1])||p.isArray(a[1]))&&(e=b?a[1]:j(a[1],h.duration),a[2]!==d&&(g=a[2]))):c=a,b||(e=e||h.easing),p.isFunction(c)&&(c=c.call(f,y,x)),p.isFunction(g)&&(g=g.call(f,y,x)),[c||0,e,g]}function n(a,b){var c,d;return d=(b||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(a){return c=a,""}),c||(c=v.Values.getUnitType(a)),[d,c]}function r(){var a={myParent:f.parentNode||c.body,position:v.getPropertyValue(f,"position"),fontSize:v.getPropertyValue(f,"fontSize")},d=a.position===I.lastPosition&&a.myParent===I.lastParent,e=a.fontSize===I.lastFontSize;I.lastParent=a.myParent,I.lastPosition=a.position,I.lastFontSize=a.fontSize;var h=100,i={};if(e&&d)i.emToPx=I.lastEmToPx,i.percentToPxWidth=I.lastPercentToPxWidth,i.percentToPxHeight=I.lastPercentToPxHeight;else{var j=g(f).isSVG?c.createElementNS("http://www.w3.org/2000/svg","rect"):c.createElement("div");t.init(j),a.myParent.appendChild(j),m.each(["overflow","overflowX","overflowY"],function(a,b){t.CSS.setPropertyValue(j,b,"hidden")}),t.CSS.setPropertyValue(j,"position",a.position),t.CSS.setPropertyValue(j,"fontSize",a.fontSize),t.CSS.setPropertyValue(j,"boxSizing","content-box"),m.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(a,b){t.CSS.setPropertyValue(j,b,h+"%")}),t.CSS.setPropertyValue(j,"paddingLeft",h+"em"),i.percentToPxWidth=I.lastPercentToPxWidth=(parseFloat(v.getPropertyValue(j,"width",null,!0))||1)/h,i.percentToPxHeight=I.lastPercentToPxHeight=(parseFloat(v.getPropertyValue(j,"height",null,!0))||1)/h,i.emToPx=I.lastEmToPx=(parseFloat(v.getPropertyValue(j,"paddingLeft"))||1)/h,a.myParent.removeChild(j)}return null===I.remToPx&&(I.remToPx=parseFloat(v.getPropertyValue(c.body,"fontSize"))||16),null===I.vwToPx&&(I.vwToPx=parseFloat(b.innerWidth)/100,I.vhToPx=parseFloat(b.innerHeight)/100),i.remToPx=I.remToPx,i.vwToPx=I.vwToPx,i.vhToPx=I.vhToPx,t.debug>=1&&console.log("Unit ratios: "+JSON.stringify(i),f),i}if(h.begin&&0===y)try{h.begin.call(o,o)}catch(u){setTimeout(function(){throw u},1)}if("scroll"===C){var w,z,A,D=/^x$/i.test(h.axis)?"Left":"Top",E=parseFloat(h.offset)||0;h.container?p.isWrapped(h.container)||p.isNode(h.container)?(h.container=h.container[0]||h.container,w=h.container["scroll"+D],A=w+m(f).position()[D.toLowerCase()]+E):h.container=null:(w=t.State.scrollAnchor[t.State["scrollProperty"+D]],z=t.State.scrollAnchor[t.State["scrollProperty"+("Left"===D?"Top":"Left")]],A=m(f).offset()[D.toLowerCase()]+E),i={scroll:{rootPropertyValue:!1,startValue:w,currentValue:w,endValue:A,unitType:"",easing:h.easing,scrollData:{container:h.container,direction:D,alternateValue:z}},element:f},t.debug&&console.log("tweensContainer (scroll): ",i.scroll,f)}else if("reverse"===C){if(!g(f).tweensContainer)return void m.dequeue(f,h.queue);"none"===g(f).opts.display&&(g(f).opts.display="auto"),"hidden"===g(f).opts.visibility&&(g(f).opts.visibility="visible"),g(f).opts.loop=!1,g(f).opts.begin=null,g(f).opts.complete=null,s.easing||delete h.easing,s.duration||delete h.duration,h=m.extend({},g(f).opts,h);var F=m.extend(!0,{},g(f).tweensContainer);for(var G in F)if("element"!==G){var H=F[G].startValue;F[G].startValue=F[G].currentValue=F[G].endValue,F[G].endValue=H,p.isEmptyObject(s)||(F[G].easing=h.easing),t.debug&&console.log("reverse tweensContainer ("+G+"): "+JSON.stringify(F[G]),f)}i=F}else if("start"===C){var F;g(f).tweensContainer&&g(f).isAnimating===!0&&(F=g(f).tweensContainer),m.each(q,function(a,b){if(RegExp("^"+v.Lists.colors.join("$|^")+"$").test(a)){var c=l(b,!0),e=c[0],f=c[1],g=c[2];if(v.RegEx.isHex.test(e)){for(var h=["Red","Green","Blue"],i=v.Values.hexToRgb(e),j=g?v.Values.hexToRgb(g):d,k=0;k<h.length;k++){var m=[i[k]];f&&m.push(f),j!==d&&m.push(j[k]),q[a+h[k]]=m}delete q[a]}}});for(var K in q){var L=l(q[K]),M=L[0],N=L[1],O=L[2];K=v.Names.camelCase(K);var P=v.Hooks.getRoot(K),Q=!1;if(g(f).isSVG||"tween"===P||v.Names.prefixCheck(P)[1]!==!1||v.Normalizations.registered[P]!==d){(h.display!==d&&null!==h.display&&"none"!==h.display||h.visibility!==d&&"hidden"!==h.visibility)&&/opacity|filter/.test(K)&&!O&&0!==M&&(O=0),h._cacheValues&&F&&F[K]?(O===d&&(O=F[K].endValue+F[K].unitType),Q=g(f).rootPropertyValueCache[P]):v.Hooks.registered[K]?O===d?(Q=v.getPropertyValue(f,P),O=v.getPropertyValue(f,K,Q)):Q=v.Hooks.templates[P][1]:O===d&&(O=v.getPropertyValue(f,K));var R,S,T,U=!1;if(R=n(K,O),O=R[0],T=R[1],R=n(K,M),M=R[0].replace(/^([+-\/*])=/,function(a,b){return U=b,""}),S=R[1],O=parseFloat(O)||0,M=parseFloat(M)||0,"%"===S&&(/^(fontSize|lineHeight)$/.test(K)?(M/=100,S="em"):/^scale/.test(K)?(M/=100,S=""):/(Red|Green|Blue)$/i.test(K)&&(M=M/100*255,S="")),/[\/*]/.test(U))S=T;else if(T!==S&&0!==O)if(0===M)S=T;else{e=e||r();var V=/margin|padding|left|right|width|text|word|letter/i.test(K)||/X$/.test(K)||"x"===K?"x":"y";switch(T){case"%":O*="x"===V?e.percentToPxWidth:e.percentToPxHeight;break;case"px":break;default:O*=e[T+"ToPx"]}switch(S){case"%":O*=1/("x"===V?e.percentToPxWidth:e.percentToPxHeight);break;case"px":break;default:
7O*=1/e[S+"ToPx"]}}switch(U){case"+":M=O+M;break;case"-":M=O-M;break;case"*":M=O*M;break;case"/":M=O/M}i[K]={rootPropertyValue:Q,startValue:O,currentValue:O,endValue:M,unitType:S,easing:N},t.debug&&console.log("tweensContainer ("+K+"): "+JSON.stringify(i[K]),f)}else t.debug&&console.log("Skipping ["+P+"] due to a lack of browser support.")}i.element=f}i.element&&(v.Values.addClass(f,"velocity-animating"),J.push(i),""===h.queue&&(g(f).tweensContainer=i,g(f).opts=h),g(f).isAnimating=!0,y===x-1?(t.State.calls.push([J,o,h,null,B.resolver]),t.State.isTicking===!1&&(t.State.isTicking=!0,k())):y++)}var e,f=this,h=m.extend({},t.defaults,s),i={};switch(g(f)===d&&t.init(f),parseFloat(h.delay)&&h.queue!==!1&&m.queue(f,h.queue,function(a){t.velocityQueueEntryFlag=!0,g(f).delayTimer={setTimeout:setTimeout(a,parseFloat(h.delay)),next:a}}),h.duration.toString().toLowerCase()){case"fast":h.duration=200;break;case"normal":h.duration=r;break;case"slow":h.duration=600;break;default:h.duration=parseFloat(h.duration)||1}t.mock!==!1&&(t.mock===!0?h.duration=h.delay=1:(h.duration*=parseFloat(t.mock)||1,h.delay*=parseFloat(t.mock)||1)),h.easing=j(h.easing,h.duration),h.begin&&!p.isFunction(h.begin)&&(h.begin=null),h.progress&&!p.isFunction(h.progress)&&(h.progress=null),h.complete&&!p.isFunction(h.complete)&&(h.complete=null),h.display!==d&&null!==h.display&&(h.display=h.display.toString().toLowerCase(),"auto"===h.display&&(h.display=t.CSS.Values.getDisplayType(f))),h.visibility!==d&&null!==h.visibility&&(h.visibility=h.visibility.toString().toLowerCase()),h.mobileHA=h.mobileHA&&t.State.isMobile&&!t.State.isGingerbread,h.queue===!1?h.delay?setTimeout(a,h.delay):a():m.queue(f,h.queue,function(b,c){return c===!0?(B.promise&&B.resolver(o),!0):(t.velocityQueueEntryFlag=!0,void a(b))}),""!==h.queue&&"fx"!==h.queue||"inprogress"===m.queue(f)[0]||m.dequeue(f)}var h,i,n,o,q,s,u=arguments[0]&&(arguments[0].p||m.isPlainObject(arguments[0].properties)&&!arguments[0].properties.names||p.isString(arguments[0].properties));if(p.isWrapped(this)?(h=!1,n=0,o=this,i=this):(h=!0,n=1,o=u?arguments[0].elements||arguments[0].e:arguments[0]),o=f(o)){u?(q=arguments[0].properties||arguments[0].p,s=arguments[0].options||arguments[0].o):(q=arguments[n],s=arguments[n+1]);var x=o.length,y=0;if(!/^(stop|finish)$/i.test(q)&&!m.isPlainObject(s)){var z=n+1;s={};for(var A=z;A<arguments.length;A++)p.isArray(arguments[A])||!/^(fast|normal|slow)$/i.test(arguments[A])&&!/^\d/.test(arguments[A])?p.isString(arguments[A])||p.isArray(arguments[A])?s.easing=arguments[A]:p.isFunction(arguments[A])&&(s.complete=arguments[A]):s.duration=arguments[A]}var B={promise:null,resolver:null,rejecter:null};h&&t.Promise&&(B.promise=new t.Promise(function(a,b){B.resolver=a,B.rejecter=b}));var C;switch(q){case"scroll":C="scroll";break;case"reverse":C="reverse";break;case"finish":case"stop":m.each(o,function(a,b){g(b)&&g(b).delayTimer&&(clearTimeout(g(b).delayTimer.setTimeout),g(b).delayTimer.next&&g(b).delayTimer.next(),delete g(b).delayTimer)});var D=[];return m.each(t.State.calls,function(a,b){b&&m.each(b[1],function(c,e){var f=s===d?"":s;return f===!0||b[2].queue===f||s===d&&b[2].queue===!1?void m.each(o,function(c,d){d===e&&((s===!0||p.isString(s))&&(m.each(m.queue(d,p.isString(s)?s:""),function(a,b){p.isFunction(b)&&b(null,!0)}),m.queue(d,p.isString(s)?s:"",[])),"stop"===q?(g(d)&&g(d).tweensContainer&&f!==!1&&m.each(g(d).tweensContainer,function(a,b){b.endValue=b.currentValue}),D.push(a)):"finish"===q&&(b[2].duration=1))}):!0})}),"stop"===q&&(m.each(D,function(a,b){l(b,!0)}),B.promise&&B.resolver(o)),a();default:if(!m.isPlainObject(q)||p.isEmptyObject(q)){if(p.isString(q)&&t.Redirects[q]){var E=m.extend({},s),F=E.duration,G=E.delay||0;return E.backwards===!0&&(o=m.extend(!0,[],o).reverse()),m.each(o,function(a,b){parseFloat(E.stagger)?E.delay=G+parseFloat(E.stagger)*a:p.isFunction(E.stagger)&&(E.delay=G+E.stagger.call(b,a,x)),E.drag&&(E.duration=parseFloat(F)||(/^(callout|transition)/.test(q)?1e3:r),E.duration=Math.max(E.duration*(E.backwards?1-a/x:(a+1)/x),.75*E.duration,200)),t.Redirects[q].call(b,b,E||{},a,x,o,B.promise?B:d)}),a()}var H="Velocity: First argument ("+q+") was not a property map, a known action, or a registered redirect. Aborting.";return B.promise?B.rejecter(new Error(H)):console.log(H),a()}C="start"}var I={lastParent:null,lastPosition:null,lastFontSize:null,lastPercentToPxWidth:null,lastPercentToPxHeight:null,lastEmToPx:null,remToPx:null,vwToPx:null,vhToPx:null},J=[];m.each(o,function(a,b){p.isNode(b)&&e.call(b)});var K,E=m.extend({},t.defaults,s);if(E.loop=parseInt(E.loop),K=2*E.loop-1,E.loop)for(var L=0;K>L;L++){var M={delay:E.delay,progress:E.progress};L===K-1&&(M.display=E.display,M.visibility=E.visibility,M.complete=E.complete),w(o,"reverse",M)}return a()}};t=m.extend(w,t),t.animate=w;var x=b.requestAnimationFrame||o;return t.State.isMobile||c.hidden===d||c.addEventListener("visibilitychange",function(){c.hidden?(x=function(a){return setTimeout(function(){a(!0)},16)},k()):x=b.requestAnimationFrame||o}),a.Velocity=t,a!==b&&(a.fn.velocity=w,a.fn.velocity.defaults=t.defaults),m.each(["Down","Up"],function(a,b){t.Redirects["slide"+b]=function(a,c,e,f,g,h){var i=m.extend({},c),j=i.begin,k=i.complete,l={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},n={};i.display===d&&(i.display="Down"===b?"inline"===t.CSS.Values.getDisplayType(a)?"inline-block":"block":"none"),i.begin=function(){j&&j.call(g,g);for(var c in l){n[c]=a.style[c];var d=t.CSS.getPropertyValue(a,c);l[c]="Down"===b?[d,0]:[0,d]}n.overflow=a.style.overflow,a.style.overflow="hidden"},i.complete=function(){for(var b in n)a.style[b]=n[b];k&&k.call(g,g),h&&h.resolver(g)},t(a,l,i)}}),m.each(["In","Out"],function(a,b){t.Redirects["fade"+b]=function(a,c,e,f,g,h){var i=m.extend({},c),j={opacity:"In"===b?1:0},k=i.complete;i.complete=e!==f-1?i.begin=null:function(){k&&k.call(g,g),h&&h.resolver(g)},i.display===d&&(i.display="In"===b?"auto":"none"),t(this,j,i)}}),t}(window.jQuery||window.Zepto||window,window,document)}),!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(k(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e in a)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function h(a,b,c){for(var e=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;return a}function i(a,b){return h(a,b,!0)}function j(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&h(d,c)}function k(a,b){return function(){return a.apply(b,arguments)}}function l(a,b){return typeof a==ka?a.apply(b?b[0]||d:d,b):a}function m(a,b){return a===d?b:a}function n(a,b,c){g(r(b),function(b){a.addEventListener(b,c,!1)})}function o(a,b,c){g(r(b),function(b){a.removeEventListener(b,c,!1)})}function p(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function q(a,b){return a.indexOf(b)>-1}function r(a){return a.trim().split(/\s+/g)}function s(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)return d;d++}return-1}function t(a){return Array.prototype.slice.call(a,0)}function u(a,b,c){for(var d=[],e=[],f=0;f<a.length;){var g=b?a[f][b]:a[f];s(e,g)<0&&d.push(a[f]),e[f]=g,f++}return c&&(d=b?d.sort(function(a,c){return a[b]>c[b]}):d.sort()),d}function v(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g<ia.length;){if(c=ia[g],e=c?c+f:b,e in a)return e;g++}return d}function w(){return oa++}function x(a){var b=a.ownerDocument;return b.defaultView||b.parentWindow}function y(a,b){var c=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){l(a.options.enable,[a])&&c.handler(b)},this.init()}function z(a){var b,c=a.options.inputClass;return new(b=c?c:ra?N:sa?Q:qa?S:M)(a,A)}function A(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&ya&&0===d-e,g=b&(Aa|Ba)&&0===d-e;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,B(a,c),a.emit("hammer.input",c),a.recognize(c),a.session.prevInput=c}function B(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=E(b)),e>1&&!c.firstMultiple?c.firstMultiple=E(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=F(d);b.timeStamp=na(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=J(h,i),b.distance=I(h,i),C(c,b),b.offsetDirection=H(b.deltaX,b.deltaY),b.scale=g?L(g.pointers,d):1,b.rotation=g?K(g.pointers,d):0,D(c,b);var j=a.element;p(b.srcEvent.target,j)&&(j=b.srcEvent.target),b.target=j}function C(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===ya||f.eventType===Aa)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function D(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ba&&(i>xa||h.velocity===d)){var j=h.deltaX-b.deltaX,k=h.deltaY-b.deltaY,l=G(i,j,k);e=l.x,f=l.y,c=ma(l.x)>ma(l.y)?l.x:l.y,g=H(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function E(a){for(var b=[],c=0;c<a.pointers.length;)b[c]={clientX:la(a.pointers[c].clientX),clientY:la(a.pointers[c].clientY)},c++;return{timeStamp:na(),pointers:b,center:F(b),deltaX:a.deltaX,deltaY:a.deltaY}}function F(a){var b=a.length;if(1===b)return{x:la(a[0].clientX),y:la(a[0].clientY)};for(var c=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:la(c/b),y:la(d/b)}}function G(a,b,c){return{x:b/a||0,y:c/a||0}}function H(a,b){return a===b?Ca:ma(a)>=ma(b)?a>0?Da:Ea:b>0?Fa:Ga}function I(a,b,c){c||(c=Ka);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function J(a,b,c){c||(c=Ka);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function K(a,b){return J(b[1],b[0],La)-J(a[1],a[0],La)}function L(a,b){return I(b[0],b[1],La)/I(a[0],a[1],La)}function M(){this.evEl=Na,this.evWin=Oa,this.allow=!0,this.pressed=!1,y.apply(this,arguments)}function N(){this.evEl=Ra,this.evWin=Sa,y.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function O(){this.evTarget=Ua,this.evWin=Va,this.started=!1,y.apply(this,arguments)}function P(a,b){var c=t(a.touches),d=t(a.changedTouches);return b&(Aa|Ba)&&(c=u(c.concat(d),"identifier",!0)),[c,d]}function Q(){this.evTarget=Xa,this.targetIds={},y.apply(this,arguments)}function R(a,b){var c=t(a.touches),d=this.targetIds;if(b&(ya|za)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=t(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return p(a.target,i)}),b===ya)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Aa|Ba)&&delete d[g[e].identifier],e++;return h.length?[u(f.concat(h),"identifier",!0),h]:void 0}function S(){y.apply(this,arguments);var a=k(this.handler,this);this.touch=new Q(this.manager,a),this.mouse=new M(this.manager,a)}function T(a,b){this.manager=a,this.set(b)}function U(a){if(q(a,bb))return bb;var b=q(a,cb),c=q(a,db);return b&&c?cb+" "+db:b||c?b?cb:db:q(a,ab)?ab:_a}function V(a){this.id=w(),this.manager=null,this.options=i(a||{},this.defaults),this.options.enable=m(this.options.enable,!0),this.state=eb,this.simultaneous={},this.requireFail=[]}function W(a){return a&jb?"cancel":a&hb?"end":a&gb?"move":a&fb?"start":""}function X(a){return a==Ga?"down":a==Fa?"up":a==Da?"left":a==Ea?"right":""}function Y(a,b){var c=b.manager;return c?c.get(a):a}function Z(){V.apply(this,arguments)}function $(){Z.apply(this,arguments),this.pX=null,this.pY=null}function _(){Z.apply(this,arguments)}function aa(){V.apply(this,arguments),this._timer=null,this._input=null}function ba(){Z.apply(this,arguments)}function ca(){Z.apply(this,arguments)}function da(){V.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function ea(a,b){return b=b||{},b.recognizers=m(b.recognizers,ea.defaults.preset),new fa(a,b)}function fa(a,b){b=b||{},this.options=i(b,ea.defaults),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.element=a,this.input=z(this),this.touchAction=new T(this,this.options.touchAction),ga(this,!0),g(b.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function ga(a,b){var c=a.element;g(a.options.cssProps,function(a,d){c.style[v(c.style,d)]=b?a:""})}function ha(a,c){var d=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var ia=["","webkit","moz","MS","ms","o"],ja=b.createElement("div"),ka="function",la=Math.round,ma=Math.abs,na=Date.now,oa=1,pa=/mobile|tablet|ip(ad|hone|od)|android/i,qa="ontouchstart"in a,ra=v(a,"PointerEvent")!==d,sa=qa&&pa.test(navigator.userAgent),ta="touch",ua="pen",va="mouse",wa="kinect",xa=25,ya=1,za=2,Aa=4,Ba=8,Ca=1,Da=2,Ea=4,Fa=8,Ga=16,Ha=Da|Ea,Ia=Fa|Ga,Ja=Ha|Ia,Ka=["x","y"],La=["clientX","clientY"];y.prototype={handler:function(){},init:function(){this.evEl&&n(this.element,this.evEl,this.domHandler),this.evTarget&&n(this.target,this.evTarget,this.domHandler),this.evWin&&n(x(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&o(this.element,this.evEl,this.domHandler),this.evTarget&&o(this.target,this.evTarget,this.domHandler),this.evWin&&o(x(this.element),this.evWin,this.domHandler)}};var Ma={mousedown:ya,mousemove:za,mouseup:Aa},Na="mousedown",Oa="mousemove mouseup";j(M,y,{handler:function(a){var b=Ma[a.type];b&ya&&0===a.button&&(this.pressed=!0),b&za&&1!==a.which&&(b=Aa),this.pressed&&this.allow&&(b&Aa&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:va,srcEvent:a}))}});var Pa={pointerdown:ya,pointermove:za,pointerup:Aa,pointercancel:Ba,pointerout:Ba},Qa={2:ta,3:ua,4:va,5:wa},Ra="pointerdown",Sa="pointermove pointerup pointercancel";a.MSPointerEvent&&(Ra="MSPointerDown",Sa="MSPointerMove MSPointerUp MSPointerCancel"),j(N,y,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace("ms",""),e=Pa[d],f=Qa[a.pointerType]||a.pointerType,g=f==ta,h=s(b,a.pointerId,"pointerId");e&ya&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Aa|Ba)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Ta={touchstart:ya,touchmove:za,touchend:Aa,touchcancel:Ba},Ua="touchstart",Va="touchstart touchmove touchend touchcancel";j(O,y,{handler:function(a){var b=Ta[a.type];if(b===ya&&(this.started=!0),this.started){var c=P.call(this,a,b);b&(Aa|Ba)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:ta,srcEvent:a})}}});var Wa={touchstart:ya,touchmove:za,touchend:Aa,touchcancel:Ba},Xa="touchstart touchmove touchend touchcancel";j(Q,y,{handler:function(a){var b=Wa[a.type],c=R.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:ta,srcEvent:a})}}),j(S,y,{handler:function(a,b,c){var d=c.pointerType==ta,e=c.pointerType==va;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Aa|Ba)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Ya=v(ja.style,"touchAction"),Za=Ya!==d,$a="compute",_a="auto",ab="manipulation",bb="none",cb="pan-x",db="pan-y";T.prototype={set:function(a){a==$a&&(a=this.compute()),Za&&(this.manager.element.style[Ya]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){l(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),U(a.join(" "))},preventDefaults:function(a){if(!Za){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=q(d,bb),f=q(d,db),g=q(d,cb);return e||f&&c&Ha||g&&c&Ia?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var eb=1,fb=2,gb=4,hb=8,ib=hb,jb=16,kb=32;V.prototype={defaults:{},set:function(a){return h(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=Y(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=Y(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=Y(a,this),-1===s(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=Y(a,this);var b=s(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(c.options.event+(b?W(d):""),a)}var c=this,d=this.state;hb>d&&b(!0),b(),d>=hb&&b(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=kb)},canEmit:function(){for(var a=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(kb|eb)))return!1;a++}return!0},recognize:function(a){var b=h({},a);return l(this.options.enable,[this,b])?(this.state&(ib|jb|kb)&&(this.state=eb),this.state=this.process(b),void(this.state&(fb|gb|hb|jb)&&this.tryEmit(b))):(this.reset(),void(this.state=kb))},process:function(){},getTouchAction:function(){},reset:function(){}},j(Z,V,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(fb|gb),e=this.attrTest(a);return d&&(c&Ba||!e)?b|jb:d||e?c&Aa?b|hb:b&fb?b|gb:fb:kb}}),j($,Z,{defaults:{event:"pan",threshold:10,pointers:1,direction:Ja},getTouchAction:function(){var a=this.options.direction,b=[];return a&Ha&&b.push(db),a&Ia&&b.push(cb),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&Ha?(e=0===f?Ca:0>f?Da:Ea,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ca:0>g?Fa:Ga,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return Z.prototype.attrTest.call(this,a)&&(this.state&fb||!(this.state&fb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),j(_,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[bb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&fb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),j(aa,V,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[_a]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Aa|Ba)&&!f)this.reset();else if(a.eventType&ya)this.reset(),this._timer=e(function(){this.state=ib,this.tryEmit()},b.time,this);else if(a.eventType&Aa)return ib;return kb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===ib&&(a&&a.eventType&Aa?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=na(),this.manager.emit(this.options.event,this._input)))}}),j(ba,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[bb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&fb)}}),j(ca,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Ha|Ia,pointers:1},getTouchAction:function(){return $.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Ha|Ia)?b=a.velocity:c&Ha?b=a.velocityX:c&Ia&&(b=a.velocityY),this._super.attrTest.call(this,a)&&c&a.direction&&a.distance>this.options.threshold&&ma(b)>this.options.velocity&&a.eventType&Aa},emit:function(a){var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),j(da,V,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ab]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime<b.time;if(this.reset(),a.eventType&ya&&0===this.count)return this.failTimeout();if(d&&f&&c){if(a.eventType!=Aa)return this.failTimeout();var g=this.pTime?a.timeStamp-this.pTime<b.interval:!0,h=!this.pCenter||I(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,h&&g?this.count+=1:this.count=1,this._input=a;var i=this.count%b.taps;if(0===i)return this.hasRequireFailures()?(this._timer=e(function(){this.state=ib,this.tryEmit()},b.interval,this),fb):ib}return kb},failTimeout:function(){return this._timer=e(function(){this.state=kb},this.options.interval,this),kb},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==ib&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),ea.VERSION="2.0.4",ea.defaults={domEvents:!1,touchAction:$a,enable:!0,inputTarget:null,inputClass:null,preset:[[ba,{enable:!1}],[_,{enable:!1},["rotate"]],[ca,{direction:Ha}],[$,{direction:Ha},["swipe"]],[da],[da,{event:"doubletap",taps:2},["tap"]],[aa]],cssProps:{userSelect:"default",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};var lb=1,mb=2;fa.prototype={set:function(a){return h(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?mb:lb},recognize:function(a){var b=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);var c,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&ib)&&(e=b.curRecognizer=null);for(var f=0;f<d.length;)c=d[f],b.stopped===mb||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(fb|gb|hb)&&(e=b.curRecognizer=c),f++}},get:function(a){if(a instanceof V)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(f(a,"add",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(f(a,"remove",this))return this;var b=this.recognizers;return a=this.get(a),b.splice(s(b,a),1),this.touchAction.update(),this},on:function(a,b){var c=this.handlers;return g(r(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this},off:function(a,b){var c=this.handlers;return g(r(a),function(a){b?c[a].splice(s(c[a],b),1):delete c[a]}),this},emit:function(a,b){this.options.domEvents&&ha(a,b);var c=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&ga(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},h(ea,{INPUT_START:ya,INPUT_MOVE:za,INPUT_END:Aa,INPUT_CANCEL:Ba,STATE_POSSIBLE:eb,STATE_BEGAN:fb,STATE_CHANGED:gb,STATE_ENDED:hb,STATE_RECOGNIZED:ib,STATE_CANCELLED:jb,STATE_FAILED:kb,DIRECTION_NONE:Ca,DIRECTION_LEFT:Da,DIRECTION_RIGHT:Ea,DIRECTION_UP:Fa,DIRECTION_DOWN:Ga,DIRECTION_HORIZONTAL:Ha,DIRECTION_VERTICAL:Ia,DIRECTION_ALL:Ja,Manager:fa,Input:y,TouchAction:T,TouchInput:Q,MouseInput:M,PointerEventInput:N,TouchMouseInput:S,SingleTouchInput:O,Recognizer:V,AttrRecognizer:Z,Tap:da,Pan:$,Swipe:ca,Pinch:_,Rotate:ba,Press:aa,on:n,off:o,each:g,merge:i,extend:h,inherit:j,bindFn:k,prefixed:v}),typeof define==ka&&define.amd?define(function(){return ea}):"undefined"!=typeof module&&module.exports?module.exports=ea:a[c]=ea}(window,document,"Hammer"),function(a){"function"==typeof define&&define.amd?define(["jquery","hammerjs"],a):"object"==typeof exports?a(require("jquery"),require("hammerjs")):a(jQuery,Hammer)}(function(a,b){function c(c,d){var e=a(c);e.data("hammer")||e.data("hammer",new b(e[0],d))}a.fn.hammer=function(a){return this.each(function(){c(this,a)})},b.Manager.prototype.emit=function(b){return function(c,d){b.call(this,c,d),a(this.element).trigger({type:c,gesture:d})}}(b.Manager.prototype.emit)}),window.Materialize={},Materialize.guid=function(){function a(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return function(){return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()}}(),Materialize.elementOrParentIsFixed=function(a){var b=$(a),c=b.add(b.parents()),d=!1;return c.each(function(){return"fixed"===$(this).css("position")?(d=!0,!1):void 0}),d};var Vel;Vel=$?$.Velocity:Velocity,function(a){a.fn.collapsible=function(b){var c={accordion:void 0};return b=a.extend(c,b),this.each(function(){function c(b){h=g.find("> li > .collapsible-header"),b.hasClass("active")?b.parent().addClass("active"):b.parent().removeClass("active"),b.parent().hasClass("active")?b.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}):b.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}),h.not(b).removeClass("active").parent().removeClass("active"),h.not(b).parent().children(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}})}function d(b){b.hasClass("active")?b.parent().addClass("active"):b.parent().removeClass("active"),b.parent().hasClass("active")?b.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}):b.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}})}function e(a){var b=f(a);return b.length>0}function f(a){return a.closest("li > .collapsible-header")}var g=a(this),h=a(this).find("> li > .collapsible-header"),i=g.data("collapsible");g.off("click.collapse",".collapsible-header"),h.off("click.collapse"),b.accordion||"accordion"===i||void 0===i?(h=g.find("> li > .collapsible-header"),h.on("click.collapse",function(b){var d=a(b.target);e(d)&&(d=f(d)),d.toggleClass("active"),c(d)}),c(h.filter(".active").first())):h.each(function(){a(this).on("click.collapse",function(b){var c=a(b.target);e(c)&&(c=f(c)),c.toggleClass("active"),d(c)}),a(this).hasClass("active")&&d(a(this))})})},a(document).ready(function(){a(".collapsible").collapsible()})}(jQuery),function(a){a.fn.scrollTo=function(b){return a(this).scrollTop(a(this).scrollTop()-a(this).offset().top+a(b).offset().top),this},a.fn.dropdown=function(b){var c={inDuration:300,outDuration:225,constrain_width:!0,hover:!1,gutter:0,belowOrigin:!1,alignment:"left"};this.each(function(){function d(){void 0!==g.data("induration")&&(h.inDuration=g.data("inDuration")),void 0!==g.data("outduration")&&(h.outDuration=g.data("outDuration")),void 0!==g.data("constrainwidth")&&(h.constrain_width=g.data("constrainwidth")),void 0!==g.data("hover")&&(h.hover=g.data("hover")),void 0!==g.data("gutter")&&(h.gutter=g.data("gutter")),void 0!==g.data("beloworigin")&&(h.belowOrigin=g.data("beloworigin")),void 0!==g.data("alignment")&&(h.alignment=g.data("alignment"))}function e(){d(),i.addClass("active"),h.constrain_width===!0?i.css("width",g.outerWidth()):i.css("white-space","nowrap");var b=0;h.belowOrigin===!0&&(b=g.height());var c,e,f,j=g.offset().left;if(j+i.innerWidth()>a(window).width()?h.alignment="right":j-i.innerWidth()+g.innerWidth()<0&&(h.alignment="left"),"left"===h.alignment)e=0,f=h.gutter,c=g.position().left+e+f,i.css({left:c});else if("right"===h.alignment){a(window).width()-j-g.innerWidth();e=0,f=h.gutter,c=a(window).width()-g.position().left-g.innerWidth()+f,i.css({right:c})}i.css({position:"absolute",top:g.position().top+b}),i.stop(!0,!0).css("opacity",0).slideDown({queue:!1,duration:h.inDuration,easing:"easeOutCubic",complete:function(){a(this).css("height","")}}).animate({opacity:1},{queue:!1,duration:h.inDuration,easing:"easeOutSine"})}function f(){i.fadeOut(h.outDuration),i.removeClass("active")}var g=a(this),h=a.extend({},c,b),i=a("#"+g.attr("data-activates"));if(d(),g.after(i),h.hover){var j=!1;g.unbind("click."+g.attr("id")),g.on("mouseenter",function(a){j===!1&&(e(),j=!0)}),g.on("mouseleave",function(b){var c=b.toElement||b.relatedTarget;a(c).closest(".dropdown-content").is(i)||(i.stop(!0,!0),f(),j=!1)}),i.on("mouseleave",function(b){var c=b.toElement||b.relatedTarget;a(c).closest(".dropdown-button").is(g)||(i.stop(!0,!0),f(),j=!1)})}else g.unbind("click."+g.attr("id")),g.bind("click."+g.attr("id"),function(b){g[0]==b.currentTarget&&0===a(b.target).closest(".dropdown-content").length?(b.preventDefault(),e()):g.hasClass("active")&&(f(),a(document).unbind("click."+i.attr("id"))),i.hasClass("active")&&a(document).bind("click."+i.attr("id"),function(b){!i.is(b.target)&&!g.is(b.target)&&!g.find(b.target).length>0&&(f(),a(document).unbind("click."+i.attr("id")))})});g.on("open",e),g.on("close",f)})},a(document).ready(function(){a(".dropdown-button").dropdown()})}(jQuery),function(a){var b=0,c=0,d=function(){return c++,"materialize-lean-overlay-"+c};a.fn.extend({openModal:function(c){a("body").css("overflow","hidden");var e={opacity:.5,in_duration:350,out_duration:250,ready:void 0,complete:void 0,dismissible:!0,starting_top:"4%"},f=d(),g=a(this),h=a('<div class="lean-overlay"></div>'),i=++b;h.attr("id",f).css("z-index",1e3+2*i),g.data("overlay-id",f).css("z-index",1e3+2*i+1),a("body").append(h),c=a.extend(e,c),c.dismissible&&(h.click(function(){g.closeModal(c)}),a(document).on("keyup.leanModal"+f,function(a){27===a.keyCode&&g.closeModal(c)})),g.find(".modal-close").on("click.close",function(a){g.closeModal(c)}),h.css({display:"block",opacity:0}),g.css({display:"block",opacity:0}),h.velocity({opacity:c.opacity},{duration:c.in_duration,queue:!1,ease:"easeOutCubic"}),g.data("associated-overlay",h[0]),g.hasClass("bottom-sheet")?g.velocity({bottom:"0",opacity:1},{duration:c.in_duration,queue:!1,ease:"easeOutCubic",complete:function(){"function"==typeof c.ready&&c.ready()}}):(a.Velocity.hook(g,"scaleX",.7),g.css({top:c.starting_top}),g.velocity({top:"10%",opacity:1,scaleX:"1"},{duration:c.in_duration,queue:!1,ease:"easeOutCubic",complete:function(){"function"==typeof c.ready&&c.ready()}}))}}),a.fn.extend({closeModal:function(c){var d={out_duration:250,complete:void 0},e=a(this),f=e.data("overlay-id"),g=a("#"+f);c=a.extend(d,c),a("body").css("overflow",""),e.find(".modal-close").off("click.close"),a(document).off("keyup.leanModal"+f),g.velocity({opacity:0},{duration:c.out_duration,queue:!1,ease:"easeOutQuart"}),e.hasClass("bottom-sheet")?e.velocity({bottom:"-100%",opacity:0},{duration:c.out_duration,queue:!1,ease:"easeOutCubic",complete:function(){g.css({display:"none"}),"function"==typeof c.complete&&c.complete(),g.remove(),b--}}):e.velocity({top:c.starting_top,opacity:0,scaleX:.7},{duration:c.out_duration,complete:function(){a(this).css("display","none"),"function"==typeof c.complete&&c.complete(),g.remove(),b--}})}}),a.fn.extend({leanModal:function(b){return this.each(function(){var c={starting_top:"4%"},d=a.extend(c,b);a(this).click(function(b){d.starting_top=(a(this).offset().top-a(window).scrollTop())/1.15;var c=a(this).attr("href")||"#"+a(this).data("target");a(c).openModal(d),b.preventDefault()})})}})}(jQuery),function(a){a.fn.materialbox=function(){return this.each(function(){function b(){
8d=!1;var b=g.parent(".material-placeholder"),e=(window.innerWidth,window.innerHeight,g.data("width")),h=g.data("height");g.velocity("stop",!0),a("#materialbox-overlay").velocity("stop",!0),a(".materialbox-caption").velocity("stop",!0),a("#materialbox-overlay").velocity({opacity:0},{duration:f,queue:!1,easing:"easeOutQuad",complete:function(){c=!1,a(this).remove()}}),g.velocity({width:e,height:h,left:0,top:0},{duration:f,queue:!1,easing:"easeOutQuad"}),a(".materialbox-caption").velocity({opacity:0},{duration:f,queue:!1,easing:"easeOutQuad",complete:function(){b.css({height:"",width:"",position:"",top:"",left:""}),g.css({height:"",top:"",left:"",width:"","max-width":"",position:"","z-index":""}),g.removeClass("active"),d=!0,a(this).remove()}})}if(!a(this).hasClass("initialized")){a(this).addClass("initialized");var c=!1,d=!0,e=275,f=200,g=a(this),h=a("<div></div>").addClass("material-placeholder");g.wrap(h),g.on("click",function(){var f=g.parent(".material-placeholder"),h=window.innerWidth,i=window.innerHeight,j=g.width(),k=g.height();if(d===!1)return b(),!1;if(c&&d===!0)return b(),!1;d=!1,g.addClass("active"),c=!0,f.css({width:f[0].getBoundingClientRect().width,height:f[0].getBoundingClientRect().height,position:"relative",top:0,left:0}),g.css({position:"absolute","z-index":1e3}).data("width",j).data("height",k);var l=a('<div id="materialbox-overlay"></div>').css({opacity:0}).click(function(){d===!0&&b()});if(a("body").append(l),l.velocity({opacity:1},{duration:e,queue:!1,easing:"easeOutQuad"}),""!==g.data("caption")){var m=a('<div class="materialbox-caption"></div>');m.text(g.data("caption")),a("body").append(m),m.css({display:"inline"}),m.velocity({opacity:1},{duration:e,queue:!1,easing:"easeOutQuad"})}var n=0,o=j/h,p=k/i,q=0,r=0;o>p?(n=k/j,q=.9*h,r=.9*h*n):(n=j/k,q=.9*i*n,r=.9*i),g.hasClass("responsive-img")?g.velocity({"max-width":q,width:j},{duration:0,queue:!1,complete:function(){g.css({left:0,top:0}).velocity({height:r,width:q,left:a(document).scrollLeft()+h/2-g.parent(".material-placeholder").offset().left-q/2,top:a(document).scrollTop()+i/2-g.parent(".material-placeholder").offset().top-r/2},{duration:e,queue:!1,easing:"easeOutQuad",complete:function(){d=!0}})}}):g.css("left",0).css("top",0).velocity({height:r,width:q,left:a(document).scrollLeft()+h/2-g.parent(".material-placeholder").offset().left-q/2,top:a(document).scrollTop()+i/2-g.parent(".material-placeholder").offset().top-r/2},{duration:e,queue:!1,easing:"easeOutQuad",complete:function(){d=!0}})}),a(window).scroll(function(){c&&b()}),a(document).keyup(function(a){27===a.keyCode&&d===!0&&c&&b()})}})},a(document).ready(function(){a(".materialboxed").materialbox()})}(jQuery),function(a){a.fn.parallax=function(){var b=a(window).width();return this.each(function(c){function d(c){var d;d=601>b?e.height()>0?e.height():e.children("img").height():e.height()>0?e.height():500;var f=e.children("img").first(),g=f.height(),h=g-d,i=e.offset().top+d,j=e.offset().top,k=a(window).scrollTop(),l=window.innerHeight,m=k+l,n=(m-j)/(d+l),o=Math.round(h*n);c&&f.css("display","block"),i>k&&k+l>j&&f.css("transform","translate3D(-50%,"+o+"px, 0)")}var e=a(this);e.addClass("parallax"),e.children("img").one("load",function(){d(!0)}).each(function(){this.complete&&a(this).load()}),a(window).scroll(function(){b=a(window).width(),d(!1)}),a(window).resize(function(){b=a(window).width(),d(!1)})})}}(jQuery),function(a){var b={init:function(){return this.each(function(){var b=a(this);a(window).width();b.width("100%");var c,d,e=b.find("li.tab a"),f=b.width(),g=b.find("li").first().outerWidth(),h=0;c=a(e.filter('[href="'+location.hash+'"]')),0===c.length&&(c=a(this).find("li.tab a.active").first()),0===c.length&&(c=a(this).find("li.tab a").first()),c.addClass("active"),h=e.index(c),0>h&&(h=0),d=a(c[0].hash),b.append('<div class="indicator"></div>');var i=b.find(".indicator");b.is(":visible")&&(i.css({right:f-(h+1)*g}),i.css({left:h*g})),a(window).resize(function(){f=b.width(),g=b.find("li").first().outerWidth(),0>h&&(h=0),0!==g&&0!==f&&(i.css({right:f-(h+1)*g}),i.css({left:h*g}))}),e.not(c).each(function(){a(this.hash).hide()}),b.on("click","a",function(j){if(a(this).parent().hasClass("disabled"))return void j.preventDefault();f=b.width(),g=b.find("li").first().outerWidth(),c.removeClass("active"),d.hide(),c=a(this),d=a(this.hash),e=b.find("li.tab a"),c.addClass("active");var k=h;h=e.index(a(this)),0>h&&(h=0),d.show(),h-k>=0?(i.velocity({right:f-(h+1)*g},{duration:300,queue:!1,easing:"easeOutQuad"}),i.velocity({left:h*g},{duration:300,queue:!1,easing:"easeOutQuad",delay:90})):(i.velocity({left:h*g},{duration:300,queue:!1,easing:"easeOutQuad"}),i.velocity({right:f-(h+1)*g},{duration:300,queue:!1,easing:"easeOutQuad",delay:90})),j.preventDefault()})})},select_tab:function(a){this.find('a[href="#'+a+'"]').trigger("click")}};a.fn.tabs=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.tooltip"):b.init.apply(this,arguments)},a(document).ready(function(){a("ul.tabs").tabs()})}(jQuery),function(a){a.fn.tooltip=function(b){var c=null,d=!1,e=null,f=5,g={delay:350};return"remove"===b?(this.each(function(){a("#"+a(this).attr("data-tooltip-id")).remove()}),!1):(b=a.extend(g,b),this.each(function(){var g=Materialize.guid(),h=a(this);h.attr("data-tooltip-id",g);var i=a("<span></span>").text(h.attr("data-tooltip")),j=a("<div></div>");j.addClass("material-tooltip").append(i).appendTo(a("body")).attr("id",g);var k=a("<div></div>").addClass("backdrop");k.appendTo(j),k.css({top:0,left:0}),h.off("mouseenter.tooltip mouseleave.tooltip"),h.on({"mouseenter.tooltip":function(a){var g=h.data("delay");g=void 0===g||""===g?b.delay:g,c=0,e=setInterval(function(){if(c+=10,c>=g&&d===!1){d=!0,j.css({display:"block",left:"0px",top:"0px"}),j.children("span").text(h.attr("data-tooltip"));var a=h.outerWidth(),b=h.outerHeight(),e=h.attr("data-position"),i=j.outerHeight(),l=j.outerWidth(),m="0px",n="0px",o=8;"top"===e?(j.css({top:h.offset().top-i-f,left:h.offset().left+a/2-l/2}),m="-10px",k.css({borderRadius:"14px 14px 0 0",transformOrigin:"50% 90%",marginTop:i,marginLeft:l/2-k.width()/2})):"left"===e?(j.css({top:h.offset().top+b/2-i/2,left:h.offset().left-l-f}),n="-10px",k.css({width:"14px",height:"14px",borderRadius:"14px 0 0 14px",transformOrigin:"95% 50%",marginTop:i/2,marginLeft:l})):"right"===e?(j.css({top:h.offset().top+b/2-i/2,left:h.offset().left+a+f}),n="+10px",k.css({width:"14px",height:"14px",borderRadius:"0 14px 14px 0",transformOrigin:"5% 50%",marginTop:i/2,marginLeft:"0px"})):(j.css({top:h.offset().top+h.outerHeight()+f,left:h.offset().left+a/2-l/2}),m="+10px",k.css({marginLeft:l/2-k.width()/2})),o=l/8,8>o&&(o=8),("right"===e||"left"===e)&&(o=l/10,6>o&&(o=6)),j.velocity({marginTop:m,marginLeft:n},{duration:350,queue:!1}).velocity({opacity:1},{duration:300,delay:50,queue:!1}),k.css({display:"block"}).velocity({opacity:1},{duration:55,delay:0,queue:!1}).velocity({scale:o},{duration:300,delay:0,queue:!1,easing:"easeInOutQuad"})}},10)},"mouseleave.tooltip":function(){clearInterval(e),c=0,j.velocity({opacity:0,marginTop:0,marginLeft:0},{duration:225,queue:!1,delay:225}),k.velocity({opacity:0,scale:1},{duration:225,delay:275,queue:!1,complete:function(){k.css("display","none"),j.css("display","none"),d=!1}})}})}))},a(document).ready(function(){a(".tooltipped").tooltip()})}(jQuery),function(a){"use strict";function b(a){return null!==a&&a===a.window}function c(a){return b(a)?a:9===a.nodeType&&a.defaultView}function d(a){var b,d,e={top:0,left:0},f=a&&a.ownerDocument;return b=f.documentElement,"undefined"!=typeof a.getBoundingClientRect&&(e=a.getBoundingClientRect()),d=c(f),{top:e.top+d.pageYOffset-b.clientTop,left:e.left+d.pageXOffset-b.clientLeft}}function e(a){var b="";for(var c in a)a.hasOwnProperty(c)&&(b+=c+":"+a[c]+";");return b}function f(a){if(k.allowEvent(a)===!1)return null;for(var b=null,c=a.target||a.srcElement;null!==c.parentElement;){if(!(c instanceof SVGElement||-1===c.className.indexOf("waves-effect"))){b=c;break}if(c.classList.contains("waves-effect")){b=c;break}c=c.parentElement}return b}function g(b){var c=f(b);null!==c&&(j.show(b,c),"ontouchstart"in a&&(c.addEventListener("touchend",j.hide,!1),c.addEventListener("touchcancel",j.hide,!1)),c.addEventListener("mouseup",j.hide,!1),c.addEventListener("mouseleave",j.hide,!1))}var h=h||{},i=document.querySelectorAll.bind(document),j={duration:750,show:function(a,b){if(2===a.button)return!1;var c=b||this,f=document.createElement("div");f.className="waves-ripple",c.appendChild(f);var g=d(c),h=a.pageY-g.top,i=a.pageX-g.left,k="scale("+c.clientWidth/100*10+")";"touches"in a&&(h=a.touches[0].pageY-g.top,i=a.touches[0].pageX-g.left),f.setAttribute("data-hold",Date.now()),f.setAttribute("data-scale",k),f.setAttribute("data-x",i),f.setAttribute("data-y",h);var l={top:h+"px",left:i+"px"};f.className=f.className+" waves-notransition",f.setAttribute("style",e(l)),f.className=f.className.replace("waves-notransition",""),l["-webkit-transform"]=k,l["-moz-transform"]=k,l["-ms-transform"]=k,l["-o-transform"]=k,l.transform=k,l.opacity="1",l["-webkit-transition-duration"]=j.duration+"ms",l["-moz-transition-duration"]=j.duration+"ms",l["-o-transition-duration"]=j.duration+"ms",l["transition-duration"]=j.duration+"ms",l["-webkit-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["-moz-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["-o-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f.setAttribute("style",e(l))},hide:function(a){k.touchup(a);var b=this,c=(1.4*b.clientWidth,null),d=b.getElementsByClassName("waves-ripple");if(!(d.length>0))return!1;c=d[d.length-1];var f=c.getAttribute("data-x"),g=c.getAttribute("data-y"),h=c.getAttribute("data-scale"),i=Date.now()-Number(c.getAttribute("data-hold")),l=350-i;0>l&&(l=0),setTimeout(function(){var a={top:g+"px",left:f+"px",opacity:"0","-webkit-transition-duration":j.duration+"ms","-moz-transition-duration":j.duration+"ms","-o-transition-duration":j.duration+"ms","transition-duration":j.duration+"ms","-webkit-transform":h,"-moz-transform":h,"-ms-transform":h,"-o-transform":h,transform:h};c.setAttribute("style",e(a)),setTimeout(function(){try{b.removeChild(c)}catch(a){return!1}},j.duration)},l)},wrapInput:function(a){for(var b=0;b<a.length;b++){var c=a[b];if("input"===c.tagName.toLowerCase()){var d=c.parentNode;if("i"===d.tagName.toLowerCase()&&-1!==d.className.indexOf("waves-effect"))continue;var e=document.createElement("i");e.className=c.className+" waves-input-wrapper";var f=c.getAttribute("style");f||(f=""),e.setAttribute("style",f),c.className="waves-button-input",c.removeAttribute("style"),d.replaceChild(e,c),e.appendChild(c)}}}},k={touches:0,allowEvent:function(a){var b=!0;return"touchstart"===a.type?k.touches+=1:"touchend"===a.type||"touchcancel"===a.type?setTimeout(function(){k.touches>0&&(k.touches-=1)},500):"mousedown"===a.type&&k.touches>0&&(b=!1),b},touchup:function(a){k.allowEvent(a)}};h.displayEffect=function(b){b=b||{},"duration"in b&&(j.duration=b.duration),j.wrapInput(i(".waves-effect")),"ontouchstart"in a&&document.body.addEventListener("touchstart",g,!1),document.body.addEventListener("mousedown",g,!1)},h.attach=function(b){"input"===b.tagName.toLowerCase()&&(j.wrapInput([b]),b=b.parentElement),"ontouchstart"in a&&b.addEventListener("touchstart",g,!1),b.addEventListener("mousedown",g,!1)},a.Waves=h,document.addEventListener("DOMContentLoaded",function(){h.displayEffect()},!1)}(window),Materialize.toast=function(a,b,c,d){function e(a){var b=document.createElement("div");if(b.classList.add("toast"),c)for(var e=c.split(" "),f=0,g=e.length;g>f;f++)b.classList.add(e[f]);("object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&null!==a&&1===a.nodeType&&"string"==typeof a.nodeName)?b.appendChild(a):a instanceof jQuery?b.appendChild(a[0]):b.innerHTML=a;var h=new Hammer(b,{prevent_default:!1});return h.on("pan",function(a){var c=a.deltaX,d=80;b.classList.contains("panning")||b.classList.add("panning");var e=1-Math.abs(c/d);0>e&&(e=0),Vel(b,{left:c,opacity:e},{duration:50,queue:!1,easing:"easeOutQuad"})}),h.on("panend",function(a){var c=a.deltaX,e=80;Math.abs(c)>e?Vel(b,{marginTop:"-40px"},{duration:375,easing:"easeOutExpo",queue:!1,complete:function(){"function"==typeof d&&d(),b.parentNode.removeChild(b)}}):(b.classList.remove("panning"),Vel(b,{left:0,opacity:1},{duration:300,easing:"easeOutExpo",queue:!1}))}),b}c=c||"";var f=document.getElementById("toast-container");null===f&&(f=document.createElement("div"),f.id="toast-container",document.body.appendChild(f));var g=e(a);a&&f.appendChild(g),g.style.top="35px",g.style.opacity=0,Vel(g,{top:"0px",opacity:1},{duration:300,easing:"easeOutCubic",queue:!1});var h=b,i=setInterval(function(){null===g.parentNode&&window.clearInterval(i),g.classList.contains("panning")||(h-=20),0>=h&&(Vel(g,{opacity:0,marginTop:"-40px"},{duration:375,easing:"easeOutExpo",queue:!1,complete:function(){"function"==typeof d&&d(),this[0].parentNode.removeChild(this[0])}}),window.clearInterval(i))},20)},function(a){var b={init:function(b){var c={menuWidth:240,edge:"left",closeOnClick:!1};b=a.extend(c,b),a(this).each(function(){function c(c){g=!1,h=!1,a("body").css("overflow",""),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),"left"===b.edge?(f.css({width:"",right:"",left:"0"}),e.velocity({left:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){c===!0&&(e.removeAttr("style"),e.css("width",b.menuWidth))}})):(f.css({width:"",right:"0",left:""}),e.velocity({right:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){c===!0&&(e.removeAttr("style"),e.css("width",b.menuWidth))}}))}var d=a(this),e=a("#"+d.attr("data-activates"));240!=b.menuWidth&&e.css("width",b.menuWidth);var f=a('<div class="drag-target"></div>');a("body").append(f),"left"==b.edge?(e.css("left",-1*(b.menuWidth+10)),f.css({left:0})):(e.addClass("right-aligned").css("right",-1*(b.menuWidth+10)).css("left",""),f.css({right:0})),e.hasClass("fixed")&&window.innerWidth>992&&e.css("left",0),e.hasClass("fixed")&&a(window).resize(function(){window.innerWidth>992?0!==a("#sidenav-overlay").css("opacity")&&h?c(!0):(e.removeAttr("style"),e.css("width",b.menuWidth)):h===!1&&("left"===b.edge?e.css("left",-1*(b.menuWidth+10)):e.css("right",-1*(b.menuWidth+10)))}),b.closeOnClick===!0&&e.on("click.itemclick","a:not(.collapsible-header)",function(){c()});var g=!1,h=!1;f.on("click",function(){c()}),f.hammer({prevent_default:!1}).bind("pan",function(d){if("touch"==d.gesture.pointerType){var f=(d.gesture.direction,d.gesture.center.x);d.gesture.center.y,d.gesture.velocityX;if(a("body").css("overflow","hidden"),0===a("#sidenav-overlay").length){var g=a('<div id="sidenav-overlay"></div>');g.css("opacity",0).click(function(){c()}),a("body").append(g)}if("left"===b.edge&&(f>b.menuWidth?f=b.menuWidth:0>f&&(f=0)),"left"===b.edge)f<b.menuWidth/2?h=!1:f>=b.menuWidth/2&&(h=!0),e.css("left",f-b.menuWidth);else{f<window.innerWidth-b.menuWidth/2?h=!0:f>=window.innerWidth-b.menuWidth/2&&(h=!1);var i=-1*(f-b.menuWidth/2);i>0&&(i=0),e.css("right",i)}var j;"left"===b.edge?(j=f/b.menuWidth,a("#sidenav-overlay").velocity({opacity:j},{duration:50,queue:!1,easing:"easeOutQuad"})):(j=Math.abs((f-window.innerWidth)/b.menuWidth),a("#sidenav-overlay").velocity({opacity:j},{duration:50,queue:!1,easing:"easeOutQuad"}))}}).bind("panend",function(c){if("touch"==c.gesture.pointerType){var d=c.gesture.velocityX;g=!1,"left"===b.edge?h&&.3>=d||-.5>d?(e.velocity({left:0},{duration:300,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),f.css({width:"50%",right:0,left:""})):(!h||d>.3)&&(a("body").css("overflow",""),e.velocity({left:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),f.css({width:"10px",right:"",left:0})):h&&d>=-.3||d>.5?(e.velocity({right:0},{duration:300,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),f.css({width:"50%",right:"",left:0})):(!h||-.3>d)&&(a("body").css("overflow",""),e.velocity({right:-1*(b.menuWidth+10)},{duration:200,queue:!1,easing:"easeOutQuad"}),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),f.css({width:"10px",right:0,left:""}))}}),d.click(function(){if(h===!0)h=!1,g=!1,c();else{a("body").css("overflow","hidden"),a("body").append(f),"left"===b.edge?(f.css({width:"50%",right:0,left:""}),e.velocity({left:0},{duration:300,queue:!1,easing:"easeOutQuad"})):(f.css({width:"50%",right:"",left:0}),e.velocity({right:0},{duration:300,queue:!1,easing:"easeOutQuad"}),e.css("left",""));var d=a('<div id="sidenav-overlay"></div>');d.css("opacity",0).click(function(){h=!1,g=!1,c(),d.velocity({opacity:0},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}})}),a("body").append(d),d.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){h=!0,g=!1}})}return!1})})},show:function(){this.trigger("click")},hide:function(){a("#sidenav-overlay").trigger("click")}};a.fn.sideNav=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.sideNav"):b.init.apply(this,arguments)}}(jQuery),function(a){function b(b,c,d,e){var f=a();return a.each(g,function(a,g){if(g.height()>0){var h=g.offset().top,i=g.offset().left,j=i+g.width(),k=h+g.height(),l=!(i>c||e>j||h>d||b>k);l&&f.push(g)}}),f}function c(){++j;var c=f.scrollTop(),d=f.scrollLeft(),e=d+f.width(),g=c+f.height(),i=b(c+k.top+200,e+k.right,g+k.bottom,d+k.left);a.each(i,function(a,b){var c=b.data("scrollSpy:ticks");"number"!=typeof c&&b.triggerHandler("scrollSpy:enter"),b.data("scrollSpy:ticks",j)}),a.each(h,function(a,b){var c=b.data("scrollSpy:ticks");"number"==typeof c&&c!==j&&(b.triggerHandler("scrollSpy:exit"),b.data("scrollSpy:ticks",null))}),h=i}function d(){f.trigger("scrollSpy:winSize")}function e(a,b,c){var d,e,f,g=null,h=0;c||(c={});var i=function(){h=c.leading===!1?0:l(),g=null,f=a.apply(d,e),d=e=null};return function(){var j=l();h||c.leading!==!1||(h=j);var k=b-(j-h);return d=this,e=arguments,0>=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}}var f=a(window),g=[],h=[],i=!1,j=0,k={top:0,right:0,bottom:0,left:0},l=Date.now||function(){return(new Date).getTime()};a.scrollSpy=function(b,d){var h=[];b=a(b),b.each(function(b,c){g.push(a(c)),a(c).data("scrollSpy:id",b),a("a[href=#"+a(c).attr("id")+"]").click(function(b){b.preventDefault();var c=a(this.hash).offset().top+1;a("html, body").animate({scrollTop:c-200},{duration:400,queue:!1,easing:"easeOutCubic"})})}),d=d||{throttle:100},k.top=d.offsetTop||0,k.right=d.offsetRight||0,k.bottom=d.offsetBottom||0,k.left=d.offsetLeft||0;var j=e(c,d.throttle||100),l=function(){a(document).ready(j)};return i||(f.on("scroll",l),f.on("resize",l),i=!0),setTimeout(l,0),b.on("scrollSpy:enter",function(){h=a.grep(h,function(a){return 0!=a.height()});var b=a(this);h[0]?(a("a[href=#"+h[0].attr("id")+"]").removeClass("active"),b.data("scrollSpy:id")<h[0].data("scrollSpy:id")?h.unshift(a(this)):h.push(a(this))):h.push(a(this)),a("a[href=#"+h[0].attr("id")+"]").addClass("active")}),b.on("scrollSpy:exit",function(){if(h=a.grep(h,function(a){return 0!=a.height()}),h[0]){a("a[href=#"+h[0].attr("id")+"]").removeClass("active");var b=a(this);h=a.grep(h,function(a){return a.attr("id")!=b.attr("id")}),h[0]&&a("a[href=#"+h[0].attr("id")+"]").addClass("active")}}),b},a.winSizeSpy=function(b){return a.winSizeSpy=function(){return f},b=b||{throttle:100},f.on("resize",e(d,b.throttle||100))},a.fn.scrollSpy=function(b){return a.scrollSpy(a(this),b)}}(jQuery),function(a){a(document).ready(function(){function b(b){var c=b.css("font-family"),e=b.css("font-size");e&&d.css("font-size",e),c&&d.css("font-family",c),"off"===b.attr("wrap")&&d.css("overflow-wrap","normal").css("white-space","pre"),d.text(b.val()+"\n");var f=d.html().replace(/\n/g,"<br>");d.html(f),b.is(":visible")?d.css("width",b.width()):d.css("width",a(window).width()/2),b.css("height",d.height())}Materialize.updateTextFields=function(){var b="input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";a(b).each(function(b,c){a(c).val().length>0||void 0!==a(this).attr("placeholder")||a(c)[0].validity.badInput===!0?a(this).siblings("label").addClass("active"):a(this).siblings("label, i").removeClass("active")})};var c="input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";a("input[autofocus]").siblings("label, i").addClass("active"),a(document).on("change",c,function(){(0!==a(this).val().length||void 0!==a(this).attr("placeholder"))&&a(this).siblings("label").addClass("active"),validate_field(a(this))}),a(document).ready(function(){Materialize.updateTextFields()}),a(document).on("reset",function(b){var d=a(b.target);d.is("form")&&(d.find(c).removeClass("valid").removeClass("invalid"),d.find(c).each(function(){""===a(this).attr("value")&&a(this).siblings("label, i").removeClass("active")}),d.find("select.initialized").each(function(){var a=d.find("option[selected]").text();d.siblings("input.select-dropdown").val(a)}))}),a(document).on("focus",c,function(){a(this).siblings("label, i").addClass("active")}),a(document).on("blur",c,function(){var b=a(this);0===b.val().length&&b[0].validity.badInput!==!0&&void 0===b.attr("placeholder")&&b.siblings("label, i").removeClass("active"),0===b.val().length&&b[0].validity.badInput!==!0&&void 0!==b.attr("placeholder")&&b.siblings("i").removeClass("active"),validate_field(b)}),window.validate_field=function(a){var b=void 0!==a.attr("length"),c=parseInt(a.attr("length")),d=a.val().length;0===a.val().length&&a[0].validity.badInput===!1?a.hasClass("validate")&&(a.removeClass("valid"),a.removeClass("invalid")):a.hasClass("validate")&&(a.is(":valid")&&b&&c>=d||a.is(":valid")&&!b?(a.removeClass("invalid"),a.addClass("valid")):(a.removeClass("valid"),a.addClass("invalid")))};var d=a(".hiddendiv").first();d.length||(d=a('<div class="hiddendiv common"></div>'),a("body").append(d));var e=".materialize-textarea";a(e).each(function(){var c=a(this);c.val().length&&b(c)}),a("body").on("keyup keydown autoresize",e,function(){b(a(this))}),a(document).on("change",'.file-field input[type="file"]',function(){for(var b=a(this).closest(".file-field"),c=b.find("input.file-path"),d=a(this)[0].files,e=[],f=0;f<d.length;f++)e.push(d[f].name);c.val(e.join(", ")),c.trigger("change")});var f,g="input[type=range]",h=!1;a(g).each(function(){var b=a('<span class="thumb"><span class="value"></span></span>');a(this).after(b)});var i=".range-field";a(document).on("change",g,function(b){var c=a(this).siblings(".thumb");c.find(".value").html(a(this).val())}),a(document).on("input mousedown touchstart",g,function(b){var c=a(this).siblings(".thumb");c.length<=0&&(c=a('<span class="thumb"><span class="value"></span></span>'),a(this).append(c)),c.find(".value").html(a(this).val()),h=!0,a(this).addClass("active"),c.hasClass("active")||c.velocity({height:"30px",width:"30px",top:"-20px",marginLeft:"-15px"},{duration:300,easing:"easeOutExpo"}),f=void 0===b.pageX||null===b.pageX?b.originalEvent.touches[0].pageX-a(this).offset().left:b.pageX-a(this).offset().left;var d=a(this).outerWidth();0>f?f=0:f>d&&(f=d),c.addClass("active").css("left",f),c.find(".value").html(a(this).val())}),a(document).on("mouseup touchend",i,function(){h=!1,a(this).removeClass("active")}),a(document).on("mousemove touchmove",i,function(b){var c,d=a(this).children(".thumb");if(h){d.hasClass("active")||d.velocity({height:"30px",width:"30px",top:"-20px",marginLeft:"-15px"},{duration:300,easing:"easeOutExpo"}),c=void 0===b.pageX||null===b.pageX?b.originalEvent.touches[0].pageX-a(this).offset().left:b.pageX-a(this).offset().left;var e=a(this).outerWidth();0>c?c=0:c>e&&(c=e),d.addClass("active").css("left",c),d.find(".value").html(d.siblings(g).val())}}),a(document).on("mouseout touchleave",i,function(){if(!h){var b=a(this).children(".thumb");b.hasClass("active")&&b.velocity({height:"0",width:"0",top:"10px",marginLeft:"-6px"},{duration:100}),b.removeClass("active")}})}),a.fn.material_select=function(b){a(this).each(function(){if($select=a(this),!$select.hasClass("browser-default")){var c=$select.data("select-id");if(c&&($select.parent().find("span.caret").remove(),$select.parent().find("input").remove(),$select.unwrap(),a("ul#select-options-"+c).remove()),"destroy"===b)return void $select.data("select-id",null).removeClass("initialized");var d=Materialize.guid();$select.data("select-id",d);var e=a('<div class="select-wrapper"></div>');e.addClass($select.attr("class"));var f,g=a('<ul id="select-options-'+d+'" class="dropdown-content select-dropdown"></ul>'),h=$select.children("option");f=void 0!==$select.find("option:selected")?$select.find("option:selected"):g.first(),h.each(function(){g.append(a('<li class="'+(a(this).is(":disabled")?"disabled":"")+'"><span>'+a(this).html()+"</span></li>"))}),g.find("li").each(function(c){var d=$select;a(this).click(function(){a(this).hasClass("disabled")||(d.find("option").eq(c).prop("selected",!0),d.trigger("change"),d.siblings("input.select-dropdown").val(a(this).text()),"undefined"!=typeof b&&b())})}),$select.wrap(e);var i=a('<span class="caret">&#9660;</span>');$select.is(":disabled")&&i.addClass("disabled");var j=f.html().replace(/"/g,"&quot;"),k=a('<input type="text" class="select-dropdown" readonly="true" '+($select.is(":disabled")?"disabled":"")+' data-activates="select-options-'+d+'" value="'+j+'"/>');$select.before(k),k.before(i),a("body").append(g),$select.is(":disabled")||k.dropdown({hover:!1}),$select.attr("tabindex")&&a(k[0]).attr("tabindex",$select.attr("tabindex")),$select.addClass("initialized"),k.on("focus",function(){a(this).trigger("open"),f=a(this).val(),selectedOption=g.find("li").filter(function(){return a(this).text().toLowerCase()===f.toLowerCase()})[0],activateOption(g,selectedOption)}),k.on("blur",function(){a(this).trigger("close")}),activateOption=function(b,c){b.find("li.active").removeClass("active"),a(c).addClass("active"),b.scrollTo(c)},filterQuery=[],onKeyDown=function(b){if(9==b.which)return void k.trigger("close");if(40==b.which&&!g.is(":visible"))return void k.trigger("open");if(13!=b.which||g.is(":visible")){b.preventDefault(),letter=String.fromCharCode(b.which).toLowerCase();var c=[9,13,27,38,40];letter&&-1===c.indexOf(b.which)&&(filterQuery.push(letter),string=filterQuery.join(""),newOption=g.find("li").filter(function(){return 0===a(this).text().toLowerCase().indexOf(string)})[0],newOption&&activateOption(g,newOption)),13==b.which&&(activeOption=g.find("li.active:not(.disabled)")[0],activeOption&&(a(activeOption).trigger("click"),k.trigger("close"))),40==b.which&&(newOption=g.find("li.active").next("li:not(.disabled)")[0],newOption&&activateOption(g,newOption)),27==b.which&&k.trigger("close"),38==b.which&&(newOption=g.find("li.active").prev("li:not(.disabled)")[0],newOption&&activateOption(g,newOption)),setTimeout(function(){filterQuery=[]},1e3)}},k.on("keydown",onKeyDown)}})}}(jQuery),function(a){var b={init:function(b){var c={indicators:!0,height:400,transition:500,interval:6e3};return b=a.extend(c,b),this.each(function(){function c(a,b){a.hasClass("center-align")?a.velocity({opacity:0,translateY:-100},{duration:b,queue:!1}):a.hasClass("right-align")?a.velocity({opacity:0,translateX:100},{duration:b,queue:!1}):a.hasClass("left-align")&&a.velocity({opacity:0,translateX:-100},{duration:b,queue:!1})}function d(a){a>=h.length?a=0:0>a&&(a=h.length-1),i=g.find(".active").index(),i!=a&&(e=h.eq(i),$caption=e.find(".caption"),e.removeClass("active"),e.velocity({opacity:0},{duration:b.transition,queue:!1,easing:"easeOutQuad",complete:function(){h.not(".active").velocity({opacity:0,translateX:0,translateY:0},{duration:0,queue:!1})}}),c($caption,b.transition),b.indicators&&j.eq(i).removeClass("active"),h.eq(a).velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),h.eq(a).find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,delay:b.transition,queue:!1,easing:"easeOutQuad"}),h.eq(a).addClass("active"),b.indicators&&j.eq(a).addClass("active"))}var e,f=a(this),g=f.find("ul.slides").first(),h=g.find("li"),i=g.find(".active").index();if(-1!=i&&(e=h.eq(i)),f.hasClass("fullscreen")||(b.indicators?f.height(b.height+40):f.height(b.height),g.height(b.height)),h.find(".caption").each(function(){c(a(this),0)}),h.find("img").each(function(){a(this).css("background-image","url("+a(this).attr("src")+")"),a(this).attr("src","data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==")}),b.indicators){var j=a('<ul class="indicators"></ul>');h.each(function(c){var e=a('<li class="indicator-item"></li>');e.click(function(){var c=g.parent(),e=c.find(a(this)).index();d(e),clearInterval($interval),$interval=setInterval(function(){i=g.find(".active").index(),h.length==i+1?i=0:i+=1,d(i)},b.transition+b.interval)}),j.append(e)}),f.append(j),j=f.find("ul.indicators").find("li.indicator-item")}e?e.show():(h.first().addClass("active").velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),i=0,e=h.eq(i),b.indicators&&j.eq(i).addClass("active")),e.find("img").each(function(){e.find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,queue:!1,easing:"easeOutQuad"})}),$interval=setInterval(function(){i=g.find(".active").index(),d(i+1)},b.transition+b.interval);var k=!1,l=!1,m=!1;f.hammer({prevent_default:!1}).bind("pan",function(a){if("touch"===a.gesture.pointerType){clearInterval($interval);var b=a.gesture.direction,c=a.gesture.deltaX,d=a.gesture.velocityX;$curr_slide=g.find(".active"),$curr_slide.velocity({translateX:c},{duration:50,queue:!1,easing:"easeOutQuad"}),4===b&&(c>f.innerWidth()/2||-.65>d)?m=!0:2===b&&(c<-1*f.innerWidth()/2||d>.65)&&(l=!0);var e;l&&(e=$curr_slide.next(),0===e.length&&(e=h.first()),e.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"})),m&&(e=$curr_slide.prev(),0===e.length&&(e=h.last()),e.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"}))}}).bind("panend",function(a){"touch"===a.gesture.pointerType&&($curr_slide=g.find(".active"),k=!1,curr_index=g.find(".active").index(),m||l?l?(d(curr_index+1),$curr_slide.velocity({translateX:-1*f.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})):m&&(d(curr_index-1),$curr_slide.velocity({translateX:f.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})):$curr_slide.velocity({translateX:0},{duration:300,queue:!1,easing:"easeOutQuad"}),l=!1,m=!1,clearInterval($interval),$interval=setInterval(function(){i=g.find(".active").index(),h.length==i+1?i=0:i+=1,d(i)},b.transition+b.interval))}),f.on("sliderPause",function(){clearInterval($interval)}),f.on("sliderStart",function(){clearInterval($interval),$interval=setInterval(function(){i=g.find(".active").index(),h.length==i+1?i=0:i+=1,d(i)},b.transition+b.interval)})})},pause:function(){a(this).trigger("sliderPause")},start:function(){a(this).trigger("sliderStart")}};a.fn.slider=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.tooltip"):b.init.apply(this,arguments);
9}}(jQuery),function(a){a(document).ready(function(){a(document).on("click.card",".card",function(b){a(this).find("> .card-reveal").length&&(a(b.target).is(a(".card-reveal .card-title"))||a(b.target).is(a(".card-reveal .card-title i"))?a(this).find(".card-reveal").velocity({translateY:0},{duration:225,queue:!1,easing:"easeInOutQuad",complete:function(){a(this).css({display:"none"})}}):(a(b.target).is(a(".card .activator"))||a(b.target).is(a(".card .activator i")))&&a(this).find(".card-reveal").css({display:"block"}).velocity("stop",!1).velocity({translateY:"-100%"},{duration:300,queue:!1,easing:"easeInOutQuad"}))})})}(jQuery),function(a){a(document).ready(function(){a(document).on("click.chip",".chip .material-icons",function(b){a(this).parent().remove()})})}(jQuery),function(a){a(document).ready(function(){a.fn.pushpin=function(b){var c={top:0,bottom:1/0,offset:0};return b=a.extend(c,b),$index=0,this.each(function(){function c(a){a.removeClass("pin-top"),a.removeClass("pinned"),a.removeClass("pin-bottom")}function d(d,e){d.each(function(){b.top<=e&&b.bottom>=e&&!a(this).hasClass("pinned")&&(c(a(this)),a(this).css("top",b.offset),a(this).addClass("pinned")),e<b.top&&!a(this).hasClass("pin-top")&&(c(a(this)),a(this).css("top",0),a(this).addClass("pin-top")),e>b.bottom&&!a(this).hasClass("pin-bottom")&&(c(a(this)),a(this).addClass("pin-bottom"),a(this).css("top",b.bottom-g))})}var e=Materialize.guid(),f=a(this),g=a(this).offset().top;d(f,a(window).scrollTop()),a(window).on("scroll."+e,function(){var c=a(window).scrollTop()+b.offset;d(f,c)})})}})}(jQuery),function(a){a(document).ready(function(){a.fn.reverse=[].reverse,a(document).on("mouseenter.fixedActionBtn",".fixed-action-btn",function(c){var d=a(this);b(d)}),a(document).on("mouseleave.fixedActionBtn",".fixed-action-btn",function(b){var d=a(this);c(d)})}),a.fn.extend({openFAB:function(){var c=a(this);b(c)},closeFAB:function(){c($this)}});var b=function(b){if($this=b,$this.hasClass("active")===!1){$this.addClass("active"),$this.find("ul .btn-floating").velocity({scaleY:".4",scaleX:".4",translateY:"40px"},{duration:0});var c=0;$this.find("ul .btn-floating").reverse().each(function(){a(this).velocity({opacity:"1",scaleX:"1",scaleY:"1",translateY:"0"},{duration:80,delay:c}),c+=40})}},c=function(a){$this=a,$this.removeClass("active");$this.find("ul .btn-floating").velocity("stop",!0),$this.find("ul .btn-floating").velocity({opacity:"0",scaleX:".4",scaleY:".4",translateY:"40px"},{duration:80})}}(jQuery),function(a){Materialize.fadeInImage=function(b){var c=a(b);c.css({opacity:0}),a(c).velocity({opacity:1},{duration:650,queue:!1,easing:"easeOutSine"}),a(c).velocity({opacity:1},{duration:1300,queue:!1,easing:"swing",step:function(b,c){c.start=100;var d=b/100,e=150-(100-b)/1.75;100>e&&(e=100),b>=0&&a(this).css({"-webkit-filter":"grayscale("+d+")brightness("+e+"%)",filter:"grayscale("+d+")brightness("+e+"%)"})}})},Materialize.showStaggeredList=function(b){var c=0;a(b).find("li").velocity({translateX:"-100px"},{duration:0}),a(b).find("li").each(function(){a(this).velocity({opacity:"1",translateX:"0"},{duration:800,delay:c,easing:[60,10]}),c+=120})},a(document).ready(function(){var b=!1,c=!1;a(".dismissable").each(function(){a(this).hammer({prevent_default:!1}).bind("pan",function(d){if("touch"===d.gesture.pointerType){var e=a(this),f=d.gesture.direction,g=d.gesture.deltaX,h=d.gesture.velocityX;e.velocity({translateX:g},{duration:50,queue:!1,easing:"easeOutQuad"}),4===f&&(g>e.innerWidth()/2||-.75>h)&&(b=!0),2===f&&(g<-1*e.innerWidth()/2||h>.75)&&(c=!0)}}).bind("panend",function(d){if(Math.abs(d.gesture.deltaX)<a(this).innerWidth()/2&&(c=!1,b=!1),"touch"===d.gesture.pointerType){var e=a(this);if(b||c){var f;f=b?e.innerWidth():-1*e.innerWidth(),e.velocity({translateX:f},{duration:100,queue:!1,easing:"easeOutQuad",complete:function(){e.css("border","none"),e.velocity({height:0,padding:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){e.remove()}})}})}else e.velocity({translateX:0},{duration:100,queue:!1,easing:"easeOutQuad"});b=!1,c=!1}})})})}(jQuery),function(a){Materialize.scrollFire=function(a){var b=!1;window.addEventListener("scroll",function(){b=!0}),setInterval(function(){if(b){b=!1;for(var c=window.pageYOffset+window.innerHeight,d=0;d<a.length;d++){var e=a[d],f=e.selector,g=e.offset,h=e.callback,i=document.querySelector(f);if(null!==i){var j=i.getBoundingClientRect().top+window.pageYOffset;if(c>j+g&&e.done!==!0){var k=new Function(h);k(),e.done=!0}}}}},100)}}(jQuery),function(a){"function"==typeof define&&define.amd?define("picker",["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):this.Picker=a(jQuery)}(function(a){function b(f,g,i,l){function m(){return b._.node("div",b._.node("div",b._.node("div",b._.node("div",y.component.nodes(t.open),v.box),v.wrap),v.frame),v.holder)}function n(){w.data(g,y).addClass(v.input).attr("tabindex",-1).val(w.data("value")?y.get("select",u.format):f.value),u.editable||w.on("focus."+t.id+" click."+t.id,function(a){a.preventDefault(),y.$root[0].focus()}).on("keydown."+t.id,q),e(f,{haspopup:!0,expanded:!1,readonly:!1,owns:f.id+"_root"})}function o(){y.$root.on({keydown:q,focusin:function(a){y.$root.removeClass(v.focused),a.stopPropagation()},"mousedown click":function(b){var c=b.target;c!=y.$root.children()[0]&&(b.stopPropagation(),"mousedown"!=b.type||a(c).is("input, select, textarea, button, option")||(b.preventDefault(),y.$root[0].focus()))}}).on({focus:function(){w.addClass(v.target)},blur:function(){w.removeClass(v.target)}}).on("focus.toOpen",r).on("click","[data-pick], [data-nav], [data-clear], [data-close]",function(){var b=a(this),c=b.data(),d=b.hasClass(v.navDisabled)||b.hasClass(v.disabled),e=h();e=e&&(e.type||e.href),(d||e&&!a.contains(y.$root[0],e))&&y.$root[0].focus(),!d&&c.nav?y.set("highlight",y.component.item.highlight,{nav:c.nav}):!d&&"pick"in c?y.set("select",c.pick):c.clear?y.clear().close(!0):c.close&&y.close(!0)}),e(y.$root[0],"hidden",!0)}function p(){var b;u.hiddenName===!0?(b=f.name,f.name=""):(b=["string"==typeof u.hiddenPrefix?u.hiddenPrefix:"","string"==typeof u.hiddenSuffix?u.hiddenSuffix:"_submit"],b=b[0]+f.name+b[1]),y._hidden=a('<input type=hidden name="'+b+'"'+(w.data("value")||f.value?' value="'+y.get("select",u.formatSubmit)+'"':"")+">")[0],w.on("change."+t.id,function(){y._hidden.value=f.value?y.get("select",u.formatSubmit):""}),u.container?a(u.container).append(y._hidden):w.after(y._hidden)}function q(a){var b=a.keyCode,c=/^(8|46)$/.test(b);return 27==b?(y.close(),!1):void((32==b||c||!t.open&&y.component.key[b])&&(a.preventDefault(),a.stopPropagation(),c?y.clear().close():y.open()))}function r(a){a.stopPropagation(),"focus"==a.type&&y.$root.addClass(v.focused),y.open()}if(!f)return b;var s=!1,t={id:f.id||"P"+Math.abs(~~(Math.random()*new Date))},u=i?a.extend(!0,{},i.defaults,l):l||{},v=a.extend({},b.klasses(),u.klass),w=a(f),x=function(){return this.start()},y=x.prototype={constructor:x,$node:w,start:function(){return t&&t.start?y:(t.methods={},t.start=!0,t.open=!1,t.type=f.type,f.autofocus=f==h(),f.readOnly=!u.editable,f.id=f.id||t.id,"text"!=f.type&&(f.type="text"),y.component=new i(y,u),y.$root=a(b._.node("div",m(),v.picker,'id="'+f.id+'_root" tabindex="0"')),o(),u.formatSubmit&&p(),n(),u.container?a(u.container).append(y.$root):w.after(y.$root),y.on({start:y.component.onStart,render:y.component.onRender,stop:y.component.onStop,open:y.component.onOpen,close:y.component.onClose,set:y.component.onSet}).on({start:u.onStart,render:u.onRender,stop:u.onStop,open:u.onOpen,close:u.onClose,set:u.onSet}),s=c(y.$root.children()[0]),f.autofocus&&y.open(),y.trigger("start").trigger("render"))},render:function(a){return a?y.$root.html(m()):y.$root.find("."+v.box).html(y.component.nodes(t.open)),y.trigger("render")},stop:function(){return t.start?(y.close(),y._hidden&&y._hidden.parentNode.removeChild(y._hidden),y.$root.remove(),w.removeClass(v.input).removeData(g),setTimeout(function(){w.off("."+t.id)},0),f.type=t.type,f.readOnly=!1,y.trigger("stop"),t.methods={},t.start=!1,y):y},open:function(c){return t.open?y:(w.addClass(v.active),e(f,"expanded",!0),setTimeout(function(){y.$root.addClass(v.opened),e(y.$root[0],"hidden",!1)},0),c!==!1&&(t.open=!0,s&&k.css("overflow","hidden").css("padding-right","+="+d()),y.$root[0].focus(),j.on("click."+t.id+" focusin."+t.id,function(a){var b=a.target;b!=f&&b!=document&&3!=a.which&&y.close(b===y.$root.children()[0])}).on("keydown."+t.id,function(c){var d=c.keyCode,e=y.component.key[d],f=c.target;27==d?y.close(!0):f!=y.$root[0]||!e&&13!=d?a.contains(y.$root[0],f)&&13==d&&(c.preventDefault(),f.click()):(c.preventDefault(),e?b._.trigger(y.component.key.go,y,[b._.trigger(e)]):y.$root.find("."+v.highlighted).hasClass(v.disabled)||y.set("select",y.component.item.highlight).close())})),y.trigger("open"))},close:function(a){return a&&(y.$root.off("focus.toOpen")[0].focus(),setTimeout(function(){y.$root.on("focus.toOpen",r)},0)),w.removeClass(v.active),e(f,"expanded",!1),setTimeout(function(){y.$root.removeClass(v.opened+" "+v.focused),e(y.$root[0],"hidden",!0)},0),t.open?(t.open=!1,s&&k.css("overflow","").css("padding-right","-="+d()),j.off("."+t.id),y.trigger("close")):y},clear:function(a){return y.set("clear",null,a)},set:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(d=g&&a.isPlainObject(c)?c:d||{},b){g||(h[b]=c);for(e in h)f=h[e],e in y.component.item&&(void 0===f&&(f=null),y.component.set(e,f,d)),("select"==e||"clear"==e)&&w.val("clear"==e?"":y.get(e,u.format)).trigger("change");y.render()}return d.muted?y:y.trigger("set",h)},get:function(a,c){if(a=a||"value",null!=t[a])return t[a];if("valueSubmit"==a){if(y._hidden)return y._hidden.value;a="value"}if("value"==a)return f.value;if(a in y.component.item){if("string"==typeof c){var d=y.component.get(a);return d?b._.trigger(y.component.formats.toString,y.component,[c,d]):""}return y.component.get(a)}},on:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(b){g||(h[b]=c);for(e in h)f=h[e],d&&(e="_"+e),t.methods[e]=t.methods[e]||[],t.methods[e].push(f)}return y},off:function(){var a,b,c=arguments;for(a=0,namesCount=c.length;a<namesCount;a+=1)b=c[a],b in t.methods&&delete t.methods[b];return y},trigger:function(a,c){var d=function(a){var d=t.methods[a];d&&d.map(function(a){b._.trigger(a,y,[c])})};return d("_"+a),d(a),y}};return new x}function c(a){var b,c="position";return a.currentStyle?b=a.currentStyle[c]:window.getComputedStyle&&(b=getComputedStyle(a)[c]),"fixed"==b}function d(){if(k.height()<=i.height())return 0;var b=a('<div style="visibility:hidden;width:100px" />').appendTo("body"),c=b[0].offsetWidth;b.css("overflow","scroll");var d=a('<div style="width:100%" />').appendTo(b),e=d[0].offsetWidth;return b.remove(),c-e}function e(b,c,d){if(a.isPlainObject(c))for(var e in c)f(b,e,c[e]);else f(b,c,d)}function f(a,b,c){a.setAttribute(("role"==b?"":"aria-")+b,c)}function g(b,c){a.isPlainObject(b)||(b={attribute:c}),c="";for(var d in b){var e=("role"==d?"":"aria-")+d,f=b[d];c+=null==f?"":e+'="'+b[d]+'"'}return c}function h(){try{return document.activeElement}catch(a){}}var i=a(window),j=a(document),k=a(document.documentElement);return b.klasses=function(a){return a=a||"picker",{picker:a,opened:a+"--opened",focused:a+"--focused",input:a+"__input",active:a+"__input--active",target:a+"__input--target",holder:a+"__holder",frame:a+"__frame",wrap:a+"__wrap",box:a+"__box"}},b._={group:function(a){for(var c,d="",e=b._.trigger(a.min,a);e<=b._.trigger(a.max,a,[e]);e+=a.i)c=b._.trigger(a.item,a,[e]),d+=b._.node(a.node,c[0],c[1],c[2]);return d},node:function(b,c,d,e){return c?(c=a.isArray(c)?c.join(""):c,d=d?' class="'+d+'"':"",e=e?" "+e:"","<"+b+d+e+">"+c+"</"+b+">"):""},lead:function(a){return(10>a?"0":"")+a},trigger:function(a,b,c){return"function"==typeof a?a.apply(b,c||[]):a},digits:function(a){return/\d/.test(a[1])?2:1},isDate:function(a){return{}.toString.call(a).indexOf("Date")>-1&&this.isInteger(a.getDate())},isInteger:function(a){return{}.toString.call(a).indexOf("Number")>-1&&a%1===0},ariaAttr:g},b.extend=function(c,d){a.fn[c]=function(e,f){var g=this.data(c);return"picker"==e?g:g&&"string"==typeof e?b._.trigger(g[e],g,[f]):this.each(function(){var f=a(this);f.data(c)||new b(this,c,d,e)})},a.fn[c].defaults=d.defaults},b}),function(a){"function"==typeof define&&define.amd?define(["picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0],e=d.value,f=a.$node.data("value"),g=f||e,h=f?b.formatSubmit:b.format,i=function(){return d.currentStyle?"rtl"==d.currentStyle.direction:"rtl"==getComputedStyle(a.$root[0]).direction};c.settings=b,c.$node=a.$node,c.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse navigate create validate",view:"parse create validate viewset",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return a[0]===!0?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),g?c.set("select",g,{format:h}):c.set("select",null).set("highlight",c.item.now),c.key={40:7,38:-7,39:function(){return i()?-1:1},37:function(){return i()?1:-1},go:function(a){var b=c.item.highlight,d=new Date(b.year,b.month,b.date+a);c.set("highlight",d,{interval:a}),this.render()}},a.on("render",function(){a.$root.find("."+b.klass.selectMonth).on("change",function(){var c=this.value;c&&(a.set("highlight",[a.get("view").year,c,a.get("highlight").date]),a.$root.find("."+b.klass.selectMonth).trigger("focus"))}),a.$root.find("."+b.klass.selectYear).on("change",function(){var c=this.value;c&&(a.set("highlight",[c,a.get("view").month,a.get("highlight").date]),a.$root.find("."+b.klass.selectYear).trigger("focus"))})},1).on("open",function(){var d="";c.disabled(c.get("now"))&&(d=":not(."+b.klass.buttonToday+")"),a.$root.find("button"+d+", select").attr("disabled",!1)},1).on("close",function(){a.$root.find("button, select").attr("disabled",!0)},1)}var d=7,e=6,f=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",e.select,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",e.highlight,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,d){var e,g=this;return c=void 0===c?a:c,c==-(1/0)||c==1/0?e=c:b.isPlainObject(c)&&f.isInteger(c.pick)?c=c.obj:b.isArray(c)?(c=new Date(c[0],c[1],c[2]),c=f.isDate(c)?c:g.create().obj):c=f.isInteger(c)||f.isDate(c)?g.normalize(new Date(c),d):g.now(a,c,d),{year:e||c.getFullYear(),month:e||c.getMonth(),date:e||c.getDate(),day:e||c.getDay(),obj:e||c,pick:e||c.getTime()}},c.prototype.createRange=function(a,c){var d=this,e=function(a){return a===!0||b.isArray(a)||f.isDate(a)?d.create(a):a};return f.isInteger(a)||(a=e(a)),f.isInteger(c)||(c=e(c)),f.isInteger(a)&&b.isPlainObject(c)?a=[c.year,c.month,c.date+a]:f.isInteger(c)&&b.isPlainObject(a)&&(c=[a.year,a.month,a.date+c]),{from:e(a),to:e(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b,c){return b=new Date,c&&c.rel&&b.setDate(b.getDate()+c.rel),this.normalize(b,c)},c.prototype.navigate=function(a,c,d){var e,f,g,h,i=b.isArray(c),j=b.isPlainObject(c),k=this.item.view;if(i||j){for(j?(f=c.year,g=c.month,h=c.date):(f=+c[0],g=+c[1],h=+c[2]),d&&d.nav&&k&&k.month!==g&&(f=k.year,g=k.month),e=new Date(f,g+(d&&d.nav?d.nav:0),1),f=e.getFullYear(),g=e.getMonth();new Date(f,g,h).getMonth()!==g;)h-=1;c=[f,g,h]}return c},c.prototype.normalize=function(a){return a.setHours(0,0,0,0),a},c.prototype.measure=function(a,b){var c=this;return b?"string"==typeof b?b=c.parse(a,b):f.isInteger(b)&&(b=c.now(a,b,{rel:b})):b="min"==a?-(1/0):1/0,b},c.prototype.viewset=function(a,b){return this.create([b.year,b.month,1])},c.prototype.validate=function(a,c,d){var e,g,h,i,j=this,k=c,l=d&&d.interval?d.interval:1,m=-1===j.item.enable,n=j.item.min,o=j.item.max,p=m&&j.item.disable.filter(function(a){if(b.isArray(a)){var d=j.create(a).pick;d<c.pick?e=!0:d>c.pick&&(g=!0)}return f.isInteger(a)}).length;if((!d||!d.nav)&&(!m&&j.disabled(c)||m&&j.disabled(c)&&(p||e||g)||!m&&(c.pick<=n.pick||c.pick>=o.pick)))for(m&&!p&&(!g&&l>0||!e&&0>l)&&(l*=-1);j.disabled(c)&&(Math.abs(l)>1&&(c.month<k.month||c.month>k.month)&&(c=k,l=l>0?1:-1),c.pick<=n.pick?(h=!0,l=1,c=j.create([n.year,n.month,n.date+(c.pick===n.pick?0:-1)])):c.pick>=o.pick&&(i=!0,l=-1,c=j.create([o.year,o.month,o.date+(c.pick===o.pick?0:1)])),!h||!i);)c=j.create([c.year,c.month,c.date+l]);return c},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return f.isInteger(d)?a.day===(c.settings.firstDay?d:d-1)%7:b.isArray(d)||f.isDate(d)?a.pick===c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[3]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.parse=function(a,b,c){var d=this,e={};return b&&"string"==typeof b?(c&&c.format||(c=c||{},c.format=d.settings.format),d.formats.toArray(c.format).map(function(a){var c=d.formats[a],g=c?f.trigger(c,d,[b,e]):a.replace(/^!/,"").length;c&&(e[a]=b.substr(0,g)),b=b.substr(g)}),[e.yyyy||e.yy,+(e.mm||e.m)-1,e.dd||e.d]):b},c.prototype.formats=function(){function a(a,b,c){var d=a.match(/\w+/)[0];return c.mm||c.m||(c.m=b.indexOf(d)+1),d.length}function b(a){return a.match(/\w+/)[0].length}return{d:function(a,b){return a?f.digits(a):b.date},dd:function(a,b){return a?2:f.lead(b.date)},ddd:function(a,c){return a?b(a):this.settings.weekdaysShort[c.day]},dddd:function(a,c){return a?b(a):this.settings.weekdaysFull[c.day]},m:function(a,b){return a?f.digits(a):b.month+1},mm:function(a,b){return a?2:f.lead(b.month+1)},mmm:function(b,c){var d=this.settings.monthsShort;return b?a(b,d,c):d[c.month]},mmmm:function(b,c){var d=this.settings.monthsFull;return b?a(b,d,c):d[c.month]},yy:function(a,b){return a?2:(""+b.year).slice(2)},yyyy:function(a,b){return a?4:b.year},toArray:function(a){return a.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return f.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}}}(),c.prototype.isDateExact=function(a,c){var d=this;return f.isInteger(a)&&f.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(f.isDate(a)||b.isArray(a))&&(f.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:b.isPlainObject(a)&&b.isPlainObject(c)?d.isDateExact(a.from,c.from)&&d.isDateExact(a.to,c.to):!1},c.prototype.isDateOverlap=function(a,c){var d=this,e=d.settings.firstDay?1:0;return f.isInteger(a)&&(f.isDate(c)||b.isArray(c))?(a=a%7+e,a===d.create(c).day+1):f.isInteger(c)&&(f.isDate(a)||b.isArray(a))?(c=c%7+e,c===d.create(a).day+1):b.isPlainObject(a)&&b.isPlainObject(c)?d.overlapRanges(a,c):!1},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,e=d.item.disable.slice(0);return"flip"==c?d.flipEnable():c===!1?(d.flipEnable(1),e=[]):c===!0?(d.flipEnable(-1),e=[]):c.map(function(a){for(var c,g=0;g<e.length;g+=1)if(d.isDateExact(a,e[g])){c=!0;break}c||(f.isInteger(a)||f.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&e.push(a)}),e},c.prototype.activate=function(a,c){var d=this,e=d.item.disable,g=e.length;return"flip"==c?d.flipEnable():c===!0?(d.flipEnable(1),e=[]):c===!1?(d.flipEnable(-1),e=[]):c.map(function(a){var c,h,i,j;for(i=0;g>i;i+=1){if(h=e[i],d.isDateExact(h,a)){c=e[i]=null,j=!0;break}if(d.isDateOverlap(h,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[3]||c.push("inverted")):f.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;g>i;i+=1)if(d.isDateExact(e[i],a)){e[i]=null;break}if(j)for(i=0;g>i;i+=1)if(d.isDateOverlap(e[i],a)){e[i]=null;break}c&&e.push(c)}),e.filter(function(a){return null!=a})},c.prototype.nodes=function(a){var b=this,c=b.settings,g=b.item,h=g.now,i=g.select,j=g.highlight,k=g.view,l=g.disable,m=g.min,n=g.max,o=function(a,b){return c.firstDay&&(a.push(a.shift()),b.push(b.shift())),f.node("thead",f.node("tr",f.group({min:0,max:d-1,i:1,node:"th",item:function(d){return[a[d],c.klass.weekdays,'scope=col title="'+b[d]+'"']}})))}((c.showWeekdaysFull?c.weekdaysFull:c.weekdaysLetter).slice(0),c.weekdaysFull.slice(0)),p=function(a){return f.node("div"," ",c.klass["nav"+(a?"Next":"Prev")]+(a&&k.year>=n.year&&k.month>=n.month||!a&&k.year<=m.year&&k.month<=m.month?" "+c.klass.navDisabled:""),"data-nav="+(a||-1)+" "+f.ariaAttr({role:"button",controls:b.$node[0].id+"_table"})+' title="'+(a?c.labelMonthNext:c.labelMonthPrev)+'"')},q=function(d){var e=c.showMonthsShort?c.monthsShort:c.monthsFull;return"short_months"==d&&(e=c.monthsShort),c.selectMonths&&void 0==d?f.node("select",f.group({min:0,max:11,i:1,node:"option",item:function(a){return[e[a],0,"value="+a+(k.month==a?" selected":"")+(k.year==m.year&&a<m.month||k.year==n.year&&a>n.month?" disabled":"")]}}),c.klass.selectMonth+" browser-default",(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelMonthSelect+'"'):"short_months"==d?null!=i?f.node("div",e[i.month]):f.node("div",e[k.month]):f.node("div",e[k.month],c.klass.month)},r=function(d){var e=k.year,g=c.selectYears===!0?5:~~(c.selectYears/2);if(g){var h=m.year,i=n.year,j=e-g,l=e+g;if(h>j&&(l+=h-j,j=h),l>i){var o=j-h,p=l-i;j-=o>p?p:o,l=i}if(c.selectYears&&void 0==d)return f.node("select",f.group({min:j,max:l,i:1,node:"option",item:function(a){return[a,0,"value="+a+(e==a?" selected":"")]}}),c.klass.selectYear+" browser-default",(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelYearSelect+'"')}return"raw"==d?f.node("div",e):f.node("div",e,c.klass.year)};return createDayLabel=function(){return null!=i?f.node("div",i.date):f.node("div",h.date)},createWeekdayLabel=function(){var a;a=null!=i?i.day:h.day;var b=c.weekdaysFull[a];return b},f.node("div",f.node("div",createWeekdayLabel(),"picker__weekday-display")+f.node("div",q("short_months"),c.klass.month_display)+f.node("div",createDayLabel(),c.klass.day_display)+f.node("div",r("raw"),c.klass.year_display),c.klass.date_display)+f.node("div",f.node("div",(c.selectYears?q()+r():q()+r())+p()+p(1),c.klass.header)+f.node("table",o+f.node("tbody",f.group({min:0,max:e-1,i:1,node:"tr",item:function(a){var e=c.firstDay&&0===b.create([k.year,k.month,1]).day?-7:0;return[f.group({min:d*a-k.day+e+1,max:function(){return this.min+d-1},i:1,node:"td",item:function(a){a=b.create([k.year,k.month,a+(c.firstDay?1:0)]);var d=i&&i.pick==a.pick,e=j&&j.pick==a.pick,g=l&&b.disabled(a)||a.pick<m.pick||a.pick>n.pick,o=f.trigger(b.formats.toString,b,[c.format,a]);return[f.node("div",a.date,function(b){return b.push(k.month==a.month?c.klass.infocus:c.klass.outfocus),h.pick==a.pick&&b.push(c.klass.now),d&&b.push(c.klass.selected),e&&b.push(c.klass.highlighted),g&&b.push(c.klass.disabled),b.join(" ")}([c.klass.day]),"data-pick="+a.pick+" "+f.ariaAttr({role:"gridcell",label:o,selected:d&&b.$node.val()===o?!0:null,activedescendant:e?!0:null,disabled:g?!0:null})),"",f.ariaAttr({role:"presentation"})]}})]}})),c.klass.table,'id="'+b.$node[0].id+'_table" '+f.ariaAttr({role:"grid",controls:b.$node[0].id,readonly:!0})),c.klass.calendar_container)+f.node("div",f.node("button",c.today,"btn-flat picker__today","type=button data-pick="+h.pick+(a&&!b.disabled(h)?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.clear,"btn-flat picker__clear","type=button data-clear=1"+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.close,"btn-flat picker__close","type=button data-close=true "+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id})),c.klass.footer)},c.defaults=function(a){return{labelMonthNext:"Next month",labelMonthPrev:"Previous month",labelMonthSelect:"Select a month",labelYearSelect:"Select a year",monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],weekdaysLetter:["S","M","T","W","T","F","S"],today:"Today",clear:"Clear",close:"Close",format:"d mmmm, yyyy",klass:{table:a+"table",header:a+"header",date_display:a+"date-display",day_display:a+"day-display",month_display:a+"month-display",year_display:a+"year-display",calendar_container:a+"calendar-container",navPrev:a+"nav--prev",navNext:a+"nav--next",navDisabled:a+"nav--disabled",month:a+"month",year:a+"year",selectMonth:a+"select--month",selectYear:a+"select--year",weekdays:a+"weekday",day:a+"day",disabled:a+"day--disabled",selected:a+"day--selected",highlighted:a+"day--highlighted",now:a+"day--today",infocus:a+"day--infocus",outfocus:a+"day--outfocus",footer:a+"footer",buttonClear:a+"button--clear",buttonToday:a+"button--today",buttonClose:a+"button--close"}}}(a.klasses().picker+"__"),a.extend("pickadate",c)}),function(a){function b(){var b=+a(this).attr("length"),c=+a(this).val().length,d=b>=c;a(this).parent().find('span[class="character-counter"]').html(c+"/"+b),e(d,a(this))}function c(b){var c=a("<span/>").addClass("character-counter").css("float","right").css("font-size","12px").css("height",1);b.parent().append(c)}function d(){a(this).parent().find('span[class="character-counter"]').html("")}function e(a,b){var c=b.hasClass("invalid");a&&c?b.removeClass("invalid"):a||c||(b.removeClass("valid"),b.addClass("invalid"))}a.fn.characterCounter=function(){return this.each(function(){var e=void 0!==a(this).attr("length");e&&(a(this).on("input",b),a(this).on("focus",b),a(this).on("blur",d),c(a(this)))})},a(document).ready(function(){a("input, textarea").characterCounter()})}(jQuery); \ No newline at end of file
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/restoreScroll.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/restoreScroll.js
deleted file mode 100644
index 331c9e19..00000000
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/restoreScroll.js
+++ /dev/null
@@ -1,25 +0,0 @@
1function supportsLocalStorage() {
2 try {
3 return 'localStorage' in window && window['localStorage'] !== null;
4 } catch (e) {
5 return false;
6 }
7}
8
9function savePercent(id, percent) {
10 if (!supportsLocalStorage()) { return false; }
11 localStorage["poche.article." + id + ".percent"] = percent;
12 return true;
13}
14
15function retrievePercent(id) {
16 if (!supportsLocalStorage()) { return false; }
17
18 var bheight = $(document).height();
19 var percent = localStorage["poche.article." + id + ".percent"];
20 var scroll = bheight * percent;
21
22 $('html,body').animate({scrollTop: scroll}, 'fast');
23
24 return true;
25} \ No newline at end of file
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
index c066aaf7..7ad5c100 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
@@ -68,6 +68,7 @@ config:
68 # 200_word: 'I read ~200 words per minute' 68 # 200_word: 'I read ~200 words per minute'
69 # 300_word: 'I read ~300 words per minute' 69 # 300_word: 'I read ~300 words per minute'
70 # 400_word: 'I read ~400 words per minute' 70 # 400_word: 'I read ~400 words per minute'
71 pocket_consumer_key_label: Brugers nøgle til Pocket for at importere materialer
71 form_rss: 72 form_rss:
72 description: 'RSS-feeds fra wallabag gør det muligt at læse de artikler, der gemmes i wallabag, med din RSS-læser. Det kræver, at du genererer et token først.' 73 description: 'RSS-feeds fra wallabag gør det muligt at læse de artikler, der gemmes i wallabag, med din RSS-læser. Det kræver, at du genererer et token først.'
73 token_label: 'RSS-Token' 74 token_label: 'RSS-Token'
@@ -139,11 +140,14 @@ entry:
139 # starred: 'Starred entries' 140 # starred: 'Starred entries'
140 # archived: 'Archived entries' 141 # archived: 'Archived entries'
141 # filtered: 'Filtered entries' 142 # filtered: 'Filtered entries'
143 # filtered_tags: 'Filtered by tags'
144 # untagged: 'Untagged entries'
142 list: 145 list:
143 # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.' 146 # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
144 reading_time: 'estimeret læsetid' 147 reading_time: 'estimeret læsetid'
145 reading_time_minutes: 'estimeret læsetid: %readingTime% min' 148 reading_time_minutes: 'estimeret læsetid: %readingTime% min'
146 reading_time_less_one_minute: 'estimeret læsetid: <small class="inferieur">&lt;</small> 1 min' 149 reading_time_less_one_minute: 'estimeret læsetid: <small class="inferieur">&lt;</small> 1 min'
150 # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
147 reading_time_minutes_short: '%readingTime% min' 151 reading_time_minutes_short: '%readingTime% min'
148 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min' 152 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
149 original_article: 'original' 153 original_article: 'original'
@@ -185,6 +189,8 @@ entry:
185 add_a_tag: 'Tliføj et tag' 189 add_a_tag: 'Tliføj et tag'
186 share_content: 'Deling' 190 share_content: 'Deling'
187 # share_email_label: 'Email' 191 # share_email_label: 'Email'
192 # public_link: 'public link'
193 # delete_public_link: 'delete public link'
188 download: 'Download' 194 download: 'Download'
189 # print: 'Print' 195 # print: 'Print'
190 problem: 196 problem:
@@ -287,6 +293,7 @@ quickstart:
287 # pocket: 'Migrate from Pocket' 293 # pocket: 'Migrate from Pocket'
288 # wallabag_v1: 'Migrate from wallabag v1' 294 # wallabag_v1: 'Migrate from wallabag v1'
289 # wallabag_v2: 'Migrate from wallabag v2' 295 # wallabag_v2: 'Migrate from wallabag v2'
296 # readability: 'Migrate from Readability'
290 # developer: 297 # developer:
291 # title: 'Developers' 298 # title: 'Developers'
292 # create_application: 'Create your third application' 299 # create_application: 'Create your third application'
@@ -308,6 +315,7 @@ tag:
308 page_title: 'Tags' 315 page_title: 'Tags'
309 list: 316 list:
310 # number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.' 317 # number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.'
318 # see_untagged_entries: 'See untagged entries'
311 319
312import: 320import:
313 # page_title: 'Import' 321 # page_title: 'Import'
@@ -335,6 +343,24 @@ import:
335 # wallabag_v2: 343 # wallabag_v2:
336 # page_title: 'Import > Wallabag v2' 344 # page_title: 'Import > Wallabag v2'
337 # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.' 345 # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
346 # readability:
347 # page_title: 'Import > Readability'
348 # description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
349 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
350 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 # firefox:
353 # page_title: 'Import > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 #chrome:
357 # page_title: 'Import > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
360 # instapaper:
361 # page_title: 'Import > Instapaper'
362 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
363 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
338 364
339developer: 365developer:
340 # page_title: 'Developer' 366 # page_title: 'Developer'
@@ -400,10 +426,10 @@ flashes:
400 notice: 426 notice:
401 # entry_already_saved: 'Entry already saved on %date%' 427 # entry_already_saved: 'Entry already saved on %date%'
402 # entry_saved: 'Entry saved' 428 # entry_saved: 'Entry saved'
403 # entry_saved_failed: 'Failed to save entry' 429 # entry_saved_failed: 'Entry saved but fetching content failed'
404 # entry_updated: 'Entry updated' 430 # entry_updated: 'Entry updated'
405 # entry_reloaded: 'Entry reloaded' 431 # entry_reloaded: 'Entry reloaded'
406 # entry_reload_failed: 'Failed to reload entry' 432 # entry_reload_failed: 'Entry reloaded but fetching content failed'
407 entry_archived: 'Artikel arkiveret' 433 entry_archived: 'Artikel arkiveret'
408 entry_unarchived: 'Artikel ikke længere arkiveret' 434 entry_unarchived: 'Artikel ikke længere arkiveret'
409 entry_starred: 'Artikel markeret som favorit' 435 entry_starred: 'Artikel markeret som favorit'
@@ -417,6 +443,10 @@ flashes:
417 # failed: 'Import failed, please try again.' 443 # failed: 'Import failed, please try again.'
418 # failed_on_file: 'Error while processing import. Please verify your import file.' 444 # failed_on_file: 'Error while processing import. Please verify your import file.'
419 # summary: 'Import summary: %imported% imported, %skipped% already saved.' 445 # summary: 'Import summary: %imported% imported, %skipped% already saved.'
446 # summary_with_queue: 'Import summary: %queued% queued.'
447 error:
448 # redis_enabled_not_installed: Redis is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check Redis configuration.
449 # rabbit_enabled_not_installed: RabbitMQ is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check RabbitMQ configuration.
420 developer: 450 developer:
421 notice: 451 notice:
422 # client_created: 'New client created.' 452 # client_created: 'New client created.'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
index 28d826b6..650e4761 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
@@ -68,6 +68,7 @@ config:
68 200_word: 'Ich lese ~200 Wörter pro Minute' 68 200_word: 'Ich lese ~200 Wörter pro Minute'
69 300_word: 'Ich lese ~300 Wörter pro Minute' 69 300_word: 'Ich lese ~300 Wörter pro Minute'
70 400_word: 'Ich lese ~400 Wörter pro Minute' 70 400_word: 'Ich lese ~400 Wörter pro Minute'
71 pocket_consumer_key_label: Consumer-Key für Pocket, um Inhalte zu importieren
71 form_rss: 72 form_rss:
72 description: 'Die RSS-Feeds von wallabag erlauben es dir, deine gespeicherten Artikel mit deinem bevorzugten RSS-Reader zu lesen. Vorher musst du jedoch einen Token erstellen.' 73 description: 'Die RSS-Feeds von wallabag erlauben es dir, deine gespeicherten Artikel mit deinem bevorzugten RSS-Reader zu lesen. Vorher musst du jedoch einen Token erstellen.'
73 token_label: 'RSS-token' 74 token_label: 'RSS-token'
@@ -139,11 +140,14 @@ entry:
139 starred: 'Favorisierte Einträge' 140 starred: 'Favorisierte Einträge'
140 archived: 'Archivierte Einträge' 141 archived: 'Archivierte Einträge'
141 filtered: 'Gefilterte Einträge' 142 filtered: 'Gefilterte Einträge'
143 # filtered_tags: 'Filtered by tags'
144 # untagged: 'Untagged entries'
142 list: 145 list:
143 number_on_the_page: '{0} Es gibt keine Einträge.|{1} Es gibt einen Eintrag.|]1,Inf[ Es gibt %count% Einträge.' 146 number_on_the_page: '{0} Es gibt keine Einträge.|{1} Es gibt einen Eintrag.|]1,Inf[ Es gibt %count% Einträge.'
144 reading_time: 'geschätzte Lesezeit' 147 reading_time: 'geschätzte Lesezeit'
145 reading_time_minutes: 'geschätzte Lesezeit: %readingTime% min' 148 reading_time_minutes: 'geschätzte Lesezeit: %readingTime% min'
146 reading_time_less_one_minute: 'geschätzte Lesezeit: <small class="inferieur">&lt;</small> 1 min' 149 reading_time_less_one_minute: 'geschätzte Lesezeit: <small class="inferieur">&lt;</small> 1 min'
150 # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
147 reading_time_minutes_short: '%readingTime% min' 151 reading_time_minutes_short: '%readingTime% min'
148 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min' 152 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
149 original_article: 'original' 153 original_article: 'original'
@@ -185,6 +189,8 @@ entry:
185 add_a_tag: 'Tag hinzufügen' 189 add_a_tag: 'Tag hinzufügen'
186 share_content: 'Teilen' 190 share_content: 'Teilen'
187 share_email_label: 'E-Mail' 191 share_email_label: 'E-Mail'
192 # public_link: 'public link'
193 # delete_public_link: 'delete public link'
188 download: 'Herunterladen' 194 download: 'Herunterladen'
189 print: 'Drucken' 195 print: 'Drucken'
190 problem: 196 problem:
@@ -287,6 +293,7 @@ quickstart:
287 pocket: 'von Pocket migrieren' 293 pocket: 'von Pocket migrieren'
288 wallabag_v1: 'von wallabag v1 migrieren' 294 wallabag_v1: 'von wallabag v1 migrieren'
289 wallabag_v2: 'von wallabag v2 migrieren' 295 wallabag_v2: 'von wallabag v2 migrieren'
296 readability: 'von Readability migrieren'
290 developer: 297 developer:
291 title: 'Entwickler' 298 title: 'Entwickler'
292 create_application: 'Erstelle eine Anwendung und nutze die wallabag API' 299 create_application: 'Erstelle eine Anwendung und nutze die wallabag API'
@@ -308,6 +315,7 @@ tag:
308 page_title: 'Tags' 315 page_title: 'Tags'
309 list: 316 list:
310 number_on_the_page: '{0} Es gibt keine Tags.|{1} Es gibt einen Tag.|]1,Inf[ Es gibt %count% Tags.' 317 number_on_the_page: '{0} Es gibt keine Tags.|{1} Es gibt einen Tag.|]1,Inf[ Es gibt %count% Tags.'
318 # see_untagged_entries: 'See untagged entries'
311 319
312import: 320import:
313 page_title: 'Importieren' 321 page_title: 'Importieren'
@@ -335,6 +343,24 @@ import:
335 wallabag_v2: 343 wallabag_v2:
336 page_title: 'Aus wallabag v2 importieren' 344 page_title: 'Aus wallabag v2 importieren'
337 description: 'Dieser Import wird all deine Artikel aus wallabag v2 importieren. Gehe auf "Alle Artikel" und dann, in der Exportieren-Seitenleiste auf "JSON". Dabei erhältst du eine "All articles.json"-Datei.' 345 description: 'Dieser Import wird all deine Artikel aus wallabag v2 importieren. Gehe auf "Alle Artikel" und dann, in der Exportieren-Seitenleiste auf "JSON". Dabei erhältst du eine "All articles.json"-Datei.'
346 readability:
347 page_title: 'Aus Readability importieren'
348 # description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
349 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
350 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 firefox:
353 page_title: 'Aus Firefox importieren'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 chrome:
357 page_title: 'Aus Chrome importieren'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
360 instapaper:
361 page_title: 'Aus Instapaper importieren'
362 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
363 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
338 364
339developer: 365developer:
340 page_title: 'Entwickler' 366 page_title: 'Entwickler'
@@ -400,10 +426,10 @@ flashes:
400 notice: 426 notice:
401 entry_already_saved: 'Eintrag bereits am %date% gespeichert' 427 entry_already_saved: 'Eintrag bereits am %date% gespeichert'
402 entry_saved: 'Eintrag gespeichert' 428 entry_saved: 'Eintrag gespeichert'
403 # entry_saved_failed: 'Failed to save entry' 429 # entry_saved_failed: 'Entry saved but fetching content failed'
404 entry_updated: 'Eintrag aktualisiert' 430 entry_updated: 'Eintrag aktualisiert'
405 entry_reloaded: 'Eintrag neugeladen' 431 entry_reloaded: 'Eintrag neugeladen'
406 entry_reload_failed: 'Neuladen des Eintrags fehlgeschlagen' 432 # entry_reload_failed: 'Entry reloaded but fetching content failed'
407 entry_archived: 'Artikel archiviert' 433 entry_archived: 'Artikel archiviert'
408 entry_unarchived: 'Artikel dearchiviert' 434 entry_unarchived: 'Artikel dearchiviert'
409 entry_starred: 'Artikel favorisiert' 435 entry_starred: 'Artikel favorisiert'
@@ -417,6 +443,10 @@ flashes:
417 failed: 'Import fehlgeschlagen, bitte erneut probieren.' 443 failed: 'Import fehlgeschlagen, bitte erneut probieren.'
418 failed_on_file: 'Fehler während des Imports. Bitte überprüfe deine Import-Datei.' 444 failed_on_file: 'Fehler während des Imports. Bitte überprüfe deine Import-Datei.'
419 summary: 'Import-Zusammenfassung: %imported% importiert, %skipped% bereits gespeichert.' 445 summary: 'Import-Zusammenfassung: %imported% importiert, %skipped% bereits gespeichert.'
446 # summary_with_queue: 'Import summary: %queued% queued.'
447 error:
448 # redis_enabled_not_installed: Redis is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check Redis configuration.
449 # rabbit_enabled_not_installed: RabbitMQ is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check RabbitMQ configuration.
420 developer: 450 developer:
421 notice: 451 notice:
422 client_created: 'Neuer Client erstellt.' 452 client_created: 'Neuer Client erstellt.'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
index c6633f5b..d5842cc5 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
@@ -68,6 +68,7 @@ config:
68 200_word: 'I read ~200 words per minute' 68 200_word: 'I read ~200 words per minute'
69 300_word: 'I read ~300 words per minute' 69 300_word: 'I read ~300 words per minute'
70 400_word: 'I read ~400 words per minute' 70 400_word: 'I read ~400 words per minute'
71 pocket_consumer_key_label: Consumer key for Pocket to import contents
71 form_rss: 72 form_rss:
72 description: 'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.' 73 description: 'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.'
73 token_label: 'RSS token' 74 token_label: 'RSS token'
@@ -139,11 +140,14 @@ entry:
139 starred: 'Starred entries' 140 starred: 'Starred entries'
140 archived: 'Archived entries' 141 archived: 'Archived entries'
141 filtered: 'Filtered entries' 142 filtered: 'Filtered entries'
143 filtered_tags: 'Filtered by tags'
144 untagged: 'Untagged entries'
142 list: 145 list:
143 number_on_the_page: '{0} There are no entries.|{1} There is one entry.|]1,Inf[ There are %count% entries.' 146 number_on_the_page: '{0} There are no entries.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
144 reading_time: 'estimated reading time' 147 reading_time: 'estimated reading time'
145 reading_time_minutes: 'estimated reading time: %readingTime% min' 148 reading_time_minutes: 'estimated reading time: %readingTime% min'
146 reading_time_less_one_minute: 'estimated reading time: <small class="inferieur">&lt;</small> 1 min' 149 reading_time_less_one_minute: 'estimated reading time: <small class="inferieur">&lt;</small> 1 min'
150 number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
147 reading_time_minutes_short: '%readingTime% min' 151 reading_time_minutes_short: '%readingTime% min'
148 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min' 152 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
149 original_article: 'original' 153 original_article: 'original'
@@ -185,6 +189,8 @@ entry:
185 add_a_tag: 'Add a tag' 189 add_a_tag: 'Add a tag'
186 share_content: 'Share' 190 share_content: 'Share'
187 share_email_label: 'Email' 191 share_email_label: 'Email'
192 public_link: 'public link'
193 delete_public_link: 'delete public link'
188 download: 'Download' 194 download: 'Download'
189 print: 'Print' 195 print: 'Print'
190 problem: 196 problem:
@@ -287,6 +293,7 @@ quickstart:
287 pocket: 'Migrate from Pocket' 293 pocket: 'Migrate from Pocket'
288 wallabag_v1: 'Migrate from wallabag v1' 294 wallabag_v1: 'Migrate from wallabag v1'
289 wallabag_v2: 'Migrate from wallabag v2' 295 wallabag_v2: 'Migrate from wallabag v2'
296 readability: 'Migrate from Readability'
290 developer: 297 developer:
291 title: 'Developers' 298 title: 'Developers'
292 create_application: 'Create your third application' 299 create_application: 'Create your third application'
@@ -308,6 +315,7 @@ tag:
308 page_title: 'Tags' 315 page_title: 'Tags'
309 list: 316 list:
310 number_on_the_page: '{0} There are no tags.|{1} There is one tag.|]1,Inf[ There are %count% tags.' 317 number_on_the_page: '{0} There are no tags.|{1} There is one tag.|]1,Inf[ There are %count% tags.'
318 see_untagged_entries: 'See untagged entries'
311 319
312import: 320import:
313 page_title: 'Import' 321 page_title: 'Import'
@@ -335,6 +343,24 @@ import:
335 wallabag_v2: 343 wallabag_v2:
336 page_title: 'Import > Wallabag v2' 344 page_title: 'Import > Wallabag v2'
337 description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.' 345 description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
346 readability:
347 page_title: 'Import > Readability'
348 description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
349 how_to: 'Please select your Readability export and click on the below button to upload and import it.'
350 worker:
351 enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 firefox:
353 page_title: 'Import > Firefox'
354 description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 chrome:
357 page_title: 'Import > Chrome'
358 description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
360 instapaper:
361 page_title: 'Import > Instapaper'
362 description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
363 how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
338 364
339developer: 365developer:
340 page_title: 'Developer' 366 page_title: 'Developer'
@@ -354,19 +380,21 @@ developer:
354 field_grant_types: 'Grant type allowed' 380 field_grant_types: 'Grant type allowed'
355 no_client: 'No client yet.' 381 no_client: 'No client yet.'
356 remove: 382 remove:
357 warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !' 383 warn_message_1: 'You have the ability to remove the client %name%. This action is IRREVERSIBLE !'
358 warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag." 384 warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag."
359 action: 'Remove this client' 385 action: 'Remove the client %name%'
360 client: 386 client:
361 page_title: 'Developer > New client' 387 page_title: 'Developer > New client'
362 page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.' 388 page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
363 form: 389 form:
364 redirect_uris_label: 'Redirect URIs' 390 name_label: 'Name of the client'
391 redirect_uris_label: 'Redirect URIs (optional)'
365 save_label: 'Create a new client' 392 save_label: 'Create a new client'
366 action_back: 'Back' 393 action_back: 'Back'
367 client_parameter: 394 client_parameter:
368 page_title: 'Developer > Client parameters' 395 page_title: 'Developer > Client parameters'
369 page_description: 'Here are your client parameters.' 396 page_description: 'Here are your client parameters.'
397 field_name: 'Client name'
370 field_id: 'Client ID' 398 field_id: 'Client ID'
371 field_secret: 'Client secret' 399 field_secret: 'Client secret'
372 back: 'Back' 400 back: 'Back'
@@ -400,10 +428,10 @@ flashes:
400 notice: 428 notice:
401 entry_already_saved: 'Entry already saved on %date%' 429 entry_already_saved: 'Entry already saved on %date%'
402 entry_saved: 'Entry saved' 430 entry_saved: 'Entry saved'
403 entry_saved_failed: 'Failed to save entry' 431 entry_saved_failed: 'Entry saved but fetching content failed'
404 entry_updated: 'Entry updated' 432 entry_updated: 'Entry updated'
405 entry_reloaded: 'Entry reloaded' 433 entry_reloaded: 'Entry reloaded'
406 entry_reload_failed: 'Failed to reload entry' 434 entry_reload_failed: 'Entry reloaded but fetching content failed'
407 entry_archived: 'Entry archived' 435 entry_archived: 'Entry archived'
408 entry_unarchived: 'Entry unarchived' 436 entry_unarchived: 'Entry unarchived'
409 entry_starred: 'Entry starred' 437 entry_starred: 'Entry starred'
@@ -417,7 +445,11 @@ flashes:
417 failed: 'Import failed, please try again.' 445 failed: 'Import failed, please try again.'
418 failed_on_file: 'Error while processing import. Please verify your import file.' 446 failed_on_file: 'Error while processing import. Please verify your import file.'
419 summary: 'Import summary: %imported% imported, %skipped% already saved.' 447 summary: 'Import summary: %imported% imported, %skipped% already saved.'
448 summary_with_queue: 'Import summary: %queued% queued.'
449 error:
450 redis_enabled_not_installed: Redis is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check Redis configuration.
451 rabbit_enabled_not_installed: RabbitMQ is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check RabbitMQ configuration.
420 developer: 452 developer:
421 notice: 453 notice:
422 client_created: 'New client created.' 454 client_created: 'New client %name% created.'
423 client_deleted: 'Client deleted' 455 client_deleted: 'Client %name% deleted'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
index 266b4af5..bd691c1c 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
@@ -68,6 +68,7 @@ config:
68 200_word: 'Leo ~200 palabras por minuto' 68 200_word: 'Leo ~200 palabras por minuto'
69 300_word: 'Leo ~300 palabras por minuto' 69 300_word: 'Leo ~300 palabras por minuto'
70 400_word: 'Leo ~400 palabras por minuto' 70 400_word: 'Leo ~400 palabras por minuto'
71 # pocket_consumer_key_label: Consumer key for Pocket to import contents
71 form_rss: 72 form_rss:
72 description: 'Los feeds RSS de wallabag permiten leer los artículos guardados con su lector RSS favorito. Necesita generar un token primero' 73 description: 'Los feeds RSS de wallabag permiten leer los artículos guardados con su lector RSS favorito. Necesita generar un token primero'
73 token_label: 'RSS token' 74 token_label: 'RSS token'
@@ -139,11 +140,14 @@ entry:
139 starred: 'Artículos favoritos' 140 starred: 'Artículos favoritos'
140 archived: 'Artículos archivados' 141 archived: 'Artículos archivados'
141 filtered: 'Artículos filtrados' 142 filtered: 'Artículos filtrados'
143 # filtered_tags: 'Filtered by tags'
144 # untagged: 'Untagged entries'
142 list: 145 list:
143 number_on_the_page: '{0} No hay artículos.|{1} Hay un artículo.|]1,Inf[ Hay %count% artículos.' 146 number_on_the_page: '{0} No hay artículos.|{1} Hay un artículo.|]1,Inf[ Hay %count% artículos.'
144 reading_time: 'tiempo estimado de lectura' 147 reading_time: 'tiempo estimado de lectura'
145 reading_time_minutes: 'tiempo estimado de lectura: %readingTime% min' 148 reading_time_minutes: 'tiempo estimado de lectura: %readingTime% min'
146 reading_time_less_one_minute: 'tiempo estimado de lectura: <small class="inferieur">&lt;</small> 1 min' 149 reading_time_less_one_minute: 'tiempo estimado de lectura: <small class="inferieur">&lt;</small> 1 min'
150 # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
147 reading_time_minutes_short: '%readingTime% min' 151 reading_time_minutes_short: '%readingTime% min'
148 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min' 152 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
149 original_article: 'original' 153 original_article: 'original'
@@ -185,6 +189,8 @@ entry:
185 add_a_tag: 'Añadir una etiqueta' 189 add_a_tag: 'Añadir una etiqueta'
186 share_content: 'Compartir' 190 share_content: 'Compartir'
187 share_email_label: 'Dirección e-mail' 191 share_email_label: 'Dirección e-mail'
192 # public_link: 'public link'
193 # delete_public_link: 'delete public link'
188 download: 'Descargar' 194 download: 'Descargar'
189 print: 'Imprimir' 195 print: 'Imprimir'
190 problem: 196 problem:
@@ -287,6 +293,7 @@ quickstart:
287 pocket: 'Migrar desde Pocket' 293 pocket: 'Migrar desde Pocket'
288 wallabag_v1: 'Migrar desde wallabag v1' 294 wallabag_v1: 'Migrar desde wallabag v1'
289 wallabag_v2: 'Migrar desde wallabag v2' 295 wallabag_v2: 'Migrar desde wallabag v2'
296 readability: 'Migrar desde Readability'
290 developer: 297 developer:
291 title: 'Promotores' 298 title: 'Promotores'
292 create_application: 'Cree su tercera aplicación' 299 create_application: 'Cree su tercera aplicación'
@@ -308,6 +315,7 @@ tag:
308 page_title: 'Etiquetas' 315 page_title: 'Etiquetas'
309 list: 316 list:
310 number_on_the_page: '{0} No hay ninguna etiqueta.|{1} Hay una etiqueta.|]1,Inf[ Hay %count% etiquetas.' 317 number_on_the_page: '{0} No hay ninguna etiqueta.|{1} Hay una etiqueta.|]1,Inf[ Hay %count% etiquetas.'
318 # see_untagged_entries: 'See untagged entries'
311 319
312import: 320import:
313 page_title: 'Importar' 321 page_title: 'Importar'
@@ -335,6 +343,24 @@ import:
335 wallabag_v2: 343 wallabag_v2:
336 page_title: 'Importar > Wallabag v2' 344 page_title: 'Importar > Wallabag v2'
337 description: 'Va a importar sus artículos de otra instancia de wallabag v2. Vaya a Todos los artículos, entonces, en la barra lateral, oprima en "JSON". Usted tendrá un fichero "All articles.json"' 345 description: 'Va a importar sus artículos de otra instancia de wallabag v2. Vaya a Todos los artículos, entonces, en la barra lateral, oprima en "JSON". Usted tendrá un fichero "All articles.json"'
346 readability:
347 page_title: 'Importar > Readability'
348 # description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
349 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
350 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 firefox:
353 page_title: 'Importar > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 chrome:
357 page_title: 'Importar > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
360 instapaper:
361 page_title: 'Importar > Instapaper'
362 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
363 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
338 364
339developer: 365developer:
340 page_title: 'Promotor' 366 page_title: 'Promotor'
@@ -400,10 +426,10 @@ flashes:
400 notice: 426 notice:
401 entry_already_saved: 'Entrada ya guardada por %fecha%' 427 entry_already_saved: 'Entrada ya guardada por %fecha%'
402 entry_saved: 'Entrada guardada' 428 entry_saved: 'Entrada guardada'
403 # entry_saved_failed: 'Failed to save entry' 429 # entry_saved_failed: 'Entry saved but fetching content failed'
404 entry_updated: 'Entrada actualizada' 430 entry_updated: 'Entrada actualizada'
405 entry_reloaded: 'Entrada recargada' 431 entry_reloaded: 'Entrada recargada'
406 entry_reload_failed: 'Entrada recargada reprobada' 432 # entry_reload_failed: 'Entry reloaded but fetching content failed'
407 entry_archived: 'Artículo archivado' 433 entry_archived: 'Artículo archivado'
408 entry_unarchived: 'Artículo desarchivado' 434 entry_unarchived: 'Artículo desarchivado'
409 entry_starred: 'Artículo guardado en los favoritos' 435 entry_starred: 'Artículo guardado en los favoritos'
@@ -414,9 +440,13 @@ flashes:
414 tag_added: 'Etiqueta añadida' 440 tag_added: 'Etiqueta añadida'
415 import: 441 import:
416 notice: 442 notice:
417 failed: 'Importación reprobada, por favor inténtelo de nuevo.' 443 failed: 'Importación reprobada, por favor inténtelo de nuevo.'
418 failed_on_file: 'Se ocurre un error por procesar importación. Por favor verifique su archivo importado.' 444 failed_on_file: 'Se ocurre un error por procesar importación. Por favor verifique su archivo importado.'
419 summary: 'Resúmen importado: %importado% importado, %saltados% ya guardado.' 445 summary: 'Resúmen importado: %importado% importado, %saltados% ya guardado.'
446 # summary_with_queue: 'Import summary: %queued% queued.'
447 error:
448 # redis_enabled_not_installed: Redis is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check Redis configuration.
449 # rabbit_enabled_not_installed: RabbitMQ is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check RabbitMQ configuration.
420 developer: 450 developer:
421 notice: 451 notice:
422 client_created: 'Nuevo cliente creado.' 452 client_created: 'Nuevo cliente creado.'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
index c2350019..a9989a83 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
@@ -68,6 +68,7 @@ config:
68 200_word: 'من تقریباً ۲۰۰ واژه را در دقیقه می‌خوانم' 68 200_word: 'من تقریباً ۲۰۰ واژه را در دقیقه می‌خوانم'
69 300_word: 'من تقریباً ۳۰۰ واژه را در دقیقه می‌خوانم' 69 300_word: 'من تقریباً ۳۰۰ واژه را در دقیقه می‌خوانم'
70 400_word: 'من تقریباً ۴۰۰ واژه را در دقیقه می‌خوانم' 70 400_word: 'من تقریباً ۴۰۰ واژه را در دقیقه می‌خوانم'
71 pocket_consumer_key_label: کلید کاربری Pocket برای درون‌ریزی مطالب
71 form_rss: 72 form_rss:
72 description: 'با خوراک آر-اس-اس که wallabag در اختیارتان می‌گذارد، می‌توانید مقاله‌های ذخیره‌شده را در نرم‌افزار آر-اس-اس دلخواه خود بخوانید. برای این کار نخست باید یک کد بسازید.' 73 description: 'با خوراک آر-اس-اس که wallabag در اختیارتان می‌گذارد، می‌توانید مقاله‌های ذخیره‌شده را در نرم‌افزار آر-اس-اس دلخواه خود بخوانید. برای این کار نخست باید یک کد بسازید.'
73 token_label: 'کد آر-اس-اس' 74 token_label: 'کد آر-اس-اس'
@@ -139,11 +140,14 @@ entry:
139 starred: 'مقاله‌های برگزیده' 140 starred: 'مقاله‌های برگزیده'
140 archived: 'مقاله‌های بایگانی‌شده' 141 archived: 'مقاله‌های بایگانی‌شده'
141 filtered: 'مقاله‌های فیلترشده' 142 filtered: 'مقاله‌های فیلترشده'
143 # filtered_tags: 'Filtered by tags'
144 # untagged: 'Untagged entries'
142 list: 145 list:
143 number_on_the_page: '{0} هیج مقاله‌ای نیست.|{1} یک مقاله هست.|]1,Inf[ %count% مقاله هست.' 146 number_on_the_page: '{0} هیج مقاله‌ای نیست.|{1} یک مقاله هست.|]1,Inf[ %count% مقاله هست.'
144 reading_time: 'زمان تخمینی برای خواندن' 147 reading_time: 'زمان تخمینی برای خواندن'
145 reading_time_minutes: 'زمان تخمینی برای خواندن: %readingTime% min' 148 reading_time_minutes: 'زمان تخمینی برای خواندن: %readingTime% min'
146 reading_time_less_one_minute: 'زمان تخمینی برای خواندن: <small class="inferieur">&lt;</small> 1 min' 149 reading_time_less_one_minute: 'زمان تخمینی برای خواندن: <small class="inferieur">&lt;</small> 1 min'
150 # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
147 reading_time_minutes_short: '%readingTime% min' 151 reading_time_minutes_short: '%readingTime% min'
148 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min' 152 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
149 original_article: 'original' 153 original_article: 'original'
@@ -185,6 +189,8 @@ entry:
185 add_a_tag: 'افزودن برچسب' 189 add_a_tag: 'افزودن برچسب'
186 share_content: 'هم‌رسانی' 190 share_content: 'هم‌رسانی'
187 share_email_label: 'نشانی ایمیل' 191 share_email_label: 'نشانی ایمیل'
192 # public_link: 'public link'
193 # delete_public_link: 'delete public link'
188 download: 'بارگیری' 194 download: 'بارگیری'
189 print: 'چاپ' 195 print: 'چاپ'
190 problem: 196 problem:
@@ -287,6 +293,7 @@ quickstart:
287 pocket: 'مهاجرت از Pocket' 293 pocket: 'مهاجرت از Pocket'
288 wallabag_v1: 'مهاجرت از نسخهٔ یکم wallabag' 294 wallabag_v1: 'مهاجرت از نسخهٔ یکم wallabag'
289 wallabag_v2: 'مهاجرت از نسخهٔ دوم wallabag' 295 wallabag_v2: 'مهاجرت از نسخهٔ دوم wallabag'
296 readability: 'مهاجرت از نسخهٔ دوم Readability'
290 developer: 297 developer:
291 title: 'برنامه‌نویسان' 298 title: 'برنامه‌نویسان'
292 create_application: 'برنامهٔ wallabag خود را بسازید' 299 create_application: 'برنامهٔ wallabag خود را بسازید'
@@ -308,18 +315,19 @@ tag:
308 page_title: 'برچسب‌ها' 315 page_title: 'برچسب‌ها'
309 list: 316 list:
310 number_on_the_page: '{0} هیچ برچسبی نیست.|{1} یک برچسب هست.|]1,Inf[ %count% برچسب هست.' 317 number_on_the_page: '{0} هیچ برچسبی نیست.|{1} یک برچسب هست.|]1,Inf[ %count% برچسب هست.'
318 # see_untagged_entries: 'See untagged entries'
311 319
312import: 320import:
313 page_title: 'درون‌ریزی' 321 page_title: 'درون‌ریزی'
314 page_description: 'به درون‌ریز wallabag خوش آمدید. لطفاً سرویس قبلی خود را که می‌خواهید از آن مهاجرت کنید انتخاب کنید.' 322 page_description: 'به درون‌ریز wallabag خوش آمدید. لطفاً سرویس قبلی خود را که می‌خواهید از آن مهاجرت کنید انتخاب کنید.'
315 action: 323 action:
316 import_contents: 'درون‌ریزی مقاله‌ها' 324 import_contents: 'درون‌ریزی مقاله‌ها'
317 form: 325 form:
318 mark_as_read_title: 'علامت‌زدن همه به عنوان خوانده‌شده؟' 326 mark_as_read_title: 'علامت‌زدن همه به عنوان خوانده‌شده؟'
319 mark_as_read_label: 'همهٔ مقاله‌های درون‌ریزی شده را به عنوان خوانده‌شده علامت بزن' 327 mark_as_read_label: 'همهٔ مقاله‌های درون‌ریزی شده را به عنوان خوانده‌شده علامت بزن'
320 file_label: 'پرونده' 328 file_label: 'پرونده'
321 save_label: 'بارگذاری پرونده' 329 save_label: 'بارگذاری پرونده'
322 pocket: 330 pocket:
323 page_title: 'درون‌ریزی > Pocket' 331 page_title: 'درون‌ریزی > Pocket'
324 description: "این برنامه همهٔ داده‌های Pocket شما را درون‌ریزی می‌کند. سرویس Pocket اجازه نمی‌دهد که متن مقاله‌ها را درون‌ریزی کنیم، بنابراین wallabag متن مقاله‌ها را دوباره از اینترنت دریافت می‌کند." 332 description: "این برنامه همهٔ داده‌های Pocket شما را درون‌ریزی می‌کند. سرویس Pocket اجازه نمی‌دهد که متن مقاله‌ها را درون‌ریزی کنیم، بنابراین wallabag متن مقاله‌ها را دوباره از اینترنت دریافت می‌کند."
325 config_missing: 333 config_missing:
@@ -328,13 +336,31 @@ import:
328 user_message: 'مدیر سرور شما باید یک API Key برای Pocket تعریف کند.' 336 user_message: 'مدیر سرور شما باید یک API Key برای Pocket تعریف کند.'
329 authorize_message: 'شما می‌توانید داده‌هایتان را از حساب Pocket خود درون‌ریزی کنید. روی دکمهٔ زیر کلیک کنید و به برنامه اجازه دهید تا به getpocket.com وصل شود.' 337 authorize_message: 'شما می‌توانید داده‌هایتان را از حساب Pocket خود درون‌ریزی کنید. روی دکمهٔ زیر کلیک کنید و به برنامه اجازه دهید تا به getpocket.com وصل شود.'
330 connect_to_pocket: 'به Pocket وصل شو و داده‌ها را دریافت کن' 338 connect_to_pocket: 'به Pocket وصل شو و داده‌ها را دریافت کن'
331 wallabag_v1: 339 wallabag_v1:
332 page_title: 'درون‌ریزی > Wallabag v1' 340 page_title: 'درون‌ریزی > Wallabag v1'
333 description: 'این برنامه همهٔ داده‌های شما را در نسخهٔ ۱ wallabag درون‌ریزی می‌کند. در صفحهٔ تنظیمات، روی "JSON export" در بخش "Export your wallabag data" کلیک کنید. با این کار شما پرونده‌ای به شکل "wallabag-export-1-xxxx-xx-xx.json" دریافت خواهید کرد.' 341 description: 'این برنامه همهٔ داده‌های شما را در نسخهٔ ۱ wallabag درون‌ریزی می‌کند. در صفحهٔ تنظیمات، روی "JSON export" در بخش "Export your wallabag data" کلیک کنید. با این کار شما پرونده‌ای به شکل "wallabag-export-1-xxxx-xx-xx.json" دریافت خواهید کرد.'
334 how_to: 'لطفاً پرونده را انتخاب کنید و روی دکمهٔ زیر کلیک کنید تا بارگذاری و درون‌ریزی شود.' 342 how_to: 'لطفاً پرونده را انتخاب کنید و روی دکمهٔ زیر کلیک کنید تا بارگذاری و درون‌ریزی شود.'
335 wallabag_v2: 343 wallabag_v2:
336 page_title: 'درون‌ریزی > Wallabag v2' 344 page_title: 'درون‌ریزی > Wallabag v2'
337 description: 'این برنامه همهٔ داده‌های شما را در نسخهٔ ۲ wallabag درون‌ریزی می‌کند. به بخش «همهٔ مقاله‌ها» بروید و در بخش «برون‌ریزی» روی "JSON" کلیک کنید. با این کار شما پرونده‌ای به شکل "All articles.json" دریافت خواهید کرد.' 345 description: 'این برنامه همهٔ داده‌های شما را در نسخهٔ ۲ wallabag درون‌ریزی می‌کند. به بخش «همهٔ مقاله‌ها» بروید و در بخش «برون‌ریزی» روی "JSON" کلیک کنید. با این کار شما پرونده‌ای به شکل "All articles.json" دریافت خواهید کرد.'
346 readability:
347 page_title: 'درون‌ریزی > Readability'
348 # description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
349 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
350 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 firefox:
353 page_title: 'درون‌ریزی > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 chrome:
357 page_title: 'درون‌ریزی > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
360 instapaper:
361 page_title: 'درون‌ریزی > Instapaper'
362 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
363 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
338 364
339developer: 365developer:
340 # page_title: 'Developer' 366 # page_title: 'Developer'
@@ -400,10 +426,10 @@ flashes:
400 notice: 426 notice:
401 entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود' 427 entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود'
402 entry_saved: 'مقاله ذخیره شد' 428 entry_saved: 'مقاله ذخیره شد'
403 # entry_saved_failed: 'Failed to save entry' 429 # entry_saved_failed: 'Entry saved but fetching content failed'
404 entry_updated: 'مقاله به‌روز شد' 430 entry_updated: 'مقاله به‌روز شد'
405 entry_reloaded: 'مقاله به‌روز شد' 431 entry_reloaded: 'مقاله به‌روز شد'
406 entry_reload_failed: 'به‌روزرسانی مقاله شکست خورد' 432 # entry_reload_failed: 'Entry reloaded but fetching content failed'
407 entry_archived: 'مقاله بایگانی شد' 433 entry_archived: 'مقاله بایگانی شد'
408 entry_unarchived: 'مقاله از بایگانی درآمد' 434 entry_unarchived: 'مقاله از بایگانی درآمد'
409 entry_starred: 'مقاله برگزیده شد' 435 entry_starred: 'مقاله برگزیده شد'
@@ -417,6 +443,10 @@ flashes:
417 failed: 'درون‌ریزی شکست خورد. لطفاً دوباره تلاش کنید.' 443 failed: 'درون‌ریزی شکست خورد. لطفاً دوباره تلاش کنید.'
418 failed_on_file: 'خطا هنگام پردازش پروندهٔ ورودی. آیا پروندهٔ درون‌ریزی شده سالم است؟' 444 failed_on_file: 'خطا هنگام پردازش پروندهٔ ورودی. آیا پروندهٔ درون‌ریزی شده سالم است؟'
419 summary: 'گزارش درون‌ریزی: %imported% وارد شد, %skipped% از قبل ذخیره شده بود.' 445 summary: 'گزارش درون‌ریزی: %imported% وارد شد, %skipped% از قبل ذخیره شده بود.'
446 # summary_with_queue: 'Import summary: %queued% queued.'
447 error:
448 # redis_enabled_not_installed: Redis is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check Redis configuration.
449 # rabbit_enabled_not_installed: RabbitMQ is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check RabbitMQ configuration.
420 developer: 450 developer:
421 notice: 451 notice:
422 # client_created: 'New client created.' 452 # client_created: 'New client created.'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
index 25d9ec59..b70ca64d 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
@@ -45,9 +45,9 @@ footer:
45 social: 'Social' 45 social: 'Social'
46 powered_by: 'propulsé par' 46 powered_by: 'propulsé par'
47 about: 'À propos' 47 about: 'À propos'
48 page_title: 'Configuration'
49 48
50config: 49config:
50 page_title: 'Configuration'
51 tab_menu: 51 tab_menu:
52 settings: 'Paramètres' 52 settings: 'Paramètres'
53 rss: 'RSS' 53 rss: 'RSS'
@@ -68,6 +68,7 @@ config:
68 200_word: 'Je lis environ 200 mots par minute' 68 200_word: 'Je lis environ 200 mots par minute'
69 300_word: 'Je lis environ 300 mots par minute' 69 300_word: 'Je lis environ 300 mots par minute'
70 400_word: 'Je lis environ 400 mots par minute' 70 400_word: 'Je lis environ 400 mots par minute'
71 pocket_consumer_key_label: Clé d'authentification Pocket pour importer les données
71 form_rss: 72 form_rss:
72 description: "Les flux RSS fournis par wallabag vous permettent de lire vos articles sauvegardés dans votre lecteur de flux préféré. Pour pouvoir les utiliser, vous devez d'abord créer un jeton." 73 description: "Les flux RSS fournis par wallabag vous permettent de lire vos articles sauvegardés dans votre lecteur de flux préféré. Pour pouvoir les utiliser, vous devez d'abord créer un jeton."
73 token_label: 'Jeton RSS' 74 token_label: 'Jeton RSS'
@@ -139,11 +140,14 @@ entry:
139 starred: 'Articles favoris' 140 starred: 'Articles favoris'
140 archived: 'Articles lus' 141 archived: 'Articles lus'
141 filtered: 'Articles filtrés' 142 filtered: 'Articles filtrés'
143 filtered_tags: 'Articles filtrés par tags'
144 untagged: 'Article sans tag'
142 list: 145 list:
143 number_on_the_page: "{0} Il n'y a pas d'articles.|{1} Il y a un article.|]1,Inf[ Il y a %count% articles." 146 number_on_the_page: "{0} Il n'y a pas d'articles.|{1} Il y a un article.|]1,Inf[ Il y a %count% articles."
144 reading_time: 'durée de lecture' 147 reading_time: 'durée de lecture'
145 reading_time_minutes: 'durée de lecture: %readingTime% min' 148 reading_time_minutes: 'durée de lecture: %readingTime% min'
146 reading_time_less_one_minute: 'durée de lecture: <small class="inferieur">&lt;</small> 1 min' 149 reading_time_less_one_minute: 'durée de lecture: <small class="inferieur">&lt;</small> 1 min'
150 number_of_tags: '{1}et un autre tag|]1,Inf[et %count% autres tags'
147 reading_time_minutes_short: '%readingTime% min' 151 reading_time_minutes_short: '%readingTime% min'
148 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min' 152 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
149 original_article: 'original' 153 original_article: 'original'
@@ -185,6 +189,8 @@ entry:
185 add_a_tag: 'Ajouter un tag' 189 add_a_tag: 'Ajouter un tag'
186 share_content: 'Partager' 190 share_content: 'Partager'
187 share_email_label: 'Email' 191 share_email_label: 'Email'
192 public_link: 'Lien public'
193 delete_public_link: 'Supprimer lien public'
188 download: 'Télécharger' 194 download: 'Télécharger'
189 print: 'Imprimer' 195 print: 'Imprimer'
190 problem: 196 problem:
@@ -287,6 +293,7 @@ quickstart:
287 pocket: 'Migrer depuis Pocket' 293 pocket: 'Migrer depuis Pocket'
288 wallabag_v1: 'Migrer depuis wallabag v1' 294 wallabag_v1: 'Migrer depuis wallabag v1'
289 wallabag_v2: 'Migrer depuis wallabag v2' 295 wallabag_v2: 'Migrer depuis wallabag v2'
296 readability: 'Migrer depuis Readability'
290 developer: 297 developer:
291 title: 'Pour les développeurs' 298 title: 'Pour les développeurs'
292 create_application: 'Créer votre application tierce' 299 create_application: 'Créer votre application tierce'
@@ -308,6 +315,7 @@ tag:
308 page_title: 'Tags' 315 page_title: 'Tags'
309 list: 316 list:
310 number_on_the_page: "{0} Il n'y a pas de tag.|{1} Il y a un tag.|]1,Inf[ Il y a %count% tags." 317 number_on_the_page: "{0} Il n'y a pas de tag.|{1} Il y a un tag.|]1,Inf[ Il y a %count% tags."
318 see_untagged_entries: 'Voir les articles sans tag'
311 319
312import: 320import:
313 page_title: 'Importer' 321 page_title: 'Importer'
@@ -335,6 +343,24 @@ import:
335 wallabag_v2: 343 wallabag_v2:
336 page_title: 'Importer > Wallabag v2' 344 page_title: 'Importer > Wallabag v2'
337 description: "Cet outil va importer tous vos articles d'une autre instance de wallabag v2. Allez dans tous vos articles, puis, sur la barre latérale, cliquez sur \"JSON\". Vous allez récupérer un fichier \"All articles.json\"" 345 description: "Cet outil va importer tous vos articles d'une autre instance de wallabag v2. Allez dans tous vos articles, puis, sur la barre latérale, cliquez sur \"JSON\". Vous allez récupérer un fichier \"All articles.json\""
346 readability:
347 page_title: 'Importer > Readability'
348 description: 'Cet outil va importer toutes vos données de Readability. Sur la page des outils (https://www.readability.com/tools/), cliquez sur "Export your data" dans la section "Data Export". Vous allez recevoir un email avec un lien pour télécharger le json.'
349 how_to: "Choisissez le fichier de votre export Readability et cliquez sur le bouton ci-dessous pour l'importer."
350 worker:
351 enabled: "Les imports sont asynchrones. Une fois l'import commencé un worker externe traitera les messages un par un. Le service activé est :"
352 firefox:
353 page_title: 'Import > Firefox'
354 description: "Cet outil va vous permettre d'importer tous vos marques-pages de Firefox. <p>Pour Firefox, ouvrez le panneau des marques-pages (Ctrl+Maj+O), puis dans « Importation et sauvegarde », choisissez « Sauvegarde... ». Vous allez récupérer un fichier .json. </p>"
355 how_to: "Choisissez le fichier de sauvegarde de vos marques-page et cliquez sur le bouton pour l'importer. Soyez avertis que le processus peut prendre un temps assez long car tous les articles doivent être récupérés en ligne."
356 chrome:
357 page_title: 'Import > Chrome'
358 description: "Cet outil va vous permettre d'importer tous vos marques-pages de Google Chrome/Chromium. Pour Google Chrome, la situation du fichier dépend de votre système d'exploitation : <ul><li>Sur GNU/Linux, allez dans le répertoire <code>~/.config/google-chrome/Default/</code></li><li>Sous Windows, il devrait se trouver à <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>Sur OS X, il devrait se trouver dans le fichier <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Une fois que vous y êtes, copiez le fichier Bookmarks à un endroit où vous le retrouverez.<em><br>Notez que si vous utilisez Chromium à la place de Chrome, vous devez corriger les chemins en conséquence.</em></p>"
359 how_to: "Choisissez le fichier de sauvegarde de vos marques-page et cliquez sur le bouton pour l'importer. Soyez avertis que le processus peut prendre un temps assez long car tous les articles doivent être récupérés en ligne."
360 instapaper:
361 page_title: 'Import > Instapaper'
362 description: 'Sur la page des paramètres (`https://www.instapaper.com/user<https://www.instapaper.com/user>`_), cliquez sur "Download .CSV file" dans la section "Export". Un fichier CSV se téléchargera ("instapaper-export.csv").'
363 how_to: "Choisissez le fichier de votre export Instapaper et cliquez sur le bouton ci-dessous pour l'importer."
338 364
339developer: 365developer:
340 page_title: 'Développeur' 366 page_title: 'Développeur'
@@ -345,7 +371,7 @@ developer:
345 list_methods: "Lister toutes les méthodes de l'API" 371 list_methods: "Lister toutes les méthodes de l'API"
346 clients: 372 clients:
347 title: 'Clients' 373 title: 'Clients'
348 create_new: 'Créer une nouveau client' 374 create_new: 'Créer un nouveau client'
349 existing_clients: 375 existing_clients:
350 title: 'Les clients existants' 376 title: 'Les clients existants'
351 field_id: 'ID Client' 377 field_id: 'ID Client'
@@ -354,19 +380,21 @@ developer:
354 field_grant_types: 'Type de privilège accordé' 380 field_grant_types: 'Type de privilège accordé'
355 no_client: 'Aucun client pour le moment' 381 no_client: 'Aucun client pour le moment'
356 remove: 382 remove:
357 warn_message_1: 'Vous avez la possibilité de supprimer un client. Cette action est IRREVERSIBLE !' 383 warn_message_1: 'Vous avez la possibilité de supprimer le client %name%. Cette action est IRREVERSIBLE !'
358 warn_message_2: "Si vous supprimez un client, toutes les applications qui l'utilisaient ne fonctionneront plus avec votre compte wallabag." 384 warn_message_2: "Si vous supprimez le client %name%, toutes les applications qui l'utilisaient ne fonctionneront plus avec votre compte wallabag."
359 action: 'Supprimer ce client' 385 action: 'Supprimer le client %name%'
360 client: 386 client:
361 page_title: 'Développeur > Nouveau client' 387 page_title: 'Développeur > Nouveau client'
362 page_description: "Vous allez créer un nouveau client. Merci de remplir l'url de redirection vers votre application." 388 page_description: "Vous allez créer un nouveau client. Merci de remplir l'url de redirection vers votre application."
363 form: 389 form:
364 redirect_uris_label: 'URLs de redirection' 390 name_label: "Nom du client"
391 redirect_uris_label: 'URLs de redirection (optionnel)'
365 save_label: 'Créer un nouveau client' 392 save_label: 'Créer un nouveau client'
366 action_back: 'Retour' 393 action_back: 'Retour'
367 client_parameter: 394 client_parameter:
368 page_title: 'Développeur > Les paramètres de votre client' 395 page_title: 'Développeur > Les paramètres de votre client'
369 page_description: 'Voilà les paramètres de votre client' 396 page_description: 'Voilà les paramètres de votre client'
397 field_name: 'Nom du client'
370 field_id: 'ID Client' 398 field_id: 'ID Client'
371 field_secret: 'Clé secrète' 399 field_secret: 'Clé secrète'
372 back: 'Retour' 400 back: 'Retour'
@@ -400,10 +428,10 @@ flashes:
400 notice: 428 notice:
401 entry_already_saved: 'Article déjà sauvergardé le %date%' 429 entry_already_saved: 'Article déjà sauvergardé le %date%'
402 entry_saved: 'Article enregistré' 430 entry_saved: 'Article enregistré'
403 entry_saved_failed: "L'enregistrement a écho" 431 entry_saved_failed: 'Article enregistré mais impossible de récupérer le contenu'
404 entry_updated: 'Article mis à jour' 432 entry_updated: 'Article mis à jour'
405 entry_reloaded: 'Article rechargé' 433 entry_reloaded: 'Article rechargé'
406 entry_reload_failed: "Le rechargement de l'article a échoué" 434 entry_reload_failed: "Article mis à jour mais impossible de récupérer le contenu"
407 entry_archived: 'Article marqué comme lu' 435 entry_archived: 'Article marqué comme lu'
408 entry_unarchived: 'Article marqué comme non lu' 436 entry_unarchived: 'Article marqué comme non lu'
409 entry_starred: 'Article ajouté dans les favoris' 437 entry_starred: 'Article ajouté dans les favoris'
@@ -416,8 +444,12 @@ flashes:
416 notice: 444 notice:
417 failed: "L'import a échoué, veuillez ré-essayer" 445 failed: "L'import a échoué, veuillez ré-essayer"
418 failed_on_file: "Erreur lors du traitement de l'import. Vérifier votre fichier." 446 failed_on_file: "Erreur lors du traitement de l'import. Vérifier votre fichier."
419 summary: "Rapport d'import: %imported% importés, %skipped% déjà présent." 447 summary: "Rapport d'import: %imported% importés, %skipped% déjà présents."
448 summary_with_queue: "Rapport d'import: %queued% en cours de traitement."
449 error:
450 redis_enabled_not_installed: Redis est activé pour les imports asynchrones mais <u>impossible de s'y connecter</u>. Vérifier la configuration de Redis.
451 rabbit_enabled_not_installed: RabbitMQ est activé pour les imports asynchrones mais <u>impossible de s'y connecter</u>. Vérifier la configuration de RabbitMQ.
420 developer: 452 developer:
421 notice: 453 notice:
422 client_created: 'Nouveau client créé' 454 client_created: 'Nouveau client %name% créé'
423 client_deleted: 'Client supprimé' 455 client_deleted: 'Client %name% supprimé'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
index 231ba759..118098fe 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
@@ -68,6 +68,7 @@ config:
68 200_word: 'Leggo ~200 parole al minuto' 68 200_word: 'Leggo ~200 parole al minuto'
69 300_word: 'Leggo ~300 parole al minuto' 69 300_word: 'Leggo ~300 parole al minuto'
70 400_word: 'Leggo ~400 parole al minuto' 70 400_word: 'Leggo ~400 parole al minuto'
71 pocket_consumer_key_label: Consumer key per Pocket per importare i contenuti
71 form_rss: 72 form_rss:
72 description: 'I feed RSS generati da wallabag ti permettono di leggere i tuoi contenuti salvati con il tuo lettore di RSS preferito. Prima, devi generare un token.' 73 description: 'I feed RSS generati da wallabag ti permettono di leggere i tuoi contenuti salvati con il tuo lettore di RSS preferito. Prima, devi generare un token.'
73 token_label: 'RSS token' 74 token_label: 'RSS token'
@@ -139,11 +140,14 @@ entry:
139 starred: 'Contenuti preferiti' 140 starred: 'Contenuti preferiti'
140 archived: 'Contenuti archiviati' 141 archived: 'Contenuti archiviati'
141 filtered: 'Contenuti filtrati' 142 filtered: 'Contenuti filtrati'
143 # filtered_tags: 'Filtered by tags'
144 # untagged: 'Untagged entries'
142 list: 145 list:
143 number_on_the_page: "{0} Non ci sono contenuti.|{1} C'è un contenuto.|]1,Inf[ Ci sono %count% contenuti." 146 number_on_the_page: "{0} Non ci sono contenuti.|{1} C'è un contenuto.|]1,Inf[ Ci sono %count% contenuti."
144 reading_time: 'tempo di lettura stimato' 147 reading_time: 'tempo di lettura stimato'
145 reading_time_minutes: 'tempo di lettura stimato: %readingTime% min' 148 reading_time_minutes: 'tempo di lettura stimato: %readingTime% min'
146 reading_time_less_one_minute: 'tempo di lettura stimato: <small class="inferieur">&lt;</small> 1 min' 149 reading_time_less_one_minute: 'tempo di lettura stimato: <small class="inferieur">&lt;</small> 1 min'
150 # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
147 reading_time_minutes_short: '%readingTime% min' 151 reading_time_minutes_short: '%readingTime% min'
148 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min' 152 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
149 original_article: 'originale' 153 original_article: 'originale'
@@ -184,6 +188,8 @@ entry:
184 add_a_tag: 'Aggiungi un tag' 188 add_a_tag: 'Aggiungi un tag'
185 share_content: 'Condividi' 189 share_content: 'Condividi'
186 share_email_label: 'E-mail' 190 share_email_label: 'E-mail'
191 # public_link: 'public link'
192 # delete_public_link: 'delete public link'
187 download: 'Download' 193 download: 'Download'
188 print: 'Stampa' 194 print: 'Stampa'
189 problem: 195 problem:
@@ -286,6 +292,7 @@ quickstart:
286 pocket: 'Trasferisci da Pocket' 292 pocket: 'Trasferisci da Pocket'
287 wallabag_v1: 'Trasferisci da wallabag v1' 293 wallabag_v1: 'Trasferisci da wallabag v1'
288 wallabag_v2: 'Trasferisci da wallabag v2' 294 wallabag_v2: 'Trasferisci da wallabag v2'
295 readability: 'Trasferisci da Readability'
289 developer: 296 developer:
290 title: 'Sviluppatori' 297 title: 'Sviluppatori'
291 create_application: 'Crea la tua applicazione' 298 create_application: 'Crea la tua applicazione'
@@ -307,6 +314,7 @@ tag:
307 page_title: 'Tags' 314 page_title: 'Tags'
308 list: 315 list:
309 number_on_the_page: "{0} Non ci sono tag.|{1} C'è un tag.|]1,Inf[ ci sono %count% tag." 316 number_on_the_page: "{0} Non ci sono tag.|{1} C'è un tag.|]1,Inf[ ci sono %count% tag."
317 # see_untagged_entries: 'See untagged entries'
310 318
311import: 319import:
312 page_title: 'Importa' 320 page_title: 'Importa'
@@ -334,6 +342,24 @@ import:
334 wallabag_v2: 342 wallabag_v2:
335 page_title: 'Importa da > Wallabag v2' 343 page_title: 'Importa da > Wallabag v2'
336 description: 'Questo importatore copierà tutti i tuoi dati da un wallabag v2. Vai in "Tutti i contenuti", e, nella sidebar di esportazione, clicca su "JSON". Otterrai un file "Tutti i contenuti.json".' 344 description: 'Questo importatore copierà tutti i tuoi dati da un wallabag v2. Vai in "Tutti i contenuti", e, nella sidebar di esportazione, clicca su "JSON". Otterrai un file "Tutti i contenuti.json".'
345 readability:
346 page_title: 'Importa da > Readability'
347 # description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
348 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
349 worker:
350 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
351 firefox:
352 page_title: 'Importa da > Firefox'
353 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
354 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
355 chrome:
356 page_title: 'Importa da > Chrome'
357 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
358 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
359 instapaper:
360 page_title: 'Importa da > Instapaper'
361 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
362 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
337 363
338developer: 364developer:
339 page_title: 'Sviluppatori' 365 page_title: 'Sviluppatori'
@@ -399,10 +425,10 @@ flashes:
399 notice: 425 notice:
400 entry_already_saved: 'Contenuto già salvato in data %date%' 426 entry_already_saved: 'Contenuto già salvato in data %date%'
401 entry_saved: 'Contenuto salvato' 427 entry_saved: 'Contenuto salvato'
402 # entry_saved_failed: 'Failed to save entry' 428 # entry_saved_failed: 'Entry saved but fetching content failed'
403 entry_updated: 'Contenuto aggiornato' 429 entry_updated: 'Contenuto aggiornato'
404 entry_reloaded: 'Contenuto ricaricato' 430 entry_reloaded: 'Contenuto ricaricato'
405 entry_reload_failed: 'Errore nel ricaricamento del contenuto' 431 # entry_reload_failed: 'Entry reloaded but fetching content failed'
406 entry_archived: 'Contenuto archiviato' 432 entry_archived: 'Contenuto archiviato'
407 entry_unarchived: 'Contenuto dis-archiviato' 433 entry_unarchived: 'Contenuto dis-archiviato'
408 entry_starred: 'Contenuto segnato come preferito' 434 entry_starred: 'Contenuto segnato come preferito'
@@ -416,6 +442,10 @@ flashes:
416 failed: 'Importazione fallita, riprova.' 442 failed: 'Importazione fallita, riprova.'
417 failed_on_file: 'Errore durante la processazione dei dati da importare. Verifica il tuo file di import.' 443 failed_on_file: 'Errore durante la processazione dei dati da importare. Verifica il tuo file di import.'
418 summary: 'Sommario di importazione: %imported% importati, %skipped% già salvati.' 444 summary: 'Sommario di importazione: %imported% importati, %skipped% già salvati.'
445 # summary_with_queue: 'Import summary: %queued% queued.'
446 error:
447 # redis_enabled_not_installed: Redis is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check Redis configuration.
448 # rabbit_enabled_not_installed: RabbitMQ is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check RabbitMQ configuration.
419 developer: 449 developer:
420 notice: 450 notice:
421 client_created: 'Nuovo client creato.' 451 client_created: 'Nuovo client creato.'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
index 6e71b850..93467dac 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
@@ -41,7 +41,7 @@ menu:
41 41
42footer: 42footer:
43 wallabag: 43 wallabag:
44 elsewhere: 'Emportatz wallabag amb vosaultres' 44 elsewhere: 'Emportatz wallabag amb vosautres'
45 social: 'Social' 45 social: 'Social'
46 powered_by: 'propulsat per' 46 powered_by: 'propulsat per'
47 about: 'A prepaus' 47 about: 'A prepaus'
@@ -68,6 +68,7 @@ config:
68 200_word: "Legissi a l'entorn de 200 mots per minuta" 68 200_word: "Legissi a l'entorn de 200 mots per minuta"
69 300_word: "Legissi a l'entorn de 300 mots per minuta" 69 300_word: "Legissi a l'entorn de 300 mots per minuta"
70 400_word: "Legissi a l'entorn de 400 mots per minuta" 70 400_word: "Legissi a l'entorn de 400 mots per minuta"
71 pocket_consumer_key_label: Clau d'autentificacion Pocket per importar las donadas
71 form_rss: 72 form_rss:
72 description: "Los fluxes RSS fornits per wallabag vos permeton de legir vòstres articles salvagardats dins vòstre lector de fluxes preferit. Per los poder emplegar, vos cal, d'en primièr crear un geton." 73 description: "Los fluxes RSS fornits per wallabag vos permeton de legir vòstres articles salvagardats dins vòstre lector de fluxes preferit. Per los poder emplegar, vos cal, d'en primièr crear un geton."
73 token_label: 'Geton RSS' 74 token_label: 'Geton RSS'
@@ -139,11 +140,14 @@ entry:
139 starred: 'Articles favorits' 140 starred: 'Articles favorits'
140 archived: 'Articles legits' 141 archived: 'Articles legits'
141 filtered: 'Articles filtrats' 142 filtered: 'Articles filtrats'
143 filtered_tags: 'Filtats per etiquetas'
144 untagged: 'Articles sens etiqueta'
142 list: 145 list:
143 number_on_the_page: "{0} I a pas cap d'article.|{1} I a un article.|]1,Inf[ I a %count% articles." 146 number_on_the_page: "{0} I a pas cap d'article.|{1} I a un article.|]1,Inf[ I a %count% articles."
144 reading_time: 'durada de lectura' 147 reading_time: 'durada de lectura'
145 reading_time_minutes: 'durada de lectura : %readingTime% min' 148 reading_time_minutes: 'durada de lectura : %readingTime% min'
146 reading_time_less_one_minute: 'durada de lectura : <small class="inferieur">&lt;</small> 1 min' 149 reading_time_less_one_minute: 'durada de lectura : <small class="inferieur">&lt;</small> 1 min'
150 number_of_tags: '{1}e una autra etiqueta|]1,Inf[e %count% autras etiquetas'
147 reading_time_minutes_short: '%readingTime% min' 151 reading_time_minutes_short: '%readingTime% min'
148 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min' 152 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
149 original_article: 'original' 153 original_article: 'original'
@@ -185,6 +189,8 @@ entry:
185 add_a_tag: 'Ajustar una etiqueta' 189 add_a_tag: 'Ajustar una etiqueta'
186 share_content: 'Partatjar' 190 share_content: 'Partatjar'
187 share_email_label: 'Corrièl' 191 share_email_label: 'Corrièl'
192 public_link: 'ligam public'
193 delete_public_link: 'suprimir lo ligam public'
188 download: 'Telecargar' 194 download: 'Telecargar'
189 print: 'Imprimir' 195 print: 'Imprimir'
190 problem: 196 problem:
@@ -287,6 +293,7 @@ quickstart:
287 pocket: 'Migrar dempuèi Pocket' 293 pocket: 'Migrar dempuèi Pocket'
288 wallabag_v1: 'Migrar dempuèi wallabag v1' 294 wallabag_v1: 'Migrar dempuèi wallabag v1'
289 wallabag_v2: 'Migrar dempuèi wallabag v2' 295 wallabag_v2: 'Migrar dempuèi wallabag v2'
296 readability: 'Migrar dempuèi Readability'
290 developer: 297 developer:
291 title: 'Pels desvolopadors' 298 title: 'Pels desvolopadors'
292 create_application: 'Crear vòstra aplicacion tèrça' 299 create_application: 'Crear vòstra aplicacion tèrça'
@@ -308,6 +315,7 @@ tag:
308 page_title: 'Etiquetas' 315 page_title: 'Etiquetas'
309 list: 316 list:
310 number_on_the_page: "{0} I a pas cap d'etiquetas.|{1} I a una etiqueta.|]1,Inf[ I a %count% etiquetas." 317 number_on_the_page: "{0} I a pas cap d'etiquetas.|{1} I a una etiqueta.|]1,Inf[ I a %count% etiquetas."
318 see_untagged_entries: "Afichar las entradas sens pas cap d'etiquetas"
311 319
312import: 320import:
313 page_title: 'Importar' 321 page_title: 'Importar'
@@ -320,7 +328,7 @@ import:
320 file_label: 'Fichièr' 328 file_label: 'Fichièr'
321 save_label: 'Importar lo fichièr' 329 save_label: 'Importar lo fichièr'
322 pocket: 330 pocket:
323 page_title: 'Importer > Pocket' 331 page_title: 'Importar > Pocket'
324 description: "Aquesta aisina importarà totas vòstras donadas de Pocket. Pocket nos permet pas de recuperar lo contengut dempuèi lor servidor, alara wallabag deu tornar fulhetar cada article per recuperar son contengut." 332 description: "Aquesta aisina importarà totas vòstras donadas de Pocket. Pocket nos permet pas de recuperar lo contengut dempuèi lor servidor, alara wallabag deu tornar fulhetar cada article per recuperar son contengut."
325 config_missing: 333 config_missing:
326 description: "L'importacion dempuèi Pocket es pas configurada." 334 description: "L'importacion dempuèi Pocket es pas configurada."
@@ -329,12 +337,30 @@ import:
329 authorize_message: "Podètz importar vòstras donadas dempuèi vòstre compte Pocket. Vos cal pas que clicar sul boton çai-jos e autorizar wallabag a se connectar a getpocket.com." 337 authorize_message: "Podètz importar vòstras donadas dempuèi vòstre compte Pocket. Vos cal pas que clicar sul boton çai-jos e autorizar wallabag a se connectar a getpocket.com."
330 connect_to_pocket: 'Se connectar a Pocket e importar las donadas' 338 connect_to_pocket: 'Se connectar a Pocket e importar las donadas'
331 wallabag_v1: 339 wallabag_v1:
332 page_title: 'Importer > Wallabag v1' 340 page_title: 'Importar > Wallabag v1'
333 description: 'Aquesta aisina importarà totas vòstras donadas de wallabag v1. Sus vòstre pagina de configuracion de wallabag v1, clicatz sus \"Export JSON\" dins la seccion \"Exportar vòstras donadas de wallabag\". Traparatz un fichièr \"wallabag-export-1-xxxx-xx-xx.json\".' 341 description: 'Aquesta aisina importarà totas vòstras donadas de wallabag v1. Sus vòstre pagina de configuracion de wallabag v1, clicatz sus \"Export JSON\" dins la seccion \"Exportar vòstras donadas de wallabag\". Traparatz un fichièr \"wallabag-export-1-xxxx-xx-xx.json\".'
334 how_to: "Causissètz lo fichièr de vòstra exportacion wallabag v1 e clicatz sul boton çai-jos per l'importar." 342 how_to: "Causissètz lo fichièr de vòstra exportacion wallabag v1 e clicatz sul boton çai-jos per l'importar."
335 wallabag_v2: 343 wallabag_v2:
336 page_title: 'Importer > Wallabag v2' 344 page_title: 'Importar > Wallabag v2'
337 description: "Aquesta aisina importarà totas vòstras donadas d'una instància mai de wallabag v2. Anatz dins totes vòstres articles, puèi, sus la barra laterala, clicatz sus \"JSON\". Traparatz un fichièr \"All articles.json\"" 345 description: "Aquesta aisina importarà totas vòstras donadas d'una instància mai de wallabag v2. Anatz dins totes vòstres articles, puèi, sus la barra laterala, clicatz sus \"JSON\". Traparatz un fichièr \"All articles.json\""
346 readability:
347 page_title: 'Importer > Readability'
348 description: "Aquesta aisina importarà totas vòstres articles de Readability. Sus la pagina de l'aisina (https://www.readability.com/tools/), clicatz sus \"Export your data\" dins la seccion \"Data Export\". Recebretz un corrièl per telecargar un json (qu'acaba pas amb un .json de fach)."
349 how_to: "Mercés de seleccionar vòstre Readability fichièr e de clicar sul boton dejós per lo telecargar e l'importar."
350 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 firefox:
353 page_title: 'Importer > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 chrome:
357 page_title: 'Importer > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
360 instapaper:
361 page_title: 'Importer > Instapaper'
362 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
363 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
338 364
339developer: 365developer:
340 page_title: 'Desvolopador' 366 page_title: 'Desvolopador'
@@ -342,7 +368,7 @@ developer:
342 documentation: 'Documentacion' 368 documentation: 'Documentacion'
343 how_to_first_app: 'Cossí crear vòstra primièra aplicacion' 369 how_to_first_app: 'Cossí crear vòstra primièra aplicacion'
344 full_documentation: "Veire la documentacion completa de l'API" 370 full_documentation: "Veire la documentacion completa de l'API"
345 # list_methods: 'List API methods' 371 list_methods: "Lista dels metòdes de l'API"
346 clients: 372 clients:
347 title: 'Clients' 373 title: 'Clients'
348 create_new: 'Crear un novèl client' 374 create_new: 'Crear un novèl client'
@@ -374,7 +400,7 @@ developer:
374 howto: 400 howto:
375 page_title: 'Desvolopador > Cossí crear ma primièra aplicacion' 401 page_title: 'Desvolopador > Cossí crear ma primièra aplicacion'
376 description: 402 description:
377 paragraph_1: "Las comandas seguentas utilizan la <a href=\"https://github.com/jkbrzt/httpie\">libraria HTTPie</a>. Asseguratz-vos que siasqueòu installadas abans de l'utilizar." 403 paragraph_1: "Las comandas seguentas utilizan la <a href=\"https://github.com/jkbrzt/httpie\">bibliotèca HTTPie</a>. Asseguratz-vos que siasqueòu installadas abans de l'utilizar."
378 paragraph_2: "Vos cal un geton per escambiar entre vòstra aplicacion e l'API de wallabar." 404 paragraph_2: "Vos cal un geton per escambiar entre vòstra aplicacion e l'API de wallabar."
379 paragraph_3: 'Per crear un geton, vos cal crear <a href=\"%link%\">crear un novèl client</a>.' 405 paragraph_3: 'Per crear un geton, vos cal crear <a href=\"%link%\">crear un novèl client</a>.'
380 paragraph_4: 'Ara creatz un geton (remplaçar client_id, client_secret, username e password amb las bonas valors) :' 406 paragraph_4: 'Ara creatz un geton (remplaçar client_id, client_secret, username e password amb las bonas valors) :'
@@ -400,10 +426,10 @@ flashes:
400 notice: 426 notice:
401 entry_already_saved: 'Article ja salvargardat lo %date%' 427 entry_already_saved: 'Article ja salvargardat lo %date%'
402 entry_saved: 'Article enregistrat' 428 entry_saved: 'Article enregistrat'
403 # entry_saved_failed: 'Failed to save entry' 429 # entry_saved_failed: 'Entry saved but fetching content failed'
404 entry_updated: 'Article mes a jorn' 430 entry_updated: 'Article mes a jorn'
405 entry_reloaded: 'Article recargat' 431 entry_reloaded: 'Article recargat'
406 entry_reload_failed: "Fracàs de l'actualizacion de l'article" 432 # entry_reload_failed: 'Entry reloaded but fetching content failed'
407 entry_archived: 'Article marcat coma legit' 433 entry_archived: 'Article marcat coma legit'
408 entry_unarchived: 'Article marcat coma pas legit' 434 entry_unarchived: 'Article marcat coma pas legit'
409 entry_starred: 'Article apondut dins los favorits' 435 entry_starred: 'Article apondut dins los favorits'
@@ -417,6 +443,10 @@ flashes:
417 failed: "L'importacion a fracassat, mercés de tornar ensajar" 443 failed: "L'importacion a fracassat, mercés de tornar ensajar"
418 failed_on_file: "Errorr pendent du tractament de l'import. Mercés de verificar vòstre fichièr." 444 failed_on_file: "Errorr pendent du tractament de l'import. Mercés de verificar vòstre fichièr."
419 summary: "Rapòrt d'import: %imported% importats, %skipped% ja presents." 445 summary: "Rapòrt d'import: %imported% importats, %skipped% ja presents."
446 # summary_with_queue: 'Import summary: %queued% queued.'
447 error:
448 # redis_enabled_not_installed: Redis is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check Redis configuration.
449 # rabbit_enabled_not_installed: RabbitMQ is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check RabbitMQ configuration.
420 developer: 450 developer:
421 notice: 451 notice:
422 client_created: 'Novèl client creat' 452 client_created: 'Novèl client creat'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
index 2db26cf1..27507a81 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
@@ -68,6 +68,7 @@ config:
68 200_word: 'Czytam ~200 słów na minutę' 68 200_word: 'Czytam ~200 słów na minutę'
69 300_word: 'Czytam ~300 słów na minutę' 69 300_word: 'Czytam ~300 słów na minutę'
70 400_word: 'Czytam ~400 słów na minutę' 70 400_word: 'Czytam ~400 słów na minutę'
71 pocket_consumer_key_label: 'Klucz klienta Pocket do importu zawartości'
71 form_rss: 72 form_rss:
72 description: 'Kanały RSS prowadzone przez wallabag pozwalają Ci na czytanie twoich zapisanych artykułów w twoium ulubionym czytniku RSS. Musisz najpierw wynegenerować tokena.‌' 73 description: 'Kanały RSS prowadzone przez wallabag pozwalają Ci na czytanie twoich zapisanych artykułów w twoium ulubionym czytniku RSS. Musisz najpierw wynegenerować tokena.‌'
73 token_label: 'Token RSS' 74 token_label: 'Token RSS'
@@ -139,11 +140,14 @@ entry:
139 starred: 'Wpisy oznaczone gwiazdką' 140 starred: 'Wpisy oznaczone gwiazdką'
140 archived: 'Zarchiwizowane wpisy' 141 archived: 'Zarchiwizowane wpisy'
141 filtered: 'Odfiltrowane wpisy' 142 filtered: 'Odfiltrowane wpisy'
143 filtered_tags: 'Filtrowane po tagach'
144 untagged: 'Odtaguj wpisy'
142 list: 145 list:
143 number_on_the_page: '{0} Nie ma wpisów.|{1} Jest jeden wpis.|]1,Inf[ Są %count% wpisy.' 146 number_on_the_page: '{0} Nie ma wpisów.|{1} Jest jeden wpis.|]1,Inf[ Są %count% wpisy.'
144 reading_time: 'szacunkowy czas czytania' 147 reading_time: 'szacunkowy czas czytania'
145 reading_time_minutes: 'szacunkowy czas czytania: %readingTime% min' 148 reading_time_minutes: 'szacunkowy czas czytania: %readingTime% min'
146 reading_time_less_one_minute: 'szacunkowy czas czytania: <small class="inferieur">&lt;</small> 1 min' 149 reading_time_less_one_minute: 'szacunkowy czas czytania: <small class="inferieur">&lt;</small> 1 min'
150 number_of_tags: '{1} i inny tag|]1,Inf[i %count% innych tagów'
147 reading_time_minutes_short: '%readingTime% min' 151 reading_time_minutes_short: '%readingTime% min'
148 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min' 152 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
149 original_article: 'oryginał' 153 original_article: 'oryginał'
@@ -185,6 +189,8 @@ entry:
185 add_a_tag: 'Dodaj tag' 189 add_a_tag: 'Dodaj tag'
186 share_content: 'Udostępnij' 190 share_content: 'Udostępnij'
187 share_email_label: 'Adres email' 191 share_email_label: 'Adres email'
192 public_link: 'Publiczny link'
193 delete_public_link: 'Usuń publiczny link'
188 download: 'Pobierz' 194 download: 'Pobierz'
189 print: 'Drukuj' 195 print: 'Drukuj'
190 problem: 196 problem:
@@ -273,7 +279,7 @@ quickstart:
273 title: 'Administracja' 279 title: 'Administracja'
274 description: 'Jako administrator wallabag, możesz:' 280 description: 'Jako administrator wallabag, możesz:'
275 new_user: 'Tworzyć nowego użytkownika' 281 new_user: 'Tworzyć nowego użytkownika'
276 analytics: 'Configure analytics' 282 analytics: 'Konfigurować analityki'
277 sharing: 'Włączyć pewne parametry dotyczące udostępniania artykułów' 283 sharing: 'Włączyć pewne parametry dotyczące udostępniania artykułów'
278 export: 'Skonfigurować eksport' 284 export: 'Skonfigurować eksport'
279 import: 'Skonfigurować import' 285 import: 'Skonfigurować import'
@@ -287,6 +293,7 @@ quickstart:
287 pocket: 'Migruj z Pocket' 293 pocket: 'Migruj z Pocket'
288 wallabag_v1: 'Migruj z wallabag v1' 294 wallabag_v1: 'Migruj z wallabag v1'
289 wallabag_v2: 'Migruj z wallabag v2' 295 wallabag_v2: 'Migruj z wallabag v2'
296 readability: 'Migruj z Readability'
290 developer: 297 developer:
291 title: 'Deweloperzy' 298 title: 'Deweloperzy'
292 create_application: 'Stwórz swoją aplikację' 299 create_application: 'Stwórz swoją aplikację'
@@ -308,6 +315,7 @@ tag:
308 page_title: 'Tagi' 315 page_title: 'Tagi'
309 list: 316 list:
310 number_on_the_page: '{0} Nie ma tagów.|{1} Jest jeden tag.|]1,Inf[ Są %count% tagi.' 317 number_on_the_page: '{0} Nie ma tagów.|{1} Jest jeden tag.|]1,Inf[ Są %count% tagi.'
318 see_untagged_entries: 'Zobacz nieotagowane wpisy'
311 319
312import: 320import:
313 page_title: 'Import' 321 page_title: 'Import'
@@ -335,6 +343,24 @@ import:
335 wallabag_v2: 343 wallabag_v2:
336 page_title: 'Import > Wallabag v2' 344 page_title: 'Import > Wallabag v2'
337 description: 'Ten importer, zaimportuje wszystkie twoje artykułu z wallabag v2. Idź do wszystkich artykułów, a następnie na panelu exportu kliknij na "JSON". Otrzymasz plik "All articles.json".' 345 description: 'Ten importer, zaimportuje wszystkie twoje artykułu z wallabag v2. Idź do wszystkich artykułów, a następnie na panelu exportu kliknij na "JSON". Otrzymasz plik "All articles.json".'
346 readability:
347 page_title: 'Import > Readability'
348 description: 'Ten importer, zaimportuje wszystkie twoje artykuły z Readability. Na stronie narzędzi (https://www.readability.com/tools/), kliknij na "Export your data" w sekcji "Data Export". Otrzymach email z plikiem JSON (plik nie będzie zawierał rozszerzenia .json).'
349 how_to: 'Wybierz swój plik eksportu z Readability i kliknij poniższy przycisk, aby go załadować.'
350 worker:
351 enabled: "Import jest wykonywany asynchronicznie. Od momentu rozpoczęcia importu, zewnętrzna usługa może zajmować się na raz tylko jednym zadaniem. Bieżącą usługą jest:"
352 firefox:
353 page_title: 'Import > Firefox'
354 description: "Ten importer zaimportuje wszystkie twoje zakładki z Firefoksa. <p>Dla Firefoksa, idź do twoich zakładek (Ctrl+Shift+O), następnie w \"Import i kopie zapasowe\", wybierz \"Utwórz kopię zapasową...\". Uzyskasz plik .json."
355 how_to: "Wybierz swój plik z zakładkami i naciśnij poniższy przycisk, aby je zaimportować. Może to zająć dłuższą chwilę, zanim wszystkie artykuły zostaną przeniesione."
356 chrome:
357 page_title: 'Import > Chrome'
358 description: "Ten importer zaimportuje wszystkie twoje zakładki z Chrome. Lokalizacja pliku jest zależna od twojego systemy operacyjnego : <ul><li>Pod Linuksem, idź do katalogu <code>~/.config/chromium/Default/</code></li><li>Pod Windowsem, powinien się on znajdować w <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>Pod OS X, powinien się on znajdować w <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Po odnalezieniu pliku, skopiuj go w łatwo dostęne miejsce.<em><br>Jeżeli używasz Chromium zamiast Chrome, będziesz musiał odpowiednio poprawić ścieżkę dostępu.</em></p>"
359 how_to: "Wybierz swój plik z zakładkami i naciśnij poniższy przycisk, aby je zaimportować. Może to zająć dłuższą chwilę, zanim wszystkie artykuły zostaną przeniesione."
360 instapaper:
361 page_title: 'Import > Instapaper'
362 description: 'Ten importer, zaimportuje wszystkie twoje artykuły z Instapaper. W ustawieniach (https://www.instapaper.com/user), kliknij na "Download .CSV file" w sekcji "Export". Otrzymasz plik CSV.'
363 how_to: 'Wybierz swój plik eksportu z Instapaper i kliknij poniższy przycisk, aby go załadować.'
338 364
339developer: 365developer:
340 page_title: 'Deweloper' 366 page_title: 'Deweloper'
@@ -342,13 +368,13 @@ developer:
342 documentation: 'Dokumentacja' 368 documentation: 'Dokumentacja'
343 how_to_first_app: 'Jak stworzyć moją pierwszą aplikację' 369 how_to_first_app: 'Jak stworzyć moją pierwszą aplikację'
344 full_documentation: 'Pokaż pełne API' 370 full_documentation: 'Pokaż pełne API'
345 # list_methods: 'List API methods' 371 list_methods: 'Lista metod API'
346 clients: 372 clients:
347 title: 'Klienci' 373 title: 'Klienci'
348 create_new: 'Utwórz nowego klienta' 374 create_new: 'Utwórz nowego klienta'
349 existing_clients: 375 existing_clients:
350 title: 'Istniejący klienci' 376 title: 'Istniejący klienci'
351 field_id: 'Client ID' 377 field_id: 'ID klienta'
352 field_secret: 'Client secret' 378 field_secret: 'Client secret'
353 field_uris: 'Przekieruj URIs' 379 field_uris: 'Przekieruj URIs'
354 field_grant_types: 'Przyznaj pozwolenie' 380 field_grant_types: 'Przyznaj pozwolenie'
@@ -400,10 +426,10 @@ flashes:
400 notice: 426 notice:
401 entry_already_saved: 'Wpis już został dodany %date%' 427 entry_already_saved: 'Wpis już został dodany %date%'
402 entry_saved: 'Wpis zapisany' 428 entry_saved: 'Wpis zapisany'
403 # entry_saved_failed: 'Failed to save entry' 429 entry_saved_failed: 'Wpis zapisany, ale wystąpił ad pobierania treści'
404 entry_updated: 'Wpis zaktualizowany' 430 entry_updated: 'Wpis zaktualizowany'
405 entry_reloaded: 'Wpis ponownie załadowany' 431 entry_reloaded: 'Wpis ponownie załadowany'
406 entry_reload_failed: 'Błąd ponownego załadowania' 432 entry_reload_failed: 'Wpis ponownie załadowany, ale wystąpił bład pobierania treści'
407 entry_archived: 'Wpis dodany do archiwum' 433 entry_archived: 'Wpis dodany do archiwum'
408 entry_unarchived: 'Wpis usunięty z archiwum' 434 entry_unarchived: 'Wpis usunięty z archiwum'
409 entry_starred: 'Wpis oznaczony gwiazdką' 435 entry_starred: 'Wpis oznaczony gwiazdką'
@@ -417,6 +443,10 @@ flashes:
417 failed: 'Nieudany import, prosimy spróbować ponownie.' 443 failed: 'Nieudany import, prosimy spróbować ponownie.'
418 failed_on_file: 'Błąd podczas ptrzetwarzania pliku. Sprawdż swój importowany plik.' 444 failed_on_file: 'Błąd podczas ptrzetwarzania pliku. Sprawdż swój importowany plik.'
419 summary: 'Podsumowanie importu: %imported% zaimportowane, %skipped% już zapisane.' 445 summary: 'Podsumowanie importu: %imported% zaimportowane, %skipped% już zapisane.'
446 summary_with_queue: 'Podsumowanie importu: %queued% zakolejkowane.'
447 error:
448 redis_enabled_not_installed: 'Redis jest włączony dla obsługi importu asynchronicznego, ale <u>nie możemy się z nim połączyć</u>. Sprawdź konfigurację Redisa.'
449 rabbit_enabled_not_installed: 'RabbitMQ jest włączony dla obsługi importu asynchronicznego, ale <u>nie możemy się z nim połączyć</u>. Sprawdź konfigurację RabbitMQ.'
420 developer: 450 developer:
421 notice: 451 notice:
422 client_created: 'Nowy klient utworzony.' 452 client_created: 'Nowy klient utworzony.'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
index d8f09bc9..7c77ffb7 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
@@ -68,6 +68,7 @@ config:
68 # 200_word: 'I read ~200 words per minute' 68 # 200_word: 'I read ~200 words per minute'
69 # 300_word: 'I read ~300 words per minute' 69 # 300_word: 'I read ~300 words per minute'
70 # 400_word: 'I read ~400 words per minute' 70 # 400_word: 'I read ~400 words per minute'
71 pocket_consumer_key_label: Cheie consumator pentru importarea contentului din Pocket
71 form_rss: 72 form_rss:
72 description: 'Feed-urile RSS oferite de wallabag îți permit să-ți citești articolele salvate în reader-ul tău preferat RSS.' 73 description: 'Feed-urile RSS oferite de wallabag îți permit să-ți citești articolele salvate în reader-ul tău preferat RSS.'
73 token_label: 'RSS-Token' 74 token_label: 'RSS-Token'
@@ -139,11 +140,14 @@ entry:
139 # starred: 'Starred entries' 140 # starred: 'Starred entries'
140 # archived: 'Archived entries' 141 # archived: 'Archived entries'
141 # filtered: 'Filtered entries' 142 # filtered: 'Filtered entries'
143 # filtered_tags: 'Filtered by tags'
144 # untagged: 'Untagged entries'
142 list: 145 list:
143 # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.' 146 # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
144 reading_time: 'timp estimat de citire' 147 reading_time: 'timp estimat de citire'
145 reading_time_minutes: 'timp estimat de citire: %readingTime% min' 148 reading_time_minutes: 'timp estimat de citire: %readingTime% min'
146 reading_time_less_one_minute: 'timp estimat de citire: <small class="inferieur">&lt;</small> 1 min' 149 reading_time_less_one_minute: 'timp estimat de citire: <small class="inferieur">&lt;</small> 1 min'
150 # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
147 reading_time_minutes_short: '%readingTime% min' 151 reading_time_minutes_short: '%readingTime% min'
148 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min' 152 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
149 original_article: 'original' 153 original_article: 'original'
@@ -185,6 +189,8 @@ entry:
185 add_a_tag: 'Adaugă un tag' 189 add_a_tag: 'Adaugă un tag'
186 share_content: 'Dă mai departe' 190 share_content: 'Dă mai departe'
187 share_email_label: 'E-mail' 191 share_email_label: 'E-mail'
192 # public_link: 'public link'
193 # delete_public_link: 'delete public link'
188 download: 'Descarcă' 194 download: 'Descarcă'
189 # print: 'Print' 195 # print: 'Print'
190 problem: 196 problem:
@@ -287,6 +293,7 @@ quickstart:
287 # pocket: 'Migrate from Pocket' 293 # pocket: 'Migrate from Pocket'
288 # wallabag_v1: 'Migrate from wallabag v1' 294 # wallabag_v1: 'Migrate from wallabag v1'
289 # wallabag_v2: 'Migrate from wallabag v2' 295 # wallabag_v2: 'Migrate from wallabag v2'
296 # readability: 'Migrate from Readability'
290 # developer: 297 # developer:
291 # title: 'Developers' 298 # title: 'Developers'
292 # create_application: 'Create your third application' 299 # create_application: 'Create your third application'
@@ -308,6 +315,7 @@ tag:
308 page_title: 'Tag-uri' 315 page_title: 'Tag-uri'
309 list: 316 list:
310 # number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.' 317 # number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.'
318 # see_untagged_entries: 'See untagged entries'
311 319
312import: 320import:
313 # page_title: 'Import' 321 # page_title: 'Import'
@@ -335,6 +343,24 @@ import:
335 # wallabag_v2: 343 # wallabag_v2:
336 # page_title: 'Import > Wallabag v2' 344 # page_title: 'Import > Wallabag v2'
337 # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.' 345 # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
346 # readability:
347 # page_title: 'Import > Readability'
348 # description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
349 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
350 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 # firefox:
353 # page_title: 'Import > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 # chrome:
357 # page_title: 'Import > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
360 # instapaper:
361 # page_title: 'Import > Instapaper'
362 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
363 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
338 364
339developer: 365developer:
340 # page_title: 'Developer' 366 # page_title: 'Developer'
@@ -400,10 +426,10 @@ flashes:
400 notice: 426 notice:
401 # entry_already_saved: 'Entry already saved on %date%' 427 # entry_already_saved: 'Entry already saved on %date%'
402 # entry_saved: 'Entry saved' 428 # entry_saved: 'Entry saved'
403 # entry_saved_failed: 'Failed to save entry' 429 # entry_saved_failed: 'Entry saved but fetching content failed'
404 # entry_updated: 'Entry updated' 430 # entry_updated: 'Entry updated'
405 # entry_reloaded: 'Entry reloaded' 431 # entry_reloaded: 'Entry reloaded'
406 # entry_reload_failed: 'Failed to reload entry' 432 # entry_reload_failed: 'Entry reloaded but fetching content failed'
407 entry_archived: 'Articol arhivat' 433 entry_archived: 'Articol arhivat'
408 entry_unarchived: 'Articol dezarhivat' 434 entry_unarchived: 'Articol dezarhivat'
409 entry_starred: 'Articol adăugat la favorite' 435 entry_starred: 'Articol adăugat la favorite'
@@ -417,6 +443,10 @@ flashes:
417 # failed: 'Import failed, please try again.' 443 # failed: 'Import failed, please try again.'
418 # failed_on_file: 'Error while processing import. Please verify your import file.' 444 # failed_on_file: 'Error while processing import. Please verify your import file.'
419 # summary: 'Import summary: %imported% imported, %skipped% already saved.' 445 # summary: 'Import summary: %imported% imported, %skipped% already saved.'
446 # summary_with_queue: 'Import summary: %queued% queued.'
447 error:
448 # redis_enabled_not_installed: Redis is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check Redis configuration.
449 # rabbit_enabled_not_installed: RabbitMQ is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check RabbitMQ configuration.
420 developer: 450 developer:
421 notice: 451 notice:
422 # client_created: 'New client created.' 452 # client_created: 'New client created.'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
index 074d13e2..8bc0c4b9 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
@@ -68,6 +68,7 @@ config:
68 # 200_word: 'I read ~200 words per minute' 68 # 200_word: 'I read ~200 words per minute'
69 # 300_word: 'I read ~300 words per minute' 69 # 300_word: 'I read ~300 words per minute'
70 # 400_word: 'I read ~400 words per minute' 70 # 400_word: 'I read ~400 words per minute'
71 # pocket_consumer_key_label: Consumer key for Pocket to import contents
71 form_rss: 72 form_rss:
72 description: 'wallabag RSS akışı kaydetmiş olduğunuz makalelerini favori RSS okuyucunuzda görüntülemenizi sağlar. Bunu yapabilmek için öncelikle belirteç (token) oluşturmalısınız.' 73 description: 'wallabag RSS akışı kaydetmiş olduğunuz makalelerini favori RSS okuyucunuzda görüntülemenizi sağlar. Bunu yapabilmek için öncelikle belirteç (token) oluşturmalısınız.'
73 token_label: 'RSS belirteci (token)' 74 token_label: 'RSS belirteci (token)'
@@ -139,11 +140,14 @@ entry:
139 # starred: 'Starred entries' 140 # starred: 'Starred entries'
140 # archived: 'Archived entries' 141 # archived: 'Archived entries'
141 # filtered: 'Filtered entries' 142 # filtered: 'Filtered entries'
143 # filtered_tags: 'Filtered by tags'
144 # untagged: 'Untagged entries'
142 list: 145 list:
143 number_on_the_page: '{0} Herhangi bir makale yok.|{1} Burada bir adet makale var.|]1,Inf[ Burada %count% adet makale var.' 146 number_on_the_page: '{0} Herhangi bir makale yok.|{1} Burada bir adet makale var.|]1,Inf[ Burada %count% adet makale var.'
144 reading_time: 'tahmini okuma süresi' 147 reading_time: 'tahmini okuma süresi'
145 reading_time_minutes: 'tahmini okuma süresi: %readingTime% min' 148 reading_time_minutes: 'tahmini okuma süresi: %readingTime% min'
146 reading_time_less_one_minute: 'tahmini okuma süresi: <small class="inferieur">&lt;</small> 1 min' 149 reading_time_less_one_minute: 'tahmini okuma süresi: <small class="inferieur">&lt;</small> 1 min'
150 # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
147 reading_time_minutes_short: '%readingTime% min' 151 reading_time_minutes_short: '%readingTime% min'
148 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min' 152 reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
149 original_article: 'orijinal' 153 original_article: 'orijinal'
@@ -185,6 +189,8 @@ entry:
185 add_a_tag: 'Bir etiket ekle' 189 add_a_tag: 'Bir etiket ekle'
186 share_content: 'Paylaş' 190 share_content: 'Paylaş'
187 share_email_label: 'E-posta' 191 share_email_label: 'E-posta'
192 # public_link: 'public link'
193 # delete_public_link: 'delete public link'
188 download: 'İndir' 194 download: 'İndir'
189 # print: 'Print' 195 # print: 'Print'
190 problem: 196 problem:
@@ -287,6 +293,7 @@ quickstart:
287 pocket: "Pocket üzerindeki verilerinizi wallabag'e aktarın" 293 pocket: "Pocket üzerindeki verilerinizi wallabag'e aktarın"
288 wallabag_v1: "wallabag v1 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın" 294 wallabag_v1: "wallabag v1 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın"
289 wallabag_v2: "wallabag v2 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın" 295 wallabag_v2: "wallabag v2 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın"
296 readability: "Readability üzerindeki verilerinizi wallabag'e aktarın'"
290 developer: 297 developer:
291 # title: 'Developers' 298 # title: 'Developers'
292 # create_application: 'Create your third application' 299 # create_application: 'Create your third application'
@@ -308,6 +315,7 @@ tag:
308 page_title: 'Etiketler' 315 page_title: 'Etiketler'
309 list: 316 list:
310 number_on_the_page: '{0} Herhangi bir etiket yok.|{1} Burada bir adet etiket var.|]1,Inf[ Burada %count% adet etiket var.' 317 number_on_the_page: '{0} Herhangi bir etiket yok.|{1} Burada bir adet etiket var.|]1,Inf[ Burada %count% adet etiket var.'
318 # see_untagged_entries: 'See untagged entries'
311 319
312import: 320import:
313 page_title: 'İçe Aktar' 321 page_title: 'İçe Aktar'
@@ -335,6 +343,24 @@ import:
335 wallabag_v2: 343 wallabag_v2:
336 page_title: 'İçe Aktar > Wallabag v2' 344 page_title: 'İçe Aktar > Wallabag v2'
337 # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.' 345 # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
346 readability:
347 page_title: 'İçe Aktar > Readability'
348 # description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
349 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
350 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 firefox:
353 page_title: 'İçe Aktar > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 chrome:
357 page_title: 'İçe Aktar > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
360 instapaper:
361 page_title: 'İçe Aktar > Instapaper'
362 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
363 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
338 364
339developer: 365developer:
340 # page_title: 'Developer' 366 # page_title: 'Developer'
@@ -400,10 +426,10 @@ flashes:
400 notice: 426 notice:
401 entry_already_saved: 'Entry already saved on %date%' 427 entry_already_saved: 'Entry already saved on %date%'
402 entry_saved: 'Makale kaydedildi' 428 entry_saved: 'Makale kaydedildi'
403 # entry_saved_failed: 'Failed to save entry' 429 # entry_saved_failed: 'Entry saved but fetching content failed'
404 # entry_updated: 'Entry updated' 430 # entry_updated: 'Entry updated'
405 entry_reloaded: 'Makale içeriği yenilendi' 431 entry_reloaded: 'Makale içeriği yenilendi'
406 # entry_reload_failed: 'Failed to reload entry' 432 # entry_reload_failed: 'Entry reloaded but fetching content failed'
407 entry_archived: 'Makale arşivlendi' 433 entry_archived: 'Makale arşivlendi'
408 entry_unarchived: 'Makale arşivden çıkartıldı' 434 entry_unarchived: 'Makale arşivden çıkartıldı'
409 entry_starred: 'Makale favorilere eklendi' 435 entry_starred: 'Makale favorilere eklendi'
@@ -417,6 +443,10 @@ flashes:
417 # failed: 'Import failed, please try again.' 443 # failed: 'Import failed, please try again.'
418 # failed_on_file: 'Error while processing import. Please verify your import file.' 444 # failed_on_file: 'Error while processing import. Please verify your import file.'
419 # summary: 'Import summary: %imported% imported, %skipped% already saved.' 445 # summary: 'Import summary: %imported% imported, %skipped% already saved.'
446 # summary_with_queue: 'Import summary: %queued% queued.'
447 error:
448 # redis_enabled_not_installed: Redis is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check Redis configuration.
449 # rabbit_enabled_not_installed: RabbitMQ is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check RabbitMQ configuration.
420 developer: 450 developer:
421 notice: 451 notice:
422 # client_created: 'New client created.' 452 # client_created: 'New client created.'
diff --git a/src/Wallabag/CoreBundle/Resources/views/base.html.twig b/src/Wallabag/CoreBundle/Resources/views/base.html.twig
index f024b633..0f88901a 100644
--- a/src/Wallabag/CoreBundle/Resources/views/base.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/base.html.twig
@@ -41,10 +41,6 @@
41 {% block css %} 41 {% block css %}
42 {% endblock %} 42 {% endblock %}
43 {% block scripts %} 43 {% block scripts %}
44 <script src="{{ asset('bundles/wallabagcore/themes/_global/js/jquery-2.0.3.min.js') }}"></script>
45 <script src="{{ asset('bundles/wallabagcore/themes/_global/js/jquery.cookie.js') }}"></script>
46 <script src="{{ asset('bundles/wallabagcore/themes/_global/js/bookmarklet.js') }}"></script>
47 <script src="{{ asset('bundles/wallabagcore/themes/_global/js/annotator.min.js') }}"></script>
48 {% endblock %} 44 {% endblock %}
49 45
50 <title>wallabag - {% block title %}{% endblock %}</title> 46 <title>wallabag - {% block title %}{% endblock %}</title>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
index a8abe8d3..6446cf2c 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
@@ -44,6 +44,18 @@
44 </div> 44 </div>
45 </fieldset> 45 </fieldset>
46 46
47 <fieldset class="w500p inline">
48 <div class="row">
49 {{ form_label(form.config.pocket_consumer_key) }}
50 {{ form_errors(form.config.pocket_consumer_key) }}
51 {{ form_widget(form.config.pocket_consumer_key) }}
52 <p>
53 &raquo;
54 <a href="https://getpocket.com/developer/docs/authentication">https://getpocket.com/developer/docs/authentication</a>
55 </p>
56 </div>
57 </fieldset>
58
47 {{ form_rest(form.config) }} 59 {{ form_rest(form.config) }}
48 </form> 60 </form>
49 61
@@ -205,7 +217,6 @@
205 217
206 {{ form_rest(form.new_tagging_rule) }} 218 {{ form_rest(form.new_tagging_rule) }}
207 </form> 219 </form>
208
209 <div class="row"> 220 <div class="row">
210 <div class="input-field col s12"> 221 <div class="input-field col s12">
211 <h3>{{ 'config.form_rules.faq.title'|trans }}</h3> 222 <h3>{{ 'config.form_rules.faq.title'|trans }}</h3>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig
index 778625ae..ffc5bec6 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig
@@ -1,6 +1,8 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{{ 'entry.page_titles.unread'|trans }}{% endblock %} 3{% block title %}
4 {% include "@WallabagCore/themes/common/Entry/_title.html.twig" %}
5{% endblock %}
4 6
5{% block content %} 7{% block content %}
6 {% include "WallabagCoreBundle:Entry:pager.html.twig" with {'entries': entries} %} 8 {% include "WallabagCoreBundle:Entry:pager.html.twig" with {'entries': entries} %}
@@ -28,12 +30,43 @@
28 </ul> 30 </ul>
29 {% if entry.previewPicture is null %} 31 {% if entry.previewPicture is null %}
30 <p>{{ entry.content|striptags|slice(0, 300) }}&hellip;</p> 32 <p>{{ entry.content|striptags|slice(0, 300) }}&hellip;</p>
33 <ul class="card-entry-tags">
34 {% for tag in entry.tags %}
35 <li>{{ tag.label }}</li>
36 {% endfor %}
37 </ul>
31 {% else %} 38 {% else %}
39 <ul class="card-entry-labels">
40 {% for tag in entry.tags | slice(0, 3) %}
41 <li>{{ tag.label }}</li>
42 {% endfor %}
43 </ul>
32 <img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" /> 44 <img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" />
33 {% endif %} 45 {% endif %}
34 </div> 46 </div>
35 {% endfor %} 47 {% endfor %}
36 48
49 <!-- Export -->
50 <aside id="download-form">
51 {% set currentRoute = app.request.attributes.get('_route') %}
52 {% if currentRoute == 'homepage' %}
53 {% set currentRoute = 'unread' %}
54 {% endif %}
55 <h2>{{ 'entry.list.export_title'|trans }}</h2>
56 <a href="javascript: void(null);" id="download-form-close" class="close-button--popup close-button">&times;</a>
57 <ul>
58 {% if craue_setting('export_epub') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'epub' }) }}">EPUB</a></li>{% endif %}
59 {% if craue_setting('export_mobi') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'mobi' }) }}">MOBI</a></li>{% endif %}
60 {% if craue_setting('export_pdf') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'pdf' }) }}">PDF</a></li>{% endif %}
61 {% if craue_setting('export_csv') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'json' }) }}">JSON</a></li>{% endif %}
62 {% if craue_setting('export_json') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'csv' }) }}">CSV</a></li>{% endif %}
63 {% if craue_setting('export_txt') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'txt' }) }}">TXT</a></li>{% endif %}
64 {% if craue_setting('export_xml') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'xml' }) }}">XML</a></li>{% endif %}
65 </ul>
66 </aside>
67
68 <!-- Filter -->
69 {% if form is not null %}
37 <aside id="filter-form" class=""> 70 <aside id="filter-form" class="">
38 <form method="get" action="{{ path('all') }}"> 71 <form method="get" action="{{ path('all') }}">
39 <h2>{{ 'entry.filters.title'|trans }}</h2> 72 <h2>{{ 'entry.filters.title'|trans }}</h2>
@@ -115,6 +148,5 @@
115 </div> 148 </div>
116 </form> 149 </form>
117 </aside> 150 </aside>
118 151 {% endif %}
119 {% include "WallabagCoreBundle:Entry:pager.html.twig" with {'entries': entries} %}
120{% endblock %} 152{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig
index d7374dc7..bec4b70f 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig
@@ -5,53 +5,63 @@
5{% block content %} 5{% block content %}
6 <div id="article"> 6 <div id="article">
7 <header class="mbm"> 7 <header class="mbm">
8 <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1> 8 <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" class="nostyle" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1>
9 </header> 9 </header>
10 10
11 <div id="article_toolbar"> 11 <div id="article_toolbar">
12 <ul class="links"> 12 <ul class="links">
13 <li class="topPosF"><a href="#top" title="{{ 'entry.view.left_menu.back_to_top'|trans }}" class="tool top icon icon-arrow-up-thick"><span>{{ 'entry.view.left_menu.set_as_read'|trans }}</span></a></li> 13 <li class="topPosF"><a href="#top" title="{{ 'entry.view.left_menu.back_to_top'|trans }}" class="tool top icon icon-arrow-up-thick"><span>{{ 'entry.view.left_menu.set_as_read'|trans }}</span></a></li>
14 <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.domainName|removeWww }}</span></a></li> 14 <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.domainName|removeWww }}</span></a></li>
15 <li><a title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" class="tool icon icon-reload" href="{{ path('reload_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li> 15 <li><a title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" class="tool icon icon-reload" href="{{ path('reload_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li>
16 <li><a title="{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}</span></a></li> 16
17 <li><a title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span></a></li> 17 {% set markAsReadLabel = 'entry.view.left_menu.set_as_unread' %}
18 <li><a id="nav-btn-add-tag" title="{{ 'entry.view.left_menu.add_a_tag'|trans }}"><span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span></a></li> 18 {% if entry.isArchived == 0 %}
19 <li><a title="{{ 'entry.view.left_menu.delete'|trans }}" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.delete'|trans }}</span></a></li> 19 {% set markAsReadLabel = 'entry.view.left_menu.set_as_read' %}
20 {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="Tweet"><span>Tweet</span></a></li>{% endif %} 20 {% endif %}
21 {% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="Email"><span>Email</span></a></li>{% endif %}
22 {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="shaarli"><span>shaarli</span></a></li>{% endif %}
23 {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora"><span>diaspora</span></a></li>{% endif %}
24 {% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="carrot"><span>Carrot</span></a></li>{% endif %}
25 {% if craue_setting('show_printlink') %}<li><a title="{{ 'entry.view.left_menu.print'|trans }}" class="tool icon icon-print" href="javascript: window.print();"><span>{{ 'entry.view.left_menu.print'|trans }}</span></a></li>{% endif %}
26 {% if craue_setting('export_epub') %}<li><a href="?epub&amp;method=id&amp;value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %}
27 {% if craue_setting('export_mobi') %}<li><a href="?mobi&amp;method=id&amp;value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
28 {% if craue_setting('export_pdf') %}<li><a href="?pdf&amp;method=id&amp;value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %}
29 <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.label'|trans }}" class="tool bad-display icon icon-delete"><span>{{ 'entry.view.left_menu.problem.label'|trans }}</span></a></li>
30 </ul>
31 </div>
32 <div class="link mdi-action-today">
33 {{ 'entry.view.created_at'|trans }}: {{ entry.createdAt|date('Y-m-d') }}
34 </div>
35 21
36 <div class="link mdi-action-query-builder"> 22 <li><a title="{{ markAsReadLabel|trans }}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{{ markAsReadLabel|trans }}</span></a></li>
37 {% set readingTime = entry.readingTime / app.user.config.readingSpeed %} 23 <li><a title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span></a></li>
38 {% if readingTime > 0 %} 24 <li><a id="nav-btn-add-tag" title="{{ 'entry.view.left_menu.add_a_tag'|trans }}"><span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span></a></li>
39 {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round})|capitalize }} 25 <li><a title="{{ 'entry.view.left_menu.delete'|trans }}" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.delete'|trans }}</span></a></li>
40 {% else %} 26 {% if craue_setting('share_public') %}<li><a href="{{ path('share', {'id': entry.id }) }}" target="_blank" class="tool public" title="{{ 'entry.view.left_menu.public_link'|trans }}"><span>{{ 'entry.view.left_menu.public_link'|trans }}</span></a></li> <li><a href="{{ path('delete_share', {'id': entry.id }) }}" class="tool public" title="{{ 'entry.view.left_menu.delete_public_link'|trans }}"><span>{{ 'entry.view.left_menu.delete_public_link'|trans }}</span></a></li>{% endif %}
41 {{ 'entry.list.reading_time_less_one_minute'|trans|raw }} 27 {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="Tweet"><span>Tweet</span></a></li>{% endif %}
42 {% endif %} 28 {% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="Email"><span>Email</span></a></li>{% endif %}
29 {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="shaarli"><span>shaarli</span></a></li>{% endif %}
30 {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora"><span>diaspora</span></a></li>{% endif %}
31 {% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="carrot"><span>Carrot</span></a></li>{% endif %}
32 {% if craue_setting('show_printlink') %}<li><a title="{{ 'entry.view.left_menu.print'|trans }}" class="tool icon icon-print" href="javascript: window.print();"><span>{{ 'entry.view.left_menu.print'|trans }}</span></a></li>{% endif %}
33 {% if craue_setting('export_epub') %}<li><a href="?epub&amp;method=id&amp;value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %}
34 {% if craue_setting('export_mobi') %}<li><a href="?mobi&amp;method=id&amp;value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
35 {% if craue_setting('export_pdf') %}<li><a href="?pdf&amp;method=id&amp;value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %}
36 <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.label'|trans }}" class="tool bad-display icon icon-delete"><span>{{ 'entry.view.left_menu.problem.label'|trans }}</span></a></li>
37 </ul>
43 </div> 38 </div>
44 39
45 {% set nbAnnotations = entry.annotations | length %} 40 <div id="article-informations">
46 <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span> 41 <div class="link mdi-action-today">
47 <aside class="tags"> 42 {{ 'entry.view.created_at'|trans }}: {{ entry.createdAt|date('Y-m-d') }}
48 {% for tag in entry.tags %} 43 </div>
49 <span class="mdi-action-label-outline">{{ tag.label }}</span> <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i>✘</i></a> 44
50 {% endfor %} 45 <div class="link mdi-action-query-builder">
51 <div class="input-field nav-panel-add-tag" style="display: none"> 46 {% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
52 {{ render(controller( "WallabagCoreBundle:Tag:addTagForm", { 'id': entry.id } )) }} 47 {% if readingTime > 0 %}
48 {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round})|capitalize }}
49 {% else %}
50 {{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
51 {% endif %}
53 </div> 52 </div>
54 </aside> 53
54 {% set nbAnnotations = entry.annotations | length %}
55 <span class="tool link"><i class="material-icons link">comment</i> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
56 <aside class="tags">
57 {% for tag in entry.tags %}
58 <span class="label-outline"><i class="material-icons">label_outline</i> {{ tag.label }}</span> <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"class="nostyle"><i>✘</i></a>
59 {% endfor %}
60 <div class="input-field nav-panel-add-tag" style="display: none">
61 {{ render(controller( "WallabagCoreBundle:Tag:addTagForm", { 'id': entry.id } )) }}
62 </div>
63 </aside>
64 </div>
55 {% if entry.previewPicture is not null %} 65 {% if entry.previewPicture is not null %}
56 <div><img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" /></div> 66 <div><img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" /></div>
57 {% endif %} 67 {% endif %}
@@ -59,54 +69,22 @@
59 {{ entry.content | raw }} 69 {{ entry.content | raw }}
60 </article> 70 </article>
61 </div> 71 </div>
72
73 <script id="annotationroutes" type="application/json">
74 {
75 "prefix": "",
76 "urls": {
77 "create": "{{ path('annotations_post_annotation', { 'entry': entry.id }) }}",
78 "update": "{{ path('annotations_put_annotation', { 'annotation': 'idAnnotation' }) }}",
79 "destroy": "{{ path('annotations_delete_annotation', { 'annotation': 'idAnnotation' }) }}",
80 "search": "{{ path('annotations_get_annotations', { 'entry': entry.id }) }}"
81 },
82 "entryId": "{{ entry.id }}"
83 }
84 </script>
62 <script src="{{ asset('bundles/wallabagcore/themes/_global/js/restoreScroll.js')}}"></script> 85 <script src="{{ asset('bundles/wallabagcore/themes/_global/js/restoreScroll.js')}}"></script>
63 <script type="text/javascript"> 86 <script type="text/javascript">
64 $(document).ready(function() { 87 $(document).ready(function() {
65
66 // toggle read property of current article
67 /* $('#markAsRead').click(function(){
68 $("body").css("cursor", "wait");
69 $.ajax( { url: '{{ path('archive_entry', { 'id': entry.id }) }}' }).done(
70 function( data ) {
71 if ( data == '1' ) {
72 if ( $('#markAsRead').hasClass("archive-off") ) {
73 $('#markAsRead').removeClass("archive-off");
74 $('#markAsRead').addClass("archive");
75 }
76 else {
77 $('#markAsRead').removeClass("archive");
78 $('#markAsRead').addClass("archive-off");
79 }
80 }
81 else {
82 alert('Error! Pls check if you are logged in.');
83 }
84 });
85 $("body").css("cursor", "auto");
86 });*/
87
88 // toggle starred property of current article
89 /* $('#setFav').click(function(){
90 $("body").css("cursor", "wait");
91 $.ajax( { url: '{{ path('star_entry', { 'id': entry.id }) }}' }).done(
92 function( data ) {
93 if ( data == '1' ) {
94 if ( $('#setFav').hasClass("fav-off") ) {
95 $('#setFav').removeClass("fav-off");
96 $('#setFav').addClass("fav");
97 }
98 else {
99 $('#setFav').removeClass("fav");
100 $('#setFav').addClass("fav-off");
101 }
102 }
103 else {
104 alert('Error! Pls check if you are logged in.');
105 }
106 });
107 $("body").css("cursor", "auto");
108 });*/
109
110 $(window).scroll(function(e){ 88 $(window).scroll(function(e){
111 var scrollTop = $(window).scrollTop(); 89 var scrollTop = $(window).scrollTop();
112 var docHeight = $(document).height(); 90 var docHeight = $(document).height();
@@ -121,25 +99,5 @@
121 retrievePercent({{ entry.id }}); 99 retrievePercent({{ entry.id }});
122 }); 100 });
123 }); 101 });
124
125 var app = new annotator.App();
126 app.include(annotator.ui.main, {
127 element: document.querySelector('article')
128 });
129 app.include(annotator.storage.http, {
130 prefix: '',
131 urls: {
132 create: '{{ path('annotations_post_annotation', { 'entry': entry.id }) }}',
133 update: '{{ path('annotations_put_annotation', { 'annotation': 'idAnnotation' }) }}',
134 destroy: '{{ path('annotations_delete_annotation', { 'annotation': 'idAnnotation' }) }}',
135 search: '{{ path('annotations_get_annotations', { 'entry': entry.id }) }}'
136 }
137 });
138 app
139 .start()
140 .then(function () {
141 app.annotations.load({entry: {{ entry.id }}});
142 });
143 </script> 102 </script>
144
145{% endblock %} 103{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/pager.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/pager.html.twig
index ac74676a..faaa21a8 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/pager.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/pager.html.twig
@@ -2,7 +2,8 @@
2 <div class="results"> 2 <div class="results">
3 <div class="nb-results">{{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}</div> 3 <div class="nb-results">{{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}</div>
4 <div class="pagination"> 4 <div class="pagination">
5 <a href="#" id="filter">{{ 'entry.filters.title'|trans }}</a> 5 <i class="btn-clickable download-btn material-icons md-36">file_download</i>
6 <i class="btn-clickable filter-btn material-icons md-36">filter_list</i>
6 {% if entries.getNbPages > 1 %} 7 {% if entries.getNbPages > 1 %}
7 {{ pagerfanta(entries, 'twitter_bootstrap_translated', {'proximity': 1}) }} 8 {{ pagerfanta(entries, 'twitter_bootstrap_translated', {'proximity': 1}) }}
8 {% endif %} 9 {% endif %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig
deleted file mode 100644
index 404d2857..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig
+++ /dev/null
@@ -1,170 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'about.page_title'|trans }}{% endblock %}
4
5{% block content %}
6 <h2>{{ 'about.top_menu.who_behind_wallabag'|trans }}</h2>
7
8 <dl>
9 <dt>{{ 'about.who_behind_wallabag.developped_by'|trans }}</dt>
10 <dd><a href="mailto:nicolas@loeuillet.org">Nicolas Lœuillet</a> — <a href="http://www.loeuillet.org">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd>
11 <dd>Thomas Citharel — <a href="https://tcit.fr">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd>
12 <dd>Jérémy Benoist — <a href="http://www.j0k3r.net">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd>
13
14 <dt>{{ 'about.who_behind_wallabag.many_contributors'|trans|raw }}</dt>
15
16 <dt>{{ 'about.who_behind_wallabag.project_website'|trans }}</dt>
17 <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd>
18
19 <dt>{{ 'about.who_behind_wallabag.license'|trans }}: <a href="http://en.wikipedia.org/wiki/MIT_License">MIT</a></dt>
20
21 <dt>{{ 'about.who_behind_wallabag.version'|trans }}: {{ version }}</dt>
22 </dl>
23
24 <h2>{{ 'about.top_menu.getting_help'|trans }}</h2>
25
26 <dl>
27 <dt>{{ 'about.getting_help.documentation'|trans }}</dt>
28 <dd><a href="http://doc.wallabag.org/en/master/">english</a></dd>
29 <dd><a href="http://doc.wallabag.org/fr/master/">français</a></dd>
30
31 <dt>{{ 'about.getting_help.bug_reports'|trans }}</dt>
32 <dd>{{ 'about.getting_help.support'|trans|raw }}</dd>
33 </dl>
34
35 <h2>{{ 'about.top_menu.helping'|trans }}</h2>
36
37 <p>{{ 'about.helping.description'|trans }}</p>
38
39 <dl>
40 <dt>{{ 'about.helping.description'|trans }}</dt>
41 <dd>{{ 'about.helping.by_contributing_2'|trans }} <a href="https://github.com/wallabag/wallabag/issues/1254">{{ 'about.helping.by_contributing'|trans }}</a></dd>
42 <dd><a href="{{ paypal_url }}">{{ 'about.helping.by_paypal'|trans }}</a></dd>
43 </dl>
44
45 <h2>{{ 'about.top_menu.contributors'|trans }}</h2>
46 <p><a href="https://github.com/wallabag/wallabag/graphs/contributors">{{ 'about.contributors.description'|trans }}</a></p>
47
48 <h2>{{ 'about.top_menu.third_party'|trans }}</h2>
49 <p>{{ 'about.third_party.description'|trans }}</p>
50 <table class="striped">
51 <tr>
52 <th>{{ 'about.third_party.package'|trans }}</th>
53 <th>{{ 'about.third_party.license'|trans }}</th>
54 </tr>
55 <tr><td>behat/transliterator</td><td>Artistic 1.0</td></tr>
56 <tr><td>CraueConfigBundle</td><td>MIT</td></tr>
57 <tr><td>doctrine/annotations</td><td>MIT</td></tr>
58 <tr><td>doctrine/cache</td><td>MIT</td></tr>
59 <tr><td>doctrine/collections</td><td>MIT</td></tr>
60 <tr><td>doctrine/common</td><td>MIT</td></tr>
61 <tr><td>doctrine/dbal</td><td>MIT</td></tr>
62 <tr><td>doctrine/doctrine-bundle</td><td>MIT</td></tr>
63 <tr><td>doctrine/doctrine-cache-bundle</td><td>MIT</td></tr>
64 <tr><td>doctrine/doctrine-migrations-bundle</td><td>MIT</td></tr>
65 <tr><td>doctrine/inflector</td><td>MIT</td></tr>
66 <tr><td>doctrine/instantiator</td><td>MIT</td></tr>
67 <tr><td>doctrine/lexer</td><td>MIT</td></tr>
68 <tr><td>doctrine/migrations</td><td>LGPL-2.1</td></tr>
69 <tr><td>doctrine/orm</td><td>MIT</td></tr>
70 <tr><td>friendsofsymfony/oauth-server-bundle</td><td>MIT</td></tr>
71 <tr><td>friendsofsymfony/oauth2-php</td><td>MIT</td></tr>
72 <tr><td>friendsofsymfony/rest-bundle</td><td>MIT</td></tr>
73 <tr><td>friendsofsymfony/user-bundle</td><td>MIT</td></tr>
74 <tr><td>gedmo/doctrine-extensions</td><td>MIT</td></tr>
75 <tr><td>grandt/binstring</td><td>LGPL-2.1</td></tr>
76 <tr><td>grandt/phpepub</td><td>LGPL-2.1</td></tr>
77 <tr><td>grandt/phpresizegif</td><td>LGPL-2.1</td></tr>
78 <tr><td>grandt/phpzipmerge</td><td>LGPL-2.1</td></tr>
79 <tr><td>grandt/relativepath</td><td>LGPL-2.1</td></tr>
80 <tr><td>guzzlehttp/guzzle</td><td>MIT</td></tr>
81 <tr><td>guzzlehttp/ringphp</td><td>MIT</td></tr>
82 <tr><td>guzzlehttp/streams</td><td>MIT</td></tr>
83 <tr><td>hoa/compiler</td><td>BSD-3-Clause</td></tr>
84 <tr><td>hoa/consistency</td><td>BSD-3-Clause</td></tr>
85 <tr><td>hoa/event</td><td>BSD-3-Clause</td></tr>
86 <tr><td>hoa/exception</td><td>BSD-3-Clause</td></tr>
87 <tr><td>hoa/file</td><td>BSD-3-Clause</td></tr>
88 <tr><td>hoa/iterator</td><td>BSD-3-Clause</td></tr>
89 <tr><td>hoa/math</td><td>BSD-3-Clause</td></tr>
90 <tr><td>hoa/protocol</td><td>BSD-3-Clause</td></tr>
91 <tr><td>hoa/regex</td><td>BSD-3-Clause</td></tr>
92 <tr><td>hoa/ruler</td><td>BSD-3-Clausev
93 <tr><td>hoa/stream</td><td>BSD-3-Clause</td></tr>
94 <tr><td>hoa/ustring</td><td>BSD-3-Clause</td></tr>
95 <tr><td>hoa/visitor</td><td>BSD-3-Clause</td></tr>
96 <tr><td>hoa/zformat</td><td>BSD-3-Clause</td></tr>
97 <tr><td>htmlawed/htmlawed</td><td>GPL-2.0+ or LGPL-3.0</td></tr>
98 <tr><td>incenteev/composer-parameter-handler</td><td>MIT</td></tr>
99 <tr><td>j0k3r/graby</td><td>AGPL-3.0</td></tr>
100 <tr><td>j0k3r/graby-site-config</td><td>AGPL-3.0</td></tr>
101 <tr><td>j0k3r/php-readability</td><td>Apache-2.0</td></tr>
102 <tr><td>j0k3r/safecurl</td><td>MIT</td></tr>
103 <tr><td>jdorn/sql-formatter</td><td>MIT</td></tr>
104 <tr><td>jms/metadata</td><td>Apache</td></tr>
105 <tr><td>jms/parser-lib</td><td>Apache2</td></tr>
106 <tr><td>jms/serializer</td><td>Apache2</td></tr>
107 <tr><td>jms/serializer-bundle</td><td>Apache2</td></tr>
108 <tr><td>kphoen/rulerz</td><td>MIT</td></tr>
109 <tr><td>kphoen/rulerz-bundle</td><td>MIT</td></tr>
110 <tr><td>kriswallsmith/assetic</td><td>MIT</td></tr>
111 <tr><td>lexik/form-filter-bundle</td><td>MIT</td></tr>
112 <tr><td>liip/theme-bundle</td><td>MIT</td></tr>
113 <tr><td>mgargano/simplehtmldom</td><td>MIT</td></tr>
114 <tr><td>michelf/php-markdown</td><td>BSD-3-Clause</td></tr>
115 <tr><td>monolog/monolog</td><td>MIT</td></tr>
116 <tr><td>neitanod/forceutf8</td><td>BSD-3-Clause</td></tr>
117 <tr><td>nelmio/api-doc-bundle</td><td>MIT</td></tr>
118 <tr><td>nelmio/cors-bundle</td><td>MIT</td></tr>
119 <tr><td>ocramius/proxy-manager</td><td>MIT</td></tr>
120 <tr><td>pagerfanta/pagerfanta</td><td>MIT</td></tr>
121 <tr><td>paragonie/random_compat</td><td>MIT</td></tr>
122 <tr><td>phpcollection/phpcollection</td><td>Apache2</td></tr>
123 <tr><td>phpoption/phpoption</td><td>Apache2</td></tr>
124 <tr><td>phpzip/phpzip</td><td>LGPL-2.1</td></tr>
125 <tr><td>psr/log</td><td>MIT</td></tr>
126 <tr><td>react/promise</td><td>MIT</td></tr>
127 <tr><td>scheb/two-factor-bundle</td><td>MIT</td></tr>
128 <tr><td>sensio/distribution-bundle</td><td>MIT</td></tr>
129 <tr><td>sensio/framework-extra-bundle</td><td>MIT</td></tr>
130 <tr><td>sensiolabs/security-checker</td><td>MIT</td></tr>
131 <tr><td>simplepie/simplepie</td><td>BSD-3-Clause</td></tr>
132 <tr><td>smalot/pdfparser</td><td>GPL-3.0</td></tr>
133 <tr><td>sonata-project/google-authenticator</td><td>MIT</td></tr>
134 <tr><td>stof/doctrine-extensions-bundle</td><td>MIT</td></tr>
135 <tr><td>swiftmailer/swiftmailer</td><td>MIT</td></tr>
136 <tr><td>symfony/assetic-bundle</td><td>MIT</td></tr>
137 <tr><td>symfony/monolog-bundle</td><td>MIT</td></tr>
138 <tr><td>All of Symfony</td><td>MIT-licenced</td></tr>
139 <tr><td>tecnickcom/tcpdf</td><td>LGPLv3</td></tr>
140 <tr><td>twig/extensions</td><td>MIT</td></tr>
141 <tr><td>twig/twig</td><td>BSD-3-Clause</td></tr>
142 <tr><td>wallabag/php-mobi</td><td>Apache-2.0</td></tr>
143 <tr><td>willdurand/hateoas</td><td>MIT</td></tr>
144 <tr><td>willdurand/hateoas-bundle</td><td>MIT</td></tr>
145 <tr><td>willdurand/jsonp-callback-validator</td><td>MIT</td></tr>
146 <tr><td>willdurand/negotiation</td><td>MIT</td></tr>
147 <tr><td>zendframework/zend-code</td><td>BSD-3-Clause</td></tr>
148 <tr><td>zendframework/zend-eventmanager</td><td>BSD-3-Clause</td></tr>
149 <tr><td>doctrine/data-fixtures</td><td>MIT</td></tr>
150 <tr><td>doctrine/doctrine-fixtures-bundle</td><td>MIT</td></tr>
151 <tr><td>phpdocumentor/reflection-docblock</td><td>MIT</td></tr>
152 <tr><td>phpspec/prophecy</td><td>MIT</td></tr>
153 <tr><td>phpunit/php-code-coverage</td><td>BSD-3-Clause</td></tr>
154 <tr><td>phpunit/php-file-iterator</td><td>BSD-3-Clause</td></tr>
155 <tr><td>phpunit/php-text-template</td><td>BSD-3-Clause</td></tr>
156 <tr><td>phpunit/php-timer</td><td>BSD-3-Clause</td></tr>
157 <tr><td>phpunit/php-token-stream</td><td>BSD-3-Clause</td></tr>
158 <tr><td>phpunit/phpunit</td><td>BSD-3-Clause</td></tr>
159 <tr><td>phpunit/phpunit-mock-objects</td><td>BSD-3-Clause</td></tr>
160 <tr><td>sebastian/comparator</td><td>BSD-3-Clause</td></tr>
161 <tr><td>sebastian/diff</td><td>BSD-3-Clause</td></tr>
162 <tr><td>sebastian/environment</td><td>BSD-3-Clause</td></tr>
163 <tr><td>sebastian/exporter</td><td>BSD-3-Clause</td></tr>
164 <tr><td>sebastian/global-state</td><td>BSD-3-Clause</td></tr>
165 <tr><td>sebastian/recursion-context</td><td>BSD-3-Clause</td></tr>
166 <tr><td>sebastian/version</td><td>BSD-3-Clause</td></tr>
167 <tr><td>sensio/generator-bundle</td><td>MIT</td></tr>
168 <tr><td>symfony/phpunit-bridge</td><td>MIT</td></tr>
169 </table>
170{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig
deleted file mode 100644
index b529a0ac..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig
+++ /dev/null
@@ -1,28 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'howto.page_title'|trans }}{% endblock %}
4
5{% block content %}
6 <h2>{{ 'howto.page_title'|trans }}</h2>
7
8 <p>{{ 'howto.page_description'|trans }}</p>
9 <ul>
10 <li><a href="{{ path('new') }}">{{ 'howto.form.description'|trans }}</a></li>
11 </ul>
12 <h3>{{ 'howto.top_menu.browser_addons'|trans }}</h3>
13 <ul>
14 <li><a href="{{ addonsUrl.firefox }}" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li>
15 <li><a href="{{ addonsUrl.chrome }}" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li>
16 </ul>
17 <h3>{{ 'howto.top_menu.mobile_apps'|trans }}</h3>
18 <ul>
19 <li>Android: <a href="{{ addonsUrl.f_droid }}" target="_blank">{{ 'howto.mobile_apps.android.via_f_droid'|trans }}</a> / <a href="{{ addonsUrl.google_play }}" target="_blank">{{ 'howto.mobile_apps.android.via_google_play'|trans }}</a></li>
20 <li>iOS: <a href="{{ addonsUrl.ios }}" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li>
21 <li>Windows Phone: <a href="{{ addonsUrl.windows }}" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li>
22 </ul>
23 <h3>{{ 'howto.top_menu.bookmarklet'|trans }}</h3>
24 <p>
25 {{ 'howto.bookmarklet.description'|trans }}
26 {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %}
27
28{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig
deleted file mode 100644
index b3d3d5a0..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig
+++ /dev/null
@@ -1,66 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'quickstart.page_title'|trans }}{% endblock %}
4
5{% block content %}
6
7 <h3>{{ 'quickstart.intro.title'|trans }}</h3>
8 <p>{{ 'quickstart.intro.paragraph_1'|trans }}</p>
9 <p>{{ 'quickstart.intro.paragraph_2'|trans }}</p>
10
11 <h4>{{ 'quickstart.configure.title'|trans }}</h4>
12 <ul>
13 <li><a href="{{ path('config') }}">{{ 'quickstart.configure.language'|trans }}</a></li>
14 <li><a href="{{ path('config') }}#set2">{{ 'quickstart.configure.rss'|trans }}</a></li>
15 <li><a href="{{ path('config') }}#set5">{{ 'quickstart.configure.tagging_rules'|trans }}</a></li>
16 </ul>
17
18 {% if is_granted('ROLE_SUPER_ADMIN') %}
19 <h4>{{ 'quickstart.admin.title'|trans }}</h4>
20 <p>{{ 'quickstart.admin.description'|trans }}</p>
21 <ul>
22 <li><a href="{{ path('config') }}#set6">{{ 'quickstart.admin.new_user'|trans }}</a></li>
23 <li><a href="{{ path('craue_config_settings_modify') }}#set-analytics">{{ 'quickstart.admin.analytics'|trans }}</a></li>
24 <li><a href="{{ path('craue_config_settings_modify') }}#set-entry">{{ 'quickstart.admin.sharing'|trans }}</a></li>
25 <li><a href="{{ path('craue_config_settings_modify') }}#set-export">{{ 'quickstart.admin.export'|trans }}</a></li>
26 <li><a href="{{ path('craue_config_settings_modify') }}#set-import">{{ 'quickstart.admin.import'|trans }}</a></li>
27 </ul>
28 {% endif %}
29
30 <h4>{{ 'quickstart.first_steps.title'|trans }}</h4>
31 <ul>
32 <li><a href="{{ path('new') }}">{{ 'quickstart.first_steps.new_article'|trans }}</a></li>
33 <li><a href="{{ path('unread') }}">{{ 'quickstart.first_steps.unread_articles'|trans }}</a></li>
34 </ul>
35
36 <h4>{{ 'quickstart.migrate.title'|trans }}</h4>
37 <p>{{ 'quickstart.migrate.description'|trans }}</p>
38 <ul>
39 <li><a href="{{ path('import_pocket') }}">{{ 'quickstart.migrate.pocket'|trans }}</a></li>
40 <li><a href="{{ path('import_wallabag_v1') }}">{{ 'quickstart.migrate.wallabag_v1'|trans }}</a></li>
41 <li><a href="{{ path('import_wallabag_v2') }}">{{ 'quickstart.migrate.wallabag_v2'|trans }}</a></li>
42 </ul>
43
44 <h4>{{ 'quickstart.developer.title'|trans }}</h4>
45 <ul>
46 <li><a href="{{ path('developer') }}">{{ 'quickstart.developer.create_application'|trans }}</a></li>
47 </ul>
48
49 <h4>{{ 'quickstart.docs.title'|trans }}</h4>
50 <ul>
51 <li><a href="http://doc.wallabag.org/en/master/user/annotations.html">{{ 'quickstart.docs.annotate'|trans }}</a></li>
52 <li><a href="http://doc.wallabag.org/en/master/user/download_articles.html">{{ 'quickstart.docs.export'|trans }}</a></li>
53 <li><a href="http://doc.wallabag.org/en/master/user/filters.html">{{ 'quickstart.docs.search_filters'|trans }}</a></li>
54 <li><a href="http://doc.wallabag.org/en/master/user/errors_during_fetching.html">{{ 'quickstart.docs.fetching_errors'|trans }}</a></li>
55 <li><a href="http://doc.wallabag.org/">{{ 'quickstart.docs.all_docs'|trans }}</a></li>
56 </ul>
57
58 <h4>{{ 'quickstart.support.title'|trans }}</h4>
59 <p>{{ 'quickstart.support.description'|trans }}</p>
60 <ul>
61 <li><a href="https://github.com/wallabag/wallabag/issues/">{{ 'quickstart.support.github'|trans }}</a></li>
62 <li><a href="mailto:hello@wallabag.org">{{ 'quickstart.support.email'|trans }}</a></li>
63 <li><a href="https://gitter.im/wallabag/wallabag">{{ 'quickstart.support.gitter'|trans }}</a></li>
64 </ul>
65
66{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig
index 524a1d23..50043907 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig
@@ -9,7 +9,11 @@
9 9
10 <ul> 10 <ul>
11 {% for tag in tags %} 11 {% for tag in tags %}
12 <li id="tag-{{ tag.id|e }}">{{tag.label}} ({{ tag.getEntriesByUserId(app.user.id) | length }})</li> 12 <li id="tag-{{ tag.id|e }}"><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{tag.label}} ({{ tag.entries.getValues | length }})</a></li>
13 {% endfor %} 13 {% endfor %}
14 </ul> 14 </ul>
15
16 <div>
17 <a href="{{ path('untagged') }}">{{ 'tag.list.see_untagged_entries'|trans }}</a>
18 </div>
15{% endblock %} 19{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
index 2c15ad95..4fd4d317 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
@@ -2,29 +2,19 @@
2 2
3{% block css %} 3{% block css %}
4 {{ parent() }} 4 {{ parent() }}
5 5 <link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/style.min.css') }}" media="screen,projection,print"/>
6 <link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/ratatouille.css') }}" media="all">
7 <link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/font.css') }}" media="all">
8 <link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/main.css') }}" media="all">
9 <link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/messages.css') }}" media="all">
10 <link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/print.css') }}" media="print">
11{% endblock %} 6{% endblock %}
12 7
13{% block scripts %} 8{% block scripts %}
14 {{ parent() }} 9 {{ parent() }}
15 10 <script src="{{ asset('bundles/wallabagcore/themes/baggy/js/baggy.min.js') }}"></script>
16 <script src="{{ asset('bundles/wallabagcore/themes/baggy/js/init.js') }}"></script>
17 <script src="{{ asset('bundles/wallabagcore/themes/baggy/js/closeMessage.js') }}"></script>
18 <script src="{{ asset('bundles/wallabagcore/themes/baggy/js/autoClose.js') }}"></script>
19 <script src="{{ asset('bundles/wallabagcore/themes/baggy/js/saveLink.js') }}"></script>
20 <script src="{{ asset('bundles/wallabagcore/themes/baggy/js/popupForm.js') }}"></script>
21{% endblock %} 11{% endblock %}
22 12
23{% block header %} 13{% block header %}
24 <header class="w600p center mbm"> 14 <header class="w600p center mbm">
25 <h1 class="logo"> 15 <h1 class="logo">
26 {% block logo %} 16 {% block logo %}
27 <img width="100" height="100" src="{{ asset('bundles/wallabagcore/themes/baggy/img/logo-w.png') }}" alt="wallabag logo" /> 17 <img width="100" height="100" src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-w.png') }}" alt="wallabag logo" />
28 {% endblock %} 18 {% endblock %}
29 </h1> 19 </h1>
30 </header> 20 </header>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client.html.twig
index 78a9dc04..8a5da71a 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client.html.twig
@@ -13,6 +13,12 @@
13 {{ form_errors(form) }} 13 {{ form_errors(form) }}
14 14
15 <div class="input-field col s12"> 15 <div class="input-field col s12">
16 {{ form_label(form.name) }}
17 {{ form_errors(form.name) }}
18 {{ form_widget(form.name) }}
19 </div>
20
21 <div class="input-field col s12">
16 {{ form_label(form.redirect_uris) }} 22 {{ form_label(form.redirect_uris) }}
17 {{ form_errors(form.redirect_uris) }} 23 {{ form_errors(form.redirect_uris) }}
18 {{ form_widget(form.redirect_uris) }} 24 {{ form_widget(form.redirect_uris) }}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client_parameters.html.twig
index b615fa3b..b498cceb 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client_parameters.html.twig
@@ -9,6 +9,7 @@
9 <div class="row"> 9 <div class="row">
10 <p>{{ 'developer.client_parameter.page_description'|trans }}</p> 10 <p>{{ 'developer.client_parameter.page_description'|trans }}</p>
11 <ul> 11 <ul>
12 <li>{{ 'developer.client_parameter.field_name'|trans }}: <strong><pre>{{ client_name }}</pre></strong></li>
12 <li>{{ 'developer.client_parameter.field_id'|trans }}: <strong><pre>{{ client_id }}</pre></strong></li> 13 <li>{{ 'developer.client_parameter.field_id'|trans }}: <strong><pre>{{ client_id }}</pre></strong></li>
13 <li>{{ 'developer.client_parameter.field_secret'|trans }}: <strong><pre>{{ client_secret }}</pre></strong></li> 14 <li>{{ 'developer.client_parameter.field_secret'|trans }}: <strong><pre>{{ client_secret }}</pre></strong></li>
14 </ul> 15 </ul>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/howto_app.html.twig
index acbc2c88..acbc2c88 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/howto_app.html.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/index.html.twig
index 001c5cbb..3430c0d4 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/index.html.twig
@@ -28,7 +28,7 @@
28 <ul class="collapsible" data-collapsible="expandable"> 28 <ul class="collapsible" data-collapsible="expandable">
29 {% for client in clients %} 29 {% for client in clients %}
30 <li> 30 <li>
31 <div class="collapsible-header">#{{ client.id }}</div> 31 <div class="collapsible-header">{{ client.name }} - #{{ client.id }}</div>
32 <div class="collapsible-body"> 32 <div class="collapsible-body">
33 <table class="striped"> 33 <table class="striped">
34 <tr> 34 <tr>
@@ -49,9 +49,9 @@
49 </tr> 49 </tr>
50 </table> 50 </table>
51 <p> 51 <p>
52 {{ 'developer.remove.warn_message_1'|trans }}<br/> 52 {{ 'developer.remove.warn_message_1'|trans({'%name%': client.name }) }}<br/>
53 {{ 'developer.remove.warn_message_2'|trans }}<br/> 53 {{ 'developer.remove.warn_message_2'|trans({'%name%': client.name }) }}<br/>
54 <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{{ 'developer.remove.action'|trans }}</a> 54 <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{{ 'developer.remove.action'|trans({'%name%': client.name }) }}</a>
55 </p> 55 </p>
56 </div> 56 </div>
57 </li> 57 </li>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/_title.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/_title.html.twig
new file mode 100644
index 00000000..d1c2f203
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/_title.html.twig
@@ -0,0 +1,15 @@
1{% set currentRoute = app.request.attributes.get('_route') %}
2
3{% if currentRoute == 'starred' %}
4 {{ 'entry.page_titles.starred'|trans }}
5{% elseif currentRoute == 'archive' %}
6 {{ 'entry.page_titles.archived'|trans }}
7{% elseif currentRoute == 'all' %}
8 {{ 'entry.page_titles.filtered'|trans }}
9{% elseif currentRoute == 'tag_entries' %}
10 {{ 'entry.page_titles.filtered_tags'|trans }}
11{% elseif currentRoute == 'untagged' %}
12 {{ 'entry.page_titles.untagged'|trans }}
13{% else %}
14 {{ 'entry.page_titles.unread'|trans }}
15{% endif %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/entries.xml.twig
index 6cabcf44..288bb54f 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/entries.xml.twig
@@ -16,15 +16,7 @@
16 <guid>{{ entry.url }}</guid> 16 <guid>{{ entry.url }}</guid>
17 <pubDate>{{ entry.createdAt|date('D, d M Y H:i:s') }}</pubDate> 17 <pubDate>{{ entry.createdAt|date('D, d M Y H:i:s') }}</pubDate>
18 <description> 18 <description>
19 <![CDATA[ 19 <![CDATA[{%- if entry.readingTime > 0 -%}{{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': entry.readingTime}) }}{%- else -%}{{ 'entry.list.reading_time_less_one_minute'|trans|raw }}{%- endif %}{{ entry.content|raw -}}]]>
20 {%- if entry.readingTime > 0 -%}
21 {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': entry.readingTime}) }}
22 {%- else -%}
23 {{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
24 {%- endif %}
25
26 {{ entry.content|raw -}}
27 ]]>
28 </description> 20 </description>
29 </item> 21 </item>
30 22
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/share.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/share.html.twig
new file mode 100644
index 00000000..b82b3d3d
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/share.html.twig
@@ -0,0 +1,40 @@
1<html>
2 <head>
3 <title>{{ entry.title | raw }}</title>
4 <style>
5 body {
6 margin: 10px;
7 font-family: 'Roboto',Verdana,Geneva,sans-serif;
8 font-size: 16px;
9 color: #000;
10 }
11 header {
12 text-align: center;
13 }
14
15 header h1 {
16 font-size: 1.3em;
17 }
18
19 a,
20 a:hover,
21 a:visited {
22 color: #000;
23 }
24
25 article {
26 margin: 0 auto;
27 width: 600px;
28 }
29 </style>
30 </head>
31 <body>
32 <header>
33 <h1>{{ entry.title | raw }}</h1>
34 <span><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool">{{ entry.domainName|removeWww }}</a></span>
35 </header>
36 <article>
37 {{ entry.content | raw }}
38 </article>
39 </body>
40</html>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/common/Mail/forgotPassword.txt.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Mail/forgotPassword.txt.twig
new file mode 100644
index 00000000..631bcb88
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Mail/forgotPassword.txt.twig
@@ -0,0 +1,6 @@
1Hello {{username}}!
2
3To reset your password - please visit {{confirmationUrl}}
4
5Regards,
6Wallabag bot
diff --git a/src/Wallabag/CoreBundle/Resources/views/_bookmarklet.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/_bookmarklet.html.twig
index 966a84db..966a84db 100644
--- a/src/Wallabag/CoreBundle/Resources/views/_bookmarklet.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/_bookmarklet.html.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/about.html.twig
index d0b94279..d0b94279 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/about.html.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/howto.html.twig
index 6a177d6b..67a10190 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/howto.html.twig
@@ -35,7 +35,7 @@
35 <div class="col s12"> 35 <div class="col s12">
36 <h5>{{ 'howto.top_menu.bookmarklet'|trans }}</h5> 36 <h5>{{ 'howto.top_menu.bookmarklet'|trans }}</h5>
37 {{ 'howto.bookmarklet.description'|trans }} 37 {{ 'howto.bookmarklet.description'|trans }}
38 {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %} 38 {% include '@WallabagCore/themes/common/Static/_bookmarklet.html.twig' %}
39 </div> 39 </div>
40 40
41 </div> 41 </div>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/quickstart.html.twig
index 59dd037b..8cbf4ab4 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/quickstart.html.twig
@@ -44,6 +44,7 @@
44 <li><a href="{{ path('import_pocket') }}">{{ 'quickstart.migrate.pocket'|trans }}</a></li> 44 <li><a href="{{ path('import_pocket') }}">{{ 'quickstart.migrate.pocket'|trans }}</a></li>
45 <li><a href="{{ path('import_wallabag_v1') }}">{{ 'quickstart.migrate.wallabag_v1'|trans }}</a></li> 45 <li><a href="{{ path('import_wallabag_v1') }}">{{ 'quickstart.migrate.wallabag_v1'|trans }}</a></li>
46 <li><a href="{{ path('import_wallabag_v2') }}">{{ 'quickstart.migrate.wallabag_v2'|trans }}</a></li> 46 <li><a href="{{ path('import_wallabag_v2') }}">{{ 'quickstart.migrate.wallabag_v2'|trans }}</a></li>
47 <li><a href="{{ path('import_readability') }}">{{ 'quickstart.migrate.readability'|trans }}</a></li>
47 </ul> 48 </ul>
48 49
49 <h4>{{ 'quickstart.developer.title'|trans }}</h4> 50 <h4>{{ 'quickstart.developer.title'|trans }}</h4>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
index afd5b499..5330c353 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
@@ -62,6 +62,18 @@
62 </div> 62 </div>
63 </div> 63 </div>
64 64
65 <div class="row">
66 <div class="input-field col s12">
67 {{ form_label(form.config.pocket_consumer_key) }}
68 {{ form_errors(form.config.pocket_consumer_key) }}
69 {{ form_widget(form.config.pocket_consumer_key) }}
70 <p>
71 &raquo;
72 <a href="https://getpocket.com/developer/docs/authentication">https://getpocket.com/developer/docs/authentication</a>
73 </p>
74 </div>
75 </div>
76
65 {{ form_widget(form.config.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} 77 {{ form_widget(form.config.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
66 {{ form_rest(form.config) }} 78 {{ form_rest(form.config) }}
67 </form> 79 </form>
@@ -196,6 +208,7 @@
196 </div> 208 </div>
197 209
198 <div id="set5" class="col s12"> 210 <div id="set5" class="col s12">
211 {% if app.user.config.taggingRules is not empty %}
199 <div class="row"> 212 <div class="row">
200 <div class="input-field col s12"> 213 <div class="input-field col s12">
201 <ul> 214 <ul>
@@ -206,13 +219,14 @@
206 {{ 'config.form_rules.then_tag_as_label'|trans }} 219 {{ 'config.form_rules.then_tag_as_label'|trans }}
207 « {{ tagging_rule.tags|join(', ') }} » 220 « {{ tagging_rule.tags|join(', ') }} »
208 <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}"> 221 <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}">
209 <i class="tool grey-text delete mdi-action-delete"></i> 222 <i class="tool grey-text delete material-icons">delete</i>
210 </a> 223 </a>
211 </li> 224 </li>
212 {% endfor %} 225 {% endfor %}
213 </ul> 226 </ul>
214 </div> 227 </div>
215 </div> 228 </div>
229 {% endif %}
216 230
217 {{ form_start(form.new_tagging_rule) }} 231 {{ form_start(form.new_tagging_rule) }}
218 {{ form_errors(form.new_tagging_rule) }} 232 {{ form_errors(form.new_tagging_rule) }}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig
deleted file mode 100644
index 78a9dc04..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig
+++ /dev/null
@@ -1,31 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'developer.client.page_title'|trans }}{% endblock %}
4
5{% block content %}
6<div class="row">
7 <div class="col s12">
8 <div class="card-panel settings">
9
10 <div class="row">
11 <p>{{ 'developer.client.page_description'|trans }}</p>
12 {{ form_start(form) }}
13 {{ form_errors(form) }}
14
15 <div class="input-field col s12">
16 {{ form_label(form.redirect_uris) }}
17 {{ form_errors(form.redirect_uris) }}
18 {{ form_widget(form.redirect_uris) }}
19 </div>
20
21 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client.action_back'|trans }}</a>
22 {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
23
24 {{ form_rest(form) }}
25 </div>
26
27 </div>
28 </div>
29</div>
30
31{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig
deleted file mode 100644
index b615fa3b..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig
+++ /dev/null
@@ -1,22 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'developer.client_parameter.page_title'|trans }}{% endblock %}
4
5{% block content %}
6<div class="row">
7 <div class="col s12">
8 <div class="card-panel settings">
9 <div class="row">
10 <p>{{ 'developer.client_parameter.page_description'|trans }}</p>
11 <ul>
12 <li>{{ 'developer.client_parameter.field_id'|trans }}: <strong><pre>{{ client_id }}</pre></strong></li>
13 <li>{{ 'developer.client_parameter.field_secret'|trans }}: <strong><pre>{{ client_secret }}</pre></strong></li>
14 </ul>
15
16 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client_parameter.back'|trans }}</a>
17 <a href="{{ path('developer_howto_firstapp') }}" class="btn waves-effect waves-light">{{ 'developer.client_parameter.read_howto'|trans }}</a>
18 </div>
19 </div>
20 </div>
21</div>
22{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig
deleted file mode 100644
index acbc2c88..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig
+++ /dev/null
@@ -1,63 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'developer.howto.page_title'|trans }}{% endblock %}
4
5{% block css %}
6 {{ parent() }}
7 <link rel="stylesheet" href="{{ asset('https://cdnjs.cloudflare.com/ajax/libs/prism/1.4.1/themes/prism-dark.min.css') }}">
8{% endblock %}
9
10{% block content %}
11<div class="row">
12 <div class="col s12">
13 <div class="card-panel settings">
14
15 <div class="row">
16 <p>{{ 'developer.howto.description.paragraph_1'|trans|raw }}</p>
17 <p>{{ 'developer.howto.description.paragraph_2'|trans }}</p>
18 <p>{{ 'developer.howto.description.paragraph_3'|trans({'%link%': path('developer_create_client')})|raw }}</p>
19 <p>{{ 'developer.howto.description.paragraph_4'|trans }}</p>
20 <p>
21 <pre><code class="language-bash">http POST http://v2.wallabag.org/oauth/v2/token \
22 grant_type=password \
23 client_id=12_5um6nz50ceg4088c0840wwc0kgg44g00kk84og044ggkscso0k \
24 client_secret=3qd12zpeaxes8cwg8c0404g888co4wo8kc4gcw0occww8cgw4k \
25 username=yourUsername \
26 password=yourPassw0rd</code></pre>
27 </p>
28 <p>{{ 'developer.howto.description.paragraph_5'|trans }}</p>
29 <p>
30 <pre><code class="language-bash">HTTP/1.1 200 OK
31Cache-Control: no-store, private
32Connection: close
33Content-Type: application/json
34Date: Tue, 06 Oct 2015 18:24:03 GMT
35Host: localhost:8000
36Pragma: no-cache
37X-Debug-Token: be00a1
38X-Debug-Token-Link: /profiler/be00a1
39X-Powered-By: PHP/5.5.9-1ubuntu4.13
40{
41 "access_token": "ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw",
42 "expires_in": 3600,
43 "refresh_token": "ODBjODU1NWUwNmUzZTBkNDQ5YWVlZTVlMjQ2Y2I0OWM2NTM1ZGM2M2Y3MDhjMTViM2U2MzYxYzRkMDk5ODRlZg",
44 "scope": null,
45 "token_type": "bearer"
46}</code></pre>
47 </p>
48 <p>{{ 'developer.howto.description.paragraph_6'|trans }}</p>
49 <p>
50 <pre><code class="language-bash">http GET http://v2.wallabag.org/api/entries.json \
51 "Authorization:Bearer ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw"</code></pre>
52 </p>
53 <p>{{ 'developer.howto.description.paragraph_7'|trans }}</p>
54 <p>{{ 'developer.howto.description.paragraph_8'|trans({'%link%': path('nelmio_api_doc_index')})|raw }}</p>
55 <p><a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.howto.back'|trans }}</a></p>
56 </div>
57
58 </div>
59 </div>
60</div>
61<script src="{{ asset('https://cdnjs.cloudflare.com/ajax/libs/prism/1.4.1/prism.min.js') }}"></script>
62<script src="{{ asset('https://cdnjs.cloudflare.com/ajax/libs/prism/1.4.1/components/prism-bash.min.js') }}"></script>
63{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig
deleted file mode 100644
index 001c5cbb..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig
+++ /dev/null
@@ -1,69 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'developer.page_title'|trans }}{% endblock %}
4
5{% block content %}
6<div class="row">
7 <div class="col s12">
8 <div class="card-panel settings">
9
10 <div class="row">
11 <h3>{{ 'developer.welcome_message'|trans }}</h3>
12
13 <h4>{{ 'developer.documentation'|trans }}</h4>
14
15 <ul>
16 <li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li>
17 <li><a href="http://doc.wallabag.org/en/master/developer/api.html">{{ 'developer.full_documentation'|trans }}</a></li>
18 <li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.list_methods'|trans }}</a></li>
19 </ul>
20
21 <h4>{{ 'developer.clients.title'|trans }}</h4>
22 <ul>
23 <li><a href="{{ path('developer_create_client') }}">{{ 'developer.clients.create_new'|trans }}</a></li>
24 </ul>
25
26 <h4>{{ 'developer.existing_clients.title'|trans }}</h4>
27 {% if clients %}
28 <ul class="collapsible" data-collapsible="expandable">
29 {% for client in clients %}
30 <li>
31 <div class="collapsible-header">#{{ client.id }}</div>
32 <div class="collapsible-body">
33 <table class="striped">
34 <tr>
35 <td>{{ 'developer.existing_clients.field_id'|trans }}</td>
36 <td><strong><code>{{ client.id }}_{{ client.randomId }}</code></strong></td>
37 </tr>
38 <tr>
39 <td>{{ 'developer.existing_clients.field_secret'|trans }}</td>
40 <td><strong><code>{{ client.secret }}</code></strong></td>
41 </tr>
42 <tr>
43 <td>{{ 'developer.existing_clients.field_uris'|trans }}</td>
44 <td><strong><code>{{ client.redirectUris|json_encode() }}</code></strong></td>
45 </tr>
46 <tr>
47 <td>{{ 'developer.existing_clients.field_grant_types'|trans }}</td>
48 <td><strong><code>{{ client.allowedGrantTypes|json_encode() }}</code></strong></td>
49 </tr>
50 </table>
51 <p>
52 {{ 'developer.remove.warn_message_1'|trans }}<br/>
53 {{ 'developer.remove.warn_message_2'|trans }}<br/>
54 <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{{ 'developer.remove.action'|trans }}</a>
55 </p>
56 </div>
57 </li>
58 {% endfor %}
59 </ul>
60 {% else %}
61 {{ 'developer.existing_clients.no_client'|trans }}
62 {% endif %}
63 </div>
64
65 </div>
66 </div>
67</div>
68
69{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
index f6941ca5..e889dea8 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
@@ -1,18 +1,7 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %} 3{% block title %}
4 {% set currentRoute = app.request.attributes.get('_route') %} 4 {% include "@WallabagCore/themes/common/Entry/_title.html.twig" %}
5
6 {% if currentRoute == 'starred' %}
7 {{ 'entry.page_titles.starred'|trans }}
8 {% elseif currentRoute == 'archive' %}
9 {{ 'entry.page_titles.archived'|trans }}
10 {% elseif currentRoute == 'all' %}
11 {{ 'entry.page_titles.filtered'|trans }}
12 {% else %}
13 {{ 'entry.page_titles.unread'|trans }}
14 {% endif %}
15
16{% endblock %} 5{% endblock %}
17 6
18{% block content %} 7{% block content %}
@@ -26,13 +15,18 @@
26 <div class="card-body"> 15 <div class="card-body">
27 {% if not entry.previewPicture is null %} 16 {% if not entry.previewPicture is null %}
28 <div class="card-image waves-effect waves-block waves-light"> 17 <div class="card-image waves-effect waves-block waves-light">
18 <ul class="card-entry-labels">
19 {% for tag in entry.tags | slice(0, 3) %}
20 <li>{{ tag.label }}</li>
21 {% endfor %}
22 </ul>
29 <div class="preview activator" style="background-image: url({{ entry.previewPicture }})"></div> 23 <div class="preview activator" style="background-image: url({{ entry.previewPicture }})"></div>
30 </div> 24 </div>
31 {% endif %} 25 {% endif %}
32 26
33 <div class="card-content"> 27 <div class="card-content">
34 {% if not entry.previewPicture is null %} 28 {% if not entry.previewPicture is null %}
35 <i class="card-title grey-text text-darken-4 activator mdi-navigation-more-horiz right"></i> 29 <i class="card-title grey-text text-darken-4 activator material-icons right">more_vert</i>
36 {% endif %} 30 {% endif %}
37 31
38 <span class="card-title dot-ellipsis dot-resize-update"><a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title|raw }}">{{ entry.title|striptags|raw }}</a></span> 32 <span class="card-title dot-ellipsis dot-resize-update"><a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title|raw }}">{{ entry.title|striptags|raw }}</a></span>
@@ -50,13 +44,18 @@
50 44
51 {% if entry.previewPicture is null %} 45 {% if entry.previewPicture is null %}
52 <p>{{ entry.content|striptags|slice(0, 300)|raw }}&hellip;</p> 46 <p>{{ entry.content|striptags|slice(0, 300)|raw }}&hellip;</p>
47 <ul class="card-entry-labels-hidden">
48 {% for tag in entry.tags | slice(0, 2) %}
49 <li>{{ tag.label }}</li>
50 {% endfor %}
51 </ul>
53 {% endif %} 52 {% endif %}
54 </div> 53 </div>
55 </div> 54 </div>
56 55
57 {% if not entry.previewPicture is null %} 56 {% if not entry.previewPicture is null %}
58 <div class="card-reveal"> 57 <div class="card-reveal">
59 <i class="card-title grey-text text-darken-4 mdi-card-close right"></i> 58 <i class="card-title grey-text text-darken-4 material-icons right">clear</i>
60 <span class="card-title"><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></span> 59 <span class="card-title"><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></span>
61 60
62 <div class="estimatedTime grey-text"> 61 <div class="estimatedTime grey-text">
@@ -66,6 +65,12 @@
66 </div> 65 </div>
67 66
68 <p>{{ entry.content|striptags|slice(0, 300)|raw }}&hellip;</p> 67 <p>{{ entry.content|striptags|slice(0, 300)|raw }}&hellip;</p>
68
69 <ul class="card-entry-tags">
70 {% for tag in entry.tags %}
71 <li>{{ tag.label }}</li>
72 {% endfor %}
73 </ul>
69 </div> 74 </div>
70 {% endif %} 75 {% endif %}
71 76
@@ -74,11 +79,11 @@
74 <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.list.original_article'|trans }}: {{ entry.title|e }} - {{ entry.domainName|removeWww }}" class="tool original grey-text"><span>{{ entry.domainName|removeWww|truncate(18) }}</span></a> 79 <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.list.original_article'|trans }}: {{ entry.title|e }} - {{ entry.domainName|removeWww }}" class="tool original grey-text"><span>{{ entry.domainName|removeWww|truncate(18) }}</span></a>
75 </bold> 80 </bold>
76 81
77 <ul class="tools links right"> 82 <ul class="tools right">
78 <li> 83 <li>
79 <a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text {% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"></a> 84 <a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text" href="{{ path('archive_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isArchived == 0 %}done{% else %}redo{% endif %}</i></a>
80 <a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text {% if entry.isStarred == 0 %}mdi-toggle-star-outline{% else %}mdi-toggle-star{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"></a> 85 <a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text" href="{{ path('star_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isStarred == 0 %}star_border{% else %}star{% endif %}</i></a>
81 <a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete mdi-action-delete " href="{{ path('delete_entry', { 'id': entry.id }) }}"></a> 86 <a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete" href="{{ path('delete_entry', { 'id': entry.id }) }}"><i class="material-icons">delete</i></a>
82 </li> 87 </li>
83 </ul> 88 </ul>
84 </div> 89 </div>
@@ -106,6 +111,7 @@
106 </div> 111 </div>
107 112
108 <!-- Filters --> 113 <!-- Filters -->
114 {% if form is not null %}
109 <div id="filters" class="side-nav fixed right-aligned"> 115 <div id="filters" class="side-nav fixed right-aligned">
110 <form action="{{ path('all') }}"> 116 <form action="{{ path('all') }}">
111 117
@@ -189,5 +195,6 @@
189 195
190 </form> 196 </form>
191 </div> 197 </div>
192 {% include "WallabagCoreBundle:Entry:pager.html.twig" with {'entries': entries} %} 198 {% endif %}
199
193{% endblock %} 200{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig
deleted file mode 100644
index 6cabcf44..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig
+++ /dev/null
@@ -1,34 +0,0 @@
1<?xml version="1.0" encoding="utf-8"?>
2<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
3 <channel>
4 <title>wallabag — {{type}} feed</title>
5 <link>{{ url('unread') }}</link>
6 <pubDate>{{ "now"|date('D, d M Y H:i:s') }}</pubDate>
7 <generator>wallabag</generator>
8 <description>wallabag {{type}} elements</description>
9
10 {% for entry in entries %}
11
12 <item>
13 <title><![CDATA[{{ entry.title }}]]></title>
14 <source url="{{ url('view', { 'id': entry.id }) }}">wallabag</source>
15 <link>{{ entry.url }}</link>
16 <guid>{{ entry.url }}</guid>
17 <pubDate>{{ entry.createdAt|date('D, d M Y H:i:s') }}</pubDate>
18 <description>
19 <![CDATA[
20 {%- if entry.readingTime > 0 -%}
21 {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': entry.readingTime}) }}
22 {%- else -%}
23 {{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
24 {%- endif %}
25
26 {{ entry.content|raw -}}
27 ]]>
28 </description>
29 </item>
30
31 {% endfor %}
32
33 </channel>
34</rss>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig
index 2ee615aa..209e9e89 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig
@@ -13,24 +13,24 @@
13 <ul> 13 <ul>
14 <li> 14 <li>
15 <a class="waves-effect" href="{{ path('homepage') }}"> 15 <a class="waves-effect" href="{{ path('homepage') }}">
16 <i class="mdi-action-exit-to-app"></i> 16 <i class="material-icons">exit_to_app</i>
17 </a> 17 </a>
18 </li> 18 </li>
19 </ul> 19 </ul>
20 <ul class="right"> 20 <ul class="right">
21 <li> 21 <li>
22 <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_read'|trans }}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead"> 22 <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_read'|trans }}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead">
23 <i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i> 23 <i class="material-icons small">{% if entry.isArchived == 0 %}done{% else %}redo{% endif %}</i>
24 </a> 24 </a>
25 </li> 25 </li>
26 <li> 26 <li>
27 <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> 27 <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
28 <i class="{% if entry.isStarred == 0 %}mdi-toggle-star-outline{% else %}mdi-toggle-star{% endif %} small"></i> 28 <i class="material-icons small">{% if entry.isStarred == 0 %}star_outline{% else %}star{% endif %}</i>
29 </a> 29 </a>
30 </li> 30 </li>
31 <li> 31 <li>
32 <a href="#" data-activates="slide-out" class="button-collapse right"> 32 <a href="#" data-activates="slide-out" class="button-collapse right">
33 <i class="mdi-navigation-menu"></i> 33 <i class="material-icons">menu</i>
34 </a> 34 </a>
35 </li> 35 </li>
36 </ul> 36 </ul>
@@ -39,7 +39,7 @@
39 <ul id="slide-out" class="collapsible side-nav fixed reader-mode" data-collapsible="accordion"> 39 <ul id="slide-out" class="collapsible side-nav fixed reader-mode" data-collapsible="accordion">
40 <li class="bold border-bottom hide-on-med-and-down"> 40 <li class="bold border-bottom hide-on-med-and-down">
41 <a class="waves-effect collapsible-header" href="{{ path('homepage') }}"> 41 <a class="waves-effect collapsible-header" href="{{ path('homepage') }}">
42 <i class="mdi-action-exit-to-app small"></i> 42 <i class="material-icons small">exit_to_app</i>
43 <span>{{ 'entry.view.left_menu.back_to_homepage'|trans }}</span> 43 <span>{{ 'entry.view.left_menu.back_to_homepage'|trans }}</span>
44 </a> 44 </a>
45 <div class="collapsible-body"></div> 45 <div class="collapsible-body"></div>
@@ -47,7 +47,7 @@
47 47
48 <li class="bold border-bottom hide-on-med-and-down"> 48 <li class="bold border-bottom hide-on-med-and-down">
49 <a class="waves-effect collapsible-header" href="{{ entry.url|e }}"> 49 <a class="waves-effect collapsible-header" href="{{ entry.url|e }}">
50 <i class="mdi-content-link small"></i> 50 <i class="material-icons small">link</i>
51 <span>{{ 'entry.view.left_menu.view_original_article'|trans }}</span> 51 <span>{{ 'entry.view.left_menu.view_original_article'|trans }}</span>
52 </a> 52 </a>
53 <div class="collapsible-body"></div> 53 <div class="collapsible-body"></div>
@@ -55,30 +55,35 @@
55 55
56 <li class="bold hide-on-med-and-down"> 56 <li class="bold hide-on-med-and-down">
57 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" href="{{ path('reload_entry', { 'id': entry.id }) }}" id="reload"> 57 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" href="{{ path('reload_entry', { 'id': entry.id }) }}" id="reload">
58 <i class="mdi-action-autorenew small"></i> 58 <i class="material-icons small">autorenew</i>
59 <span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span> 59 <span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span>
60 </a> 60 </a>
61 <div class="collapsible-body"></div> 61 <div class="collapsible-body"></div>
62 </li> 62 </li>
63 63
64 {% set markAsReadLabel = 'entry.view.left_menu.set_as_unread' %}
65 {% if entry.isArchived == 0 %}
66 {% set markAsReadLabel = 'entry.view.left_menu.set_as_read' %}
67 {% endif %}
68
64 <li class="bold hide-on-med-and-down"> 69 <li class="bold hide-on-med-and-down">
65 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_read'|trans }}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead"> 70 <a class="waves-effect collapsible-header" title="{{ markAsReadLabel|trans }}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead">
66 <i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i> 71 <i class="material-icons small">{% if entry.isArchived == 0 %}done{% else %}redo{% endif %}</i>
67 <span>{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}</span> 72 <span>{{ markAsReadLabel|trans }}</span>
68 </a> 73 </a>
69 <div class="collapsible-body"></div> 74 <div class="collapsible-body"></div>
70 </li> 75 </li>
71 76
72 <li class="bold hide-on-med-and-down"> 77 <li class="bold hide-on-med-and-down">
73 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> 78 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
74 <i class="{% if entry.isStarred == 0 %}mdi-toggle-star-outline{% else %}mdi-toggle-star{% endif %} small"></i> 79 <i class="material-icons spall">{% if entry.isStarred == 0 %}star_outline{% else %}star{% endif %}</i>
75 <span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span> 80 <span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span>
76 </a> 81 </a>
77 <div class="collapsible-body"></div> 82 <div class="collapsible-body"></div>
78 </li> 83 </li>
79 <li class="bold border-bottom hide-on-med-and-down"> 84 <li class="bold border-bottom hide-on-med-and-down">
80 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.delete'|trans }}" href="{{ path('delete_entry', { 'id': entry.id }) }}"> 85 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.delete'|trans }}" href="{{ path('delete_entry', { 'id': entry.id }) }}">
81 <i class="mdi-action-delete small"></i> 86 <i class="material-icons small">delete</i>
82 <span>{{ 'entry.view.left_menu.delete'|trans }}</span> 87 <span>{{ 'entry.view.left_menu.delete'|trans }}</span>
83 </a> 88 </a>
84 <div class="collapsible-body"></div> 89 <div class="collapsible-body"></div>
@@ -86,7 +91,7 @@
86 91
87 <li class="bold border-bottom hide-on-med-and-down"> 92 <li class="bold border-bottom hide-on-med-and-down">
88 <a class="waves-effect collapsible-header" id="nav-btn-add-tag"> 93 <a class="waves-effect collapsible-header" id="nav-btn-add-tag">
89 <i class="mdi-action-label-outline small"></i> 94 <i class="material-icons small">label_outline</i>
90 <span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span> 95 <span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span>
91 </a> 96 </a>
92 <div class="collapsible-body"></div> 97 <div class="collapsible-body"></div>
@@ -94,11 +99,23 @@
94 99
95 <li class="bold"> 100 <li class="bold">
96 <a class="waves-effect collapsible-header"> 101 <a class="waves-effect collapsible-header">
97 <i class="mdi-social-share small"></i> 102 <i class="material-icons small">share</i>
98 <span>{{ 'entry.view.left_menu.share_content'|trans }}</span> 103 <span>{{ 'entry.view.left_menu.share_content'|trans }}</span>
99 </a> 104 </a>
100 <div class="collapsible-body"> 105 <div class="collapsible-body">
101 <ul> 106 <ul>
107 {% if craue_setting('share_public') %}
108 <li>
109 <a href="{{ path('share', {'id': entry.id }) }}" target="_blank" class="public icon-link" title="{{ 'entry.view.left_menu.public_link'|trans }}">
110 <span>{{ 'entry.view.left_menu.public_link'|trans }}</span>
111 </a>
112 </li>
113 <li>
114 <a href="{{ path('delete_share', {'id': entry.id }) }}" class="tool public" title="{{ 'entry.view.left_menu.delete_public_link'|trans }}">
115 <span>{{ 'entry.view.left_menu.delete_public_link'|trans }}</span>
116 </a>
117 </li>
118 {% endif %}
102 {% if craue_setting('share_twitter') %} 119 {% if craue_setting('share_twitter') %}
103 <li> 120 <li>
104 <a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="twitter"> 121 <a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="twitter">
@@ -129,7 +146,8 @@
129 {% endif %} 146 {% endif %}
130 {% if craue_setting('share_mail') %} 147 {% if craue_setting('share_mail') %}
131 <li> 148 <li>
132 <a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{{ 'entry.view.left_menu.share_email_label'|trans }}"> 149 <a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" title="{{ 'entry.view.left_menu.share_email_label'|trans }}">
150 <i class="material-icons">email</i>
133 <span>{{ 'entry.view.left_menu.share_email_label'|trans }}</span> 151 <span>{{ 'entry.view.left_menu.share_email_label'|trans }}</span>
134 </a> 152 </a>
135 </li> 153 </li>
@@ -141,17 +159,16 @@
141 {% if craue_setting('show_printlink') %} 159 {% if craue_setting('show_printlink') %}
142 <li class="bold border-bottom hide-on-med-and-down"> 160 <li class="bold border-bottom hide-on-med-and-down">
143 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.print'|trans }}" href="javascript: window.print();"> 161 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.print'|trans }}" href="javascript: window.print();">
144 <i class="mdi-action-print small"></i> 162 <i class="material-icons small">print</i>
145 <span>{{ 'entry.view.left_menu.print'|trans }}</span> 163 <span>{{ 'entry.view.left_menu.print'|trans }}</span>
146 </a> 164 </a>
147 <div class="collapsible-body"></div> 165 <div class="collapsible-body"></div>
148 </li> 166 </li>
149 {% endif %} 167 {% endif %}
150 168
151
152 <li class="bold"> 169 <li class="bold">
153 <a class="waves-effect collapsible-header"> 170 <a class="waves-effect collapsible-header">
154 <i class="mdi-file-file-download small"></i> 171 <i class="material-icons small">file_download</i>
155 <span>{{ 'entry.view.left_menu.download'|trans }}</span> 172 <span>{{ 'entry.view.left_menu.download'|trans }}</span>
156 </a> 173 </a>
157 <div class="collapsible-body"> 174 <div class="collapsible-body">
@@ -169,7 +186,7 @@
169 186
170 <li class="bold hide-on-large-only"> 187 <li class="bold hide-on-large-only">
171 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.delete'|trans }}" href="{{ path('delete_entry', { 'id': entry.id }) }}"> 188 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.delete'|trans }}" href="{{ path('delete_entry', { 'id': entry.id }) }}">
172 <i class="mdi-action-delete small"></i> 189 <i class="material-icons small">delete</i>
173 <span>{{ 'entry.view.left_menu.delete'|trans }}</span> 190 <span>{{ 'entry.view.left_menu.delete'|trans }}</span>
174 </a> 191 </a>
175 <div class="collapsible-body"></div> 192 <div class="collapsible-body"></div>
@@ -177,7 +194,7 @@
177 194
178 <li class="bold"> 195 <li class="bold">
179 <a class="waves-effect collapsible-header" href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.description'|trans }}"> 196 <a class="waves-effect collapsible-header" href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.description'|trans }}">
180 <i class="mdi-alert-error small"></i> 197 <i class="material-icons small">error</i>
181 <span>{{ 'entry.view.left_menu.problem.label'|trans }}</span> 198 <span>{{ 'entry.view.left_menu.problem.label'|trans }}</span>
182 </a> 199 </a>
183 <div class="collapsible-body"></div> 200 <div class="collapsible-body"></div>
@@ -193,21 +210,23 @@
193 <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1> 210 <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1>
194 </header> 211 </header>
195 <aside> 212 <aside>
196 <span class="link mdi-action-today" title="{{ 'entry.view.created_at'|trans }}"> {{ entry.createdAt|date('Y-m-d') }}</span>
197 {% set readingTime = entry.readingTime / app.user.config.readingSpeed %} 213 {% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
198 <span class="link mdi-action-query-builder"> 214 <span class="mdi-action-query-builder"></span>
215 <span class="link">
199 {% if readingTime > 0 %} 216 {% if readingTime > 0 %}
200 {{ 'entry.list.reading_time_minutes_short'|trans({'%readingTime%': readingTime|round}) }} 217 {{ 'entry.list.reading_time_minutes_short'|trans({'%readingTime%': readingTime|round}) }}
201 {% else %} 218 {% else %}
202 {{ 'entry.list.reading_time_less_one_minute_short'|trans|raw }} 219 {{ 'entry.list.reading_time_less_one_minute_short'|trans|raw }}
203 {% endif %} 220 {% endif %}
204 </span> 221 </span>
205 <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link mdi-content-link"> <span>{{ entry.domainName|removeWww }}</span></a> 222 <span class="mdi-action-today" title="{{ 'entry.view.created_at'|trans }}"> </span> <span class="link">{{ entry.createdAt|date('Y-m-d') }}</span>
206 <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span> 223 <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool">
224 <i class="material-icons link">link</i> <span class="link">{{ entry.domainName|removeWww }}</span></a>
225 <span class="tool"><i class="material-icons link">comment</i> <span class="link">{{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
207 <div id="list"> 226 <div id="list">
208 {% for tag in entry.tags %} 227 {% for tag in entry.tags %}
209 <div class="chip"> 228 <div class="chip">
210 {{ tag.label }} <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i class="mdi-action-delete"></i></a> 229 {{ tag.label }} <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i class="material-icons">delete</i></a>
211 </div> 230 </div>
212 {% endfor %} 231 {% endfor %}
213 </div> 232 </div>
@@ -226,27 +245,17 @@
226 </article> 245 </article>
227 </div> 246 </div>
228 247
229<script type="text/javascript"> 248<script id="annotationroutes" type="application/json">
230 249{
231var app = new annotator.App(); 250 "prefix": "",
232app.include(annotator.ui.main, { 251 "urls": {
233 element: document.querySelector('article') 252 "create": "{{ path('annotations_post_annotation', { 'entry': entry.id }) }}",
234}); 253 "update": "{{ path('annotations_put_annotation', { 'annotation': 'idAnnotation' }) }}",
235app.include(annotator.storage.http, { 254 "destroy": "{{ path('annotations_delete_annotation', { 'annotation': 'idAnnotation' }) }}",
236 prefix: '', 255 "search": "{{ path('annotations_get_annotations', { 'entry': entry.id }) }}"
237 urls: { 256 },
238 create: '{{ path('annotations_post_annotation', { 'entry': entry.id }) }}', 257 "entryId": "{{ entry.id }}"
239 update: '{{ path('annotations_put_annotation', { 'annotation': 'idAnnotation' }) }}', 258}</script>
240 destroy: '{{ path('annotations_delete_annotation', { 'annotation': 'idAnnotation' }) }}',
241 search: '{{ path('annotations_get_annotations', { 'entry': entry.id }) }}'
242 }
243});
244app
245.start()
246.then(function () {
247 app.annotations.load({entry: {{ entry.id }}});
248});
249</script>
250 259
251{% endblock %} 260{% endblock %}
252 261
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig
index d958c4b8..1690633a 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig
@@ -9,7 +9,10 @@
9 <br /> 9 <br />
10 <ul class="row data"> 10 <ul class="row data">
11 {% for tag in tags %} 11 {% for tag in tags %}
12 <li id="tag-{{ tag.id|e }}" class="col l4 m6 s12">{{tag.label}} ({{ tag.getEntriesByUserId(app.user.id) | length }})</li> 12 <li id="tag-{{ tag.id|e }}" class="col l4 m6 s12"><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{tag.label}} ({{ tag.entries.getValues | length }})</a></li>
13 {% endfor %} 13 {% endfor %}
14 </ul> 14 </ul>
15 <div>
16 <a href="{{ path('untagged') }}">{{ 'tag.list.see_untagged_entries'|trans }}</a>
17 </div>
15{% endblock %} 18{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/footer.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/footer.html.twig
deleted file mode 100644
index 7cb19966..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/footer.html.twig
+++ /dev/null
@@ -1,41 +0,0 @@
1<footer class="page-footer cyan darken-2">
2 <div class="container">
3 <div class="row">
4 <div class="col l6 s12">
5 <h5 class="white-text">{{ 'footer.wallabag.elsewhere'|trans }}</h5>
6 <p class="grey-text text-lighten-4">
7 <a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.google_play }}" title="Android">
8 <span class="icon-android"></span>
9 </a>
10 <a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.ios }}" title="iOS">
11 <span class="icon-apple"></span>
12 </a>
13 <a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.firefox }}" title="Firefox">
14 <span class="icon-firefox"></span>
15 </a>
16 <a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.chrome }}" title="Chrome">
17 <span class="icon-chrome"></span>
18 </a>
19 </p>
20 </div>
21 <div class="col l4 offset-l2 s12">
22 <h5 class="white-text">{{ 'footer.wallabag.social'|trans }}</h5>
23 <a target="_blank" class="grey-text text-lighten-3" href="{{ socialsUrl.twitter }}" title="Twitter">
24 <span class="icon-twitter"></span>
25 </a>
26 <a target="_blank" class="grey-text text-lighten-3" href="{{ socialsUrl.google_plus }}" title="Google+">
27 <span class="icon-google-plus2"></span>
28 </a>
29 <a target="_blank" class="grey-text text-lighten-3" href="{{ socialsUrl.facebook }}" title="Facebook">
30 <span class="icon-facebook2"></span>
31 </a>
32 </div>
33 </div>
34 </div>
35 <div class="footer-copyright">
36 <div class="container">
37 <p>{{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p>
38 <a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a>
39 </div>
40 </div>
41</footer>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
index 0573e8e5..df05e2a4 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
@@ -2,18 +2,12 @@
2 2
3{% block css %} 3{% block css %}
4 {{ parent() }} 4 {{ parent() }}
5 5 <link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/material/css/style.min.css') }}" media="screen,projection,print"/>
6 <link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/material/css/materialize.min.css') }}" media="screen,projection"/>
7 <link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/material/css/main.css') }}" media="all">
8 <link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/material/css/print.css') }}" media="print">
9{% endblock %} 6{% endblock %}
10 7
11{% block scripts %} 8{% block scripts %}
12 {{ parent() }} 9 {{ parent() }}
13 10 <script src="{{ asset('bundles/wallabagcore/themes/material/js/material.min.js') }}"></script>
14 <script src="{{ asset('bundles/wallabagcore/themes/material/js/jquery.tinydot.min.js') }}"></script>
15 <script src="{{ asset('bundles/wallabagcore/themes/material/js/materialize.min.js') }}"></script>
16 <script src="{{ asset('bundles/wallabagcore/themes/material/js/init.js') }}"></script>
17{% endblock %} 11{% endblock %}
18 12
19{% block header %} 13{% block header %}
@@ -25,6 +19,8 @@
25 Materialize.toast('{{ flashMessage|trans }}', 4000); 19 Materialize.toast('{{ flashMessage|trans }}', 4000);
26 </script> 20 </script>
27 {% endfor %} 21 {% endfor %}
22
23 {{ render(controller("WallabagImportBundle:Import:checkQueue")) }}
28{% endblock %} 24{% endblock %}
29 25
30{% block menu %} 26{% block menu %}
@@ -33,7 +29,7 @@
33 {% block logo %} 29 {% block logo %}
34 <li class="logo border-bottom"> 30 <li class="logo border-bottom">
35 <a title="{{ 'menu.left.back_to_unread'|trans }}" href="{{ path('unread') }}"> 31 <a title="{{ 'menu.left.back_to_unread'|trans }}" href="{{ path('unread') }}">
36 <img src="{{ asset('bundles/wallabagcore/themes/material/img/logo-square.png') }}" alt="wallabag logo" /> 32 <img src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-square.png') }}" alt="wallabag logo" />
37 </a> 33 </a>
38 </li> 34 </li>
39 {% endblock %} 35 {% endblock %}
@@ -41,19 +37,19 @@
41 {% set currentRoute = app.request.attributes.get('_route') %} 37 {% set currentRoute = app.request.attributes.get('_route') %}
42 38
43 <li class="bold {% if currentRoute == 'unread' or currentRoute == 'homepage' %}active{% endif %}"> 39 <li class="bold {% if currentRoute == 'unread' or currentRoute == 'homepage' %}active{% endif %}">
44 <a class="waves-effect" href="{{ path('unread') }}">{{ 'menu.left.unread'|trans }}</a> 40 <a class="waves-effect" href="{{ path('unread') }}">{{ 'menu.left.unread'|trans }} <span class="numberItems grey-text">{{ count_entries('unread') }}</span></a>
45 </li> 41 </li>
46 <li class="bold {% if currentRoute == 'starred' %}active{% endif %}"> 42 <li class="bold {% if currentRoute == 'starred' %}active{% endif %}">
47 <a class="waves-effect" href="{{ path('starred') }}">{{ 'menu.left.starred'|trans }}</a> 43 <a class="waves-effect" href="{{ path('starred') }}">{{ 'menu.left.starred'|trans }} <span class="numberItems grey-text">{{ count_entries('starred') }}</span></a>
48 </li> 44 </li>
49 <li class="bold {% if currentRoute == 'archive' %}active{% endif %}"> 45 <li class="bold {% if currentRoute == 'archive' %}active{% endif %}">
50 <a class="waves-effect" href="{{ path('archive') }}">{{ 'menu.left.archive'|trans }}</a> 46 <a class="waves-effect" href="{{ path('archive') }}">{{ 'menu.left.archive'|trans }} <span class="numberItems grey-text">{{ count_entries('archive') }}</span></a>
51 </li> 47 </li>
52 <li class="bold border-bottom {% if currentRoute == 'all' %}active{% endif %}"> 48 <li class="bold border-bottom {% if currentRoute == 'all' %}active{% endif %}">
53 <a class="waves-effect" href="{{ path('all') }}">{{ 'menu.left.all_articles'|trans }}</a> 49 <a class="waves-effect" href="{{ path('all') }}">{{ 'menu.left.all_articles'|trans }} <span class="numberItems grey-text">{{ count_entries('all') }}</span></a>
54 </li> 50 </li>
55 <li class="bold border-bottom {% if currentRoute == 'tags' %}active{% endif %}"> 51 <li class="bold border-bottom {% if currentRoute == 'tags' %}active{% endif %}">
56 <a class="waves-effect" href="{{ path('tag') }}">{{ 'menu.left.tags'|trans }}</a> 52 <a class="waves-effect" href="{{ path('tag') }}">{{ 'menu.left.tags'|trans }} <span class="numberItems grey-text">{{ count_tags() }}</span></a>
57 </li> 53 </li>
58 <li class="bold {% if currentRoute == 'config' %}active{% endif %}"> 54 <li class="bold {% if currentRoute == 'config' %}active{% endif %}">
59 <a class="waves-effect" href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a> 55 <a class="waves-effect" href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a>
@@ -77,7 +73,7 @@
77 </li> 73 </li>
78 </ul> 74 </ul>
79 <div class="nav-wrapper nav-panels"> 75 <div class="nav-wrapper nav-panels">
80 <a href="#" data-activates="slide-out" class="nav-panel-menu button-collapse"><i class="mdi-navigation-menu"></i></a> 76 <a href="#" data-activates="slide-out" class="nav-panel-menu button-collapse"><i class="material-icons">menu</i></a>
81 <div class="left action"> 77 <div class="left action">
82 {% block title %} 78 {% block title %}
83 {% endblock %} 79 {% endblock %}
@@ -86,22 +82,22 @@
86 <ul> 82 <ul>
87 <li class="bold"> 83 <li class="bold">
88 <a title="{{ 'menu.top.add_new_entry'|trans }}" class="waves-effect" href="{{ path('new') }}" id="nav-btn-add"> 84 <a title="{{ 'menu.top.add_new_entry'|trans }}" class="waves-effect" href="{{ path('new') }}" id="nav-btn-add">
89 <i class="mdi-content-add"></i> 85 <i class="material-icons">add</i>
90 </a> 86 </a>
91 </li> 87 </li>
92 <!--<li> 88 <!--<li>
93 <a title="{{ 'menu.top.search'|trans }}" class="waves-effect" href="javascript: void(null);" id="nav-btn-search"> 89 <a title="{{ 'menu.top.search'|trans }}" class="waves-effect" href="javascript: void(null);" id="nav-btn-search">
94 <i class="mdi-action-search"></i> 90 <i class="material-icons">search</i>
95 </a> 91 </a>
96 </li>--> 92 </li>-->
97 <li id="button_filters"> 93 <li id="button_filters">
98 <a title="{{ 'menu.top.filter_entries'|trans }}" href="#" data-activates="filters" class="nav-panel-menu button-collapse-right"> 94 <a title="{{ 'menu.top.filter_entries'|trans }}" href="#" data-activates="filters" class="nav-panel-menu button-collapse-right">
99 <i class="mdi-content-filter-list"></i> 95 <i class="material-icons">filter_list</i>
100 </a> 96 </a>
101 </li> 97 </li>
102 <li id="button_export"> 98 <li id="button_export">
103 <a title="{{ 'menu.top.export'|trans }}" class="nav-panel-menu button-collapse-right" href="#" data-activates="export" class="nav-panel-menu button-collapse-right"> 99 <a title="{{ 'menu.top.export'|trans }}" class="nav-panel-menu button-collapse-right" href="#" data-activates="export">
104 <i class="mdi-file-file-download"></i> 100 <i class="material-icons">file_download</i>
105 </a> 101 </a>
106 </li> 102 </li>
107 </ul> 103 </ul>
@@ -109,19 +105,26 @@
109 <form method="get" action="index.php"> 105 <form method="get" action="index.php">
110 <div class="input-field nav-panel-search" style="display: none"> 106 <div class="input-field nav-panel-search" style="display: none">
111 <input name="search" id="searchfield" type="search" required placeholder="{{ 'menu.search_form.input_label'|trans }}"> 107 <input name="search" id="searchfield" type="search" required placeholder="{{ 'menu.search_form.input_label'|trans }}">
112 <label for="search"><i class="mdi-action-search"></i></label> 108 <label for="search"><i class="material-icons search">search</i></label>
113 <i class="mdi-navigation-close"></i> 109 <i class="material-icons close">clear</i>
114 </div> 110 </div>
115 </form> 111 </form>
116 <div class="input-field nav-panel-add" style="display: none"> 112 <div class="input-field nav-panel-add" style="display: none">
117 {{ render(controller("WallabagCoreBundle:Entry:addEntryForm")) }} 113 {{ render(controller("WallabagCoreBundle:Entry:addEntryForm")) }}
118 <label for="add" class="active"><i class="mdi-content-add"></i></label> 114 <label for="add" class="active"><i class="material-icons add">add</i></label>
119 <i class="mdi-navigation-close"></i> 115 <i class="material-icons close">clear</i>
120 </div> 116 </div>
121 </div> 117 </div>
122 </nav> 118 </nav>
123{% endblock %} 119{% endblock %}
124 120
125{% block footer %} 121{% block footer %}
126 {{ render(controller("WallabagCoreBundle:Footer:index")) }} 122 <footer class="page-footer cyan darken-2">
123 <div class="footer-copyright">
124 <div class="container">
125 <p>{{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p>
126 <a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a>
127 </div>
128 </div>
129 </footer>
127{% endblock %} 130{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Twig/WallabagExtension.php b/src/Wallabag/CoreBundle/Twig/WallabagExtension.php
index 1a308070..fb4c7412 100644
--- a/src/Wallabag/CoreBundle/Twig/WallabagExtension.php
+++ b/src/Wallabag/CoreBundle/Twig/WallabagExtension.php
@@ -2,8 +2,25 @@
2 2
3namespace Wallabag\CoreBundle\Twig; 3namespace Wallabag\CoreBundle\Twig;
4 4
5class WallabagExtension extends \Twig_Extension 5use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
6use Wallabag\CoreBundle\Repository\EntryRepository;
7use Wallabag\CoreBundle\Repository\TagRepository;
8
9class WallabagExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface
6{ 10{
11 private $tokenStorage;
12 private $entryRepository;
13 private $tagRepository;
14 private $lifeTime;
15
16 public function __construct(EntryRepository $entryRepository = null, TagRepository $tagRepository = null, TokenStorageInterface $tokenStorage = null, $lifeTime = 0)
17 {
18 $this->entryRepository = $entryRepository;
19 $this->tagRepository = $tagRepository;
20 $this->tokenStorage = $tokenStorage;
21 $this->lifeTime = $lifeTime;
22 }
23
7 public function getFilters() 24 public function getFilters()
8 { 25 {
9 return [ 26 return [
@@ -11,11 +28,85 @@ class WallabagExtension extends \Twig_Extension
11 ]; 28 ];
12 } 29 }
13 30
31 public function getFunctions()
32 {
33 return array(
34 new \Twig_SimpleFunction('count_entries', [$this, 'countEntries']),
35 new \Twig_SimpleFunction('count_tags', [$this, 'countTags']),
36 );
37 }
38
14 public function removeWww($url) 39 public function removeWww($url)
15 { 40 {
16 return preg_replace('/^www\./i', '', $url); 41 return preg_replace('/^www\./i', '', $url);
17 } 42 }
18 43
44 /**
45 * Return number of entries depending of the type (unread, archive, starred or all).
46 *
47 * @param string $type Type of entries to count
48 *
49 * @return int
50 */
51 public function countEntries($type)
52 {
53 $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
54
55 if (null === $user || !is_object($user)) {
56 return 0;
57 }
58
59 switch ($type) {
60 case 'starred':
61 $qb = $this->entryRepository->getBuilderForStarredByUser($user->getId());
62 break;
63
64 case 'archive':
65 $qb = $this->entryRepository->getBuilderForArchiveByUser($user->getId());
66 break;
67
68 case 'unread':
69 $qb = $this->entryRepository->getBuilderForUnreadByUser($user->getId());
70 break;
71
72 case 'all':
73 $qb = $this->entryRepository->getBuilderForAllByUser($user->getId());
74 break;
75
76 default:
77 throw new \InvalidArgumentException(sprintf('Type "%s" is not implemented.', $type));
78 }
79
80 // THANKS to PostgreSQL we CAN'T make a DEAD SIMPLE count(e.id)
81 // ERROR: column "e0_.id" must appear in the GROUP BY clause or be used in an aggregate function
82 $query = $qb
83 ->select('e.id')
84 ->groupBy('e.id')
85 ->getQuery();
86
87 $query->useQueryCache(true);
88 $query->useResultCache(true);
89 $query->setResultCacheLifetime($this->lifeTime);
90
91 return count($query->getArrayResult());
92 }
93
94 /**
95 * Return number of tags.
96 *
97 * @return int
98 */
99 public function countTags()
100 {
101 $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
102
103 if (null === $user || !is_object($user)) {
104 return 0;
105 }
106
107 return $this->tagRepository->countAllTags($user->getId());
108 }
109
19 public function getName() 110 public function getName()
20 { 111 {
21 return 'wallabag_extension'; 112 return 'wallabag_extension';
diff --git a/src/Wallabag/ImportBundle/Command/ImportCommand.php b/src/Wallabag/ImportBundle/Command/ImportCommand.php
index dfbfc2f7..1df38295 100644
--- a/src/Wallabag/ImportBundle/Command/ImportCommand.php
+++ b/src/Wallabag/ImportBundle/Command/ImportCommand.php
@@ -13,10 +13,12 @@ class ImportCommand extends ContainerAwareCommand
13 protected function configure() 13 protected function configure()
14 { 14 {
15 $this 15 $this
16 ->setName('wallabag:import-v1') 16 ->setName('wallabag:import')
17 ->setDescription('Import entries from a JSON export from a wallabag v1 instance') 17 ->setDescription('Import entries from a JSON export from a wallabag v1 instance')
18 ->addArgument('userId', InputArgument::REQUIRED, 'User ID to populate') 18 ->addArgument('userId', InputArgument::REQUIRED, 'User ID to populate')
19 ->addArgument('filepath', InputArgument::REQUIRED, 'Path to the JSON file') 19 ->addArgument('filepath', InputArgument::REQUIRED, 'Path to the JSON file')
20 ->addOption('importer', null, InputArgument::OPTIONAL, 'The importer to use: wallabag v1, v2, firefox or chrome', 'v1')
21 ->addOption('markAsRead', null, InputArgument::OPTIONAL, 'Mark all entries as read', false)
20 ; 22 ;
21 } 23 }
22 24
@@ -24,6 +26,10 @@ class ImportCommand extends ContainerAwareCommand
24 { 26 {
25 $output->writeln('Start : '.(new \DateTime())->format('d-m-Y G:i:s').' ---'); 27 $output->writeln('Start : '.(new \DateTime())->format('d-m-Y G:i:s').' ---');
26 28
29 if (!file_exists($input->getArgument('filepath'))) {
30 throw new Exception(sprintf('File "%s" not found', $input->getArgument('filepath')));
31 }
32
27 $em = $this->getContainer()->get('doctrine')->getManager(); 33 $em = $this->getContainer()->get('doctrine')->getManager();
28 // Turning off doctrine default logs queries for saving memory 34 // Turning off doctrine default logs queries for saving memory
29 $em->getConnection()->getConfiguration()->setSQLLogger(null); 35 $em->getConnection()->getConfiguration()->setSQLLogger(null);
@@ -34,9 +40,26 @@ class ImportCommand extends ContainerAwareCommand
34 throw new Exception(sprintf('User with id "%s" not found', $input->getArgument('userId'))); 40 throw new Exception(sprintf('User with id "%s" not found', $input->getArgument('userId')));
35 } 41 }
36 42
37 $wallabag = $this->getContainer()->get('wallabag_import.wallabag_v1.import'); 43 switch ($input->getOption('importer')) {
44 case 'v2':
45 $wallabag = $this->getContainer()->get('wallabag_import.wallabag_v2.import');
46 break;
47 case 'firefox':
48 $wallabag = $this->getContainer()->get('wallabag_import.firefox.import');
49 break;
50 case 'chrome':
51 $wallabag = $this->getContainer()->get('wallabag_import.chrome.import');
52 break;
53 case 'v1':
54 default:
55 $wallabag = $this->getContainer()->get('wallabag_import.wallabag_v1.import');
56 break;
57 }
58
59 $wallabag->setMarkAsRead($input->getOption('markAsRead'));
60 $wallabag->setUser($user);
61
38 $res = $wallabag 62 $res = $wallabag
39 ->setUser($user)
40 ->setFilepath($input->getArgument('filepath')) 63 ->setFilepath($input->getArgument('filepath'))
41 ->import(); 64 ->import();
42 65
diff --git a/src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php b/src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php
new file mode 100644
index 00000000..c2c11f11
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php
@@ -0,0 +1,44 @@
1<?php
2
3namespace Wallabag\ImportBundle\Command;
4
5use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
6use Symfony\Component\Config\Definition\Exception\Exception;
7use Symfony\Component\Console\Input\InputArgument;
8use Symfony\Component\Console\Input\InputOption;
9use Symfony\Component\Console\Input\InputInterface;
10use Symfony\Component\Console\Output\OutputInterface;
11use Simpleue\Worker\QueueWorker;
12
13class RedisWorkerCommand extends ContainerAwareCommand
14{
15 protected function configure()
16 {
17 $this
18 ->setName('wallabag:import:redis-worker')
19 ->setDescription('Launch Redis worker')
20 ->addArgument('serviceName', InputArgument::REQUIRED, 'Service to use: wallabag_v1, wallabag_v2, pocket, readability, firefox, chrome or instapaper')
21 ->addOption('maxIterations', '', InputOption::VALUE_OPTIONAL, 'Number of iterations before stoping', false)
22 ;
23 }
24
25 protected function execute(InputInterface $input, OutputInterface $output)
26 {
27 $output->writeln('Worker started at: '.(new \DateTime())->format('d-m-Y G:i:s'));
28 $output->writeln('Waiting for message ...');
29
30 $serviceName = $input->getArgument('serviceName');
31
32 if (!$this->getContainer()->has('wallabag_import.queue.redis.'.$serviceName) || !$this->getContainer()->has('wallabag_import.consumer.redis.'.$serviceName)) {
33 throw new Exception(sprintf('No queue or consumer found for service name: "%s"', $input->getArgument('serviceName')));
34 }
35
36 $worker = new QueueWorker(
37 $this->getContainer()->get('wallabag_import.queue.redis.'.$serviceName),
38 $this->getContainer()->get('wallabag_import.consumer.redis.'.$serviceName),
39 $input->getOption('maxIterations')
40 );
41
42 $worker->start();
43 }
44}
diff --git a/src/Wallabag/ImportBundle/Consumer/AMQPEntryConsumer.php b/src/Wallabag/ImportBundle/Consumer/AMQPEntryConsumer.php
new file mode 100644
index 00000000..5aaa8c03
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Consumer/AMQPEntryConsumer.php
@@ -0,0 +1,17 @@
1<?php
2
3namespace Wallabag\ImportBundle\Consumer;
4
5use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface;
6use PhpAmqpLib\Message\AMQPMessage;
7
8class AMQPEntryConsumer extends AbstractConsumer implements ConsumerInterface
9{
10 /**
11 * {@inheritdoc}
12 */
13 public function execute(AMQPMessage $msg)
14 {
15 return $this->handleMessage($msg->body);
16 }
17}
diff --git a/src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php b/src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php
new file mode 100644
index 00000000..2b85ad76
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php
@@ -0,0 +1,74 @@
1<?php
2
3namespace Wallabag\ImportBundle\Consumer;
4
5use Doctrine\ORM\EntityManager;
6use Wallabag\ImportBundle\Import\AbstractImport;
7use Wallabag\UserBundle\Repository\UserRepository;
8use Wallabag\CoreBundle\Entity\Entry;
9use Wallabag\CoreBundle\Entity\Tag;
10use Psr\Log\LoggerInterface;
11use Psr\Log\NullLogger;
12
13abstract class AbstractConsumer
14{
15 protected $em;
16 protected $userRepository;
17 protected $import;
18 protected $logger;
19
20 public function __construct(EntityManager $em, UserRepository $userRepository, AbstractImport $import, LoggerInterface $logger = null)
21 {
22 $this->em = $em;
23 $this->userRepository = $userRepository;
24 $this->import = $import;
25 $this->logger = $logger ?: new NullLogger();
26 }
27
28 /**
29 * Handle a message and save it.
30 *
31 * @param string $body Message from the queue (in json)
32 *
33 * @return bool
34 */
35 protected function handleMessage($body)
36 {
37 $storedEntry = json_decode($body, true);
38
39 $user = $this->userRepository->find($storedEntry['userId']);
40
41 // no user? Drop message
42 if (null === $user) {
43 $this->logger->warning('Unable to retrieve user', ['entry' => $storedEntry]);
44
45 return false;
46 }
47
48 $this->import->setUser($user);
49
50 $entry = $this->import->parseEntry($storedEntry);
51
52 if (null === $entry) {
53 $this->logger->warning('Unable to parse entry', ['entry' => $storedEntry]);
54
55 return false;
56 }
57
58 try {
59 $this->em->flush();
60
61 // clear only affected entities
62 $this->em->clear(Entry::class);
63 $this->em->clear(Tag::class);
64 } catch (\Exception $e) {
65 $this->logger->warning('Unable to save entry', ['entry' => $storedEntry, 'exception' => $e]);
66
67 return false;
68 }
69
70 $this->logger->info('Content with url imported! ('.$entry->getUrl().')');
71
72 return true;
73 }
74}
diff --git a/src/Wallabag/ImportBundle/Consumer/RedisEntryConsumer.php b/src/Wallabag/ImportBundle/Consumer/RedisEntryConsumer.php
new file mode 100644
index 00000000..450b71ff
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Consumer/RedisEntryConsumer.php
@@ -0,0 +1,29 @@
1<?php
2
3namespace Wallabag\ImportBundle\Consumer;
4
5use Simpleue\Job\Job;
6
7class RedisEntryConsumer extends AbstractConsumer implements Job
8{
9 /**
10 * Handle one message by one message.
11 *
12 * @param string $job Content of the message (directly from Redis)
13 *
14 * @return bool
15 */
16 public function manage($job)
17 {
18 return $this->handleMessage($job);
19 }
20
21 /**
22 * Should tell if the given job will kill the worker.
23 * We don't want to stop it :).
24 */
25 public function isStopJob($job)
26 {
27 return false;
28 }
29}
diff --git a/src/Wallabag/ImportBundle/Controller/BrowserController.php b/src/Wallabag/ImportBundle/Controller/BrowserController.php
new file mode 100644
index 00000000..144a4880
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Controller/BrowserController.php
@@ -0,0 +1,90 @@
1<?php
2
3namespace Wallabag\ImportBundle\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
7use Symfony\Component\HttpFoundation\Request;
8use Symfony\Component\HttpFoundation\Response;
9use Wallabag\ImportBundle\Form\Type\UploadImportType;
10
11abstract class BrowserController extends Controller
12{
13 /**
14 * Return the service to handle the import.
15 *
16 * @return \Wallabag\ImportBundle\Import\ImportInterface
17 */
18 abstract protected function getImportService();
19
20 /**
21 * Return the template used for the form.
22 *
23 * @return string
24 */
25 abstract protected function getImportTemplate();
26
27 /**
28 * @Route("/browser", name="import_browser")
29 *
30 * @param Request $request
31 *
32 * @return Response
33 */
34 public function indexAction(Request $request)
35 {
36 $form = $this->createForm(UploadImportType::class);
37 $form->handleRequest($request);
38
39 $wallabag = $this->getImportService();
40 $wallabag->setUser($this->getUser());
41
42 if ($form->isValid()) {
43 $file = $form->get('file')->getData();
44 $markAsRead = $form->get('mark_as_read')->getData();
45 $name = $this->getUser()->getId().'.json';
46
47 if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) {
48 $res = $wallabag
49 ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name)
50 ->setMarkAsRead($markAsRead)
51 ->import();
52
53 $message = 'flashes.import.notice.failed';
54
55 if (true === $res) {
56 $summary = $wallabag->getSummary();
57 $message = $this->get('translator')->trans('flashes.import.notice.summary', [
58 '%imported%' => $summary['imported'],
59 '%skipped%' => $summary['skipped'],
60 ]);
61
62 if (0 < $summary['queued']) {
63 $message = $this->get('translator')->trans('flashes.import.notice.summary_with_queue', [
64 '%queued%' => $summary['queued'],
65 ]);
66 }
67
68 unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name);
69 }
70
71 $this->get('session')->getFlashBag()->add(
72 'notice',
73 $message
74 );
75
76 return $this->redirect($this->generateUrl('homepage'));
77 } else {
78 $this->get('session')->getFlashBag()->add(
79 'notice',
80 'flashes.import.notice.failed_on_file'
81 );
82 }
83 }
84
85 return $this->render($this->getImportTemplate(), [
86 'form' => $form->createView(),
87 'import' => $wallabag,
88 ]);
89 }
90}
diff --git a/src/Wallabag/ImportBundle/Controller/ChromeController.php b/src/Wallabag/ImportBundle/Controller/ChromeController.php
new file mode 100644
index 00000000..454f3347
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Controller/ChromeController.php
@@ -0,0 +1,41 @@
1<?php
2
3namespace Wallabag\ImportBundle\Controller;
4
5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6use Symfony\Component\HttpFoundation\Request;
7
8class ChromeController extends BrowserController
9{
10 /**
11 * {@inheritdoc}
12 */
13 protected function getImportService()
14 {
15 $service = $this->get('wallabag_import.chrome.import');
16
17 if ($this->get('craue_config')->get('import_with_rabbitmq')) {
18 $service->setProducer($this->get('old_sound_rabbit_mq.import_chrome_producer'));
19 } elseif ($this->get('craue_config')->get('import_with_redis')) {
20 $service->setProducer($this->get('wallabag_import.producer.redis.chrome'));
21 }
22
23 return $service;
24 }
25
26 /**
27 * {@inheritdoc}
28 */
29 protected function getImportTemplate()
30 {
31 return 'WallabagImportBundle:Chrome:index.html.twig';
32 }
33
34 /**
35 * @Route("/chrome", name="import_chrome")
36 */
37 public function indexAction(Request $request)
38 {
39 return parent::indexAction($request);
40 }
41}
diff --git a/src/Wallabag/ImportBundle/Controller/FirefoxController.php b/src/Wallabag/ImportBundle/Controller/FirefoxController.php
new file mode 100644
index 00000000..c329b9c4
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Controller/FirefoxController.php
@@ -0,0 +1,41 @@
1<?php
2
3namespace Wallabag\ImportBundle\Controller;
4
5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6use Symfony\Component\HttpFoundation\Request;
7
8class FirefoxController extends BrowserController
9{
10 /**
11 * {@inheritdoc}
12 */
13 protected function getImportService()
14 {
15 $service = $this->get('wallabag_import.firefox.import');
16
17 if ($this->get('craue_config')->get('import_with_rabbitmq')) {
18 $service->setProducer($this->get('old_sound_rabbit_mq.import_firefox_producer'));
19 } elseif ($this->get('craue_config')->get('import_with_redis')) {
20 $service->setProducer($this->get('wallabag_import.producer.redis.firefox'));
21 }
22
23 return $service;
24 }
25
26 /**
27 * {@inheritdoc}
28 */
29 protected function getImportTemplate()
30 {
31 return 'WallabagImportBundle:Firefox:index.html.twig';
32 }
33
34 /**
35 * @Route("/firefox", name="import_firefox")
36 */
37 public function indexAction(Request $request)
38 {
39 return parent::indexAction($request);
40 }
41}
diff --git a/src/Wallabag/ImportBundle/Controller/ImportController.php b/src/Wallabag/ImportBundle/Controller/ImportController.php
index c1486e38..15de75ff 100644
--- a/src/Wallabag/ImportBundle/Controller/ImportController.php
+++ b/src/Wallabag/ImportBundle/Controller/ImportController.php
@@ -16,4 +16,82 @@ class ImportController extends Controller
16 'imports' => $this->get('wallabag_import.chain')->getAll(), 16 'imports' => $this->get('wallabag_import.chain')->getAll(),
17 ]); 17 ]);
18 } 18 }
19
20 /**
21 * Display how many messages are queue (both in Redis and RabbitMQ).
22 * Only for admins.
23 */
24 public function checkQueueAction()
25 {
26 $nbRedisMessages = null;
27 $nbRabbitMessages = null;
28 $redisNotInstalled = false;
29 $rabbitNotInstalled = false;
30
31 if (!$this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')) {
32 return $this->render('WallabagImportBundle:Import:check_queue.html.twig');
33 }
34
35 if ($this->get('craue_config')->get('import_with_rabbitmq')) {
36 // in case rabbit is activated but not installed
37 try {
38 $nbRabbitMessages = $this->getTotalMessageInRabbitQueue('pocket')
39 + $this->getTotalMessageInRabbitQueue('readability')
40 + $this->getTotalMessageInRabbitQueue('wallabag_v1')
41 + $this->getTotalMessageInRabbitQueue('wallabag_v2')
42 + $this->getTotalMessageInRabbitQueue('firefox')
43 + $this->getTotalMessageInRabbitQueue('chrome')
44 + $this->getTotalMessageInRabbitQueue('instapaper')
45 ;
46 } catch (\Exception $e) {
47 $rabbitNotInstalled = true;
48 }
49 } elseif ($this->get('craue_config')->get('import_with_redis')) {
50 $redis = $this->get('wallabag_core.redis.client');
51
52 try {
53 $nbRedisMessages = $redis->llen('wallabag.import.pocket')
54 + $redis->llen('wallabag.import.readability')
55 + $redis->llen('wallabag.import.wallabag_v1')
56 + $redis->llen('wallabag.import.wallabag_v2')
57 + $redis->llen('wallabag.import.firefox')
58 + $redis->llen('wallabag.import.chrome')
59 + $redis->llen('wallabag.import.instapaper')
60 ;
61 } catch (\Exception $e) {
62 $redisNotInstalled = true;
63 }
64 }
65
66 return $this->render('WallabagImportBundle:Import:check_queue.html.twig', [
67 'nbRedisMessages' => $nbRedisMessages,
68 'nbRabbitMessages' => $nbRabbitMessages,
69 'redisNotInstalled' => $redisNotInstalled,
70 'rabbitNotInstalled' => $rabbitNotInstalled,
71 ]);
72 }
73
74 /**
75 * Count message in RabbitMQ queue.
76 * It get one message without acking it (so it'll stay in the queue)
77 * which will include the total of *other* messages in the queue.
78 * Adding one to that messages will result in the full total message.
79 *
80 * @param string $importService The import service related: pocket, readability, wallabag_v1 or wallabag_v2
81 *
82 * @return int
83 */
84 private function getTotalMessageInRabbitQueue($importService)
85 {
86 $message = $this
87 ->get('old_sound_rabbit_mq.import_'.$importService.'_consumer')
88 ->getChannel()
89 ->basic_get('wallabag.import.'.$importService);
90
91 if (null === $message) {
92 return 0;
93 }
94
95 return $message->delivery_info['message_count'] + 1;
96 }
19} 97}
diff --git a/src/Wallabag/ImportBundle/Controller/InstapaperController.php b/src/Wallabag/ImportBundle/Controller/InstapaperController.php
new file mode 100644
index 00000000..c3fc8a39
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Controller/InstapaperController.php
@@ -0,0 +1,77 @@
1<?php
2
3namespace Wallabag\ImportBundle\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
7use Symfony\Component\HttpFoundation\Request;
8use Wallabag\ImportBundle\Form\Type\UploadImportType;
9
10class InstapaperController extends Controller
11{
12 /**
13 * @Route("/instapaper", name="import_instapaper")
14 */
15 public function indexAction(Request $request)
16 {
17 $form = $this->createForm(UploadImportType::class);
18 $form->handleRequest($request);
19
20 $instapaper = $this->get('wallabag_import.instapaper.import');
21 $instapaper->setUser($this->getUser());
22
23 if ($this->get('craue_config')->get('import_with_rabbitmq')) {
24 $instapaper->setProducer($this->get('old_sound_rabbit_mq.import_instapaper_producer'));
25 } elseif ($this->get('craue_config')->get('import_with_redis')) {
26 $instapaper->setProducer($this->get('wallabag_import.producer.redis.instapaper'));
27 }
28
29 if ($form->isValid()) {
30 $file = $form->get('file')->getData();
31 $markAsRead = $form->get('mark_as_read')->getData();
32 $name = 'instapaper_'.$this->getUser()->getId().'.csv';
33
34 if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) {
35 $res = $instapaper
36 ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name)
37 ->setMarkAsRead($markAsRead)
38 ->import();
39
40 $message = 'flashes.import.notice.failed';
41
42 if (true === $res) {
43 $summary = $instapaper->getSummary();
44 $message = $this->get('translator')->trans('flashes.import.notice.summary', [
45 '%imported%' => $summary['imported'],
46 '%skipped%' => $summary['skipped'],
47 ]);
48
49 if (0 < $summary['queued']) {
50 $message = $this->get('translator')->trans('flashes.import.notice.summary_with_queue', [
51 '%queued%' => $summary['queued'],
52 ]);
53 }
54
55 unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name);
56 }
57
58 $this->get('session')->getFlashBag()->add(
59 'notice',
60 $message
61 );
62
63 return $this->redirect($this->generateUrl('homepage'));
64 } else {
65 $this->get('session')->getFlashBag()->add(
66 'notice',
67 'flashes.import.notice.failed_on_file'
68 );
69 }
70 }
71
72 return $this->render('WallabagImportBundle:Instapaper:index.html.twig', [
73 'form' => $form->createView(),
74 'import' => $instapaper,
75 ]);
76 }
77}
diff --git a/src/Wallabag/ImportBundle/Controller/PocketController.php b/src/Wallabag/ImportBundle/Controller/PocketController.php
index 36ee25bf..56be5cbf 100644
--- a/src/Wallabag/ImportBundle/Controller/PocketController.php
+++ b/src/Wallabag/ImportBundle/Controller/PocketController.php
@@ -11,11 +11,30 @@ use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
11class PocketController extends Controller 11class PocketController extends Controller
12{ 12{
13 /** 13 /**
14 * Return Pocket Import Service with or without RabbitMQ enabled.
15 *
16 * @return \Wallabag\ImportBundle\Import\PocketImport
17 */
18 private function getPocketImportService()
19 {
20 $pocket = $this->get('wallabag_import.pocket.import');
21 $pocket->setUser($this->getUser());
22
23 if ($this->get('craue_config')->get('import_with_rabbitmq')) {
24 $pocket->setProducer($this->get('old_sound_rabbit_mq.import_pocket_producer'));
25 } elseif ($this->get('craue_config')->get('import_with_redis')) {
26 $pocket->setProducer($this->get('wallabag_import.producer.redis.pocket'));
27 }
28
29 return $pocket;
30 }
31
32 /**
14 * @Route("/pocket", name="import_pocket") 33 * @Route("/pocket", name="import_pocket")
15 */ 34 */
16 public function indexAction() 35 public function indexAction()
17 { 36 {
18 $pocket = $this->get('wallabag_import.pocket.import'); 37 $pocket = $this->getPocketImportService();
19 $form = $this->createFormBuilder($pocket) 38 $form = $this->createFormBuilder($pocket)
20 ->add('mark_as_read', CheckboxType::class, [ 39 ->add('mark_as_read', CheckboxType::class, [
21 'label' => 'import.form.mark_as_read_label', 40 'label' => 'import.form.mark_as_read_label',
@@ -24,8 +43,8 @@ class PocketController extends Controller
24 ->getForm(); 43 ->getForm();
25 44
26 return $this->render('WallabagImportBundle:Pocket:index.html.twig', [ 45 return $this->render('WallabagImportBundle:Pocket:index.html.twig', [
27 'import' => $this->get('wallabag_import.pocket.import'), 46 'import' => $this->getPocketImportService(),
28 'has_consumer_key' => '' == trim($this->get('craue_config')->get('pocket_consumer_key')) ? false : true, 47 'has_consumer_key' => '' === trim($this->getUser()->getConfig()->getPocketConsumerKey()) ? false : true,
29 'form' => $form->createView(), 48 'form' => $form->createView(),
30 ]); 49 ]);
31 } 50 }
@@ -35,7 +54,7 @@ class PocketController extends Controller
35 */ 54 */
36 public function authAction(Request $request) 55 public function authAction(Request $request)
37 { 56 {
38 $requestToken = $this->get('wallabag_import.pocket.import') 57 $requestToken = $this->getPocketImportService()
39 ->getRequestToken($this->generateUrl('import', [], UrlGeneratorInterface::ABSOLUTE_URL)); 58 ->getRequestToken($this->generateUrl('import', [], UrlGeneratorInterface::ABSOLUTE_URL));
40 59
41 if (false === $requestToken) { 60 if (false === $requestToken) {
@@ -62,7 +81,7 @@ class PocketController extends Controller
62 public function callbackAction() 81 public function callbackAction()
63 { 82 {
64 $message = 'flashes.import.notice.failed'; 83 $message = 'flashes.import.notice.failed';
65 $pocket = $this->get('wallabag_import.pocket.import'); 84 $pocket = $this->getPocketImportService();
66 85
67 $markAsRead = $this->get('session')->get('mark_as_read'); 86 $markAsRead = $this->get('session')->get('mark_as_read');
68 $this->get('session')->remove('mark_as_read'); 87 $this->get('session')->remove('mark_as_read');
@@ -83,6 +102,12 @@ class PocketController extends Controller
83 '%imported%' => $summary['imported'], 102 '%imported%' => $summary['imported'],
84 '%skipped%' => $summary['skipped'], 103 '%skipped%' => $summary['skipped'],
85 ]); 104 ]);
105
106 if (0 < $summary['queued']) {
107 $message = $this->get('translator')->trans('flashes.import.notice.summary_with_queue', [
108 '%queued%' => $summary['queued'],
109 ]);
110 }
86 } 111 }
87 112
88 $this->get('session')->getFlashBag()->add( 113 $this->get('session')->getFlashBag()->add(
diff --git a/src/Wallabag/ImportBundle/Controller/ReadabilityController.php b/src/Wallabag/ImportBundle/Controller/ReadabilityController.php
new file mode 100644
index 00000000..d00e22c2
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Controller/ReadabilityController.php
@@ -0,0 +1,77 @@
1<?php
2
3namespace Wallabag\ImportBundle\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
7use Symfony\Component\HttpFoundation\Request;
8use Wallabag\ImportBundle\Form\Type\UploadImportType;
9
10class ReadabilityController extends Controller
11{
12 /**
13 * @Route("/readability", name="import_readability")
14 */
15 public function indexAction(Request $request)
16 {
17 $form = $this->createForm(UploadImportType::class);
18 $form->handleRequest($request);
19
20 $readability = $this->get('wallabag_import.readability.import');
21 $readability->setUser($this->getUser());
22
23 if ($this->get('craue_config')->get('import_with_rabbitmq')) {
24 $readability->setProducer($this->get('old_sound_rabbit_mq.import_readability_producer'));
25 } elseif ($this->get('craue_config')->get('import_with_redis')) {
26 $readability->setProducer($this->get('wallabag_import.producer.redis.readability'));
27 }
28
29 if ($form->isValid()) {
30 $file = $form->get('file')->getData();
31 $markAsRead = $form->get('mark_as_read')->getData();
32 $name = 'readability_'.$this->getUser()->getId().'.json';
33
34 if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) {
35 $res = $readability
36 ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name)
37 ->setMarkAsRead($markAsRead)
38 ->import();
39
40 $message = 'flashes.import.notice.failed';
41
42 if (true === $res) {
43 $summary = $readability->getSummary();
44 $message = $this->get('translator')->trans('flashes.import.notice.summary', [
45 '%imported%' => $summary['imported'],
46 '%skipped%' => $summary['skipped'],
47 ]);
48
49 if (0 < $summary['queued']) {
50 $message = $this->get('translator')->trans('flashes.import.notice.summary_with_queue', [
51 '%queued%' => $summary['queued'],
52 ]);
53 }
54
55 unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name);
56 }
57
58 $this->get('session')->getFlashBag()->add(
59 'notice',
60 $message
61 );
62
63 return $this->redirect($this->generateUrl('homepage'));
64 } else {
65 $this->get('session')->getFlashBag()->add(
66 'notice',
67 'flashes.import.notice.failed_on_file'
68 );
69 }
70 }
71
72 return $this->render('WallabagImportBundle:Readability:index.html.twig', [
73 'form' => $form->createView(),
74 'import' => $readability,
75 ]);
76 }
77}
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagController.php b/src/Wallabag/ImportBundle/Controller/WallabagController.php
index 76ced0d2..9c0cde80 100644
--- a/src/Wallabag/ImportBundle/Controller/WallabagController.php
+++ b/src/Wallabag/ImportBundle/Controller/WallabagController.php
@@ -38,15 +38,15 @@ abstract class WallabagController extends Controller
38 $form->handleRequest($request); 38 $form->handleRequest($request);
39 39
40 $wallabag = $this->getImportService(); 40 $wallabag = $this->getImportService();
41 $wallabag->setUser($this->getUser());
41 42
42 if ($form->isValid()) { 43 if ($form->isValid()) {
43 $file = $form->get('file')->getData(); 44 $file = $form->get('file')->getData();
44 $markAsRead = $form->get('mark_as_read')->getData(); 45 $markAsRead = $form->get('mark_as_read')->getData();
45 $name = $this->getUser()->getId().'.json'; 46 $name = $this->getUser()->getId().'.json';
46 47
47 if (in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { 48 if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) {
48 $res = $wallabag 49 $res = $wallabag
49 ->setUser($this->getUser())
50 ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name) 50 ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name)
51 ->setMarkAsRead($markAsRead) 51 ->setMarkAsRead($markAsRead)
52 ->import(); 52 ->import();
@@ -60,6 +60,12 @@ abstract class WallabagController extends Controller
60 '%skipped%' => $summary['skipped'], 60 '%skipped%' => $summary['skipped'],
61 ]); 61 ]);
62 62
63 if (0 < $summary['queued']) {
64 $message = $this->get('translator')->trans('flashes.import.notice.summary_with_queue', [
65 '%queued%' => $summary['queued'],
66 ]);
67 }
68
63 unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name); 69 unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name);
64 } 70 }
65 71
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php b/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php
index 3e748d57..312c7a35 100644
--- a/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php
+++ b/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php
@@ -12,7 +12,15 @@ class WallabagV1Controller extends WallabagController
12 */ 12 */
13 protected function getImportService() 13 protected function getImportService()
14 { 14 {
15 return $this->get('wallabag_import.wallabag_v1.import'); 15 $service = $this->get('wallabag_import.wallabag_v1.import');
16
17 if ($this->get('craue_config')->get('import_with_rabbitmq')) {
18 $service->setProducer($this->get('old_sound_rabbit_mq.import_wallabag_v1_producer'));
19 } elseif ($this->get('craue_config')->get('import_with_redis')) {
20 $service->setProducer($this->get('wallabag_import.producer.redis.wallabag_v1'));
21 }
22
23 return $service;
16 } 24 }
17 25
18 /** 26 /**
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php b/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php
index c2a42165..45211fe6 100644
--- a/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php
+++ b/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php
@@ -12,7 +12,15 @@ class WallabagV2Controller extends WallabagController
12 */ 12 */
13 protected function getImportService() 13 protected function getImportService()
14 { 14 {
15 return $this->get('wallabag_import.wallabag_v2.import'); 15 $service = $this->get('wallabag_import.wallabag_v2.import');
16
17 if ($this->get('craue_config')->get('import_with_rabbitmq')) {
18 $service->setProducer($this->get('old_sound_rabbit_mq.import_wallabag_v2_producer'));
19 } elseif ($this->get('craue_config')->get('import_with_redis')) {
20 $service->setProducer($this->get('wallabag_import.producer.redis.wallabag_v2'));
21 }
22
23 return $service;
16 } 24 }
17 25
18 /** 26 /**
diff --git a/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php b/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php
index 92a167d9..f50424c1 100644
--- a/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php
+++ b/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php
@@ -15,6 +15,7 @@ class UploadImportType extends AbstractType
15 $builder 15 $builder
16 ->add('file', FileType::class, [ 16 ->add('file', FileType::class, [
17 'label' => 'import.form.file_label', 17 'label' => 'import.form.file_label',
18 'required' => true,
18 ]) 19 ])
19 ->add('mark_as_read', CheckboxType::class, [ 20 ->add('mark_as_read', CheckboxType::class, [
20 'label' => 'import.form.mark_as_read_label', 21 'label' => 'import.form.mark_as_read_label',
diff --git a/src/Wallabag/ImportBundle/Import/AbstractImport.php b/src/Wallabag/ImportBundle/Import/AbstractImport.php
index 14377a35..764b390a 100644
--- a/src/Wallabag/ImportBundle/Import/AbstractImport.php
+++ b/src/Wallabag/ImportBundle/Import/AbstractImport.php
@@ -7,12 +7,21 @@ use Psr\Log\NullLogger;
7use Doctrine\ORM\EntityManager; 7use Doctrine\ORM\EntityManager;
8use Wallabag\CoreBundle\Helper\ContentProxy; 8use Wallabag\CoreBundle\Helper\ContentProxy;
9use Wallabag\CoreBundle\Entity\Entry; 9use Wallabag\CoreBundle\Entity\Entry;
10use Wallabag\CoreBundle\Entity\Tag;
11use Wallabag\UserBundle\Entity\User;
12use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface;
10 13
11abstract class AbstractImport implements ImportInterface 14abstract class AbstractImport implements ImportInterface
12{ 15{
13 protected $em; 16 protected $em;
14 protected $logger; 17 protected $logger;
15 protected $contentProxy; 18 protected $contentProxy;
19 protected $producer;
20 protected $user;
21 protected $markAsRead;
22 protected $skippedEntries = 0;
23 protected $importedEntries = 0;
24 protected $queuedEntries = 0;
16 25
17 public function __construct(EntityManager $em, ContentProxy $contentProxy) 26 public function __construct(EntityManager $em, ContentProxy $contentProxy)
18 { 27 {
@@ -27,21 +36,154 @@ abstract class AbstractImport implements ImportInterface
27 } 36 }
28 37
29 /** 38 /**
39 * Set RabbitMQ/Redis Producer to send each entry to a queue.
40 * This method should be called when user has enabled RabbitMQ.
41 *
42 * @param ProducerInterface $producer
43 */
44 public function setProducer(ProducerInterface $producer)
45 {
46 $this->producer = $producer;
47 }
48
49 /**
50 * Set current user.
51 * Could the current *connected* user or one retrieve by the consumer.
52 *
53 * @param User $user
54 */
55 public function setUser(User $user)
56 {
57 $this->user = $user;
58 }
59
60 /**
61 * Set whether articles must be all marked as read.
62 *
63 * @param bool $markAsRead
64 */
65 public function setMarkAsRead($markAsRead)
66 {
67 $this->markAsRead = $markAsRead;
68
69 return $this;
70 }
71
72 /**
73 * Get whether articles must be all marked as read.
74 */
75 public function getMarkAsRead()
76 {
77 return $this->markAsRead;
78 }
79
80 /**
30 * Fetch content from the ContentProxy (using graby). 81 * Fetch content from the ContentProxy (using graby).
31 * If it fails return false instead of the updated entry. 82 * If it fails return the given entry to be saved in all case (to avoid user to loose the content).
32 * 83 *
33 * @param Entry $entry Entry to update 84 * @param Entry $entry Entry to update
34 * @param string $url Url to grab content for 85 * @param string $url Url to grab content for
35 * @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url 86 * @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url
36 * 87 *
37 * @return Entry|false 88 * @return Entry
38 */ 89 */
39 protected function fetchContent(Entry $entry, $url, array $content = []) 90 protected function fetchContent(Entry $entry, $url, array $content = [])
40 { 91 {
41 try { 92 try {
42 return $this->contentProxy->updateEntry($entry, $url, $content); 93 return $this->contentProxy->updateEntry($entry, $url, $content);
43 } catch (\Exception $e) { 94 } catch (\Exception $e) {
44 return false; 95 return $entry;
45 } 96 }
46 } 97 }
98
99 /**
100 * Parse and insert all given entries.
101 *
102 * @param $entries
103 */
104 protected function parseEntries($entries)
105 {
106 $i = 1;
107
108 foreach ($entries as $importedEntry) {
109 if ($this->markAsRead) {
110 $importedEntry = $this->setEntryAsRead($importedEntry);
111 }
112
113 $entry = $this->parseEntry($importedEntry);
114
115 if (null === $entry) {
116 continue;
117 }
118
119 // flush every 20 entries
120 if (($i % 20) === 0) {
121 $this->em->flush();
122
123 // clear only affected entities
124 $this->em->clear(Entry::class);
125 $this->em->clear(Tag::class);
126 }
127 ++$i;
128 }
129
130 $this->em->flush();
131 }
132
133 /**
134 * Parse entries and send them to the queue.
135 * It should just be a simple loop on all item, no call to the database should be done
136 * to speedup queuing.
137 *
138 * Faster parse entries for Producer.
139 * We don't care to make check at this time. They'll be done by the consumer.
140 *
141 * @param array $entries
142 */
143 protected function parseEntriesForProducer(array $entries)
144 {
145 foreach ($entries as $importedEntry) {
146 // set userId for the producer (it won't know which user is connected)
147 $importedEntry['userId'] = $this->user->getId();
148
149 if ($this->markAsRead) {
150 $importedEntry = $this->setEntryAsRead($importedEntry);
151 }
152
153 ++$this->queuedEntries;
154
155 $this->producer->publish(json_encode($importedEntry));
156 }
157 }
158
159 /**
160 * {@inheritdoc}
161 */
162 public function getSummary()
163 {
164 return [
165 'skipped' => $this->skippedEntries,
166 'imported' => $this->importedEntries,
167 'queued' => $this->queuedEntries,
168 ];
169 }
170
171 /**
172 * Parse one entry.
173 *
174 * @param array $importedEntry
175 *
176 * @return Entry
177 */
178 abstract public function parseEntry(array $importedEntry);
179
180 /**
181 * Set current imported entry to archived / read.
182 * Implementation is different accross all imports.
183 *
184 * @param array $importedEntry
185 *
186 * @return array
187 */
188 abstract protected function setEntryAsRead(array $importedEntry);
47} 189}
diff --git a/src/Wallabag/ImportBundle/Import/BrowserImport.php b/src/Wallabag/ImportBundle/Import/BrowserImport.php
new file mode 100644
index 00000000..9d75685b
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Import/BrowserImport.php
@@ -0,0 +1,207 @@
1<?php
2
3namespace Wallabag\ImportBundle\Import;
4
5use Wallabag\CoreBundle\Entity\Entry;
6use Wallabag\UserBundle\Entity\User;
7use Wallabag\CoreBundle\Helper\ContentProxy;
8
9abstract class BrowserImport extends AbstractImport
10{
11 protected $filepath;
12
13 /**
14 * {@inheritdoc}
15 */
16 abstract public function getName();
17
18 /**
19 * {@inheritdoc}
20 */
21 abstract public function getUrl();
22
23 /**
24 * {@inheritdoc}
25 */
26 abstract public function getDescription();
27
28 /**
29 * {@inheritdoc}
30 */
31 public function import()
32 {
33 if (!$this->user) {
34 $this->logger->error('Wallabag Browser Import: user is not defined');
35
36 return false;
37 }
38
39 if (!file_exists($this->filepath) || !is_readable($this->filepath)) {
40 $this->logger->error('Wallabag Browser Import: unable to read file', ['filepath' => $this->filepath]);
41
42 return false;
43 }
44
45 $data = json_decode(file_get_contents($this->filepath), true);
46
47 if (empty($data)) {
48 $this->logger->error('Wallabag Browser: no entries in imported file');
49
50 return false;
51 }
52
53 if ($this->producer) {
54 $this->parseEntriesForProducer($data);
55
56 return true;
57 }
58
59 $this->parseEntries($data);
60
61 return true;
62 }
63
64 /**
65 * Set file path to the json file.
66 *
67 * @param string $filepath
68 */
69 public function setFilepath($filepath)
70 {
71 $this->filepath = $filepath;
72
73 return $this;
74 }
75
76 /**
77 * Parse and insert all given entries.
78 *
79 * @param $entries
80 */
81 protected function parseEntries($entries)
82 {
83 $i = 1;
84
85 foreach ($entries as $importedEntry) {
86 if ((array) $importedEntry !== $importedEntry) {
87 continue;
88 }
89
90 $entry = $this->parseEntry($importedEntry);
91
92 if (null === $entry) {
93 continue;
94 }
95
96 // flush every 20 entries
97 if (($i % 20) === 0) {
98 $this->em->flush();
99 }
100 ++$i;
101 }
102
103 $this->em->flush();
104 }
105
106 /**
107 * Parse entries and send them to the queue.
108 * It should just be a simple loop on all item, no call to the database should be done
109 * to speedup queuing.
110 *
111 * Faster parse entries for Producer.
112 * We don't care to make check at this time. They'll be done by the consumer.
113 *
114 * @param array $entries
115 */
116 protected function parseEntriesForProducer(array $entries)
117 {
118 foreach ($entries as $importedEntry) {
119 if ((array) $importedEntry !== $importedEntry) {
120 continue;
121 }
122
123 // set userId for the producer (it won't know which user is connected)
124 $importedEntry['userId'] = $this->user->getId();
125
126 if ($this->markAsRead) {
127 $importedEntry = $this->setEntryAsRead($importedEntry);
128 }
129
130 ++$this->queuedEntries;
131
132 $this->producer->publish(json_encode($importedEntry));
133 }
134 }
135
136 /**
137 * {@inheritdoc}
138 */
139 public function parseEntry(array $importedEntry)
140 {
141 if ((!array_key_exists('guid', $importedEntry) || (!array_key_exists('id', $importedEntry))) && is_array(reset($importedEntry))) {
142 $this->parseEntries($importedEntry);
143
144 return;
145 }
146
147 if (array_key_exists('children', $importedEntry)) {
148 $this->parseEntries($importedEntry['children']);
149
150 return;
151 }
152
153 if (!array_key_exists('uri', $importedEntry) && !array_key_exists('url', $importedEntry)) {
154 return;
155 }
156
157 $url = array_key_exists('uri', $importedEntry) ? $importedEntry['uri'] : $importedEntry['url'];
158
159 $existingEntry = $this->em
160 ->getRepository('WallabagCoreBundle:Entry')
161 ->findByUrlAndUserId($url, $this->user->getId());
162
163 if (false !== $existingEntry) {
164 ++$this->skippedEntries;
165
166 return;
167 }
168
169 $data = $this->prepareEntry($importedEntry);
170
171 $entry = new Entry($this->user);
172 $entry->setUrl($data['url']);
173 $entry->setTitle($data['title']);
174
175 // update entry with content (in case fetching failed, the given entry will be return)
176 $entry = $this->fetchContent($entry, $data['url'], $data);
177
178 if (array_key_exists('tags', $data)) {
179 $this->contentProxy->assignTagsToEntry(
180 $entry,
181 $data['tags']
182 );
183 }
184
185 $entry->setArchived($data['is_archived']);
186
187 if (!empty($data['created_at'])) {
188 $dt = new \DateTime();
189 $entry->setCreatedAt($dt->setTimestamp($data['created_at']));
190 }
191
192 $this->em->persist($entry);
193 ++$this->importedEntries;
194
195 return $entry;
196 }
197
198 /**
199 * {@inheritdoc}
200 */
201 protected function setEntryAsRead(array $importedEntry)
202 {
203 $importedEntry['is_archived'] = 1;
204
205 return $importedEntry;
206 }
207}
diff --git a/src/Wallabag/ImportBundle/Import/ChromeImport.php b/src/Wallabag/ImportBundle/Import/ChromeImport.php
new file mode 100644
index 00000000..d7620bcb
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Import/ChromeImport.php
@@ -0,0 +1,53 @@
1<?php
2
3namespace Wallabag\ImportBundle\Import;
4
5class ChromeImport extends BrowserImport
6{
7 protected $filepath;
8
9 /**
10 * {@inheritdoc}
11 */
12 public function getName()
13 {
14 return 'Chrome';
15 }
16
17 /**
18 * {@inheritdoc}
19 */
20 public function getUrl()
21 {
22 return 'import_chrome';
23 }
24
25 /**
26 * {@inheritdoc}
27 */
28 public function getDescription()
29 {
30 return 'import.chrome.description';
31 }
32
33 /**
34 * {@inheritdoc}
35 */
36 protected function prepareEntry(array $entry = [])
37 {
38 $data = [
39 'title' => $entry['name'],
40 'html' => '',
41 'url' => $entry['url'],
42 'is_archived' => $this->markAsRead,
43 'tags' => '',
44 'created_at' => substr($entry['date_added'], 0, 10),
45 ];
46
47 if (array_key_exists('tags', $entry) && $entry['tags'] != '') {
48 $data['tags'] = $entry['tags'];
49 }
50
51 return $data;
52 }
53}
diff --git a/src/Wallabag/ImportBundle/Import/FirefoxImport.php b/src/Wallabag/ImportBundle/Import/FirefoxImport.php
new file mode 100644
index 00000000..e010f5a4
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Import/FirefoxImport.php
@@ -0,0 +1,53 @@
1<?php
2
3namespace Wallabag\ImportBundle\Import;
4
5class FirefoxImport extends BrowserImport
6{
7 protected $filepath;
8
9 /**
10 * {@inheritdoc}
11 */
12 public function getName()
13 {
14 return 'Firefox';
15 }
16
17 /**
18 * {@inheritdoc}
19 */
20 public function getUrl()
21 {
22 return 'import_firefox';
23 }
24
25 /**
26 * {@inheritdoc}
27 */
28 public function getDescription()
29 {
30 return 'import.firefox.description';
31 }
32
33 /**
34 * {@inheritdoc}
35 */
36 protected function prepareEntry(array $entry = [])
37 {
38 $data = [
39 'title' => $entry['title'],
40 'html' => '',
41 'url' => $entry['uri'],
42 'is_archived' => $this->markAsRead,
43 'tags' => '',
44 'created_at' => substr($entry['dateAdded'], 0, 10),
45 ];
46
47 if (array_key_exists('tags', $entry) && $entry['tags'] != '') {
48 $data['tags'] = $entry['tags'];
49 }
50
51 return $data;
52 }
53}
diff --git a/src/Wallabag/ImportBundle/Import/InstapaperImport.php b/src/Wallabag/ImportBundle/Import/InstapaperImport.php
new file mode 100644
index 00000000..cf4c785c
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Import/InstapaperImport.php
@@ -0,0 +1,140 @@
1<?php
2
3namespace Wallabag\ImportBundle\Import;
4
5use Wallabag\CoreBundle\Entity\Entry;
6
7class InstapaperImport extends AbstractImport
8{
9 private $filepath;
10
11 /**
12 * {@inheritdoc}
13 */
14 public function getName()
15 {
16 return 'Instapaper';
17 }
18
19 /**
20 * {@inheritdoc}
21 */
22 public function getUrl()
23 {
24 return 'import_instapaper';
25 }
26
27 /**
28 * {@inheritdoc}
29 */
30 public function getDescription()
31 {
32 return 'import.instapaper.description';
33 }
34
35 /**
36 * Set file path to the json file.
37 *
38 * @param string $filepath
39 */
40 public function setFilepath($filepath)
41 {
42 $this->filepath = $filepath;
43
44 return $this;
45 }
46
47 /**
48 * {@inheritdoc}
49 */
50 public function import()
51 {
52 if (!$this->user) {
53 $this->logger->error('InstapaperImport: user is not defined');
54
55 return false;
56 }
57
58 if (!file_exists($this->filepath) || !is_readable($this->filepath)) {
59 $this->logger->error('InstapaperImport: unable to read file', ['filepath' => $this->filepath]);
60
61 return false;
62 }
63
64 $entries = [];
65 $handle = fopen($this->filepath, 'r');
66 while (($data = fgetcsv($handle, 10240)) !== false) {
67 if ('URL' === $data[0]) {
68 continue;
69 }
70
71 $entries[] = [
72 'url' => $data[0],
73 'title' => $data[1],
74 'status' => $data[3],
75 'is_archived' => $data[3] === 'Archive' || $data[3] === 'Starred',
76 'is_starred' => $data[3] === 'Starred',
77 'content_type' => '',
78 'language' => '',
79 ];
80 }
81 fclose($handle);
82
83 if (empty($entries)) {
84 $this->logger->error('InstapaperImport: no entries in imported file');
85
86 return false;
87 }
88
89 if ($this->producer) {
90 $this->parseEntriesForProducer($entries);
91
92 return true;
93 }
94
95 $this->parseEntries($entries);
96
97 return true;
98 }
99
100 /**
101 * {@inheritdoc}
102 */
103 public function parseEntry(array $importedEntry)
104 {
105 $existingEntry = $this->em
106 ->getRepository('WallabagCoreBundle:Entry')
107 ->findByUrlAndUserId($importedEntry['url'], $this->user->getId());
108
109 if (false !== $existingEntry) {
110 ++$this->skippedEntries;
111
112 return;
113 }
114
115 $entry = new Entry($this->user);
116 $entry->setUrl($importedEntry['url']);
117 $entry->setTitle($importedEntry['title']);
118
119 // update entry with content (in case fetching failed, the given entry will be return)
120 $entry = $this->fetchContent($entry, $importedEntry['url'], $importedEntry);
121
122 $entry->setArchived($importedEntry['is_archived']);
123 $entry->setStarred($importedEntry['is_starred']);
124
125 $this->em->persist($entry);
126 ++$this->importedEntries;
127
128 return $entry;
129 }
130
131 /**
132 * {@inheritdoc}
133 */
134 protected function setEntryAsRead(array $importedEntry)
135 {
136 $importedEntry['is_archived'] = 1;
137
138 return $importedEntry;
139 }
140}
diff --git a/src/Wallabag/ImportBundle/Import/PocketImport.php b/src/Wallabag/ImportBundle/Import/PocketImport.php
index 798cfdae..327e2500 100644
--- a/src/Wallabag/ImportBundle/Import/PocketImport.php
+++ b/src/Wallabag/ImportBundle/Import/PocketImport.php
@@ -6,31 +6,34 @@ use Psr\Log\NullLogger;
6use Doctrine\ORM\EntityManager; 6use Doctrine\ORM\EntityManager;
7use GuzzleHttp\Client; 7use GuzzleHttp\Client;
8use GuzzleHttp\Exception\RequestException; 8use GuzzleHttp\Exception\RequestException;
9use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
10use Wallabag\CoreBundle\Entity\Entry; 9use Wallabag\CoreBundle\Entity\Entry;
11use Wallabag\CoreBundle\Helper\ContentProxy; 10use Wallabag\CoreBundle\Helper\ContentProxy;
12use Craue\ConfigBundle\Util\Config;
13 11
14class PocketImport extends AbstractImport 12class PocketImport extends AbstractImport
15{ 13{
16 private $user;
17 private $client; 14 private $client;
18 private $consumerKey; 15 private $accessToken;
19 private $skippedEntries = 0;
20 private $importedEntries = 0;
21 private $markAsRead;
22 protected $accessToken;
23 16
24 public function __construct(TokenStorageInterface $tokenStorage, EntityManager $em, ContentProxy $contentProxy, Config $craueConfig) 17 const NB_ELEMENTS = 5000;
18
19 public function __construct(EntityManager $em, ContentProxy $contentProxy)
25 { 20 {
26 $this->user = $tokenStorage->getToken()->getUser();
27 $this->em = $em; 21 $this->em = $em;
28 $this->contentProxy = $contentProxy; 22 $this->contentProxy = $contentProxy;
29 $this->consumerKey = $craueConfig->get('pocket_consumer_key');
30 $this->logger = new NullLogger(); 23 $this->logger = new NullLogger();
31 } 24 }
32 25
33 /** 26 /**
27 * Only used for test purpose.
28 *
29 * @return string
30 */
31 public function getAccessToken()
32 {
33 return $this->accessToken;
34 }
35
36 /**
34 * {@inheritdoc} 37 * {@inheritdoc}
35 */ 38 */
36 public function getName() 39 public function getName()
@@ -66,7 +69,7 @@ class PocketImport extends AbstractImport
66 $request = $this->client->createRequest('POST', 'https://getpocket.com/v3/oauth/request', 69 $request = $this->client->createRequest('POST', 'https://getpocket.com/v3/oauth/request',
67 [ 70 [
68 'body' => json_encode([ 71 'body' => json_encode([
69 'consumer_key' => $this->consumerKey, 72 'consumer_key' => $this->user->getConfig()->getPocketConsumerKey(),
70 'redirect_uri' => $redirectUri, 73 'redirect_uri' => $redirectUri,
71 ]), 74 ]),
72 ] 75 ]
@@ -96,7 +99,7 @@ class PocketImport extends AbstractImport
96 $request = $this->client->createRequest('POST', 'https://getpocket.com/v3/oauth/authorize', 99 $request = $this->client->createRequest('POST', 'https://getpocket.com/v3/oauth/authorize',
97 [ 100 [
98 'body' => json_encode([ 101 'body' => json_encode([
99 'consumer_key' => $this->consumerKey, 102 'consumer_key' => $this->user->getConfig()->getPocketConsumerKey(),
100 'code' => $code, 103 'code' => $code,
101 ]), 104 ]),
102 ] 105 ]
@@ -116,38 +119,22 @@ class PocketImport extends AbstractImport
116 } 119 }
117 120
118 /** 121 /**
119 * Set whether articles must be all marked as read.
120 *
121 * @param bool $markAsRead
122 */
123 public function setMarkAsRead($markAsRead)
124 {
125 $this->markAsRead = $markAsRead;
126
127 return $this;
128 }
129
130 /**
131 * Get whether articles must be all marked as read.
132 */
133 public function getMarkAsRead()
134 {
135 return $this->markAsRead;
136 }
137
138 /**
139 * {@inheritdoc} 122 * {@inheritdoc}
140 */ 123 */
141 public function import() 124 public function import($offset = 0)
142 { 125 {
126 static $run = 0;
127
143 $request = $this->client->createRequest('POST', 'https://getpocket.com/v3/get', 128 $request = $this->client->createRequest('POST', 'https://getpocket.com/v3/get',
144 [ 129 [
145 'body' => json_encode([ 130 'body' => json_encode([
146 'consumer_key' => $this->consumerKey, 131 'consumer_key' => $this->user->getConfig()->getPocketConsumerKey(),
147 'access_token' => $this->accessToken, 132 'access_token' => $this->accessToken,
148 'detailType' => 'complete', 133 'detailType' => 'complete',
149 'state' => 'all', 134 'state' => 'all',
150 'sort' => 'oldest', 135 'sort' => 'newest',
136 'count' => self::NB_ELEMENTS,
137 'offset' => $offset,
151 ]), 138 ]),
152 ] 139 ]
153 ); 140 );
@@ -162,20 +149,24 @@ class PocketImport extends AbstractImport
162 149
163 $entries = $response->json(); 150 $entries = $response->json();
164 151
165 $this->parseEntries($entries['list']); 152 if ($this->producer) {
153 $this->parseEntriesForProducer($entries['list']);
154 } else {
155 $this->parseEntries($entries['list']);
156 }
166 157
167 return true; 158 // if we retrieve exactly the amount of items requested it means we can get more
168 } 159 // re-call import and offset item by the amount previous received:
160 // - first call get 5k offset 0
161 // - second call get 5k offset 5k
162 // - and so on
163 if (count($entries['list']) === self::NB_ELEMENTS) {
164 ++$run;
169 165
170 /** 166 return $this->import(self::NB_ELEMENTS * $run);
171 * {@inheritdoc} 167 }
172 */ 168
173 public function getSummary() 169 return true;
174 {
175 return [
176 'skipped' => $this->skippedEntries,
177 'imported' => $this->importedEntries,
178 ];
179 } 170 }
180 171
181 /** 172 /**
@@ -189,77 +180,75 @@ class PocketImport extends AbstractImport
189 } 180 }
190 181
191 /** 182 /**
192 * @see https://getpocket.com/developer/docs/v3/retrieve 183 * {@inheritdoc}
193 * 184 *
194 * @param $entries 185 * @see https://getpocket.com/developer/docs/v3/retrieve
195 */ 186 */
196 private function parseEntries($entries) 187 public function parseEntry(array $importedEntry)
197 { 188 {
198 $i = 1; 189 $url = isset($importedEntry['resolved_url']) && $importedEntry['resolved_url'] != '' ? $importedEntry['resolved_url'] : $importedEntry['given_url'];
199 190
200 foreach ($entries as $pocketEntry) { 191 $existingEntry = $this->em
201 $url = isset($pocketEntry['resolved_url']) && $pocketEntry['resolved_url'] != '' ? $pocketEntry['resolved_url'] : $pocketEntry['given_url']; 192 ->getRepository('WallabagCoreBundle:Entry')
202 193 ->findByUrlAndUserId($url, $this->user->getId());
203 $existingEntry = $this->em 194
204 ->getRepository('WallabagCoreBundle:Entry') 195 if (false !== $existingEntry) {
205 ->findByUrlAndUserId($url, $this->user->getId()); 196 ++$this->skippedEntries;
206 197
207 if (false !== $existingEntry) { 198 return;
208 ++$this->skippedEntries; 199 }
209 continue; 200
210 } 201 $entry = new Entry($this->user);
211 202 $entry->setUrl($url);
212 $entry = new Entry($this->user); 203
213 $entry = $this->fetchContent($entry, $url); 204 // update entry with content (in case fetching failed, the given entry will be return)
214 205 $entry = $this->fetchContent($entry, $url);
215 // jump to next entry in case of problem while getting content 206
216 if (false === $entry) { 207 // 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted
217 ++$this->skippedEntries; 208 $entry->setArchived($importedEntry['status'] == 1 || $this->markAsRead);
218 continue; 209
219 } 210 // 0 or 1 - 1 If the item is starred
220 211 $entry->setStarred($importedEntry['favorite'] == 1);
221 // 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted 212
222 if ($pocketEntry['status'] == 1 || $this->markAsRead) { 213 $title = 'Untitled';
223 $entry->setArchived(true); 214 if (isset($importedEntry['resolved_title']) && $importedEntry['resolved_title'] != '') {
224 } 215 $title = $importedEntry['resolved_title'];
225 216 } elseif (isset($importedEntry['given_title']) && $importedEntry['given_title'] != '') {
226 // 0 or 1 - 1 If the item is starred 217 $title = $importedEntry['given_title'];
227 if ($pocketEntry['favorite'] == 1) { 218 }
228 $entry->setStarred(true); 219
229 } 220 $entry->setTitle($title);
230 221
231 $title = 'Untitled'; 222 // 0, 1, or 2 - 1 if the item has images in it - 2 if the item is an image
232 if (isset($pocketEntry['resolved_title']) && $pocketEntry['resolved_title'] != '') { 223 if (isset($importedEntry['has_image']) && $importedEntry['has_image'] > 0 && isset($importedEntry['images'][1])) {
233 $title = $pocketEntry['resolved_title']; 224 $entry->setPreviewPicture($importedEntry['images'][1]['src']);
234 } elseif (isset($pocketEntry['given_title']) && $pocketEntry['given_title'] != '') { 225 }
235 $title = $pocketEntry['given_title']; 226
236 } 227 if (isset($importedEntry['tags']) && !empty($importedEntry['tags'])) {
237 228 $this->contentProxy->assignTagsToEntry(
238 $entry->setTitle($title); 229 $entry,
239 230 array_keys($importedEntry['tags']),
240 // 0, 1, or 2 - 1 if the item has images in it - 2 if the item is an image 231 $this->em->getUnitOfWork()->getScheduledEntityInsertions()
241 if (isset($pocketEntry['has_image']) && $pocketEntry['has_image'] > 0 && isset($pocketEntry['images'][1])) { 232 );
242 $entry->setPreviewPicture($pocketEntry['images'][1]['src']);
243 }
244
245 if (isset($pocketEntry['tags']) && !empty($pocketEntry['tags'])) {
246 $this->contentProxy->assignTagsToEntry(
247 $entry,
248 array_keys($pocketEntry['tags'])
249 );
250 }
251
252 $this->em->persist($entry);
253 ++$this->importedEntries;
254
255 // flush every 20 entries
256 if (($i % 20) === 0) {
257 $this->em->flush();
258 $this->em->clear($entry);
259 }
260 ++$i;
261 } 233 }
262 234
263 $this->em->flush(); 235 if (!empty($importedEntry['time_added'])) {
236 $entry->setCreatedAt((new \DateTime())->setTimestamp($importedEntry['time_added']));
237 }
238
239 $this->em->persist($entry);
240 ++$this->importedEntries;
241
242 return $entry;
243 }
244
245 /**
246 * {@inheritdoc}
247 */
248 protected function setEntryAsRead(array $importedEntry)
249 {
250 $importedEntry['status'] = '1';
251
252 return $importedEntry;
264 } 253 }
265} 254}
diff --git a/src/Wallabag/ImportBundle/Import/ReadabilityImport.php b/src/Wallabag/ImportBundle/Import/ReadabilityImport.php
new file mode 100644
index 00000000..b8c0f777
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Import/ReadabilityImport.php
@@ -0,0 +1,134 @@
1<?php
2
3namespace Wallabag\ImportBundle\Import;
4
5use Wallabag\CoreBundle\Entity\Entry;
6
7class ReadabilityImport extends AbstractImport
8{
9 private $filepath;
10
11 /**
12 * {@inheritdoc}
13 */
14 public function getName()
15 {
16 return 'Readability';
17 }
18
19 /**
20 * {@inheritdoc}
21 */
22 public function getUrl()
23 {
24 return 'import_readability';
25 }
26
27 /**
28 * {@inheritdoc}
29 */
30 public function getDescription()
31 {
32 return 'import.readability.description';
33 }
34
35 /**
36 * Set file path to the json file.
37 *
38 * @param string $filepath
39 */
40 public function setFilepath($filepath)
41 {
42 $this->filepath = $filepath;
43
44 return $this;
45 }
46
47 /**
48 * {@inheritdoc}
49 */
50 public function import()
51 {
52 if (!$this->user) {
53 $this->logger->error('ReadabilityImport: user is not defined');
54
55 return false;
56 }
57
58 if (!file_exists($this->filepath) || !is_readable($this->filepath)) {
59 $this->logger->error('ReadabilityImport: unable to read file', ['filepath' => $this->filepath]);
60
61 return false;
62 }
63
64 $data = json_decode(file_get_contents($this->filepath), true);
65
66 if (empty($data) || empty($data['bookmarks'])) {
67 $this->logger->error('ReadabilityImport: no entries in imported file');
68
69 return false;
70 }
71
72 if ($this->producer) {
73 $this->parseEntriesForProducer($data['bookmarks']);
74
75 return true;
76 }
77
78 $this->parseEntries($data['bookmarks']);
79
80 return true;
81 }
82
83 /**
84 * {@inheritdoc}
85 */
86 public function parseEntry(array $importedEntry)
87 {
88 $existingEntry = $this->em
89 ->getRepository('WallabagCoreBundle:Entry')
90 ->findByUrlAndUserId($importedEntry['article__url'], $this->user->getId());
91
92 if (false !== $existingEntry) {
93 ++$this->skippedEntries;
94
95 return;
96 }
97
98 $data = [
99 'title' => $importedEntry['article__title'],
100 'url' => $importedEntry['article__url'],
101 'content_type' => '',
102 'language' => '',
103 'is_archived' => $importedEntry['archive'] || $this->markAsRead,
104 'is_starred' => $importedEntry['favorite'],
105 'created_at' => $importedEntry['date_added'],
106 ];
107
108 $entry = new Entry($this->user);
109 $entry->setUrl($data['url']);
110 $entry->setTitle($data['title']);
111
112 // update entry with content (in case fetching failed, the given entry will be return)
113 $entry = $this->fetchContent($entry, $data['url'], $data);
114
115 $entry->setArchived($data['is_archived']);
116 $entry->setStarred($data['is_starred']);
117 $entry->setCreatedAt(new \DateTime($data['created_at']));
118
119 $this->em->persist($entry);
120 ++$this->importedEntries;
121
122 return $entry;
123 }
124
125 /**
126 * {@inheritdoc}
127 */
128 protected function setEntryAsRead(array $importedEntry)
129 {
130 $importedEntry['archive'] = 1;
131
132 return $importedEntry;
133 }
134}
diff --git a/src/Wallabag/ImportBundle/Import/WallabagImport.php b/src/Wallabag/ImportBundle/Import/WallabagImport.php
index a1cc085b..702da057 100644
--- a/src/Wallabag/ImportBundle/Import/WallabagImport.php
+++ b/src/Wallabag/ImportBundle/Import/WallabagImport.php
@@ -3,15 +3,10 @@
3namespace Wallabag\ImportBundle\Import; 3namespace Wallabag\ImportBundle\Import;
4 4
5use Wallabag\CoreBundle\Entity\Entry; 5use Wallabag\CoreBundle\Entity\Entry;
6use Wallabag\UserBundle\Entity\User;
7 6
8abstract class WallabagImport extends AbstractImport 7abstract class WallabagImport extends AbstractImport
9{ 8{
10 protected $user;
11 protected $skippedEntries = 0;
12 protected $importedEntries = 0;
13 protected $filepath; 9 protected $filepath;
14 protected $markAsRead;
15 // untitled in all languages from v1 10 // untitled in all languages from v1
16 protected $untitled = [ 11 protected $untitled = [
17 'Untitled', 12 'Untitled',
@@ -29,19 +24,6 @@ abstract class WallabagImport extends AbstractImport
29 ]; 24 ];
30 25
31 /** 26 /**
32 * We define the user in a custom call because on the import command there is no logged in user.
33 * So we can't retrieve user from the `security.token_storage` service.
34 *
35 * @param User $user
36 */
37 public function setUser(User $user)
38 {
39 $this->user = $user;
40
41 return $this;
42 }
43
44 /**
45 * {@inheritdoc} 27 * {@inheritdoc}
46 */ 28 */
47 abstract public function getName(); 29 abstract public function getName();
@@ -76,26 +58,23 @@ abstract class WallabagImport extends AbstractImport
76 $data = json_decode(file_get_contents($this->filepath), true); 58 $data = json_decode(file_get_contents($this->filepath), true);
77 59
78 if (empty($data)) { 60 if (empty($data)) {
61 $this->logger->error('WallabagImport: no entries in imported file');
62
79 return false; 63 return false;
80 } 64 }
81 65
66 if ($this->producer) {
67 $this->parseEntriesForProducer($data);
68
69 return true;
70 }
71
82 $this->parseEntries($data); 72 $this->parseEntries($data);
83 73
84 return true; 74 return true;
85 } 75 }
86 76
87 /** 77 /**
88 * {@inheritdoc}
89 */
90 public function getSummary()
91 {
92 return [
93 'skipped' => $this->skippedEntries,
94 'imported' => $this->importedEntries,
95 ];
96 }
97
98 /**
99 * Set file path to the json file. 78 * Set file path to the json file.
100 * 79 *
101 * @param string $filepath 80 * @param string $filepath
@@ -108,85 +87,60 @@ abstract class WallabagImport extends AbstractImport
108 } 87 }
109 88
110 /** 89 /**
111 * Set whether articles must be all marked as read. 90 * {@inheritdoc}
112 *
113 * @param bool $markAsRead
114 */ 91 */
115 public function setMarkAsRead($markAsRead) 92 public function parseEntry(array $importedEntry)
116 { 93 {
117 $this->markAsRead = $markAsRead; 94 $existingEntry = $this->em
95 ->getRepository('WallabagCoreBundle:Entry')
96 ->findByUrlAndUserId($importedEntry['url'], $this->user->getId());
118 97
119 return $this; 98 if (false !== $existingEntry) {
120 } 99 ++$this->skippedEntries;
121 100
122 /** 101 return;
123 * Parse and insert all given entries. 102 }
124 *
125 * @param $entries
126 */
127 protected function parseEntries($entries)
128 {
129 $i = 1;
130 103
131 foreach ($entries as $importedEntry) { 104 $data = $this->prepareEntry($importedEntry);
132 $existingEntry = $this->em
133 ->getRepository('WallabagCoreBundle:Entry')
134 ->findByUrlAndUserId($importedEntry['url'], $this->user->getId());
135 105
136 if (false !== $existingEntry) { 106 $entry = new Entry($this->user);
137 ++$this->skippedEntries; 107 $entry->setUrl($data['url']);
138 continue; 108 $entry->setTitle($data['title']);
139 }
140 109
141 $data = $this->prepareEntry($importedEntry, $this->markAsRead); 110 // update entry with content (in case fetching failed, the given entry will be return)
111 $entry = $this->fetchContent($entry, $data['url'], $data);
142 112
143 $entry = $this->fetchContent( 113 if (array_key_exists('tags', $data)) {
144 new Entry($this->user), 114 $this->contentProxy->assignTagsToEntry(
145 $importedEntry['url'], 115 $entry,
146 $data 116 $data['tags'],
117 $this->em->getUnitOfWork()->getScheduledEntityInsertions()
147 ); 118 );
119 }
148 120
149 // jump to next entry in case of problem while getting content 121 if (isset($importedEntry['preview_picture'])) {
150 if (false === $entry) { 122 $entry->setPreviewPicture($importedEntry['preview_picture']);
151 ++$this->skippedEntries;
152 continue;
153 }
154
155 if (array_key_exists('tags', $data)) {
156 $this->contentProxy->assignTagsToEntry(
157 $entry,
158 $data['tags']
159 );
160 }
161
162 if (isset($importedEntry['preview_picture'])) {
163 $entry->setPreviewPicture($importedEntry['preview_picture']);
164 }
165
166 $entry->setArchived($data['is_archived']);
167 $entry->setStarred($data['is_starred']);
168
169 $this->em->persist($entry);
170 ++$this->importedEntries;
171
172 // flush every 20 entries
173 if (($i % 20) === 0) {
174 $this->em->flush();
175 $this->em->clear($entry);
176 }
177 ++$i;
178 } 123 }
179 124
180 $this->em->flush(); 125 $entry->setArchived($data['is_archived']);
126 $entry->setStarred($data['is_starred']);
127
128 if (!empty($data['created_at'])) {
129 $entry->setCreatedAt(new \DateTime($data['created_at']));
130 }
131
132 $this->em->persist($entry);
133 ++$this->importedEntries;
134
135 return $entry;
181 } 136 }
182 137
183 /** 138 /**
184 * This should return a cleaned array for a given entry to be given to `updateEntry`. 139 * This should return a cleaned array for a given entry to be given to `updateEntry`.
185 * 140 *
186 * @param array $entry Data from the imported file 141 * @param array $entry Data from the imported file
187 * @param bool $markAsRead Should we mark as read content?
188 * 142 *
189 * @return array 143 * @return array
190 */ 144 */
191 abstract protected function prepareEntry($entry = [], $markAsRead = false); 145 abstract protected function prepareEntry($entry = []);
192} 146}
diff --git a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php
index 6cf3467a..4f001062 100644
--- a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php
+++ b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php
@@ -31,7 +31,7 @@ class WallabagV1Import extends WallabagImport
31 /** 31 /**
32 * {@inheritdoc} 32 * {@inheritdoc}
33 */ 33 */
34 protected function prepareEntry($entry = [], $markAsRead = false) 34 protected function prepareEntry($entry = [])
35 { 35 {
36 $data = [ 36 $data = [
37 'title' => $entry['title'], 37 'title' => $entry['title'],
@@ -39,9 +39,10 @@ class WallabagV1Import extends WallabagImport
39 'url' => $entry['url'], 39 'url' => $entry['url'],
40 'content_type' => '', 40 'content_type' => '',
41 'language' => '', 41 'language' => '',
42 'is_archived' => $entry['is_read'] || $markAsRead, 42 'is_archived' => $entry['is_read'] || $this->markAsRead,
43 'is_starred' => $entry['is_fav'], 43 'is_starred' => $entry['is_fav'],
44 'tags' => '', 44 'tags' => '',
45 'created_at' => '',
45 ]; 46 ];
46 47
47 // force content to be refreshed in case on bad fetch in the v1 installation 48 // force content to be refreshed in case on bad fetch in the v1 installation
@@ -56,4 +57,14 @@ class WallabagV1Import extends WallabagImport
56 57
57 return $data; 58 return $data;
58 } 59 }
60
61 /**
62 * {@inheritdoc}
63 */
64 protected function setEntryAsRead(array $importedEntry)
65 {
66 $importedEntry['is_read'] = 1;
67
68 return $importedEntry;
69 }
59} 70}
diff --git a/src/Wallabag/ImportBundle/Import/WallabagV2Import.php b/src/Wallabag/ImportBundle/Import/WallabagV2Import.php
index d0035b63..37c8ca14 100644
--- a/src/Wallabag/ImportBundle/Import/WallabagV2Import.php
+++ b/src/Wallabag/ImportBundle/Import/WallabagV2Import.php
@@ -31,12 +31,22 @@ class WallabagV2Import extends WallabagImport
31 /** 31 /**
32 * {@inheritdoc} 32 * {@inheritdoc}
33 */ 33 */
34 protected function prepareEntry($entry = [], $markAsRead = false) 34 protected function prepareEntry($entry = [])
35 { 35 {
36 return [ 36 return [
37 'html' => $entry['content'], 37 'html' => $entry['content'],
38 'content_type' => $entry['mimetype'], 38 'content_type' => $entry['mimetype'],
39 'is_archived' => ($entry['is_archived'] || $markAsRead), 39 'is_archived' => ($entry['is_archived'] || $this->markAsRead),
40 ] + $entry; 40 ] + $entry;
41 } 41 }
42
43 /**
44 * {@inheritdoc}
45 */
46 protected function setEntryAsRead(array $importedEntry)
47 {
48 $importedEntry['is_archived'] = 1;
49
50 return $importedEntry;
51 }
42} 52}
diff --git a/src/Wallabag/ImportBundle/Redis/Producer.php b/src/Wallabag/ImportBundle/Redis/Producer.php
new file mode 100644
index 00000000..fedc3e57
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Redis/Producer.php
@@ -0,0 +1,36 @@
1<?php
2
3namespace Wallabag\ImportBundle\Redis;
4
5use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface;
6use Simpleue\Queue\RedisQueue;
7
8/**
9 * This is a proxy class for "Simpleue\Queue\RedisQueue".
10 * It allow us to use the same way to publish a message between RabbitMQ & Redis: publish().
11 *
12 * It implements the ProducerInterface of RabbitMQ (yes it's ugly) so we can have the same
13 * kind of class which implements the same interface.
14 * So we can inject either a RabbitMQ producer or a Redis producer with the same signature
15 */
16class Producer implements ProducerInterface
17{
18 private $queue;
19
20 public function __construct(RedisQueue $queue)
21 {
22 $this->queue = $queue;
23 }
24
25 /**
26 * Publish a message in the Redis queue.
27 *
28 * @param string $msgBody
29 * @param string $routingKey NOT USED
30 * @param array $additionalProperties NOT USED
31 */
32 public function publish($msgBody, $routingKey = '', $additionalProperties = array())
33 {
34 $this->queue->sendJob($msgBody);
35 }
36}
diff --git a/src/Wallabag/ImportBundle/Resources/config/rabbit.yml b/src/Wallabag/ImportBundle/Resources/config/rabbit.yml
new file mode 100644
index 00000000..70b8a0d4
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Resources/config/rabbit.yml
@@ -0,0 +1,51 @@
1# RabbitMQ stuff
2services:
3 wallabag_import.consumer.amqp.pocket:
4 class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
5 arguments:
6 - "@doctrine.orm.entity_manager"
7 - "@wallabag_user.user_repository"
8 - "@wallabag_import.pocket.import"
9 - "@logger"
10 wallabag_import.consumer.amqp.readability:
11 class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
12 arguments:
13 - "@doctrine.orm.entity_manager"
14 - "@wallabag_user.user_repository"
15 - "@wallabag_import.readability.import"
16 - "@logger"
17 wallabag_import.consumer.amqp.instapaper:
18 class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
19 arguments:
20 - "@doctrine.orm.entity_manager"
21 - "@wallabag_user.user_repository"
22 - "@wallabag_import.instapaper.import"
23 - "@logger"
24 wallabag_import.consumer.amqp.wallabag_v1:
25 class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
26 arguments:
27 - "@doctrine.orm.entity_manager"
28 - "@wallabag_user.user_repository"
29 - "@wallabag_import.wallabag_v1.import"
30 - "@logger"
31 wallabag_import.consumer.amqp.wallabag_v2:
32 class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
33 arguments:
34 - "@doctrine.orm.entity_manager"
35 - "@wallabag_user.user_repository"
36 - "@wallabag_import.wallabag_v2.import"
37 - "@logger"
38 wallabag_import.consumer.amqp.firefox:
39 class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
40 arguments:
41 - "@doctrine.orm.entity_manager"
42 - "@wallabag_user.user_repository"
43 - "@wallabag_import.firefox.import"
44 - "@logger"
45 wallabag_import.consumer.amqp.chrome:
46 class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
47 arguments:
48 - "@doctrine.orm.entity_manager"
49 - "@wallabag_user.user_repository"
50 - "@wallabag_import.chrome.import"
51 - "@logger"
diff --git a/src/Wallabag/ImportBundle/Resources/config/redis.yml b/src/Wallabag/ImportBundle/Resources/config/redis.yml
new file mode 100644
index 00000000..0a81e1b5
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Resources/config/redis.yml
@@ -0,0 +1,141 @@
1# Redis stuff
2services:
3 # readability
4 wallabag_import.queue.redis.readability:
5 class: Simpleue\Queue\RedisQueue
6 arguments:
7 - "@wallabag_core.redis.client"
8 - "wallabag.import.readability"
9
10 wallabag_import.producer.redis.readability:
11 class: Wallabag\ImportBundle\Redis\Producer
12 arguments:
13 - "@wallabag_import.queue.redis.readability"
14
15 wallabag_import.consumer.redis.readability:
16 class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
17 arguments:
18 - "@doctrine.orm.entity_manager"
19 - "@wallabag_user.user_repository"
20 - "@wallabag_import.readability.import"
21 - "@logger"
22
23 # instapaper
24 wallabag_import.queue.redis.instapaper:
25 class: Simpleue\Queue\RedisQueue
26 arguments:
27 - "@wallabag_core.redis.client"
28 - "wallabag.import.instapaper"
29
30 wallabag_import.producer.redis.instapaper:
31 class: Wallabag\ImportBundle\Redis\Producer
32 arguments:
33 - "@wallabag_import.queue.redis.instapaper"
34
35 wallabag_import.consumer.redis.instapaper:
36 class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
37 arguments:
38 - "@doctrine.orm.entity_manager"
39 - "@wallabag_user.user_repository"
40 - "@wallabag_import.instapaper.import"
41 - "@logger"
42
43 # pocket
44 wallabag_import.queue.redis.pocket:
45 class: Simpleue\Queue\RedisQueue
46 arguments:
47 - "@wallabag_core.redis.client"
48 - "wallabag.import.pocket"
49
50 wallabag_import.producer.redis.pocket:
51 class: Wallabag\ImportBundle\Redis\Producer
52 arguments:
53 - "@wallabag_import.queue.redis.pocket"
54
55 wallabag_import.consumer.redis.pocket:
56 class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
57 arguments:
58 - "@doctrine.orm.entity_manager"
59 - "@wallabag_user.user_repository"
60 - "@wallabag_import.pocket.import"
61 - "@logger"
62
63 # wallabag v1
64 wallabag_import.queue.redis.wallabag_v1:
65 class: Simpleue\Queue\RedisQueue
66 arguments:
67 - "@wallabag_core.redis.client"
68 - "wallabag.import.wallabag_v1"
69
70 wallabag_import.producer.redis.wallabag_v1:
71 class: Wallabag\ImportBundle\Redis\Producer
72 arguments:
73 - "@wallabag_import.queue.redis.wallabag_v1"
74
75 wallabag_import.consumer.redis.wallabag_v1:
76 class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
77 arguments:
78 - "@doctrine.orm.entity_manager"
79 - "@wallabag_user.user_repository"
80 - "@wallabag_import.wallabag_v1.import"
81 - "@logger"
82
83 # wallabag v2
84 wallabag_import.queue.redis.wallabag_v2:
85 class: Simpleue\Queue\RedisQueue
86 arguments:
87 - "@wallabag_core.redis.client"
88 - "wallabag.import.wallabag_v2"
89
90 wallabag_import.producer.redis.wallabag_v2:
91 class: Wallabag\ImportBundle\Redis\Producer
92 arguments:
93 - "@wallabag_import.queue.redis.wallabag_v2"
94
95 wallabag_import.consumer.redis.wallabag_v2:
96 class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
97 arguments:
98 - "@doctrine.orm.entity_manager"
99 - "@wallabag_user.user_repository"
100 - "@wallabag_import.wallabag_v2.import"
101 - "@logger"
102
103 # firefox
104 wallabag_import.queue.redis.firefox:
105 class: Simpleue\Queue\RedisQueue
106 arguments:
107 - "@wallabag_core.redis.client"
108 - "wallabag.import.firefox"
109
110 wallabag_import.producer.redis.firefox:
111 class: Wallabag\ImportBundle\Redis\Producer
112 arguments:
113 - "@wallabag_import.queue.redis.firefox"
114
115 wallabag_import.consumer.redis.firefox:
116 class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
117 arguments:
118 - "@doctrine.orm.entity_manager"
119 - "@wallabag_user.user_repository"
120 - "@wallabag_import.firefox.import"
121 - "@logger"
122
123 # chrome
124 wallabag_import.queue.redis.chrome:
125 class: Simpleue\Queue\RedisQueue
126 arguments:
127 - "@wallabag_core.redis.client"
128 - "wallabag.import.chrome"
129
130 wallabag_import.producer.redis.chrome:
131 class: Wallabag\ImportBundle\Redis\Producer
132 arguments:
133 - "@wallabag_import.queue.redis.chrome"
134
135 wallabag_import.consumer.redis.chrome:
136 class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
137 arguments:
138 - "@doctrine.orm.entity_manager"
139 - "@wallabag_user.user_repository"
140 - "@wallabag_import.chrome.import"
141 - "@logger"
diff --git a/src/Wallabag/ImportBundle/Resources/config/services.yml b/src/Wallabag/ImportBundle/Resources/config/services.yml
index 86b44cb3..89adc71b 100644
--- a/src/Wallabag/ImportBundle/Resources/config/services.yml
+++ b/src/Wallabag/ImportBundle/Resources/config/services.yml
@@ -1,3 +1,7 @@
1imports:
2 - { resource: rabbit.yml }
3 - { resource: redis.yml }
4
1services: 5services:
2 wallabag_import.chain: 6 wallabag_import.chain:
3 class: Wallabag\ImportBundle\Import\ImportChain 7 class: Wallabag\ImportBundle\Import\ImportChain
@@ -14,7 +18,6 @@ services:
14 wallabag_import.pocket.import: 18 wallabag_import.pocket.import:
15 class: Wallabag\ImportBundle\Import\PocketImport 19 class: Wallabag\ImportBundle\Import\PocketImport
16 arguments: 20 arguments:
17 - "@security.token_storage"
18 - "@doctrine.orm.entity_manager" 21 - "@doctrine.orm.entity_manager"
19 - "@wallabag_core.content_proxy" 22 - "@wallabag_core.content_proxy"
20 - "@craue_config" 23 - "@craue_config"
@@ -43,3 +46,42 @@ services:
43 - [ setLogger, [ "@logger" ]] 46 - [ setLogger, [ "@logger" ]]
44 tags: 47 tags:
45 - { name: wallabag_import.import, alias: wallabag_v2 } 48 - { name: wallabag_import.import, alias: wallabag_v2 }
49
50 wallabag_import.readability.import:
51 class: Wallabag\ImportBundle\Import\ReadabilityImport
52 arguments:
53 - "@doctrine.orm.entity_manager"
54 - "@wallabag_core.content_proxy"
55 calls:
56 - [ setLogger, [ "@logger" ]]
57 tags:
58 - { name: wallabag_import.import, alias: readability }
59
60 wallabag_import.instapaper.import:
61 class: Wallabag\ImportBundle\Import\InstapaperImport
62 arguments:
63 - "@doctrine.orm.entity_manager"
64 - "@wallabag_core.content_proxy"
65 calls:
66 - [ setLogger, [ "@logger" ]]
67 tags:
68 - { name: wallabag_import.import, alias: instapaper }
69
70 wallabag_import.firefox.import:
71 class: Wallabag\ImportBundle\Import\FirefoxImport
72 arguments:
73 - "@doctrine.orm.entity_manager"
74 - "@wallabag_core.content_proxy"
75 calls:
76 - [ setLogger, [ "@logger" ]]
77 tags:
78 - { name: wallabag_import.import, alias: firefox }
79 wallabag_import.chrome.import:
80 class: Wallabag\ImportBundle\Import\ChromeImport
81 arguments:
82 - "@doctrine.orm.entity_manager"
83 - "@wallabag_core.content_proxy"
84 calls:
85 - [ setLogger, [ "@logger" ]]
86 tags:
87 - { name: wallabag_import.import, alias: chrome }
diff --git a/src/Wallabag/ImportBundle/Resources/views/Chrome/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/Chrome/index.html.twig
new file mode 100644
index 00000000..ead828c6
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Resources/views/Chrome/index.html.twig
@@ -0,0 +1,43 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'import.chrome.page_title'|trans }}{% endblock %}
4
5{% block content %}
6<div class="row">
7 <div class="col s12">
8 <div class="card-panel settings">
9 <div class="row">
10 <blockquote>{{ import.description|trans|raw }}</blockquote>
11 <p>{{ 'import.chrome.how_to'|trans }}</p>
12
13 <div class="col s12">
14 {{ form_start(form, {'method': 'POST'}) }}
15 {{ form_errors(form) }}
16 <div class="row">
17 <div class="file-field input-field col s12">
18 {{ form_errors(form.file) }}
19 <div class="btn">
20 <span>{{ form.file.vars.label|trans }}</span>
21 {{ form_widget(form.file) }}
22 </div>
23 <div class="file-path-wrapper">
24 <input class="file-path validate" type="text">
25 </div>
26 </div>
27 <div class="input-field col s6 with-checkbox">
28 <h6>{{ 'import.form.mark_as_read_title'|trans }}</h6>
29 {{ form_widget(form.mark_as_read) }}
30 {{ form_label(form.mark_as_read) }}
31 </div>
32 </div>
33
34 {{ form_widget(form.save, { 'attr': {'class': 'btn waves-effect waves-light'} }) }}
35
36 {{ form_rest(form) }}
37 </form>
38 </div>
39 </div>
40 </div>
41 </div>
42</div>
43{% endblock %}
diff --git a/src/Wallabag/ImportBundle/Resources/views/Firefox/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/Firefox/index.html.twig
new file mode 100644
index 00000000..f975da3f
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Resources/views/Firefox/index.html.twig
@@ -0,0 +1,43 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'import.firefox.page_title'|trans }}{% endblock %}
4
5{% block content %}
6<div class="row">
7 <div class="col s12">
8 <div class="card-panel settings">
9 <div class="row">
10 <blockquote>{{ import.description|trans|raw }}</blockquote>
11 <p>{{ 'import.firefox.how_to'|trans }}</p>
12
13 <div class="col s12">
14 {{ form_start(form, {'method': 'POST'}) }}
15 {{ form_errors(form) }}
16 <div class="row">
17 <div class="file-field input-field col s12">
18 {{ form_errors(form.file) }}
19 <div class="btn">
20 <span>{{ form.file.vars.label|trans }}</span>
21 {{ form_widget(form.file) }}
22 </div>
23 <div class="file-path-wrapper">
24 <input class="file-path validate" type="text">
25 </div>
26 </div>
27 <div class="input-field col s6 with-checkbox">
28 <h6>{{ 'import.form.mark_as_read_title'|trans }}</h6>
29 {{ form_widget(form.mark_as_read) }}
30 {{ form_label(form.mark_as_read) }}
31 </div>
32 </div>
33
34 {{ form_widget(form.save, { 'attr': {'class': 'btn waves-effect waves-light'} }) }}
35
36 {{ form_rest(form) }}
37 </form>
38 </div>
39 </div>
40 </div>
41 </div>
42</div>
43{% endblock %}
diff --git a/src/Wallabag/ImportBundle/Resources/views/Import/_workerEnabled.html.twig b/src/Wallabag/ImportBundle/Resources/views/Import/_workerEnabled.html.twig
new file mode 100644
index 00000000..2390a41f
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Resources/views/Import/_workerEnabled.html.twig
@@ -0,0 +1,8 @@
1{% set redis = craue_setting('import_with_redis') %}
2{% set rabbit = craue_setting('import_with_rabbitmq') %}
3
4{% if redis or rabbit %}
5 <div class="card-panel yellow darken-1 black-text">
6 {{ 'import.worker.enabled'|trans }} <strong>{% if rabbit %}RabbitMQ{% elseif redis %}Redis{% endif %}</strong>
7 </div>
8{% endif %}
diff --git a/src/Wallabag/ImportBundle/Resources/views/Import/check_queue.html.twig b/src/Wallabag/ImportBundle/Resources/views/Import/check_queue.html.twig
new file mode 100644
index 00000000..a2633698
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Resources/views/Import/check_queue.html.twig
@@ -0,0 +1,23 @@
1{% if nbRedisMessages is defined and nbRedisMessages > 0 %}
2 <script>
3 Materialize.toast('Messages in queue: {{ nbRedisMessages }}', 4000);
4 </script>
5{% endif %}
6
7{% if nbRabbitMessages is defined and nbRabbitMessages > 0 %}
8 <script>
9 Materialize.toast('Messages in queue: {{ nbRabbitMessages }}', 4000);
10 </script>
11{% endif %}
12
13{% if redisNotInstalled is defined and redisNotInstalled %}
14 <div class="card-panel red darken-1 white-text">
15 {{ 'flashes.import.error.redis_enabled_not_installed'|trans|raw }}
16 </div>
17{% endif %}
18
19{% if rabbitNotInstalled is defined and rabbitNotInstalled %}
20 <div class="card-panel red darken-1 white-text">
21 {{ 'flashes.import.error.rabbit_enabled_not_installed'|trans|raw }}
22 </div>
23{% endif %}
diff --git a/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig
index aebbfa20..6ea5e0f4 100644
--- a/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig
+++ b/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig
@@ -11,7 +11,7 @@
11 {% for import in imports %} 11 {% for import in imports %}
12 <li> 12 <li>
13 <h5>{{ import.name }}</h5> 13 <h5>{{ import.name }}</h5>
14 <blockquote>{{ import.description|trans }}</blockquote> 14 <blockquote>{{ import.description|trans|raw }}</blockquote>
15 <p><a class="waves-effect waves-light btn" href="{{ path(import.url) }}">{{ 'import.action.import_contents'|trans }}</a></p> 15 <p><a class="waves-effect waves-light btn" href="{{ path(import.url) }}">{{ 'import.action.import_contents'|trans }}</a></p>
16 </li> 16 </li>
17 {% endfor %} 17 {% endfor %}
diff --git a/src/Wallabag/ImportBundle/Resources/views/Instapaper/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/Instapaper/index.html.twig
new file mode 100644
index 00000000..5789361f
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Resources/views/Instapaper/index.html.twig
@@ -0,0 +1,45 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'import.instapaper.page_title'|trans }}{% endblock %}
4
5{% block content %}
6<div class="row">
7 <div class="col s12">
8 <div class="card-panel settings">
9 {% include 'WallabagImportBundle:Import:_workerEnabled.html.twig' %}
10
11 <div class="row">
12 <blockquote>{{ import.description|trans }}</blockquote>
13 <p>{{ 'import.instapaper.how_to'|trans }}</p>
14
15 <div class="col s12">
16 {{ form_start(form, {'method': 'POST'}) }}
17 {{ form_errors(form) }}
18 <div class="row">
19 <div class="file-field input-field col s12">
20 {{ form_errors(form.file) }}
21 <div class="btn">
22 <span>{{ form.file.vars.label|trans }}</span>
23 {{ form_widget(form.file) }}
24 </div>
25 <div class="file-path-wrapper">
26 <input class="file-path validate" type="text">
27 </div>
28 </div>
29 <div class="input-field col s6 with-checkbox">
30 <h6>{{ 'import.form.mark_as_read_title'|trans }}</h6>
31 {{ form_widget(form.mark_as_read) }}
32 {{ form_label(form.mark_as_read) }}
33 </div>
34 </div>
35
36 {{ form_widget(form.save, { 'attr': {'class': 'btn waves-effect waves-light'} }) }}
37
38 {{ form_rest(form) }}
39 </form>
40 </div>
41 </div>
42 </div>
43 </div>
44</div>
45{% endblock %}
diff --git a/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig
index 401dbd33..6195fa07 100644
--- a/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig
+++ b/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig
@@ -6,15 +6,13 @@
6<div class="row"> 6<div class="row">
7 <div class="col s12"> 7 <div class="col s12">
8 <div class="card-panel settings"> 8 <div class="card-panel settings">
9 {% include 'WallabagImportBundle:Import:_workerEnabled.html.twig' %}
10
9 {% if not has_consumer_key %} 11 {% if not has_consumer_key %}
10 <div class="card-panel red darken-1"> 12 <div class="card-panel red white-text">
11 {{ 'import.pocket.config_missing.description'|trans }} 13 {{ 'import.pocket.config_missing.description'|trans }}
12 14
13 {% if is_granted('ROLE_SUPER_ADMIN') %} 15 {{ 'import.pocket.config_missing.admin_message'|trans({'%keyurls%': '<a href="' ~ path('config') ~ '">', '%keyurle%':'</a>'})|raw }}
14 {{ 'import.pocket.config_missing.admin_message'|trans({'%keyurls%': '<a href="' ~ path('craue_config_settings_modify') ~ '#set-import">', '%keyurle%':'</a>'})|raw }}
15 {% else %}
16 {{ 'import.pocket.config_missing.user_message'|trans }}
17 {% endif %}
18 </div> 16 </div>
19 {% endif %} 17 {% endif %}
20 18
@@ -29,7 +27,7 @@
29 {{ form_label(form.mark_as_read) }} 27 {{ form_label(form.mark_as_read) }}
30 </div> 28 </div>
31 </div> 29 </div>
32 <button class="btn waves-effect waves-light" type="submit" name="action"> 30 <button class="btn waves-effect waves-light" type="submit" name="action" {% if not has_consumer_key %}disabled="disabled"{% endif %}>
33 {{ 'import.pocket.connect_to_pocket'|trans }} 31 {{ 'import.pocket.connect_to_pocket'|trans }}
34 </button> 32 </button>
35 </form> 33 </form>
diff --git a/src/Wallabag/ImportBundle/Resources/views/Readability/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/Readability/index.html.twig
new file mode 100644
index 00000000..74653b0f
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Resources/views/Readability/index.html.twig
@@ -0,0 +1,45 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'import.readability.page_title'|trans }}{% endblock %}
4
5{% block content %}
6<div class="row">
7 <div class="col s12">
8 <div class="card-panel settings">
9 {% include 'WallabagImportBundle:Import:_workerEnabled.html.twig' %}
10
11 <div class="row">
12 <blockquote>{{ import.description|trans }}</blockquote>
13 <p>{{ 'import.readability.how_to'|trans }}</p>
14
15 <div class="col s12">
16 {{ form_start(form, {'method': 'POST'}) }}
17 {{ form_errors(form) }}
18 <div class="row">
19 <div class="file-field input-field col s12">
20 {{ form_errors(form.file) }}
21 <div class="btn">
22 <span>{{ form.file.vars.label|trans }}</span>
23 {{ form_widget(form.file) }}
24 </div>
25 <div class="file-path-wrapper">
26 <input class="file-path validate" type="text">
27 </div>
28 </div>
29 <div class="input-field col s6 with-checkbox">
30 <h6>{{ 'import.form.mark_as_read_title'|trans }}</h6>
31 {{ form_widget(form.mark_as_read) }}
32 {{ form_label(form.mark_as_read) }}
33 </div>
34 </div>
35
36 {{ form_widget(form.save, { 'attr': {'class': 'btn waves-effect waves-light'} }) }}
37
38 {{ form_rest(form) }}
39 </form>
40 </div>
41 </div>
42 </div>
43 </div>
44</div>
45{% endblock %}
diff --git a/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig
index 13e24c8c..0b19bc34 100644
--- a/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig
+++ b/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig
@@ -6,6 +6,8 @@
6<div class="row"> 6<div class="row">
7 <div class="col s12"> 7 <div class="col s12">
8 <div class="card-panel settings"> 8 <div class="card-panel settings">
9 {% include 'WallabagImportBundle:Import:_workerEnabled.html.twig' %}
10
9 <div class="row"> 11 <div class="row">
10 <blockquote>{{ import.description|trans }}</blockquote> 12 <blockquote>{{ import.description|trans }}</blockquote>
11 <p>{{ 'import.wallabag_v1.how_to'|trans }}</p> 13 <p>{{ 'import.wallabag_v1.how_to'|trans }}</p>
diff --git a/src/Wallabag/UserBundle/Controller/RegistrationController.php b/src/Wallabag/UserBundle/Controller/RegistrationController.php
new file mode 100644
index 00000000..f81f3a7b
--- /dev/null
+++ b/src/Wallabag/UserBundle/Controller/RegistrationController.php
@@ -0,0 +1,18 @@
1<?php
2
3namespace Wallabag\UserBundle\Controller;
4
5use FOS\UserBundle\Controller\RegistrationController as FOSRegistrationController;
6use Symfony\Component\HttpFoundation\Request;
7
8class RegistrationController extends FOSRegistrationController
9{
10 public function registerAction(Request $request)
11 {
12 if ($this->container->getParameter('wallabag_user.registration_enabled')) {
13 return parent::registerAction($request);
14 }
15
16 return $this->redirectToRoute('fos_user_security_login', [], 301);
17 }
18}
diff --git a/src/Wallabag/UserBundle/Controller/SecurityController.php b/src/Wallabag/UserBundle/Controller/SecurityController.php
new file mode 100644
index 00000000..83fa0b20
--- /dev/null
+++ b/src/Wallabag/UserBundle/Controller/SecurityController.php
@@ -0,0 +1,21 @@
1<?php
2
3namespace Wallabag\UserBundle\Controller;
4
5use FOS\UserBundle\Controller\SecurityController as FOSSecurityController;
6
7/**
8 * Extends login form in order to pass the registration_enabled parameter.
9 */
10class SecurityController extends FOSSecurityController
11{
12 protected function renderLogin(array $data)
13 {
14 return $this->render('FOSUserBundle:Security:login.html.twig',
15 array_merge(
16 $data,
17 ['registration_enabled' => $this->container->getParameter('wallabag_user.registration_enabled')]
18 )
19 );
20 }
21}
diff --git a/src/Wallabag/UserBundle/DependencyInjection/Configuration.php b/src/Wallabag/UserBundle/DependencyInjection/Configuration.php
index 4223f8db..971ce1a0 100644
--- a/src/Wallabag/UserBundle/DependencyInjection/Configuration.php
+++ b/src/Wallabag/UserBundle/DependencyInjection/Configuration.php
@@ -12,6 +12,14 @@ class Configuration implements ConfigurationInterface
12 $treeBuilder = new TreeBuilder(); 12 $treeBuilder = new TreeBuilder();
13 $rootNode = $treeBuilder->root('wallabag_user'); 13 $rootNode = $treeBuilder->root('wallabag_user');
14 14
15 $rootNode
16 ->children()
17 ->booleanNode('registration_enabled')
18 ->defaultValue(true)
19 ->end()
20 ->end()
21 ;
22
15 return $treeBuilder; 23 return $treeBuilder;
16 } 24 }
17} 25}
diff --git a/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php b/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php
index c12a8937..99040f69 100644
--- a/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php
+++ b/src/Wallabag/UserBundle/DependencyInjection/WallabagUserExtension.php
@@ -16,6 +16,7 @@ class WallabagUserExtension extends Extension
16 16
17 $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 17 $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
18 $loader->load('services.yml'); 18 $loader->load('services.yml');
19 $container->setParameter('wallabag_user.registration_enabled', $config['registration_enabled']);
19 } 20 }
20 21
21 public function getAlias() 22 public function getAlias()
diff --git a/src/Wallabag/UserBundle/Resources/config/services.yml b/src/Wallabag/UserBundle/Resources/config/services.yml
index d79d8fa2..05830555 100644
--- a/src/Wallabag/UserBundle/Resources/config/services.yml
+++ b/src/Wallabag/UserBundle/Resources/config/services.yml
@@ -14,3 +14,9 @@ services:
14 - "@router" 14 - "@router"
15 tags: 15 tags:
16 - { name: kernel.event_subscriber } 16 - { name: kernel.event_subscriber }
17
18 wallabag_user.user_repository:
19 class: Wallabag\UserBundle\Repository\UserRepository
20 factory: [ "@doctrine.orm.default_entity_manager", getRepository ]
21 arguments:
22 - WallabagUserBundle:User
diff --git a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.pl.yml b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.pl.yml
new file mode 100644
index 00000000..04dbef39
--- /dev/null
+++ b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.pl.yml
@@ -0,0 +1,11 @@
1# Two factor mail
2auth_code:
3 on: 'włączony'
4 mailer:
5 subject: 'Kod autoryzacyjny Wallabag'
6 body:
7 hello: "Cześć %user%,"
8 first_para: "Od momentu włączenia na swoim koncie autoryzacji dwuetapowej i zalogowaniu się na nowym urzączeniu (komputer, telefon, etc.), wyślemy do ciebie kod potwierdzający twoje połączenie"
9 second_para: "Tutaj jest twój kod:"
10 support: "Nie wahaj się skontaktować z nami, jeżeli masz jakiekolwiek problemy:"
11 signature: "Zespół wallabag"
diff --git a/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig b/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig
index acf69196..c8471bdd 100644
--- a/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig
@@ -23,10 +23,10 @@
23 </div> 23 </div>
24 </div> 24 </div>
25 <div class="card-action center"> 25 <div class="card-action center">
26 <a href="{{ path('fos_user_security_logout') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {{ 'security.login.cancel'|trans }}</a> 26 <a href="{{ path('fos_user_security_logout') }}" class="waves-effect waves-light grey btn">{{ 'security.login.cancel'|trans }}</a>
27 <button class="btn waves-effect waves-light" type="submit" name="send"> 27 <button class="btn waves-effect waves-light" type="submit" name="send">
28 {{ "scheb_two_factor.login"|trans }} 28 {{ "scheb_two_factor.login"|trans }}
29 <i class="mdi-content-send right"></i> 29 <i class="material-icons right">send</i>
30 </button> 30 </button>
31 </div> 31 </div>
32</form> 32</form>
diff --git a/src/Wallabag/UserBundle/Resources/views/Registration/confirmed.html.twig b/src/Wallabag/UserBundle/Resources/views/Registration/confirmed.html.twig
index aa4b9bca..cb8d40a4 100644
--- a/src/Wallabag/UserBundle/Resources/views/Registration/confirmed.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Registration/confirmed.html.twig
@@ -11,7 +11,7 @@
11 {% endif %} 11 {% endif %}
12 </div> 12 </div>
13 <div class="card-action center"> 13 <div class="card-action center">
14 <a href="{{ path('homepage') }}" class="waves-effect waves-light btn"><i class="material-icons left"></i> {{ 'security.register.go_to_account'|trans({},'messages') }}</a> 14 <a href="{{ path('homepage') }}" class="waves-effect waves-light btn">{{ 'security.register.go_to_account'|trans({},'messages') }}</a>
15 </div> 15 </div>
16</div> 16</div>
17{% endblock fos_user_content %} 17{% endblock fos_user_content %}
diff --git a/src/Wallabag/UserBundle/Resources/views/Registration/register_content.html.twig b/src/Wallabag/UserBundle/Resources/views/Registration/register_content.html.twig
index 7d2b45d4..d0a85fc7 100644
--- a/src/Wallabag/UserBundle/Resources/views/Registration/register_content.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Registration/register_content.html.twig
@@ -36,10 +36,10 @@
36 </div> 36 </div>
37 </div> 37 </div>
38 <div class="card-action center"> 38 <div class="card-action center">
39 <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {{ 'security.login.submit'|trans }}</a> 39 <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn">{{ 'security.login.submit'|trans }}</a>
40 <button class="btn waves-effect waves-light" type="submit" name="send"> 40 <button class="btn waves-effect waves-light" type="submit" name="send">
41 {{ 'registration.submit'|trans({}, 'FOSUserBundle') }} 41 {{ 'registration.submit'|trans({}, 'FOSUserBundle') }}
42 <i class="mdi-content-send right"></i> 42 <i class="material-icons right">send</i>
43 </button> 43 </button>
44 </div> 44 </div>
45</form> 45</form>
diff --git a/src/Wallabag/UserBundle/Resources/views/Resetting/request_content.html.twig b/src/Wallabag/UserBundle/Resources/views/Resetting/request_content.html.twig
index 7a5ac838..010ee0d0 100644
--- a/src/Wallabag/UserBundle/Resources/views/Resetting/request_content.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Resetting/request_content.html.twig
@@ -21,7 +21,7 @@
21 </div> 21 </div>
22 <div class="card-action center"> 22 <div class="card-action center">
23 <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn"> 23 <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn">
24 <i class="material-icons left"></i> {{ 'security.login.submit'|trans({}, "messages") }} 24 {{ 'security.login.submit'|trans({}, "messages") }}
25 </a> 25 </a>
26 <button class="btn waves-effect waves-light" type="submit" name="send"> 26 <button class="btn waves-effect waves-light" type="submit" name="send">
27 {{ 'resetting.request.submit'|trans }} 27 {{ 'resetting.request.submit'|trans }}
diff --git a/src/Wallabag/UserBundle/Resources/views/Resetting/reset_content.html.twig b/src/Wallabag/UserBundle/Resources/views/Resetting/reset_content.html.twig
index 9d0a061c..a19dc7d2 100644
--- a/src/Wallabag/UserBundle/Resources/views/Resetting/reset_content.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Resetting/reset_content.html.twig
@@ -8,7 +8,7 @@
8 <div class="card-action center"> 8 <div class="card-action center">
9 <button class="btn waves-effect waves-light" type="submit" name="send"> 9 <button class="btn waves-effect waves-light" type="submit" name="send">
10 {{ 'resetting.reset.submit'|trans }} 10 {{ 'resetting.reset.submit'|trans }}
11 <i class="mdi-content-send right"></i> 11 <i class="material-icons right">send</i>
12 </button> 12 </button>
13 </div> 13 </div>
14 </div> 14 </div>
diff --git a/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig b/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig
index 5835330d..938f1a31 100644
--- a/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig
@@ -33,10 +33,12 @@
33 </div> 33 </div>
34 <div class="card-action center"> 34 <div class="card-action center">
35 <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" /> 35 <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" />
36 <a href="{{ path('fos_user_registration_register') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {{ 'security.login.register'|trans }}</a> 36 {% if registration_enabled %}
37 <a href="{{ path('fos_user_registration_register') }}" class="waves-effect waves-light grey btn">{{ 'security.login.register'|trans }}</a>
38 {% endif %}
37 <button class="btn waves-effect waves-light" type="submit" name="send"> 39 <button class="btn waves-effect waves-light" type="submit" name="send">
38 {{ 'security.login.submit'|trans }} 40 {{ 'security.login.submit'|trans }}
39 <i class="mdi-content-send right"></i> 41 <i class="material-icons right">send</i>
40 </button> 42 </button>
41 </div> 43 </div>
42 <div class="row center"> 44 <div class="row center">
diff --git a/src/Wallabag/UserBundle/Resources/views/layout.html.twig b/src/Wallabag/UserBundle/Resources/views/layout.html.twig
index 1d0189ca..1f6ea255 100644
--- a/src/Wallabag/UserBundle/Resources/views/layout.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/layout.html.twig
@@ -11,7 +11,7 @@
11<main class="valign-wrapper"> 11<main class="valign-wrapper">
12 <div class="valign row"> 12 <div class="valign row">
13 <div class="card sw"> 13 <div class="card sw">
14 <div class="center"><img src="{{ asset('bundles/wallabagcore/themes/material/img/logo-other_themes.png') }}" alt="wallabag logo" /></div> 14 <div class="center"><img src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-other_themes.png') }}" alt="wallabag logo" /></div>
15 {% block fos_user_content %} 15 {% block fos_user_content %}
16 {% endblock fos_user_content %} 16 {% endblock fos_user_content %}
17 </div> 17 </div>
diff --git a/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php
index c39cc357..101c20eb 100644
--- a/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php
+++ b/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php
@@ -3,6 +3,7 @@
3namespace Tests\Wallabag\ApiBundle\Controller; 3namespace Tests\Wallabag\ApiBundle\Controller;
4 4
5use Tests\Wallabag\ApiBundle\WallabagApiTestCase; 5use Tests\Wallabag\ApiBundle\WallabagApiTestCase;
6use Wallabag\CoreBundle\Entity\Tag;
6 7
7class WallabagRestControllerTest extends WallabagApiTestCase 8class WallabagRestControllerTest extends WallabagApiTestCase
8{ 9{
@@ -79,7 +80,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
79 80
80 public function testGetStarredEntries() 81 public function testGetStarredEntries()
81 { 82 {
82 $this->client->request('GET', '/api/entries', ['star' => 1, 'sort' => 'updated']); 83 $this->client->request('GET', '/api/entries', ['starred' => 1, 'sort' => 'updated']);
83 84
84 $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); 85 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
85 86
@@ -121,6 +122,73 @@ class WallabagRestControllerTest extends WallabagApiTestCase
121 ); 122 );
122 } 123 }
123 124
125 public function testGetTaggedEntries()
126 {
127 $this->client->request('GET', '/api/entries', ['tags' => 'foo,bar']);
128
129 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
130
131 $content = json_decode($this->client->getResponse()->getContent(), true);
132
133 $this->assertGreaterThanOrEqual(1, count($content));
134 $this->assertNotEmpty($content['_embedded']['items']);
135 $this->assertGreaterThanOrEqual(1, $content['total']);
136 $this->assertEquals(1, $content['page']);
137 $this->assertGreaterThanOrEqual(1, $content['pages']);
138
139 $this->assertTrue(
140 $this->client->getResponse()->headers->contains(
141 'Content-Type',
142 'application/json'
143 )
144 );
145 }
146
147 public function testGetDatedEntries()
148 {
149 $this->client->request('GET', '/api/entries', ['since' => 1]);
150
151 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
152
153 $content = json_decode($this->client->getResponse()->getContent(), true);
154
155 $this->assertGreaterThanOrEqual(1, count($content));
156 $this->assertNotEmpty($content['_embedded']['items']);
157 $this->assertGreaterThanOrEqual(1, $content['total']);
158 $this->assertEquals(1, $content['page']);
159 $this->assertGreaterThanOrEqual(1, $content['pages']);
160
161 $this->assertTrue(
162 $this->client->getResponse()->headers->contains(
163 'Content-Type',
164 'application/json'
165 )
166 );
167 }
168
169 public function testGetDatedSupEntries()
170 {
171 $future = new \DateTime(date('Y-m-d H:i:s'));
172 $this->client->request('GET', '/api/entries', ['since' => $future->getTimestamp() + 1000]);
173
174 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
175
176 $content = json_decode($this->client->getResponse()->getContent(), true);
177
178 $this->assertGreaterThanOrEqual(1, count($content));
179 $this->assertEmpty($content['_embedded']['items']);
180 $this->assertEquals(0, $content['total']);
181 $this->assertEquals(1, $content['page']);
182 $this->assertEquals(1, $content['pages']);
183
184 $this->assertTrue(
185 $this->client->getResponse()->headers->contains(
186 'Content-Type',
187 'application/json'
188 )
189 );
190 }
191
124 public function testDeleteEntry() 192 public function testDeleteEntry()
125 { 193 {
126 $entry = $this->client->getContainer() 194 $entry = $this->client->getContainer()
@@ -292,7 +360,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
292 $entry = $this->client->getContainer() 360 $entry = $this->client->getContainer()
293 ->get('doctrine.orm.entity_manager') 361 ->get('doctrine.orm.entity_manager')
294 ->getRepository('WallabagCoreBundle:Entry') 362 ->getRepository('WallabagCoreBundle:Entry')
295 ->findOneWithTags(1); 363 ->findOneWithTags($this->user->getId());
296 364
297 $entry = $entry[0]; 365 $entry = $entry[0];
298 366
@@ -354,7 +422,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
354 $entry = $this->client->getContainer() 422 $entry = $this->client->getContainer()
355 ->get('doctrine.orm.entity_manager') 423 ->get('doctrine.orm.entity_manager')
356 ->getRepository('WallabagCoreBundle:Entry') 424 ->getRepository('WallabagCoreBundle:Entry')
357 ->findOneWithTags(1); 425 ->findOneWithTags($this->user->getId());
358 $entry = $entry[0]; 426 $entry = $entry[0];
359 427
360 if (!$entry) { 428 if (!$entry) {
@@ -405,7 +473,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
405 $this->assertEquals($tag['label'], $content['label']); 473 $this->assertEquals($tag['label'], $content['label']);
406 $this->assertEquals($tag['slug'], $content['slug']); 474 $this->assertEquals($tag['slug'], $content['slug']);
407 475
408 $entries = $entry = $this->client->getContainer() 476 $entries = $this->client->getContainer()
409 ->get('doctrine.orm.entity_manager') 477 ->get('doctrine.orm.entity_manager')
410 ->getRepository('WallabagCoreBundle:Entry') 478 ->getRepository('WallabagCoreBundle:Entry')
411 ->findAllByTagId($this->user->getId(), $tag['id']); 479 ->findAllByTagId($this->user->getId(), $tag['id']);
@@ -413,6 +481,112 @@ class WallabagRestControllerTest extends WallabagApiTestCase
413 $this->assertCount(0, $entries); 481 $this->assertCount(0, $entries);
414 } 482 }
415 483
484 public function testDeleteTagByLabel()
485 {
486 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
487 $entry = $this->client->getContainer()
488 ->get('doctrine.orm.entity_manager')
489 ->getRepository('WallabagCoreBundle:Entry')
490 ->findOneWithTags($this->user->getId());
491
492 $entry = $entry[0];
493
494 $tag = new Tag();
495 $tag->setLabel('Awesome tag for test');
496 $em->persist($tag);
497
498 $entry->addTag($tag);
499
500 $em->persist($entry);
501 $em->flush();
502
503 $this->client->request('DELETE', '/api/tag/label.json', ['tag' => $tag->getLabel()]);
504
505 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
506
507 $content = json_decode($this->client->getResponse()->getContent(), true);
508
509 $this->assertArrayHasKey('label', $content);
510 $this->assertEquals($tag->getLabel(), $content['label']);
511 $this->assertEquals($tag->getSlug(), $content['slug']);
512
513 $entries = $this->client->getContainer()
514 ->get('doctrine.orm.entity_manager')
515 ->getRepository('WallabagCoreBundle:Entry')
516 ->findAllByTagId($this->user->getId(), $tag->getId());
517
518 $this->assertCount(0, $entries);
519 }
520
521 public function testDeleteTagByLabelNotFound()
522 {
523 $this->client->request('DELETE', '/api/tag/label.json', ['tag' => 'does not exist']);
524
525 $this->assertEquals(404, $this->client->getResponse()->getStatusCode());
526 }
527
528 public function testDeleteTagsByLabel()
529 {
530 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
531 $entry = $this->client->getContainer()
532 ->get('doctrine.orm.entity_manager')
533 ->getRepository('WallabagCoreBundle:Entry')
534 ->findOneWithTags($this->user->getId());
535
536 $entry = $entry[0];
537
538 $tag = new Tag();
539 $tag->setLabel('Awesome tag for tagsLabel');
540 $em->persist($tag);
541
542 $tag2 = new Tag();
543 $tag2->setLabel('Awesome tag for tagsLabel 2');
544 $em->persist($tag2);
545
546 $entry->addTag($tag);
547 $entry->addTag($tag2);
548
549 $em->persist($entry);
550 $em->flush();
551
552 $this->client->request('DELETE', '/api/tags/label.json', ['tags' => $tag->getLabel().','.$tag2->getLabel()]);
553
554 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
555
556 $content = json_decode($this->client->getResponse()->getContent(), true);
557
558 $this->assertCount(2, $content);
559
560 $this->assertArrayHasKey('label', $content[0]);
561 $this->assertEquals($tag->getLabel(), $content[0]['label']);
562 $this->assertEquals($tag->getSlug(), $content[0]['slug']);
563
564 $this->assertArrayHasKey('label', $content[1]);
565 $this->assertEquals($tag2->getLabel(), $content[1]['label']);
566 $this->assertEquals($tag2->getSlug(), $content[1]['slug']);
567
568 $entries = $this->client->getContainer()
569 ->get('doctrine.orm.entity_manager')
570 ->getRepository('WallabagCoreBundle:Entry')
571 ->findAllByTagId($this->user->getId(), $tag->getId());
572
573 $this->assertCount(0, $entries);
574
575 $entries = $this->client->getContainer()
576 ->get('doctrine.orm.entity_manager')
577 ->getRepository('WallabagCoreBundle:Entry')
578 ->findAllByTagId($this->user->getId(), $tag2->getId());
579
580 $this->assertCount(0, $entries);
581 }
582
583 public function testDeleteTagsByLabelNotFound()
584 {
585 $this->client->request('DELETE', '/api/tags/label.json', ['tags' => 'does not exist']);
586
587 $this->assertEquals(404, $this->client->getResponse()->getStatusCode());
588 }
589
416 public function testGetVersion() 590 public function testGetVersion()
417 { 591 {
418 $this->client->request('GET', '/api/version'); 592 $this->client->request('GET', '/api/version');
diff --git a/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php b/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php
index 83f5bf24..1bfd41d5 100644
--- a/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php
+++ b/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php
@@ -33,7 +33,7 @@ class InstallCommandTest extends WallabagCoreTestCase
33 } 33 }
34 34
35 /** 35 /**
36 * Ensure next tests will have a clean database 36 * Ensure next tests will have a clean database.
37 */ 37 */
38 public static function tearDownAfterClass() 38 public static function tearDownAfterClass()
39 { 39 {
@@ -87,7 +87,6 @@ class InstallCommandTest extends WallabagCoreTestCase
87 $this->assertContains('Setting up database.', $tester->getDisplay()); 87 $this->assertContains('Setting up database.', $tester->getDisplay());
88 $this->assertContains('Administration setup.', $tester->getDisplay()); 88 $this->assertContains('Administration setup.', $tester->getDisplay());
89 $this->assertContains('Config setup.', $tester->getDisplay()); 89 $this->assertContains('Config setup.', $tester->getDisplay());
90 $this->assertContains('Installing assets.', $tester->getDisplay());
91 } 90 }
92 91
93 public function testRunInstallCommandWithReset() 92 public function testRunInstallCommandWithReset()
@@ -119,7 +118,6 @@ class InstallCommandTest extends WallabagCoreTestCase
119 $this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay()); 118 $this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay());
120 $this->assertContains('Administration setup.', $tester->getDisplay()); 119 $this->assertContains('Administration setup.', $tester->getDisplay());
121 $this->assertContains('Config setup.', $tester->getDisplay()); 120 $this->assertContains('Config setup.', $tester->getDisplay());
122 $this->assertContains('Installing assets.', $tester->getDisplay());
123 121
124 // we force to reset everything 122 // we force to reset everything
125 $this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay()); 123 $this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay());
@@ -170,7 +168,6 @@ class InstallCommandTest extends WallabagCoreTestCase
170 $this->assertContains('Setting up database.', $tester->getDisplay()); 168 $this->assertContains('Setting up database.', $tester->getDisplay());
171 $this->assertContains('Administration setup.', $tester->getDisplay()); 169 $this->assertContains('Administration setup.', $tester->getDisplay());
172 $this->assertContains('Config setup.', $tester->getDisplay()); 170 $this->assertContains('Config setup.', $tester->getDisplay());
173 $this->assertContains('Installing assets.', $tester->getDisplay());
174 171
175 // the current database doesn't already exist 172 // the current database doesn't already exist
176 $this->assertContains('Creating database and schema, clearing the cache', $tester->getDisplay()); 173 $this->assertContains('Creating database and schema, clearing the cache', $tester->getDisplay());
@@ -208,7 +205,6 @@ class InstallCommandTest extends WallabagCoreTestCase
208 $this->assertContains('Setting up database.', $tester->getDisplay()); 205 $this->assertContains('Setting up database.', $tester->getDisplay());
209 $this->assertContains('Administration setup.', $tester->getDisplay()); 206 $this->assertContains('Administration setup.', $tester->getDisplay());
210 $this->assertContains('Config setup.', $tester->getDisplay()); 207 $this->assertContains('Config setup.', $tester->getDisplay());
211 $this->assertContains('Installing assets.', $tester->getDisplay());
212 208
213 $this->assertContains('Droping schema and creating schema', $tester->getDisplay()); 209 $this->assertContains('Droping schema and creating schema', $tester->getDisplay());
214 } 210 }
@@ -263,7 +259,6 @@ class InstallCommandTest extends WallabagCoreTestCase
263 $this->assertContains('Setting up database.', $tester->getDisplay()); 259 $this->assertContains('Setting up database.', $tester->getDisplay());
264 $this->assertContains('Administration setup.', $tester->getDisplay()); 260 $this->assertContains('Administration setup.', $tester->getDisplay());
265 $this->assertContains('Config setup.', $tester->getDisplay()); 261 $this->assertContains('Config setup.', $tester->getDisplay());
266 $this->assertContains('Installing assets.', $tester->getDisplay());
267 262
268 $this->assertContains('Creating schema', $tester->getDisplay()); 263 $this->assertContains('Creating schema', $tester->getDisplay());
269 } 264 }
@@ -296,6 +291,5 @@ class InstallCommandTest extends WallabagCoreTestCase
296 $this->assertContains('Setting up database.', $tester->getDisplay()); 291 $this->assertContains('Setting up database.', $tester->getDisplay());
297 $this->assertContains('Administration setup.', $tester->getDisplay()); 292 $this->assertContains('Administration setup.', $tester->getDisplay());
298 $this->assertContains('Config setup.', $tester->getDisplay()); 293 $this->assertContains('Config setup.', $tester->getDisplay());
299 $this->assertContains('Installing assets.', $tester->getDisplay());
300 } 294 }
301} 295}
diff --git a/tests/Wallabag/CoreBundle/Controller/DeveloperControllerTest.php b/tests/Wallabag/CoreBundle/Controller/DeveloperControllerTest.php
index 79452ace..97ed0d58 100644
--- a/tests/Wallabag/CoreBundle/Controller/DeveloperControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/DeveloperControllerTest.php
@@ -18,12 +18,19 @@ class DeveloperControllerTest extends WallabagCoreTestCase
18 18
19 $form = $crawler->filter('button[type=submit]')->form(); 19 $form = $crawler->filter('button[type=submit]')->form();
20 20
21 $client->submit($form); 21 $data = [
22 'client[name]' => 'My app',
23 ];
24
25 $crawler = $client->submit($form, $data);
22 26
23 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 27 $this->assertEquals(200, $client->getResponse()->getStatusCode());
24 28
25 $newNbClients = $em->getRepository('WallabagApiBundle:Client')->findAll(); 29 $newNbClients = $em->getRepository('WallabagApiBundle:Client')->findAll();
26 $this->assertGreaterThan(count($nbClients), count($newNbClients)); 30 $this->assertGreaterThan(count($nbClients), count($newNbClients));
31
32 $this->assertGreaterThan(1, $alert = $crawler->filter('.settings ul li strong')->extract(['_text']));
33 $this->assertContains('My app', $alert[0]);
27 } 34 }
28 35
29 public function testListingClient() 36 public function testListingClient()
diff --git a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
index 5c739c78..a74c17d9 100644
--- a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
@@ -236,6 +236,16 @@ class EntryControllerTest extends WallabagCoreTestCase
236 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 236 $this->assertEquals(200, $client->getResponse()->getStatusCode());
237 } 237 }
238 238
239 public function testUntagged()
240 {
241 $this->logInAs('admin');
242 $client = $this->getClient();
243
244 $client->request('GET', '/untagged/list');
245
246 $this->assertEquals(200, $client->getResponse()->getStatusCode());
247 }
248
239 public function testStarred() 249 public function testStarred()
240 { 250 {
241 $this->logInAs('admin'); 251 $this->logInAs('admin');
@@ -698,4 +708,47 @@ class EntryControllerTest extends WallabagCoreTestCase
698 $crawler = $client->submit($form, $data); 708 $crawler = $client->submit($form, $data);
699 $this->assertCount(2, $crawler->filter('div[class=entry]')); 709 $this->assertCount(2, $crawler->filter('div[class=entry]'));
700 } 710 }
711
712 public function testCache()
713 {
714 $this->logInAs('admin');
715 $client = $this->getClient();
716
717 $content = $client->getContainer()
718 ->get('doctrine.orm.entity_manager')
719 ->getRepository('WallabagCoreBundle:Entry')
720 ->findOneByUser($this->getLoggedInUserId());
721
722 // no uuid
723 $client->request('GET', '/share/'.$content->getUuid());
724 $this->assertEquals(404, $client->getResponse()->getStatusCode());
725
726 // generating the uuid
727 $client->request('GET', '/share/'.$content->getId());
728 $this->assertEquals(302, $client->getResponse()->getStatusCode());
729
730 // follow link with uuid
731 $crawler = $client->followRedirect();
732 $this->assertEquals(200, $client->getResponse()->getStatusCode());
733 $this->assertContains('max-age=25200', $client->getResponse()->headers->get('cache-control'));
734 $this->assertContains('public', $client->getResponse()->headers->get('cache-control'));
735 $this->assertContains('s-maxage=25200', $client->getResponse()->headers->get('cache-control'));
736 $this->assertNotContains('no-cache', $client->getResponse()->headers->get('cache-control'));
737
738 // sharing is now disabled
739 $client->getContainer()->get('craue_config')->set('share_public', 0);
740 $client->request('GET', '/share/'.$content->getUuid());
741 $this->assertEquals(404, $client->getResponse()->getStatusCode());
742
743 $client->request('GET', '/view/'.$content->getId());
744 $this->assertContains('no-cache', $client->getResponse()->headers->get('cache-control'));
745
746 // removing the share
747 $client->request('GET', '/share/delete/'.$content->getId());
748 $this->assertEquals(302, $client->getResponse()->getStatusCode());
749
750 // share is now disable
751 $client->request('GET', '/share/'.$content->getUuid());
752 $this->assertEquals(404, $client->getResponse()->getStatusCode());
753 }
701} 754}
diff --git a/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php
index b22156c3..47b86117 100644
--- a/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php
@@ -168,7 +168,7 @@ class ExportControllerTest extends WallabagCoreTestCase
168 $this->assertGreaterThan(1, $csv); 168 $this->assertGreaterThan(1, $csv);
169 // +1 for title line 169 // +1 for title line
170 $this->assertEquals(count($contentInDB) + 1, count($csv)); 170 $this->assertEquals(count($contentInDB) + 1, count($csv));
171 $this->assertEquals('Title;URL;Content;Tags;"MIME Type";Language', $csv[0]); 171 $this->assertEquals('Title;URL;Content;Tags;"MIME Type";Language;"Creation date"', $csv[0]);
172 } 172 }
173 173
174 public function testJsonExport() 174 public function testJsonExport()
@@ -210,6 +210,8 @@ class ExportControllerTest extends WallabagCoreTestCase
210 $this->assertArrayHasKey('reading_time', $content[0]); 210 $this->assertArrayHasKey('reading_time', $content[0]);
211 $this->assertArrayHasKey('domain_name', $content[0]); 211 $this->assertArrayHasKey('domain_name', $content[0]);
212 $this->assertArrayHasKey('tags', $content[0]); 212 $this->assertArrayHasKey('tags', $content[0]);
213 $this->assertArrayHasKey('created_at', $content[0]);
214 $this->assertArrayHasKey('updated_at', $content[0]);
213 } 215 }
214 216
215 public function testXmlExport() 217 public function testXmlExport()
@@ -247,5 +249,7 @@ class ExportControllerTest extends WallabagCoreTestCase
247 $this->assertNotEmpty('url', (string) $content->entry[0]->url); 249 $this->assertNotEmpty('url', (string) $content->entry[0]->url);
248 $this->assertNotEmpty('content', (string) $content->entry[0]->content); 250 $this->assertNotEmpty('content', (string) $content->entry[0]->content);
249 $this->assertNotEmpty('domain_name', (string) $content->entry[0]->domain_name); 251 $this->assertNotEmpty('domain_name', (string) $content->entry[0]->domain_name);
252 $this->assertNotEmpty('created_at', (string) $content->entry[0]->created_at);
253 $this->assertNotEmpty('updated_at', (string) $content->entry[0]->updated_at);
250 } 254 }
251} 255}
diff --git a/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php b/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php
index 03355f5a..08f4676e 100644
--- a/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php
@@ -69,4 +69,19 @@ class SecurityControllerTest extends WallabagCoreTestCase
69 $this->assertTrue($user->isTrustedComputer('ABCDEF')); 69 $this->assertTrue($user->isTrustedComputer('ABCDEF'));
70 $this->assertFalse($user->isTrustedComputer('FEDCBA')); 70 $this->assertFalse($user->isTrustedComputer('FEDCBA'));
71 } 71 }
72
73 public function testEnabledRegistration()
74 {
75 $client = $this->getClient();
76
77 if (!$client->getContainer()->getParameter('fosuser_registration')) {
78 $this->markTestSkipped('fosuser_registration is not enabled.');
79
80 return;
81 }
82
83 $client->followRedirects();
84 $crawler = $client->request('GET', '/register');
85 $this->assertContains('registration.submit', $crawler->filter('body')->extract(['_text'])[0]);
86 }
72} 87}
diff --git a/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php b/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php
index 58450e5f..2c32393f 100644
--- a/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php
@@ -47,7 +47,7 @@ class TagControllerTest extends WallabagCoreTestCase
47 47
48 $this->assertEquals(1, count($entry->getTags())); 48 $this->assertEquals(1, count($entry->getTags()));
49 49
50 # tag already exists and already assigned 50 // tag already exists and already assigned
51 $client->submit($form, $data); 51 $client->submit($form, $data);
52 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 52 $this->assertEquals(302, $client->getResponse()->getStatusCode());
53 53
@@ -58,7 +58,7 @@ class TagControllerTest extends WallabagCoreTestCase
58 58
59 $this->assertEquals(1, count($newEntry->getTags())); 59 $this->assertEquals(1, count($newEntry->getTags()));
60 60
61 # tag already exists but still not assigned to this entry 61 // tag already exists but still not assigned to this entry
62 $data = [ 62 $data = [
63 'tag[label]' => 'foo', 63 'tag[label]' => 'foo',
64 ]; 64 ];
@@ -131,4 +131,35 @@ class TagControllerTest extends WallabagCoreTestCase
131 131
132 $this->assertEquals(404, $client->getResponse()->getStatusCode()); 132 $this->assertEquals(404, $client->getResponse()->getStatusCode());
133 } 133 }
134
135 public function testShowEntriesForTagAction()
136 {
137 $this->logInAs('admin');
138 $client = $this->getClient();
139
140 $entry = $client->getContainer()
141 ->get('doctrine.orm.entity_manager')
142 ->getRepository('WallabagCoreBundle:Entry')
143 ->findOneByUsernameAndNotArchived('admin');
144
145 $tag = $client->getContainer()
146 ->get('doctrine.orm.entity_manager')
147 ->getRepository('WallabagCoreBundle:Tag')
148 ->findOneByEntryAndTagLabel($entry, 'foo');
149
150 $crawler = $client->request('GET', '/tag/list/'.$tag->getSlug());
151
152 $this->assertEquals(200, $client->getResponse()->getStatusCode());
153 $this->assertCount(2, $crawler->filter('div[class=entry]'));
154
155 $tag = $client->getContainer()
156 ->get('doctrine.orm.entity_manager')
157 ->getRepository('WallabagCoreBundle:Tag')
158 ->findOneByLabel('baz');
159
160 $crawler = $client->request('GET', '/tag/list/'.$tag->getSlug());
161
162 $this->assertEquals(200, $client->getResponse()->getStatusCode());
163 $this->assertCount(0, $crawler->filter('div[class=entry]'));
164 }
134} 165}
diff --git a/tests/Wallabag/CoreBundle/EventListener/LocaleListenerTest.php b/tests/Wallabag/CoreBundle/EventListener/LocaleListenerTest.php
index 2a7f9390..078bb69a 100644
--- a/tests/Wallabag/CoreBundle/EventListener/LocaleListenerTest.php
+++ b/tests/Wallabag/CoreBundle/EventListener/LocaleListenerTest.php
@@ -15,7 +15,11 @@ class LocaleListenerTest extends \PHPUnit_Framework_TestCase
15{ 15{
16 private function getEvent(Request $request) 16 private function getEvent(Request $request)
17 { 17 {
18 return new GetResponseEvent($this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'), $request, HttpKernelInterface::MASTER_REQUEST); 18 $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')
19 ->disableOriginalConstructor()
20 ->getMock();
21
22 return new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST);
19 } 23 }
20 24
21 public function testWithoutSession() 25 public function testWithoutSession()
diff --git a/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php
index 7abb0737..5d772602 100644
--- a/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php
+++ b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php
@@ -296,6 +296,29 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
296 $this->assertEquals('tag2', $entry->getTags()[1]->getLabel()); 296 $this->assertEquals('tag2', $entry->getTags()[1]->getLabel());
297 } 297 }
298 298
299 public function testAssignTagsNotFlushed()
300 {
301 $graby = $this->getMockBuilder('Graby\Graby')
302 ->disableOriginalConstructor()
303 ->getMock();
304
305 $tagRepo = $this->getTagRepositoryMock();
306 $tagRepo->expects($this->never())
307 ->method('__call');
308
309 $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
310
311 $tagEntity = new Tag();
312 $tagEntity->setLabel('tag1');
313
314 $entry = new Entry(new User());
315
316 $proxy->assignTagsToEntry($entry, 'tag1', [$tagEntity]);
317
318 $this->assertCount(1, $entry->getTags());
319 $this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
320 }
321
299 private function getTaggerMock() 322 private function getTaggerMock()
300 { 323 {
301 return $this->getMockBuilder('Wallabag\CoreBundle\Helper\RuleBasedTagger') 324 return $this->getMockBuilder('Wallabag\CoreBundle\Helper\RuleBasedTagger')
diff --git a/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php
index c0055888..4f103921 100644
--- a/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php
+++ b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php
@@ -80,4 +80,19 @@ abstract class WallabagCoreTestCase extends WebTestCase
80 80
81 throw new \RuntimeException('No logged in User.'); 81 throw new \RuntimeException('No logged in User.');
82 } 82 }
83
84 /**
85 * Check if Redis is installed.
86 * If not, mark test as skip.
87 */
88 protected function checkRedis()
89 {
90 try {
91 $this->client->getContainer()->get('wallabag_core.redis.client')->connect();
92 } catch (\Exception $e) {
93 $this->markTestSkipped(
94 'Redis is not installed/activated'
95 );
96 }
97 }
83} 98}
diff --git a/tests/Wallabag/ImportBundle/Command/ImportCommandTest.php b/tests/Wallabag/ImportBundle/Command/ImportCommandTest.php
new file mode 100644
index 00000000..7be1eb18
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Command/ImportCommandTest.php
@@ -0,0 +1,85 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Command;
4
5use Symfony\Bundle\FrameworkBundle\Console\Application;
6use Symfony\Component\Console\Tester\CommandTester;
7use Wallabag\ImportBundle\Command\ImportCommand;
8use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
9
10class ImportCommandTest extends WallabagCoreTestCase
11{
12 /**
13 * @expectedException Symfony\Component\Console\Exception\RuntimeException
14 * @expectedExceptionMessage Not enough arguments
15 */
16 public function testRunImportCommandWithoutArguments()
17 {
18 $application = new Application($this->getClient()->getKernel());
19 $application->add(new ImportCommand());
20
21 $command = $application->find('wallabag:import');
22
23 $tester = new CommandTester($command);
24 $tester->execute([
25 'command' => $command->getName(),
26 ]);
27 }
28
29 /**
30 * @expectedException Symfony\Component\Config\Definition\Exception\Exception
31 * @expectedExceptionMessage not found
32 */
33 public function testRunImportCommandWithoutFilepath()
34 {
35 $application = new Application($this->getClient()->getKernel());
36 $application->add(new ImportCommand());
37
38 $command = $application->find('wallabag:import');
39
40 $tester = new CommandTester($command);
41 $tester->execute([
42 'command' => $command->getName(),
43 'userId' => 1,
44 'filepath' => 1,
45 ]);
46 }
47
48 /**
49 * @expectedException Symfony\Component\Config\Definition\Exception\Exception
50 * @expectedExceptionMessage User with id
51 */
52 public function testRunImportCommandWithoutUserId()
53 {
54 $application = new Application($this->getClient()->getKernel());
55 $application->add(new ImportCommand());
56
57 $command = $application->find('wallabag:import');
58
59 $tester = new CommandTester($command);
60 $tester->execute([
61 'command' => $command->getName(),
62 'userId' => 0,
63 'filepath' => './',
64 ]);
65 }
66
67 public function testRunImportCommand()
68 {
69 $application = new Application($this->getClient()->getKernel());
70 $application->add(new ImportCommand());
71
72 $command = $application->find('wallabag:import');
73
74 $tester = new CommandTester($command);
75 $tester->execute([
76 'command' => $command->getName(),
77 'userId' => 1,
78 'filepath' => $application->getKernel()->getContainer()->getParameter('kernel.root_dir').'/../tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json',
79 '--importer' => 'v2',
80 ]);
81
82 $this->assertContains('imported', $tester->getDisplay());
83 $this->assertContains('already saved', $tester->getDisplay());
84 }
85}
diff --git a/tests/Wallabag/ImportBundle/Command/RedisWorkerCommandTest.php b/tests/Wallabag/ImportBundle/Command/RedisWorkerCommandTest.php
new file mode 100644
index 00000000..74952847
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Command/RedisWorkerCommandTest.php
@@ -0,0 +1,74 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Command;
4
5use Symfony\Bundle\FrameworkBundle\Console\Application;
6use Symfony\Component\Console\Tester\CommandTester;
7use Wallabag\ImportBundle\Command\RedisWorkerCommand;
8use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
9use M6Web\Component\RedisMock\RedisMockFactory;
10
11class RedisWorkerCommandTest extends WallabagCoreTestCase
12{
13 /**
14 * @expectedException Symfony\Component\Console\Exception\RuntimeException
15 * @expectedExceptionMessage Not enough arguments (missing: "serviceName")
16 */
17 public function testRunRedisWorkerCommandWithoutArguments()
18 {
19 $application = new Application($this->getClient()->getKernel());
20 $application->add(new RedisWorkerCommand());
21
22 $command = $application->find('wallabag:import:redis-worker');
23
24 $tester = new CommandTester($command);
25 $tester->execute([
26 'command' => $command->getName(),
27 ]);
28 }
29
30 /**
31 * @expectedException Symfony\Component\Config\Definition\Exception\Exception
32 * @expectedExceptionMessage No queue or consumer found for service name
33 */
34 public function testRunRedisWorkerCommandWithBadService()
35 {
36 $application = new Application($this->getClient()->getKernel());
37 $application->add(new RedisWorkerCommand());
38
39 $command = $application->find('wallabag:import:redis-worker');
40
41 $tester = new CommandTester($command);
42 $tester->execute([
43 'command' => $command->getName(),
44 'serviceName' => 'YOMONSERVICE',
45 ]);
46 }
47
48 public function testRunRedisWorkerCommand()
49 {
50 $application = new Application($this->getClient()->getKernel());
51 $application->add(new RedisWorkerCommand());
52
53 $factory = new RedisMockFactory();
54 $redisMock = $factory->getAdapter('Predis\Client', true);
55
56 $application->getKernel()->getContainer()->set('wallabag_core.redis.client', $redisMock);
57
58 // put a fake message in the queue so the worker will stop after reading that message
59 // instead of waiting for others
60 $redisMock->lpush('wallabag.import.readability', '{}');
61
62 $command = $application->find('wallabag:import:redis-worker');
63
64 $tester = new CommandTester($command);
65 $tester->execute([
66 'command' => $command->getName(),
67 'serviceName' => 'readability',
68 '--maxIterations' => 1,
69 ]);
70
71 $this->assertContains('Worker started at', $tester->getDisplay());
72 $this->assertContains('Waiting for message', $tester->getDisplay());
73 }
74}
diff --git a/tests/Wallabag/ImportBundle/Consumer/AMQPEntryConsumerTest.php b/tests/Wallabag/ImportBundle/Consumer/AMQPEntryConsumerTest.php
new file mode 100644
index 00000000..a3263771
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Consumer/AMQPEntryConsumerTest.php
@@ -0,0 +1,225 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Consumer\AMQP;
4
5use Wallabag\ImportBundle\Consumer\AMQPEntryConsumer;
6use PhpAmqpLib\Message\AMQPMessage;
7use Wallabag\UserBundle\Entity\User;
8use Wallabag\CoreBundle\Entity\Entry;
9
10class AMQPEntryConsumerTest extends \PHPUnit_Framework_TestCase
11{
12 public function testMessageOk()
13 {
14 $em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
15 ->disableOriginalConstructor()
16 ->getMock();
17
18 $em
19 ->expects($this->once())
20 ->method('flush');
21
22 $em
23 ->expects($this->exactly(2))
24 ->method('clear');
25
26 $body = <<<'JSON'
27{
28 "item_id": "1402935436",
29 "resolved_id": "1402935436",
30 "given_url": "http://mashable.com/2016/09/04/leslie-jones-back-on-twitter-after-hack/?utm_campaign=Mash-Prod-RSS-Feedburner-All-Partial&utm_cid=Mash-Prod-RSS-Feedburner-All-Partial",
31 "given_title": "Leslie Jones is back on Twitter and her comeback tweet rules",
32 "favorite": "0",
33 "status": "0",
34 "time_added": "1473020899",
35 "time_updated": "1473020899",
36 "time_read": "0",
37 "time_favorited": "0",
38 "sort_id": 0,
39 "resolved_title": "Leslie Jones is back on Twitter and her comeback tweet rules",
40 "resolved_url": "http://mashable.com/2016/09/04/leslie-jones-back-on-twitter-after-hack/?utm_campaign=Mash-Prod-RSS-Feedburner-All-Partial&utm_cid=Mash-Prod-RSS-Feedburner-All-Partial",
41 "excerpt": "Leslie Jones is back to communicating with her adoring public on Twitter after cowardly hacker-trolls drove her away, probably to compensate for their own failings. It all started with a mic drop ...",
42 "is_article": "1",
43 "is_index": "0",
44 "has_video": "0",
45 "has_image": "1",
46 "word_count": "200",
47 "tags": {
48 "ifttt": {
49 "item_id": "1402935436",
50 "tag": "ifttt"
51 },
52 "mashable": {
53 "item_id": "1402935436",
54 "tag": "mashable"
55 }
56 },
57 "authors": {
58 "2484273": {
59 "item_id": "1402935436",
60 "author_id": "2484273",
61 "name": "Adam Rosenberg",
62 "url": "http://mashable.com/author/adam-rosenberg/"
63 }
64 },
65 "image": {
66 "item_id": "1402935436",
67 "src": "http://i.amz.mshcdn.com/i-V5cS6_sDqFABaVR0hVSBJqG_w=/950x534/https%3A%2F%2Fblueprint-api-production.s3.amazonaws.com%2Fuploads%2Fcard%2Fimage%2F199899%2Fleslie_jones_war_dogs.jpg",
68 "width": "0",
69 "height": "0"
70 },
71 "images": {
72 "1": {
73 "item_id": "1402935436",
74 "image_id": "1",
75 "src": "http://i.amz.mshcdn.com/i-V5cS6_sDqFABaVR0hVSBJqG_w=/950x534/https%3A%2F%2Fblueprint-api-production.s3.amazonaws.com%2Fuploads%2Fcard%2Fimage%2F199899%2Fleslie_jones_war_dogs.jpg",
76 "width": "0",
77 "height": "0",
78 "credit": "Image: Steve Eichner/NameFace/Sipa USA",
79 "caption": ""
80 }
81 },
82 "userId": 1
83}
84JSON;
85
86 $user = new User();
87 $entry = new Entry($user);
88
89 $userRepository = $this->getMockBuilder('Wallabag\UserBundle\Repository\UserRepository')
90 ->disableOriginalConstructor()
91 ->getMock();
92
93 $userRepository
94 ->expects($this->once())
95 ->method('find')
96 // userId from the body json above
97 ->with(1)
98 ->willReturn($user);
99
100 $import = $this->getMockBuilder('Wallabag\ImportBundle\Import\AbstractImport')
101 ->disableOriginalConstructor()
102 ->getMock();
103
104 $import
105 ->expects($this->once())
106 ->method('setUser')
107 ->with($user);
108
109 $import
110 ->expects($this->once())
111 ->method('parseEntry')
112 ->with(json_decode($body, true))
113 ->willReturn($entry);
114
115 $consumer = new AMQPEntryConsumer(
116 $em,
117 $userRepository,
118 $import
119 );
120
121 $message = new AMQPMessage($body);
122
123 $consumer->execute($message);
124 }
125
126 public function testMessageWithBadUser()
127 {
128 $em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
129 ->disableOriginalConstructor()
130 ->getMock();
131
132 $em
133 ->expects($this->never())
134 ->method('flush');
135
136 $em
137 ->expects($this->never())
138 ->method('clear');
139
140 $body = '{ "userId": 123 }';
141
142 $user = new User();
143 $entry = new Entry($user);
144
145 $userRepository = $this->getMockBuilder('Wallabag\UserBundle\Repository\UserRepository')
146 ->disableOriginalConstructor()
147 ->getMock();
148
149 $userRepository
150 ->expects($this->once())
151 ->method('find')
152 // userId from the body json above
153 ->with(123)
154 ->willReturn(null);
155
156 $import = $this->getMockBuilder('Wallabag\ImportBundle\Import\AbstractImport')
157 ->disableOriginalConstructor()
158 ->getMock();
159
160 $consumer = new AMQPEntryConsumer(
161 $em,
162 $userRepository,
163 $import
164 );
165
166 $message = new AMQPMessage($body);
167
168 $consumer->execute($message);
169 }
170
171 public function testMessageWithEntryProcessed()
172 {
173 $em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
174 ->disableOriginalConstructor()
175 ->getMock();
176
177 $em
178 ->expects($this->never())
179 ->method('flush');
180
181 $em
182 ->expects($this->never())
183 ->method('clear');
184
185 $body = '{ "userId": 123 }';
186
187 $user = new User();
188
189 $userRepository = $this->getMockBuilder('Wallabag\UserBundle\Repository\UserRepository')
190 ->disableOriginalConstructor()
191 ->getMock();
192
193 $userRepository
194 ->expects($this->once())
195 ->method('find')
196 // userId from the body json above
197 ->with(123)
198 ->willReturn($user);
199
200 $import = $this->getMockBuilder('Wallabag\ImportBundle\Import\AbstractImport')
201 ->disableOriginalConstructor()
202 ->getMock();
203
204 $import
205 ->expects($this->once())
206 ->method('setUser')
207 ->with($user);
208
209 $import
210 ->expects($this->once())
211 ->method('parseEntry')
212 ->with(json_decode($body, true))
213 ->willReturn(null);
214
215 $consumer = new AMQPEntryConsumer(
216 $em,
217 $userRepository,
218 $import
219 );
220
221 $message = new AMQPMessage($body);
222
223 $consumer->execute($message);
224 }
225}
diff --git a/tests/Wallabag/ImportBundle/Consumer/RedisEntryConsumerTest.php b/tests/Wallabag/ImportBundle/Consumer/RedisEntryConsumerTest.php
new file mode 100644
index 00000000..5e8ee41d
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Consumer/RedisEntryConsumerTest.php
@@ -0,0 +1,225 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Consumer\AMQP;
4
5use Wallabag\ImportBundle\Consumer\RedisEntryConsumer;
6use Wallabag\UserBundle\Entity\User;
7use Wallabag\CoreBundle\Entity\Entry;
8
9class RedisEntryConsumerTest extends \PHPUnit_Framework_TestCase
10{
11 public function testMessageOk()
12 {
13 $em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
14 ->disableOriginalConstructor()
15 ->getMock();
16
17 $em
18 ->expects($this->once())
19 ->method('flush');
20
21 $em
22 ->expects($this->exactly(2))
23 ->method('clear');
24
25 $body = <<<'JSON'
26{
27 "item_id": "1402935436",
28 "resolved_id": "1402935436",
29 "given_url": "http://mashable.com/2016/09/04/leslie-jones-back-on-twitter-after-hack/?utm_campaign=Mash-Prod-RSS-Feedburner-All-Partial&utm_cid=Mash-Prod-RSS-Feedburner-All-Partial",
30 "given_title": "Leslie Jones is back on Twitter and her comeback tweet rules",
31 "favorite": "0",
32 "status": "0",
33 "time_added": "1473020899",
34 "time_updated": "1473020899",
35 "time_read": "0",
36 "time_favorited": "0",
37 "sort_id": 0,
38 "resolved_title": "Leslie Jones is back on Twitter and her comeback tweet rules",
39 "resolved_url": "http://mashable.com/2016/09/04/leslie-jones-back-on-twitter-after-hack/?utm_campaign=Mash-Prod-RSS-Feedburner-All-Partial&utm_cid=Mash-Prod-RSS-Feedburner-All-Partial",
40 "excerpt": "Leslie Jones is back to communicating with her adoring public on Twitter after cowardly hacker-trolls drove her away, probably to compensate for their own failings. It all started with a mic drop ...",
41 "is_article": "1",
42 "is_index": "0",
43 "has_video": "0",
44 "has_image": "1",
45 "word_count": "200",
46 "tags": {
47 "ifttt": {
48 "item_id": "1402935436",
49 "tag": "ifttt"
50 },
51 "mashable": {
52 "item_id": "1402935436",
53 "tag": "mashable"
54 }
55 },
56 "authors": {
57 "2484273": {
58 "item_id": "1402935436",
59 "author_id": "2484273",
60 "name": "Adam Rosenberg",
61 "url": "http://mashable.com/author/adam-rosenberg/"
62 }
63 },
64 "image": {
65 "item_id": "1402935436",
66 "src": "http://i.amz.mshcdn.com/i-V5cS6_sDqFABaVR0hVSBJqG_w=/950x534/https%3A%2F%2Fblueprint-api-production.s3.amazonaws.com%2Fuploads%2Fcard%2Fimage%2F199899%2Fleslie_jones_war_dogs.jpg",
67 "width": "0",
68 "height": "0"
69 },
70 "images": {
71 "1": {
72 "item_id": "1402935436",
73 "image_id": "1",
74 "src": "http://i.amz.mshcdn.com/i-V5cS6_sDqFABaVR0hVSBJqG_w=/950x534/https%3A%2F%2Fblueprint-api-production.s3.amazonaws.com%2Fuploads%2Fcard%2Fimage%2F199899%2Fleslie_jones_war_dogs.jpg",
75 "width": "0",
76 "height": "0",
77 "credit": "Image: Steve Eichner/NameFace/Sipa USA",
78 "caption": ""
79 }
80 },
81 "userId": 1
82}
83JSON;
84
85 $user = new User();
86 $entry = new Entry($user);
87
88 $userRepository = $this->getMockBuilder('Wallabag\UserBundle\Repository\UserRepository')
89 ->disableOriginalConstructor()
90 ->getMock();
91
92 $userRepository
93 ->expects($this->once())
94 ->method('find')
95 // userId from the body json above
96 ->with(1)
97 ->willReturn($user);
98
99 $import = $this->getMockBuilder('Wallabag\ImportBundle\Import\AbstractImport')
100 ->disableOriginalConstructor()
101 ->getMock();
102
103 $import
104 ->expects($this->once())
105 ->method('setUser')
106 ->with($user);
107
108 $import
109 ->expects($this->once())
110 ->method('parseEntry')
111 ->with(json_decode($body, true))
112 ->willReturn($entry);
113
114 $consumer = new RedisEntryConsumer(
115 $em,
116 $userRepository,
117 $import
118 );
119
120 $res = $consumer->manage($body);
121
122 $this->assertTrue($res);
123 }
124
125 public function testMessageWithBadUser()
126 {
127 $em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
128 ->disableOriginalConstructor()
129 ->getMock();
130
131 $em
132 ->expects($this->never())
133 ->method('flush');
134
135 $em
136 ->expects($this->never())
137 ->method('clear');
138
139 $body = '{ "userId": 123 }';
140
141 $user = new User();
142 $entry = new Entry($user);
143
144 $userRepository = $this->getMockBuilder('Wallabag\UserBundle\Repository\UserRepository')
145 ->disableOriginalConstructor()
146 ->getMock();
147
148 $userRepository
149 ->expects($this->once())
150 ->method('find')
151 // userId from the body json above
152 ->with(123)
153 ->willReturn(null);
154
155 $import = $this->getMockBuilder('Wallabag\ImportBundle\Import\AbstractImport')
156 ->disableOriginalConstructor()
157 ->getMock();
158
159 $consumer = new RedisEntryConsumer(
160 $em,
161 $userRepository,
162 $import
163 );
164
165 $res = $consumer->manage($body);
166
167 $this->assertFalse($res);
168 }
169
170 public function testMessageWithEntryProcessed()
171 {
172 $em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
173 ->disableOriginalConstructor()
174 ->getMock();
175
176 $em
177 ->expects($this->never())
178 ->method('flush');
179
180 $em
181 ->expects($this->never())
182 ->method('clear');
183
184 $body = '{ "userId": 123 }';
185
186 $user = new User();
187
188 $userRepository = $this->getMockBuilder('Wallabag\UserBundle\Repository\UserRepository')
189 ->disableOriginalConstructor()
190 ->getMock();
191
192 $userRepository
193 ->expects($this->once())
194 ->method('find')
195 // userId from the body json above
196 ->with(123)
197 ->willReturn($user);
198
199 $import = $this->getMockBuilder('Wallabag\ImportBundle\Import\AbstractImport')
200 ->disableOriginalConstructor()
201 ->getMock();
202
203 $import
204 ->expects($this->once())
205 ->method('setUser')
206 ->with($user);
207
208 $import
209 ->expects($this->once())
210 ->method('parseEntry')
211 ->with(json_decode($body, true))
212 ->willReturn(null);
213
214 $consumer = new RedisEntryConsumer(
215 $em,
216 $userRepository,
217 $import
218 );
219
220 $res = $consumer->manage($body);
221
222 $this->assertFalse($res);
223 $this->assertFalse($consumer->isStopJob($body));
224 }
225}
diff --git a/tests/Wallabag/ImportBundle/Controller/ChromeControllerTest.php b/tests/Wallabag/ImportBundle/Controller/ChromeControllerTest.php
new file mode 100644
index 00000000..23c80bec
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Controller/ChromeControllerTest.php
@@ -0,0 +1,152 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Controller;
4
5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
6use Symfony\Component\HttpFoundation\File\UploadedFile;
7
8class ChromeControllerTest extends WallabagCoreTestCase
9{
10 public function testImportChrome()
11 {
12 $this->logInAs('admin');
13 $client = $this->getClient();
14
15 $crawler = $client->request('GET', '/import/chrome');
16
17 $this->assertEquals(200, $client->getResponse()->getStatusCode());
18 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
19 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
20 }
21
22 public function testImportChromeWithRabbitEnabled()
23 {
24 $this->logInAs('admin');
25 $client = $this->getClient();
26
27 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 1);
28
29 $crawler = $client->request('GET', '/import/chrome');
30
31 $this->assertEquals(200, $client->getResponse()->getStatusCode());
32 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
33 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
34
35 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 0);
36 }
37
38 public function testImportChromeBadFile()
39 {
40 $this->logInAs('admin');
41 $client = $this->getClient();
42
43 $crawler = $client->request('GET', '/import/chrome');
44 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
45
46 $data = [
47 'upload_import_file[file]' => '',
48 ];
49
50 $client->submit($form, $data);
51
52 $this->assertEquals(200, $client->getResponse()->getStatusCode());
53 }
54
55 public function testImportChromeWithRedisEnabled()
56 {
57 $this->logInAs('admin');
58 $client = $this->getClient();
59 $client->getContainer()->get('craue_config')->set('import_with_redis', 1);
60
61 $crawler = $client->request('GET', '/import/chrome');
62
63 $this->assertEquals(200, $client->getResponse()->getStatusCode());
64 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
65 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
66
67 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
68
69 $file = new UploadedFile(__DIR__.'/../fixtures/chrome-bookmarks', 'Bookmarks');
70
71 $data = [
72 'upload_import_file[file]' => $file,
73 ];
74
75 $client->submit($form, $data);
76
77 $this->assertEquals(302, $client->getResponse()->getStatusCode());
78
79 $crawler = $client->followRedirect();
80
81 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
82 $this->assertContains('flashes.import.notice.summary', $body[0]);
83
84 $this->assertNotEmpty($client->getContainer()->get('wallabag_core.redis.client')->lpop('wallabag.import.chrome'));
85
86 $client->getContainer()->get('craue_config')->set('import_with_redis', 0);
87 }
88
89 public function testImportWallabagWithChromeFile()
90 {
91 $this->logInAs('admin');
92 $client = $this->getClient();
93
94 $crawler = $client->request('GET', '/import/chrome');
95 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
96
97 $file = new UploadedFile(__DIR__.'/../fixtures/chrome-bookmarks', 'Bookmarks');
98
99 $data = [
100 'upload_import_file[file]' => $file,
101 ];
102
103 $client->submit($form, $data);
104
105 $this->assertEquals(302, $client->getResponse()->getStatusCode());
106
107 $crawler = $client->followRedirect();
108
109 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
110 $this->assertContains('flashes.import.notice.summary', $body[0]);
111
112 $content = $client->getContainer()
113 ->get('doctrine.orm.entity_manager')
114 ->getRepository('WallabagCoreBundle:Entry')
115 ->findByUrlAndUserId(
116 'http://www.usinenouvelle.com/article/la-multiplication-des-chefs-de-projet-est-une-catastrophe-manageriale-majeure-affirme-le-sociologue-francois-dupuy.N307730',
117 $this->getLoggedInUserId()
118 );
119
120 $this->assertNotEmpty($content->getPreviewPicture());
121 $this->assertNotEmpty($content->getLanguage());
122 $this->assertEquals(0, count($content->getTags()));
123
124 $createdAt = $content->getCreatedAt();
125 $this->assertEquals('2011', $createdAt->format('Y'));
126 $this->assertEquals('07', $createdAt->format('m'));
127 }
128
129 public function testImportWallabagWithEmptyFile()
130 {
131 $this->logInAs('admin');
132 $client = $this->getClient();
133
134 $crawler = $client->request('GET', '/import/chrome');
135 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
136
137 $file = new UploadedFile(__DIR__.'/../fixtures/test.txt', 'test.txt');
138
139 $data = [
140 'upload_import_file[file]' => $file,
141 ];
142
143 $client->submit($form, $data);
144
145 $this->assertEquals(302, $client->getResponse()->getStatusCode());
146
147 $crawler = $client->followRedirect();
148
149 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
150 $this->assertContains('flashes.import.notice.failed', $body[0]);
151 }
152}
diff --git a/tests/Wallabag/ImportBundle/Controller/FirefoxControllerTest.php b/tests/Wallabag/ImportBundle/Controller/FirefoxControllerTest.php
new file mode 100644
index 00000000..98f13d72
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Controller/FirefoxControllerTest.php
@@ -0,0 +1,165 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Controller;
4
5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
6use Symfony\Component\HttpFoundation\File\UploadedFile;
7
8class FirefoxControllerTest extends WallabagCoreTestCase
9{
10 public function testImportFirefox()
11 {
12 $this->logInAs('admin');
13 $client = $this->getClient();
14
15 $crawler = $client->request('GET', '/import/firefox');
16
17 $this->assertEquals(200, $client->getResponse()->getStatusCode());
18 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
19 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
20 }
21
22 public function testImportFirefoxWithRabbitEnabled()
23 {
24 $this->logInAs('admin');
25 $client = $this->getClient();
26
27 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 1);
28
29 $crawler = $client->request('GET', '/import/firefox');
30
31 $this->assertEquals(200, $client->getResponse()->getStatusCode());
32 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
33 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
34
35 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 0);
36 }
37
38 public function testImportFirefoxBadFile()
39 {
40 $this->logInAs('admin');
41 $client = $this->getClient();
42
43 $crawler = $client->request('GET', '/import/firefox');
44 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
45
46 $data = [
47 'upload_import_file[file]' => '',
48 ];
49
50 $client->submit($form, $data);
51
52 $this->assertEquals(200, $client->getResponse()->getStatusCode());
53 }
54
55 public function testImportFirefoxWithRedisEnabled()
56 {
57 $this->logInAs('admin');
58 $client = $this->getClient();
59 $client->getContainer()->get('craue_config')->set('import_with_redis', 1);
60
61 $crawler = $client->request('GET', '/import/firefox');
62
63 $this->assertEquals(200, $client->getResponse()->getStatusCode());
64 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
65 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
66
67 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
68
69 $file = new UploadedFile(__DIR__.'/../fixtures/firefox-bookmarks.json', 'Bookmarks');
70
71 $data = [
72 'upload_import_file[file]' => $file,
73 ];
74
75 $client->submit($form, $data);
76
77 $this->assertEquals(302, $client->getResponse()->getStatusCode());
78
79 $crawler = $client->followRedirect();
80
81 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
82 $this->assertContains('flashes.import.notice.summary', $body[0]);
83
84 $this->assertNotEmpty($client->getContainer()->get('wallabag_core.redis.client')->lpop('wallabag.import.firefox'));
85
86 $client->getContainer()->get('craue_config')->set('import_with_redis', 0);
87 }
88
89 public function testImportWallabagWithFirefoxFile()
90 {
91 $this->logInAs('admin');
92 $client = $this->getClient();
93
94 $crawler = $client->request('GET', '/import/firefox');
95 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
96
97 $file = new UploadedFile(__DIR__.'/../fixtures/firefox-bookmarks.json', 'Bookmarks');
98
99 $data = [
100 'upload_import_file[file]' => $file,
101 ];
102
103 $client->submit($form, $data);
104
105 $this->assertEquals(302, $client->getResponse()->getStatusCode());
106
107 $crawler = $client->followRedirect();
108
109 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
110 $this->assertContains('flashes.import.notice.summary', $body[0]);
111
112 $content = $client->getContainer()
113 ->get('doctrine.orm.entity_manager')
114 ->getRepository('WallabagCoreBundle:Entry')
115 ->findByUrlAndUserId(
116 'http://lexpansion.lexpress.fr/high-tech/orange-offre-un-meilleur-reseau-mobile-que-bouygues-et-sfr-free-derriere_1811554.html',
117 $this->getLoggedInUserId()
118 );
119
120 $this->assertNotEmpty($content->getMimetype());
121 $this->assertNotEmpty($content->getPreviewPicture());
122 $this->assertNotEmpty($content->getLanguage());
123 $this->assertEquals(2, count($content->getTags()));
124
125 $content = $client->getContainer()
126 ->get('doctrine.orm.entity_manager')
127 ->getRepository('WallabagCoreBundle:Entry')
128 ->findByUrlAndUserId(
129 'http://stackoverflow.com/questions/15017163/parser-for-exported-bookmarks-html-file-of-google-chrome-and-mozilla-in-java',
130 $this->getLoggedInUserId()
131 );
132
133 $this->assertNotEmpty($content->getMimetype());
134 $this->assertNotEmpty($content->getPreviewPicture());
135 $this->assertEmpty($content->getLanguage());
136
137 $createdAt = $content->getCreatedAt();
138 $this->assertEquals('2013', $createdAt->format('Y'));
139 $this->assertEquals('12', $createdAt->format('m'));
140 }
141
142 public function testImportWallabagWithEmptyFile()
143 {
144 $this->logInAs('admin');
145 $client = $this->getClient();
146
147 $crawler = $client->request('GET', '/import/firefox');
148 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
149
150 $file = new UploadedFile(__DIR__.'/../fixtures/test.txt', 'test.txt');
151
152 $data = [
153 'upload_import_file[file]' => $file,
154 ];
155
156 $client->submit($form, $data);
157
158 $this->assertEquals(302, $client->getResponse()->getStatusCode());
159
160 $crawler = $client->followRedirect();
161
162 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
163 $this->assertContains('flashes.import.notice.failed', $body[0]);
164 }
165}
diff --git a/tests/Wallabag/ImportBundle/Controller/ImportControllerTest.php b/tests/Wallabag/ImportBundle/Controller/ImportControllerTest.php
index 96b5300b..0bc40bdd 100644
--- a/tests/Wallabag/ImportBundle/Controller/ImportControllerTest.php
+++ b/tests/Wallabag/ImportBundle/Controller/ImportControllerTest.php
@@ -24,6 +24,6 @@ class ImportControllerTest extends WallabagCoreTestCase
24 $crawler = $client->request('GET', '/import/'); 24 $crawler = $client->request('GET', '/import/');
25 25
26 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 26 $this->assertEquals(200, $client->getResponse()->getStatusCode());
27 $this->assertEquals(3, $crawler->filter('blockquote')->count()); 27 $this->assertEquals(7, $crawler->filter('blockquote')->count());
28 } 28 }
29} 29}
diff --git a/tests/Wallabag/ImportBundle/Controller/InstapaperControllerTest.php b/tests/Wallabag/ImportBundle/Controller/InstapaperControllerTest.php
new file mode 100644
index 00000000..9df08e75
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Controller/InstapaperControllerTest.php
@@ -0,0 +1,196 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Controller;
4
5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
6use Symfony\Component\HttpFoundation\File\UploadedFile;
7
8class InstapaperControllerTest extends WallabagCoreTestCase
9{
10 public function testImportInstapaper()
11 {
12 $this->logInAs('admin');
13 $client = $this->getClient();
14
15 $crawler = $client->request('GET', '/import/instapaper');
16
17 $this->assertEquals(200, $client->getResponse()->getStatusCode());
18 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
19 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
20 }
21
22 public function testImportInstapaperWithRabbitEnabled()
23 {
24 $this->logInAs('admin');
25 $client = $this->getClient();
26
27 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 1);
28
29 $crawler = $client->request('GET', '/import/instapaper');
30
31 $this->assertEquals(200, $client->getResponse()->getStatusCode());
32 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
33 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
34
35 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 0);
36 }
37
38 public function testImportInstapaperBadFile()
39 {
40 $this->logInAs('admin');
41 $client = $this->getClient();
42
43 $crawler = $client->request('GET', '/import/instapaper');
44 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
45
46 $data = [
47 'upload_import_file[file]' => '',
48 ];
49
50 $client->submit($form, $data);
51
52 $this->assertEquals(200, $client->getResponse()->getStatusCode());
53 }
54
55 public function testImportInstapaperWithRedisEnabled()
56 {
57 $this->checkRedis();
58 $this->logInAs('admin');
59 $client = $this->getClient();
60 $client->getContainer()->get('craue_config')->set('import_with_redis', 1);
61
62 $crawler = $client->request('GET', '/import/instapaper');
63
64 $this->assertEquals(200, $client->getResponse()->getStatusCode());
65 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
66 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
67
68 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
69
70 $file = new UploadedFile(__DIR__.'/../fixtures/instapaper-export.csv', 'instapaper.csv');
71
72 $data = [
73 'upload_import_file[file]' => $file,
74 ];
75
76 $client->submit($form, $data);
77
78 $this->assertEquals(302, $client->getResponse()->getStatusCode());
79
80 $crawler = $client->followRedirect();
81
82 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
83 $this->assertContains('flashes.import.notice.summary', $body[0]);
84
85 $this->assertNotEmpty($client->getContainer()->get('wallabag_core.redis.client')->lpop('wallabag.import.instapaper'));
86
87 $client->getContainer()->get('craue_config')->set('import_with_redis', 0);
88 }
89
90 public function testImportInstapaperWithFile()
91 {
92 $this->logInAs('admin');
93 $client = $this->getClient();
94
95 $crawler = $client->request('GET', '/import/instapaper');
96 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
97
98 $file = new UploadedFile(__DIR__.'/../fixtures/instapaper-export.csv', 'instapaper.csv');
99
100 $data = [
101 'upload_import_file[file]' => $file,
102 ];
103
104 $client->submit($form, $data);
105
106 $this->assertEquals(302, $client->getResponse()->getStatusCode());
107
108 $crawler = $client->followRedirect();
109
110 $content = $client->getContainer()
111 ->get('doctrine.orm.entity_manager')
112 ->getRepository('WallabagCoreBundle:Entry')
113 ->findByUrlAndUserId(
114 'http://www.liberation.fr/societe/2012/12/06/baumettes-un-tour-en-cellule_865551',
115 $this->getLoggedInUserId()
116 );
117
118 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
119 $this->assertContains('flashes.import.notice.summary', $body[0]);
120
121 $this->assertNotEmpty($content->getMimetype());
122 $this->assertNotEmpty($content->getPreviewPicture());
123 $this->assertNotEmpty($content->getLanguage());
124 $this->assertEquals(0, count($content->getTags()));
125 $this->assertInstanceOf(\DateTime::class, $content->getCreatedAt());
126 }
127
128 public function testImportInstapaperWithFileAndMarkAllAsRead()
129 {
130 $this->logInAs('admin');
131 $client = $this->getClient();
132
133 $crawler = $client->request('GET', '/import/instapaper');
134 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
135
136 $file = new UploadedFile(__DIR__.'/../fixtures/instapaper-export.csv', 'instapaper-read.csv');
137
138 $data = [
139 'upload_import_file[file]' => $file,
140 'upload_import_file[mark_as_read]' => 1,
141 ];
142
143 $client->submit($form, $data);
144
145 $this->assertEquals(302, $client->getResponse()->getStatusCode());
146
147 $crawler = $client->followRedirect();
148
149 $content1 = $client->getContainer()
150 ->get('doctrine.orm.entity_manager')
151 ->getRepository('WallabagCoreBundle:Entry')
152 ->findByUrlAndUserId(
153 'https://redditblog.com/2016/09/20/amp-and-reactredux/',
154 $this->getLoggedInUserId()
155 );
156
157 $this->assertTrue($content1->isArchived());
158
159 $content2 = $client->getContainer()
160 ->get('doctrine.orm.entity_manager')
161 ->getRepository('WallabagCoreBundle:Entry')
162 ->findByUrlAndUserId(
163 'https://medium.com/@the_minh/why-foursquare-swarm-is-still-my-favourite-social-network-e38228493e6c',
164 $this->getLoggedInUserId()
165 );
166
167 $this->assertTrue($content2->isArchived());
168
169 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
170 $this->assertContains('flashes.import.notice.summary', $body[0]);
171 }
172
173 public function testImportInstapaperWithEmptyFile()
174 {
175 $this->logInAs('admin');
176 $client = $this->getClient();
177
178 $crawler = $client->request('GET', '/import/instapaper');
179 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
180
181 $file = new UploadedFile(__DIR__.'/../fixtures/test.txt', 'test.txt');
182
183 $data = [
184 'upload_import_file[file]' => $file,
185 ];
186
187 $client->submit($form, $data);
188
189 $this->assertEquals(302, $client->getResponse()->getStatusCode());
190
191 $crawler = $client->followRedirect();
192
193 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
194 $this->assertContains('flashes.import.notice.failed', $body[0]);
195 }
196}
diff --git a/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php b/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php
index e0e61df8..7d6a300f 100644
--- a/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php
+++ b/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php
@@ -17,6 +17,37 @@ class PocketControllerTest extends WallabagCoreTestCase
17 $this->assertEquals(1, $crawler->filter('button[type=submit]')->count()); 17 $this->assertEquals(1, $crawler->filter('button[type=submit]')->count());
18 } 18 }
19 19
20 public function testImportPocketWithRabbitEnabled()
21 {
22 $this->logInAs('admin');
23 $client = $this->getClient();
24
25 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 1);
26
27 $crawler = $client->request('GET', '/import/pocket');
28
29 $this->assertEquals(200, $client->getResponse()->getStatusCode());
30 $this->assertEquals(1, $crawler->filter('button[type=submit]')->count());
31
32 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 0);
33 }
34
35 public function testImportPocketWithRedisEnabled()
36 {
37 $this->checkRedis();
38 $this->logInAs('admin');
39 $client = $this->getClient();
40
41 $client->getContainer()->get('craue_config')->set('import_with_redis', 1);
42
43 $crawler = $client->request('GET', '/import/pocket');
44
45 $this->assertEquals(200, $client->getResponse()->getStatusCode());
46 $this->assertEquals(1, $crawler->filter('button[type=submit]')->count());
47
48 $client->getContainer()->get('craue_config')->set('import_with_redis', 0);
49 }
50
20 public function testImportPocketAuthBadToken() 51 public function testImportPocketAuthBadToken()
21 { 52 {
22 $this->logInAs('admin'); 53 $this->logInAs('admin');
diff --git a/tests/Wallabag/ImportBundle/Controller/ReadabilityControllerTest.php b/tests/Wallabag/ImportBundle/Controller/ReadabilityControllerTest.php
new file mode 100644
index 00000000..916dd297
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Controller/ReadabilityControllerTest.php
@@ -0,0 +1,197 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Controller;
4
5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
6use Symfony\Component\HttpFoundation\File\UploadedFile;
7
8class ReadabilityControllerTest extends WallabagCoreTestCase
9{
10 public function testImportReadability()
11 {
12 $this->logInAs('admin');
13 $client = $this->getClient();
14
15 $crawler = $client->request('GET', '/import/readability');
16
17 $this->assertEquals(200, $client->getResponse()->getStatusCode());
18 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
19 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
20 }
21
22 public function testImportReadabilityWithRabbitEnabled()
23 {
24 $this->logInAs('admin');
25 $client = $this->getClient();
26
27 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 1);
28
29 $crawler = $client->request('GET', '/import/readability');
30
31 $this->assertEquals(200, $client->getResponse()->getStatusCode());
32 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
33 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
34
35 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 0);
36 }
37
38 public function testImportReadabilityBadFile()
39 {
40 $this->logInAs('admin');
41 $client = $this->getClient();
42
43 $crawler = $client->request('GET', '/import/readability');
44 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
45
46 $data = [
47 'upload_import_file[file]' => '',
48 ];
49
50 $client->submit($form, $data);
51
52 $this->assertEquals(200, $client->getResponse()->getStatusCode());
53 }
54
55 public function testImportReadabilityWithRedisEnabled()
56 {
57 $this->checkRedis();
58 $this->logInAs('admin');
59 $client = $this->getClient();
60 $client->getContainer()->get('craue_config')->set('import_with_redis', 1);
61
62 $crawler = $client->request('GET', '/import/readability');
63
64 $this->assertEquals(200, $client->getResponse()->getStatusCode());
65 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
66 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
67
68 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
69
70 $file = new UploadedFile(__DIR__.'/../fixtures/readability.json', 'readability.json');
71
72 $data = [
73 'upload_import_file[file]' => $file,
74 ];
75
76 $client->submit($form, $data);
77
78 $this->assertEquals(302, $client->getResponse()->getStatusCode());
79
80 $crawler = $client->followRedirect();
81
82 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
83 $this->assertContains('flashes.import.notice.summary', $body[0]);
84
85 $this->assertNotEmpty($client->getContainer()->get('wallabag_core.redis.client')->lpop('wallabag.import.readability'));
86
87 $client->getContainer()->get('craue_config')->set('import_with_redis', 0);
88 }
89
90 public function testImportReadabilityWithFile()
91 {
92 $this->logInAs('admin');
93 $client = $this->getClient();
94
95 $crawler = $client->request('GET', '/import/readability');
96 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
97
98 $file = new UploadedFile(__DIR__.'/../fixtures/readability.json', 'readability.json');
99
100 $data = [
101 'upload_import_file[file]' => $file,
102 ];
103
104 $client->submit($form, $data);
105
106 $this->assertEquals(302, $client->getResponse()->getStatusCode());
107
108 $crawler = $client->followRedirect();
109
110 $content = $client->getContainer()
111 ->get('doctrine.orm.entity_manager')
112 ->getRepository('WallabagCoreBundle:Entry')
113 ->findByUrlAndUserId(
114 'https://venngage.com/blog/hashtags-are-worthless/',
115 $this->getLoggedInUserId()
116 );
117
118 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
119 $this->assertContains('flashes.import.notice.summary', $body[0]);
120
121 $this->assertNotEmpty($content->getMimetype());
122 $this->assertNotEmpty($content->getPreviewPicture());
123 $this->assertNotEmpty($content->getLanguage());
124 $this->assertEquals(0, count($content->getTags()));
125 $this->assertInstanceOf(\DateTime::class, $content->getCreatedAt());
126 $this->assertEquals('2016-08-25', $content->getCreatedAt()->format('Y-m-d'));
127 }
128
129 public function testImportReadabilityWithFileAndMarkAllAsRead()
130 {
131 $this->logInAs('admin');
132 $client = $this->getClient();
133
134 $crawler = $client->request('GET', '/import/readability');
135 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
136
137 $file = new UploadedFile(__DIR__.'/../fixtures/readability-read.json', 'readability-read.json');
138
139 $data = [
140 'upload_import_file[file]' => $file,
141 'upload_import_file[mark_as_read]' => 1,
142 ];
143
144 $client->submit($form, $data);
145
146 $this->assertEquals(302, $client->getResponse()->getStatusCode());
147
148 $crawler = $client->followRedirect();
149
150 $content1 = $client->getContainer()
151 ->get('doctrine.orm.entity_manager')
152 ->getRepository('WallabagCoreBundle:Entry')
153 ->findByUrlAndUserId(
154 'https://blog.travis-ci.com/2016-07-28-what-we-learned-from-analyzing-2-million-travis-builds/',
155 $this->getLoggedInUserId()
156 );
157
158 $this->assertTrue($content1->isArchived());
159
160 $content2 = $client->getContainer()
161 ->get('doctrine.orm.entity_manager')
162 ->getRepository('WallabagCoreBundle:Entry')
163 ->findByUrlAndUserId(
164 'https://facebook.github.io/graphql/',
165 $this->getLoggedInUserId()
166 );
167
168 $this->assertTrue($content2->isArchived());
169
170 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
171 $this->assertContains('flashes.import.notice.summary', $body[0]);
172 }
173
174 public function testImportReadabilityWithEmptyFile()
175 {
176 $this->logInAs('admin');
177 $client = $this->getClient();
178
179 $crawler = $client->request('GET', '/import/readability');
180 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
181
182 $file = new UploadedFile(__DIR__.'/../fixtures/test.txt', 'test.txt');
183
184 $data = [
185 'upload_import_file[file]' => $file,
186 ];
187
188 $client->submit($form, $data);
189
190 $this->assertEquals(302, $client->getResponse()->getStatusCode());
191
192 $crawler = $client->followRedirect();
193
194 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
195 $this->assertContains('flashes.import.notice.failed', $body[0]);
196 }
197}
diff --git a/tests/Wallabag/ImportBundle/Controller/WallabagV1ControllerTest.php b/tests/Wallabag/ImportBundle/Controller/WallabagV1ControllerTest.php
index c1025b41..3497c4b8 100644
--- a/tests/Wallabag/ImportBundle/Controller/WallabagV1ControllerTest.php
+++ b/tests/Wallabag/ImportBundle/Controller/WallabagV1ControllerTest.php
@@ -19,6 +19,75 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase
19 $this->assertEquals(1, $crawler->filter('input[type=file]')->count()); 19 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
20 } 20 }
21 21
22 public function testImportWallabagWithRabbitEnabled()
23 {
24 $this->logInAs('admin');
25 $client = $this->getClient();
26
27 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 1);
28
29 $crawler = $client->request('GET', '/import/wallabag-v1');
30
31 $this->assertEquals(200, $client->getResponse()->getStatusCode());
32 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
33 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
34
35 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 0);
36 }
37
38 public function testImportWallabagBadFile()
39 {
40 $this->logInAs('admin');
41 $client = $this->getClient();
42
43 $crawler = $client->request('GET', '/import/wallabag-v1');
44 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
45
46 $data = [
47 'upload_import_file[file]' => '',
48 ];
49
50 $client->submit($form, $data);
51
52 $this->assertEquals(200, $client->getResponse()->getStatusCode());
53 }
54
55 public function testImportWallabagWithRedisEnabled()
56 {
57 $this->checkRedis();
58 $this->logInAs('admin');
59 $client = $this->getClient();
60
61 $client->getContainer()->get('craue_config')->set('import_with_redis', 1);
62
63 $crawler = $client->request('GET', '/import/wallabag-v1');
64
65 $this->assertEquals(200, $client->getResponse()->getStatusCode());
66 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
67 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
68
69 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
70
71 $file = new UploadedFile(__DIR__.'/../fixtures/wallabag-v1.json', 'wallabag-v1.json');
72
73 $data = [
74 'upload_import_file[file]' => $file,
75 ];
76
77 $client->submit($form, $data);
78
79 $this->assertEquals(302, $client->getResponse()->getStatusCode());
80
81 $crawler = $client->followRedirect();
82
83 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
84 $this->assertContains('flashes.import.notice.summary', $body[0]);
85
86 $this->assertNotEmpty($client->getContainer()->get('wallabag_core.redis.client')->lpop('wallabag.import.wallabag_v1'));
87
88 $client->getContainer()->get('craue_config')->set('import_with_redis', 0);
89 }
90
22 public function testImportWallabagWithFile() 91 public function testImportWallabagWithFile()
23 { 92 {
24 $this->logInAs('admin'); 93 $this->logInAs('admin');
@@ -56,6 +125,12 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase
56 125
57 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); 126 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
58 $this->assertContains('flashes.import.notice.summary', $body[0]); 127 $this->assertContains('flashes.import.notice.summary', $body[0]);
128
129 $this->assertEmpty($content->getMimetype());
130 $this->assertEmpty($content->getPreviewPicture());
131 $this->assertEmpty($content->getLanguage());
132 $this->assertEquals(1, count($content->getTags()));
133 $this->assertInstanceOf(\DateTime::class, $content->getCreatedAt());
59 } 134 }
60 135
61 public function testImportWallabagWithFileAndMarkAllAsRead() 136 public function testImportWallabagWithFileAndMarkAllAsRead()
diff --git a/tests/Wallabag/ImportBundle/Controller/WallabagV2ControllerTest.php b/tests/Wallabag/ImportBundle/Controller/WallabagV2ControllerTest.php
index d8d2c8bf..27d2d52b 100644
--- a/tests/Wallabag/ImportBundle/Controller/WallabagV2ControllerTest.php
+++ b/tests/Wallabag/ImportBundle/Controller/WallabagV2ControllerTest.php
@@ -19,6 +19,75 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase
19 $this->assertEquals(1, $crawler->filter('input[type=file]')->count()); 19 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
20 } 20 }
21 21
22 public function testImportWallabagWithRabbitEnabled()
23 {
24 $this->logInAs('admin');
25 $client = $this->getClient();
26
27 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 1);
28
29 $crawler = $client->request('GET', '/import/wallabag-v2');
30
31 $this->assertEquals(200, $client->getResponse()->getStatusCode());
32 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
33 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
34
35 $client->getContainer()->get('craue_config')->set('import_with_rabbitmq', 0);
36 }
37
38 public function testImportWallabagBadFile()
39 {
40 $this->logInAs('admin');
41 $client = $this->getClient();
42
43 $crawler = $client->request('GET', '/import/wallabag-v2');
44 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
45
46 $data = [
47 'upload_import_file[file]' => '',
48 ];
49
50 $client->submit($form, $data);
51
52 $this->assertEquals(200, $client->getResponse()->getStatusCode());
53 }
54
55 public function testImportWallabagWithRedisEnabled()
56 {
57 $this->checkRedis();
58 $this->logInAs('admin');
59 $client = $this->getClient();
60
61 $client->getContainer()->get('craue_config')->set('import_with_redis', 1);
62
63 $crawler = $client->request('GET', '/import/wallabag-v2');
64
65 $this->assertEquals(200, $client->getResponse()->getStatusCode());
66 $this->assertEquals(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count());
67 $this->assertEquals(1, $crawler->filter('input[type=file]')->count());
68
69 $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form();
70
71 $file = new UploadedFile(__DIR__.'/../fixtures/wallabag-v2.json', 'wallabag-v2.json');
72
73 $data = [
74 'upload_import_file[file]' => $file,
75 ];
76
77 $client->submit($form, $data);
78
79 $this->assertEquals(302, $client->getResponse()->getStatusCode());
80
81 $crawler = $client->followRedirect();
82
83 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
84 $this->assertContains('flashes.import.notice.summary', $body[0]);
85
86 $this->assertNotEmpty($client->getContainer()->get('wallabag_core.redis.client')->lpop('wallabag.import.wallabag_v2'));
87
88 $client->getContainer()->get('craue_config')->set('import_with_redis', 0);
89 }
90
22 public function testImportWallabagWithFile() 91 public function testImportWallabagWithFile()
23 { 92 {
24 $this->logInAs('admin'); 93 $this->logInAs('admin');
@@ -50,9 +119,9 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase
50 $this->getLoggedInUserId() 119 $this->getLoggedInUserId()
51 ); 120 );
52 121
53 $this->assertEmpty($content->getMimetype()); 122 $this->assertNotEmpty($content->getMimetype());
54 $this->assertEmpty($content->getPreviewPicture()); 123 $this->assertNotEmpty($content->getPreviewPicture());
55 $this->assertEmpty($content->getLanguage()); 124 $this->assertNotEmpty($content->getLanguage());
56 $this->assertEquals(0, count($content->getTags())); 125 $this->assertEquals(0, count($content->getTags()));
57 126
58 $content = $client->getContainer() 127 $content = $client->getContainer()
@@ -67,6 +136,8 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase
67 $this->assertNotEmpty($content->getPreviewPicture()); 136 $this->assertNotEmpty($content->getPreviewPicture());
68 $this->assertNotEmpty($content->getLanguage()); 137 $this->assertNotEmpty($content->getLanguage());
69 $this->assertEquals(2, count($content->getTags())); 138 $this->assertEquals(2, count($content->getTags()));
139 $this->assertInstanceOf(\DateTime::class, $content->getCreatedAt());
140 $this->assertEquals('2016-09-08', $content->getCreatedAt()->format('Y-m-d'));
70 } 141 }
71 142
72 public function testImportWallabagWithEmptyFile() 143 public function testImportWallabagWithEmptyFile()
diff --git a/tests/Wallabag/ImportBundle/Import/ChromeImportTest.php b/tests/Wallabag/ImportBundle/Import/ChromeImportTest.php
new file mode 100644
index 00000000..1e52615c
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Import/ChromeImportTest.php
@@ -0,0 +1,233 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Import;
4
5use Wallabag\ImportBundle\Import\ChromeImport;
6use Wallabag\UserBundle\Entity\User;
7use Wallabag\CoreBundle\Entity\Entry;
8use Wallabag\ImportBundle\Redis\Producer;
9use Monolog\Logger;
10use Monolog\Handler\TestHandler;
11use Simpleue\Queue\RedisQueue;
12use M6Web\Component\RedisMock\RedisMockFactory;
13
14class ChromeImportTest extends \PHPUnit_Framework_TestCase
15{
16 protected $user;
17 protected $em;
18 protected $logHandler;
19 protected $contentProxy;
20
21 private function getChromeImport($unsetUser = false)
22 {
23 $this->user = new User();
24
25 $this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
26 ->disableOriginalConstructor()
27 ->getMock();
28
29 $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy')
30 ->disableOriginalConstructor()
31 ->getMock();
32
33 $wallabag = new ChromeImport($this->em, $this->contentProxy);
34
35 $this->logHandler = new TestHandler();
36 $logger = new Logger('test', [$this->logHandler]);
37 $wallabag->setLogger($logger);
38
39 if (false === $unsetUser) {
40 $wallabag->setUser($this->user);
41 }
42
43 return $wallabag;
44 }
45
46 public function testInit()
47 {
48 $chromeImport = $this->getChromeImport();
49
50 $this->assertEquals('Chrome', $chromeImport->getName());
51 $this->assertNotEmpty($chromeImport->getUrl());
52 $this->assertEquals('import.chrome.description', $chromeImport->getDescription());
53 }
54
55 public function testImport()
56 {
57 $chromeImport = $this->getChromeImport();
58 $chromeImport->setFilepath(__DIR__.'/../fixtures/chrome-bookmarks');
59
60 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
61 ->disableOriginalConstructor()
62 ->getMock();
63
64 $entryRepo->expects($this->exactly(1))
65 ->method('findByUrlAndUserId')
66 ->willReturn(false);
67
68 $this->em
69 ->expects($this->any())
70 ->method('getRepository')
71 ->willReturn($entryRepo);
72
73 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
74 ->disableOriginalConstructor()
75 ->getMock();
76
77 $this->contentProxy
78 ->expects($this->exactly(1))
79 ->method('updateEntry')
80 ->willReturn($entry);
81
82 $res = $chromeImport->import();
83
84 $this->assertTrue($res);
85 $this->assertEquals(['skipped' => 0, 'imported' => 1, 'queued' => 0], $chromeImport->getSummary());
86 }
87
88 public function testImportAndMarkAllAsRead()
89 {
90 $chromeImport = $this->getChromeImport();
91 $chromeImport->setFilepath(__DIR__.'/../fixtures/chrome-bookmarks');
92
93 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
94 ->disableOriginalConstructor()
95 ->getMock();
96
97 $entryRepo->expects($this->exactly(1))
98 ->method('findByUrlAndUserId')
99 ->will($this->onConsecutiveCalls(false, true));
100
101 $this->em
102 ->expects($this->any())
103 ->method('getRepository')
104 ->willReturn($entryRepo);
105
106 $this->contentProxy
107 ->expects($this->exactly(1))
108 ->method('updateEntry')
109 ->willReturn(new Entry($this->user));
110
111 // check that every entry persisted are archived
112 $this->em
113 ->expects($this->any())
114 ->method('persist')
115 ->with($this->callback(function ($persistedEntry) {
116 return $persistedEntry->isArchived();
117 }));
118
119 $res = $chromeImport->setMarkAsRead(true)->import();
120
121 $this->assertTrue($res);
122
123 $this->assertEquals(['skipped' => 0, 'imported' => 1, 'queued' => 0], $chromeImport->getSummary());
124 }
125
126 public function testImportWithRabbit()
127 {
128 $chromeImport = $this->getChromeImport();
129 $chromeImport->setFilepath(__DIR__.'/../fixtures/chrome-bookmarks');
130
131 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
132 ->disableOriginalConstructor()
133 ->getMock();
134
135 $entryRepo->expects($this->never())
136 ->method('findByUrlAndUserId');
137
138 $this->em
139 ->expects($this->never())
140 ->method('getRepository');
141
142 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
143 ->disableOriginalConstructor()
144 ->getMock();
145
146 $this->contentProxy
147 ->expects($this->never())
148 ->method('updateEntry');
149
150 $producer = $this->getMockBuilder('OldSound\RabbitMqBundle\RabbitMq\Producer')
151 ->disableOriginalConstructor()
152 ->getMock();
153
154 $producer
155 ->expects($this->exactly(1))
156 ->method('publish');
157
158 $chromeImport->setProducer($producer);
159
160 $res = $chromeImport->setMarkAsRead(true)->import();
161
162 $this->assertTrue($res);
163 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 1], $chromeImport->getSummary());
164 }
165
166 public function testImportWithRedis()
167 {
168 $chromeImport = $this->getChromeImport();
169 $chromeImport->setFilepath(__DIR__.'/../fixtures/chrome-bookmarks');
170
171 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
172 ->disableOriginalConstructor()
173 ->getMock();
174
175 $entryRepo->expects($this->never())
176 ->method('findByUrlAndUserId');
177
178 $this->em
179 ->expects($this->never())
180 ->method('getRepository');
181
182 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
183 ->disableOriginalConstructor()
184 ->getMock();
185
186 $this->contentProxy
187 ->expects($this->never())
188 ->method('updateEntry');
189
190 $factory = new RedisMockFactory();
191 $redisMock = $factory->getAdapter('Predis\Client', true);
192
193 $queue = new RedisQueue($redisMock, 'chrome');
194 $producer = new Producer($queue);
195
196 $chromeImport->setProducer($producer);
197
198 $res = $chromeImport->setMarkAsRead(true)->import();
199
200 $this->assertTrue($res);
201 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 1], $chromeImport->getSummary());
202
203 $this->assertNotEmpty($redisMock->lpop('chrome'));
204 }
205
206 public function testImportBadFile()
207 {
208 $chromeImport = $this->getChromeImport();
209 $chromeImport->setFilepath(__DIR__.'/../fixtures/wallabag-v1.jsonx');
210
211 $res = $chromeImport->import();
212
213 $this->assertFalse($res);
214
215 $records = $this->logHandler->getRecords();
216 $this->assertContains('Wallabag Browser Import: unable to read file', $records[0]['message']);
217 $this->assertEquals('ERROR', $records[0]['level_name']);
218 }
219
220 public function testImportUserNotDefined()
221 {
222 $chromeImport = $this->getChromeImport(true);
223 $chromeImport->setFilepath(__DIR__.'/../fixtures/chrome-bookmarks');
224
225 $res = $chromeImport->import();
226
227 $this->assertFalse($res);
228
229 $records = $this->logHandler->getRecords();
230 $this->assertContains('Wallabag Browser Import: user is not defined', $records[0]['message']);
231 $this->assertEquals('ERROR', $records[0]['level_name']);
232 }
233}
diff --git a/tests/Wallabag/ImportBundle/Import/FirefoxImportTest.php b/tests/Wallabag/ImportBundle/Import/FirefoxImportTest.php
new file mode 100644
index 00000000..007dda6a
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Import/FirefoxImportTest.php
@@ -0,0 +1,233 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Import;
4
5use Wallabag\ImportBundle\Import\FirefoxImport;
6use Wallabag\UserBundle\Entity\User;
7use Wallabag\CoreBundle\Entity\Entry;
8use Wallabag\ImportBundle\Redis\Producer;
9use Monolog\Logger;
10use Monolog\Handler\TestHandler;
11use Simpleue\Queue\RedisQueue;
12use M6Web\Component\RedisMock\RedisMockFactory;
13
14class FirefoxImportTest extends \PHPUnit_Framework_TestCase
15{
16 protected $user;
17 protected $em;
18 protected $logHandler;
19 protected $contentProxy;
20
21 private function getFirefoxImport($unsetUser = false)
22 {
23 $this->user = new User();
24
25 $this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
26 ->disableOriginalConstructor()
27 ->getMock();
28
29 $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy')
30 ->disableOriginalConstructor()
31 ->getMock();
32
33 $wallabag = new FirefoxImport($this->em, $this->contentProxy);
34
35 $this->logHandler = new TestHandler();
36 $logger = new Logger('test', [$this->logHandler]);
37 $wallabag->setLogger($logger);
38
39 if (false === $unsetUser) {
40 $wallabag->setUser($this->user);
41 }
42
43 return $wallabag;
44 }
45
46 public function testInit()
47 {
48 $firefoxImport = $this->getFirefoxImport();
49
50 $this->assertEquals('Firefox', $firefoxImport->getName());
51 $this->assertNotEmpty($firefoxImport->getUrl());
52 $this->assertEquals('import.firefox.description', $firefoxImport->getDescription());
53 }
54
55 public function testImport()
56 {
57 $firefoxImport = $this->getFirefoxImport();
58 $firefoxImport->setFilepath(__DIR__.'/../fixtures/firefox-bookmarks.json');
59
60 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
61 ->disableOriginalConstructor()
62 ->getMock();
63
64 $entryRepo->expects($this->exactly(2))
65 ->method('findByUrlAndUserId')
66 ->willReturn(false);
67
68 $this->em
69 ->expects($this->any())
70 ->method('getRepository')
71 ->willReturn($entryRepo);
72
73 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
74 ->disableOriginalConstructor()
75 ->getMock();
76
77 $this->contentProxy
78 ->expects($this->exactly(2))
79 ->method('updateEntry')
80 ->willReturn($entry);
81
82 $res = $firefoxImport->import();
83
84 $this->assertTrue($res);
85 $this->assertEquals(['skipped' => 0, 'imported' => 2, 'queued' => 0], $firefoxImport->getSummary());
86 }
87
88 public function testImportAndMarkAllAsRead()
89 {
90 $firefoxImport = $this->getFirefoxImport();
91 $firefoxImport->setFilepath(__DIR__.'/../fixtures/firefox-bookmarks.json');
92
93 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
94 ->disableOriginalConstructor()
95 ->getMock();
96
97 $entryRepo->expects($this->exactly(2))
98 ->method('findByUrlAndUserId')
99 ->will($this->onConsecutiveCalls(false, true));
100
101 $this->em
102 ->expects($this->any())
103 ->method('getRepository')
104 ->willReturn($entryRepo);
105
106 $this->contentProxy
107 ->expects($this->exactly(1))
108 ->method('updateEntry')
109 ->willReturn(new Entry($this->user));
110
111 // check that every entry persisted are archived
112 $this->em
113 ->expects($this->any())
114 ->method('persist')
115 ->with($this->callback(function ($persistedEntry) {
116 return $persistedEntry->isArchived();
117 }));
118
119 $res = $firefoxImport->setMarkAsRead(true)->import();
120
121 $this->assertTrue($res);
122
123 $this->assertEquals(['skipped' => 1, 'imported' => 1, 'queued' => 0], $firefoxImport->getSummary());
124 }
125
126 public function testImportWithRabbit()
127 {
128 $firefoxImport = $this->getFirefoxImport();
129 $firefoxImport->setFilepath(__DIR__.'/../fixtures/firefox-bookmarks.json');
130
131 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
132 ->disableOriginalConstructor()
133 ->getMock();
134
135 $entryRepo->expects($this->never())
136 ->method('findByUrlAndUserId');
137
138 $this->em
139 ->expects($this->never())
140 ->method('getRepository');
141
142 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
143 ->disableOriginalConstructor()
144 ->getMock();
145
146 $this->contentProxy
147 ->expects($this->never())
148 ->method('updateEntry');
149
150 $producer = $this->getMockBuilder('OldSound\RabbitMqBundle\RabbitMq\Producer')
151 ->disableOriginalConstructor()
152 ->getMock();
153
154 $producer
155 ->expects($this->exactly(1))
156 ->method('publish');
157
158 $firefoxImport->setProducer($producer);
159
160 $res = $firefoxImport->setMarkAsRead(true)->import();
161
162 $this->assertTrue($res);
163 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 1], $firefoxImport->getSummary());
164 }
165
166 public function testImportWithRedis()
167 {
168 $firefoxImport = $this->getFirefoxImport();
169 $firefoxImport->setFilepath(__DIR__.'/../fixtures/firefox-bookmarks.json');
170
171 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
172 ->disableOriginalConstructor()
173 ->getMock();
174
175 $entryRepo->expects($this->never())
176 ->method('findByUrlAndUserId');
177
178 $this->em
179 ->expects($this->never())
180 ->method('getRepository');
181
182 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
183 ->disableOriginalConstructor()
184 ->getMock();
185
186 $this->contentProxy
187 ->expects($this->never())
188 ->method('updateEntry');
189
190 $factory = new RedisMockFactory();
191 $redisMock = $factory->getAdapter('Predis\Client', true);
192
193 $queue = new RedisQueue($redisMock, 'firefox');
194 $producer = new Producer($queue);
195
196 $firefoxImport->setProducer($producer);
197
198 $res = $firefoxImport->setMarkAsRead(true)->import();
199
200 $this->assertTrue($res);
201 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 1], $firefoxImport->getSummary());
202
203 $this->assertNotEmpty($redisMock->lpop('firefox'));
204 }
205
206 public function testImportBadFile()
207 {
208 $firefoxImport = $this->getFirefoxImport();
209 $firefoxImport->setFilepath(__DIR__.'/../fixtures/wallabag-v1.jsonx');
210
211 $res = $firefoxImport->import();
212
213 $this->assertFalse($res);
214
215 $records = $this->logHandler->getRecords();
216 $this->assertContains('Wallabag Browser Import: unable to read file', $records[0]['message']);
217 $this->assertEquals('ERROR', $records[0]['level_name']);
218 }
219
220 public function testImportUserNotDefined()
221 {
222 $firefoxImport = $this->getFirefoxImport(true);
223 $firefoxImport->setFilepath(__DIR__.'/../fixtures/firefox-bookmarks.json');
224
225 $res = $firefoxImport->import();
226
227 $this->assertFalse($res);
228
229 $records = $this->logHandler->getRecords();
230 $this->assertContains('Wallabag Browser Import: user is not defined', $records[0]['message']);
231 $this->assertEquals('ERROR', $records[0]['level_name']);
232 }
233}
diff --git a/tests/Wallabag/ImportBundle/Import/InstapaperImportTest.php b/tests/Wallabag/ImportBundle/Import/InstapaperImportTest.php
new file mode 100644
index 00000000..75900bd7
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Import/InstapaperImportTest.php
@@ -0,0 +1,233 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Import;
4
5use Wallabag\ImportBundle\Import\InstapaperImport;
6use Wallabag\UserBundle\Entity\User;
7use Wallabag\CoreBundle\Entity\Entry;
8use Wallabag\ImportBundle\Redis\Producer;
9use Monolog\Logger;
10use Monolog\Handler\TestHandler;
11use Simpleue\Queue\RedisQueue;
12use M6Web\Component\RedisMock\RedisMockFactory;
13
14class InstapaperImportTest extends \PHPUnit_Framework_TestCase
15{
16 protected $user;
17 protected $em;
18 protected $logHandler;
19 protected $contentProxy;
20
21 private function getInstapaperImport($unsetUser = false)
22 {
23 $this->user = new User();
24
25 $this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
26 ->disableOriginalConstructor()
27 ->getMock();
28
29 $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy')
30 ->disableOriginalConstructor()
31 ->getMock();
32
33 $import = new InstapaperImport($this->em, $this->contentProxy);
34
35 $this->logHandler = new TestHandler();
36 $logger = new Logger('test', [$this->logHandler]);
37 $import->setLogger($logger);
38
39 if (false === $unsetUser) {
40 $import->setUser($this->user);
41 }
42
43 return $import;
44 }
45
46 public function testInit()
47 {
48 $instapaperImport = $this->getInstapaperImport();
49
50 $this->assertEquals('Instapaper', $instapaperImport->getName());
51 $this->assertNotEmpty($instapaperImport->getUrl());
52 $this->assertEquals('import.instapaper.description', $instapaperImport->getDescription());
53 }
54
55 public function testImport()
56 {
57 $instapaperImport = $this->getInstapaperImport();
58 $instapaperImport->setFilepath(__DIR__.'/../fixtures/instapaper-export.csv');
59
60 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
61 ->disableOriginalConstructor()
62 ->getMock();
63
64 $entryRepo->expects($this->exactly(3))
65 ->method('findByUrlAndUserId')
66 ->willReturn(false);
67
68 $this->em
69 ->expects($this->any())
70 ->method('getRepository')
71 ->willReturn($entryRepo);
72
73 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
74 ->disableOriginalConstructor()
75 ->getMock();
76
77 $this->contentProxy
78 ->expects($this->exactly(3))
79 ->method('updateEntry')
80 ->willReturn($entry);
81
82 $res = $instapaperImport->import();
83
84 $this->assertTrue($res);
85 $this->assertEquals(['skipped' => 0, 'imported' => 3, 'queued' => 0], $instapaperImport->getSummary());
86 }
87
88 public function testImportAndMarkAllAsRead()
89 {
90 $instapaperImport = $this->getInstapaperImport();
91 $instapaperImport->setFilepath(__DIR__.'/../fixtures/instapaper-export.csv');
92
93 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
94 ->disableOriginalConstructor()
95 ->getMock();
96
97 $entryRepo->expects($this->exactly(3))
98 ->method('findByUrlAndUserId')
99 ->will($this->onConsecutiveCalls(false, true, true));
100
101 $this->em
102 ->expects($this->any())
103 ->method('getRepository')
104 ->willReturn($entryRepo);
105
106 $this->contentProxy
107 ->expects($this->once())
108 ->method('updateEntry')
109 ->willReturn(new Entry($this->user));
110
111 // check that every entry persisted are archived
112 $this->em
113 ->expects($this->once())
114 ->method('persist')
115 ->with($this->callback(function ($persistedEntry) {
116 return $persistedEntry->isArchived();
117 }));
118
119 $res = $instapaperImport->setMarkAsRead(true)->import();
120
121 $this->assertTrue($res);
122
123 $this->assertEquals(['skipped' => 2, 'imported' => 1, 'queued' => 0], $instapaperImport->getSummary());
124 }
125
126 public function testImportWithRabbit()
127 {
128 $instapaperImport = $this->getInstapaperImport();
129 $instapaperImport->setFilepath(__DIR__.'/../fixtures/instapaper-export.csv');
130
131 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
132 ->disableOriginalConstructor()
133 ->getMock();
134
135 $entryRepo->expects($this->never())
136 ->method('findByUrlAndUserId');
137
138 $this->em
139 ->expects($this->never())
140 ->method('getRepository');
141
142 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
143 ->disableOriginalConstructor()
144 ->getMock();
145
146 $this->contentProxy
147 ->expects($this->never())
148 ->method('updateEntry');
149
150 $producer = $this->getMockBuilder('OldSound\RabbitMqBundle\RabbitMq\Producer')
151 ->disableOriginalConstructor()
152 ->getMock();
153
154 $producer
155 ->expects($this->exactly(3))
156 ->method('publish');
157
158 $instapaperImport->setProducer($producer);
159
160 $res = $instapaperImport->setMarkAsRead(true)->import();
161
162 $this->assertTrue($res);
163 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 3], $instapaperImport->getSummary());
164 }
165
166 public function testImportWithRedis()
167 {
168 $instapaperImport = $this->getInstapaperImport();
169 $instapaperImport->setFilepath(__DIR__.'/../fixtures/instapaper-export.csv');
170
171 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
172 ->disableOriginalConstructor()
173 ->getMock();
174
175 $entryRepo->expects($this->never())
176 ->method('findByUrlAndUserId');
177
178 $this->em
179 ->expects($this->never())
180 ->method('getRepository');
181
182 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
183 ->disableOriginalConstructor()
184 ->getMock();
185
186 $this->contentProxy
187 ->expects($this->never())
188 ->method('updateEntry');
189
190 $factory = new RedisMockFactory();
191 $redisMock = $factory->getAdapter('Predis\Client', true);
192
193 $queue = new RedisQueue($redisMock, 'instapaper');
194 $producer = new Producer($queue);
195
196 $instapaperImport->setProducer($producer);
197
198 $res = $instapaperImport->setMarkAsRead(true)->import();
199
200 $this->assertTrue($res);
201 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 3], $instapaperImport->getSummary());
202
203 $this->assertNotEmpty($redisMock->lpop('instapaper'));
204 }
205
206 public function testImportBadFile()
207 {
208 $instapaperImport = $this->getInstapaperImport();
209 $instapaperImport->setFilepath(__DIR__.'/../fixtures/wallabag-v1.jsonx');
210
211 $res = $instapaperImport->import();
212
213 $this->assertFalse($res);
214
215 $records = $this->logHandler->getRecords();
216 $this->assertContains('InstapaperImport: unable to read file', $records[0]['message']);
217 $this->assertEquals('ERROR', $records[0]['level_name']);
218 }
219
220 public function testImportUserNotDefined()
221 {
222 $instapaperImport = $this->getInstapaperImport(true);
223 $instapaperImport->setFilepath(__DIR__.'/../fixtures/instapaper-export.csv');
224
225 $res = $instapaperImport->import();
226
227 $this->assertFalse($res);
228
229 $records = $this->logHandler->getRecords();
230 $this->assertContains('InstapaperImport: user is not defined', $records[0]['message']);
231 $this->assertEquals('ERROR', $records[0]['level_name']);
232 }
233}
diff --git a/tests/Wallabag/ImportBundle/Import/PocketImportTest.php b/tests/Wallabag/ImportBundle/Import/PocketImportTest.php
index 8534e1c8..9ec7935c 100644
--- a/tests/Wallabag/ImportBundle/Import/PocketImportTest.php
+++ b/tests/Wallabag/ImportBundle/Import/PocketImportTest.php
@@ -4,21 +4,17 @@ namespace Tests\Wallabag\ImportBundle\Import;
4 4
5use Wallabag\UserBundle\Entity\User; 5use Wallabag\UserBundle\Entity\User;
6use Wallabag\CoreBundle\Entity\Entry; 6use Wallabag\CoreBundle\Entity\Entry;
7use Wallabag\CoreBundle\Entity\Config;
7use Wallabag\ImportBundle\Import\PocketImport; 8use Wallabag\ImportBundle\Import\PocketImport;
8use GuzzleHttp\Client; 9use GuzzleHttp\Client;
9use GuzzleHttp\Subscriber\Mock; 10use GuzzleHttp\Subscriber\Mock;
10use GuzzleHttp\Message\Response; 11use GuzzleHttp\Message\Response;
11use GuzzleHttp\Stream\Stream; 12use GuzzleHttp\Stream\Stream;
13use Wallabag\ImportBundle\Redis\Producer;
12use Monolog\Logger; 14use Monolog\Logger;
13use Monolog\Handler\TestHandler; 15use Monolog\Handler\TestHandler;
14 16use Simpleue\Queue\RedisQueue;
15class PocketImportMock extends PocketImport 17use M6Web\Component\RedisMock\RedisMockFactory;
16{
17 public function getAccessToken()
18 {
19 return $this->accessToken;
20 }
21}
22 18
23class PocketImportTest extends \PHPUnit_Framework_TestCase 19class PocketImportTest extends \PHPUnit_Framework_TestCase
24{ 20{
@@ -32,45 +28,38 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
32 { 28 {
33 $this->user = new User(); 29 $this->user = new User();
34 30
35 $this->tokenStorage = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface') 31 $config = new Config($this->user);
36 ->disableOriginalConstructor() 32 $config->setPocketConsumerKey('xxx');
37 ->getMock();
38 33
39 $token = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\TokenInterface') 34 $this->user->setConfig($config);
40 ->disableOriginalConstructor()
41 ->getMock();
42 35
43 $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy') 36 $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy')
44 ->disableOriginalConstructor() 37 ->disableOriginalConstructor()
45 ->getMock(); 38 ->getMock();
46 39
47 $token->expects($this->once())
48 ->method('getUser')
49 ->willReturn($this->user);
50
51 $this->tokenStorage->expects($this->once())
52 ->method('getToken')
53 ->willReturn($token);
54
55 $this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager') 40 $this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
56 ->disableOriginalConstructor() 41 ->disableOriginalConstructor()
57 ->getMock(); 42 ->getMock();
58 43
59 $config = $this->getMockBuilder('Craue\ConfigBundle\Util\Config') 44 $this->uow = $this->getMockBuilder('Doctrine\ORM\UnitOfWork')
60 ->disableOriginalConstructor() 45 ->disableOriginalConstructor()
61 ->getMock(); 46 ->getMock();
62 47
63 $config->expects($this->any()) 48 $this->em
64 ->method('get') 49 ->expects($this->any())
65 ->with('pocket_consumer_key') 50 ->method('getUnitOfWork')
66 ->willReturn($consumerKey); 51 ->willReturn($this->uow);
52
53 $this->uow
54 ->expects($this->any())
55 ->method('getScheduledEntityInsertions')
56 ->willReturn([]);
67 57
68 $pocket = new PocketImportMock( 58 $pocket = new PocketImport(
69 $this->tokenStorage,
70 $this->em, 59 $this->em,
71 $this->contentProxy, 60 $this->contentProxy
72 $config
73 ); 61 );
62 $pocket->setUser($this->user);
74 63
75 $this->logHandler = new TestHandler(); 64 $this->logHandler = new TestHandler();
76 $logger = new Logger('test', [$this->logHandler]); 65 $logger = new Logger('test', [$this->logHandler]);
@@ -189,10 +178,16 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
189 "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland", 178 "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland",
190 "favorite": "1", 179 "favorite": "1",
191 "status": "1", 180 "status": "1",
181 "time_added": "1473020899",
182 "time_updated": "1473020899",
183 "time_read": "0",
184 "time_favorited": "0",
185 "sort_id": 0,
192 "resolved_title": "The Massive Ryder Cup Preview", 186 "resolved_title": "The Massive Ryder Cup Preview",
193 "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview", 187 "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview",
194 "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.", 188 "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.",
195 "is_article": "1", 189 "is_article": "1",
190 "is_index": "0",
196 "has_video": "1", 191 "has_video": "1",
197 "has_image": "1", 192 "has_image": "1",
198 "word_count": "3197", 193 "word_count": "3197",
@@ -236,10 +231,16 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
236 "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland", 231 "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland",
237 "favorite": "1", 232 "favorite": "1",
238 "status": "1", 233 "status": "1",
234 "time_added": "1473020899",
235 "time_updated": "1473020899",
236 "time_read": "0",
237 "time_favorited": "0",
238 "sort_id": 1,
239 "resolved_title": "The Massive Ryder Cup Preview", 239 "resolved_title": "The Massive Ryder Cup Preview",
240 "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview", 240 "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview",
241 "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.", 241 "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.",
242 "is_article": "1", 242 "is_article": "1",
243 "is_index": "0",
243 "has_video": "0", 244 "has_video": "0",
244 "has_image": "0", 245 "has_image": "0",
245 "word_count": "3197" 246 "word_count": "3197"
@@ -279,7 +280,7 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
279 $res = $pocketImport->import(); 280 $res = $pocketImport->import();
280 281
281 $this->assertTrue($res); 282 $this->assertTrue($res);
282 $this->assertEquals(['skipped' => 1, 'imported' => 1], $pocketImport->getSummary()); 283 $this->assertEquals(['skipped' => 1, 'imported' => 1, 'queued' => 0], $pocketImport->getSummary());
283 } 284 }
284 285
285 /** 286 /**
@@ -302,6 +303,11 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
302 "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland", 303 "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland",
303 "favorite": "1", 304 "favorite": "1",
304 "status": "1", 305 "status": "1",
306 "time_added": "1473020899",
307 "time_updated": "1473020899",
308 "time_read": "0",
309 "time_favorited": "0",
310 "sort_id": 0,
305 "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.", 311 "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.",
306 "is_article": "1", 312 "is_article": "1",
307 "has_video": "1", 313 "has_video": "1",
@@ -315,6 +321,11 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
315 "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland", 321 "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland",
316 "favorite": "1", 322 "favorite": "1",
317 "status": "0", 323 "status": "0",
324 "time_added": "1473020899",
325 "time_updated": "1473020899",
326 "time_read": "0",
327 "time_favorited": "0",
328 "sort_id": 1,
318 "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.", 329 "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.",
319 "is_article": "1", 330 "is_article": "1",
320 "has_video": "0", 331 "has_video": "0",
@@ -364,7 +375,174 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
364 $res = $pocketImport->setMarkAsRead(true)->import(); 375 $res = $pocketImport->setMarkAsRead(true)->import();
365 376
366 $this->assertTrue($res); 377 $this->assertTrue($res);
367 $this->assertEquals(['skipped' => 0, 'imported' => 2], $pocketImport->getSummary()); 378 $this->assertEquals(['skipped' => 0, 'imported' => 2, 'queued' => 0], $pocketImport->getSummary());
379 }
380
381 /**
382 * Will sample results from https://getpocket.com/developer/docs/v3/retrieve.
383 */
384 public function testImportWithRabbit()
385 {
386 $client = new Client();
387
388 $body = <<<'JSON'
389{
390 "item_id": "229279689",
391 "resolved_id": "229279689",
392 "given_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview",
393 "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland",
394 "favorite": "1",
395 "status": "1",
396 "time_added": "1473020899",
397 "time_updated": "1473020899",
398 "time_read": "0",
399 "time_favorited": "0",
400 "sort_id": 0,
401 "resolved_title": "The Massive Ryder Cup Preview",
402 "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview",
403 "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.",
404 "is_article": "1",
405 "has_video": "0",
406 "has_image": "0",
407 "word_count": "3197"
408}
409JSON;
410
411 $mock = new Mock([
412 new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['access_token' => 'wunderbar_token']))),
413 new Response(200, ['Content-Type' => 'application/json'], Stream::factory('
414 {
415 "status": 1,
416 "list": {
417 "229279690": '.$body.'
418 }
419 }
420 ')),
421 ]);
422
423 $client->getEmitter()->attach($mock);
424
425 $pocketImport = $this->getPocketImport();
426
427 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
428 ->disableOriginalConstructor()
429 ->getMock();
430
431 $entryRepo->expects($this->never())
432 ->method('findByUrlAndUserId');
433
434 $this->em
435 ->expects($this->never())
436 ->method('getRepository');
437
438 $entry = new Entry($this->user);
439
440 $this->contentProxy
441 ->expects($this->never())
442 ->method('updateEntry');
443
444 $producer = $this->getMockBuilder('OldSound\RabbitMqBundle\RabbitMq\Producer')
445 ->disableOriginalConstructor()
446 ->getMock();
447
448 $bodyAsArray = json_decode($body, true);
449 // because with just use `new User()` so it doesn't have an id
450 $bodyAsArray['userId'] = null;
451
452 $producer
453 ->expects($this->once())
454 ->method('publish')
455 ->with(json_encode($bodyAsArray));
456
457 $pocketImport->setClient($client);
458 $pocketImport->setProducer($producer);
459 $pocketImport->authorize('wunderbar_code');
460
461 $res = $pocketImport->setMarkAsRead(true)->import();
462
463 $this->assertTrue($res);
464 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 1], $pocketImport->getSummary());
465 }
466
467 /**
468 * Will sample results from https://getpocket.com/developer/docs/v3/retrieve.
469 */
470 public function testImportWithRedis()
471 {
472 $client = new Client();
473
474 $body = <<<'JSON'
475{
476 "item_id": "229279689",
477 "resolved_id": "229279689",
478 "given_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview",
479 "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland",
480 "favorite": "1",
481 "status": "1",
482 "time_added": "1473020899",
483 "time_updated": "1473020899",
484 "time_read": "0",
485 "time_favorited": "0",
486 "sort_id": 0,
487 "resolved_title": "The Massive Ryder Cup Preview",
488 "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview",
489 "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.",
490 "is_article": "1",
491 "has_video": "0",
492 "has_image": "0",
493 "word_count": "3197"
494}
495JSON;
496
497 $mock = new Mock([
498 new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['access_token' => 'wunderbar_token']))),
499 new Response(200, ['Content-Type' => 'application/json'], Stream::factory('
500 {
501 "status": 1,
502 "list": {
503 "229279690": '.$body.'
504 }
505 }
506 ')),
507 ]);
508
509 $client->getEmitter()->attach($mock);
510
511 $pocketImport = $this->getPocketImport();
512
513 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
514 ->disableOriginalConstructor()
515 ->getMock();
516
517 $entryRepo->expects($this->never())
518 ->method('findByUrlAndUserId');
519
520 $this->em
521 ->expects($this->never())
522 ->method('getRepository');
523
524 $entry = new Entry($this->user);
525
526 $this->contentProxy
527 ->expects($this->never())
528 ->method('updateEntry');
529
530 $factory = new RedisMockFactory();
531 $redisMock = $factory->getAdapter('Predis\Client', true);
532
533 $queue = new RedisQueue($redisMock, 'pocket');
534 $producer = new Producer($queue);
535
536 $pocketImport->setClient($client);
537 $pocketImport->setProducer($producer);
538 $pocketImport->authorize('wunderbar_code');
539
540 $res = $pocketImport->setMarkAsRead(true)->import();
541
542 $this->assertTrue($res);
543 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 1], $pocketImport->getSummary());
544
545 $this->assertNotEmpty($redisMock->lpop('pocket'));
368 } 546 }
369 547
370 public function testImportBadResponse() 548 public function testImportBadResponse()
@@ -402,6 +580,8 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
402 "status": 1, 580 "status": 1,
403 "list": { 581 "list": {
404 "229279689": { 582 "229279689": {
583 "status": "1",
584 "favorite": "1",
405 "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview" 585 "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview"
406 } 586 }
407 } 587 }
@@ -439,6 +619,6 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
439 $res = $pocketImport->import(); 619 $res = $pocketImport->import();
440 620
441 $this->assertTrue($res); 621 $this->assertTrue($res);
442 $this->assertEquals(['skipped' => 1, 'imported' => 0], $pocketImport->getSummary()); 622 $this->assertEquals(['skipped' => 0, 'imported' => 1, 'queued' => 0], $pocketImport->getSummary());
443 } 623 }
444} 624}
diff --git a/tests/Wallabag/ImportBundle/Import/ReadabilityImportTest.php b/tests/Wallabag/ImportBundle/Import/ReadabilityImportTest.php
new file mode 100644
index 00000000..d98cd486
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/Import/ReadabilityImportTest.php
@@ -0,0 +1,233 @@
1<?php
2
3namespace Tests\Wallabag\ImportBundle\Import;
4
5use Wallabag\ImportBundle\Import\ReadabilityImport;
6use Wallabag\UserBundle\Entity\User;
7use Wallabag\CoreBundle\Entity\Entry;
8use Wallabag\ImportBundle\Redis\Producer;
9use Monolog\Logger;
10use Monolog\Handler\TestHandler;
11use Simpleue\Queue\RedisQueue;
12use M6Web\Component\RedisMock\RedisMockFactory;
13
14class ReadabilityImportTest extends \PHPUnit_Framework_TestCase
15{
16 protected $user;
17 protected $em;
18 protected $logHandler;
19 protected $contentProxy;
20
21 private function getReadabilityImport($unsetUser = false)
22 {
23 $this->user = new User();
24
25 $this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
26 ->disableOriginalConstructor()
27 ->getMock();
28
29 $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy')
30 ->disableOriginalConstructor()
31 ->getMock();
32
33 $wallabag = new ReadabilityImport($this->em, $this->contentProxy);
34
35 $this->logHandler = new TestHandler();
36 $logger = new Logger('test', [$this->logHandler]);
37 $wallabag->setLogger($logger);
38
39 if (false === $unsetUser) {
40 $wallabag->setUser($this->user);
41 }
42
43 return $wallabag;
44 }
45
46 public function testInit()
47 {
48 $readabilityImport = $this->getReadabilityImport();
49
50 $this->assertEquals('Readability', $readabilityImport->getName());
51 $this->assertNotEmpty($readabilityImport->getUrl());
52 $this->assertEquals('import.readability.description', $readabilityImport->getDescription());
53 }
54
55 public function testImport()
56 {
57 $readabilityImport = $this->getReadabilityImport();
58 $readabilityImport->setFilepath(__DIR__.'/../fixtures/readability.json');
59
60 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
61 ->disableOriginalConstructor()
62 ->getMock();
63
64 $entryRepo->expects($this->exactly(24))
65 ->method('findByUrlAndUserId')
66 ->willReturn(false);
67
68 $this->em
69 ->expects($this->any())
70 ->method('getRepository')
71 ->willReturn($entryRepo);
72
73 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
74 ->disableOriginalConstructor()
75 ->getMock();
76
77 $this->contentProxy
78 ->expects($this->exactly(24))
79 ->method('updateEntry')
80 ->willReturn($entry);
81
82 $res = $readabilityImport->import();
83
84 $this->assertTrue($res);
85 $this->assertEquals(['skipped' => 0, 'imported' => 24, 'queued' => 0], $readabilityImport->getSummary());
86 }
87
88 public function testImportAndMarkAllAsRead()
89 {
90 $readabilityImport = $this->getReadabilityImport();
91 $readabilityImport->setFilepath(__DIR__.'/../fixtures/readability-read.json');
92
93 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
94 ->disableOriginalConstructor()
95 ->getMock();
96
97 $entryRepo->expects($this->exactly(2))
98 ->method('findByUrlAndUserId')
99 ->will($this->onConsecutiveCalls(false, true));
100
101 $this->em
102 ->expects($this->any())
103 ->method('getRepository')
104 ->willReturn($entryRepo);
105
106 $this->contentProxy
107 ->expects($this->exactly(1))
108 ->method('updateEntry')
109 ->willReturn(new Entry($this->user));
110
111 // check that every entry persisted are archived
112 $this->em
113 ->expects($this->any())
114 ->method('persist')
115 ->with($this->callback(function ($persistedEntry) {
116 return $persistedEntry->isArchived();
117 }));
118
119 $res = $readabilityImport->setMarkAsRead(true)->import();
120
121 $this->assertTrue($res);
122
123 $this->assertEquals(['skipped' => 1, 'imported' => 1, 'queued' => 0], $readabilityImport->getSummary());
124 }
125
126 public function testImportWithRabbit()
127 {
128 $readabilityImport = $this->getReadabilityImport();
129 $readabilityImport->setFilepath(__DIR__.'/../fixtures/readability.json');
130
131 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
132 ->disableOriginalConstructor()
133 ->getMock();
134
135 $entryRepo->expects($this->never())
136 ->method('findByUrlAndUserId');
137
138 $this->em
139 ->expects($this->never())
140 ->method('getRepository');
141
142 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
143 ->disableOriginalConstructor()
144 ->getMock();
145
146 $this->contentProxy
147 ->expects($this->never())
148 ->method('updateEntry');
149
150 $producer = $this->getMockBuilder('OldSound\RabbitMqBundle\RabbitMq\Producer')
151 ->disableOriginalConstructor()
152 ->getMock();
153
154 $producer
155 ->expects($this->exactly(24))
156 ->method('publish');
157
158 $readabilityImport->setProducer($producer);
159
160 $res = $readabilityImport->setMarkAsRead(true)->import();
161
162 $this->assertTrue($res);
163 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 24], $readabilityImport->getSummary());
164 }
165
166 public function testImportWithRedis()
167 {
168 $readabilityImport = $this->getReadabilityImport();
169 $readabilityImport->setFilepath(__DIR__.'/../fixtures/readability.json');
170
171 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
172 ->disableOriginalConstructor()
173 ->getMock();
174
175 $entryRepo->expects($this->never())
176 ->method('findByUrlAndUserId');
177
178 $this->em
179 ->expects($this->never())
180 ->method('getRepository');
181
182 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
183 ->disableOriginalConstructor()
184 ->getMock();
185
186 $this->contentProxy
187 ->expects($this->never())
188 ->method('updateEntry');
189
190 $factory = new RedisMockFactory();
191 $redisMock = $factory->getAdapter('Predis\Client', true);
192
193 $queue = new RedisQueue($redisMock, 'readability');
194 $producer = new Producer($queue);
195
196 $readabilityImport->setProducer($producer);
197
198 $res = $readabilityImport->setMarkAsRead(true)->import();
199
200 $this->assertTrue($res);
201 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 24], $readabilityImport->getSummary());
202
203 $this->assertNotEmpty($redisMock->lpop('readability'));
204 }
205
206 public function testImportBadFile()
207 {
208 $readabilityImport = $this->getReadabilityImport();
209 $readabilityImport->setFilepath(__DIR__.'/../fixtures/wallabag-v1.jsonx');
210
211 $res = $readabilityImport->import();
212
213 $this->assertFalse($res);
214
215 $records = $this->logHandler->getRecords();
216 $this->assertContains('ReadabilityImport: unable to read file', $records[0]['message']);
217 $this->assertEquals('ERROR', $records[0]['level_name']);
218 }
219
220 public function testImportUserNotDefined()
221 {
222 $readabilityImport = $this->getReadabilityImport(true);
223 $readabilityImport->setFilepath(__DIR__.'/../fixtures/readability.json');
224
225 $res = $readabilityImport->import();
226
227 $this->assertFalse($res);
228
229 $records = $this->logHandler->getRecords();
230 $this->assertContains('ReadabilityImport: user is not defined', $records[0]['message']);
231 $this->assertEquals('ERROR', $records[0]['level_name']);
232 }
233}
diff --git a/tests/Wallabag/ImportBundle/Import/WallabagV1ImportTest.php b/tests/Wallabag/ImportBundle/Import/WallabagV1ImportTest.php
index bdc47dac..82dc4c7e 100644
--- a/tests/Wallabag/ImportBundle/Import/WallabagV1ImportTest.php
+++ b/tests/Wallabag/ImportBundle/Import/WallabagV1ImportTest.php
@@ -5,8 +5,11 @@ namespace Tests\Wallabag\ImportBundle\Import;
5use Wallabag\ImportBundle\Import\WallabagV1Import; 5use Wallabag\ImportBundle\Import\WallabagV1Import;
6use Wallabag\UserBundle\Entity\User; 6use Wallabag\UserBundle\Entity\User;
7use Wallabag\CoreBundle\Entity\Entry; 7use Wallabag\CoreBundle\Entity\Entry;
8use Wallabag\ImportBundle\Redis\Producer;
8use Monolog\Logger; 9use Monolog\Logger;
9use Monolog\Handler\TestHandler; 10use Monolog\Handler\TestHandler;
11use Simpleue\Queue\RedisQueue;
12use M6Web\Component\RedisMock\RedisMockFactory;
10 13
11class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase 14class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase
12{ 15{
@@ -23,6 +26,20 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase
23 ->disableOriginalConstructor() 26 ->disableOriginalConstructor()
24 ->getMock(); 27 ->getMock();
25 28
29 $this->uow = $this->getMockBuilder('Doctrine\ORM\UnitOfWork')
30 ->disableOriginalConstructor()
31 ->getMock();
32
33 $this->em
34 ->expects($this->any())
35 ->method('getUnitOfWork')
36 ->willReturn($this->uow);
37
38 $this->uow
39 ->expects($this->any())
40 ->method('getScheduledEntityInsertions')
41 ->willReturn([]);
42
26 $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy') 43 $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy')
27 ->disableOriginalConstructor() 44 ->disableOriginalConstructor()
28 ->getMock(); 45 ->getMock();
@@ -79,7 +96,7 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase
79 $res = $wallabagV1Import->import(); 96 $res = $wallabagV1Import->import();
80 97
81 $this->assertTrue($res); 98 $this->assertTrue($res);
82 $this->assertEquals(['skipped' => 1, 'imported' => 3], $wallabagV1Import->getSummary()); 99 $this->assertEquals(['skipped' => 1, 'imported' => 3, 'queued' => 0], $wallabagV1Import->getSummary());
83 } 100 }
84 101
85 public function testImportAndMarkAllAsRead() 102 public function testImportAndMarkAllAsRead()
@@ -117,7 +134,87 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase
117 134
118 $this->assertTrue($res); 135 $this->assertTrue($res);
119 136
120 $this->assertEquals(['skipped' => 0, 'imported' => 3], $wallabagV1Import->getSummary()); 137 $this->assertEquals(['skipped' => 0, 'imported' => 3, 'queued' => 0], $wallabagV1Import->getSummary());
138 }
139
140 public function testImportWithRabbit()
141 {
142 $wallabagV1Import = $this->getWallabagV1Import();
143 $wallabagV1Import->setFilepath(__DIR__.'/../fixtures/wallabag-v1.json');
144
145 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
146 ->disableOriginalConstructor()
147 ->getMock();
148
149 $entryRepo->expects($this->never())
150 ->method('findByUrlAndUserId');
151
152 $this->em
153 ->expects($this->never())
154 ->method('getRepository');
155
156 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
157 ->disableOriginalConstructor()
158 ->getMock();
159
160 $this->contentProxy
161 ->expects($this->never())
162 ->method('updateEntry');
163
164 $producer = $this->getMockBuilder('OldSound\RabbitMqBundle\RabbitMq\Producer')
165 ->disableOriginalConstructor()
166 ->getMock();
167
168 $producer
169 ->expects($this->exactly(4))
170 ->method('publish');
171
172 $wallabagV1Import->setProducer($producer);
173
174 $res = $wallabagV1Import->setMarkAsRead(true)->import();
175
176 $this->assertTrue($res);
177 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 4], $wallabagV1Import->getSummary());
178 }
179
180 public function testImportWithRedis()
181 {
182 $wallabagV1Import = $this->getWallabagV1Import();
183 $wallabagV1Import->setFilepath(__DIR__.'/../fixtures/wallabag-v1.json');
184
185 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
186 ->disableOriginalConstructor()
187 ->getMock();
188
189 $entryRepo->expects($this->never())
190 ->method('findByUrlAndUserId');
191
192 $this->em
193 ->expects($this->never())
194 ->method('getRepository');
195
196 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
197 ->disableOriginalConstructor()
198 ->getMock();
199
200 $this->contentProxy
201 ->expects($this->never())
202 ->method('updateEntry');
203
204 $factory = new RedisMockFactory();
205 $redisMock = $factory->getAdapter('Predis\Client', true);
206
207 $queue = new RedisQueue($redisMock, 'wallabag_v1');
208 $producer = new Producer($queue);
209
210 $wallabagV1Import->setProducer($producer);
211
212 $res = $wallabagV1Import->setMarkAsRead(true)->import();
213
214 $this->assertTrue($res);
215 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 4], $wallabagV1Import->getSummary());
216
217 $this->assertNotEmpty($redisMock->lpop('wallabag_v1'));
121 } 218 }
122 219
123 public function testImportBadFile() 220 public function testImportBadFile()
diff --git a/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php b/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php
index 4a45e0f0..bea89efb 100644
--- a/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php
+++ b/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php
@@ -5,8 +5,11 @@ namespace Tests\Wallabag\ImportBundle\Import;
5use Wallabag\ImportBundle\Import\WallabagV2Import; 5use Wallabag\ImportBundle\Import\WallabagV2Import;
6use Wallabag\UserBundle\Entity\User; 6use Wallabag\UserBundle\Entity\User;
7use Wallabag\CoreBundle\Entity\Entry; 7use Wallabag\CoreBundle\Entity\Entry;
8use Wallabag\ImportBundle\Redis\Producer;
8use Monolog\Logger; 9use Monolog\Logger;
9use Monolog\Handler\TestHandler; 10use Monolog\Handler\TestHandler;
11use Simpleue\Queue\RedisQueue;
12use M6Web\Component\RedisMock\RedisMockFactory;
10 13
11class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase 14class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
12{ 15{
@@ -23,6 +26,20 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
23 ->disableOriginalConstructor() 26 ->disableOriginalConstructor()
24 ->getMock(); 27 ->getMock();
25 28
29 $this->uow = $this->getMockBuilder('Doctrine\ORM\UnitOfWork')
30 ->disableOriginalConstructor()
31 ->getMock();
32
33 $this->em
34 ->expects($this->any())
35 ->method('getUnitOfWork')
36 ->willReturn($this->uow);
37
38 $this->uow
39 ->expects($this->any())
40 ->method('getScheduledEntityInsertions')
41 ->willReturn([]);
42
26 $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy') 43 $this->contentProxy = $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy')
27 ->disableOriginalConstructor() 44 ->disableOriginalConstructor()
28 ->getMock(); 45 ->getMock();
@@ -75,7 +92,7 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
75 $res = $wallabagV2Import->import(); 92 $res = $wallabagV2Import->import();
76 93
77 $this->assertTrue($res); 94 $this->assertTrue($res);
78 $this->assertEquals(['skipped' => 22, 'imported' => 2], $wallabagV2Import->getSummary()); 95 $this->assertEquals(['skipped' => 22, 'imported' => 2, 'queued' => 0], $wallabagV2Import->getSummary());
79 } 96 }
80 97
81 public function testImportAndMarkAllAsRead() 98 public function testImportAndMarkAllAsRead()
@@ -113,7 +130,79 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
113 130
114 $this->assertTrue($res); 131 $this->assertTrue($res);
115 132
116 $this->assertEquals(['skipped' => 0, 'imported' => 2], $wallabagV2Import->getSummary()); 133 $this->assertEquals(['skipped' => 0, 'imported' => 2, 'queued' => 0], $wallabagV2Import->getSummary());
134 }
135
136 public function testImportWithRabbit()
137 {
138 $wallabagV2Import = $this->getWallabagV2Import();
139 $wallabagV2Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2.json');
140
141 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
142 ->disableOriginalConstructor()
143 ->getMock();
144
145 $entryRepo->expects($this->never())
146 ->method('findByUrlAndUserId');
147
148 $this->em
149 ->expects($this->never())
150 ->method('getRepository');
151
152 $this->contentProxy
153 ->expects($this->never())
154 ->method('updateEntry');
155
156 $producer = $this->getMockBuilder('OldSound\RabbitMqBundle\RabbitMq\Producer')
157 ->disableOriginalConstructor()
158 ->getMock();
159
160 $producer
161 ->expects($this->exactly(24))
162 ->method('publish');
163
164 $wallabagV2Import->setProducer($producer);
165
166 $res = $wallabagV2Import->setMarkAsRead(true)->import();
167
168 $this->assertTrue($res);
169 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 24], $wallabagV2Import->getSummary());
170 }
171
172 public function testImportWithRedis()
173 {
174 $wallabagV2Import = $this->getWallabagV2Import();
175 $wallabagV2Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2.json');
176
177 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
178 ->disableOriginalConstructor()
179 ->getMock();
180
181 $entryRepo->expects($this->never())
182 ->method('findByUrlAndUserId');
183
184 $this->em
185 ->expects($this->never())
186 ->method('getRepository');
187
188 $this->contentProxy
189 ->expects($this->never())
190 ->method('updateEntry');
191
192 $factory = new RedisMockFactory();
193 $redisMock = $factory->getAdapter('Predis\Client', true);
194
195 $queue = new RedisQueue($redisMock, 'wallabag_v2');
196 $producer = new Producer($queue);
197
198 $wallabagV2Import->setProducer($producer);
199
200 $res = $wallabagV2Import->setMarkAsRead(true)->import();
201
202 $this->assertTrue($res);
203 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 24], $wallabagV2Import->getSummary());
204
205 $this->assertNotEmpty($redisMock->lpop('wallabag_v2'));
117 } 206 }
118 207
119 public function testImportBadFile() 208 public function testImportBadFile()
@@ -152,7 +241,7 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
152 $res = $wallabagV2Import->import(); 241 $res = $wallabagV2Import->import();
153 242
154 $this->assertFalse($res); 243 $this->assertFalse($res);
155 $this->assertEquals(['skipped' => 0, 'imported' => 0], $wallabagV2Import->getSummary()); 244 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 0], $wallabagV2Import->getSummary());
156 } 245 }
157 246
158 public function testImportWithExceptionFromGraby() 247 public function testImportWithExceptionFromGraby()
@@ -181,6 +270,6 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
181 $res = $wallabagV2Import->import(); 270 $res = $wallabagV2Import->import();
182 271
183 $this->assertTrue($res); 272 $this->assertTrue($res);
184 $this->assertEquals(['skipped' => 24, 'imported' => 0], $wallabagV2Import->getSummary()); 273 $this->assertEquals(['skipped' => 22, 'imported' => 2, 'queued' => 0], $wallabagV2Import->getSummary());
185 } 274 }
186} 275}
diff --git a/tests/Wallabag/ImportBundle/fixtures/chrome-bookmarks b/tests/Wallabag/ImportBundle/fixtures/chrome-bookmarks
new file mode 100644
index 00000000..0478eb41
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/fixtures/chrome-bookmarks
@@ -0,0 +1,36 @@
1{
2 "checksum": "f3aa0e9c0edad632a246f7e98ec64918",
3 "roots": {
4 "bookmark_bar": {
5 "children": [ {
6 "date_added": "13118850929335823",
7 "id": "6",
8 "name": "\"La multiplication des chefs de projet est une catastrophe managériale majeure\", affirme le sociologue François Dupuy - Ressources humaines",
9 "type": "url",
10 "url": "http://www.usinenouvelle.com/article/la-multiplication-des-chefs-de-projet-est-une-catastrophe-manageriale-majeure-affirme-le-sociologue-francois-dupuy.N307730"
11 } ],
12 "date_added": "13118829474385693",
13 "date_modified": "13118850929335823",
14 "id": "1",
15 "name": "Barre de favoris",
16 "type": "folder"
17 },
18 "other": {
19 "children": [ ],
20 "date_added": "13118829474385701",
21 "date_modified": "0",
22 "id": "2",
23 "name": "Autres favoris",
24 "type": "folder"
25 },
26 "synced": {
27 "children": [ ],
28 "date_added": "13118829474385702",
29 "date_modified": "0",
30 "id": "3",
31 "name": "Favoris sur mobile",
32 "type": "folder"
33 }
34 },
35 "version": 1
36}
diff --git a/tests/Wallabag/ImportBundle/fixtures/firefox-bookmarks.json b/tests/Wallabag/ImportBundle/fixtures/firefox-bookmarks.json
new file mode 100644
index 00000000..406b5697
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/fixtures/firefox-bookmarks.json
@@ -0,0 +1,63 @@
1{
2 "guid": "root________",
3 "title": "",
4 "index": 0,
5 "dateAdded": 1388166091504000,
6 "lastModified": 1472897622350000,
7 "id": 1,
8 "type": "text/x-moz-place-container",
9 "root": "placesRoot",
10 "children": [
11 {
12 "guid": "toolbar_____",
13 "title": "Barre personnelle",
14 "index": 1,
15 "dateAdded": 1388166091504000,
16 "lastModified": 1472897622263000,
17 "id": 3,
18 "annos": [
19 {
20 "name": "bookmarkProperties/description",
21 "flags": 0,
22 "expires": 4,
23 "value": "Ajoutez des marque-pages dans ce dossier pour les voir apparaître sur votre barre personnelle"
24 }
25 ],
26 "type": "text/x-moz-place-container",
27 "root": "toolbarFolder",
28 "children": [
29 {
30 "guid": "tard77lzbC5H",
31 "title": "Orange offre un meilleur réseau mobile que Bouygues et SFR, Free derrière - L'Express L'Expansion",
32 "index": 1,
33 "dateAdded": 1388166091644000,
34 "lastModified": 1388166091644000,
35 "tags":"test,tag",
36 "id": 4,
37 "type": "text/x-moz-place",
38 "uri": "http://lexpansion.lexpress.fr/high-tech/orange-offre-un-meilleur-reseau-mobile-que-bouygues-et-sfr-free-derriere_1811554.html"
39 },
40 {
41 "guid": "E385l9vZ_LVn",
42 "title": "Parser for Exported Bookmarks HTML file of Google Chrome and Mozilla in Java",
43 "index": 1,
44 "dateAdded": 1388166091544000,
45 "lastModified": 1388166091545000,
46 "id": 5,
47 "type": "text/x-moz-place",
48 "uri": "http://stackoverflow.com/questions/15017163/parser-for-exported-bookmarks-html-file-of-google-chrome-and-mozilla-in-java"
49 }
50 ]
51 },
52 {
53 "guid": "unfiled_____",
54 "title": "Autres marque-pages",
55 "index": 3,
56 "dateAdded": 1388166091504000,
57 "lastModified": 1388166091542000,
58 "id": 6,
59 "type": "text/x-moz-place-container",
60 "root": "unfiledBookmarksFolder"
61 }
62 ]
63}
diff --git a/tests/Wallabag/ImportBundle/fixtures/instapaper-export.csv b/tests/Wallabag/ImportBundle/fixtures/instapaper-export.csv
new file mode 100644
index 00000000..28a4c8e6
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/fixtures/instapaper-export.csv
@@ -0,0 +1,4 @@
1URL,Title,Selection,Folder
2http://www.liberation.fr/societe/2012/12/06/baumettes-un-tour-en-cellule_865551,Baumettes : un tour en cellule,,Unread
3https://redditblog.com/2016/09/20/amp-and-reactredux/,AMP and React+Redux: Why Not?,,Archive
4https://medium.com/@the_minh/why-foursquare-swarm-is-still-my-favourite-social-network-e38228493e6c,Why Foursquare / Swarm is still my favourite social network,,Starred
diff --git a/tests/Wallabag/ImportBundle/fixtures/readability-read.json b/tests/Wallabag/ImportBundle/fixtures/readability-read.json
new file mode 100644
index 00000000..c60767dc
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/fixtures/readability-read.json
@@ -0,0 +1,25 @@
1{
2 "bookmarks": [
3 {
4 "article__excerpt": "This is a guest post from Moritz Beller from the Delft University of Technology in The Netherlands. His team produced amazing research on several million Travis CI builds, creating invaluable&hellip;",
5 "favorite": false,
6 "date_archived": "2016-08-02T06:49:30",
7 "article__url": "https://blog.travis-ci.com/2016-07-28-what-we-learned-from-analyzing-2-million-travis-builds/",
8 "date_added": "2016-08-01T05:24:16",
9 "date_favorited": null,
10 "article__title": "Travis",
11 "archive": true
12 },
13 {
14 "article__excerpt": "The GraphQL Type system describes the capabilities of a GraphQL server and is used to determine if a query is valid. The type system also describes the input types of query variables to determine if&hellip;",
15 "favorite": false,
16 "date_archived": "2016-07-19T06:48:31",
17 "article__url": "https://facebook.github.io/graphql/",
18 "date_added": "2016-06-24T17:50:16",
19 "date_favorited": null,
20 "article__title": "GraphQL",
21 "archive": true
22 }
23 ],
24 "recommendations": []
25}
diff --git a/tests/Wallabag/ImportBundle/fixtures/readability.json b/tests/Wallabag/ImportBundle/fixtures/readability.json
new file mode 100644
index 00000000..32f6fa53
--- /dev/null
+++ b/tests/Wallabag/ImportBundle/fixtures/readability.json
@@ -0,0 +1,176 @@
1{
2 "bookmarks": [
3 {
4 "article__excerpt": "When Twitter started it had so much promise to change the way we communicate. But now it has been ruined by the amount of garbage and hate we have to wade through. It&#x2019;s like that polluted&hellip;",
5 "favorite": false,
6 "date_archived": null,
7 "article__url": "https://venngage.com/blog/hashtags-are-worthless/",
8 "date_added": "2016-08-25T12:05:00",
9 "date_favorited": null,
10 "article__title": "We Looked At 167,943 Tweets & Found Out Hashtags Are Worthless",
11 "archive": false
12 },
13 {
14 "article__title": "Réfugiés: l'UE va créer 100 000 places d'accueil dans les Balkans",
15 "article__url": "http://www.liberation.fr/planete/2015/10/26/refugies-l-ue-va-creer-100-000-places-d-accueil-dans-les-balkans_1408867",
16 "archive": false,
17 "date_added": "2016-09-08T11:55:58+0200",
18 "favorite": false
19 },
20 {
21 "article__title": "No title found",
22 "article__url": "http://news.nationalgeographic.com/2016/02/160211-albatrosses-mothers-babies-animals-science/&sf20739758=1",
23 "archive": false,
24 "date_added": "2016-09-08T11:55:58+0200",
25 "favorite": true
26 },
27 {
28 "archive": 0,
29 "date_added": "2016-09-08T11:55:58+0200",
30 "favorite": 0,
31 "article__title": "Échecs",
32 "article__url": "https://fr.wikipedia.org/wiki/Échecs"
33 },
34 {
35 "archive": 0,
36 "date_added": "2016-09-08T11:55:58+0200",
37 "favorite": 0,
38 "article__title": "90% des dossiers médicaux des Coréens du sud vendus à des entreprises privées - ZATAZ",
39 "article__url": "http://www.zataz.com/90-des-dossiers-medicaux-des-coreens-du-sud-vendus-a-des-entreprises-privees/"
40 },
41 {
42 "archive": 0,
43 "date_added": "2016-09-08T11:55:58+0200",
44 "favorite": 0,
45 "article__title": "Mass Surveillance As Art",
46 "article__url": "https://www.nationaljournal.com/s/73311/mass-surveillance-art"
47 },
48 {
49 "archive": 0,
50 "date_added": "2016-09-08T11:55:58+0200",
51 "favorite": 0,
52 "article__title": "What David Cameron did to the pig, his party is now doing to the country",
53 "article__url": "http://www.newstatesman.com/2015/09/what-david-cameron-did-pig-his-party-now-doing-country"
54 },
55 {
56 "archive": 1,
57 "date_added": "2016-09-08T11:55:58+0200",
58 "favorite": 0,
59 "article__title": "CLICK HERE to support 2016 CES Winner, Revolutionary Auto-Tracking Robot",
60 "article__url": "https://www.indiegogo.com/projects/2016-ces-winner-revolutionary-auto-tracking-robot"
61 },
62 {
63 "archive": 0,
64 "date_added": "2016-09-08T11:55:58+0200",
65 "favorite": 1,
66 "article__title": "No title found",
67 "article__url": "http://carnetdevol.shost.ca/wordpress/aide-memoire-sur-les-commandes-associees-a-systemd/"
68 },
69 {
70 "archive": 1,
71 "date_added": "2016-09-08T11:55:58+0200",
72 "favorite": 0,
73 "article__title": "Présentation d'Arduino - Tuto Arduino - Le blog d'Eskimon",
74 "article__url": "http://eskimon.fr/73-arduino-101-presentation"
75 },
76 {
77 "archive": 1,
78 "date_added": "2016-09-08T11:55:58+0200",
79 "favorite": 0,
80 "article__title": "Lenovo ThinkPad X1 Carbon Ultrabook Review",
81 "article__url": "http://www.notebookcheck.net/Lenovo-ThinkPad-X1-Carbon-Ultrabook-Review.138033.0.html"
82 },
83 {
84 "archive": 0,
85 "date_added": "2016-09-08T11:55:58+0200",
86 "favorite": 0,
87 "article__title": "Visitons le Château de Landsberg !",
88 "article__url": "http://autour-du-mont-sainte-odile.overblog.com/2016/01/visitons-le-chateau-de-landsberg.html"
89 },
90 {
91 "archive": 1,
92 "date_added": "2016-09-08T11:55:58+0200",
93 "favorite": 0,
94 "article__title": "Contrer les stéréotypes par les livres : “C'est dès l'enfance qu'ils se construisent”",
95 "article__url": "https://www.actualitte.com/article/monde-edition/contrer-les-stereotypes-par-les-livres-c-est-des-l-enfance-qu-ils-se-construisent/64058"
96 },
97 {
98 "archive": 1,
99 "date_added": "2016-09-08T11:55:58+0200",
100 "favorite": 0,
101 "article__title": "[ROM][6.0.1][Layers][N5] TipsyOS official builds {UBER TCs}",
102 "article__url": "http://forum.xda-developers.com/google-nexus-5/development/rom-tipsyos-official-builds-uber-tcs-t3325989"
103 },
104 {
105 "archive": 0,
106 "date_added": "2016-09-08T11:55:58+0200",
107 "favorite": 0,
108 "article__title": "Top 15 Podcasts All Web Developers Should Follow - Envato Tuts+ Code Article",
109 "article__url": "http://code.tutsplus.com/articles/top-15-podcasts-all-web-developers-should-follow--net-14461"
110 },
111 {
112 "archive": 1,
113 "date_added": "2016-09-08T11:55:58+0200",
114 "favorite": 0,
115 "article__title": "University of Mississippi",
116 "article__url": "http://olemiss.edu"
117 },
118 {
119 "archive": 1,
120 "date_added": "2016-09-08T11:55:58+0200",
121 "favorite": 0,
122 "article__title": "FinnChristiansen.de Jetzt Dank Let’s Encrypt Per HTTPS Erreichbar",
123 "article__url": "https://www.finnchristiansen.de/2015/12/06/finnchristiansen-de-jetzt-dank-lets-encrypt-per-https-erreichbar/"
124 },
125 {
126 "archive": 1,
127 "date_added": "2016-09-08T11:55:58+0200",
128 "favorite": 0,
129 "article__title": "Le développeur et l'ingénierie logicielle",
130 "article__url": "http://wemucs.com/le-developpeur-et-lingenierie-logicielle/"
131 },
132 {
133 "archive": 1,
134 "date_added": "2016-09-08T11:55:58+0200",
135 "favorite": 0,
136 "article__title": "The Role of Methylation in Gene Expression",
137 "article__url": "http://www.nature.com/scitable/topicpage/the-role-of-methylation-in-gene-expression-1070"
138 },
139 {
140 "archive": 1,
141 "date_added": "2016-09-08T11:55:58+0200",
142 "favorite": 0,
143 "article__title": "E-Mail-Adresse kostenlos, FreeMail, De-Mail & Nachrichten",
144 "article__url": "http://web.de"
145 },
146 {
147 "archive": 1,
148 "date_added": "2016-09-08T11:55:58+0200",
149 "favorite": 0,
150 "article__title": "OpenSSH Server on Arch Linux | DominicM test",
151 "article__url": "http://dominicm.com/openssh-server-arch-linux/"
152 },
153 {
154 "archive": 1,
155 "date_added": "2016-09-08T11:55:58+0200",
156 "favorite": 0,
157 "article__title": "Site Moved | Site Help",
158 "article__url": "http://g1.com/help/sitemoved.asp"
159 },
160 {
161 "archive": 1,
162 "date_added": "2016-09-08T11:55:58+0200",
163 "favorite": 0,
164 "article__title": "#Maroc : le stylo anti-pédophiles EAGLE d’AMESYS est moins bien configuré que les faux-lowers Twitter du roi Mohammed VI",
165 "article__url": "https://reflets.info/maroc-le-stylo-anti-pedophiles-eagle-damesys-est-moins-bien-configure-que-les-faux-lowers-twitter-du-roi-mohammed-vi/"
166 },
167 {
168 "archive": 1,
169 "date_added": "2016-09-08T11:55:58+0200",
170 "favorite": 0,
171 "article__title": "Simple Cloud Infrastructure for Developers",
172 "article__url": "https://www.digitalocean.com/"
173 }
174 ],
175 "recommendations": []
176}
diff --git a/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json
index 3fa0bddf..d8609280 100644
--- a/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json
+++ b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json
@@ -4,6 +4,8 @@
4 "title": "Wikimedia Foundation removes The Diary of Anne Frank due to copyright law requirements « Wikimedia blog", 4 "title": "Wikimedia Foundation removes The Diary of Anne Frank due to copyright law requirements « Wikimedia blog",
5 "url": "https://blog.wikimedia.org/2016/02/10/anne-frank-diary-removal/", 5 "url": "https://blog.wikimedia.org/2016/02/10/anne-frank-diary-removal/",
6 "is_archived": true, 6 "is_archived": true,
7 "created_at": "2016-09-08T11:55:58+0200",
8 "updated_at": "2016-09-08T11:57:16+0200",
7 "is_starred": false, 9 "is_starred": false,
8 "content": "<p><a href=\"https://commons.wikimedia.org/wiki/File:AnneFrankSchoolPhoto.jpg\" rel=\"attachment wp-att-45105\"><img class=\"alignnone size-full wp-image-45105\" src=\"https://wikimediablog.files.wordpress.com/2016/02/annefrankschoolphoto.jpg?w=316&amp;h=520\" alt=\"AnneFrankSchoolPhoto\" width=\"316\" height=\"520\"/></a><br/><small><i>Anne Frank in 1940. <a href=\"https://commons.wikimedia.org/wiki/File:AnneFrankSchoolPhoto.jpg\">Photo</a> by Collectie Anne Frank Stichting Amsterdam, public domain.</i></small></p>\n<p>Today, in an unfortunate example of the overreach of the United States’ current copyright law, the Wikimedia Foundation removed the Dutch-language text of <a href=\"https://en.wikipedia.org/wiki/The_Diary_of_a_Young_Girl\"><em>The Diary of a Young Girl</em></a>—more commonly known in English as the <em>Diary of Anne Frank—</em>from Wikisource.<sup id=\"one\"><a href=\"https://blog.wikimedia.org/2016/02/10/anne-frank-diary-removal/#cite1\">[1]</a></sup></p>\n<p>We took this action to comply with the United States’ <a href=\"https://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act\">Digital Millennium Copyright Act</a> (DMCA), as we believe the diary is still under US copyright protection under the law as it is currently written. Nevertheless, our removal serves as an excellent example of why the law should be changed to prevent repeated extensions of copyright terms, an issue that has plagued our communities <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Wikipedia_Signpost/2014-02-26/News_and_notes\">for years</a>.</p>\n<h3>What prompted us to remove the diary?</h3>\n<p>The deletion was required because the Foundation is under the jurisdiction of US law and is therefore subject to the DMCA, specifically <a href=\"https://www.law.cornell.edu/uscode/text/17/512\" target=\"_blank\">title 17, chapter 5, section 512 of the United States Code</a>. As we <a href=\"https://meta.wikimedia.org/wiki/Legal/URAA_Statement\" target=\"_blank\">noted</a> in 2013, “The location of the servers, incorporation, and headquarters are just three of many factors that establish US jurisdiction … if infringing content is linked to or embedded in Wikimedia projects, then  the Foundation may still be subject to liability for such use—either as a direct or contributory infringer.</p>\n<p>Based on email discussions sent to the Wikimedia Foundation at legal[at]wikimedia.org, we determined that the Wikimedia Foundation had either “actual knowledge” (i in the statute quoted below) or what is commonly called “red flag knowledge” (ii in the statute quoted below) that the Anne Frank text was hosted on Wikisource and was under copyright. The statute section states that a service provider is only protected by the DMCA when it:</p>\n<p><strong>(i) </strong>does not have actual knowledge that the material or an activity using the material on the system or network is infringing;</p>\n<p><strong>(ii) </strong>in the absence of such actual knowledge, is not aware of facts or circumstances from which infringing activity is apparent; or</p>\n<p>(The rest applies when we get a proper DMCA takedown notice.)</p>\n<p>Of particular concern, the US’ <a href=\"https://en.wikipedia.org/wiki/United_States_Court_of_Appeals_for_the_Ninth_Circuit\">9th Circuit Court of Appeals</a> stated in their ruling for <a href=\"http://law.justia.com/cases/federal/appellate-courts/ca9/09-55902/09-55902-2013-03-14.html\"><em>UMG Recordings, Inc. v. Shelter Capital Partners LLC</em></a> that in circumstances where a hosting provider (like the Wikimedia Foundation) is informed by a third party (like an unrelated user) about infringing copyrighted content, that would likely constitute either actual or red flag knowledge under the DMCA.</p>\n<p>We believe, based on the detail and specificity contained in the emails, that we received that we had actual knowledge sufficient for the DMCA to require us to perform a takedown even in the absence of a demand letter.</p>\n<h3>How is the diary still copyrighted?</h3>\n<p>You may wonder why or how the Anne Frank text is copyrighted at all, as <a href=\"https://en.wikipedia.org/wiki/Anne_Frank\">Anne Frank</a> died in February 1945. With 70 years having passed since her death, the text may have passed into public domain in the Netherlands on January 1, 2016, where it was first published, although <a href=\"http://www.npr.org/sections/thetwo-way/2015/12/31/461606275/mein-kampf-enters-public-domain-arguably-anne-franks-diary-may-too\">there is still some dispute about this</a>.</p>\n<p>However, in the United States, the Anne Frank original text will be under copyright until 2042. This is the result of several factors coming together, and the English-language Wikipedia has actually covered this issue with a multi-part test on its <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Non-U.S._copyrights\">non-US copyrights content guideline.</a></p>\n<p>In short, there are three major laws that together make the diary still copyrighted:</p>\n<ol><li>In general, the U.S. copyright for works published before 1978 is 95 years from date of publication. This came about because copyrights in the U.S. were originally for 28 years, with the ability to then extend that for a second 28 years (making a total of 56). Starting with the <a href=\"https://en.wikipedia.org/wiki/Copyright_Act_of_1976\">1976 Copyright Act</a> and extending to several more acts, the renewal became automatic and was extended. Today, the total term of works published before 1978 is 95 years from date of publication.</li>\n<li>Foreign works of countries that are treaty partners to the United States are covered as if they were US works.</li>\n<li>Even if a country was not a treaty partner under copyright law at the time of a publication, the <a href=\"https://en.wikipedia.org/wiki/Uruguay_Round_Agreements_Act\">1994 Uruguay Round Agreements Act</a> (URAA) restored copyright to works that:\n<ul><li>had been published in a foreign country</li>\n<li>were still under copyright in that country in 1996</li>\n<li>and would have had U.S. copyright but for the fact they were published abroad.</li>\n</ul></li>\n</ol>\n<p>Court challenges to the URAA have all failed, with the most notable (<a href=\"https://en.wikipedia.org/wiki/Golan_v._Holder\"><em>Golan v. Holder</em></a>) resulting in a Supreme Court ruling that upheld the URAA.</p>\n<p>What that means for Anne Frank’s diary is unfortunately simple: no matter how it wound up in the United States and regardless of what formal copyright notices they used, the US grants it copyright until the year 2042, or 95 years after its original publication in 1947.</p>\n<p>Under current copyright law, this remains true regardless of its copyright status anywhere else in the world and regardless of whether it may have been in the public domain in the United States in the past.</p>\n<p><a href=\"https://wikimediafoundation.org/wiki/User:Jrogers_(WMF)\"><em>Jacob Rogers</em></a><em>, Legal Counsel*<br/>Wikimedia Foundation</em></p>\n<p><em>*Special thanks to </em><a href=\"https://wikimediafoundation.org/wiki/User:AMangalick_(WMF)\"><em>Anisha Mangalick</em></a><em>, Legal Fellow, for her assistance in this matter.</em></p>\n<p><a href=\"https://blog.wikimedia.org/2016/02/10/anne-frank-diary-removal/#one\">[1]</a> The diary text was originally located at <a href=\"https://nl.wikisource.org/wiki/Het_Achterhuis_(Anne_Frank)\" rel=\"nofollow\">https://nl.wikisource.org/wiki/Het_Achterhuis_(Anne_Frank)</a>.</p>\n<p><em>This article was edited to clarify that it is not just the location of the Wikimedia Foundation’s servers that determine whether we fall in US jurisdiction.</em></p>\n\t\t\t\t\t\t\t\t\t\t\t", 10 "content": "<p><a href=\"https://commons.wikimedia.org/wiki/File:AnneFrankSchoolPhoto.jpg\" rel=\"attachment wp-att-45105\"><img class=\"alignnone size-full wp-image-45105\" src=\"https://wikimediablog.files.wordpress.com/2016/02/annefrankschoolphoto.jpg?w=316&amp;h=520\" alt=\"AnneFrankSchoolPhoto\" width=\"316\" height=\"520\"/></a><br/><small><i>Anne Frank in 1940. <a href=\"https://commons.wikimedia.org/wiki/File:AnneFrankSchoolPhoto.jpg\">Photo</a> by Collectie Anne Frank Stichting Amsterdam, public domain.</i></small></p>\n<p>Today, in an unfortunate example of the overreach of the United States’ current copyright law, the Wikimedia Foundation removed the Dutch-language text of <a href=\"https://en.wikipedia.org/wiki/The_Diary_of_a_Young_Girl\"><em>The Diary of a Young Girl</em></a>—more commonly known in English as the <em>Diary of Anne Frank—</em>from Wikisource.<sup id=\"one\"><a href=\"https://blog.wikimedia.org/2016/02/10/anne-frank-diary-removal/#cite1\">[1]</a></sup></p>\n<p>We took this action to comply with the United States’ <a href=\"https://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act\">Digital Millennium Copyright Act</a> (DMCA), as we believe the diary is still under US copyright protection under the law as it is currently written. Nevertheless, our removal serves as an excellent example of why the law should be changed to prevent repeated extensions of copyright terms, an issue that has plagued our communities <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Wikipedia_Signpost/2014-02-26/News_and_notes\">for years</a>.</p>\n<h3>What prompted us to remove the diary?</h3>\n<p>The deletion was required because the Foundation is under the jurisdiction of US law and is therefore subject to the DMCA, specifically <a href=\"https://www.law.cornell.edu/uscode/text/17/512\" target=\"_blank\">title 17, chapter 5, section 512 of the United States Code</a>. As we <a href=\"https://meta.wikimedia.org/wiki/Legal/URAA_Statement\" target=\"_blank\">noted</a> in 2013, “The location of the servers, incorporation, and headquarters are just three of many factors that establish US jurisdiction … if infringing content is linked to or embedded in Wikimedia projects, then  the Foundation may still be subject to liability for such use—either as a direct or contributory infringer.</p>\n<p>Based on email discussions sent to the Wikimedia Foundation at legal[at]wikimedia.org, we determined that the Wikimedia Foundation had either “actual knowledge” (i in the statute quoted below) or what is commonly called “red flag knowledge” (ii in the statute quoted below) that the Anne Frank text was hosted on Wikisource and was under copyright. The statute section states that a service provider is only protected by the DMCA when it:</p>\n<p><strong>(i) </strong>does not have actual knowledge that the material or an activity using the material on the system or network is infringing;</p>\n<p><strong>(ii) </strong>in the absence of such actual knowledge, is not aware of facts or circumstances from which infringing activity is apparent; or</p>\n<p>(The rest applies when we get a proper DMCA takedown notice.)</p>\n<p>Of particular concern, the US’ <a href=\"https://en.wikipedia.org/wiki/United_States_Court_of_Appeals_for_the_Ninth_Circuit\">9th Circuit Court of Appeals</a> stated in their ruling for <a href=\"http://law.justia.com/cases/federal/appellate-courts/ca9/09-55902/09-55902-2013-03-14.html\"><em>UMG Recordings, Inc. v. Shelter Capital Partners LLC</em></a> that in circumstances where a hosting provider (like the Wikimedia Foundation) is informed by a third party (like an unrelated user) about infringing copyrighted content, that would likely constitute either actual or red flag knowledge under the DMCA.</p>\n<p>We believe, based on the detail and specificity contained in the emails, that we received that we had actual knowledge sufficient for the DMCA to require us to perform a takedown even in the absence of a demand letter.</p>\n<h3>How is the diary still copyrighted?</h3>\n<p>You may wonder why or how the Anne Frank text is copyrighted at all, as <a href=\"https://en.wikipedia.org/wiki/Anne_Frank\">Anne Frank</a> died in February 1945. With 70 years having passed since her death, the text may have passed into public domain in the Netherlands on January 1, 2016, where it was first published, although <a href=\"http://www.npr.org/sections/thetwo-way/2015/12/31/461606275/mein-kampf-enters-public-domain-arguably-anne-franks-diary-may-too\">there is still some dispute about this</a>.</p>\n<p>However, in the United States, the Anne Frank original text will be under copyright until 2042. This is the result of several factors coming together, and the English-language Wikipedia has actually covered this issue with a multi-part test on its <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Non-U.S._copyrights\">non-US copyrights content guideline.</a></p>\n<p>In short, there are three major laws that together make the diary still copyrighted:</p>\n<ol><li>In general, the U.S. copyright for works published before 1978 is 95 years from date of publication. This came about because copyrights in the U.S. were originally for 28 years, with the ability to then extend that for a second 28 years (making a total of 56). Starting with the <a href=\"https://en.wikipedia.org/wiki/Copyright_Act_of_1976\">1976 Copyright Act</a> and extending to several more acts, the renewal became automatic and was extended. Today, the total term of works published before 1978 is 95 years from date of publication.</li>\n<li>Foreign works of countries that are treaty partners to the United States are covered as if they were US works.</li>\n<li>Even if a country was not a treaty partner under copyright law at the time of a publication, the <a href=\"https://en.wikipedia.org/wiki/Uruguay_Round_Agreements_Act\">1994 Uruguay Round Agreements Act</a> (URAA) restored copyright to works that:\n<ul><li>had been published in a foreign country</li>\n<li>were still under copyright in that country in 1996</li>\n<li>and would have had U.S. copyright but for the fact they were published abroad.</li>\n</ul></li>\n</ol>\n<p>Court challenges to the URAA have all failed, with the most notable (<a href=\"https://en.wikipedia.org/wiki/Golan_v._Holder\"><em>Golan v. Holder</em></a>) resulting in a Supreme Court ruling that upheld the URAA.</p>\n<p>What that means for Anne Frank’s diary is unfortunately simple: no matter how it wound up in the United States and regardless of what formal copyright notices they used, the US grants it copyright until the year 2042, or 95 years after its original publication in 1947.</p>\n<p>Under current copyright law, this remains true regardless of its copyright status anywhere else in the world and regardless of whether it may have been in the public domain in the United States in the past.</p>\n<p><a href=\"https://wikimediafoundation.org/wiki/User:Jrogers_(WMF)\"><em>Jacob Rogers</em></a><em>, Legal Counsel*<br/>Wikimedia Foundation</em></p>\n<p><em>*Special thanks to </em><a href=\"https://wikimediafoundation.org/wiki/User:AMangalick_(WMF)\"><em>Anisha Mangalick</em></a><em>, Legal Fellow, for her assistance in this matter.</em></p>\n<p><a href=\"https://blog.wikimedia.org/2016/02/10/anne-frank-diary-removal/#one\">[1]</a> The diary text was originally located at <a href=\"https://nl.wikisource.org/wiki/Het_Achterhuis_(Anne_Frank)\" rel=\"nofollow\">https://nl.wikisource.org/wiki/Het_Achterhuis_(Anne_Frank)</a>.</p>\n<p><em>This article was edited to clarify that it is not just the location of the Wikimedia Foundation’s servers that determine whether we fall in US jurisdiction.</em></p>\n\t\t\t\t\t\t\t\t\t\t\t",
9 "mimetype": "text/html", 11 "mimetype": "text/html",
@@ -17,6 +19,8 @@
17 "title": "Tails - Tails 2.0.1 is out", 19 "title": "Tails - Tails 2.0.1 is out",
18 "url": "https://tails.boum.org/news/version_2.0.1/index.en.html", 20 "url": "https://tails.boum.org/news/version_2.0.1/index.en.html",
19 "is_archived": false, 21 "is_archived": false,
22 "created_at": "2016-09-08T11:55:58+0200",
23 "updated_at": "2016-09-08T11:57:16+0200",
20 "is_starred": false, 24 "is_starred": false,
21 "content": "<div id=\"pagebody\" readability=\"39\">\n<p>This release fixes <a href=\"https://tails.boum.org/security/Numerous_security_holes_in_2.0/index.en.html\">numerous security issues</a>. All users must upgrade as soon as possible.</p>\n<div class=\"toc\">\n<ol><li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index1h1\">Changes</a></li>\n<li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index2h1\">Known issues</a></li>\n<li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index3h1\">Download or upgrade</a></li>\n<li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index4h1\">What's coming up?</a></li>\n</ol></div>\n<h2>New features</h2>\n<ul><li readability=\"11\">\n<p>Tails now uses the GNOME Shell desktop environment, in its Classic mode. GNOME Shell provides a modern, simple, and actively developed desktop environment. The Classic mode keeps the traditional Applications, Places menu, and windows list. Accessibility and non-Latin input sources are also better integrated.</p>\n<p>To find your way around, <a href=\"https://tails.boum.org/doc/first_steps/introduction_to_gnome_and_the_tails_desktop/index.en.html\">read our introduction to GNOME and the Tails desktop.</a></p>\n<table class=\"img\"><caption>The desktop and Applications menu</caption>\n<tr><td><img alt=\"Tails 2.0 desktop with applications menu unfolded\" class=\"img\" height=\"384\" src=\"https://tails.boum.org/inc/release_notes/2.0/applications_menu.png\" width=\"512\"/></td>\n</tr></table><table class=\"img\"><caption>The activities overview</caption>\n<tr><td><img alt=\"Tails 2.0 activities overview\" class=\"img\" height=\"384\" src=\"https://tails.boum.org/inc/release_notes/2.0/activities_overview.png\" width=\"512\"/></td>\n</tr></table></li>\n</ul><h2>Upgrades and changes</h2>\n<ul><li readability=\"2\">\n<p>Debian 8 upgrades most included software, for example:</p>\n<ul><li>Many core GNOME utilities from 3.4 to 3.14: Files, Disks, Videos, etc.</li>\n<li>LibreOffice from 3.5 to 4.3</li>\n<li>PiTiVi from 0.15 to 0.93</li>\n<li>Git from 1.7.10 to 2.1.4</li>\n<li>Poedit from 1.5.4 to 1.6.10</li>\n<li>Liferea from 1.8.6 to 1.10</li>\n</ul></li>\n<li readability=\"1\">\n<p>Update Tor Browser to 5.5 (based on Firefox 38.6.0 ESR):</p>\n<ul><li>Add Japanese support.</li>\n</ul></li>\n<li readability=\"2\">\n<p>Remove the Windows camouflage which is currently broken in GNOME Shell. We started working on <a href=\"https://labs.riseup.net/code/issues/10830\">adding it back</a> but <a href=\"https://tails.boum.org/news/windows_camouflage_jessie/index.en.html\">your help is needed</a>!</p>\n</li>\n<li readability=\"1\">\n<p>Change to <code>systemd</code> as init system and use it to:</p>\n<ul><li>Sandbox many services using Linux namespaces and make them harder to exploit.</li>\n<li>Make the launching of Tor and the memory wipe on shutdown more robust.</li>\n<li>Sanitize our code base by replacing many custom scripts.</li>\n</ul></li>\n<li readability=\"1\">\n<p>Update most firmware packages which might improve hardware compatibility.</p>\n</li>\n<li readability=\"1\">\n<p>Notify the user if Tails is running from a non-free virtualization software.</p>\n</li>\n<li readability=\"3\">\n<p>Remove Claws Mail, replaced by <a href=\"https://tails.boum.org/doc/anonymous_internet/icedove/index.en.html\">Icedove</a>, a rebranded version of Mozilla Thunderbird.</p>\n</li>\n</ul><h2>Fixed problems</h2>\n<ul><li readability=\"1\">\n<p>HiDPI displays are better supported. (<a href=\"https://labs.riseup.net/code/issues/8659\">#8659</a>)</p>\n</li>\n<li readability=\"3\">\n<p>Remove the option to open a download with an external application in Tor Browser as this is usually impossible due to the AppArmor confinement. (<a href=\"https://labs.riseup.net/code/issues/9285\">#9285</a>)</p>\n</li>\n<li readability=\"1\">\n<p>Close Vidalia before restarting Tor.</p>\n</li>\n<li readability=\"2\">\n<p>Allow Videos to access the DVD drive. (<a href=\"https://labs.riseup.net/code/issues/10455\">#10455</a>, <a href=\"https://labs.riseup.net/code/issues/9990\">#9990</a>)</p>\n</li>\n<li readability=\"1\">\n<p>Allow configuring printers without administration password. (<a href=\"https://labs.riseup.net/code/issues/8443\">#8443</a>)</p>\n</li>\n</ul>\n<p>See the current list of <a href=\"https://tails.boum.org/support/known_issues/index.en.html\">known issues</a>.</p>\n<p>Go to the <a href=\"https://tails.boum.org/download/index.en.html\">download</a> or <a href=\"https://tails.boum.org/doc/first_steps/upgrade/index.en.html\">upgrade</a> page.</p>\n<p>If your Tails does not boot after an automatic upgrade, please <a href=\"https://tails.boum.org/doc/first_steps/upgrade/index.en.html#manual\">upgrade your Tails manually</a>.</p>\n<p>The next Tails release is <a href=\"https://tails.boum.org/contribute/calendar/\">scheduled</a> for March 08.</p>\n<p>Have a look at our <a href=\"https://labs.riseup.net/code/projects/tails/roadmap\">roadmap</a> to see where we are heading to.</p>\n<p>We need your help and there are many ways to <a href=\"https://tails.boum.org/contribute/index.en.html\">contribute to Tails</a> (<a href=\"https://tails.boum.org/contribute/how/donate/index.en.html\">donating</a> is only one of them). Come <a href=\"https://tails.boum.org/contribute/talk/\">talk to us</a>!</p>\n</div><div id=\"footer\" class=\"pagefooter\" role=\"contentinfo\" readability=\"15\">\n<p>Tags: <a href=\"https://tails.boum.org/tags/announce/\" rel=\"tag\">announce</a></p>\n<p>Pages linking to this one: <a href=\"https://tails.boum.org/inc/stable_i386_release_notes/index.en.html\">inc/stable i386 release notes</a> <a href=\"https://tails.boum.org/security/Numerous_security_holes_in_2.0/index.en.html\">security/Numerous security holes in 2.0</a></p>\n<p>Last edited Sat 13 Feb 2016 02:23:58 PM CET </p>\n</div>", 25 "content": "<div id=\"pagebody\" readability=\"39\">\n<p>This release fixes <a href=\"https://tails.boum.org/security/Numerous_security_holes_in_2.0/index.en.html\">numerous security issues</a>. All users must upgrade as soon as possible.</p>\n<div class=\"toc\">\n<ol><li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index1h1\">Changes</a></li>\n<li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index2h1\">Known issues</a></li>\n<li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index3h1\">Download or upgrade</a></li>\n<li class=\"L1\"><a href=\"https://tails.boum.org/news/version_2.0.1/index.en.html#index4h1\">What's coming up?</a></li>\n</ol></div>\n<h2>New features</h2>\n<ul><li readability=\"11\">\n<p>Tails now uses the GNOME Shell desktop environment, in its Classic mode. GNOME Shell provides a modern, simple, and actively developed desktop environment. The Classic mode keeps the traditional Applications, Places menu, and windows list. Accessibility and non-Latin input sources are also better integrated.</p>\n<p>To find your way around, <a href=\"https://tails.boum.org/doc/first_steps/introduction_to_gnome_and_the_tails_desktop/index.en.html\">read our introduction to GNOME and the Tails desktop.</a></p>\n<table class=\"img\"><caption>The desktop and Applications menu</caption>\n<tr><td><img alt=\"Tails 2.0 desktop with applications menu unfolded\" class=\"img\" height=\"384\" src=\"https://tails.boum.org/inc/release_notes/2.0/applications_menu.png\" width=\"512\"/></td>\n</tr></table><table class=\"img\"><caption>The activities overview</caption>\n<tr><td><img alt=\"Tails 2.0 activities overview\" class=\"img\" height=\"384\" src=\"https://tails.boum.org/inc/release_notes/2.0/activities_overview.png\" width=\"512\"/></td>\n</tr></table></li>\n</ul><h2>Upgrades and changes</h2>\n<ul><li readability=\"2\">\n<p>Debian 8 upgrades most included software, for example:</p>\n<ul><li>Many core GNOME utilities from 3.4 to 3.14: Files, Disks, Videos, etc.</li>\n<li>LibreOffice from 3.5 to 4.3</li>\n<li>PiTiVi from 0.15 to 0.93</li>\n<li>Git from 1.7.10 to 2.1.4</li>\n<li>Poedit from 1.5.4 to 1.6.10</li>\n<li>Liferea from 1.8.6 to 1.10</li>\n</ul></li>\n<li readability=\"1\">\n<p>Update Tor Browser to 5.5 (based on Firefox 38.6.0 ESR):</p>\n<ul><li>Add Japanese support.</li>\n</ul></li>\n<li readability=\"2\">\n<p>Remove the Windows camouflage which is currently broken in GNOME Shell. We started working on <a href=\"https://labs.riseup.net/code/issues/10830\">adding it back</a> but <a href=\"https://tails.boum.org/news/windows_camouflage_jessie/index.en.html\">your help is needed</a>!</p>\n</li>\n<li readability=\"1\">\n<p>Change to <code>systemd</code> as init system and use it to:</p>\n<ul><li>Sandbox many services using Linux namespaces and make them harder to exploit.</li>\n<li>Make the launching of Tor and the memory wipe on shutdown more robust.</li>\n<li>Sanitize our code base by replacing many custom scripts.</li>\n</ul></li>\n<li readability=\"1\">\n<p>Update most firmware packages which might improve hardware compatibility.</p>\n</li>\n<li readability=\"1\">\n<p>Notify the user if Tails is running from a non-free virtualization software.</p>\n</li>\n<li readability=\"3\">\n<p>Remove Claws Mail, replaced by <a href=\"https://tails.boum.org/doc/anonymous_internet/icedove/index.en.html\">Icedove</a>, a rebranded version of Mozilla Thunderbird.</p>\n</li>\n</ul><h2>Fixed problems</h2>\n<ul><li readability=\"1\">\n<p>HiDPI displays are better supported. (<a href=\"https://labs.riseup.net/code/issues/8659\">#8659</a>)</p>\n</li>\n<li readability=\"3\">\n<p>Remove the option to open a download with an external application in Tor Browser as this is usually impossible due to the AppArmor confinement. (<a href=\"https://labs.riseup.net/code/issues/9285\">#9285</a>)</p>\n</li>\n<li readability=\"1\">\n<p>Close Vidalia before restarting Tor.</p>\n</li>\n<li readability=\"2\">\n<p>Allow Videos to access the DVD drive. (<a href=\"https://labs.riseup.net/code/issues/10455\">#10455</a>, <a href=\"https://labs.riseup.net/code/issues/9990\">#9990</a>)</p>\n</li>\n<li readability=\"1\">\n<p>Allow configuring printers without administration password. (<a href=\"https://labs.riseup.net/code/issues/8443\">#8443</a>)</p>\n</li>\n</ul>\n<p>See the current list of <a href=\"https://tails.boum.org/support/known_issues/index.en.html\">known issues</a>.</p>\n<p>Go to the <a href=\"https://tails.boum.org/download/index.en.html\">download</a> or <a href=\"https://tails.boum.org/doc/first_steps/upgrade/index.en.html\">upgrade</a> page.</p>\n<p>If your Tails does not boot after an automatic upgrade, please <a href=\"https://tails.boum.org/doc/first_steps/upgrade/index.en.html#manual\">upgrade your Tails manually</a>.</p>\n<p>The next Tails release is <a href=\"https://tails.boum.org/contribute/calendar/\">scheduled</a> for March 08.</p>\n<p>Have a look at our <a href=\"https://labs.riseup.net/code/projects/tails/roadmap\">roadmap</a> to see where we are heading to.</p>\n<p>We need your help and there are many ways to <a href=\"https://tails.boum.org/contribute/index.en.html\">contribute to Tails</a> (<a href=\"https://tails.boum.org/contribute/how/donate/index.en.html\">donating</a> is only one of them). Come <a href=\"https://tails.boum.org/contribute/talk/\">talk to us</a>!</p>\n</div><div id=\"footer\" class=\"pagefooter\" role=\"contentinfo\" readability=\"15\">\n<p>Tags: <a href=\"https://tails.boum.org/tags/announce/\" rel=\"tag\">announce</a></p>\n<p>Pages linking to this one: <a href=\"https://tails.boum.org/inc/stable_i386_release_notes/index.en.html\">inc/stable i386 release notes</a> <a href=\"https://tails.boum.org/security/Numerous_security_holes_in_2.0/index.en.html\">security/Numerous security holes in 2.0</a></p>\n<p>Last edited Sat 13 Feb 2016 02:23:58 PM CET </p>\n</div>",
22 "mimetype": "text/html", 26 "mimetype": "text/html",
diff --git a/tests/Wallabag/ImportBundle/fixtures/wallabag-v2.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2.json
index 37c59668..efa8faf2 100644
--- a/tests/Wallabag/ImportBundle/fixtures/wallabag-v2.json
+++ b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2.json
@@ -4,6 +4,8 @@
4 "title": "Site d'information français d'actualités indépendant et participatif en ligne | Mediapart", 4 "title": "Site d'information français d'actualités indépendant et participatif en ligne | Mediapart",
5 "url": "https://www.mediapart.fr/", 5 "url": "https://www.mediapart.fr/",
6 "is_archived": false, 6 "is_archived": false,
7 "created_at": "2016-09-08T11:55:58+0200",
8 "updated_at": "2016-09-08T11:57:16+0200",
7 "is_starred": false, 9 "is_starred": false,
8 "content": "<div alt=\"li\">Édition <a href=\"https://blogs.mediapart.fr/edition/camedia-0\">CAMédia</a>\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/edition/camedia/article/180116/deux-nouvelles-editions-pour-debattre-dans-le-club-sur-la-laicite-et-sur-la-democratie\">Deux nouvelles éditions pour débattre dans le club sur la laïcité et sur la démocratie</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>CAMédia après un échange sur « l'éthique du débat » a lancé deux discussions , l'une sur le thème de la laïcité, l'autre ( encore en cours) sur celui de la démocratie. Nous sommes heureux de pouvoir signaler la création de deux nouvelles éditions participatives sur ces thèmes. Nous vous invitons à les lire et à participer à leurs débats.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/lucile-longre/blog/170116/de-limportance-de-rever-eloge-du-merveilleux\">De l'importance de rêver, éloge du merveilleux</a></h3>\n<p>17 janv. 2016 | Par </p>\n<p>Je parlerai ici des rêves comme moteur de vie, de ces rêves qui vous rattachent et vous font espérer à ce qu’il y a de plus humain dans l’homme, même au milieu de la plus noire des détresses.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/barbara-romagnan/blog/180116/fins-dune-toute-puissance\">Fin(s) d'une toute-puissance</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>En ce début d’année, je recommande la lecture du dernier ouvrage de Guillaume Duval, La France ne sera jamais plus une grande puissance ? Tant mieux !</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jean-pierre-thibaudat/blog/170116/l-allier-departement-de-destruction-massive-du-tissu-culturel\">L’Allier, département de destruction massive du tissu culturel</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Les temps sont durs pour les petites structures, les associations culturelles qui, de bourgades en villages, travaillent au cœur des régions. Leurs subventions sont souvent revues à la baisse. Le département de l’Allier les a carrément supprimées. Pour favoriser « l’événementiel ».</p>\n</div><div alt=\"li\">Édition <a href=\"https://blogs.mediapart.fr/edition/les-invites-de-mediapart\">Les invités de Mediapart</a>\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/edition/les-invites-de-mediapart/article/180116/la-democratie-deja-attaquee-par-la-cooperation-reglementaire-transatlantiqu\">La démocratie déjà attaquée par la coopération réglementaire transatlantique</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Lora Verheecke et David Lundy travaillent pour Corporate Europe Observatory, une ONG basée à Bruxelles qui enquête sur le pouvoir des lobbies des grandes entreprises sur la politique de l’Union européenne. Ils révèlent que depuis 25 ans le projet de « coopération réglementaire » mené par l’Union européenne et les États-Unis a été dominé par les grandes entreprises. ET que le TTIP cherche à entériner ce projet.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jacqueline-derens/blog/180116/2016-une-annee-test-pour-jacob-zuma-et-son-gouvernement\">2016, une année test pour Jacob Zuma et son gouvernement</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Les turbulences de l’an passé ont toutes les chances de continuer à troubler le climat politique et social de l’Afrique du Sud en 2016. La situation exige des changements profonds dans la conduite des affaires du pays. Jacob Zuma tout en admettant la nécessité de ces changements, est-il l’homme de la situation ? Son gouvernement répondra-t-il aux attentes des citoyens sud-africains ?</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/marie-cosnay/blog/140116/un-mal-fou-janvier-2016\">Un mal fou (janvier 2016)</a></h3>\n<p>14 janv. 2016 | Par </p>\n<p>J’ai une fringale d’aventure, d’aventures à venir. J’ai la fringale de la fringale des aventures et soudain, rupture. Je n’y arrive plus, tout est bloqué, tout empêché. Faut dire que depuis un an environ, tout est devenu plus compliqué. Ecrire va de moins en moins de soi.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jean-pierre-veran/blog/170116/redoublement-le-changement-bas-bruit\">Redoublement : le changement à bas bruit ?</a></h3>\n<p>17 janv. 2016 | Par </p>\n<p>S’il est une caractéristique de la forme scolaire française bien établie dans la culture des personnels, des élèves et des parents, c’est bien le redoublement, censé sanctionner des résultats insuffisants pour envisager le passage dans la classe supérieure. Or, en ce domaine, l’évolution est nette.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/michel-de-pracontal/blog/160116/samedi-sciences-196-des-chasseurs-de-mammouths-en-arctique-il-y-45-000-ans\">Samedi-sciences (196): des chasseurs de mammouths en Arctique il y a 45 000 ans</a></h3>\n<p>16 janv. 2016 | Par <a href=\"https://blogs.mediapart.fr/michel-de-pracontal\" class=\"journalist\">Michel de Pracontal</a></p>\n<p>Les restes d’un mammouth retrouvés en Arctique sibérien, datés de 45 000 ans, portent les traces de blessures infligées par des chasseurs humains. Les scientifiques pensaient jusqu’ici que notre espèce ne s’était pas aventurée dans cette région glaciale il y a plus de 30 000 ou 35 0000 ans. En réalité, des hommes ont réussi à survivre en Arctique au moins 10 000 ans plus tôt que l’on croyait.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/alain-zolty/blog/140116/de-la-democratie-du-citoyen-et-de-lethique\">De la démocratie, du citoyen et de l'éthique</a></h3>\n<p>14 janv. 2016 | Par </p>\n<p>Trois ouvrages sont parus au Seuil, qui font état de la nécessité d’intégrer le citoyen dans la gouvernance de la nation. Non pas à titre consultatif mais doté d’un pouvoir délibératif pour constituer une contre-force face aux clans politico-financiers qui dominent la vie publique.</p>\n</div>", 10 "content": "<div alt=\"li\">Édition <a href=\"https://blogs.mediapart.fr/edition/camedia-0\">CAMédia</a>\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/edition/camedia/article/180116/deux-nouvelles-editions-pour-debattre-dans-le-club-sur-la-laicite-et-sur-la-democratie\">Deux nouvelles éditions pour débattre dans le club sur la laïcité et sur la démocratie</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>CAMédia après un échange sur « l'éthique du débat » a lancé deux discussions , l'une sur le thème de la laïcité, l'autre ( encore en cours) sur celui de la démocratie. Nous sommes heureux de pouvoir signaler la création de deux nouvelles éditions participatives sur ces thèmes. Nous vous invitons à les lire et à participer à leurs débats.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/lucile-longre/blog/170116/de-limportance-de-rever-eloge-du-merveilleux\">De l'importance de rêver, éloge du merveilleux</a></h3>\n<p>17 janv. 2016 | Par </p>\n<p>Je parlerai ici des rêves comme moteur de vie, de ces rêves qui vous rattachent et vous font espérer à ce qu’il y a de plus humain dans l’homme, même au milieu de la plus noire des détresses.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/barbara-romagnan/blog/180116/fins-dune-toute-puissance\">Fin(s) d'une toute-puissance</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>En ce début d’année, je recommande la lecture du dernier ouvrage de Guillaume Duval, La France ne sera jamais plus une grande puissance ? Tant mieux !</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jean-pierre-thibaudat/blog/170116/l-allier-departement-de-destruction-massive-du-tissu-culturel\">L’Allier, département de destruction massive du tissu culturel</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Les temps sont durs pour les petites structures, les associations culturelles qui, de bourgades en villages, travaillent au cœur des régions. Leurs subventions sont souvent revues à la baisse. Le département de l’Allier les a carrément supprimées. Pour favoriser « l’événementiel ».</p>\n</div><div alt=\"li\">Édition <a href=\"https://blogs.mediapart.fr/edition/les-invites-de-mediapart\">Les invités de Mediapart</a>\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/edition/les-invites-de-mediapart/article/180116/la-democratie-deja-attaquee-par-la-cooperation-reglementaire-transatlantiqu\">La démocratie déjà attaquée par la coopération réglementaire transatlantique</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Lora Verheecke et David Lundy travaillent pour Corporate Europe Observatory, une ONG basée à Bruxelles qui enquête sur le pouvoir des lobbies des grandes entreprises sur la politique de l’Union européenne. Ils révèlent que depuis 25 ans le projet de « coopération réglementaire » mené par l’Union européenne et les États-Unis a été dominé par les grandes entreprises. ET que le TTIP cherche à entériner ce projet.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jacqueline-derens/blog/180116/2016-une-annee-test-pour-jacob-zuma-et-son-gouvernement\">2016, une année test pour Jacob Zuma et son gouvernement</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Les turbulences de l’an passé ont toutes les chances de continuer à troubler le climat politique et social de l’Afrique du Sud en 2016. La situation exige des changements profonds dans la conduite des affaires du pays. Jacob Zuma tout en admettant la nécessité de ces changements, est-il l’homme de la situation ? Son gouvernement répondra-t-il aux attentes des citoyens sud-africains ?</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/marie-cosnay/blog/140116/un-mal-fou-janvier-2016\">Un mal fou (janvier 2016)</a></h3>\n<p>14 janv. 2016 | Par </p>\n<p>J’ai une fringale d’aventure, d’aventures à venir. J’ai la fringale de la fringale des aventures et soudain, rupture. Je n’y arrive plus, tout est bloqué, tout empêché. Faut dire que depuis un an environ, tout est devenu plus compliqué. Ecrire va de moins en moins de soi.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jean-pierre-veran/blog/170116/redoublement-le-changement-bas-bruit\">Redoublement : le changement à bas bruit ?</a></h3>\n<p>17 janv. 2016 | Par </p>\n<p>S’il est une caractéristique de la forme scolaire française bien établie dans la culture des personnels, des élèves et des parents, c’est bien le redoublement, censé sanctionner des résultats insuffisants pour envisager le passage dans la classe supérieure. Or, en ce domaine, l’évolution est nette.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/michel-de-pracontal/blog/160116/samedi-sciences-196-des-chasseurs-de-mammouths-en-arctique-il-y-45-000-ans\">Samedi-sciences (196): des chasseurs de mammouths en Arctique il y a 45 000 ans</a></h3>\n<p>16 janv. 2016 | Par <a href=\"https://blogs.mediapart.fr/michel-de-pracontal\" class=\"journalist\">Michel de Pracontal</a></p>\n<p>Les restes d’un mammouth retrouvés en Arctique sibérien, datés de 45 000 ans, portent les traces de blessures infligées par des chasseurs humains. Les scientifiques pensaient jusqu’ici que notre espèce ne s’était pas aventurée dans cette région glaciale il y a plus de 30 000 ou 35 0000 ans. En réalité, des hommes ont réussi à survivre en Arctique au moins 10 000 ans plus tôt que l’on croyait.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/alain-zolty/blog/140116/de-la-democratie-du-citoyen-et-de-lethique\">De la démocratie, du citoyen et de l'éthique</a></h3>\n<p>14 janv. 2016 | Par </p>\n<p>Trois ouvrages sont parus au Seuil, qui font état de la nécessité d’intégrer le citoyen dans la gouvernance de la nation. Non pas à titre consultatif mais doté d’un pouvoir délibératif pour constituer une contre-force face aux clans politico-financiers qui dominent la vie publique.</p>\n</div>",
9 "mimetype": "text/html", 11 "mimetype": "text/html",
@@ -21,6 +23,8 @@
21 "title": "Réfugiés: l'UE va créer 100 000 places d'accueil dans les Balkans", 23 "title": "Réfugiés: l'UE va créer 100 000 places d'accueil dans les Balkans",
22 "url": "http://www.liberation.fr/planete/2015/10/26/refugies-l-ue-va-creer-100-000-places-d-accueil-dans-les-balkans_1408867", 24 "url": "http://www.liberation.fr/planete/2015/10/26/refugies-l-ue-va-creer-100-000-places-d-accueil-dans-les-balkans_1408867",
23 "is_archived": false, 25 "is_archived": false,
26 "created_at": "2016-09-08T11:55:58+0200",
27 "updated_at": "2016-09-08T11:57:16+0200",
24 "is_starred": false, 28 "is_starred": false,
25 "content": "<p>Pour un sommet sur les réfugiés qui devait se concentrer sur des <em>«mesures opérationnelles immédiates»</em> dans les Balkans, la réunion, dimanche à Bruxelles, de 11 chefs d’Etat et de gouvernement, dont 8 Européens, a été agitée. Dès leur arrivée, Viktor Orbán (Hongrie) et Aléxis Tsípras (Grèce) se sont jeté des anathèmes. Le Premier ministre grec a dénoncé l’attitude <em>«not in my backyard»</em> (pas de ça chez moi) de certains Etats européens, alors que son pays est montré du doigt par d’autres dirigeants, dont Orbán : ils reprochent à la Grèce de ne pas suffisamment contrôler ses frontières avec la Turquie et ne pas montrer assez de zèle dans l’enregistrement des demandeurs d’asile.</p>\n<p>Le sommet, convoqué par la Commission européenne, sur suggestion de l’Allemagne, aura au moins permis à ces 11 Etats – Autriche, Bulgarie, Croatie, Allemagne, Grèce, Hongrie, Roumanie, Slovénie côté européen, et 3 pays «non UE», Albanie, Macédoine et Serbie – de discuter ensemble.</p>\n<h3>400 policiers européens en Slovénie</h3>\n<p>L’objectif, rappelé par Angela Merkel, était de trouver une <em>«réponse coordonnée»</em> à la crise des réfugiés. Quelques mesures ont été annoncées : 100 000 places d’accueil seront créées, dont 50 000 en Grèce, et le reste le long de la route des Balkans. 400 officiers de police de pays européens partiront en Slovénie, actuellement submergée, pour aider au contrôle des frontières. Frontex, l’agence européenne de surveillance des frontières, s’impliquera aux frontières gréco-macédonienne et gréco-albanaise pour des contrôles et identifications.</p>\n<p>Ce sommet est intervenu dans un contexte de fortes tensions, marqué par des fermetures de frontières bloquant les réfugiés dans des zones tampon. Ces obstacles ont été partiellement levés ces derniers jours, les autorités tentant d’organiser un «corridor» informel vers l’Allemagne, qui pourtant durcit sa politique d’accueil et souhaite désormais ralentir le flux. Mais la situation des réfugiés est catastrophique. L’ONG Human Rights Watch craint que des réfugiés ne meurent dans les Balkans. Des groupes de centaines, voire de milliers de personnes, bloqués près des postes-frontières, se retrouvent dans des conditions humanitaires intenables.</p>\n<p>Depuis mi-septembre, 250 000 personnes ont traversé les Balkans. En une semaine, la Slovénie a vu 60 000 réfugiés fouler le sol de son territoire. Dimanche, 15 000 personnes ont transité en Slovénie.</p>\n<h3>Des zones tampon</h3>\n<p>L’enjeu principal du sommet, aux yeux de nombreux Etats de l’Union européenne, était aussi que les pays des Balkans <em>«prennent leur part»</em> face à la crise : qu’ils accueillent et enregistrent davantage de réfugiés. Ces Etats craignent que l’Autriche ou l’Allemagne ne ferment leurs frontières et fassent de leurs pays des <em>«zones tampon»</em>, comme s’en inquiétait Boyko Borissov, Premier ministre bulgare.</p>\n<p><em>« Aujourd’hui, plusieurs Etats du nord de l’Europe veulent que l’on enregistre les migrants puis que l’on détermine leur éligibilité au statut de réfugié,</em> explique Marc Pierini, du think tank Carnegie Europe. <em>La difficulté, c’est que les gens sont en mouvement. Pour le faire, il faut se poser quelque part. La crainte des pays intermédiaires, donc ceux des Balkans, est qu’on enregistre ces personnes sur leur territoire et qu’ils soient contraints de rester sur leur sol. Donc les pays des Balkans ne sont pas désireux d’accueillir ces réfugiés et ces derniers veulent avancer.»</em></p>\n<p>Le sommet a élaboré quelques principes. L’idée générale est de rendre effective la «logique de hotspot» : un enregistrement des demandeurs d’asile à leur point d’entrée dans l’Union européenne, suivi de l’expulsion de ceux qui ne correspondraient pas aux critères de la Convention de Genève, et la répartition des autres, via le mécanisme de relocalisation.</p>\n<p>Dans ce cadre, l’enregistrement des demandeurs d’asile est un élément clé. <em>«Pas d’enregistrement, pas de droit»</em>, a prévenu le président de la Commission européenne, Jean-Claude Juncker, dimanche soir. Les Etats ont tenu à rappeler que les migrants qui refusent de demander l’asile à la frontière peuvent se voir refuser l’entrée dans un pays.</p>\n<p>Et les Etats <em>«décourageront les mouvements de réfugiés»</em> de frontière en frontière. La politique consistant à laisser passer les migrants vers un autre pays est officiellement jugée <em>«inacceptable»</em>.</p>\n<h3>Se jeter dans la gueule du loup</h3>\n<p>Voilà pour la théorie. En pratique, la relocalisation ne devrait concerner que 160 000 réfugiés en deux ans, alors que près de 700 000 personnes sont arrivées en Europe depuis le début de l’année. De plus, les Etats ne jouent pas le jeu. La semaine passée, seules 854 places de relocalisation avaient été proposées.</p>\n<p>Dans ce contexte, il est probable que les Etats des Balkans ne s’impliqueront pas outre mesure dans les solutions proposées, craignant de devoir «garder» les réfugiés alors que l’Union européenne tarde à mettre en œuvre leur répartition.</p>\n<p>Quant aux réfugiés, ils préfèrent traverser les frontières par eux-mêmes, plutôt que de se jeter dans ces «hotspots», considérés comme la gueule du loup.</p>\n<a itemprop=\"name\" href=\"http://www.liberation.fr/auteur/15743-cedric-vallet\">Cédric Vallet</a>", 29 "content": "<p>Pour un sommet sur les réfugiés qui devait se concentrer sur des <em>«mesures opérationnelles immédiates»</em> dans les Balkans, la réunion, dimanche à Bruxelles, de 11 chefs d’Etat et de gouvernement, dont 8 Européens, a été agitée. Dès leur arrivée, Viktor Orbán (Hongrie) et Aléxis Tsípras (Grèce) se sont jeté des anathèmes. Le Premier ministre grec a dénoncé l’attitude <em>«not in my backyard»</em> (pas de ça chez moi) de certains Etats européens, alors que son pays est montré du doigt par d’autres dirigeants, dont Orbán : ils reprochent à la Grèce de ne pas suffisamment contrôler ses frontières avec la Turquie et ne pas montrer assez de zèle dans l’enregistrement des demandeurs d’asile.</p>\n<p>Le sommet, convoqué par la Commission européenne, sur suggestion de l’Allemagne, aura au moins permis à ces 11 Etats – Autriche, Bulgarie, Croatie, Allemagne, Grèce, Hongrie, Roumanie, Slovénie côté européen, et 3 pays «non UE», Albanie, Macédoine et Serbie – de discuter ensemble.</p>\n<h3>400 policiers européens en Slovénie</h3>\n<p>L’objectif, rappelé par Angela Merkel, était de trouver une <em>«réponse coordonnée»</em> à la crise des réfugiés. Quelques mesures ont été annoncées : 100 000 places d’accueil seront créées, dont 50 000 en Grèce, et le reste le long de la route des Balkans. 400 officiers de police de pays européens partiront en Slovénie, actuellement submergée, pour aider au contrôle des frontières. Frontex, l’agence européenne de surveillance des frontières, s’impliquera aux frontières gréco-macédonienne et gréco-albanaise pour des contrôles et identifications.</p>\n<p>Ce sommet est intervenu dans un contexte de fortes tensions, marqué par des fermetures de frontières bloquant les réfugiés dans des zones tampon. Ces obstacles ont été partiellement levés ces derniers jours, les autorités tentant d’organiser un «corridor» informel vers l’Allemagne, qui pourtant durcit sa politique d’accueil et souhaite désormais ralentir le flux. Mais la situation des réfugiés est catastrophique. L’ONG Human Rights Watch craint que des réfugiés ne meurent dans les Balkans. Des groupes de centaines, voire de milliers de personnes, bloqués près des postes-frontières, se retrouvent dans des conditions humanitaires intenables.</p>\n<p>Depuis mi-septembre, 250 000 personnes ont traversé les Balkans. En une semaine, la Slovénie a vu 60 000 réfugiés fouler le sol de son territoire. Dimanche, 15 000 personnes ont transité en Slovénie.</p>\n<h3>Des zones tampon</h3>\n<p>L’enjeu principal du sommet, aux yeux de nombreux Etats de l’Union européenne, était aussi que les pays des Balkans <em>«prennent leur part»</em> face à la crise : qu’ils accueillent et enregistrent davantage de réfugiés. Ces Etats craignent que l’Autriche ou l’Allemagne ne ferment leurs frontières et fassent de leurs pays des <em>«zones tampon»</em>, comme s’en inquiétait Boyko Borissov, Premier ministre bulgare.</p>\n<p><em>« Aujourd’hui, plusieurs Etats du nord de l’Europe veulent que l’on enregistre les migrants puis que l’on détermine leur éligibilité au statut de réfugié,</em> explique Marc Pierini, du think tank Carnegie Europe. <em>La difficulté, c’est que les gens sont en mouvement. Pour le faire, il faut se poser quelque part. La crainte des pays intermédiaires, donc ceux des Balkans, est qu’on enregistre ces personnes sur leur territoire et qu’ils soient contraints de rester sur leur sol. Donc les pays des Balkans ne sont pas désireux d’accueillir ces réfugiés et ces derniers veulent avancer.»</em></p>\n<p>Le sommet a élaboré quelques principes. L’idée générale est de rendre effective la «logique de hotspot» : un enregistrement des demandeurs d’asile à leur point d’entrée dans l’Union européenne, suivi de l’expulsion de ceux qui ne correspondraient pas aux critères de la Convention de Genève, et la répartition des autres, via le mécanisme de relocalisation.</p>\n<p>Dans ce cadre, l’enregistrement des demandeurs d’asile est un élément clé. <em>«Pas d’enregistrement, pas de droit»</em>, a prévenu le président de la Commission européenne, Jean-Claude Juncker, dimanche soir. Les Etats ont tenu à rappeler que les migrants qui refusent de demander l’asile à la frontière peuvent se voir refuser l’entrée dans un pays.</p>\n<p>Et les Etats <em>«décourageront les mouvements de réfugiés»</em> de frontière en frontière. La politique consistant à laisser passer les migrants vers un autre pays est officiellement jugée <em>«inacceptable»</em>.</p>\n<h3>Se jeter dans la gueule du loup</h3>\n<p>Voilà pour la théorie. En pratique, la relocalisation ne devrait concerner que 160 000 réfugiés en deux ans, alors que près de 700 000 personnes sont arrivées en Europe depuis le début de l’année. De plus, les Etats ne jouent pas le jeu. La semaine passée, seules 854 places de relocalisation avaient été proposées.</p>\n<p>Dans ce contexte, il est probable que les Etats des Balkans ne s’impliqueront pas outre mesure dans les solutions proposées, craignant de devoir «garder» les réfugiés alors que l’Union européenne tarde à mettre en œuvre leur répartition.</p>\n<p>Quant aux réfugiés, ils préfèrent traverser les frontières par eux-mêmes, plutôt que de se jeter dans ces «hotspots», considérés comme la gueule du loup.</p>\n<a itemprop=\"name\" href=\"http://www.liberation.fr/auteur/15743-cedric-vallet\">Cédric Vallet</a>",
26 "mimetype": "", 30 "mimetype": "",
@@ -34,6 +38,8 @@
34 "title": "No title found", 38 "title": "No title found",
35 "url": "http://news.nationalgeographic.com/2016/02/160211-albatrosses-mothers-babies-animals-science/&sf20739758=1", 39 "url": "http://news.nationalgeographic.com/2016/02/160211-albatrosses-mothers-babies-animals-science/&sf20739758=1",
36 "is_archived": false, 40 "is_archived": false,
41 "created_at": "2016-09-08T11:55:58+0200",
42 "updated_at": "2016-09-08T11:57:16+0200",
37 "is_starred": true, 43 "is_starred": true,
38 "content": "Oh, what a shame, no content", 44 "content": "Oh, what a shame, no content",
39 "mimetype": "", 45 "mimetype": "",
@@ -44,6 +50,8 @@
44 }, 50 },
45 { 51 {
46 "is_archived": 0, 52 "is_archived": 0,
53 "created_at": "2016-09-08T11:55:58+0200",
54 "updated_at": "2016-09-08T11:57:16+0200",
47 "is_starred": 0, 55 "is_starred": 0,
48 "id": 612, 56 "id": 612,
49 "title": "Échecs", 57 "title": "Échecs",
@@ -58,6 +66,8 @@
58 }, 66 },
59 { 67 {
60 "is_archived": 0, 68 "is_archived": 0,
69 "created_at": "2016-09-08T11:55:58+0200",
70 "updated_at": "2016-09-08T11:57:16+0200",
61 "is_starred": 0, 71 "is_starred": 0,
62 "id": 608, 72 "id": 608,
63 "title": "90% des dossiers médicaux des Coréens du sud vendus à des entreprises privées - ZATAZ", 73 "title": "90% des dossiers médicaux des Coréens du sud vendus à des entreprises privées - ZATAZ",
@@ -73,6 +83,8 @@
73 }, 83 },
74 { 84 {
75 "is_archived": 0, 85 "is_archived": 0,
86 "created_at": "2016-09-08T11:55:58+0200",
87 "updated_at": "2016-09-08T11:57:16+0200",
76 "is_starred": 0, 88 "is_starred": 0,
77 "id": 606, 89 "id": 606,
78 "title": "Mass Surveillance As Art", 90 "title": "Mass Surveillance As Art",
@@ -87,6 +99,8 @@
87 }, 99 },
88 { 100 {
89 "is_archived": 0, 101 "is_archived": 0,
102 "created_at": "2016-09-08T11:55:58+0200",
103 "updated_at": "2016-09-08T11:57:16+0200",
90 "is_starred": 0, 104 "is_starred": 0,
91 "id": 605, 105 "id": 605,
92 "title": "What David Cameron did to the pig, his party is now doing to the country", 106 "title": "What David Cameron did to the pig, his party is now doing to the country",
@@ -102,6 +116,8 @@
102 }, 116 },
103 { 117 {
104 "is_archived": 1, 118 "is_archived": 1,
119 "created_at": "2016-09-08T11:55:58+0200",
120 "updated_at": "2016-09-08T11:57:16+0200",
105 "is_starred": 0, 121 "is_starred": 0,
106 "id": 604, 122 "id": 604,
107 "title": "CLICK HERE to support 2016 CES Winner, Revolutionary Auto-Tracking Robot", 123 "title": "CLICK HERE to support 2016 CES Winner, Revolutionary Auto-Tracking Robot",
@@ -116,6 +132,8 @@
116 }, 132 },
117 { 133 {
118 "is_archived": 0, 134 "is_archived": 0,
135 "created_at": "2016-09-08T11:55:58+0200",
136 "updated_at": "2016-09-08T11:57:16+0200",
119 "is_starred": 1, 137 "is_starred": 1,
120 "id": 603, 138 "id": 603,
121 "title": "No title found", 139 "title": "No title found",
@@ -129,6 +147,8 @@
129 }, 147 },
130 { 148 {
131 "is_archived": 1, 149 "is_archived": 1,
150 "created_at": "2016-09-08T11:55:58+0200",
151 "updated_at": "2016-09-08T11:57:16+0200",
132 "is_starred": 0, 152 "is_starred": 0,
133 "id": 602, 153 "id": 602,
134 "title": "Présentation d'Arduino - Tuto Arduino - Le blog d'Eskimon", 154 "title": "Présentation d'Arduino - Tuto Arduino - Le blog d'Eskimon",
@@ -144,6 +164,8 @@
144 }, 164 },
145 { 165 {
146 "is_archived": 1, 166 "is_archived": 1,
167 "created_at": "2016-09-08T11:55:58+0200",
168 "updated_at": "2016-09-08T11:57:16+0200",
147 "is_starred": 0, 169 "is_starred": 0,
148 "id": 543, 170 "id": 543,
149 "title": "Lenovo ThinkPad X1 Carbon Ultrabook Review", 171 "title": "Lenovo ThinkPad X1 Carbon Ultrabook Review",
@@ -159,6 +181,8 @@
159 }, 181 },
160 { 182 {
161 "is_archived": 0, 183 "is_archived": 0,
184 "created_at": "2016-09-08T11:55:58+0200",
185 "updated_at": "2016-09-08T11:57:16+0200",
162 "is_starred": 0, 186 "is_starred": 0,
163 "id": 541, 187 "id": 541,
164 "title": "Visitons le Château de Landsberg !", 188 "title": "Visitons le Château de Landsberg !",
@@ -174,6 +198,8 @@
174 }, 198 },
175 { 199 {
176 "is_archived": 1, 200 "is_archived": 1,
201 "created_at": "2016-09-08T11:55:58+0200",
202 "updated_at": "2016-09-08T11:57:16+0200",
177 "is_starred": 0, 203 "is_starred": 0,
178 "id": 454, 204 "id": 454,
179 "title": "Contrer les stéréotypes par les livres : “C'est dès l'enfance qu'ils se construisent”", 205 "title": "Contrer les stéréotypes par les livres : “C'est dès l'enfance qu'ils se construisent”",
@@ -189,6 +215,8 @@
189 }, 215 },
190 { 216 {
191 "is_archived": 1, 217 "is_archived": 1,
218 "created_at": "2016-09-08T11:55:58+0200",
219 "updated_at": "2016-09-08T11:57:16+0200",
192 "is_starred": 0, 220 "is_starred": 0,
193 "id": 99, 221 "id": 99,
194 "title": "[ROM][6.0.1][Layers][N5] TipsyOS official builds {UBER TCs}", 222 "title": "[ROM][6.0.1][Layers][N5] TipsyOS official builds {UBER TCs}",
@@ -204,6 +232,8 @@
204 }, 232 },
205 { 233 {
206 "is_archived": 0, 234 "is_archived": 0,
235 "created_at": "2016-09-08T11:55:58+0200",
236 "updated_at": "2016-09-08T11:57:16+0200",
207 "is_starred": 0, 237 "is_starred": 0,
208 "id": 98, 238 "id": 98,
209 "title": "Top 15 Podcasts All Web Developers Should Follow - Envato Tuts+ Code Article", 239 "title": "Top 15 Podcasts All Web Developers Should Follow - Envato Tuts+ Code Article",
@@ -218,6 +248,8 @@
218 }, 248 },
219 { 249 {
220 "is_archived": 1, 250 "is_archived": 1,
251 "created_at": "2016-09-08T11:55:58+0200",
252 "updated_at": "2016-09-08T11:57:16+0200",
221 "is_starred": 0, 253 "is_starred": 0,
222 "id": 97, 254 "id": 97,
223 "title": "University of Mississippi", 255 "title": "University of Mississippi",
@@ -232,6 +264,8 @@
232 }, 264 },
233 { 265 {
234 "is_archived": 1, 266 "is_archived": 1,
267 "created_at": "2016-09-08T11:55:58+0200",
268 "updated_at": "2016-09-08T11:57:16+0200",
235 "is_starred": 0, 269 "is_starred": 0,
236 "id": 96, 270 "id": 96,
237 "title": "FinnChristiansen.de Jetzt Dank Let’s Encrypt Per HTTPS Erreichbar", 271 "title": "FinnChristiansen.de Jetzt Dank Let’s Encrypt Per HTTPS Erreichbar",
@@ -246,6 +280,8 @@
246 }, 280 },
247 { 281 {
248 "is_archived": 1, 282 "is_archived": 1,
283 "created_at": "2016-09-08T11:55:58+0200",
284 "updated_at": "2016-09-08T11:57:16+0200",
249 "is_starred": 0, 285 "is_starred": 0,
250 "id": 82, 286 "id": 82,
251 "title": "Le développeur et l'ingénierie logicielle", 287 "title": "Le développeur et l'ingénierie logicielle",
@@ -259,6 +295,8 @@
259 }, 295 },
260 { 296 {
261 "is_archived": 1, 297 "is_archived": 1,
298 "created_at": "2016-09-08T11:55:58+0200",
299 "updated_at": "2016-09-08T11:57:16+0200",
262 "is_starred": 0, 300 "is_starred": 0,
263 "id": 78, 301 "id": 78,
264 "title": "The Role of Methylation in Gene Expression", 302 "title": "The Role of Methylation in Gene Expression",
@@ -273,6 +311,8 @@
273 }, 311 },
274 { 312 {
275 "is_archived": 1, 313 "is_archived": 1,
314 "created_at": "2016-09-08T11:55:58+0200",
315 "updated_at": "2016-09-08T11:57:16+0200",
276 "is_starred": 0, 316 "is_starred": 0,
277 "id": 53, 317 "id": 53,
278 "title": "E-Mail-Adresse kostenlos, FreeMail, De-Mail & Nachrichten", 318 "title": "E-Mail-Adresse kostenlos, FreeMail, De-Mail & Nachrichten",
@@ -287,6 +327,8 @@
287 }, 327 },
288 { 328 {
289 "is_archived": 1, 329 "is_archived": 1,
330 "created_at": "2016-09-08T11:55:58+0200",
331 "updated_at": "2016-09-08T11:57:16+0200",
290 "is_starred": 0, 332 "is_starred": 0,
291 "id": 48, 333 "id": 48,
292 "title": "OpenSSH Server on Arch Linux | DominicM test", 334 "title": "OpenSSH Server on Arch Linux | DominicM test",
@@ -302,6 +344,8 @@
302 }, 344 },
303 { 345 {
304 "is_archived": 1, 346 "is_archived": 1,
347 "created_at": "2016-09-08T11:55:58+0200",
348 "updated_at": "2016-09-08T11:57:16+0200",
305 "is_starred": 0, 349 "is_starred": 0,
306 "id": 39, 350 "id": 39,
307 "title": "Site Moved | Site Help", 351 "title": "Site Moved | Site Help",
@@ -316,6 +360,8 @@
316 }, 360 },
317 { 361 {
318 "is_archived": 1, 362 "is_archived": 1,
363 "created_at": "2016-09-08T11:55:58+0200",
364 "updated_at": "2016-09-08T11:57:16+0200",
319 "is_starred": 0, 365 "is_starred": 0,
320 "id": 38, 366 "id": 38,
321 "title": "#Maroc : le stylo anti-pédophiles EAGLE d’AMESYS est moins bien configuré que les faux-lowers Twitter du roi Mohammed VI", 367 "title": "#Maroc : le stylo anti-pédophiles EAGLE d’AMESYS est moins bien configuré que les faux-lowers Twitter du roi Mohammed VI",
@@ -331,6 +377,8 @@
331 }, 377 },
332 { 378 {
333 "is_archived": 1, 379 "is_archived": 1,
380 "created_at": "2016-09-08T11:55:58+0200",
381 "updated_at": "2016-09-08T11:57:16+0200",
334 "is_starred": 0, 382 "is_starred": 0,
335 "id": 3, 383 "id": 3,
336 "title": "Simple Cloud Infrastructure for Developers", 384 "title": "Simple Cloud Infrastructure for Developers",
diff --git a/tests/Wallabag/UserBundle/Mailer/AuthCodeMailerTest.php b/tests/Wallabag/UserBundle/Mailer/AuthCodeMailerTest.php
index f670c925..441d6519 100644
--- a/tests/Wallabag/UserBundle/Mailer/AuthCodeMailerTest.php
+++ b/tests/Wallabag/UserBundle/Mailer/AuthCodeMailerTest.php
@@ -37,7 +37,7 @@ class AuthCodeMailerTest extends \PHPUnit_Framework_TestCase
37 ); 37 );
38 $this->mailer = new \Swift_Mailer($transport); 38 $this->mailer = new \Swift_Mailer($transport);
39 39
40 $twigTemplate = <<<TWIG 40 $twigTemplate = <<<'TWIG'
41{% block subject %}subject{% endblock %} 41{% block subject %}subject{% endblock %}
42{% block body_html %}html body {{ code }}{% endblock %} 42{% block body_html %}html body {{ code }}{% endblock %}
43{% block body_text %}text body {{ support_url }}{% endblock %} 43{% block body_text %}text body {{ support_url }}{% endblock %}
diff --git a/var/SymfonyRequirements.php b/var/SymfonyRequirements.php
index 0a5de546..7e7723af 100644
--- a/var/SymfonyRequirements.php
+++ b/var/SymfonyRequirements.php
@@ -168,6 +168,9 @@ class PhpIniRequirement extends Requirement
168 */ 168 */
169class RequirementCollection implements IteratorAggregate 169class RequirementCollection implements IteratorAggregate
170{ 170{
171 /**
172 * @var Requirement[]
173 */
171 private $requirements = array(); 174 private $requirements = array();
172 175
173 /** 176 /**
@@ -265,7 +268,7 @@ class RequirementCollection implements IteratorAggregate
265 /** 268 /**
266 * Returns both requirements and recommendations. 269 * Returns both requirements and recommendations.
267 * 270 *
268 * @return array Array of Requirement instances 271 * @return Requirement[]
269 */ 272 */
270 public function all() 273 public function all()
271 { 274 {
@@ -275,7 +278,7 @@ class RequirementCollection implements IteratorAggregate
275 /** 278 /**
276 * Returns all mandatory requirements. 279 * Returns all mandatory requirements.
277 * 280 *
278 * @return array Array of Requirement instances 281 * @return Requirement[]
279 */ 282 */
280 public function getRequirements() 283 public function getRequirements()
281 { 284 {
@@ -292,7 +295,7 @@ class RequirementCollection implements IteratorAggregate
292 /** 295 /**
293 * Returns the mandatory requirements that were not met. 296 * Returns the mandatory requirements that were not met.
294 * 297 *
295 * @return array Array of Requirement instances 298 * @return Requirement[]
296 */ 299 */
297 public function getFailedRequirements() 300 public function getFailedRequirements()
298 { 301 {
@@ -309,7 +312,7 @@ class RequirementCollection implements IteratorAggregate
309 /** 312 /**
310 * Returns all optional recommendations. 313 * Returns all optional recommendations.
311 * 314 *
312 * @return array Array of Requirement instances 315 * @return Requirement[]
313 */ 316 */
314 public function getRecommendations() 317 public function getRecommendations()
315 { 318 {
@@ -326,7 +329,7 @@ class RequirementCollection implements IteratorAggregate
326 /** 329 /**
327 * Returns the recommendations that were not met. 330 * Returns the recommendations that were not met.
328 * 331 *
329 * @return array Array of Requirement instances 332 * @return Requirement[]
330 */ 333 */
331 public function getFailedRecommendations() 334 public function getFailedRecommendations()
332 { 335 {
@@ -376,7 +379,8 @@ class RequirementCollection implements IteratorAggregate
376 */ 379 */
377class SymfonyRequirements extends RequirementCollection 380class SymfonyRequirements extends RequirementCollection
378{ 381{
379 const REQUIRED_PHP_VERSION = '5.3.3'; 382 const LEGACY_REQUIRED_PHP_VERSION = '5.3.3';
383 const REQUIRED_PHP_VERSION = '5.5.9';
380 384
381 /** 385 /**
382 * Constructor that initializes the requirements. 386 * Constructor that initializes the requirements.
@@ -386,16 +390,26 @@ class SymfonyRequirements extends RequirementCollection
386 /* mandatory requirements follow */ 390 /* mandatory requirements follow */
387 391
388 $installedPhpVersion = phpversion(); 392 $installedPhpVersion = phpversion();
393 $requiredPhpVersion = $this->getPhpRequiredVersion();
389 394
390 $this->addRequirement( 395 $this->addRecommendation(
391 version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>='), 396 $requiredPhpVersion,
392 sprintf('PHP version must be at least %s (%s installed)', self::REQUIRED_PHP_VERSION, $installedPhpVersion), 397 'Vendors should be installed in order to check all requirements.',
393 sprintf('You are running PHP version "<strong>%s</strong>", but Symfony needs at least PHP "<strong>%s</strong>" to run. 398 'Run the <code>composer install</code> command.',
394 Before using Symfony, upgrade your PHP installation, preferably to the latest version.', 399 'Run the "composer install" command.'
395 $installedPhpVersion, self::REQUIRED_PHP_VERSION),
396 sprintf('Install PHP %s or newer (installed version is %s)', self::REQUIRED_PHP_VERSION, $installedPhpVersion)
397 ); 400 );
398 401
402 if (false !== $requiredPhpVersion) {
403 $this->addRequirement(
404 version_compare($installedPhpVersion, $requiredPhpVersion, '>='),
405 sprintf('PHP version must be at least %s (%s installed)', $requiredPhpVersion, $installedPhpVersion),
406 sprintf('You are running PHP version "<strong>%s</strong>", but Symfony needs at least PHP "<strong>%s</strong>" to run.
407 Before using Symfony, upgrade your PHP installation, preferably to the latest version.',
408 $installedPhpVersion, $requiredPhpVersion),
409 sprintf('Install PHP %s or newer (installed version is %s)', $requiredPhpVersion, $installedPhpVersion)
410 );
411 }
412
399 $this->addRequirement( 413 $this->addRequirement(
400 version_compare($installedPhpVersion, '5.3.16', '!='), 414 version_compare($installedPhpVersion, '5.3.16', '!='),
401 'PHP version must not be 5.3.16 as Symfony won\'t work properly with it', 415 'PHP version must not be 5.3.16 as Symfony won\'t work properly with it',
@@ -433,7 +447,7 @@ class SymfonyRequirements extends RequirementCollection
433 ); 447 );
434 } 448 }
435 449
436 if (version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>=')) { 450 if (false !== $requiredPhpVersion && version_compare($installedPhpVersion, $requiredPhpVersion, '>=')) {
437 $timezones = array(); 451 $timezones = array();
438 foreach (DateTimeZone::listAbbreviations() as $abbreviations) { 452 foreach (DateTimeZone::listAbbreviations() as $abbreviations) {
439 foreach ($abbreviations as $abbreviation) { 453 foreach ($abbreviations as $abbreviation) {
@@ -689,7 +703,7 @@ class SymfonyRequirements extends RequirementCollection
689 $this->addRecommendation( 703 $this->addRecommendation(
690 \Symfony\Component\Intl\Intl::getIcuDataVersion() === \Symfony\Component\Intl\Intl::getIcuVersion(), 704 \Symfony\Component\Intl\Intl::getIcuDataVersion() === \Symfony\Component\Intl\Intl::getIcuVersion(),
691 sprintf('intl ICU version installed on your system (%s) does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()), 705 sprintf('intl ICU version installed on your system (%s) does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()),
692 'To avoid internationalization data incosistencies upgrade the symfony/intl component.' 706 'To avoid internationalization data inconsistencies upgrade the symfony/intl component.'
693 ); 707 );
694 } 708 }
695 } 709 }
@@ -725,9 +739,9 @@ class SymfonyRequirements extends RequirementCollection
725 739
726 if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { 740 if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
727 $this->addRecommendation( 741 $this->addRecommendation(
728 $this->getRealpathCacheSize() > 1000, 742 $this->getRealpathCacheSize() >= 5 * 1024 * 1024,
729 'realpath_cache_size should be above 1024 in php.ini', 743 'realpath_cache_size should be at least 5M in php.ini',
730 'Set "<strong>realpath_cache_size</strong>" to e.g. "<strong>1024</strong>" in php.ini<a href="#phpini">*</a> to improve performance on windows.' 744 'Setting "<strong>realpath_cache_size</strong>" to e.g. "<strong>5242880</strong>" or "<strong>5M</strong>" in php.ini<a href="#phpini">*</a> may improve performance on Windows significantly in some cases.'
731 ); 745 );
732 } 746 }
733 747
@@ -778,4 +792,28 @@ class SymfonyRequirements extends RequirementCollection
778 return (int) $size; 792 return (int) $size;
779 } 793 }
780 } 794 }
795
796 /**
797 * Defines PHP required version from Symfony version.
798 *
799 * @return string|false The PHP required version or false if it could not be guessed
800 */
801 protected function getPhpRequiredVersion()
802 {
803 if (!file_exists($path = __DIR__.'/../composer.lock')) {
804 return false;
805 }
806
807 $composerLock = json_decode(file_get_contents($path), true);
808 foreach ($composerLock['packages'] as $package) {
809 $name = $package['name'];
810 if ('symfony/symfony' !== $name && 'symfony/http-kernel' !== $name) {
811 continue;
812 }
813
814 return (int) $package['version'][1] > 2 ? self::REQUIRED_PHP_VERSION : self::LEGACY_REQUIRED_PHP_VERSION;
815 }
816
817 return false;
818 }
781} 819}